taon-ui 21.0.61 → 21.0.63

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 (197) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +5 -5
  2. package/bin/start.js +1 -1
  3. package/browser/fesm2022/{taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs → taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs} +3 -3
  4. package/browser/fesm2022/taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs.map +1 -0
  5. package/browser/fesm2022/{taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs → taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs} +2 -2
  6. package/browser/fesm2022/taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs.map +1 -0
  7. package/browser/fesm2022/{taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs → taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs} +3 -3
  8. package/browser/fesm2022/taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs.map +1 -0
  9. package/browser/fesm2022/taon-ui-browser.mjs +179 -120
  10. package/browser/fesm2022/taon-ui-browser.mjs.map +1 -1
  11. package/browser/package.json +1 -1
  12. package/browser/types/taon-ui-browser.d.ts +29 -20
  13. package/browser-prod/fesm2022/{taon-ui-browser-prod-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs → taon-ui-browser-prod-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs} +3 -3
  14. package/browser-prod/fesm2022/taon-ui-browser-prod-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs.map +1 -0
  15. package/browser-prod/fesm2022/{taon-ui-browser-prod-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs → taon-ui-browser-prod-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs} +2 -2
  16. package/browser-prod/fesm2022/taon-ui-browser-prod-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs.map +1 -0
  17. package/browser-prod/fesm2022/{taon-ui-browser-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs → taon-ui-browser-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs} +3 -3
  18. package/browser-prod/fesm2022/taon-ui-browser-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs.map +1 -0
  19. package/browser-prod/fesm2022/taon-ui-browser-prod.mjs +156 -98
  20. package/browser-prod/fesm2022/taon-ui-browser-prod.mjs.map +1 -1
  21. package/browser-prod/package.json +1 -1
  22. package/browser-prod/types/taon-ui-browser-prod.d.ts +30 -21
  23. package/browser-prod.split-namespaces.json +3 -1
  24. package/html/lib/ui/taon-kv-authorization/taon-kv-authorization.component.html +1 -1
  25. package/html/lib/ui/taon-stripe-buy-button/taon-stripe-buy-button.component.html +1 -2
  26. package/html/lib/ui/taon-youtube-video/taon-youtube-video.component.html +44 -46
  27. package/lib/build-info._auto-generated_.d.ts +1 -1
  28. package/lib/build-info._auto-generated_.js +1 -1
  29. package/lib/index._auto-generated_.d.ts +1 -0
  30. package/lib/index._auto-generated_.js +1 -0
  31. package/lib/index._auto-generated_.js.map +1 -1
  32. package/lib/layouts/taon-bootstrap-navbar/index.js +2 -2
  33. package/lib/package.json +1 -1
  34. package/lib/ui/anonymize-text/index.js +2 -2
  35. package/lib/ui/directives/index.js +2 -2
  36. package/lib/ui/index.js +2 -2
  37. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +3 -3
  38. package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
  39. package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
  40. package/lib/ui/taon-iframe-sync/index.js +2 -2
  41. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.d.ts +1 -1
  42. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.js +2 -2
  43. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.js.map +1 -1
  44. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.d.ts +1 -1
  45. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.js +1 -1
  46. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.js.map +1 -1
  47. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.d.ts +1 -1
  48. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.js +2 -2
  49. package/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.js.map +1 -1
  50. package/lib/ui/taon-lang-selector/index.js +2 -2
  51. package/lib/ui/taon-lang-selector/taon-lang-selector.component.d.ts +1 -1
  52. package/lib/ui/taon-progress-bar/index.js +2 -2
  53. package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -2
  54. package/lib/ui/taon-session-passcode/index.js +2 -2
  55. package/lib/ui/taon-settings/index.js +2 -2
  56. package/lib/ui/taon-table/index.js +2 -2
  57. package/lib/ui/taon-youtube-video/taon-youtube-video.component.d.ts +25 -18
  58. package/lib/ui/taon-youtube-video/taon-youtube.models.d.ts +1 -0
  59. package/lib/ui/taon-youtube-video/taon-youtube.models.js +3 -0
  60. package/lib/ui/taon-youtube-video/taon-youtube.models.js.map +1 -0
  61. package/lib/ui/taon-youtube-video/taon-youtube.utils.d.ts +1 -0
  62. package/lib/ui/taon-youtube-video/taon-youtube.utils.js +23 -0
  63. package/lib/ui/taon-youtube-video/taon-youtube.utils.js.map +1 -1
  64. package/lib-esm/app/translation-app/translation-app.active.context.d.ts +1 -0
  65. package/lib-esm/app.electron.d.ts +1 -1
  66. package/lib-esm/app.electron.js +1 -1
  67. package/lib-esm/app.hosts.d.ts +4 -4
  68. package/lib-esm/app.hosts.js +18 -5
  69. package/lib-esm/app.hosts.js.map +1 -1
  70. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  71. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  72. package/lib-esm/lib/index._auto-generated_.d.ts +1 -0
  73. package/lib-esm/lib/index._auto-generated_.js +1 -0
  74. package/lib-esm/lib/index._auto-generated_.js.map +1 -1
  75. package/lib-esm/lib/layouts/taon-bootstrap-navbar/index.d.ts +1 -1
  76. package/lib-esm/lib/layouts/taon-bootstrap-navbar/index.js +1 -1
  77. package/lib-esm/lib/ui/anonymize-text/index.d.ts +1 -1
  78. package/lib-esm/lib/ui/anonymize-text/index.js +1 -1
  79. package/lib-esm/lib/ui/directives/index.d.ts +1 -1
  80. package/lib-esm/lib/ui/directives/index.js +1 -1
  81. package/lib-esm/lib/ui/index.d.ts +1 -1
  82. package/lib-esm/lib/ui/index.js +1 -1
  83. package/lib-esm/lib/ui/taon-github-fork-me-corner/index.d.ts +1 -1
  84. package/lib-esm/lib/ui/taon-github-fork-me-corner/index.js +1 -1
  85. package/lib-esm/lib/ui/taon-github-fork-me-ribbon/index.d.ts +1 -1
  86. package/lib-esm/lib/ui/taon-github-fork-me-ribbon/index.js +1 -1
  87. package/lib-esm/lib/ui/taon-iframe-sync/index.d.ts +1 -1
  88. package/lib-esm/lib/ui/taon-iframe-sync/index.js +1 -1
  89. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.d.ts +1 -1
  90. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.js +2 -2
  91. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.js.map +1 -1
  92. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.d.ts +1 -1
  93. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.js +1 -1
  94. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.js.map +1 -1
  95. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.d.ts +1 -1
  96. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.js +2 -2
  97. package/lib-esm/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.js.map +1 -1
  98. package/lib-esm/lib/ui/taon-lang-selector/index.d.ts +1 -1
  99. package/lib-esm/lib/ui/taon-lang-selector/index.js +1 -1
  100. package/lib-esm/lib/ui/taon-progress-bar/index.d.ts +1 -1
  101. package/lib-esm/lib/ui/taon-progress-bar/index.js +1 -1
  102. package/lib-esm/lib/ui/taon-session-passcode/index.d.ts +1 -1
  103. package/lib-esm/lib/ui/taon-session-passcode/index.js +1 -1
  104. package/lib-esm/lib/ui/taon-settings/index.d.ts +1 -1
  105. package/lib-esm/lib/ui/taon-settings/index.js +1 -1
  106. package/lib-esm/lib/ui/taon-table/index.d.ts +1 -1
  107. package/lib-esm/lib/ui/taon-table/index.js +1 -1
  108. package/lib-esm/lib/ui/taon-youtube-video/taon-youtube.models.d.ts +1 -0
  109. package/lib-esm/lib/ui/taon-youtube-video/taon-youtube.models.js +2 -0
  110. package/lib-esm/lib/ui/taon-youtube-video/taon-youtube.models.js.map +1 -0
  111. package/lib-esm/lib/ui/taon-youtube-video/taon-youtube.utils.d.ts +1 -0
  112. package/lib-esm/lib/ui/taon-youtube-video/taon-youtube.utils.js +23 -0
  113. package/lib-esm/lib/ui/taon-youtube-video/taon-youtube.utils.js.map +1 -1
  114. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  115. package/lib-prod/build-info._auto-generated_.js +1 -1
  116. package/lib-prod/index._auto-generated_.d.ts +1 -0
  117. package/lib-prod/index._auto-generated_.js +1 -0
  118. package/lib-prod/index._auto-generated_.js.map +1 -1
  119. package/lib-prod/layouts/taon-bootstrap-navbar/index.d.ts +1 -1
  120. package/lib-prod/layouts/taon-bootstrap-navbar/index.js +1 -1
  121. package/lib-prod/package.json +1 -1
  122. package/lib-prod/ui/anonymize-text/index.d.ts +1 -1
  123. package/lib-prod/ui/anonymize-text/index.js +1 -1
  124. package/lib-prod/ui/directives/index.d.ts +1 -1
  125. package/lib-prod/ui/directives/index.js +1 -1
  126. package/lib-prod/ui/index.d.ts +1 -1
  127. package/lib-prod/ui/index.js +1 -1
  128. package/lib-prod/ui/taon-github-fork-me-corner/index.d.ts +1 -1
  129. package/lib-prod/ui/taon-github-fork-me-corner/index.js +1 -1
  130. package/lib-prod/ui/taon-github-fork-me-ribbon/index.d.ts +1 -1
  131. package/lib-prod/ui/taon-github-fork-me-ribbon/index.js +1 -1
  132. package/lib-prod/ui/taon-iframe-sync/index.d.ts +1 -1
  133. package/lib-prod/ui/taon-iframe-sync/index.js +1 -1
  134. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.d.ts +1 -1
  135. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.js +2 -2
  136. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.js.map +1 -1
  137. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.d.ts +1 -1
  138. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.js +1 -1
  139. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.js.map +1 -1
  140. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.d.ts +1 -1
  141. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.js +2 -2
  142. package/lib-prod/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.js.map +1 -1
  143. package/lib-prod/ui/taon-lang-selector/index.d.ts +1 -1
  144. package/lib-prod/ui/taon-lang-selector/index.js +1 -1
  145. package/lib-prod/ui/taon-progress-bar/index.d.ts +1 -1
  146. package/lib-prod/ui/taon-progress-bar/index.js +1 -1
  147. package/lib-prod/ui/taon-session-passcode/index.d.ts +1 -1
  148. package/lib-prod/ui/taon-session-passcode/index.js +1 -1
  149. package/lib-prod/ui/taon-settings/index.d.ts +1 -1
  150. package/lib-prod/ui/taon-settings/index.js +1 -1
  151. package/lib-prod/ui/taon-table/index.d.ts +1 -1
  152. package/lib-prod/ui/taon-table/index.js +1 -1
  153. package/lib-prod/ui/taon-youtube-video/taon-youtube.models.d.ts +1 -0
  154. package/lib-prod/ui/taon-youtube-video/taon-youtube.models.js +2 -0
  155. package/lib-prod/ui/taon-youtube-video/taon-youtube.models.js.map +1 -0
  156. package/lib-prod/ui/taon-youtube-video/taon-youtube.utils.d.ts +1 -0
  157. package/lib-prod/ui/taon-youtube-video/taon-youtube.utils.js +22 -0
  158. package/lib-prod/ui/taon-youtube-video/taon-youtube.utils.js.map +1 -1
  159. package/lib-prod.split-namespaces.json +3 -1
  160. package/package.json +1 -1
  161. package/scss/lib/ui/taon-youtube-video/taon-youtube-video.component.scss +50 -48
  162. package/websql/fesm2022/{taon-ui-websql-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs → taon-ui-websql-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs} +3 -3
  163. package/websql/fesm2022/taon-ui-websql-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs.map +1 -0
  164. package/websql/fesm2022/{taon-ui-websql-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs → taon-ui-websql-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs} +2 -2
  165. package/websql/fesm2022/taon-ui-websql-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs.map +1 -0
  166. package/websql/fesm2022/{taon-ui-websql-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs → taon-ui-websql-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs} +3 -3
  167. package/websql/fesm2022/taon-ui-websql-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs.map +1 -0
  168. package/websql/fesm2022/taon-ui-websql.mjs +179 -120
  169. package/websql/fesm2022/taon-ui-websql.mjs.map +1 -1
  170. package/websql/package.json +1 -1
  171. package/websql/types/taon-ui-websql.d.ts +29 -20
  172. package/websql-prod/fesm2022/{taon-ui-websql-prod-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs → taon-ui-websql-prod-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs} +3 -3
  173. package/websql-prod/fesm2022/taon-ui-websql-prod-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs.map +1 -0
  174. package/websql-prod/fesm2022/{taon-ui-websql-prod-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs → taon-ui-websql-prod-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs} +2 -2
  175. package/websql-prod/fesm2022/taon-ui-websql-prod-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs.map +1 -0
  176. package/websql-prod/fesm2022/{taon-ui-websql-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs → taon-ui-websql-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs} +3 -3
  177. package/websql-prod/fesm2022/taon-ui-websql-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs.map +1 -0
  178. package/websql-prod/fesm2022/taon-ui-websql-prod.mjs +156 -98
  179. package/websql-prod/fesm2022/taon-ui-websql-prod.mjs.map +1 -1
  180. package/websql-prod/package.json +1 -1
  181. package/websql-prod/types/taon-ui-websql-prod.d.ts +30 -21
  182. package/websql-prod.split-namespaces.json +3 -1
  183. package/browser/fesm2022/taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs.map +0 -1
  184. package/browser/fesm2022/taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs.map +0 -1
  185. package/browser/fesm2022/taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs.map +0 -1
  186. package/browser-prod/fesm2022/taon-ui-browser-prod-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs.map +0 -1
  187. package/browser-prod/fesm2022/taon-ui-browser-prod-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs.map +0 -1
  188. package/browser-prod/fesm2022/taon-ui-browser-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs.map +0 -1
  189. package/lib-esm/app.cloudflare.d.ts +0 -0
  190. package/lib-esm/app.cloudflare.js +0 -4
  191. package/lib-esm/app.cloudflare.js.map +0 -1
  192. package/websql/fesm2022/taon-ui-websql-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs.map +0 -1
  193. package/websql/fesm2022/taon-ui-websql-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs.map +0 -1
  194. package/websql/fesm2022/taon-ui-websql-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs.map +0 -1
  195. package/websql-prod/fesm2022/taon-ui-websql-prod-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs.map +0 -1
  196. package/websql-prod/fesm2022/taon-ui-websql-prod-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs.map +0 -1
  197. package/websql-prod/fesm2022/taon-ui-websql-prod-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- {
2
- "commitHash": "1037839d18a36c02b54e9ed2b5c7a6f93594a088",
3
- "commitName": "chore: update",
4
- "commitDate": "30-07-2026 09:35:19"
5
- }
1
+ {
2
+ "commitHash": "5f57c69aa8a3e265e31fa1746a703aa93c4da4c6",
3
+ "commitName": "chore: update",
4
+ "commitDate": "22-08-2026 00:28:48"
5
+ }
package/bin/start.js CHANGED
@@ -1,4 +1,4 @@
1
- global.frameworkName = 'taon-ui';
1
+ global.frameworkName = 'taon-ui';
2
2
  Error.stackTraceLimit = 100;
3
3
  global.i0 = {
4
4
  defineInjectable: function () { }
@@ -14,13 +14,13 @@ var taonKvAuthorization_component_html_deDE_i18n_data = {
14
14
  "translation": "Du hast es gekauft."
15
15
  },
16
16
  {
17
- "gettextString": "products",
17
+ "gettextString": "product(s)",
18
18
  "lineNumber": 13,
19
- "translation": "Produkte"
19
+ "translation": "Produkt (s)"
20
20
  }
21
21
  ]
22
22
  };
23
23
  // THIS FILE IS GENERATED - DO NOT MODIFY
24
24
 
25
25
  export { taonKvAuthorization_component_html_deDE_i18n_data as default };
26
- //# sourceMappingURL=taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs.map
26
+ //# sourceMappingURL=taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs","sources":["../../../tmp-libs-for-dist/taon-ui/projects/taon-ui/src/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.de-DE.i18n.data.ts"],"sourcesContent":["// THIS FILE IS GENERATED - DO NOT MODIFY\n\nexport interface DeDeTraslationOverrideSrcLibUiTaonKvAuthorizationTaonKvAuthorizationComponentHtml {\n \"de-DE\": {\n \"\": {\n \"You did not purchase any products\"?: string;\n \"You purchased\"?: string;\n \"product(s)\"?: string;\n };\n\n };\n}\n// THIS FILE IS GENERATED - DO NOT MODIFY\nexport default {\n \"fileRelativePath\": \"src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.html\",\n \"tags\": [\n {\n \"gettextString\": \"You did not purchase any products\",\n \"lineNumber\": 5,\n \"translation\": \"Sie haben keine Produkte gekauft.\"\n },\n {\n \"gettextString\": \"You purchased\",\n \"lineNumber\": 12,\n \"translation\": \"Du hast es gekauft.\"\n },\n {\n \"gettextString\": \"product(s)\",\n \"lineNumber\": 13,\n \"translation\": \"Produkt (s)\"\n }\n ]\n};\n// THIS FILE IS GENERATED - DO NOT MODIFY\n"],"names":[],"mappings":"AAAA;AAYA;AACA,wDAAe;AACb,IAAA,kBAAkB,EAAE,uEAAuE;AAC3F,IAAA,MAAM,EAAE;AACN,QAAA;AACE,YAAA,eAAe,EAAE,mCAAmC;AACpD,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,aAAa,EAAE;AAChB,SAAA;AACD,QAAA;AACE,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE;AAChB,SAAA;AACD,QAAA;AACE,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE;AAChB;AACF;CACF;AACD;;;;"}
@@ -12,7 +12,7 @@ var taonKvAuthorization_component_html_enUS_i18n_data = {
12
12
  "lineNumber": 12
13
13
  },
14
14
  {
15
- "gettextString": "products",
15
+ "gettextString": "product(s)",
16
16
  "lineNumber": 13
17
17
  }
18
18
  ]
@@ -20,4 +20,4 @@ var taonKvAuthorization_component_html_enUS_i18n_data = {
20
20
  // THIS FILE IS GENERATED - DO NOT MODIFY
21
21
 
22
22
  export { taonKvAuthorization_component_html_enUS_i18n_data as default };
23
- //# sourceMappingURL=taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs.map
23
+ //# sourceMappingURL=taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs","sources":["../../../tmp-libs-for-dist/taon-ui/projects/taon-ui/src/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.en-US.i18n.data.ts"],"sourcesContent":["// THIS FILE IS GENERATED - DO NOT MODIFY\n\nexport interface EnUsTraslationOverrideSrcLibUiTaonKvAuthorizationTaonKvAuthorizationComponentHtml {\n \"en-US\": {\n \"\": {\n \"You did not purchase any products\"?: string;\n \"You purchased\"?: string;\n \"product(s)\"?: string;\n };\n\n };\n}\n// THIS FILE IS GENERATED - DO NOT MODIFY\nexport default {\n \"fileRelativePath\": \"src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.html\",\n \"tags\": [\n {\n \"gettextString\": \"You did not purchase any products\",\n \"lineNumber\": 5\n },\n {\n \"gettextString\": \"You purchased\",\n \"lineNumber\": 12\n },\n {\n \"gettextString\": \"product(s)\",\n \"lineNumber\": 13\n }\n ]\n};\n// THIS FILE IS GENERATED - DO NOT MODIFY\n"],"names":[],"mappings":"AAAA;AAYA;AACA,wDAAe;AACb,IAAA,kBAAkB,EAAE,uEAAuE;AAC3F,IAAA,MAAM,EAAE;AACN,QAAA;AACE,YAAA,eAAe,EAAE,mCAAmC;AACpD,YAAA,YAAY,EAAE;AACf,SAAA;AACD,QAAA;AACE,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,YAAY,EAAE;AACf,SAAA;AACD,QAAA;AACE,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,YAAY,EAAE;AACf;AACF;CACF;AACD;;;;"}
@@ -14,13 +14,13 @@ var taonKvAuthorization_component_html_plPL_i18n_data = {
14
14
  "translation": "Zakupiłeś"
15
15
  },
16
16
  {
17
- "gettextString": "products",
17
+ "gettextString": "product(s)",
18
18
  "lineNumber": 13,
19
- "translation": "produktów"
19
+ "translation": "produkt(ów)"
20
20
  }
21
21
  ]
22
22
  };
23
23
  // THIS FILE IS GENERATED - DO NOT MODIFY
24
24
 
25
25
  export { taonKvAuthorization_component_html_plPL_i18n_data as default };
26
- //# sourceMappingURL=taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs.map
26
+ //# sourceMappingURL=taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs","sources":["../../../tmp-libs-for-dist/taon-ui/projects/taon-ui/src/lib/ui/taon-kv-authorization/i18n/taon-kv-authorization.component.html.pl-PL.i18n.data.ts"],"sourcesContent":["// THIS FILE IS GENERATED - DO NOT MODIFY\n\nexport interface PlPlTraslationOverrideSrcLibUiTaonKvAuthorizationTaonKvAuthorizationComponentHtml {\n \"pl-PL\": {\n \"\": {\n \"You did not purchase any products\"?: string;\n \"You purchased\"?: string;\n \"product(s)\"?: string;\n };\n\n };\n}\n// THIS FILE IS GENERATED - DO NOT MODIFY\nexport default {\n \"fileRelativePath\": \"src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.html\",\n \"tags\": [\n {\n \"gettextString\": \"You did not purchase any products\",\n \"lineNumber\": 5,\n \"translation\": \"Nie kupiłeś jeszcze żadnego produktu\"\n },\n {\n \"gettextString\": \"You purchased\",\n \"lineNumber\": 12,\n \"translation\": \"Zakupiłeś\"\n },\n {\n \"gettextString\": \"product(s)\",\n \"lineNumber\": 13,\n \"translation\": \"produkt(ów)\"\n }\n ]\n};\n// THIS FILE IS GENERATED - DO NOT MODIFY\n"],"names":[],"mappings":"AAAA;AAYA;AACA,wDAAe;AACb,IAAA,kBAAkB,EAAE,uEAAuE;AAC3F,IAAA,MAAM,EAAE;AACN,QAAA;AACE,YAAA,eAAe,EAAE,mCAAmC;AACpD,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,aAAa,EAAE;AAChB,SAAA;AACD,QAAA;AACE,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE;AAChB,SAAA;AACD,QAAA;AACE,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE;AAChB;AACF;CACF;AACD;;;;"}
@@ -59,7 +59,7 @@ import { ModalModule } from 'ngx-bootstrap/modal';
59
59
  import * as i1$1 from '@angular/platform-browser';
60
60
  import { DomSanitizer } from '@angular/platform-browser';
61
61
  import { Log, Level } from 'ng2-logger/browser';
62
- import { _, Helpers, json5 } from 'tnp-core/browser';
62
+ import { _, axios, Helpers, json5 } from 'tnp-core/browser';
63
63
  import * as i2$1 from '@angular/forms';
64
64
  import { FormGroup, FormControl, ReactiveFormsModule, FormsModule, Validators } from '@angular/forms';
65
65
  import * as i3 from 'ngx-scrollbar';
@@ -71,7 +71,6 @@ import { TaonAdminPanelMode, TaonAdminService, Symbols } from 'taon/browser';
71
71
  import { TaonStor } from 'taon-storage/browser';
72
72
  import { Resource, getDefaultModel } from 'ng2-rest/browser';
73
73
  import * as i1$2 from '@ngneat/hot-toast';
74
- import axios from 'axios';
75
74
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
76
75
  import { PasswordModule } from 'primeng/password';
77
76
  import * as i2$4 from '@angular/router';
@@ -110,7 +109,7 @@ const CURRENT_PACKAGE_TAON_VERSION = 'v21';
110
109
  /**
111
110
  * Autogenerated by current cli tool. Use *tnp release* to bump version.
112
111
  */
113
- const CURRENT_PACKAGE_VERSION = '21.0.61';
112
+ const CURRENT_PACKAGE_VERSION = '21.0.63';
114
113
  // THIS FILE IS GENERATED - DO NOT MODIFY
115
114
 
116
115
  function myOrgProj() { }
@@ -1637,7 +1636,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1637
1636
 
1638
1637
  //#region import
1639
1638
  //#endregion
1640
- const t$4 = Translation.for('src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.ts', { "src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.html": { "en-US": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-C8oLV101.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-DIy8LL8b.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-B4ZzYnfR.mjs')).default }, "src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.ts": { "en-US": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.ts.en-US.i18n.data-DN8soZSJ.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.ts.pl-PL.i18n.data-BXH1x3RS.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.ts.de-DE.i18n.data-UUFMWd9s.mjs')).default } }, {
1639
+ const t$4 = Translation.for('src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.ts', { "src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.html": { "en-US": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.html.en-US.i18n.data-L4Myx3Qy.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.html.pl-PL.i18n.data-D2z4X4t3.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.html.de-DE.i18n.data-Cd9FbUj8.mjs')).default }, "src/lib/ui/taon-kv-authorization/taon-kv-authorization.component.ts": { "en-US": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.ts.en-US.i18n.data-DN8soZSJ.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.ts.pl-PL.i18n.data-BXH1x3RS.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-kv-authorization.component.ts.de-DE.i18n.data-UUFMWd9s.mjs')).default } }, {
1641
1640
  // debug: true,
1642
1641
  });
1643
1642
  class TaonKvAuthorizationComponent {
@@ -1700,11 +1699,11 @@ class TaonKvAuthorizationComponent {
1700
1699
  return this.authorizedProductsData().filter(p => p.authorized).length;
1701
1700
  }
1702
1701
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonKvAuthorizationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1703
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonKvAuthorizationComponent, isStandalone: true, selector: "taon-kv-authorization", inputs: { email: "email", url: "url", products: "products" }, outputs: { authorizedProducts: "authorizedProducts" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"taon-kv-authorization\">\n <div *ngIf=\"loading()\">{{ infoMsg() }}</div>\n\n <div *ngIf=\"!loading()\">\n <div\n *ngIf=\"authorizedCount() === 0\"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n You did not purchase any products\n </div>\n\n <div *ngIf=\"authorizedCount() > 0\">\n <span translate [translate-t]=\"t\">You purchased </span> {{ authorizedCount() }}\n <span translate [translate-t]=\"t\">products</span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate]", inputs: ["translate-t", "translate-params", "translate-context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1702
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonKvAuthorizationComponent, isStandalone: true, selector: "taon-kv-authorization", inputs: { email: "email", url: "url", products: "products" }, outputs: { authorizedProducts: "authorizedProducts" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"taon-kv-authorization\">\n <div *ngIf=\"loading()\">{{ infoMsg() }}</div>\n\n <div *ngIf=\"!loading()\">\n <div\n *ngIf=\"authorizedCount() === 0\"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n You did not purchase any products\n </div>\n\n <div *ngIf=\"authorizedCount() > 0\">\n <span translate [translate-t]=\"t\">You purchased </span> {{ authorizedCount() }}\n <span translate [translate-t]=\"t\">product(s)</span>\n </div>\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate]", inputs: ["translate-t", "translate-params", "translate-context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1704
1703
  }
1705
1704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonKvAuthorizationComponent, decorators: [{
1706
1705
  type: Component,
1707
- args: [{ selector: 'taon-kv-authorization', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, TranslateDirective], template: "<div class=\"taon-kv-authorization\">\n <div *ngIf=\"loading()\">{{ infoMsg() }}</div>\n\n <div *ngIf=\"!loading()\">\n <div\n *ngIf=\"authorizedCount() === 0\"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n You did not purchase any products\n </div>\n\n <div *ngIf=\"authorizedCount() > 0\">\n <span translate [translate-t]=\"t\">You purchased </span> {{ authorizedCount() }}\n <span translate [translate-t]=\"t\">products</span>\n </div>\n </div>\n</div>\n" }]
1706
+ args: [{ selector: 'taon-kv-authorization', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, TranslateDirective], template: "<div class=\"taon-kv-authorization\">\n <div *ngIf=\"loading()\">{{ infoMsg() }}</div>\n\n <div *ngIf=\"!loading()\">\n <div\n *ngIf=\"authorizedCount() === 0\"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n You did not purchase any products\n </div>\n\n <div *ngIf=\"authorizedCount() > 0\">\n <span translate [translate-t]=\"t\">You purchased </span> {{ authorizedCount() }}\n <span translate [translate-t]=\"t\">product(s)</span>\n </div>\n </div>\n</div>" }]
1708
1707
  }], propDecorators: { email: [{
1709
1708
  type: Input,
1710
1709
  args: [{ required: true }]
@@ -1802,11 +1801,11 @@ class TaonRumbleComponent {
1802
1801
  return this.state === 'video-preview-private';
1803
1802
  }
1804
1803
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonRumbleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1805
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonRumbleComponent, isStandalone: true, selector: "taon-rumble", inputs: { title: "title", clipId: "clipId", picturePreviewUrl: "picturePreviewUrl", state: "state" }, outputs: { paddlockClicked: "paddlockClicked", previewClicked: "previewClicked" }, ngImport: i0, template: "<div class=\"taon-rumble\">\n <!-- PREVIEW MODE -->\n <div\n *ngIf=\"isPreview()\"\n class=\"preview\"\n (click)=\"onPreviewClick()\">\n <img\n class=\"preview-img\"\n [src]=\"picturePreviewUrl\"\n [alt]=\"title\" />\n\n <div class=\"title\">\n {{ title }}\n </div>\n\n <!-- PLAY BUTTON -->\n <div class=\"play-button\">\u25B6</div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"isLocked()\"\n class=\"lock\"\n (click)=\"onPadlockClick($event)\">\n \uD83D\uDD12\n </div>\n </div>\n\n <!-- VIDEO OPEN -->\n <div\n *ngIf=\"isVideoOpen()\"\n class=\"video\">\n <iframe\n class=\"rumble-frame\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n </div>\n\n <!-- PRIVATE VIDEO -->\n <div\n *ngIf=\"isPrivate()\"\n class=\"private\">\n <div class=\"private-box\">\uD83D\uDD12 Private video</div>\n </div>\n</div>\n", styles: [".taon-rumble{width:100%;max-width:640px;margin:auto;position:relative;font-family:inherit}.preview{position:relative;cursor:pointer;overflow:hidden;border-radius:10px}.preview-img{width:100%;display:block}.title{position:absolute;left:0;bottom:0;right:0;padding:10px 14px;background:linear-gradient(transparent,#000c);color:#fff;font-size:14px}.play-button{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:40px;color:#fff;background:#00000080;width:70px;height:70px;display:flex;align-items:center;justify-content:center;border-radius:50%}.lock{position:absolute;top:10px;right:10px;font-size:20px;background:#0009;color:#fff;padding:6px 8px;border-radius:6px}.video{position:relative;padding-top:56.25%}.rumble-frame{position:absolute;top:0;left:0;width:100%;height:100%}.private{display:flex;align-items:center;justify-content:center;height:200px;background:#111;color:#fff}.private-box{opacity:.7}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1804
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonRumbleComponent, isStandalone: true, selector: "taon-rumble", inputs: { title: "title", clipId: "clipId", picturePreviewUrl: "picturePreviewUrl", state: "state" }, outputs: { paddlockClicked: "paddlockClicked", previewClicked: "previewClicked" }, ngImport: i0, template: "<div class=\"taon-rumble\">\n <!-- PREVIEW MODE -->\n <div\n *ngIf=\"isPreview()\"\n class=\"preview\"\n (click)=\"onPreviewClick()\">\n <img\n class=\"preview-img\"\n [src]=\"picturePreviewUrl\"\n [alt]=\"title\" />\n\n <div class=\"title\">\n {{ title }}\n </div>\n\n <!-- PLAY BUTTON -->\n <div class=\"play-button\">\u25B6</div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"isLocked()\"\n class=\"lock\"\n (click)=\"onPadlockClick($event)\">\n \uD83D\uDD12\n </div>\n </div>\n\n <!-- VIDEO OPEN -->\n <div\n *ngIf=\"isVideoOpen()\"\n class=\"video\">\n <iframe\n class=\"rumble-frame\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n </div>\n\n <!-- PRIVATE VIDEO -->\n <div\n *ngIf=\"isPrivate()\"\n class=\"private\">\n <div class=\"private-box\">\uD83D\uDD12 Private video</div>\n </div>\n</div>", styles: [".taon-rumble{width:100%;max-width:640px;margin:auto;position:relative;font-family:inherit}.preview{position:relative;cursor:pointer;overflow:hidden;border-radius:10px}.preview-img{width:100%;display:block}.title{position:absolute;left:0;bottom:0;right:0;padding:10px 14px;background:linear-gradient(transparent,#000c);color:#fff;font-size:14px}.play-button{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:40px;color:#fff;background:#00000080;width:70px;height:70px;display:flex;align-items:center;justify-content:center;border-radius:50%}.lock{position:absolute;top:10px;right:10px;font-size:20px;background:#0009;color:#fff;padding:6px 8px;border-radius:6px}.video{position:relative;padding-top:56.25%}.rumble-frame{position:absolute;top:0;left:0;width:100%;height:100%}.private{display:flex;align-items:center;justify-content:center;height:200px;background:#111;color:#fff}.private-box{opacity:.7}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1806
1805
  }
1807
1806
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonRumbleComponent, decorators: [{
1808
1807
  type: Component,
1809
- args: [{ selector: 'taon-rumble', standalone: true, imports: [NgIf], template: "<div class=\"taon-rumble\">\n <!-- PREVIEW MODE -->\n <div\n *ngIf=\"isPreview()\"\n class=\"preview\"\n (click)=\"onPreviewClick()\">\n <img\n class=\"preview-img\"\n [src]=\"picturePreviewUrl\"\n [alt]=\"title\" />\n\n <div class=\"title\">\n {{ title }}\n </div>\n\n <!-- PLAY BUTTON -->\n <div class=\"play-button\">\u25B6</div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"isLocked()\"\n class=\"lock\"\n (click)=\"onPadlockClick($event)\">\n \uD83D\uDD12\n </div>\n </div>\n\n <!-- VIDEO OPEN -->\n <div\n *ngIf=\"isVideoOpen()\"\n class=\"video\">\n <iframe\n class=\"rumble-frame\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n </div>\n\n <!-- PRIVATE VIDEO -->\n <div\n *ngIf=\"isPrivate()\"\n class=\"private\">\n <div class=\"private-box\">\uD83D\uDD12 Private video</div>\n </div>\n</div>\n", styles: [".taon-rumble{width:100%;max-width:640px;margin:auto;position:relative;font-family:inherit}.preview{position:relative;cursor:pointer;overflow:hidden;border-radius:10px}.preview-img{width:100%;display:block}.title{position:absolute;left:0;bottom:0;right:0;padding:10px 14px;background:linear-gradient(transparent,#000c);color:#fff;font-size:14px}.play-button{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:40px;color:#fff;background:#00000080;width:70px;height:70px;display:flex;align-items:center;justify-content:center;border-radius:50%}.lock{position:absolute;top:10px;right:10px;font-size:20px;background:#0009;color:#fff;padding:6px 8px;border-radius:6px}.video{position:relative;padding-top:56.25%}.rumble-frame{position:absolute;top:0;left:0;width:100%;height:100%}.private{display:flex;align-items:center;justify-content:center;height:200px;background:#111;color:#fff}.private-box{opacity:.7}\n"] }]
1808
+ args: [{ selector: 'taon-rumble', standalone: true, imports: [NgIf], template: "<div class=\"taon-rumble\">\n <!-- PREVIEW MODE -->\n <div\n *ngIf=\"isPreview()\"\n class=\"preview\"\n (click)=\"onPreviewClick()\">\n <img\n class=\"preview-img\"\n [src]=\"picturePreviewUrl\"\n [alt]=\"title\" />\n\n <div class=\"title\">\n {{ title }}\n </div>\n\n <!-- PLAY BUTTON -->\n <div class=\"play-button\">\u25B6</div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"isLocked()\"\n class=\"lock\"\n (click)=\"onPadlockClick($event)\">\n \uD83D\uDD12\n </div>\n </div>\n\n <!-- VIDEO OPEN -->\n <div\n *ngIf=\"isVideoOpen()\"\n class=\"video\">\n <iframe\n class=\"rumble-frame\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n </div>\n\n <!-- PRIVATE VIDEO -->\n <div\n *ngIf=\"isPrivate()\"\n class=\"private\">\n <div class=\"private-box\">\uD83D\uDD12 Private video</div>\n </div>\n</div>", styles: [".taon-rumble{width:100%;max-width:640px;margin:auto;position:relative;font-family:inherit}.preview{position:relative;cursor:pointer;overflow:hidden;border-radius:10px}.preview-img{width:100%;display:block}.title{position:absolute;left:0;bottom:0;right:0;padding:10px 14px;background:linear-gradient(transparent,#000c);color:#fff;font-size:14px}.play-button{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:40px;color:#fff;background:#00000080;width:70px;height:70px;display:flex;align-items:center;justify-content:center;border-radius:50%}.lock{position:absolute;top:10px;right:10px;font-size:20px;background:#0009;color:#fff;padding:6px 8px;border-radius:6px}.video{position:relative;padding-top:56.25%}.rumble-frame{position:absolute;top:0;left:0;width:100%;height:100%}.private{display:flex;align-items:center;justify-content:center;height:200px;background:#111;color:#fff}.private-box{opacity:.7}\n"] }]
1810
1809
  }], propDecorators: { title: [{
1811
1810
  type: Input,
1812
1811
  args: [{
@@ -2089,11 +2088,11 @@ class TaonStripeBuyButtonComponent {
2089
2088
  }
2090
2089
  }
2091
2090
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonStripeBuyButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2092
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonStripeBuyButtonComponent, isStandalone: true, selector: "taon-stripe-buy-button", inputs: { priceId: "priceId", productId: "productId", promotionPreviousPrice: "promotionPreviousPrice", workerUrl: "workerUrl", email: "email", successUrl: "successUrl", cancelUrl: "cancelUrl" }, ngImport: i0, template: "<button\n type=\"button\"\n matButton=\"filled\"\n (click)=\"buy()\"\n [disabled]=\"loading\">\n <span *ngIf=\"!loading\">\n {{ label() }}\n </span>\n <span\n class=\"line-through absolute bg-red-500 p-1 border-round white-space-nowrap\"\n style=\"margin-top: -25px\"\n *ngIf=\"promotionPreviousPrice\">\n {{ promotionPreviousPrice }}\n </span>\n\n <span *ngIf=\"loading\"> Redirecting to Stripe... </span>\n</button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.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"] }] }); }
2091
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonStripeBuyButtonComponent, isStandalone: true, selector: "taon-stripe-buy-button", inputs: { priceId: "priceId", productId: "productId", promotionPreviousPrice: "promotionPreviousPrice", workerUrl: "workerUrl", email: "email", successUrl: "successUrl", cancelUrl: "cancelUrl" }, ngImport: i0, template: "<button\n type=\"button\"\n matButton=\"filled\"\n (click)=\"buy()\"\n [disabled]=\"loading\">\n <span *ngIf=\"!loading\">\n {{ label() }}\n </span>\n <span\n class=\"line-through absolute bg-red-500 p-1 rounded-xl whitespace-nowrap ml-2\"\n *ngIf=\"promotionPreviousPrice\">\n {{ promotionPreviousPrice }}\n </span>\n\n <span *ngIf=\"loading\"> Redirecting to Stripe... </span>\n</button>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.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"] }] }); }
2093
2092
  }
2094
2093
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonStripeBuyButtonComponent, decorators: [{
2095
2094
  type: Component,
2096
- args: [{ selector: 'taon-stripe-buy-button', imports: [CommonModule, MatButtonModule], template: "<button\n type=\"button\"\n matButton=\"filled\"\n (click)=\"buy()\"\n [disabled]=\"loading\">\n <span *ngIf=\"!loading\">\n {{ label() }}\n </span>\n <span\n class=\"line-through absolute bg-red-500 p-1 border-round white-space-nowrap\"\n style=\"margin-top: -25px\"\n *ngIf=\"promotionPreviousPrice\">\n {{ promotionPreviousPrice }}\n </span>\n\n <span *ngIf=\"loading\"> Redirecting to Stripe... </span>\n</button>\n" }]
2095
+ args: [{ selector: 'taon-stripe-buy-button', imports: [CommonModule, MatButtonModule], template: "<button\n type=\"button\"\n matButton=\"filled\"\n (click)=\"buy()\"\n [disabled]=\"loading\">\n <span *ngIf=\"!loading\">\n {{ label() }}\n </span>\n <span\n class=\"line-through absolute bg-red-500 p-1 rounded-xl whitespace-nowrap ml-2\"\n *ngIf=\"promotionPreviousPrice\">\n {{ promotionPreviousPrice }}\n </span>\n\n <span *ngIf=\"loading\"> Redirecting to Stripe... </span>\n</button>" }]
2097
2096
  }], propDecorators: { priceId: [{
2098
2097
  type: Input,
2099
2098
  args: [{ required: true }]
@@ -2370,34 +2369,124 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
2370
2369
  }]
2371
2370
  }] });
2372
2371
 
2373
- // declare global {
2374
- // interface Window {
2375
- // YT: any;
2376
- // onYouTubeIframeAPIReady: () => void;
2377
- // }
2378
- // }
2379
- function loadYoutubeApi() {
2380
- return new Promise(resolve => {
2381
- // @ts-ignore
2382
- if (window.YT && window.YT.Player) {
2383
- resolve();
2384
- return;
2372
+ var TaonYouTubeUtils;
2373
+ (function (TaonYouTubeUtils) {
2374
+ // declare global {
2375
+ // interface Window {
2376
+ // YT: any;
2377
+ // onYouTubeIframeAPIReady: () => void;
2378
+ // }
2379
+ // }
2380
+ function loadYoutubeApi() {
2381
+ return new Promise(resolve => {
2382
+ // @ts-ignore
2383
+ if (window.YT && window.YT.Player) {
2384
+ resolve();
2385
+ return;
2386
+ }
2387
+ const tag = document.createElement('script');
2388
+ tag.src = 'https://www.youtube.com/iframe_api';
2389
+ document.body.appendChild(tag);
2390
+ // @ts-ignore
2391
+ window.onYouTubeIframeAPIReady = () => {
2392
+ resolve();
2393
+ };
2394
+ });
2395
+ }
2396
+ TaonYouTubeUtils.loadYoutubeApi = loadYoutubeApi;
2397
+ async function getVidesIdsOfPlaylist(ytplaylistId) {
2398
+ const url = `https://www.youtube.com/playlist?list=${encodeURIComponent(ytplaylistId)}`;
2399
+ const response = await fetch(url, {
2400
+ headers: {
2401
+ 'accept-language': 'en-US,en;q=0.9',
2402
+ },
2403
+ });
2404
+ if (!response.ok) {
2405
+ throw new Error(`Failed to fetch playlist page: ${response.status} ${response.statusText}`);
2385
2406
  }
2386
- const tag = document.createElement('script');
2387
- tag.src = 'https://www.youtube.com/iframe_api';
2388
- document.body.appendChild(tag);
2389
- // @ts-ignore
2390
- window.onYouTubeIframeAPIReady = () => {
2391
- resolve();
2392
- };
2393
- });
2394
- }
2407
+ const html = await response.text();
2408
+ const matches = [...html.matchAll(/"videoId":"([a-zA-Z0-9_-]{11})"/g)];
2409
+ const ids = matches.map(match => match[1]);
2410
+ return [...new Set(ids)];
2411
+ }
2412
+ TaonYouTubeUtils.getVidesIdsOfPlaylist = getVidesIdsOfPlaylist;
2413
+ function extractPlaylistId(input) {
2414
+ if (!input.includes('http')) {
2415
+ return input.split('&')[0].trim();
2416
+ }
2417
+ const url = new URL(input);
2418
+ return (url.searchParams.get('list') || '').trim();
2419
+ }
2420
+ TaonYouTubeUtils.extractPlaylistId = extractPlaylistId;
2421
+ })(TaonYouTubeUtils || (TaonYouTubeUtils = {}));
2422
+
2423
+ //#region imports
2424
+ //#endregion
2395
2425
  class TaonYoutubeVideoComponent {
2426
+ get containerStyle() {
2427
+ return this.height ? { height: this.height } : null;
2428
+ }
2429
+ get displayTitle() {
2430
+ return this.title;
2431
+ }
2432
+ //#endregion
2433
+ constructor(sanitizer) {
2434
+ this.sanitizer = sanitizer;
2435
+ this.state = 'preview-picture';
2436
+ this.paddlockClicked = new EventEmitter();
2437
+ this.previewClicked = new EventEmitter();
2438
+ /**
2439
+ * > controls=0 Hides bottom control bar
2440
+ * > modestbranding=1 Reduces YouTube logo
2441
+ * > rel=0 Disables related videos from other channels
2442
+ * > disablekb=1 Disables keyboard controls
2443
+ * > fs=0 Disables fullscreen button
2444
+ * > playsinline=1 Prevents fullscreen auto behavior on iOS
2445
+ */
2446
+ this.embedUrl = computed(() => this.sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${this.videoIdSignal()}` +
2447
+ `?enablejsapi=1` +
2448
+ `&autoplay=1` +
2449
+ `&playsinline=1` +
2450
+ `&rel=0` +
2451
+ `&origin=${encodeURIComponent(window.location.origin)}`), ...(ngDevMode ? [{ debugName: "embedUrl" }] : []));
2452
+ this.PS = {
2453
+ UNSTARTED: -1,
2454
+ ENDED: 0,
2455
+ PLAYING: 1,
2456
+ PAUSED: 2,
2457
+ BUFFERING: 3,
2458
+ CUED: 5,
2459
+ };
2460
+ this.videoActivated = signal(false, ...(ngDevMode ? [{ debugName: "videoActivated" }] : []));
2461
+ this.isInViewport = signal(false, ...(ngDevMode ? [{ debugName: "isInViewport" }] : []));
2462
+ // previewImage = computed(
2463
+ // () =>
2464
+ // `https://img.youtube.com/vi/${this.videoIdSignal()}/maxresdefault.jpg`,
2465
+ // );
2466
+ this.previewImage = computed(() => `https://img.youtube.com/vi/${this.videoIdSignal()}/0.jpg`, ...(ngDevMode ? [{ debugName: "previewImage" }] : []));
2467
+ this.cdr = inject(ChangeDetectorRef);
2468
+ this.allowedToBeDisplayedVideoOveraly = signal(true, ...(ngDevMode ? [{ debugName: "allowedToBeDisplayedVideoOveraly" }] : []));
2469
+ this.el = inject((ElementRef));
2470
+ this.videoIdSignal = signal('', ...(ngDevMode ? [{ debugName: "videoIdSignal" }] : []));
2471
+ effect(() => { });
2472
+ }
2473
+ //#region methods / right click
2396
2474
  onRightClick(event) {
2397
2475
  // console.log(event);
2398
2476
  event.preventDefault();
2399
2477
  event.stopPropagation();
2400
2478
  }
2479
+ //#endregion
2480
+ //#region methods / on thumbnail error
2481
+ onThumbnailError(event) {
2482
+ const img = event.target;
2483
+ const fallback = `https://img.youtube.com/vi/${this.videoIdSignal()}/hqdefault.jpg`;
2484
+ if (img.src !== fallback) {
2485
+ img.src = fallback;
2486
+ }
2487
+ }
2488
+ //#endregion
2489
+ //#region methods / clicked
2401
2490
  clicked(event) {
2402
2491
  event.stopPropagation();
2403
2492
  this.allowedToBeDisplayedVideoOveraly.set(false);
@@ -2407,15 +2496,47 @@ class TaonYoutubeVideoComponent {
2407
2496
  // this.cdr.detectChanges();
2408
2497
  // }, 200);
2409
2498
  }
2499
+ //#endregion
2500
+ //#region methods / restart
2410
2501
  restart() {
2411
2502
  this.postCommand('seekTo', [0, true]); // go to 0 seconds
2412
2503
  this.postCommand('playVideo');
2413
2504
  }
2505
+ //#endregion
2506
+ //#region on init
2507
+ ngOnInit() {
2508
+ //Called after the constructor, initializing input properties, and the first call to ngOnChanges.
2509
+ //Add 'implements OnInit' to the class.
2510
+ }
2511
+ //#endregion
2512
+ //#region on destroy
2513
+ ngOnDestroy() {
2514
+ this.observer?.disconnect();
2515
+ }
2516
+ //#endregion
2517
+ //#region after view init
2414
2518
  async ngAfterViewInit() {
2519
+ // this.observer = new IntersectionObserver(
2520
+ // entries => {
2521
+ // // console.log({ entries });
2522
+ // const entry = entries[0];
2523
+ // if (entry.isIntersecting) {
2524
+ // this.isInViewport.set(true);
2525
+ // // We don't need to watch this component anymore.
2526
+ // this.observer?.disconnect();
2527
+ // }
2528
+ // },
2529
+ // {
2530
+ // root: null,
2531
+ // rootMargin: '150px',
2532
+ // threshold: 0.01,
2533
+ // },
2534
+ // );
2535
+ // this.observer.observe(this.el.nativeElement);
2415
2536
  if (this.state !== 'video-preview-private') {
2416
2537
  return;
2417
2538
  }
2418
- await loadYoutubeApi();
2539
+ await TaonYouTubeUtils.loadYoutubeApi();
2419
2540
  // @ts-ignore
2420
2541
  this.player = new window.YT.Player(this.iframeRef.nativeElement, {
2421
2542
  videoId: this.videoId,
@@ -2429,6 +2550,8 @@ class TaonYoutubeVideoComponent {
2429
2550
  },
2430
2551
  });
2431
2552
  }
2553
+ //#endregion
2554
+ //#region handle state change
2432
2555
  handleStateChange(state) {
2433
2556
  // @ts-ignore
2434
2557
  // const YT = window.YT;
@@ -2439,68 +2562,38 @@ class TaonYoutubeVideoComponent {
2439
2562
  // ) as any;
2440
2563
  // console.log('currentVideoState', this.currentVideoState);
2441
2564
  }
2442
- constructor(sanitizer) {
2443
- this.sanitizer = sanitizer;
2444
- this.PS = {
2445
- UNSTARTED: -1,
2446
- ENDED: 0,
2447
- PLAYING: 1,
2448
- PAUSED: 2,
2449
- BUFFERING: 3,
2450
- CUED: 5,
2451
- };
2452
- this.state = 'preview-picture';
2453
- this.paddlockClicked = new EventEmitter();
2454
- this.previewClicked = new EventEmitter();
2455
- this.cdr = inject(ChangeDetectorRef);
2456
- this.allowedToBeDisplayedVideoOveraly = signal(true, ...(ngDevMode ? [{ debugName: "allowedToBeDisplayedVideoOveraly" }] : []));
2457
- this.videoIdSignal = signal('', ...(ngDevMode ? [{ debugName: "videoIdSignal" }] : []));
2458
- this.previewImage = computed(() => `https://img.youtube.com/vi/${this.videoIdSignal()}/0.jpg`, ...(ngDevMode ? [{ debugName: "previewImage" }] : []));
2459
- /**
2460
- * > controls=0 Hides bottom control bar
2461
- * > modestbranding=1 Reduces YouTube logo
2462
- * > rel=0 Disables related videos from other channels
2463
- * > disablekb=1 Disables keyboard controls
2464
- * > fs=0 Disables fullscreen button
2465
- * > playsinline=1 Prevents fullscreen auto behavior on iOS
2466
- */
2467
- this.embedUrl = computed(() => this.sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${this.videoIdSignal()}?enablejsapi=1` +
2468
- // (this.state === 'video-preview-private' ? `&controls=0` : '') +
2469
- (this.state === 'video-preview-private' ? `&modestbranding=1` : '') +
2470
- (this.state === 'video-preview-private' ? `&rel=0` : '') +
2471
- // (this.state === 'video-preview-private' ? `&fs=0` : '') +
2472
- // (this.state === 'video-preview-private' ? `&rel=0` : '') +
2473
- `&disablekb=1` +
2474
- `&playsinline=1` +
2475
- `&origin=${window.location.origin}`), ...(ngDevMode ? [{ debugName: "embedUrl" }] : []));
2476
- effect(() => { });
2477
- }
2565
+ //#endregion
2566
+ //#region on ng changes
2478
2567
  ngOnChanges() {
2479
2568
  this.videoIdSignal.set(this.videoId);
2480
2569
  }
2481
- get containerStyle() {
2482
- return this.height ? { height: this.height } : null;
2483
- }
2484
- get displayTitle() {
2485
- return this.title;
2486
- }
2570
+ //#endregion
2571
+ //#region on lock click
2487
2572
  onLockClick(event) {
2488
2573
  event.stopPropagation();
2489
2574
  this.paddlockClicked.emit();
2490
2575
  }
2576
+ //#endregion
2577
+ //#region on preview click
2491
2578
  onPreviewClick() {
2579
+ if (this.state === 'preview-picture-locked') {
2580
+ return;
2581
+ }
2582
+ this.videoActivated.set(true);
2492
2583
  this.previewClicked.emit();
2493
2584
  }
2494
- // private postCommand(command: string) {
2495
- // this.iframeRef?.nativeElement.contentWindow?.postMessage(
2496
- // JSON.stringify({
2497
- // event: 'command',
2498
- // func: command,
2499
- // args: [],
2500
- // }),
2501
- // '*',
2502
- // );
2503
- // }
2585
+ //#endregion
2586
+ //#region play
2587
+ play() {
2588
+ this.postCommand('playVideo');
2589
+ }
2590
+ //#endregion
2591
+ //#region pause
2592
+ pause() {
2593
+ this.postCommand('pauseVideo');
2594
+ }
2595
+ //#endregion
2596
+ //#region private methods
2504
2597
  postCommand(command, args = []) {
2505
2598
  const iframe = this.iframeRef?.nativeElement;
2506
2599
  if (!iframe)
@@ -2511,18 +2604,12 @@ class TaonYoutubeVideoComponent {
2511
2604
  args: args,
2512
2605
  }), 'https://www.youtube.com');
2513
2606
  }
2514
- play() {
2515
- this.postCommand('playVideo');
2516
- }
2517
- pause() {
2518
- this.postCommand('pauseVideo');
2519
- }
2520
2607
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonYoutubeVideoComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
2521
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonYoutubeVideoComponent, isStandalone: true, selector: "taon-youtube-video", inputs: { videoId: "videoId", title: "title", height: "height", state: "state" }, outputs: { paddlockClicked: "paddlockClicked", previewClicked: "previewClicked" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["ytFrame"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"yt-container\"\n [ngClass]=\"state\"\n [ngStyle]=\"containerStyle\">\n <!-- PREVIEW IMAGE -->\n <img\n *ngIf=\"state === 'preview-picture' || state === 'preview-picture-locked'\"\n class=\"yt-media\"\n [src]=\"previewImage()\"\n [alt]=\"displayTitle\"\n (click)=\"onPreviewClick()\" />\n\n <!-- VIDEO -->\n <iframe\n #ytFrame\n *ngIf=\"state === 'video-preview-open' || state === 'video-preview-private'\"\n class=\"yt-media\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n\n <!-- PRIVATE OVERLAY -->\n <div\n (contextmenu)=\"onRightClick($event)\"\n (dblclick)=\"clicked($event)\"\n *ngIf=\"\n state === 'video-preview-private' && allowedToBeDisplayedVideoOveraly()\n \"\n (click)=\"clicked($event)\"\n class=\"yt-overlay-video\">\n <h1 class=\"text-center\" >Thanks for buying <br>this video</h1>\n </div>\n\n <!-- LOCK OVERLAY -->\n <div\n *ngIf=\"state === 'preview-picture-locked'\"\n class=\"yt-overlay yt-lock\"\n (click)=\"onLockClick($event)\">\n <mat-icon>lock</mat-icon>\n </div>\n</div>\n\n<!-- CONTROLS BELOW VIDEO -->\n<!-- <div\n *ngIf=\"state === 'video-preview-private'\"\n class=\"yt-controls\">\n <button\n mat-icon-button\n (click)=\"play()\">\n <mat-icon>play_arrow</mat-icon>\n </button>\n\n <button\n mat-icon-button\n (click)=\"pause()\">\n <mat-icon>pause</mat-icon>\n </button>\n\n <button\n mat-icon-button\n (click)=\"restart()\">\n <mat-icon>replay</mat-icon>\n </button>\n</div> -->\n<div class=\"w-full mb-1\"></div>\n<div\n class=\"yt-title\"\n *ngIf=\"displayTitle\">\n {{ displayTitle }}\n</div>", styles: [".yt-container{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--surface-border)}.yt-container:not([style*=height]){aspect-ratio:16/9}.yt-media{width:100%;height:100%;display:block;object-fit:cover;position:relative;z-index:1}iframe.yt-media{border:none}.yt-overlay{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center}.yt-overlay-video{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#c8c8c880}.yt-lock{background:#0000008c;cursor:pointer}.yt-lock mat-icon{height:60px;width:60px;font-size:56px;color:#fff}.yt-private{background:transparent;pointer-events:all}.yt-title{margin-top:.5rem;font-size:.9rem;font-weight:500}.yt-play-button{width:80px;height:80px;border-radius:50%;background:#ff0000d9;display:flex;align-items:center;justify-content:center;transition:transform .2s ease}.yt-play-button mat-icon{font-size:48px;color:#fff;width:48px;height:48px}.yt-play-button:hover{transform:scale(1.1)}.yt-controls{display:flex;gap:8px;margin-top:8px}.yt-controls button{background:#00000014}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2608
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonYoutubeVideoComponent, isStandalone: true, selector: "taon-youtube-video", inputs: { videoId: "videoId", title: "title", height: "height", state: "state" }, outputs: { paddlockClicked: "paddlockClicked", previewClicked: "previewClicked" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["ytFrame"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"yt-container\"\n [ngClass]=\"state\"\n [ngStyle]=\"containerStyle\">\n <!-- THUMBNAIL -->\n <div\n *ngIf=\"!videoActivated()\"\n class=\"yt-preview\"\n (click)=\"onPreviewClick()\">\n <!-- @if (isInViewport()) { -->\n <img\n class=\"yt-media\"\n [src]=\"previewImage()\"\n [alt]=\"displayTitle || 'YouTube video'\"\n decoding=\"async\"\n draggable=\"false\"\n (error)=\"onThumbnailError($event)\" />\n <!-- } -->\n\n <!-- PLAY -->\n <div\n *ngIf=\"state !== 'preview-picture-locked'\"\n class=\"yt-play-button\">\n <mat-icon>play_arrow</mat-icon>\n </div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"state === 'preview-picture-locked'\"\n class=\"yt-overlay yt-lock\"\n (click)=\"onLockClick($event)\">\n <mat-icon>lock</mat-icon>\n </div>\n </div>\n\n <!-- ACTUAL YOUTUBE PLAYER -->\n <iframe\n #ytFrame\n *ngIf=\"videoActivated()\"\n class=\"yt-media\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allow=\"autoplay; encrypted-media; picture-in-picture; web-share\"\n allowfullscreen>\n </iframe>\n\n <!-- PRIVATE OVERLAY -->\n <div\n *ngIf=\"\n videoActivated() &&\n state === 'video-preview-private' &&\n allowedToBeDisplayedVideoOveraly()\n \"\n class=\"yt-overlay-video\"\n (contextmenu)=\"onRightClick($event)\"\n (dblclick)=\"clicked($event)\"\n (click)=\"clicked($event)\">\n <h1 class=\"text-center\">\n Thanks for buying<br />\n this video\n </h1>\n </div>\n</div>\n\n<div\n class=\"yt-title\"\n *ngIf=\"displayTitle\">\n {{ displayTitle }}\n</div>", styles: [".yt-container{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--surface-border)}.yt-container:not([style*=height]){aspect-ratio:16/9}.yt-preview{position:absolute;inset:0;cursor:pointer;touch-action:pan-y}.yt-media{width:100%;height:100%;display:block;object-fit:contain;border:0}img.yt-media{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.yt-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.yt-play-button{position:absolute;left:50%;top:50%;width:72px;height:52px;transform:translate(-50%,-50%);border-radius:14px;background:#ff0000e6;display:flex;align-items:center;justify-content:center;pointer-events:none}.yt-play-button mat-icon{width:40px;height:40px;font-size:40px;color:#fff}.yt-preview:hover .yt-play-button{transform:translate(-50%,-50%) scale(1.08)}.yt-lock{background:#0000008c}.yt-lock mat-icon{width:60px;height:60px;font-size:56px;color:#fff}.yt-overlay-video{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#c8c8c880}.yt-title{margin-top:.5rem;font-size:.9rem;font-weight:500}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2522
2609
  }
2523
2610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonYoutubeVideoComponent, decorators: [{
2524
2611
  type: Component,
2525
- args: [{ selector: 'taon-youtube-video', standalone: true, imports: [NgIf, NgStyle, MatIconModule, CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"yt-container\"\n [ngClass]=\"state\"\n [ngStyle]=\"containerStyle\">\n <!-- PREVIEW IMAGE -->\n <img\n *ngIf=\"state === 'preview-picture' || state === 'preview-picture-locked'\"\n class=\"yt-media\"\n [src]=\"previewImage()\"\n [alt]=\"displayTitle\"\n (click)=\"onPreviewClick()\" />\n\n <!-- VIDEO -->\n <iframe\n #ytFrame\n *ngIf=\"state === 'video-preview-open' || state === 'video-preview-private'\"\n class=\"yt-media\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n\n <!-- PRIVATE OVERLAY -->\n <div\n (contextmenu)=\"onRightClick($event)\"\n (dblclick)=\"clicked($event)\"\n *ngIf=\"\n state === 'video-preview-private' && allowedToBeDisplayedVideoOveraly()\n \"\n (click)=\"clicked($event)\"\n class=\"yt-overlay-video\">\n <h1 class=\"text-center\" >Thanks for buying <br>this video</h1>\n </div>\n\n <!-- LOCK OVERLAY -->\n <div\n *ngIf=\"state === 'preview-picture-locked'\"\n class=\"yt-overlay yt-lock\"\n (click)=\"onLockClick($event)\">\n <mat-icon>lock</mat-icon>\n </div>\n</div>\n\n<!-- CONTROLS BELOW VIDEO -->\n<!-- <div\n *ngIf=\"state === 'video-preview-private'\"\n class=\"yt-controls\">\n <button\n mat-icon-button\n (click)=\"play()\">\n <mat-icon>play_arrow</mat-icon>\n </button>\n\n <button\n mat-icon-button\n (click)=\"pause()\">\n <mat-icon>pause</mat-icon>\n </button>\n\n <button\n mat-icon-button\n (click)=\"restart()\">\n <mat-icon>replay</mat-icon>\n </button>\n</div> -->\n<div class=\"w-full mb-1\"></div>\n<div\n class=\"yt-title\"\n *ngIf=\"displayTitle\">\n {{ displayTitle }}\n</div>", styles: [".yt-container{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--surface-border)}.yt-container:not([style*=height]){aspect-ratio:16/9}.yt-media{width:100%;height:100%;display:block;object-fit:cover;position:relative;z-index:1}iframe.yt-media{border:none}.yt-overlay{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center}.yt-overlay-video{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#c8c8c880}.yt-lock{background:#0000008c;cursor:pointer}.yt-lock mat-icon{height:60px;width:60px;font-size:56px;color:#fff}.yt-private{background:transparent;pointer-events:all}.yt-title{margin-top:.5rem;font-size:.9rem;font-weight:500}.yt-play-button{width:80px;height:80px;border-radius:50%;background:#ff0000d9;display:flex;align-items:center;justify-content:center;transition:transform .2s ease}.yt-play-button mat-icon{font-size:48px;color:#fff;width:48px;height:48px}.yt-play-button:hover{transform:scale(1.1)}.yt-controls{display:flex;gap:8px;margin-top:8px}.yt-controls button{background:#00000014}\n"] }]
2612
+ args: [{ selector: 'taon-youtube-video', standalone: true, imports: [NgIf, NgStyle, MatIconModule, CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"yt-container\"\n [ngClass]=\"state\"\n [ngStyle]=\"containerStyle\">\n <!-- THUMBNAIL -->\n <div\n *ngIf=\"!videoActivated()\"\n class=\"yt-preview\"\n (click)=\"onPreviewClick()\">\n <!-- @if (isInViewport()) { -->\n <img\n class=\"yt-media\"\n [src]=\"previewImage()\"\n [alt]=\"displayTitle || 'YouTube video'\"\n decoding=\"async\"\n draggable=\"false\"\n (error)=\"onThumbnailError($event)\" />\n <!-- } -->\n\n <!-- PLAY -->\n <div\n *ngIf=\"state !== 'preview-picture-locked'\"\n class=\"yt-play-button\">\n <mat-icon>play_arrow</mat-icon>\n </div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"state === 'preview-picture-locked'\"\n class=\"yt-overlay yt-lock\"\n (click)=\"onLockClick($event)\">\n <mat-icon>lock</mat-icon>\n </div>\n </div>\n\n <!-- ACTUAL YOUTUBE PLAYER -->\n <iframe\n #ytFrame\n *ngIf=\"videoActivated()\"\n class=\"yt-media\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allow=\"autoplay; encrypted-media; picture-in-picture; web-share\"\n allowfullscreen>\n </iframe>\n\n <!-- PRIVATE OVERLAY -->\n <div\n *ngIf=\"\n videoActivated() &&\n state === 'video-preview-private' &&\n allowedToBeDisplayedVideoOveraly()\n \"\n class=\"yt-overlay-video\"\n (contextmenu)=\"onRightClick($event)\"\n (dblclick)=\"clicked($event)\"\n (click)=\"clicked($event)\">\n <h1 class=\"text-center\">\n Thanks for buying<br />\n this video\n </h1>\n </div>\n</div>\n\n<div\n class=\"yt-title\"\n *ngIf=\"displayTitle\">\n {{ displayTitle }}\n</div>", styles: [".yt-container{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--surface-border)}.yt-container:not([style*=height]){aspect-ratio:16/9}.yt-preview{position:absolute;inset:0;cursor:pointer;touch-action:pan-y}.yt-media{width:100%;height:100%;display:block;object-fit:contain;border:0}img.yt-media{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.yt-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.yt-play-button{position:absolute;left:50%;top:50%;width:72px;height:52px;transform:translate(-50%,-50%);border-radius:14px;background:#ff0000e6;display:flex;align-items:center;justify-content:center;pointer-events:none}.yt-play-button mat-icon{width:40px;height:40px;font-size:40px;color:#fff}.yt-preview:hover .yt-play-button{transform:translate(-50%,-50%) scale(1.08)}.yt-lock{background:#0000008c}.yt-lock mat-icon{width:60px;height:60px;font-size:56px;color:#fff}.yt-overlay-video{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#c8c8c880}.yt-title{margin-top:.5rem;font-size:.9rem;font-weight:500}\n"] }]
2526
2613
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }], propDecorators: { videoId: [{
2527
2614
  type: Input,
2528
2615
  args: [{ required: true }]
@@ -2541,34 +2628,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
2541
2628
  args: ['ytFrame']
2542
2629
  }] } });
2543
2630
 
2544
- var TaonYouTubeUtils;
2545
- (function (TaonYouTubeUtils) {
2546
- async function getVidesIdsOfPlaylist(ytplaylistId) {
2547
- const url = `https://www.youtube.com/playlist?list=${encodeURIComponent(ytplaylistId)}`;
2548
- const response = await fetch(url, {
2549
- headers: {
2550
- 'accept-language': 'en-US,en;q=0.9',
2551
- },
2552
- });
2553
- if (!response.ok) {
2554
- throw new Error(`Failed to fetch playlist page: ${response.status} ${response.statusText}`);
2555
- }
2556
- const html = await response.text();
2557
- const matches = [...html.matchAll(/"videoId":"([a-zA-Z0-9_-]{11})"/g)];
2558
- const ids = matches.map(match => match[1]);
2559
- return [...new Set(ids)];
2560
- }
2561
- TaonYouTubeUtils.getVidesIdsOfPlaylist = getVidesIdsOfPlaylist;
2562
- function extractPlaylistId(input) {
2563
- if (!input.includes('http')) {
2564
- return input.split('&')[0].trim();
2565
- }
2566
- const url = new URL(input);
2567
- return (url.searchParams.get('list') || '').trim();
2568
- }
2569
- TaonYouTubeUtils.extractPlaylistId = extractPlaylistId;
2570
- })(TaonYouTubeUtils || (TaonYouTubeUtils = {}));
2571
-
2572
2631
  ;
2573
2632
  // THIS FILE IS GENERATED - DO NOT MODIFY
2574
2633