@foblex/m-render 2.5.1 → 2.5.3

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 (380) hide show
  1. package/LICENSE +1 -1
  2. package/esm2022/lib/common-components/f-checkbox/f-checkbox.component.mjs +73 -0
  3. package/esm2022/lib/{f-documentation → common-components}/f-cookie-popup/f-cookie-popup.component.mjs +6 -6
  4. package/esm2022/lib/common-components/f-theme-button/f-theme-button.component.mjs +44 -0
  5. package/esm2022/lib/common-components/index.mjs +4 -0
  6. package/esm2022/lib/common-services/analytics/f-analytics.service.mjs +6 -8
  7. package/esm2022/lib/common-services/f-head-tag.service.mjs +6 -4
  8. package/esm2022/lib/common-services/f-meta.service.mjs +80 -0
  9. package/esm2022/lib/common-services/f-popover.service.mjs +25 -0
  10. package/esm2022/lib/common-services/index.mjs +3 -1
  11. package/esm2022/lib/common-services/json-ld/f-json-ld.service.mjs +6 -4
  12. package/esm2022/lib/domain/f-state.service.mjs +6 -5
  13. package/esm2022/lib/domain/get-version-handler/get-version.handler.mjs +28 -0
  14. package/esm2022/lib/domain/get-version-handler/get-version.request.mjs +7 -0
  15. package/esm2022/lib/domain/get-version-handler/index.mjs +3 -0
  16. package/esm2022/lib/domain/handle-navigation-links/handle-navigation-links.handler.mjs +53 -0
  17. package/esm2022/lib/domain/handle-navigation-links/handle-navigation-links.request.mjs +7 -0
  18. package/esm2022/lib/domain/handle-navigation-links/index.mjs +3 -0
  19. package/esm2022/lib/domain/i-environment-service.mjs +3 -0
  20. package/esm2022/lib/domain/index.mjs +4 -8
  21. package/esm2022/lib/f-documentation/domain/i-docs-environment.mjs +2 -0
  22. package/esm2022/lib/f-documentation/domain/index.mjs +2 -0
  23. package/esm2022/lib/f-documentation/f-badge/f-badge.component.mjs +6 -8
  24. package/esm2022/lib/f-documentation/f-documentation-environment.service.mjs +69 -0
  25. package/esm2022/lib/f-documentation/f-documentation.component.mjs +28 -30
  26. package/esm2022/lib/f-documentation/f-hamburger-button/f-hamburger-button.component.mjs +6 -5
  27. package/esm2022/lib/f-documentation/f-header/f-header.component.mjs +10 -16
  28. package/esm2022/lib/f-documentation/f-header-menu/f-header-menu.component.mjs +13 -16
  29. package/esm2022/lib/f-documentation/f-navigation-panel/domain/i-navigation-group.mjs +2 -0
  30. package/esm2022/lib/f-documentation/f-navigation-panel/domain/i-navigation-item-badge.mjs +2 -0
  31. package/esm2022/lib/f-documentation/f-navigation-panel/domain/i-navigation-item.mjs +2 -0
  32. package/esm2022/lib/f-documentation/f-navigation-panel/domain/index.mjs +4 -0
  33. package/esm2022/lib/f-documentation/f-navigation-panel/f-navigation-group/f-navigation-group.component.mjs +21 -0
  34. package/esm2022/lib/f-documentation/f-navigation-panel/f-navigation-header/f-navigation-header.component.mjs +26 -0
  35. package/esm2022/lib/f-documentation/f-navigation-panel/f-navigation-item/f-navigation-item.component.mjs +11 -0
  36. package/esm2022/lib/f-documentation/f-navigation-panel/f-navigation-panel.component.mjs +101 -0
  37. package/esm2022/lib/f-documentation/f-navigation-panel/index.mjs +6 -0
  38. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.handler.mjs +104 -0
  39. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.request.mjs +7 -0
  40. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-dynamic-components/index.mjs +3 -0
  41. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/handle-parsed-containers.handler.mjs +35 -0
  42. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/handle-parsed-containers.request.mjs +7 -0
  43. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/i-parsed-container.mjs +2 -0
  44. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/index.mjs +5 -0
  45. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/clipboard/copy-to-clipboard.mjs +15 -0
  46. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/clipboard/index.mjs +2 -0
  47. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-async-code-view-handler.mjs +46 -0
  48. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/f-code-group.handler.mjs +54 -0
  49. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/i-code-group-view.mjs +2 -0
  50. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/index.mjs +3 -0
  51. package/esm2022/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group-body.handler.mjs +4 -1
  52. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-view-handler.mjs +63 -0
  53. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-example-view-handler.mjs +10 -0
  54. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/index.mjs +7 -0
  55. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/highlight/change-code-focused-syntax.pre-processor.mjs +23 -0
  56. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/highlight/highlight.service.mjs +56 -0
  57. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/highlight/index.mjs +6 -0
  58. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/highlight/mark-code-focused-blocks.post-processor.mjs +53 -0
  59. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/highlight/modify-punctuation-highlight.post-processor.mjs +22 -0
  60. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/highlight/separate-code-by-lines.post-processor.mjs +28 -0
  61. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/index.mjs +5 -0
  62. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/index.mjs +4 -0
  63. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/markdown.service.mjs +69 -0
  64. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/e-markdown-container-type.mjs +13 -0
  65. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/i-markdown-it-token.mjs +2 -0
  66. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/index.mjs +8 -0
  67. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-alerts.mjs +19 -0
  68. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-code-group.mjs +54 -0
  69. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-code-view.mjs +15 -0
  70. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-example-group.mjs +92 -0
  71. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/parse-markdown/parse-preview-group.mjs +50 -0
  72. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/utils/get-content.mjs +17 -0
  73. package/esm2022/lib/f-documentation/f-page/f-markdown/domain/markdown/utils/index.mjs +2 -0
  74. package/esm2022/lib/f-documentation/f-page/f-markdown/f-markdown-renderer.component.mjs +84 -0
  75. package/esm2022/lib/f-documentation/f-page/f-markdown/index.mjs +3 -0
  76. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.handler.mjs +37 -0
  77. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.request.mjs +7 -0
  78. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.response.mjs +9 -0
  79. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/index.mjs +4 -0
  80. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/features/index.mjs +2 -0
  81. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/i-page-link.mjs +2 -0
  82. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/domain/index.mjs +3 -0
  83. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-edit-information/f-footer-edit-information.component.mjs +11 -0
  84. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-edit-information/f-footer-edit-link/f-footer-edit-link.component.mjs +11 -0
  85. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-edit-information/f-footer-edit-link/index.mjs +2 -0
  86. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-edit-information/f-footer-last-updated/f-footer-last-updated.component.mjs +11 -0
  87. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-edit-information/f-footer-last-updated/index.mjs +2 -0
  88. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-edit-information/index.mjs +2 -0
  89. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-navigation/f-footer-navigation-button/f-footer-navigation-button.component.mjs +19 -0
  90. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-navigation/f-footer-navigation-button/index.mjs +2 -0
  91. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-navigation/f-footer-navigation.component.mjs +11 -0
  92. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-footer-navigation/index.mjs +3 -0
  93. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/f-markdown-footer.component.mjs +89 -0
  94. package/esm2022/lib/f-documentation/f-page/f-markdown-footer/index.mjs +5 -0
  95. package/esm2022/lib/f-documentation/f-page/f-page.component.mjs +18 -0
  96. package/esm2022/lib/f-documentation/f-page/f-table-of-content/f-table-of-content-items/f-table-of-content-items.component.mjs +14 -0
  97. package/esm2022/lib/f-documentation/f-page/f-table-of-content/f-table-of-content-items/index.mjs +2 -0
  98. package/esm2022/lib/f-documentation/f-page/f-table-of-content/f-table-of-content.component.mjs +69 -0
  99. package/esm2022/lib/f-documentation/f-page/f-table-of-content/index.mjs +3 -0
  100. package/esm2022/lib/f-documentation/f-page/index.mjs +5 -0
  101. package/esm2022/lib/f-documentation/f-preview/f-preview.component.mjs +16 -7
  102. package/esm2022/lib/f-documentation/f-scrollable-container/domain/calculate-hash-from-scroll-position/calculate-hash-from-scroll-position.handler.mjs +53 -0
  103. package/esm2022/lib/f-documentation/f-scrollable-container/domain/calculate-hash-from-scroll-position/calculate-hash-from-scroll-position.request.mjs +7 -0
  104. package/esm2022/lib/f-documentation/f-scrollable-container/domain/calculate-hash-from-scroll-position/index.mjs +3 -0
  105. package/esm2022/lib/f-documentation/f-scrollable-container/domain/get-absolute-top-to-container/get-absolute-top-to-container.handler.mjs +14 -0
  106. package/esm2022/lib/f-documentation/f-scrollable-container/domain/get-absolute-top-to-container/get-absolute-top-to-container.request.mjs +9 -0
  107. package/esm2022/lib/f-documentation/f-scrollable-container/domain/get-absolute-top-to-container/index.mjs +3 -0
  108. package/esm2022/lib/f-documentation/f-scrollable-container/domain/get-table-of-content-data/get-table-of-content-data.handler.mjs +52 -0
  109. package/esm2022/lib/f-documentation/f-scrollable-container/domain/get-table-of-content-data/get-table-of-content-data.request.mjs +9 -0
  110. package/esm2022/lib/f-documentation/f-scrollable-container/domain/get-table-of-content-data/index.mjs +3 -0
  111. package/esm2022/lib/f-documentation/f-scrollable-container/domain/i-table-of-content-item.mjs +2 -0
  112. package/esm2022/lib/f-documentation/f-scrollable-container/domain/index.mjs +7 -0
  113. package/esm2022/lib/f-documentation/f-scrollable-container/domain/scroll-to-element-in-container.mjs +35 -0
  114. package/esm2022/lib/f-documentation/f-scrollable-container/domain/table-of-content-data.mjs +9 -0
  115. package/esm2022/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/f-scrollable-container.component.mjs +7 -5
  116. package/esm2022/lib/f-documentation/f-scrollable-container/f-scrollable.service.mjs +60 -0
  117. package/esm2022/lib/f-documentation/f-scrollable-container/index.mjs +3 -0
  118. package/esm2022/lib/f-documentation/f-social-links/f-social-links.component.mjs +8 -13
  119. package/esm2022/lib/f-documentation/f-version/f-version.component.mjs +8 -11
  120. package/esm2022/lib/f-documentation/index.mjs +9 -5
  121. package/esm2022/lib/f-documentation/providers.mjs +3 -0
  122. package/esm2022/lib/f-documentation/router.mjs +13 -0
  123. package/esm2022/lib/f-home-page/domain/i-home-page-environment.mjs +2 -0
  124. package/esm2022/lib/f-home-page/domain/i-home-page-feature.mjs +2 -0
  125. package/esm2022/lib/f-home-page/domain/i-home-page-footer.mjs +2 -0
  126. package/esm2022/lib/f-home-page/domain/i-home-page-hero.mjs +2 -0
  127. package/esm2022/lib/f-home-page/domain/i-home-page-link.mjs +2 -0
  128. package/esm2022/lib/f-home-page/domain/index.mjs +6 -0
  129. package/esm2022/lib/f-home-page/f-home-page-environment.service.mjs +47 -0
  130. package/esm2022/lib/f-home-page/f-home-page-features/f-home-page-features.component.mjs +13 -0
  131. package/esm2022/lib/f-home-page/f-home-page-footer/f-home-page-footer.component.mjs +13 -0
  132. package/esm2022/lib/f-home-page/f-home-page-header/f-home-page-header.component.mjs +17 -0
  133. package/esm2022/lib/f-home-page/f-home-page-hero/f-home-page-buttons-row/f-home-page-buttons-row.component.mjs +16 -0
  134. package/esm2022/lib/f-home-page/f-home-page-hero/f-home-page-hero.component.mjs +16 -0
  135. package/esm2022/lib/f-home-page/f-home-page.component.mjs +63 -0
  136. package/esm2022/lib/f-home-page/index.mjs +9 -0
  137. package/esm2022/lib/f-home-page/providers.mjs +3 -0
  138. package/esm2022/lib/f-home-page/router.mjs +7 -0
  139. package/esm2022/lib/index.mjs +3 -4
  140. package/fesm2022/foblex-m-render.mjs +1203 -902
  141. package/fesm2022/foblex-m-render.mjs.map +1 -1
  142. package/lib/common-components/index.d.ts +3 -0
  143. package/lib/common-services/analytics/set-cookie-consent.d.ts +1 -1
  144. package/lib/{domain → common-services}/f-meta.service.d.ts +3 -3
  145. package/lib/{domain → common-services}/f-popover.service.d.ts +2 -1
  146. package/lib/common-services/index.d.ts +2 -0
  147. package/lib/domain/{features/get-version-handler → get-version-handler}/get-version.request.d.ts +1 -1
  148. package/lib/domain/i-environment-service.d.ts +6 -0
  149. package/lib/domain/index.d.ts +3 -7
  150. package/lib/{domain → f-documentation/domain}/i-docs-environment.d.ts +6 -6
  151. package/lib/f-documentation/domain/index.d.ts +1 -0
  152. package/lib/{domain/f-environment.service.d.ts → f-documentation/f-documentation-environment.service.d.ts} +5 -5
  153. package/lib/f-documentation/f-documentation.component.d.ts +6 -9
  154. package/lib/f-documentation/f-hamburger-button/f-hamburger-button.component.d.ts +1 -1
  155. package/lib/f-documentation/f-header/f-header.component.d.ts +0 -3
  156. package/lib/f-documentation/f-header-menu/f-header-menu.component.d.ts +3 -5
  157. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/f-navigation-header/f-navigation-header.component.d.ts +2 -2
  158. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/f-navigation-panel.component.d.ts +2 -3
  159. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.handler.d.ts +2 -2
  160. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/markdown.service.d.ts +2 -2
  161. package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.handler.d.ts +2 -2
  162. package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-markdown-footer.component.d.ts +3 -2
  163. package/lib/{f-page → f-documentation/f-page}/f-table-of-content/f-table-of-content.component.d.ts +2 -2
  164. package/lib/f-documentation/f-preview/f-preview.component.d.ts +3 -3
  165. package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/f-scrollable.service.d.ts +2 -2
  166. package/lib/f-documentation/f-social-links/f-social-links.component.d.ts +1 -4
  167. package/lib/f-documentation/f-version/f-version.component.d.ts +0 -3
  168. package/lib/f-documentation/index.d.ts +8 -4
  169. package/lib/f-documentation/providers.d.ts +3 -0
  170. package/lib/f-documentation/router.d.ts +2 -0
  171. package/lib/f-home-page/domain/i-home-page-environment.d.ts +18 -0
  172. package/lib/f-home-page/domain/i-home-page-feature.d.ts +4 -0
  173. package/lib/f-home-page/domain/i-home-page-footer.d.ts +3 -0
  174. package/lib/f-home-page/domain/i-home-page-hero.d.ts +6 -0
  175. package/lib/f-home-page/domain/i-home-page-link.d.ts +6 -0
  176. package/lib/f-home-page/domain/index.d.ts +5 -0
  177. package/lib/f-home-page/f-home-page-environment.service.d.ts +20 -0
  178. package/lib/f-home-page/f-home-page-features/f-home-page-features.component.d.ts +6 -0
  179. package/lib/f-home-page/f-home-page-footer/f-home-page-footer.component.d.ts +6 -0
  180. package/lib/f-home-page/f-home-page-header/f-home-page-header.component.d.ts +7 -0
  181. package/lib/f-home-page/f-home-page-hero/f-home-page-buttons-row/f-home-page-buttons-row.component.d.ts +6 -0
  182. package/lib/f-home-page/f-home-page-hero/f-home-page-hero.component.d.ts +6 -0
  183. package/lib/f-home-page/f-home-page.component.d.ts +17 -0
  184. package/lib/f-home-page/index.d.ts +8 -0
  185. package/lib/f-home-page/providers.d.ts +3 -0
  186. package/lib/f-home-page/router.d.ts +2 -0
  187. package/lib/index.d.ts +2 -3
  188. package/package.json +3 -3
  189. package/esm2022/lib/domain/f-environment.service.mjs +0 -66
  190. package/esm2022/lib/domain/f-meta.service.mjs +0 -77
  191. package/esm2022/lib/domain/f-popover.service.mjs +0 -25
  192. package/esm2022/lib/domain/features/get-version-handler/get-version.handler.mjs +0 -27
  193. package/esm2022/lib/domain/features/get-version-handler/get-version.request.mjs +0 -6
  194. package/esm2022/lib/domain/features/get-version-handler/index.mjs +0 -3
  195. package/esm2022/lib/domain/features/handle-navigation-links/handle-navigation-links.handler.mjs +0 -51
  196. package/esm2022/lib/domain/features/handle-navigation-links/handle-navigation-links.request.mjs +0 -6
  197. package/esm2022/lib/domain/features/handle-navigation-links/index.mjs +0 -3
  198. package/esm2022/lib/domain/features/index.mjs +0 -3
  199. package/esm2022/lib/domain/i-docs-environment.mjs +0 -2
  200. package/esm2022/lib/domain/providers.mjs +0 -3
  201. package/esm2022/lib/domain/router.mjs +0 -13
  202. package/esm2022/lib/f-documentation/f-checkbox/f-checkbox.component.mjs +0 -70
  203. package/esm2022/lib/f-documentation/f-theme-button/f-theme-button.component.mjs +0 -41
  204. package/esm2022/lib/f-navigation-panel/domain/i-navigation-group.mjs +0 -2
  205. package/esm2022/lib/f-navigation-panel/domain/i-navigation-item-badge.mjs +0 -2
  206. package/esm2022/lib/f-navigation-panel/domain/i-navigation-item.mjs +0 -2
  207. package/esm2022/lib/f-navigation-panel/domain/index.mjs +0 -4
  208. package/esm2022/lib/f-navigation-panel/f-navigation-group/f-navigation-group.component.mjs +0 -22
  209. package/esm2022/lib/f-navigation-panel/f-navigation-header/f-navigation-header.component.mjs +0 -24
  210. package/esm2022/lib/f-navigation-panel/f-navigation-item/f-navigation-item.component.mjs +0 -11
  211. package/esm2022/lib/f-navigation-panel/f-navigation-panel.component.mjs +0 -94
  212. package/esm2022/lib/f-navigation-panel/index.mjs +0 -6
  213. package/esm2022/lib/f-page/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.handler.mjs +0 -102
  214. package/esm2022/lib/f-page/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.request.mjs +0 -6
  215. package/esm2022/lib/f-page/f-markdown/domain/handle-dynamic-components/index.mjs +0 -3
  216. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/handle-parsed-containers.handler.mjs +0 -34
  217. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/handle-parsed-containers.request.mjs +0 -6
  218. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/i-parsed-container.mjs +0 -2
  219. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/index.mjs +0 -5
  220. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/clipboard/copy-to-clipboard.mjs +0 -15
  221. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/clipboard/index.mjs +0 -2
  222. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-async-code-view-handler.mjs +0 -46
  223. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/f-code-group.handler.mjs +0 -51
  224. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/i-code-group-view.mjs +0 -2
  225. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/index.mjs +0 -3
  226. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-view-handler.mjs +0 -60
  227. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/f-example-view-handler.mjs +0 -9
  228. package/esm2022/lib/f-page/f-markdown/domain/handle-parsed-containers/pseudo-components/index.mjs +0 -7
  229. package/esm2022/lib/f-page/f-markdown/domain/highlight/change-code-focused-syntax.pre-processor.mjs +0 -23
  230. package/esm2022/lib/f-page/f-markdown/domain/highlight/highlight.service.mjs +0 -54
  231. package/esm2022/lib/f-page/f-markdown/domain/highlight/index.mjs +0 -6
  232. package/esm2022/lib/f-page/f-markdown/domain/highlight/mark-code-focused-blocks.post-processor.mjs +0 -52
  233. package/esm2022/lib/f-page/f-markdown/domain/highlight/modify-punctuation-highlight.post-processor.mjs +0 -22
  234. package/esm2022/lib/f-page/f-markdown/domain/highlight/separate-code-by-lines.post-processor.mjs +0 -28
  235. package/esm2022/lib/f-page/f-markdown/domain/index.mjs +0 -5
  236. package/esm2022/lib/f-page/f-markdown/domain/markdown/index.mjs +0 -4
  237. package/esm2022/lib/f-page/f-markdown/domain/markdown/markdown.service.mjs +0 -65
  238. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/e-markdown-container-type.mjs +0 -13
  239. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/i-markdown-it-token.mjs +0 -2
  240. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/index.mjs +0 -8
  241. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/parse-alerts.mjs +0 -19
  242. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/parse-code-group.mjs +0 -54
  243. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/parse-code-view.mjs +0 -15
  244. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/parse-example-group.mjs +0 -92
  245. package/esm2022/lib/f-page/f-markdown/domain/markdown/parse-markdown/parse-preview-group.mjs +0 -49
  246. package/esm2022/lib/f-page/f-markdown/domain/markdown/utils/get-content.mjs +0 -17
  247. package/esm2022/lib/f-page/f-markdown/domain/markdown/utils/index.mjs +0 -2
  248. package/esm2022/lib/f-page/f-markdown/f-markdown-renderer.component.mjs +0 -80
  249. package/esm2022/lib/f-page/f-markdown/index.mjs +0 -3
  250. package/esm2022/lib/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.handler.mjs +0 -36
  251. package/esm2022/lib/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.request.mjs +0 -6
  252. package/esm2022/lib/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.response.mjs +0 -7
  253. package/esm2022/lib/f-page/f-markdown-footer/domain/features/get-previous-next-page-navigation/index.mjs +0 -4
  254. package/esm2022/lib/f-page/f-markdown-footer/domain/features/index.mjs +0 -2
  255. package/esm2022/lib/f-page/f-markdown-footer/domain/i-page-link.mjs +0 -2
  256. package/esm2022/lib/f-page/f-markdown-footer/domain/index.mjs +0 -3
  257. package/esm2022/lib/f-page/f-markdown-footer/f-footer-edit-information/f-footer-edit-information.component.mjs +0 -11
  258. package/esm2022/lib/f-page/f-markdown-footer/f-footer-edit-information/f-footer-edit-link/f-footer-edit-link.component.mjs +0 -11
  259. package/esm2022/lib/f-page/f-markdown-footer/f-footer-edit-information/f-footer-edit-link/index.mjs +0 -2
  260. package/esm2022/lib/f-page/f-markdown-footer/f-footer-edit-information/f-footer-last-updated/f-footer-last-updated.component.mjs +0 -11
  261. package/esm2022/lib/f-page/f-markdown-footer/f-footer-edit-information/f-footer-last-updated/index.mjs +0 -2
  262. package/esm2022/lib/f-page/f-markdown-footer/f-footer-edit-information/index.mjs +0 -2
  263. package/esm2022/lib/f-page/f-markdown-footer/f-footer-navigation/f-footer-navigation-button/f-footer-navigation-button.component.mjs +0 -17
  264. package/esm2022/lib/f-page/f-markdown-footer/f-footer-navigation/f-footer-navigation-button/index.mjs +0 -2
  265. package/esm2022/lib/f-page/f-markdown-footer/f-footer-navigation/f-footer-navigation.component.mjs +0 -11
  266. package/esm2022/lib/f-page/f-markdown-footer/f-footer-navigation/index.mjs +0 -3
  267. package/esm2022/lib/f-page/f-markdown-footer/f-markdown-footer.component.mjs +0 -82
  268. package/esm2022/lib/f-page/f-markdown-footer/index.mjs +0 -5
  269. package/esm2022/lib/f-page/f-page.component.mjs +0 -18
  270. package/esm2022/lib/f-page/f-table-of-content/f-table-of-content-items/f-table-of-content-items.component.mjs +0 -16
  271. package/esm2022/lib/f-page/f-table-of-content/f-table-of-content-items/index.mjs +0 -2
  272. package/esm2022/lib/f-page/f-table-of-content/f-table-of-content.component.mjs +0 -63
  273. package/esm2022/lib/f-page/f-table-of-content/index.mjs +0 -3
  274. package/esm2022/lib/f-page/index.mjs +0 -5
  275. package/esm2022/lib/f-scrollable-container/domain/calculate-hash-from-scroll-position/calculate-hash-from-scroll-position.handler.mjs +0 -51
  276. package/esm2022/lib/f-scrollable-container/domain/calculate-hash-from-scroll-position/calculate-hash-from-scroll-position.request.mjs +0 -6
  277. package/esm2022/lib/f-scrollable-container/domain/calculate-hash-from-scroll-position/index.mjs +0 -3
  278. package/esm2022/lib/f-scrollable-container/domain/get-absolute-top-to-container/get-absolute-top-to-container.handler.mjs +0 -14
  279. package/esm2022/lib/f-scrollable-container/domain/get-absolute-top-to-container/get-absolute-top-to-container.request.mjs +0 -7
  280. package/esm2022/lib/f-scrollable-container/domain/get-absolute-top-to-container/index.mjs +0 -3
  281. package/esm2022/lib/f-scrollable-container/domain/get-table-of-content-data/get-table-of-content-data.handler.mjs +0 -52
  282. package/esm2022/lib/f-scrollable-container/domain/get-table-of-content-data/get-table-of-content-data.request.mjs +0 -7
  283. package/esm2022/lib/f-scrollable-container/domain/get-table-of-content-data/index.mjs +0 -3
  284. package/esm2022/lib/f-scrollable-container/domain/i-table-of-content-item.mjs +0 -2
  285. package/esm2022/lib/f-scrollable-container/domain/index.mjs +0 -7
  286. package/esm2022/lib/f-scrollable-container/domain/scroll-to-element-in-container.mjs +0 -34
  287. package/esm2022/lib/f-scrollable-container/domain/table-of-content-data.mjs +0 -7
  288. package/esm2022/lib/f-scrollable-container/f-scrollable.service.mjs +0 -57
  289. package/esm2022/lib/f-scrollable-container/index.mjs +0 -3
  290. package/lib/domain/features/index.d.ts +0 -2
  291. package/lib/domain/providers.d.ts +0 -3
  292. package/lib/domain/router.d.ts +0 -2
  293. package/lib/{f-documentation → common-components}/f-checkbox/f-checkbox.component.d.ts +0 -0
  294. package/lib/{f-documentation → common-components}/f-cookie-popup/f-cookie-popup.component.d.ts +0 -0
  295. package/lib/{f-documentation → common-components}/f-theme-button/f-theme-button.component.d.ts +0 -0
  296. package/lib/domain/{features/get-version-handler → get-version-handler}/get-version.handler.d.ts +0 -0
  297. package/lib/domain/{features/get-version-handler → get-version-handler}/index.d.ts +0 -0
  298. package/lib/domain/{features/handle-navigation-links → handle-navigation-links}/handle-navigation-links.handler.d.ts +0 -0
  299. package/lib/domain/{features/handle-navigation-links → handle-navigation-links}/handle-navigation-links.request.d.ts +0 -0
  300. package/lib/domain/{features/handle-navigation-links → handle-navigation-links}/index.d.ts +0 -0
  301. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/domain/i-navigation-group.d.ts +0 -0
  302. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/domain/i-navigation-item-badge.d.ts +0 -0
  303. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/domain/i-navigation-item.d.ts +0 -0
  304. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/domain/index.d.ts +0 -0
  305. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/f-navigation-group/f-navigation-group.component.d.ts +0 -0
  306. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/f-navigation-item/f-navigation-item.component.d.ts +0 -0
  307. package/lib/{f-navigation-panel → f-documentation/f-navigation-panel}/index.d.ts +0 -0
  308. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-dynamic-components/handle-dynamic-components.request.d.ts +0 -0
  309. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-dynamic-components/index.d.ts +0 -0
  310. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/handle-parsed-containers.handler.d.ts +0 -0
  311. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/handle-parsed-containers.request.d.ts +0 -0
  312. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/i-parsed-container.d.ts +0 -0
  313. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/index.d.ts +0 -0
  314. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/clipboard/copy-to-clipboard.d.ts +0 -0
  315. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/clipboard/index.d.ts +0 -0
  316. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-async-code-view-handler.d.ts +0 -0
  317. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/f-code-group.handler.d.ts +0 -0
  318. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/i-code-group-view.d.ts +0 -0
  319. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group/index.d.ts +0 -0
  320. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-group-body.handler.d.ts +0 -0
  321. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-code-view-handler.d.ts +0 -0
  322. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/f-example-view-handler.d.ts +0 -0
  323. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/handle-parsed-containers/pseudo-components/index.d.ts +0 -0
  324. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/highlight/change-code-focused-syntax.pre-processor.d.ts +0 -0
  325. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/highlight/highlight.service.d.ts +0 -0
  326. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/highlight/index.d.ts +0 -0
  327. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/highlight/mark-code-focused-blocks.post-processor.d.ts +0 -0
  328. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/highlight/modify-punctuation-highlight.post-processor.d.ts +0 -0
  329. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/highlight/separate-code-by-lines.post-processor.d.ts +0 -0
  330. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/index.d.ts +0 -0
  331. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/index.d.ts +0 -0
  332. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/e-markdown-container-type.d.ts +0 -0
  333. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/i-markdown-it-token.d.ts +0 -0
  334. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/index.d.ts +0 -0
  335. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/parse-alerts.d.ts +0 -0
  336. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/parse-code-group.d.ts +0 -0
  337. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/parse-code-view.d.ts +0 -0
  338. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/parse-example-group.d.ts +0 -0
  339. package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/parse-markdown/parse-preview-group.d.ts +1 -1
  340. /package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/utils/get-content.d.ts +0 -0
  341. /package/lib/{f-page → f-documentation/f-page}/f-markdown/domain/markdown/utils/index.d.ts +0 -0
  342. /package/lib/{f-page → f-documentation/f-page}/f-markdown/f-markdown-renderer.component.d.ts +0 -0
  343. /package/lib/{f-page → f-documentation/f-page}/f-markdown/index.d.ts +0 -0
  344. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.request.d.ts +0 -0
  345. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/features/get-previous-next-page-navigation/get-previous-next-page-navigation.response.d.ts +0 -0
  346. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/features/get-previous-next-page-navigation/index.d.ts +0 -0
  347. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/features/index.d.ts +0 -0
  348. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/i-page-link.d.ts +0 -0
  349. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/domain/index.d.ts +0 -0
  350. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-edit-information/f-footer-edit-information.component.d.ts +0 -0
  351. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-edit-information/f-footer-edit-link/f-footer-edit-link.component.d.ts +0 -0
  352. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-edit-information/f-footer-edit-link/index.d.ts +0 -0
  353. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-edit-information/f-footer-last-updated/f-footer-last-updated.component.d.ts +0 -0
  354. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-edit-information/f-footer-last-updated/index.d.ts +0 -0
  355. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-edit-information/index.d.ts +0 -0
  356. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-navigation/f-footer-navigation-button/f-footer-navigation-button.component.d.ts +0 -0
  357. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-navigation/f-footer-navigation-button/index.d.ts +0 -0
  358. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-navigation/f-footer-navigation.component.d.ts +0 -0
  359. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/f-footer-navigation/index.d.ts +0 -0
  360. /package/lib/{f-page → f-documentation/f-page}/f-markdown-footer/index.d.ts +0 -0
  361. /package/lib/{f-page → f-documentation/f-page}/f-page.component.d.ts +0 -0
  362. /package/lib/{f-page → f-documentation/f-page}/f-table-of-content/f-table-of-content-items/f-table-of-content-items.component.d.ts +0 -0
  363. /package/lib/{f-page → f-documentation/f-page}/f-table-of-content/f-table-of-content-items/index.d.ts +0 -0
  364. /package/lib/{f-page → f-documentation/f-page}/f-table-of-content/index.d.ts +0 -0
  365. /package/lib/{f-page → f-documentation/f-page}/index.d.ts +0 -0
  366. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/calculate-hash-from-scroll-position/calculate-hash-from-scroll-position.handler.d.ts +0 -0
  367. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/calculate-hash-from-scroll-position/calculate-hash-from-scroll-position.request.d.ts +0 -0
  368. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/calculate-hash-from-scroll-position/index.d.ts +0 -0
  369. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/get-absolute-top-to-container/get-absolute-top-to-container.handler.d.ts +0 -0
  370. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/get-absolute-top-to-container/get-absolute-top-to-container.request.d.ts +0 -0
  371. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/get-absolute-top-to-container/index.d.ts +0 -0
  372. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/get-table-of-content-data/get-table-of-content-data.handler.d.ts +0 -0
  373. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/get-table-of-content-data/get-table-of-content-data.request.d.ts +0 -0
  374. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/get-table-of-content-data/index.d.ts +0 -0
  375. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/i-table-of-content-item.d.ts +0 -0
  376. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/index.d.ts +0 -0
  377. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/scroll-to-element-in-container.d.ts +0 -0
  378. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/domain/table-of-content-data.d.ts +0 -0
  379. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/f-scrollable-container.component.d.ts +0 -0
  380. /package/lib/{f-scrollable-container → f-documentation/f-scrollable-container}/index.d.ts +0 -0
@@ -1,18 +1,90 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Injectable, Inject, Optional, InjectionToken, Component, ChangeDetectionStrategy, Input, EventEmitter, booleanAttribute, Output, ViewChild, HostListener, signal, ViewChildren, ViewContainerRef, ElementRef } from '@angular/core';
2
+ import { EventEmitter, booleanAttribute, Component, ChangeDetectionStrategy, Input, Output, ViewChild, HostListener, inject, Injectable, Inject, signal, InjectionToken, Optional, ViewChildren, ViewContainerRef, ElementRef, DestroyRef, ChangeDetectorRef } from '@angular/core';
3
3
  import * as i2 from '@foblex/platform';
4
4
  import { F_LOCAL_STORAGE } from '@foblex/platform';
5
- import { DOCUMENT, ɵgetDOM as _getDOM, AsyncPipe, NgOptimizedImage, JsonPipe } from '@angular/common';
6
- import { of, map, startWith, filter, BehaviorSubject, Subject, Subscription, fromEvent, debounceTime, from, switchMap, Observable } from 'rxjs';
7
- import { catchError, filter as filter$1, take, tap } from 'rxjs/operators';
5
+ import { DOCUMENT, ɵgetDOM as _getDOM, AsyncPipe, JsonPipe } from '@angular/common';
8
6
  import * as i1 from '@angular/router';
9
- import { NavigationEnd, RouterLink, RouterOutlet, Router, ActivatedRoute } from '@angular/router';
7
+ import { NavigationEnd, Router, RouterLink, ActivatedRoute, RouterOutlet } from '@angular/router';
8
+ import { startWith, filter, BehaviorSubject, Subject, of, map, Subscription, from, switchMap, Observable, fromEvent, debounceTime } from 'rxjs';
9
+ import { catchError, filter as filter$1, take, tap } from 'rxjs/operators';
10
10
  import * as i1$1 from '@angular/common/http';
11
11
  import { HttpClient } from '@angular/common/http';
12
12
  import { deepClone } from '@foblex/utils';
13
13
  import container from 'markdown-it-container';
14
14
  import MarkdownIt from 'markdown-it';
15
15
  import * as i2$1 from '@angular/platform-browser';
16
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
17
+
18
+ let uniqueId = 0;
19
+ class FCheckboxComponent {
20
+ changeDetectorRef;
21
+ id = `f-checkbox-${uniqueId++}`;
22
+ change = new EventEmitter();
23
+ inputElement;
24
+ labelElement;
25
+ get checked() {
26
+ return this.isChecked;
27
+ }
28
+ set checked(value) {
29
+ if (value != this.checked) {
30
+ this.isChecked = value;
31
+ this.changeDetectorRef.markForCheck();
32
+ }
33
+ }
34
+ isChecked = false;
35
+ constructor(changeDetectorRef) {
36
+ this.changeDetectorRef = changeDetectorRef;
37
+ }
38
+ onInputClick() {
39
+ this.handleInputClick();
40
+ }
41
+ onTouchTargetClick() {
42
+ this.handleInputClick();
43
+ this.inputElement?.nativeElement.focus();
44
+ }
45
+ handleInputClick() {
46
+ this.isChecked = !this.isChecked;
47
+ this.emitChangeEvent();
48
+ }
49
+ emitChangeEvent() {
50
+ this.change.emit(this.isChecked);
51
+ if (this.inputElement) {
52
+ this.inputElement.nativeElement.checked = this.isChecked;
53
+ }
54
+ }
55
+ onInteractionEvent(event) {
56
+ event.stopPropagation();
57
+ }
58
+ preventBubblingFromLabel(event) {
59
+ if (!!event.target && this.labelElement?.nativeElement.contains(event.target)) {
60
+ event.stopPropagation();
61
+ }
62
+ }
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.13", type: FCheckboxComponent, isStandalone: true, selector: "f-checkbox", inputs: { id: "id", checked: ["checked", "checked", booleanAttribute] }, outputs: { change: "change" }, host: { listeners: { "click": "preventBubblingFromLabel($event)" }, properties: { "class.f-checkbox-checked": "checked" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["label"], descendants: true }], ngImport: i0, template: "<input #input\n [id]=\"id\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-checkbox-container\" (click)=\"onTouchTargetClick()\">\n <svg class=\"f-checkbox-checkmark\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path class=\"f-checkbox-checkmark-path\" fill=\"none\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n</div>\n<label [for]=\"id\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--checkbox-container-background);border-radius:var(--checkbox-border-radius);padding:0 8px;color:var(--checkbox-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-checkbox-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--checkbox-size);height:var(--checkbox-size);margin-right:6px;border-radius:var(--checkbox-border-radius);background-color:var(--checkbox-background);padding:2px}:host .f-checkbox-container .f-checkbox-checkmark{position:absolute;top:calc(var(--checkbox-size) / 8);right:calc(var(--checkbox-size) / 8);bottom:calc(var(--checkbox-size) / 8);left:calc(var(--checkbox-size) / 8);opacity:0}:host .f-checkbox-container .f-checkbox-checkmark .f-checkbox-checkmark-path{stroke:currentColor;stroke-width:3}:host label{-webkit-user-select:none;user-select:none}:host.f-checkbox-checked .f-checkbox-container{background-color:var(--checkbox-checked-background)}:host.f-checkbox-checked .f-checkbox-container .f-checkbox-checkmark{color:var(--checkbox-checkmark-color);opacity:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FCheckboxComponent, decorators: [{
67
+ type: Component,
68
+ args: [{ selector: 'f-checkbox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
69
+ '[class.f-checkbox-checked]': 'checked',
70
+ }, template: "<input #input\n [id]=\"id\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-checkbox-container\" (click)=\"onTouchTargetClick()\">\n <svg class=\"f-checkbox-checkmark\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path class=\"f-checkbox-checkmark-path\" fill=\"none\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n</div>\n<label [for]=\"id\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--checkbox-container-background);border-radius:var(--checkbox-border-radius);padding:0 8px;color:var(--checkbox-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-checkbox-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--checkbox-size);height:var(--checkbox-size);margin-right:6px;border-radius:var(--checkbox-border-radius);background-color:var(--checkbox-background);padding:2px}:host .f-checkbox-container .f-checkbox-checkmark{position:absolute;top:calc(var(--checkbox-size) / 8);right:calc(var(--checkbox-size) / 8);bottom:calc(var(--checkbox-size) / 8);left:calc(var(--checkbox-size) / 8);opacity:0}:host .f-checkbox-container .f-checkbox-checkmark .f-checkbox-checkmark-path{stroke:currentColor;stroke-width:3}:host label{-webkit-user-select:none;user-select:none}:host.f-checkbox-checked .f-checkbox-container{background-color:var(--checkbox-checked-background)}:host.f-checkbox-checked .f-checkbox-container .f-checkbox-checkmark{color:var(--checkbox-checkmark-color);opacity:1}\n"] }]
71
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
72
+ type: Input
73
+ }], change: [{
74
+ type: Output
75
+ }], inputElement: [{
76
+ type: ViewChild,
77
+ args: ['input']
78
+ }], labelElement: [{
79
+ type: ViewChild,
80
+ args: ['label']
81
+ }], checked: [{
82
+ type: Input,
83
+ args: [{ transform: booleanAttribute }]
84
+ }], preventBubblingFromLabel: [{
85
+ type: HostListener,
86
+ args: ['click', ['$event']]
87
+ }] } });
16
88
 
17
89
  const F_ACCEPT_COOKIES_KEY = 'm-render-accepts-cookies';
18
90
 
@@ -49,10 +121,8 @@ const setCookieConsent = (state) => {
49
121
  };
50
122
 
51
123
  class FAnalyticsService {
52
- constructor() {
53
- this.fLocalStorage = inject(F_LOCAL_STORAGE);
54
- this.document = inject(DOCUMENT);
55
- }
124
+ fLocalStorage = inject(F_LOCAL_STORAGE);
125
+ document = inject(DOCUMENT);
56
126
  initialize(analyticsId) {
57
127
  this.installGlobalSiteTag(analyticsId);
58
128
  }
@@ -86,15 +156,17 @@ class FAnalyticsService {
86
156
  gtmScript.id = 'gtag-script';
87
157
  return gtmScript;
88
158
  }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
90
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FAnalyticsService, providedIn: 'root' }); }
159
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
160
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FAnalyticsService, providedIn: 'root' });
91
161
  }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FAnalyticsService, decorators: [{
162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FAnalyticsService, decorators: [{
93
163
  type: Injectable,
94
164
  args: [{ providedIn: 'root' }]
95
165
  }] });
96
166
 
97
167
  class FJsonLdService {
168
+ _document;
169
+ _dom;
98
170
  constructor(_document) {
99
171
  this._document = _document;
100
172
  this._dom = _getDOM();
@@ -131,10 +203,10 @@ class FJsonLdService {
131
203
  head.appendChild(element);
132
204
  return element;
133
205
  }
134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FJsonLdService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
135
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FJsonLdService, providedIn: 'root' }); }
206
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FJsonLdService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
207
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FJsonLdService, providedIn: 'root' });
136
208
  }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FJsonLdService, decorators: [{
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FJsonLdService, decorators: [{
138
210
  type: Injectable,
139
211
  args: [{ providedIn: 'root' }]
140
212
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -143,6 +215,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
143
215
  }] }] });
144
216
 
145
217
  class FHeadTagService {
218
+ _document;
219
+ _dom;
146
220
  constructor(_document) {
147
221
  this._document = _document;
148
222
  this._dom = _getDOM();
@@ -180,10 +254,10 @@ class FHeadTagService {
180
254
  head.appendChild(element);
181
255
  return element;
182
256
  }
183
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeadTagService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
184
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeadTagService, providedIn: 'root' }); }
257
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeadTagService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
258
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeadTagService, providedIn: 'root' });
185
259
  }
186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeadTagService, decorators: [{
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeadTagService, decorators: [{
187
261
  type: Injectable,
188
262
  args: [{ providedIn: 'root' }]
189
263
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -191,13 +265,202 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
191
265
  args: [DOCUMENT]
192
266
  }] }] });
193
267
 
268
+ class FMetaService {
269
+ router;
270
+ fHeadTag;
271
+ fBrowser;
272
+ navigation = [];
273
+ constructor(router, fHeadTag, fBrowser) {
274
+ this.router = router;
275
+ this.fHeadTag = fHeadTag;
276
+ this.fBrowser = fBrowser;
277
+ }
278
+ subscribeOnRouteChanges(defaultData, environments) {
279
+ this.navigation = environments.reduce((result, e) => result.concat(...e.navigation), []);
280
+ return this.router.events.pipe(startWith(new NavigationEnd(1, '', '')), filter(event => event instanceof NavigationEnd)).subscribe((x) => {
281
+ let data = {
282
+ ...defaultData,
283
+ };
284
+ const item = this.findDocItemByUrl(this.findDocGroupByUrl(this.router.url), this.router.url);
285
+ if (item) {
286
+ data.title = `${item.text} - ${defaultData.app_name}`;
287
+ data.url = this.fBrowser.window.location.href;
288
+ data.description = item.description || defaultData.description;
289
+ data.image = item.image || defaultData.image;
290
+ data.image_width = item.image_width || defaultData.image_width;
291
+ data.image_height = item.image_height || defaultData.image_height;
292
+ data.image_type = item.image_type || defaultData.image_type;
293
+ }
294
+ if (!data.url) {
295
+ data.url = this.fBrowser.window.location.origin + this.router.url;
296
+ }
297
+ if (!data.image.startsWith('http') && !data.image.startsWith('www')) {
298
+ if (data.image.startsWith('.')) {
299
+ data.image = this.fBrowser.window.location.origin + data.image.slice(1);
300
+ }
301
+ else {
302
+ data.image = this.fBrowser.window.location.origin + data.image;
303
+ }
304
+ }
305
+ if (!data.url.endsWith('/')) {
306
+ data.url += '/';
307
+ }
308
+ this.updateMetaTags(data);
309
+ });
310
+ }
311
+ findDocGroupByUrl(url) {
312
+ return this.navigation.find((g) => g.items.find((i) => url.endsWith(i.link)));
313
+ }
314
+ findDocItemByUrl(group, url) {
315
+ return (group?.items || []).find((i) => url.endsWith(i.link));
316
+ }
317
+ updateMetaTags(item) {
318
+ this.fHeadTag.setTitle(item.title);
319
+ this.fHeadTag.setDescription(item.description);
320
+ this.fHeadTag.setCanonical(item.url);
321
+ this.fHeadTag.updateTag({ property: 'og:url', content: item.url });
322
+ this.fHeadTag.updateTag({ property: 'og:type', content: item.type });
323
+ this.fHeadTag.updateTag({ property: 'og:title', content: item.title });
324
+ this.fHeadTag.updateTag({ property: 'og:site_name', content: item.title });
325
+ this.fHeadTag.updateTag({ property: 'og:locale', content: item.locale });
326
+ this.fHeadTag.updateTag({ property: 'og:description', content: item.description });
327
+ this.fHeadTag.updateTag({ property: 'og:image', content: item.image });
328
+ this.fHeadTag.updateTag({ property: 'og:image:secure_url', content: item.image });
329
+ this.fHeadTag.updateTag({ property: 'og:image:type', content: item.image_type });
330
+ this.fHeadTag.updateTag({ property: 'og:image:width', content: item.image_width.toString() });
331
+ this.fHeadTag.updateTag({ property: 'og:image:height', content: item.image_height.toString() });
332
+ }
333
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMetaService, deps: [{ token: i1.Router }, { token: FHeadTagService }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable });
334
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMetaService, providedIn: 'root' });
335
+ }
336
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMetaService, decorators: [{
337
+ type: Injectable,
338
+ args: [{ providedIn: 'root' }]
339
+ }], ctorParameters: () => [{ type: i1.Router }, { type: FHeadTagService }, { type: i2.BrowserService }] });
340
+
341
+ class FPopoverService {
342
+ popover = new BehaviorSubject(null);
343
+ get popover$() {
344
+ return this.popover.asObservable();
345
+ }
346
+ show(message) {
347
+ this.popover.next(message);
348
+ setTimeout(() => this.popover.next(null), 2000);
349
+ }
350
+ dispose(destroyRef) {
351
+ destroyRef.onDestroy(() => {
352
+ this.popover.next(null);
353
+ this.popover.complete();
354
+ });
355
+ }
356
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
357
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPopoverService });
358
+ }
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPopoverService, decorators: [{
360
+ type: Injectable
361
+ }] });
362
+
363
+ class CookiePopup {
364
+ fLocalStorage = inject(F_LOCAL_STORAGE);
365
+ hasAccepted = signal(false);
366
+ constructor() {
367
+ try {
368
+ this.hasAccepted.set(this.fLocalStorage?.getItem(F_ACCEPT_COOKIES_KEY) === 'true');
369
+ }
370
+ catch {
371
+ this.hasAccepted.set(false);
372
+ }
373
+ }
374
+ accept() {
375
+ try {
376
+ this.fLocalStorage?.setItem(F_ACCEPT_COOKIES_KEY, 'true');
377
+ }
378
+ catch {
379
+ }
380
+ this.hasAccepted.set(true);
381
+ setCookieConsent('granted');
382
+ }
383
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookiePopup, deps: [], target: i0.ɵɵFactoryTarget.Component });
384
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CookiePopup, isStandalone: true, selector: "f-cookie-popup", ngImport: i0, template: "@if (!hasAccepted()) {\n <div class=\"docs-cookies-popup docs-invert-mode\">\n <p>This site uses cookies from Google to deliver its services and to analyze traffic.</p>\n\n <div>\n <a href=\"https://policies.google.com/technologies/cookies\" target=\"_blank\" rel=\"noopener\">\n <button class=\"f-button\" [attr.text]=\"'Learn more'\" aria-label=\"Learn More\">\n Learn more\n </button>\n </a>\n <button\n (click)=\"accept()\"\n class=\"f-button\"\n [attr.text]=\"'Ok, Got it'\"\n aria-label=\"Ok, Got it\">\n Ok, Got it\n </button>\n </div>\n </div>\n}\n", styles: [":host{position:fixed;bottom:16px;right:16px;z-index:99999;opacity:0;visibility:hidden;animation:1s linear forwards .5s fadeIn}.docs-cookies-popup{padding:1rem;background-color:var(--background-color);border:1px solid var(--divider-color);color:var(--primary-text);border-radius:var(--border-radius);font-size:14px;max-width:310px;transition:background-color .3s ease,border-color .3s ease,color .3s ease;box-shadow:var(--shadow-3)}.docs-cookies-popup>div{display:flex;gap:8px;align-items:center;width:100%;margin-block-start:1rem}.f-button{outline:none;border:none;height:unset;line-height:26px;font-size:14px;font-weight:500;border-radius:var(--border-radius)}@keyframes fadeIn{to{opacity:100%;visibility:visible}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
385
+ }
386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CookiePopup, decorators: [{
387
+ type: Component,
388
+ args: [{ selector: 'f-cookie-popup', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hasAccepted()) {\n <div class=\"docs-cookies-popup docs-invert-mode\">\n <p>This site uses cookies from Google to deliver its services and to analyze traffic.</p>\n\n <div>\n <a href=\"https://policies.google.com/technologies/cookies\" target=\"_blank\" rel=\"noopener\">\n <button class=\"f-button\" [attr.text]=\"'Learn more'\" aria-label=\"Learn More\">\n Learn more\n </button>\n </a>\n <button\n (click)=\"accept()\"\n class=\"f-button\"\n [attr.text]=\"'Ok, Got it'\"\n aria-label=\"Ok, Got it\">\n Ok, Got it\n </button>\n </div>\n </div>\n}\n", styles: [":host{position:fixed;bottom:16px;right:16px;z-index:99999;opacity:0;visibility:hidden;animation:1s linear forwards .5s fadeIn}.docs-cookies-popup{padding:1rem;background-color:var(--background-color);border:1px solid var(--divider-color);color:var(--primary-text);border-radius:var(--border-radius);font-size:14px;max-width:310px;transition:background-color .3s ease,border-color .3s ease,color .3s ease;box-shadow:var(--shadow-3)}.docs-cookies-popup>div{display:flex;gap:8px;align-items:center;width:100%;margin-block-start:1rem}.f-button{outline:none;border:none;height:unset;line-height:26px;font-size:14px;font-weight:500;border-radius:var(--border-radius)}@keyframes fadeIn{to{opacity:100%;visibility:visible}}\n"] }]
389
+ }], ctorParameters: () => [] });
390
+
391
+ class FStateService {
392
+ fBrowser;
393
+ theme = new Subject();
394
+ constructor(fBrowser) {
395
+ this.fBrowser = fBrowser;
396
+ }
397
+ get theme$() {
398
+ return this.theme.asObservable();
399
+ }
400
+ updateTheme() {
401
+ this.theme.next();
402
+ }
403
+ getPreferredTheme() {
404
+ return this.fBrowser.localStorage.getItem('preferred-theme')
405
+ || (this.fBrowser.window.isMediaQuery('(prefers-color-scheme: dark)') ? 'dark' : 'light');
406
+ }
407
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FStateService, deps: [{ token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable });
408
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FStateService, providedIn: 'root' });
409
+ }
410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FStateService, decorators: [{
411
+ type: Injectable,
412
+ args: [{ providedIn: 'root' }]
413
+ }], ctorParameters: () => [{ type: i2.BrowserService }] });
414
+
415
+ class FThemeButtonComponent {
416
+ renderer;
417
+ fState;
418
+ fBrowser;
419
+ constructor(renderer, fState, fBrowser) {
420
+ this.renderer = renderer;
421
+ this.fState = fState;
422
+ this.fBrowser = fBrowser;
423
+ }
424
+ ngOnInit() {
425
+ if (this.fState.getPreferredTheme() === 'dark' && !this.isDocumentContainsDarkTheme()) {
426
+ this.renderer.addClass(this.fBrowser.document.documentElement, 'dark');
427
+ this.fBrowser.localStorage.setItem('preferred-theme', 'dark');
428
+ }
429
+ }
430
+ isDocumentContainsDarkTheme() {
431
+ return this.fBrowser.document.documentElement.classList.contains('dark');
432
+ }
433
+ onClick() {
434
+ if (this.fState.getPreferredTheme() === 'light' && !this.isDocumentContainsDarkTheme()) {
435
+ this.renderer.addClass(this.fBrowser.document.documentElement, 'dark');
436
+ this.fBrowser.localStorage.setItem('preferred-theme', 'dark');
437
+ }
438
+ else {
439
+ this.renderer.removeClass(this.fBrowser.document.documentElement, 'dark');
440
+ this.fBrowser.localStorage.setItem('preferred-theme', 'light');
441
+ }
442
+ this.fState.updateTheme();
443
+ }
444
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FThemeButtonComponent, deps: [{ token: i0.Renderer2 }, { token: FStateService }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Component });
445
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FThemeButtonComponent, isStandalone: true, selector: "button[f-theme-button]", host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
446
+ }
447
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FThemeButtonComponent, decorators: [{
448
+ type: Component,
449
+ args: [{ selector: 'button[f-theme-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"] }]
450
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: FStateService }, { type: i2.BrowserService }], propDecorators: { onClick: [{
451
+ type: HostListener,
452
+ args: ['click']
453
+ }] } });
454
+
194
455
  class GetVersionRequest {
456
+ version;
195
457
  constructor(version) {
196
458
  this.version = version;
197
459
  }
198
460
  }
199
461
 
200
462
  class GetVersionHandler {
463
+ http;
201
464
  constructor(http) {
202
465
  this.http = http;
203
466
  }
@@ -223,6 +486,8 @@ class GetVersionHandler {
223
486
  }
224
487
 
225
488
  class HandleNavigationLinksHandler {
489
+ router;
490
+ fBrowser;
226
491
  constructor(router, fBrowser) {
227
492
  this.router = router;
228
493
  this.fBrowser = fBrowser;
@@ -262,20 +527,65 @@ class HandleNavigationLinksHandler {
262
527
  openExternalLink(href) {
263
528
  this.fBrowser.window.open(href, '_blank');
264
529
  }
265
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleNavigationLinksHandler, deps: [{ token: i1.Router }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
266
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleNavigationLinksHandler }); }
530
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleNavigationLinksHandler, deps: [{ token: i1.Router }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable });
531
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleNavigationLinksHandler });
267
532
  }
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleNavigationLinksHandler, decorators: [{
533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleNavigationLinksHandler, decorators: [{
269
534
  type: Injectable
270
535
  }], ctorParameters: () => [{ type: i1.Router }, { type: i2.BrowserService }] });
271
536
 
272
537
  class HandleNavigationLinksRequest {
538
+ event;
273
539
  constructor(event) {
274
540
  this.event = event;
275
541
  }
276
542
  }
277
543
 
278
- class FEnvironmentService {
544
+ const INTERNAL_ENVIRONMENT_SERVICE = new InjectionToken('INTERNAL_ENVIRONMENT_SERVICE');
545
+
546
+ class FBadgeComponent {
547
+ text = '';
548
+ type = 'tip';
549
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
550
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FBadgeComponent, isStandalone: true, selector: "span[f-badge]", inputs: { text: "text", type: "type" }, host: { properties: { "class": "type" }, classAttribute: "f-badge" }, ngImport: i0, template: "{{ text }}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
551
+ }
552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FBadgeComponent, decorators: [{
553
+ type: Component,
554
+ args: [{ selector: 'span[f-badge]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
555
+ 'class': 'f-badge',
556
+ '[class]': 'type',
557
+ }, template: "{{ text }}\n" }]
558
+ }], propDecorators: { text: [{
559
+ type: Input
560
+ }], type: [{
561
+ type: Input
562
+ }] } });
563
+
564
+ class FHamburgerButtonComponent {
565
+ fDocumentation;
566
+ constructor(fDocumentation) {
567
+ this.fDocumentation = fDocumentation;
568
+ }
569
+ onShowNavigation() {
570
+ this.fDocumentation.onToggleNavigation(true);
571
+ }
572
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHamburgerButtonComponent, deps: [{ token: F_DOCUMENTATION_COMPONENT }], target: i0.ɵɵFactoryTarget.Component });
573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHamburgerButtonComponent, isStandalone: true, selector: "button[f-hamburger-button]", host: { listeners: { "click": "onShowNavigation()" } }, ngImport: i0, template: "<span class=\"f-icon hamburger\"></span>\n\n", styles: [":host{background-color:transparent;border:0;display:flex;padding:0;margin-right:16px;color:var(--secondary-text);cursor:pointer}@media (min-width: 960px){:host{display:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
574
+ }
575
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHamburgerButtonComponent, decorators: [{
576
+ type: Component,
577
+ args: [{ selector: 'button[f-hamburger-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"f-icon hamburger\"></span>\n\n", styles: [":host{background-color:transparent;border:0;display:flex;padding:0;margin-right:16px;color:var(--secondary-text);cursor:pointer}@media (min-width: 960px){:host{display:none}}\n"] }]
578
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
579
+ type: Inject,
580
+ args: [F_DOCUMENTATION_COMPONENT]
581
+ }] }], propDecorators: { onShowNavigation: [{
582
+ type: HostListener,
583
+ args: ['click']
584
+ }] } });
585
+
586
+ class FDocumentationEnvironmentService {
587
+ environment;
588
+ http;
279
589
  constructor(environment, http) {
280
590
  this.environment = environment;
281
591
  this.http = http;
@@ -325,508 +635,143 @@ class FEnvironmentService {
325
635
  range: { start: 2, end: 6 },
326
636
  };
327
637
  }
328
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FEnvironmentService, deps: [{ token: F_ENVIRONMENT, optional: true }, { token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
329
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FEnvironmentService }); }
638
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FDocumentationEnvironmentService, deps: [{ token: F_DOCS_ENVIRONMENT, optional: true }, { token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
639
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FDocumentationEnvironmentService });
330
640
  }
331
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FEnvironmentService, decorators: [{
641
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FDocumentationEnvironmentService, decorators: [{
332
642
  type: Injectable
333
643
  }], ctorParameters: () => [{ type: undefined, decorators: [{
334
644
  type: Optional
335
645
  }, {
336
646
  type: Inject,
337
- args: [F_ENVIRONMENT]
647
+ args: [F_DOCS_ENVIRONMENT]
338
648
  }] }, { type: i1$1.HttpClient }] });
339
649
 
340
- class FMetaService {
341
- constructor(router, fHeadTag, fBrowser) {
342
- this.router = router;
343
- this.fHeadTag = fHeadTag;
344
- this.fBrowser = fBrowser;
345
- this.navigation = [];
346
- }
347
- subscribeOnRouteChanges(defaultData, environments) {
348
- this.navigation = environments.reduce((result, e) => result.concat(...e.navigation), []);
349
- return this.router.events.pipe(startWith(new NavigationEnd(1, '', '')), filter(event => event instanceof NavigationEnd)).subscribe((x) => {
350
- let data = {
351
- ...defaultData,
352
- };
353
- const item = this.findDocItemByUrl(this.findDocGroupByUrl(this.router.url), this.router.url);
354
- if (item) {
355
- data.title = `${item.text} - ${defaultData.app_name}`;
356
- data.url = this.fBrowser.window.location.href;
357
- data.description = item.description || defaultData.description;
358
- data.image = item.image || defaultData.image;
359
- data.image_width = item.image_width || defaultData.image_width;
360
- data.image_height = item.image_height || defaultData.image_height;
361
- data.image_type = item.image_type || defaultData.image_type;
362
- }
363
- if (!data.url) {
364
- data.url = this.fBrowser.window.location.origin + this.router.url;
365
- }
366
- if (!data.image.startsWith('http') && !data.image.startsWith('www')) {
367
- if (data.image.startsWith('.')) {
368
- data.image = this.fBrowser.window.location.origin + data.image.slice(1);
369
- }
370
- else {
371
- data.image = this.fBrowser.window.location.origin + data.image;
372
- }
373
- }
374
- if (!data.url.endsWith('/')) {
375
- data.url += '/';
376
- }
377
- this.updateMetaTags(data);
378
- });
379
- }
380
- findDocGroupByUrl(url) {
381
- return this.navigation.find((g) => g.items.find((i) => url.endsWith(i.link)));
382
- }
383
- findDocItemByUrl(group, url) {
384
- return (group?.items || []).find((i) => url.endsWith(i.link));
385
- }
386
- updateMetaTags(item) {
387
- this.fHeadTag.setTitle(item.title);
388
- this.fHeadTag.setDescription(item.description);
389
- this.fHeadTag.setCanonical(item.url);
390
- this.fHeadTag.updateTag({ property: 'og:url', content: item.url });
391
- this.fHeadTag.updateTag({ property: 'og:type', content: item.type });
392
- this.fHeadTag.updateTag({ property: 'og:title', content: item.title });
393
- this.fHeadTag.updateTag({ property: 'og:site_name', content: item.title });
394
- this.fHeadTag.updateTag({ property: 'og:locale', content: item.locale });
395
- this.fHeadTag.updateTag({ property: 'og:description', content: item.description });
396
- this.fHeadTag.updateTag({ property: 'og:image', content: item.image });
397
- this.fHeadTag.updateTag({ property: 'og:image:secure_url', content: item.image });
398
- this.fHeadTag.updateTag({ property: 'og:image:type', content: item.image_type });
399
- this.fHeadTag.updateTag({ property: 'og:image:width', content: item.image_width.toString() });
400
- this.fHeadTag.updateTag({ property: 'og:image:height', content: item.image_height.toString() });
401
- }
402
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMetaService, deps: [{ token: i1.Router }, { token: FHeadTagService }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
403
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMetaService, providedIn: 'root' }); }
404
- }
405
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMetaService, decorators: [{
406
- type: Injectable,
407
- args: [{ providedIn: 'root' }]
408
- }], ctorParameters: () => [{ type: i1.Router }, { type: FHeadTagService }, { type: i2.BrowserService }] });
409
-
410
- class FPopoverService {
411
- constructor() {
412
- this.popover = new BehaviorSubject(null);
413
- }
414
- get popover$() {
415
- return this.popover.asObservable();
416
- }
417
- show(message) {
418
- this.popover.next(message);
419
- setTimeout(() => this.popover.next(null), 2000);
420
- }
421
- dispose() {
422
- this.popover.next(null);
423
- this.popover.complete();
424
- }
425
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
426
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPopoverService }); }
650
+ class FSocialLinksComponent {
651
+ links = inject(FDocumentationEnvironmentService).getSocialLinks();
652
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FSocialLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
653
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FSocialLinksComponent, isStandalone: true, selector: "f-social-links", ngImport: i0, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
427
654
  }
428
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPopoverService, decorators: [{
429
- type: Injectable
655
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FSocialLinksComponent, decorators: [{
656
+ type: Component,
657
+ args: [{ selector: 'f-social-links', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"] }]
430
658
  }] });
431
659
 
432
- const F_ENVIRONMENT = new InjectionToken('F_ENVIRONMENT');
433
-
434
- const F_DOCUMENTATION_ROUTES = [
435
- {
436
- path: '',
437
- loadComponent: () => Promise.resolve().then(function () { return index$1; }).then(m => m.FDocumentationComponent),
438
- children: [
439
- {
440
- path: '**',
441
- loadComponent: () => Promise.resolve().then(function () { return index; }).then(m => m.FPageComponent)
442
- }
443
- ]
444
- }
445
- ];
446
-
447
- class FBadgeComponent {
448
- constructor() {
449
- this.text = '';
450
- this.type = 'tip';
660
+ class FHeaderMenuComponent {
661
+ navigation = [];
662
+ _router = inject(Router);
663
+ _fEnvironmentService = inject(FDocumentationEnvironmentService);
664
+ ngOnInit() {
665
+ this.navigation = this._fEnvironmentService.getHeaderNavigation().map((x) => {
666
+ return {
667
+ ...x,
668
+ isActive: this._router.url.startsWith(x.link)
669
+ };
670
+ });
451
671
  }
452
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
453
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FBadgeComponent, isStandalone: true, selector: "span[f-badge]", inputs: { text: "text", type: "type" }, host: { properties: { "class": "type" }, classAttribute: "f-badge" }, ngImport: i0, template: "{{ text }}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
672
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeaderMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
673
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FHeaderMenuComponent, isStandalone: true, selector: "f-header-menu", ngImport: i0, template: "@for (item of navigation; track item.link) {\n <a class=\"header-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">\n <span>{{ item.text }}</span>\n </a>\n}\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{display:flex;align-items:center;padding:0 12px;line-height:var(--header-height);font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer}.header-link:hover,.header-link.active{color:var(--primary-1)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
454
674
  }
455
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FBadgeComponent, decorators: [{
675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeaderMenuComponent, decorators: [{
456
676
  type: Component,
457
- args: [{ selector: 'span[f-badge]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
458
- 'class': 'f-badge',
459
- '[class]': 'type',
460
- }, template: "{{ text }}\n" }]
461
- }], propDecorators: { text: [{
462
- type: Input
463
- }], type: [{
464
- type: Input
465
- }] } });
677
+ args: [{ selector: 'f-header-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
678
+ RouterLink
679
+ ], template: "@for (item of navigation; track item.link) {\n <a class=\"header-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">\n <span>{{ item.text }}</span>\n </a>\n}\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{display:flex;align-items:center;padding:0 12px;line-height:var(--header-height);font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer}.header-link:hover,.header-link.active{color:var(--primary-1)}\n"] }]
680
+ }] });
466
681
 
467
- let uniqueId = 0;
468
- class FCheckboxComponent {
469
- get checked() {
470
- return this.isChecked;
471
- }
472
- set checked(value) {
473
- if (value != this.checked) {
474
- this.isChecked = value;
475
- this.changeDetectorRef.markForCheck();
476
- }
477
- }
478
- constructor(changeDetectorRef) {
479
- this.changeDetectorRef = changeDetectorRef;
480
- this.id = `f-checkbox-${uniqueId++}`;
481
- this.change = new EventEmitter();
482
- this.isChecked = false;
483
- }
484
- onInputClick() {
485
- this.handleInputClick();
486
- }
487
- onTouchTargetClick() {
488
- this.handleInputClick();
489
- this.inputElement?.nativeElement.focus();
490
- }
491
- handleInputClick() {
492
- this.isChecked = !this.isChecked;
493
- this.emitChangeEvent();
494
- }
495
- emitChangeEvent() {
496
- this.change.emit(this.isChecked);
497
- if (this.inputElement) {
498
- this.inputElement.nativeElement.checked = this.isChecked;
499
- }
500
- }
501
- onInteractionEvent(event) {
502
- event.stopPropagation();
503
- }
504
- preventBubblingFromLabel(event) {
505
- if (!!event.target && this.labelElement?.nativeElement.contains(event.target)) {
506
- event.stopPropagation();
507
- }
508
- }
509
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
510
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.12", type: FCheckboxComponent, isStandalone: true, selector: "f-checkbox", inputs: { id: "id", checked: ["checked", "checked", booleanAttribute] }, outputs: { change: "change" }, host: { listeners: { "click": "preventBubblingFromLabel($event)" }, properties: { "class.f-checkbox-checked": "checked" } }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["label"], descendants: true }], ngImport: i0, template: "<input #input\n [id]=\"id\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-checkbox-container\" (click)=\"onTouchTargetClick()\">\n <svg class=\"f-checkbox-checkmark\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path class=\"f-checkbox-checkmark-path\" fill=\"none\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n</div>\n<label [for]=\"id\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--checkbox-container-background);border-radius:var(--checkbox-border-radius);padding:0 8px;color:var(--checkbox-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-checkbox-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--checkbox-size);height:var(--checkbox-size);margin-right:6px;border-radius:var(--checkbox-border-radius);background-color:var(--checkbox-background);padding:2px}:host .f-checkbox-container .f-checkbox-checkmark{position:absolute;top:calc(var(--checkbox-size) / 8);right:calc(var(--checkbox-size) / 8);bottom:calc(var(--checkbox-size) / 8);left:calc(var(--checkbox-size) / 8);opacity:0}:host .f-checkbox-container .f-checkbox-checkmark .f-checkbox-checkmark-path{stroke:currentColor;stroke-width:3}:host label{-webkit-user-select:none;user-select:none}:host.f-checkbox-checked .f-checkbox-container{background-color:var(--checkbox-checked-background)}:host.f-checkbox-checked .f-checkbox-container .f-checkbox-checkmark{color:var(--checkbox-checkmark-color);opacity:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
682
+ class FVersionComponent {
683
+ version$ = inject(FDocumentationEnvironmentService).getVersion();
684
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FVersionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
685
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FVersionComponent, isStandalone: true, selector: "f-version", ngImport: i0, template: "@if (version$ | async;as version) {\n <span class=\"version\">v{{ version }}</span>\n}\n", styles: [".version{margin-left:8px;margin-right:8px;display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--primary-text)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
511
686
  }
512
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FCheckboxComponent, decorators: [{
687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FVersionComponent, decorators: [{
513
688
  type: Component,
514
- args: [{ selector: 'f-checkbox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
515
- '[class.f-checkbox-checked]': 'checked',
516
- }, template: "<input #input\n [id]=\"id\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onInputClick()\"\n (change)=\"onInteractionEvent($event)\"/>\n<div class=\"f-checkbox-container\" (click)=\"onTouchTargetClick()\">\n <svg class=\"f-checkbox-checkmark\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path class=\"f-checkbox-checkmark-path\" fill=\"none\" d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"/>\n </svg>\n</div>\n<label [for]=\"id\" #label>\n <ng-content></ng-content>\n</label>\n", styles: [":host{position:relative;display:flex;align-items:center;font-weight:400;white-space:nowrap;font-size:14px;cursor:pointer;background-color:var(--checkbox-container-background);border-radius:var(--checkbox-border-radius);padding:0 8px;color:var(--checkbox-text);transition:color .25s,background-color .25s}:host input{position:absolute;inset:0;opacity:0;cursor:pointer}:host .f-checkbox-container{position:relative;display:flex;align-items:center;justify-content:center;width:var(--checkbox-size);height:var(--checkbox-size);margin-right:6px;border-radius:var(--checkbox-border-radius);background-color:var(--checkbox-background);padding:2px}:host .f-checkbox-container .f-checkbox-checkmark{position:absolute;top:calc(var(--checkbox-size) / 8);right:calc(var(--checkbox-size) / 8);bottom:calc(var(--checkbox-size) / 8);left:calc(var(--checkbox-size) / 8);opacity:0}:host .f-checkbox-container .f-checkbox-checkmark .f-checkbox-checkmark-path{stroke:currentColor;stroke-width:3}:host label{-webkit-user-select:none;user-select:none}:host.f-checkbox-checked .f-checkbox-container{background-color:var(--checkbox-checked-background)}:host.f-checkbox-checked .f-checkbox-container .f-checkbox-checkmark{color:var(--checkbox-checkmark-color);opacity:1}\n"] }]
517
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
518
- type: Input
519
- }], change: [{
520
- type: Output
521
- }], inputElement: [{
522
- type: ViewChild,
523
- args: ['input']
524
- }], labelElement: [{
525
- type: ViewChild,
526
- args: ['label']
527
- }], checked: [{
528
- type: Input,
529
- args: [{ transform: booleanAttribute }]
530
- }], preventBubblingFromLabel: [{
531
- type: HostListener,
532
- args: ['click', ['$event']]
533
- }] } });
689
+ args: [{ selector: 'f-version', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
690
+ AsyncPipe
691
+ ], template: "@if (version$ | async;as version) {\n <span class=\"version\">v{{ version }}</span>\n}\n", styles: [".version{margin-left:8px;margin-right:8px;display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--primary-text)}\n"] }]
692
+ }] });
534
693
 
535
- class CookiePopup {
536
- constructor() {
537
- this.fLocalStorage = inject(F_LOCAL_STORAGE);
538
- this.hasAccepted = signal(false);
539
- try {
540
- this.hasAccepted.set(this.fLocalStorage?.getItem(F_ACCEPT_COOKIES_KEY) === 'true');
541
- }
542
- catch {
543
- this.hasAccepted.set(false);
544
- }
545
- }
546
- accept() {
547
- try {
548
- this.fLocalStorage?.setItem(F_ACCEPT_COOKIES_KEY, 'true');
549
- }
550
- catch {
551
- }
552
- this.hasAccepted.set(true);
553
- setCookieConsent('granted');
554
- }
555
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CookiePopup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
556
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CookiePopup, isStandalone: true, selector: "f-cookie-popup", ngImport: i0, template: "@if (!hasAccepted()) {\n <div class=\"docs-cookies-popup docs-invert-mode\">\n <p>This site uses cookies from Google to deliver its services and to analyze traffic.</p>\n\n <div>\n <a href=\"https://policies.google.com/technologies/cookies\" target=\"_blank\" rel=\"noopener\">\n <button class=\"f-button\" [attr.text]=\"'Learn more'\" aria-label=\"Learn More\">\n Learn more\n </button>\n </a>\n <button\n (click)=\"accept()\"\n class=\"f-button\"\n [attr.text]=\"'Ok, Got it'\"\n aria-label=\"Ok, Got it\">\n Ok, Got it\n </button>\n </div>\n </div>\n}\n", styles: [":host{position:fixed;bottom:16px;right:16px;z-index:99999;opacity:0;visibility:hidden;animation:1s linear forwards .5s fadeIn}.docs-cookies-popup{padding:1rem;background-color:var(--background-color);border:1px solid var(--divider-color);color:var(--primary-text);border-radius:var(--border-radius);font-size:14px;max-width:310px;transition:background-color .3s ease,border-color .3s ease,color .3s ease;box-shadow:var(--shadow-3)}.docs-cookies-popup>div{display:flex;gap:8px;align-items:center;width:100%;margin-block-start:1rem}.f-button{outline:none;border:none;height:unset;line-height:26px;font-size:14px;font-weight:500;border-radius:var(--border-radius)}@keyframes fadeIn{to{opacity:100%;visibility:visible}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
694
+ class FHeaderComponent {
695
+ title = inject(FDocumentationEnvironmentService).getTitle();
696
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
697
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHeaderComponent, isStandalone: true, selector: "f-header", ngImport: i0, template: "<button f-hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<div class=\"flex-space\"></div>\n<f-header-menu></f-header-menu>\n<f-version></f-version>\n<div class=\"divider\"></div>\n<button f-theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links></f-social-links>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"], dependencies: [{ kind: "component", type: FHamburgerButtonComponent, selector: "button[f-hamburger-button]" }, { kind: "component", type: FVersionComponent, selector: "f-version" }, { kind: "component", type: FSocialLinksComponent, selector: "f-social-links" }, { kind: "component", type: FThemeButtonComponent, selector: "button[f-theme-button]" }, { kind: "component", type: FHeaderMenuComponent, selector: "f-header-menu" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
557
698
  }
558
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CookiePopup, decorators: [{
699
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHeaderComponent, decorators: [{
559
700
  type: Component,
560
- args: [{ selector: 'f-cookie-popup', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hasAccepted()) {\n <div class=\"docs-cookies-popup docs-invert-mode\">\n <p>This site uses cookies from Google to deliver its services and to analyze traffic.</p>\n\n <div>\n <a href=\"https://policies.google.com/technologies/cookies\" target=\"_blank\" rel=\"noopener\">\n <button class=\"f-button\" [attr.text]=\"'Learn more'\" aria-label=\"Learn More\">\n Learn more\n </button>\n </a>\n <button\n (click)=\"accept()\"\n class=\"f-button\"\n [attr.text]=\"'Ok, Got it'\"\n aria-label=\"Ok, Got it\">\n Ok, Got it\n </button>\n </div>\n </div>\n}\n", styles: [":host{position:fixed;bottom:16px;right:16px;z-index:99999;opacity:0;visibility:hidden;animation:1s linear forwards .5s fadeIn}.docs-cookies-popup{padding:1rem;background-color:var(--background-color);border:1px solid var(--divider-color);color:var(--primary-text);border-radius:var(--border-radius);font-size:14px;max-width:310px;transition:background-color .3s ease,border-color .3s ease,color .3s ease;box-shadow:var(--shadow-3)}.docs-cookies-popup>div{display:flex;gap:8px;align-items:center;width:100%;margin-block-start:1rem}.f-button{outline:none;border:none;height:unset;line-height:26px;font-size:14px;font-weight:500;border-radius:var(--border-radius)}@keyframes fadeIn{to{opacity:100%;visibility:visible}}\n"] }]
561
- }], ctorParameters: () => [] });
562
-
563
- const F_DOCUMENTATION_COMPONENT = new InjectionToken('F_DOCUMENTATION_COMPONENT');
701
+ args: [{ selector: 'f-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
702
+ FHamburgerButtonComponent,
703
+ FVersionComponent,
704
+ FSocialLinksComponent,
705
+ FThemeButtonComponent,
706
+ FHeaderMenuComponent
707
+ ], template: "<button f-hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<div class=\"flex-space\"></div>\n<f-header-menu></f-header-menu>\n<f-version></f-version>\n<div class=\"divider\"></div>\n<button f-theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links></f-social-links>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"] }]
708
+ }] });
564
709
 
565
- class FHamburgerButtonComponent {
566
- constructor(fDocumentation) {
567
- this.fDocumentation = fDocumentation;
568
- }
569
- onShowNavigation() {
570
- this.fDocumentation.onToggleNavigation(true);
710
+ class FNavigationGroupComponent {
711
+ title;
712
+ isCollapsed = false;
713
+ toggle() {
714
+ this.isCollapsed = !this.isCollapsed;
571
715
  }
572
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHamburgerButtonComponent, deps: [{ token: F_DOCUMENTATION_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }
573
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FHamburgerButtonComponent, isStandalone: true, selector: "button[f-hamburger-button]", host: { listeners: { "click": "onShowNavigation()" } }, ngImport: i0, template: "<span class=\"f-icon hamburger\"></span>\n\n", styles: [":host{background-color:transparent;border:0;display:flex;padding:0;margin-right:16px;color:var(--secondary-text);cursor:pointer}@media (min-width: 960px){:host{display:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
716
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
717
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FNavigationGroupComponent, isStandalone: true, selector: "f-navigation-group", inputs: { title: "title" }, host: { properties: { "class.collapsed": "isCollapsed", "class.no-title": "!title" } }, ngImport: i0, template: "@if (title) {\n <header (click)=\"toggle()\">\n <span>{{ title }}</span>\n <div class=\"flex-space\"></div>\n <div class=\"caret\">\n <span class=\"chevron-right caret-icon\"></span>\n </div>\n </header>\n}\n@if (!isCollapsed) {\n <ng-content></ng-content>\n}\n\n\n\n", styles: [":host{padding-top:10px;padding-bottom:24px;border-top:1px solid var(--divider-color);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;max-width:240px;margin-left:auto}:host.collapsed,:host.no-title{padding-top:10px;padding-bottom:10px}header{font-weight:600;color:var(--primary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;display:flex;justify-content:flex-start;align-items:center;width:100%}.caret{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--tertiary-text);cursor:pointer;transition:color .25s;flex-shrink:0}:host:hover .caret{color:var(--secondary-text)}:host:hover .caret:hover{color:var(--primary-text)}:host .caret-icon{font-size:18px;transform:rotate(90deg);transition:transform .25s;mask-size:100% 100%;background-color:currentColor;color:inherit;width:18px;height:18px}:host.collapsed .caret-icon{transform:rotate(0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
574
718
  }
575
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHamburgerButtonComponent, decorators: [{
719
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationGroupComponent, decorators: [{
576
720
  type: Component,
577
- args: [{ selector: 'button[f-hamburger-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"f-icon hamburger\"></span>\n\n", styles: [":host{background-color:transparent;border:0;display:flex;padding:0;margin-right:16px;color:var(--secondary-text);cursor:pointer}@media (min-width: 960px){:host{display:none}}\n"] }]
578
- }], ctorParameters: () => [{ type: undefined, decorators: [{
579
- type: Inject,
580
- args: [F_DOCUMENTATION_COMPONENT]
581
- }] }], propDecorators: { onShowNavigation: [{
582
- type: HostListener,
583
- args: ['click']
721
+ args: [{ selector: 'f-navigation-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
722
+ '[class.collapsed]': 'isCollapsed',
723
+ '[class.no-title]': '!title'
724
+ }, template: "@if (title) {\n <header (click)=\"toggle()\">\n <span>{{ title }}</span>\n <div class=\"flex-space\"></div>\n <div class=\"caret\">\n <span class=\"chevron-right caret-icon\"></span>\n </div>\n </header>\n}\n@if (!isCollapsed) {\n <ng-content></ng-content>\n}\n\n\n\n", styles: [":host{padding-top:10px;padding-bottom:24px;border-top:1px solid var(--divider-color);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;max-width:240px;margin-left:auto}:host.collapsed,:host.no-title{padding-top:10px;padding-bottom:10px}header{font-weight:600;color:var(--primary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;display:flex;justify-content:flex-start;align-items:center;width:100%}.caret{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--tertiary-text);cursor:pointer;transition:color .25s;flex-shrink:0}:host:hover .caret{color:var(--secondary-text)}:host:hover .caret:hover{color:var(--primary-text)}:host .caret-icon{font-size:18px;transform:rotate(90deg);transition:transform .25s;mask-size:100% 100%;background-color:currentColor;color:inherit;width:18px;height:18px}:host.collapsed .caret-icon{transform:rotate(0)}\n"] }]
725
+ }], propDecorators: { title: [{
726
+ type: Input
584
727
  }] } });
585
728
 
586
- class FVersionComponent {
587
- constructor(fEnvironmentService) {
729
+ class FNavigationHeaderComponent {
730
+ router;
731
+ fEnvironmentService;
732
+ title = '';
733
+ image = '';
734
+ constructor(router, fEnvironmentService) {
735
+ this.router = router;
588
736
  this.fEnvironmentService = fEnvironmentService;
589
- this.version$ = this.fEnvironmentService.getVersion();
737
+ this.title = this.fEnvironmentService.getTitle();
738
+ this.image = this.fEnvironmentService.getLogo();
590
739
  }
591
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FVersionComponent, deps: [{ token: FEnvironmentService }], target: i0.ɵɵFactoryTarget.Component }); }
592
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FVersionComponent, isStandalone: true, selector: "f-version", ngImport: i0, template: "@if (version$ | async;as version) {\n <span class=\"version\">v{{ version }}</span>\n}\n", styles: [".version{margin-left:8px;margin-right:8px;display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--primary-text)}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
740
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationHeaderComponent, deps: [{ token: i1.Router }, { token: FDocumentationEnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
741
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FNavigationHeaderComponent, isStandalone: true, selector: "a[f-navigation-header]", ngImport: i0, template: "<img [src]=\"image\" width=\"24\" height=\"24\" alt=\"logo\" class=\"logo\"/> {{ title }}\n\n\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height);width:100%;max-width:240px;margin-left:auto;cursor:pointer}:host img{margin-right:8px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
593
742
  }
594
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FVersionComponent, decorators: [{
743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationHeaderComponent, decorators: [{
595
744
  type: Component,
596
- args: [{ selector: 'f-version', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
597
- AsyncPipe
598
- ], template: "@if (version$ | async;as version) {\n <span class=\"version\">v{{ version }}</span>\n}\n", styles: [".version{margin-left:8px;margin-right:8px;display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--primary-text)}\n"] }]
599
- }], ctorParameters: () => [{ type: FEnvironmentService }] });
745
+ args: [{ selector: 'a[f-navigation-header]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
746
+ RouterLink
747
+ ], template: "<img [src]=\"image\" width=\"24\" height=\"24\" alt=\"logo\" class=\"logo\"/> {{ title }}\n\n\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height);width:100%;max-width:240px;margin-left:auto;cursor:pointer}:host img{margin-right:8px}\n"] }]
748
+ }], ctorParameters: () => [{ type: i1.Router }, { type: FDocumentationEnvironmentService }] });
600
749
 
601
- class FSocialLinksComponent {
602
- get links() {
603
- return this.fEnvironmentService.getSocialLinks();
604
- }
605
- constructor(fEnvironmentService) {
606
- this.fEnvironmentService = fEnvironmentService;
607
- }
608
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FSocialLinksComponent, deps: [{ token: FEnvironmentService }], target: i0.ɵɵFactoryTarget.Component }); }
609
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FSocialLinksComponent, isStandalone: true, selector: "f-social-links", ngImport: i0, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
750
+ class FNavigationItemComponent {
751
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
752
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FNavigationItemComponent, isStandalone: true, selector: "a[f-navigation-item]", ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
610
753
  }
611
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FSocialLinksComponent, decorators: [{
754
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationItemComponent, decorators: [{
612
755
  type: Component,
613
- args: [{ selector: 'f-social-links', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (link of links; track link.link) {\n <a href=\"{{ link.link }}\" class=\"header-link\">\n <div class=\"f-icon {{ link.icon }}\"></div>\n </a>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{width:36px;height:36px;padding:7.5px}\n"] }]
614
- }], ctorParameters: () => [{ type: FEnvironmentService }] });
615
-
616
- class FStateService {
617
- constructor(fBrowser) {
618
- this.fBrowser = fBrowser;
619
- this.theme = new Subject();
620
- }
621
- get theme$() {
622
- return this.theme.asObservable();
623
- }
624
- updateTheme() {
625
- this.theme.next();
626
- }
627
- getPreferredTheme() {
628
- return this.fBrowser.localStorage.getItem('preferred-theme')
629
- || (this.fBrowser.window.isMediaQuery('(prefers-color-scheme: dark)') ? 'dark' : 'light');
630
- }
631
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FStateService, deps: [{ token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
632
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FStateService, providedIn: 'root' }); }
633
- }
634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FStateService, decorators: [{
635
- type: Injectable,
636
- args: [{ providedIn: 'root' }]
637
- }], ctorParameters: () => [{ type: i2.BrowserService }] });
638
-
639
- class FThemeButtonComponent {
640
- constructor(renderer, fState, fBrowser) {
641
- this.renderer = renderer;
642
- this.fState = fState;
643
- this.fBrowser = fBrowser;
644
- }
645
- ngOnInit() {
646
- if (this.fState.getPreferredTheme() === 'dark' && !this.isDocumentContainsDarkTheme()) {
647
- this.renderer.addClass(this.fBrowser.document.documentElement, 'dark');
648
- this.fBrowser.localStorage.setItem('preferred-theme', 'dark');
649
- }
650
- }
651
- isDocumentContainsDarkTheme() {
652
- return this.fBrowser.document.documentElement.classList.contains('dark');
653
- }
654
- onClick() {
655
- if (this.fState.getPreferredTheme() === 'light' && !this.isDocumentContainsDarkTheme()) {
656
- this.renderer.addClass(this.fBrowser.document.documentElement, 'dark');
657
- this.fBrowser.localStorage.setItem('preferred-theme', 'dark');
658
- }
659
- else {
660
- this.renderer.removeClass(this.fBrowser.document.documentElement, 'dark');
661
- this.fBrowser.localStorage.setItem('preferred-theme', 'light');
662
- }
663
- this.fState.updateTheme();
664
- }
665
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FThemeButtonComponent, deps: [{ token: i0.Renderer2 }, { token: FStateService }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Component }); }
666
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FThemeButtonComponent, isStandalone: true, selector: "button[f-theme-button]", host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
667
- }
668
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FThemeButtonComponent, decorators: [{
669
- type: Component,
670
- args: [{ selector: 'button[f-theme-button]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"f-icon-container\">\n <div class=\"f-icon moon\"></div>\n <div class=\"f-icon sun\"></div>\n</div>\n", styles: [":host{margin:0 8px;position:relative;border-radius:11px;display:block;width:44px;min-width:44px;height:22px;border:1px solid var(--theme-button-border-color);background-color:var(--theme-button-background);cursor:pointer}:host:hover{border-color:var(--theme-button-hovered-border-color)}.f-icon-container{position:absolute;top:1px;left:1px;width:18px;height:18px;padding:3px;border-radius:50%;background-color:var(--theme-button-icon-background);transition:transform .4s}.f-icon-container .f-icon{position:absolute;top:3px;left:3px;width:12px;height:12px}.f-icon-container .sun{display:block}.f-icon-container .moon{display:none}.dark :host .f-icon-container{transform:translate(22px)}.dark :host .f-icon-container .sun{display:none}.dark :host .f-icon-container .moon{display:block}\n"] }]
671
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: FStateService }, { type: i2.BrowserService }], propDecorators: { onClick: [{
672
- type: HostListener,
673
- args: ['click']
674
- }] } });
675
-
676
- class FHeaderMenuComponent {
677
- constructor(fEnvironmentService, router) {
678
- this.fEnvironmentService = fEnvironmentService;
679
- this.router = router;
680
- this.navigation = [];
681
- }
682
- ngOnInit() {
683
- this.navigation = this.fEnvironmentService.getHeaderNavigation().map((x) => {
684
- return {
685
- ...x,
686
- isActive: this.router.url.startsWith(x.link)
687
- };
688
- });
689
- }
690
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeaderMenuComponent, deps: [{ token: FEnvironmentService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
691
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FHeaderMenuComponent, isStandalone: true, selector: "f-header-menu", ngImport: i0, template: "@for (item of navigation; track item.link) {\n <a class=\"header-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">\n <span>{{ item.text }}</span>\n </a>\n}\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{display:flex;align-items:center;padding:0 12px;line-height:var(--header-height);font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer}.header-link:hover,.header-link.active{color:var(--primary-1)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
692
- }
693
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeaderMenuComponent, decorators: [{
694
- type: Component,
695
- args: [{ selector: 'f-header-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
696
- RouterLink
697
- ], template: "@for (item of navigation; track item.link) {\n <a class=\"header-link\" [routerLink]=\"item.link\" [class.active]=\"item.isActive\">\n <span>{{ item.text }}</span>\n </a>\n}\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center}.header-link{display:flex;align-items:center;padding:0 12px;line-height:var(--header-height);font-size:14px;font-weight:500;color:var(--primary-text);cursor:pointer}.header-link:hover,.header-link.active{color:var(--primary-1)}\n"] }]
698
- }], ctorParameters: () => [{ type: FEnvironmentService }, { type: i1.Router }] });
699
-
700
- class FHeaderComponent {
701
- constructor(fEnvironmentService) {
702
- this.fEnvironmentService = fEnvironmentService;
703
- this.title = '';
704
- this.title = this.fEnvironmentService.getTitle();
705
- }
706
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeaderComponent, deps: [{ token: FEnvironmentService }], target: i0.ɵɵFactoryTarget.Component }); }
707
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FHeaderComponent, isStandalone: true, selector: "f-header", ngImport: i0, template: "<button f-hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<div class=\"flex-space\"></div>\n<f-header-menu></f-header-menu>\n<f-version></f-version>\n<div class=\"divider\"></div>\n<button f-theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links></f-social-links>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"], dependencies: [{ kind: "component", type: FHamburgerButtonComponent, selector: "button[f-hamburger-button]" }, { kind: "component", type: FVersionComponent, selector: "f-version" }, { kind: "component", type: FSocialLinksComponent, selector: "f-social-links" }, { kind: "component", type: FThemeButtonComponent, selector: "button[f-theme-button]" }, { kind: "component", type: FHeaderMenuComponent, selector: "f-header-menu" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
708
- }
709
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FHeaderComponent, decorators: [{
710
- type: Component,
711
- args: [{ selector: 'f-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
712
- NgOptimizedImage,
713
- FHamburgerButtonComponent,
714
- FVersionComponent,
715
- FSocialLinksComponent,
716
- FThemeButtonComponent,
717
- FHeaderMenuComponent
718
- ], template: "<button f-hamburger-button></button>\n<div class=\"title text-ellipsis\">{{ title }}</div>\n<div class=\"flex-space\"></div>\n<f-header-menu></f-header-menu>\n<f-version></f-version>\n<div class=\"divider\"></div>\n<button f-theme-button></button>\n<div class=\"divider\"></div>\n<f-social-links></f-social-links>\n\n", styles: [":host{position:sticky;width:100%;top:0;display:flex;justify-content:flex-start;align-items:center;padding:20px 32px;font-weight:600;color:var(--primary-text);height:calc(var(--header-height) + 1px);background-color:var(--background-color);border-bottom:1px solid var(--divider-color);z-index:var(--z-index-header)}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}.title{display:none;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height)}@media (min-width: 460px){.title{display:block}}@media (min-width: 960px){.title{display:none}}.divider{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--divider-color);content:\"\"}\n"] }]
719
- }], ctorParameters: () => [{ type: FEnvironmentService }] });
720
-
721
- class FPreviewComponent {
722
- constructor(fEnvironment, fState, router, changeDetectorRef) {
723
- this.fEnvironment = fEnvironment;
724
- this.fState = fState;
725
- this.router = router;
726
- this.changeDetectorRef = changeDetectorRef;
727
- this.subscriptions$ = new Subscription();
728
- }
729
- initialize() {
730
- this.viewModel = this.getNavigationItem(this.getNavigationGroup());
731
- this.url = this.normalizeLink(this.viewModel.link, this.getUrlPrefix());
732
- this.subscriptions$.add(this.fState.theme$.pipe(startWith(null)).subscribe(() => this.updateTheme()));
733
- }
734
- getNavigationGroup() {
735
- return this.fEnvironment.getNavigation().find((x) => x.text === this.group);
736
- }
737
- getNavigationItem(group) {
738
- return group.items.find((x) => x.link === this.item);
739
- }
740
- updateTheme() {
741
- this.src = this.fState.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image;
742
- if (!this.src) {
743
- this.src = this.viewModel?.image;
744
- }
745
- this.changeDetectorRef.markForCheck();
746
- }
747
- normalizeLink(link, prefix) {
748
- if (!this.isExternalLink(link)) {
749
- return link.startsWith('/') ? `${prefix}${link}` : `${prefix}/${link}`;
750
- }
751
- return link;
752
- }
753
- getUrlPrefix() {
754
- return this.router.url.substring(0, this.router.url.lastIndexOf('/'));
755
- }
756
- isExternalLink(href) {
757
- return href.startsWith('www') || href.startsWith('http');
758
- }
759
- ngOnDestroy() {
760
- this.subscriptions$.unsubscribe();
761
- }
762
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPreviewComponent, deps: [{ token: FEnvironmentService }, { token: FStateService }, { token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
763
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FPreviewComponent, isStandalone: true, selector: "a[f-preview]", host: { properties: { "attr.href": "url", "attr.title": "viewModel?.text" } }, ngImport: i0, template: "@if (viewModel) {\n <img [src]=\"src\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">{{ viewModel.text }}</div>\n <div class=\"description\">{{ viewModel.description }}</div>\n}\n\n\n\n", styles: [":host{display:block;border-radius:4px;background-color:var(--soft-background);padding:24px;width:100%;text-decoration:none!important;color:inherit!important;line-height:24px;font-size:14px;cursor:pointer}:host:hover img{transform:scale(1.1)}:host img{display:block;margin-bottom:16px;width:100%;height:180px;border-radius:4px;object-fit:cover;transition:transform .3s}:host .title{line-height:inherit;font-weight:600;text-transform:uppercase;color:var(--primary-text)}:host .description{margin:8px 0!important;line-height:inherit;color:var(--secondary-text);width:100%;word-wrap:break-word;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media (min-width: 640px){:host{width:calc((100% - 32px)/2)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
764
- }
765
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPreviewComponent, decorators: [{
766
- type: Component,
767
- args: [{ selector: 'a[f-preview]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
768
- '[attr.href]': 'url',
769
- '[attr.title]': 'viewModel?.text',
770
- }, template: "@if (viewModel) {\n <img [src]=\"src\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">{{ viewModel.text }}</div>\n <div class=\"description\">{{ viewModel.description }}</div>\n}\n\n\n\n", styles: [":host{display:block;border-radius:4px;background-color:var(--soft-background);padding:24px;width:100%;text-decoration:none!important;color:inherit!important;line-height:24px;font-size:14px;cursor:pointer}:host:hover img{transform:scale(1.1)}:host img{display:block;margin-bottom:16px;width:100%;height:180px;border-radius:4px;object-fit:cover;transition:transform .3s}:host .title{line-height:inherit;font-weight:600;text-transform:uppercase;color:var(--primary-text)}:host .description{margin:8px 0!important;line-height:inherit;color:var(--secondary-text);width:100%;word-wrap:break-word;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media (min-width: 640px){:host{width:calc((100% - 32px)/2)}}\n"] }]
771
- }], ctorParameters: () => [{ type: FEnvironmentService }, { type: FStateService }, { type: i1.Router }, { type: i0.ChangeDetectorRef }] });
772
-
773
- class FNavigationGroupComponent {
774
- constructor() {
775
- this.isCollapsed = false;
776
- }
777
- toggle() {
778
- this.isCollapsed = !this.isCollapsed;
779
- }
780
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
781
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FNavigationGroupComponent, isStandalone: true, selector: "f-navigation-group", inputs: { title: "title" }, host: { properties: { "class.collapsed": "isCollapsed", "class.no-title": "!title" } }, ngImport: i0, template: "@if (title) {\n <header (click)=\"toggle()\">\n <span>{{ title }}</span>\n <div class=\"flex-space\"></div>\n <div class=\"caret\">\n <span class=\"chevron-right caret-icon\"></span>\n </div>\n </header>\n}\n@if (!isCollapsed) {\n <ng-content></ng-content>\n}\n\n\n\n", styles: [":host{padding-top:10px;padding-bottom:24px;border-top:1px solid var(--divider-color);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;max-width:240px;margin-left:auto}:host.collapsed,:host.no-title{padding-top:10px;padding-bottom:10px}header{font-weight:600;color:var(--primary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;display:flex;justify-content:flex-start;align-items:center;width:100%}.caret{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--tertiary-text);cursor:pointer;transition:color .25s;flex-shrink:0}:host:hover .caret{color:var(--secondary-text)}:host:hover .caret:hover{color:var(--primary-text)}:host .caret-icon{font-size:18px;transform:rotate(90deg);transition:transform .25s;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;width:18px;height:18px}:host.collapsed .caret-icon{transform:rotate(0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
782
- }
783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationGroupComponent, decorators: [{
784
- type: Component,
785
- args: [{ selector: 'f-navigation-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
786
- '[class.collapsed]': 'isCollapsed',
787
- '[class.no-title]': '!title'
788
- }, template: "@if (title) {\n <header (click)=\"toggle()\">\n <span>{{ title }}</span>\n <div class=\"flex-space\"></div>\n <div class=\"caret\">\n <span class=\"chevron-right caret-icon\"></span>\n </div>\n </header>\n}\n@if (!isCollapsed) {\n <ng-content></ng-content>\n}\n\n\n\n", styles: [":host{padding-top:10px;padding-bottom:24px;border-top:1px solid var(--divider-color);display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;max-width:240px;margin-left:auto}:host.collapsed,:host.no-title{padding-top:10px;padding-bottom:10px}header{font-weight:600;color:var(--primary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;display:flex;justify-content:flex-start;align-items:center;width:100%}.caret{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--tertiary-text);cursor:pointer;transition:color .25s;flex-shrink:0}:host:hover .caret{color:var(--secondary-text)}:host:hover .caret:hover{color:var(--primary-text)}:host .caret-icon{font-size:18px;transform:rotate(90deg);transition:transform .25s;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;width:18px;height:18px}:host.collapsed .caret-icon{transform:rotate(0)}\n"] }]
789
- }], propDecorators: { title: [{
790
- type: Input
791
- }] } });
792
-
793
- class FNavigationHeaderComponent {
794
- constructor(router, fEnvironmentService) {
795
- this.router = router;
796
- this.fEnvironmentService = fEnvironmentService;
797
- this.title = '';
798
- this.image = '';
799
- this.title = this.fEnvironmentService.getTitle();
800
- this.image = this.fEnvironmentService.getLogo();
801
- }
802
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationHeaderComponent, deps: [{ token: i1.Router }, { token: FEnvironmentService }], target: i0.ɵɵFactoryTarget.Component }); }
803
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FNavigationHeaderComponent, isStandalone: true, selector: "a[f-navigation-header]", ngImport: i0, template: "<img [src]=\"image\" width=\"24\" height=\"24\" alt=\"logo\" class=\"logo\"/> {{ title }}\n\n\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height);width:100%;max-width:240px;margin-left:auto;cursor:pointer}:host img{margin-right:8px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
804
- }
805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationHeaderComponent, decorators: [{
806
- type: Component,
807
- args: [{ selector: 'a[f-navigation-header]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
808
- RouterLink
809
- ], template: "<img [src]=\"image\" width=\"24\" height=\"24\" alt=\"logo\" class=\"logo\"/> {{ title }}\n\n\n\n", styles: [":host{display:flex;justify-content:flex-start;align-items:center;padding:20px 0;font-weight:600;color:var(--primary-text);height:var(--header-height);width:100%;max-width:240px;margin-left:auto;cursor:pointer}:host img{margin-right:8px}\n"] }]
810
- }], ctorParameters: () => [{ type: i1.Router }, { type: FEnvironmentService }] });
811
-
812
- class FNavigationItemComponent {
813
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
814
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FNavigationItemComponent, isStandalone: true, selector: "a[f-navigation-item]", ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
815
- }
816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationItemComponent, decorators: [{
817
- type: Component,
818
- args: [{ selector: 'a[f-navigation-item]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"] }]
819
- }] });
756
+ args: [{ selector: 'a[f-navigation-item]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{font-weight:500;color:var(--secondary-text);flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;cursor:pointer;width:100%;display:flex;align-items:center;justify-content:flex-start;gap:2px}:host:hover{text-decoration:none;color:var(--primary-1)}:host.active{color:var(--primary-1)}\n"] }]
757
+ }] });
820
758
 
821
759
  class FNavigationPanelComponent {
760
+ fEnvironmentService;
761
+ fDocumentation;
762
+ router;
763
+ injector;
764
+ changeDetectorRef;
765
+ subscription = new Subscription();
766
+ items;
767
+ value;
768
+ navigation = [];
822
769
  constructor(fEnvironmentService, fDocumentation, router, injector, changeDetectorRef) {
823
770
  this.fEnvironmentService = fEnvironmentService;
824
771
  this.fDocumentation = fDocumentation;
825
772
  this.router = router;
826
773
  this.injector = injector;
827
774
  this.changeDetectorRef = changeDetectorRef;
828
- this.subscription = new Subscription();
829
- this.navigation = [];
830
775
  this.navigation = this.fEnvironmentService.getNavigation();
831
776
  }
832
777
  ngOnInit() {
@@ -866,359 +811,46 @@ class FNavigationPanelComponent {
866
811
  })?.link || this.value;
867
812
  });
868
813
  }
869
- onDocumentClick(event) {
870
- this.injector.get(HandleNavigationLinksHandler).handle(new HandleNavigationLinksRequest(event));
871
- }
872
- ngOnDestroy() {
873
- this.subscription.unsubscribe();
874
- }
875
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationPanelComponent, deps: [{ token: FEnvironmentService }, { token: F_DOCUMENTATION_COMPONENT }, { token: i1.Router }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
876
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FNavigationPanelComponent, isStandalone: true, selector: "f-navigation-panel", host: { listeners: { "click": "onDocumentClick($event)" } }, providers: [
877
- HandleNavigationLinksHandler
878
- ], viewQueries: [{ propertyName: "items", predicate: FNavigationItemComponent, descendants: true }], ngImport: i0, template: "<a f-navigation-header routerLink></a>\n\n@for (group of navigation; track group) {\n <f-navigation-group [title]=\"group.text\">\n @for (item of group.items; track item.link) {\n <a f-navigation-item [href]=\"item.link\" [class.active]=\"item.link === value\">\n <div class=\"text-ellipsis\">{{ item.text }}</div>\n @if (item.badge) {\n <span f-badge [text]=\"item.badge.text\" [type]=\"item.badge.type\"></span>\n }\n </a>\n }\n </f-navigation-group>\n}\n", styles: [":host{height:100%;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 var(--navigation-panel-padding);background-color:var(--navigation-panel-background);overflow:hidden;overflow-y:auto;position:fixed;width:var(--navigation-panel-width);top:0;left:calc(-1 * var(--navigation-panel-width));transition:transform .2s ease-in-out;z-index:var(--z-index-navigation);transform:none}@media (min-width: 960px){:host{position:unset;display:flex;min-width:var(--navigation-panel-width);width:fit-content;transform:none!important}}@media (min-width: 1440px){:host{min-width:calc((100% - (var(--layout-max-width) - 64px)) / 3 + var(--navigation-panel-width) - var(--navigation-panel-padding))}}:host.visible{transform:translate(var(--navigation-panel-width))}\n"], dependencies: [{ kind: "component", type: FNavigationHeaderComponent, selector: "a[f-navigation-header]" }, { kind: "component", type: FNavigationItemComponent, selector: "a[f-navigation-item]" }, { kind: "component", type: FNavigationGroupComponent, selector: "f-navigation-group", inputs: ["title"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: FBadgeComponent, selector: "span[f-badge]", inputs: ["text", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
879
- }
880
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FNavigationPanelComponent, decorators: [{
881
- type: Component,
882
- args: [{ selector: 'f-navigation-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
883
- HandleNavigationLinksHandler
884
- ], imports: [
885
- FNavigationHeaderComponent,
886
- FNavigationItemComponent,
887
- FNavigationGroupComponent,
888
- RouterLink,
889
- FBadgeComponent,
890
- ], template: "<a f-navigation-header routerLink></a>\n\n@for (group of navigation; track group) {\n <f-navigation-group [title]=\"group.text\">\n @for (item of group.items; track item.link) {\n <a f-navigation-item [href]=\"item.link\" [class.active]=\"item.link === value\">\n <div class=\"text-ellipsis\">{{ item.text }}</div>\n @if (item.badge) {\n <span f-badge [text]=\"item.badge.text\" [type]=\"item.badge.type\"></span>\n }\n </a>\n }\n </f-navigation-group>\n}\n", styles: [":host{height:100%;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 var(--navigation-panel-padding);background-color:var(--navigation-panel-background);overflow:hidden;overflow-y:auto;position:fixed;width:var(--navigation-panel-width);top:0;left:calc(-1 * var(--navigation-panel-width));transition:transform .2s ease-in-out;z-index:var(--z-index-navigation);transform:none}@media (min-width: 960px){:host{position:unset;display:flex;min-width:var(--navigation-panel-width);width:fit-content;transform:none!important}}@media (min-width: 1440px){:host{min-width:calc((100% - (var(--layout-max-width) - 64px)) / 3 + var(--navigation-panel-width) - var(--navigation-panel-padding))}}:host.visible{transform:translate(var(--navigation-panel-width))}\n"] }]
891
- }], ctorParameters: () => [{ type: FEnvironmentService }, { type: undefined, decorators: [{
892
- type: Inject,
893
- args: [F_DOCUMENTATION_COMPONENT]
894
- }] }, { type: i1.Router }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { items: [{
895
- type: ViewChildren,
896
- args: [FNavigationItemComponent]
897
- }], onDocumentClick: [{
898
- type: HostListener,
899
- args: ['click', ['$event']]
900
- }] } });
901
-
902
- class GetAbsoluteTopToContainerHandler {
903
- handle(request) {
904
- let element = request.element;
905
- let result = 0;
906
- while (element !== request.container) {
907
- if (!element)
908
- return NaN;
909
- result += element.offsetTop;
910
- element = element.offsetParent;
911
- }
912
- return result;
913
- }
914
- }
915
-
916
- class GetAbsoluteTopToContainerRequest {
917
- constructor(element, container) {
918
- this.element = element;
919
- this.container = container;
920
- }
921
- }
922
-
923
- class TableOfContentData {
924
- constructor(flat, tree) {
925
- this.flat = flat;
926
- this.tree = tree;
927
- }
928
- }
929
-
930
- class GetTableOfContentDataHandler {
931
- handle(request) {
932
- const flat = [];
933
- const tree = [];
934
- const stack = [];
935
- this.getNavigationSelectors(request.fMarkdownPage, request.tocRange).forEach((element) => {
936
- const tocItem = this.createItem(element);
937
- this.insertItemIntoTree(tocItem, tree, stack);
938
- flat.push(tocItem);
939
- });
940
- return new TableOfContentData(flat, tree);
941
- }
942
- getNavigationSelectors(fMarkdownPage, tocRange) {
943
- if (!tocRange || tocRange.start < 1 || tocRange.end > 6) {
944
- tocRange = { start: 1, end: 6 };
945
- }
946
- let selectors = [];
947
- for (let i = tocRange.start; i <= tocRange.end; i++) {
948
- selectors.push(`h${i}`);
949
- }
950
- return Array.from(fMarkdownPage.querySelectorAll(selectors.join(', ')));
951
- }
952
- createItem(element) {
953
- element.id = this.createNavigationId(element);
954
- return {
955
- hash: `#${element.id}`,
956
- title: element.innerHTML,
957
- element,
958
- children: []
959
- };
960
- }
961
- createNavigationId(element) {
962
- return element.innerHTML.toLowerCase().replaceAll(' ', '-');
963
- }
964
- getLevel(element) {
965
- return parseInt(element.tagName.substring(1));
966
- }
967
- insertItemIntoTree(tocItem, tree, stack) {
968
- while (stack.length > 0 && this.getLevel(stack[stack.length - 1].element) >= this.getLevel(tocItem.element)) {
969
- stack.pop();
970
- }
971
- if (stack.length === 0) {
972
- tree.push(tocItem);
973
- }
974
- else {
975
- stack[stack.length - 1].children.push(tocItem);
976
- }
977
- stack.push(tocItem);
978
- }
979
- }
980
-
981
- class GetTableOfContentDataRequest {
982
- constructor(fMarkdownPage, tocRange) {
983
- this.fMarkdownPage = fMarkdownPage;
984
- this.tocRange = tocRange;
985
- }
986
- }
987
-
988
- class CalculateHashFromScrollPositionHandler {
989
- constructor(scrollableContainer, fBrowser) {
990
- this.scrollableContainer = scrollableContainer;
991
- this.fBrowser = fBrowser;
992
- }
993
- handle(request) {
994
- let result;
995
- const containerScrollTop = this.getContainerScrollTop();
996
- const elementsWithTopPosition = this.calculateElementsTopPositions(request.tocData);
997
- if (elementsWithTopPosition.length) {
998
- if (this.isScrollAtBottom(containerScrollTop)) {
999
- result = elementsWithTopPosition[elementsWithTopPosition.length - 1].hash;
1000
- }
1001
- else {
1002
- result = this.findTargetHashByPosition(containerScrollTop, elementsWithTopPosition);
1003
- }
1004
- }
1005
- return result;
1006
- }
1007
- getContainerScrollTop() {
1008
- return this.scrollableContainer.scrollTop + this.getHeaderHeight();
1009
- }
1010
- getHeaderHeight() {
1011
- return parseInt(this.fBrowser.window.getComputedStyle(this.fBrowser.document.documentElement).getPropertyValue('--header-height'), 10);
1012
- }
1013
- calculateElementsTopPositions(items) {
1014
- return items.map((x) => {
1015
- return {
1016
- hash: x.hash,
1017
- top: this.getAbsoluteTopToContainer(x.element)
1018
- };
1019
- }).filter((x) => !Number.isNaN(x.top));
1020
- }
1021
- getAbsoluteTopToContainer(element) {
1022
- return new GetAbsoluteTopToContainerHandler().handle(new GetAbsoluteTopToContainerRequest(element, this.scrollableContainer));
1023
- }
1024
- isScrollAtBottom(containerScrollTop) {
1025
- return Math.abs(containerScrollTop - this.getHeaderHeight() + this.scrollableContainer.clientHeight - this.scrollableContainer.scrollHeight) < 1;
1026
- }
1027
- findTargetHashByPosition(containerScrollTop, elementsWithTopPosition) {
1028
- let result = elementsWithTopPosition[0].hash;
1029
- for (const { hash, top } of elementsWithTopPosition) {
1030
- if (top > containerScrollTop)
1031
- break;
1032
- result = hash;
1033
- }
1034
- return result;
1035
- }
1036
- }
1037
-
1038
- class CalculateHashFromScrollPositionRequest {
1039
- constructor(tocData) {
1040
- this.tocData = tocData;
1041
- }
1042
- }
1043
-
1044
- class ScrollToElementInContainer {
1045
- constructor(container) {
1046
- this.container = container;
1047
- }
1048
- handle(hash) {
1049
- this.container.scrollTo({
1050
- top: this.getScrollTo(this.getScrollToElement(hash)) - 64,
1051
- behavior: 'smooth'
1052
- });
1053
- }
1054
- getScrollToElement(hash) {
1055
- const element = this.container.querySelector(hash);
1056
- if (!element) {
1057
- throw new Error(`Element ${hash} not found`);
1058
- }
1059
- return element;
1060
- }
1061
- getScrollTo(element) {
1062
- return this.isFirstElementInContainer(element) ? 0 : this.calculateScrollTo(element);
1063
- }
1064
- isFirstElementInContainer(element) {
1065
- return element.parentElement.children[0] === element;
1066
- }
1067
- calculateScrollTo(element) {
1068
- return this.getElementTop(element) - this.getContainerTop() + this.container.scrollTop;
1069
- }
1070
- getElementTop(element) {
1071
- return element.getBoundingClientRect().top;
1072
- }
1073
- getContainerTop() {
1074
- return this.container.getBoundingClientRect().top;
1075
- }
1076
- }
1077
-
1078
- class FScrollableService {
1079
- get onToc$() {
1080
- return this.onTocChanged$.asObservable().pipe(map(() => this.tocData));
1081
- }
1082
- constructor(fEnvironmentService, fBrowser) {
1083
- this.fEnvironmentService = fEnvironmentService;
1084
- this.fBrowser = fBrowser;
1085
- this.tocData = new TableOfContentData([], []);
1086
- this.onTocChanged$ = new Subject();
1087
- this.onScrollSubscription$ = Subscription.EMPTY;
1088
- }
1089
- setContainer(fScrollableContainer) {
1090
- this.fScrollableContainer = fScrollableContainer;
1091
- this.onScrollSubscription$ = this.subscribeOnScroll();
1092
- }
1093
- subscribeOnScroll() {
1094
- return fromEvent(this.fScrollableContainer, 'scroll').pipe(debounceTime(100)).subscribe((event) => {
1095
- this.calculateHashAndActivate();
1096
- });
1097
- }
1098
- scrollTo(hash) {
1099
- if (!this.fScrollableContainer) {
1100
- throw new Error('Scrollable container is not set');
1101
- }
1102
- this.activateHash(hash);
1103
- new ScrollToElementInContainer(this.fScrollableContainer).handle(hash);
1104
- }
1105
- setOnPageNavigation(fMarkdownPage) {
1106
- this.tocData = new GetTableOfContentDataHandler().handle(new GetTableOfContentDataRequest(fMarkdownPage, this.fEnvironmentService.getToC().range));
1107
- this.calculateHashAndActivate();
1108
- }
1109
- calculateHashAndActivate() {
1110
- this.activateHash(this.calculateHashFromScrollPosition());
1111
- }
1112
- calculateHashFromScrollPosition() {
1113
- return new CalculateHashFromScrollPositionHandler(this.fScrollableContainer, this.fBrowser).handle(new CalculateHashFromScrollPositionRequest(this.tocData.flat));
1114
- }
1115
- activateHash(hash) {
1116
- this.tocData.flat.forEach(x => x.isActive = x.hash === hash);
1117
- this.onTocChanged$.next();
1118
- }
1119
- dispose() {
1120
- this.onScrollSubscription$.unsubscribe();
1121
- }
1122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FScrollableService, deps: [{ token: FEnvironmentService }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1123
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FScrollableService }); }
1124
- }
1125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FScrollableService, decorators: [{
1126
- type: Injectable
1127
- }], ctorParameters: () => [{ type: FEnvironmentService }, { type: i2.BrowserService }] });
1128
-
1129
- class FScrollableContainerComponent {
1130
- get hostElement() {
1131
- return this.elementRef.nativeElement;
1132
- }
1133
- constructor(elementRef, fScrollableService) {
1134
- this.elementRef = elementRef;
1135
- this.fScrollableService = fScrollableService;
1136
- }
1137
- ngOnInit() {
1138
- this.fScrollableService.setContainer(this.hostElement);
1139
- }
1140
- ngOnDestroy() {
1141
- this.fScrollableService.dispose();
1142
- }
1143
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FScrollableContainerComponent, deps: [{ token: i0.ElementRef }, { token: FScrollableService }], target: i0.ɵɵFactoryTarget.Component }); }
1144
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FScrollableContainerComponent, isStandalone: true, selector: "f-scrollable-container", providers: [
1145
- FScrollableService
1146
- ], ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{position:relative;width:100%;height:100%;overflow:hidden;overflow-y:auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1147
- }
1148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FScrollableContainerComponent, decorators: [{
1149
- type: Component,
1150
- args: [{ selector: 'f-scrollable-container', providers: [
1151
- FScrollableService
1152
- ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{position:relative;width:100%;height:100%;overflow:hidden;overflow-y:auto}\n"] }]
1153
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: FScrollableService }] });
1154
-
1155
- class FDocumentationComponent {
1156
- constructor(fPopoverService, changeDetectorRef) {
1157
- this.fPopoverService = fPopoverService;
1158
- this.changeDetectorRef = changeDetectorRef;
1159
- this.subscriptions$ = new Subscription();
1160
- this.isNavigationVisible = false;
1161
- this.popoverMessage = null;
1162
- }
1163
- ngOnInit() {
1164
- this.subscriptions$.add(this.subscribeOnPopover());
1165
- }
1166
- subscribeOnPopover() {
1167
- return this.fPopoverService.popover$.subscribe((x) => {
1168
- this.popoverMessage = x;
1169
- this.changeDetectorRef.markForCheck();
1170
- });
1171
- }
1172
- onToggleNavigation(value) {
1173
- this.isNavigationVisible = value;
1174
- this.changeDetectorRef.markForCheck();
814
+ onDocumentClick(event) {
815
+ this.injector.get(HandleNavigationLinksHandler).handle(new HandleNavigationLinksRequest(event));
1175
816
  }
1176
817
  ngOnDestroy() {
1177
- this.fPopoverService.dispose();
1178
- this.subscriptions$.unsubscribe();
818
+ this.subscription.unsubscribe();
1179
819
  }
1180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FDocumentationComponent, deps: [{ token: FPopoverService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FDocumentationComponent, isStandalone: true, selector: "f-documentation", providers: [
1182
- FEnvironmentService,
1183
- FPopoverService,
1184
- { provide: F_DOCUMENTATION_COMPONENT, useExisting: FDocumentationComponent }
1185
- ], ngImport: i0, template: "<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible\" (click)=\"onToggleNavigation(false)\"></div>\n<f-navigation-panel [class.visible]=\"isNavigationVisible\"></f-navigation-panel>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n@if (popoverMessage) {\n <div class=\"popover\">{{ popoverMessage }}</div>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:10px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"], dependencies: [{ kind: "component", type: FNavigationPanelComponent, selector: "f-navigation-panel" }, { kind: "component", type: FHeaderComponent, selector: "f-header" }, { kind: "component", type: FScrollableContainerComponent, selector: "f-scrollable-container" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
820
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationPanelComponent, deps: [{ token: FDocumentationEnvironmentService }, { token: F_DOCUMENTATION_COMPONENT }, { token: i1.Router }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
821
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FNavigationPanelComponent, isStandalone: true, selector: "f-navigation-panel", host: { listeners: { "click": "onDocumentClick($event)" } }, providers: [
822
+ HandleNavigationLinksHandler
823
+ ], viewQueries: [{ propertyName: "items", predicate: FNavigationItemComponent, descendants: true }], ngImport: i0, template: "<a f-navigation-header routerLink></a>\n\n@for (group of navigation; track group) {\n <f-navigation-group [title]=\"group.text\">\n @for (item of group.items; track item.link) {\n <a f-navigation-item [href]=\"item.link\" [class.active]=\"item.link === value\">\n <div class=\"text-ellipsis\">{{ item.text }}</div>\n @if (item.badge) {\n <span f-badge [text]=\"item.badge.text\" [type]=\"item.badge.type\"></span>\n }\n </a>\n }\n </f-navigation-group>\n}\n", styles: [":host{height:100%;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 var(--navigation-panel-padding);background-color:var(--navigation-panel-background);overflow:hidden;overflow-y:auto;position:fixed;width:var(--navigation-panel-width);top:0;left:calc(-1 * var(--navigation-panel-width));transition:transform .2s ease-in-out;z-index:var(--z-index-navigation);transform:none}@media (min-width: 960px){:host{position:unset;display:flex;min-width:var(--navigation-panel-width);width:fit-content;transform:none!important}}@media (min-width: 1440px){:host{min-width:calc((100% - (var(--layout-max-width) - 64px)) / 3 + var(--navigation-panel-width) - var(--navigation-panel-padding))}}:host.visible{transform:translate(var(--navigation-panel-width))}\n"], dependencies: [{ kind: "component", type: FNavigationHeaderComponent, selector: "a[f-navigation-header]" }, { kind: "component", type: FNavigationItemComponent, selector: "a[f-navigation-item]" }, { kind: "component", type: FNavigationGroupComponent, selector: "f-navigation-group", inputs: ["title"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: FBadgeComponent, selector: "span[f-badge]", inputs: ["text", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1186
824
  }
1187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FDocumentationComponent, decorators: [{
825
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNavigationPanelComponent, decorators: [{
1188
826
  type: Component,
1189
- args: [{ selector: 'f-documentation', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1190
- FEnvironmentService,
1191
- FPopoverService,
1192
- { provide: F_DOCUMENTATION_COMPONENT, useExisting: FDocumentationComponent }
827
+ args: [{ selector: 'f-navigation-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
828
+ HandleNavigationLinksHandler
1193
829
  ], imports: [
1194
- FNavigationPanelComponent,
1195
- FHeaderComponent,
1196
- FScrollableContainerComponent,
1197
- RouterOutlet
1198
- ], template: "<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible\" (click)=\"onToggleNavigation(false)\"></div>\n<f-navigation-panel [class.visible]=\"isNavigationVisible\"></f-navigation-panel>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n@if (popoverMessage) {\n <div class=\"popover\">{{ popoverMessage }}</div>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:10px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"] }]
1199
- }], ctorParameters: () => [{ type: FPopoverService }, { type: i0.ChangeDetectorRef }] });
1200
-
1201
- var index$1 = /*#__PURE__*/Object.freeze({
1202
- __proto__: null,
1203
- CookiePopup: CookiePopup,
1204
- FBadgeComponent: FBadgeComponent,
1205
- FCheckboxComponent: FCheckboxComponent,
1206
- FDocumentationComponent: FDocumentationComponent,
1207
- FHamburgerButtonComponent: FHamburgerButtonComponent,
1208
- FHeaderComponent: FHeaderComponent,
1209
- FHeaderMenuComponent: FHeaderMenuComponent,
1210
- FPreviewComponent: FPreviewComponent,
1211
- FSocialLinksComponent: FSocialLinksComponent,
1212
- FThemeButtonComponent: FThemeButtonComponent,
1213
- FVersionComponent: FVersionComponent,
1214
- F_DOCUMENTATION_COMPONENT: F_DOCUMENTATION_COMPONENT
1215
- });
830
+ FNavigationHeaderComponent,
831
+ FNavigationItemComponent,
832
+ FNavigationGroupComponent,
833
+ RouterLink,
834
+ FBadgeComponent,
835
+ ], template: "<a f-navigation-header routerLink></a>\n\n@for (group of navigation; track group) {\n <f-navigation-group [title]=\"group.text\">\n @for (item of group.items; track item.link) {\n <a f-navigation-item [href]=\"item.link\" [class.active]=\"item.link === value\">\n <div class=\"text-ellipsis\">{{ item.text }}</div>\n @if (item.badge) {\n <span f-badge [text]=\"item.badge.text\" [type]=\"item.badge.type\"></span>\n }\n </a>\n }\n </f-navigation-group>\n}\n", styles: [":host{height:100%;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:0 var(--navigation-panel-padding);background-color:var(--navigation-panel-background);overflow:hidden;overflow-y:auto;position:fixed;width:var(--navigation-panel-width);top:0;left:calc(-1 * var(--navigation-panel-width));transition:transform .2s ease-in-out;z-index:var(--z-index-navigation);transform:none}@media (min-width: 960px){:host{position:unset;display:flex;min-width:var(--navigation-panel-width);width:fit-content;transform:none!important}}@media (min-width: 1440px){:host{min-width:calc((100% - (var(--layout-max-width) - 64px)) / 3 + var(--navigation-panel-width) - var(--navigation-panel-padding))}}:host.visible{transform:translate(var(--navigation-panel-width))}\n"] }]
836
+ }], ctorParameters: () => [{ type: FDocumentationEnvironmentService }, { type: undefined, decorators: [{
837
+ type: Inject,
838
+ args: [F_DOCUMENTATION_COMPONENT]
839
+ }] }, { type: i1.Router }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }], propDecorators: { items: [{
840
+ type: ViewChildren,
841
+ args: [FNavigationItemComponent]
842
+ }], onDocumentClick: [{
843
+ type: HostListener,
844
+ args: ['click', ['$event']]
845
+ }] } });
1216
846
 
1217
847
  class HandleDynamicComponentsHandler {
848
+ fEnvironmentService;
849
+ injector;
850
+ componentRefs = [];
1218
851
  constructor(fEnvironmentService, injector) {
1219
852
  this.fEnvironmentService = fEnvironmentService;
1220
853
  this.injector = injector;
1221
- this.componentRefs = [];
1222
854
  }
1223
855
  handle(request) {
1224
856
  this.dispose();
@@ -1305,14 +937,15 @@ class HandleDynamicComponentsHandler {
1305
937
  this.componentRefs.forEach((ref) => ref.destroy());
1306
938
  this.componentRefs = [];
1307
939
  }
1308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleDynamicComponentsHandler, deps: [{ token: FEnvironmentService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1309
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleDynamicComponentsHandler }); }
940
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleDynamicComponentsHandler, deps: [{ token: FDocumentationEnvironmentService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
941
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleDynamicComponentsHandler });
1310
942
  }
1311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleDynamicComponentsHandler, decorators: [{
943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleDynamicComponentsHandler, decorators: [{
1312
944
  type: Injectable
1313
- }], ctorParameters: () => [{ type: FEnvironmentService }, { type: i0.Injector }] });
945
+ }], ctorParameters: () => [{ type: FDocumentationEnvironmentService }, { type: i0.Injector }] });
1314
946
 
1315
947
  class HandleDynamicComponentsRequest {
948
+ hostElement;
1316
949
  constructor(hostElement) {
1317
950
  this.hostElement = hostElement;
1318
951
  }
@@ -1403,6 +1036,7 @@ const RULE$1 = {
1403
1036
  };
1404
1037
 
1405
1038
  class MarkCodeFocusedBlocksPostProcessor {
1039
+ fBrowser;
1406
1040
  constructor(fBrowser) {
1407
1041
  this.fBrowser = fBrowser;
1408
1042
  }
@@ -1454,6 +1088,8 @@ const RULE = {
1454
1088
  };
1455
1089
 
1456
1090
  class HighlightService {
1091
+ fBrowser;
1092
+ Prism;
1457
1093
  constructor(fBrowser) {
1458
1094
  this.fBrowser = fBrowser;
1459
1095
  }
@@ -1492,18 +1128,21 @@ class HighlightService {
1492
1128
  element.querySelectorAll('pre code:not([class*="language-"])').forEach((x) => x.classList.add('language-none'));
1493
1129
  return of(element);
1494
1130
  }
1495
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightService, deps: [{ token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1496
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightService }); }
1131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightService, deps: [{ token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable });
1132
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightService });
1497
1133
  }
1498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightService, decorators: [{
1134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightService, decorators: [{
1499
1135
  type: Injectable
1500
1136
  }], ctorParameters: () => [{ type: i2.BrowserService }] });
1501
1137
 
1502
1138
  class FCodeViewHandler {
1139
+ element;
1140
+ injector;
1141
+ subscriptions$ = new Subscription();
1142
+ fDocument;
1503
1143
  constructor(element, injector) {
1504
1144
  this.element = element;
1505
1145
  this.injector = injector;
1506
- this.subscriptions$ = new Subscription();
1507
1146
  this.fDocument = this.injector.get(DOCUMENT);
1508
1147
  this.initialize();
1509
1148
  }
@@ -1554,6 +1193,7 @@ class FCodeViewHandler {
1554
1193
  }
1555
1194
 
1556
1195
  class FExampleViewHandler {
1196
+ element;
1557
1197
  constructor(element) {
1558
1198
  this.element = element;
1559
1199
  }
@@ -1605,6 +1245,9 @@ class FAsyncCodeViewHandler extends FCodeViewHandler {
1605
1245
  }
1606
1246
 
1607
1247
  class FCodeGroupBodyHandler {
1248
+ element;
1249
+ injector;
1250
+ fContainerHandlers;
1608
1251
  constructor(element, injector) {
1609
1252
  this.element = element;
1610
1253
  this.injector = injector;
@@ -1647,6 +1290,10 @@ class FCodeGroupBodyHandler {
1647
1290
  }
1648
1291
 
1649
1292
  class FCodeGroupHandler {
1293
+ element;
1294
+ injector;
1295
+ subscriptions$ = new Subscription();
1296
+ body;
1650
1297
  get tabs() {
1651
1298
  return Array.from(this.element.querySelectorAll('.f-tab-button'));
1652
1299
  }
@@ -1660,7 +1307,6 @@ class FCodeGroupHandler {
1660
1307
  constructor(element, injector) {
1661
1308
  this.element = element;
1662
1309
  this.injector = injector;
1663
- this.subscriptions$ = new Subscription();
1664
1310
  this.body = new FCodeGroupBodyHandler(this.element, this.injector);
1665
1311
  this.initialize();
1666
1312
  }
@@ -1696,10 +1342,11 @@ class FCodeGroupHandler {
1696
1342
  }
1697
1343
 
1698
1344
  class HandleParsedContainersHandler {
1345
+ injector;
1346
+ fCodeGroupHandler = [];
1347
+ fCodeViewHandler = [];
1699
1348
  constructor(injector) {
1700
1349
  this.injector = injector;
1701
- this.fCodeGroupHandler = [];
1702
- this.fCodeViewHandler = [];
1703
1350
  }
1704
1351
  handle(request) {
1705
1352
  this.dispose();
@@ -1719,14 +1366,15 @@ class HandleParsedContainersHandler {
1719
1366
  this.fCodeGroupHandler.forEach((x) => x.dispose?.());
1720
1367
  this.fCodeViewHandler.forEach((x) => x.dispose?.());
1721
1368
  }
1722
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleParsedContainersHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1723
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleParsedContainersHandler }); }
1369
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleParsedContainersHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
1370
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleParsedContainersHandler });
1724
1371
  }
1725
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleParsedContainersHandler, decorators: [{
1372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HandleParsedContainersHandler, decorators: [{
1726
1373
  type: Injectable
1727
1374
  }], ctorParameters: () => [{ type: i0.Injector }] });
1728
1375
 
1729
1376
  class HandleParsedContainersRequest {
1377
+ hostElement;
1730
1378
  constructor(hostElement) {
1731
1379
  this.hostElement = hostElement;
1732
1380
  }
@@ -1937,6 +1585,7 @@ class ParseExampleGroup {
1937
1585
  }
1938
1586
 
1939
1587
  class ParsePreviewGroup {
1588
+ navigation;
1940
1589
  constructor(navigation) {
1941
1590
  this.navigation = navigation;
1942
1591
  }
@@ -1983,12 +1632,16 @@ class ParsePreviewGroup {
1983
1632
  }
1984
1633
 
1985
1634
  class MarkdownService {
1635
+ httpClient;
1636
+ domSanitizer;
1637
+ fEnvironment;
1638
+ router;
1639
+ markdown = new MarkdownIt({ html: true, linkify: true });
1986
1640
  constructor(httpClient, domSanitizer, fEnvironment, router) {
1987
1641
  this.httpClient = httpClient;
1988
1642
  this.domSanitizer = domSanitizer;
1989
1643
  this.fEnvironment = fEnvironment;
1990
1644
  this.router = router;
1991
- this.markdown = new MarkdownIt({ html: true, linkify: true });
1992
1645
  this.markdown
1993
1646
  .use((x) => new ParseCodeView().render(x))
1994
1647
  .use(...new ParseAlerts().render(EMarkdownContainerType.ALERT_TIP, this.markdown))
@@ -2018,26 +1671,268 @@ class MarkdownService {
2018
1671
  return match;
2019
1672
  });
2020
1673
  }
2021
- isExternalLink(href) {
2022
- return href.startsWith('www') || href.startsWith('http');
1674
+ isExternalLink(href) {
1675
+ return href.startsWith('www') || href.startsWith('http');
1676
+ }
1677
+ cleanupEmptyParagraphs(html) {
1678
+ return html.replace(/<p>\s*<\/p>/g, '');
1679
+ }
1680
+ cleanupWasteParagraphFromExampleView(html) {
1681
+ return html.replace(/<div class="f-code-group-body">\s*<p>[^<]*<\/p>/g, '<div class="f-code-group-body">');
1682
+ }
1683
+ cleanupWasteParagraphFromPreviewGroup(html) {
1684
+ return html.replace(/<p>(\[[^\]]+\](\s*\[[^\]]+\])*)<\/p>/g, '');
1685
+ }
1686
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownService, deps: [{ token: i1$1.HttpClient }, { token: i2$1.DomSanitizer }, { token: FDocumentationEnvironmentService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
1687
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownService });
1688
+ }
1689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownService, decorators: [{
1690
+ type: Injectable
1691
+ }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2$1.DomSanitizer }, { type: FDocumentationEnvironmentService }, { type: i1.Router }] });
1692
+
1693
+ class GetAbsoluteTopToContainerHandler {
1694
+ handle(request) {
1695
+ let element = request.element;
1696
+ let result = 0;
1697
+ while (element !== request.container) {
1698
+ if (!element)
1699
+ return NaN;
1700
+ result += element.offsetTop;
1701
+ element = element.offsetParent;
1702
+ }
1703
+ return result;
1704
+ }
1705
+ }
1706
+
1707
+ class GetAbsoluteTopToContainerRequest {
1708
+ element;
1709
+ container;
1710
+ constructor(element, container) {
1711
+ this.element = element;
1712
+ this.container = container;
1713
+ }
1714
+ }
1715
+
1716
+ class TableOfContentData {
1717
+ flat;
1718
+ tree;
1719
+ constructor(flat, tree) {
1720
+ this.flat = flat;
1721
+ this.tree = tree;
1722
+ }
1723
+ }
1724
+
1725
+ class GetTableOfContentDataHandler {
1726
+ handle(request) {
1727
+ const flat = [];
1728
+ const tree = [];
1729
+ const stack = [];
1730
+ this.getNavigationSelectors(request.fMarkdownPage, request.tocRange).forEach((element) => {
1731
+ const tocItem = this.createItem(element);
1732
+ this.insertItemIntoTree(tocItem, tree, stack);
1733
+ flat.push(tocItem);
1734
+ });
1735
+ return new TableOfContentData(flat, tree);
1736
+ }
1737
+ getNavigationSelectors(fMarkdownPage, tocRange) {
1738
+ if (!tocRange || tocRange.start < 1 || tocRange.end > 6) {
1739
+ tocRange = { start: 1, end: 6 };
1740
+ }
1741
+ let selectors = [];
1742
+ for (let i = tocRange.start; i <= tocRange.end; i++) {
1743
+ selectors.push(`h${i}`);
1744
+ }
1745
+ return Array.from(fMarkdownPage.querySelectorAll(selectors.join(', ')));
1746
+ }
1747
+ createItem(element) {
1748
+ element.id = this.createNavigationId(element);
1749
+ return {
1750
+ hash: `#${element.id}`,
1751
+ title: element.innerHTML,
1752
+ element,
1753
+ children: []
1754
+ };
1755
+ }
1756
+ createNavigationId(element) {
1757
+ return element.innerHTML.toLowerCase().replaceAll(' ', '-');
1758
+ }
1759
+ getLevel(element) {
1760
+ return parseInt(element.tagName.substring(1));
1761
+ }
1762
+ insertItemIntoTree(tocItem, tree, stack) {
1763
+ while (stack.length > 0 && this.getLevel(stack[stack.length - 1].element) >= this.getLevel(tocItem.element)) {
1764
+ stack.pop();
1765
+ }
1766
+ if (stack.length === 0) {
1767
+ tree.push(tocItem);
1768
+ }
1769
+ else {
1770
+ stack[stack.length - 1].children.push(tocItem);
1771
+ }
1772
+ stack.push(tocItem);
1773
+ }
1774
+ }
1775
+
1776
+ class GetTableOfContentDataRequest {
1777
+ fMarkdownPage;
1778
+ tocRange;
1779
+ constructor(fMarkdownPage, tocRange) {
1780
+ this.fMarkdownPage = fMarkdownPage;
1781
+ this.tocRange = tocRange;
1782
+ }
1783
+ }
1784
+
1785
+ class CalculateHashFromScrollPositionHandler {
1786
+ scrollableContainer;
1787
+ fBrowser;
1788
+ constructor(scrollableContainer, fBrowser) {
1789
+ this.scrollableContainer = scrollableContainer;
1790
+ this.fBrowser = fBrowser;
1791
+ }
1792
+ handle(request) {
1793
+ let result;
1794
+ const containerScrollTop = this.getContainerScrollTop();
1795
+ const elementsWithTopPosition = this.calculateElementsTopPositions(request.tocData);
1796
+ if (elementsWithTopPosition.length) {
1797
+ if (this.isScrollAtBottom(containerScrollTop)) {
1798
+ result = elementsWithTopPosition[elementsWithTopPosition.length - 1].hash;
1799
+ }
1800
+ else {
1801
+ result = this.findTargetHashByPosition(containerScrollTop, elementsWithTopPosition);
1802
+ }
1803
+ }
1804
+ return result;
1805
+ }
1806
+ getContainerScrollTop() {
1807
+ return this.scrollableContainer.scrollTop + this.getHeaderHeight();
1808
+ }
1809
+ getHeaderHeight() {
1810
+ return parseInt(this.fBrowser.window.getComputedStyle(this.fBrowser.document.documentElement).getPropertyValue('--header-height'), 10);
1811
+ }
1812
+ calculateElementsTopPositions(items) {
1813
+ return items.map((x) => {
1814
+ return {
1815
+ hash: x.hash,
1816
+ top: this.getAbsoluteTopToContainer(x.element)
1817
+ };
1818
+ }).filter((x) => !Number.isNaN(x.top));
1819
+ }
1820
+ getAbsoluteTopToContainer(element) {
1821
+ return new GetAbsoluteTopToContainerHandler().handle(new GetAbsoluteTopToContainerRequest(element, this.scrollableContainer));
1822
+ }
1823
+ isScrollAtBottom(containerScrollTop) {
1824
+ return Math.abs(containerScrollTop - this.getHeaderHeight() + this.scrollableContainer.clientHeight - this.scrollableContainer.scrollHeight) < 1;
1825
+ }
1826
+ findTargetHashByPosition(containerScrollTop, elementsWithTopPosition) {
1827
+ let result = elementsWithTopPosition[0].hash;
1828
+ for (const { hash, top } of elementsWithTopPosition) {
1829
+ if (top > containerScrollTop)
1830
+ break;
1831
+ result = hash;
1832
+ }
1833
+ return result;
1834
+ }
1835
+ }
1836
+
1837
+ class CalculateHashFromScrollPositionRequest {
1838
+ tocData;
1839
+ constructor(tocData) {
1840
+ this.tocData = tocData;
1841
+ }
1842
+ }
1843
+
1844
+ class ScrollToElementInContainer {
1845
+ container;
1846
+ constructor(container) {
1847
+ this.container = container;
1848
+ }
1849
+ handle(hash) {
1850
+ this.container.scrollTo({
1851
+ top: this.getScrollTo(this.getScrollToElement(hash)) - 64,
1852
+ behavior: 'smooth'
1853
+ });
1854
+ }
1855
+ getScrollToElement(hash) {
1856
+ const element = this.container.querySelector(hash);
1857
+ if (!element) {
1858
+ throw new Error(`Element ${hash} not found`);
1859
+ }
1860
+ return element;
1861
+ }
1862
+ getScrollTo(element) {
1863
+ return this.isFirstElementInContainer(element) ? 0 : this.calculateScrollTo(element);
1864
+ }
1865
+ isFirstElementInContainer(element) {
1866
+ return element.parentElement.children[0] === element;
1867
+ }
1868
+ calculateScrollTo(element) {
1869
+ return this.getElementTop(element) - this.getContainerTop() + this.container.scrollTop;
1870
+ }
1871
+ getElementTop(element) {
1872
+ return element.getBoundingClientRect().top;
1873
+ }
1874
+ getContainerTop() {
1875
+ return this.container.getBoundingClientRect().top;
1876
+ }
1877
+ }
1878
+
1879
+ class FScrollableService {
1880
+ fEnvironmentService;
1881
+ fBrowser;
1882
+ fScrollableContainer;
1883
+ tocData = new TableOfContentData([], []);
1884
+ onTocChanged$ = new Subject();
1885
+ get onToc$() {
1886
+ return this.onTocChanged$.asObservable().pipe(map(() => this.tocData));
1887
+ }
1888
+ onScrollSubscription$ = Subscription.EMPTY;
1889
+ constructor(fEnvironmentService, fBrowser) {
1890
+ this.fEnvironmentService = fEnvironmentService;
1891
+ this.fBrowser = fBrowser;
1892
+ }
1893
+ setContainer(fScrollableContainer) {
1894
+ this.fScrollableContainer = fScrollableContainer;
1895
+ this.onScrollSubscription$ = this.subscribeOnScroll();
1896
+ }
1897
+ subscribeOnScroll() {
1898
+ return fromEvent(this.fScrollableContainer, 'scroll').pipe(debounceTime(100)).subscribe((event) => {
1899
+ this.calculateHashAndActivate();
1900
+ });
1901
+ }
1902
+ scrollTo(hash) {
1903
+ if (!this.fScrollableContainer) {
1904
+ throw new Error('Scrollable container is not set');
1905
+ }
1906
+ this.activateHash(hash);
1907
+ new ScrollToElementInContainer(this.fScrollableContainer).handle(hash);
1908
+ }
1909
+ setOnPageNavigation(fMarkdownPage) {
1910
+ this.tocData = new GetTableOfContentDataHandler().handle(new GetTableOfContentDataRequest(fMarkdownPage, this.fEnvironmentService.getToC().range));
1911
+ this.calculateHashAndActivate();
2023
1912
  }
2024
- cleanupEmptyParagraphs(html) {
2025
- return html.replace(/<p>\s*<\/p>/g, '');
1913
+ calculateHashAndActivate() {
1914
+ this.activateHash(this.calculateHashFromScrollPosition());
2026
1915
  }
2027
- cleanupWasteParagraphFromExampleView(html) {
2028
- return html.replace(/<div class="f-code-group-body">\s*<p>[^<]*<\/p>/g, '<div class="f-code-group-body">');
1916
+ calculateHashFromScrollPosition() {
1917
+ return new CalculateHashFromScrollPositionHandler(this.fScrollableContainer, this.fBrowser).handle(new CalculateHashFromScrollPositionRequest(this.tocData.flat));
2029
1918
  }
2030
- cleanupWasteParagraphFromPreviewGroup(html) {
2031
- return html.replace(/<p>(\[[^\]]+\](\s*\[[^\]]+\])*)<\/p>/g, '');
1919
+ activateHash(hash) {
1920
+ this.tocData.flat.forEach(x => x.isActive = x.hash === hash);
1921
+ this.onTocChanged$.next();
1922
+ }
1923
+ dispose() {
1924
+ this.onScrollSubscription$.unsubscribe();
2032
1925
  }
2033
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownService, deps: [{ token: i1$1.HttpClient }, { token: i2$1.DomSanitizer }, { token: FEnvironmentService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
2034
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownService }); }
1926
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FScrollableService, deps: [{ token: FDocumentationEnvironmentService }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Injectable });
1927
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FScrollableService });
2035
1928
  }
2036
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownService, decorators: [{
1929
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FScrollableService, decorators: [{
2037
1930
  type: Injectable
2038
- }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2$1.DomSanitizer }, { type: FEnvironmentService }, { type: i1.Router }] });
1931
+ }], ctorParameters: () => [{ type: FDocumentationEnvironmentService }, { type: i2.BrowserService }] });
2039
1932
 
2040
1933
  class GetPreviousNextPageNavigationResponse {
1934
+ previousLink;
1935
+ nextLink;
2041
1936
  constructor(previousLink, nextLink) {
2042
1937
  this.previousLink = previousLink;
2043
1938
  this.nextLink = nextLink;
@@ -2045,6 +1940,7 @@ class GetPreviousNextPageNavigationResponse {
2045
1940
  }
2046
1941
 
2047
1942
  class GetPreviousNextPageNavigationHandler {
1943
+ fEnvironmentService;
2048
1944
  constructor(fEnvironmentService) {
2049
1945
  this.fEnvironmentService = fEnvironmentService;
2050
1946
  }
@@ -2080,25 +1976,28 @@ class GetPreviousNextPageNavigationHandler {
2080
1976
  }
2081
1977
 
2082
1978
  class GetPreviousNextPageNavigationRequest {
1979
+ currentLink;
2083
1980
  constructor(currentLink) {
2084
1981
  this.currentLink = currentLink;
2085
1982
  }
2086
1983
  }
2087
1984
 
2088
1985
  class FFooterEditInformationComponent {
2089
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterEditInformationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2090
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FFooterEditInformationComponent, isStandalone: true, selector: "f-footer-edit-information", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{padding-bottom:18px}@media (min-width: 640px){:host{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1986
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterEditInformationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1987
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FFooterEditInformationComponent, isStandalone: true, selector: "f-footer-edit-information", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{padding-bottom:18px}@media (min-width: 640px){:host{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2091
1988
  }
2092
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterEditInformationComponent, decorators: [{
1989
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterEditInformationComponent, decorators: [{
2093
1990
  type: Component,
2094
1991
  args: [{ selector: 'f-footer-edit-information', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-content></ng-content>\n", styles: [":host{padding-bottom:18px}@media (min-width: 640px){:host{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}\n"] }]
2095
1992
  }] });
2096
1993
 
2097
1994
  class FFooterNavigationButtonComponent {
2098
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterNavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2099
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FFooterNavigationButtonComponent, isStandalone: true, selector: "a[f-footer-navigation-button]", inputs: { description: "description", link: "link" }, ngImport: i0, template: "<span class=\"description\">{{ description }}</span>\n<span class=\"page-title\">{{ link.text }}</span>\n", styles: [":host{display:block;border:1px solid var(--divider-color);border-radius:2px;padding:12px 16px;flex:1;max-width:50%;min-width:260px;text-decoration:none!important;cursor:pointer;pointer-events:all}:host:hover{border-color:var(--dark-divider-color)}:host:active{border-color:var(--primary-1)}:host.next{margin-left:auto;text-align:right}:host .description{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);pointer-events:none}:host .page-title{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--primary-1);pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1995
+ description;
1996
+ link;
1997
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterNavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1998
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FFooterNavigationButtonComponent, isStandalone: true, selector: "a[f-footer-navigation-button]", inputs: { description: "description", link: "link" }, ngImport: i0, template: "<span class=\"description\">{{ description }}</span>\n<span class=\"page-title\">{{ link.text }}</span>\n", styles: [":host{display:block;border:1px solid var(--divider-color);border-radius:2px;padding:12px 16px;flex:1;max-width:50%;min-width:260px;text-decoration:none!important;cursor:pointer;pointer-events:all}:host:hover{border-color:var(--dark-divider-color)}:host:active{border-color:var(--primary-1)}:host.next{margin-left:auto;text-align:right}:host .description{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);pointer-events:none}:host .page-title{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--primary-1);pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2100
1999
  }
2101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterNavigationButtonComponent, decorators: [{
2000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterNavigationButtonComponent, decorators: [{
2102
2001
  type: Component,
2103
2002
  args: [{ selector: 'a[f-footer-navigation-button]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<span class=\"description\">{{ description }}</span>\n<span class=\"page-title\">{{ link.text }}</span>\n", styles: [":host{display:block;border:1px solid var(--divider-color);border-radius:2px;padding:12px 16px;flex:1;max-width:50%;min-width:260px;text-decoration:none!important;cursor:pointer;pointer-events:all}:host:hover{border-color:var(--dark-divider-color)}:host:active{border-color:var(--primary-1)}:host.next{margin-left:auto;text-align:right}:host .description{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);pointer-events:none}:host .page-title{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--primary-1);pointer-events:none}\n"] }]
2104
2003
  }], propDecorators: { description: [{
@@ -2110,40 +2009,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2110
2009
  }] } });
2111
2010
 
2112
2011
  class FFooterNavigationComponent {
2113
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FFooterNavigationComponent, isStandalone: true, selector: "nav[f-footer-navigation]", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{border-top:1px solid var(--divider-color);padding-top:24px;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2012
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2013
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FFooterNavigationComponent, isStandalone: true, selector: "nav[f-footer-navigation]", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{border-top:1px solid var(--divider-color);padding-top:24px;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2115
2014
  }
2116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterNavigationComponent, decorators: [{
2015
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterNavigationComponent, decorators: [{
2117
2016
  type: Component,
2118
2017
  args: [{ selector: 'nav[f-footer-navigation]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-content></ng-content>\n", styles: [":host{border-top:1px solid var(--divider-color);padding-top:24px;display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;gap:16px}\n"] }]
2119
2018
  }] });
2120
2019
 
2121
2020
  class FFooterEditLinkComponent {
2122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterEditLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2123
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FFooterEditLinkComponent, isStandalone: true, selector: "a[f-footer-edit-link]", ngImport: i0, template: "<span class=\"edit-link-icon f-icon edit\"></span>\n<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-1);cursor:pointer}:host .edit-link-icon{margin-right:8px;width:14px;height:14px;color:inherit}:host:hover{color:var(--primary-2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2021
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterEditLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2022
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FFooterEditLinkComponent, isStandalone: true, selector: "a[f-footer-edit-link]", ngImport: i0, template: "<span class=\"edit-link-icon f-icon edit\"></span>\n<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-1);cursor:pointer}:host .edit-link-icon{margin-right:8px;width:14px;height:14px;color:inherit}:host:hover{color:var(--primary-2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2124
2023
  }
2125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterEditLinkComponent, decorators: [{
2024
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterEditLinkComponent, decorators: [{
2126
2025
  type: Component,
2127
2026
  args: [{ selector: 'a[f-footer-edit-link]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<span class=\"edit-link-icon f-icon edit\"></span>\n<ng-content></ng-content>\n", styles: [":host{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--primary-1);cursor:pointer}:host .edit-link-icon{margin-right:8px;width:14px;height:14px;color:inherit}:host:hover{color:var(--primary-2)}\n"] }]
2128
2027
  }] });
2129
2028
 
2130
2029
  class FFooterLastUpdatedComponent {
2131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterLastUpdatedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FFooterLastUpdatedComponent, isStandalone: true, selector: "f-footer-last-updated", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{line-height:32px;font-size:14px;font-weight:500}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2030
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterLastUpdatedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2031
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FFooterLastUpdatedComponent, isStandalone: true, selector: "f-footer-last-updated", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{line-height:32px;font-size:14px;font-weight:500}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2133
2032
  }
2134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FFooterLastUpdatedComponent, decorators: [{
2033
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFooterLastUpdatedComponent, decorators: [{
2135
2034
  type: Component,
2136
2035
  args: [{ selector: 'f-footer-last-updated', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-content></ng-content>\n", styles: [":host{line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{line-height:32px;font-size:14px;font-weight:500}}\n"] }]
2137
2036
  }] });
2138
2037
 
2139
2038
  class FMarkdownFooterComponent {
2039
+ injector;
2040
+ fEnvironmentService;
2041
+ router;
2042
+ changeDetectorRef;
2043
+ subscriptions$ = new Subscription();
2044
+ navigation = {};
2045
+ editLink;
2046
+ previousLink;
2047
+ nextLink;
2140
2048
  constructor(injector, fEnvironmentService, router, changeDetectorRef) {
2141
2049
  this.injector = injector;
2142
2050
  this.fEnvironmentService = fEnvironmentService;
2143
2051
  this.router = router;
2144
2052
  this.changeDetectorRef = changeDetectorRef;
2145
- this.subscriptions$ = new Subscription();
2146
- this.navigation = {};
2147
2053
  }
2148
2054
  ngOnInit() {
2149
2055
  this.subscriptions$.add(this.subscribeOnRouteChanges());
@@ -2188,10 +2094,10 @@ class FMarkdownFooterComponent {
2188
2094
  ngOnDestroy() {
2189
2095
  this.subscriptions$.unsubscribe();
2190
2096
  }
2191
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMarkdownFooterComponent, deps: [{ token: i0.Injector }, { token: FEnvironmentService }, { token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FMarkdownFooterComponent, isStandalone: true, selector: "footer [f-markdown-footer]", host: { listeners: { "click": "onDocumentClick($event)" } }, ngImport: i0, template: "@if (editLink) {\n <f-footer-edit-information>\n <a f-footer-edit-link [href]=\"editLink\">\n {{ navigation.editLink?.text || 'Edit this page on GitHub' }}\n </a>\n\n <!-- <f-footer-last-updated>-->\n <!-- Last updated: <span>{{ lastUpdated.datetime }}</span>-->\n <!-- </f-footer-last-updated>-->\n </f-footer-edit-information>\n}\n\n@if (previousLink || nextLink) {\n <nav f-footer-navigation>\n @if (previousLink) {\n <a f-footer-navigation-button\n [href]=\"previousLink.link\"\n [description]=\"navigation.previous\"\n [link]=\"previousLink\">\n </a>\n }\n @if (nextLink) {\n <a f-footer-navigation-button class=\"next\"\n [href]=\"nextLink.link\"\n [description]=\"navigation.next\"\n [link]=\"nextLink\">\n </a>\n }\n </nav>\n}\n\n", styles: [":host{display:block;margin-top:64px}\n"], dependencies: [{ kind: "component", type: FFooterNavigationComponent, selector: "nav[f-footer-navigation]" }, { kind: "component", type: FFooterNavigationButtonComponent, selector: "a[f-footer-navigation-button]", inputs: ["description", "link"] }, { kind: "component", type: FFooterEditInformationComponent, selector: "f-footer-edit-information" }, { kind: "component", type: FFooterEditLinkComponent, selector: "a[f-footer-edit-link]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2097
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMarkdownFooterComponent, deps: [{ token: i0.Injector }, { token: FDocumentationEnvironmentService }, { token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2098
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FMarkdownFooterComponent, isStandalone: true, selector: "footer [f-markdown-footer]", host: { listeners: { "click": "onDocumentClick($event)" } }, ngImport: i0, template: "@if (editLink) {\n <f-footer-edit-information>\n <a f-footer-edit-link [href]=\"editLink\">\n {{ navigation.editLink?.text || 'Edit this page on GitHub' }}\n </a>\n\n <!-- <f-footer-last-updated>-->\n <!-- Last updated: <span>{{ lastUpdated.datetime }}</span>-->\n <!-- </f-footer-last-updated>-->\n </f-footer-edit-information>\n}\n\n@if (previousLink || nextLink) {\n <nav f-footer-navigation>\n @if (previousLink) {\n <a f-footer-navigation-button\n [href]=\"previousLink.link\"\n [description]=\"navigation.previous\"\n [link]=\"previousLink\">\n </a>\n }\n @if (nextLink) {\n <a f-footer-navigation-button class=\"next\"\n [href]=\"nextLink.link\"\n [description]=\"navigation.next\"\n [link]=\"nextLink\">\n </a>\n }\n </nav>\n}\n\n", styles: [":host{display:block;margin-top:64px}\n"], dependencies: [{ kind: "component", type: FFooterNavigationComponent, selector: "nav[f-footer-navigation]" }, { kind: "component", type: FFooterNavigationButtonComponent, selector: "a[f-footer-navigation-button]", inputs: ["description", "link"] }, { kind: "component", type: FFooterEditInformationComponent, selector: "f-footer-edit-information" }, { kind: "component", type: FFooterEditLinkComponent, selector: "a[f-footer-edit-link]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2193
2099
  }
2194
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMarkdownFooterComponent, decorators: [{
2100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMarkdownFooterComponent, decorators: [{
2195
2101
  type: Component,
2196
2102
  args: [{ selector: 'footer [f-markdown-footer]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2197
2103
  FFooterNavigationComponent,
@@ -2201,27 +2107,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2201
2107
  FFooterLastUpdatedComponent,
2202
2108
  RouterLink,
2203
2109
  ], standalone: true, template: "@if (editLink) {\n <f-footer-edit-information>\n <a f-footer-edit-link [href]=\"editLink\">\n {{ navigation.editLink?.text || 'Edit this page on GitHub' }}\n </a>\n\n <!-- <f-footer-last-updated>-->\n <!-- Last updated: <span>{{ lastUpdated.datetime }}</span>-->\n <!-- </f-footer-last-updated>-->\n </f-footer-edit-information>\n}\n\n@if (previousLink || nextLink) {\n <nav f-footer-navigation>\n @if (previousLink) {\n <a f-footer-navigation-button\n [href]=\"previousLink.link\"\n [description]=\"navigation.previous\"\n [link]=\"previousLink\">\n </a>\n }\n @if (nextLink) {\n <a f-footer-navigation-button class=\"next\"\n [href]=\"nextLink.link\"\n [description]=\"navigation.next\"\n [link]=\"nextLink\">\n </a>\n }\n </nav>\n}\n\n", styles: [":host{display:block;margin-top:64px}\n"] }]
2204
- }], ctorParameters: () => [{ type: i0.Injector }, { type: FEnvironmentService }, { type: i1.Router }, { type: i0.ChangeDetectorRef }], propDecorators: { onDocumentClick: [{
2110
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: FDocumentationEnvironmentService }, { type: i1.Router }, { type: i0.ChangeDetectorRef }], propDecorators: { onDocumentClick: [{
2205
2111
  type: HostListener,
2206
2112
  args: ['click', ['$event']]
2207
2113
  }] } });
2208
2114
 
2209
2115
  class FMarkdownRendererComponent {
2116
+ injector;
2117
+ changeDetectorRef;
2118
+ subscriptions$ = new Subscription();
2119
+ value;
2120
+ hostElement = inject(ElementRef).nativeElement;
2121
+ fScrollableService = inject(FScrollableService);
2122
+ fContainersHandler = inject(HandleParsedContainersHandler);
2123
+ fDynamicComponentsHandler = inject(HandleDynamicComponentsHandler);
2124
+ isMarkdownChanged = false;
2210
2125
  constructor(injector, changeDetectorRef) {
2211
2126
  this.injector = injector;
2212
2127
  this.changeDetectorRef = changeDetectorRef;
2213
- this.subscriptions$ = new Subscription();
2214
- this.hostElement = inject(ElementRef).nativeElement;
2215
- this.fScrollableService = inject(FScrollableService);
2216
- this.fContainersHandler = inject(HandleParsedContainersHandler);
2217
- this.fDynamicComponentsHandler = inject(HandleDynamicComponentsHandler);
2218
- this.isMarkdownChanged = false;
2219
2128
  }
2220
2129
  ngOnInit() {
2221
2130
  this.subscriptions$.add(this.subscribeOnRouteChanges());
2222
2131
  }
2223
2132
  subscribeOnRouteChanges() {
2224
- return this.getRouterEvents().pipe(startWith(null), debounceTime(50), switchMap(() => this.injector.get(MarkdownService).parse(this.injector.get(FEnvironmentService).getMarkdownUrl(this.markdownPath))), tap((x) => this.renderMarkdown(x)), catchError((e, data) => data)).subscribe();
2133
+ return this.getRouterEvents().pipe(startWith(null), debounceTime(50), switchMap(() => this.injector.get(MarkdownService).parse(this.injector.get(FDocumentationEnvironmentService).getMarkdownUrl(this.markdownPath))), tap((x) => this.renderMarkdown(x)), catchError((e, data) => data)).subscribe();
2225
2134
  }
2226
2135
  getRouterEvents() {
2227
2136
  return this.injector.get(Router).events;
@@ -2250,16 +2159,16 @@ class FMarkdownRendererComponent {
2250
2159
  this.fDynamicComponentsHandler.dispose();
2251
2160
  this.subscriptions$.unsubscribe();
2252
2161
  }
2253
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMarkdownRendererComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2254
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FMarkdownRendererComponent, isStandalone: true, selector: "f-markdown-renderer", host: { listeners: { "click": "onDocumentClick($event)" }, classAttribute: "m-render" }, providers: [
2162
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMarkdownRendererComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FMarkdownRendererComponent, isStandalone: true, selector: "f-markdown-renderer", host: { listeners: { "click": "onDocumentClick($event)" }, classAttribute: "m-render" }, providers: [
2255
2164
  MarkdownService,
2256
2165
  HighlightService,
2257
2166
  HandleNavigationLinksHandler,
2258
2167
  HandleParsedContainersHandler,
2259
2168
  HandleDynamicComponentsHandler
2260
- ], ngImport: i0, template: "<div [innerHTML]=\"value\"></div>\n<footer f-markdown-footer></footer>\n", styles: [":host{display:block;width:100%}@media (min-width: 1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FMarkdownFooterComponent, selector: "footer [f-markdown-footer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2169
+ ], ngImport: i0, template: "<div [innerHTML]=\"value\"></div>\n<footer f-markdown-footer></footer>\n", styles: [":host{display:block;width:100%}@media (min-width: 1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FMarkdownFooterComponent, selector: "footer [f-markdown-footer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2261
2170
  }
2262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FMarkdownRendererComponent, decorators: [{
2171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FMarkdownRendererComponent, decorators: [{
2263
2172
  type: Component,
2264
2173
  args: [{ selector: 'f-markdown-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2265
2174
  MarkdownService,
@@ -2278,32 +2187,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2278
2187
  }] } });
2279
2188
 
2280
2189
  class FTableOfContentItemsComponent {
2281
- constructor() {
2282
- this.items = [];
2283
- }
2284
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FTableOfContentItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2285
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FTableOfContentItemsComponent, isStandalone: true, selector: "ul[f-table-of-content-items]", inputs: { items: "items" }, ngImport: i0, template: "@for (item of items;track item.hash) {\n <li [class.active]=\"item.isActive\"><a class=\"text-ellipsis\" [href]=\"item.hash\">{{ item.title }}</a></li>\n @if (item.children) {\n <ul f-table-of-content-items [items]=\"item.children\"></ul>\n }\n}\n", styles: [":host{list-style:none;margin:0;padding:0}:host li{overflow-wrap:break-word;color:var(--secondary-text);max-width:180px}:host li a{display:block;line-height:var(--on-page-navigation-item-height);font-size:14px;color:inherit;font-weight:400}:host li.active{color:var(--primary-text)}:host li+ul{padding:0 16px}\n"], dependencies: [{ kind: "component", type: FTableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
2190
+ items = [];
2191
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FTableOfContentItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2192
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FTableOfContentItemsComponent, isStandalone: true, selector: "ul[f-table-of-content-items]", inputs: { items: "items" }, ngImport: i0, template: "@for (item of items;track item.hash) {\n <li [class.active]=\"item.isActive\"><a class=\"text-ellipsis\" [href]=\"item.hash\">{{ item.title }}</a></li>\n @if (item.children) {\n <ul f-table-of-content-items [items]=\"item.children\"></ul>\n }\n}\n", styles: [":host{list-style:none;margin:0;padding:0}:host li{overflow-wrap:break-word;color:var(--secondary-text);max-width:180px}:host li a{display:block;line-height:var(--on-page-navigation-item-height);font-size:14px;color:inherit;font-weight:400}:host li.active{color:var(--primary-text)}:host li+ul{padding:0 16px}\n"], dependencies: [{ kind: "component", type: FTableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
2286
2193
  }
2287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FTableOfContentItemsComponent, decorators: [{
2194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FTableOfContentItemsComponent, decorators: [{
2288
2195
  type: Component,
2289
2196
  args: [{ selector: 'ul[f-table-of-content-items]', changeDetection: ChangeDetectionStrategy.Default, standalone: true, template: "@for (item of items;track item.hash) {\n <li [class.active]=\"item.isActive\"><a class=\"text-ellipsis\" [href]=\"item.hash\">{{ item.title }}</a></li>\n @if (item.children) {\n <ul f-table-of-content-items [items]=\"item.children\"></ul>\n }\n}\n", styles: [":host{list-style:none;margin:0;padding:0}:host li{overflow-wrap:break-word;color:var(--secondary-text);max-width:180px}:host li a{display:block;line-height:var(--on-page-navigation-item-height);font-size:14px;color:inherit;font-weight:400}:host li.active{color:var(--primary-text)}:host li+ul{padding:0 16px}\n"] }]
2290
2197
  }], propDecorators: { items: [{
2291
2198
  type: Input
2292
2199
  }] } });
2293
2200
 
2201
+ class FScrollableContainerComponent {
2202
+ elementRef;
2203
+ fScrollableService;
2204
+ get hostElement() {
2205
+ return this.elementRef.nativeElement;
2206
+ }
2207
+ constructor(elementRef, fScrollableService) {
2208
+ this.elementRef = elementRef;
2209
+ this.fScrollableService = fScrollableService;
2210
+ }
2211
+ ngOnInit() {
2212
+ this.fScrollableService.setContainer(this.hostElement);
2213
+ }
2214
+ ngOnDestroy() {
2215
+ this.fScrollableService.dispose();
2216
+ }
2217
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FScrollableContainerComponent, deps: [{ token: i0.ElementRef }, { token: FScrollableService }], target: i0.ɵɵFactoryTarget.Component });
2218
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FScrollableContainerComponent, isStandalone: true, selector: "f-scrollable-container", providers: [
2219
+ FScrollableService
2220
+ ], ngImport: i0, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{position:relative;width:100%;height:100%;overflow:hidden;overflow-y:auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2221
+ }
2222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FScrollableContainerComponent, decorators: [{
2223
+ type: Component,
2224
+ args: [{ selector: 'f-scrollable-container', providers: [
2225
+ FScrollableService
2226
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n\n\n\n", styles: [":host{position:relative;width:100%;height:100%;overflow:hidden;overflow-y:auto}\n"] }]
2227
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: FScrollableService }] });
2228
+
2294
2229
  class FTableOfContentComponent {
2230
+ fEnvironmentService;
2231
+ elementRef;
2232
+ fScrollableService;
2233
+ changeDetectorRef;
2234
+ fBrowser;
2235
+ subscriptions$ = new Subscription();
2295
2236
  get onToc$() {
2296
2237
  return this.fScrollableService.onToc$;
2297
2238
  }
2239
+ tocData = new TableOfContentData([], []);
2240
+ activeMarkerPosition = 0;
2241
+ title;
2298
2242
  constructor(fEnvironmentService, elementRef, fScrollableService, changeDetectorRef, fBrowser) {
2299
2243
  this.fEnvironmentService = fEnvironmentService;
2300
2244
  this.elementRef = elementRef;
2301
2245
  this.fScrollableService = fScrollableService;
2302
2246
  this.changeDetectorRef = changeDetectorRef;
2303
2247
  this.fBrowser = fBrowser;
2304
- this.subscriptions$ = new Subscription();
2305
- this.tocData = new TableOfContentData([], []);
2306
- this.activeMarkerPosition = 0;
2307
2248
  this.title = this.fEnvironmentService.getToC().title;
2308
2249
  }
2309
2250
  ngOnInit() {
@@ -2334,22 +2275,22 @@ class FTableOfContentComponent {
2334
2275
  ngOnDestroy() {
2335
2276
  this.subscriptions$.unsubscribe();
2336
2277
  }
2337
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FTableOfContentComponent, deps: [{ token: FEnvironmentService }, { token: i0.ElementRef }, { token: FScrollableService }, { token: i0.ChangeDetectorRef }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Component }); }
2338
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FTableOfContentComponent, isStandalone: true, selector: "aside[f-table-of-content]", host: { listeners: { "click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"title\">{{ title || 'In this article' }}</div>\n<ul f-table-of-content-items [items]=\"tocData.tree\"></ul>\n<div class=\"active-marker\" [style.top]=\"activeMarkerPosition + 'px'\"></div>\n", styles: [":host{--on-page-navigation-item-height: 32px;display:none;padding-left:16px;border-left:1px solid var(--divider-color);font-size:13px;font-weight:500;position:relative}:host .title{line-height:32px;font-size:14px;font-weight:600}@media (min-width: 1280px){:host{display:block;width:var(--on-page-navigation-width);position:fixed;top:calc(var(--header-height) + 48px);right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3)}}:host .active-marker{position:absolute;top:0;left:0;width:2px;height:calc(var(--on-page-navigation-item-height) / 2);border-radius:2px;background-color:var(--primary-1);transition:top .25s cubic-bezier(0,1,.5,1),opacity .25s}\n"], dependencies: [{ kind: "component", type: FTableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FTableOfContentComponent, deps: [{ token: FDocumentationEnvironmentService }, { token: i0.ElementRef }, { token: FScrollableService }, { token: i0.ChangeDetectorRef }, { token: i2.BrowserService }], target: i0.ɵɵFactoryTarget.Component });
2279
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FTableOfContentComponent, isStandalone: true, selector: "aside[f-table-of-content]", host: { listeners: { "click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"title\">{{ title || 'In this article' }}</div>\n<ul f-table-of-content-items [items]=\"tocData.tree\"></ul>\n<div class=\"active-marker\" [style.top]=\"activeMarkerPosition + 'px'\"></div>\n", styles: [":host{--on-page-navigation-item-height: 32px;display:none;padding-left:16px;border-left:1px solid var(--divider-color);font-size:13px;font-weight:500;position:relative}:host .title{line-height:32px;font-size:14px;font-weight:600}@media (min-width: 1280px){:host{display:block;width:var(--on-page-navigation-width);position:fixed;top:calc(var(--header-height) + 48px);right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3)}}:host .active-marker{position:absolute;top:0;left:0;width:2px;height:calc(var(--on-page-navigation-item-height) / 2);border-radius:2px;background-color:var(--primary-1);transition:top .25s cubic-bezier(0,1,.5,1),opacity .25s}\n"], dependencies: [{ kind: "component", type: FTableOfContentItemsComponent, selector: "ul[f-table-of-content-items]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2339
2280
  }
2340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FTableOfContentComponent, decorators: [{
2281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FTableOfContentComponent, decorators: [{
2341
2282
  type: Component,
2342
2283
  args: [{ selector: 'aside[f-table-of-content]', standalone: true, imports: [AsyncPipe, JsonPipe, FTableOfContentItemsComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"title\">{{ title || 'In this article' }}</div>\n<ul f-table-of-content-items [items]=\"tocData.tree\"></ul>\n<div class=\"active-marker\" [style.top]=\"activeMarkerPosition + 'px'\"></div>\n", styles: [":host{--on-page-navigation-item-height: 32px;display:none;padding-left:16px;border-left:1px solid var(--divider-color);font-size:13px;font-weight:500;position:relative}:host .title{line-height:32px;font-size:14px;font-weight:600}@media (min-width: 1280px){:host{display:block;width:var(--on-page-navigation-width);position:fixed;top:calc(var(--header-height) + 48px);right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 3)}}:host .active-marker{position:absolute;top:0;left:0;width:2px;height:calc(var(--on-page-navigation-item-height) / 2);border-radius:2px;background-color:var(--primary-1);transition:top .25s cubic-bezier(0,1,.5,1),opacity .25s}\n"] }]
2343
- }], ctorParameters: () => [{ type: FEnvironmentService }, { type: i0.ElementRef }, { type: FScrollableService }, { type: i0.ChangeDetectorRef }, { type: i2.BrowserService }], propDecorators: { onDocumentClick: [{
2284
+ }], ctorParameters: () => [{ type: FDocumentationEnvironmentService }, { type: i0.ElementRef }, { type: FScrollableService }, { type: i0.ChangeDetectorRef }, { type: i2.BrowserService }], propDecorators: { onDocumentClick: [{
2344
2285
  type: HostListener,
2345
2286
  args: ['click', ['$event']]
2346
2287
  }] } });
2347
2288
 
2348
2289
  class FPageComponent {
2349
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2350
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FPageComponent, isStandalone: true, selector: "f-page", host: { attributes: { "ngSkipHydration": "" } }, ngImport: i0, template: "<f-markdown-renderer></f-markdown-renderer>\n<aside f-table-of-content></aside>\n\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}:host [fMarkdownRenderer]{width:100%}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}:host [fMarkdownRenderer]{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FTableOfContentComponent, selector: "aside[f-table-of-content]" }, { kind: "component", type: FMarkdownRendererComponent, selector: "f-markdown-renderer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2290
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FPageComponent, isStandalone: true, selector: "f-page", host: { attributes: { "ngSkipHydration": "" } }, ngImport: i0, template: "<f-markdown-renderer></f-markdown-renderer>\n<aside f-table-of-content></aside>\n\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}:host [fMarkdownRenderer]{width:100%}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}:host [fMarkdownRenderer]{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"], dependencies: [{ kind: "component", type: FTableOfContentComponent, selector: "aside[f-table-of-content]" }, { kind: "component", type: FMarkdownRendererComponent, selector: "f-markdown-renderer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2351
2292
  }
2352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FPageComponent, decorators: [{
2293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPageComponent, decorators: [{
2353
2294
  type: Component,
2354
2295
  args: [{ selector: 'f-page', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2355
2296
  FTableOfContentComponent,
@@ -2359,26 +2300,208 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2359
2300
  }, template: "<f-markdown-renderer></f-markdown-renderer>\n<aside f-table-of-content></aside>\n\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}:host [fMarkdownRenderer]{width:100%}@media (min-width: 1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}:host [fMarkdownRenderer]{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}\n"] }]
2360
2301
  }] });
2361
2302
 
2362
- var index = /*#__PURE__*/Object.freeze({
2303
+ var index$2 = /*#__PURE__*/Object.freeze({
2304
+ __proto__: null,
2305
+ ChangeCodeFocusedSyntaxPreProcessor: ChangeCodeFocusedSyntaxPreProcessor,
2306
+ get EMarkdownContainerType () { return EMarkdownContainerType; },
2307
+ FAsyncCodeViewHandler: FAsyncCodeViewHandler,
2308
+ FCodeGroupBodyHandler: FCodeGroupBodyHandler,
2309
+ FCodeGroupHandler: FCodeGroupHandler,
2310
+ FCodeViewHandler: FCodeViewHandler,
2311
+ FExampleViewHandler: FExampleViewHandler,
2312
+ FFooterEditInformationComponent: FFooterEditInformationComponent,
2313
+ FFooterNavigationButtonComponent: FFooterNavigationButtonComponent,
2314
+ FFooterNavigationComponent: FFooterNavigationComponent,
2315
+ FMarkdownFooterComponent: FMarkdownFooterComponent,
2316
+ FMarkdownRendererComponent: FMarkdownRendererComponent,
2317
+ FPageComponent: FPageComponent,
2318
+ FTableOfContentComponent: FTableOfContentComponent,
2319
+ FTableOfContentItemsComponent: FTableOfContentItemsComponent,
2320
+ GetPreviousNextPageNavigationHandler: GetPreviousNextPageNavigationHandler,
2321
+ GetPreviousNextPageNavigationRequest: GetPreviousNextPageNavigationRequest,
2322
+ GetPreviousNextPageNavigationResponse: GetPreviousNextPageNavigationResponse,
2323
+ HandleDynamicComponentsHandler: HandleDynamicComponentsHandler,
2324
+ HandleDynamicComponentsRequest: HandleDynamicComponentsRequest,
2325
+ HandleParsedContainersHandler: HandleParsedContainersHandler,
2326
+ HandleParsedContainersRequest: HandleParsedContainersRequest,
2327
+ HighlightService: HighlightService,
2328
+ MarkCodeFocusedBlocksPostProcessor: MarkCodeFocusedBlocksPostProcessor,
2329
+ MarkdownService: MarkdownService,
2330
+ ModifyPunctuationHighlightPostProcessor: ModifyPunctuationHighlightPostProcessor,
2331
+ ParseAlerts: ParseAlerts,
2332
+ ParseCodeGroup: ParseCodeGroup,
2333
+ ParseCodeView: ParseCodeView,
2334
+ ParseExampleGroup: ParseExampleGroup,
2335
+ ParsePreviewGroup: ParsePreviewGroup,
2336
+ SeparateCodeByLinesPostProcessor: SeparateCodeByLinesPostProcessor,
2337
+ copyToClipboard: copyToClipboard,
2338
+ getContent: getContent
2339
+ });
2340
+
2341
+ class FPreviewComponent {
2342
+ fEnvironment;
2343
+ fState;
2344
+ router;
2345
+ changeDetectorRef;
2346
+ subscriptions$ = new Subscription();
2347
+ item;
2348
+ group;
2349
+ viewModel;
2350
+ src;
2351
+ url;
2352
+ constructor(fEnvironment, fState, router, changeDetectorRef) {
2353
+ this.fEnvironment = fEnvironment;
2354
+ this.fState = fState;
2355
+ this.router = router;
2356
+ this.changeDetectorRef = changeDetectorRef;
2357
+ }
2358
+ initialize() {
2359
+ this.viewModel = this.getNavigationItem(this.getNavigationGroup());
2360
+ this.url = this.normalizeLink(this.viewModel.link, this.getUrlPrefix());
2361
+ this.subscriptions$.add(this.fState.theme$.pipe(startWith(null)).subscribe(() => this.updateTheme()));
2362
+ }
2363
+ getNavigationGroup() {
2364
+ return this.fEnvironment.getNavigation().find((x) => x.text === this.group);
2365
+ }
2366
+ getNavigationItem(group) {
2367
+ return group.items.find((x) => x.link === this.item);
2368
+ }
2369
+ updateTheme() {
2370
+ this.src = this.fState.getPreferredTheme() === 'dark' ? this.viewModel?.image_dark : this.viewModel?.image;
2371
+ if (!this.src) {
2372
+ this.src = this.viewModel?.image;
2373
+ }
2374
+ this.changeDetectorRef.markForCheck();
2375
+ }
2376
+ normalizeLink(link, prefix) {
2377
+ if (!this.isExternalLink(link)) {
2378
+ return link.startsWith('/') ? `${prefix}${link}` : `${prefix}/${link}`;
2379
+ }
2380
+ return link;
2381
+ }
2382
+ getUrlPrefix() {
2383
+ return this.router.url.substring(0, this.router.url.lastIndexOf('/'));
2384
+ }
2385
+ isExternalLink(href) {
2386
+ return href.startsWith('www') || href.startsWith('http');
2387
+ }
2388
+ ngOnDestroy() {
2389
+ this.subscriptions$.unsubscribe();
2390
+ }
2391
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewComponent, deps: [{ token: FDocumentationEnvironmentService }, { token: FStateService }, { token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2392
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FPreviewComponent, isStandalone: true, selector: "a[f-preview]", host: { properties: { "attr.href": "url", "attr.title": "viewModel?.text" } }, ngImport: i0, template: "@if (viewModel) {\n <img [src]=\"src\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">{{ viewModel.text }}</div>\n <div class=\"description\">{{ viewModel.description }}</div>\n}\n\n\n\n", styles: [":host{display:block;border-radius:4px;background-color:var(--soft-background);padding:24px;width:100%;text-decoration:none!important;color:inherit!important;line-height:24px;font-size:14px;cursor:pointer}:host:hover img{transform:scale(1.1)}:host img{display:block;margin-bottom:16px;width:100%;height:180px;border-radius:4px;object-fit:cover;transition:transform .3s}:host .title{line-height:inherit;font-weight:600;text-transform:uppercase;color:var(--primary-text)}:host .description{margin:8px 0!important;line-height:inherit;color:var(--secondary-text);width:100%;word-wrap:break-word;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media (min-width: 640px){:host{width:calc((100% - 32px)/2)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2393
+ }
2394
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FPreviewComponent, decorators: [{
2395
+ type: Component,
2396
+ args: [{ selector: 'a[f-preview]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
2397
+ '[attr.href]': 'url',
2398
+ '[attr.title]': 'viewModel?.text',
2399
+ }, template: "@if (viewModel) {\n <img [src]=\"src\" [alt]=\"viewModel.description\" [title]=\"viewModel.text\">\n <div class=\"title\">{{ viewModel.text }}</div>\n <div class=\"description\">{{ viewModel.description }}</div>\n}\n\n\n\n", styles: [":host{display:block;border-radius:4px;background-color:var(--soft-background);padding:24px;width:100%;text-decoration:none!important;color:inherit!important;line-height:24px;font-size:14px;cursor:pointer}:host:hover img{transform:scale(1.1)}:host img{display:block;margin-bottom:16px;width:100%;height:180px;border-radius:4px;object-fit:cover;transition:transform .3s}:host .title{line-height:inherit;font-weight:600;text-transform:uppercase;color:var(--primary-text)}:host .description{margin:8px 0!important;line-height:inherit;color:var(--secondary-text);width:100%;word-wrap:break-word;white-space:normal;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media (min-width: 640px){:host{width:calc((100% - 32px)/2)}}\n"] }]
2400
+ }], ctorParameters: () => [{ type: FDocumentationEnvironmentService }, { type: FStateService }, { type: i1.Router }, { type: i0.ChangeDetectorRef }] });
2401
+
2402
+ const F_DOCUMENTATION_COMPONENT = new InjectionToken('F_DOCUMENTATION_COMPONENT');
2403
+
2404
+ class FDocumentationComponent {
2405
+ isNavigationVisible = false;
2406
+ popoverMessage = null;
2407
+ _fPopover = inject(FPopoverService);
2408
+ _destroyRef = inject(DestroyRef);
2409
+ _changeDetectorRef = inject(ChangeDetectorRef);
2410
+ ngOnInit() {
2411
+ this._fPopover.dispose(this._destroyRef);
2412
+ this._subscribeOnPopover();
2413
+ }
2414
+ _subscribeOnPopover() {
2415
+ this._fPopover.popover$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((x) => {
2416
+ this.popoverMessage = x;
2417
+ this._changeDetectorRef.markForCheck();
2418
+ });
2419
+ }
2420
+ onToggleNavigation(value) {
2421
+ this.isNavigationVisible = value;
2422
+ this._changeDetectorRef.markForCheck();
2423
+ }
2424
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FDocumentationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2425
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FDocumentationComponent, isStandalone: true, selector: "f-documentation", providers: [
2426
+ FDocumentationEnvironmentService,
2427
+ FPopoverService,
2428
+ { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FDocumentationEnvironmentService },
2429
+ { provide: F_DOCUMENTATION_COMPONENT, useExisting: FDocumentationComponent }
2430
+ ], ngImport: i0, template: "<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible\" (click)=\"onToggleNavigation(false)\"></div>\n<f-navigation-panel [class.visible]=\"isNavigationVisible\"></f-navigation-panel>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n@if (popoverMessage) {\n <div class=\"popover\">{{ popoverMessage }}</div>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:10px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"], dependencies: [{ kind: "component", type: FNavigationPanelComponent, selector: "f-navigation-panel" }, { kind: "component", type: FHeaderComponent, selector: "f-header" }, { kind: "component", type: FScrollableContainerComponent, selector: "f-scrollable-container" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2431
+ }
2432
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FDocumentationComponent, decorators: [{
2433
+ type: Component,
2434
+ args: [{ selector: 'f-documentation', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2435
+ FDocumentationEnvironmentService,
2436
+ FPopoverService,
2437
+ { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FDocumentationEnvironmentService },
2438
+ { provide: F_DOCUMENTATION_COMPONENT, useExisting: FDocumentationComponent }
2439
+ ], imports: [
2440
+ FNavigationPanelComponent,
2441
+ FHeaderComponent,
2442
+ FScrollableContainerComponent,
2443
+ RouterOutlet
2444
+ ], template: "<div class=\"f-backdrop\" [class.visible]=\"isNavigationVisible\" (click)=\"onToggleNavigation(false)\"></div>\n<f-navigation-panel [class.visible]=\"isNavigationVisible\"></f-navigation-panel>\n\n<f-scrollable-container>\n <f-header></f-header>\n <router-outlet></router-outlet>\n</f-scrollable-container>\n@if (popoverMessage) {\n <div class=\"popover\">{{ popoverMessage }}</div>\n}\n", styles: [":host{display:flex;justify-content:flex-start;align-items:flex-start;height:100%;gap:10px}.f-backdrop{position:fixed;inset:0;opacity:0;z-index:var(--z-index-backdrop);background:var(--backdrop-color);transition:opacity .2s ease-in-out;pointer-events:none}.f-backdrop.visible{opacity:1;pointer-events:all}@media (min-width: 960px){.f-backdrop{position:unset}}.popover{position:fixed;min-width:120px;bottom:50%;left:50%;text-align:center;transform:translate(-50%,-50%);background-color:var(--code-view-copy-button-hover-background);border:1px solid var(--code-view-copy-button-border-color);color:var(--primary-text);font-size:14px;padding:4px 8px;border-radius:4px;z-index:var(--z-index-popover);opacity:1}\n"] }]
2445
+ }] });
2446
+
2447
+ const F_DOCS_ENVIRONMENT = new InjectionToken('F_DOCS_ENVIRONMENT');
2448
+
2449
+ const F_DOCS_ROUTES = [
2450
+ {
2451
+ path: '',
2452
+ loadComponent: () => Promise.resolve().then(function () { return index$1; }).then(m => m.FDocumentationComponent),
2453
+ children: [
2454
+ {
2455
+ path: '**',
2456
+ loadComponent: () => Promise.resolve().then(function () { return index$2; }).then(m => m.FPageComponent)
2457
+ }
2458
+ ]
2459
+ }
2460
+ ];
2461
+
2462
+ var index$1 = /*#__PURE__*/Object.freeze({
2363
2463
  __proto__: null,
2464
+ CalculateHashFromScrollPositionHandler: CalculateHashFromScrollPositionHandler,
2465
+ CalculateHashFromScrollPositionRequest: CalculateHashFromScrollPositionRequest,
2364
2466
  ChangeCodeFocusedSyntaxPreProcessor: ChangeCodeFocusedSyntaxPreProcessor,
2365
2467
  get EMarkdownContainerType () { return EMarkdownContainerType; },
2366
2468
  FAsyncCodeViewHandler: FAsyncCodeViewHandler,
2469
+ FBadgeComponent: FBadgeComponent,
2367
2470
  FCodeGroupBodyHandler: FCodeGroupBodyHandler,
2368
2471
  FCodeGroupHandler: FCodeGroupHandler,
2369
2472
  FCodeViewHandler: FCodeViewHandler,
2473
+ FDocumentationComponent: FDocumentationComponent,
2474
+ FDocumentationEnvironmentService: FDocumentationEnvironmentService,
2370
2475
  FExampleViewHandler: FExampleViewHandler,
2371
2476
  FFooterEditInformationComponent: FFooterEditInformationComponent,
2372
2477
  FFooterNavigationButtonComponent: FFooterNavigationButtonComponent,
2373
2478
  FFooterNavigationComponent: FFooterNavigationComponent,
2479
+ FHamburgerButtonComponent: FHamburgerButtonComponent,
2480
+ FHeaderComponent: FHeaderComponent,
2481
+ FHeaderMenuComponent: FHeaderMenuComponent,
2374
2482
  FMarkdownFooterComponent: FMarkdownFooterComponent,
2375
2483
  FMarkdownRendererComponent: FMarkdownRendererComponent,
2484
+ FNavigationGroupComponent: FNavigationGroupComponent,
2485
+ FNavigationHeaderComponent: FNavigationHeaderComponent,
2486
+ FNavigationItemComponent: FNavigationItemComponent,
2487
+ FNavigationPanelComponent: FNavigationPanelComponent,
2376
2488
  FPageComponent: FPageComponent,
2489
+ FPreviewComponent: FPreviewComponent,
2490
+ FScrollableContainerComponent: FScrollableContainerComponent,
2491
+ FSocialLinksComponent: FSocialLinksComponent,
2377
2492
  FTableOfContentComponent: FTableOfContentComponent,
2378
2493
  FTableOfContentItemsComponent: FTableOfContentItemsComponent,
2494
+ FVersionComponent: FVersionComponent,
2495
+ F_DOCS_ENVIRONMENT: F_DOCS_ENVIRONMENT,
2496
+ F_DOCS_ROUTES: F_DOCS_ROUTES,
2497
+ F_DOCUMENTATION_COMPONENT: F_DOCUMENTATION_COMPONENT,
2498
+ GetAbsoluteTopToContainerHandler: GetAbsoluteTopToContainerHandler,
2499
+ GetAbsoluteTopToContainerRequest: GetAbsoluteTopToContainerRequest,
2379
2500
  GetPreviousNextPageNavigationHandler: GetPreviousNextPageNavigationHandler,
2380
2501
  GetPreviousNextPageNavigationRequest: GetPreviousNextPageNavigationRequest,
2381
2502
  GetPreviousNextPageNavigationResponse: GetPreviousNextPageNavigationResponse,
2503
+ GetTableOfContentDataHandler: GetTableOfContentDataHandler,
2504
+ GetTableOfContentDataRequest: GetTableOfContentDataRequest,
2382
2505
  HandleDynamicComponentsHandler: HandleDynamicComponentsHandler,
2383
2506
  HandleDynamicComponentsRequest: HandleDynamicComponentsRequest,
2384
2507
  HandleParsedContainersHandler: HandleParsedContainersHandler,
@@ -2392,14 +2515,192 @@ var index = /*#__PURE__*/Object.freeze({
2392
2515
  ParseCodeView: ParseCodeView,
2393
2516
  ParseExampleGroup: ParseExampleGroup,
2394
2517
  ParsePreviewGroup: ParsePreviewGroup,
2518
+ ScrollToElementInContainer: ScrollToElementInContainer,
2395
2519
  SeparateCodeByLinesPostProcessor: SeparateCodeByLinesPostProcessor,
2520
+ TableOfContentData: TableOfContentData,
2396
2521
  copyToClipboard: copyToClipboard,
2397
2522
  getContent: getContent
2398
2523
  });
2399
2524
 
2525
+ const F_HOME_PAGE_ENVIRONMENT = new InjectionToken('F_HOME_PAGE_ENVIRONMENT');
2526
+
2527
+ class FHomePageEnvironmentService {
2528
+ environment;
2529
+ http;
2530
+ constructor(environment, http) {
2531
+ this.environment = environment;
2532
+ this.http = http;
2533
+ }
2534
+ getLogo() {
2535
+ return this.environment.logo;
2536
+ }
2537
+ getTitle() {
2538
+ return this.environment.title;
2539
+ }
2540
+ getHero() {
2541
+ return this.environment.hero;
2542
+ }
2543
+ getButtons() {
2544
+ return this.environment.buttons;
2545
+ }
2546
+ getFeatures() {
2547
+ return this.environment.features;
2548
+ }
2549
+ getFooter() {
2550
+ return this.environment.footer;
2551
+ }
2552
+ getBackgroundComponent() {
2553
+ return this.environment.backgroundComponent;
2554
+ }
2555
+ getImageComponent() {
2556
+ return this.environment.heroImageComponent;
2557
+ }
2558
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService, deps: [{ token: F_HOME_PAGE_ENVIRONMENT, optional: true }, { token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
2559
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService });
2560
+ }
2561
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageEnvironmentService, decorators: [{
2562
+ type: Injectable
2563
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2564
+ type: Optional
2565
+ }, {
2566
+ type: Inject,
2567
+ args: [F_HOME_PAGE_ENVIRONMENT]
2568
+ }] }, { type: i1$1.HttpClient }] });
2569
+
2570
+ class FHomePageFeaturesComponent {
2571
+ viewModel = inject(FHomePageEnvironmentService).getFeatures();
2572
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageFeaturesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FHomePageFeaturesComponent, isStandalone: true, selector: "f-home-page-features", ngImport: i0, template: "<div class=\"feature-list\">\n @for (feature of viewModel; track feature.headline) {\n <div class=\"feature\">\n <h2>{{ feature.headline }}</h2>\n <p>{{ feature.description }}</p>\n </div>\n }\n</div>\n\n", styles: [":host{margin-top:64px;margin-bottom:64px;width:100%;display:block;padding:0 24px}:host .feature-list{margin:0 auto;display:flex;flex-wrap:wrap;gap:16px;max-width:1248px;pointer-events:all}:host .feature{width:100%;border-radius:4px;background-color:var(--soft-background);display:flex;flex-direction:column;padding:24px}:host .feature h2{margin:0;line-height:24px;font-size:16px;font-weight:600}:host .feature p{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{padding:0 48px}:host .feature{width:calc(50% - 12px)}}@media (min-width: 960px){:host{padding:0 64px}:host .feature{width:calc(25% - 12px)}}\n"] });
2574
+ }
2575
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageFeaturesComponent, decorators: [{
2576
+ type: Component,
2577
+ args: [{ selector: 'f-home-page-features', standalone: true, template: "<div class=\"feature-list\">\n @for (feature of viewModel; track feature.headline) {\n <div class=\"feature\">\n <h2>{{ feature.headline }}</h2>\n <p>{{ feature.description }}</p>\n </div>\n }\n</div>\n\n", styles: [":host{margin-top:64px;margin-bottom:64px;width:100%;display:block;padding:0 24px}:host .feature-list{margin:0 auto;display:flex;flex-wrap:wrap;gap:16px;max-width:1248px;pointer-events:all}:host .feature{width:100%;border-radius:4px;background-color:var(--soft-background);display:flex;flex-direction:column;padding:24px}:host .feature h2{margin:0;line-height:24px;font-size:16px;font-weight:600}:host .feature p{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--secondary-text)}@media (min-width: 640px){:host{padding:0 48px}:host .feature{width:calc(50% - 12px)}}@media (min-width: 960px){:host{padding:0 64px}:host .feature{width:calc(25% - 12px)}}\n"] }]
2578
+ }] });
2579
+
2580
+ class FHomePageHeaderComponent {
2581
+ logo = inject(FHomePageEnvironmentService).getLogo();
2582
+ title = inject(FHomePageEnvironmentService).getTitle();
2583
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2584
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageHeaderComponent, isStandalone: true, selector: "header[f-home-page-header]", ngImport: i0, template: "<div class=\"content\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n <div class=\"flex-space\"></div>\n <button f-theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"], dependencies: [{ kind: "component", type: FThemeButtonComponent, selector: "button[f-theme-button]" }] });
2585
+ }
2586
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageHeaderComponent, decorators: [{
2587
+ type: Component,
2588
+ args: [{ selector: 'header[f-home-page-header]', standalone: true, imports: [
2589
+ FThemeButtonComponent
2590
+ ], template: "<div class=\"content\">\n <img [src]=\"logo\" class=\"logo\" alt=\"{{ title }} Logo\" width=\"24\" height=\"24\"/>\n <span class=\"title\">{{ title }}</span>\n <div class=\"flex-space\"></div>\n <button f-theme-button aria-label=\"Change theme\"></button>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .logo{margin-right:8px}:host .title{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;font-size:16px;font-weight:600;color:var(--primary-text)}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] }]
2591
+ }] });
2592
+
2593
+ class FHomePageFooterComponent {
2594
+ viewModel = inject(FHomePageEnvironmentService).getFooter();
2595
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2596
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageFooterComponent, isStandalone: true, selector: "footer[f-home-page-footer]", ngImport: i0, template: "<div class=\"content\">\n <div class=\"flex-space\"></div>\n <div>\n <div class=\"item\">Created with Foblex <a href=\"https://github.com/Foblex/m-render\" target=\"_blank\">MRender</a></div>\n <div class=\"item\">{{ viewModel.text }}</div>\n </div>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .item{line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);text-align:right}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] });
2597
+ }
2598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageFooterComponent, decorators: [{
2599
+ type: Component,
2600
+ args: [{ selector: 'footer[f-home-page-footer]', standalone: true, template: "<div class=\"content\">\n <div class=\"flex-space\"></div>\n <div>\n <div class=\"item\">Created with Foblex <a href=\"https://github.com/Foblex/m-render\" target=\"_blank\">MRender</a></div>\n <div class=\"item\">{{ viewModel.text }}</div>\n </div>\n</div>\n\n", styles: [":host{position:relative;z-index:5;padding:0 24px}:host .content{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap;width:100%;height:64px;max-width:1376px;margin:0 auto}:host .item{line-height:20px;font-size:12px;font-weight:500;color:var(--secondary-text);text-align:right}@media (min-width: 640px){:host{padding:0 48px}}@media (min-width: 960px){:host{padding:0 64px}}\n"] }]
2601
+ }] });
2602
+
2603
+ class FHomePageButtonsRowComponent {
2604
+ viewModel = inject(FHomePageEnvironmentService).getButtons();
2605
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageButtonsRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2606
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FHomePageButtonsRowComponent, isStandalone: true, selector: "f-home-page-buttons-row", ngImport: i0, template: "@for (button of viewModel; track button.text) {\n @if (button.routerLink) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" routerLink=\"{{ button.routerLink }}\">{{ button.text }}</a>\n } @else if(button.href) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" href=\"{{ button.href }}\">{{ button.text }}</a>\n }\n\n}\n<!--<a class=\"f-button primary\" routerLink=\"/docs/get-started\">Get Started</a>-->\n<!--<a class=\"f-button\" routerLink=\"/examples/overview\">Examples</a>-->\n<!--<a class=\"f-button\" href=\"https://github.com/Foblex/m-render\">Github</a>-->\n", styles: [":host{display:flex;padding-top:32px;gap:12px;width:fit-content;margin:0 auto}@media (min-width: 960px){:host{margin:0}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
2607
+ }
2608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageButtonsRowComponent, decorators: [{
2609
+ type: Component,
2610
+ args: [{ selector: 'f-home-page-buttons-row', standalone: true, imports: [
2611
+ RouterLink
2612
+ ], template: "@for (button of viewModel; track button.text) {\n @if (button.routerLink) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" routerLink=\"{{ button.routerLink }}\">{{ button.text }}</a>\n } @else if(button.href) {\n <a class=\"f-button\" [class.primary]=\"button.primary\" href=\"{{ button.href }}\">{{ button.text }}</a>\n }\n\n}\n<!--<a class=\"f-button primary\" routerLink=\"/docs/get-started\">Get Started</a>-->\n<!--<a class=\"f-button\" routerLink=\"/examples/overview\">Examples</a>-->\n<!--<a class=\"f-button\" href=\"https://github.com/Foblex/m-render\">Github</a>-->\n", styles: [":host{display:flex;padding-top:32px;gap:12px;width:fit-content;margin:0 auto}@media (min-width: 960px){:host{margin:0}}\n"] }]
2613
+ }] });
2614
+
2615
+ class FHomePageHeroComponent {
2616
+ viewModel = inject(FHomePageEnvironmentService).getHero();
2617
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageHeroComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2618
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageHeroComponent, isStandalone: true, selector: "f-home-page-hero", ngImport: i0, template: "<h1>{{ viewModel.headline }}</h1>\n<p class=\"powered\">{{ viewModel.tagline1 }}</p>\n<p class=\"powered\">{{ viewModel.tagline2 }}</p>\n<p class=\"second-description\">{{ viewModel.subDescription }}</p>\n<f-home-page-buttons-row></f-home-page-buttons-row>\n", styles: [":host{display:block;width:100%}@media (min-width: 640px){:host{width:100%}}@media (min-width: 960px){:host{width:50%}}.powered,h1{letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;width:fit-content;margin:0 auto;text-align:center;white-space:pre-wrap;pointer-events:all}@media (min-width: 640px){.powered,h1{line-height:56px;font-size:48px}}@media (min-width: 960px){.powered,h1{line-height:64px;font-size:56px;margin:0;text-align:left}}h1{background:-webkit-linear-gradient(120deg,#bd34fe 30%,#41d1ff);background-clip:text;color:transparent}.second-description{line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--secondary-text);margin:0 auto;width:fit-content;pointer-events:all;text-align:center;padding:8px 16px 0}@media (min-width: 640px){.second-description{padding-top:12px;line-height:32px;font-size:20px}}@media (min-width: 960px){.second-description{line-height:36px;font-size:24px;margin:0;text-align:left;padding:8px 0 0}}\n"], dependencies: [{ kind: "component", type: FHomePageButtonsRowComponent, selector: "f-home-page-buttons-row" }] });
2619
+ }
2620
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageHeroComponent, decorators: [{
2621
+ type: Component,
2622
+ args: [{ selector: 'f-home-page-hero', standalone: true, imports: [
2623
+ FHomePageButtonsRowComponent
2624
+ ], template: "<h1>{{ viewModel.headline }}</h1>\n<p class=\"powered\">{{ viewModel.tagline1 }}</p>\n<p class=\"powered\">{{ viewModel.tagline2 }}</p>\n<p class=\"second-description\">{{ viewModel.subDescription }}</p>\n<f-home-page-buttons-row></f-home-page-buttons-row>\n", styles: [":host{display:block;width:100%}@media (min-width: 640px){:host{width:100%}}@media (min-width: 960px){:host{width:50%}}.powered,h1{letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;width:fit-content;margin:0 auto;text-align:center;white-space:pre-wrap;pointer-events:all}@media (min-width: 640px){.powered,h1{line-height:56px;font-size:48px}}@media (min-width: 960px){.powered,h1{line-height:64px;font-size:56px;margin:0;text-align:left}}h1{background:-webkit-linear-gradient(120deg,#bd34fe 30%,#41d1ff);background-clip:text;color:transparent}.second-description{line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--secondary-text);margin:0 auto;width:fit-content;pointer-events:all;text-align:center;padding:8px 16px 0}@media (min-width: 640px){.second-description{padding-top:12px;line-height:32px;font-size:20px}}@media (min-width: 960px){.second-description{line-height:36px;font-size:24px;margin:0;text-align:left;padding:8px 0 0}}\n"] }]
2625
+ }] });
2626
+
2627
+ const F_HOME_PAGE_COMPONENT = new InjectionToken('F_HOME_PAGE_COMPONENT');
2628
+ class FHomePageComponent {
2629
+ _environmentService = inject(FHomePageEnvironmentService);
2630
+ _backgroundContainer;
2631
+ _heroImageContainer;
2632
+ ngAfterViewInit() {
2633
+ this._renderImageComponent(this._environmentService.getImageComponent());
2634
+ this._renderBackgroundComponent(this._environmentService.getBackgroundComponent());
2635
+ }
2636
+ _renderImageComponent(component) {
2637
+ if (component) {
2638
+ this.requestComponentRedraw(this._getImageComponentReference(component));
2639
+ }
2640
+ }
2641
+ _renderBackgroundComponent(component) {
2642
+ if (component) {
2643
+ this.requestComponentRedraw(this._getBackgroundComponentReference(component));
2644
+ }
2645
+ }
2646
+ _getBackgroundComponentReference(component) {
2647
+ return this._backgroundContainer.createComponent(component);
2648
+ }
2649
+ _getImageComponentReference(component) {
2650
+ return this._heroImageContainer.createComponent(component);
2651
+ }
2652
+ requestComponentRedraw(componentRef) {
2653
+ componentRef.changeDetectorRef.markForCheck();
2654
+ }
2655
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2656
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FHomePageComponent, isStandalone: true, selector: "f-home-page", providers: [
2657
+ FHomePageEnvironmentService,
2658
+ { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
2659
+ { provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
2660
+ ], viewQueries: [{ propertyName: "_backgroundContainer", first: true, predicate: ["backgroundContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_heroImageContainer", first: true, predicate: ["heroImageContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<ng-container #backgroundContainer></ng-container>\n<header f-home-page-header></header>\n\n<div class=\"body\">\n <div class=\"hero-row\">\n <f-home-page-hero></f-home-page-hero>\n <ng-container #heroImageContainer></ng-container>\n </div>\n <f-home-page-features></f-home-page-features>\n</div>\n\n<div class=\"flex-space\"></div>\n<footer f-home-page-footer></footer>\n", styles: [":host{display:flex;flex-direction:column;position:relative;width:100%;height:100%;min-height:100%;overflow:hidden;overflow-y:auto}.body{position:relative;z-index:3;pointer-events:none}@media (min-width: 960px){.body{margin-top:50px}}@media (min-width: 1376px){.body{margin-top:100px}}.hero-row{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;margin:0 auto}@media (min-width: 960px){.hero-row{flex-direction:row;margin-left:64px;margin-right:64px}}@media (min-width: 1376px){.hero-row{flex-direction:row;margin-left:calc(50% - 624px);margin-right:calc(50% - 624px)}}\n"], dependencies: [{ kind: "component", type: FHomePageFooterComponent, selector: "footer[f-home-page-footer]" }, { kind: "component", type: FHomePageHeaderComponent, selector: "header[f-home-page-header]" }, { kind: "component", type: FHomePageFeaturesComponent, selector: "f-home-page-features" }, { kind: "component", type: FHomePageHeroComponent, selector: "f-home-page-hero" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2661
+ }
2662
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FHomePageComponent, decorators: [{
2663
+ type: Component,
2664
+ args: [{ selector: 'f-home-page', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2665
+ FHomePageEnvironmentService,
2666
+ { provide: INTERNAL_ENVIRONMENT_SERVICE, useExisting: FHomePageEnvironmentService },
2667
+ { provide: F_HOME_PAGE_COMPONENT, useExisting: FHomePageComponent }
2668
+ ], imports: [
2669
+ FHomePageFooterComponent,
2670
+ FHomePageHeaderComponent,
2671
+ FHomePageFeaturesComponent,
2672
+ FHomePageHeroComponent,
2673
+ ], template: "<ng-container #backgroundContainer></ng-container>\n<header f-home-page-header></header>\n\n<div class=\"body\">\n <div class=\"hero-row\">\n <f-home-page-hero></f-home-page-hero>\n <ng-container #heroImageContainer></ng-container>\n </div>\n <f-home-page-features></f-home-page-features>\n</div>\n\n<div class=\"flex-space\"></div>\n<footer f-home-page-footer></footer>\n", styles: [":host{display:flex;flex-direction:column;position:relative;width:100%;height:100%;min-height:100%;overflow:hidden;overflow-y:auto}.body{position:relative;z-index:3;pointer-events:none}@media (min-width: 960px){.body{margin-top:50px}}@media (min-width: 1376px){.body{margin-top:100px}}.hero-row{display:flex;flex-direction:column-reverse;justify-content:space-between;align-items:center;margin:0 auto}@media (min-width: 960px){.hero-row{flex-direction:row;margin-left:64px;margin-right:64px}}@media (min-width: 1376px){.hero-row{flex-direction:row;margin-left:calc(50% - 624px);margin-right:calc(50% - 624px)}}\n"] }]
2674
+ }], propDecorators: { _backgroundContainer: [{
2675
+ type: ViewChild,
2676
+ args: ['backgroundContainer', { read: ViewContainerRef }]
2677
+ }], _heroImageContainer: [{
2678
+ type: ViewChild,
2679
+ args: ['heroImageContainer', { read: ViewContainerRef }]
2680
+ }] } });
2681
+
2682
+ const F_HOME_PAGE_ROUTES = [
2683
+ {
2684
+ path: '',
2685
+ loadComponent: () => Promise.resolve().then(function () { return index; }).then(m => m.FHomePageComponent),
2686
+ }
2687
+ ];
2688
+
2689
+ var index = /*#__PURE__*/Object.freeze({
2690
+ __proto__: null,
2691
+ FHomePageComponent: FHomePageComponent,
2692
+ FHomePageEnvironmentService: FHomePageEnvironmentService,
2693
+ FHomePageFeaturesComponent: FHomePageFeaturesComponent,
2694
+ FHomePageFooterComponent: FHomePageFooterComponent,
2695
+ FHomePageHeaderComponent: FHomePageHeaderComponent,
2696
+ F_HOME_PAGE_COMPONENT: F_HOME_PAGE_COMPONENT,
2697
+ F_HOME_PAGE_ENVIRONMENT: F_HOME_PAGE_ENVIRONMENT,
2698
+ F_HOME_PAGE_ROUTES: F_HOME_PAGE_ROUTES
2699
+ });
2700
+
2400
2701
  /**
2401
2702
  * Generated bundle index. Do not edit.
2402
2703
  */
2403
2704
 
2404
- export { CalculateHashFromScrollPositionHandler, CalculateHashFromScrollPositionRequest, ChangeCodeFocusedSyntaxPreProcessor, CookiePopup, EMarkdownContainerType, FAnalyticsService, FAsyncCodeViewHandler, FBadgeComponent, FCheckboxComponent, FCodeGroupBodyHandler, FCodeGroupHandler, FCodeViewHandler, FDocumentationComponent, FEnvironmentService, FExampleViewHandler, FFooterEditInformationComponent, FFooterNavigationButtonComponent, FFooterNavigationComponent, FHamburgerButtonComponent, FHeadTagService, FHeaderComponent, FHeaderMenuComponent, FJsonLdService, FMarkdownFooterComponent, FMarkdownRendererComponent, FMetaService, FNavigationGroupComponent, FNavigationHeaderComponent, FNavigationItemComponent, FNavigationPanelComponent, FPageComponent, FPopoverService, FPreviewComponent, FScrollableContainerComponent, FSocialLinksComponent, FTableOfContentComponent, FTableOfContentItemsComponent, FThemeButtonComponent, FVersionComponent, F_ACCEPT_COOKIES_KEY, F_DOCUMENTATION_COMPONENT, F_DOCUMENTATION_ROUTES, F_ENVIRONMENT, GetAbsoluteTopToContainerHandler, GetAbsoluteTopToContainerRequest, GetPreviousNextPageNavigationHandler, GetPreviousNextPageNavigationRequest, GetPreviousNextPageNavigationResponse, GetTableOfContentDataHandler, GetTableOfContentDataRequest, GetVersionHandler, GetVersionRequest, HandleDynamicComponentsHandler, HandleDynamicComponentsRequest, HandleNavigationLinksHandler, HandleNavigationLinksRequest, HandleParsedContainersHandler, HandleParsedContainersRequest, HighlightService, MarkCodeFocusedBlocksPostProcessor, MarkdownService, ModifyPunctuationHighlightPostProcessor, ParseAlerts, ParseCodeGroup, ParseCodeView, ParseExampleGroup, ParsePreviewGroup, ScrollToElementInContainer, SeparateCodeByLinesPostProcessor, TableOfContentData, copyToClipboard, getContent, setCookieConsent };
2705
+ export { CalculateHashFromScrollPositionHandler, CalculateHashFromScrollPositionRequest, ChangeCodeFocusedSyntaxPreProcessor, CookiePopup, EMarkdownContainerType, FAnalyticsService, FAsyncCodeViewHandler, FBadgeComponent, FCheckboxComponent, FCodeGroupBodyHandler, FCodeGroupHandler, FCodeViewHandler, FDocumentationComponent, FDocumentationEnvironmentService, FExampleViewHandler, FFooterEditInformationComponent, FFooterNavigationButtonComponent, FFooterNavigationComponent, FHamburgerButtonComponent, FHeadTagService, FHeaderComponent, FHeaderMenuComponent, FHomePageComponent, FHomePageEnvironmentService, FHomePageFeaturesComponent, FHomePageFooterComponent, FHomePageHeaderComponent, FJsonLdService, FMarkdownFooterComponent, FMarkdownRendererComponent, FMetaService, FNavigationGroupComponent, FNavigationHeaderComponent, FNavigationItemComponent, FNavigationPanelComponent, FPageComponent, FPopoverService, FPreviewComponent, FScrollableContainerComponent, FSocialLinksComponent, FTableOfContentComponent, FTableOfContentItemsComponent, FThemeButtonComponent, FVersionComponent, F_ACCEPT_COOKIES_KEY, F_DOCS_ENVIRONMENT, F_DOCS_ROUTES, F_DOCUMENTATION_COMPONENT, F_HOME_PAGE_COMPONENT, F_HOME_PAGE_ENVIRONMENT, F_HOME_PAGE_ROUTES, GetAbsoluteTopToContainerHandler, GetAbsoluteTopToContainerRequest, GetPreviousNextPageNavigationHandler, GetPreviousNextPageNavigationRequest, GetPreviousNextPageNavigationResponse, GetTableOfContentDataHandler, GetTableOfContentDataRequest, GetVersionHandler, GetVersionRequest, HandleDynamicComponentsHandler, HandleDynamicComponentsRequest, HandleNavigationLinksHandler, HandleNavigationLinksRequest, HandleParsedContainersHandler, HandleParsedContainersRequest, HighlightService, INTERNAL_ENVIRONMENT_SERVICE, MarkCodeFocusedBlocksPostProcessor, MarkdownService, ModifyPunctuationHighlightPostProcessor, ParseAlerts, ParseCodeGroup, ParseCodeView, ParseExampleGroup, ParsePreviewGroup, ScrollToElementInContainer, SeparateCodeByLinesPostProcessor, TableOfContentData, copyToClipboard, getContent, setCookieConsent };
2405
2706
  //# sourceMappingURL=foblex-m-render.mjs.map