@taon-dev/ui 21.0.18 → 21.0.19

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-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs → ui-browser-my-organization-proj.ts.en-US.i18n.data-CeHZLkBn.mjs} +1 -1
  3. package/browser/fesm2022/{ui-browser-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs.map → ui-browser-my-organization-proj.ts.en-US.i18n.data-CeHZLkBn.mjs.map} +1 -1
  4. package/browser/fesm2022/{ui-browser-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs → ui-browser-my-organization-proj.ts.pl-PL.i18n.data-d2TJi7-R.mjs} +1 -1
  5. package/browser/fesm2022/{ui-browser-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs.map → ui-browser-my-organization-proj.ts.pl-PL.i18n.data-d2TJi7-R.mjs.map} +1 -1
  6. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs → ui-browser-taon-admin-welcome.component.html.en-US.i18n.data-B8C34hRd.mjs} +1 -1
  7. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs.map → ui-browser-taon-admin-welcome.component.html.en-US.i18n.data-B8C34hRd.mjs.map} +1 -1
  8. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs → ui-browser-taon-admin-welcome.component.html.pl-PL.i18n.data-_t3YRqrv.mjs} +1 -1
  9. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs.map → ui-browser-taon-admin-welcome.component.html.pl-PL.i18n.data-_t3YRqrv.mjs.map} +1 -1
  10. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs → ui-browser-taon-admin-welcome.component.ts.en-US.i18n.data-B4Q6VxPm.mjs} +1 -1
  11. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs.map → ui-browser-taon-admin-welcome.component.ts.en-US.i18n.data-B4Q6VxPm.mjs.map} +1 -1
  12. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs → ui-browser-taon-admin-welcome.component.ts.pl-PL.i18n.data-s4AKOE7A.mjs} +1 -1
  13. package/browser/fesm2022/{ui-browser-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs.map → ui-browser-taon-admin-welcome.component.ts.pl-PL.i18n.data-s4AKOE7A.mjs.map} +1 -1
  14. package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs → ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-BAh0p5PN.mjs} +2 -2
  15. package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map → ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-BAh0p5PN.mjs.map} +1 -1
  16. package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs → ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-C7f7qeUT.mjs} +2 -2
  17. package/browser/fesm2022/{ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map → ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-C7f7qeUT.mjs.map} +1 -1
  18. package/browser/fesm2022/{ui-browser-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs → ui-browser-taon-under-construction.component.ts.en-US.i18n.data-BVYOlk4F.mjs} +1 -1
  19. package/browser/fesm2022/{ui-browser-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs.map → ui-browser-taon-under-construction.component.ts.en-US.i18n.data-BVYOlk4F.mjs.map} +1 -1
  20. package/browser/fesm2022/{ui-browser-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs → ui-browser-taon-under-construction.component.ts.pl-PL.i18n.data-Btv-o2oM.mjs} +1 -1
  21. package/browser/fesm2022/{ui-browser-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs.map → ui-browser-taon-under-construction.component.ts.pl-PL.i18n.data-Btv-o2oM.mjs.map} +1 -1
  22. package/browser/fesm2022/ui-browser.mjs +456 -27
  23. package/browser/fesm2022/ui-browser.mjs.map +1 -1
  24. package/browser/package.json +1 -1
  25. package/browser/types/ui-browser.d.ts +101 -5
  26. package/browser-prod/fesm2022/{ui-browser-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs → ui-browser-prod-my-organization-proj.ts.en-US.i18n.data-CSaDmgPM.mjs} +1 -1
  27. package/browser-prod/fesm2022/{ui-browser-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs.map → ui-browser-prod-my-organization-proj.ts.en-US.i18n.data-CSaDmgPM.mjs.map} +1 -1
  28. package/browser-prod/fesm2022/{ui-browser-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs → ui-browser-prod-my-organization-proj.ts.pl-PL.i18n.data-C-iWnhim.mjs} +1 -1
  29. package/browser-prod/fesm2022/{ui-browser-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs.map → ui-browser-prod-my-organization-proj.ts.pl-PL.i18n.data-C-iWnhim.mjs.map} +1 -1
  30. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs → ui-browser-prod-taon-admin-welcome.component.html.en-US.i18n.data-B6PGLj_S.mjs} +1 -1
  31. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs.map → ui-browser-prod-taon-admin-welcome.component.html.en-US.i18n.data-B6PGLj_S.mjs.map} +1 -1
  32. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs → ui-browser-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-Cu2SC_ss.mjs} +1 -1
  33. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs.map → ui-browser-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-Cu2SC_ss.mjs.map} +1 -1
  34. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs → ui-browser-prod-taon-admin-welcome.component.ts.en-US.i18n.data-CuPbeZpW.mjs} +1 -1
  35. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs.map → ui-browser-prod-taon-admin-welcome.component.ts.en-US.i18n.data-CuPbeZpW.mjs.map} +1 -1
  36. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs → ui-browser-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-BoJfF0mf.mjs} +1 -1
  37. package/browser-prod/fesm2022/{ui-browser-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs.map → ui-browser-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-BoJfF0mf.mjs.map} +1 -1
  38. package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs → ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-XLmZcgCu.mjs} +2 -2
  39. package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map → ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-XLmZcgCu.mjs.map} +1 -1
  40. package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs → ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CJ92Sv4p.mjs} +2 -2
  41. package/browser-prod/fesm2022/{ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map → ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CJ92Sv4p.mjs.map} +1 -1
  42. package/browser-prod/fesm2022/{ui-browser-prod-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs → ui-browser-prod-taon-under-construction.component.ts.en-US.i18n.data-W8BJvZ8Z.mjs} +1 -1
  43. package/browser-prod/fesm2022/{ui-browser-prod-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs.map → ui-browser-prod-taon-under-construction.component.ts.en-US.i18n.data-W8BJvZ8Z.mjs.map} +1 -1
  44. package/browser-prod/fesm2022/{ui-browser-prod-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs → ui-browser-prod-taon-under-construction.component.ts.pl-PL.i18n.data-tX8zxb8s.mjs} +1 -1
  45. package/browser-prod/fesm2022/{ui-browser-prod-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs.map → ui-browser-prod-taon-under-construction.component.ts.pl-PL.i18n.data-tX8zxb8s.mjs.map} +1 -1
  46. package/browser-prod/fesm2022/ui-browser-prod.mjs +456 -27
  47. package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
  48. package/browser-prod/package.json +1 -1
  49. package/browser-prod/types/ui-browser-prod.d.ts +101 -5
  50. package/full-dts/build-info._auto-generated_.d.ts +1 -1
  51. package/full-dts/index._auto-generated_.d.ts +2 -0
  52. package/full-dts/taon-backoffice-notifications/taon-backoffice-notifications.component.d.ts +2 -0
  53. package/full-dts/taon-backoffice-notifications/taon-backoffice-notifications.service.d.ts +1 -0
  54. package/full-dts/taon-detachable-dialog-content/taon-detached-window-content.component.d.ts +74 -0
  55. package/full-dts/taon-purchase-status/taon-purchase-status.dialog.component.d.ts +11 -0
  56. package/html/app/main/routes/session/tracking/tracking.component.html +11 -7
  57. package/html/assets/generated/pwa/html-pwa.html +53 -53
  58. package/html/lib/taon-purchase-status/taon-purchase-status.dialog.component.html +19 -0
  59. package/lib/build-info._auto-generated_.d.ts +1 -1
  60. package/lib/build-info._auto-generated_.js +1 -1
  61. package/lib/index._auto-generated_.js +2 -0
  62. package/lib/index._auto-generated_.js.map +1 -1
  63. package/lib/package.json +1 -1
  64. package/lib/taon-admin-layout/index.d.ts +1 -1
  65. package/lib/taon-admin-layout/index.js +2 -2
  66. package/lib/taon-admin-welcome/index.d.ts +1 -1
  67. package/lib/taon-admin-welcome/index.js +2 -2
  68. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +1 -1
  69. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +1 -1
  70. package/lib/taon-datatable/index.d.ts +1 -1
  71. package/lib/taon-datatable/index.js +2 -2
  72. package/lib/taon-draggable-button-panel/index.d.ts +1 -1
  73. package/lib/taon-draggable-button-panel/index.js +2 -2
  74. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  75. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  76. package/lib-esm/lib/index._auto-generated_.js +2 -0
  77. package/lib-esm/lib/index._auto-generated_.js.map +1 -1
  78. package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
  79. package/lib-esm/lib/taon-admin-layout/index.js +1 -1
  80. package/lib-esm/lib/taon-admin-welcome/index.d.ts +1 -1
  81. package/lib-esm/lib/taon-admin-welcome/index.js +1 -1
  82. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +1 -1
  83. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +1 -1
  84. package/lib-esm/lib/taon-datatable/index.d.ts +1 -1
  85. package/lib-esm/lib/taon-datatable/index.js +1 -1
  86. package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
  87. package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
  88. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  89. package/lib-prod/build-info._auto-generated_.js +1 -1
  90. package/lib-prod/index._auto-generated_.js +2 -0
  91. package/lib-prod/index._auto-generated_.js.map +1 -1
  92. package/lib-prod/package.json +1 -1
  93. package/lib-prod/taon-admin-layout/index.d.ts +1 -1
  94. package/lib-prod/taon-admin-layout/index.js +1 -1
  95. package/lib-prod/taon-admin-welcome/index.d.ts +1 -1
  96. package/lib-prod/taon-admin-welcome/index.js +1 -1
  97. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +1 -1
  98. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +1 -1
  99. package/lib-prod/taon-datatable/index.d.ts +1 -1
  100. package/lib-prod/taon-datatable/index.js +1 -1
  101. package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
  102. package/lib-prod/taon-draggable-button-panel/index.js +1 -1
  103. package/package.json +1 -1
  104. package/ts-source/browser-code/build-info._auto-generated_.ts +1 -1
  105. package/ts-source/browser-code/index._auto-generated_.ts +2 -0
  106. package/ts-source/browser-code/taon-admin-layout/taon-admin-page-tabs.component.ts +1 -1
  107. package/ts-source/browser-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.ts +1 -1
  108. package/ts-source/browser-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.po +1 -1
  109. package/ts-source/browser-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.ts +1 -1
  110. package/ts-source/browser-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.po +1 -1
  111. package/ts-source/browser-code/taon-backoffice-notifications/taon-backoffice-notifications.component.ts +15 -4
  112. package/ts-source/browser-code/taon-backoffice-notifications/taon-backoffice-notifications.service.ts +3 -0
  113. package/ts-source/browser-code/taon-detachable-dialog-content/taon-detachable-dialog-content.md +429 -0
  114. package/ts-source/browser-code/taon-detachable-dialog-content/taon-detached-window-content.component.ts +474 -0
  115. package/ts-source/browser-code/taon-purchase-status/taon-purchase-status.dialog.component.html +32 -0
  116. package/ts-source/browser-code/taon-purchase-status/taon-purchase-status.dialog.component.ts +29 -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 +2 -0
  119. package/ts-source/browser-code-prod/taon-admin-layout/taon-admin-page-tabs.component.ts +1 -1
  120. package/ts-source/browser-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.ts +1 -1
  121. package/ts-source/browser-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.po +1 -1
  122. package/ts-source/browser-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.ts +1 -1
  123. package/ts-source/browser-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.po +1 -1
  124. package/ts-source/browser-code-prod/taon-backoffice-notifications/taon-backoffice-notifications.component.ts +15 -4
  125. package/ts-source/browser-code-prod/taon-backoffice-notifications/taon-backoffice-notifications.service.ts +3 -0
  126. package/ts-source/browser-code-prod/taon-detachable-dialog-content/taon-detachable-dialog-content.md +429 -0
  127. package/ts-source/browser-code-prod/taon-detachable-dialog-content/taon-detached-window-content.component.split-namespaces.json +4 -0
  128. package/ts-source/browser-code-prod/taon-detachable-dialog-content/taon-detached-window-content.component.ts +474 -0
  129. package/ts-source/browser-code-prod/taon-purchase-status/taon-purchase-status.dialog.component.html +32 -0
  130. package/ts-source/browser-code-prod/taon-purchase-status/taon-purchase-status.dialog.component.split-namespaces.json +4 -0
  131. package/ts-source/browser-code-prod/taon-purchase-status/taon-purchase-status.dialog.component.ts +29 -0
  132. package/ts-source/websql-code/build-info._auto-generated_.ts +1 -1
  133. package/ts-source/websql-code/index._auto-generated_.ts +2 -0
  134. package/ts-source/websql-code/taon-admin-layout/taon-admin-page-tabs.component.ts +1 -1
  135. package/ts-source/websql-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.ts +1 -1
  136. package/ts-source/websql-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.po +1 -1
  137. package/ts-source/websql-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.ts +1 -1
  138. package/ts-source/websql-code/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.po +1 -1
  139. package/ts-source/websql-code/taon-backoffice-notifications/taon-backoffice-notifications.component.ts +15 -4
  140. package/ts-source/websql-code/taon-backoffice-notifications/taon-backoffice-notifications.service.ts +3 -0
  141. package/ts-source/websql-code/taon-detachable-dialog-content/taon-detachable-dialog-content.md +429 -0
  142. package/ts-source/websql-code/taon-detachable-dialog-content/taon-detached-window-content.component.ts +474 -0
  143. package/ts-source/websql-code/taon-purchase-status/taon-purchase-status.dialog.component.html +32 -0
  144. package/ts-source/websql-code/taon-purchase-status/taon-purchase-status.dialog.component.ts +29 -0
  145. package/ts-source/websql-code-prod/build-info._auto-generated_.ts +1 -1
  146. package/ts-source/websql-code-prod/index._auto-generated_.ts +2 -0
  147. package/ts-source/websql-code-prod/taon-admin-layout/taon-admin-page-tabs.component.ts +1 -1
  148. package/ts-source/websql-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.ts +1 -1
  149. package/ts-source/websql-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.po +1 -1
  150. package/ts-source/websql-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.ts +1 -1
  151. package/ts-source/websql-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.po +1 -1
  152. package/ts-source/websql-code-prod/taon-backoffice-notifications/taon-backoffice-notifications.component.ts +15 -4
  153. package/ts-source/websql-code-prod/taon-backoffice-notifications/taon-backoffice-notifications.service.ts +3 -0
  154. package/ts-source/websql-code-prod/taon-detachable-dialog-content/taon-detachable-dialog-content.md +429 -0
  155. package/ts-source/websql-code-prod/taon-detachable-dialog-content/taon-detached-window-content.component.split-namespaces.json +4 -0
  156. package/ts-source/websql-code-prod/taon-detachable-dialog-content/taon-detached-window-content.component.ts +474 -0
  157. package/ts-source/websql-code-prod/taon-purchase-status/taon-purchase-status.dialog.component.html +32 -0
  158. package/ts-source/websql-code-prod/taon-purchase-status/taon-purchase-status.dialog.component.split-namespaces.json +4 -0
  159. package/ts-source/websql-code-prod/taon-purchase-status/taon-purchase-status.dialog.component.ts +29 -0
  160. package/websql/fesm2022/{ui-websql-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs → ui-websql-my-organization-proj.ts.en-US.i18n.data-BhgdMDJr.mjs} +1 -1
  161. package/websql/fesm2022/{ui-websql-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs.map → ui-websql-my-organization-proj.ts.en-US.i18n.data-BhgdMDJr.mjs.map} +1 -1
  162. package/websql/fesm2022/{ui-websql-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs → ui-websql-my-organization-proj.ts.pl-PL.i18n.data-DhyVtJwe.mjs} +1 -1
  163. package/websql/fesm2022/{ui-websql-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs.map → ui-websql-my-organization-proj.ts.pl-PL.i18n.data-DhyVtJwe.mjs.map} +1 -1
  164. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs → ui-websql-taon-admin-welcome.component.html.en-US.i18n.data-0RxX6_GI.mjs} +1 -1
  165. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs.map → ui-websql-taon-admin-welcome.component.html.en-US.i18n.data-0RxX6_GI.mjs.map} +1 -1
  166. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs → ui-websql-taon-admin-welcome.component.html.pl-PL.i18n.data-Nmowb80z.mjs} +1 -1
  167. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs.map → ui-websql-taon-admin-welcome.component.html.pl-PL.i18n.data-Nmowb80z.mjs.map} +1 -1
  168. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs → ui-websql-taon-admin-welcome.component.ts.en-US.i18n.data-DkS2OOkR.mjs} +1 -1
  169. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs.map → ui-websql-taon-admin-welcome.component.ts.en-US.i18n.data-DkS2OOkR.mjs.map} +1 -1
  170. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs → ui-websql-taon-admin-welcome.component.ts.pl-PL.i18n.data-DVeJEjRy.mjs} +1 -1
  171. package/websql/fesm2022/{ui-websql-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs.map → ui-websql-taon-admin-welcome.component.ts.pl-PL.i18n.data-DVeJEjRy.mjs.map} +1 -1
  172. package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs → ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-B7rMbj_k.mjs} +2 -2
  173. package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map → ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-B7rMbj_k.mjs.map} +1 -1
  174. package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs → ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-DhnMOPfQ.mjs} +2 -2
  175. package/websql/fesm2022/{ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map → ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-DhnMOPfQ.mjs.map} +1 -1
  176. package/websql/fesm2022/{ui-websql-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs → ui-websql-taon-under-construction.component.ts.en-US.i18n.data-Dh67aeKr.mjs} +1 -1
  177. package/websql/fesm2022/{ui-websql-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs.map → ui-websql-taon-under-construction.component.ts.en-US.i18n.data-Dh67aeKr.mjs.map} +1 -1
  178. package/websql/fesm2022/{ui-websql-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs → ui-websql-taon-under-construction.component.ts.pl-PL.i18n.data-1tOEFzhx.mjs} +1 -1
  179. package/websql/fesm2022/{ui-websql-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs.map → ui-websql-taon-under-construction.component.ts.pl-PL.i18n.data-1tOEFzhx.mjs.map} +1 -1
  180. package/websql/fesm2022/ui-websql.mjs +456 -27
  181. package/websql/fesm2022/ui-websql.mjs.map +1 -1
  182. package/websql/package.json +1 -1
  183. package/websql/types/ui-websql.d.ts +101 -5
  184. package/websql-prod/fesm2022/{ui-websql-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs → ui-websql-prod-my-organization-proj.ts.en-US.i18n.data-DONKFrH1.mjs} +1 -1
  185. package/websql-prod/fesm2022/{ui-websql-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs.map → ui-websql-prod-my-organization-proj.ts.en-US.i18n.data-DONKFrH1.mjs.map} +1 -1
  186. package/websql-prod/fesm2022/{ui-websql-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs → ui-websql-prod-my-organization-proj.ts.pl-PL.i18n.data-2tqzyV6I.mjs} +1 -1
  187. package/websql-prod/fesm2022/{ui-websql-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs.map → ui-websql-prod-my-organization-proj.ts.pl-PL.i18n.data-2tqzyV6I.mjs.map} +1 -1
  188. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs → ui-websql-prod-taon-admin-welcome.component.html.en-US.i18n.data-e56teWnw.mjs} +1 -1
  189. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs.map → ui-websql-prod-taon-admin-welcome.component.html.en-US.i18n.data-e56teWnw.mjs.map} +1 -1
  190. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs → ui-websql-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-gJ0yFMrS.mjs} +1 -1
  191. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs.map → ui-websql-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-gJ0yFMrS.mjs.map} +1 -1
  192. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs → ui-websql-prod-taon-admin-welcome.component.ts.en-US.i18n.data-Brm6LkNC.mjs} +1 -1
  193. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs.map → ui-websql-prod-taon-admin-welcome.component.ts.en-US.i18n.data-Brm6LkNC.mjs.map} +1 -1
  194. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs → ui-websql-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-UzLYlGgM.mjs} +1 -1
  195. package/websql-prod/fesm2022/{ui-websql-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs.map → ui-websql-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-UzLYlGgM.mjs.map} +1 -1
  196. package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs → ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-Y96lOSMs.mjs} +2 -2
  197. package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs.map → ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-Y96lOSMs.mjs.map} +1 -1
  198. package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs → ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-BdrjRjg7.mjs} +2 -2
  199. package/websql-prod/fesm2022/{ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs.map → ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-BdrjRjg7.mjs.map} +1 -1
  200. package/websql-prod/fesm2022/{ui-websql-prod-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs → ui-websql-prod-taon-under-construction.component.ts.en-US.i18n.data-DgO-aU_4.mjs} +1 -1
  201. package/websql-prod/fesm2022/{ui-websql-prod-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs.map → ui-websql-prod-taon-under-construction.component.ts.en-US.i18n.data-DgO-aU_4.mjs.map} +1 -1
  202. package/websql-prod/fesm2022/{ui-websql-prod-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs → ui-websql-prod-taon-under-construction.component.ts.pl-PL.i18n.data-DQbYc83m.mjs} +1 -1
  203. package/websql-prod/fesm2022/{ui-websql-prod-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs.map → ui-websql-prod-taon-under-construction.component.ts.pl-PL.i18n.data-DQbYc83m.mjs.map} +1 -1
  204. package/websql-prod/fesm2022/ui-websql-prod.mjs +456 -27
  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 +101 -5
@@ -2,17 +2,17 @@ import { Translation } from '@taon-dev/i18n/browser-prod';
2
2
  import { UtilsJson__NS__getValue, ___NS__isFunction, ___NS__isBoolean, ___NS__isEqual, ___NS__upperCase } from 'tnp-core/browser-prod';
3
3
  import { BaseCommandLineFeature } from 'tnp-helpers/browser-prod';
4
4
  import * as i0 from '@angular/core';
5
- import { inject, ElementRef, Directive, signal, Injectable, Input, ChangeDetectionStrategy, Component, HostListener, ViewChild, DestroyRef, ChangeDetectorRef, EventEmitter, Output, input } from '@angular/core';
5
+ import { inject, ElementRef, Directive, signal, Injectable, Input, ChangeDetectionStrategy, Component, HostListener, ViewChild, DestroyRef, ChangeDetectorRef, EventEmitter, Output, InjectionToken, ApplicationRef, EnvironmentInjector, Injector, createComponent, Inject, input } from '@angular/core';
6
6
  import * as i2$1 from '@angular/common';
7
7
  import { CommonModule, AsyncPipe, NgTemplateOutlet, NgIf } from '@angular/common';
8
8
  import * as i3$1 from '@angular/material/expansion';
9
9
  import { MatExpansionModule } from '@angular/material/expansion';
10
- import * as i4 from '@angular/material/icon';
10
+ import * as i1$1 from '@angular/material/icon';
11
11
  import { MatIconModule } from '@angular/material/icon';
12
12
  import * as i3 from '@angular/material/tooltip';
13
13
  import { MatTooltipModule } from '@angular/material/tooltip';
14
14
  import * as i1 from '@angular/router';
15
- import { NavigationEnd, RouterOutlet, RouterLink } from '@angular/router';
15
+ import { NavigationEnd, RouterOutlet, RouterLink, ActivatedRoute, Router } from '@angular/router';
16
16
  import { filter, BehaviorSubject, Subject, switchMap, debounceTime, distinctUntilChanged, tap, of, from, map, catchError, finalize, firstValueFrom, take } from 'rxjs';
17
17
  import * as i2 from '@angular/material/tabs';
18
18
  import { MatTabsModule } from '@angular/material/tabs';
@@ -20,15 +20,15 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
20
20
  import { Resource__NS__listenErrors, getDefaultModel } from 'ng2-rest/browser-prod';
21
21
  import { TaonAdminService, getHttpStatus, ClassHelpers__NS__getName, Symbols__NS__old__NS__X_TOTAL_COUNT } from 'taon/browser-prod';
22
22
  import { HotToastRef, HotToastService } from '@ngneat/hot-toast';
23
- import * as i1$1 from '@angular/material/dialog';
23
+ import * as i1$2 from '@angular/material/dialog';
24
24
  import { MAT_DIALOG_DATA, MatDialogModule, MatDialog, MatDialogRef } from '@angular/material/dialog';
25
- import * as i3$2 from '@angular/material/button';
25
+ import * as i2$2 from '@angular/material/button';
26
26
  import { MatButtonModule } from '@angular/material/button';
27
- import * as i3$3 from '@angular/material/button-toggle';
27
+ import * as i3$2 from '@angular/material/button-toggle';
28
28
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
29
- import * as i2$2 from '@angular/forms';
29
+ import * as i2$3 from '@angular/forms';
30
30
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
31
- import * as i4$1 from '@angular/material/form-field';
31
+ import * as i4 from '@angular/material/form-field';
32
32
  import { MatFormFieldModule } from '@angular/material/form-field';
33
33
  import * as i6 from '@angular/material/input';
34
34
  import { MatInputModule } from '@angular/material/input';
@@ -68,10 +68,10 @@ const CURRENT_PACKAGE_TAON_VERSION = 'v21';
68
68
  /**
69
69
  * Autogenerated by current cli tool. Use *tnp release* to bump version.
70
70
  */
71
- const CURRENT_PACKAGE_VERSION = '21.0.18';
71
+ const CURRENT_PACKAGE_VERSION = '21.0.19';
72
72
  // THIS FILE IS GENERATED - DO NOT MODIFY
73
73
 
74
- const t$3 = Translation.for('src/lib/my-organization-proj.ts', { "src/lib/my-organization-proj.ts": { "en-US": async () => (await import('./ui-browser-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs')).default } });
74
+ const t$3 = Translation.for('src/lib/my-organization-proj.ts', { "src/lib/my-organization-proj.ts": { "en-US": async () => (await import('./ui-browser-prod-my-organization-proj.ts.en-US.i18n.data-CSaDmgPM.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-my-organization-proj.ts.pl-PL.i18n.data-C-iWnhim.mjs')).default } });
75
75
  function myOrgProj() {
76
76
  t$3.gettext('My Translated Company Name!');
77
77
  }
@@ -428,7 +428,7 @@ class TaonAdminPageTabsComponent {
428
428
  return;
429
429
  }
430
430
  let children = await this.loadChildren(activeRoute);
431
- children = this.unwrapEmptyPathRoutes(children);
431
+ children = this.unwrapEmptyPathRoutes(children).filter(f => !!f.data);
432
432
  if (!children.length) {
433
433
  return;
434
434
  }
@@ -946,7 +946,7 @@ class TaonAdminLayoutComponent {
946
946
  .replace(/\b\w/g, char => char.toUpperCase());
947
947
  }
948
948
  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 }); }
949
- 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 aria-label=\"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\">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: i4.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 }); }
949
+ 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 aria-label=\"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\">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 }); }
950
950
  }
951
951
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminLayoutComponent, decorators: [{
952
952
  type: Component,
@@ -1012,7 +1012,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1012
1012
 
1013
1013
  //#region imports
1014
1014
  //#endregion
1015
- const t$2 = Translation.for('src/lib/taon-admin-welcome/taon-admin-welcome.component.ts', { "src/lib/taon-admin-welcome/taon-admin-welcome.component.html": { "en-US": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.html.en-US.i18n.data-DyjZkf16.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-079EXaRW.mjs')).default }, "src/lib/taon-admin-welcome/taon-admin-welcome.component.ts": { "en-US": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.ts.en-US.i18n.data-DB_VFp1U.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-C5Asxno1.mjs')).default } });
1015
+ const t$2 = Translation.for('src/lib/taon-admin-welcome/taon-admin-welcome.component.ts', { "src/lib/taon-admin-welcome/taon-admin-welcome.component.html": { "en-US": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.html.en-US.i18n.data-B6PGLj_S.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.html.pl-PL.i18n.data-Cu2SC_ss.mjs')).default }, "src/lib/taon-admin-welcome/taon-admin-welcome.component.ts": { "en-US": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.ts.en-US.i18n.data-CuPbeZpW.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-admin-welcome.component.ts.pl-PL.i18n.data-BoJfF0mf.mjs')).default } });
1016
1016
  class TaonAdminWelcomeComponent {
1017
1017
  constructor() {
1018
1018
  this.t = t$2.for(this);
@@ -1132,7 +1132,7 @@ class TaonErrorDetailsDialogComponent {
1132
1132
  return `${protocol}://file${location}`;
1133
1133
  }
1134
1134
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonErrorDetailsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonErrorDetailsDialogComponent, isStandalone: true, selector: "taon-error-details-dialog", ngImport: i0, template: "<h2 mat-dialog-title>Error details</h2>\n\n<mat-dialog-content>\n <div class=\"error-message\">\n {{ data.message }}\n </div>\n\n <div class=\"editor-selector\">\n <span class=\"editor-selector-label\"> I am using editor: </span>\n\n <mat-button-toggle-group\n [value]=\"editor\"\n (change)=\"setEditor($event.value)\"\n aria-label=\"Code editor\">\n <mat-button-toggle value=\"vscode\"> VS Code </mat-button-toggle>\n\n <mat-button-toggle value=\"vscodium\"> VSCodium </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <pre\n class=\"error-details\"><code>@for (stackLine of stackLines; track $index) {\n@if (stackLine.file) {<a\n class=\"stack-link\"\n title=\"Open {{ stackLine.file }}:{{ stackLine.line }}:{{ stackLine.column }}\"\n (click)=\"openStackLine(stackLine)\">{{ stackLine.text }}</a>} @else {{{ stackLine.text }}}{{ '\\n' }}\n}</code></pre>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n Close\n </button>\n</mat-dialog-actions>\n", styles: [".error-message{margin-bottom:16px;font-weight:500}.editor-selector{display:flex;align-items:center;gap:12px;margin-bottom:12px}.editor-selector-label{font-size:13px}.error-details{box-sizing:border-box;max-width:100%;max-height:60vh;margin:0;padding:16px;overflow-y:auto;overflow-x:hidden;border-radius:6px;background:#0000000f;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.stack-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.stack-link:hover{background:#00000014}.stack-line{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$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: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i3$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }] }); }
1135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonErrorDetailsDialogComponent, isStandalone: true, selector: "taon-error-details-dialog", ngImport: i0, template: "<h2 mat-dialog-title>Error details</h2>\n\n<mat-dialog-content>\n <div class=\"error-message\">\n {{ data.message }}\n </div>\n\n <div class=\"editor-selector\">\n <span class=\"editor-selector-label\"> I am using editor: </span>\n\n <mat-button-toggle-group\n [value]=\"editor\"\n (change)=\"setEditor($event.value)\"\n aria-label=\"Code editor\">\n <mat-button-toggle value=\"vscode\"> VS Code </mat-button-toggle>\n\n <mat-button-toggle value=\"vscodium\"> VSCodium </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <pre\n class=\"error-details\"><code>@for (stackLine of stackLines; track $index) {\n@if (stackLine.file) {<a\n class=\"stack-link\"\n title=\"Open {{ stackLine.file }}:{{ stackLine.line }}:{{ stackLine.column }}\"\n (click)=\"openStackLine(stackLine)\">{{ stackLine.text }}</a>} @else {{{ stackLine.text }}}{{ '\\n' }}\n}</code></pre>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n Close\n </button>\n</mat-dialog-actions>\n", styles: [".error-message{margin-bottom:16px;font-weight:500}.editor-selector{display:flex;align-items:center;gap:12px;margin-bottom:12px}.editor-selector-label{font-size:13px}.error-details{box-sizing:border-box;max-width:100%;max-height:60vh;margin:0;padding:16px;overflow-y:auto;overflow-x:hidden;border-radius:6px;background:#0000000f;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.stack-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.stack-link:hover{background:#00000014}.stack-line{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i3$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }] }); }
1136
1136
  }
1137
1137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonErrorDetailsDialogComponent, decorators: [{
1138
1138
  type: Component,
@@ -1183,11 +1183,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1183
1183
  //#region imports
1184
1184
  //#endregion
1185
1185
  class TaonBackofficeNotificationsService {
1186
+ //#endregion
1186
1187
  constructor() {
1187
1188
  //#region injections
1188
1189
  this.toast = inject(HotToastService);
1190
+ this.toast.defaultConfig.dismissible = true;
1189
1191
  }
1190
- //#endregion
1191
1192
  //#region private methods
1192
1193
  normalize(input) {
1193
1194
  return typeof input === 'string' ? { title: input } : input;
@@ -1228,12 +1229,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1228
1229
  args: [{
1229
1230
  providedIn: 'root',
1230
1231
  }]
1231
- }] });
1232
+ }], ctorParameters: () => [] });
1232
1233
 
1233
1234
  //#region imports
1234
1235
  //#endregion
1235
- const t$1 = Translation.for('src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts', { "src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts": { "en-US": async () => (await import('./ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-DdHr5V8R.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CD5ZqDCD.mjs')).default } });
1236
+ const t$1 = Translation.for('src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts', { "src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts": { "en-US": async () => (await import('./ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-XLmZcgCu.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-CJ92Sv4p.mjs')).default } });
1236
1237
  class TaonBackofficeNotificationsComponent {
1238
+ showErrorNotification(title, details) {
1239
+ const key = JSON.stringify([title, details]);
1240
+ if (this.shownNotifications.has(key)) {
1241
+ return;
1242
+ }
1243
+ this.shownNotifications.add(key);
1244
+ this.notification.error({
1245
+ title,
1246
+ details,
1247
+ });
1248
+ }
1237
1249
  //#endregion
1238
1250
  //#region constructor
1239
1251
  constructor() {
@@ -1242,6 +1254,7 @@ class TaonBackofficeNotificationsComponent {
1242
1254
  this.notification = inject(TaonBackofficeNotificationsService);
1243
1255
  this.destroyRef = inject(DestroyRef);
1244
1256
  this.taonAdminService = inject(TaonAdminService);
1257
+ this.shownNotifications = new Set();
1245
1258
  Resource__NS__listenErrors
1246
1259
  .pipe(takeUntilDestroyed(this.destroyRef))
1247
1260
  .subscribe((error) => {
@@ -1258,10 +1271,9 @@ class TaonBackofficeNotificationsComponent {
1258
1271
  console.log(`[@taon-dev/sudo] Skipping notificaiton for message "${jsonMsg.message}" (code=${statusCode})`);
1259
1272
  }
1260
1273
  else {
1261
- this.notification.error({
1262
- title: t$1.translate(jsonMsg.message) || t$1.gettext('Unknown error'),
1263
- details: jsonMsg?.details,
1264
- });
1274
+ const title = t$1.translate(jsonMsg.message) || t$1.gettext('Unknown error');
1275
+ const details = jsonMsg?.details;
1276
+ this.showErrorNotification(title, details);
1265
1277
  }
1266
1278
  });
1267
1279
  }
@@ -1287,7 +1299,7 @@ class TaonConfirmDialogComponent {
1287
1299
  this.dialogRef.close(true);
1288
1300
  }
1289
1301
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1290
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonConfirmDialogComponent, isStandalone: true, selector: "taon-confirm-dialog", ngImport: i0, template: "<div\n class=\"flex min-w-[320px] max-w-[560px] flex-col gap-6 p-6 text-gray-900 dark:text-gray-100 sm:p-7\">\n <!-- Header -->\n <h2 class=\"m-0 text-xl leading-snug font-medium sm:text-2xl\">\n {{ data.title }}\n </h2>\n\n <!-- Message -->\n @if (data.message) {\n <p\n class=\"m-0 whitespace-pre-line text-base leading-relaxed text-gray-600 dark:text-gray-300 sm:text-lg\">\n {{ data.message }}\n </p>\n }\n\n <!-- Actions -->\n <div class=\"flex flex-wrap items-center justify-end gap-3\">\n <button\n mat-button\n type=\"button\"\n (click)=\"cancel()\">\n {{ data.cancelText || 'Cancel' }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"!rounded-full !px-6\"\n (click)=\"confirm()\">\n {{ data.confirmText || 'OK' }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$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"] }] }); }
1302
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonConfirmDialogComponent, isStandalone: true, selector: "taon-confirm-dialog", ngImport: i0, template: "<div\n class=\"flex min-w-[320px] max-w-[560px] flex-col gap-6 p-6 text-gray-900 dark:text-gray-100 sm:p-7\">\n <!-- Header -->\n <h2 class=\"m-0 text-xl leading-snug font-medium sm:text-2xl\">\n {{ data.title }}\n </h2>\n\n <!-- Message -->\n @if (data.message) {\n <p\n class=\"m-0 whitespace-pre-line text-base leading-relaxed text-gray-600 dark:text-gray-300 sm:text-lg\">\n {{ data.message }}\n </p>\n }\n\n <!-- Actions -->\n <div class=\"flex flex-wrap items-center justify-end gap-3\">\n <button\n mat-button\n type=\"button\"\n (click)=\"cancel()\">\n {{ data.cancelText || 'Cancel' }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"!rounded-full !px-6\"\n (click)=\"confirm()\">\n {{ data.confirmText || 'OK' }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { 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"] }] }); }
1291
1303
  }
1292
1304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonConfirmDialogComponent, decorators: [{
1293
1305
  type: Component,
@@ -1614,7 +1626,7 @@ class TaonDatatableComponent {
1614
1626
  }
1615
1627
  }
1616
1628
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDatatableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1617
- 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=\"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 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=\"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 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 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 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 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 [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$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.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: i3$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: i3$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$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.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 }); }
1629
+ 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=\"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 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=\"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 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 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 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 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 [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 }); }
1618
1630
  }
1619
1631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDatatableComponent, decorators: [{
1620
1632
  type: Component,
@@ -1696,6 +1708,408 @@ const TaonDatatableRoutes = [
1696
1708
  */
1697
1709
  // export default TaonDatatableRoutes;
1698
1710
 
1711
+ //#region imports
1712
+ //#endregion
1713
+ //#region tokens
1714
+ const TAON_IS_DETACHED_WINDOW = new InjectionToken('TAON_IS_DETACHED_WINDOW', {
1715
+ factory: () => false,
1716
+ });
1717
+ //#endregion
1718
+ //#region helpers
1719
+ function cloneObject(value) {
1720
+ return {
1721
+ ...(value || {}),
1722
+ };
1723
+ }
1724
+ function createDetachedActivatedRoute(state) {
1725
+ const params$ = new BehaviorSubject(cloneObject(state.params));
1726
+ const queryParams$ = new BehaviorSubject(cloneObject(state.queryParams));
1727
+ const fragment$ = new BehaviorSubject(state.fragment);
1728
+ const data$ = new BehaviorSubject(cloneObject(state.data));
1729
+ const snapshot = {
1730
+ params: cloneObject(state.params),
1731
+ queryParams: cloneObject(state.queryParams),
1732
+ fragment: state.fragment,
1733
+ data: cloneObject(state.data),
1734
+ paramMap: undefined,
1735
+ queryParamMap: undefined,
1736
+ };
1737
+ return {
1738
+ snapshot,
1739
+ params: params$.asObservable(),
1740
+ queryParams: queryParams$.asObservable(),
1741
+ fragment: fragment$.asObservable(),
1742
+ data: data$.asObservable(),
1743
+ };
1744
+ }
1745
+ //#endregion
1746
+ //#region detached windows service
1747
+ class TaonDetachedWindowsService {
1748
+ constructor() {
1749
+ //#region fields
1750
+ /**
1751
+ * Base z-index for all detached windows.
1752
+ */
1753
+ this.baseZIndex = 10000;
1754
+ /**
1755
+ * Monotonically increasing focus counter.
1756
+ *
1757
+ * Every time a window receives focus it gets the next value.
1758
+ */
1759
+ this.zIndexCounter = this.baseZIndex;
1760
+ this.windows = signal([], ...(ngDevMode ? [{ debugName: "windows" }] : []));
1761
+ }
1762
+ //#endregion
1763
+ //#region open
1764
+ open(options) {
1765
+ const id = typeof crypto !== 'undefined' && crypto.randomUUID
1766
+ ? crypto.randomUUID()
1767
+ : `taon-window-${Date.now()}-${Math.random().toString(36).slice(2)}`;
1768
+ const zIndex = ++this.zIndexCounter;
1769
+ this.windows.update(windows => [
1770
+ ...windows,
1771
+ {
1772
+ id,
1773
+ title: options.title,
1774
+ component: options.component,
1775
+ routeState: options.routeState,
1776
+ zIndex,
1777
+ },
1778
+ ]);
1779
+ return id;
1780
+ }
1781
+ //#endregion
1782
+ //#region focus
1783
+ focus(id) {
1784
+ const windows = this.windows();
1785
+ const windowToFocus = windows.find(window => window.id === id);
1786
+ if (!windowToFocus) {
1787
+ return;
1788
+ }
1789
+ /**
1790
+ * Don't create a new signal value if this window
1791
+ * is already the top-most window.
1792
+ */
1793
+ const highestZIndex = Math.max(...windows.map(window => window.zIndex));
1794
+ if (windowToFocus.zIndex === highestZIndex) {
1795
+ return;
1796
+ }
1797
+ const zIndex = ++this.zIndexCounter;
1798
+ this.windows.update(currentWindows => currentWindows.map(window => window.id === id
1799
+ ? {
1800
+ ...window,
1801
+ zIndex,
1802
+ }
1803
+ : window));
1804
+ }
1805
+ //#endregion
1806
+ //#region close
1807
+ close(id) {
1808
+ const detachedWindow = this.windows().find(current => current.id === id);
1809
+ if (detachedWindow?.componentRef) {
1810
+ detachedWindow.componentRef.destroy();
1811
+ }
1812
+ this.windows.update(windows => windows.filter(current => current.id !== id));
1813
+ }
1814
+ //#endregion
1815
+ //#region register component ref
1816
+ registerComponentRef(id, componentRef) {
1817
+ this.windows.update(windows => windows.map(window => window.id === id
1818
+ ? {
1819
+ ...window,
1820
+ componentRef,
1821
+ }
1822
+ : window));
1823
+ }
1824
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1825
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowsService, providedIn: 'root' }); }
1826
+ }
1827
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowsService, decorators: [{
1828
+ type: Injectable,
1829
+ args: [{
1830
+ providedIn: 'root',
1831
+ }]
1832
+ }] });
1833
+ //#endregion
1834
+ //#region detached window
1835
+ class TaonDetachedWindowComponent {
1836
+ constructor() {
1837
+ //#region injections
1838
+ this.windowsService = inject(TaonDetachedWindowsService);
1839
+ this.appRef = inject(ApplicationRef);
1840
+ this.environmentInjector = inject(EnvironmentInjector);
1841
+ this.injector = inject(Injector);
1842
+ }
1843
+ //#endregion
1844
+ //#region lifecycle
1845
+ ngAfterViewInit() {
1846
+ this.createDetachedComponent();
1847
+ }
1848
+ ngOnDestroy() {
1849
+ this.destroyDetachedComponent();
1850
+ }
1851
+ //#endregion
1852
+ //#region focus
1853
+ focus() {
1854
+ this.windowsService.focus(this.window.id);
1855
+ }
1856
+ //#endregion
1857
+ //#region create detached component
1858
+ createDetachedComponent() {
1859
+ const detachedActivatedRoute = createDetachedActivatedRoute(this.window.routeState);
1860
+ const detachedInjector = Injector.create({
1861
+ parent: this.injector,
1862
+ providers: [
1863
+ {
1864
+ provide: ActivatedRoute,
1865
+ useValue: detachedActivatedRoute,
1866
+ },
1867
+ {
1868
+ provide: TAON_IS_DETACHED_WINDOW,
1869
+ useValue: true,
1870
+ },
1871
+ ],
1872
+ });
1873
+ const componentRef = createComponent(this.window.component, {
1874
+ environmentInjector: this.environmentInjector,
1875
+ elementInjector: detachedInjector,
1876
+ hostElement: this.componentHost.nativeElement,
1877
+ });
1878
+ this.componentRef = componentRef;
1879
+ this.appRef.attachView(componentRef.hostView);
1880
+ componentRef.changeDetectorRef.detectChanges();
1881
+ this.windowsService.registerComponentRef(this.window.id, componentRef);
1882
+ }
1883
+ //#endregion
1884
+ //#region destroy detached component
1885
+ destroyDetachedComponent() {
1886
+ if (!this.componentRef) {
1887
+ return;
1888
+ }
1889
+ try {
1890
+ this.appRef.detachView(this.componentRef.hostView);
1891
+ }
1892
+ catch { }
1893
+ if (!this.componentRef.hostView.destroyed) {
1894
+ this.componentRef.destroy();
1895
+ }
1896
+ this.componentRef = undefined;
1897
+ }
1898
+ //#endregion
1899
+ //#region close
1900
+ close() {
1901
+ this.windowsService.close(this.window.id);
1902
+ }
1903
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1904
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonDetachedWindowComponent, isStandalone: true, selector: "taon-detached-window", inputs: { window: "window" }, viewQueries: [{ propertyName: "componentHost", first: true, predicate: ["componentHost"], descendants: true, static: true }], ngImport: i0, template: `
1905
+ <div
1906
+ class="taon-detached-window"
1907
+ cdkDrag
1908
+ [style.z-index]="window.zIndex"
1909
+ (pointerdown)="focus()">
1910
+ <header class="taon-detached-window-header">
1911
+ <div
1912
+ class="taon-detached-window-drag-handle"
1913
+ cdkDragHandle>
1914
+ <span class="taon-detached-window-title">
1915
+ {{ window.title }}
1916
+ </span>
1917
+ </div>
1918
+
1919
+ <div class="taon-detached-window-actions">
1920
+ <button
1921
+ mat-icon-button
1922
+ type="button"
1923
+ matTooltip="Close"
1924
+ (click)="close()">
1925
+ <mat-icon> close </mat-icon>
1926
+ </button>
1927
+ </div>
1928
+ </header>
1929
+
1930
+ <main class="taon-detached-window-body">
1931
+ <div
1932
+ #componentHost
1933
+ class="taon-detached-window-component-host"></div>
1934
+ </main>
1935
+ </div>
1936
+ `, isInline: true, styles: [":host{display:block}.taon-detached-window{position:absolute;top:80px;left:80px;width:min(900px,calc(100vw - 80px));height:min(700px,calc(100vh - 80px));min-width:320px;min-height:200px;display:flex;flex-direction:column;background:var(--mat-sys-surface, white);color:var(--mat-sys-on-surface, black);border:1px solid var(--mat-sys-outline-variant, #ccc);border-radius:8px;box-shadow:0 8px 30px #0003;overflow:hidden;resize:both}.taon-detached-window-header{height:40px;flex:0 0 40px;display:flex;align-items:center;padding-left:12px;border-bottom:1px solid var(--mat-sys-outline-variant, #ccc);-webkit-user-select:none;user-select:none}.taon-detached-window-drag-handle{flex:1;height:100%;display:flex;align-items:center;cursor:move;overflow:hidden}.taon-detached-window-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:500}.taon-detached-window-actions{display:flex;align-items:center;padding-right:4px}.taon-detached-window-body{flex:1;min-height:0;overflow:auto}.taon-detached-window-component-host{display:block;min-height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { 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: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1937
+ }
1938
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowComponent, decorators: [{
1939
+ type: Component,
1940
+ args: [{ selector: 'taon-detached-window', standalone: true, imports: [
1941
+ CommonModule,
1942
+ CdkDrag,
1943
+ CdkDragHandle,
1944
+ MatIconModule,
1945
+ MatButtonModule,
1946
+ MatTooltipModule,
1947
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: `
1948
+ <div
1949
+ class="taon-detached-window"
1950
+ cdkDrag
1951
+ [style.z-index]="window.zIndex"
1952
+ (pointerdown)="focus()">
1953
+ <header class="taon-detached-window-header">
1954
+ <div
1955
+ class="taon-detached-window-drag-handle"
1956
+ cdkDragHandle>
1957
+ <span class="taon-detached-window-title">
1958
+ {{ window.title }}
1959
+ </span>
1960
+ </div>
1961
+
1962
+ <div class="taon-detached-window-actions">
1963
+ <button
1964
+ mat-icon-button
1965
+ type="button"
1966
+ matTooltip="Close"
1967
+ (click)="close()">
1968
+ <mat-icon> close </mat-icon>
1969
+ </button>
1970
+ </div>
1971
+ </header>
1972
+
1973
+ <main class="taon-detached-window-body">
1974
+ <div
1975
+ #componentHost
1976
+ class="taon-detached-window-component-host"></div>
1977
+ </main>
1978
+ </div>
1979
+ `, styles: [":host{display:block}.taon-detached-window{position:absolute;top:80px;left:80px;width:min(900px,calc(100vw - 80px));height:min(700px,calc(100vh - 80px));min-width:320px;min-height:200px;display:flex;flex-direction:column;background:var(--mat-sys-surface, white);color:var(--mat-sys-on-surface, black);border:1px solid var(--mat-sys-outline-variant, #ccc);border-radius:8px;box-shadow:0 8px 30px #0003;overflow:hidden;resize:both}.taon-detached-window-header{height:40px;flex:0 0 40px;display:flex;align-items:center;padding-left:12px;border-bottom:1px solid var(--mat-sys-outline-variant, #ccc);-webkit-user-select:none;user-select:none}.taon-detached-window-drag-handle{flex:1;height:100%;display:flex;align-items:center;cursor:move;overflow:hidden}.taon-detached-window-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:500}.taon-detached-window-actions{display:flex;align-items:center;padding-right:4px}.taon-detached-window-body{flex:1;min-height:0;overflow:auto}.taon-detached-window-component-host{display:block;min-height:100%}\n"] }]
1980
+ }], propDecorators: { window: [{
1981
+ type: Input,
1982
+ args: [{
1983
+ required: true,
1984
+ }]
1985
+ }], componentHost: [{
1986
+ type: ViewChild,
1987
+ args: ['componentHost', {
1988
+ static: true,
1989
+ }]
1990
+ }] } });
1991
+ //#endregion
1992
+ //#region detached windows host
1993
+ class TaonDetachedWindowsHostComponent {
1994
+ constructor() {
1995
+ this.windowsService = inject(TaonDetachedWindowsService);
1996
+ }
1997
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowsHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1998
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDetachedWindowsHostComponent, isStandalone: true, selector: "taon-detached-windows-host", ngImport: i0, template: `
1999
+ @for (window of windowsService.windows(); track window.id) {
2000
+ <taon-detached-window [window]="window" />
2001
+ }
2002
+ `, isInline: true, styles: [":host{position:fixed;inset:0;pointer-events:none;z-index:10000}taon-detached-window{pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TaonDetachedWindowComponent, selector: "taon-detached-window", inputs: ["window"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2003
+ }
2004
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachedWindowsHostComponent, decorators: [{
2005
+ type: Component,
2006
+ args: [{ selector: 'taon-detached-windows-host', standalone: true, imports: [CommonModule, TaonDetachedWindowComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2007
+ @for (window of windowsService.windows(); track window.id) {
2008
+ <taon-detached-window [window]="window" />
2009
+ }
2010
+ `, styles: [":host{position:fixed;inset:0;pointer-events:none;z-index:10000}taon-detached-window{pointer-events:auto}\n"] }]
2011
+ }] });
2012
+ //#endregion
2013
+ //#region detachable dialog content
2014
+ class TaonDetachableDialogContentComponent {
2015
+ constructor() {
2016
+ //#region injections
2017
+ this.route = inject(ActivatedRoute);
2018
+ this.router = inject(Router);
2019
+ this.windowsService = inject(TaonDetachedWindowsService);
2020
+ this.isDetached = inject(TAON_IS_DETACHED_WINDOW);
2021
+ }
2022
+ //#endregion
2023
+ //#region detach
2024
+ detach() {
2025
+ if (this.isDetached) {
2026
+ return;
2027
+ }
2028
+ const snapshot = this.route.snapshot;
2029
+ const routeState = {
2030
+ url: this.router.url,
2031
+ params: this.collectParams(snapshot),
2032
+ queryParams: cloneObject(snapshot.queryParams),
2033
+ fragment: snapshot.fragment,
2034
+ data: this.collectData(snapshot),
2035
+ };
2036
+ this.windowsService.open({
2037
+ title: this.title || this.component.name || 'Detached window',
2038
+ component: this.component,
2039
+ routeState,
2040
+ });
2041
+ }
2042
+ //#endregion
2043
+ //#region route utils
2044
+ collectParams(snapshot) {
2045
+ const params = {};
2046
+ let current = snapshot;
2047
+ while (current) {
2048
+ Object.assign(params, current.params);
2049
+ current = current.parent;
2050
+ }
2051
+ return params;
2052
+ }
2053
+ collectData(snapshot) {
2054
+ const data = {};
2055
+ let current = snapshot;
2056
+ while (current) {
2057
+ Object.assign(data, current.data);
2058
+ current = current.parent;
2059
+ }
2060
+ return data;
2061
+ }
2062
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachableDialogContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2063
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDetachableDialogContentComponent, isStandalone: true, selector: "taon-detachable-dialog-content", inputs: { component: "component", title: "title" }, ngImport: i0, template: `
2064
+ <section class="taon-detachable-content">
2065
+ @if (!isDetached) {
2066
+ <header class="taon-detachable-content-toolbar">
2067
+ <button
2068
+ mat-icon-button
2069
+ type="button"
2070
+ matTooltip="Detach"
2071
+ (click)="detach()">
2072
+ <mat-icon> open_in_new </mat-icon>
2073
+ </button>
2074
+ </header>
2075
+ }
2076
+
2077
+ <div class="taon-detachable-content-body">
2078
+ <ng-content />
2079
+ </div>
2080
+ </section>
2081
+ `, isInline: true, styles: [":host{display:block}.taon-detachable-content{display:flex;flex-direction:column;min-height:0}.taon-detachable-content-toolbar{min-height:36px;display:flex;align-items:center;justify-content:flex-end;border-bottom:1px solid var(--mat-sys-outline-variant, #ddd)}.taon-detachable-content-body{min-height:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { 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: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2082
+ }
2083
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDetachableDialogContentComponent, decorators: [{
2084
+ type: Component,
2085
+ args: [{ selector: 'taon-detachable-dialog-content', standalone: true, imports: [CommonModule, MatIconModule, MatButtonModule, MatTooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2086
+ <section class="taon-detachable-content">
2087
+ @if (!isDetached) {
2088
+ <header class="taon-detachable-content-toolbar">
2089
+ <button
2090
+ mat-icon-button
2091
+ type="button"
2092
+ matTooltip="Detach"
2093
+ (click)="detach()">
2094
+ <mat-icon> open_in_new </mat-icon>
2095
+ </button>
2096
+ </header>
2097
+ }
2098
+
2099
+ <div class="taon-detachable-content-body">
2100
+ <ng-content />
2101
+ </div>
2102
+ </section>
2103
+ `, styles: [":host{display:block}.taon-detachable-content{display:flex;flex-direction:column;min-height:0}.taon-detachable-content-toolbar{min-height:36px;display:flex;align-items:center;justify-content:flex-end;border-bottom:1px solid var(--mat-sys-outline-variant, #ddd)}.taon-detachable-content-body{min-height:0}\n"] }]
2104
+ }], propDecorators: { component: [{
2105
+ type: Input,
2106
+ args: [{
2107
+ required: true,
2108
+ }]
2109
+ }], title: [{
2110
+ type: Input
2111
+ }] } });
2112
+
1699
2113
  var TaonDraggableButtonPanelState;
1700
2114
  (function (TaonDraggableButtonPanelState) {
1701
2115
  TaonDraggableButtonPanelState["CLICKABLE_BUTTON"] = "CLICKABLE_BUTTON";
@@ -2086,7 +2500,7 @@ class TaonDraggableButtonPanelComponent {
2086
2500
  return transitions[current].includes(next);
2087
2501
  }
2088
2502
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDraggableButtonPanelComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
2089
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDraggableButtonPanelComponent, isStandalone: true, selector: "taon-draggable-button-panel", inputs: { context: "context", basePath: "basePath", buttonIcon: "buttonIcon", title: "title", outlet: "outlet", stateParamName: "stateParamName", state: "state", initialState: "initialState", autoHideIcon: "autoHideIcon", iconTemplate: "iconTemplate", headerCenterTemplate: "headerCenterTemplate" }, outputs: { stateChange: "stateChange" }, providers: [TaonAdminMenuContext], viewQueries: [{ propertyName: "drag", first: true, predicate: CdkDrag, descendants: true }], ngImport: i0, template: "@if (currentState() === State.CLICKABLE_BUTTON || !autoHideIcon) {\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" />\n } @else {\n <button\n class=\"taon-admin-panel-toogle-open-button\"\n [class.taon-admin-panel-toogle-button-dimmer-opacity]=\"\n effectiveState() !== State.CLICKABLE_BUTTON\n \"\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"toggle()\">\n <mat-icon>{{ buttonIcon }}</mat-icon>\n </button>\n }\n}\n\n<section\n cdkDrag\n [hidden]=\"currentState() === State.CLICKABLE_BUTTON\"\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"effectiveState() === State.WINDOW\"\n [class.taon-window-full]=\"effectiveState() !== State.WINDOW\"\n [class.taon-fullscreen]=\"\n effectiveState() === State.FULL_SCREEN_DRAGGABLE ||\n effectiveState() === State.FULL_SCREEN_LOCKED\n \">\n <header\n cdkDragHandle\n (dblclick)=\"toogleFullscreen($event)\"\n class=\"taon-window-bar\">\n <!-- LEFT -->\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <!-- EXACT CENTER -->\n <div class=\"flex min-w-0 items-center justify-center\">\n @if (headerCenterTemplate) {\n <ng-container [ngTemplateOutlet]=\"headerCenterTemplate\" />\n }\n </div>\n\n <!-- #region window buttons -->\n <div class=\"flex shrink-0 items-center\">\n <!-- Desktop-only window/fullscreen controls -->\n @if (!forceFullScreen()) {\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Window mode\"\n (click)=\"windowMode()\">\n <mat-icon>filter_none</mat-icon>\n </button>\n }\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Full screen\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n }\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Lock full screen\"\n (click)=\"lockFullScreen()\">\n <mat-icon>lock_open</mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Unlock\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>lock</mat-icon>\n </button>\n }\n }\n\n <!-- ALWAYS available -->\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close admin panel\"\n (click)=\"returnToButton()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <!-- #endregion -->\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n</section>\n", styles: [":host{display:contents}.taon-admin-panel-toogle-button-dimmer-opacity{opacity:.6}.taon-draggable-panel{position:fixed;display:flex;flex-direction:column;min-width:320px;min-height:240px;overflow:hidden;background:#fff;border:1px solid #e5e7eb;box-shadow:0 20px 50px #00000026;z-index:1000}.taon-window{width:70vw;height:70vh;left:15vw;top:25vh;border-radius:6px}.taon-fullscreen{width:100vw;height:100dvh;left:0;top:0;border-radius:0}.taon-window-bar{height:48px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;flex-shrink:0;padding-left:12px;border-bottom:1px solid #e5e7eb;background:#fafafa;-webkit-user-select:none;user-select:none;cursor:move}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2503
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDraggableButtonPanelComponent, isStandalone: true, selector: "taon-draggable-button-panel", inputs: { context: "context", basePath: "basePath", buttonIcon: "buttonIcon", title: "title", outlet: "outlet", stateParamName: "stateParamName", state: "state", initialState: "initialState", autoHideIcon: "autoHideIcon", iconTemplate: "iconTemplate", headerCenterTemplate: "headerCenterTemplate" }, outputs: { stateChange: "stateChange" }, providers: [TaonAdminMenuContext], viewQueries: [{ propertyName: "drag", first: true, predicate: CdkDrag, descendants: true }], ngImport: i0, template: "@if (currentState() === State.CLICKABLE_BUTTON || !autoHideIcon) {\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" />\n } @else {\n <button\n class=\"taon-admin-panel-toogle-open-button\"\n [class.taon-admin-panel-toogle-button-dimmer-opacity]=\"\n effectiveState() !== State.CLICKABLE_BUTTON\n \"\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"toggle()\">\n <mat-icon>{{ buttonIcon }}</mat-icon>\n </button>\n }\n}\n\n<section\n cdkDrag\n [hidden]=\"currentState() === State.CLICKABLE_BUTTON\"\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"effectiveState() === State.WINDOW\"\n [class.taon-window-full]=\"effectiveState() !== State.WINDOW\"\n [class.taon-fullscreen]=\"\n effectiveState() === State.FULL_SCREEN_DRAGGABLE ||\n effectiveState() === State.FULL_SCREEN_LOCKED\n \">\n <header\n cdkDragHandle\n (dblclick)=\"toogleFullscreen($event)\"\n class=\"taon-window-bar\">\n <!-- LEFT -->\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <!-- EXACT CENTER -->\n <div class=\"flex min-w-0 items-center justify-center\">\n @if (headerCenterTemplate) {\n <ng-container [ngTemplateOutlet]=\"headerCenterTemplate\" />\n }\n </div>\n\n <!-- #region window buttons -->\n <div class=\"flex shrink-0 items-center\">\n <!-- Desktop-only window/fullscreen controls -->\n @if (!forceFullScreen()) {\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Window mode\"\n (click)=\"windowMode()\">\n <mat-icon>filter_none</mat-icon>\n </button>\n }\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Full screen\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n }\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Lock full screen\"\n (click)=\"lockFullScreen()\">\n <mat-icon>lock_open</mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Unlock\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>lock</mat-icon>\n </button>\n }\n }\n\n <!-- ALWAYS available -->\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close admin panel\"\n (click)=\"returnToButton()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <!-- #endregion -->\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n</section>\n", styles: [":host{display:contents}.taon-admin-panel-toogle-button-dimmer-opacity{opacity:.6}.taon-draggable-panel{position:fixed;display:flex;flex-direction:column;min-width:320px;min-height:240px;overflow:hidden;background:#fff;border:1px solid #e5e7eb;box-shadow:0 20px 50px #00000026;z-index:1000}.taon-window{width:70vw;height:70vh;left:15vw;top:25vh;border-radius:6px}.taon-fullscreen{width:100vw;height:100dvh;left:0;top:0;border-radius:0}.taon-window-bar{height:48px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;flex-shrink:0;padding-left:12px;border-bottom:1px solid #e5e7eb;background:#fafafa;-webkit-user-select:none;user-select:none;cursor:move}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatButtonModule }, { 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: 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2090
2504
  }
2091
2505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDraggableButtonPanelComponent, decorators: [{
2092
2506
  type: Component,
@@ -2141,7 +2555,22 @@ const TaonDraggableButtonPanelRoutes = [
2141
2555
  // },
2142
2556
  ];
2143
2557
 
2144
- const t = Translation.for('src/lib/taon-under-construction/taon-under-construction.component.ts', { "src/lib/taon-under-construction/taon-under-construction.component.ts": { "en-US": async () => (await import('./ui-browser-prod-taon-under-construction.component.ts.en-US.i18n.data-CJznhYEs.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-under-construction.component.ts.pl-PL.i18n.data-5S7xoosG.mjs')).default } });
2558
+ class TaonPurchaseStatusDialogComponent {
2559
+ constructor(data) {
2560
+ this.data = data;
2561
+ }
2562
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonPurchaseStatusDialogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
2563
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonPurchaseStatusDialogComponent, isStandalone: true, selector: "taon-purchase-status-dialog", ngImport: i0, template: "<h2 mat-dialog-title>\n {{\n data.success\n ? 'Payment successful'\n : 'Payment cancelled'\n }}\n</h2>\n\n<div mat-dialog-content>{{ data.message }}</div>\n\n<div\n mat-dialog-actions\n align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n OK\n </button>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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"] }] }); }
2564
+ }
2565
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonPurchaseStatusDialogComponent, decorators: [{
2566
+ type: Component,
2567
+ args: [{ selector: 'taon-purchase-status-dialog', standalone: true, imports: [MatDialogModule, MatButtonModule], template: "<h2 mat-dialog-title>\n {{\n data.success\n ? 'Payment successful'\n : 'Payment cancelled'\n }}\n</h2>\n\n<div mat-dialog-content>{{ data.message }}</div>\n\n<div\n mat-dialog-actions\n align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n OK\n </button>\n</div>\n" }]
2568
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2569
+ type: Inject,
2570
+ args: [MAT_DIALOG_DATA]
2571
+ }] }] });
2572
+
2573
+ const t = Translation.for('src/lib/taon-under-construction/taon-under-construction.component.ts', { "src/lib/taon-under-construction/taon-under-construction.component.ts": { "en-US": async () => (await import('./ui-browser-prod-taon-under-construction.component.ts.en-US.i18n.data-W8BJvZ8Z.mjs')).default, "pl-PL": async () => (await import('./ui-browser-prod-taon-under-construction.component.ts.pl-PL.i18n.data-tX8zxb8s.mjs')).default } });
2145
2574
  class TaonUnderConstructionComponent {
2146
2575
  constructor() {
2147
2576
  this.t = t.for(this);
@@ -2150,7 +2579,7 @@ class TaonUnderConstructionComponent {
2150
2579
  this.icon = input('engineering', ...(ngDevMode ? [{ debugName: "icon" }] : []));
2151
2580
  }
2152
2581
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonUnderConstructionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.9", type: TaonUnderConstructionComponent, isStandalone: true, selector: "taon-under-construction", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"under-construction\">\n <div class=\"icon-wrapper\">\n <mat-icon>{{ icon() }}</mat-icon>\n </div>\n\n <h2>{{ title() }}</h2>\n\n <p>{{ description() }}</p>\n\n <div class=\"status\">\n <mat-icon>construction</mat-icon>\n Work in progress\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.under-construction{min-height:320px;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;box-sizing:border-box;text-align:center}.icon-wrapper{width:88px;height:88px;display:flex;align-items:center;justify-content:center;margin-bottom:24px;border-radius:50%;background:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);color:var(--mat-sys-primary)}.icon-wrapper mat-icon{width:48px;height:48px;font-size:48px}h2{margin:0 0 10px;font-size:24px;font-weight:500}p{max-width:480px;margin:0;color:var(--mat-sys-on-surface-variant);line-height:1.6}.status{display:flex;align-items:center;gap:8px;margin-top:24px;padding:7px 14px;border-radius:999px;background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface-variant);font-size:13px;font-weight:500}.status mat-icon{width:18px;height:18px;font-size:18px}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }] }); }
2582
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.9", type: TaonUnderConstructionComponent, isStandalone: true, selector: "taon-under-construction", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"under-construction\">\n <div class=\"icon-wrapper\">\n <mat-icon>{{ icon() }}</mat-icon>\n </div>\n\n <h2>{{ title() }}</h2>\n\n <p>{{ description() }}</p>\n\n <div class=\"status\">\n <mat-icon>construction</mat-icon>\n Work in progress\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.under-construction{min-height:320px;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;box-sizing:border-box;text-align:center}.icon-wrapper{width:88px;height:88px;display:flex;align-items:center;justify-content:center;margin-bottom:24px;border-radius:50%;background:color-mix(in srgb,var(--mat-sys-primary) 12%,transparent);color:var(--mat-sys-primary)}.icon-wrapper mat-icon{width:48px;height:48px;font-size:48px}h2{margin:0 0 10px;font-size:24px;font-weight:500}p{max-width:480px;margin:0;color:var(--mat-sys-on-surface-variant);line-height:1.6}.status{display:flex;align-items:center;gap:8px;margin-top:24px;padding:7px 14px;border-radius:999px;background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface-variant);font-size:13px;font-weight:500}.status mat-icon{width:18px;height:18px;font-size:18px}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }] }); }
2154
2583
  }
2155
2584
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonUnderConstructionComponent, decorators: [{
2156
2585
  type: Component,
@@ -2170,5 +2599,5 @@ var index = {};
2170
2599
  * Generated bundle index. Do not edit.
2171
2600
  */
2172
2601
 
2173
- export { APP_ID, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, PROJECT_NPM_NAME, TaonAdminLayoutComponent, TaonAdminMenuContext, TaonAdminPageTabsComponent, TaonAdminWelcomeComponent, TaonAdminWelcomeRoutes, TaonBackofficeNotificationsComponent, TaonBackofficeNotificationsService, TaonBaseAdminLayoutPage, TaonBaselineBackofficeOutletName, TaonConfirmDialogComponent, TaonDatatableComponent, TaonDatatableRoutes, TaonDraggableButtonPanelComponent, TaonDraggableButtonPanelRoutes, TaonDraggableButtonPanelState, TaonErrorDetailsDialogComponent, TaonErrorToastComponent, TaonHorizontalWheelScrollDirective, TaonUnderConstructionComponent, adminLazyRoute, myOrgProj, startCli };
2602
+ 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, startCli };
2174
2603
  //# sourceMappingURL=ui-browser-prod.mjs.map