@sme.up/ketchup 11.0.0-SNAPSHOT-20241118135127 → 11.0.0-SNAPSHOT-20241118143411

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 (165) hide show
  1. package/dist/cjs/{f-cell-2c5c4b63.js → f-cell-99c84f1c.js} +4 -4
  2. package/dist/cjs/{f-cell-2c5c4b63.js.map → f-cell-99c84f1c.js.map} +1 -1
  3. package/dist/cjs/{f-chip-c76e0caa.js → f-chip-29e9258a.js} +2 -2
  4. package/dist/cjs/{f-chip-c76e0caa.js.map → f-chip-29e9258a.js.map} +1 -1
  5. package/dist/cjs/{f-paginator-utils-e30b6e63.js → f-paginator-utils-af69bd51.js} +2 -2
  6. package/dist/cjs/{f-paginator-utils-e30b6e63.js.map → f-paginator-utils-af69bd51.js.map} +1 -1
  7. package/dist/cjs/{f-text-field-41132ecd.js → f-text-field-4226081f.js} +2 -2
  8. package/dist/cjs/{f-text-field-41132ecd.js.map → f-text-field-4226081f.js.map} +1 -1
  9. package/dist/cjs/index.cjs.js +1 -1
  10. package/dist/cjs/kup-accordion.cjs.entry.js +1 -1
  11. package/dist/cjs/kup-activity-timeline.cjs.entry.js +2 -2
  12. package/dist/cjs/kup-autocomplete_28.cjs.entry.js +6 -6
  13. package/dist/cjs/kup-box.cjs.entry.js +6 -6
  14. package/dist/cjs/kup-calendar.cjs.entry.js +2 -2
  15. package/dist/cjs/kup-card-list.cjs.entry.js +1 -1
  16. package/dist/cjs/kup-cell.cjs.entry.js +4 -4
  17. package/dist/cjs/kup-dashboard.cjs.entry.js +2 -2
  18. package/dist/cjs/{kup-data-table-helper-f228f568.js → kup-data-table-helper-00427a69.js} +2 -2
  19. package/dist/cjs/{kup-data-table-helper-f228f568.js.map → kup-data-table-helper-00427a69.js.map} +1 -1
  20. package/dist/cjs/kup-drawer.cjs.entry.js +1 -1
  21. package/dist/cjs/kup-echart.cjs.entry.js +1 -1
  22. package/dist/cjs/kup-editor.cjs.entry.js +1 -1
  23. package/dist/cjs/kup-family-tree.cjs.entry.js +1 -1
  24. package/dist/cjs/kup-grid.cjs.entry.js +1 -1
  25. package/dist/cjs/kup-htm.cjs.entry.js +1 -1
  26. package/dist/cjs/kup-iframe.cjs.entry.js +1 -1
  27. package/dist/cjs/kup-image-list.cjs.entry.js +4 -4
  28. package/dist/cjs/kup-input-panel.cjs.entry.js +4 -4
  29. package/dist/cjs/kup-lazy.cjs.entry.js +1 -1
  30. package/dist/cjs/kup-magic-box.cjs.entry.js +1 -1
  31. package/dist/cjs/{kup-manager-77611451.js → kup-manager-fe741ac9.js} +2 -2
  32. package/dist/cjs/{kup-manager-77611451.js.map → kup-manager-fe741ac9.js.map} +1 -1
  33. package/dist/cjs/kup-nav-bar.cjs.entry.js +1 -1
  34. package/dist/cjs/kup-numeric-picker.cjs.entry.js +2 -2
  35. package/dist/cjs/kup-pdf.cjs.entry.js +1 -1
  36. package/dist/cjs/kup-photo-frame.cjs.entry.js +1 -1
  37. package/dist/cjs/kup-planner.cjs.entry.js +2 -2
  38. package/dist/cjs/kup-probe.cjs.entry.js +1 -1
  39. package/dist/cjs/kup-qlik.cjs.entry.js +1 -1
  40. package/dist/cjs/kup-snackbar.cjs.entry.js +1 -1
  41. package/dist/cjs/kup-txt.cjs.entry.js +1 -1
  42. package/dist/cjs/kup-typography-list.cjs.entry.js +1 -1
  43. package/dist/cjs/kup-typography.cjs.entry.js +1 -1
  44. package/dist/components/kup-manager.js +1 -1
  45. package/dist/components/kup-manager.js.map +1 -1
  46. package/dist/esm/{f-cell-ed323876.js → f-cell-84b76695.js} +4 -4
  47. package/dist/esm/{f-cell-ed323876.js.map → f-cell-84b76695.js.map} +1 -1
  48. package/dist/esm/{f-chip-493f6e72.js → f-chip-cd564624.js} +2 -2
  49. package/dist/esm/{f-chip-493f6e72.js.map → f-chip-cd564624.js.map} +1 -1
  50. package/dist/esm/{f-paginator-utils-45b88cb0.js → f-paginator-utils-7fd2bb01.js} +2 -2
  51. package/dist/esm/{f-paginator-utils-45b88cb0.js.map → f-paginator-utils-7fd2bb01.js.map} +1 -1
  52. package/dist/esm/{f-text-field-234a66b4.js → f-text-field-66b6f8a6.js} +2 -2
  53. package/dist/esm/{f-text-field-234a66b4.js.map → f-text-field-66b6f8a6.js.map} +1 -1
  54. package/dist/esm/index.js +1 -1
  55. package/dist/esm/kup-accordion.entry.js +1 -1
  56. package/dist/esm/kup-activity-timeline.entry.js +2 -2
  57. package/dist/esm/kup-autocomplete_28.entry.js +6 -6
  58. package/dist/esm/kup-box.entry.js +6 -6
  59. package/dist/esm/kup-calendar.entry.js +2 -2
  60. package/dist/esm/kup-card-list.entry.js +1 -1
  61. package/dist/esm/kup-cell.entry.js +4 -4
  62. package/dist/esm/kup-dashboard.entry.js +2 -2
  63. package/dist/esm/{kup-data-table-helper-dc9ece8a.js → kup-data-table-helper-7807c3bc.js} +2 -2
  64. package/dist/esm/{kup-data-table-helper-dc9ece8a.js.map → kup-data-table-helper-7807c3bc.js.map} +1 -1
  65. package/dist/esm/kup-drawer.entry.js +1 -1
  66. package/dist/esm/kup-echart.entry.js +1 -1
  67. package/dist/esm/kup-editor.entry.js +1 -1
  68. package/dist/esm/kup-family-tree.entry.js +1 -1
  69. package/dist/esm/kup-grid.entry.js +1 -1
  70. package/dist/esm/kup-htm.entry.js +1 -1
  71. package/dist/esm/kup-iframe.entry.js +1 -1
  72. package/dist/esm/kup-image-list.entry.js +4 -4
  73. package/dist/esm/kup-input-panel.entry.js +4 -4
  74. package/dist/esm/kup-lazy.entry.js +1 -1
  75. package/dist/esm/kup-magic-box.entry.js +1 -1
  76. package/dist/esm/{kup-manager-0f056eae.js → kup-manager-e6854c15.js} +2 -2
  77. package/dist/esm/{kup-manager-0f056eae.js.map → kup-manager-e6854c15.js.map} +1 -1
  78. package/dist/esm/kup-nav-bar.entry.js +1 -1
  79. package/dist/esm/kup-numeric-picker.entry.js +2 -2
  80. package/dist/esm/kup-pdf.entry.js +1 -1
  81. package/dist/esm/kup-photo-frame.entry.js +1 -1
  82. package/dist/esm/kup-planner.entry.js +2 -2
  83. package/dist/esm/kup-probe.entry.js +1 -1
  84. package/dist/esm/kup-qlik.entry.js +1 -1
  85. package/dist/esm/kup-snackbar.entry.js +1 -1
  86. package/dist/esm/kup-txt.entry.js +1 -1
  87. package/dist/esm/kup-typography-list.entry.js +1 -1
  88. package/dist/esm/kup-typography.entry.js +1 -1
  89. package/dist/ketchup/index.esm.js +1 -1
  90. package/dist/ketchup/ketchup.esm.js +1 -1
  91. package/dist/ketchup/{p-f8982626.entry.js → p-00696d0b.entry.js} +2 -2
  92. package/dist/ketchup/{p-4e4f3c12.entry.js → p-02d83afd.entry.js} +2 -2
  93. package/dist/ketchup/{p-28a98448.entry.js → p-08a8d90e.entry.js} +2 -2
  94. package/dist/ketchup/{p-e7ba0039.entry.js → p-0f194063.entry.js} +2 -2
  95. package/dist/ketchup/{p-e5b89e72.entry.js → p-0f8be7d2.entry.js} +2 -2
  96. package/dist/ketchup/{p-941633cf.entry.js → p-10cea33b.entry.js} +2 -2
  97. package/dist/ketchup/{p-07101843.entry.js → p-1b23ecb9.entry.js} +2 -2
  98. package/dist/ketchup/{p-8b1f6d22.js → p-1f0bd3bc.js} +2 -2
  99. package/dist/ketchup/{p-8666c112.entry.js → p-1fd1da4a.entry.js} +2 -2
  100. package/dist/ketchup/{p-e4e7cb0a.entry.js → p-36f1f1f2.entry.js} +2 -2
  101. package/dist/ketchup/{p-18c2474c.entry.js → p-3a0e74d7.entry.js} +2 -2
  102. package/dist/ketchup/{p-e177845a.entry.js → p-4e8485bb.entry.js} +2 -2
  103. package/dist/ketchup/{p-4ac7f525.js → p-5403ec7d.js} +2 -2
  104. package/dist/ketchup/{p-6722ad32.entry.js → p-56ebec9a.entry.js} +2 -2
  105. package/dist/ketchup/{p-6a7aad42.entry.js → p-582719d0.entry.js} +2 -2
  106. package/dist/ketchup/{p-d88f2604.entry.js → p-6b510eea.entry.js} +2 -2
  107. package/dist/ketchup/{p-73b94f37.entry.js → p-7fd94ab9.entry.js} +2 -2
  108. package/dist/ketchup/{p-7f6331ba.entry.js → p-822300c4.entry.js} +2 -2
  109. package/dist/ketchup/{p-98d28887.entry.js → p-9466c7b2.entry.js} +2 -2
  110. package/dist/ketchup/{p-7c151495.entry.js → p-9b45f18d.entry.js} +2 -2
  111. package/dist/ketchup/{p-43d46909.entry.js → p-b2a20978.entry.js} +2 -2
  112. package/dist/ketchup/{p-2215ccf4.entry.js → p-c0aed6b3.entry.js} +2 -2
  113. package/dist/ketchup/{p-27163fd2.js → p-c398ed83.js} +2 -2
  114. package/dist/ketchup/{p-f00d7dff.js → p-c618c6fd.js} +2 -2
  115. package/dist/ketchup/p-c71c14ea.entry.js +2 -0
  116. package/dist/ketchup/{p-c88e7d76.entry.js.map → p-c71c14ea.entry.js.map} +1 -1
  117. package/dist/ketchup/{p-525b168f.entry.js → p-cda00e9e.entry.js} +2 -2
  118. package/dist/ketchup/{p-996ba080.entry.js → p-d073f545.entry.js} +2 -2
  119. package/dist/ketchup/{p-fb533065.entry.js → p-d26f1d41.entry.js} +2 -2
  120. package/dist/ketchup/{p-99171aba.js → p-da7ae266.js} +2 -2
  121. package/dist/ketchup/{p-013a555c.entry.js → p-e1c69d06.entry.js} +2 -2
  122. package/dist/ketchup/{p-15f54117.js → p-e1cf074e.js} +4 -4
  123. package/dist/ketchup/p-e1cf074e.js.map +1 -0
  124. package/dist/ketchup/{p-b2699d88.entry.js → p-ee8fc062.entry.js} +2 -2
  125. package/dist/ketchup/{p-5b8896da.entry.js → p-f1d7efa6.entry.js} +2 -2
  126. package/dist/ketchup/{p-dc8e1959.entry.js → p-f9e43ad1.entry.js} +2 -2
  127. package/dist/ketchup/{p-12c06de2.entry.js → p-fcce8e0d.entry.js} +2 -2
  128. package/dist/ketchup/{p-b896d5c4.entry.js → p-ff6a7fca.entry.js} +2 -2
  129. package/package.json +1 -1
  130. package/dist/ketchup/p-15f54117.js.map +0 -1
  131. package/dist/ketchup/p-c88e7d76.entry.js +0 -2
  132. /package/dist/ketchup/{p-f8982626.entry.js.map → p-00696d0b.entry.js.map} +0 -0
  133. /package/dist/ketchup/{p-4e4f3c12.entry.js.map → p-02d83afd.entry.js.map} +0 -0
  134. /package/dist/ketchup/{p-28a98448.entry.js.map → p-08a8d90e.entry.js.map} +0 -0
  135. /package/dist/ketchup/{p-e7ba0039.entry.js.map → p-0f194063.entry.js.map} +0 -0
  136. /package/dist/ketchup/{p-e5b89e72.entry.js.map → p-0f8be7d2.entry.js.map} +0 -0
  137. /package/dist/ketchup/{p-941633cf.entry.js.map → p-10cea33b.entry.js.map} +0 -0
  138. /package/dist/ketchup/{p-07101843.entry.js.map → p-1b23ecb9.entry.js.map} +0 -0
  139. /package/dist/ketchup/{p-8b1f6d22.js.map → p-1f0bd3bc.js.map} +0 -0
  140. /package/dist/ketchup/{p-8666c112.entry.js.map → p-1fd1da4a.entry.js.map} +0 -0
  141. /package/dist/ketchup/{p-e4e7cb0a.entry.js.map → p-36f1f1f2.entry.js.map} +0 -0
  142. /package/dist/ketchup/{p-18c2474c.entry.js.map → p-3a0e74d7.entry.js.map} +0 -0
  143. /package/dist/ketchup/{p-e177845a.entry.js.map → p-4e8485bb.entry.js.map} +0 -0
  144. /package/dist/ketchup/{p-4ac7f525.js.map → p-5403ec7d.js.map} +0 -0
  145. /package/dist/ketchup/{p-6722ad32.entry.js.map → p-56ebec9a.entry.js.map} +0 -0
  146. /package/dist/ketchup/{p-6a7aad42.entry.js.map → p-582719d0.entry.js.map} +0 -0
  147. /package/dist/ketchup/{p-d88f2604.entry.js.map → p-6b510eea.entry.js.map} +0 -0
  148. /package/dist/ketchup/{p-73b94f37.entry.js.map → p-7fd94ab9.entry.js.map} +0 -0
  149. /package/dist/ketchup/{p-7f6331ba.entry.js.map → p-822300c4.entry.js.map} +0 -0
  150. /package/dist/ketchup/{p-98d28887.entry.js.map → p-9466c7b2.entry.js.map} +0 -0
  151. /package/dist/ketchup/{p-7c151495.entry.js.map → p-9b45f18d.entry.js.map} +0 -0
  152. /package/dist/ketchup/{p-43d46909.entry.js.map → p-b2a20978.entry.js.map} +0 -0
  153. /package/dist/ketchup/{p-2215ccf4.entry.js.map → p-c0aed6b3.entry.js.map} +0 -0
  154. /package/dist/ketchup/{p-27163fd2.js.map → p-c398ed83.js.map} +0 -0
  155. /package/dist/ketchup/{p-f00d7dff.js.map → p-c618c6fd.js.map} +0 -0
  156. /package/dist/ketchup/{p-525b168f.entry.js.map → p-cda00e9e.entry.js.map} +0 -0
  157. /package/dist/ketchup/{p-996ba080.entry.js.map → p-d073f545.entry.js.map} +0 -0
  158. /package/dist/ketchup/{p-fb533065.entry.js.map → p-d26f1d41.entry.js.map} +0 -0
  159. /package/dist/ketchup/{p-99171aba.js.map → p-da7ae266.js.map} +0 -0
  160. /package/dist/ketchup/{p-013a555c.entry.js.map → p-e1c69d06.entry.js.map} +0 -0
  161. /package/dist/ketchup/{p-b2699d88.entry.js.map → p-ee8fc062.entry.js.map} +0 -0
  162. /package/dist/ketchup/{p-5b8896da.entry.js.map → p-f1d7efa6.entry.js.map} +0 -0
  163. /package/dist/ketchup/{p-dc8e1959.entry.js.map → p-f9e43ad1.entry.js.map} +0 -0
  164. /package/dist/ketchup/{p-12c06de2.entry.js.map → p-fcce8e0d.entry.js.map} +0 -0
  165. /package/dist/ketchup/{p-b896d5c4.entry.js.map → p-ff6a7fca.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"file":"kup-data-table-helper-dc9ece8a.js","mappings":";;;AASA;;;;;MAKa,iBAAkB,SAAQ,OAAO;;;;;;;IAO1C,kBAAkB,CAAC,UAAyB,EAAE,EAAE,MAAc;QAC1D,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KAC3D;;;;;;;IAOD,qBAAqB,CAAC,UAAyB,EAAE,EAAE,MAAc;QAC7D,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KAC1D;IAEO,mBAAmB,CACvB,UAAyB,EAAE,EAC3B,MAAc,EACd,GAAY;QAEZ,IAAI,KAAK,GAAW,EAAE,CAAC;QAEvB,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,OAAO,KAAK,CAAC;SAChB;QACD,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;QACrD,OAAO,KAAK,CAAC;KAChB;;;;;;;IAQD,mBAAmB,CACf,UAAyB,EAAE,EAC3B,MAAqB;QAErB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KAC5D;;;;;;;IAOD,sBAAsB,CAClB,UAAyB,EAAE,EAC3B,MAAqB;QAErB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KAC3D;;;;;;;IAOO,oBAAoB,CACxB,UAAyB,EAAE,EAC3B,MAAqB,EACrB,GAAY;QAEZ,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,SAAS,GAAW,IAAI,CAAC,mBAAmB,CAC5C,OAAO,EACP,MAAM,CAAC,IAAI,EACX,GAAG,CACN,CAAC;QACF,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YAC7C,OAAO,IAAI,CAAC;SACf;QACD,IAAI,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;YAC9D,OAAO,IAAI,CAAC;SACf;QACD,IAAI,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;KACf;;;;;;;IAOD,uBAAuB,CACnB,UAAyB,EAAE,EAC3B,MAAc;QAEd,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO,MAAM,CAAC;SACjB;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,OAAO,MAAM,CAAC;SACjB;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,OAAO,MAAM,CAAC;SACjB;QACD,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QAC3B,OAAO,MAAM,CAAC;KACjB;;;;;;;IAOD,gCAAgC,CAC5B,UAAyB,EAAE,EAC3B,MAAqB;QAErB,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACzE;IAED,mCAAmC,CAC/B,UAAyB,EAAE,EAC3B,MAAqB;QAErB,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACxE;IAEO,iCAAiC,CACrC,UAAyB,EAAE,EAC3B,MAAqB,EACrB,GAAY;QAEZ,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,EAAE;YAC3C,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,YAAY,GAAG,IAAI,CAAC,gCAAgC,CACpD,OAAO,EACP,MAAM,CAAC,IAAI,EACX,cAAc,CAAC,IAAI,EACnB,GAAG,CACN,CAAC;QACF,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACnD,OAAO,IAAI,CAAC;SACf;QACD,IAAI,UAAU,GAAG,IAAI,CAAC,gCAAgC,CAClD,OAAO,EACP,MAAM,CAAC,IAAI,EACX,cAAc,CAAC,EAAE,EACjB,GAAG,CACN,CAAC;QACF,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YAC/C,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;KAChB;;;;;;;IAOD,iBAAiB,CACb,UAAyB,EAAE,EAC3B,MAAc,EACd,aAAkC;QAElC,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO;SACV;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,MAAM,GAAG;gBACL,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;aACpB,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;SAC5B;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;SAC1B;QACD,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,CAAC,KAAK,IAAI,IAAI,EAAE;YACtD,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;SAC1B;aAAM;YACH,IACI,CAAC,OAAO,CAAC,wBAAwB,CAC7B,MAAM,CAAC,UAAU,EACjB,aAAa,CAAC,KAAK,CACtB,EACH;gBACE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;aAC/D;SACJ;KACJ;;;;;;;IAOD,oBAAoB,CAChB,UAAyB,EAAE,EAC3B,MAAc,EACd,SAAiB;QAEjB,IAAI,OAAO,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE;YACtC,OAAO;SACV;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,OAAO;SACV;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;SAC1B;QACD,IAAI,KAAK,GAAG,OAAO,CAAC,yBAAyB,CACzC,MAAM,CAAC,UAAU,EACjB,SAAS,CACZ,CAAC;QACF,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/C,IAAI,CAAC,IAAI,KAAK,EAAE;oBACZ,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAC1C;aACJ;YACD,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SAChC;KACJ;IAED,2BAA2B,CAAC,MAAqB;QAC7C,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACpD;IAED,gCAAgC,CAC5B,UAAyB,EAAE,EAC3B,MAAqB;QAErB,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACzE;IACD,mCAAmC,CAC/B,UAAyB,EAAE,EAC3B,MAAqB;QAErB,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACxE;IAEO,iCAAiC,CACrC,UAAyB,EAAE,EAC3B,MAAqB,EACrB,GAAY;QAEZ,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;YAC/D,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACnB;QAED,IAAI,MAAM,GAAG;YACT,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,CAAC,IAAI,EACX,cAAc,CAAC,IAAI,EACnB,GAAG,CACN;YACD,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,CAAC,IAAI,EACX,cAAc,CAAC,EAAE,EACjB,GAAG,CACN;SACJ,CAAC;QACF,OAAO,MAAM,CAAC;KACjB;IAED,+BAA+B,CAC3B,UAAyB,EAAE,EAC3B,MAAc,EACd,KAAqB;QAErB,OAAO,IAAI,CAAC,gCAAgC,CACxC,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,CACR,CAAC;KACL;IACD,kCAAkC,CAC9B,UAAyB,EAAE,EAC3B,MAAc,EACd,KAAqB;QAErB,OAAO,IAAI,CAAC,gCAAgC,CACxC,OAAO,EACP,MAAM,EACN,KAAK,EACL,IAAI,CACP,CAAC;KACL;IACO,gCAAgC,CACpC,UAAyB,EAAE,EAC3B,MAAc,EACd,KAAqB,EACrB,GAAY;QAEZ,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,GAAG,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE;YACnC,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE;YACjC,OAAO,KAAK,CAAC;SAChB;QACD,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;KAChB;IAED,uBAAuB,CACnB,UAAyB,EAAE,EAC3B,MAAc,EACd,SAAiB;QAEjB,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;KACnE;IACO,wBAAwB,CAC5B,UAAyB,EAAE,EAC3B,MAAc,EACd,SAAiB,EACjB,GAAY;QAEZ,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO;SACV;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,MAAM,GAAG;gBACL,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;aACpB,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;SAC5B;QACD,IAAI,GAAG,EAAE;YACL,MAAM,CAAC,YAAY;gBACf,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;SACxD;aAAM;YACH,MAAM,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;SACvE;KACJ;IAED,+BAA+B,CAC3B,UAAyB,EAAE,EAC3B,MAAc,EACd,SAAiB,EACjB,KAAqB;QAErB,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,IAAI,CACP,CAAC;KACL;IAEO,gCAAgC,CACpC,UAAyB,EAAE,EAC3B,MAAc,EACd,SAAiB,EACjB,KAAqB,EACrB,GAAY;QAEZ,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO;SACV;QACD,IAAI,MAAM,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,MAAM,GAAG;gBACL,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;aACpB,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;SAC5B;QACD,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE;YACzB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAChC;QACD,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE;YAC5B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;YACxB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACnC;QACD,IAAI,GAAG,EAAE;YACL,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;gBACrB,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;SACxD;aAAM;YACH,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAClB,SAAS,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;SACxD;KACJ;IAED,kBAAkB,CAAC,UAAyB,EAAE,EAAE,MAAc;QAC1D,IAAI,CAAC,wBAAwB,CACzB,OAAO,EACP,MAAM,EACN,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,EAC3C,KAAK,CACR,CAAC;QACF,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,EACN,IAAI,CAAC,kCAAkC,CACnC,OAAO,EACP,MAAM,EACN,cAAc,CAAC,IAAI,CACtB,EACD,cAAc,CAAC,IAAI,EACnB,KAAK,CACR,CAAC;QACF,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,EACN,IAAI,CAAC,kCAAkC,CACnC,OAAO,EACP,MAAM,EACN,cAAc,CAAC,EAAE,CACpB,EACD,cAAc,CAAC,EAAE,EACjB,KAAK,CACR,CAAC;KACL;IAED,mBAAmB,CAAC,UAAyB,EAAE,EAAE,MAAc;QAC3D,IAAI,CAAC,wBAAwB,CACzB,OAAO,EACP,MAAM,EACN,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,EACxC,IAAI,CACP,CAAC;QACF,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,EACN,IAAI,CAAC,+BAA+B,CAChC,OAAO,EACP,MAAM,EACN,cAAc,CAAC,IAAI,CACtB,EACD,cAAc,CAAC,IAAI,EACnB,IAAI,CACP,CAAC;QACF,IAAI,CAAC,gCAAgC,CACjC,OAAO,EACP,MAAM,EACN,IAAI,CAAC,+BAA+B,CAChC,OAAO,EACP,MAAM,EACN,cAAc,CAAC,EAAE,CACpB,EACD,cAAc,CAAC,EAAE,EACjB,IAAI,CACP,CAAC;KACL;IAED,wBAAwB,CACpB,UAAyB,EAAE,EAC3B,MAAqB;QAErB,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,QAAQ,GAAG,IAAI,CAAC,gCAAgC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpE,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,IAAI,WAAW,GAAG,kBAAkB,CAChC,SAAS,EACT,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,CAClB,CAAC;QACF,IAAI,SAAS,IAAI,EAAE,EAAE;YACjB,SAAS,GAAG,OAAO,CAAC;SACvB;QACD,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;YACrC,WAAW;gBACP,SAAS;oBACT,MAAM;oBACN,kBAAkB,CACd,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAC7B,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,CAClB;oBACD,GAAG,CAAC;YACR,SAAS,GAAG,OAAO,CAAC;SACvB;QACD,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;YACnC,WAAW;gBACP,SAAS;oBACT,MAAM;oBACN,kBAAkB,CACd,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAC3B,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,CAClB;oBACD,GAAG,CAAC;YACR,SAAS,GAAG,OAAO,CAAC;SACvB;QAED,SAAS,GAAG,EAAE,CAAC;QACf,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACjB,GAAG,IAAI,SAAS,GAAG,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAClD,SAAS,GAAG,MAAM,CAAC;SACtB,CAAC,CAAC;QAEH,IAAI,GAAG,IAAI,EAAE,EAAE;YACX,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YACtB,IAAI,WAAW,IAAI,EAAE,EAAE;gBACnB,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC;aACvB;SACJ;QACD,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC;QACxB,OAAO,GAAG,CAAC;KACd;;;;;;IAOD,YAAY,CAAC,UAAyB,EAAE,EAAE,MAAc;QACpD,OAAO,CAAC,MAAM,CAAC,GAAG;YACd,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;SACpB,CAAC;KACL;;;ACrjBL;;;;IAIY;AAAZ,WAAY,YAAY;IACpB,4GAA4F,CAAA;IAC5F,sFAAsE,CAAA;IACtE,8DAA8C,CAAA;IAC9C,4GAA4F,CAAA;IAC5F,mHAAmG,CAAA;IACnG,0oBAA0nB,CAAA;IAC1nB,oEAAoD,CAAA;IACpD,yIAAyH,CAAA;IACzH,6KAA6J,CAAA;IAC7J,4DAA4C,CAAA;IAC5C,iFAAiE,CAAA;IACjE,qEAAqD,CAAA;IACrD,mEAAmD,CAAA;IACnD,mOAAmN,CAAA;IACnN,wFAAwE,CAAA;IACxE,wHAAwG,CAAA;IACxG,yEAAyD,CAAA;IACzD,+DAA+C,CAAA;IAC/C,4EAA4D,CAAA;IAC5D,iEAAiD,CAAA;IACjD,wGAAwF,CAAA;IACxF,2DAA2C,CAAA;IAC3C,4BAAY,CAAA;IACZ,0BAAU,CAAA;IACV,8DAA8C,CAAA;IAC9C,kWAAkV,CAAA;AACtV,CAAC,EA3BW,YAAY,KAAZ,YAAY,QA2BvB;AAYD;;;;MAIa,kBAAkB,GAAG,cAAc;IAiBpC;AAAZ,WAAY,oBAAoB;IAC5B,6CAAqB,CAAA;IACrB,qCAAa,CAAA;AACjB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB;;ACjDhC,MAAMA,KAAG,GAAW,QAAQ,CAAC,eAAyB,CAAC;AACvD,MAAM,UAAU,GAAeA,KAAG,CAAC,OAAO;MACpCA,KAAG,CAAC,OAAO,CAAC,OAAO;MACnB,IAAI,UAAU,EAAE,CAAC;AACvB,MAAM,OAAO,GAAYA,KAAG,CAAC,OAAO,GAAGA,KAAG,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;AAExE;;;;;MAKa,WAAY,SAAQ,OAAO;IACpC,wBAAwB,CACpB,SAAsB,EACtB,WAAmB,EACnB,QAAkB;QAElB,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC,+BAA+B,CACvC,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,GAAG,EACb,WAAW,EACX,QAAQ,CACX,CAAC;KACL;IAED,2BAA2B,CACvB,SAAsB,EACtB,WAAmB,EACnB,QAAkB;QAElB,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;YAChB,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC,+BAA+B,CACvC,SAAS,CAAC,GAAG,CAAC,CAAC,EACf,SAAS,CAAC,GAAG,EACb,WAAW,EACX,QAAQ,CACX,CAAC;KACL;IAED,cAAc,CACV,CAAa,EACb,UAAyB,EAAE,EAC3B,eAAuB,EAAE,EACzB,sBAA+B,KAAK,EACpC,UAA2B,EAAE,EAC7B,aAAiC;QAEjC,OAAO,IAAI,CAAC,iBAAiB,CACzB,CAAC,CAAC,KAAK,EACP,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,aAAa,CAChB,CAAC;KACL;IAED,iBAAiB,CACb,KAAsB,EACtB,UAAyB,EAAE,EAC3B,eAAuB,EAAE,EACzB,sBAA+B,KAAK,EACpC,UAA2B,EAAE,EAC7B,aAAiC;QAEjC,IAAI,mBAAmB,EAAE;YACrB,IAAI,QAAQ,GAAG,IAAI,CAAC;;YAEpB,IAAI,OAAO,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClD,QAAQ,GAAG,KAAK,CAAC;gBACjB,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;;gBAG5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,EAAE;wBAC7B,SAAS;qBACZ;oBACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,IAAI,IAAI,IAAI,EAAE;wBACd,SAAS;qBACZ;oBACD,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CACrC,IAAI,CAAC,KAAK,EACV,YAAY,CACf,CAAC;oBACF,IAAI,cAAc,GAAG,sBAAsB,CACvC,OAAO,CAAC,CAAC,CAAC,EACV,IAAI,CACP,CAAC;oBACF,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE;wBAC9B,QAAQ;4BACJ,QAAQ;gCACR,IAAI,CAAC,yBAAyB,CAC1B,cAAc,EACd,YAAY,CACf,CAAC;qBACT;oBACD,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;wBACxC,MAAM;qBACT;oBACD,IAAI,QAAQ,IAAI,KAAK,IAAI,iBAAiB,EAAE;wBACxC,MAAM;qBACT;iBACJ;aACJ;YACD,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO,KAAK,CAAC;aAChB;SACJ;QAED,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;SAC3C;;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE;YACnD,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE;gBACP,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,WAAW,GAAG,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACjE,IAAI,QAAQ,GAAG,aAAa,CAAC,gCAAgC,CACzD,OAAO,EACP,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAChC,CAAC;YAEF,MAAM,iBAAiB,GACnB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YACpE,IAAI,EAAE,GAAG,iBAAiB,CAAC;YAC3B,IACI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9B,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5B,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5B,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EACnC;gBACE,EAAE,GAAG,IAAI,CAAC,2BAA2B,CACjC,IAAI,EACJ,WAAW,EACX,QAAQ,CACX,CAAC;aACL;YAED,IAAI,iBAAiB,EAAE;gBACnB,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;oBACZ,OAAO,KAAK,CAAC;iBAChB;aACJ;iBAAM;gBACH,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;oBACZ,OAAO,KAAK,CAAC;iBAChB;aACJ;YAED,IAAI,YAAY,GAAG,aAAa,CAAC,uBAAuB,CACpD,OAAO,EACP,GAAG,CACN,CAAC;YACF,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC1B,SAAS;aACZ;YACD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE;oBAChC,SAAS;iBACZ;gBACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;oBACpB,IACI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;wBAC/B,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAC/B;wBACE,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM;qBACT;iBACJ;gBACD,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;oBAClB,IACI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;wBAC/B,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAC/B;wBACE,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM;qBACT;iBACJ;aACJ;YACD,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,OAAO,IAAI,CAAC;KACf;IAED,UAAU,CACN,UAAyB,EAAE,EAC3B,OAAwB,EACxB,aAAiC;QAEjC,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;SAC3C;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,GAAG,GAAkB,IAAI,CAAC;YAC9B,IAAI,GAAG,KAAK,kBAAkB,EAAE;gBAC5B,GAAG,GAAG;oBACF,IAAI,EAAE,kBAAkB;oBACxB,KAAK,EAAE,EAAE;iBACZ,CAAC;aACL;iBAAM;gBACH,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;aACvC;YACD,IAAI,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACjD,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;KAChB;;;;;;;;;;;IAYD,UAAU,CACN,OAA0B,EAAE,EAC5B,UAAyB,EAAE,EAC3B,eAAuB,EAAE,EACzB,UAA2B,EAAE,EAC7B,aAAiC;QAEjC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE,CAAC;SACb;;QAGD,IAAI,YAAY,GAAsB,EAAE,CAAC;QACzC,MAAM,mBAAmB,GAAY,CAAC,EAAE,YAAY,IAAI,OAAO,CAAC,CAAC;QAEjE,IACI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;YAChD,mBAAmB,EACrB;YACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,CAAC,GAAe,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC5B,IACI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACrC,IAAI,CAAC,cAAc,CACf,CAAC,EACD,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,aAAa,CAChB,EACH;oBACE,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBACzC;aACJ;SACJ;aAAM;YACH,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;SAC5B;QAED,OAAO,YAAY,CAAC;KACvB;IAED,eAAe,CACX,IAA4B,EAC5B,MAAqB,EACrB,iBAAyB,EACzB,aAAiC;QAEjC,IAAI,MAAM,GAA0B,IAAI,KAAK,EAAE,CAAC;QAChD,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,aAAa,GAAG,IAAI,iBAAiB,EAAE,CAAC;SAC3C;QACD,IAAI,KAAK,GAAG,aAAa,CAAC,qBAAqB,CAC3C,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,IAAI,CACd,CAAC;QACF,IAAI,QAAQ,GAAG,aAAa,CAAC,mCAAmC,CAC5D,IAAI,CAAC,OAAO,EACZ,MAAM,CACT,CAAC;QACF,IAAI,UAAU,GAAG,aAAa,CAAC,uBAAuB,CAClD,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,IAAI,CACd,CAAC;QAEF,IACI,MAAM,CAAC,eAAe,IAAI,IAAI;YAC9B,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EACnC;YACE,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO;gBACnC,IAAI,CAAC,GAAG,OAAO,CAAC;gBAChB,IACI,OAAO,CAAC,wBAAwB,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC/C,KAAK,IAAI,EAAE;oBACX,aAAa,CAAC,+BAA+B,CACzC,CAAC,EACD,MAAM,CAAC,GAAG,EACV,KAAK,EACL,QAAQ,CACX,EACH;oBACE,MAAM,CAAC,IAAI,CAAC;wBACR,KAAK,EAAE,CAAC;wBACR,cAAc,EAAE,kBAAkB,CAC9B,CAAC,EACD,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,CAClB;qBACJ,CAAC,CAAC;iBACN;aACJ,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACjB;;;QAID,IAAI,UAAU,qBAAuB,IAAI,CAAC,OAAO,CAAE,CAAC;QAEpD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;YACtB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,QAAQ;SACxB,CAAC;QAEF,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CACzB,IAAI,CAAC,OAAO,EAAE,EACd,UAAU,EACV,iBAAiB,EACjB,IAAI,CAAC,iBAAiB,EAAE,EACxB,aAAa,CAChB,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9B;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KACzE;;;AC1WL,MAAM,GAAG,GAAW,QAAQ,CAAC,eAAyB,CAAC;SAEvC,QAAQ,CACpB,OAA+B,EAAE,EACjC,OAA0B,EAAE;IAE5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,OAAO,EAAE,CAAC;KACb;;IAGD,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QACf,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACpC;;IAGD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;QAE5B,OAAO,IAAI,CAAC;KACf;;IAGD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;IAGpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAmB,EAAE,EAAmB;QAC/D,IAAI,WAAW,EAAE;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE7C,IAAI,OAAO,KAAK,CAAC,EAAE;;oBAEf,OAAO,OAAO,CAAC;iBAClB;aACJ;;YAGD,OAAO,CAAC,CAAC;SACZ;aAAM;YACH,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,SAAS,aAAa,CAClB,OAA+B,EAAE,EACjC,OAA0B,EAAE;IAE5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC5B,OAAO,EAAE,CAAC;KACb;;IAGD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;;IAGzC,IAAI,UAAU,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEpD,IAAI,CAAC,UAAU,EAAE;QACb,UAAU,GAAG;YACT,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACvB,CAAC;KACL;;IAGD,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;;QAEb,MAAM,KAAK,GAAqB;YAC5B,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE;SACrB,CAAC;QAEF,MAAM,KAAK,GAAqB;YAC5B,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE;SACrB,CAAC;QAEF,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;KACzD,CAAC,CAAC;;IAGH,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG;QACb,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC3D,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACpB,SAAiB,EAAE,EACnB,OAA0B,EAAE;IAE5B,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACvC,OAAO,IAAI,CAAC;KACf;IAED,KAAK,IAAI,UAAU,IAAI,IAAI,EAAE;QACzB,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE;YAC9B,OAAO,UAAU,CAAC;SACrB;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAChB,EAAmB,EACnB,EAAmB,EACnB,OAAmB;IAEnB,MAAM,KAAK,GAAqB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,KAAK,GAAqB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;QAClB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,CAAC,CAAC,CAAC;KACb;IAED,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED;AACA;;;;;;;;;;SAWgB,UAAU,CACtB,OAA+B,EAAE,EACjC,UAAyB,EAAE,EAC3B,eAAuB,EAAE,EACzB,UAA2B,EAAE,EAC7B,aAAiC,EACjC,WAAyB;IAEzB,IAAI,WAAW,IAAI,IAAI,EAAE;QACrB,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;KACnC;IAED,OAAO,WAAW,CAAC,UAAU,CACzB,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,OAAO,EACP,aAAa,CAChB,CAAC;AACN,CAAC;SAEe,SAAS,CACrB,UAA2B,EAAE,EAC7B,OAA0B,EAAE,EAC5B,SAAwB,EAAE,EAC1B,SAAoB,EAAE;IAEtB,IAAI,CAAC,IAAI,EAAE;QACP,OAAO,EAAE,CAAC;KACb;IAED,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACpE,OAAO,IAAI,CAAC;KACf;;IAGD,MAAM,YAAY,GAAgC,EAAE,CAAC;;IAGrD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE;QACzC,KAAK,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;YACjC,IAAI,IAAI,KAAK,MAAM,EAAE;;gBAEjB,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC3B,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;KAChB,CAAC,CAAC;IAEH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;;QAE1B,OAAO,IAAI,CAAC;KACf;;IAGD,MAAM,SAAS,GAA2B,EAAE,CAAC;;IAG7C,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAoB;;QAE9B,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;;QAEzC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEnC,IAAI,IAAI,EAAE;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACpD,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAC7B,IAAI,QAAQ,GAAoB,IAAI,CAAC;;YAErC,KAAK,IAAI,eAAe,IAAI,SAAS,EAAE;gBACnC,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE;oBACrD,QAAQ,GAAG,eAAe,CAAC;oBAC3B,MAAM;iBACT;aACJ;YACD,IAAI,QAAQ,KAAK,IAAI,EAAE;;gBAEnB,QAAQ,GAAG;oBACP,KAAK,EAAE;wBACH,EAAE,EAAE,SAAS;wBACb,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,UAAU;wBAClB,WAAW,EAAE,YAAY,CAAC,UAAU,CAAC;wBACrC,QAAQ,EAAE,KAAK;wBACf,KAAK,EAAE,mBAAmB;wBAC1B,QAAQ,EAAE,EAAE;wBACZ,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,MAAM,EAAE,EAAE;qBACb;oBACD,KAAK,EAAE,EAAE;iBACZ,CAAC;;gBAEF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5B;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;;gBAE7B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,QAAQ,EAAE;oBACV,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACtD,MAAM,uBAAuB,GAAG,sBAAsB,CAClD,MAAM,EACN,QAAQ,CACX,CAAC;oBACF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;;oBAErC,IAAI,eAAe,GAAoB,IAAI,CAAC;oBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;wBAE1C,IAAI,UAAU,KAAK,uBAAuB,EAAE;4BACxC,eAAe,GAAG,UAAU,CAAC;4BAC7B,MAAM;yBACT;qBACJ;oBACD,IAAI,CAAC,eAAe,EAAE;wBAClB,eAAe,GAAG;4BACd,KAAK,EAAE,EAAE;4BACT,KAAK,EAAE;gCACH,EAAE,EAAE,aAAa;gCACjB,MAAM,EAAE,QAAQ;gCAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;gCACvC,QAAQ,EAAE,EAAE;gCACZ,QAAQ,EAAE,KAAK;gCACf,KAAK,EAAE,uBAAuB;gCAC9B,MAAM,EAAE,EAAE;gCACV,GAAG,EAAE,QAAQ,CAAC,GAAG;6BACpB;yBACJ,CAAC;wBACF,aAAa,CAAC,eAAe,CAAC,CAAC;wBAC/B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBACjD;oBACD,QAAQ,GAAG,eAAe,CAAC;iBAC9B;aACJ;;YAED,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAElC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;SACxD;KACJ,CAAC,CAAC;IAEH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACrD,4BAA4B,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnE,4BAA4B,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhE,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CACrB,QAAyB,EACzB,MAAiB,EACjB,QAAyB,EACzB,WAAmB;IAEnB,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE;QACtB,OAAO;KACV;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACnB,OAAO;KACV;IAED,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,IAAI,EAAE;YACN,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE9B,QAAQ,SAAS;gBACb,KAAK,SAAS,CAAC,KAAK;oBAChB,IAAI,iBAAiB,GACjB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC;;oBAEjD,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;oBACnC,OAAO,MAAM,IAAI,IAAI,EAAE;wBACnB,IAAI,kBAAkB,GAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC;wBAChD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;qBAChC;oBACD,MAAM;gBACV,KAAK,SAAS,CAAC,QAAQ;oBACnB,IAAI,SAAS,CAAC;oBACd,IAAI,SAAS,EAAE;wBACX,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7C,CAAC;qBACL;yBAAM;wBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;qBAC1B;oBACD,IAAI,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACnD,IAAI,CAAC,aAAa,EAAE;wBAChB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;wBACpC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;wBACzC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBACvD;yBAAM;wBACH,IAAI,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;wBACvD,IAAI,CAAC,YAAY,EAAE;;4BAEf,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BACzC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;yBACvD;6BAAM;;4BAEH,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;yBAChC;qBACJ;;oBAED,IAAI,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC3C,OAAO,cAAc,IAAI,IAAI,EAAE;;wBAE3B,IAAI,mBAAmB,GACnB,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACzC,IAAI,CAAC,mBAAmB,EAAE;4BACtB,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;4BAC1C,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BAC/C,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1C,SAAS,CACZ,CAAC;yBACL;6BAAM;4BACH,IAAI,kBAAkB,GAClB,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC9C,IAAI,CAAC,kBAAkB,EAAE;;gCAErB,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gCAC/C,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1C,SAAS,CACZ,CAAC;6BACL;iCAAM;;gCAEH,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;6BACtC;yBACJ;;wBAED,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;qBAChD;oBACD,MAAM;gBACV,KAAK,SAAS,CAAC,GAAG,CAAC;gBACnB,KAAK,SAAS,CAAC,OAAO;oBAClB,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;wBACzB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7C,CAAC;wBAEF,MAAM,iBAAiB,GACnB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBACpC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;4BACtB,SAAS,GAAG,iBAAiB,CAAC;;wBAElC,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;wBACnC,OAAO,MAAM,IAAI,IAAI,EAAE;4BACnB,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAChC,CAAC;4BACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gCACpB,SAAS,GAAG,gBAAgB,CAAC;4BAEjC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;yBAChC;qBACJ;oBACD,MAAM;;gBAEV,KAAK,SAAS,CAAC,GAAG;oBACd,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;wBACzB,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACnD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7C,CAAC;wBACF,IAAI,eAAe,EAAE;4BACjB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CACjC,eAAe,EACf,SAAS,CACZ,CAAC;yBACL;6BAAM;;4BAEH,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;yBAC1C;;wBAED,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;wBACnC,OAAO,MAAM,IAAI,IAAI,EAAE;4BACnB,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BAClD,IAAI,gBAAgB,EAAE;gCAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAC/B,gBAAgB,EAChB,SAAS,CACZ,CAAC;6BACL;iCAAM;;gCAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;6BACxC;4BACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;yBAChC;qBACJ;yBAAM,IACH,IAAI,CAAC,KAAK;wBACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACtC;wBACE,IACI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CACxC,IAAI,CAAC,KAAK,CACb,EACH;4BACE,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACnD,IAAI,eAAe,EAAE;gCACjB,IAAI,OAAO,GAAG,EAAE,CAAC;gCACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCACxB,OAAO,CAAC,IAAI,CACR,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAC7C,CAAC;gCACF,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oCACtB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAC9B,eAAe,CAAC,QAAQ,CAC3B,CAAC;6BACT;iCAAM;gCACH,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oCACtB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,SAAS,EACT,eAAe,CAAC,QAAQ,CAC3B,CAAC;6BACT;;4BAED,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;4BACnC,OAAO,MAAM,IAAI,IAAI,EAAE;gCACnB,MAAM,gBAAgB,GAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gCAC7B,IAAI,gBAAgB,EAAE;oCAClB,IAAI,OAAO,GAAG,EAAE,CAAC;oCACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oCACxB,OAAO,CAAC,IAAI,CACR,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CACrB,gBAAgB,CACnB,CACJ,CAAC;oCACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;wCACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAC9B,eAAe,CAAC,QAAQ,CAC3B,CAAC;iCACT;qCAAM;;oCAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;wCACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,SAAS,EACT,eAAe,CAAC,QAAQ,CAC3B,CAAC;iCACT;gCACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;6BAChC;yBACJ;qBACJ;oBACD,MAAM;;gBAEV,KAAK,SAAS,CAAC,GAAG;oBACd,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;wBACzB,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACnD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7C,CAAC;wBACF,IAAI,eAAe,EAAE;4BACjB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CACjC,eAAe,EACf,SAAS,CACZ,CAAC;yBACL;6BAAM;;4BAEH,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;yBAC1C;;wBAED,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;wBACnC,OAAO,MAAM,IAAI,IAAI,EAAE;4BACnB,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BAClD,IAAI,gBAAgB,EAAE;gCAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAC/B,gBAAgB,EAChB,SAAS,CACZ,CAAC;6BACL;iCAAM;;gCAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;6BACxC;4BACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;yBAChC;qBACJ;yBAAM,IACH,IAAI,CAAC,KAAK;wBACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACtC;wBACE,IACI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CACxC,IAAI,CAAC,KAAK,CACb,EACH;4BACE,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACnD,IAAI,eAAe,EAAE;gCACjB,IAAI,OAAO,GAAG,EAAE,CAAC;gCACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gCACxB,OAAO,CAAC,IAAI,CACR,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAC7C,CAAC;gCACF,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oCACtB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAC9B,eAAe,CAAC,QAAQ,CAC3B,CAAC;6BACT;iCAAM;gCACH,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oCACtB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,SAAS,EACT,eAAe,CAAC,QAAQ,CAC3B,CAAC;6BACT;;4BAED,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;4BACnC,OAAO,MAAM,IAAI,IAAI,EAAE;gCACnB,MAAM,gBAAgB,GAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gCAC7B,IAAI,gBAAgB,EAAE;oCAClB,IAAI,OAAO,GAAG,EAAE,CAAC;oCACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oCACxB,OAAO,CAAC,IAAI,CACR,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CACrB,gBAAgB,CACnB,CACJ,CAAC;oCACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;wCACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAC9B,eAAe,CAAC,QAAQ,CAC3B,CAAC;iCACT;qCAAM;;oCAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;wCACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,SAAS,EACT,eAAe,CAAC,QAAQ,CAC3B,CAAC;iCACT;gCACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;6BAChC;yBACJ;qBACJ;oBACD,MAAM;gBACV,SAAS;oBACL,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;qBACpD;oBACD,MAAM;iBACT;aACJ;SACJ;KACJ,CAAC,CAAC;AACP,CAAC;AAED,SAAS,oBAAoB,CACzB,SAAiC,EACjC,MAAiB,EACjB,WAAmB;IAEnB,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE;QACvB,OAAO;KACV;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACpE,OAAO;KACV;IAED,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,SAAS;aACJ,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;aACxD,OAAO,CAAC,CAAC,QAAQ,KACd,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAC3D,CAAC;KACT;AACL,CAAC;AAED,SAAS,4BAA4B,CACjC,SAAiC,EACjC,IAAe,EACf,MAAiB;IAEjB,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE;QACvB,OAAO;KACV;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACpE,OAAO;KACV;IAED,IAAI,YAAY,CAAC;IAEjB,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;QAC3B,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1E;IACD,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE;QACxB,YAAY,GAAG,IAAI,CAAC,MAAM,CACtB,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CACpD,CAAC;KACL;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,SAAS;aACJ,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;aACxD,OAAO,CAAC,CAAC,QAAQ,KACd,2BAA2B,CACvB,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,MAAM,CACT,CACJ,CAAC;KACT;AACL,CAAC;AAED,SAAS,mBAAmB,CACxB,QAAyB,EACzB,YAA2B,EAC3B,WAAmB;IAEnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO;KACV;IAED,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;YACnB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;SACzD,CAAC,CAAC;KACN;IAED,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG;QACrB,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;KAC3D,CAAC,CAAC;AACP,CAAC;AAED;;;AAGA,SAAS,2BAA2B,CAChC,GAAoB,EACpB,IAAe,EACf,YAA2B,EAC3B,MAAiB;IAEjB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;;IAGrB,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;YACnB,YAAY,IAAI,2BAA2B,CACvC,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,MAAM,CACT,CAAC;SACL,CAAC,CAAC;KACN;SAAM;QACH,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;KAClC;;IAED,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG;QACrB,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE;YAC3B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;SAChE;QACD,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE;YACxB,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3D,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CACpD,OAAO,EACP,GAAG,CAAC,KAAK,CAAC,MAAM,CACnB,CAAC;SACL;KACJ,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACxB,CAAC;SAEe,aAAa,CACzB,OAA6B,EAC7B,IAA4B;IAE5B,IAAI,IAAI,EAAE;QACN,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,CAAC,GAAoB;YAC9B,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM;gBACnB,IAAI,GAAG,CAAC,KAAK,EAAE;oBACX,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;wBAEjC,IAAI,CAAC,GAAG,GAAG;4BACP,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;4BACf,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;4BACf,CAAC,EAAE,IAAI,CAAC,KAAK;yBAChB,CAAC;qBACL;iBACJ;aACJ,CAAC,CAAC;SACN,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;KACzB;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;SAEe,UAAU,CACtB,OAA+B,EAAE,EACjC,SAAoB,EAAE;IAEtB,IACI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAC7C;QACE,OAAO,EAAE,CAAC;KACb;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,SAAS,GAA6B,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAa,IAAI,KAAK,EAAE,CAAC;;IAG1C,IAAI,SAAS,GACT,IAAI,CAAC,MAAM,KAAK,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE;QACX,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,MAAM,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACvE;SAAM;QACH,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;YACzB,IAAI,CAAC,MAAM,CACP,CAAC,GAAG,KACA,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/C,CAAC,OAAO,CAAC,CAAC,GAAG;;gBAEV,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,IAAI,EAAE;oBACN,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,QAAQ,EAAE;wBACpC,IAAI,SAAS,CAAC;wBACd,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;4BACxC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7C,CAAC;yBACL;6BAAM;4BACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;yBAC1B;wBACD,IAAI,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;wBACpC,IAAI,CAAC,YAAY,EAAE;;4BAEf,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BACtB,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;yBACpC;6BAAM;;4BAEH,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;yBAChC;qBACJ;yBAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;wBAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAC7C,CAAC;wBACF,IAAI,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACxC,QAAQ,IAAI;;4BAER,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG;gCAC9B,IAAI,kBAAkB,EAAE;oCACpB,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,kBAAkB,EAClB,SAAS,CACZ,CAAC;iCACL;qCAAM;oCACH,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;iCAC9B;gCACD,MAAM;4BACV,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG;gCAC9B,IAAI,kBAAkB,EAAE;oCACpB,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,kBAAkB,EAClB,SAAS,CACZ,CAAC;iCACL;qCAAM;oCACH,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;iCAC9B;gCACD,MAAM;4BACV;;gCAEI,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gCACzC,SAAS,CAAC,GAAG,CAAC;oCACV,SAAS;wCACT,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CACtB,kBAAkB,CACrB,CAAC;yBACb;;qBAEJ;yBAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;wBAC7C,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;4BAChC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBACzB;wBACD,IACI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CACxC,IAAI,CAAC,KAAK,CACb,EACH;4BACE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACtC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CACxC,CAAC;4BACF,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC;kCACnC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAC5C;kCACD,IAAI,CAAC;4BACX,QAAQ,IAAI;gCACR,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG;oCAC9B,IAAI,kBAAkB,EAAE;wCACpB,IAAI,OAAO,GAAG,EAAE,CAAC;wCACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wCACxB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;wCACjC,SAAS,CAAC,GAAG,CAAC;4CACV,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAC9B,eAAe,CAAC,QAAQ,CAC3B,CAAC;qCACT;yCAAM;wCACH,SAAS,CAAC,GAAG,CAAC;4CACV,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,SAAS,EACT,eAAe,CAAC,QAAQ,CAC3B,CAAC;qCACT;oCACD,MAAM;gCACV,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,GAAG;oCAC9B,IAAI,kBAAkB,EAAE;wCACpB,IAAI,OAAO,GAAG,EAAE,CAAC;wCACjB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wCACxB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;wCACjC,SAAS,CAAC,GAAG,CAAC;4CACV,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAC9B,eAAe,CAAC,QAAQ,CAC3B,CAAC;qCACT;yCAAM;wCACH,SAAS,CAAC,GAAG,CAAC;4CACV,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CACpB,SAAS,EACT,eAAe,CAAC,QAAQ,CAC3B,CAAC;qCACT;oCACD,MAAM;6BAGb;yBACJ;qBACJ;iBACJ;gBACD,IACI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,QAAQ,EACpC;;oBAEE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBAChD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;iBACzB;aACJ,CAAC,CAAC;SACN,CAAC,CAAC;KACN;;IAED,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;QAClB,QAAQ,IAAI;YACR,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,OAAO;gBAClC,MAAM,GAAG,GAAW,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxB,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;iBACtC;gBACD,MAAM;YACV,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,KAAK;gBAChC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC7B,MAAM;YACV,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5C,SAAS,CACZ,CAAC;gBACF,MAAM;SAGb;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;YAChB,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;gBAChC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aAC7D;iBAAM,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;gBAClD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAC/C;SACJ;KACJ;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,GAAoB;IACvC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;QACZ,OAAO;KACV;IAED,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IAE3B,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAEjC,OAAO,SAAS,KAAK,IAAI,EAAE;QACvB,OAAO,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC;QAC7C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;KACtC;IAED,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC;AAC3B,CAAC;SAEe,YAAY,CACxB,IAAuB,EACvB,WAAmB,EACnB,WAAmB,EACnB,UAAmB;IAEnB,MAAM,KAAK,GAAW,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC9D,MAAM,GAAG,GAAW,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,UAAU,IAAI,KAAK,EAAE;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;KACjC;IACD,IAAI,OAAO,GAA2B,EAAE,CAAC;IAEzC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAClB,IAAuB,EACvB,OAA0B,EAC1B,KAAa,EACb,WAAmB,EACnB,EAAU;IAEV,IAAI,KAAK,GAAY,KAAK,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAoB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IACI,WAAW,CAAC,KAAK,IAAI,IAAI;YACzB,WAAW,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI;YAClC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EACvC;YACE,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;YACxB,IAAI,QAAQ,GAAmC,aAAa,CACxD,WAAW,CAAC,KAAK,CAAC,QAAQ,EAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,EAClB,KAAK,EACL,WAAW,EACX,EAAE,CACL,CAAC;YACF,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YACjB,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YACvB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;aACjC;SACJ;aAAM;YACH,IAAI,EAAE,IAAI,KAAK,EAAE;gBACb,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBAC9B,KAAK,GAAG,IAAI,CAAC;aAChB;YACD,EAAE,EAAE,CAAC;SACR;QAED,IAAI,EAAE,IAAI,KAAK,GAAG,WAAW,EAAE;YAC3B,MAAM;SACT;KACJ;IACD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAoB;IAClC,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,OAAO,IAAI,CAAC;KACf;SAAM;QACH,OAAO;YACH,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,oBAAO,GAAG,CAAC,KAAK,CAAE;YACvB,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI;YAC9C,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACzB,CAAC;KACL;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAA4B;IAC3C,IAAI,IAAI,IAAI,IAAI,EAAE;QACd,OAAO,IAAI,CAAC;KACf;IACD,IAAI,MAAM,GAA2B,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,KAA2B;IAC9C,IAAI,KAAK,IAAI,IAAI,EAAE;QACf,OAAO,IAAI,CAAC;KACf;IACD,IAAI,MAAM,GAAyB;QAC/B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,oBAAO,KAAK,CAAC,MAAM,CAAE;QAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,GAAG,oBAAO,KAAK,CAAC,GAAG,CAAE;QACrB,MAAM,oBAAO,KAAK,CAAC,MAAM,CAAE;KAC9B,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;SAQgB,WAAW,CACvB,YAA4B,EAC5B,YAA4B,EAC5B,wBAAiC,KAAK;IAEtC,MAAM,aAAa,GAAG;QAClB,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,IAAI,EAAE,EAAE;KACX,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,IAAI,EAAE;QACzC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;QAEjD,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YAC5B,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEhD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CACtC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CACrC,CAAC;YACF,MAAM,YAAY,GAAG,WAAW;kBAC1B,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;kBAC1B,IAAI,CAAC;YAEX,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;gBAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;aACxC;SACJ;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,EAAE;YAC/D,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACnC;KACJ;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;SAEe,iBAAiB,CAAC,IAAyB;;IACvD,MAAA,IAAI,CAAC,IAAI,0CAAE,OAAO,CAAC,CAAC,GAAG;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO;;YACnC,IAAI,IAAI,GAAqB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtD,IAAI,OAAO,EAAE;gBACT,MAAM,aAAa,GAAG;oBAClB,CAAC,WAAW,CAAC,YAAY,GAAG,MACxB,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;oBACxC,CAAC,WAAW,CAAC,QAAQ,GAAG,MACpB,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;oBACxC,CAAC,WAAW,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;oBACrD,CAAC,WAAW,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;oBACxD,CAAC,WAAW,CAAC,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC;oBAC3C,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;iBACpD,CAAC;gBAEF,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAElD,IAAI,eAAe,EAAE;oBACjB,IAAI,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;iBACjC;qBAAM;oBACH,IAAI,IAAI,CAAC,KAAK,EAAE;wBACZ,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CACxB,UAAU,EACV,mBACI,IAAI,CAAC,KACT,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAC9C,gBAAgB,CAAC,OAAO,CAC3B,CAAC;qBACL;iBACJ;aACJ;SACJ,CAAC,CAAC;KACN,CAAC,CAAC;AACP;;;;","names":["dom"],"sources":["src/utils/filters/filters-column-menu.ts","src/components/kup-tree/kup-tree-declarations.ts","src/utils/filters/filters-rows.ts","src/components/kup-data-table/kup-data-table-helper.ts"],"sourcesContent":["import { KupDataColumn } from '../../managers/kup-data/kup-data-declarations';\nimport { getValueForDisplay, getValueForDisplay2 } from '../cell-utils';\nimport { Filters } from './filters';\nimport {\n Filter,\n FilterInterval,\n GenericFilter,\n ValueDisplayedValue,\n} from './filters-declarations';\n/**\n * Filtering algorithms related to column menus.\n * @module FiltersColumnMenu\n * @todo Should contain EVERY column-specific filtering method.\n */\nexport class FiltersColumnMenu extends Filters {\n /**\n * Gets the value of the filter prop.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @returns {string} Value of the filter.\n */\n getTextFilterValue(filters: GenericFilter = {}, column: string): string {\n return this._getTextFilterValue(filters, column, false);\n }\n /**\n * Gets the value of the filter prop, set temporarly.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @returns {string} Value of the filter.\n */\n getTextFilterValueTmp(filters: GenericFilter = {}, column: string): string {\n return this._getTextFilterValue(filters, column, true);\n }\n\n private _getTextFilterValue(\n filters: GenericFilter = {},\n column: string,\n tmp: boolean\n ): string {\n let value: string = '';\n\n if (filters == null) {\n return value;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return value;\n }\n value = tmp ? filter.textFieldTmp : filter.textField;\n return value;\n }\n\n /**\n * Returns whether a column has filters or not.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when a given column has filters.\n */\n hasFiltersForColumn(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasFiltersForColumn(filters, column, false);\n }\n /**\n * Returns whether a column has filters or not.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when a given column has filters.\n */\n hasFiltersForColumnTmp(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasFiltersForColumn(filters, column, true);\n }\n /**\n * Returns whether a column has filters or not.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when a given column has filters.\n */\n private _hasFiltersForColumn(\n filters: GenericFilter = {},\n column: KupDataColumn,\n tmp: boolean\n ): boolean {\n if (!column) {\n return false;\n }\n let textfield: string = this._getTextFilterValue(\n filters,\n column.name,\n tmp\n );\n if (textfield != null && textfield.trim() != '') {\n return true;\n }\n if (this._hasIntervalTextFieldFilterValues(filters, column, tmp)) {\n return true;\n }\n let checkboxes = this.getCheckBoxFilterValues(filters, column.name);\n if (checkboxes == null || checkboxes.length < 1) {\n return false;\n }\n return true;\n }\n /**\n * Returns the values of column menu's checkboxes.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @returns {Array<string>} Array of checkboxes values.\n */\n getCheckBoxFilterValues(\n filters: GenericFilter = {},\n column: string\n ): ValueDisplayedValue[] {\n let values = [];\n if (filters == null) {\n return values;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return values;\n }\n if (filter.checkBoxes == null) {\n return values;\n }\n values = filter.checkBoxes;\n return values;\n }\n /**\n * Returns whether a text field should be a date or time picker.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when the text field is a date or time picker.\n */\n hasIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasIntervalTextFieldFilterValues(filters, column, false);\n }\n\n hasIntervalTextFieldFilterValuesTmp(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasIntervalTextFieldFilterValues(filters, column, true);\n }\n\n private _hasIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn,\n tmp: boolean\n ): boolean {\n if (column == null) {\n return false;\n }\n if (!this.isColumnFiltrableByInterval(column)) {\n return false;\n }\n let intervalFrom = this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.FROM,\n tmp\n );\n if (intervalFrom != null && intervalFrom.trim() != '') {\n return true;\n }\n let intervalTo = this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.TO,\n tmp\n );\n if (intervalTo != null && intervalTo.trim() != '') {\n return true;\n }\n return false;\n }\n /**\n * Triggers when a new filter checkbox becomes checked.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @param {ValueDisplayedValue} newFilter - Added filter.\n */\n addCheckboxFilter(\n filters: GenericFilter = {},\n column: string,\n newFilterItem: ValueDisplayedValue\n ): void {\n if (filters == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n filter = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n filters[column] = filter;\n }\n if (filter.checkBoxes == null) {\n filter.checkBoxes = [];\n }\n if (newFilterItem == null || newFilterItem.value == null) {\n filter.checkBoxes = [];\n } else {\n if (\n !Filters.valuesArrayContainsValue(\n filter.checkBoxes,\n newFilterItem.value\n )\n ) {\n filter.checkBoxes[filter.checkBoxes.length] = newFilterItem;\n }\n }\n }\n /**\n * Triggers when a filter checkbox becomes unchecked.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @param {string} remFilter - Removed filter.\n */\n removeCheckboxFilter(\n filters: GenericFilter = {},\n column: string,\n remFilter: string\n ) {\n if (filters == null || remFilter == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return;\n }\n if (filter.checkBoxes == null) {\n filter.checkBoxes = [];\n }\n let index = Filters.indexOfValueInValuesArray(\n filter.checkBoxes,\n remFilter\n );\n if (index >= 0) {\n let chs = [];\n for (let i = 0; i < filter.checkBoxes.length; i++) {\n if (i != index) {\n chs[chs.length] = filter.checkBoxes[i];\n }\n }\n filter.checkBoxes = [...chs];\n }\n }\n\n isColumnFiltrableByInterval(column: KupDataColumn): boolean {\n return this.isObjFiltrableByInterval(column.obj);\n }\n\n getIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): Array<string> {\n return this._getIntervalTextFieldFilterValues(filters, column, false);\n }\n getIntervalTextFieldFilterValuesTmp(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): Array<string> {\n return this._getIntervalTextFieldFilterValues(filters, column, true);\n }\n\n private _getIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn,\n tmp: boolean\n ): Array<string> {\n if (!this._hasIntervalTextFieldFilterValues(filters, column, tmp)) {\n return ['', ''];\n }\n\n let values = [\n this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.FROM,\n tmp\n ),\n this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.TO,\n tmp\n ),\n ];\n return values;\n }\n\n getIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n index: FilterInterval\n ): string {\n return this._getIntervalTextFieldFilterValue(\n filters,\n column,\n index,\n false\n );\n }\n getIntervalTextFieldFilterValueTmp(\n filters: GenericFilter = {},\n column: string,\n index: FilterInterval\n ): string {\n return this._getIntervalTextFieldFilterValue(\n filters,\n column,\n index,\n true\n );\n }\n private _getIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n index: FilterInterval,\n tmp: boolean\n ): string {\n let value = '';\n\n if (filters == null) {\n return value;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return value;\n }\n if (tmp && filter.intervalTmp == null) {\n return value;\n }\n if (!tmp && filter.interval == null) {\n return value;\n }\n value = tmp ? filter.intervalTmp[index] : filter.interval[index];\n return value;\n }\n\n setTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string\n ) {\n this._setTextFieldFilterValue(filters, column, newFilter, true);\n }\n private _setTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string,\n tmp: boolean\n ) {\n if (filters == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n filter = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n filters[column] = filter;\n }\n if (tmp) {\n filter.textFieldTmp =\n newFilter != null ? newFilter.trim() : newFilter;\n } else {\n filter.textField = newFilter != null ? newFilter.trim() : newFilter;\n }\n }\n\n setIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string,\n index: FilterInterval\n ) {\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n newFilter,\n index,\n true\n );\n }\n\n private _setIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string,\n index: FilterInterval,\n tmp: boolean\n ) {\n if (filters == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n filter = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n filters[column] = filter;\n }\n if (filter.interval == null) {\n filter.interval = [];\n filter.interval.push('', '');\n }\n if (filter.intervalTmp == null) {\n filter.intervalTmp = [];\n filter.intervalTmp.push('', '');\n }\n if (tmp) {\n filter.intervalTmp[index] =\n newFilter != null ? newFilter.trim() : newFilter;\n } else {\n filter.interval[index] =\n newFilter != null ? newFilter.trim() : newFilter;\n }\n }\n\n saveTextualFilters(filters: GenericFilter = {}, column: string) {\n this._setTextFieldFilterValue(\n filters,\n column,\n this.getTextFilterValueTmp(filters, column),\n false\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValueTmp(\n filters,\n column,\n FilterInterval.FROM\n ),\n FilterInterval.FROM,\n false\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValueTmp(\n filters,\n column,\n FilterInterval.TO\n ),\n FilterInterval.TO,\n false\n );\n }\n\n resetTextualFilters(filters: GenericFilter = {}, column: string) {\n this._setTextFieldFilterValue(\n filters,\n column,\n this.getTextFilterValue(filters, column),\n true\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValue(\n filters,\n column,\n FilterInterval.FROM\n ),\n FilterInterval.FROM,\n true\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValue(\n filters,\n column,\n FilterInterval.TO\n ),\n FilterInterval.TO,\n true\n );\n }\n\n getFilterValueForTooltip(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): string {\n let txtFilter = this.getTextFilterValue(filters, column.name);\n let interval = this.getIntervalTextFieldFilterValues(filters, column);\n let chkFilters = this.getCheckBoxFilterValues(filters, column.name);\n\n let separator = '';\n\n let txtFiterRis = getValueForDisplay(\n txtFilter,\n column.obj,\n column.decimals\n );\n if (txtFilter != '') {\n separator = ' AND ';\n }\n if (interval[FilterInterval.FROM] != '') {\n txtFiterRis +=\n separator +\n '(>= ' +\n getValueForDisplay(\n interval[FilterInterval.FROM],\n column.obj,\n column.decimals\n ) +\n ')';\n separator = ' AND ';\n }\n if (interval[FilterInterval.TO] != '') {\n txtFiterRis +=\n separator +\n '(<= ' +\n getValueForDisplay(\n interval[FilterInterval.TO],\n column.obj,\n column.decimals\n ) +\n ')';\n separator = ' AND ';\n }\n\n separator = '';\n let ris = '';\n chkFilters.forEach((f) => {\n ris += separator + getValueForDisplay2(f, column);\n separator = ' OR ';\n });\n\n if (ris != '') {\n ris = '(' + ris + ')';\n if (txtFiterRis != '') {\n ris = ' AND ' + ris;\n }\n }\n ris = txtFiterRis + ris;\n return ris;\n }\n\n /**\n * Triggers when a filter must be removed, for column.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n */\n removeFilter(filters: GenericFilter = {}, column: string) {\n filters[column] = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n }\n}\n","import {\n KupDataCell,\n KupDataColumn,\n KupDataNode,\n} from '../../managers/kup-data/kup-data-declarations';\nimport type { PointerEvent } from '@interactjs/types/index';\nimport { GenericMap, KupEventPayload } from '../../types/GenericTypes';\nimport { KupCardEventPayload } from '../kup-card/kup-card-declarations';\nimport { FCellShapes } from '../../f-components/f-cell/f-cell-declarations';\n/**\n * Props of the kup-tree component.\n * Used to export every prop in an object.\n */\nexport enum KupTreeProps {\n asAccordion = 'When enabled, the first level of depth will give an accordion look to nodes.',\n columns = 'The columns of the tree when tree visualization is active.',\n customStyle = 'Custom style of the component.',\n data = 'The json data used to populate the tree view: the basic, always visible tree nodes.',\n density = \"The density of the rows, defaults at 'medium' and can also be set to 'dense' or 'wide'.\",\n dynamicExpansionCallback = 'Function that gets invoked when a new set of nodes must be loaded as children of a node. When useDynamicExpansion is set, the tree component will have two different behaviors depending on the value of this prop. If this prop is set to null, no callback to download data is available: the component will emit an event requiring the parent to load the children of the given node. If this prop is set to have a callback, then the component will automatically make requests to load children of a given node. After the load has been completed, a different event will be fired to alert the parent of the change.',\n enableExtraColumns = 'Enables adding extra columns.',\n expanded = 'Flag: the nodes of the whole tree must be already expanded upon loading. Disabled nodes do NOT get expanded.',\n expansionMode = \"Behavior of nodes' expansion: it can be chosen between expanding a node by clicking on the dropdown icon, or by clicking on the whole node.\",\n filters = 'List of filters set by the user.',\n globalFilter = 'When set to true it activates the global filter.',\n globalFilterValue = 'The value of the global filter.',\n globalFilterMode = 'The mode of the global filter.',\n preventXScroll = 'Experimental feature: when active, the tree will try to prevent horizontal overflowing elements by setting a width on the content of the table cells. It works only on cells of the main column.',\n removableColumns = 'Sets the possibility to remove the selected column.',\n ripple = \"When enabled displays Material's ripple effect on nodes (only when no columns are displayed).\",\n scrollOnHover = 'Activates the scroll on hover function.',\n showColumns = 'Shows the tree data as a table.',\n showFilters = 'When set to true enables the column filters.',\n showFooter = 'When set to true shows the footer.',\n showHeader = 'Flag: shows the header of the tree when the tree is displayed as a table.',\n showIcons = 'Shows the icons of the nodes.',\n stateId = '',\n store = '',\n totals = 'Defines the current totals options.',\n useDynamicExpansion = 'When the component must use the dynamic expansion feature to open its nodes, it means that not all the nodes of the tree have been passed inside the data property. Therefore, when expanding a node, the tree must emit an event (or run a given callback) and wait for the child nodes to be downloaded from the server.',\n}\n\nexport interface KupTreeNode extends KupDataNode {\n expandable?: boolean;\n iconColor?: string;\n style?: GenericMap;\n visible?: boolean;\n selected?: boolean;\n}\n\nexport type TreeNodePath = number[];\n\n/**\n * The name of the constant used by the tree component to identify the main tree in column menu\n * @constant\n */\nexport const treeMainColumnName = 'TREE_COLUMN';\n\n/**\n * Contains all the data of an event.\n */\nexport interface KupTreeEventHandlerDetails {\n area: string;\n cell: KupDataCell;\n column: KupDataColumn;\n filterRemove: HTMLSpanElement;\n originalEvent: PointerEvent;\n row: KupTreeNode;\n td: HTMLElement;\n th: HTMLElement;\n tr: HTMLElement;\n}\n\nexport enum KupTreeExpansionMode {\n DROPDOWN = 'dropdown',\n NODE = 'node',\n}\n\nexport interface KupTreeNodeCollapseEventPayload extends KupEventPayload {\n treeNodePath: TreeNodePath;\n treeNode: KupDataNode;\n}\n\nexport interface KupTreeNodeExpandEventPayload\n extends KupTreeNodeCollapseEventPayload {\n usesDynamicExpansion?: boolean;\n dynamicExpansionRequireChildren?: boolean;\n}\n\nexport interface KupTreeNodeSelectedEventPayload\n extends KupTreeNodeCollapseEventPayload {\n columnName: string;\n}\n\nexport interface KupTreeNodeButtonClickEventPayload\n extends KupTreeNodeCollapseEventPayload {\n column: KupDataColumn;\n columnName: string;\n}\n\nexport interface KupTreeContextMenuEventPayload extends KupEventPayload {\n details: KupTreeEventHandlerDetails;\n}\n\nexport interface KupTreeColumnMenuEventPayload extends KupEventPayload {\n card: HTMLKupCardElement;\n event: CustomEvent<KupCardEventPayload | KupEventPayload>;\n open: boolean;\n}\n\nexport interface KupTreeDynamicMassExpansionEventPayload\n extends KupEventPayload {\n treeNodePath?: TreeNodePath;\n treeNode?: KupDataNode;\n expandAll?: boolean;\n}\n\nexport interface KupTreeColumnRemoveEventPayload extends KupEventPayload {\n column: KupDataColumn;\n}\n","import type {\n GenericFilter,\n ValueDisplayedValue,\n} from './filters-declarations';\nimport type { KupDataTable } from '../../components/kup-data-table/kup-data-table';\nimport type { KupTree } from '../../components/kup-tree/kup-tree';\nimport {\n getCellValueForDisplay,\n getColumnByName,\n getValueForDisplay,\n} from '../cell-utils';\nimport { Filters } from './filters';\nimport { FiltersColumnMenu } from './filters-column-menu';\nimport { treeMainColumnName } from '../../components/kup-tree/kup-tree-declarations';\nimport { KupObjects } from '../../managers/kup-objects/kup-objects';\nimport { KupDom } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupDataCell,\n KupDataColumn,\n KupDataRow,\n KupDataRowCells,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupData } from '../../managers/kup-data/kup-data';\n\nconst dom: KupDom = document.documentElement as KupDom;\nconst kupObjects: KupObjects = dom.ketchup\n ? dom.ketchup.objects\n : new KupObjects();\nconst kupData: KupData = dom.ketchup ? dom.ketchup.data : new KupData();\n\n/**\n * Filtering algorithms related to data-table rows.\n * @module FiltersRows\n * @todo Should contain EVERY row-specific filtering method.\n */\nexport class FiltersRows extends Filters {\n isFilterCompliantForCell(\n cellValue: KupDataCell,\n filterValue: string,\n interval: string[]\n ) {\n if (!cellValue) {\n return false;\n }\n\n return this.isFilterCompliantForSimpleValue(\n cellValue.value,\n cellValue.obj,\n filterValue,\n interval\n );\n }\n\n isFilterCompliantForCellObj(\n cellValue: KupDataCell,\n filterValue: string,\n interval: string[]\n ) {\n if (!cellValue) {\n return false;\n }\n if (!cellValue.obj) {\n return false;\n }\n return this.isFilterCompliantForSimpleValue(\n cellValue.obj.k,\n cellValue.obj,\n filterValue,\n interval\n );\n }\n\n isRowCompliant(\n r: KupDataRow,\n filters: GenericFilter = {},\n globalFilter: string = '',\n isUsingGlobalFilter: boolean = false,\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): boolean {\n return this.areCellsCompliant(\n r.cells,\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n );\n }\n\n areCellsCompliant(\n cells: KupDataRowCells,\n filters: GenericFilter = {},\n globalFilter: string = '',\n isUsingGlobalFilter: boolean = false,\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): boolean {\n if (isUsingGlobalFilter) {\n let retValue = true;\n // There are no columns -> display element\n if (columns && columns != null && columns.length > 0) {\n retValue = false;\n let _filterIsNegative = this.filterIsNegative(globalFilter);\n\n // Search among all visible columns for the global filter\n for (let i = 0; i < columns.length; i++) {\n if (columns[i].visible == false) {\n continue;\n }\n const cell = cells[columns[i].name];\n if (cell == null) {\n continue;\n }\n retValue = this.isFilterCompliantForValue(\n cell.value,\n globalFilter\n );\n let displayedValue = getCellValueForDisplay(\n columns[i],\n cell\n );\n if (displayedValue != cell.value) {\n retValue =\n retValue ||\n this.isFilterCompliantForValue(\n displayedValue,\n globalFilter\n );\n }\n if (retValue == true && !_filterIsNegative) {\n break;\n }\n if (retValue == false && _filterIsNegative) {\n break;\n }\n }\n }\n if (!retValue) {\n return false;\n }\n }\n\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n // There are no filters to check -> the element is valid\n if (!this.hasFilters(filters, columns, columnFilters)) {\n return true;\n }\n\n let keys = Object.keys(filters);\n // Filters\n for (let i = 0; i < keys.length; i++) {\n let key: string = keys[i];\n\n const cell = cells[key];\n if (!cell) {\n return false;\n }\n\n let filterValue = columnFilters.getTextFilterValue(filters, key);\n let interval = columnFilters.getIntervalTextFieldFilterValues(\n filters,\n getColumnByName(columns, key)\n );\n\n const _filterIsNegative: boolean =\n this.filterIsNegative(filterValue);\n let b1 = this.isFilterCompliantForCell(cell, filterValue, interval);\n let b2 = _filterIsNegative;\n if (\n !kupObjects.isNumber(cell.obj) &&\n !kupObjects.isDate(cell.obj) &&\n !kupObjects.isTime(cell.obj) &&\n !kupObjects.isTimestamp(cell.obj)\n ) {\n b2 = this.isFilterCompliantForCellObj(\n cell,\n filterValue,\n interval\n );\n }\n\n if (_filterIsNegative) {\n if (!b1 || !b2) {\n return false;\n }\n } else {\n if (!b1 && !b2) {\n return false;\n }\n }\n\n let filterValues = columnFilters.getCheckBoxFilterValues(\n filters,\n key\n );\n if (filterValues.length == 0) {\n continue;\n }\n let retValue = false;\n for (let i = 0; i < filterValues.length; i++) {\n let fv = filterValues[i];\n if (fv == null || fv.value == null) {\n continue;\n }\n if (cell.value != null) {\n if (\n cell.value.toLowerCase().trim() ==\n fv.value.toLowerCase().trim()\n ) {\n retValue = true;\n break;\n }\n }\n if (cell.obj != null) {\n if (\n cell.obj.k.toLowerCase().trim() ==\n fv.value.toLowerCase().trim()\n ) {\n retValue = true;\n break;\n }\n }\n }\n if (!retValue) {\n return false;\n }\n }\n return true;\n }\n\n hasFilters(\n filters: GenericFilter = {},\n columns: KupDataColumn[],\n columnFilters?: FiltersColumnMenu\n ) {\n if (filters == null) {\n return false;\n }\n let keys = Object.keys(filters);\n if (keys == null || keys.length < 1) {\n return false;\n }\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let col: KupDataColumn = null;\n if (key === treeMainColumnName) {\n col = {\n name: treeMainColumnName,\n title: '',\n };\n } else {\n col = getColumnByName(columns, key);\n }\n if (columnFilters.hasFiltersForColumn(filters, col)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Filters the rows data of a data-table component according to the parameters\n *\n * @param rows - The data of the rows to filter.\n * @param filters - The the filters for each column.\n * @param globalFilter - A global filter applied to all columns.\n * @param columns - The colmns on which the filter will take effect.\n * @todo This function can be improved in its speed by a refactor in which from two different cycles of execution for\n * single filters and global filter, all controls on a single column are done in a single cycle.\n */\n filterRows(\n rows: Array<KupDataRow> = [],\n filters: GenericFilter = {},\n globalFilter: string = '',\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): Array<KupDataRow> {\n if (!rows || rows == null) {\n return [];\n }\n\n // There are rows to filter\n let filteredRows: Array<KupDataRow> = [];\n const isUsingGlobalFilter: boolean = !!(globalFilter && columns);\n\n if (\n this.hasFilters(filters, columns, columnFilters) ||\n isUsingGlobalFilter\n ) {\n for (let i = 0; i < rows.length; i++) {\n let r: KupDataRow = rows[i];\n if (\n (r.id && r.id.indexOf('insert_') > -1) ||\n this.isRowCompliant(\n r,\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n )\n ) {\n filteredRows[filteredRows.length] = r;\n }\n }\n } else {\n filteredRows = [...rows];\n }\n\n return filteredRows;\n }\n\n getColumnValues(\n comp: KupDataTable | KupTree,\n column: KupDataColumn,\n globalFilterValue: string,\n columnFilters?: FiltersColumnMenu\n ): ValueDisplayedValue[] {\n let values: ValueDisplayedValue[] = new Array();\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n let value = columnFilters.getTextFilterValueTmp(\n comp.filters,\n column.name\n );\n let interval = columnFilters.getIntervalTextFieldFilterValuesTmp(\n comp.filters,\n column\n );\n let checkboxes = columnFilters.getCheckBoxFilterValues(\n comp.filters,\n column.name\n );\n\n if (\n column.valuesForFilter != null &&\n column.valuesForFilter.length > 0\n ) {\n column.valuesForFilter.forEach((element) => {\n let v = element;\n if (\n Filters.valuesArrayContainsValue(checkboxes, v) ||\n value == '' ||\n columnFilters.isFilterCompliantForSimpleValue(\n v,\n column.obj,\n value,\n interval\n )\n ) {\n values.push({\n value: v,\n displayedValue: getValueForDisplay(\n v,\n column.obj,\n column.decimals\n ),\n });\n }\n });\n return values;\n }\n\n /** è necessario estrarre i valori della colonna di tutte le righe\n * filtrate SENZA il filtro della colonna stessa corrente */\n let tmpFilters: GenericFilter = { ...comp.filters };\n\n tmpFilters[column.name] = {\n textField: value,\n textFieldTmp: value,\n checkBoxes: [],\n interval: interval,\n intervalTmp: interval,\n };\n\n let tmpRows = this.filterRows(\n comp.getRows(),\n tmpFilters,\n globalFilterValue,\n comp.getVisibleColumns(),\n columnFilters\n );\n\n for (let i = 0; i < checkboxes.length; i++) {\n values.push(checkboxes[i]);\n }\n\n return kupData.cell.getUnivocalValue({ rows: tmpRows }, column, true);\n }\n}\n","import {\n SortObject,\n SortMode,\n GroupObject,\n TotalMode,\n TotalsMap,\n KupDataTableRow,\n KupDataTableRowGroup,\n KupDataTableCell,\n KupDataTableDataset,\n} from './kup-data-table-declarations';\nimport { GenericFilter } from '../../utils/filters/filters-declarations';\nimport { FiltersColumnMenu } from '../../utils/filters/filters-column-menu';\nimport {\n getCellValueForDisplay,\n getColumnByName,\n compareCell,\n CMBandACPAdapter,\n RADAdapter,\n CHKAdapter,\n CHIAdapter,\n SWTAdapter,\n} from '../../utils/cell-utils';\nimport { FiltersRows } from '../../utils/filters/filters-rows';\nimport { KupDom } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupDataColumn,\n KupDataDataset,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupDatesFormats } from '../../managers/kup-dates/kup-dates-declarations';\nimport { FCellShapes } from '../../f-components/f-cell/f-cell-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nexport function sortRows(\n rows: Array<KupDataTableRow> = [],\n sort: Array<SortObject> = []\n): Array<KupDataTableRow> {\n if (!rows || rows.length === 0) {\n return [];\n }\n\n // check if row is group\n if (rows[0].group) {\n return sortGroupRows(rows, sort);\n }\n\n // sorting rows\n if (!sort || sort.length === 0) {\n // no sort -> return rows as they are\n return rows;\n }\n\n // check multiple sort\n const isMultiSort = sort.length > 1;\n\n // sorting rows\n return rows.slice(0).sort((r1: KupDataTableRow, r2: KupDataTableRow) => {\n if (isMultiSort) {\n for (let i = 0; i < sort.length; i++) {\n const compare = compareRows(r1, r2, sort[i]);\n\n if (compare !== 0) {\n // not same row\n return compare;\n }\n }\n\n // same row\n return 0;\n } else {\n return compareRows(r1, r2, sort[0]);\n }\n });\n}\n\nfunction sortGroupRows(\n rows: Array<KupDataTableRow> = [],\n sort: Array<SortObject> = []\n): Array<KupDataTableRow> {\n if (!rows || rows.length === 0) {\n return [];\n }\n\n // getting columm group\n const groupColumn = rows[0].group.column;\n\n // check if column is in sort\n let sortObject = getSortOnColumn(groupColumn, sort);\n\n if (!sortObject) {\n sortObject = {\n column: groupColumn,\n sortMode: SortMode.A,\n };\n }\n\n // sorting rows\n rows.sort((r1, r2) => {\n // creating fake cells\n const cell1: KupDataTableCell = {\n obj: r1.group.obj,\n value: r1.group.id,\n };\n\n const cell2: KupDataTableCell = {\n obj: r2.group.obj,\n value: r2.group.id,\n };\n\n return compareCell(cell1, cell2, sortObject.sortMode);\n });\n\n // sorting children\n rows.forEach((row) => {\n row.group.children = sortRows(row.group.children, sort);\n });\n\n return rows;\n}\n\nfunction getSortOnColumn(\n column: string = '',\n sort: Array<SortObject> = []\n): SortObject {\n if (!column || !sort || sort.length === 0) {\n return null;\n }\n\n for (let sortObject of sort) {\n if (sortObject.column === column) {\n return sortObject;\n }\n }\n\n return null;\n}\n\nfunction compareRows(\n r1: KupDataTableRow,\n r2: KupDataTableRow,\n sortObj: SortObject\n): number {\n const cell1: KupDataTableCell = r1.cells[sortObj.column];\n const cell2: KupDataTableCell = r2.cells[sortObj.column];\n\n if (!cell1 && !cell2) {\n return 0;\n }\n\n if (!cell1) {\n return 1;\n }\n\n if (!cell2) {\n return -1;\n }\n\n return compareCell(cell1, cell2, sortObj.sortMode);\n}\n\n//-------- FILTER FUNCTIONS --------\n/**\n * Filters the rows data of a data-table component according to the parameters\n *\n * @param rows - The data of the rows to filter.\n * @param filters - The the filters for each column.\n * @param globalFilter - A global filter applied to all columns.\n * @param columns - The colmns on which the filter will take effect.\n * @todo This function can be improved in its speed by a refactor in which from two different cycles of execution for\n * single filters and global filter, all controls on a single column are done in a single cycle.\n */\n\nexport function filterRows(\n rows: Array<KupDataTableRow> = [],\n filters: GenericFilter = {},\n globalFilter: string = '',\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu,\n filtersRows?: FiltersRows\n): Array<KupDataTableRow> {\n if (filtersRows == null) {\n filtersRows = new FiltersRows();\n }\n\n return filtersRows.filterRows(\n rows,\n filters,\n globalFilter,\n columns,\n columnFilters\n );\n}\n\nexport function groupRows(\n columns: KupDataColumn[] = [],\n rows: KupDataTableRow[] = [],\n groups: GroupObject[] = [],\n totals: TotalsMap = {}\n): Array<KupDataTableRow> {\n if (!rows) {\n return [];\n }\n\n if (!groups || groups.length === 0 || !columns || columns.length === 0) {\n return rows;\n }\n\n // Keeps label of the valid columns\n const columnLabels: { [index: string]: string } = {};\n\n // remove invalid groups and store column labels\n const validGroups = groups.filter(({ column }) => {\n for (let { name, title } of columns) {\n if (name === column) {\n // Store label of the columns\n columnLabels[name] = title;\n return true;\n }\n }\n return false;\n });\n\n if (validGroups.length === 0) {\n // no valid groups\n return rows;\n }\n\n // creating root\n const groupRows: Array<KupDataTableRow> = [];\n\n // obj used to calculate the group distinct value\n let distinctObj = {};\n\n rows.forEach((row: KupDataTableRow) => {\n // getting column name from first group\n const columnName = validGroups[0].column;\n // getting row value\n const cell = row.cells[columnName];\n\n if (cell) {\n const column = getColumnByName(columns, columnName);\n const cellValueForDisplay = getCellValueForDisplay(column, cell);\n const cellValue = cell.value;\n let groupRow: KupDataTableRow = null;\n // check in already in groupedRow\n for (let currentGroupRow of groupRows) {\n if (currentGroupRow.group.label === cellValueForDisplay) {\n groupRow = currentGroupRow;\n break;\n }\n }\n if (groupRow === null) {\n // create group row\n groupRow = {\n group: {\n id: cellValue,\n parent: null,\n column: columnName,\n columnLabel: columnLabels[columnName],\n expanded: false,\n label: cellValueForDisplay,\n children: [],\n obj: cell.obj,\n totals: {},\n },\n cells: {},\n };\n // add group to list\n groupRows.push(groupRow);\n }\n for (let i = 1; i < validGroups.length; i++) {\n const group = validGroups[i];\n // getting cell value\n const tempCell = row.cells[group.column];\n if (tempCell) {\n const column = getColumnByName(columns, group.column);\n const tempCellValueForDisplay = getCellValueForDisplay(\n column,\n tempCell\n );\n const tempCellValue = tempCell.value;\n // check if group already exists\n let tempGroupingRow: KupDataTableRow = null;\n for (let j = 0; j < groupRow.group.children.length; j++) {\n const childGroup = groupRow.group.children[j];\n const groupLabel = childGroup.group.label;\n\n if (groupLabel === tempCellValueForDisplay) {\n tempGroupingRow = childGroup;\n break;\n }\n }\n if (!tempGroupingRow) {\n tempGroupingRow = {\n cells: {},\n group: {\n id: tempCellValue,\n parent: groupRow,\n column: group.column,\n columnLabel: columnLabels[group.column],\n children: [],\n expanded: false,\n label: tempCellValueForDisplay,\n totals: {},\n obj: tempCell.obj,\n },\n };\n adjustGroupId(tempGroupingRow);\n groupRow.group.children.push(tempGroupingRow);\n }\n groupRow = tempGroupingRow;\n }\n }\n // adding row\n groupRow.group.children.push(row);\n\n updateGroupTotal(groupRow, totals, row, distinctObj);\n }\n });\n\n adjustGroupsDistinct(groupRows, totals, distinctObj);\n adjustGroupsAverageOrFormula(groupRows, TotalMode.AVERAGE, totals);\n adjustGroupsAverageOrFormula(groupRows, TotalMode.MATH, totals);\n\n return groupRows;\n}\n\nfunction updateGroupTotal(\n groupRow: KupDataTableRow,\n totals: TotalsMap,\n addedRow: KupDataTableRow,\n distinctObj: Object\n): void {\n if (!groupRow || !totals) {\n return;\n }\n\n const keys = Object.keys(totals);\n\n if (keys.length === 0) {\n return;\n }\n\n keys.forEach((key) => {\n const cell = addedRow.cells[key];\n\n if (cell) {\n const _isNumber = dom.ketchup.objects.isNumber(cell.obj);\n const totalMode = totals[key];\n\n switch (totalMode) {\n case TotalMode.COUNT:\n let currentTotalValue: number =\n groupRow.group.totals[key] || 0;\n groupRow.group.totals[key] = ++currentTotalValue;\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n let currentParentCount: number =\n parent.group.totals[key] || 0;\n parent.group.totals[key] = ++currentParentCount;\n parent = parent.group.parent;\n }\n break;\n case TotalMode.DISTINCT:\n let cellValue;\n if (_isNumber) {\n cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n } else {\n cellValue = cell.value;\n }\n let distinctGroup = distinctObj[groupRow.group.id];\n if (!distinctGroup) {\n distinctObj[groupRow.group.id] = {};\n distinctObj[groupRow.group.id][key] = [];\n distinctObj[groupRow.group.id][key].push(cellValue);\n } else {\n let distinctList = distinctObj[groupRow.group.id][key];\n if (!distinctList) {\n // first round\n distinctObj[groupRow.group.id][key] = [];\n distinctObj[groupRow.group.id][key].push(cellValue);\n } else {\n // update the list\n distinctList.push(cellValue);\n }\n }\n // updating parents\n let distinctParent = groupRow.group.parent;\n while (distinctParent != null) {\n // get parent value\n let distinctGroupParent =\n distinctObj[distinctParent.group.id];\n if (!distinctGroupParent) {\n distinctObj[distinctParent.group.id] = {};\n distinctObj[distinctParent.group.id][key] = [];\n distinctObj[distinctParent.group.id][key].push(\n cellValue\n );\n } else {\n let distinctParentList =\n distinctObj[distinctParent.group.id][key];\n if (!distinctParentList) {\n // first round\n distinctObj[distinctParent.group.id][key] = [];\n distinctObj[distinctParent.group.id][key].push(\n cellValue\n );\n } else {\n // update the list\n distinctParentList.push(cellValue);\n }\n }\n // continue\n distinctParent = distinctParent.group.parent;\n }\n break;\n case TotalMode.SUM:\n case TotalMode.AVERAGE:\n if (_isNumber && cell.value) {\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n\n const currentTotalValue: number =\n groupRow.group.totals[key] || 0;\n groupRow.group.totals[key] =\n cellValue + currentTotalValue;\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentSum = dom.ketchup.math.numberify(\n parent.group.totals[key] || 0\n );\n parent.group.totals[key] =\n cellValue + currentParentSum;\n\n parent = parent.group.parent;\n }\n }\n break;\n // TODO DRY the MIN and MAX functions\n case TotalMode.MIN:\n if (_isNumber && cell.value) {\n const currentMinValue = groupRow.group.totals[key];\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n if (currentMinValue) {\n groupRow.group.totals[key] = Math.min(\n currentMinValue,\n cellValue\n );\n } else {\n // first round\n groupRow.group.totals[key] = cellValue;\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMin = parent.group.totals[key];\n if (currentParentMin) {\n parent.group.totals[key] = Math.min(\n currentParentMin,\n cellValue\n );\n } else {\n // first round\n parent.group.totals[key] = cellValue;\n }\n parent = parent.group.parent;\n }\n } else if (\n cell.value &&\n dom.ketchup.objects.isDate(cell.obj)\n ) {\n if (\n dom.ketchup.dates.isValidFormattedStringDate(\n cell.value\n )\n ) {\n const currentMinValue = groupRow.group.totals[key];\n if (currentMinValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(currentMinValue)\n );\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.min(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMin =\n parent.group.totals[key];\n if (currentParentMin) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(\n currentParentMin\n )\n );\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.min(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n // first round\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n parent = parent.group.parent;\n }\n }\n }\n break;\n // TODO DRY the MIN and MAX functions\n case TotalMode.MAX:\n if (_isNumber && cell.value) {\n const currentMaxValue = groupRow.group.totals[key];\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n if (currentMaxValue) {\n groupRow.group.totals[key] = Math.max(\n currentMaxValue,\n cellValue\n );\n } else {\n // first round\n groupRow.group.totals[key] = cellValue;\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMax = parent.group.totals[key];\n if (currentParentMax) {\n parent.group.totals[key] = Math.max(\n currentParentMax,\n cellValue\n );\n } else {\n // first round\n parent.group.totals[key] = cellValue;\n }\n parent = parent.group.parent;\n }\n } else if (\n cell.value &&\n dom.ketchup.objects.isDate(cell.obj)\n ) {\n if (\n dom.ketchup.dates.isValidFormattedStringDate(\n cell.value\n )\n ) {\n const currentMaxValue = groupRow.group.totals[key];\n if (currentMaxValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(currentMaxValue)\n );\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.max(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMax =\n parent.group.totals[key];\n if (currentParentMax) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(\n currentParentMax\n )\n );\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.max(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n // first round\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n parent = parent.group.parent;\n }\n }\n }\n break;\n default: {\n if (totalMode.indexOf(TotalMode.MATH) != 0) {\n console.warn(`invalid total mode: ${totalMode}`);\n }\n break;\n }\n }\n }\n });\n}\n\nfunction adjustGroupsDistinct(\n groupRows: Array<KupDataTableRow>,\n totals: TotalsMap,\n distinctObj: Object\n) {\n if (!groupRows || !totals) {\n return;\n }\n\n const keys = Object.keys(totals);\n\n if (groupRows.length === 0 || !groupRows[0].group || keys.length === 0) {\n return;\n }\n\n let toAdjustKeys = keys.filter((key) => TotalMode.DISTINCT === totals[key]);\n\n if (toAdjustKeys.length > 0) {\n groupRows\n .filter((groupRow) => groupRow.group.children.length > 0)\n .forEach((groupRow) =>\n adjustGroupDistinct(groupRow, toAdjustKeys, distinctObj)\n );\n }\n}\n\nfunction adjustGroupsAverageOrFormula(\n groupRows: Array<KupDataTableRow>,\n type: TotalMode,\n totals: TotalsMap\n): void {\n if (!groupRows || !totals) {\n return;\n }\n\n const keys = Object.keys(totals);\n\n if (groupRows.length === 0 || !groupRows[0].group || keys.length === 0) {\n return;\n }\n\n let toAdjustKeys;\n\n if (type == TotalMode.AVERAGE) {\n toAdjustKeys = keys.filter((key) => TotalMode.AVERAGE === totals[key]);\n }\n if (type == TotalMode.MATH) {\n toAdjustKeys = keys.filter(\n (key) => totals[key].indexOf(TotalMode.MATH) == 0\n );\n }\n\n if (toAdjustKeys.length > 0) {\n groupRows\n .filter((groupRow) => groupRow.group.children.length > 0)\n .forEach((groupRow) =>\n adjustGroupAverageOrFormula(\n groupRow,\n type,\n toAdjustKeys,\n totals\n )\n );\n }\n}\n\nfunction adjustGroupDistinct(\n groupRow: KupDataTableRow,\n toAdjustKeys: Array<string>,\n distinctObj: Object\n) {\n const children = groupRow.group.children;\n\n if (children.length === 0) {\n return;\n }\n\n if (children[0].group) {\n children.forEach((child) => {\n adjustGroupDistinct(child, toAdjustKeys, distinctObj);\n });\n }\n\n toAdjustKeys.forEach((key) => {\n const distinctList = distinctObj[groupRow.group.id][key];\n groupRow.group.totals[key] = new Set(distinctList).size;\n });\n}\n\n/**\n * @returns number of 'leaf' of group\n */\nfunction adjustGroupAverageOrFormula(\n row: KupDataTableRow,\n type: TotalMode,\n toAdjustKeys: Array<string>,\n totals: TotalsMap\n): number {\n const children = row.group.children;\n\n if (children.length === 0) {\n return 0;\n }\n\n let numberOfLeaf = 0;\n\n // check if child is a grouping row\n if (children[0].group) {\n children.forEach((child) => {\n numberOfLeaf += adjustGroupAverageOrFormula(\n child,\n type,\n toAdjustKeys,\n totals\n );\n });\n } else {\n numberOfLeaf = children.length;\n }\n // adjust average/formulas\n toAdjustKeys.forEach((key) => {\n if (type == TotalMode.AVERAGE) {\n row.group.totals[key] = row.group.totals[key] / numberOfLeaf;\n }\n if (type == TotalMode.MATH) {\n let formula = totals[key].substring(TotalMode.MATH.length);\n row.group.totals[key] = dom.ketchup.math.formulas.custom(\n formula,\n row.group.totals\n );\n }\n });\n\n return numberOfLeaf;\n}\n\nexport function normalizeRows(\n columns: Array<KupDataColumn>,\n rows: Array<KupDataTableRow>\n): Array<KupDataTableRow> {\n if (rows) {\n const normalizedrows = Object.assign(rows);\n rows.forEach((row: KupDataTableRow) => {\n columns.forEach((column) => {\n if (row.cells) {\n const cell = row.cells[column.name];\n if (cell && column.obj && !cell.obj) {\n // cell.obj = Object.assign(column.obj);\n cell.obj = {\n t: column.obj.t,\n p: column.obj.p,\n k: cell.value,\n };\n }\n }\n });\n });\n return normalizedrows;\n } else {\n return undefined;\n }\n}\n\nexport function calcTotals(\n rows: Array<KupDataTableRow> = [],\n totals: TotalsMap = {}\n): { [index: string]: number } {\n if (\n dom.ketchup.objects.isEmptyJsObject(rows) ||\n dom.ketchup.objects.isEmptyJsObject(totals)\n ) {\n return {};\n }\n const keys = Object.keys(totals);\n const footerRow: { [index: string]: any } = {};\n const dateColumns: string[] = new Array();\n\n // if there are only COUNT, no need to loop on rows\n let onlyCount =\n keys.length === 0 ||\n keys.every((key) => totals[key] === TotalMode.COUNT);\n if (onlyCount) {\n keys.forEach((columnName) => (footerRow[columnName] = rows.length));\n } else {\n let distinctObj = {};\n rows.forEach((r, index, array) => {\n keys.filter(\n (key) =>\n TotalMode.COUNT !== totals[key] &&\n totals[key].indexOf(TotalMode.MATH) != 0\n ).forEach((key) => {\n // getting cell\n const cell = r.cells[key];\n if (cell) {\n if (totals[key] === TotalMode.DISTINCT) {\n let cellValue;\n if (dom.ketchup.objects.isNumber(cell.obj)) {\n cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n } else {\n cellValue = cell.value;\n }\n let distinctList = distinctObj[key];\n if (!distinctList) {\n // first round\n distinctObj[key] = [];\n distinctObj[key].push(cellValue);\n } else {\n // update the list\n distinctList.push(cellValue);\n }\n } else if (dom.ketchup.objects.isNumber(cell.obj)) {\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n let currentFooterValue = footerRow[key];\n switch (true) {\n // TODO DRY the MIN and MAX functions\n case totals[key] === TotalMode.MIN:\n if (currentFooterValue) {\n footerRow[key] = Math.min(\n currentFooterValue,\n cellValue\n );\n } else {\n footerRow[key] = cellValue;\n }\n break;\n case totals[key] === TotalMode.MAX:\n if (currentFooterValue) {\n footerRow[key] = Math.max(\n currentFooterValue,\n cellValue\n );\n } else {\n footerRow[key] = cellValue;\n }\n break;\n default:\n // SUM\n currentFooterValue = footerRow[key] || 0;\n footerRow[key] =\n cellValue +\n dom.ketchup.math.numberify(\n currentFooterValue\n );\n }\n // TODO DRY the MIN and MAX functions\n } else if (dom.ketchup.objects.isDate(cell.obj)) {\n if (dateColumns.indexOf(key) == -1) {\n dateColumns.push(key);\n }\n if (\n dom.ketchup.dates.isValidFormattedStringDate(\n cell.value\n )\n ) {\n const cellValue = dom.ketchup.dates.toDate(\n dom.ketchup.dates.toDayjs(cell.value)\n );\n const currentFooterValue = footerRow[key]\n ? dom.ketchup.dates.toDate(\n dom.ketchup.dates.toDayjs(footerRow[key])\n )\n : null;\n switch (true) {\n case totals[key] === TotalMode.MIN:\n if (currentFooterValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(currentFooterValue);\n footerRow[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.min(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n footerRow[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n break;\n case totals[key] === TotalMode.MAX:\n if (currentFooterValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(currentFooterValue);\n footerRow[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.max(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n footerRow[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n break;\n default:\n break;\n }\n }\n }\n }\n if (\n index === array.length - 1 &&\n totals[key] === TotalMode.DISTINCT\n ) {\n // last round\n footerRow[key] = new Set(distinctObj[key]).size;\n distinctObj[key] = [];\n }\n });\n });\n }\n // fixing MATH, AVERAGE and COUNT\n for (let key of keys) {\n switch (true) {\n case totals[key] === TotalMode.AVERAGE:\n const sum: number = footerRow[key];\n if (sum && rows.length > 0) {\n footerRow[key] = sum / rows.length;\n }\n break;\n case totals[key] === TotalMode.COUNT:\n footerRow[key] = rows.length;\n break;\n case totals[key].indexOf(TotalMode.MATH) == 0:\n footerRow[key] = dom.ketchup.math.formulas.custom(\n totals[key].substring(TotalMode.MATH.length),\n footerRow\n );\n break;\n default:\n break;\n }\n if (footerRow[key]) {\n if (dateColumns.indexOf(key) != -1) {\n footerRow[key] = dom.ketchup.dates.format(footerRow[key]);\n } else if (dom.ketchup.math.isNumber(footerRow[key])) {\n footerRow[key] = +footerRow[key].toFixed(2);\n }\n }\n }\n return footerRow;\n}\n\nfunction adjustGroupId(row: KupDataTableRow): void {\n if (!row.group) {\n return;\n }\n\n let groupID = row.group.id;\n\n let parentRow = row.group.parent;\n\n while (parentRow !== null) {\n groupID = `${parentRow.group.id};${groupID}`;\n parentRow = parentRow.group.parent;\n }\n\n row.group.id = groupID;\n}\n\nexport function paginateRows(\n rows: KupDataTableRow[],\n currentPage: number,\n rowsPerPage: number,\n areGrouped: boolean\n) {\n const start: number = currentPage * rowsPerPage - rowsPerPage;\n const end: number = start + Number(rowsPerPage);\n if (areGrouped == false) {\n return rows.slice(start, end);\n }\n let pagRows: Array<KupDataTableRow> = [];\n\n _paginateRows(rows, pagRows, start, Number(rowsPerPage), 0);\n\n return pagRows;\n}\n\nfunction _paginateRows(\n rows: KupDataTableRow[],\n pagRows: KupDataTableRow[],\n start: number,\n rowsPerPage: number,\n ci: number\n): { ci: number; added: boolean } {\n let added: boolean = false;\n for (let i: number = 0; i < rows.length; i++) {\n let originalRow = rows[i];\n let row: KupDataTableRow = cloneRow(rows[i]);\n if (\n originalRow.group != null &&\n originalRow.group.children != null &&\n originalRow.group.children.length > 0\n ) {\n row.group.children = [];\n let retValue: { ci: number; added: boolean } = _paginateRows(\n originalRow.group.children,\n row.group.children,\n start,\n rowsPerPage,\n ci\n );\n ci = retValue.ci;\n added = retValue.added;\n if (added == true) {\n pagRows[pagRows.length] = row;\n }\n } else {\n if (ci >= start) {\n pagRows[pagRows.length] = row;\n added = true;\n }\n ci++;\n }\n\n if (ci >= start + rowsPerPage) {\n break;\n }\n }\n return { ci: ci, added: added };\n}\n\nfunction cloneRow(row: KupDataTableRow): KupDataTableRow {\n if (row == null) {\n return null;\n } else {\n return {\n id: row.id,\n cells: { ...row.cells },\n actions: row.actions ? [...row.actions] : null,\n group: cloneRowGroup(row.group),\n clonedFrom: row,\n readOnly: row.readOnly,\n cssClass: row.cssClass,\n };\n }\n}\n\nfunction cloneRows(rows: Array<KupDataTableRow>): Array<KupDataTableRow> {\n if (rows == null) {\n return null;\n }\n let cloned: Array<KupDataTableRow> = [];\n for (let i: number = 0; i < rows.length; i++) {\n cloned[cloned.length] = cloneRow(rows[i]);\n }\n return cloned;\n}\n\nfunction cloneRowGroup(group: KupDataTableRowGroup): KupDataTableRowGroup {\n if (group == null) {\n return null;\n }\n let cloned: KupDataTableRowGroup = {\n id: group.id,\n parent: { ...group.parent },\n column: group.column,\n columnLabel: group.columnLabel,\n expanded: group.expanded,\n label: group.label,\n children: cloneRows(group.children),\n obj: { ...group.obj },\n totals: { ...group.totals },\n };\n\n return cloned;\n}\n\n/**\n * Returns a KupDataDataset obtained as the difference between originalData and modifiedData\n * The checked data are cell.value and cell.obj.k with the same column and row\n * @param originalData\n * @param modifiedData\n * @param includesAlsoEmptyRows\n * @returns\n */\nexport function getDiffData(\n originalData: KupDataDataset,\n modifiedData: KupDataDataset,\n includesAlsoEmptyRows: boolean = false\n): KupDataDataset {\n const diffDataTable = {\n columns: modifiedData.columns,\n rows: [],\n };\n\n for (const modifiedRow of modifiedData.rows) {\n const newRow = { cells: {}, id: modifiedRow.id };\n\n for (const column of modifiedData.columns) {\n const cellKey = column.name;\n const modifiedCell = modifiedRow.cells[cellKey];\n\n const originalRow = originalData.rows.find(\n (row) => row.id === modifiedRow.id\n );\n const originalCell = originalRow\n ? originalRow.cells[cellKey]\n : null;\n\n if (!originalCell || modifiedCell.value !== originalCell.value) {\n newRow.cells[cellKey] = modifiedCell;\n }\n }\n\n if (Object.keys(newRow.cells).length > 0 || includesAlsoEmptyRows) {\n diffDataTable.rows.push(newRow);\n }\n }\n\n return diffDataTable;\n}\n\nexport function decorateDataTable(data: KupDataTableDataset) {\n data.rows?.forEach((row) => {\n Object.keys(row.cells).forEach((cellKey) => {\n let cell: KupDataTableCell = row.cells[cellKey];\n\n const value = cell.value;\n const options = cell['options'];\n cell.isEditable = cell.isEditable ?? cell['editable'];\n\n if (options) {\n const shapeAdapters = {\n [FCellShapes.AUTOCOMPLETE]: () =>\n CMBandACPAdapter(value, '', options),\n [FCellShapes.COMBOBOX]: () =>\n CMBandACPAdapter(value, '', options),\n [FCellShapes.RADIO]: () => RADAdapter(value, options),\n [FCellShapes.CHECKBOX]: () => CHKAdapter(value, options),\n [FCellShapes.CHIP]: () => CHIAdapter(value),\n [FCellShapes.SWITCH]: () => SWTAdapter(value, ''),\n };\n\n const adapterFunction = shapeAdapters[cell.shape];\n\n if (adapterFunction) {\n cell.data = adapterFunction();\n } else {\n if (cell.shape) {\n dom.ketchup.debug.logMessage(\n 'kup-data',\n `Shape specified ${\n cell.shape\n } in cell ${JSON.stringify(cell)} unsupported`,\n KupDebugCategory.WARNING\n );\n }\n }\n }\n });\n });\n}\n"],"version":3}
1
+ {"file":"kup-data-table-helper-7807c3bc.js","mappings":"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","names":["dom"],"sources":["src/utils/filters/filters-column-menu.ts","src/components/kup-tree/kup-tree-declarations.ts","src/utils/filters/filters-rows.ts","src/components/kup-data-table/kup-data-table-helper.ts"],"sourcesContent":["import { KupDataColumn } from '../../managers/kup-data/kup-data-declarations';\nimport { getValueForDisplay, getValueForDisplay2 } from '../cell-utils';\nimport { Filters } from './filters';\nimport {\n Filter,\n FilterInterval,\n GenericFilter,\n ValueDisplayedValue,\n} from './filters-declarations';\n/**\n * Filtering algorithms related to column menus.\n * @module FiltersColumnMenu\n * @todo Should contain EVERY column-specific filtering method.\n */\nexport class FiltersColumnMenu extends Filters {\n /**\n * Gets the value of the filter prop.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @returns {string} Value of the filter.\n */\n getTextFilterValue(filters: GenericFilter = {}, column: string): string {\n return this._getTextFilterValue(filters, column, false);\n }\n /**\n * Gets the value of the filter prop, set temporarly.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @returns {string} Value of the filter.\n */\n getTextFilterValueTmp(filters: GenericFilter = {}, column: string): string {\n return this._getTextFilterValue(filters, column, true);\n }\n\n private _getTextFilterValue(\n filters: GenericFilter = {},\n column: string,\n tmp: boolean\n ): string {\n let value: string = '';\n\n if (filters == null) {\n return value;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return value;\n }\n value = tmp ? filter.textFieldTmp : filter.textField;\n return value;\n }\n\n /**\n * Returns whether a column has filters or not.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when a given column has filters.\n */\n hasFiltersForColumn(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasFiltersForColumn(filters, column, false);\n }\n /**\n * Returns whether a column has filters or not.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when a given column has filters.\n */\n hasFiltersForColumnTmp(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasFiltersForColumn(filters, column, true);\n }\n /**\n * Returns whether a column has filters or not.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when a given column has filters.\n */\n private _hasFiltersForColumn(\n filters: GenericFilter = {},\n column: KupDataColumn,\n tmp: boolean\n ): boolean {\n if (!column) {\n return false;\n }\n let textfield: string = this._getTextFilterValue(\n filters,\n column.name,\n tmp\n );\n if (textfield != null && textfield.trim() != '') {\n return true;\n }\n if (this._hasIntervalTextFieldFilterValues(filters, column, tmp)) {\n return true;\n }\n let checkboxes = this.getCheckBoxFilterValues(filters, column.name);\n if (checkboxes == null || checkboxes.length < 1) {\n return false;\n }\n return true;\n }\n /**\n * Returns the values of column menu's checkboxes.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @returns {Array<string>} Array of checkboxes values.\n */\n getCheckBoxFilterValues(\n filters: GenericFilter = {},\n column: string\n ): ValueDisplayedValue[] {\n let values = [];\n if (filters == null) {\n return values;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return values;\n }\n if (filter.checkBoxes == null) {\n return values;\n }\n values = filter.checkBoxes;\n return values;\n }\n /**\n * Returns whether a text field should be a date or time picker.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {KupDataColumn} column - Name of the column.\n * @returns {boolean} True when the text field is a date or time picker.\n */\n hasIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasIntervalTextFieldFilterValues(filters, column, false);\n }\n\n hasIntervalTextFieldFilterValuesTmp(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): boolean {\n return this._hasIntervalTextFieldFilterValues(filters, column, true);\n }\n\n private _hasIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn,\n tmp: boolean\n ): boolean {\n if (column == null) {\n return false;\n }\n if (!this.isColumnFiltrableByInterval(column)) {\n return false;\n }\n let intervalFrom = this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.FROM,\n tmp\n );\n if (intervalFrom != null && intervalFrom.trim() != '') {\n return true;\n }\n let intervalTo = this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.TO,\n tmp\n );\n if (intervalTo != null && intervalTo.trim() != '') {\n return true;\n }\n return false;\n }\n /**\n * Triggers when a new filter checkbox becomes checked.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @param {ValueDisplayedValue} newFilter - Added filter.\n */\n addCheckboxFilter(\n filters: GenericFilter = {},\n column: string,\n newFilterItem: ValueDisplayedValue\n ): void {\n if (filters == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n filter = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n filters[column] = filter;\n }\n if (filter.checkBoxes == null) {\n filter.checkBoxes = [];\n }\n if (newFilterItem == null || newFilterItem.value == null) {\n filter.checkBoxes = [];\n } else {\n if (\n !Filters.valuesArrayContainsValue(\n filter.checkBoxes,\n newFilterItem.value\n )\n ) {\n filter.checkBoxes[filter.checkBoxes.length] = newFilterItem;\n }\n }\n }\n /**\n * Triggers when a filter checkbox becomes unchecked.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n * @param {string} remFilter - Removed filter.\n */\n removeCheckboxFilter(\n filters: GenericFilter = {},\n column: string,\n remFilter: string\n ) {\n if (filters == null || remFilter == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return;\n }\n if (filter.checkBoxes == null) {\n filter.checkBoxes = [];\n }\n let index = Filters.indexOfValueInValuesArray(\n filter.checkBoxes,\n remFilter\n );\n if (index >= 0) {\n let chs = [];\n for (let i = 0; i < filter.checkBoxes.length; i++) {\n if (i != index) {\n chs[chs.length] = filter.checkBoxes[i];\n }\n }\n filter.checkBoxes = [...chs];\n }\n }\n\n isColumnFiltrableByInterval(column: KupDataColumn): boolean {\n return this.isObjFiltrableByInterval(column.obj);\n }\n\n getIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): Array<string> {\n return this._getIntervalTextFieldFilterValues(filters, column, false);\n }\n getIntervalTextFieldFilterValuesTmp(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): Array<string> {\n return this._getIntervalTextFieldFilterValues(filters, column, true);\n }\n\n private _getIntervalTextFieldFilterValues(\n filters: GenericFilter = {},\n column: KupDataColumn,\n tmp: boolean\n ): Array<string> {\n if (!this._hasIntervalTextFieldFilterValues(filters, column, tmp)) {\n return ['', ''];\n }\n\n let values = [\n this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.FROM,\n tmp\n ),\n this._getIntervalTextFieldFilterValue(\n filters,\n column.name,\n FilterInterval.TO,\n tmp\n ),\n ];\n return values;\n }\n\n getIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n index: FilterInterval\n ): string {\n return this._getIntervalTextFieldFilterValue(\n filters,\n column,\n index,\n false\n );\n }\n getIntervalTextFieldFilterValueTmp(\n filters: GenericFilter = {},\n column: string,\n index: FilterInterval\n ): string {\n return this._getIntervalTextFieldFilterValue(\n filters,\n column,\n index,\n true\n );\n }\n private _getIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n index: FilterInterval,\n tmp: boolean\n ): string {\n let value = '';\n\n if (filters == null) {\n return value;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n return value;\n }\n if (tmp && filter.intervalTmp == null) {\n return value;\n }\n if (!tmp && filter.interval == null) {\n return value;\n }\n value = tmp ? filter.intervalTmp[index] : filter.interval[index];\n return value;\n }\n\n setTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string\n ) {\n this._setTextFieldFilterValue(filters, column, newFilter, true);\n }\n private _setTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string,\n tmp: boolean\n ) {\n if (filters == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n filter = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n filters[column] = filter;\n }\n if (tmp) {\n filter.textFieldTmp =\n newFilter != null ? newFilter.trim() : newFilter;\n } else {\n filter.textField = newFilter != null ? newFilter.trim() : newFilter;\n }\n }\n\n setIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string,\n index: FilterInterval\n ) {\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n newFilter,\n index,\n true\n );\n }\n\n private _setIntervalTextFieldFilterValue(\n filters: GenericFilter = {},\n column: string,\n newFilter: string,\n index: FilterInterval,\n tmp: boolean\n ) {\n if (filters == null) {\n return;\n }\n let filter: Filter = filters[column];\n if (filter == null) {\n filter = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n filters[column] = filter;\n }\n if (filter.interval == null) {\n filter.interval = [];\n filter.interval.push('', '');\n }\n if (filter.intervalTmp == null) {\n filter.intervalTmp = [];\n filter.intervalTmp.push('', '');\n }\n if (tmp) {\n filter.intervalTmp[index] =\n newFilter != null ? newFilter.trim() : newFilter;\n } else {\n filter.interval[index] =\n newFilter != null ? newFilter.trim() : newFilter;\n }\n }\n\n saveTextualFilters(filters: GenericFilter = {}, column: string) {\n this._setTextFieldFilterValue(\n filters,\n column,\n this.getTextFilterValueTmp(filters, column),\n false\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValueTmp(\n filters,\n column,\n FilterInterval.FROM\n ),\n FilterInterval.FROM,\n false\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValueTmp(\n filters,\n column,\n FilterInterval.TO\n ),\n FilterInterval.TO,\n false\n );\n }\n\n resetTextualFilters(filters: GenericFilter = {}, column: string) {\n this._setTextFieldFilterValue(\n filters,\n column,\n this.getTextFilterValue(filters, column),\n true\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValue(\n filters,\n column,\n FilterInterval.FROM\n ),\n FilterInterval.FROM,\n true\n );\n this._setIntervalTextFieldFilterValue(\n filters,\n column,\n this.getIntervalTextFieldFilterValue(\n filters,\n column,\n FilterInterval.TO\n ),\n FilterInterval.TO,\n true\n );\n }\n\n getFilterValueForTooltip(\n filters: GenericFilter = {},\n column: KupDataColumn\n ): string {\n let txtFilter = this.getTextFilterValue(filters, column.name);\n let interval = this.getIntervalTextFieldFilterValues(filters, column);\n let chkFilters = this.getCheckBoxFilterValues(filters, column.name);\n\n let separator = '';\n\n let txtFiterRis = getValueForDisplay(\n txtFilter,\n column.obj,\n column.decimals\n );\n if (txtFilter != '') {\n separator = ' AND ';\n }\n if (interval[FilterInterval.FROM] != '') {\n txtFiterRis +=\n separator +\n '(>= ' +\n getValueForDisplay(\n interval[FilterInterval.FROM],\n column.obj,\n column.decimals\n ) +\n ')';\n separator = ' AND ';\n }\n if (interval[FilterInterval.TO] != '') {\n txtFiterRis +=\n separator +\n '(<= ' +\n getValueForDisplay(\n interval[FilterInterval.TO],\n column.obj,\n column.decimals\n ) +\n ')';\n separator = ' AND ';\n }\n\n separator = '';\n let ris = '';\n chkFilters.forEach((f) => {\n ris += separator + getValueForDisplay2(f, column);\n separator = ' OR ';\n });\n\n if (ris != '') {\n ris = '(' + ris + ')';\n if (txtFiterRis != '') {\n ris = ' AND ' + ris;\n }\n }\n ris = txtFiterRis + ris;\n return ris;\n }\n\n /**\n * Triggers when a filter must be removed, for column.\n * @param {GenericFilter} filters - Filters of the component.\n * @param {string} column - Name of the column.\n */\n removeFilter(filters: GenericFilter = {}, column: string) {\n filters[column] = {\n textField: '',\n textFieldTmp: '',\n checkBoxes: [],\n interval: null,\n intervalTmp: null,\n };\n }\n}\n","import {\n KupDataCell,\n KupDataColumn,\n KupDataNode,\n} from '../../managers/kup-data/kup-data-declarations';\nimport type { PointerEvent } from '@interactjs/types/index';\nimport { GenericMap, KupEventPayload } from '../../types/GenericTypes';\nimport { KupCardEventPayload } from '../kup-card/kup-card-declarations';\nimport { FCellShapes } from '../../f-components/f-cell/f-cell-declarations';\n/**\n * Props of the kup-tree component.\n * Used to export every prop in an object.\n */\nexport enum KupTreeProps {\n asAccordion = 'When enabled, the first level of depth will give an accordion look to nodes.',\n columns = 'The columns of the tree when tree visualization is active.',\n customStyle = 'Custom style of the component.',\n data = 'The json data used to populate the tree view: the basic, always visible tree nodes.',\n density = \"The density of the rows, defaults at 'medium' and can also be set to 'dense' or 'wide'.\",\n dynamicExpansionCallback = 'Function that gets invoked when a new set of nodes must be loaded as children of a node. When useDynamicExpansion is set, the tree component will have two different behaviors depending on the value of this prop. If this prop is set to null, no callback to download data is available: the component will emit an event requiring the parent to load the children of the given node. If this prop is set to have a callback, then the component will automatically make requests to load children of a given node. After the load has been completed, a different event will be fired to alert the parent of the change.',\n enableExtraColumns = 'Enables adding extra columns.',\n expanded = 'Flag: the nodes of the whole tree must be already expanded upon loading. Disabled nodes do NOT get expanded.',\n expansionMode = \"Behavior of nodes' expansion: it can be chosen between expanding a node by clicking on the dropdown icon, or by clicking on the whole node.\",\n filters = 'List of filters set by the user.',\n globalFilter = 'When set to true it activates the global filter.',\n globalFilterValue = 'The value of the global filter.',\n globalFilterMode = 'The mode of the global filter.',\n preventXScroll = 'Experimental feature: when active, the tree will try to prevent horizontal overflowing elements by setting a width on the content of the table cells. It works only on cells of the main column.',\n removableColumns = 'Sets the possibility to remove the selected column.',\n ripple = \"When enabled displays Material's ripple effect on nodes (only when no columns are displayed).\",\n scrollOnHover = 'Activates the scroll on hover function.',\n showColumns = 'Shows the tree data as a table.',\n showFilters = 'When set to true enables the column filters.',\n showFooter = 'When set to true shows the footer.',\n showHeader = 'Flag: shows the header of the tree when the tree is displayed as a table.',\n showIcons = 'Shows the icons of the nodes.',\n stateId = '',\n store = '',\n totals = 'Defines the current totals options.',\n useDynamicExpansion = 'When the component must use the dynamic expansion feature to open its nodes, it means that not all the nodes of the tree have been passed inside the data property. Therefore, when expanding a node, the tree must emit an event (or run a given callback) and wait for the child nodes to be downloaded from the server.',\n}\n\nexport interface KupTreeNode extends KupDataNode {\n expandable?: boolean;\n iconColor?: string;\n style?: GenericMap;\n visible?: boolean;\n selected?: boolean;\n}\n\nexport type TreeNodePath = number[];\n\n/**\n * The name of the constant used by the tree component to identify the main tree in column menu\n * @constant\n */\nexport const treeMainColumnName = 'TREE_COLUMN';\n\n/**\n * Contains all the data of an event.\n */\nexport interface KupTreeEventHandlerDetails {\n area: string;\n cell: KupDataCell;\n column: KupDataColumn;\n filterRemove: HTMLSpanElement;\n originalEvent: PointerEvent;\n row: KupTreeNode;\n td: HTMLElement;\n th: HTMLElement;\n tr: HTMLElement;\n}\n\nexport enum KupTreeExpansionMode {\n DROPDOWN = 'dropdown',\n NODE = 'node',\n}\n\nexport interface KupTreeNodeCollapseEventPayload extends KupEventPayload {\n treeNodePath: TreeNodePath;\n treeNode: KupDataNode;\n}\n\nexport interface KupTreeNodeExpandEventPayload\n extends KupTreeNodeCollapseEventPayload {\n usesDynamicExpansion?: boolean;\n dynamicExpansionRequireChildren?: boolean;\n}\n\nexport interface KupTreeNodeSelectedEventPayload\n extends KupTreeNodeCollapseEventPayload {\n columnName: string;\n}\n\nexport interface KupTreeNodeButtonClickEventPayload\n extends KupTreeNodeCollapseEventPayload {\n column: KupDataColumn;\n columnName: string;\n}\n\nexport interface KupTreeContextMenuEventPayload extends KupEventPayload {\n details: KupTreeEventHandlerDetails;\n}\n\nexport interface KupTreeColumnMenuEventPayload extends KupEventPayload {\n card: HTMLKupCardElement;\n event: CustomEvent<KupCardEventPayload | KupEventPayload>;\n open: boolean;\n}\n\nexport interface KupTreeDynamicMassExpansionEventPayload\n extends KupEventPayload {\n treeNodePath?: TreeNodePath;\n treeNode?: KupDataNode;\n expandAll?: boolean;\n}\n\nexport interface KupTreeColumnRemoveEventPayload extends KupEventPayload {\n column: KupDataColumn;\n}\n","import type {\n GenericFilter,\n ValueDisplayedValue,\n} from './filters-declarations';\nimport type { KupDataTable } from '../../components/kup-data-table/kup-data-table';\nimport type { KupTree } from '../../components/kup-tree/kup-tree';\nimport {\n getCellValueForDisplay,\n getColumnByName,\n getValueForDisplay,\n} from '../cell-utils';\nimport { Filters } from './filters';\nimport { FiltersColumnMenu } from './filters-column-menu';\nimport { treeMainColumnName } from '../../components/kup-tree/kup-tree-declarations';\nimport { KupObjects } from '../../managers/kup-objects/kup-objects';\nimport { KupDom } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupDataCell,\n KupDataColumn,\n KupDataRow,\n KupDataRowCells,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupData } from '../../managers/kup-data/kup-data';\n\nconst dom: KupDom = document.documentElement as KupDom;\nconst kupObjects: KupObjects = dom.ketchup\n ? dom.ketchup.objects\n : new KupObjects();\nconst kupData: KupData = dom.ketchup ? dom.ketchup.data : new KupData();\n\n/**\n * Filtering algorithms related to data-table rows.\n * @module FiltersRows\n * @todo Should contain EVERY row-specific filtering method.\n */\nexport class FiltersRows extends Filters {\n isFilterCompliantForCell(\n cellValue: KupDataCell,\n filterValue: string,\n interval: string[]\n ) {\n if (!cellValue) {\n return false;\n }\n\n return this.isFilterCompliantForSimpleValue(\n cellValue.value,\n cellValue.obj,\n filterValue,\n interval\n );\n }\n\n isFilterCompliantForCellObj(\n cellValue: KupDataCell,\n filterValue: string,\n interval: string[]\n ) {\n if (!cellValue) {\n return false;\n }\n if (!cellValue.obj) {\n return false;\n }\n return this.isFilterCompliantForSimpleValue(\n cellValue.obj.k,\n cellValue.obj,\n filterValue,\n interval\n );\n }\n\n isRowCompliant(\n r: KupDataRow,\n filters: GenericFilter = {},\n globalFilter: string = '',\n isUsingGlobalFilter: boolean = false,\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): boolean {\n return this.areCellsCompliant(\n r.cells,\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n );\n }\n\n areCellsCompliant(\n cells: KupDataRowCells,\n filters: GenericFilter = {},\n globalFilter: string = '',\n isUsingGlobalFilter: boolean = false,\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): boolean {\n if (isUsingGlobalFilter) {\n let retValue = true;\n // There are no columns -> display element\n if (columns && columns != null && columns.length > 0) {\n retValue = false;\n let _filterIsNegative = this.filterIsNegative(globalFilter);\n\n // Search among all visible columns for the global filter\n for (let i = 0; i < columns.length; i++) {\n if (columns[i].visible == false) {\n continue;\n }\n const cell = cells[columns[i].name];\n if (cell == null) {\n continue;\n }\n retValue = this.isFilterCompliantForValue(\n cell.value,\n globalFilter\n );\n let displayedValue = getCellValueForDisplay(\n columns[i],\n cell\n );\n if (displayedValue != cell.value) {\n retValue =\n retValue ||\n this.isFilterCompliantForValue(\n displayedValue,\n globalFilter\n );\n }\n if (retValue == true && !_filterIsNegative) {\n break;\n }\n if (retValue == false && _filterIsNegative) {\n break;\n }\n }\n }\n if (!retValue) {\n return false;\n }\n }\n\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n // There are no filters to check -> the element is valid\n if (!this.hasFilters(filters, columns, columnFilters)) {\n return true;\n }\n\n let keys = Object.keys(filters);\n // Filters\n for (let i = 0; i < keys.length; i++) {\n let key: string = keys[i];\n\n const cell = cells[key];\n if (!cell) {\n return false;\n }\n\n let filterValue = columnFilters.getTextFilterValue(filters, key);\n let interval = columnFilters.getIntervalTextFieldFilterValues(\n filters,\n getColumnByName(columns, key)\n );\n\n const _filterIsNegative: boolean =\n this.filterIsNegative(filterValue);\n let b1 = this.isFilterCompliantForCell(cell, filterValue, interval);\n let b2 = _filterIsNegative;\n if (\n !kupObjects.isNumber(cell.obj) &&\n !kupObjects.isDate(cell.obj) &&\n !kupObjects.isTime(cell.obj) &&\n !kupObjects.isTimestamp(cell.obj)\n ) {\n b2 = this.isFilterCompliantForCellObj(\n cell,\n filterValue,\n interval\n );\n }\n\n if (_filterIsNegative) {\n if (!b1 || !b2) {\n return false;\n }\n } else {\n if (!b1 && !b2) {\n return false;\n }\n }\n\n let filterValues = columnFilters.getCheckBoxFilterValues(\n filters,\n key\n );\n if (filterValues.length == 0) {\n continue;\n }\n let retValue = false;\n for (let i = 0; i < filterValues.length; i++) {\n let fv = filterValues[i];\n if (fv == null || fv.value == null) {\n continue;\n }\n if (cell.value != null) {\n if (\n cell.value.toLowerCase().trim() ==\n fv.value.toLowerCase().trim()\n ) {\n retValue = true;\n break;\n }\n }\n if (cell.obj != null) {\n if (\n cell.obj.k.toLowerCase().trim() ==\n fv.value.toLowerCase().trim()\n ) {\n retValue = true;\n break;\n }\n }\n }\n if (!retValue) {\n return false;\n }\n }\n return true;\n }\n\n hasFilters(\n filters: GenericFilter = {},\n columns: KupDataColumn[],\n columnFilters?: FiltersColumnMenu\n ) {\n if (filters == null) {\n return false;\n }\n let keys = Object.keys(filters);\n if (keys == null || keys.length < 1) {\n return false;\n }\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let col: KupDataColumn = null;\n if (key === treeMainColumnName) {\n col = {\n name: treeMainColumnName,\n title: '',\n };\n } else {\n col = getColumnByName(columns, key);\n }\n if (columnFilters.hasFiltersForColumn(filters, col)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Filters the rows data of a data-table component according to the parameters\n *\n * @param rows - The data of the rows to filter.\n * @param filters - The the filters for each column.\n * @param globalFilter - A global filter applied to all columns.\n * @param columns - The colmns on which the filter will take effect.\n * @todo This function can be improved in its speed by a refactor in which from two different cycles of execution for\n * single filters and global filter, all controls on a single column are done in a single cycle.\n */\n filterRows(\n rows: Array<KupDataRow> = [],\n filters: GenericFilter = {},\n globalFilter: string = '',\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu\n ): Array<KupDataRow> {\n if (!rows || rows == null) {\n return [];\n }\n\n // There are rows to filter\n let filteredRows: Array<KupDataRow> = [];\n const isUsingGlobalFilter: boolean = !!(globalFilter && columns);\n\n if (\n this.hasFilters(filters, columns, columnFilters) ||\n isUsingGlobalFilter\n ) {\n for (let i = 0; i < rows.length; i++) {\n let r: KupDataRow = rows[i];\n if (\n (r.id && r.id.indexOf('insert_') > -1) ||\n this.isRowCompliant(\n r,\n filters,\n globalFilter,\n isUsingGlobalFilter,\n columns,\n columnFilters\n )\n ) {\n filteredRows[filteredRows.length] = r;\n }\n }\n } else {\n filteredRows = [...rows];\n }\n\n return filteredRows;\n }\n\n getColumnValues(\n comp: KupDataTable | KupTree,\n column: KupDataColumn,\n globalFilterValue: string,\n columnFilters?: FiltersColumnMenu\n ): ValueDisplayedValue[] {\n let values: ValueDisplayedValue[] = new Array();\n if (columnFilters == null) {\n columnFilters = new FiltersColumnMenu();\n }\n let value = columnFilters.getTextFilterValueTmp(\n comp.filters,\n column.name\n );\n let interval = columnFilters.getIntervalTextFieldFilterValuesTmp(\n comp.filters,\n column\n );\n let checkboxes = columnFilters.getCheckBoxFilterValues(\n comp.filters,\n column.name\n );\n\n if (\n column.valuesForFilter != null &&\n column.valuesForFilter.length > 0\n ) {\n column.valuesForFilter.forEach((element) => {\n let v = element;\n if (\n Filters.valuesArrayContainsValue(checkboxes, v) ||\n value == '' ||\n columnFilters.isFilterCompliantForSimpleValue(\n v,\n column.obj,\n value,\n interval\n )\n ) {\n values.push({\n value: v,\n displayedValue: getValueForDisplay(\n v,\n column.obj,\n column.decimals\n ),\n });\n }\n });\n return values;\n }\n\n /** è necessario estrarre i valori della colonna di tutte le righe\n * filtrate SENZA il filtro della colonna stessa corrente */\n let tmpFilters: GenericFilter = { ...comp.filters };\n\n tmpFilters[column.name] = {\n textField: value,\n textFieldTmp: value,\n checkBoxes: [],\n interval: interval,\n intervalTmp: interval,\n };\n\n let tmpRows = this.filterRows(\n comp.getRows(),\n tmpFilters,\n globalFilterValue,\n comp.getVisibleColumns(),\n columnFilters\n );\n\n for (let i = 0; i < checkboxes.length; i++) {\n values.push(checkboxes[i]);\n }\n\n return kupData.cell.getUnivocalValue({ rows: tmpRows }, column, true);\n }\n}\n","import {\n SortObject,\n SortMode,\n GroupObject,\n TotalMode,\n TotalsMap,\n KupDataTableRow,\n KupDataTableRowGroup,\n KupDataTableCell,\n KupDataTableDataset,\n} from './kup-data-table-declarations';\nimport { GenericFilter } from '../../utils/filters/filters-declarations';\nimport { FiltersColumnMenu } from '../../utils/filters/filters-column-menu';\nimport {\n getCellValueForDisplay,\n getColumnByName,\n compareCell,\n CMBandACPAdapter,\n RADAdapter,\n CHKAdapter,\n CHIAdapter,\n SWTAdapter,\n} from '../../utils/cell-utils';\nimport { FiltersRows } from '../../utils/filters/filters-rows';\nimport { KupDom } from '../../managers/kup-manager/kup-manager-declarations';\nimport {\n KupDataColumn,\n KupDataDataset,\n} from '../../managers/kup-data/kup-data-declarations';\nimport { KupDatesFormats } from '../../managers/kup-dates/kup-dates-declarations';\nimport { FCellShapes } from '../../f-components/f-cell/f-cell-declarations';\nimport { KupDebugCategory } from '../../managers/kup-debug/kup-debug-declarations';\n\nconst dom: KupDom = document.documentElement as KupDom;\n\nexport function sortRows(\n rows: Array<KupDataTableRow> = [],\n sort: Array<SortObject> = []\n): Array<KupDataTableRow> {\n if (!rows || rows.length === 0) {\n return [];\n }\n\n // check if row is group\n if (rows[0].group) {\n return sortGroupRows(rows, sort);\n }\n\n // sorting rows\n if (!sort || sort.length === 0) {\n // no sort -> return rows as they are\n return rows;\n }\n\n // check multiple sort\n const isMultiSort = sort.length > 1;\n\n // sorting rows\n return rows.slice(0).sort((r1: KupDataTableRow, r2: KupDataTableRow) => {\n if (isMultiSort) {\n for (let i = 0; i < sort.length; i++) {\n const compare = compareRows(r1, r2, sort[i]);\n\n if (compare !== 0) {\n // not same row\n return compare;\n }\n }\n\n // same row\n return 0;\n } else {\n return compareRows(r1, r2, sort[0]);\n }\n });\n}\n\nfunction sortGroupRows(\n rows: Array<KupDataTableRow> = [],\n sort: Array<SortObject> = []\n): Array<KupDataTableRow> {\n if (!rows || rows.length === 0) {\n return [];\n }\n\n // getting columm group\n const groupColumn = rows[0].group.column;\n\n // check if column is in sort\n let sortObject = getSortOnColumn(groupColumn, sort);\n\n if (!sortObject) {\n sortObject = {\n column: groupColumn,\n sortMode: SortMode.A,\n };\n }\n\n // sorting rows\n rows.sort((r1, r2) => {\n // creating fake cells\n const cell1: KupDataTableCell = {\n obj: r1.group.obj,\n value: r1.group.id,\n };\n\n const cell2: KupDataTableCell = {\n obj: r2.group.obj,\n value: r2.group.id,\n };\n\n return compareCell(cell1, cell2, sortObject.sortMode);\n });\n\n // sorting children\n rows.forEach((row) => {\n row.group.children = sortRows(row.group.children, sort);\n });\n\n return rows;\n}\n\nfunction getSortOnColumn(\n column: string = '',\n sort: Array<SortObject> = []\n): SortObject {\n if (!column || !sort || sort.length === 0) {\n return null;\n }\n\n for (let sortObject of sort) {\n if (sortObject.column === column) {\n return sortObject;\n }\n }\n\n return null;\n}\n\nfunction compareRows(\n r1: KupDataTableRow,\n r2: KupDataTableRow,\n sortObj: SortObject\n): number {\n const cell1: KupDataTableCell = r1.cells[sortObj.column];\n const cell2: KupDataTableCell = r2.cells[sortObj.column];\n\n if (!cell1 && !cell2) {\n return 0;\n }\n\n if (!cell1) {\n return 1;\n }\n\n if (!cell2) {\n return -1;\n }\n\n return compareCell(cell1, cell2, sortObj.sortMode);\n}\n\n//-------- FILTER FUNCTIONS --------\n/**\n * Filters the rows data of a data-table component according to the parameters\n *\n * @param rows - The data of the rows to filter.\n * @param filters - The the filters for each column.\n * @param globalFilter - A global filter applied to all columns.\n * @param columns - The colmns on which the filter will take effect.\n * @todo This function can be improved in its speed by a refactor in which from two different cycles of execution for\n * single filters and global filter, all controls on a single column are done in a single cycle.\n */\n\nexport function filterRows(\n rows: Array<KupDataTableRow> = [],\n filters: GenericFilter = {},\n globalFilter: string = '',\n columns: KupDataColumn[] = [],\n columnFilters?: FiltersColumnMenu,\n filtersRows?: FiltersRows\n): Array<KupDataTableRow> {\n if (filtersRows == null) {\n filtersRows = new FiltersRows();\n }\n\n return filtersRows.filterRows(\n rows,\n filters,\n globalFilter,\n columns,\n columnFilters\n );\n}\n\nexport function groupRows(\n columns: KupDataColumn[] = [],\n rows: KupDataTableRow[] = [],\n groups: GroupObject[] = [],\n totals: TotalsMap = {}\n): Array<KupDataTableRow> {\n if (!rows) {\n return [];\n }\n\n if (!groups || groups.length === 0 || !columns || columns.length === 0) {\n return rows;\n }\n\n // Keeps label of the valid columns\n const columnLabels: { [index: string]: string } = {};\n\n // remove invalid groups and store column labels\n const validGroups = groups.filter(({ column }) => {\n for (let { name, title } of columns) {\n if (name === column) {\n // Store label of the columns\n columnLabels[name] = title;\n return true;\n }\n }\n return false;\n });\n\n if (validGroups.length === 0) {\n // no valid groups\n return rows;\n }\n\n // creating root\n const groupRows: Array<KupDataTableRow> = [];\n\n // obj used to calculate the group distinct value\n let distinctObj = {};\n\n rows.forEach((row: KupDataTableRow) => {\n // getting column name from first group\n const columnName = validGroups[0].column;\n // getting row value\n const cell = row.cells[columnName];\n\n if (cell) {\n const column = getColumnByName(columns, columnName);\n const cellValueForDisplay = getCellValueForDisplay(column, cell);\n const cellValue = cell.value;\n let groupRow: KupDataTableRow = null;\n // check in already in groupedRow\n for (let currentGroupRow of groupRows) {\n if (currentGroupRow.group.label === cellValueForDisplay) {\n groupRow = currentGroupRow;\n break;\n }\n }\n if (groupRow === null) {\n // create group row\n groupRow = {\n group: {\n id: cellValue,\n parent: null,\n column: columnName,\n columnLabel: columnLabels[columnName],\n expanded: false,\n label: cellValueForDisplay,\n children: [],\n obj: cell.obj,\n totals: {},\n },\n cells: {},\n };\n // add group to list\n groupRows.push(groupRow);\n }\n for (let i = 1; i < validGroups.length; i++) {\n const group = validGroups[i];\n // getting cell value\n const tempCell = row.cells[group.column];\n if (tempCell) {\n const column = getColumnByName(columns, group.column);\n const tempCellValueForDisplay = getCellValueForDisplay(\n column,\n tempCell\n );\n const tempCellValue = tempCell.value;\n // check if group already exists\n let tempGroupingRow: KupDataTableRow = null;\n for (let j = 0; j < groupRow.group.children.length; j++) {\n const childGroup = groupRow.group.children[j];\n const groupLabel = childGroup.group.label;\n\n if (groupLabel === tempCellValueForDisplay) {\n tempGroupingRow = childGroup;\n break;\n }\n }\n if (!tempGroupingRow) {\n tempGroupingRow = {\n cells: {},\n group: {\n id: tempCellValue,\n parent: groupRow,\n column: group.column,\n columnLabel: columnLabels[group.column],\n children: [],\n expanded: false,\n label: tempCellValueForDisplay,\n totals: {},\n obj: tempCell.obj,\n },\n };\n adjustGroupId(tempGroupingRow);\n groupRow.group.children.push(tempGroupingRow);\n }\n groupRow = tempGroupingRow;\n }\n }\n // adding row\n groupRow.group.children.push(row);\n\n updateGroupTotal(groupRow, totals, row, distinctObj);\n }\n });\n\n adjustGroupsDistinct(groupRows, totals, distinctObj);\n adjustGroupsAverageOrFormula(groupRows, TotalMode.AVERAGE, totals);\n adjustGroupsAverageOrFormula(groupRows, TotalMode.MATH, totals);\n\n return groupRows;\n}\n\nfunction updateGroupTotal(\n groupRow: KupDataTableRow,\n totals: TotalsMap,\n addedRow: KupDataTableRow,\n distinctObj: Object\n): void {\n if (!groupRow || !totals) {\n return;\n }\n\n const keys = Object.keys(totals);\n\n if (keys.length === 0) {\n return;\n }\n\n keys.forEach((key) => {\n const cell = addedRow.cells[key];\n\n if (cell) {\n const _isNumber = dom.ketchup.objects.isNumber(cell.obj);\n const totalMode = totals[key];\n\n switch (totalMode) {\n case TotalMode.COUNT:\n let currentTotalValue: number =\n groupRow.group.totals[key] || 0;\n groupRow.group.totals[key] = ++currentTotalValue;\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n let currentParentCount: number =\n parent.group.totals[key] || 0;\n parent.group.totals[key] = ++currentParentCount;\n parent = parent.group.parent;\n }\n break;\n case TotalMode.DISTINCT:\n let cellValue;\n if (_isNumber) {\n cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n } else {\n cellValue = cell.value;\n }\n let distinctGroup = distinctObj[groupRow.group.id];\n if (!distinctGroup) {\n distinctObj[groupRow.group.id] = {};\n distinctObj[groupRow.group.id][key] = [];\n distinctObj[groupRow.group.id][key].push(cellValue);\n } else {\n let distinctList = distinctObj[groupRow.group.id][key];\n if (!distinctList) {\n // first round\n distinctObj[groupRow.group.id][key] = [];\n distinctObj[groupRow.group.id][key].push(cellValue);\n } else {\n // update the list\n distinctList.push(cellValue);\n }\n }\n // updating parents\n let distinctParent = groupRow.group.parent;\n while (distinctParent != null) {\n // get parent value\n let distinctGroupParent =\n distinctObj[distinctParent.group.id];\n if (!distinctGroupParent) {\n distinctObj[distinctParent.group.id] = {};\n distinctObj[distinctParent.group.id][key] = [];\n distinctObj[distinctParent.group.id][key].push(\n cellValue\n );\n } else {\n let distinctParentList =\n distinctObj[distinctParent.group.id][key];\n if (!distinctParentList) {\n // first round\n distinctObj[distinctParent.group.id][key] = [];\n distinctObj[distinctParent.group.id][key].push(\n cellValue\n );\n } else {\n // update the list\n distinctParentList.push(cellValue);\n }\n }\n // continue\n distinctParent = distinctParent.group.parent;\n }\n break;\n case TotalMode.SUM:\n case TotalMode.AVERAGE:\n if (_isNumber && cell.value) {\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n\n const currentTotalValue: number =\n groupRow.group.totals[key] || 0;\n groupRow.group.totals[key] =\n cellValue + currentTotalValue;\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentSum = dom.ketchup.math.numberify(\n parent.group.totals[key] || 0\n );\n parent.group.totals[key] =\n cellValue + currentParentSum;\n\n parent = parent.group.parent;\n }\n }\n break;\n // TODO DRY the MIN and MAX functions\n case TotalMode.MIN:\n if (_isNumber && cell.value) {\n const currentMinValue = groupRow.group.totals[key];\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n if (currentMinValue) {\n groupRow.group.totals[key] = Math.min(\n currentMinValue,\n cellValue\n );\n } else {\n // first round\n groupRow.group.totals[key] = cellValue;\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMin = parent.group.totals[key];\n if (currentParentMin) {\n parent.group.totals[key] = Math.min(\n currentParentMin,\n cellValue\n );\n } else {\n // first round\n parent.group.totals[key] = cellValue;\n }\n parent = parent.group.parent;\n }\n } else if (\n cell.value &&\n dom.ketchup.objects.isDate(cell.obj)\n ) {\n if (\n dom.ketchup.dates.isValidFormattedStringDate(\n cell.value\n )\n ) {\n const currentMinValue = groupRow.group.totals[key];\n if (currentMinValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(currentMinValue)\n );\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.min(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMin =\n parent.group.totals[key];\n if (currentParentMin) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(\n currentParentMin\n )\n );\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.min(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n // first round\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n parent = parent.group.parent;\n }\n }\n }\n break;\n // TODO DRY the MIN and MAX functions\n case TotalMode.MAX:\n if (_isNumber && cell.value) {\n const currentMaxValue = groupRow.group.totals[key];\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n if (currentMaxValue) {\n groupRow.group.totals[key] = Math.max(\n currentMaxValue,\n cellValue\n );\n } else {\n // first round\n groupRow.group.totals[key] = cellValue;\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMax = parent.group.totals[key];\n if (currentParentMax) {\n parent.group.totals[key] = Math.max(\n currentParentMax,\n cellValue\n );\n } else {\n // first round\n parent.group.totals[key] = cellValue;\n }\n parent = parent.group.parent;\n }\n } else if (\n cell.value &&\n dom.ketchup.objects.isDate(cell.obj)\n ) {\n if (\n dom.ketchup.dates.isValidFormattedStringDate(\n cell.value\n )\n ) {\n const currentMaxValue = groupRow.group.totals[key];\n if (currentMaxValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(currentMaxValue)\n );\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.max(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n groupRow.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n // updating parents\n let parent = groupRow.group.parent;\n while (parent != null) {\n const currentParentMax =\n parent.group.totals[key];\n if (currentParentMax) {\n let moments = [];\n moments.push(cellValue);\n moments.push(\n dom.ketchup.dates.toDayjs(\n currentParentMax\n )\n );\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.max(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n // first round\n parent.group.totals[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n parent = parent.group.parent;\n }\n }\n }\n break;\n default: {\n if (totalMode.indexOf(TotalMode.MATH) != 0) {\n console.warn(`invalid total mode: ${totalMode}`);\n }\n break;\n }\n }\n }\n });\n}\n\nfunction adjustGroupsDistinct(\n groupRows: Array<KupDataTableRow>,\n totals: TotalsMap,\n distinctObj: Object\n) {\n if (!groupRows || !totals) {\n return;\n }\n\n const keys = Object.keys(totals);\n\n if (groupRows.length === 0 || !groupRows[0].group || keys.length === 0) {\n return;\n }\n\n let toAdjustKeys = keys.filter((key) => TotalMode.DISTINCT === totals[key]);\n\n if (toAdjustKeys.length > 0) {\n groupRows\n .filter((groupRow) => groupRow.group.children.length > 0)\n .forEach((groupRow) =>\n adjustGroupDistinct(groupRow, toAdjustKeys, distinctObj)\n );\n }\n}\n\nfunction adjustGroupsAverageOrFormula(\n groupRows: Array<KupDataTableRow>,\n type: TotalMode,\n totals: TotalsMap\n): void {\n if (!groupRows || !totals) {\n return;\n }\n\n const keys = Object.keys(totals);\n\n if (groupRows.length === 0 || !groupRows[0].group || keys.length === 0) {\n return;\n }\n\n let toAdjustKeys;\n\n if (type == TotalMode.AVERAGE) {\n toAdjustKeys = keys.filter((key) => TotalMode.AVERAGE === totals[key]);\n }\n if (type == TotalMode.MATH) {\n toAdjustKeys = keys.filter(\n (key) => totals[key].indexOf(TotalMode.MATH) == 0\n );\n }\n\n if (toAdjustKeys.length > 0) {\n groupRows\n .filter((groupRow) => groupRow.group.children.length > 0)\n .forEach((groupRow) =>\n adjustGroupAverageOrFormula(\n groupRow,\n type,\n toAdjustKeys,\n totals\n )\n );\n }\n}\n\nfunction adjustGroupDistinct(\n groupRow: KupDataTableRow,\n toAdjustKeys: Array<string>,\n distinctObj: Object\n) {\n const children = groupRow.group.children;\n\n if (children.length === 0) {\n return;\n }\n\n if (children[0].group) {\n children.forEach((child) => {\n adjustGroupDistinct(child, toAdjustKeys, distinctObj);\n });\n }\n\n toAdjustKeys.forEach((key) => {\n const distinctList = distinctObj[groupRow.group.id][key];\n groupRow.group.totals[key] = new Set(distinctList).size;\n });\n}\n\n/**\n * @returns number of 'leaf' of group\n */\nfunction adjustGroupAverageOrFormula(\n row: KupDataTableRow,\n type: TotalMode,\n toAdjustKeys: Array<string>,\n totals: TotalsMap\n): number {\n const children = row.group.children;\n\n if (children.length === 0) {\n return 0;\n }\n\n let numberOfLeaf = 0;\n\n // check if child is a grouping row\n if (children[0].group) {\n children.forEach((child) => {\n numberOfLeaf += adjustGroupAverageOrFormula(\n child,\n type,\n toAdjustKeys,\n totals\n );\n });\n } else {\n numberOfLeaf = children.length;\n }\n // adjust average/formulas\n toAdjustKeys.forEach((key) => {\n if (type == TotalMode.AVERAGE) {\n row.group.totals[key] = row.group.totals[key] / numberOfLeaf;\n }\n if (type == TotalMode.MATH) {\n let formula = totals[key].substring(TotalMode.MATH.length);\n row.group.totals[key] = dom.ketchup.math.formulas.custom(\n formula,\n row.group.totals\n );\n }\n });\n\n return numberOfLeaf;\n}\n\nexport function normalizeRows(\n columns: Array<KupDataColumn>,\n rows: Array<KupDataTableRow>\n): Array<KupDataTableRow> {\n if (rows) {\n const normalizedrows = Object.assign(rows);\n rows.forEach((row: KupDataTableRow) => {\n columns.forEach((column) => {\n if (row.cells) {\n const cell = row.cells[column.name];\n if (cell && column.obj && !cell.obj) {\n // cell.obj = Object.assign(column.obj);\n cell.obj = {\n t: column.obj.t,\n p: column.obj.p,\n k: cell.value,\n };\n }\n }\n });\n });\n return normalizedrows;\n } else {\n return undefined;\n }\n}\n\nexport function calcTotals(\n rows: Array<KupDataTableRow> = [],\n totals: TotalsMap = {}\n): { [index: string]: number } {\n if (\n dom.ketchup.objects.isEmptyJsObject(rows) ||\n dom.ketchup.objects.isEmptyJsObject(totals)\n ) {\n return {};\n }\n const keys = Object.keys(totals);\n const footerRow: { [index: string]: any } = {};\n const dateColumns: string[] = new Array();\n\n // if there are only COUNT, no need to loop on rows\n let onlyCount =\n keys.length === 0 ||\n keys.every((key) => totals[key] === TotalMode.COUNT);\n if (onlyCount) {\n keys.forEach((columnName) => (footerRow[columnName] = rows.length));\n } else {\n let distinctObj = {};\n rows.forEach((r, index, array) => {\n keys.filter(\n (key) =>\n TotalMode.COUNT !== totals[key] &&\n totals[key].indexOf(TotalMode.MATH) != 0\n ).forEach((key) => {\n // getting cell\n const cell = r.cells[key];\n if (cell) {\n if (totals[key] === TotalMode.DISTINCT) {\n let cellValue;\n if (dom.ketchup.objects.isNumber(cell.obj)) {\n cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n } else {\n cellValue = cell.value;\n }\n let distinctList = distinctObj[key];\n if (!distinctList) {\n // first round\n distinctObj[key] = [];\n distinctObj[key].push(cellValue);\n } else {\n // update the list\n distinctList.push(cellValue);\n }\n } else if (dom.ketchup.objects.isNumber(cell.obj)) {\n const cellValue = dom.ketchup.math.numberify(\n dom.ketchup.math.numberifySafe(cell.value)\n );\n let currentFooterValue = footerRow[key];\n switch (true) {\n // TODO DRY the MIN and MAX functions\n case totals[key] === TotalMode.MIN:\n if (currentFooterValue) {\n footerRow[key] = Math.min(\n currentFooterValue,\n cellValue\n );\n } else {\n footerRow[key] = cellValue;\n }\n break;\n case totals[key] === TotalMode.MAX:\n if (currentFooterValue) {\n footerRow[key] = Math.max(\n currentFooterValue,\n cellValue\n );\n } else {\n footerRow[key] = cellValue;\n }\n break;\n default:\n // SUM\n currentFooterValue = footerRow[key] || 0;\n footerRow[key] =\n cellValue +\n dom.ketchup.math.numberify(\n currentFooterValue\n );\n }\n // TODO DRY the MIN and MAX functions\n } else if (dom.ketchup.objects.isDate(cell.obj)) {\n if (dateColumns.indexOf(key) == -1) {\n dateColumns.push(key);\n }\n if (\n dom.ketchup.dates.isValidFormattedStringDate(\n cell.value\n )\n ) {\n const cellValue = dom.ketchup.dates.toDate(\n dom.ketchup.dates.toDayjs(cell.value)\n );\n const currentFooterValue = footerRow[key]\n ? dom.ketchup.dates.toDate(\n dom.ketchup.dates.toDayjs(footerRow[key])\n )\n : null;\n switch (true) {\n case totals[key] === TotalMode.MIN:\n if (currentFooterValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(currentFooterValue);\n footerRow[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.min(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n footerRow[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n break;\n case totals[key] === TotalMode.MAX:\n if (currentFooterValue) {\n let moments = [];\n moments.push(cellValue);\n moments.push(currentFooterValue);\n footerRow[key] =\n dom.ketchup.dates.format(\n dom.ketchup.dates.max(moments),\n KupDatesFormats.ISO_DATE\n );\n } else {\n footerRow[key] =\n dom.ketchup.dates.format(\n cellValue,\n KupDatesFormats.ISO_DATE\n );\n }\n break;\n default:\n break;\n }\n }\n }\n }\n if (\n index === array.length - 1 &&\n totals[key] === TotalMode.DISTINCT\n ) {\n // last round\n footerRow[key] = new Set(distinctObj[key]).size;\n distinctObj[key] = [];\n }\n });\n });\n }\n // fixing MATH, AVERAGE and COUNT\n for (let key of keys) {\n switch (true) {\n case totals[key] === TotalMode.AVERAGE:\n const sum: number = footerRow[key];\n if (sum && rows.length > 0) {\n footerRow[key] = sum / rows.length;\n }\n break;\n case totals[key] === TotalMode.COUNT:\n footerRow[key] = rows.length;\n break;\n case totals[key].indexOf(TotalMode.MATH) == 0:\n footerRow[key] = dom.ketchup.math.formulas.custom(\n totals[key].substring(TotalMode.MATH.length),\n footerRow\n );\n break;\n default:\n break;\n }\n if (footerRow[key]) {\n if (dateColumns.indexOf(key) != -1) {\n footerRow[key] = dom.ketchup.dates.format(footerRow[key]);\n } else if (dom.ketchup.math.isNumber(footerRow[key])) {\n footerRow[key] = +footerRow[key].toFixed(2);\n }\n }\n }\n return footerRow;\n}\n\nfunction adjustGroupId(row: KupDataTableRow): void {\n if (!row.group) {\n return;\n }\n\n let groupID = row.group.id;\n\n let parentRow = row.group.parent;\n\n while (parentRow !== null) {\n groupID = `${parentRow.group.id};${groupID}`;\n parentRow = parentRow.group.parent;\n }\n\n row.group.id = groupID;\n}\n\nexport function paginateRows(\n rows: KupDataTableRow[],\n currentPage: number,\n rowsPerPage: number,\n areGrouped: boolean\n) {\n const start: number = currentPage * rowsPerPage - rowsPerPage;\n const end: number = start + Number(rowsPerPage);\n if (areGrouped == false) {\n return rows.slice(start, end);\n }\n let pagRows: Array<KupDataTableRow> = [];\n\n _paginateRows(rows, pagRows, start, Number(rowsPerPage), 0);\n\n return pagRows;\n}\n\nfunction _paginateRows(\n rows: KupDataTableRow[],\n pagRows: KupDataTableRow[],\n start: number,\n rowsPerPage: number,\n ci: number\n): { ci: number; added: boolean } {\n let added: boolean = false;\n for (let i: number = 0; i < rows.length; i++) {\n let originalRow = rows[i];\n let row: KupDataTableRow = cloneRow(rows[i]);\n if (\n originalRow.group != null &&\n originalRow.group.children != null &&\n originalRow.group.children.length > 0\n ) {\n row.group.children = [];\n let retValue: { ci: number; added: boolean } = _paginateRows(\n originalRow.group.children,\n row.group.children,\n start,\n rowsPerPage,\n ci\n );\n ci = retValue.ci;\n added = retValue.added;\n if (added == true) {\n pagRows[pagRows.length] = row;\n }\n } else {\n if (ci >= start) {\n pagRows[pagRows.length] = row;\n added = true;\n }\n ci++;\n }\n\n if (ci >= start + rowsPerPage) {\n break;\n }\n }\n return { ci: ci, added: added };\n}\n\nfunction cloneRow(row: KupDataTableRow): KupDataTableRow {\n if (row == null) {\n return null;\n } else {\n return {\n id: row.id,\n cells: { ...row.cells },\n actions: row.actions ? [...row.actions] : null,\n group: cloneRowGroup(row.group),\n clonedFrom: row,\n readOnly: row.readOnly,\n cssClass: row.cssClass,\n };\n }\n}\n\nfunction cloneRows(rows: Array<KupDataTableRow>): Array<KupDataTableRow> {\n if (rows == null) {\n return null;\n }\n let cloned: Array<KupDataTableRow> = [];\n for (let i: number = 0; i < rows.length; i++) {\n cloned[cloned.length] = cloneRow(rows[i]);\n }\n return cloned;\n}\n\nfunction cloneRowGroup(group: KupDataTableRowGroup): KupDataTableRowGroup {\n if (group == null) {\n return null;\n }\n let cloned: KupDataTableRowGroup = {\n id: group.id,\n parent: { ...group.parent },\n column: group.column,\n columnLabel: group.columnLabel,\n expanded: group.expanded,\n label: group.label,\n children: cloneRows(group.children),\n obj: { ...group.obj },\n totals: { ...group.totals },\n };\n\n return cloned;\n}\n\n/**\n * Returns a KupDataDataset obtained as the difference between originalData and modifiedData\n * The checked data are cell.value and cell.obj.k with the same column and row\n * @param originalData\n * @param modifiedData\n * @param includesAlsoEmptyRows\n * @returns\n */\nexport function getDiffData(\n originalData: KupDataDataset,\n modifiedData: KupDataDataset,\n includesAlsoEmptyRows: boolean = false\n): KupDataDataset {\n const diffDataTable = {\n columns: modifiedData.columns,\n rows: [],\n };\n\n for (const modifiedRow of modifiedData.rows) {\n const newRow = { cells: {}, id: modifiedRow.id };\n\n for (const column of modifiedData.columns) {\n const cellKey = column.name;\n const modifiedCell = modifiedRow.cells[cellKey];\n\n const originalRow = originalData.rows.find(\n (row) => row.id === modifiedRow.id\n );\n const originalCell = originalRow\n ? originalRow.cells[cellKey]\n : null;\n\n if (!originalCell || modifiedCell.value !== originalCell.value) {\n newRow.cells[cellKey] = modifiedCell;\n }\n }\n\n if (Object.keys(newRow.cells).length > 0 || includesAlsoEmptyRows) {\n diffDataTable.rows.push(newRow);\n }\n }\n\n return diffDataTable;\n}\n\nexport function decorateDataTable(data: KupDataTableDataset) {\n data.rows?.forEach((row) => {\n Object.keys(row.cells).forEach((cellKey) => {\n let cell: KupDataTableCell = row.cells[cellKey];\n\n const value = cell.value;\n const options = cell['options'];\n cell.isEditable = cell.isEditable ?? cell['editable'];\n\n if (options) {\n const shapeAdapters = {\n [FCellShapes.AUTOCOMPLETE]: () =>\n CMBandACPAdapter(value, '', options),\n [FCellShapes.COMBOBOX]: () =>\n CMBandACPAdapter(value, '', options),\n [FCellShapes.RADIO]: () => RADAdapter(value, options),\n [FCellShapes.CHECKBOX]: () => CHKAdapter(value, options),\n [FCellShapes.CHIP]: () => CHIAdapter(value),\n [FCellShapes.SWITCH]: () => SWTAdapter(value, ''),\n };\n\n const adapterFunction = shapeAdapters[cell.shape];\n\n if (adapterFunction) {\n cell.data = adapterFunction();\n } else {\n if (cell.shape) {\n dom.ketchup.debug.logMessage(\n 'kup-data',\n `Shape specified ${\n cell.shape\n } in cell ${JSON.stringify(cell)} unsupported`,\n KupDebugCategory.WARNING\n );\n }\n }\n }\n });\n });\n}\n"],"version":3}