@taon-dev/ui 21.0.26 → 21.0.27

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 (207) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +3 -3
  2. package/browser/fesm2022/{ui-browser-taon-datatable.component.html.de-DE.i18n.data-DaX_bbSs.mjs → ui-browser-taon-datatable.component.html.de-DE.i18n.data-BoSFa5hw.mjs} +4 -4
  3. package/browser/fesm2022/{ui-browser-taon-datatable.component.html.de-DE.i18n.data-DaX_bbSs.mjs.map → ui-browser-taon-datatable.component.html.de-DE.i18n.data-BoSFa5hw.mjs.map} +1 -1
  4. package/browser/fesm2022/{ui-browser-taon-datatable.component.html.en-US.i18n.data-BtONSnMn.mjs → ui-browser-taon-datatable.component.html.en-US.i18n.data-BaRVxYHq.mjs} +4 -4
  5. package/browser/fesm2022/{ui-browser-taon-datatable.component.html.en-US.i18n.data-BtONSnMn.mjs.map → ui-browser-taon-datatable.component.html.en-US.i18n.data-BaRVxYHq.mjs.map} +1 -1
  6. package/browser/fesm2022/{ui-browser-taon-datatable.component.html.pl-PL.i18n.data-Ctfv3ouD.mjs → ui-browser-taon-datatable.component.html.pl-PL.i18n.data-7lC0y8ph.mjs} +4 -4
  7. package/browser/fesm2022/{ui-browser-taon-datatable.component.html.pl-PL.i18n.data-Ctfv3ouD.mjs.map → ui-browser-taon-datatable.component.html.pl-PL.i18n.data-7lC0y8ph.mjs.map} +1 -1
  8. package/browser/fesm2022/{ui-browser-taon-datatable.component.ts.de-DE.i18n.data-DOHkRE3t.mjs → ui-browser-taon-datatable.component.ts.de-DE.i18n.data-CJvRlSjZ.mjs} +4 -4
  9. package/browser/fesm2022/{ui-browser-taon-datatable.component.ts.de-DE.i18n.data-DOHkRE3t.mjs.map → ui-browser-taon-datatable.component.ts.de-DE.i18n.data-CJvRlSjZ.mjs.map} +1 -1
  10. package/browser/fesm2022/{ui-browser-taon-datatable.component.ts.en-US.i18n.data-C6XKszRj.mjs → ui-browser-taon-datatable.component.ts.en-US.i18n.data-ywwsyxWl.mjs} +4 -4
  11. package/browser/fesm2022/{ui-browser-taon-datatable.component.ts.en-US.i18n.data-C6XKszRj.mjs.map → ui-browser-taon-datatable.component.ts.en-US.i18n.data-ywwsyxWl.mjs.map} +1 -1
  12. package/browser/fesm2022/{ui-browser-taon-datatable.component.ts.pl-PL.i18n.data-B20v3CeP.mjs → ui-browser-taon-datatable.component.ts.pl-PL.i18n.data-DidmnprC.mjs} +4 -4
  13. package/browser/fesm2022/{ui-browser-taon-datatable.component.ts.pl-PL.i18n.data-B20v3CeP.mjs.map → ui-browser-taon-datatable.component.ts.pl-PL.i18n.data-DidmnprC.mjs.map} +1 -1
  14. package/browser/fesm2022/ui-browser.mjs +184 -8
  15. package/browser/fesm2022/ui-browser.mjs.map +1 -1
  16. package/browser/package.json +1 -1
  17. package/browser/types/ui-browser.d.ts +32 -5
  18. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.html.de-DE.i18n.data-B9t8s2_8.mjs → ui-browser-prod-taon-datatable.component.html.de-DE.i18n.data-BPCPpfL1.mjs} +4 -4
  19. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.html.de-DE.i18n.data-B9t8s2_8.mjs.map → ui-browser-prod-taon-datatable.component.html.de-DE.i18n.data-BPCPpfL1.mjs.map} +1 -1
  20. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.html.en-US.i18n.data-DRsYpt_k.mjs → ui-browser-prod-taon-datatable.component.html.en-US.i18n.data-CljILnW8.mjs} +4 -4
  21. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.html.en-US.i18n.data-DRsYpt_k.mjs.map → ui-browser-prod-taon-datatable.component.html.en-US.i18n.data-CljILnW8.mjs.map} +1 -1
  22. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.html.pl-PL.i18n.data-ByVALZEQ.mjs → ui-browser-prod-taon-datatable.component.html.pl-PL.i18n.data-BwA3pgv9.mjs} +4 -4
  23. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.html.pl-PL.i18n.data-ByVALZEQ.mjs.map → ui-browser-prod-taon-datatable.component.html.pl-PL.i18n.data-BwA3pgv9.mjs.map} +1 -1
  24. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.ts.de-DE.i18n.data-BlXRwzzT.mjs → ui-browser-prod-taon-datatable.component.ts.de-DE.i18n.data-CdqI-0eV.mjs} +4 -4
  25. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.ts.de-DE.i18n.data-BlXRwzzT.mjs.map → ui-browser-prod-taon-datatable.component.ts.de-DE.i18n.data-CdqI-0eV.mjs.map} +1 -1
  26. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.ts.en-US.i18n.data-DsQ8aLcU.mjs → ui-browser-prod-taon-datatable.component.ts.en-US.i18n.data-Cd7wGGSy.mjs} +4 -4
  27. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.ts.en-US.i18n.data-DsQ8aLcU.mjs.map → ui-browser-prod-taon-datatable.component.ts.en-US.i18n.data-Cd7wGGSy.mjs.map} +1 -1
  28. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.ts.pl-PL.i18n.data-DircsInd.mjs → ui-browser-prod-taon-datatable.component.ts.pl-PL.i18n.data-k7j3mmhy.mjs} +4 -4
  29. package/browser-prod/fesm2022/{ui-browser-prod-taon-datatable.component.ts.pl-PL.i18n.data-DircsInd.mjs.map → ui-browser-prod-taon-datatable.component.ts.pl-PL.i18n.data-k7j3mmhy.mjs.map} +1 -1
  30. package/browser-prod/fesm2022/ui-browser-prod.mjs +184 -8
  31. package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
  32. package/browser-prod/package.json +1 -1
  33. package/browser-prod/types/ui-browser-prod.d.ts +32 -5
  34. package/full-dts/build-info._auto-generated_.d.ts +1 -1
  35. package/full-dts/index._auto-generated_.d.ts +1 -0
  36. package/full-dts/taon-admin-layout/taon-admin-content-footer.service.d.ts +6 -0
  37. package/full-dts/taon-admin-layout/taon-admin-layout.component.d.ts +2 -0
  38. package/full-dts/taon-datatable/taon-datatable.component.d.ts +19 -0
  39. package/html/lib/taon-admin-layout/taon-admin-layout.component.html +4 -1
  40. package/html/lib/taon-datatable/taon-datatable.component.html +21 -14
  41. package/lib/build-info._auto-generated_.d.ts +1 -1
  42. package/lib/build-info._auto-generated_.js +1 -1
  43. package/lib/index._auto-generated_.js +1 -0
  44. package/lib/index._auto-generated_.js.map +1 -1
  45. package/lib/package.json +1 -1
  46. package/lib/taon-admin-layout/index.d.ts +1 -1
  47. package/lib/taon-admin-layout/index.js +2 -2
  48. package/lib/taon-admin-welcome/index.d.ts +1 -1
  49. package/lib/taon-admin-welcome/index.js +2 -2
  50. package/lib/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.js +3 -3
  51. package/lib/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.js +3 -3
  52. package/lib/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.js +3 -3
  53. package/lib/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.js +3 -3
  54. package/lib/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.js +3 -3
  55. package/lib/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.js +3 -3
  56. package/lib/taon-datatable/index.d.ts +1 -1
  57. package/lib/taon-datatable/index.js +2 -2
  58. package/lib/taon-draggable-button-panel/index.d.ts +1 -1
  59. package/lib/taon-draggable-button-panel/index.js +2 -2
  60. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  61. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  62. package/lib-esm/lib/index._auto-generated_.js +1 -0
  63. package/lib-esm/lib/index._auto-generated_.js.map +1 -1
  64. package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
  65. package/lib-esm/lib/taon-admin-layout/index.js +1 -1
  66. package/lib-esm/lib/taon-admin-welcome/index.d.ts +1 -1
  67. package/lib-esm/lib/taon-admin-welcome/index.js +1 -1
  68. package/lib-esm/lib/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.js +3 -3
  69. package/lib-esm/lib/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.js +3 -3
  70. package/lib-esm/lib/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.js +3 -3
  71. package/lib-esm/lib/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.js +3 -3
  72. package/lib-esm/lib/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.js +3 -3
  73. package/lib-esm/lib/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.js +3 -3
  74. package/lib-esm/lib/taon-datatable/index.d.ts +1 -1
  75. package/lib-esm/lib/taon-datatable/index.js +1 -1
  76. package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
  77. package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
  78. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  79. package/lib-prod/build-info._auto-generated_.js +1 -1
  80. package/lib-prod/index._auto-generated_.js +1 -0
  81. package/lib-prod/index._auto-generated_.js.map +1 -1
  82. package/lib-prod/package.json +1 -1
  83. package/lib-prod/taon-admin-layout/index.d.ts +1 -1
  84. package/lib-prod/taon-admin-layout/index.js +1 -1
  85. package/lib-prod/taon-admin-welcome/index.d.ts +1 -1
  86. package/lib-prod/taon-admin-welcome/index.js +1 -1
  87. package/lib-prod/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.js +3 -3
  88. package/lib-prod/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.js +3 -3
  89. package/lib-prod/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.js +3 -3
  90. package/lib-prod/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.js +3 -3
  91. package/lib-prod/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.js +3 -3
  92. package/lib-prod/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.js +3 -3
  93. package/lib-prod/taon-datatable/index.d.ts +1 -1
  94. package/lib-prod/taon-datatable/index.js +1 -1
  95. package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
  96. package/lib-prod/taon-draggable-button-panel/index.js +1 -1
  97. package/package.json +1 -1
  98. package/ts-source/browser-code/build-info._auto-generated_.ts +1 -1
  99. package/ts-source/browser-code/index._auto-generated_.ts +1 -0
  100. package/ts-source/browser-code/taon-admin-layout/taon-admin-content-footer.service.ts +20 -0
  101. package/ts-source/browser-code/taon-admin-layout/taon-admin-layout.component.html +4 -1
  102. package/ts-source/browser-code/taon-admin-layout/taon-admin-layout.component.ts +2 -0
  103. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.ts +3 -3
  104. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.html.de-DE.po +3 -3
  105. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.ts +3 -3
  106. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.html.en-US.po +3 -3
  107. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.ts +3 -3
  108. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.html.pl-PL.po +3 -3
  109. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.ts +3 -3
  110. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.ts.de-DE.po +3 -3
  111. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.ts +3 -3
  112. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.ts.en-US.po +3 -3
  113. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.ts +3 -3
  114. package/ts-source/browser-code/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.po +3 -3
  115. package/ts-source/browser-code/taon-datatable/taon-datatable.component.html +21 -14
  116. package/ts-source/browser-code/taon-datatable/taon-datatable.component.ts +172 -0
  117. package/ts-source/browser-code-prod/build-info._auto-generated_.ts +1 -1
  118. package/ts-source/browser-code-prod/index._auto-generated_.ts +1 -0
  119. package/ts-source/browser-code-prod/taon-admin-layout/taon-admin-content-footer.service.split-namespaces.json +4 -0
  120. package/ts-source/browser-code-prod/taon-admin-layout/taon-admin-content-footer.service.ts +20 -0
  121. package/ts-source/browser-code-prod/taon-admin-layout/taon-admin-layout.component.html +4 -1
  122. package/ts-source/browser-code-prod/taon-admin-layout/taon-admin-layout.component.ts +2 -0
  123. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.ts +3 -3
  124. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.html.de-DE.po +3 -3
  125. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.ts +3 -3
  126. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.html.en-US.po +3 -3
  127. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.ts +3 -3
  128. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.html.pl-PL.po +3 -3
  129. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.ts +3 -3
  130. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.ts.de-DE.po +3 -3
  131. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.ts +3 -3
  132. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.ts.en-US.po +3 -3
  133. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.ts +3 -3
  134. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.po +3 -3
  135. package/ts-source/browser-code-prod/taon-datatable/taon-datatable.component.html +21 -14
  136. package/ts-source/browser-code-prod/taon-datatable/taon-datatable.component.ts +172 -0
  137. package/ts-source/websql-code/build-info._auto-generated_.ts +1 -1
  138. package/ts-source/websql-code/index._auto-generated_.ts +1 -0
  139. package/ts-source/websql-code/taon-admin-layout/taon-admin-content-footer.service.ts +20 -0
  140. package/ts-source/websql-code/taon-admin-layout/taon-admin-layout.component.html +4 -1
  141. package/ts-source/websql-code/taon-admin-layout/taon-admin-layout.component.ts +2 -0
  142. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.ts +3 -3
  143. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.html.de-DE.po +3 -3
  144. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.ts +3 -3
  145. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.html.en-US.po +3 -3
  146. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.ts +3 -3
  147. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.html.pl-PL.po +3 -3
  148. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.ts +3 -3
  149. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.ts.de-DE.po +3 -3
  150. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.ts +3 -3
  151. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.ts.en-US.po +3 -3
  152. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.ts +3 -3
  153. package/ts-source/websql-code/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.po +3 -3
  154. package/ts-source/websql-code/taon-datatable/taon-datatable.component.html +21 -14
  155. package/ts-source/websql-code/taon-datatable/taon-datatable.component.ts +172 -0
  156. package/ts-source/websql-code-prod/build-info._auto-generated_.ts +1 -1
  157. package/ts-source/websql-code-prod/index._auto-generated_.ts +1 -0
  158. package/ts-source/websql-code-prod/taon-admin-layout/taon-admin-content-footer.service.split-namespaces.json +4 -0
  159. package/ts-source/websql-code-prod/taon-admin-layout/taon-admin-content-footer.service.ts +20 -0
  160. package/ts-source/websql-code-prod/taon-admin-layout/taon-admin-layout.component.html +4 -1
  161. package/ts-source/websql-code-prod/taon-admin-layout/taon-admin-layout.component.ts +2 -0
  162. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.html.de-DE.i18n.data.ts +3 -3
  163. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.html.de-DE.po +3 -3
  164. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.html.en-US.i18n.data.ts +3 -3
  165. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.html.en-US.po +3 -3
  166. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.html.pl-PL.i18n.data.ts +3 -3
  167. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.html.pl-PL.po +3 -3
  168. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.ts.de-DE.i18n.data.ts +3 -3
  169. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.ts.de-DE.po +3 -3
  170. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.ts.en-US.i18n.data.ts +3 -3
  171. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.ts.en-US.po +3 -3
  172. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.i18n.data.ts +3 -3
  173. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.po +3 -3
  174. package/ts-source/websql-code-prod/taon-datatable/taon-datatable.component.html +21 -14
  175. package/ts-source/websql-code-prod/taon-datatable/taon-datatable.component.ts +172 -0
  176. package/websql/fesm2022/{ui-websql-taon-datatable.component.html.de-DE.i18n.data-CRiuweZ1.mjs → ui-websql-taon-datatable.component.html.de-DE.i18n.data-akWKK_zH.mjs} +4 -4
  177. package/websql/fesm2022/{ui-websql-taon-datatable.component.html.de-DE.i18n.data-CRiuweZ1.mjs.map → ui-websql-taon-datatable.component.html.de-DE.i18n.data-akWKK_zH.mjs.map} +1 -1
  178. package/websql/fesm2022/{ui-websql-taon-datatable.component.html.en-US.i18n.data-B5Q6v4WG.mjs → ui-websql-taon-datatable.component.html.en-US.i18n.data-BQRO2MVj.mjs} +4 -4
  179. package/websql/fesm2022/{ui-websql-taon-datatable.component.html.en-US.i18n.data-B5Q6v4WG.mjs.map → ui-websql-taon-datatable.component.html.en-US.i18n.data-BQRO2MVj.mjs.map} +1 -1
  180. package/websql/fesm2022/{ui-websql-taon-datatable.component.html.pl-PL.i18n.data-CHtCyNUI.mjs → ui-websql-taon-datatable.component.html.pl-PL.i18n.data-cEIoFPC7.mjs} +4 -4
  181. package/websql/fesm2022/{ui-websql-taon-datatable.component.html.pl-PL.i18n.data-CHtCyNUI.mjs.map → ui-websql-taon-datatable.component.html.pl-PL.i18n.data-cEIoFPC7.mjs.map} +1 -1
  182. package/websql/fesm2022/{ui-websql-taon-datatable.component.ts.de-DE.i18n.data-CLYbjFDi.mjs → ui-websql-taon-datatable.component.ts.de-DE.i18n.data-kjuoNEZ4.mjs} +4 -4
  183. package/websql/fesm2022/{ui-websql-taon-datatable.component.ts.de-DE.i18n.data-CLYbjFDi.mjs.map → ui-websql-taon-datatable.component.ts.de-DE.i18n.data-kjuoNEZ4.mjs.map} +1 -1
  184. package/websql/fesm2022/{ui-websql-taon-datatable.component.ts.en-US.i18n.data-r_VW9bRw.mjs → ui-websql-taon-datatable.component.ts.en-US.i18n.data-B3mI-Sqk.mjs} +4 -4
  185. package/websql/fesm2022/{ui-websql-taon-datatable.component.ts.en-US.i18n.data-r_VW9bRw.mjs.map → ui-websql-taon-datatable.component.ts.en-US.i18n.data-B3mI-Sqk.mjs.map} +1 -1
  186. package/websql/fesm2022/{ui-websql-taon-datatable.component.ts.pl-PL.i18n.data-CrDbBs1M.mjs → ui-websql-taon-datatable.component.ts.pl-PL.i18n.data-CLuM0VTt.mjs} +4 -4
  187. package/websql/fesm2022/{ui-websql-taon-datatable.component.ts.pl-PL.i18n.data-CrDbBs1M.mjs.map → ui-websql-taon-datatable.component.ts.pl-PL.i18n.data-CLuM0VTt.mjs.map} +1 -1
  188. package/websql/fesm2022/ui-websql.mjs +184 -8
  189. package/websql/fesm2022/ui-websql.mjs.map +1 -1
  190. package/websql/package.json +1 -1
  191. package/websql/types/ui-websql.d.ts +32 -5
  192. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.html.de-DE.i18n.data-BvDB6e_Q.mjs → ui-websql-prod-taon-datatable.component.html.de-DE.i18n.data-AkYh86KE.mjs} +4 -4
  193. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.html.de-DE.i18n.data-BvDB6e_Q.mjs.map → ui-websql-prod-taon-datatable.component.html.de-DE.i18n.data-AkYh86KE.mjs.map} +1 -1
  194. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.html.en-US.i18n.data-DgBdtlay.mjs → ui-websql-prod-taon-datatable.component.html.en-US.i18n.data-D3-rvqAh.mjs} +4 -4
  195. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.html.en-US.i18n.data-DgBdtlay.mjs.map → ui-websql-prod-taon-datatable.component.html.en-US.i18n.data-D3-rvqAh.mjs.map} +1 -1
  196. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.html.pl-PL.i18n.data-DEuIcpra.mjs → ui-websql-prod-taon-datatable.component.html.pl-PL.i18n.data-BLkNn4wK.mjs} +4 -4
  197. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.html.pl-PL.i18n.data-DEuIcpra.mjs.map → ui-websql-prod-taon-datatable.component.html.pl-PL.i18n.data-BLkNn4wK.mjs.map} +1 -1
  198. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.ts.de-DE.i18n.data-rfiJ-U1k.mjs → ui-websql-prod-taon-datatable.component.ts.de-DE.i18n.data-DP3jiLEW.mjs} +4 -4
  199. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.ts.de-DE.i18n.data-rfiJ-U1k.mjs.map → ui-websql-prod-taon-datatable.component.ts.de-DE.i18n.data-DP3jiLEW.mjs.map} +1 -1
  200. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.ts.en-US.i18n.data-BmB1328X.mjs → ui-websql-prod-taon-datatable.component.ts.en-US.i18n.data-Can6leSC.mjs} +4 -4
  201. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.ts.en-US.i18n.data-BmB1328X.mjs.map → ui-websql-prod-taon-datatable.component.ts.en-US.i18n.data-Can6leSC.mjs.map} +1 -1
  202. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.ts.pl-PL.i18n.data-DNnZNSVK.mjs → ui-websql-prod-taon-datatable.component.ts.pl-PL.i18n.data-U0CRTdvX.mjs} +4 -4
  203. package/websql-prod/fesm2022/{ui-websql-prod-taon-datatable.component.ts.pl-PL.i18n.data-DNnZNSVK.mjs.map → ui-websql-prod-taon-datatable.component.ts.pl-PL.i18n.data-U0CRTdvX.mjs.map} +1 -1
  204. package/websql-prod/fesm2022/ui-websql-prod.mjs +184 -8
  205. package/websql-prod/fesm2022/ui-websql-prod.mjs.map +1 -1
  206. package/websql-prod/package.json +1 -1
  207. package/websql-prod/types/ui-websql-prod.d.ts +32 -5
@@ -36,6 +36,7 @@ import { MatPaginatorModule } from '@angular/material/paginator';
36
36
  import { MatSelectModule } from '@angular/material/select';
37
37
  import * as i7 from '@ng-matero/extensions/grid';
38
38
  import { MtxGridModule } from '@ng-matero/extensions/grid';
39
+ import { TaonStor } from 'taon-storage/browser';
39
40
  import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
40
41
 
41
42
  // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -68,7 +69,7 @@ const CURRENT_PACKAGE_TAON_VERSION = 'v21';
68
69
  /**
69
70
  * Autogenerated by current cli tool. Use *tnp release* to bump version.
70
71
  */
71
- const CURRENT_PACKAGE_VERSION = '21.0.26';
72
+ const CURRENT_PACKAGE_VERSION = '21.0.27';
72
73
  // THIS FILE IS GENERATED - DO NOT MODIFY
73
74
 
74
75
  const t$c = Translation.for('src/lib/my-organization-proj.ts', { "src/lib/my-organization-proj.ts": { "en-US": async () => (await import('./ui-browser-my-organization-proj.ts.en-US.i18n.data-DXwhKLKz.mjs')).default, "pl-PL": async () => (await import('./ui-browser-my-organization-proj.ts.pl-PL.i18n.data-Dwrsgs0G.mjs')).default, "de-DE": async () => (await import('./ui-browser-my-organization-proj.ts.de-DE.i18n.data-5wcHzl4v.mjs')).default }, "src/lib/start-cli.ts": { "en-US": async () => (await import('./ui-browser-start-cli.ts.en-US.i18n.data-B_glH-xr.mjs')).default, "pl-PL": async () => (await import('./ui-browser-start-cli.ts.pl-PL.i18n.data-CM1UPo6n.mjs')).default, "de-DE": async () => (await import('./ui-browser-start-cli.ts.de-DE.i18n.data-BgevoJKn.mjs')).default } });
@@ -226,6 +227,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
226
227
  }]
227
228
  }] });
228
229
 
230
+ class TaonAdminContentFooterService {
231
+ constructor() {
232
+ this.currentTemplate = signal(undefined, ...(ngDevMode ? [{ debugName: "currentTemplate" }] : []));
233
+ }
234
+ setTemplate(template) {
235
+ this.currentTemplate.set(template);
236
+ }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminContentFooterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
238
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminContentFooterService, providedIn: 'root' }); }
239
+ }
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminContentFooterService, decorators: [{
241
+ type: Injectable,
242
+ args: [{ providedIn: 'root' }]
243
+ }] });
244
+
229
245
  const TaonBaselineBackofficeOutletName = 'admin';
230
246
  function resolveTaonAdminMenuItem(menuItem) {
231
247
  return typeof menuItem === 'function' ? menuItem() : menuItem;
@@ -583,6 +599,7 @@ class TaonAdminLayoutComponent {
583
599
  this.t = t$a.for(this);
584
600
  this.menuContext = inject(TaonAdminMenuContext, { optional: true }) ??
585
601
  new TaonAdminMenuContext();
602
+ this.taonAdminContentFooterService = inject(TaonAdminContentFooterService);
586
603
  this._routes = [];
587
604
  this.basePath = '';
588
605
  this.layoutWidth = signal(undefined, ...(ngDevMode ? [{ debugName: "layoutWidth" }] : []));
@@ -986,7 +1003,7 @@ class TaonAdminLayoutComponent {
986
1003
  .replace(/\b\w/g, char => char.toUpperCase());
987
1004
  }
988
1005
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminLayoutComponent, deps: [{ token: i1.Router }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
989
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonAdminLayoutComponent, isStandalone: true, selector: "taon-admin-layout", inputs: { routes: "routes", basePath: "basePath", outlet: "outlet" }, host: { listeners: { "window:resize": "windowResized()" } }, ngImport: i0, template: "<div\n #layout\n class=\"admin-layout\"\n [class.admin-layout-dialog]=\"isDialogMode\"\n [style.width.px]=\"layoutWidth() || null\"\n [style.height.px]=\"layoutHeight() || null\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header class=\"admin-header\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"t.gettext('Toggle admin menu')\"\n class=\"admin-menu-button\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"admin-header-content\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"admin-body\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"admin-aside-backdrop\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"admin-aside\"\n [class.admin-aside-open]=\"asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-aside-content\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n @if (menuContext.isVisible(level1)) {\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [disabled]=\"menuContext.isDisabled(level1)\"\n [expanded]=\"\n isLevel1Active(level1) && !menuContext.isDisabled(level1)\n \"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <mat-expansion-panel-header\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"admin-menu-item\">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"admin-level2\">\n @if (isLoading(level1)) {\n <div class=\"admin-loading\">{{ t.gettext('Loading...') }}</div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n @if (menuContext.isVisible(level2)) {\n <a\n class=\"admin-level2-item\"\n role=\"button\"\n [attr.tabindex]=\"\n menuContext.isDisabled(level2) ? -1 : 0\n \"\n [attr.aria-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level2)\"\n [class.admin-level2-item-active]=\"\n isLevel2Active(level1, level2)\n \"\n (click)=\"level2Clicked(level1, level2)\"\n (keydown.enter)=\"level2Clicked(level1, level2)\"\n (keydown.space)=\"\n $event.preventDefault();\n level2Clicked(level1, level2)\n \">\n @if (icon(level2)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <a\n class=\"admin-level1-item\"\n role=\"button\"\n [attr.tabindex]=\"menuContext.isDisabled(level1) ? -1 : 0\"\n [attr.aria-disabled]=\"menuContext.isDisabled(level1)\"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n [class.admin-level1-item-active]=\"isLevel1Active(level1)\"\n (click)=\"level1Clicked(level1)\"\n (keydown.enter)=\"level1Clicked(level1)\"\n (keydown.space)=\"\n $event.preventDefault(); level1Clicked(level1)\n \">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-aside-footer\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"admin-main\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"admin-tabs\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- SCROLLABLE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-content\">\n <router-outlet />\n </div>\n\n <!-- ========================================================= -->\n <!-- CONTENT FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-content-footer\">\n <ng-content select=\"[contentFooter]\" />\n </footer>\n </main>\n </div>\n\n <!-- ============================================================= -->\n <!-- DIALOG RESIZE HANDLE -->\n <!-- ============================================================= -->\n\n @if (isDialogMode) {\n <div\n class=\"admin-resize-handle\"\n (pointerdown)=\"startResize($event)\"></div>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;min-width:0;min-height:0}.admin-layout{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;background:#fff}.admin-layout-dialog{min-width:500px;min-height:350px}.admin-header{display:flex;align-items:center;flex:0 0 64px;height:64px;border-bottom:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu-button{flex:0 0 auto;margin-left:8px;margin-right:8px;cursor:pointer}.admin-header-content{flex:1 1 auto;min-width:0}.admin-body{position:relative;display:flex;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-aside{position:absolute;top:0;bottom:0;left:0;z-index:30;display:flex;flex-direction:column;width:288px;min-height:0;overflow:hidden;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease}.admin-aside-open{transform:translate(0)}.admin-aside-content{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto}.admin-aside-footer{flex:0 0 auto;padding:12px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu{display:block}.admin-menu mat-expansion-panel{margin-top:0!important;margin-bottom:0!important;border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant)}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type,.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-menu-item{display:flex;align-items:center;gap:12px}.admin-level2{display:flex;flex-direction:column}.admin-level2-item{display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer}.admin-level2-item:hover,.admin-level2-item-active{background:#f5f5f5}.admin-level2-item-active{font-weight:600}.admin-level1-item{display:flex;align-items:center;height:56px;gap:12px;padding:0 24px;cursor:pointer}.admin-level1-item:hover,.admin-level1-item-active{background:#f5f5f5}.admin-level1-item-active{font-weight:600}.admin-loading{padding:8px 16px;opacity:.6}.admin-menu-item-disabled{opacity:.5;cursor:not-allowed}.admin-main{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-tabs{display:block;flex:0 0 auto}.admin-content{flex:1 1 auto;min-width:0;min-height:0;padding:24px;overflow-x:auto;overflow-y:auto}.admin-content-footer{flex:0 0 auto;padding:12px 24px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-aside-backdrop{position:absolute;inset:0;z-index:20;background:#0000004d}@media(min-width:768px){.admin-aside{position:relative;top:auto;bottom:auto;left:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:288px;min-width:288px}.admin-aside-backdrop{display:none}}.admin-resize-handle{position:absolute;right:0;bottom:0;z-index:100;width:18px;height:18px;cursor:nwse-resize}.admin-resize-handle:after{content:\"\";position:absolute;right:4px;bottom:4px;width:8px;height:8px;border-right:2px solid #777;border-bottom:2px solid #777}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i3$1.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i3$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: TaonAdminPageTabsComponent, selector: "taon-admin-page-tabs", inputs: ["routes", "basePath", "outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1006
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonAdminLayoutComponent, isStandalone: true, selector: "taon-admin-layout", inputs: { routes: "routes", basePath: "basePath", outlet: "outlet" }, host: { listeners: { "window:resize": "windowResized()" } }, ngImport: i0, template: "<div\n #layout\n class=\"admin-layout\"\n [class.admin-layout-dialog]=\"isDialogMode\"\n [style.width.px]=\"layoutWidth() || null\"\n [style.height.px]=\"layoutHeight() || null\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header class=\"admin-header\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"t.gettext('Toggle admin menu')\"\n class=\"admin-menu-button\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"admin-header-content\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"admin-body\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"admin-aside-backdrop\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"admin-aside\"\n [class.admin-aside-open]=\"asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-aside-content\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n @if (menuContext.isVisible(level1)) {\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [disabled]=\"menuContext.isDisabled(level1)\"\n [expanded]=\"\n isLevel1Active(level1) && !menuContext.isDisabled(level1)\n \"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <mat-expansion-panel-header\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"admin-menu-item\">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"admin-level2\">\n @if (isLoading(level1)) {\n <div class=\"admin-loading\">{{ t.gettext('Loading...') }}</div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n @if (menuContext.isVisible(level2)) {\n <a\n class=\"admin-level2-item\"\n role=\"button\"\n [attr.tabindex]=\"\n menuContext.isDisabled(level2) ? -1 : 0\n \"\n [attr.aria-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level2)\"\n [class.admin-level2-item-active]=\"\n isLevel2Active(level1, level2)\n \"\n (click)=\"level2Clicked(level1, level2)\"\n (keydown.enter)=\"level2Clicked(level1, level2)\"\n (keydown.space)=\"\n $event.preventDefault();\n level2Clicked(level1, level2)\n \">\n @if (icon(level2)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <a\n class=\"admin-level1-item\"\n role=\"button\"\n [attr.tabindex]=\"menuContext.isDisabled(level1) ? -1 : 0\"\n [attr.aria-disabled]=\"menuContext.isDisabled(level1)\"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n [class.admin-level1-item-active]=\"isLevel1Active(level1)\"\n (click)=\"level1Clicked(level1)\"\n (keydown.enter)=\"level1Clicked(level1)\"\n (keydown.space)=\"\n $event.preventDefault(); level1Clicked(level1)\n \">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-aside-footer\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"admin-main\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"admin-tabs\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- SCROLLABLE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-content\">\n <router-outlet />\n </div>\n\n <!-- ========================================================= -->\n <!-- CONTENT FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-content-footer\">\n <ng-container\n [ngTemplateOutlet]=\"\n taonAdminContentFooterService.currentTemplate()\n \" />\n </footer>\n </main>\n </div>\n\n <!-- ============================================================= -->\n <!-- DIALOG RESIZE HANDLE -->\n <!-- ============================================================= -->\n\n @if (isDialogMode) {\n <div\n class=\"admin-resize-handle\"\n (pointerdown)=\"startResize($event)\"></div>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;min-width:0;min-height:0}.admin-layout{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;background:#fff}.admin-layout-dialog{min-width:500px;min-height:350px}.admin-header{display:flex;align-items:center;flex:0 0 64px;height:64px;border-bottom:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu-button{flex:0 0 auto;margin-left:8px;margin-right:8px;cursor:pointer}.admin-header-content{flex:1 1 auto;min-width:0}.admin-body{position:relative;display:flex;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-aside{position:absolute;top:0;bottom:0;left:0;z-index:30;display:flex;flex-direction:column;width:288px;min-height:0;overflow:hidden;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease}.admin-aside-open{transform:translate(0)}.admin-aside-content{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto}.admin-aside-footer{flex:0 0 auto;padding:12px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu{display:block}.admin-menu mat-expansion-panel{margin-top:0!important;margin-bottom:0!important;border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant)}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type,.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-menu-item{display:flex;align-items:center;gap:12px}.admin-level2{display:flex;flex-direction:column}.admin-level2-item{display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer}.admin-level2-item:hover,.admin-level2-item-active{background:#f5f5f5}.admin-level2-item-active{font-weight:600}.admin-level1-item{display:flex;align-items:center;height:56px;gap:12px;padding:0 24px;cursor:pointer}.admin-level1-item:hover,.admin-level1-item-active{background:#f5f5f5}.admin-level1-item-active{font-weight:600}.admin-loading{padding:8px 16px;opacity:.6}.admin-menu-item-disabled{opacity:.5;cursor:not-allowed}.admin-main{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-tabs{display:block;flex:0 0 auto}.admin-content{flex:1 1 auto;min-width:0;min-height:0;padding:24px;overflow-x:auto;overflow-y:auto}.admin-content-footer{flex:0 0 auto;padding:12px 24px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-aside-backdrop{position:absolute;inset:0;z-index:20;background:#0000004d}@media(min-width:768px){.admin-aside{position:relative;top:auto;bottom:auto;left:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:288px;min-width:288px}.admin-aside-backdrop{display:none}}.admin-resize-handle{position:absolute;right:0;bottom:0;z-index:100;width:18px;height:18px;cursor:nwse-resize}.admin-resize-handle:after{content:\"\";position:absolute;right:4px;bottom:4px;width:8px;height:8px;border-right:2px solid #777;border-bottom:2px solid #777}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i3$1.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i3$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: TaonAdminPageTabsComponent, selector: "taon-admin-page-tabs", inputs: ["routes", "basePath", "outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
990
1007
  }
991
1008
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminLayoutComponent, decorators: [{
992
1009
  type: Component,
@@ -998,7 +1015,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
998
1015
  MatIconModule,
999
1016
  MatTooltipModule,
1000
1017
  TaonAdminPageTabsComponent,
1001
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #layout\n class=\"admin-layout\"\n [class.admin-layout-dialog]=\"isDialogMode\"\n [style.width.px]=\"layoutWidth() || null\"\n [style.height.px]=\"layoutHeight() || null\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header class=\"admin-header\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"t.gettext('Toggle admin menu')\"\n class=\"admin-menu-button\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"admin-header-content\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"admin-body\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"admin-aside-backdrop\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"admin-aside\"\n [class.admin-aside-open]=\"asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-aside-content\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n @if (menuContext.isVisible(level1)) {\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [disabled]=\"menuContext.isDisabled(level1)\"\n [expanded]=\"\n isLevel1Active(level1) && !menuContext.isDisabled(level1)\n \"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <mat-expansion-panel-header\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"admin-menu-item\">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"admin-level2\">\n @if (isLoading(level1)) {\n <div class=\"admin-loading\">{{ t.gettext('Loading...') }}</div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n @if (menuContext.isVisible(level2)) {\n <a\n class=\"admin-level2-item\"\n role=\"button\"\n [attr.tabindex]=\"\n menuContext.isDisabled(level2) ? -1 : 0\n \"\n [attr.aria-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level2)\"\n [class.admin-level2-item-active]=\"\n isLevel2Active(level1, level2)\n \"\n (click)=\"level2Clicked(level1, level2)\"\n (keydown.enter)=\"level2Clicked(level1, level2)\"\n (keydown.space)=\"\n $event.preventDefault();\n level2Clicked(level1, level2)\n \">\n @if (icon(level2)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <a\n class=\"admin-level1-item\"\n role=\"button\"\n [attr.tabindex]=\"menuContext.isDisabled(level1) ? -1 : 0\"\n [attr.aria-disabled]=\"menuContext.isDisabled(level1)\"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n [class.admin-level1-item-active]=\"isLevel1Active(level1)\"\n (click)=\"level1Clicked(level1)\"\n (keydown.enter)=\"level1Clicked(level1)\"\n (keydown.space)=\"\n $event.preventDefault(); level1Clicked(level1)\n \">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-aside-footer\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"admin-main\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"admin-tabs\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- SCROLLABLE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-content\">\n <router-outlet />\n </div>\n\n <!-- ========================================================= -->\n <!-- CONTENT FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-content-footer\">\n <ng-content select=\"[contentFooter]\" />\n </footer>\n </main>\n </div>\n\n <!-- ============================================================= -->\n <!-- DIALOG RESIZE HANDLE -->\n <!-- ============================================================= -->\n\n @if (isDialogMode) {\n <div\n class=\"admin-resize-handle\"\n (pointerdown)=\"startResize($event)\"></div>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;min-width:0;min-height:0}.admin-layout{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;background:#fff}.admin-layout-dialog{min-width:500px;min-height:350px}.admin-header{display:flex;align-items:center;flex:0 0 64px;height:64px;border-bottom:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu-button{flex:0 0 auto;margin-left:8px;margin-right:8px;cursor:pointer}.admin-header-content{flex:1 1 auto;min-width:0}.admin-body{position:relative;display:flex;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-aside{position:absolute;top:0;bottom:0;left:0;z-index:30;display:flex;flex-direction:column;width:288px;min-height:0;overflow:hidden;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease}.admin-aside-open{transform:translate(0)}.admin-aside-content{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto}.admin-aside-footer{flex:0 0 auto;padding:12px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu{display:block}.admin-menu mat-expansion-panel{margin-top:0!important;margin-bottom:0!important;border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant)}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type,.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-menu-item{display:flex;align-items:center;gap:12px}.admin-level2{display:flex;flex-direction:column}.admin-level2-item{display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer}.admin-level2-item:hover,.admin-level2-item-active{background:#f5f5f5}.admin-level2-item-active{font-weight:600}.admin-level1-item{display:flex;align-items:center;height:56px;gap:12px;padding:0 24px;cursor:pointer}.admin-level1-item:hover,.admin-level1-item-active{background:#f5f5f5}.admin-level1-item-active{font-weight:600}.admin-loading{padding:8px 16px;opacity:.6}.admin-menu-item-disabled{opacity:.5;cursor:not-allowed}.admin-main{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-tabs{display:block;flex:0 0 auto}.admin-content{flex:1 1 auto;min-width:0;min-height:0;padding:24px;overflow-x:auto;overflow-y:auto}.admin-content-footer{flex:0 0 auto;padding:12px 24px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-aside-backdrop{position:absolute;inset:0;z-index:20;background:#0000004d}@media(min-width:768px){.admin-aside{position:relative;top:auto;bottom:auto;left:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:288px;min-width:288px}.admin-aside-backdrop{display:none}}.admin-resize-handle{position:absolute;right:0;bottom:0;z-index:100;width:18px;height:18px;cursor:nwse-resize}.admin-resize-handle:after{content:\"\";position:absolute;right:4px;bottom:4px;width:8px;height:8px;border-right:2px solid #777;border-bottom:2px solid #777}\n"] }]
1018
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #layout\n class=\"admin-layout\"\n [class.admin-layout-dialog]=\"isDialogMode\"\n [style.width.px]=\"layoutWidth() || null\"\n [style.height.px]=\"layoutHeight() || null\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header class=\"admin-header\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"t.gettext('Toggle admin menu')\"\n class=\"admin-menu-button\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"admin-header-content\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"admin-body\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"admin-aside-backdrop\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"admin-aside\"\n [class.admin-aside-open]=\"asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-aside-content\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n @if (menuContext.isVisible(level1)) {\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [disabled]=\"menuContext.isDisabled(level1)\"\n [expanded]=\"\n isLevel1Active(level1) && !menuContext.isDisabled(level1)\n \"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <mat-expansion-panel-header\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"admin-menu-item\">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"admin-level2\">\n @if (isLoading(level1)) {\n <div class=\"admin-loading\">{{ t.gettext('Loading...') }}</div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n @if (menuContext.isVisible(level2)) {\n <a\n class=\"admin-level2-item\"\n role=\"button\"\n [attr.tabindex]=\"\n menuContext.isDisabled(level2) ? -1 : 0\n \"\n [attr.aria-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level2)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level2)\"\n [class.admin-level2-item-active]=\"\n isLevel2Active(level1, level2)\n \"\n (click)=\"level2Clicked(level1, level2)\"\n (keydown.enter)=\"level2Clicked(level1, level2)\"\n (keydown.space)=\"\n $event.preventDefault();\n level2Clicked(level1, level2)\n \">\n @if (icon(level2)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level2),\n }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <a\n class=\"admin-level1-item\"\n role=\"button\"\n [attr.tabindex]=\"menuContext.isDisabled(level1) ? -1 : 0\"\n [attr.aria-disabled]=\"menuContext.isDisabled(level1)\"\n [class.admin-menu-item-disabled]=\"\n menuContext.isDisabled(level1)\n \"\n [matTooltip]=\"menuContext.disabledTooltip(level1)\"\n [class.admin-level1-item-active]=\"isLevel1Active(level1)\"\n (click)=\"level1Clicked(level1)\"\n (keydown.enter)=\"level1Clicked(level1)\"\n (keydown.space)=\"\n $event.preventDefault(); level1Clicked(level1)\n \">\n @if (icon(level1)) {\n <mat-icon\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [ngStyle]=\"{\n color: color(level1),\n }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-aside-footer\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"admin-main\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"admin-tabs\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- SCROLLABLE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"admin-content\">\n <router-outlet />\n </div>\n\n <!-- ========================================================= -->\n <!-- CONTENT FOOTER -->\n <!-- ========================================================= -->\n\n <footer class=\"admin-content-footer\">\n <ng-container\n [ngTemplateOutlet]=\"\n taonAdminContentFooterService.currentTemplate()\n \" />\n </footer>\n </main>\n </div>\n\n <!-- ============================================================= -->\n <!-- DIALOG RESIZE HANDLE -->\n <!-- ============================================================= -->\n\n @if (isDialogMode) {\n <div\n class=\"admin-resize-handle\"\n (pointerdown)=\"startResize($event)\"></div>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;min-width:0;min-height:0}.admin-layout{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;background:#fff}.admin-layout-dialog{min-width:500px;min-height:350px}.admin-header{display:flex;align-items:center;flex:0 0 64px;height:64px;border-bottom:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu-button{flex:0 0 auto;margin-left:8px;margin-right:8px;cursor:pointer}.admin-header-content{flex:1 1 auto;min-width:0}.admin-body{position:relative;display:flex;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-aside{position:absolute;top:0;bottom:0;left:0;z-index:30;display:flex;flex-direction:column;width:288px;min-height:0;overflow:hidden;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease}.admin-aside-open{transform:translate(0)}.admin-aside-content{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto}.admin-aside-footer{flex:0 0 auto;padding:12px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-menu{display:block}.admin-menu mat-expansion-panel{margin-top:0!important;margin-bottom:0!important;border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant)}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type,.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-menu-item{display:flex;align-items:center;gap:12px}.admin-level2{display:flex;flex-direction:column}.admin-level2-item{display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer}.admin-level2-item:hover,.admin-level2-item-active{background:#f5f5f5}.admin-level2-item-active{font-weight:600}.admin-level1-item{display:flex;align-items:center;height:56px;gap:12px;padding:0 24px;cursor:pointer}.admin-level1-item:hover,.admin-level1-item-active{background:#f5f5f5}.admin-level1-item-active{font-weight:600}.admin-loading{padding:8px 16px;opacity:.6}.admin-menu-item-disabled{opacity:.5;cursor:not-allowed}.admin-main{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}.admin-tabs{display:block;flex:0 0 auto}.admin-content{flex:1 1 auto;min-width:0;min-height:0;padding:24px;overflow-x:auto;overflow-y:auto}.admin-content-footer{flex:0 0 auto;padding:12px 24px;border-top:1px solid var(--mat-sys-outline-variant);background:#fff}.admin-aside-backdrop{position:absolute;inset:0;z-index:20;background:#0000004d}@media(min-width:768px){.admin-aside{position:relative;top:auto;bottom:auto;left:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:288px;min-width:288px}.admin-aside-backdrop{display:none}}.admin-resize-handle{position:absolute;right:0;bottom:0;z-index:100;width:18px;height:18px;cursor:nwse-resize}.admin-resize-handle:after{content:\"\";position:absolute;right:4px;bottom:4px;width:8px;height:8px;border-right:2px solid #777;border-bottom:2px solid #777}\n"] }]
1002
1019
  }], ctorParameters: () => [{ type: i1.Router }, { type: i0.ElementRef }], propDecorators: { routes: [{
1003
1020
  type: Input,
1004
1021
  args: [{ required: true }]
@@ -1330,7 +1347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1330
1347
 
1331
1348
  //#region imports
1332
1349
  //#endregion
1333
- const t$4 = Translation.for('src/lib/taon-datatable/taon-datatable.component.ts', { "src/lib/taon-datatable/taon-datatable.component.html": { "en-US": async () => (await import('./ui-browser-taon-datatable.component.html.en-US.i18n.data-BtONSnMn.mjs')).default, "pl-PL": async () => (await import('./ui-browser-taon-datatable.component.html.pl-PL.i18n.data-Ctfv3ouD.mjs')).default, "de-DE": async () => (await import('./ui-browser-taon-datatable.component.html.de-DE.i18n.data-DaX_bbSs.mjs')).default }, "src/lib/taon-datatable/taon-datatable.component.ts": { "en-US": async () => (await import('./ui-browser-taon-datatable.component.ts.en-US.i18n.data-C6XKszRj.mjs')).default, "pl-PL": async () => (await import('./ui-browser-taon-datatable.component.ts.pl-PL.i18n.data-B20v3CeP.mjs')).default, "de-DE": async () => (await import('./ui-browser-taon-datatable.component.ts.de-DE.i18n.data-DOHkRE3t.mjs')).default } });
1350
+ const t$4 = Translation.for('src/lib/taon-datatable/taon-datatable.component.ts', { "src/lib/taon-datatable/taon-datatable.component.html": { "en-US": async () => (await import('./ui-browser-taon-datatable.component.html.en-US.i18n.data-BaRVxYHq.mjs')).default, "pl-PL": async () => (await import('./ui-browser-taon-datatable.component.html.pl-PL.i18n.data-7lC0y8ph.mjs')).default, "de-DE": async () => (await import('./ui-browser-taon-datatable.component.html.de-DE.i18n.data-BoSFa5hw.mjs')).default }, "src/lib/taon-datatable/taon-datatable.component.ts": { "en-US": async () => (await import('./ui-browser-taon-datatable.component.ts.en-US.i18n.data-ywwsyxWl.mjs')).default, "pl-PL": async () => (await import('./ui-browser-taon-datatable.component.ts.pl-PL.i18n.data-DidmnprC.mjs')).default, "de-DE": async () => (await import('./ui-browser-taon-datatable.component.ts.de-DE.i18n.data-CJvRlSjZ.mjs')).default } });
1334
1351
  const defaultColumns = [
1335
1352
  {
1336
1353
  header: t$4.gettext('ID'),
@@ -1347,6 +1364,8 @@ class TaonDatatableComponent {
1347
1364
  this.t = t$4.for(this);
1348
1365
  this.cdr = inject(ChangeDetectorRef);
1349
1366
  this.destroyRef = inject(DestroyRef);
1367
+ this.route = inject(ActivatedRoute);
1368
+ this.router = inject(Router);
1350
1369
  //#region inputs
1351
1370
  this.pageNumber = 1;
1352
1371
  this.pageSize = 10;
@@ -1358,6 +1377,8 @@ class TaonDatatableComponent {
1358
1377
  this.hideAddButton = false;
1359
1378
  this.safe = false;
1360
1379
  this.searchMode = 'advanced';
1380
+ this.storeTablePagination = 'none';
1381
+ this.storeTableFilters = 'none';
1361
1382
  //#endregion
1362
1383
  //#region outputs
1363
1384
  this.expansionChange = new EventEmitter();
@@ -1418,15 +1439,21 @@ class TaonDatatableComponent {
1418
1439
  //#region hooks
1419
1440
  ngOnInit() {
1420
1441
  this.prepareColumns();
1421
- // console.log({ columns: this.columns });
1422
1442
  this.expandable = Boolean(this.expansionTemplate);
1423
1443
  this.showPaginator = _.isBoolean(this.showPaginator)
1424
1444
  ? this.showPaginator
1425
1445
  : Boolean(this.entity) || this.offlineMode;
1446
+ if (this.storeTableFilters === 'query-params') {
1447
+ this.columnFilters = this.readQueryFilters();
1448
+ }
1449
+ void this.restorePagination().then(() => this.subscribeToData());
1450
+ }
1451
+ subscribeToData() {
1426
1452
  this.searchChange$
1427
1453
  .pipe(debounceTime(400), distinctUntilChanged(), tap(search => {
1428
1454
  this.searchValue = search;
1429
1455
  this.pageNumber = 1;
1456
+ this.persistPagination();
1430
1457
  this.reload();
1431
1458
  }), takeUntilDestroyed(this.destroyRef))
1432
1459
  .subscribe();
@@ -1444,10 +1471,12 @@ class TaonDatatableComponent {
1444
1471
  this.searchValue = '';
1445
1472
  this.columnFilters = {};
1446
1473
  this.pageNumber = 1;
1474
+ this.persistCurrentTableState();
1447
1475
  this.reload();
1448
1476
  }
1449
1477
  applyAdvancedFilters() {
1450
1478
  this.pageNumber = 1;
1479
+ this.persistCurrentTableState();
1451
1480
  this.reload();
1452
1481
  }
1453
1482
  toggleAdvancedSearch() {
@@ -1458,8 +1487,147 @@ class TaonDatatableComponent {
1458
1487
  getNextPage(event) {
1459
1488
  this.pageNumber = event.pageIndex + 1;
1460
1489
  this.pageSize = event.pageSize;
1490
+ this.persistPagination();
1461
1491
  this.reload();
1462
1492
  }
1493
+ get tableIdentity() {
1494
+ const explicitId = this.tableId?.trim();
1495
+ if (explicitId) {
1496
+ return explicitId;
1497
+ }
1498
+ const routePath = this.route.pathFromRoot
1499
+ .map(route => route.snapshot.url.map(segment => segment.path).join('/'))
1500
+ .filter(Boolean)
1501
+ .join('/');
1502
+ const entityName = this.entity ? ClassHelpers.getName(this.entity) : 'table';
1503
+ return `${entityName}-${routePath || 'root'}`;
1504
+ }
1505
+ get queryParamPrefix() {
1506
+ return `dt.${encodeURIComponent(this.tableIdentity)}`;
1507
+ }
1508
+ async restorePagination() {
1509
+ const prefix = this.queryParamPrefix;
1510
+ if (this.storeTablePagination === 'query-params') {
1511
+ const pageNumber = Number(this.route.snapshot.queryParamMap.get(`${prefix}.page`));
1512
+ const pageSize = Number(this.route.snapshot.queryParamMap.get(`${prefix}.pageSize`));
1513
+ if (Number.isSafeInteger(pageNumber) && pageNumber > 0) {
1514
+ this.pageNumber = pageNumber;
1515
+ }
1516
+ if (Number.isSafeInteger(pageSize) && pageSize > 0) {
1517
+ this.pageSize = pageSize;
1518
+ }
1519
+ return;
1520
+ }
1521
+ if (this.storeTablePagination !== 'local-storage' &&
1522
+ this.storeTablePagination !== 'session-storage') {
1523
+ return;
1524
+ }
1525
+ const options = {
1526
+ keyOrPath: `datatable-${this.tableIdentity}-pagination`,
1527
+ defaultValue: {
1528
+ pageNumber: this.pageNumber,
1529
+ pageSize: this.pageSize,
1530
+ },
1531
+ };
1532
+ this.paginationStorage =
1533
+ this.storeTablePagination === 'local-storage'
1534
+ ? TaonStor.inLocalstorage(options, TaonDatatableComponent)
1535
+ : TaonStor.inSessionStorage(options, TaonDatatableComponent);
1536
+ try {
1537
+ await this.paginationStorage.ready();
1538
+ const state = this.paginationStorage();
1539
+ if (Number.isSafeInteger(state.pageNumber) && state.pageNumber > 0) {
1540
+ this.pageNumber = state.pageNumber;
1541
+ }
1542
+ if (Number.isSafeInteger(state.pageSize) && state.pageSize > 0) {
1543
+ this.pageSize = state.pageSize;
1544
+ }
1545
+ }
1546
+ catch (error) {
1547
+ console.error('[taon-datatable] Unable to restore pagination state', error);
1548
+ }
1549
+ }
1550
+ persistPagination() {
1551
+ const state = {
1552
+ pageNumber: this.pageNumber,
1553
+ pageSize: this.pageSize,
1554
+ };
1555
+ if (this.storeTablePagination === 'query-params') {
1556
+ this.updateQueryParams({
1557
+ [`${this.queryParamPrefix}.page`]: String(state.pageNumber),
1558
+ [`${this.queryParamPrefix}.pageSize`]: String(state.pageSize),
1559
+ });
1560
+ }
1561
+ else if (this.paginationStorage) {
1562
+ void this.paginationStorage.set(state).catch(error => {
1563
+ console.error('[taon-datatable] Unable to persist pagination state', error);
1564
+ });
1565
+ }
1566
+ }
1567
+ readQueryFilters() {
1568
+ const filterPrefix = `${this.queryParamPrefix}.filter.`;
1569
+ const filters = {};
1570
+ for (const key of this.route.snapshot.queryParamMap.keys) {
1571
+ if (!key.startsWith(filterPrefix)) {
1572
+ continue;
1573
+ }
1574
+ try {
1575
+ const field = decodeURIComponent(key.slice(filterPrefix.length));
1576
+ const value = this.route.snapshot.queryParamMap.get(key);
1577
+ if (field && value !== null) {
1578
+ filters[field] = value;
1579
+ }
1580
+ }
1581
+ catch (error) {
1582
+ console.error('[taon-datatable] Invalid filter query parameter', error);
1583
+ }
1584
+ }
1585
+ return filters;
1586
+ }
1587
+ persistFilters() {
1588
+ if (this.storeTableFilters !== 'query-params') {
1589
+ return;
1590
+ }
1591
+ this.updateQueryParams(this.filterQueryUpdates());
1592
+ }
1593
+ persistCurrentTableState() {
1594
+ if (this.storeTablePagination === 'query-params' &&
1595
+ this.storeTableFilters === 'query-params') {
1596
+ this.updateQueryParams({
1597
+ [`${this.queryParamPrefix}.page`]: String(this.pageNumber),
1598
+ [`${this.queryParamPrefix}.pageSize`]: String(this.pageSize),
1599
+ ...this.filterQueryUpdates(),
1600
+ });
1601
+ return;
1602
+ }
1603
+ this.persistPagination();
1604
+ this.persistFilters();
1605
+ }
1606
+ filterQueryUpdates() {
1607
+ const filterPrefix = `${this.queryParamPrefix}.filter.`;
1608
+ const updates = {};
1609
+ for (const key of this.route.snapshot.queryParamMap.keys) {
1610
+ if (key.startsWith(filterPrefix)) {
1611
+ updates[key] = null;
1612
+ }
1613
+ }
1614
+ for (const [field, value] of Object.entries(this.cleanFilters(this.columnFilters))) {
1615
+ updates[`${filterPrefix}${encodeURIComponent(field)}`] = value;
1616
+ }
1617
+ return updates;
1618
+ }
1619
+ updateQueryParams(queryParams) {
1620
+ void this.router
1621
+ .navigate([], {
1622
+ relativeTo: this.route,
1623
+ queryParams,
1624
+ queryParamsHandling: 'merge',
1625
+ replaceUrl: true,
1626
+ })
1627
+ .catch(error => {
1628
+ console.error('[taon-datatable] Unable to update table query parameters', error);
1629
+ });
1630
+ }
1463
1631
  //#endregion
1464
1632
  //#region sorting
1465
1633
  sortChanged(event) {
@@ -1648,7 +1816,7 @@ class TaonDatatableComponent {
1648
1816
  }
1649
1817
  }
1650
1818
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDatatableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1651
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDatatableComponent, isStandalone: true, selector: "taon-datatable", inputs: { pageNumber: "pageNumber", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", allowedColumns: "allowedColumns", expansionTemplate: "expansionTemplate", entityCrudController: "entityCrudController", columns: "columns", hideSearch: "hideSearch", hideAddButton: "hideAddButton", safe: "safe", searchMode: "searchMode", callQueryMethod: "callQueryMethod", data: "data", showPaginator: "showPaginator" }, outputs: { expansionChange: "expansionChange", addingItem: "addingItem" }, ngImport: i0, template: "<div class=\"flex w-full flex-col gap-3\">\n <!-- #region toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n [placeholder]=\"t.gettext('Search...')\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n {{ t.gettext('Filters') }}\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n [title]=\"t.gettext('Refresh')\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n {{ t.gettext('Add') }}\n </button>\n }\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n {{ t.gettext('Clear') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n {{ t.gettext('Apply filters') }}\n </button>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n {{ t.gettext('Loading...') }}\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"lazyExpansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [noResultText]=\"noResultText\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"onExpansionChange($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n\n <ng-template\n #lazyExpansionTemplate\n let-row>\n @if (isExpanded(row)) {\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\">\n </ng-container>\n }\n </ng-template>\n </div>\n <!-- #endregion -->\n</div>\n", styles: [":host{display:block;width:100%;min-height:250px}:host ::ng-deep .mat-mdc-form-field{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MtxGridModule }, { kind: "component", type: i7.MtxGrid, selector: "mtx-grid", inputs: ["displayedColumns", "columns", "data", "length", "loading", "trackBy", "columnResizable", "emptyValuePlaceholder", "pageOnFront", "showPaginator", "pageDisabled", "showFirstLastButtons", "pageIndex", "pageSize", "pageSizeOptions", "hidePageSize", "paginationTemplate", "sortOnFront", "sortActive", "sortDirection", "sortDisableClear", "sortDisabled", "sortStart", "rowHover", "rowStriped", "expandable", "expansionTemplate", "multiSelectable", "multiSelectionWithClick", "rowSelectable", "hideRowSelectionCheckbox", "disableRowClickSelection", "rowSelectionFormatter", "rowClassFormatter", "rowSelected", "cellSelectable", "showToolbar", "toolbarTitle", "toolbarTemplate", "columnHideable", "columnHideableChecked", "columnSortable", "columnPinnable", "columnPinOptions", "showColumnMenuButton", "columnMenuButtonText", "columnMenuButtonType", "columnMenuButtonColor", "columnMenuButtonClass", "columnMenuButtonIcon", "columnMenuButtonFontIcon", "columnMenuButtonSvgIcon", "showColumnMenuHeader", "columnMenuHeaderText", "columnMenuHeaderTemplate", "showColumnMenuFooter", "columnMenuFooterText", "columnMenuFooterTemplate", "noResultText", "noResultTemplate", "headerTemplate", "headerExtraTemplate", "cellTemplate", "useContentRowTemplate", "useContentHeaderRowTemplate", "useContentFooterRowTemplate", "showSummary", "summaryTemplate", "showSidebar", "sidebarTemplate", "showStatusbar", "statusbarTemplate"], outputs: ["page", "sortChange", "rowClick", "rowContextMenu", "expansionChange", "rowSelectedChange", "cellSelectedChange", "columnChange"], exportAs: ["mtxGrid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1819
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDatatableComponent, isStandalone: true, selector: "taon-datatable", inputs: { pageNumber: "pageNumber", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", allowedColumns: "allowedColumns", expansionTemplate: "expansionTemplate", entityCrudController: "entityCrudController", columns: "columns", hideSearch: "hideSearch", hideAddButton: "hideAddButton", safe: "safe", searchMode: "searchMode", filtersTemplate: "filtersTemplate", storeTablePagination: "storeTablePagination", storeTableFilters: "storeTableFilters", tableId: "tableId", callQueryMethod: "callQueryMethod", data: "data", showPaginator: "showPaginator" }, outputs: { expansionChange: "expansionChange", addingItem: "addingItem" }, ngImport: i0, template: "<div class=\"flex w-full flex-col gap-3\">\n <!-- #region toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n [placeholder]=\"t.gettext('Search...')\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n {{ t.gettext('Filters') }}\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n [title]=\"t.gettext('Refresh')\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n {{ t.gettext('Add') }}\n </button>\n }\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @if (filtersTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"filtersTemplate\"\n [ngTemplateOutletContext]=\"{ filters: columnFilters }\">\n </ng-container>\n } @else {\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n {{ t.gettext('Clear') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n {{ t.gettext('Apply filters') }}\n </button>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n {{ t.gettext('Loading...') }}\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"lazyExpansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [noResultText]=\"noResultText\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"onExpansionChange($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n\n <ng-template\n #lazyExpansionTemplate\n let-row>\n @if (isExpanded(row)) {\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\">\n </ng-container>\n }\n </ng-template>\n </div>\n <!-- #endregion -->\n</div>\n", styles: [":host{display:block;width:100%;min-height:250px}:host ::ng-deep .mat-mdc-form-field{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MtxGridModule }, { kind: "component", type: i7.MtxGrid, selector: "mtx-grid", inputs: ["displayedColumns", "columns", "data", "length", "loading", "trackBy", "columnResizable", "emptyValuePlaceholder", "pageOnFront", "showPaginator", "pageDisabled", "showFirstLastButtons", "pageIndex", "pageSize", "pageSizeOptions", "hidePageSize", "paginationTemplate", "sortOnFront", "sortActive", "sortDirection", "sortDisableClear", "sortDisabled", "sortStart", "rowHover", "rowStriped", "expandable", "expansionTemplate", "multiSelectable", "multiSelectionWithClick", "rowSelectable", "hideRowSelectionCheckbox", "disableRowClickSelection", "rowSelectionFormatter", "rowClassFormatter", "rowSelected", "cellSelectable", "showToolbar", "toolbarTitle", "toolbarTemplate", "columnHideable", "columnHideableChecked", "columnSortable", "columnPinnable", "columnPinOptions", "showColumnMenuButton", "columnMenuButtonText", "columnMenuButtonType", "columnMenuButtonColor", "columnMenuButtonClass", "columnMenuButtonIcon", "columnMenuButtonFontIcon", "columnMenuButtonSvgIcon", "showColumnMenuHeader", "columnMenuHeaderText", "columnMenuHeaderTemplate", "showColumnMenuFooter", "columnMenuFooterText", "columnMenuFooterTemplate", "noResultText", "noResultTemplate", "headerTemplate", "headerExtraTemplate", "cellTemplate", "useContentRowTemplate", "useContentHeaderRowTemplate", "useContentFooterRowTemplate", "showSummary", "summaryTemplate", "showSidebar", "sidebarTemplate", "showStatusbar", "statusbarTemplate"], outputs: ["page", "sortChange", "rowClick", "rowContextMenu", "expansionChange", "rowSelectedChange", "cellSelectedChange", "columnChange"], exportAs: ["mtxGrid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1652
1820
  }
1653
1821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDatatableComponent, decorators: [{
1654
1822
  type: Component,
@@ -1663,7 +1831,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1663
1831
  MatPaginatorModule,
1664
1832
  MatSelectModule,
1665
1833
  MtxGridModule,
1666
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex w-full flex-col gap-3\">\n <!-- #region toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n [placeholder]=\"t.gettext('Search...')\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n {{ t.gettext('Filters') }}\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n [title]=\"t.gettext('Refresh')\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n {{ t.gettext('Add') }}\n </button>\n }\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n {{ t.gettext('Clear') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n {{ t.gettext('Apply filters') }}\n </button>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n {{ t.gettext('Loading...') }}\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"lazyExpansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [noResultText]=\"noResultText\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"onExpansionChange($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n\n <ng-template\n #lazyExpansionTemplate\n let-row>\n @if (isExpanded(row)) {\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\">\n </ng-container>\n }\n </ng-template>\n </div>\n <!-- #endregion -->\n</div>\n", styles: [":host{display:block;width:100%;min-height:250px}:host ::ng-deep .mat-mdc-form-field{margin:0}\n"] }]
1834
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex w-full flex-col gap-3\">\n <!-- #region toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n [placeholder]=\"t.gettext('Search...')\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n {{ t.gettext('Filters') }}\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n [title]=\"t.gettext('Refresh')\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n {{ t.gettext('Add') }}\n </button>\n }\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @if (filtersTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"filtersTemplate\"\n [ngTemplateOutletContext]=\"{ filters: columnFilters }\">\n </ng-container>\n } @else {\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n {{ t.gettext('Clear') }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n {{ t.gettext('Apply filters') }}\n </button>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n {{ t.gettext('Loading...') }}\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"lazyExpansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [noResultText]=\"noResultText\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"onExpansionChange($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n\n <ng-template\n #lazyExpansionTemplate\n let-row>\n @if (isExpanded(row)) {\n <ng-container\n [ngTemplateOutlet]=\"expansionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\">\n </ng-container>\n }\n </ng-template>\n </div>\n <!-- #endregion -->\n</div>\n", styles: [":host{display:block;width:100%;min-height:250px}:host ::ng-deep .mat-mdc-form-field{margin:0}\n"] }]
1667
1835
  }], propDecorators: { pageNumber: [{
1668
1836
  type: Input
1669
1837
  }], pageSize: [{
@@ -1686,6 +1854,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1686
1854
  type: Input
1687
1855
  }], searchMode: [{
1688
1856
  type: Input
1857
+ }], filtersTemplate: [{
1858
+ type: Input
1859
+ }], storeTablePagination: [{
1860
+ type: Input
1861
+ }], storeTableFilters: [{
1862
+ type: Input
1863
+ }], tableId: [{
1864
+ type: Input
1689
1865
  }], callQueryMethod: [{
1690
1866
  type: Input
1691
1867
  }], data: [{
@@ -2622,5 +2798,5 @@ var index = {};
2622
2798
  * Generated bundle index. Do not edit.
2623
2799
  */
2624
2800
 
2625
- export { APP_ID, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, PROJECT_NPM_NAME, TAON_IS_DETACHED_WINDOW, TaonAdminLayoutComponent, TaonAdminMenuContext, TaonAdminPageTabsComponent, TaonAdminWelcomeComponent, TaonAdminWelcomeRoutes, TaonBackofficeNotificationsComponent, TaonBackofficeNotificationsService, TaonBaseAdminLayoutPage, TaonBaselineBackofficeOutletName, TaonConfirmDialogComponent, TaonDatatableComponent, TaonDatatableRoutes, TaonDetachableDialogContentComponent, TaonDetachedWindowComponent, TaonDetachedWindowsHostComponent, TaonDetachedWindowsService, TaonDraggableButtonPanelComponent, TaonDraggableButtonPanelRoutes, TaonDraggableButtonPanelState, TaonErrorDetailsDialogComponent, TaonErrorToastComponent, TaonHorizontalWheelScrollDirective, TaonPurchaseStatusDialogComponent, TaonUnderConstructionComponent, adminLazyRoute, myOrgProj, resolveTaonAdminMenuItem, startCli };
2801
+ export { APP_ID, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, PROJECT_NPM_NAME, TAON_IS_DETACHED_WINDOW, TaonAdminContentFooterService, TaonAdminLayoutComponent, TaonAdminMenuContext, TaonAdminPageTabsComponent, TaonAdminWelcomeComponent, TaonAdminWelcomeRoutes, TaonBackofficeNotificationsComponent, TaonBackofficeNotificationsService, TaonBaseAdminLayoutPage, TaonBaselineBackofficeOutletName, TaonConfirmDialogComponent, TaonDatatableComponent, TaonDatatableRoutes, TaonDetachableDialogContentComponent, TaonDetachedWindowComponent, TaonDetachedWindowsHostComponent, TaonDetachedWindowsService, TaonDraggableButtonPanelComponent, TaonDraggableButtonPanelRoutes, TaonDraggableButtonPanelState, TaonErrorDetailsDialogComponent, TaonErrorToastComponent, TaonHorizontalWheelScrollDirective, TaonPurchaseStatusDialogComponent, TaonUnderConstructionComponent, adminLazyRoute, myOrgProj, resolveTaonAdminMenuItem, startCli };
2626
2802
  //# sourceMappingURL=ui-browser.mjs.map