@ngstarter-ui/components 1.0.27 → 1.0.30

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 (230) hide show
  1. package/fesm2022/ngstarter-ui-components-action-required.mjs +2 -2
  2. package/fesm2022/ngstarter-ui-components-action-required.mjs.map +1 -1
  3. package/fesm2022/ngstarter-ui-components-alert.mjs +2 -2
  4. package/fesm2022/ngstarter-ui-components-alert.mjs.map +1 -1
  5. package/fesm2022/ngstarter-ui-components-announcement.mjs +2 -2
  6. package/fesm2022/ngstarter-ui-components-announcement.mjs.map +1 -1
  7. package/fesm2022/ngstarter-ui-components-autocomplete.mjs +2 -2
  8. package/fesm2022/ngstarter-ui-components-autocomplete.mjs.map +1 -1
  9. package/fesm2022/ngstarter-ui-components-avatar.mjs +8 -8
  10. package/fesm2022/ngstarter-ui-components-avatar.mjs.map +1 -1
  11. package/fesm2022/ngstarter-ui-components-badge.mjs +2 -2
  12. package/fesm2022/ngstarter-ui-components-badge.mjs.map +1 -1
  13. package/fesm2022/ngstarter-ui-components-block-loader.mjs +2 -2
  14. package/fesm2022/ngstarter-ui-components-block-loader.mjs.map +1 -1
  15. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs +2 -2
  16. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs.map +1 -1
  17. package/fesm2022/ngstarter-ui-components-button-toggle.mjs +4 -4
  18. package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
  19. package/fesm2022/ngstarter-ui-components-button.mjs +2 -2
  20. package/fesm2022/ngstarter-ui-components-button.mjs.map +1 -1
  21. package/fesm2022/ngstarter-ui-components-card.mjs +2 -2
  22. package/fesm2022/ngstarter-ui-components-card.mjs.map +1 -1
  23. package/fesm2022/ngstarter-ui-components-checkbox.mjs +2 -2
  24. package/fesm2022/ngstarter-ui-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/ngstarter-ui-components-chips.mjs +6 -6
  26. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
  27. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +2 -2
  28. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
  29. package/fesm2022/ngstarter-ui-components-color-picker.mjs +2 -2
  30. package/fesm2022/ngstarter-ui-components-color-picker.mjs.map +1 -1
  31. package/fesm2022/ngstarter-ui-components-color-switcher.mjs +2 -2
  32. package/fesm2022/ngstarter-ui-components-color-switcher.mjs.map +1 -1
  33. package/fesm2022/ngstarter-ui-components-command-bar.mjs +2 -2
  34. package/fesm2022/ngstarter-ui-components-command-bar.mjs.map +1 -1
  35. package/fesm2022/ngstarter-ui-components-comment-editor.mjs +34 -21
  36. package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -1
  37. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Bk6QTli8.mjs → ngstarter-ui-components-content-editor-code-block.component-CpZ5gJOc.mjs} +4 -4
  38. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Bk6QTli8.mjs.map → ngstarter-ui-components-content-editor-code-block.component-CpZ5gJOc.mjs.map} +1 -1
  39. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-BbkC_t86.mjs → ngstarter-ui-components-content-editor-embed-block-ghm0_0AF.mjs} +2 -2
  40. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-BbkC_t86.mjs.map → ngstarter-ui-components-content-editor-embed-block-ghm0_0AF.mjs.map} +1 -1
  41. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-D9_CxTY1.mjs → ngstarter-ui-components-content-editor-heading-block.component-C1FH89Sj.mjs} +4 -4
  42. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-D9_CxTY1.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-C1FH89Sj.mjs.map} +1 -1
  43. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-B4zJyUg1.mjs → ngstarter-ui-components-content-editor-image-block.component-ahCIfpvQ.mjs} +4 -4
  44. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-B4zJyUg1.mjs.map → ngstarter-ui-components-content-editor-image-block.component-ahCIfpvQ.mjs.map} +1 -1
  45. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-Cv6wx5Xe.mjs → ngstarter-ui-components-content-editor-list-block.component-guhW_EyK.mjs} +4 -4
  46. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-Cv6wx5Xe.mjs.map → ngstarter-ui-components-content-editor-list-block.component-guhW_EyK.mjs.map} +1 -1
  47. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-1Zi2nAX5.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-DNLTNGYa.mjs} +15 -15
  48. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-1Zi2nAX5.mjs.map → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-DNLTNGYa.mjs.map} +1 -1
  49. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-C9bQvDYU.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-DjgGUc7s.mjs} +4 -4
  50. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-C9bQvDYU.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-DjgGUc7s.mjs.map} +1 -1
  51. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-BbHds2r2.mjs → ngstarter-ui-components-content-editor-quote-block.component-B3pek1H6.mjs} +4 -4
  52. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-BbHds2r2.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-B3pek1H6.mjs.map} +1 -1
  53. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-DlDh7Fnn.mjs → ngstarter-ui-components-content-editor-table-block.component-bgBNjf4d.mjs} +6 -6
  54. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-DlDh7Fnn.mjs.map → ngstarter-ui-components-content-editor-table-block.component-bgBNjf4d.mjs.map} +1 -1
  55. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-m4DTihP2.mjs → ngstarter-ui-components-content-editor-video-block.component-DPlYe-_8.mjs} +2 -2
  56. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-m4DTihP2.mjs.map → ngstarter-ui-components-content-editor-video-block.component-DPlYe-_8.mjs.map} +1 -1
  57. package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
  58. package/fesm2022/ngstarter-ui-components-content-fade.mjs +2 -2
  59. package/fesm2022/ngstarter-ui-components-content-fade.mjs.map +1 -1
  60. package/fesm2022/ngstarter-ui-components-cookie-popup.mjs +2 -2
  61. package/fesm2022/ngstarter-ui-components-cookie-popup.mjs.map +1 -1
  62. package/fesm2022/ngstarter-ui-components-core.mjs +137 -34
  63. package/fesm2022/ngstarter-ui-components-core.mjs.map +1 -1
  64. package/fesm2022/ngstarter-ui-components-country-select.mjs +2 -2
  65. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  66. package/fesm2022/ngstarter-ui-components-data-view.mjs +2 -2
  67. package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -1
  68. package/fesm2022/ngstarter-ui-components-datepicker.mjs +10 -10
  69. package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
  70. package/fesm2022/ngstarter-ui-components-dialog.mjs +8 -8
  71. package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
  72. package/fesm2022/ngstarter-ui-components-divider.mjs +4 -4
  73. package/fesm2022/ngstarter-ui-components-divider.mjs.map +1 -1
  74. package/fesm2022/ngstarter-ui-components-drawer.mjs +2 -2
  75. package/fesm2022/ngstarter-ui-components-drawer.mjs.map +1 -1
  76. package/fesm2022/ngstarter-ui-components-emoji-picker.mjs +2 -2
  77. package/fesm2022/ngstarter-ui-components-emoji-picker.mjs.map +1 -1
  78. package/fesm2022/ngstarter-ui-components-empty-state.mjs +4 -4
  79. package/fesm2022/ngstarter-ui-components-empty-state.mjs.map +1 -1
  80. package/fesm2022/ngstarter-ui-components-expand.mjs +2 -2
  81. package/fesm2022/ngstarter-ui-components-expand.mjs.map +1 -1
  82. package/fesm2022/ngstarter-ui-components-expansion.mjs +2 -2
  83. package/fesm2022/ngstarter-ui-components-expansion.mjs.map +1 -1
  84. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +2 -2
  85. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  86. package/fesm2022/ngstarter-ui-components-form-field.mjs +4 -4
  87. package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -1
  88. package/fesm2022/{ngstarter-ui-components-form-renderer-divider-content-CwGzDCZv.mjs → ngstarter-ui-components-form-renderer-divider-content-D8Sffofu.mjs} +3 -3
  89. package/fesm2022/{ngstarter-ui-components-form-renderer-divider-content-CwGzDCZv.mjs.map → ngstarter-ui-components-form-renderer-divider-content-D8Sffofu.mjs.map} +1 -1
  90. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-Cv3AGpoq.mjs → ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs} +3 -3
  91. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-Cv3AGpoq.mjs.map → ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs.map} +1 -1
  92. package/fesm2022/ngstarter-ui-components-form-renderer.mjs +2 -2
  93. package/fesm2022/ngstarter-ui-components-gauge.mjs +2 -2
  94. package/fesm2022/ngstarter-ui-components-gauge.mjs.map +1 -1
  95. package/fesm2022/ngstarter-ui-components-grid.mjs +2 -2
  96. package/fesm2022/ngstarter-ui-components-grid.mjs.map +1 -1
  97. package/fesm2022/ngstarter-ui-components-guided-tour.mjs +4 -4
  98. package/fesm2022/ngstarter-ui-components-guided-tour.mjs.map +1 -1
  99. package/fesm2022/ngstarter-ui-components-image-placeholder.mjs +2 -2
  100. package/fesm2022/ngstarter-ui-components-image-placeholder.mjs.map +1 -1
  101. package/fesm2022/ngstarter-ui-components-image-resizer.mjs +2 -2
  102. package/fesm2022/ngstarter-ui-components-image-resizer.mjs.map +1 -1
  103. package/fesm2022/ngstarter-ui-components-image-viewer.mjs +2 -2
  104. package/fesm2022/ngstarter-ui-components-image-viewer.mjs.map +1 -1
  105. package/fesm2022/ngstarter-ui-components-image-zoom-viewer.mjs +2 -2
  106. package/fesm2022/ngstarter-ui-components-image-zoom-viewer.mjs.map +1 -1
  107. package/fesm2022/ngstarter-ui-components-incidents.mjs +2 -2
  108. package/fesm2022/ngstarter-ui-components-incidents.mjs.map +1 -1
  109. package/fesm2022/ngstarter-ui-components-inline-text-edit.mjs +2 -2
  110. package/fesm2022/ngstarter-ui-components-inline-text-edit.mjs.map +1 -1
  111. package/fesm2022/ngstarter-ui-components-kanban-board.mjs +2 -2
  112. package/fesm2022/ngstarter-ui-components-kanban-board.mjs.map +1 -1
  113. package/fesm2022/ngstarter-ui-components-kbd.mjs +2 -2
  114. package/fesm2022/ngstarter-ui-components-kbd.mjs.map +1 -1
  115. package/fesm2022/ngstarter-ui-components-list.mjs +10 -10
  116. package/fesm2022/ngstarter-ui-components-list.mjs.map +1 -1
  117. package/fesm2022/ngstarter-ui-components-logo.mjs +8 -8
  118. package/fesm2022/ngstarter-ui-components-logo.mjs.map +1 -1
  119. package/fesm2022/ngstarter-ui-components-menu.mjs +8 -8
  120. package/fesm2022/ngstarter-ui-components-menu.mjs.map +1 -1
  121. package/fesm2022/ngstarter-ui-components-micro-chart.mjs +10 -10
  122. package/fesm2022/ngstarter-ui-components-micro-chart.mjs.map +1 -1
  123. package/fesm2022/ngstarter-ui-components-navigation.mjs +8 -8
  124. package/fesm2022/ngstarter-ui-components-navigation.mjs.map +1 -1
  125. package/fesm2022/ngstarter-ui-components-notifications.mjs +8 -8
  126. package/fesm2022/ngstarter-ui-components-notifications.mjs.map +1 -1
  127. package/fesm2022/ngstarter-ui-components-number-input.mjs +2 -2
  128. package/fesm2022/ngstarter-ui-components-number-input.mjs.map +1 -1
  129. package/fesm2022/ngstarter-ui-components-option.mjs +2 -2
  130. package/fesm2022/ngstarter-ui-components-option.mjs.map +1 -1
  131. package/fesm2022/ngstarter-ui-components-paginator.mjs +2 -2
  132. package/fesm2022/ngstarter-ui-components-paginator.mjs.map +1 -1
  133. package/fesm2022/ngstarter-ui-components-password-strength.mjs +2 -2
  134. package/fesm2022/ngstarter-ui-components-password-strength.mjs.map +1 -1
  135. package/fesm2022/ngstarter-ui-components-phone-input.mjs +2 -2
  136. package/fesm2022/ngstarter-ui-components-phone-input.mjs.map +1 -1
  137. package/fesm2022/ngstarter-ui-components-popover.mjs +2 -2
  138. package/fesm2022/ngstarter-ui-components-popover.mjs.map +1 -1
  139. package/fesm2022/ngstarter-ui-components-progress-bar.mjs +2 -2
  140. package/fesm2022/ngstarter-ui-components-progress-bar.mjs.map +1 -1
  141. package/fesm2022/ngstarter-ui-components-radio-card.mjs +4 -4
  142. package/fesm2022/ngstarter-ui-components-radio-card.mjs.map +1 -1
  143. package/fesm2022/ngstarter-ui-components-radio.mjs +2 -2
  144. package/fesm2022/ngstarter-ui-components-radio.mjs.map +1 -1
  145. package/fesm2022/ngstarter-ui-components-rail-nav.mjs +4 -4
  146. package/fesm2022/ngstarter-ui-components-rail-nav.mjs.map +1 -1
  147. package/fesm2022/ngstarter-ui-components-resizable-container.mjs +2 -2
  148. package/fesm2022/ngstarter-ui-components-resizable-container.mjs.map +1 -1
  149. package/fesm2022/ngstarter-ui-components-screen-loader.mjs +2 -2
  150. package/fesm2022/ngstarter-ui-components-screen-loader.mjs.map +1 -1
  151. package/fesm2022/ngstarter-ui-components-scroll-spy.mjs +6 -6
  152. package/fesm2022/ngstarter-ui-components-scroll-spy.mjs.map +1 -1
  153. package/fesm2022/ngstarter-ui-components-scrollbar-area.mjs +2 -2
  154. package/fesm2022/ngstarter-ui-components-scrollbar-area.mjs.map +1 -1
  155. package/fesm2022/ngstarter-ui-components-segmented.mjs +2 -2
  156. package/fesm2022/ngstarter-ui-components-segmented.mjs.map +1 -1
  157. package/fesm2022/ngstarter-ui-components-select.mjs +8 -8
  158. package/fesm2022/ngstarter-ui-components-select.mjs.map +1 -1
  159. package/fesm2022/ngstarter-ui-components-side-panel.mjs +2 -2
  160. package/fesm2022/ngstarter-ui-components-side-panel.mjs.map +1 -1
  161. package/fesm2022/ngstarter-ui-components-sidebar.mjs +14 -14
  162. package/fesm2022/ngstarter-ui-components-sidebar.mjs.map +1 -1
  163. package/fesm2022/ngstarter-ui-components-sidenav.mjs +4 -4
  164. package/fesm2022/ngstarter-ui-components-sidenav.mjs.map +1 -1
  165. package/fesm2022/ngstarter-ui-components-signature-pad.mjs +2 -2
  166. package/fesm2022/ngstarter-ui-components-signature-pad.mjs.map +1 -1
  167. package/fesm2022/ngstarter-ui-components-skeleton.mjs +2 -2
  168. package/fesm2022/ngstarter-ui-components-skeleton.mjs.map +1 -1
  169. package/fesm2022/ngstarter-ui-components-slide-toggle.mjs +2 -2
  170. package/fesm2022/ngstarter-ui-components-slide-toggle.mjs.map +1 -1
  171. package/fesm2022/ngstarter-ui-components-slider.mjs +2 -2
  172. package/fesm2022/ngstarter-ui-components-slider.mjs.map +1 -1
  173. package/fesm2022/ngstarter-ui-components-snack-bar.mjs +2 -2
  174. package/fesm2022/ngstarter-ui-components-snack-bar.mjs.map +1 -1
  175. package/fesm2022/ngstarter-ui-components-spinner.mjs +2 -2
  176. package/fesm2022/ngstarter-ui-components-spinner.mjs.map +1 -1
  177. package/fesm2022/ngstarter-ui-components-splash-screen.mjs +2 -2
  178. package/fesm2022/ngstarter-ui-components-splash-screen.mjs.map +1 -1
  179. package/fesm2022/ngstarter-ui-components-split.mjs +2 -2
  180. package/fesm2022/ngstarter-ui-components-split.mjs.map +1 -1
  181. package/fesm2022/ngstarter-ui-components-stepper.mjs +2 -2
  182. package/fesm2022/ngstarter-ui-components-stepper.mjs.map +1 -1
  183. package/fesm2022/ngstarter-ui-components-suggestions.mjs +4 -4
  184. package/fesm2022/ngstarter-ui-components-suggestions.mjs.map +1 -1
  185. package/fesm2022/ngstarter-ui-components-tab-panel.mjs +2 -2
  186. package/fesm2022/ngstarter-ui-components-tab-panel.mjs.map +1 -1
  187. package/fesm2022/ngstarter-ui-components-table.mjs +6 -6
  188. package/fesm2022/ngstarter-ui-components-table.mjs.map +1 -1
  189. package/fesm2022/ngstarter-ui-components-tabs.mjs +6 -6
  190. package/fesm2022/ngstarter-ui-components-tabs.mjs.map +1 -1
  191. package/fesm2022/ngstarter-ui-components-text-editor.mjs +10 -10
  192. package/fesm2022/ngstarter-ui-components-text-editor.mjs.map +1 -1
  193. package/fesm2022/ngstarter-ui-components-thumbnail-maker.mjs +2 -2
  194. package/fesm2022/ngstarter-ui-components-thumbnail-maker.mjs.map +1 -1
  195. package/fesm2022/ngstarter-ui-components-tiles.mjs +2 -2
  196. package/fesm2022/ngstarter-ui-components-tiles.mjs.map +1 -1
  197. package/fesm2022/ngstarter-ui-components-timeline.mjs +2 -2
  198. package/fesm2022/ngstarter-ui-components-timeline.mjs.map +1 -1
  199. package/fesm2022/ngstarter-ui-components-timepicker.mjs +2 -2
  200. package/fesm2022/ngstarter-ui-components-timepicker.mjs.map +1 -1
  201. package/fesm2022/ngstarter-ui-components-toolbar.mjs +4 -4
  202. package/fesm2022/ngstarter-ui-components-toolbar.mjs.map +1 -1
  203. package/fesm2022/ngstarter-ui-components-tooltip.mjs +2 -2
  204. package/fesm2022/ngstarter-ui-components-tooltip.mjs.map +1 -1
  205. package/fesm2022/ngstarter-ui-components-upload.mjs +10 -10
  206. package/fesm2022/ngstarter-ui-components-upload.mjs.map +1 -1
  207. package/fesm2022/ngstarter-ui-components-video-viewer.mjs +2 -2
  208. package/fesm2022/ngstarter-ui-components-video-viewer.mjs.map +1 -1
  209. package/package.json +15 -3
  210. package/schematics/collection.json +10 -0
  211. package/schematics/migrations.json +11 -0
  212. package/schematics/ng-add/index.d.ts +6 -0
  213. package/schematics/ng-add/index.js +14 -0
  214. package/schematics/ng-add/index.js.map +1 -0
  215. package/schematics/ng-add/schema.json +17 -0
  216. package/schematics/ng-update/index.d.ts +6 -0
  217. package/schematics/ng-update/index.js +14 -0
  218. package/schematics/ng-update/index.js.map +1 -0
  219. package/schematics/ng-update/schema.json +17 -0
  220. package/schematics/utils.d.ts +8 -0
  221. package/schematics/utils.js +305 -0
  222. package/schematics/utils.js.map +1 -0
  223. package/styles/_common.scss +84 -390
  224. package/styles/_global.scss +12 -12
  225. package/styles/_tokens.scss +1041 -0
  226. package/styles/themes/compact.scss +9 -0
  227. package/styles/themes/enterprise.scss +349 -0
  228. package/styles/themes/modern.scss +352 -0
  229. package/types/ngstarter-ui-components-comment-editor.d.ts +10 -2
  230. package/types/ngstarter-ui-components-core.d.ts +41 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-guided-tour.mjs","sources":["../../../projects/components/guided-tour/src/tour.types.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.html","../../../projects/components/guided-tour/src/tour-step/tour-step.ts","../../../projects/components/guided-tour/src/tour-step/tour-step.html","../../../projects/components/guided-tour/src/tour.service.ts","../../../projects/components/guided-tour/src/tour-anchor/tour-anchor.directive.ts","../../../projects/components/guided-tour/ngstarter-ui-components-guided-tour.ts"],"sourcesContent":["import { InjectionToken, Provider, TemplateRef } from '@angular/core';\n\nexport interface TourConfig {\n /**\n * Default padding for the highlighted element.\n * @default 4\n */\n padding?: number;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * @default false\n */\n closeOnBackdropClick?: boolean;\n /**\n * Whether to enable keyboard navigation (arrows and Esc).\n * @default true\n */\n keyboardNavigation?: boolean;\n /**\n * Default text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Default text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Default text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Default text for the \"Skip\" button.\n */\n skipBtnText?: string;\n}\n\nexport const TOUR_CONFIG = new InjectionToken<TourConfig>('TOUR_CONFIG');\n\nexport function provideTourConfig(config: TourConfig): Provider {\n return {\n provide: TOUR_CONFIG,\n useValue: config\n };\n}\n\nexport type TourStepPosition = 'below-start' | 'below-center' | 'below-end' |\n 'above-start' | 'above-center' | 'above-end' |\n 'before-start' | 'before-center' | 'before-end' |\n 'after-start' | 'after-center' | 'after-end';\n\nexport interface TourStepConfig {\n /**\n * Unique identifier for the tour step anchor or a function that returns an element or selector.\n */\n anchorId: string | (() => HTMLElement | string);\n /**\n * Title of the tour step.\n */\n title?: string;\n /**\n * Content of the tour step.\n */\n content?: string;\n /**\n * HTML content of the tour step.\n */\n htmlContent?: string;\n /**\n * Template for the tour step.\n */\n template?: TemplateRef<any>;\n /**\n * Context for the template.\n */\n templateContext?: any;\n /**\n * Custom data for the tour step.\n */\n data?: any;\n /**\n * Whether to show a backdrop and highlight the anchor element.\n */\n withBackdrop?: boolean;\n /**\n * Whether to disable interaction with the highlighted element.\n */\n disableInteraction?: boolean;\n /**\n * Padding for the highlighted element.\n * If not provided, the default from TourConfig will be used.\n */\n padding?: number;\n /**\n * Route to navigate to before showing the step.\n */\n route?: string;\n /**\n * CSS selector to wait for before showing the step.\n */\n waitFor?: string;\n /**\n * Callback before showing the step.\n */\n onShow?: () => void | Promise<void>;\n /**\n * Callback before hiding the step.\n */\n onHide?: () => void | Promise<void>;\n /**\n * Callback when \"Next\" is clicked.\n */\n onNext?: () => void | Promise<void>;\n /**\n * Callback when \"Prev\" is clicked.\n */\n onPrev?: () => void | Promise<void>;\n /**\n * Whether to hide the arrow pointing to the anchor.\n */\n hideArrow?: boolean;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * If not provided, the default from TourConfig will be used.\n */\n closeOnBackdropClick?: boolean;\n /**\n * Text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Text for the \"Skip\" button.\n */\n skipBtnText?: string;\n /**\n * Explicit position for the tour step.\n * If not provided, the best position will be chosen automatically.\n */\n position?: TourStepPosition;\n}\n\nexport enum TourState {\n OFF,\n ON,\n PAUSED\n}\n\nexport const TOUR_STEP_COMPONENT = new InjectionToken<any>('TOUR_STEP_COMPONENT');\n","import { Component, ElementRef, inject, signal, HostListener, computed, output, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-tour-backdrop',\n standalone: true,\n templateUrl: './tour-backdrop.html',\n styleUrl: './tour-backdrop.scss',\n host: {\n '[class.is-initial]': 'isInitial()',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n '[style.pointer-events]': '\"none\"',\n },\n})\nexport class TourBackdrop {\n private readonly elementRef = inject(ElementRef);\n\n backdropClick = output<void>();\n\n animateEnterClass = input(true);\n\n animateLeaveClass = input(false);\n\n rect = signal<{ top: number; left: number; width: number; height: number }>({ top: 0, left: 0, width: 0, height: 0 });\n rx = signal<number>(0);\n padding = signal<number>(0);\n disableInteraction = signal<boolean>(false);\n viewBox = signal<string>(`0 0 ${window.innerWidth || 1000} ${window.innerHeight || 1000}`);\n isInitial = signal<boolean>(true);\n\n backdropPath = computed(() => {\n const { top, left, width, height } = this.rect();\n const p = this.padding();\n const radius = this.rx();\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const rectTop = top - p;\n const rectLeft = left - p;\n const rectWidth = width + 2 * p;\n const rectHeight = height + 2 * p;\n\n // Outer rectangle (entire screen)\n const screenPath = `M0,0 H${w} V${h} H0 Z`;\n\n // Hole (inner contour)\n const holePath = `\n M${rectLeft + radius},${rectTop}\n L${rectLeft + rectWidth - radius},${rectTop}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth},${rectTop + radius}\n L${rectLeft + rectWidth},${rectTop + rectHeight - radius}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth - radius},${rectTop + rectHeight}\n L${rectLeft + radius},${rectTop + rectHeight}\n A${radius},${radius} 0 0 1 ${rectLeft},${rectTop + rectHeight - radius}\n L${rectLeft},${rectTop + radius}\n A${radius},${radius} 0 0 1 ${rectLeft + radius},${rectTop}\n Z\n `.replace(/\\s+/g, ' ');\n\n return `${screenPath} ${holePath}`;\n });\n\n constructor() {\n this.updateViewBox();\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n onResize(): void {\n this.updatePositionFromAnchor();\n this.updateViewBox();\n }\n\n private anchorElement: HTMLElement | null = null;\n\n updatePosition(rect: DOMRect, borderRadius: string, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (anchorElement) {\n this.anchorElement = anchorElement;\n }\n const isInitial = this.isInitial();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n\n const radius = parseInt(borderRadius, 10) || 0;\n this.rx.set(radius);\n this.padding.set(padding);\n this.disableInteraction.set(disableInteraction);\n\n this.updateViewBox();\n\n if (isInitial) {\n setTimeout(() => {\n this.isInitial.set(false);\n });\n }\n }\n\n private updatePositionFromAnchor(): void {\n if (this.anchorElement) {\n const rect = this.anchorElement.getBoundingClientRect();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n }\n }\n\n private updateViewBox(): void {\n const w = window.innerWidth || 1000;\n const h = window.innerHeight || 1000;\n this.viewBox.set(`0 0 ${w} ${h}`);\n }\n}\n","<svg\n class=\"absolute top-0 left-0 w-full h-full pointer-events-none\"\n [attr.viewBox]=\"viewBox()\"\n preserveAspectRatio=\"xMinYMin slice\"\n>\n <path\n fill-rule=\"evenodd\"\n [attr.d]=\"backdropPath()\"\n (click)=\"backdropClick.emit()\"\n />\n <rect\n [attr.x]=\"rect().left - padding()\"\n [attr.y]=\"rect().top - padding()\"\n [attr.width]=\"rect().width + 2 * padding()\"\n [attr.height]=\"rect().height + 2 * padding()\"\n [attr.rx]=\"rx()\"\n [class.interactive]=\"!disableInteraction()\"\n ></rect>\n</svg>\n","import {\n Component,\n input,\n ChangeDetectionStrategy,\n signal, inject, computed\n} from '@angular/core';\nimport { CommonModule, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TourService } from '../tour.service';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TourStepConfig, TOUR_CONFIG } from '../tour.types';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-tour-step',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n NgClass,\n CommonModule,\n Button\n ],\n templateUrl: './tour-step.html',\n styleUrl: './tour-step.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-tour-step not-prose',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n }\n})\nexport class TourStep {\n readonly tourService = inject(TourService);\n private _sanitizer = inject(DomSanitizer);\n\n step = input.required<TourStepConfig>();\n isFirst = input(false);\n isLast = input(false);\n position = input<ConnectedPosition | null>(null);\n\n animateEnterClass = input(true);\n animateLeaveClass = input(false);\n\n readonly config = inject(TOUR_CONFIG, { optional: true });\n\n protected readonly htmlContent = computed(() => {\n const html = this.step().htmlContent;\n return html ? this._sanitizer.bypassSecurityTrustHtml(html) : null;\n });\n\n getArrowClasses(pos: ConnectedPosition | null): string {\n if (!pos) {\n return 'hidden';\n }\n\n const classes = [];\n\n // Vertical position of the arrow on the step\n if (pos.overlayY === 'top' && pos.originY === 'bottom') {\n classes.push('pos-top'); // Arrow on the top edge of the step\n } else if (pos.overlayY === 'bottom' && pos.originY === 'top') {\n classes.push('pos-bottom'); // Arrow on the bottom edge of the step\n } else if (pos.overlayX === 'start' && pos.originX === 'end') {\n // Step is to the right of the element (AFTER)\n classes.push('pos-left');\n } else if (pos.overlayX === 'end' && pos.originX === 'start') {\n // Step is to the left of the element (BEFORE)\n classes.push('pos-right');\n }\n\n // Alignment of the arrow on the chosen edge\n if (classes.includes('pos-top') || classes.includes('pos-bottom')) {\n if (pos.overlayX === 'center') {\n classes.push('align-center');\n } else if (pos.overlayX === 'start') {\n classes.push('align-start');\n } else if (pos.overlayX === 'end') {\n classes.push('align-end');\n }\n } else if (classes.includes('pos-left') || classes.includes('pos-right')) {\n if (pos.overlayY === 'center') {\n classes.push('align-center');\n } else if (pos.overlayY === 'top') {\n classes.push('align-start');\n } else if (pos.overlayY === 'bottom') {\n classes.push('align-end');\n }\n }\n\n return classes.join(' ');\n }\n}\n","@if (!step().hideArrow) {\n <div class=\"tour-step-arrow\" [ngClass]=\"getArrowClasses(position())\"></div>\n}\n<div class=\"relative z-[1] transform-gpu\">\n @if (step().title) {\n <h3 class=\"mt-0 mb-2 font-semibold text-base leading-none tracking-tight\">{{ step().title }}</h3>\n }\n\n <div class=\"text-sm text-on-surface-variant\">\n @if (step().template) {\n <ng-container *ngTemplateOutlet=\"step().template!; context: step().templateContext\"/>\n } @else if (htmlContent()) {\n <div [innerHTML]=\"htmlContent()\"></div>\n } @else {\n {{ step().content }}\n }\n </div>\n\n <div class=\"flex justify-between gap-4 mt-4\">\n <button ngsButton (click)=\"tourService.end()\" class=\"button\">\n {{ step().skipBtnText || config?.skipBtnText || 'Close' }}\n </button>\n <div class=\"flex gap-2\">\n <button ngsButton=\"tonal\" (click)=\"tourService.prev()\" [disabled]=\"isFirst()\" class=\"button\">\n {{ step().prevBtnText || config?.prevBtnText || 'Prev' }}\n </button>\n <button ngsButton=\"filled\" (click)=\"tourService.next()\" class=\"button\">\n @if (isLast()) {\n {{ step().finishBtnText || config?.finishBtnText || 'Finish' }}\n } @else {\n {{ step().nextBtnText || config?.nextBtnText || 'Next' }}\n }\n </button>\n </div>\n </div>\n</div>\n","import { Injectable, signal, computed, inject, ViewContainerRef, ComponentRef, Type, OnDestroy } from '@angular/core';\nimport { TourStepConfig, TourState, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from './tour.types';\nimport { Subject } from 'rxjs';\nimport { Overlay, OverlayRef, ConnectedPosition, PositionStrategy, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { TourBackdrop } from './tour-backdrop/tour-backdrop';\nimport { TourStep } from './tour-step/tour-step';\nimport { DOCUMENT } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TourService implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n private readonly document = inject(DOCUMENT);\n private readonly router = inject(Router);\n private backdropOverlayRef: OverlayRef | null = null;\n private backdropComponentRef: ComponentRef<TourBackdrop> | null = null;\n\n private readonly _steps = signal<TourStepConfig[]>([]);\n private readonly _currentStepIndex = signal<number>(-1);\n private readonly _state = signal<TourState>(TourState.OFF);\n private readonly _anchors = new Map<string, any>();\n private stepOverlayRef: OverlayRef | null = null;\n private stepComponentRef: ComponentRef<any> | null = null;\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n\n constructor() {\n this.document.addEventListener('keydown', this.handleKeyDown);\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (this.state() !== TourState.ON || this.config?.keyboardNavigation === false) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowRight':\n void this.next();\n break;\n case 'ArrowLeft':\n void this.prev();\n break;\n case 'Escape':\n void this.end();\n break;\n }\n };\n\n readonly steps = this._steps.asReadonly();\n readonly currentStepIndex = this._currentStepIndex.asReadonly();\n readonly state = this._state.asReadonly();\n\n readonly currentStep = computed(() => {\n const index = this._currentStepIndex();\n const steps = this._steps();\n return index >= 0 && index < steps.length ? steps[index] : null;\n });\n\n readonly stepShow$ = new Subject<TourStepConfig>();\n readonly stepHide$ = new Subject<TourStepConfig>();\n readonly start$ = new Subject<void>();\n readonly end$ = new Subject<void>();\n\n registerAnchor(id: string, anchor: any): void {\n this._anchors.set(id, anchor);\n }\n\n unregisterAnchor(id: string): void {\n this._anchors.delete(id);\n }\n\n start(steps: TourStepConfig[]): void {\n this._steps.set(steps);\n this._state.set(TourState.ON);\n this.start$.next();\n void this.goToStep(0);\n }\n\n async end(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n // Start hiding step and backdrop in parallel\n const hideStepPromise = this._hideStep(currentStep);\n const hideBackdropPromise = this.hideBackdrop(true);\n\n await Promise.all([hideStepPromise, hideBackdropPromise]);\n } else {\n await this.hideBackdrop(true);\n }\n\n this._state.set(TourState.OFF);\n this._currentStepIndex.set(-1);\n this._steps.set([]);\n this.end$.next();\n }\n\n async next(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onNext) {\n await currentStep.onNext();\n }\n\n if (this._currentStepIndex() < this._steps().length - 1) {\n await this.goToStep(this._currentStepIndex() + 1);\n } else {\n await this.end();\n }\n }\n\n async prev(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onPrev) {\n await currentStep.onPrev();\n }\n\n if (this._currentStepIndex() > 0) {\n await this.goToStep(this._currentStepIndex() - 1);\n }\n }\n\n async goToStep(index: number): Promise<void> {\n const currentStep = this.currentStep();\n const nextStep = this._steps()[index];\n\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n await this._hideStep(currentStep);\n }\n\n if (currentStep?.withBackdrop && !nextStep?.withBackdrop) {\n this.hideBackdrop(false);\n }\n\n if (nextStep?.route) {\n const currentUrl = this.router.url;\n const targetUrl = nextStep.route;\n\n // Compare only path without params and fragment if needed,\n // but usually Router.url returns full path.\n // If URL differs, perform transition.\n if (currentUrl !== targetUrl) {\n await this.router.navigateByUrl(targetUrl);\n }\n }\n\n if (nextStep?.onShow) {\n await nextStep.onShow();\n }\n\n if (nextStep?.waitFor) {\n try {\n await this.waitForElement(nextStep.waitFor);\n } catch (e) {\n console.warn(`TourService: Element \"${nextStep.waitFor}\" not found after timeout.`);\n }\n }\n\n this._currentStepIndex.set(index);\n if (nextStep) {\n this.stepShow$.next(nextStep);\n this._showStep(nextStep);\n }\n }\n\n private waitForElement(selector: string, timeout = 3000): Promise<Element> {\n return new Promise((resolve, reject) => {\n const element = document.querySelector(selector);\n if (element) {\n return resolve(element);\n }\n\n const observer = new MutationObserver(() => {\n const element = document.querySelector(selector);\n if (element) {\n observer.disconnect();\n clearTimeout(timer);\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n\n const timer = setTimeout(() => {\n observer.disconnect();\n reject(new Error(`Timeout waiting for element: ${selector}`));\n }, timeout);\n });\n }\n\n showBackdrop(rect: DOMRect, borderRadius: string, viewContainerRef?: ViewContainerRef, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (!this.backdropOverlayRef) {\n this.backdropOverlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false\n });\n const portal = new ComponentPortal(TourBackdrop, viewContainerRef);\n this.backdropComponentRef = this.backdropOverlayRef.attach(portal);\n\n this.backdropComponentRef.instance.backdropClick.subscribe(() => {\n const step = this.currentStep();\n const closeOnBackdropClick = step?.closeOnBackdropClick ?? this.config?.closeOnBackdropClick ?? false;\n if (closeOnBackdropClick) {\n this.end();\n }\n });\n }\n this.backdropComponentRef?.instance.updatePosition(rect, borderRadius, anchorElement, padding, disableInteraction);\n }\n\n async hideBackdrop(animate: boolean): Promise<void> {\n const overlayRef = this.backdropOverlayRef;\n const componentRef = this.backdropComponentRef;\n\n if (!overlayRef) {\n return;\n }\n\n if (this.backdropOverlayRef === overlayRef) {\n this.backdropOverlayRef = null;\n this.backdropComponentRef = null;\n }\n\n if (animate) {\n if (componentRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n }\n return new Promise(resolve => {\n setTimeout(() => {\n overlayRef.dispose();\n resolve();\n }, 150);\n });\n } else {\n overlayRef.dispose();\n return Promise.resolve();\n }\n }\n\n private _showStep(step: TourStepConfig): void {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n let anchorElement: HTMLElement | null = null;\n let anchorDirective: any = null;\n\n if (typeof anchorId === 'string') {\n anchorDirective = this._anchors.get(anchorId);\n if (anchorDirective) {\n anchorDirective.showStep(step);\n return;\n }\n anchorElement = document.querySelector(anchorId) as HTMLElement;\n\n if (!anchorElement) {\n anchorElement = document.getElementById(anchorId);\n }\n } else if (anchorId instanceof HTMLElement) {\n anchorElement = anchorId;\n }\n\n if (anchorElement) {\n this.showStepForElement(anchorElement, step);\n }\n }\n\n private showStepForElement(element: HTMLElement, step: TourStepConfig): void {\n if (this.stepOverlayRef) {\n const oldOverlayRef = this.stepOverlayRef;\n const oldComponentRef = this.stepComponentRef;\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n oldOverlayRef.dispose();\n }\n\n const rect = element.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n element.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n setTimeout(() => {\n if (this.state() === TourState.OFF) {\n return;\n }\n\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n let positionStrategy: PositionStrategy;\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(element)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.stepOverlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.showBackdrop(rect, style.borderRadius, undefined, element, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType);\n\n this.stepComponentRef = this.stepOverlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.stepComponentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n }\n\n const steps = this.steps();\n const index = this.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this.stepOverlayRef.updatePosition();\n }\n\n }, 0);\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n\n private async _hideStep(step: TourStepConfig): Promise<void> {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n if (typeof anchorId === 'string') {\n const anchor = this._anchors.get(anchorId);\n if (anchor) {\n await anchor.hideStep();\n return;\n }\n }\n\n const overlayRef = this.stepOverlayRef;\n const componentRef = this.stepComponentRef;\n\n if (overlayRef) {\n if (this.stepOverlayRef === overlayRef) {\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n }\n\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 150));\n overlayRef.dispose();\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n input,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n inject,\n Type,\n ComponentRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TourService } from '../tour.service';\nimport { TourStepConfig, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from '../tour.types';\nimport { TourStep } from '../tour-step/tour-step';\nimport { TourBackdrop } from '../tour-backdrop/tour-backdrop';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\n\n@Directive({\n selector: '[ngsTourAnchor]',\n standalone: true\n})\nexport class TourAnchorDirective implements OnInit, OnDestroy {\n anchorId = input.required<string>({ alias: 'ngsTourAnchor' });\n\n private readonly elementRef = inject(ElementRef);\n private readonly tourService = inject(TourService);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n\n private overlayRef: OverlayRef | null = null;\n private componentRef: ComponentRef<any> | null = null;\n\n ngOnInit(): void {\n this.tourService.registerAnchor(this.anchorId(), this);\n }\n\n ngOnDestroy(): void {\n this.tourService.unregisterAnchor(this.anchorId());\n this.hideStep();\n }\n\n showStep(step: TourStepConfig): void {\n const currentOverlayRef = this.overlayRef;\n const currentComponentRef = this.componentRef;\n\n if (this.overlayRef === currentOverlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (currentOverlayRef) {\n currentOverlayRef.dispose();\n }\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n this.elementRef.nativeElement.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n const timeout = 0;\n\n // Give time for scroll to finish before calculating coordinates for the backdrop\n setTimeout(() => {\n if (this.tourService.state() === 0) { // TourState.OFF\n return;\n }\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const style = window.getComputedStyle(this.elementRef.nativeElement);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.tourService.showBackdrop(rect, style.borderRadius, this.viewContainerRef, this.elementRef.nativeElement, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType, this.viewContainerRef);\n this.componentRef = this.overlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n\n // Trigger position calculation to emit initial value\n this.overlayRef.updatePosition();\n }\n\n const steps = this.tourService.steps();\n const index = this.tourService.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n }, timeout);\n }\n\n async hideStep(): Promise<void> {\n const overlayRef = this.overlayRef;\n const componentRef = this.componentRef;\n\n if (this.overlayRef === overlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (overlayRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 200));\n overlayRef.dispose();\n }\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-guided-tour.mjs","sources":["../../../projects/components/guided-tour/src/tour.types.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.ts","../../../projects/components/guided-tour/src/tour-backdrop/tour-backdrop.html","../../../projects/components/guided-tour/src/tour-step/tour-step.ts","../../../projects/components/guided-tour/src/tour-step/tour-step.html","../../../projects/components/guided-tour/src/tour.service.ts","../../../projects/components/guided-tour/src/tour-anchor/tour-anchor.directive.ts","../../../projects/components/guided-tour/ngstarter-ui-components-guided-tour.ts"],"sourcesContent":["import { InjectionToken, Provider, TemplateRef } from '@angular/core';\n\nexport interface TourConfig {\n /**\n * Default padding for the highlighted element.\n * @default 4\n */\n padding?: number;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * @default false\n */\n closeOnBackdropClick?: boolean;\n /**\n * Whether to enable keyboard navigation (arrows and Esc).\n * @default true\n */\n keyboardNavigation?: boolean;\n /**\n * Default text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Default text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Default text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Default text for the \"Skip\" button.\n */\n skipBtnText?: string;\n}\n\nexport const TOUR_CONFIG = new InjectionToken<TourConfig>('TOUR_CONFIG');\n\nexport function provideTourConfig(config: TourConfig): Provider {\n return {\n provide: TOUR_CONFIG,\n useValue: config\n };\n}\n\nexport type TourStepPosition = 'below-start' | 'below-center' | 'below-end' |\n 'above-start' | 'above-center' | 'above-end' |\n 'before-start' | 'before-center' | 'before-end' |\n 'after-start' | 'after-center' | 'after-end';\n\nexport interface TourStepConfig {\n /**\n * Unique identifier for the tour step anchor or a function that returns an element or selector.\n */\n anchorId: string | (() => HTMLElement | string);\n /**\n * Title of the tour step.\n */\n title?: string;\n /**\n * Content of the tour step.\n */\n content?: string;\n /**\n * HTML content of the tour step.\n */\n htmlContent?: string;\n /**\n * Template for the tour step.\n */\n template?: TemplateRef<any>;\n /**\n * Context for the template.\n */\n templateContext?: any;\n /**\n * Custom data for the tour step.\n */\n data?: any;\n /**\n * Whether to show a backdrop and highlight the anchor element.\n */\n withBackdrop?: boolean;\n /**\n * Whether to disable interaction with the highlighted element.\n */\n disableInteraction?: boolean;\n /**\n * Padding for the highlighted element.\n * If not provided, the default from TourConfig will be used.\n */\n padding?: number;\n /**\n * Route to navigate to before showing the step.\n */\n route?: string;\n /**\n * CSS selector to wait for before showing the step.\n */\n waitFor?: string;\n /**\n * Callback before showing the step.\n */\n onShow?: () => void | Promise<void>;\n /**\n * Callback before hiding the step.\n */\n onHide?: () => void | Promise<void>;\n /**\n * Callback when \"Next\" is clicked.\n */\n onNext?: () => void | Promise<void>;\n /**\n * Callback when \"Prev\" is clicked.\n */\n onPrev?: () => void | Promise<void>;\n /**\n * Whether to hide the arrow pointing to the anchor.\n */\n hideArrow?: boolean;\n /**\n * Whether to close the tour when clicking on the backdrop.\n * If not provided, the default from TourConfig will be used.\n */\n closeOnBackdropClick?: boolean;\n /**\n * Text for the \"Next\" button.\n */\n nextBtnText?: string;\n /**\n * Text for the \"Prev\" button.\n */\n prevBtnText?: string;\n /**\n * Text for the \"Finish\" button.\n */\n finishBtnText?: string;\n /**\n * Text for the \"Skip\" button.\n */\n skipBtnText?: string;\n /**\n * Explicit position for the tour step.\n * If not provided, the best position will be chosen automatically.\n */\n position?: TourStepPosition;\n}\n\nexport enum TourState {\n OFF,\n ON,\n PAUSED\n}\n\nexport const TOUR_STEP_COMPONENT = new InjectionToken<any>('TOUR_STEP_COMPONENT');\n","import { Component, ElementRef, inject, signal, HostListener, computed, output, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-tour-backdrop',\n standalone: true,\n templateUrl: './tour-backdrop.html',\n styleUrl: './tour-backdrop.scss',\n host: {\n '[class.is-initial]': 'isInitial()',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n '[style.pointer-events]': '\"none\"',\n },\n})\nexport class TourBackdrop {\n private readonly elementRef = inject(ElementRef);\n\n backdropClick = output<void>();\n\n animateEnterClass = input(true);\n\n animateLeaveClass = input(false);\n\n rect = signal<{ top: number; left: number; width: number; height: number }>({ top: 0, left: 0, width: 0, height: 0 });\n rx = signal<number>(0);\n padding = signal<number>(0);\n disableInteraction = signal<boolean>(false);\n viewBox = signal<string>(`0 0 ${window.innerWidth || 1000} ${window.innerHeight || 1000}`);\n isInitial = signal<boolean>(true);\n\n backdropPath = computed(() => {\n const { top, left, width, height } = this.rect();\n const p = this.padding();\n const radius = this.rx();\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n const rectTop = top - p;\n const rectLeft = left - p;\n const rectWidth = width + 2 * p;\n const rectHeight = height + 2 * p;\n\n // Outer rectangle (entire screen)\n const screenPath = `M0,0 H${w} V${h} H0 Z`;\n\n // Hole (inner contour)\n const holePath = `\n M${rectLeft + radius},${rectTop}\n L${rectLeft + rectWidth - radius},${rectTop}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth},${rectTop + radius}\n L${rectLeft + rectWidth},${rectTop + rectHeight - radius}\n A${radius},${radius} 0 0 1 ${rectLeft + rectWidth - radius},${rectTop + rectHeight}\n L${rectLeft + radius},${rectTop + rectHeight}\n A${radius},${radius} 0 0 1 ${rectLeft},${rectTop + rectHeight - radius}\n L${rectLeft},${rectTop + radius}\n A${radius},${radius} 0 0 1 ${rectLeft + radius},${rectTop}\n Z\n `.replace(/\\s+/g, ' ');\n\n return `${screenPath} ${holePath}`;\n });\n\n constructor() {\n this.updateViewBox();\n }\n\n @HostListener('window:resize')\n @HostListener('window:scroll')\n onResize(): void {\n this.updatePositionFromAnchor();\n this.updateViewBox();\n }\n\n private anchorElement: HTMLElement | null = null;\n\n updatePosition(rect: DOMRect, borderRadius: string, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (anchorElement) {\n this.anchorElement = anchorElement;\n }\n const isInitial = this.isInitial();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n\n const radius = parseInt(borderRadius, 10) || 0;\n this.rx.set(radius);\n this.padding.set(padding);\n this.disableInteraction.set(disableInteraction);\n\n this.updateViewBox();\n\n if (isInitial) {\n setTimeout(() => {\n this.isInitial.set(false);\n });\n }\n }\n\n private updatePositionFromAnchor(): void {\n if (this.anchorElement) {\n const rect = this.anchorElement.getBoundingClientRect();\n this.rect.set({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n });\n }\n }\n\n private updateViewBox(): void {\n const w = window.innerWidth || 1000;\n const h = window.innerHeight || 1000;\n this.viewBox.set(`0 0 ${w} ${h}`);\n }\n}\n","<svg\n class=\"absolute top-0 left-0 w-full h-full pointer-events-none\"\n [attr.viewBox]=\"viewBox()\"\n preserveAspectRatio=\"xMinYMin slice\"\n>\n <path\n fill-rule=\"evenodd\"\n [attr.d]=\"backdropPath()\"\n (click)=\"backdropClick.emit()\"\n />\n <rect\n [attr.x]=\"rect().left - padding()\"\n [attr.y]=\"rect().top - padding()\"\n [attr.width]=\"rect().width + 2 * padding()\"\n [attr.height]=\"rect().height + 2 * padding()\"\n [attr.rx]=\"rx()\"\n [class.interactive]=\"!disableInteraction()\"\n ></rect>\n</svg>\n","import {\n Component,\n input,\n ChangeDetectionStrategy,\n signal, inject, computed\n} from '@angular/core';\nimport { CommonModule, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TourService } from '../tour.service';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TourStepConfig, TOUR_CONFIG } from '../tour.types';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-tour-step',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n NgClass,\n CommonModule,\n Button\n ],\n templateUrl: './tour-step.html',\n styleUrl: './tour-step.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-tour-step not-prose',\n '[class.animate-enter]': 'animateEnterClass()',\n '[class.animate-leave]': 'animateLeaveClass()',\n }\n})\nexport class TourStep {\n readonly tourService = inject(TourService);\n private _sanitizer = inject(DomSanitizer);\n\n step = input.required<TourStepConfig>();\n isFirst = input(false);\n isLast = input(false);\n position = input<ConnectedPosition | null>(null);\n\n animateEnterClass = input(true);\n animateLeaveClass = input(false);\n\n readonly config = inject(TOUR_CONFIG, { optional: true });\n\n protected readonly htmlContent = computed(() => {\n const html = this.step().htmlContent;\n return html ? this._sanitizer.bypassSecurityTrustHtml(html) : null;\n });\n\n getArrowClasses(pos: ConnectedPosition | null): string {\n if (!pos) {\n return 'hidden';\n }\n\n const classes = [];\n\n // Vertical position of the arrow on the step\n if (pos.overlayY === 'top' && pos.originY === 'bottom') {\n classes.push('pos-top'); // Arrow on the top edge of the step\n } else if (pos.overlayY === 'bottom' && pos.originY === 'top') {\n classes.push('pos-bottom'); // Arrow on the bottom edge of the step\n } else if (pos.overlayX === 'start' && pos.originX === 'end') {\n // Step is to the right of the element (AFTER)\n classes.push('pos-left');\n } else if (pos.overlayX === 'end' && pos.originX === 'start') {\n // Step is to the left of the element (BEFORE)\n classes.push('pos-right');\n }\n\n // Alignment of the arrow on the chosen edge\n if (classes.includes('pos-top') || classes.includes('pos-bottom')) {\n if (pos.overlayX === 'center') {\n classes.push('align-center');\n } else if (pos.overlayX === 'start') {\n classes.push('align-start');\n } else if (pos.overlayX === 'end') {\n classes.push('align-end');\n }\n } else if (classes.includes('pos-left') || classes.includes('pos-right')) {\n if (pos.overlayY === 'center') {\n classes.push('align-center');\n } else if (pos.overlayY === 'top') {\n classes.push('align-start');\n } else if (pos.overlayY === 'bottom') {\n classes.push('align-end');\n }\n }\n\n return classes.join(' ');\n }\n}\n","@if (!step().hideArrow) {\n <div class=\"tour-step-arrow\" [ngClass]=\"getArrowClasses(position())\"></div>\n}\n<div class=\"relative z-[1] transform-gpu\">\n @if (step().title) {\n <h3 class=\"mt-0 mb-2 font-semibold text-base leading-none tracking-tight\">{{ step().title }}</h3>\n }\n\n <div class=\"text-sm text-on-surface-variant\">\n @if (step().template) {\n <ng-container *ngTemplateOutlet=\"step().template!; context: step().templateContext\"/>\n } @else if (htmlContent()) {\n <div [innerHTML]=\"htmlContent()\"></div>\n } @else {\n {{ step().content }}\n }\n </div>\n\n <div class=\"flex justify-between gap-4 mt-4\">\n <button ngsButton (click)=\"tourService.end()\" class=\"button\">\n {{ step().skipBtnText || config?.skipBtnText || 'Close' }}\n </button>\n <div class=\"flex gap-2\">\n <button ngsButton=\"tonal\" (click)=\"tourService.prev()\" [disabled]=\"isFirst()\" class=\"button\">\n {{ step().prevBtnText || config?.prevBtnText || 'Prev' }}\n </button>\n <button ngsButton=\"filled\" (click)=\"tourService.next()\" class=\"button\">\n @if (isLast()) {\n {{ step().finishBtnText || config?.finishBtnText || 'Finish' }}\n } @else {\n {{ step().nextBtnText || config?.nextBtnText || 'Next' }}\n }\n </button>\n </div>\n </div>\n</div>\n","import { Injectable, signal, computed, inject, ViewContainerRef, ComponentRef, Type, OnDestroy } from '@angular/core';\nimport { TourStepConfig, TourState, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from './tour.types';\nimport { Subject } from 'rxjs';\nimport { Overlay, OverlayRef, ConnectedPosition, PositionStrategy, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { TourBackdrop } from './tour-backdrop/tour-backdrop';\nimport { TourStep } from './tour-step/tour-step';\nimport { DOCUMENT } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TourService implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n private readonly document = inject(DOCUMENT);\n private readonly router = inject(Router);\n private backdropOverlayRef: OverlayRef | null = null;\n private backdropComponentRef: ComponentRef<TourBackdrop> | null = null;\n\n private readonly _steps = signal<TourStepConfig[]>([]);\n private readonly _currentStepIndex = signal<number>(-1);\n private readonly _state = signal<TourState>(TourState.OFF);\n private readonly _anchors = new Map<string, any>();\n private stepOverlayRef: OverlayRef | null = null;\n private stepComponentRef: ComponentRef<any> | null = null;\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n\n constructor() {\n this.document.addEventListener('keydown', this.handleKeyDown);\n }\n\n ngOnDestroy(): void {\n this.document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (this.state() !== TourState.ON || this.config?.keyboardNavigation === false) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowRight':\n void this.next();\n break;\n case 'ArrowLeft':\n void this.prev();\n break;\n case 'Escape':\n void this.end();\n break;\n }\n };\n\n readonly steps = this._steps.asReadonly();\n readonly currentStepIndex = this._currentStepIndex.asReadonly();\n readonly state = this._state.asReadonly();\n\n readonly currentStep = computed(() => {\n const index = this._currentStepIndex();\n const steps = this._steps();\n return index >= 0 && index < steps.length ? steps[index] : null;\n });\n\n readonly stepShow$ = new Subject<TourStepConfig>();\n readonly stepHide$ = new Subject<TourStepConfig>();\n readonly start$ = new Subject<void>();\n readonly end$ = new Subject<void>();\n\n registerAnchor(id: string, anchor: any): void {\n this._anchors.set(id, anchor);\n }\n\n unregisterAnchor(id: string): void {\n this._anchors.delete(id);\n }\n\n start(steps: TourStepConfig[]): void {\n this._steps.set(steps);\n this._state.set(TourState.ON);\n this.start$.next();\n void this.goToStep(0);\n }\n\n async end(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n // Start hiding step and backdrop in parallel\n const hideStepPromise = this._hideStep(currentStep);\n const hideBackdropPromise = this.hideBackdrop(true);\n\n await Promise.all([hideStepPromise, hideBackdropPromise]);\n } else {\n await this.hideBackdrop(true);\n }\n\n this._state.set(TourState.OFF);\n this._currentStepIndex.set(-1);\n this._steps.set([]);\n this.end$.next();\n }\n\n async next(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onNext) {\n await currentStep.onNext();\n }\n\n if (this._currentStepIndex() < this._steps().length - 1) {\n await this.goToStep(this._currentStepIndex() + 1);\n } else {\n await this.end();\n }\n }\n\n async prev(): Promise<void> {\n const currentStep = this.currentStep();\n if (currentStep?.onPrev) {\n await currentStep.onPrev();\n }\n\n if (this._currentStepIndex() > 0) {\n await this.goToStep(this._currentStepIndex() - 1);\n }\n }\n\n async goToStep(index: number): Promise<void> {\n const currentStep = this.currentStep();\n const nextStep = this._steps()[index];\n\n if (currentStep) {\n if (currentStep.onHide) {\n await currentStep.onHide();\n }\n this.stepHide$.next(currentStep);\n await this._hideStep(currentStep);\n }\n\n if (currentStep?.withBackdrop && !nextStep?.withBackdrop) {\n this.hideBackdrop(false);\n }\n\n if (nextStep?.route) {\n const currentUrl = this.router.url;\n const targetUrl = nextStep.route;\n\n // Compare only path without params and fragment if needed,\n // but usually Router.url returns full path.\n // If URL differs, perform transition.\n if (currentUrl !== targetUrl) {\n await this.router.navigateByUrl(targetUrl);\n }\n }\n\n if (nextStep?.onShow) {\n await nextStep.onShow();\n }\n\n if (nextStep?.waitFor) {\n try {\n await this.waitForElement(nextStep.waitFor);\n } catch (e) {\n console.warn(`TourService: Element \"${nextStep.waitFor}\" not found after timeout.`);\n }\n }\n\n this._currentStepIndex.set(index);\n if (nextStep) {\n this.stepShow$.next(nextStep);\n this._showStep(nextStep);\n }\n }\n\n private waitForElement(selector: string, timeout = 3000): Promise<Element> {\n return new Promise((resolve, reject) => {\n const element = document.querySelector(selector);\n if (element) {\n return resolve(element);\n }\n\n const observer = new MutationObserver(() => {\n const element = document.querySelector(selector);\n if (element) {\n observer.disconnect();\n clearTimeout(timer);\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n\n const timer = setTimeout(() => {\n observer.disconnect();\n reject(new Error(`Timeout waiting for element: ${selector}`));\n }, timeout);\n });\n }\n\n showBackdrop(rect: DOMRect, borderRadius: string, viewContainerRef?: ViewContainerRef, anchorElement?: HTMLElement, padding = 0, disableInteraction = false): void {\n if (!this.backdropOverlayRef) {\n this.backdropOverlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false\n });\n const portal = new ComponentPortal(TourBackdrop, viewContainerRef);\n this.backdropComponentRef = this.backdropOverlayRef.attach(portal);\n\n this.backdropComponentRef.instance.backdropClick.subscribe(() => {\n const step = this.currentStep();\n const closeOnBackdropClick = step?.closeOnBackdropClick ?? this.config?.closeOnBackdropClick ?? false;\n if (closeOnBackdropClick) {\n this.end();\n }\n });\n }\n this.backdropComponentRef?.instance.updatePosition(rect, borderRadius, anchorElement, padding, disableInteraction);\n }\n\n async hideBackdrop(animate: boolean): Promise<void> {\n const overlayRef = this.backdropOverlayRef;\n const componentRef = this.backdropComponentRef;\n\n if (!overlayRef) {\n return;\n }\n\n if (this.backdropOverlayRef === overlayRef) {\n this.backdropOverlayRef = null;\n this.backdropComponentRef = null;\n }\n\n if (animate) {\n if (componentRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n }\n return new Promise(resolve => {\n setTimeout(() => {\n overlayRef.dispose();\n resolve();\n }, 150);\n });\n } else {\n overlayRef.dispose();\n return Promise.resolve();\n }\n }\n\n private _showStep(step: TourStepConfig): void {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n let anchorElement: HTMLElement | null = null;\n let anchorDirective: any = null;\n\n if (typeof anchorId === 'string') {\n anchorDirective = this._anchors.get(anchorId);\n if (anchorDirective) {\n anchorDirective.showStep(step);\n return;\n }\n anchorElement = document.querySelector(anchorId) as HTMLElement;\n\n if (!anchorElement) {\n anchorElement = document.getElementById(anchorId);\n }\n } else if (anchorId instanceof HTMLElement) {\n anchorElement = anchorId;\n }\n\n if (anchorElement) {\n this.showStepForElement(anchorElement, step);\n }\n }\n\n private showStepForElement(element: HTMLElement, step: TourStepConfig): void {\n if (this.stepOverlayRef) {\n const oldOverlayRef = this.stepOverlayRef;\n const oldComponentRef = this.stepComponentRef;\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n oldOverlayRef.dispose();\n }\n\n const rect = element.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n element.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n setTimeout(() => {\n if (this.state() === TourState.OFF) {\n return;\n }\n\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n let positionStrategy: PositionStrategy;\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(element)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.stepOverlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.showBackdrop(rect, style.borderRadius, undefined, element, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType);\n\n this.stepComponentRef = this.stepOverlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.stepComponentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n }\n\n const steps = this.steps();\n const index = this.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n this.stepOverlayRef.updatePosition();\n }\n\n }, 0);\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n\n private async _hideStep(step: TourStepConfig): Promise<void> {\n const anchorId = typeof step.anchorId === 'function' ? step.anchorId() : step.anchorId;\n if (typeof anchorId === 'string') {\n const anchor = this._anchors.get(anchorId);\n if (anchor) {\n await anchor.hideStep();\n return;\n }\n }\n\n const overlayRef = this.stepOverlayRef;\n const componentRef = this.stepComponentRef;\n\n if (overlayRef) {\n if (this.stepOverlayRef === overlayRef) {\n this.stepOverlayRef = null;\n this.stepComponentRef = null;\n }\n\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 150));\n overlayRef.dispose();\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n input,\n OnDestroy,\n OnInit,\n ViewContainerRef,\n inject,\n Type,\n ComponentRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TourService } from '../tour.service';\nimport { TourStepConfig, TOUR_STEP_COMPONENT, TOUR_CONFIG, TourStepPosition } from '../tour.types';\nimport { TourStep } from '../tour-step/tour-step';\nimport { TourBackdrop } from '../tour-backdrop/tour-backdrop';\nimport { PositionManager, OverlayPosition } from '@ngstarter-ui/components/overlay';\nimport { ConnectedPosition, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';\n\n@Directive({\n selector: '[ngsTourAnchor]',\n standalone: true\n})\nexport class TourAnchorDirective implements OnInit, OnDestroy {\n anchorId = input.required<string>({ alias: 'ngsTourAnchor' });\n\n private readonly elementRef = inject(ElementRef);\n private readonly tourService = inject(TourService);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly customStepComponent = inject(TOUR_STEP_COMPONENT, { optional: true });\n private readonly config = inject(TOUR_CONFIG, { optional: true });\n\n private overlayRef: OverlayRef | null = null;\n private componentRef: ComponentRef<any> | null = null;\n\n ngOnInit(): void {\n this.tourService.registerAnchor(this.anchorId(), this);\n }\n\n ngOnDestroy(): void {\n this.tourService.unregisterAnchor(this.anchorId());\n this.hideStep();\n }\n\n showStep(step: TourStepConfig): void {\n const currentOverlayRef = this.overlayRef;\n const currentComponentRef = this.componentRef;\n\n if (this.overlayRef === currentOverlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (currentOverlayRef) {\n currentOverlayRef.dispose();\n }\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const isVisible = (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n if (!isVisible) {\n this.elementRef.nativeElement.scrollIntoView({\n behavior: 'instant' as any,\n block: 'center',\n inline: 'nearest'\n });\n }\n\n const timeout = 0;\n\n // Give time for scroll to finish before calculating coordinates for the backdrop\n setTimeout(() => {\n if (this.tourService.state() === 0) { // TourState.OFF\n return;\n }\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const style = window.getComputedStyle(this.elementRef.nativeElement);\n const padding = step.padding ?? this.config?.padding ?? 4;\n\n const positionManager = new PositionManager();\n const defaultPositions: ConnectedPosition[] = [\n ...positionManager.build('below-center'),\n ...positionManager.build('above-center'),\n ...positionManager.build('after-center'),\n ...positionManager.build('before-center'),\n ].map(p => ({ ...p, ...this._getOffset(p, padding) }));\n\n const preferredPositions = step.position\n ? positionManager.build(step.position as any as OverlayPosition).map(p => ({ ...p, ...this._getOffset(p, padding) }))\n : defaultPositions;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPush(false)\n .withPositions(preferredPositions);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n hasBackdrop: false,\n panelClass: 'ngs-tour-step-overlay'\n });\n\n if (step.withBackdrop) {\n this.tourService.showBackdrop(rect, style.borderRadius, this.viewContainerRef, this.elementRef.nativeElement, padding, step.disableInteraction);\n }\n\n const componentType = (this.customStepComponent as Type<any>) || TourStep;\n const portal = new ComponentPortal(componentType, this.viewContainerRef);\n this.componentRef = this.overlayRef.attach(portal);\n\n const safeSetInput = (name: string, value: any) => {\n try {\n this.componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n positionStrategy.positionChanges.subscribe((change: ConnectedOverlayPositionChange) => {\n safeSetInput('position', change.connectionPair);\n });\n\n // Trigger position calculation to emit initial value\n this.overlayRef.updatePosition();\n }\n\n const steps = this.tourService.steps();\n const index = this.tourService.currentStepIndex();\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n\n safeSetInput('step', step);\n safeSetInput('isFirst', isFirst);\n safeSetInput('isLast', isLast);\n }, timeout);\n }\n\n async hideStep(): Promise<void> {\n const overlayRef = this.overlayRef;\n const componentRef = this.componentRef;\n\n if (this.overlayRef === overlayRef) {\n this.overlayRef = null;\n this.componentRef = null;\n }\n\n if (overlayRef) {\n const safeSetInput = (name: string, value: any) => {\n try {\n componentRef?.setInput(name, value);\n } catch (e) {\n // Ignore if input is not declared\n }\n };\n\n safeSetInput('animateEnterClass', false);\n safeSetInput('animateLeaveClass', true);\n\n await new Promise(resolve => setTimeout(resolve, 200));\n overlayRef.dispose();\n }\n }\n\n private _getOffset(position: ConnectedPosition, padding: number): { offsetX?: number, offsetY?: number } {\n const offset = 8 + padding;\n if (position.originY === 'bottom' && position.overlayY === 'top') {\n return { offsetY: offset };\n }\n if (position.originY === 'top' && position.overlayY === 'bottom') {\n return { offsetY: -offset };\n }\n if (position.originX === 'end' && position.overlayX === 'start') {\n return { offsetX: offset };\n }\n if (position.originX === 'start' && position.overlayX === 'end') {\n return { offsetX: -offset };\n }\n return {};\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -3,13 +3,13 @@ import { Component } from '@angular/core';
3
3
 
4
4
  class ImagePlaceholder {
5
5
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ImagePlaceholder, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: ImagePlaceholder, isStandalone: true, selector: "ngs-image-placeholder", host: { classAttribute: "ngs-image-placeholder" }, exportAs: ["ngsImagePlaceholder"], ngImport: i0, template: "<svg viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\">\n <defs>\n <clipPath id=\"rectMaskExtraSmall\">\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\"/>\n </clipPath>\n </defs>\n\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\" class=\"placeholder-mountain-bg\"/>\n\n <g clip-path=\"url(#rectMaskExtraSmall)\">\n <path d=\"M10 80L40 35L70 80H10Z\" class=\"placeholder-mountain-1\"/>\n <path d=\"M45 80L67.5 47.5L90 80H45Z\" class=\"placeholder-mountain-2\"/>\n <circle cx=\"72.5\" cy=\"37.5\" r=\"7.5\" class=\"placeholder-mountain-sun\"/>\n </g>\n</svg>\n", styles: [":host{display:flex;background:var(--color-surface-container);align-items:center;justify-content:center}:host svg{width:40%;min-width:100px}:host .placeholder-mountain-bg{fill:var(--color-neutral-300)}:host .placeholder-mountain-1{fill:var(--color-neutral-400)}:host .placeholder-mountain-2{fill:var(--color-neutral-100);opacity:.7}:host .placeholder-mountain-sun{fill:var(--color-neutral-100)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
6
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: ImagePlaceholder, isStandalone: true, selector: "ngs-image-placeholder", host: { classAttribute: "ngs-image-placeholder" }, exportAs: ["ngsImagePlaceholder"], ngImport: i0, template: "<svg viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\">\n <defs>\n <clipPath id=\"rectMaskExtraSmall\">\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\"/>\n </clipPath>\n </defs>\n\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\" class=\"placeholder-mountain-bg\"/>\n\n <g clip-path=\"url(#rectMaskExtraSmall)\">\n <path d=\"M10 80L40 35L70 80H10Z\" class=\"placeholder-mountain-1\"/>\n <path d=\"M45 80L67.5 47.5L90 80H45Z\" class=\"placeholder-mountain-2\"/>\n <circle cx=\"72.5\" cy=\"37.5\" r=\"7.5\" class=\"placeholder-mountain-sun\"/>\n </g>\n</svg>\n", styles: [":host{display:flex;background:var(--ngs-color-surface-container);align-items:center;justify-content:center}:host svg{width:40%;min-width:100px}:host .placeholder-mountain-bg{fill:var(--ngs-color-neutral-300)}:host .placeholder-mountain-1{fill:var(--ngs-color-neutral-400)}:host .placeholder-mountain-2{fill:var(--ngs-color-neutral-100);opacity:.7}:host .placeholder-mountain-sun{fill:var(--ngs-color-neutral-100)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
7
7
  }
8
8
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ImagePlaceholder, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'ngs-image-placeholder', exportAs: 'ngsImagePlaceholder', imports: [], host: {
11
11
  'class': 'ngs-image-placeholder'
12
- }, template: "<svg viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\">\n <defs>\n <clipPath id=\"rectMaskExtraSmall\">\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\"/>\n </clipPath>\n </defs>\n\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\" class=\"placeholder-mountain-bg\"/>\n\n <g clip-path=\"url(#rectMaskExtraSmall)\">\n <path d=\"M10 80L40 35L70 80H10Z\" class=\"placeholder-mountain-1\"/>\n <path d=\"M45 80L67.5 47.5L90 80H45Z\" class=\"placeholder-mountain-2\"/>\n <circle cx=\"72.5\" cy=\"37.5\" r=\"7.5\" class=\"placeholder-mountain-sun\"/>\n </g>\n</svg>\n", styles: [":host{display:flex;background:var(--color-surface-container);align-items:center;justify-content:center}:host svg{width:40%;min-width:100px}:host .placeholder-mountain-bg{fill:var(--color-neutral-300)}:host .placeholder-mountain-1{fill:var(--color-neutral-400)}:host .placeholder-mountain-2{fill:var(--color-neutral-100);opacity:.7}:host .placeholder-mountain-sun{fill:var(--color-neutral-100)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
12
+ }, template: "<svg viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\">\n <defs>\n <clipPath id=\"rectMaskExtraSmall\">\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\"/>\n </clipPath>\n </defs>\n\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\" class=\"placeholder-mountain-bg\"/>\n\n <g clip-path=\"url(#rectMaskExtraSmall)\">\n <path d=\"M10 80L40 35L70 80H10Z\" class=\"placeholder-mountain-1\"/>\n <path d=\"M45 80L67.5 47.5L90 80H45Z\" class=\"placeholder-mountain-2\"/>\n <circle cx=\"72.5\" cy=\"37.5\" r=\"7.5\" class=\"placeholder-mountain-sun\"/>\n </g>\n</svg>\n", styles: [":host{display:flex;background:var(--ngs-color-surface-container);align-items:center;justify-content:center}:host svg{width:40%;min-width:100px}:host .placeholder-mountain-bg{fill:var(--ngs-color-neutral-300)}:host .placeholder-mountain-1{fill:var(--ngs-color-neutral-400)}:host .placeholder-mountain-2{fill:var(--ngs-color-neutral-100);opacity:.7}:host .placeholder-mountain-sun{fill:var(--ngs-color-neutral-100)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
13
13
  }] });
14
14
 
15
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-image-placeholder.mjs","sources":["../../../projects/components/image-placeholder/src/image-placeholder/image-placeholder.ts","../../../projects/components/image-placeholder/src/image-placeholder/image-placeholder.html","../../../projects/components/image-placeholder/ngstarter-ui-components-image-placeholder.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-image-placeholder',\n exportAs: 'ngsImagePlaceholder',\n imports: [],\n templateUrl: './image-placeholder.html',\n styleUrl: './image-placeholder.scss',\n host: {\n 'class': 'ngs-image-placeholder'\n }\n})\nexport class ImagePlaceholder {\n\n}\n","<svg viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\">\n <defs>\n <clipPath id=\"rectMaskExtraSmall\">\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\"/>\n </clipPath>\n </defs>\n\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\" class=\"placeholder-mountain-bg\"/>\n\n <g clip-path=\"url(#rectMaskExtraSmall)\">\n <path d=\"M10 80L40 35L70 80H10Z\" class=\"placeholder-mountain-1\"/>\n <path d=\"M45 80L67.5 47.5L90 80H45Z\" class=\"placeholder-mountain-2\"/>\n <circle cx=\"72.5\" cy=\"37.5\" r=\"7.5\" class=\"placeholder-mountain-sun\"/>\n </g>\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAYa,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,uKCZ7B,ypBAeA,EAAA,MAAA,EAAA,CAAA,gdAAA,CAAA,EAAA,CAAA;;2FDHa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,QAAA,EACvB,qBAAqB,EAAA,OAAA,EACtB,EAAE,EAAA,IAAA,EAGL;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,ypBAAA,EAAA,MAAA,EAAA,CAAA,gdAAA,CAAA,EAAA;;;AEVH;;AAEG;;;;"}
1
+ {"version":3,"file":"ngstarter-ui-components-image-placeholder.mjs","sources":["../../../projects/components/image-placeholder/src/image-placeholder/image-placeholder.ts","../../../projects/components/image-placeholder/src/image-placeholder/image-placeholder.html","../../../projects/components/image-placeholder/ngstarter-ui-components-image-placeholder.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-image-placeholder',\n exportAs: 'ngsImagePlaceholder',\n imports: [],\n templateUrl: './image-placeholder.html',\n styleUrl: './image-placeholder.scss',\n host: {\n 'class': 'ngs-image-placeholder'\n }\n})\nexport class ImagePlaceholder {\n\n}\n","<svg viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"none\">\n <defs>\n <clipPath id=\"rectMaskExtraSmall\">\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\"/>\n </clipPath>\n </defs>\n\n <rect x=\"10\" y=\"20\" width=\"80\" height=\"60\" rx=\"6\" class=\"placeholder-mountain-bg\"/>\n\n <g clip-path=\"url(#rectMaskExtraSmall)\">\n <path d=\"M10 80L40 35L70 80H10Z\" class=\"placeholder-mountain-1\"/>\n <path d=\"M45 80L67.5 47.5L90 80H45Z\" class=\"placeholder-mountain-2\"/>\n <circle cx=\"72.5\" cy=\"37.5\" r=\"7.5\" class=\"placeholder-mountain-sun\"/>\n </g>\n</svg>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAYa,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,uKCZ7B,ypBAeA,EAAA,MAAA,EAAA,CAAA,oeAAA,CAAA,EAAA,CAAA;;2FDHa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,QAAA,EACvB,qBAAqB,EAAA,OAAA,EACtB,EAAE,EAAA,IAAA,EAGL;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,ypBAAA,EAAA,MAAA,EAAA,CAAA,oeAAA,CAAA,EAAA;;;AEVH;;AAEG;;;;"}
@@ -132,7 +132,7 @@ class ImageResizer {
132
132
  });
133
133
  }
134
134
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ImageResizer, deps: [], target: i0.ɵɵFactoryTarget.Component });
135
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: ImageResizer, isStandalone: true, selector: "ngs-image-resizer", inputs: { imageMaxWidth: { classPropertyName: "imageMaxWidth", publicName: "imageMaxWidth", isSignal: true, isRequired: false, transformFunction: null }, imageMinWidth: { classPropertyName: "imageMinWidth", publicName: "imageMinWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageResized: "imageResized" }, host: { classAttribute: "ngs-image-resizer" }, queries: [{ propertyName: "imageRef", first: true, predicate: ImageResizerImageDirective, descendants: true, isSignal: true }], exportAs: ["ngsImageResizer"], ngImport: i0, template: "<div ngsImageResizeHandler direction=\"right\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-start\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n<ng-content select=\"[ngsImageResizerImage]\"/>\n<div ngsImageResizeHandler direction=\"left\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-end\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n", styles: ["@layer properties;:host{display:flex;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none;position:relative;width:max-content;max-width:100%}:host.align-start{justify-content:flex-start}:host.align-center{justify-content:center}:host.align-end{justify-content:flex-end}:host img{max-width:100%}:host .handler{height:100%;max-height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 3);cursor:ew-resize;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-white, #fff);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:absolute;top:50%;--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--color-white);border:4px solid var(--color-on-secondary-fixed)}:host .handler-start{inset-inline-start:calc(var(--spacing, .25rem) * 3)}:host .handler-end{inset-inline-end:calc(var(--spacing, .25rem) * 3)}:host .handler:active{--tw-scale-x: 95%;--tw-scale-y: 95%;--tw-scale-z: 95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-scale-x{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \"*\"; inherits: false; initial-value: 1;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: ImageResizeHandlerDirective, selector: "[ngsImageResizeHandler]", inputs: ["maxWidth", "minWidth", "targetElement", "direction"], outputs: ["dimensionsChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
135
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: ImageResizer, isStandalone: true, selector: "ngs-image-resizer", inputs: { imageMaxWidth: { classPropertyName: "imageMaxWidth", publicName: "imageMaxWidth", isSignal: true, isRequired: false, transformFunction: null }, imageMinWidth: { classPropertyName: "imageMinWidth", publicName: "imageMinWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageResized: "imageResized" }, host: { classAttribute: "ngs-image-resizer" }, queries: [{ propertyName: "imageRef", first: true, predicate: ImageResizerImageDirective, descendants: true, isSignal: true }], exportAs: ["ngsImageResizer"], ngImport: i0, template: "<div ngsImageResizeHandler direction=\"right\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-start\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n<ng-content select=\"[ngsImageResizerImage]\"/>\n<div ngsImageResizeHandler direction=\"left\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-end\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n", styles: ["@layer properties;:host{display:flex;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none;position:relative;width:max-content;max-width:100%}:host.align-start{justify-content:flex-start}:host.align-center{justify-content:center}:host.align-end{justify-content:flex-end}:host img{max-width:100%}:host .handler{height:100%;max-height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 3);cursor:ew-resize;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-white, #fff);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:absolute;top:50%;--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--ngs-color-white);border:4px solid var(--ngs-color-on-secondary-fixed)}:host .handler-start{inset-inline-start:calc(var(--spacing, .25rem) * 3)}:host .handler-end{inset-inline-end:calc(var(--spacing, .25rem) * 3)}:host .handler:active{--tw-scale-x: 95%;--tw-scale-y: 95%;--tw-scale-z: 95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-scale-x{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \"*\"; inherits: false; initial-value: 1;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: ImageResizeHandlerDirective, selector: "[ngsImageResizeHandler]", inputs: ["maxWidth", "minWidth", "targetElement", "direction"], outputs: ["dimensionsChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
136
136
  }
137
137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ImageResizer, decorators: [{
138
138
  type: Component,
@@ -140,7 +140,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
140
140
  ImageResizeHandlerDirective
141
141
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
142
142
  'class': 'ngs-image-resizer'
143
- }, template: "<div ngsImageResizeHandler direction=\"right\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-start\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n<ng-content select=\"[ngsImageResizerImage]\"/>\n<div ngsImageResizeHandler direction=\"left\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-end\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n", styles: ["@layer properties;:host{display:flex;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none;position:relative;width:max-content;max-width:100%}:host.align-start{justify-content:flex-start}:host.align-center{justify-content:center}:host.align-end{justify-content:flex-end}:host img{max-width:100%}:host .handler{height:100%;max-height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 3);cursor:ew-resize;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-white, #fff);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:absolute;top:50%;--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--color-white);border:4px solid var(--color-on-secondary-fixed)}:host .handler-start{inset-inline-start:calc(var(--spacing, .25rem) * 3)}:host .handler-end{inset-inline-end:calc(var(--spacing, .25rem) * 3)}:host .handler:active{--tw-scale-x: 95%;--tw-scale-y: 95%;--tw-scale-z: 95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-scale-x{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \"*\"; inherits: false; initial-value: 1;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
143
+ }, template: "<div ngsImageResizeHandler direction=\"right\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-start\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n<ng-content select=\"[ngsImageResizerImage]\"/>\n<div ngsImageResizeHandler direction=\"left\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-end\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n", styles: ["@layer properties;:host{display:flex;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none;position:relative;width:max-content;max-width:100%}:host.align-start{justify-content:flex-start}:host.align-center{justify-content:center}:host.align-end{justify-content:flex-end}:host img{max-width:100%}:host .handler{height:100%;max-height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 3);cursor:ew-resize;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-white, #fff);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);position:absolute;top:50%;--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);background-color:var(--ngs-color-white);border:4px solid var(--ngs-color-on-secondary-fixed)}:host .handler-start{inset-inline-start:calc(var(--spacing, .25rem) * 3)}:host .handler-end{inset-inline-end:calc(var(--spacing, .25rem) * 3)}:host .handler:active{--tw-scale-x: 95%;--tw-scale-y: 95%;--tw-scale-z: 95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-scale-x{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \"*\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \"*\"; inherits: false; initial-value: 1;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1}}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
144
144
  }], ctorParameters: () => [], propDecorators: { imageRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ImageResizerImageDirective), { isSignal: true }] }], imageMaxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageMaxWidth", required: false }] }], imageMinWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageMinWidth", required: false }] }], imageResized: [{ type: i0.Output, args: ["imageResized"] }] } });
145
145
 
146
146
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-image-resizer.mjs","sources":["../../../projects/components/image-resizer/src/image-resize-handler.directive.ts","../../../projects/components/image-resizer/src/image-resizer-image.directive.ts","../../../projects/components/image-resizer/src/image-resizer/image-resizer.ts","../../../projects/components/image-resizer/src/image-resizer/image-resizer.html","../../../projects/components/image-resizer/ngstarter-ui-components-image-resizer.ts"],"sourcesContent":["import {\n ChangeDetectorRef, DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n NgZone, numberAttribute, output,\n PLATFORM_ID,\n Renderer2,\n DOCUMENT\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { fromEvent, throttleTime } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[ngsImageResizeHandler]'\n})\nexport class ImageResizeHandlerDirective {\n private _platformId = inject(PLATFORM_ID);\n private _elementRef = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _cdr = inject(ChangeDetectorRef);\n private _ngZone = inject(NgZone);\n private _destroyRef = inject(DestroyRef);\n private _document = inject(DOCUMENT);\n private _resizing = false;\n private _width: number;\n private _clientX: number;\n\n maxWidth = input.required({\n transform: numberAttribute\n });\n minWidth = input.required({\n transform: numberAttribute\n });\n targetElement = input.required<HTMLElement>();\n direction = input.required<'left' | 'right'>();\n\n readonly dimensionsChanged = output();\n\n ngOnInit() {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n const targetElement = this.targetElement();\n\n this._ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this._elementRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event: MouseEvent) => {\n this._resizing = true;\n this._width = targetElement.getBoundingClientRect().width;\n this._clientX = event.clientX;\n this._cdr.detectChanges();\n })\n ;\n fromEvent<MouseEvent>(this._document, 'mousemove')\n .pipe(\n throttleTime(5),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event: MouseEvent) => {\n if (this._resizing) {\n let width = this._width;\n\n if (this.direction() === 'left') {\n width = this._width - (this._clientX - event.clientX);\n } else if (this.direction() === 'right') {\n width = (this._width - (event.clientX - this._clientX));\n }\n\n if (width <= this.minWidth()) {\n width = this.minWidth();\n } else if (width >= this.maxWidth()) {\n width = this.maxWidth();\n }\n\n this._renderer.setStyle(targetElement, 'width', width + 'px');\n this.dimensionsChanged.emit();\n }\n })\n ;\n fromEvent(this._document, 'mouseup')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(event => {\n this._resizing = false;\n this._cdr.detectChanges();\n })\n ;\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[ngsImageResizerImage]',\n exportAs: 'ngsImageResizerImage',\n host: {\n '(dragstart)': '_onDragStart($event)'\n }\n})\nexport class ImageResizerImageDirective {\n readonly elementRef = inject<ElementRef<HTMLImageElement>>(ElementRef);\n\n protected _onDragStart(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, contentChild, effect,\n ElementRef,\n inject, input, numberAttribute,\n output,\n PLATFORM_ID,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { ImageResizeHandlerDirective } from '../image-resize-handler.directive';\nimport { isPlatformServer } from '@angular/common';\nimport { ImageResizedEvent } from '../types';\nimport { ImageResizerImageDirective } from '../image-resizer-image.directive';\n\n@Component({\n selector: 'ngs-image-resizer',\n exportAs: 'ngsImageResizer',\n imports: [\n ImageResizeHandlerDirective\n ],\n templateUrl: './image-resizer.html',\n styleUrl: './image-resizer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-image-resizer'\n }\n})\nexport class ImageResizer implements AfterContentInit {\n protected _platformId = inject(PLATFORM_ID);\n protected _elementRef = inject(ElementRef);\n protected _renderer = inject(Renderer2);\n\n readonly imageRef = contentChild.required(ImageResizerImageDirective);\n\n imageMaxWidth = input(null, {\n transform: numberAttribute\n });\n imageMinWidth = input(100, {\n transform: numberAttribute\n });\n\n readonly imageResized = output<ImageResizedEvent>();\n\n protected _maxWidth = signal<number | null>(null);\n\n constructor() {\n effect(() => {\n this._maxWidth.set(this.imageMaxWidth());\n });\n }\n\n ngAfterContentInit() {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n this.imageRef().elementRef.nativeElement\n .onload = () => {\n setTimeout(() => {\n const { width } = this.imageRef().elementRef.nativeElement.getBoundingClientRect();\n\n if (this.imageMaxWidth() === null) {\n this._maxWidth.set(width);\n }\n }, 100);\n };\n }\n\n onDimensionsChanged() {\n const { width, height } = this.imageRef().elementRef.nativeElement.getBoundingClientRect();\n const { naturalWidth, naturalHeight } = this.imageRef().elementRef.nativeElement;\n this.imageResized.emit({\n width,\n height,\n naturalWidth,\n naturalHeight\n });\n }\n}\n","<div ngsImageResizeHandler direction=\"right\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-start\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n<ng-content select=\"[ngsImageResizerImage]\"/>\n<div ngsImageResizeHandler direction=\"left\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-end\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-image-resizer.mjs","sources":["../../../projects/components/image-resizer/src/image-resize-handler.directive.ts","../../../projects/components/image-resizer/src/image-resizer-image.directive.ts","../../../projects/components/image-resizer/src/image-resizer/image-resizer.ts","../../../projects/components/image-resizer/src/image-resizer/image-resizer.html","../../../projects/components/image-resizer/ngstarter-ui-components-image-resizer.ts"],"sourcesContent":["import {\n ChangeDetectorRef, DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n NgZone, numberAttribute, output,\n PLATFORM_ID,\n Renderer2,\n DOCUMENT\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { fromEvent, throttleTime } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[ngsImageResizeHandler]'\n})\nexport class ImageResizeHandlerDirective {\n private _platformId = inject(PLATFORM_ID);\n private _elementRef = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _cdr = inject(ChangeDetectorRef);\n private _ngZone = inject(NgZone);\n private _destroyRef = inject(DestroyRef);\n private _document = inject(DOCUMENT);\n private _resizing = false;\n private _width: number;\n private _clientX: number;\n\n maxWidth = input.required({\n transform: numberAttribute\n });\n minWidth = input.required({\n transform: numberAttribute\n });\n targetElement = input.required<HTMLElement>();\n direction = input.required<'left' | 'right'>();\n\n readonly dimensionsChanged = output();\n\n ngOnInit() {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n const targetElement = this.targetElement();\n\n this._ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this._elementRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event: MouseEvent) => {\n this._resizing = true;\n this._width = targetElement.getBoundingClientRect().width;\n this._clientX = event.clientX;\n this._cdr.detectChanges();\n })\n ;\n fromEvent<MouseEvent>(this._document, 'mousemove')\n .pipe(\n throttleTime(5),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event: MouseEvent) => {\n if (this._resizing) {\n let width = this._width;\n\n if (this.direction() === 'left') {\n width = this._width - (this._clientX - event.clientX);\n } else if (this.direction() === 'right') {\n width = (this._width - (event.clientX - this._clientX));\n }\n\n if (width <= this.minWidth()) {\n width = this.minWidth();\n } else if (width >= this.maxWidth()) {\n width = this.maxWidth();\n }\n\n this._renderer.setStyle(targetElement, 'width', width + 'px');\n this.dimensionsChanged.emit();\n }\n })\n ;\n fromEvent(this._document, 'mouseup')\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(event => {\n this._resizing = false;\n this._cdr.detectChanges();\n })\n ;\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[ngsImageResizerImage]',\n exportAs: 'ngsImageResizerImage',\n host: {\n '(dragstart)': '_onDragStart($event)'\n }\n})\nexport class ImageResizerImageDirective {\n readonly elementRef = inject<ElementRef<HTMLImageElement>>(ElementRef);\n\n protected _onDragStart(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, contentChild, effect,\n ElementRef,\n inject, input, numberAttribute,\n output,\n PLATFORM_ID,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { ImageResizeHandlerDirective } from '../image-resize-handler.directive';\nimport { isPlatformServer } from '@angular/common';\nimport { ImageResizedEvent } from '../types';\nimport { ImageResizerImageDirective } from '../image-resizer-image.directive';\n\n@Component({\n selector: 'ngs-image-resizer',\n exportAs: 'ngsImageResizer',\n imports: [\n ImageResizeHandlerDirective\n ],\n templateUrl: './image-resizer.html',\n styleUrl: './image-resizer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-image-resizer'\n }\n})\nexport class ImageResizer implements AfterContentInit {\n protected _platformId = inject(PLATFORM_ID);\n protected _elementRef = inject(ElementRef);\n protected _renderer = inject(Renderer2);\n\n readonly imageRef = contentChild.required(ImageResizerImageDirective);\n\n imageMaxWidth = input(null, {\n transform: numberAttribute\n });\n imageMinWidth = input(100, {\n transform: numberAttribute\n });\n\n readonly imageResized = output<ImageResizedEvent>();\n\n protected _maxWidth = signal<number | null>(null);\n\n constructor() {\n effect(() => {\n this._maxWidth.set(this.imageMaxWidth());\n });\n }\n\n ngAfterContentInit() {\n if (isPlatformServer(this._platformId)) {\n return;\n }\n\n this.imageRef().elementRef.nativeElement\n .onload = () => {\n setTimeout(() => {\n const { width } = this.imageRef().elementRef.nativeElement.getBoundingClientRect();\n\n if (this.imageMaxWidth() === null) {\n this._maxWidth.set(width);\n }\n }, 100);\n };\n }\n\n onDimensionsChanged() {\n const { width, height } = this.imageRef().elementRef.nativeElement.getBoundingClientRect();\n const { naturalWidth, naturalHeight } = this.imageRef().elementRef.nativeElement;\n this.imageResized.emit({\n width,\n height,\n naturalWidth,\n naturalHeight\n });\n }\n}\n","<div ngsImageResizeHandler direction=\"right\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-start\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n<ng-content select=\"[ngsImageResizerImage]\"/>\n<div ngsImageResizeHandler direction=\"left\"\n [maxWidth]=\"_maxWidth()\"\n [minWidth]=\"imageMinWidth()\"\n [targetElement]=\"imageRef().elementRef.nativeElement\" class=\"handler handler-end\"\n (dimensionsChanged)=\"onDimensionsChanged()\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -187,7 +187,7 @@ class ImageViewer {
187
187
  this._renderer.setStyle(image, 'transform', `translate(${translateX}px,${translateY}px)`);
188
188
  }
189
189
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ImageViewer, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ImageViewer, isStandalone: true, selector: "ngs-image-viewer", host: { properties: { "class.loading": "loading", "class.dragging": "_dragging", "class.scaled": "scale !== 1" }, classAttribute: "ngs-image-viewer" }, exportAs: ["ngsImageViewer"], ngImport: i0, template: "<div class=\"title-container\">\n @if (hasTitle()) {\n <div class=\"title\">\n @if (data.titleTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.titleTplRef\" />\n } @else if (data.caption) {\n {{ data.title }}\n }\n </div>\n }\n</div>\n<div class=\"controls\" (click)=\"onPreventClick($event)\">\n <div class=\"w-max\">\n <button (click)=\"pictureRef.close()\" class=\"close\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n <div class=\"w-max\">\n <button class=\"zoom\" (click)=\"toggleZoom()\" [disabled]=\"scaleMax === 1 || null\">\n @if (scale === this.scaleMin) {\n <ngs-icon name=\"fluent:zoom-in-24-regular\"/>\n } @else {\n <ngs-icon name=\"fluent:zoom-out-24-regular\"/>\n }\n </button>\n </div>\n</div>\n<div class=\"content\" (click)=\"onBackdropClick()\">\n <div class=\"image\" (dragstart)=\"onDragStart($event)\">\n @if (loading) {\n <div class=\"spinner\">\n <ngs-progress-spinner/>\n </div>\n }\n <img [src]=\"data.sourceUrl\" alt=\"\" (load)=\"onLoad($event)\" (click)=\"onPreventClick($event)\" class=\"img\">\n </div>\n @if (hasAside()) {\n <aside class=\"aside\" (click)=\"onPreventClick($event)\">\n <div class=\"aside-header\">\n @if (data.captionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.captionTplRef\" />\n } @else if (data.caption) {\n {{ data.caption }}\n }\n </div>\n <div class=\"aside-body\">\n <div class=\"aside-body-scroll\">\n @if (data.descriptionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.descriptionTplRef\" />\n } @else if (data.description) {\n {{ data.description }}\n }\n </div>\n </div>\n </aside>\n }\n</div>\n", styles: [":host{width:100vw;height:100vh;display:flex;flex-direction:column}:host .title-container{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3}:host .controls{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4)}:host .header{position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;height:calc(var(--spacing, .25rem) * 20);flex:none;padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;align-items:center;justify-content:space-between}:host .content{box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;z-index:2;display:flex;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 8);width:100vw;height:100vh}:host.scaled img{cursor:grab}:host.dragging img{cursor:grabbing}:host:has(.aside) .content{padding-inline-end:420px}:host .img{-webkit-user-select:none;user-select:none;scale:var(--ngs-image-viewer-picture-scale, 1);transition:scale .15s linear}:host:not(.dragging) img{transition:transform .15s linear,scale .15s linear}:host .title{font-weight:500;height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);font-size:var(--text-tiny);display:flex;align-items:center;background:var(--color-neutral-700);color:var(--color-neutral-300)}:host .close,:host .zoom{width:calc(var(--spacing, .25rem) * 10);height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);cursor:pointer;display:flex;flex:none;align-items:center;justify-content:center;background:var(--color-neutral-700);color:var(--color-neutral-300)}:host .close:hover,:host .zoom:hover{background:var(--color-neutral-800);color:var(--color-neutral-200)}:host .close:active,:host .zoom:active{background:var(--color-neutral-950);color:var(--color-neutral-100)}:host .aside{width:420px;position:absolute;inset-inline-end:0;top:0;bottom:0;flex:none;background:var(--color-neutral-50);display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 5);height:100%;padding-inline-end:calc(var(--spacing, .25rem) * 10)}:host .aside-header{font-weight:700;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 8)}:host .aside-body{position:relative;flex-grow:1;font-size:.875rem;color:var(--color-neutral-600);line-height:var(--leading-relaxed)}:host .aside-body-scroll{position:absolute;inset:0;overflow-y:auto;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-bottom:calc(var(--spacing, .25rem) * 8)}:host .image{position:relative;display:flex;align-items:center;justify-content:flex-end;height:100%;max-width:90%;max-height:90%}:host .image img{max-height:100%;max-width:100%}:host .spinner{visibility:hidden;width:max-content;position:absolute;top:50%;left:50%;z-index:-1;--tw-translate-y: -50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:host.loading .spinner{visibility:visible;z-index:1}:host.loading img{visibility:hidden;position:relative;z-index:-50}:host-context(html.dark) .title{background:var(--color-neutral-100);color:var(--color-neutral-600)}:host-context(html.dark) .close{background:var(--color-neutral-100);color:var(--color-neutral-600)}:host-context(html.dark) .close:hover{background:var(--color-neutral-200);color:var(--color-neutral-700)}:host-context(html.dark) .close:active{background:var(--color-neutral-300);color:var(--color-neutral-900)}:host-context(html.dark) .aside{background:var(--color-neutral-900)}:host-context(html.dark) .aside-body{color:var(--color-neutral-400)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "component", type: ProgressSpinner, selector: "ngs-progress-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["ngsProgressSpinner"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ImageViewer, isStandalone: true, selector: "ngs-image-viewer", host: { properties: { "class.loading": "loading", "class.dragging": "_dragging", "class.scaled": "scale !== 1" }, classAttribute: "ngs-image-viewer" }, exportAs: ["ngsImageViewer"], ngImport: i0, template: "<div class=\"title-container\">\n @if (hasTitle()) {\n <div class=\"title\">\n @if (data.titleTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.titleTplRef\" />\n } @else if (data.caption) {\n {{ data.title }}\n }\n </div>\n }\n</div>\n<div class=\"controls\" (click)=\"onPreventClick($event)\">\n <div class=\"w-max\">\n <button (click)=\"pictureRef.close()\" class=\"close\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n <div class=\"w-max\">\n <button class=\"zoom\" (click)=\"toggleZoom()\" [disabled]=\"scaleMax === 1 || null\">\n @if (scale === this.scaleMin) {\n <ngs-icon name=\"fluent:zoom-in-24-regular\"/>\n } @else {\n <ngs-icon name=\"fluent:zoom-out-24-regular\"/>\n }\n </button>\n </div>\n</div>\n<div class=\"content\" (click)=\"onBackdropClick()\">\n <div class=\"image\" (dragstart)=\"onDragStart($event)\">\n @if (loading) {\n <div class=\"spinner\">\n <ngs-progress-spinner/>\n </div>\n }\n <img [src]=\"data.sourceUrl\" alt=\"\" (load)=\"onLoad($event)\" (click)=\"onPreventClick($event)\" class=\"img\">\n </div>\n @if (hasAside()) {\n <aside class=\"aside\" (click)=\"onPreventClick($event)\">\n <div class=\"aside-header\">\n @if (data.captionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.captionTplRef\" />\n } @else if (data.caption) {\n {{ data.caption }}\n }\n </div>\n <div class=\"aside-body\">\n <div class=\"aside-body-scroll\">\n @if (data.descriptionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.descriptionTplRef\" />\n } @else if (data.description) {\n {{ data.description }}\n }\n </div>\n </div>\n </aside>\n }\n</div>\n", styles: [":host{width:100vw;height:100vh;display:flex;flex-direction:column}:host .title-container{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3}:host .controls{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4)}:host .header{position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;height:calc(var(--spacing, .25rem) * 20);flex:none;padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;align-items:center;justify-content:space-between}:host .content{box-shadow:var(--ngs-shadow-sm);z-index:2;display:flex;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 8);width:100vw;height:100vh}:host.scaled img{cursor:grab}:host.dragging img{cursor:grabbing}:host:has(.aside) .content{padding-inline-end:420px}:host .img{-webkit-user-select:none;user-select:none;scale:var(--ngs-image-viewer-picture-scale, 1);transition:scale .15s linear}:host:not(.dragging) img{transition:transform .15s linear,scale .15s linear}:host .title{font-weight:500;height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);font-size:var(--text-tiny);display:flex;align-items:center;background:var(--ngs-color-neutral-700);color:var(--ngs-color-neutral-300)}:host .close,:host .zoom{width:calc(var(--spacing, .25rem) * 10);height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);cursor:pointer;display:flex;flex:none;align-items:center;justify-content:center;background:var(--ngs-color-neutral-700);color:var(--ngs-color-neutral-300)}:host .close:hover,:host .zoom:hover{background:var(--ngs-color-neutral-800);color:var(--ngs-color-neutral-200)}:host .close:active,:host .zoom:active{background:var(--ngs-color-neutral-950);color:var(--ngs-color-neutral-100)}:host .aside{width:420px;position:absolute;inset-inline-end:0;top:0;bottom:0;flex:none;background:var(--ngs-color-neutral-50);display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 5);height:100%;padding-inline-end:calc(var(--spacing, .25rem) * 10)}:host .aside-header{font-weight:700;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 8)}:host .aside-body{position:relative;flex-grow:1;font-size:var(--ngs-font-size-sm);color:var(--ngs-color-neutral-600);line-height:var(--leading-relaxed)}:host .aside-body-scroll{position:absolute;inset:0;overflow-y:auto;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-bottom:calc(var(--spacing, .25rem) * 8)}:host .image{position:relative;display:flex;align-items:center;justify-content:flex-end;height:100%;max-width:90%;max-height:90%}:host .image img{max-height:100%;max-width:100%}:host .spinner{visibility:hidden;width:max-content;position:absolute;top:50%;left:50%;z-index:-1;--tw-translate-y: -50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:host.loading .spinner{visibility:visible;z-index:1}:host.loading img{visibility:hidden;position:relative;z-index:-50}:host-context(html.dark) .title{background:var(--ngs-color-neutral-100);color:var(--ngs-color-neutral-600)}:host-context(html.dark) .close{background:var(--ngs-color-neutral-100);color:var(--ngs-color-neutral-600)}:host-context(html.dark) .close:hover{background:var(--ngs-color-neutral-200);color:var(--ngs-color-neutral-700)}:host-context(html.dark) .close:active{background:var(--ngs-color-neutral-300);color:var(--ngs-color-neutral-900)}:host-context(html.dark) .aside{background:var(--ngs-color-neutral-900)}:host-context(html.dark) .aside-body{color:var(--ngs-color-neutral-400)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "component", type: ProgressSpinner, selector: "ngs-progress-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["ngsProgressSpinner"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
191
191
  }
192
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ImageViewer, decorators: [{
193
193
  type: Component,
@@ -200,7 +200,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
200
200
  '[class.loading]': 'loading',
201
201
  '[class.dragging]': '_dragging',
202
202
  '[class.scaled]': 'scale !== 1'
203
- }, template: "<div class=\"title-container\">\n @if (hasTitle()) {\n <div class=\"title\">\n @if (data.titleTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.titleTplRef\" />\n } @else if (data.caption) {\n {{ data.title }}\n }\n </div>\n }\n</div>\n<div class=\"controls\" (click)=\"onPreventClick($event)\">\n <div class=\"w-max\">\n <button (click)=\"pictureRef.close()\" class=\"close\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n <div class=\"w-max\">\n <button class=\"zoom\" (click)=\"toggleZoom()\" [disabled]=\"scaleMax === 1 || null\">\n @if (scale === this.scaleMin) {\n <ngs-icon name=\"fluent:zoom-in-24-regular\"/>\n } @else {\n <ngs-icon name=\"fluent:zoom-out-24-regular\"/>\n }\n </button>\n </div>\n</div>\n<div class=\"content\" (click)=\"onBackdropClick()\">\n <div class=\"image\" (dragstart)=\"onDragStart($event)\">\n @if (loading) {\n <div class=\"spinner\">\n <ngs-progress-spinner/>\n </div>\n }\n <img [src]=\"data.sourceUrl\" alt=\"\" (load)=\"onLoad($event)\" (click)=\"onPreventClick($event)\" class=\"img\">\n </div>\n @if (hasAside()) {\n <aside class=\"aside\" (click)=\"onPreventClick($event)\">\n <div class=\"aside-header\">\n @if (data.captionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.captionTplRef\" />\n } @else if (data.caption) {\n {{ data.caption }}\n }\n </div>\n <div class=\"aside-body\">\n <div class=\"aside-body-scroll\">\n @if (data.descriptionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.descriptionTplRef\" />\n } @else if (data.description) {\n {{ data.description }}\n }\n </div>\n </div>\n </aside>\n }\n</div>\n", styles: [":host{width:100vw;height:100vh;display:flex;flex-direction:column}:host .title-container{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3}:host .controls{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4)}:host .header{position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;height:calc(var(--spacing, .25rem) * 20);flex:none;padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;align-items:center;justify-content:space-between}:host .content{box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;z-index:2;display:flex;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 8);width:100vw;height:100vh}:host.scaled img{cursor:grab}:host.dragging img{cursor:grabbing}:host:has(.aside) .content{padding-inline-end:420px}:host .img{-webkit-user-select:none;user-select:none;scale:var(--ngs-image-viewer-picture-scale, 1);transition:scale .15s linear}:host:not(.dragging) img{transition:transform .15s linear,scale .15s linear}:host .title{font-weight:500;height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);font-size:var(--text-tiny);display:flex;align-items:center;background:var(--color-neutral-700);color:var(--color-neutral-300)}:host .close,:host .zoom{width:calc(var(--spacing, .25rem) * 10);height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);cursor:pointer;display:flex;flex:none;align-items:center;justify-content:center;background:var(--color-neutral-700);color:var(--color-neutral-300)}:host .close:hover,:host .zoom:hover{background:var(--color-neutral-800);color:var(--color-neutral-200)}:host .close:active,:host .zoom:active{background:var(--color-neutral-950);color:var(--color-neutral-100)}:host .aside{width:420px;position:absolute;inset-inline-end:0;top:0;bottom:0;flex:none;background:var(--color-neutral-50);display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 5);height:100%;padding-inline-end:calc(var(--spacing, .25rem) * 10)}:host .aside-header{font-weight:700;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 8)}:host .aside-body{position:relative;flex-grow:1;font-size:.875rem;color:var(--color-neutral-600);line-height:var(--leading-relaxed)}:host .aside-body-scroll{position:absolute;inset:0;overflow-y:auto;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-bottom:calc(var(--spacing, .25rem) * 8)}:host .image{position:relative;display:flex;align-items:center;justify-content:flex-end;height:100%;max-width:90%;max-height:90%}:host .image img{max-height:100%;max-width:100%}:host .spinner{visibility:hidden;width:max-content;position:absolute;top:50%;left:50%;z-index:-1;--tw-translate-y: -50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:host.loading .spinner{visibility:visible;z-index:1}:host.loading img{visibility:hidden;position:relative;z-index:-50}:host-context(html.dark) .title{background:var(--color-neutral-100);color:var(--color-neutral-600)}:host-context(html.dark) .close{background:var(--color-neutral-100);color:var(--color-neutral-600)}:host-context(html.dark) .close:hover{background:var(--color-neutral-200);color:var(--color-neutral-700)}:host-context(html.dark) .close:active{background:var(--color-neutral-300);color:var(--color-neutral-900)}:host-context(html.dark) .aside{background:var(--color-neutral-900)}:host-context(html.dark) .aside-body{color:var(--color-neutral-400)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
203
+ }, template: "<div class=\"title-container\">\n @if (hasTitle()) {\n <div class=\"title\">\n @if (data.titleTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.titleTplRef\" />\n } @else if (data.caption) {\n {{ data.title }}\n }\n </div>\n }\n</div>\n<div class=\"controls\" (click)=\"onPreventClick($event)\">\n <div class=\"w-max\">\n <button (click)=\"pictureRef.close()\" class=\"close\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </div>\n <div class=\"w-max\">\n <button class=\"zoom\" (click)=\"toggleZoom()\" [disabled]=\"scaleMax === 1 || null\">\n @if (scale === this.scaleMin) {\n <ngs-icon name=\"fluent:zoom-in-24-regular\"/>\n } @else {\n <ngs-icon name=\"fluent:zoom-out-24-regular\"/>\n }\n </button>\n </div>\n</div>\n<div class=\"content\" (click)=\"onBackdropClick()\">\n <div class=\"image\" (dragstart)=\"onDragStart($event)\">\n @if (loading) {\n <div class=\"spinner\">\n <ngs-progress-spinner/>\n </div>\n }\n <img [src]=\"data.sourceUrl\" alt=\"\" (load)=\"onLoad($event)\" (click)=\"onPreventClick($event)\" class=\"img\">\n </div>\n @if (hasAside()) {\n <aside class=\"aside\" (click)=\"onPreventClick($event)\">\n <div class=\"aside-header\">\n @if (data.captionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.captionTplRef\" />\n } @else if (data.caption) {\n {{ data.caption }}\n }\n </div>\n <div class=\"aside-body\">\n <div class=\"aside-body-scroll\">\n @if (data.descriptionTplRef) {\n <ng-container [ngTemplateOutlet]=\"data.descriptionTplRef\" />\n } @else if (data.description) {\n {{ data.description }}\n }\n </div>\n </div>\n </aside>\n }\n</div>\n", styles: [":host{width:100vw;height:100vh;display:flex;flex-direction:column}:host .title-container{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3}:host .controls{position:absolute;inset-inline-end:calc(var(--spacing, .25rem) * 4);top:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4)}:host .header{position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;height:calc(var(--spacing, .25rem) * 20);flex:none;padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);z-index:3;display:flex;align-items:center;justify-content:space-between}:host .content{box-shadow:var(--ngs-shadow-sm);z-index:2;display:flex;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 8);width:100vw;height:100vh}:host.scaled img{cursor:grab}:host.dragging img{cursor:grabbing}:host:has(.aside) .content{padding-inline-end:420px}:host .img{-webkit-user-select:none;user-select:none;scale:var(--ngs-image-viewer-picture-scale, 1);transition:scale .15s linear}:host:not(.dragging) img{transition:transform .15s linear,scale .15s linear}:host .title{font-weight:500;height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);padding-left:calc(var(--spacing, .25rem) * 4);padding-right:calc(var(--spacing, .25rem) * 4);font-size:var(--text-tiny);display:flex;align-items:center;background:var(--ngs-color-neutral-700);color:var(--ngs-color-neutral-300)}:host .close,:host .zoom{width:calc(var(--spacing, .25rem) * 10);height:calc(var(--spacing, .25rem) * 10);border-radius:calc(infinity * 1px);cursor:pointer;display:flex;flex:none;align-items:center;justify-content:center;background:var(--ngs-color-neutral-700);color:var(--ngs-color-neutral-300)}:host .close:hover,:host .zoom:hover{background:var(--ngs-color-neutral-800);color:var(--ngs-color-neutral-200)}:host .close:active,:host .zoom:active{background:var(--ngs-color-neutral-950);color:var(--ngs-color-neutral-100)}:host .aside{width:420px;position:absolute;inset-inline-end:0;top:0;bottom:0;flex:none;background:var(--ngs-color-neutral-50);display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 5);height:100%;padding-inline-end:calc(var(--spacing, .25rem) * 10)}:host .aside-header{font-weight:700;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-top:calc(var(--spacing, .25rem) * 8)}:host .aside-body{position:relative;flex-grow:1;font-size:var(--ngs-font-size-sm);color:var(--ngs-color-neutral-600);line-height:var(--leading-relaxed)}:host .aside-body-scroll{position:absolute;inset:0;overflow-y:auto;padding-left:calc(var(--spacing, .25rem) * 8);padding-right:calc(var(--spacing, .25rem) * 8);padding-bottom:calc(var(--spacing, .25rem) * 8)}:host .image{position:relative;display:flex;align-items:center;justify-content:flex-end;height:100%;max-width:90%;max-height:90%}:host .image img{max-height:100%;max-width:100%}:host .spinner{visibility:hidden;width:max-content;position:absolute;top:50%;left:50%;z-index:-1;--tw-translate-y: -50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:host.loading .spinner{visibility:visible;z-index:1}:host.loading img{visibility:hidden;position:relative;z-index:-50}:host-context(html.dark) .title{background:var(--ngs-color-neutral-100);color:var(--ngs-color-neutral-600)}:host-context(html.dark) .close{background:var(--ngs-color-neutral-100);color:var(--ngs-color-neutral-600)}:host-context(html.dark) .close:hover{background:var(--ngs-color-neutral-200);color:var(--ngs-color-neutral-700)}:host-context(html.dark) .close:active{background:var(--ngs-color-neutral-300);color:var(--ngs-color-neutral-900)}:host-context(html.dark) .aside{background:var(--ngs-color-neutral-900)}:host-context(html.dark) .aside-body{color:var(--ngs-color-neutral-400)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
204
204
  }] });
205
205
 
206
206
  class ImageViewerDirective {