@ngstarter-ui/components 1.0.21

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 (415) hide show
  1. package/README.md +0 -0
  2. package/fesm2022/ngstarter-ui-components-action-required.mjs +42 -0
  3. package/fesm2022/ngstarter-ui-components-action-required.mjs.map +1 -0
  4. package/fesm2022/ngstarter-ui-components-alert.mjs +132 -0
  5. package/fesm2022/ngstarter-ui-components-alert.mjs.map +1 -0
  6. package/fesm2022/ngstarter-ui-components-announcement.mjs +86 -0
  7. package/fesm2022/ngstarter-ui-components-announcement.mjs.map +1 -0
  8. package/fesm2022/ngstarter-ui-components-autocomplete.mjs +360 -0
  9. package/fesm2022/ngstarter-ui-components-autocomplete.mjs.map +1 -0
  10. package/fesm2022/ngstarter-ui-components-avatar.mjs +235 -0
  11. package/fesm2022/ngstarter-ui-components-avatar.mjs.map +1 -0
  12. package/fesm2022/ngstarter-ui-components-badge.mjs +97 -0
  13. package/fesm2022/ngstarter-ui-components-badge.mjs.map +1 -0
  14. package/fesm2022/ngstarter-ui-components-block-loader.mjs +48 -0
  15. package/fesm2022/ngstarter-ui-components-block-loader.mjs.map +1 -0
  16. package/fesm2022/ngstarter-ui-components-bottom-sheet.mjs +327 -0
  17. package/fesm2022/ngstarter-ui-components-bottom-sheet.mjs.map +1 -0
  18. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs +209 -0
  19. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs.map +1 -0
  20. package/fesm2022/ngstarter-ui-components-button-toggle.mjs +175 -0
  21. package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -0
  22. package/fesm2022/ngstarter-ui-components-button.mjs +70 -0
  23. package/fesm2022/ngstarter-ui-components-button.mjs.map +1 -0
  24. package/fesm2022/ngstarter-ui-components-card-overlay.mjs +49 -0
  25. package/fesm2022/ngstarter-ui-components-card-overlay.mjs.map +1 -0
  26. package/fesm2022/ngstarter-ui-components-card.mjs +199 -0
  27. package/fesm2022/ngstarter-ui-components-card.mjs.map +1 -0
  28. package/fesm2022/ngstarter-ui-components-carousel.mjs +614 -0
  29. package/fesm2022/ngstarter-ui-components-carousel.mjs.map +1 -0
  30. package/fesm2022/ngstarter-ui-components-checkbox.mjs +300 -0
  31. package/fesm2022/ngstarter-ui-components-checkbox.mjs.map +1 -0
  32. package/fesm2022/ngstarter-ui-components-chips.mjs +589 -0
  33. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -0
  34. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +347 -0
  35. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -0
  36. package/fesm2022/ngstarter-ui-components-color-picker.mjs +713 -0
  37. package/fesm2022/ngstarter-ui-components-color-picker.mjs.map +1 -0
  38. package/fesm2022/ngstarter-ui-components-color-scheme.mjs +106 -0
  39. package/fesm2022/ngstarter-ui-components-color-scheme.mjs.map +1 -0
  40. package/fesm2022/ngstarter-ui-components-color-switcher.mjs +72 -0
  41. package/fesm2022/ngstarter-ui-components-color-switcher.mjs.map +1 -0
  42. package/fesm2022/ngstarter-ui-components-command-bar.mjs +57 -0
  43. package/fesm2022/ngstarter-ui-components-command-bar.mjs.map +1 -0
  44. package/fesm2022/ngstarter-ui-components-comment-editor.mjs +1024 -0
  45. package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -0
  46. package/fesm2022/ngstarter-ui-components-comparison-slider.mjs +177 -0
  47. package/fesm2022/ngstarter-ui-components-comparison-slider.mjs.map +1 -0
  48. package/fesm2022/ngstarter-ui-components-confirm.mjs +85 -0
  49. package/fesm2022/ngstarter-ui-components-confirm.mjs.map +1 -0
  50. package/fesm2022/ngstarter-ui-components-content-editor-code-block.component-Bk6QTli8.mjs +173 -0
  51. package/fesm2022/ngstarter-ui-components-content-editor-code-block.component-Bk6QTli8.mjs.map +1 -0
  52. package/fesm2022/ngstarter-ui-components-content-editor-content-editor-content-editable.directive-Bvfa2dqh.mjs +124 -0
  53. package/fesm2022/ngstarter-ui-components-content-editor-content-editor-content-editable.directive-Bvfa2dqh.mjs.map +1 -0
  54. package/fesm2022/ngstarter-ui-components-content-editor-cursor-controller-4Ak8VqGX.mjs +99 -0
  55. package/fesm2022/ngstarter-ui-components-content-editor-cursor-controller-4Ak8VqGX.mjs.map +1 -0
  56. package/fesm2022/ngstarter-ui-components-content-editor-divider-block.component-C_iRTCPH.mjs +33 -0
  57. package/fesm2022/ngstarter-ui-components-content-editor-divider-block.component-C_iRTCPH.mjs.map +1 -0
  58. package/fesm2022/ngstarter-ui-components-content-editor-embed-block-BbkC_t86.mjs +354 -0
  59. package/fesm2022/ngstarter-ui-components-content-editor-embed-block-BbkC_t86.mjs.map +1 -0
  60. package/fesm2022/ngstarter-ui-components-content-editor-heading-block.component-D9_CxTY1.mjs +114 -0
  61. package/fesm2022/ngstarter-ui-components-content-editor-heading-block.component-D9_CxTY1.mjs.map +1 -0
  62. package/fesm2022/ngstarter-ui-components-content-editor-image-block.component-B4zJyUg1.mjs +146 -0
  63. package/fesm2022/ngstarter-ui-components-content-editor-image-block.component-B4zJyUg1.mjs.map +1 -0
  64. package/fesm2022/ngstarter-ui-components-content-editor-list-block.component-Cv6wx5Xe.mjs +215 -0
  65. package/fesm2022/ngstarter-ui-components-content-editor-list-block.component-Cv6wx5Xe.mjs.map +1 -0
  66. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-1Zi2nAX5.mjs +2548 -0
  67. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-1Zi2nAX5.mjs.map +1 -0
  68. package/fesm2022/ngstarter-ui-components-content-editor-paragraph-block.component-C9bQvDYU.mjs +110 -0
  69. package/fesm2022/ngstarter-ui-components-content-editor-paragraph-block.component-C9bQvDYU.mjs.map +1 -0
  70. package/fesm2022/ngstarter-ui-components-content-editor-quote-block.component-BbHds2r2.mjs +141 -0
  71. package/fesm2022/ngstarter-ui-components-content-editor-quote-block.component-BbHds2r2.mjs.map +1 -0
  72. package/fesm2022/ngstarter-ui-components-content-editor-table-block.component-DlDh7Fnn.mjs +1604 -0
  73. package/fesm2022/ngstarter-ui-components-content-editor-table-block.component-DlDh7Fnn.mjs.map +1 -0
  74. package/fesm2022/ngstarter-ui-components-content-editor-video-block.component-m4DTihP2.mjs +175 -0
  75. package/fesm2022/ngstarter-ui-components-content-editor-video-block.component-m4DTihP2.mjs.map +1 -0
  76. package/fesm2022/ngstarter-ui-components-content-editor.mjs +2 -0
  77. package/fesm2022/ngstarter-ui-components-content-editor.mjs.map +1 -0
  78. package/fesm2022/ngstarter-ui-components-content-fade.mjs +35 -0
  79. package/fesm2022/ngstarter-ui-components-content-fade.mjs.map +1 -0
  80. package/fesm2022/ngstarter-ui-components-cookie-popup.mjs +107 -0
  81. package/fesm2022/ngstarter-ui-components-cookie-popup.mjs.map +1 -0
  82. package/fesm2022/ngstarter-ui-components-core.mjs +1330 -0
  83. package/fesm2022/ngstarter-ui-components-core.mjs.map +1 -0
  84. package/fesm2022/ngstarter-ui-components-country-select.mjs +489 -0
  85. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -0
  86. package/fesm2022/ngstarter-ui-components-crop.mjs +183 -0
  87. package/fesm2022/ngstarter-ui-components-crop.mjs.map +1 -0
  88. package/fesm2022/ngstarter-ui-components-currency-select.mjs +397 -0
  89. package/fesm2022/ngstarter-ui-components-currency-select.mjs.map +1 -0
  90. package/fesm2022/ngstarter-ui-components-data-view.mjs +1494 -0
  91. package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -0
  92. package/fesm2022/ngstarter-ui-components-date-format-select.mjs +154 -0
  93. package/fesm2022/ngstarter-ui-components-date-format-select.mjs.map +1 -0
  94. package/fesm2022/ngstarter-ui-components-datepicker.mjs +1159 -0
  95. package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -0
  96. package/fesm2022/ngstarter-ui-components-dialog.mjs +357 -0
  97. package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -0
  98. package/fesm2022/ngstarter-ui-components-divider.mjs +42 -0
  99. package/fesm2022/ngstarter-ui-components-divider.mjs.map +1 -0
  100. package/fesm2022/ngstarter-ui-components-drawer.mjs +132 -0
  101. package/fesm2022/ngstarter-ui-components-drawer.mjs.map +1 -0
  102. package/fesm2022/ngstarter-ui-components-emoji-picker.mjs +245 -0
  103. package/fesm2022/ngstarter-ui-components-emoji-picker.mjs.map +1 -0
  104. package/fesm2022/ngstarter-ui-components-empty-state.mjs +75 -0
  105. package/fesm2022/ngstarter-ui-components-empty-state.mjs.map +1 -0
  106. package/fesm2022/ngstarter-ui-components-expand.mjs +56 -0
  107. package/fesm2022/ngstarter-ui-components-expand.mjs.map +1 -0
  108. package/fesm2022/ngstarter-ui-components-expansion.mjs +193 -0
  109. package/fesm2022/ngstarter-ui-components-expansion.mjs.map +1 -0
  110. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +333 -0
  111. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -0
  112. package/fesm2022/ngstarter-ui-components-form-field.mjs +230 -0
  113. package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -0
  114. package/fesm2022/ngstarter-ui-components-form-renderer-autocomplete-many-field-BKQVlZHV.mjs +124 -0
  115. package/fesm2022/ngstarter-ui-components-form-renderer-autocomplete-many-field-BKQVlZHV.mjs.map +1 -0
  116. package/fesm2022/ngstarter-ui-components-form-renderer-checkbox-field-CoyKdvhV.mjs +22 -0
  117. package/fesm2022/ngstarter-ui-components-form-renderer-checkbox-field-CoyKdvhV.mjs.map +1 -0
  118. package/fesm2022/ngstarter-ui-components-form-renderer-datepicker-field-Bzc0TPO9.mjs +44 -0
  119. package/fesm2022/ngstarter-ui-components-form-renderer-datepicker-field-Bzc0TPO9.mjs.map +1 -0
  120. package/fesm2022/ngstarter-ui-components-form-renderer-divider-content-CwGzDCZv.mjs +17 -0
  121. package/fesm2022/ngstarter-ui-components-form-renderer-divider-content-CwGzDCZv.mjs.map +1 -0
  122. package/fesm2022/ngstarter-ui-components-form-renderer-image-content-ICTwkZPa.mjs +17 -0
  123. package/fesm2022/ngstarter-ui-components-form-renderer-image-content-ICTwkZPa.mjs.map +1 -0
  124. package/fesm2022/ngstarter-ui-components-form-renderer-input-field-RYxi-Mpw.mjs +35 -0
  125. package/fesm2022/ngstarter-ui-components-form-renderer-input-field-RYxi-Mpw.mjs.map +1 -0
  126. package/fesm2022/ngstarter-ui-components-form-renderer-radio-group-field-Cv3AGpoq.mjs +38 -0
  127. package/fesm2022/ngstarter-ui-components-form-renderer-radio-group-field-Cv3AGpoq.mjs.map +1 -0
  128. package/fesm2022/ngstarter-ui-components-form-renderer-select-field-eLcwI-BY.mjs +39 -0
  129. package/fesm2022/ngstarter-ui-components-form-renderer-select-field-eLcwI-BY.mjs.map +1 -0
  130. package/fesm2022/ngstarter-ui-components-form-renderer-text-content-BjzH_M3-.mjs +24 -0
  131. package/fesm2022/ngstarter-ui-components-form-renderer-text-content-BjzH_M3-.mjs.map +1 -0
  132. package/fesm2022/ngstarter-ui-components-form-renderer-textarea-field-4zH7FTQ1.mjs +37 -0
  133. package/fesm2022/ngstarter-ui-components-form-renderer-textarea-field-4zH7FTQ1.mjs.map +1 -0
  134. package/fesm2022/ngstarter-ui-components-form-renderer-timezone-field-BpH65Hd-.mjs +35 -0
  135. package/fesm2022/ngstarter-ui-components-form-renderer-timezone-field-BpH65Hd-.mjs.map +1 -0
  136. package/fesm2022/ngstarter-ui-components-form-renderer-toggle-field-iyqUrWxt.mjs +22 -0
  137. package/fesm2022/ngstarter-ui-components-form-renderer-toggle-field-iyqUrWxt.mjs.map +1 -0
  138. package/fesm2022/ngstarter-ui-components-form-renderer.mjs +317 -0
  139. package/fesm2022/ngstarter-ui-components-form-renderer.mjs.map +1 -0
  140. package/fesm2022/ngstarter-ui-components-gauge.mjs +44 -0
  141. package/fesm2022/ngstarter-ui-components-gauge.mjs.map +1 -0
  142. package/fesm2022/ngstarter-ui-components-grid.mjs +78 -0
  143. package/fesm2022/ngstarter-ui-components-grid.mjs.map +1 -0
  144. package/fesm2022/ngstarter-ui-components-guided-tour.mjs +736 -0
  145. package/fesm2022/ngstarter-ui-components-guided-tour.mjs.map +1 -0
  146. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs +192 -0
  147. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs.map +1 -0
  148. package/fesm2022/ngstarter-ui-components-icon.mjs +61 -0
  149. package/fesm2022/ngstarter-ui-components-icon.mjs.map +1 -0
  150. package/fesm2022/ngstarter-ui-components-image-designer.mjs +4016 -0
  151. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -0
  152. package/fesm2022/ngstarter-ui-components-image-placeholder.mjs +20 -0
  153. package/fesm2022/ngstarter-ui-components-image-placeholder.mjs.map +1 -0
  154. package/fesm2022/ngstarter-ui-components-image-resizer.mjs +151 -0
  155. package/fesm2022/ngstarter-ui-components-image-resizer.mjs.map +1 -0
  156. package/fesm2022/ngstarter-ui-components-image-viewer.mjs +349 -0
  157. package/fesm2022/ngstarter-ui-components-image-viewer.mjs.map +1 -0
  158. package/fesm2022/ngstarter-ui-components-image-zoom-viewer.mjs +162 -0
  159. package/fesm2022/ngstarter-ui-components-image-zoom-viewer.mjs.map +1 -0
  160. package/fesm2022/ngstarter-ui-components-incidents.mjs +257 -0
  161. package/fesm2022/ngstarter-ui-components-incidents.mjs.map +1 -0
  162. package/fesm2022/ngstarter-ui-components-inline-text-edit.mjs +179 -0
  163. package/fesm2022/ngstarter-ui-components-inline-text-edit.mjs.map +1 -0
  164. package/fesm2022/ngstarter-ui-components-input-mask.mjs +180 -0
  165. package/fesm2022/ngstarter-ui-components-input-mask.mjs.map +1 -0
  166. package/fesm2022/ngstarter-ui-components-input-validator.mjs +24 -0
  167. package/fesm2022/ngstarter-ui-components-input-validator.mjs.map +1 -0
  168. package/fesm2022/ngstarter-ui-components-input.mjs +152 -0
  169. package/fesm2022/ngstarter-ui-components-input.mjs.map +1 -0
  170. package/fesm2022/ngstarter-ui-components-kanban-board.mjs +156 -0
  171. package/fesm2022/ngstarter-ui-components-kanban-board.mjs.map +1 -0
  172. package/fesm2022/ngstarter-ui-components-kbd.mjs +31 -0
  173. package/fesm2022/ngstarter-ui-components-kbd.mjs.map +1 -0
  174. package/fesm2022/ngstarter-ui-components-layout.mjs +199 -0
  175. package/fesm2022/ngstarter-ui-components-layout.mjs.map +1 -0
  176. package/fesm2022/ngstarter-ui-components-list.mjs +279 -0
  177. package/fesm2022/ngstarter-ui-components-list.mjs.map +1 -0
  178. package/fesm2022/ngstarter-ui-components-logo.mjs +51 -0
  179. package/fesm2022/ngstarter-ui-components-logo.mjs.map +1 -0
  180. package/fesm2022/ngstarter-ui-components-marquee.mjs +76 -0
  181. package/fesm2022/ngstarter-ui-components-marquee.mjs.map +1 -0
  182. package/fesm2022/ngstarter-ui-components-menu.mjs +851 -0
  183. package/fesm2022/ngstarter-ui-components-menu.mjs.map +1 -0
  184. package/fesm2022/ngstarter-ui-components-micro-chart.mjs +928 -0
  185. package/fesm2022/ngstarter-ui-components-micro-chart.mjs.map +1 -0
  186. package/fesm2022/ngstarter-ui-components-navigation.mjs +439 -0
  187. package/fesm2022/ngstarter-ui-components-navigation.mjs.map +1 -0
  188. package/fesm2022/ngstarter-ui-components-notifications.mjs +181 -0
  189. package/fesm2022/ngstarter-ui-components-notifications.mjs.map +1 -0
  190. package/fesm2022/ngstarter-ui-components-number-input.mjs +293 -0
  191. package/fesm2022/ngstarter-ui-components-number-input.mjs.map +1 -0
  192. package/fesm2022/ngstarter-ui-components-option.mjs +157 -0
  193. package/fesm2022/ngstarter-ui-components-option.mjs.map +1 -0
  194. package/fesm2022/ngstarter-ui-components-overlay.mjs +112 -0
  195. package/fesm2022/ngstarter-ui-components-overlay.mjs.map +1 -0
  196. package/fesm2022/ngstarter-ui-components-page-loading-bar.mjs +77 -0
  197. package/fesm2022/ngstarter-ui-components-page-loading-bar.mjs.map +1 -0
  198. package/fesm2022/ngstarter-ui-components-paginator.mjs +297 -0
  199. package/fesm2022/ngstarter-ui-components-paginator.mjs.map +1 -0
  200. package/fesm2022/ngstarter-ui-components-panel.mjs +123 -0
  201. package/fesm2022/ngstarter-ui-components-panel.mjs.map +1 -0
  202. package/fesm2022/ngstarter-ui-components-password-strength.mjs +335 -0
  203. package/fesm2022/ngstarter-ui-components-password-strength.mjs.map +1 -0
  204. package/fesm2022/ngstarter-ui-components-phone-input.mjs +651 -0
  205. package/fesm2022/ngstarter-ui-components-phone-input.mjs.map +1 -0
  206. package/fesm2022/ngstarter-ui-components-pin-input.mjs +193 -0
  207. package/fesm2022/ngstarter-ui-components-pin-input.mjs.map +1 -0
  208. package/fesm2022/ngstarter-ui-components-popover.mjs +302 -0
  209. package/fesm2022/ngstarter-ui-components-popover.mjs.map +1 -0
  210. package/fesm2022/ngstarter-ui-components-progress-bar.mjs +68 -0
  211. package/fesm2022/ngstarter-ui-components-progress-bar.mjs.map +1 -0
  212. package/fesm2022/ngstarter-ui-components-radio-card.mjs +102 -0
  213. package/fesm2022/ngstarter-ui-components-radio-card.mjs.map +1 -0
  214. package/fesm2022/ngstarter-ui-components-radio.mjs +147 -0
  215. package/fesm2022/ngstarter-ui-components-radio.mjs.map +1 -0
  216. package/fesm2022/ngstarter-ui-components-rail-nav.mjs +87 -0
  217. package/fesm2022/ngstarter-ui-components-rail-nav.mjs.map +1 -0
  218. package/fesm2022/ngstarter-ui-components-resizable-container.mjs +74 -0
  219. package/fesm2022/ngstarter-ui-components-resizable-container.mjs.map +1 -0
  220. package/fesm2022/ngstarter-ui-components-screen-loader.mjs +95 -0
  221. package/fesm2022/ngstarter-ui-components-screen-loader.mjs.map +1 -0
  222. package/fesm2022/ngstarter-ui-components-scroll-spy.mjs +219 -0
  223. package/fesm2022/ngstarter-ui-components-scroll-spy.mjs.map +1 -0
  224. package/fesm2022/ngstarter-ui-components-scrollbar-area.mjs +459 -0
  225. package/fesm2022/ngstarter-ui-components-scrollbar-area.mjs.map +1 -0
  226. package/fesm2022/ngstarter-ui-components-segmented.mjs +218 -0
  227. package/fesm2022/ngstarter-ui-components-segmented.mjs.map +1 -0
  228. package/fesm2022/ngstarter-ui-components-select.mjs +496 -0
  229. package/fesm2022/ngstarter-ui-components-select.mjs.map +1 -0
  230. package/fesm2022/ngstarter-ui-components-side-panel.mjs +107 -0
  231. package/fesm2022/ngstarter-ui-components-side-panel.mjs.map +1 -0
  232. package/fesm2022/ngstarter-ui-components-sidebar.mjs +435 -0
  233. package/fesm2022/ngstarter-ui-components-sidebar.mjs.map +1 -0
  234. package/fesm2022/ngstarter-ui-components-sidenav.mjs +354 -0
  235. package/fesm2022/ngstarter-ui-components-sidenav.mjs.map +1 -0
  236. package/fesm2022/ngstarter-ui-components-signature-pad.mjs +452 -0
  237. package/fesm2022/ngstarter-ui-components-signature-pad.mjs.map +1 -0
  238. package/fesm2022/ngstarter-ui-components-skeleton.mjs +22 -0
  239. package/fesm2022/ngstarter-ui-components-skeleton.mjs.map +1 -0
  240. package/fesm2022/ngstarter-ui-components-slide-toggle.mjs +93 -0
  241. package/fesm2022/ngstarter-ui-components-slide-toggle.mjs.map +1 -0
  242. package/fesm2022/ngstarter-ui-components-slider.mjs +481 -0
  243. package/fesm2022/ngstarter-ui-components-slider.mjs.map +1 -0
  244. package/fesm2022/ngstarter-ui-components-snack-bar.mjs +354 -0
  245. package/fesm2022/ngstarter-ui-components-snack-bar.mjs.map +1 -0
  246. package/fesm2022/ngstarter-ui-components-sort.mjs +140 -0
  247. package/fesm2022/ngstarter-ui-components-sort.mjs.map +1 -0
  248. package/fesm2022/ngstarter-ui-components-spinner.mjs +75 -0
  249. package/fesm2022/ngstarter-ui-components-spinner.mjs.map +1 -0
  250. package/fesm2022/ngstarter-ui-components-splash-screen.mjs +93 -0
  251. package/fesm2022/ngstarter-ui-components-splash-screen.mjs.map +1 -0
  252. package/fesm2022/ngstarter-ui-components-split.mjs +948 -0
  253. package/fesm2022/ngstarter-ui-components-split.mjs.map +1 -0
  254. package/fesm2022/ngstarter-ui-components-stepper.mjs +103 -0
  255. package/fesm2022/ngstarter-ui-components-stepper.mjs.map +1 -0
  256. package/fesm2022/ngstarter-ui-components-suggestions.mjs +72 -0
  257. package/fesm2022/ngstarter-ui-components-suggestions.mjs.map +1 -0
  258. package/fesm2022/ngstarter-ui-components-tab-panel.mjs +265 -0
  259. package/fesm2022/ngstarter-ui-components-tab-panel.mjs.map +1 -0
  260. package/fesm2022/ngstarter-ui-components-table.mjs +648 -0
  261. package/fesm2022/ngstarter-ui-components-table.mjs.map +1 -0
  262. package/fesm2022/ngstarter-ui-components-tabs.mjs +591 -0
  263. package/fesm2022/ngstarter-ui-components-tabs.mjs.map +1 -0
  264. package/fesm2022/ngstarter-ui-components-text-editor.mjs +1012 -0
  265. package/fesm2022/ngstarter-ui-components-text-editor.mjs.map +1 -0
  266. package/fesm2022/ngstarter-ui-components-thumbnail-maker.mjs +212 -0
  267. package/fesm2022/ngstarter-ui-components-thumbnail-maker.mjs.map +1 -0
  268. package/fesm2022/ngstarter-ui-components-tiles.mjs +634 -0
  269. package/fesm2022/ngstarter-ui-components-tiles.mjs.map +1 -0
  270. package/fesm2022/ngstarter-ui-components-timeline.mjs +122 -0
  271. package/fesm2022/ngstarter-ui-components-timeline.mjs.map +1 -0
  272. package/fesm2022/ngstarter-ui-components-timepicker.mjs +486 -0
  273. package/fesm2022/ngstarter-ui-components-timepicker.mjs.map +1 -0
  274. package/fesm2022/ngstarter-ui-components-timezone-select.mjs +371 -0
  275. package/fesm2022/ngstarter-ui-components-timezone-select.mjs.map +1 -0
  276. package/fesm2022/ngstarter-ui-components-toolbar.mjs +299 -0
  277. package/fesm2022/ngstarter-ui-components-toolbar.mjs.map +1 -0
  278. package/fesm2022/ngstarter-ui-components-tooltip.mjs +506 -0
  279. package/fesm2022/ngstarter-ui-components-tooltip.mjs.map +1 -0
  280. package/fesm2022/ngstarter-ui-components-tree.mjs +200 -0
  281. package/fesm2022/ngstarter-ui-components-tree.mjs.map +1 -0
  282. package/fesm2022/ngstarter-ui-components-upload.mjs +330 -0
  283. package/fesm2022/ngstarter-ui-components-upload.mjs.map +1 -0
  284. package/fesm2022/ngstarter-ui-components-video-player.mjs +516 -0
  285. package/fesm2022/ngstarter-ui-components-video-player.mjs.map +1 -0
  286. package/fesm2022/ngstarter-ui-components-video-viewer.mjs +218 -0
  287. package/fesm2022/ngstarter-ui-components-video-viewer.mjs.map +1 -0
  288. package/fesm2022/ngstarter-ui-components-visual-builder.mjs +18 -0
  289. package/fesm2022/ngstarter-ui-components-visual-builder.mjs.map +1 -0
  290. package/fesm2022/ngstarter-ui-components.mjs +6 -0
  291. package/fesm2022/ngstarter-ui-components.mjs.map +1 -0
  292. package/package.json +535 -0
  293. package/styles/_common.scss +456 -0
  294. package/styles/_global.scss +91 -0
  295. package/styles/themes/default.scss +2 -0
  296. package/types/ngstarter-ui-components-action-required.d.ts +14 -0
  297. package/types/ngstarter-ui-components-alert.d.ts +50 -0
  298. package/types/ngstarter-ui-components-announcement.d.ts +59 -0
  299. package/types/ngstarter-ui-components-autocomplete.d.ts +83 -0
  300. package/types/ngstarter-ui-components-avatar.d.ts +69 -0
  301. package/types/ngstarter-ui-components-badge.d.ts +38 -0
  302. package/types/ngstarter-ui-components-block-loader.d.ts +21 -0
  303. package/types/ngstarter-ui-components-bottom-sheet.d.ts +149 -0
  304. package/types/ngstarter-ui-components-breadcrumbs.d.ts +104 -0
  305. package/types/ngstarter-ui-components-button-toggle.d.ts +54 -0
  306. package/types/ngstarter-ui-components-button.d.ts +27 -0
  307. package/types/ngstarter-ui-components-card-overlay.d.ts +20 -0
  308. package/types/ngstarter-ui-components-card.d.ts +85 -0
  309. package/types/ngstarter-ui-components-carousel.d.ts +76 -0
  310. package/types/ngstarter-ui-components-checkbox.d.ts +94 -0
  311. package/types/ngstarter-ui-components-chips.d.ts +189 -0
  312. package/types/ngstarter-ui-components-code-highlighter.d.ts +28 -0
  313. package/types/ngstarter-ui-components-color-picker.d.ts +92 -0
  314. package/types/ngstarter-ui-components-color-scheme.d.ts +44 -0
  315. package/types/ngstarter-ui-components-color-switcher.d.ts +26 -0
  316. package/types/ngstarter-ui-components-command-bar.d.ts +28 -0
  317. package/types/ngstarter-ui-components-comment-editor.d.ts +194 -0
  318. package/types/ngstarter-ui-components-comparison-slider.d.ts +42 -0
  319. package/types/ngstarter-ui-components-confirm.d.ts +34 -0
  320. package/types/ngstarter-ui-components-content-editor.d.ts +321 -0
  321. package/types/ngstarter-ui-components-content-fade.d.ts +17 -0
  322. package/types/ngstarter-ui-components-cookie-popup.d.ts +41 -0
  323. package/types/ngstarter-ui-components-core.d.ts +421 -0
  324. package/types/ngstarter-ui-components-country-select.d.ts +78 -0
  325. package/types/ngstarter-ui-components-crop.d.ts +59 -0
  326. package/types/ngstarter-ui-components-currency-select.d.ts +82 -0
  327. package/types/ngstarter-ui-components-data-view.d.ts +391 -0
  328. package/types/ngstarter-ui-components-date-format-select.d.ts +59 -0
  329. package/types/ngstarter-ui-components-datepicker.d.ts +384 -0
  330. package/types/ngstarter-ui-components-dialog.d.ts +115 -0
  331. package/types/ngstarter-ui-components-divider.d.ts +18 -0
  332. package/types/ngstarter-ui-components-drawer.d.ts +32 -0
  333. package/types/ngstarter-ui-components-emoji-picker.d.ts +49 -0
  334. package/types/ngstarter-ui-components-empty-state.d.ts +33 -0
  335. package/types/ngstarter-ui-components-expand.d.ts +26 -0
  336. package/types/ngstarter-ui-components-expansion.d.ts +68 -0
  337. package/types/ngstarter-ui-components-filter-builder.d.ts +106 -0
  338. package/types/ngstarter-ui-components-form-field.d.ts +107 -0
  339. package/types/ngstarter-ui-components-form-renderer.d.ts +121 -0
  340. package/types/ngstarter-ui-components-gauge.d.ts +21 -0
  341. package/types/ngstarter-ui-components-grid.d.ts +45 -0
  342. package/types/ngstarter-ui-components-guided-tour.d.ts +227 -0
  343. package/types/ngstarter-ui-components-headless-stepper.d.ts +65 -0
  344. package/types/ngstarter-ui-components-icon.d.ts +17 -0
  345. package/types/ngstarter-ui-components-image-designer.d.ts +357 -0
  346. package/types/ngstarter-ui-components-image-placeholder.d.ts +8 -0
  347. package/types/ngstarter-ui-components-image-resizer.d.ts +35 -0
  348. package/types/ngstarter-ui-components-image-viewer.d.ts +63 -0
  349. package/types/ngstarter-ui-components-image-zoom-viewer.d.ts +34 -0
  350. package/types/ngstarter-ui-components-incidents.d.ts +119 -0
  351. package/types/ngstarter-ui-components-inline-text-edit.d.ts +39 -0
  352. package/types/ngstarter-ui-components-input-mask.d.ts +36 -0
  353. package/types/ngstarter-ui-components-input-validator.d.ts +5 -0
  354. package/types/ngstarter-ui-components-input.d.ts +53 -0
  355. package/types/ngstarter-ui-components-kanban-board.d.ts +68 -0
  356. package/types/ngstarter-ui-components-kbd.d.ts +13 -0
  357. package/types/ngstarter-ui-components-layout.d.ts +83 -0
  358. package/types/ngstarter-ui-components-list.d.ts +98 -0
  359. package/types/ngstarter-ui-components-logo.d.ts +26 -0
  360. package/types/ngstarter-ui-components-marquee.d.ts +27 -0
  361. package/types/ngstarter-ui-components-menu.d.ts +199 -0
  362. package/types/ngstarter-ui-components-micro-chart.d.ts +195 -0
  363. package/types/ngstarter-ui-components-navigation.d.ts +136 -0
  364. package/types/ngstarter-ui-components-notifications.d.ts +84 -0
  365. package/types/ngstarter-ui-components-number-input.d.ts +99 -0
  366. package/types/ngstarter-ui-components-option.d.ts +61 -0
  367. package/types/ngstarter-ui-components-overlay.d.ts +12 -0
  368. package/types/ngstarter-ui-components-page-loading-bar.d.ts +20 -0
  369. package/types/ngstarter-ui-components-paginator.d.ts +145 -0
  370. package/types/ngstarter-ui-components-panel.d.ts +59 -0
  371. package/types/ngstarter-ui-components-password-strength.d.ts +109 -0
  372. package/types/ngstarter-ui-components-phone-input.d.ts +103 -0
  373. package/types/ngstarter-ui-components-pin-input.d.ts +48 -0
  374. package/types/ngstarter-ui-components-popover.d.ts +94 -0
  375. package/types/ngstarter-ui-components-progress-bar.d.ts +30 -0
  376. package/types/ngstarter-ui-components-radio-card.d.ts +37 -0
  377. package/types/ngstarter-ui-components-radio.d.ts +45 -0
  378. package/types/ngstarter-ui-components-rail-nav.d.ts +36 -0
  379. package/types/ngstarter-ui-components-resizable-container.d.ts +25 -0
  380. package/types/ngstarter-ui-components-screen-loader.d.ts +34 -0
  381. package/types/ngstarter-ui-components-scroll-spy.d.ts +63 -0
  382. package/types/ngstarter-ui-components-scrollbar-area.d.ts +67 -0
  383. package/types/ngstarter-ui-components-segmented.d.ts +65 -0
  384. package/types/ngstarter-ui-components-select.d.ts +126 -0
  385. package/types/ngstarter-ui-components-side-panel.d.ts +42 -0
  386. package/types/ngstarter-ui-components-sidebar.d.ts +143 -0
  387. package/types/ngstarter-ui-components-sidenav.d.ts +86 -0
  388. package/types/ngstarter-ui-components-signature-pad.d.ts +49 -0
  389. package/types/ngstarter-ui-components-skeleton.d.ts +9 -0
  390. package/types/ngstarter-ui-components-slide-toggle.d.ts +41 -0
  391. package/types/ngstarter-ui-components-slider.d.ts +85 -0
  392. package/types/ngstarter-ui-components-snack-bar.d.ts +142 -0
  393. package/types/ngstarter-ui-components-sort.d.ts +66 -0
  394. package/types/ngstarter-ui-components-spinner.d.ts +28 -0
  395. package/types/ngstarter-ui-components-splash-screen.d.ts +31 -0
  396. package/types/ngstarter-ui-components-split.d.ts +210 -0
  397. package/types/ngstarter-ui-components-stepper.d.ts +44 -0
  398. package/types/ngstarter-ui-components-suggestions.d.ts +32 -0
  399. package/types/ngstarter-ui-components-tab-panel.d.ts +96 -0
  400. package/types/ngstarter-ui-components-table.d.ts +277 -0
  401. package/types/ngstarter-ui-components-tabs.d.ts +145 -0
  402. package/types/ngstarter-ui-components-text-editor.d.ts +191 -0
  403. package/types/ngstarter-ui-components-thumbnail-maker.d.ts +35 -0
  404. package/types/ngstarter-ui-components-tiles.d.ts +109 -0
  405. package/types/ngstarter-ui-components-timeline.d.ts +57 -0
  406. package/types/ngstarter-ui-components-timepicker.d.ts +115 -0
  407. package/types/ngstarter-ui-components-timezone-select.d.ts +75 -0
  408. package/types/ngstarter-ui-components-toolbar.d.ts +74 -0
  409. package/types/ngstarter-ui-components-tooltip.d.ts +52 -0
  410. package/types/ngstarter-ui-components-tree.d.ts +60 -0
  411. package/types/ngstarter-ui-components-upload.d.ts +134 -0
  412. package/types/ngstarter-ui-components-video-player.d.ts +67 -0
  413. package/types/ngstarter-ui-components-video-viewer.d.ts +98 -0
  414. package/types/ngstarter-ui-components-visual-builder.d.ts +8 -0
  415. package/types/ngstarter-ui-components.d.ts +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngstarter-ui-components-slider.mjs","sources":["../../../projects/components/slider/src/slider-thumb.ts","../../../projects/components/slider/src/slider/slider.ts","../../../projects/components/slider/src/slider/slider.html","../../../projects/components/slider/src/slider-start-thumb.ts","../../../projects/components/slider/src/slider-end-thumb.ts","../../../projects/components/slider/ngstarter-ui-components-slider.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n computed,\n numberAttribute, effect\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Slider } from './slider/slider';\n\n@Directive({\n selector: 'input[ngsSliderThumb]',\n exportAs: 'ngsSliderThumb',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SliderThumb),\n multi: true,\n },\n ],\n host: {\n 'class': 'ngs-slider-input',\n '[class.ngs-slider-input-active]': '_slider._activeThumb() === this',\n 'type': 'range',\n '[attr.min]': 'min',\n '[attr.max]': 'max',\n '[attr.step]': 'step',\n '[value]': 'value',\n '(input)': '_onInput($event)',\n '(change)': '_onChange($event)',\n '(blur)': '_onBlur()',\n '(focus)': '_onFocus()',\n },\n})\nexport class SliderThumb implements ControlValueAccessor, OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLInputElement>);\n readonly _slider = inject(Slider);\n\n readonly valueChange = output<number>();\n\n valueInput = input(undefined, { transform: numberAttribute, alias: 'value' });\n\n private _value = signal(0);\n\n getId() {\n return 'base';\n }\n\n get value(): number {\n return this._value();\n }\n set value(v: number) {\n this._value.set(this._clampValue(v));\n this._updateHostValue();\n this._slider._onValueChange(this);\n }\n\n private _clampValue(v: number): number {\n const thumbs = this._slider._allThumbs();\n const min = this._slider.min();\n const max = this._slider.max();\n\n if (thumbs.length === 2) {\n const index = thumbs.indexOf(this);\n if (index === 0) {\n return Math.max(min, Math.min(v, thumbs[1].value));\n } else if (index === 1) {\n return Math.min(max, Math.max(v, thumbs[0].value));\n }\n }\n return Math.max(min, Math.min(max, v));\n }\n\n constructor() {\n effect(() => {\n const inputVal = this.valueInput();\n if (inputVal !== undefined && inputVal !== this.value && !this._isUserInteraction) {\n this.value = inputVal;\n }\n });\n }\n\n private _onChangeFn: (value: any) => void = () => {};\n private _onTouchedFn: () => void = () => {};\n\n ngOnInit() {\n if (this.valueInput() === undefined) {\n const initialValue = this._elementRef.nativeElement.getAttribute('value');\n if (initialValue !== null) {\n this.value = Number(initialValue);\n } else {\n this.value = this._slider.min();\n }\n } else {\n this._slider._onValueChange(this);\n }\n }\n\n get min(): number {\n return this._slider.min();\n }\n\n get max(): number {\n return this._slider.max();\n }\n\n get step(): number {\n return this._slider.step();\n }\n\n ngOnDestroy() {}\n\n _updateValueFromUser(value: number) {\n const clampedValue = this._clampValue(value);\n if (this._value() !== clampedValue) {\n this._isUserInteraction = true;\n this._value.set(clampedValue);\n this._updateHostValue();\n this._onChangeFn(clampedValue);\n this.valueChange.emit(clampedValue);\n this._slider._onValueChange(this);\n\n setTimeout(() => {\n this._isUserInteraction = false;\n });\n }\n }\n\n _onInput(event: Event) {\n if (this._slider._allThumbs().length > 1 && this._slider._activeThumb() !== this) {\n return;\n }\n let value = (event.target as HTMLInputElement).valueAsNumber;\n const initialValue = value;\n\n this._updateValueFromUser(value);\n\n if (value !== initialValue) {\n this._updateHostValue();\n }\n\n this._slider._activeThumb.set(this);\n }\n\n _onChange(event: Event) {\n this._onTouchedFn();\n }\n\n _onBlur() {\n this._onTouchedFn();\n }\n\n _onFocus() {\n this._slider._activeThumb.set(this);\n }\n\n focus() {\n this._elementRef.nativeElement.focus();\n }\n\n private _isUserInteraction = false;\n\n writeValue(value: any): void {\n this._isUserInteraction = true;\n this.value = value;\n setTimeout(() => {\n this._isUserInteraction = false;\n });\n }\n\n registerOnChange(fn: any): void {\n this._onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouchedFn = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this._elementRef.nativeElement.disabled = isDisabled;\n }\n\n private _updateHostValue() {\n this._elementRef.nativeElement.value = (this._value() ?? 0).toString();\n }\n\n get percentage(): number {\n const max = this._slider.max();\n const min = this._slider.min();\n\n if (max === min) {\n return 0;\n }\n\n const p = (this._value() - min) / (max - min);\n return Math.max(0, Math.min(1, p));\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n PLATFORM_ID,\n signal\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SliderThumb } from '../slider-thumb';\nimport { filter, fromEvent, merge, switchMap, takeUntil, tap } from 'rxjs';\n\n@Component({\n selector: 'ngs-slider',\n exportAs: 'ngsSlider',\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-slider',\n '[class.ngs-slider-disabled]': 'disabled()',\n '[class.ngs-slider-discrete]': 'discrete()',\n '[class.ngs-slider-show-tick-marks]': 'showTickMarks()',\n },\n})\nexport class Slider {\n private elementRef = inject(ElementRef);\n readonly _cdr = inject(ChangeDetectorRef);\n private readonly _dir = inject(Directionality, { optional: true });\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _document = inject(DOCUMENT);\n private readonly _platformId = inject(PLATFORM_ID);\n\n disabled = input(false, { transform: booleanAttribute });\n discrete = input(false, { transform: booleanAttribute });\n showTickMarks = input(false, { transform: booleanAttribute });\n min = input(0, { transform: numberAttribute });\n max = input(100, { transform: numberAttribute });\n step = input(1, { transform: numberAttribute });\n displayWith = input<(value: number) => string>((value: number) => `${value}`);\n\n _allThumbs = contentChildren(SliderThumb, { descendants: true });\n\n _trackLeft = computed(() => {\n const thumbs = this._allThumbs();\n if (thumbs.length === 2) {\n const p1 = thumbs[0].percentage || 0;\n const p2 = thumbs[1].percentage || 0;\n return Math.min(p1, p2) * 100;\n }\n return 0;\n });\n\n _trackRight = computed(() => {\n const thumbs = this._allThumbs();\n if (thumbs.length === 2) {\n const p1 = thumbs[0].percentage || 0;\n const p2 = thumbs[1].percentage || 0;\n return (1 - Math.max(p1, p2)) * 100;\n }\n const thumb = thumbs[0];\n return (1 - (thumb?.percentage || 0)) * 100;\n });\n\n _activeThumb = signal<SliderThumb | null>(null);\n _isDragging = signal(false);\n _tickMarks = computed(() => {\n if (!this.showTickMarks() || this.step() <= 0) {\n return [];\n }\n\n const count = Math.floor((this.max() - this.min()) / this.step()) + 1;\n return Array(count).fill(1); // 1 = inactive by default\n });\n\n _isRtl = false;\n\n constructor() {\n if (this._dir) {\n this._dir.change.pipe(takeUntilDestroyed()).subscribe(() => {\n this._isRtl = this._dir!.value === 'rtl';\n this._cdr.markForCheck();\n });\n this._isRtl = this._dir.value === 'rtl';\n }\n\n effect(() => {\n this._allThumbs();\n this._cdr.markForCheck();\n });\n\n this._initializeEvents();\n }\n\n private _initializeEvents() {\n if (!isPlatformBrowser(this._platformId)) {\n return;\n }\n\n const sliderElement = this.elementRef.nativeElement as HTMLElement;\n\n const pointerDown$ = merge(\n fromEvent<MouseEvent>(sliderElement, 'mousedown'),\n fromEvent<TouchEvent>(sliderElement, 'touchstart', { passive: false })\n ).pipe(\n filter((event) => {\n if (this.disabled()) return false;\n return !(event instanceof MouseEvent && event.button !== 0);\n })\n );\n\n const pointerMove$ = merge(\n fromEvent<MouseEvent>(this._document, 'mousemove'),\n fromEvent<TouchEvent>(this._document, 'touchmove', { passive: false })\n );\n\n const pointerUp$ = merge(\n fromEvent<MouseEvent>(this._document, 'mouseup'),\n fromEvent<TouchEvent>(this._document, 'touchend', { passive: false }),\n fromEvent<TouchEvent>(this._document, 'touchcancel', { passive: false })\n );\n\n pointerDown$\n .pipe(\n filter(() => !this.disabled()),\n tap((event) => {\n if (event instanceof TouchEvent) {\n event.preventDefault();\n }\n this._isDragging.set(true);\n this._onPointerDown(event);\n this._cdr.markForCheck();\n }),\n switchMap(() =>\n pointerMove$.pipe(\n tap((event) => {\n if (event instanceof TouchEvent) {\n event.preventDefault();\n }\n }),\n takeUntil(\n pointerUp$.pipe(\n tap(() => {\n this._isDragging.set(false);\n this._cdr.markForCheck();\n })\n )\n )\n )\n ),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event) => {\n this._onPointerMove(event);\n });\n\n merge(\n fromEvent<MouseEvent>(sliderElement, 'mousemove'),\n fromEvent<TouchEvent>(sliderElement, 'touchmove', { passive: false })\n )\n .pipe(\n filter(() => !this.disabled() && !this._isDragging()),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event) => {\n this._onPointerMove(event);\n });\n }\n\n _onValueChange(thumb: SliderThumb) {\n this._cdr.markForCheck();\n }\n\n private _findClosestThumb(percentage: number): SliderThumb | null {\n const thumbs = this._allThumbs();\n if (thumbs.length === 0) {\n return null;\n }\n\n let closestThumb = thumbs[0];\n let minDistance = Math.abs(thumbs[0].percentage - percentage);\n\n for (let i = 1; i < thumbs.length; i++) {\n const distance = Math.abs(thumbs[i].percentage - percentage);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestThumb = thumbs[i];\n } else if (distance === minDistance) {\n // If distances are equal (e.g., thumbs are at the same point)\n if (percentage > thumbs[i].percentage) {\n // If click is to the right of the overlap point, select the \"right\" thumb\n // (in the array thumbs[1] is usually the end thumb)\n closestThumb = thumbs[i];\n } else if (percentage < thumbs[i].percentage) {\n // If click is to the left\n closestThumb = thumbs[i-1];\n } else {\n // If click is exactly at the overlap point\n // give priority to the already active one\n if (thumbs[i] === this._activeThumb()) {\n closestThumb = thumbs[i];\n }\n }\n }\n }\n\n return closestThumb;\n }\n\n _onPointerDown(event: MouseEvent | TouchEvent) {\n if (this.disabled()) {\n return;\n }\n\n const percentage = this._calculatePercentage(event);\n const closestThumb = this._findClosestThumb(percentage);\n\n if (closestThumb) {\n this._activeThumb.set(closestThumb);\n\n const value = this._calculateValueFromPercentage(percentage);\n closestThumb._updateValueFromUser(value);\n closestThumb.focus();\n this._cdr.markForCheck();\n }\n }\n\n _onPointerMove(event: MouseEvent | TouchEvent) {\n if (this.disabled()) {\n return;\n }\n\n const percentage = this._calculatePercentage(event);\n const isDragging = this._isDragging();\n const activeThumb = this._activeThumb();\n\n if (isDragging && activeThumb) {\n const value = this._calculateValueFromPercentage(percentage);\n activeThumb._updateValueFromUser(value);\n this._cdr.markForCheck();\n } else if (!isDragging) {\n const closestThumb = this._findClosestThumb(percentage);\n\n if (closestThumb && activeThumb !== closestThumb) {\n this._activeThumb.set(closestThumb);\n this._cdr.markForCheck();\n }\n }\n }\n\n private _calculatePercentage(event: MouseEvent | TouchEvent): number {\n const sliderElement = this.elementRef.nativeElement as HTMLElement;\n const wrapper = sliderElement.querySelector('.ngs-slider-wrapper') as HTMLElement;\n const rect = (wrapper || sliderElement).getBoundingClientRect();\n const clientX = 'touches' in event ? event.touches[0].clientX : (event as MouseEvent).clientX;\n\n let position = (clientX - rect.left) / rect.width;\n position = Math.max(0, Math.min(1, position));\n\n return this._isRtl ? 1 - position : position;\n }\n\n private _calculateValueFromPercentage(percentage: number): number {\n const min = this.min();\n const max = this.max();\n const step = this.step();\n\n const rawValue = min + percentage * (max - min);\n let value = rawValue;\n\n if (step > 0) {\n value = Math.round(rawValue / step) * step;\n }\n\n return Math.max(min, Math.min(max, value));\n }\n}\n","<div class=\"ngs-slider-wrapper\">\n <div class=\"ngs-slider-track\">\n <div class=\"ngs-slider-track-background\"></div>\n <div class=\"ngs-slider-track-active\"\n [style.left.%]=\"(_trackLeft() / 100) * 100\"\n [style.right.%]=\"(_trackRight() / 100) * 100\"></div>\n @if (showTickMarks()) {\n <div class=\"ngs-slider-tick-marks\">\n @for (tick of _tickMarks(); track $index) {\n <div class=\"ngs-slider-tick-mark\" [class.ngs-slider-tick-mark-active]=\"tick === 0\"></div>\n }\n </div>\n }\n </div>\n\n <ng-content />\n\n <div class=\"ngs-slider-visual-thumbs\">\n @for (thumb of _allThumbs(); track thumb) {\n <div class=\"ngs-slider-visual-thumb\"\n [style.left.%]=\"thumb.percentage * 100\"\n [class.ngs-slider-visual-thumb-active]=\"thumb === _activeThumb()\">\n <div class=\"ngs-slider-thumb-knob\"></div>\n @if (discrete()) {\n <div class=\"ngs-slider-value-indicator-container\">\n <div class=\"ngs-slider-value-indicator\">\n <span class=\"ngs-slider-value-indicator-text\">{{ displayWith()(thumb.value) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { Directive, forwardRef } from '@angular/core';\nimport { SliderThumb } from './slider-thumb';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: 'input[ngsSliderStartThumb]',\n standalone: true,\n host: {\n 'class': 'ngs-slider-input',\n '[class.ngs-slider-input-active]': '_slider._activeThumb() === this',\n 'type': 'range',\n '[attr.min]': 'min',\n '[attr.max]': 'max',\n '[attr.step]': 'step',\n '[value]': 'value',\n '(input)': '_onInput($event)',\n '(change)': '_onChange($event)',\n '(blur)': '_onBlur()',\n '(focus)': '_onFocus()',\n },\n providers: [\n {\n provide: SliderThumb,\n useExisting: forwardRef(() => SliderStartThumb),\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SliderStartThumb),\n multi: true,\n },\n ],\n})\nexport class SliderStartThumb extends SliderThumb {\n override getId() {\n return 'start';\n }\n}\n","import { Directive, forwardRef } from '@angular/core';\nimport { SliderThumb } from './slider-thumb';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: 'input[ngsSliderEndThumb]',\n host: {\n 'class': 'ngs-slider-input',\n '[class.ngs-slider-input-active]': '_slider._activeThumb() === this',\n 'type': 'range',\n '[attr.min]': 'min',\n '[attr.max]': 'max',\n '[attr.step]': 'step',\n '[value]': 'value',\n '(input)': '_onInput($event)',\n '(change)': '_onChange($event)',\n '(blur)': '_onBlur()',\n '(focus)': '_onFocus()',\n },\n providers: [\n {\n provide: SliderThumb,\n useExisting: forwardRef(() => SliderEndThumb),\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SliderEndThumb),\n multi: true,\n },\n ],\n})\nexport class SliderEndThumb extends SliderThumb {\n override getId() {\n return 'end';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,354 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, viewChild, inject, ChangeDetectorRef, PLATFORM_ID, signal, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy, Component, Injector, TemplateRef, Injectable } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+ import { isPlatformBrowser } from '@angular/common';
5
+ import { BasePortalOutlet, CdkPortalOutlet, TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
6
+ import { Button } from '@ngstarter-ui/components/button';
7
+ import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
8
+
9
+ /** Injection token that can be used to access the data that was passed in to a snack bar. */
10
+ const SNACK_BAR_DATA = new InjectionToken('SnackBarData');
11
+ /** Injection token that can be used to specify default snack bar. */
12
+ const SNACK_BAR_CONFIG = new InjectionToken('SnackBarConfig');
13
+ /** Function to provide the snack bar configuration. */
14
+ function provideSnackBarConfig(config) {
15
+ return {
16
+ provide: SNACK_BAR_CONFIG,
17
+ useValue: config,
18
+ };
19
+ }
20
+ class SnackBarConfig {
21
+ /** The politeness level for the MatAriaLiveAnnouncer announcement. */
22
+ politeness = 'assertive';
23
+ /** Message to be announced by the LiveAnnouncer. */
24
+ announcementMessage = '';
25
+ /** The view container that should be used for the snack bar's origin. */
26
+ viewContainerRef;
27
+ /** The duration in milliseconds to wait before automatically closing the snack bar. */
28
+ duration = 0;
29
+ /** Extra CSS classes to be added to the snack bar container. */
30
+ panelClass;
31
+ /** Text layout direction for the snack bar. */
32
+ direction;
33
+ /** The horizontal position to place the snack bar. */
34
+ horizontalPosition = 'center';
35
+ /** The vertical position to place the snack bar. */
36
+ verticalPosition = 'bottom';
37
+ /** Data being injected into the child component. */
38
+ data = null;
39
+ }
40
+
41
+ class SnackBarRef {
42
+ containerInstance;
43
+ _overlayRef;
44
+ /** The instance of the component making up the content of the snack bar. */
45
+ instance;
46
+ /** Subject for notifying the user that the snack bar has been dismissed. */
47
+ _afterDismissed = new Subject();
48
+ /** Subject for notifying the user that the snack bar has opened and appeared. */
49
+ _afterOpened = new Subject();
50
+ constructor(containerInstance, _overlayRef) {
51
+ this.containerInstance = containerInstance;
52
+ this._overlayRef = _overlayRef;
53
+ containerInstance._onExit.subscribe(() => {
54
+ this._overlayRef.dispose();
55
+ this._afterDismissed.next();
56
+ this._afterDismissed.complete();
57
+ });
58
+ containerInstance._onEnter.subscribe(() => {
59
+ this._afterOpened.next();
60
+ this._afterOpened.complete();
61
+ });
62
+ }
63
+ /** Dismisses the snack bar. */
64
+ dismiss() {
65
+ if (!this._afterDismissed.closed) {
66
+ this.containerInstance.exit();
67
+ }
68
+ }
69
+ /** Gets an observable that is notified when the snack bar is finished closing. */
70
+ afterDismissed() {
71
+ return this._afterDismissed.asObservable();
72
+ }
73
+ /** Gets an observable that is notified when the snack bar has opened and appeared. */
74
+ afterOpened() {
75
+ return this._afterOpened.asObservable();
76
+ }
77
+ }
78
+
79
+ class SnackBarContainer extends BasePortalOutlet {
80
+ snackBarConfig;
81
+ _portalOutlet = viewChild.required(CdkPortalOutlet);
82
+ _cdr = inject(ChangeDetectorRef);
83
+ _platformId = inject(PLATFORM_ID);
84
+ /** State of the snack bar animation. */
85
+ animationState = signal('void', ...(ngDevMode ? [{ debugName: "animationState" }] : /* istanbul ignore next */ []));
86
+ leaving = signal(false, ...(ngDevMode ? [{ debugName: "leaving" }] : /* istanbul ignore next */ []));
87
+ /** Event emitted when the snack bar exit animation is finished. */
88
+ _onExit = new EventEmitter();
89
+ /** Event emitted when the snack bar enter animation is finished. */
90
+ _onEnter = new EventEmitter();
91
+ constructor(snackBarConfig) {
92
+ super();
93
+ this.snackBarConfig = snackBarConfig;
94
+ if (this.snackBarConfig.verticalPosition === 'top') {
95
+ this.animationState.set('hidden-top');
96
+ }
97
+ else {
98
+ this.animationState.set('hidden-bottom');
99
+ }
100
+ }
101
+ /** Attach a component portal as content to this snack bar container. */
102
+ attachComponentPortal(portal) {
103
+ this._assertNotAttached();
104
+ return this._portalOutlet().attachComponentPortal(portal);
105
+ }
106
+ /** Attach a template portal as content to this snack bar container. */
107
+ attachTemplatePortal(portal) {
108
+ this._assertNotAttached();
109
+ return this._portalOutlet().attachTemplatePortal(portal);
110
+ }
111
+ /** Begin animation of snack bar entrance into view. */
112
+ enter() {
113
+ // Ensure we are not in leaving state
114
+ this.leaving.set(false);
115
+ if (!isPlatformBrowser(this._platformId)) {
116
+ this.animationState.set('visible');
117
+ this._cdr.markForCheck();
118
+ return;
119
+ }
120
+ // Use requestAnimationFrame to ensure the initial state (hidden-top/bottom)
121
+ // is applied to the DOM before we change it to 'visible'.
122
+ // We use two nested requestAnimationFrames to ensure at least one paint cycle has occurred.
123
+ // The first rAF captures the current state, the second one allows for the state to be applied
124
+ // and then triggers the transition.
125
+ requestAnimationFrame(() => {
126
+ // Force a reflow to ensure the initial styles are applied.
127
+ // This is sometimes necessary in addition to rAF in some browsers/environments.
128
+ if (typeof document !== 'undefined' && document.body) {
129
+ void document.body.offsetHeight;
130
+ }
131
+ requestAnimationFrame(() => {
132
+ this.animationState.set('visible');
133
+ this._cdr.markForCheck();
134
+ });
135
+ });
136
+ }
137
+ /** Begin animation of snack bar exit from view. */
138
+ exit() {
139
+ const initialState = this.animationState();
140
+ const targetState = this.snackBarConfig.verticalPosition === 'top' ? 'hidden-top' : 'hidden-bottom';
141
+ if (initialState === targetState) {
142
+ this._onExit.emit();
143
+ return;
144
+ }
145
+ // Mark as leaving to use faster transition timing
146
+ this.leaving.set(true);
147
+ this.animationState.set(targetState);
148
+ this._cdr.markForCheck();
149
+ }
150
+ /** Handle end of transition. */
151
+ onTransitionEnd(event) {
152
+ if (event.propertyName !== 'transform' && event.propertyName !== 'opacity') {
153
+ return;
154
+ }
155
+ const state = this.animationState();
156
+ if (state === 'visible' && event.propertyName === 'transform') {
157
+ this._onEnter.emit();
158
+ }
159
+ else if ((state === 'hidden-top' || state === 'hidden-bottom')) {
160
+ if (event.propertyName === 'opacity' || event.propertyName === 'transform') {
161
+ this._onExit.emit();
162
+ }
163
+ }
164
+ }
165
+ /** Asserts that no content is already attached to the container. */
166
+ _assertNotAttached() {
167
+ if (this._portalOutlet().hasAttached()) {
168
+ throw Error('Attempting to attach snack bar content after content has already been attached.');
169
+ }
170
+ }
171
+ ngOnDestroy() {
172
+ this._onExit.complete();
173
+ this._onEnter.complete();
174
+ }
175
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBarContainer, deps: [{ token: SnackBarConfig }], target: i0.ɵɵFactoryTarget.Component });
176
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: SnackBarContainer, isStandalone: true, selector: "ngs-snack-bar-container", host: { classAttribute: "snack-bar-container-host" }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, isSignal: true }], exportAs: ["ngsSnackBarContainer"], usesInheritance: true, ngImport: i0, template: "<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n", styles: [".snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:calc(var(--spacing, .25rem) * 5);max-width:33vw;min-width:344px;min-height:54px;transform-origin:center;padding:0;opacity:0;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.snack-bar-container.leaving{transition-duration:75ms;transition-timing-function:cubic-bezier(.4,0,1,1)}.snack-bar-container.hidden-top{opacity:0;transform:translateY(-100%)}.snack-bar-container.hidden-bottom{opacity:0;transform:translateY(100%)}.snack-bar-container.visible{opacity:1;transform:translateY(0)}@media(max-width:599px){.snack-bar-container .snack-bar-container{min-width:100%;margin:0;border-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
177
+ }
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBarContainer, decorators: [{
179
+ type: Component,
180
+ args: [{ selector: 'ngs-snack-bar-container', exportAs: 'ngsSnackBarContainer', standalone: true, imports: [CdkPortalOutlet], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
181
+ 'class': 'snack-bar-container-host'
182
+ }, template: "<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n", styles: [".snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:calc(var(--spacing, .25rem) * 5);max-width:33vw;min-width:344px;min-height:54px;transform-origin:center;padding:0;opacity:0;transition-property:transform,opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.snack-bar-container.leaving{transition-duration:75ms;transition-timing-function:cubic-bezier(.4,0,1,1)}.snack-bar-container.hidden-top{opacity:0;transform:translateY(-100%)}.snack-bar-container.hidden-bottom{opacity:0;transform:translateY(100%)}.snack-bar-container.visible{opacity:1;transform:translateY(0)}@media(max-width:599px){.snack-bar-container .snack-bar-container{min-width:100%;margin:0;border-radius:0}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
183
+ }], ctorParameters: () => [{ type: SnackBarConfig }], propDecorators: { _portalOutlet: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkPortalOutlet), { isSignal: true }] }] } });
184
+
185
+ class SimpleSnackBar {
186
+ snackBarRef = inject(SnackBarRef);
187
+ data = inject(SNACK_BAR_DATA);
188
+ /** Performs the action on the snack bar. */
189
+ action() {
190
+ this.snackBarRef.dismiss();
191
+ }
192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SimpleSnackBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: SimpleSnackBar, isStandalone: true, selector: "ngs-simple-snack-bar", exportAs: ["ngsSimpleSnackBar"], ngImport: i0, template: "<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n", styles: [":host{display:flex;justify-content:space-between;align-items:center;font-size:.875rem;color:var(--color-neutral-100);border-radius:.75rem;padding:0 calc(var(--spacing, .25rem) * 2.5);background:var(--color-neutral-950)}:host .simple-snack-bar-message{padding:14px 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto}:host .simple-snack-bar-action{flex:0 0 auto;margin-left:8px}:host:has(.simple-snack-bar-action){padding-inline-end:calc(var(--spacing, .25rem) * 1.5)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
194
+ }
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SimpleSnackBar, decorators: [{
196
+ type: Component,
197
+ args: [{ selector: 'ngs-simple-snack-bar', exportAs: 'ngsSimpleSnackBar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
198
+ Button
199
+ ], template: "<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n", styles: [":host{display:flex;justify-content:space-between;align-items:center;font-size:.875rem;color:var(--color-neutral-100);border-radius:.75rem;padding:0 calc(var(--spacing, .25rem) * 2.5);background:var(--color-neutral-950)}:host .simple-snack-bar-message{padding:14px 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto}:host .simple-snack-bar-action{flex:0 0 auto;margin-left:8px}:host:has(.simple-snack-bar-action){padding-inline-end:calc(var(--spacing, .25rem) * 1.5)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
200
+ }] });
201
+
202
+ class SnackBar {
203
+ _overlay = inject(Overlay);
204
+ _injector = inject(Injector);
205
+ _parentSnackBar = inject(SnackBar, { optional: true, skipSelf: true });
206
+ _defaultConfig = inject(SNACK_BAR_CONFIG, { optional: true }) ?? new SnackBarConfig();
207
+ /** Reference to the currently-opened snack bar. */
208
+ _openedSnackBarRef = null;
209
+ /**
210
+ * Opens a snack bar with a message and an optional action.
211
+ */
212
+ open(message, action, config) {
213
+ const _config = { ...this._defaultConfig, ...config };
214
+ _config.data = { message, action };
215
+ return this.openFromComponent(SimpleSnackBar, _config);
216
+ }
217
+ /**
218
+ * Opens a snack bar with a custom component.
219
+ */
220
+ openFromComponent(component, config) {
221
+ return this._attach(component, config);
222
+ }
223
+ /**
224
+ * Opens a snack bar with a custom template.
225
+ */
226
+ openFromTemplate(template, config) {
227
+ return this._attach(template, config);
228
+ }
229
+ /**
230
+ * Dismisses the currently-visible snack bar.
231
+ */
232
+ dismiss() {
233
+ if (this._openedSnackBarRef) {
234
+ this._openedSnackBarRef.dismiss();
235
+ }
236
+ }
237
+ /**
238
+ * Attaches the snack bar container and the appropriate content.
239
+ */
240
+ _attach(content, config) {
241
+ const _config = { ...this._defaultConfig, ...config };
242
+ const overlayRef = this._createOverlay(_config);
243
+ const container = this._attachContainer(overlayRef, _config);
244
+ const snackBarRef = new SnackBarRef(container, overlayRef);
245
+ if (content instanceof TemplateRef) {
246
+ const portal = new TemplatePortal(content, null, {
247
+ $implicit: _config.data,
248
+ snackBarRef,
249
+ });
250
+ snackBarRef.instance = container.attachTemplatePortal(portal);
251
+ }
252
+ else {
253
+ const injector = this._createInjector(_config, snackBarRef);
254
+ const portal = new ComponentPortal(content, undefined, injector);
255
+ const contentRef = container.attachComponentPortal(portal);
256
+ snackBarRef.instance = contentRef.instance;
257
+ }
258
+ // If there is another snack bar already opened, dismiss it before showing the new one.
259
+ if (this._openedSnackBarRef) {
260
+ const oldSnackBarRef = this._openedSnackBarRef;
261
+ oldSnackBarRef.afterDismissed().subscribe(() => {
262
+ container.enter();
263
+ });
264
+ oldSnackBarRef.dismiss();
265
+ }
266
+ else {
267
+ container.enter();
268
+ }
269
+ this._openedSnackBarRef = snackBarRef;
270
+ snackBarRef.afterDismissed().subscribe(() => {
271
+ if (this._openedSnackBarRef === snackBarRef) {
272
+ this._openedSnackBarRef = null;
273
+ }
274
+ });
275
+ if (_config.duration && _config.duration > 0) {
276
+ setTimeout(() => snackBarRef.dismiss(), _config.duration);
277
+ }
278
+ return snackBarRef;
279
+ }
280
+ /**
281
+ * Creates a new overlay and configures it for the snack bar.
282
+ */
283
+ _createOverlay(config) {
284
+ const overlayConfig = new OverlayConfig({
285
+ direction: config.direction,
286
+ hasBackdrop: false,
287
+ scrollStrategy: this._overlay.scrollStrategies.noop(),
288
+ positionStrategy: this._overlay.position()
289
+ .global()
290
+ .centerHorizontally()
291
+ .bottom('0'),
292
+ });
293
+ // Custom positioning based on config
294
+ const positionStrategy = this._overlay.position().global();
295
+ if (config.horizontalPosition === 'start' || config.horizontalPosition === 'left') {
296
+ positionStrategy.left('0');
297
+ }
298
+ else if (config.horizontalPosition === 'end' || config.horizontalPosition === 'right') {
299
+ positionStrategy.right('0');
300
+ }
301
+ else {
302
+ positionStrategy.centerHorizontally();
303
+ }
304
+ if (config.verticalPosition === 'top') {
305
+ positionStrategy.top('0');
306
+ }
307
+ else {
308
+ positionStrategy.bottom('0');
309
+ }
310
+ overlayConfig.positionStrategy = positionStrategy;
311
+ return this._overlay.create(overlayConfig);
312
+ }
313
+ /**
314
+ * Attaches the snack bar container to the overlay.
315
+ */
316
+ _attachContainer(overlayRef, config) {
317
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
318
+ const injector = Injector.create({
319
+ parent: userInjector || this._injector,
320
+ providers: [{ provide: SnackBarConfig, useValue: config }],
321
+ });
322
+ const containerPortal = new ComponentPortal(SnackBarContainer, config.viewContainerRef, injector);
323
+ const containerRef = overlayRef.attach(containerPortal);
324
+ return containerRef.instance;
325
+ }
326
+ /**
327
+ * Creates an injector to be used inside of a snack bar component.
328
+ */
329
+ _createInjector(config, snackBarRef) {
330
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
331
+ return Injector.create({
332
+ parent: userInjector || this._injector,
333
+ providers: [
334
+ { provide: SnackBarRef, useValue: snackBarRef },
335
+ { provide: SNACK_BAR_DATA, useValue: config.data },
336
+ ],
337
+ });
338
+ }
339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBar, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
340
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBar, providedIn: 'root' });
341
+ }
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: SnackBar, decorators: [{
343
+ type: Injectable,
344
+ args: [{
345
+ providedIn: 'root',
346
+ }]
347
+ }] });
348
+
349
+ /**
350
+ * Generated bundle index. Do not edit.
351
+ */
352
+
353
+ export { SNACK_BAR_CONFIG, SNACK_BAR_DATA, SimpleSnackBar, SnackBar, SnackBarConfig, SnackBarContainer, SnackBarRef, provideSnackBarConfig };
354
+ //# sourceMappingURL=ngstarter-ui-components-snack-bar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngstarter-ui-components-snack-bar.mjs","sources":["../../../projects/components/snack-bar/src/snack-bar/snack-bar-config.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-ref.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-container/snack-bar-container.ts","../../../projects/components/snack-bar/src/snack-bar/snack-bar-container/snack-bar-container.html","../../../projects/components/snack-bar/src/snack-bar/simple-snack-bar/simple-snack-bar.ts","../../../projects/components/snack-bar/src/snack-bar/simple-snack-bar/simple-snack-bar.html","../../../projects/components/snack-bar/src/snack-bar/snack-bar.service.ts","../../../projects/components/snack-bar/ngstarter-ui-components-snack-bar.ts"],"sourcesContent":["import { InjectionToken, ViewContainerRef, Injectable } from '@angular/core';\nimport { AriaLivePoliteness } from '@angular/cdk/a11y';\nimport { Direction } from '@angular/cdk/bidi';\n\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nexport const SNACK_BAR_DATA = new InjectionToken<any>('SnackBarData');\n\n/** Injection token that can be used to specify default snack bar. */\nexport const SNACK_BAR_CONFIG = new InjectionToken<SnackBarConfig>('SnackBarConfig');\n\n/** Function to provide the snack bar configuration. */\nexport function provideSnackBarConfig(config: SnackBarConfig) {\n return {\n provide: SNACK_BAR_CONFIG,\n useValue: config,\n };\n}\n\nexport type SnackBarHorizontalPosition = 'start' | 'center' | 'end' | 'left' | 'right';\nexport type SnackBarVerticalPosition = 'top' | 'bottom';\n\nexport class SnackBarConfig<D = any> {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n politeness?: AriaLivePoliteness = 'assertive';\n\n /** Message to be announced by the LiveAnnouncer. */\n announcementMessage?: string = '';\n\n /** The view container that should be used for the snack bar's origin. */\n viewContainerRef?: ViewContainerRef;\n\n /** The duration in milliseconds to wait before automatically closing the snack bar. */\n duration?: number = 0;\n\n /** Extra CSS classes to be added to the snack bar container. */\n panelClass?: string | string[];\n\n /** Text layout direction for the snack bar. */\n direction?: Direction;\n\n /** The horizontal position to place the snack bar. */\n horizontalPosition?: SnackBarHorizontalPosition = 'center';\n\n /** The vertical position to place the snack bar. */\n verticalPosition?: SnackBarVerticalPosition = 'bottom';\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n}\n","import { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Injectable } from '@angular/core';\n\nexport class SnackBarRef<T> {\n /** The instance of the component making up the content of the snack bar. */\n instance!: T;\n\n /** Subject for notifying the user that the snack bar has been dismissed. */\n private readonly _afterDismissed = new Subject<void>();\n\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n private readonly _afterOpened = new Subject<void>();\n\n constructor(public containerInstance: any, private _overlayRef: OverlayRef) {\n containerInstance._onExit.subscribe(() => {\n this._overlayRef.dispose();\n this._afterDismissed.next();\n this._afterDismissed.complete();\n });\n\n containerInstance._onEnter.subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n }\n\n /** Dismisses the snack bar. */\n dismiss(): void {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n }\n\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed(): Observable<void> {\n return this._afterDismissed.asObservable();\n }\n\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n OnDestroy,\n signal,\n PLATFORM_ID,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { SnackBarConfig } from '../snack-bar-config';\n\n@Component({\n selector: 'ngs-snack-bar-container',\n exportAs: 'ngsSnackBarContainer',\n templateUrl: './snack-bar-container.html',\n styleUrl: './snack-bar-container.scss',\n standalone: true,\n imports: [CdkPortalOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'snack-bar-container-host'\n }\n})\nexport class SnackBarContainer extends BasePortalOutlet implements OnDestroy {\n readonly _portalOutlet = viewChild.required(CdkPortalOutlet);\n private _cdr = inject(ChangeDetectorRef);\n private _platformId = inject(PLATFORM_ID);\n\n /** State of the snack bar animation. */\n readonly animationState = signal<'void' | 'visible' | 'hidden-top' | 'hidden-bottom'>('void');\n readonly leaving = signal(false);\n\n /** Event emitted when the snack bar exit animation is finished. */\n readonly _onExit = new EventEmitter<void>();\n\n /** Event emitted when the snack bar enter animation is finished. */\n readonly _onEnter = new EventEmitter<void>();\n\n constructor(public snackBarConfig: SnackBarConfig) {\n super();\n if (this.snackBarConfig.verticalPosition === 'top') {\n this.animationState.set('hidden-top');\n } else {\n this.animationState.set('hidden-bottom');\n }\n }\n\n /** Attach a component portal as content to this snack bar container. */\n override attachComponentPortal<T>(portal: ComponentPortal<T>): any {\n this._assertNotAttached();\n return this._portalOutlet().attachComponentPortal(portal);\n }\n\n /** Attach a template portal as content to this snack bar container. */\n override attachTemplatePortal<C>(portal: TemplatePortal<C>): any {\n this._assertNotAttached();\n return this._portalOutlet().attachTemplatePortal(portal);\n }\n\n /** Begin animation of snack bar entrance into view. */\n enter(): void {\n // Ensure we are not in leaving state\n this.leaving.set(false);\n\n if (!isPlatformBrowser(this._platformId)) {\n this.animationState.set('visible');\n this._cdr.markForCheck();\n return;\n }\n\n // Use requestAnimationFrame to ensure the initial state (hidden-top/bottom)\n // is applied to the DOM before we change it to 'visible'.\n // We use two nested requestAnimationFrames to ensure at least one paint cycle has occurred.\n // The first rAF captures the current state, the second one allows for the state to be applied\n // and then triggers the transition.\n requestAnimationFrame(() => {\n // Force a reflow to ensure the initial styles are applied.\n // This is sometimes necessary in addition to rAF in some browsers/environments.\n if (typeof document !== 'undefined' && document.body) {\n void document.body.offsetHeight;\n }\n requestAnimationFrame(() => {\n this.animationState.set('visible');\n this._cdr.markForCheck();\n });\n });\n }\n\n /** Begin animation of snack bar exit from view. */\n exit(): void {\n const initialState = this.animationState();\n const targetState = this.snackBarConfig.verticalPosition === 'top' ? 'hidden-top' : 'hidden-bottom';\n\n if (initialState === targetState) {\n this._onExit.emit();\n return;\n }\n\n // Mark as leaving to use faster transition timing\n this.leaving.set(true);\n this.animationState.set(targetState);\n this._cdr.markForCheck();\n }\n\n /** Handle end of transition. */\n onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName !== 'transform' && event.propertyName !== 'opacity') {\n return;\n }\n const state = this.animationState();\n if (state === 'visible' && event.propertyName === 'transform') {\n this._onEnter.emit();\n } else if ((state === 'hidden-top' || state === 'hidden-bottom')) {\n if (event.propertyName === 'opacity' || event.propertyName === 'transform') {\n this._onExit.emit();\n }\n }\n }\n\n /** Asserts that no content is already attached to the container. */\n private _assertNotAttached() {\n if (this._portalOutlet().hasAttached()) {\n throw Error('Attempting to attach snack bar content after content has already been attached.');\n }\n }\n\n ngOnDestroy() {\n this._onExit.complete();\n this._onEnter.complete();\n }\n}\n","<div\n class=\"snack-bar-container\"\n [class.visible]=\"animationState() === 'visible'\"\n [class.hidden-top]=\"animationState() === 'hidden-top'\"\n [class.hidden-bottom]=\"animationState() === 'hidden-bottom'\"\n [class.leaving]=\"leaving()\"\n (transitionend)=\"onTransitionEnd($event)\"\n>\n <ng-template cdkPortalOutlet/>\n</div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SNACK_BAR_DATA } from '../snack-bar-config';\nimport { SnackBarRef } from '../snack-bar-ref';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-simple-snack-bar',\n exportAs: 'ngsSimpleSnackBar',\n templateUrl: './simple-snack-bar.html',\n styleUrl: './simple-snack-bar.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n Button\n ]\n})\nexport class SimpleSnackBar {\n readonly snackBarRef = inject(SnackBarRef);\n readonly data = inject(SNACK_BAR_DATA);\n\n /** Performs the action on the snack bar. */\n action(): void {\n this.snackBarRef.dismiss();\n }\n}\n","<span class=\"simple-snack-bar-message\">{{ data.message }}</span>\n@if (data.action) {\n <div class=\"simple-snack-bar-action\">\n <button ngsButton=\"filled\" (click)=\"action()\">{{ data.action }}</button>\n </div>\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n TemplateRef,\n Type,\n inject,\n} from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { SnackBarConfig, SNACK_BAR_DATA, SNACK_BAR_CONFIG } from './snack-bar-config';\nimport { SnackBarRef } from './snack-bar-ref';\nimport { SnackBarContainer } from './snack-bar-container/snack-bar-container';\nimport { SimpleSnackBar } from './simple-snack-bar/simple-snack-bar';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackBar {\n private _overlay = inject(Overlay);\n private _injector = inject(Injector);\n private _parentSnackBar = inject(SnackBar, { optional: true, skipSelf: true });\n private _defaultConfig = inject(SNACK_BAR_CONFIG, { optional: true }) ?? new SnackBarConfig();\n\n /** Reference to the currently-opened snack bar. */\n private _openedSnackBarRef: SnackBarRef<any> | null = null;\n\n /**\n * Opens a snack bar with a message and an optional action.\n */\n open(message: string, action?: string, config?: SnackBarConfig): SnackBarRef<SimpleSnackBar> {\n const _config = { ...this._defaultConfig, ...config };\n _config.data = { message, action };\n\n return this.openFromComponent(SimpleSnackBar, _config);\n }\n\n /**\n * Opens a snack bar with a custom component.\n */\n openFromComponent<T>(component: Type<T>, config?: SnackBarConfig): SnackBarRef<T> {\n return this._attach(component, config) as SnackBarRef<T>;\n }\n\n /**\n * Opens a snack bar with a custom template.\n */\n openFromTemplate(template: TemplateRef<any>, config?: SnackBarConfig): SnackBarRef<any> {\n return this._attach(template, config);\n }\n\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss(): void {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n\n /**\n * Attaches the snack bar container and the appropriate content.\n */\n private _attach<T>(content: Type<T> | TemplateRef<T>, config?: SnackBarConfig): SnackBarRef<T | any> {\n const _config = { ...this._defaultConfig, ...config };\n const overlayRef = this._createOverlay(_config);\n const container = this._attachContainer(overlayRef, _config);\n const snackBarRef = new SnackBarRef<T | any>(container, overlayRef);\n\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null!, {\n $implicit: _config.data,\n snackBarRef,\n } as any);\n snackBarRef.instance = container.attachTemplatePortal(portal);\n } else {\n const injector = this._createInjector(_config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal(portal);\n snackBarRef.instance = contentRef.instance;\n }\n\n // If there is another snack bar already opened, dismiss it before showing the new one.\n if (this._openedSnackBarRef) {\n const oldSnackBarRef = this._openedSnackBarRef;\n oldSnackBarRef.afterDismissed().subscribe(() => {\n container.enter();\n });\n oldSnackBarRef.dismiss();\n } else {\n container.enter();\n }\n\n this._openedSnackBarRef = snackBarRef;\n snackBarRef.afterDismissed().subscribe(() => {\n if (this._openedSnackBarRef === snackBarRef) {\n this._openedSnackBarRef = null;\n }\n });\n\n if (_config.duration && _config.duration > 0) {\n setTimeout(() => snackBarRef.dismiss(), _config.duration);\n }\n\n return snackBarRef;\n }\n\n /**\n * Creates a new overlay and configures it for the snack bar.\n */\n private _createOverlay(config: SnackBarConfig): OverlayRef {\n const overlayConfig = new OverlayConfig({\n direction: config.direction,\n hasBackdrop: false,\n scrollStrategy: this._overlay.scrollStrategies.noop(),\n positionStrategy: this._overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n });\n\n // Custom positioning based on config\n const positionStrategy = this._overlay.position().global();\n\n if (config.horizontalPosition === 'start' || config.horizontalPosition === 'left') {\n positionStrategy.left('0');\n } else if (config.horizontalPosition === 'end' || config.horizontalPosition === 'right') {\n positionStrategy.right('0');\n } else {\n positionStrategy.centerHorizontally();\n }\n\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n } else {\n positionStrategy.bottom('0');\n }\n\n overlayConfig.positionStrategy = positionStrategy;\n\n return this._overlay.create(overlayConfig);\n }\n\n /**\n * Attaches the snack bar container to the overlay.\n */\n private _attachContainer(overlayRef: OverlayRef, config: SnackBarConfig): SnackBarContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{ provide: SnackBarConfig, useValue: config }],\n });\n\n const containerPortal = new ComponentPortal(SnackBarContainer, config.viewContainerRef, injector);\n const containerRef: ComponentRef<SnackBarContainer> = overlayRef.attach(containerPortal);\n\n return containerRef.instance;\n }\n\n /**\n * Creates an injector to be used inside of a snack bar component.\n */\n private _createInjector<T>(config: SnackBarConfig, snackBarRef: SnackBarRef<T>): Injector {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n\n return Injector.create({\n parent: userInjector || this._injector,\n providers: [\n { provide: SnackBarRef, useValue: snackBarRef },\n { provide: SNACK_BAR_DATA, useValue: config.data },\n ],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SnackBarConfig"],"mappings":"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"}