@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-data-view.mjs","sources":["../../../projects/components/data-view/src/types.ts","../../../projects/components/data-view/src/data-view-empty-data.directive.ts","../../../projects/components/data-view/src/data-view-empty-filter-results.directive.ts","../../../projects/components/data-view/src/data-view-action-bar.directive.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.html","../../../projects/components/data-view/src/data-view/column-settings-dialog/column-settings-dialog.ts","../../../projects/components/data-view/src/data-view/column-settings-dialog/column-settings-dialog.html","../../../projects/components/data-view/src/config.ts","../../../projects/components/data-view/src/data-view/data-view.ts","../../../projects/components/data-view/src/data-view/data-view.html","../../../projects/components/data-view/src/cell-renderer.ts","../../../projects/components/data-view/ngstarter-ui-components-data-view.ts"],"sourcesContent":["import { CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { InjectionToken } from '@angular/core';\n\nexport interface DataViewInterface {\n api: DataViewAPI;\n}\n\nexport interface DataViewAPI {\n search(value: string): void;\n selectAll(): void;\n unselectAll(): void;\n refresh(): void;\n getSnapshot(): DataViewState[];\n}\n\nexport interface DataViewColumnDef {\n name: string;\n field: string;\n cellRenderer?: string;\n visible?: boolean;\n width?: string;\n flex?: number;\n type?: string;\n valueGetter?: (value: any) => any;\n pinned?: boolean;\n pinAlign?: DataViewPinAlign;\n sortable?: boolean;\n resizable?: boolean;\n withColumnSettings?: boolean;\n minWidth?: string | number;\n maxWidth?: string | number;\n params?: {\n [prop: string]: any,\n }\n}\n\nexport interface DataViewRowSelectionEvent<T> {\n checkboxChange: CheckboxChange;\n row: T;\n checked: boolean;\n}\n\nexport interface DataViewCellRendererDef {\n cellRenderer: string;\n component: () => Promise<any>;\n}\n\nexport interface DataViewCellRenderer {\n element: any;\n columnDef: any;\n fieldData: any;\n}\n\nexport interface DataViewActionBarAPI {\n setForceVisible: (visible: boolean) => void;\n}\n\nexport type DataViewRowModelType = 'clientSide' | 'serverSide';\n\nexport interface DataViewGetRowsParams {\n startRow: number;\n endRow: number;\n page: number;\n pageSize: number;\n sortModel: { colId: string; sort: 'asc' | 'desc' | '' }[];\n filterModel: string;\n successCallback(rowsThisBlock: any[], lastRow?: number): void;\n failCallback(): void;\n}\n\nexport interface DataViewDatasource {\n getItems(params: DataViewGetRowsParams): void;\n}\n\nexport type DataViewPinAlign = 'start' | 'end' | undefined;\n\nexport interface DataViewState {\n field: string;\n visible?: boolean;\n width?: string;\n pinned?: boolean;\n pinAlign?: DataViewPinAlign;\n}\n\nexport const DATA_VIEW = new InjectionToken<DataViewInterface>('DATA_VIEW');\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewEmptyData]',\n exportAs: 'ngsDataViewEmptyData',\n standalone: true,\n host: {\n 'class': 'ngs-data-view-empty-data',\n }\n})\nexport class DataViewEmptyDataDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewEmptyFilterResults]',\n exportAs: 'ngsDataViewEmptyFilterResults',\n standalone: true,\n host: {\n 'class': 'ngs-data-view-empty-filter-results',\n }\n})\nexport class DataViewEmptyFilterResultsDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { booleanAttribute, Directive, inject, input, numberAttribute, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewActionBar]',\n standalone: true\n})\nexport class DataViewActionBarDirective {\n readonly templateRef = inject(TemplateRef);\n readonly width = input(100, {\n alias: 'ngsDataViewActionBarWidth',\n transform: numberAttribute\n });\n}\n","import { booleanAttribute, Component, input, numberAttribute } from '@angular/core';\nimport { DataViewActionBarAPI } from '../types';\n\n@Component({\n selector: 'ngs-data-view-action-bar',\n exportAs: 'ngsDataViewActionBar',\n templateUrl: './data-view-action-bar.html',\n styleUrl: './data-view-action-bar.scss',\n host: {\n 'class': 'ngs-data-view-action-bar',\n '[class.force-visible]': 'forceVisible() || _forceVisible'\n }\n})\nexport class DataViewActionBar {\n forceVisible = input(false, {\n transform: booleanAttribute\n });\n width = input(100, {\n transform: numberAttribute\n });\n protected _forceVisible = false;\n\n get api(): DataViewActionBarAPI {\n return {\n setForceVisible: (forceVisible: boolean): void => {\n this._forceVisible = forceVisible;\n },\n }\n }\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { DIALOG_DATA, DialogRef, DialogTitle, DialogContent, DialogActions } from '@ngstarter-ui/components/dialog';\nimport { Checkbox } from '@ngstarter-ui/components/checkbox';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Menu, MenuTrigger, MenuContent, MenuItem } from '@ngstarter-ui/components/menu';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DataViewColumnDef, DataViewPinAlign } from '../../types';\n\nexport interface ColumnSettingsDialogData {\n columns: DataViewColumnDef[];\n}\n\nexport interface ColumnSettingsDialogResult {\n columns: DataViewColumnDef[];\n}\n\n@Component({\n selector: 'ngs-data-view-column-settings-dialog',\n templateUrl: './column-settings-dialog.html',\n styleUrl: './column-settings-dialog.scss',\n imports: [\n DialogTitle,\n DialogContent,\n DialogActions,\n Checkbox,\n Button,\n Icon,\n Menu,\n MenuTrigger,\n MenuContent,\n MenuItem,\n DragDropModule\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewColumnSettingsDialog {\n private _dialogRef = inject(DialogRef<DataViewColumnSettingsDialog, ColumnSettingsDialogResult>);\n private _data = inject<ColumnSettingsDialogData>(DIALOG_DATA);\n\n columns = signal<DataViewColumnDef[]>(this._data.columns\n .filter(c => c.withColumnSettings !== false)\n .map(c => ({ ...c }))\n );\n\n drop(event: CdkDragDrop<DataViewColumnDef[]>) {\n const updated = [...this.columns()];\n moveItemInArray(updated, event.previousIndex, event.currentIndex);\n this.columns.set(updated);\n }\n\n toggleVisibility(index: number, visible: boolean) {\n const updated = [...this.columns()];\n updated[index] = { ...updated[index], visible };\n this.columns.set(updated);\n }\n\n pinColumn(index: number, align: DataViewPinAlign | null) {\n const updated = [...this.columns()];\n if (align === null) {\n updated[index] = { ...updated[index], pinned: false, pinAlign: undefined };\n } else {\n updated[index] = { ...updated[index], pinned: true, pinAlign: align };\n }\n this.columns.set(updated);\n }\n\n apply() {\n this._dialogRef.close({ columns: this.columns() });\n }\n\n cancel() {\n this._dialogRef.close();\n }\n}\n","<h3 ngsDialogTitle>Choose Columns</h3>\n<div ngsDialogContent>\n <div class=\"columns flex flex-col gap-2 min-w-[300px]\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (col of columns(); track col.field; let i = $index) {\n <div class=\"flex items-center gap-1 px-1 py-2 bg-surface-container rounded-lg cursor-default\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n cdkDragBoundary=\"columns\">\n <div class=\"cursor-move text-[var(--ngs-text-secondary)] flex items-center\" cdkDragHandle>\n <ngs-icon name=\"fluent:re-order-dots-vertical-24-regular\"/>\n </div>\n <ngs-checkbox [checked]=\"col.visible !== false\"\n (change)=\"toggleVisibility(i, $event.checked)\">\n {{ col.name }}\n </ngs-checkbox>\n <div class=\"grow\"></div>\n <button ngsIconButton\n class=\"shrink-0\"\n [ngsMenuTriggerFor]=\"pinMenu\"\n [ngsMenuTriggerData]=\"{ col: col, index: i }\">\n <ngs-icon [name]=\"col.pinned ? (col.pinAlign === 'end' ? 'fluent:pin-off-24-filled' : 'fluent:pin-24-filled') : 'fluent:pin-24-regular'\"\n size=\"20\"/>\n </button>\n </div>\n }\n </div>\n</div>\n\n<ngs-menu #pinMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n <button ngs-menu-item\n [selected]=\"!col.pinned\"\n (click)=\"pinColumn(col, null)\">\n No Pin\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'start'\"\n (click)=\"pinColumn(col, 'start')\">\n Pin Left\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'end'\"\n (click)=\"pinColumn(col, 'end')\">\n Pin Right\n </button>\n </ng-template>\n</ngs-menu>\n<div ngsDialogActions align=\"end\">\n <button ngsButton (click)=\"cancel()\">Cancel</button>\n <button ngsButton=\"filled\" (click)=\"apply()\">Apply</button>\n</div>\n","import { InjectionToken, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\nimport { DataViewColumnDef } from './types';\n\nexport interface DataViewConfig {\n embedded?: boolean;\n rowHeight?: number;\n headerHeight?: number;\n bufferRows?: number;\n pageSizeOptions?: number[];\n pageSize?: number;\n rowSelection?: 'single' | 'multiple';\n selectionWidth?: number;\n stickyHeader?: boolean;\n withPagination?: boolean;\n showFirstLastButtons?: boolean;\n minColumnWidth?: number;\n defaultColDef?: Partial<DataViewColumnDef>;\n autoHeight?: boolean;\n}\n\nexport const DATA_VIEW_CONFIG = new InjectionToken<DataViewConfig>('DATA_VIEW_CONFIG');\n\nexport function provideDataView(config: DataViewConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: DATA_VIEW_CONFIG, useValue: config }\n ]);\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed, contentChild, DestroyRef, effect, ElementRef, forwardRef,\n inject, Injector,\n input,\n model,\n NgZone,\n OnInit,\n output, PLATFORM_ID, signal, TemplateRef, untracked,\n viewChild\n} from '@angular/core';\nimport {\n Table, TableDataSource\n} from '@ngstarter-ui/components/table';\nimport {\n EmptyState,\n EmptyStateContent,\n EmptyStateIcon\n} from '@ngstarter-ui/components/empty-state';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport {\n DataViewInterface,\n DataViewAPI,\n DataViewCellRendererDef,\n DataViewColumnDef,\n DataViewDatasource,\n DataViewGetRowsParams,\n DataViewRowModelType,\n DataViewRowSelectionEvent, DATA_VIEW, DataViewState, DataViewPinAlign,\n} from '../types';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { PageEvent, Paginator } from '@ngstarter-ui/components/paginator';\nimport { SortDirective, SortHeader, Sort } from '@ngstarter-ui/components/sort';\nimport { SortDirection } from '@ngstarter-ui/components/sort';\nimport { isPlatformBrowser, NgComponentOutlet, NgStyle, NgTemplateOutlet, DOCUMENT } from '@angular/common';\nimport { DataViewEmptyDataDirective } from '../data-view-empty-data.directive';\nimport { DataViewEmptyFilterResultsDirective } from '../data-view-empty-filter-results.directive';\nimport { DataViewActionBarDirective } from '../data-view-action-bar.directive';\nimport { DataViewActionBar } from '../data-view-action-bar/data-view-action-bar';\nimport { Checkbox, CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { ScrollbarArea } from '@ngstarter-ui/components/scrollbar-area';\nimport { BlockLoader, BlockLoaderContainerDirective } from '@ngstarter-ui/components/block-loader';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Menu, MenuItem, MenuTrigger, MenuDivider, MenuContent } from '@ngstarter-ui/components/menu';\nimport { Dialog } from '@ngstarter-ui/components/dialog';\nimport { DataViewColumnSettingsDialog, ColumnSettingsDialogResult } from './column-settings-dialog/column-settings-dialog';\nimport { DATA_VIEW_CONFIG } from '../config';\nimport { fromEvent, takeUntil, finalize, take, timer, Subject, merge } from 'rxjs';\n\n@Component({\n selector: 'ngs-data-view',\n exportAs: 'ngsDataView',\n imports: [\n Checkbox,\n SortHeader,\n SortDirective,\n NgComponentOutlet,\n NgTemplateOutlet,\n Paginator,\n ScrollbarArea,\n NgStyle,\n EmptyState,\n EmptyStateIcon,\n EmptyStateContent,\n Icon,\n BlockLoader,\n BlockLoaderContainerDirective,\n Button,\n Menu,\n MenuItem,\n MenuTrigger,\n MenuDivider,\n MenuContent,\n ],\n templateUrl: './data-view.html',\n styleUrl: './data-view.scss',\n providers: [\n {\n provide: DATA_VIEW,\n useExisting: forwardRef(() => DataView),\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-data-view',\n '[class.highlight-header]': 'highlightHeader()',\n '[class.pinned-header]': 'stickyHeader()',\n '[class.hover-rows]': 'hoverRows()',\n '[class.is-loading]': '_isLoading()',\n '[class.embedded]': 'embedded()',\n '[class.has-horizontal-scroll]': 'hasHorizontalScroll()',\n '[class.is-browser]': 'isBrowser()',\n '[style.--ngs-data-view-header-height.px]': 'headerHeight()',\n '[style.--ngs-data-view-selection-column-width.px]': 'selectionWidth()',\n '[class.is-auto-height]': 'autoHeight()',\n }\n})\nexport class DataView<T> implements OnInit, AfterViewInit, DataViewInterface {\n private _cdr = inject(ChangeDetectorRef);\n private _destroyRef = inject(DestroyRef);\n private _platformId = inject(PLATFORM_ID);\n private _ngZone = inject(NgZone);\n private _doc = inject(DOCUMENT);\n private _config = inject(DATA_VIEW_CONFIG, { optional: true });\n private _elRef = inject<ElementRef<HTMLElement>>(ElementRef as any);\n private _dialog = inject(Dialog);\n\n private _isDestroyed = false;\n\n private _requestId = 0;\n private _lastRequestKey: string | null = null;\n private _refreshTrigger = signal(0);\n private _serverSideRowCount = signal(0);\n private _manualOrder = signal<string[] | null>(null);\n private _manualVisibility = signal<Record<string, boolean>>({});\n private _hasDataOnServer = signal<boolean | undefined>(undefined);\n\n private _internalLoading = signal(false);\n protected _isFiltering = signal(false);\n protected _isSorting = signal(false);\n\n private _emptyDataRef = contentChild(DataViewEmptyDataDirective);\n protected _emptyFilterResults = contentChild(DataViewEmptyFilterResultsDirective);\n protected _actionBarRef = contentChild(DataViewActionBarDirective);\n protected _actionBarComp = contentChild(DataViewActionBarDirective, { read: DataViewActionBar });\n private _table = viewChild<Table<T>>('table');\n private _ngsSort = viewChild(SortDirective);\n private _internalPaginator = viewChild(Paginator);\n // Optional external paginator passed from parent. If provided, it overrides the internal one.\n paginator = input<Paginator | null>(null);\n\n private _dataSource = new TableDataSource<T>([]);\n\n // ViewChildren for scroll synchronization\n private _headerCenter = viewChild('headerCenter', { read: ElementRef<HTMLElement> });\n private _headerCenterInner = viewChild('headerCenterInner', { read: ElementRef<HTMLElement> });\n private _bodyLeftContent = viewChild('bodyLeftContent', { read: ElementRef<HTMLElement> });\n private _scrollbarArea = viewChild(ScrollbarArea);\n private _bodyCenterContent = viewChild('bodyCenterContent', { read: ElementRef<HTMLElement> });\n private _bodyRightContent = viewChild('bodyRightContent', { read: ElementRef<HTMLElement> });\n\n columnDefs = input<DataViewColumnDef[]>([]);\n defaultColDef = input<Partial<DataViewColumnDef>>(this._config?.defaultColDef ?? {});\n data = input<T[]>([]);\n datasource = input<DataViewDatasource | null>(null);\n rowHeight = input(this._config?.rowHeight ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.rowHeight || 50 });\n headerHeight = input(this._config?.headerHeight ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.headerHeight || 50 });\n bufferRows = input(this._config?.bufferRows ?? 10, { transform: (v: any) => parseInt(v, 10) || this._config?.bufferRows || 10 });\n withSelection = input(false, {\n transform: booleanAttribute\n });\n highlightHeader = input(false, {\n transform: booleanAttribute\n });\n rowModelType = input<DataViewRowModelType>('clientSide');\n autoHeight = input(this._config?.autoHeight ?? false, {\n transform: booleanAttribute\n });\n stickyHeader = input(this._config?.stickyHeader ?? true, {\n transform: booleanAttribute\n });\n withPagination = input(this._config?.withPagination ?? false, {\n transform: booleanAttribute\n });\n bodyScroll = input(false, {\n transform: booleanAttribute\n });\n pageSizeOptions = input<number[]>(this._config?.pageSizeOptions ?? [5, 10, 20]);\n showFirstLastButtons = input(this._config?.showFirstLastButtons ?? false, {\n transform: booleanAttribute\n });\n paginatorAriaLabel = input<string>('');\n pageSize = model<number>(this._config?.pageSize ?? 10);\n pageIndex = model<number>(0);\n snapshot = input<DataViewState[] | null>(null);\n withColumnSettings = input(false, { transform: booleanAttribute });\n embedded = input(this._config?.embedded ?? false, { transform: booleanAttribute });\n rowSelection = input<'single' | 'multiple'>(this._config?.rowSelection ?? 'multiple');\n selectionWidth = input(this._config?.selectionWidth ?? 52, { transform: (v: any) => parseInt(v, 10) || this._config?.selectionWidth || 52 });\n minColumnWidth = input(this._config?.minColumnWidth ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.minColumnWidth || 40 });\n\n private _lastScrollTop = 0;\n private _lastScrollLeft = 0;\n\n // Virtualization state\n private _scrollTop = signal(0);\n private _viewportHeight = signal(0);\n private _viewportWidth = signal(0);\n protected loaded = signal(false);\n protected isBrowser = signal(false);\n\n protected hoveredRowIndex = signal<number | null>(null);\n\n private _initialViewState = signal<DataViewState[]>([]);\n\n // Resize and Pin state\n private _manualWidths = signal<Record<string, string | undefined>>({});\n private _manualPinned = signal<Record<string, { pinned: boolean, pinAlign: DataViewPinAlign } | undefined>>({});\n private _isResizing = signal(false);\n private _resizeLineLeft = signal(0);\n private _resizeStartX = 0;\n private _resizeStartWidth = 0;\n private _resizeColField: string | null = null;\n\n protected isResizing() { return this._isResizing(); }\n protected resizeLineLeft() { return this._resizeLineLeft(); }\n\n private _normalizeWidth(width?: string | number): string | undefined {\n if (width === null || width === undefined || width === '') return undefined;\n const sWidth = String(width);\n return /^\\d+$/.test(sWidth) ? `${sWidth}px` : sWidth;\n }\n\n protected normalizedColumns = computed(() => {\n const overrides = this._manualWidths();\n const pinOverrides = this._manualPinned();\n const order = this._manualOrder();\n const visibility = this._manualVisibility();\n\n const defs = this.columnDefs();\n let orderedDefs = [...defs];\n\n if (order) {\n orderedDefs.sort((a, b) => {\n const indexA = order.indexOf(a.field);\n const indexB = order.indexOf(b.field);\n if (indexA === -1 && indexB === -1) return 0;\n if (indexA === -1) return 1;\n if (indexB === -1) return -1;\n return indexA - indexB;\n });\n }\n\n const defaultColDef = this.defaultColDef() || {};\n\n return orderedDefs.map(col => {\n const mergedCol = {\n ...defaultColDef,\n ...col\n };\n const overrideWidth = overrides[mergedCol.field];\n const pinOverride = pinOverrides[mergedCol.field];\n const visibleOverride = visibility[mergedCol.field];\n const width = this._normalizeWidth(overrideWidth ?? mergedCol.width);\n const flex = (overrideWidth ? undefined : mergedCol.flex) ?? (width ? undefined : 1);\n const pinned = pinOverride ? pinOverride.pinned : mergedCol.pinned;\n const pinAlign = pinOverride ? pinOverride.pinAlign : mergedCol.pinAlign;\n return {\n ...mergedCol,\n visible: visibleOverride ?? mergedCol.visible ?? true,\n width,\n flex,\n pinned,\n pinAlign: pinned && !pinAlign ? 'start' : pinAlign\n };\n });\n });\n\n protected isSortingEnabled = computed(() => {\n return this.normalizedColumns().some(col => col.sortable);\n });\n\n protected pinnedLeftColumns = computed(() => this.normalizedColumns().filter(c => c.visible && c.pinned && c.pinAlign === 'start'));\n protected pinnedRightColumns = computed(() => this.normalizedColumns().filter(c => c.visible && c.pinned && c.pinAlign === 'end'));\n protected centerColumns = computed(() => this.normalizedColumns().filter(c => c.visible && !c.pinned));\n\n protected leftPinnedWidth = computed(() => {\n let width = 0;\n if (this.withSelection()) {\n width += this.selectionWidth();\n }\n width += this.pinnedLeftColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : (col.flex ? 150 : 0)), 0);\n return width;\n });\n\n protected leftPinnedWidthStyles = computed(() => {\n return {\n 'width.px': this.leftPinnedWidth(),\n 'min-width.px': this.leftPinnedWidth()\n };\n });\n\n protected rightPinnedWidth = computed(() => {\n let width = 0;\n width += this.pinnedRightColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : (col.flex ? 150 : 0)), 0);\n if (this.actionBarTemplateRef) width += this.actionBarWidth();\n return width;\n });\n\n protected rightPinnedWidthStyles = computed(() => {\n return {\n 'width.px': this.rightPinnedWidth(),\n 'min-width.px': this.rightPinnedWidth()\n };\n });\n\n protected centerWidth = computed(() => {\n const totalFixed = this.centerColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : 0), 0);\n const hasFlex = this.centerColumns().some(c => !!c.flex);\n const availableWidth = this._viewportWidth();\n if (hasFlex) {\n const isBrowser = this.isBrowser();\n // Ensure we have at least some width for flex columns, and handle initial zero viewportWidth\n if (availableWidth === 0 && !isBrowser) {\n // In SSR, we don't know the viewport width, but we want flex columns to expand.\n // Returning totalFixed might cause the center to collapse if all columns are flex.\n return '100%' as any;\n }\n return Math.max(totalFixed, availableWidth, 300);\n }\n return Math.max(totalFixed, availableWidth);\n });\n\n protected onColumnResizeStart(event: MouseEvent, col: any) {\n if (!this.isBrowser() || !col?.resizable || event.button !== 0 || this._isResizing()) return;\n event.preventDefault();\n event.stopPropagation();\n\n // Determine initial width from DOM if not fixed yet\n const target = event.currentTarget as HTMLElement;\n const cell = target.closest('.header-cell') as HTMLElement | null;\n const startWidth = (col?.width ? parseInt(col.width, 10) : (cell ? cell.getBoundingClientRect().width : 0)) || 0;\n\n // Before starting resize — freeze widths of all columns to the left within the same section\n try {\n const overrides = { ...this._manualWidths() };\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement | null;\n\n const leftCols = this.pinnedLeftColumns();\n const centerCols = this.centerColumns();\n const rightCols = this.pinnedRightColumns();\n\n const byField = (arr: any[]) => arr.findIndex(c => c.field === col.field);\n const leftIdx = byField(leftCols);\n const centerIdx = byField(centerCols);\n const rightIdx = byField(rightCols);\n\n const freezeAll = (cols: any[], containerSelector: string, extraOffset = 0) => {\n const container = gridRoot?.querySelector(containerSelector) as HTMLElement | null;\n if (!container) return;\n const cells = Array.from(container.querySelectorAll(':scope .header-cell')) as HTMLElement[];\n for (let i = 0; i < cols.length; i++) {\n const colDef = cols[i];\n if (!colDef) continue;\n if (!overrides[colDef.field]) {\n const domIndex = i + extraOffset;\n const cellEl = cells[domIndex];\n const w = cellEl ? Math.round(cellEl.getBoundingClientRect().width) : (colDef.width ? parseInt(colDef.width, 10) : undefined);\n if (w && w > 0) {\n overrides[colDef.field] = `${w}px`;\n }\n }\n }\n };\n\n const extraLeft = this.withSelection() ? 1 : 0;\n freezeAll(leftCols, '.grid-header-left .header-inner', extraLeft);\n freezeAll(centerCols, '.grid-header-center .header-inner');\n freezeAll(rightCols, '.grid-header-right .header-inner');\n\n this._manualWidths.set(overrides);\n } catch {\n // best-effort freezing; ignore errors and continue\n }\n\n let nextCol: any = null;\n let nextColStartWidth = 0;\n try {\n const leftCols = this.pinnedLeftColumns();\n const centerCols = this.centerColumns();\n const rightCols = this.pinnedRightColumns();\n\n const byField = (arr: any[]) => arr.findIndex(c => c.field === col.field);\n const leftIdx = byField(leftCols);\n const centerIdx = byField(centerCols);\n const rightIdx = byField(rightCols);\n\n const findNextInfo = (cols: any[], idx: number, containerSelector: string, extraOffset = 0) => {\n if (idx < 0 || idx >= cols.length - 1) return null;\n const next = cols[idx + 1];\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement | null;\n const container = gridRoot?.querySelector(containerSelector) as HTMLElement | null;\n const cells = container ? Array.from(container.querySelectorAll(':scope .header-cell')) as HTMLElement[] : [];\n const domIndex = idx + 1 + extraOffset;\n const cellEl = cells[domIndex];\n const width = cellEl ? Math.round(cellEl.getBoundingClientRect().width) : (next.width ? parseInt(next.width, 10) : 0);\n return { col: next, width };\n };\n\n let nextInfo: any = null;\n if (leftIdx >= 0) {\n nextInfo = findNextInfo(leftCols, leftIdx, '.grid-header-left .header-inner', this.withSelection() ? 1 : 0);\n } else if (rightIdx >= 0) {\n nextInfo = findNextInfo(rightCols, rightIdx, '.grid-header-right .header-inner');\n }\n\n if (nextInfo) {\n nextCol = nextInfo.col;\n nextColStartWidth = nextInfo.width;\n }\n } catch { }\n\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement;\n const hostRect = gridRoot.getBoundingClientRect();\n const handleRect = (target as HTMLElement).getBoundingClientRect();\n const borderLeft = gridRoot.clientLeft || 0;\n\n const initialManualWidths = { ...this._manualWidths() };\n this._resizeStartX = event.clientX;\n this._resizeStartWidth = startWidth;\n this._resizeColField = col?.field ?? null;\n this._resizeLineLeft.set(handleRect.right - hostRect.left - borderLeft);\n this._isResizing.set(true);\n\n const rightPinnedWidth = this.rightPinnedWidth();\n const maxLineLeft = hostRect.width - borderLeft - rightPinnedWidth;\n const leftPinnedWidth = this.leftPinnedWidth();\n const minLineLeft = leftPinnedWidth;\n\n let moved = false;\n const colStartInHost = (handleRect.right - this._resizeStartWidth) - hostRect.left - borderLeft;\n\n this._ngZone.runOutsideAngular(() => {\n const mouseMove$ = fromEvent<MouseEvent>(this._doc, 'mousemove', { capture: true });\n const mouseUp$ = fromEvent<MouseEvent>(this._doc, 'mouseup', { capture: true });\n const blur$ = fromEvent<FocusEvent>(window, 'blur');\n const dragStart$ = fromEvent<DragEvent>(window, 'dragstart');\n const selectStart$ = fromEvent<Event>(window, 'selectstart');\n\n const stopResize$ = new Subject<void>();\n\n // Prevent native drag and selection\n dragStart$.pipe(takeUntil(stopResize$)).subscribe(e => e.preventDefault());\n selectStart$.pipe(takeUntil(stopResize$)).subscribe(e => e.preventDefault());\n\n // Fix cursor for the whole document and block interactions\n const originalCursor = this._doc.body.style.cursor;\n this._doc.body.style.cursor = 'col-resize';\n this._doc.body.style.userSelect = 'none';\n const overlay = this._doc.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.zIndex = '9999';\n overlay.style.cursor = 'col-resize';\n this._doc.body.appendChild(overlay);\n\n const endResize = () => {\n stopResize$.next();\n stopResize$.complete();\n this._doc.body.style.cursor = originalCursor;\n this._doc.body.style.userSelect = '';\n if (overlay.parentNode) {\n overlay.parentNode.removeChild(overlay);\n }\n\n if (moved) {\n // More aggressive click suppression\n const clickSub = fromEvent<MouseEvent>(this._doc, 'click', { capture: true })\n .pipe(\n takeUntil(timer(50)),\n take(1)\n )\n .subscribe(clickEvent => {\n clickEvent.stopImmediatePropagation();\n clickEvent.preventDefault();\n });\n }\n\n this._ngZone.run(() => {\n this._isResizing.set(false);\n\n if (!moved) {\n this._manualWidths.set(initialManualWidths);\n } else {\n // Restore flex for columns that were not manually resized but were frozen\n const finalManualWidths = { ...this._manualWidths() };\n const currentFields = new Set([this._resizeColField, nextCol?.field].filter(Boolean));\n\n for (const field of Object.keys(finalManualWidths)) {\n if (!currentFields.has(field) && !initialManualWidths[field]) {\n delete finalManualWidths[field];\n }\n }\n this._manualWidths.set(finalManualWidths);\n }\n\n this._resizeColField = null;\n });\n };\n\n merge(mouseUp$, blur$).pipe(\n take(1)\n ).subscribe(e => {\n if (e instanceof MouseEvent) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n endResize();\n });\n\n mouseMove$.pipe(\n takeUntil(stopResize$)\n ).subscribe(e => {\n if (!this._isResizing()) return;\n const dx = e.clientX - this._resizeStartX;\n if (Math.abs(dx) > 2) moved = true;\n const minWidthVal = col.minWidth !== undefined ? parseInt(col.minWidth, 10) : this.minColumnWidth();\n const maxWidthVal = col.maxWidth !== undefined ? parseInt(col.maxWidth, 10) : Infinity;\n\n let newWidth = Math.round(this._resizeStartWidth + dx);\n newWidth = Math.max(minWidthVal, Math.min(maxWidthVal, newWidth));\n\n const lineLeft = colStartInHost + newWidth;\n const isCenterCol = !col.pinned;\n const isLeftPinned = col.pinned && col.pinAlign !== 'end';\n const isRightPinned = col.pinned && col.pinAlign === 'end';\n\n if (isCenterCol) {\n if (lineLeft > maxLineLeft) {\n newWidth = maxLineLeft - colStartInHost;\n } else if (lineLeft < minLineLeft) {\n newWidth = minLineLeft - colStartInHost;\n }\n } else if (isLeftPinned) {\n // Can't push beyond the start of right pinned columns (maxLineLeft)\n // Also if we are pushing into the center columns, they will be pushed or next col in pinned will be squeezed.\n if (lineLeft > maxLineLeft) {\n newWidth = maxLineLeft - colStartInHost;\n }\n } else if (isRightPinned) {\n // For right pinned, colStartInHost is relative to grid-root left.\n // The line shouldn't go to the left of leftPinnedWidth.\n if (lineLeft < minLineLeft) {\n newWidth = minLineLeft - colStartInHost;\n }\n\n // Also can't push beyond table right edge if there is an action bar\n const hostWidth = hostRect.width - borderLeft;\n if (lineLeft > hostWidth) {\n newWidth = hostWidth - colStartInHost;\n }\n }\n\n // Final check on newWidth after all constraints\n newWidth = Math.max(minWidthVal, newWidth);\n\n // If we are resizing a column that has a next column, we must ensure next column doesn't shrink below its minWidth\n if (nextCol) {\n const nextMinWidth = nextCol.minWidth !== undefined ? parseInt(nextCol.minWidth, 10) : this.minColumnWidth();\n const maxPossibleWidth = (this._resizeStartWidth + nextColStartWidth) - nextMinWidth;\n if (newWidth > maxPossibleWidth) {\n newWidth = maxPossibleWidth;\n }\n }\n\n // Ensure lineLeft doesn't go over bounds after nextCol check\n const finalLineLeft = colStartInHost + newWidth;\n if (isCenterCol || isLeftPinned) {\n if (finalLineLeft > maxLineLeft) {\n newWidth = maxLineLeft - colStartInHost;\n }\n }\n if (isCenterCol || isRightPinned) {\n if (finalLineLeft < minLineLeft) {\n newWidth = minLineLeft - colStartInHost;\n }\n }\n if (isRightPinned) {\n const hostWidth = hostRect.width - borderLeft;\n if (colStartInHost + newWidth > hostWidth) {\n newWidth = hostWidth - colStartInHost;\n }\n }\n\n this._ngZone.run(() => {\n this._resizeLineLeft.set(colStartInHost + newWidth);\n\n if (this._resizeColField) {\n const map = { ...this._manualWidths() };\n map[this._resizeColField] = `${newWidth}px`;\n\n // If we have a next column, it gets squeezed until its minimum, then it just shifts\n if (nextCol) {\n const currentNextWidth = Math.max(\n 0, // Already checked minWidth in newWidth calculation\n nextColStartWidth - (newWidth - this._resizeStartWidth)\n );\n map[nextCol.field] = `${currentNextWidth}px`;\n }\n\n this._manualWidths.set(map);\n\n // Force recalculation of centerWidth if it's based on fixed columns\n // by triggering signal update if needed\n }\n });\n });\n });\n }\n\n protected effectiveDataLength = computed(() => {\n // depend on data source render changes\n this._dsRenderTick();\n const dataSource = this.dataSource();\n // Use filteredData because it contains all items that passed filtering\n // and is what we should base pagination on.\n const totalDataLength = (this.rowModelType() === 'serverSide' ? dataSource.data : dataSource.filteredData)?.length || 0;\n const pSize = this.pageSize();\n const pIndex = this.pageIndex();\n\n if (this.rowModelType() === 'serverSide') {\n return totalDataLength;\n }\n\n if (this.withPagination()) {\n const start = pIndex * pSize;\n const end = Math.min(start + pSize, totalDataLength);\n return Math.max(0, end - start);\n }\n\n return totalDataLength;\n });\n\n protected effectivePaginatorLength = computed(() => {\n this._dsRenderTick();\n if (this.rowModelType() === 'serverSide') {\n return this._serverSideRowCount() || 0;\n }\n // Since we now manage pagination ourselves and don't set dataSource.paginator,\n // we should use the length of filtered data for the paginator.\n const ds = this.dataSource();\n return ds.filteredData?.length || 0;\n });\n\n protected totalHeight = computed(() => {\n return this.effectiveDataLength() * this.rowHeight();\n });\n\n protected visibleRange = computed(() => {\n // We still use signals here for parts that should trigger re-computation\n // like dataSource changes, but we access _scrollTop and _viewportHeight\n // which are updated manually.\n const top = this._scrollTop();\n const height = this._viewportHeight();\n const rowHeight = this.rowHeight();\n const buffer = this.bufferRows();\n const dataSource = this.dataSource();\n const dataLength = this.effectiveDataLength();\n\n let start = Math.floor(top / rowHeight) - buffer;\n let end = Math.ceil((top + height) / rowHeight) + buffer;\n\n start = Math.max(0, start);\n end = Math.min(dataLength, end);\n\n return { start, end };\n });\n\n protected visibleRows = computed(() => {\n // depend on data source render changes\n this._dsRenderTick();\n this.columnDefs(); // depend on columns\n this.data(); // depend on data\n this.loaded(); // depend on loaded state to ensure re-calculation after loading\n const pIndex = this.pageIndex();\n const pSize = this.pageSize();\n const { start, end } = this.visibleRange();\n const dataSource = this.dataSource();\n\n let data: T[];\n if (this.rowModelType() === 'serverSide') {\n data = dataSource.data;\n } else if (this.withPagination()) {\n data = dataSource.sortedData.slice(pIndex * pSize, (pIndex + 1) * pSize);\n } else {\n data = dataSource.sortedData;\n }\n\n // For serverSide, if we are loading but have some data already, we might want to keep it or show a loader.\n // The current logic in noFilteredResults handles the switch between table and empty state.\n // We only clear rows here if we are NOT in serverSide and loading, or if we want to force empty.\n if (this.rowModelType() !== 'serverSide' && (this._isLoading() || this._isFiltering()) && data.length === 0) {\n data = [];\n }\n\n return data.slice(start, end).map((item, index) => ({\n item,\n index: start + index,\n top: (start + index) * this.rowHeight(),\n isLast: (start + index) === data.length - 1\n }));\n });\n\n displayedColumns = computed((): string[] => {\n const displayedColumns = this\n .normalizedColumns()\n .filter(colDef => colDef.visible)\n .map(colDef => colDef.field);\n\n if (this.withSelection()) {\n displayedColumns.unshift('selection');\n }\n\n if (this.actionBarTemplateRef) {\n displayedColumns.push('__actionBar');\n }\n\n return [...displayedColumns];\n });\n\n protected isSelectionSticky = computed(() => {\n if (!this.withSelection()) {\n return false;\n }\n return this.normalizedColumns().some(col => col.pinned && (col.pinAlign === 'start' || !col.pinAlign));\n });\n\n protected hasHorizontalScroll = computed(() => {\n return this.centerWidth() > this._viewportWidth() + 1;\n });\n\n protected dataSource = computed(() => {\n return this._dataSource;\n });\n\n private _syncEffect = effect(() => {\n const data = this.data();\n const search = this.search().trim().toLowerCase();\n const rowModelType = this.rowModelType();\n const refreshTriggerValue = this._refreshTrigger();\n if (rowModelType === 'serverSide') {\n return;\n }\n untracked(() => {\n this._dataSource.data = data;\n if (rowModelType === 'clientSide') {\n this._dataSource.filter = search;\n }\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n });\n });\n\n private _loadDataEffect = effect(() => {\n const datasource = this.datasource();\n if (!datasource || this.rowModelType() !== 'serverSide' || this._isDestroyed) {\n return;\n }\n\n const pIndex = this.pageIndex();\n const pSize = this.pageSize();\n const search = this._debouncedSearch()?.trim() || '';\n\n // Capture sort params outside untracked but avoid triggering when sort is null due to @if toggling\n const sort = this._ngsSort();\n const sortActive = sort?.active();\n const sortDirection = sort?.direction();\n const sortModel = sortActive ? [{ colId: sortActive, sort: (sortDirection as any) || '' }] : [];\n\n const refreshTriggerValue = this._refreshTrigger();\n\n // Build a stable request key to avoid refetch loops when the view toggles (e.g. empty state removes ngsSort)\n const requestKey = `${pIndex}|${pSize}|${JSON.stringify(sortModel)}|${search}|${refreshTriggerValue}`;\n if (this._lastRequestKey === requestKey) {\n return; // no meaningful params change — skip triggering a new request\n }\n\n // Special case: if sort was active and now is undefined because component was removed from DOM,\n // but we ARE loading or in a state where we expect it to come back, we might want to wait.\n // However, the requestKey should handle it. If sortActive becomes undefined, requestKey changes.\n\n const isFilterRequest = this._lastRequestKey !== null && this._lastRequestKey.split('|')[3] !== search;\n const isSortRequest = this._lastRequestKey !== null && this._lastRequestKey.split('|')[2] !== JSON.stringify(sortModel);\n this._lastRequestKey = requestKey;\n\n untracked(() => {\n const currentRequestId = ++this._requestId;\n if (isFilterRequest) {\n this._isFiltering.set(true);\n }\n if (isSortRequest) {\n this._isSorting.set(true);\n }\n this._internalLoading.set(true);\n const params: DataViewGetRowsParams = {\n startRow: pIndex * pSize,\n endRow: (pIndex + 1) * pSize,\n page: pIndex,\n pageSize: pSize,\n sortModel,\n filterModel: search,\n successCallback: (rows: any[], lastRow?: number) => {\n this._ngZone.run(() => {\n if (this._isDestroyed || currentRequestId !== this._requestId) return;\n this._dataSource.data = rows;\n if (lastRow !== undefined) {\n this._serverSideRowCount.set(lastRow);\n\n // Update _hasDataOnServer if we have any rows OR if we are doing a clean request (no filters)\n if (lastRow > 0) {\n this._hasDataOnServer.set(true);\n } else if (!search && !sortModel.length) {\n this._hasDataOnServer.set(false);\n }\n } else {\n // If lastRow is not provided, we can only infer _hasDataOnServer if we actually got rows\n if (rows.length > 0) {\n this._hasDataOnServer.set(true);\n } else if (!search && !sortModel.length) {\n this._hasDataOnServer.set(false);\n }\n }\n this.loaded.set(true);\n this._internalLoading.set(false);\n this._isFiltering.set(false);\n this._isSorting.set(false);\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n this._cdr.markForCheck();\n });\n },\n failCallback: () => {\n this._ngZone.run(() => {\n if (this._isDestroyed || currentRequestId !== this._requestId) return;\n this.loaded.set(true);\n this._internalLoading.set(false);\n this._isFiltering.set(false);\n this._isSorting.set(false);\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n this._cdr.markForCheck();\n });\n }\n };\n this._ngZone.runOutsideAngular(() => {\n datasource.getItems(params);\n });\n });\n });\n\n private _dsRenderTick = signal(0);\n private _connectEffect = effect((onCleanup) => {\n const ds = this.dataSource();\n const sub = ds.connect().subscribe(() => {\n // bump a signal to re-compute derived values depending on sortedData\n this._dsRenderTick.update(v => v + 1);\n untracked(() => this._cdr.markForCheck());\n });\n onCleanup(() => sub.unsubscribe());\n });\n\n cellRenderers = input<DataViewCellRendererDef[]>([]);\n loading = input(false, {\n transform: booleanAttribute\n });\n hoverRows = input(false, {\n transform: booleanAttribute\n });\n search = input<string>('');\n private _debouncedSearch = signal('');\n\n private _debounceSearchEffect = effect((onCleanup) => {\n const search = this.search();\n if (this.rowModelType() === 'clientSide') {\n this._isFiltering.set(true);\n }\n const timeout = setTimeout(() => {\n untracked(() => {\n this._debouncedSearch.set(search);\n if (this.rowModelType() === 'clientSide') {\n this._isFiltering.set(false);\n }\n });\n }, 300);\n onCleanup(() => clearTimeout(timeout));\n });\n emptyIcon = input('fluent:document-search-24-regular');\n emptyText = input('There are no data to display');\n emptyFilterResultsIcon = input('fluent:search-info-24-regular');\n emptyFilterResultsText = input('No data matching the filter \"{{ search }}\"');\n\n protected interpolatedEmptyFilterResultsText = computed(() => {\n return this.emptyFilterResultsText().replace('{{ search }}', this.search());\n });\n\n protected _isLoading = computed(() => (this.loading() || this._internalLoading() || this._isFiltering()));\n\n protected injector = inject(Injector);\n protected selection = new SelectionModel<T>(this.rowSelection() === 'multiple', []);\n protected cellRenderersMap = new Map<string, any>();\n protected loadingCellRenderers = signal(false);\n\n readonly rowSelectionChanged = output<DataViewRowSelectionEvent<T>>();\n readonly selectionChanged = output<T[]>();\n readonly allRowsSelectionChanged = output<boolean>();\n readonly sortChange = output<Sort>();\n readonly loadEnd = output<void>();\n readonly refreshEnd = output<void>();\n\n get api(): DataViewAPI {\n return {\n search: (value: string): void => {\n this.dataSource().filter = value.trim().toLowerCase();\n },\n selectAll: (): void => {\n this._selectAll();\n },\n unselectAll: (): void => {\n this._unselectAll();\n },\n refresh: (): void => {\n this.refresh();\n },\n getSnapshot: (): DataViewState[] => {\n return this.getSnapshot();\n }\n }\n }\n\n refresh(): void {\n this._lastRequestKey = null;\n this._refreshTrigger.update(v => v + 1);\n }\n\n get noFilteredResults(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const currentlyEmpty = rawDataLength === 0;\n\n // During client-side filtering, immediately show empty state if filtered data is empty,\n // to avoid a short flash of an empty table before debounce takes effect.\n if (isClientSide && (this._isFiltering() || this.hasFilterValue)) {\n const filteredEmpty = (dataSource.filteredData?.length ?? 0) === 0;\n if (filteredEmpty) {\n return true;\n }\n }\n\n if (this._isLoading() || this.loadingCellRenderers()) {\n // For serverSide, while loading the first time (when we don't know yet if we have data),\n // we show the table (potentially for skeletons) instead of empty state.\n if (this.rowModelType() === 'serverSide' && this._hasDataOnServer() === undefined) {\n return false;\n }\n\n // If we are already in an empty state (data is empty and no previous data was confirmed on server),\n // keep showing it during loading/filtering to avoid flashing the table headers/structure.\n if (currentlyEmpty && !this.isBrowser()) {\n return true;\n }\n return false;\n }\n\n if (this.rowModelType() === 'serverSide' && this._hasDataOnServer() === undefined) {\n return false;\n }\n\n return this.isNoData || this.isNoResults;\n }\n\n protected get isNoResults(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const dataLength = dataSource.data?.length ?? 0;\n const filteredDataLength = dataSource.filteredData?.length ?? 0;\n\n if (isClientSide) {\n return filteredDataLength === 0 && (this.hasFilterValue || this._isSorting());\n }\n\n if (this.rowModelType() === 'serverSide') {\n const loadingTransition = this._isLoading() && this._hasDataOnServer() === true;\n // If we have 0 data, but loading is in progress (and we don't know if there will be data), we show skeletons, so isNoResults should be false\n if (this._isLoading() && this._hasDataOnServer() === undefined) {\n return false;\n }\n return dataLength === 0 && (this.hasFilterValue || this._isSorting() || loadingTransition) && this._hasDataOnServer() !== false;\n }\n\n return false;\n }\n\n protected get isNoData(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const dataLength = dataSource.data?.length ?? 0;\n\n if (isClientSide) {\n return rawDataLength === 0 && !this.hasFilterValue && !this._isSorting();\n }\n\n if (this.rowModelType() === 'serverSide') {\n if (this._isLoading() && this._hasDataOnServer() === undefined) {\n return false;\n }\n return dataLength === 0 && !this.hasFilterValue && !this._isSorting() && this._hasDataOnServer() === false;\n }\n\n return false;\n }\n\n get actionBarTemplateRef(): TemplateRef<any> | undefined {\n return this._actionBarRef()?.templateRef;\n }\n\n protected actionBarWidth = computed(() => {\n return this._actionBarComp()?.width() ?? this._actionBarRef()?.width() ?? 100;\n });\n\n protected get emptyTemplateRef(): TemplateRef<any> {\n return this._emptyDataRef()?.templateRef as TemplateRef<any>;\n }\n\n protected get emptyFilterResultsTemplateRef(): TemplateRef<any> {\n return this._emptyFilterResults()?.templateRef as TemplateRef<any>;\n }\n\n protected get hasFilterValue(): boolean {\n return !!this.search().trim();\n }\n\n getNestedValue(item: any, path: string): any {\n if (!item || !path) {\n return null;\n }\n\n if (!path.includes('.')) {\n return item[path];\n }\n\n return path.split('.').reduce((obj, key) => obj?.[key], item);\n }\n\n constructor() {\n effect(() => {\n const mode = this.rowSelection();\n untracked(() => {\n const currentSelection = this.selection.selected;\n this.selection = new SelectionModel<T>(mode === 'multiple', currentSelection);\n });\n });\n\n this._destroyRef.onDestroy(() => {\n this._isDestroyed = true;\n });\n\n // Reactively bind scroll-sync and ResizeObserver to the current ScrollbarArea,\n // to work correctly with conditional rendering (empty state / table)\n effect((onCleanup) => {\n const scrollbarArea = this._scrollbarArea();\n const isBrowser = this.isBrowser();\n if (!scrollbarArea || !isBrowser || this._isDestroyed) {\n return;\n }\n\n const centerEl = scrollbarArea.scrollableContentRef().nativeElement as HTMLElement;\n\n // Set initial viewport dimensions to avoid 0 width after returning from empty state\n const rect = centerEl.getBoundingClientRect();\n this._viewportHeight.set(rect.height);\n this._viewportWidth.set(rect.width);\n\n // Attach scroll-sync\n const scrollHandler = () => {\n if (this._isDestroyed) return;\n this._syncScrolls(centerEl);\n };\n\n this._ngZone.runOutsideAngular(() => {\n centerEl.addEventListener('scroll', scrollHandler, { passive: true });\n });\n\n // Bind ResizeObserver with safe layout\n const observer = new ResizeObserver((entries) => {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._isDestroyed) return;\n this._ngZone.run(() => {\n try {\n for (const entry of entries) {\n const { height, width } = entry.contentRect;\n // Use 1px threshold to prevent infinite loops due to subpixels\n if (Math.abs(this._viewportHeight() - height) > 1) {\n this._viewportHeight.set(height);\n }\n if (Math.abs(this._viewportWidth() - width) > 1) {\n this._viewportWidth.set(width);\n }\n }\n } catch {\n // ignore, dimensions will be delivered on the next tick\n }\n });\n });\n });\n });\n observer.observe(centerEl);\n\n // Synchronize transforms immediately after rebinding\n this._lastScrollTop = centerEl.scrollTop;\n this._lastScrollLeft = centerEl.scrollLeft;\n this._syncTransforms();\n\n onCleanup(() => {\n try { centerEl.removeEventListener('scroll', scrollHandler as any); } catch {}\n try { observer.disconnect(); } catch {}\n });\n });\n\n effect(() => {\n const sort = this._ngsSort();\n const dataSource = this.dataSource();\n if (sort && dataSource && !this._isDestroyed && this.rowModelType() !== 'serverSide') {\n dataSource.sort = sort;\n dataSource._updateChangeSubscription();\n }\n });\n\n effect(() => {\n const active = this.paginator() ?? this._internalPaginator();\n const dataSource = this.dataSource();\n if (dataSource && !this._isDestroyed) {\n if (this.withPagination() && this.rowModelType() !== 'serverSide' && active && this.isBrowser()) {\n // We handle pagination manually in visibleRows to have better control over virtualization.\n // If we assign it to dataSource.paginator, TableDataSource would also start paging data,\n // which would cause issues when we also slice data in visibleRows (double paging).\n dataSource.paginator = null as any;\n } else {\n dataSource.paginator = null as any;\n }\n }\n });\n\n // Sync external paginator page events with internal page state when provided\n effect((onCleanup) => {\n const ext = this.paginator();\n if (ext) {\n const sub = ext.page.subscribe(event => this.onPageChange(event));\n onCleanup(() => sub.unsubscribe());\n }\n });\n\n effect(() => {\n this.dataSource().sortingDataAccessor = (item: any, property) => {\n const columnDef = this.columnDefs().find(colDef => colDef.field === property);\n\n if (columnDef) {\n if (columnDef.valueGetter) {\n return columnDef.valueGetter(this.getNestedValue(item, property));\n }\n }\n\n switch (property) {\n default: {\n return this.getNestedValue(item, property);\n }\n }\n };\n });\n\n effect(() => {\n // Force table to re-render when column definitions change\n // to avoid \"Could not find column\" errors when using signals\n this.columnDefs();\n this.displayedColumns();\n untracked(() => {\n this.table?.renderRows();\n // CdkTable uses _cacheColumnDefs internally, but it's private.\n // renderRows should trigger it if definitions changed.\n });\n });\n\n effect(() => {\n this.hoveredRowIndex();\n this._syncHoverState();\n });\n }\n\n ngOnDestroy() {\n this._isDestroyed = true;\n }\n\n ngOnInit() {\n this._initialViewState.set(this.columnDefs().map(col => ({\n field: col.field,\n visible: col.visible ?? true,\n width: col.width,\n pinned: col.pinned,\n pinAlign: col.pinAlign\n })));\n\n const snapshot = this.snapshot();\n if (snapshot) {\n this.applyState(snapshot);\n }\n\n if (this.rowModelType() !== 'serverSide') {\n this.loaded.set(true);\n }\n if (this.rowModelType() === 'serverSide' && this._dataSource.data.length === 0) {\n this._internalLoading.set(true);\n }\n\n if (this.cellRenderers().length === 0) {\n return;\n }\n\n this.loadingCellRenderers.set(true);\n const components = this.cellRenderers().map(cellRenderer => cellRenderer.component());\n Promise.all(components).then(components => {\n components.forEach((component: any, index: number) => {\n this.cellRenderersMap.set(this.cellRenderers()[index].cellRenderer, component)\n });\n this.loadingCellRenderers.set(false);\n this._cdr.detectChanges();\n }).catch(() => {\n this.loadingCellRenderers.set(false);\n this._cdr.detectChanges();\n });\n }\n\n ngAfterViewInit() {\n this.isBrowser.set(isPlatformBrowser(this._platformId));\n this._cdr.detectChanges();\n }\n\n private _syncScrolls(source: HTMLElement) {\n const scrollTop = source.scrollTop;\n const scrollLeft = source.scrollLeft;\n\n this._lastScrollTop = scrollTop;\n this._lastScrollLeft = scrollLeft;\n\n if (this._isDestroyed) return;\n\n this._syncTransforms();\n\n this._ngZone.run(() => {\n this._scheduleVirtualUpdate(scrollTop);\n });\n }\n\n private _scheduleVirtualUpdate(scrollTop: number): void {\n const delta = Math.abs(this._scrollTop() - scrollTop);\n const threshold = this.rowHeight() * (this.bufferRows() / 2);\n\n if (delta >= threshold || scrollTop === 0 || scrollTop + this._viewportHeight() >= this.totalHeight()) {\n this._scrollTop.set(scrollTop);\n this._syncTransforms();\n }\n }\n\n private _syncTransforms() {\n const scrollTop = this._lastScrollTop;\n const scrollLeft = this._lastScrollLeft;\n\n const headerCenterInner = this._headerCenterInner()?.nativeElement;\n if (headerCenterInner) {\n headerCenterInner.style.transform = `translate3d(${-scrollLeft}px, 0, 0)`;\n }\n\n const bodyLeftContent = this._bodyLeftContent()?.nativeElement;\n const bodyRightContent = this._bodyRightContent()?.nativeElement;\n const bodyCenterContent = this._bodyCenterContent()?.nativeElement;\n\n if (bodyLeftContent) {\n bodyLeftContent.style.transform = `translate3d(0, ${-scrollTop}px, 0)`;\n }\n if (bodyRightContent) {\n bodyRightContent.style.transform = `translate3d(0, ${-scrollTop}px, 0)`;\n }\n if (bodyCenterContent) {\n bodyCenterContent.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n // Sync hovered row if needed\n this._syncHoverState();\n }\n\n private _syncHoverState() {\n // if (!isPlatformBrowser(this._platformId)) return;\n //\n // this._ngZone.runOutsideAngular(() => {\n // const rows = Array.from(document.querySelectorAll('.ngs-data-view .grid-row'));\n // const hoveredIndex = this.hoveredRowIndex();\n // rows.forEach(row => {\n // const indexAttr = row.getAttribute('data-row-index');\n // if (indexAttr !== null) {\n // const index = parseInt(indexAttr, 10);\n // if (index === hoveredIndex) {\n // row.classList.add('is-hovered');\n // } else {\n // row.classList.remove('is-hovered');\n // }\n // }\n // });\n // });\n }\n\n get table(): Table<T> {\n return this._table() as Table<T>;\n }\n\n get ngsSort(): SortDirective {\n return this._ngsSort() as SortDirective;\n }\n\n hasCellRenderer(cellRenderer: string): boolean {\n return this.cellRenderersMap.has(cellRenderer);\n }\n\n getCellRenderer(cellRenderer: string): any {\n return this.cellRenderersMap.get(cellRenderer);\n }\n\n isAllSelected(): boolean {\n const data = this.rowModelType() === 'serverSide' ? this.dataSource().data : this.data();\n return this.selection.selected.length === data.length;\n }\n\n toggleAllRows(): void {\n if (this.isAllSelected()) {\n this._unselectAll();\n } else {\n this._selectAll();\n }\n }\n\n rowSelectionToggle(event: CheckboxChange, row: T): void {\n if (event.checked) {\n this.selection.select(row);\n } else {\n this.selection.deselect(row);\n }\n\n this.rowSelectionChanged.emit({\n checkboxChange: event,\n row,\n checked: event.checked\n });\n\n this.selectionChanged.emit(this.selection.selected);\n }\n\n onPageChange(event: PageEvent): void {\n this.pageIndex.set(event.pageIndex);\n this.pageSize.set(event.pageSize);\n }\n\n protected sortColumn(col: DataViewColumnDef, direction: SortDirection): void {\n const sort = this.ngsSort;\n if (sort) {\n sort.active.set(col.field);\n sort.direction.set(direction);\n sort.sortChange.emit({ active: col.field, direction });\n }\n this.onSortChange({ active: col.field, direction });\n }\n\n getSnapshot(): DataViewState[] {\n return this.normalizedColumns().map(col => ({\n field: col.field,\n visible: col.visible ?? true,\n width: col.width,\n pinned: col.pinned,\n pinAlign: col.pinAlign\n }));\n }\n\n applyState(state: DataViewState[]): void {\n if (!state || state.length === 0) return;\n\n const pinOverrides = { ...this._manualPinned() };\n const widthOverrides = { ...this._manualWidths() };\n this.columnDefs().forEach(col => {\n const colState = state.find(s => s.field === col.field);\n if (colState) {\n if (colState.width !== undefined) {\n widthOverrides[col.field] = colState.width;\n }\n pinOverrides[col.field] = {\n pinned: !!colState.pinned,\n pinAlign: colState.pinAlign\n };\n }\n });\n\n this._manualPinned.set(pinOverrides);\n this._manualWidths.set(widthOverrides);\n this._cdr.markForCheck();\n }\n\n protected pinColumn(col: any, align: DataViewPinAlign | null): void {\n const pinOverrides = { ...this._manualPinned() };\n\n if (align === null) {\n pinOverrides[col.field] = { pinned: false, pinAlign: undefined };\n } else {\n pinOverrides[col.field] = { pinned: true, pinAlign: align };\n }\n this._manualPinned.set(pinOverrides);\n this._cdr.markForCheck();\n }\n\n protected autosizeColumn(col: DataViewColumnDef): void {\n const width = this._calculateColumnAutosize(col);\n if (width > 0) {\n const widths = { ...this._manualWidths() };\n widths[col.field] = `${width}px`;\n this._manualWidths.set(widths);\n this._cdr.markForCheck();\n }\n }\n\n protected autosizeAllColumns(): void {\n const widths = { ...this._manualWidths() };\n let changed = false;\n this.normalizedColumns().forEach(col => {\n if (col.visible) {\n const width = this._calculateColumnAutosize(col);\n if (width > 0) {\n widths[col.field] = `${width}px`;\n changed = true;\n }\n }\n });\n\n if (changed) {\n this._manualWidths.set(widths);\n this._cdr.markForCheck();\n }\n }\n\n private _calculateColumnAutosize(col: DataViewColumnDef): number {\n if (!isPlatformBrowser(this._platformId)) return 0;\n\n const gridRoot = this._elRef.nativeElement;\n const headerCells = Array.from(gridRoot.querySelectorAll(`.header-cell`)) as HTMLElement[];\n const targetHeaderCell = headerCells.find(cell => {\n const sortHeader = cell.querySelector('[ngs-sort-header]');\n return sortHeader?.getAttribute('ngs-sort-header') === col.field;\n });\n\n if (!targetHeaderCell) return 0;\n\n const headerContent = targetHeaderCell.querySelector('.grow') as HTMLElement;\n const headerWidth = (headerContent?.scrollWidth ?? 0)\n + 32 // padding-left/right\n + 32; // extra space for sort icon and menu button\n\n let maxContentWidth = headerWidth;\n const visibleCols = this.normalizedColumns().filter(c => c.visible);\n const colIndex = visibleCols.indexOf(visibleCols.find(c => c.field === col.field)!);\n\n if (colIndex !== -1) {\n const rows = Array.from(gridRoot.querySelectorAll('.grid-row')) as HTMLElement[];\n const rowsToMeasure = rows.slice(0, 50);\n\n rowsToMeasure.forEach(row => {\n const cells = Array.from(row.querySelectorAll('.cell')) as HTMLElement[];\n const cell = cells[colIndex];\n if (cell) {\n const content = cell.firstElementChild as HTMLElement;\n if (content) {\n const width = content.scrollWidth + 32; // + padding\n if (width > maxContentWidth) {\n maxContentWidth = width;\n }\n }\n }\n });\n }\n\n return Math.min(Math.max(maxContentWidth, 60), 500);\n }\n\n protected resetColumns(): void {\n const initialState = this._initialViewState();\n if (initialState.length > 0) {\n this.applyState(initialState);\n }\n\n this._manualWidths.set({});\n this._manualPinned.set({});\n this._manualOrder.set(null);\n this._manualVisibility.set({});\n this._cdr.markForCheck();\n }\n\n protected openColumnSettingsDialog(): void {\n const dialogRef = this._dialog.open<DataViewColumnSettingsDialog, any, ColumnSettingsDialogResult>(DataViewColumnSettingsDialog, {\n minWidth: '400px',\n data: {\n columns: this.normalizedColumns(),\n },\n });\n\n dialogRef.afterClosed().subscribe((result: ColumnSettingsDialogResult | undefined) => {\n if (result) {\n const newOrder = result.columns.map((c: any) => c.field);\n const newVisibility = { ...this._manualVisibility() };\n const newPinned = { ...this._manualPinned() };\n\n result.columns.forEach((c: any) => {\n newVisibility[c.field] = c.visible !== false;\n newPinned[c.field] = { pinned: !!c.pinned, pinAlign: c.pinAlign };\n });\n\n // Add back missing columns that were filtered out in dialog\n const currentOrder = this._manualOrder() || this.columnDefs().map(c => c.field);\n const resultFields = new Set(newOrder);\n const fullOrder = [...newOrder];\n\n currentOrder.forEach(field => {\n if (!resultFields.has(field)) {\n // Find where it should be inserted to keep relative order if possible,\n // but just appending is also a common strategy for \"static\" columns.\n // Let's try to maintain the original relative order.\n fullOrder.push(field);\n }\n });\n\n this._manualOrder.set(fullOrder);\n this._manualVisibility.set(newVisibility);\n this._manualPinned.set(newPinned);\n this._cdr.markForCheck();\n }\n });\n }\n\n protected onSortChange(event: Sort): void {\n if (this.rowModelType() !== 'serverSide') {\n this.dataSource().sort = this.ngsSort || null;\n }\n this.sortChange.emit(event);\n }\n\n private _selectAll(): void {\n const data = this.rowModelType() === 'serverSide' ? this.dataSource().data : this.data();\n this.selection.select(...data);\n this.selectionChanged.emit(data);\n this.allRowsSelectionChanged.emit(true);\n }\n\n private _unselectAll(): void {\n this.selection.clear();\n this.selectionChanged.emit([]);\n this.allRowsSelectionChanged.emit(false);\n }\n}\n","<div class=\"flex flex-col h-full overflow-hidden relative\"\n ngsBlockLoaderContainer>\n <ngs-block-loader [loading]=\"_isLoading()\"/>\n @if (loaded()) {\n @if (!noFilteredResults) {\n <div class=\"grid-root flex flex-col grow overflow-hidden relative\">\n @if (isResizing()) {\n <div class=\"ngs-data-view-resize-line\" [style.left.px]=\"resizeLineLeft()\"></div>\n }\n\n <!-- GRID HEADER -->\n <div class=\"grid-header pinned top-0 z-20 flex overflow-hidden shrink-0 font-medium\"\n ngsSort\n [style.height.px]=\"headerHeight()\"\n [ngsSortDisabled]=\"!isSortingEnabled() || _isLoading() || _isFiltering()\"\n (ngsSortChange)=\"onSortChange($event)\">\n @if (pinnedLeftColumns().length > 0 || withSelection()) {\n <div class=\"grid-header-left shrink-0 flex z-30\"\n [ngStyle]=\"leftPinnedWidthStyles()\">\n <div class=\"header-inner flex\" [style.width.px]=\"leftPinnedWidth()\">\n @if (withSelection()) {\n <div class=\"header-cell cell-selection flex items-center justify-center shrink-0\">\n @if (rowSelection() === 'multiple') {\n <ngs-checkbox (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\" />\n }\n </div>\n }\n @for (col of pinnedLeftColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div #headerCenter class=\"grid-header-center grow flex overflow-hidden\">\n <div #headerCenterInner class=\"flex header-inner\" [style.width.px]=\"centerWidth()\">\n @for (col of centerColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (pinnedRightColumns().length > 0 || actionBarTemplateRef) {\n <div class=\"grid-header-right shrink-0 flex z-30\"\n [ngStyle]=\"rightPinnedWidthStyles()\">\n <div class=\"header-inner flex\" [style.width.px]=\"rightPinnedWidth()\">\n @for (col of pinnedRightColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n @if (actionBarTemplateRef) {\n <div class=\"header-cell flex items-center shrink-0\"\n [style.width.px]=\"actionBarWidth()\"\n [style.min-width.px]=\"actionBarWidth()\"\n [style.max-width.px]=\"actionBarWidth()\">\n &nbsp;\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <div class=\"grid-body grow flex relative\">\n @if (pinnedLeftColumns().length > 0 || withSelection()) {\n <div #bodyLeft class=\"grid-body-left pinned-viewport shrink-0 overflow-hidden z-10 pinned left-0\"\n [ngStyle]=\"leftPinnedWidthStyles()\">\n <div #bodyLeftCanvas class=\"pinned-canvas\">\n <div #bodyLeftContent class=\"pinned-content relative\" [style.height.px]=\"totalHeight()\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 right-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @if (withSelection()) {\n <div class=\"cell cell-selection flex items-center justify-center shrink-0\">\n <ngs-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? rowSelectionToggle($event, row.item) : null\"\n [checked]=\"selection.isSelected(row.item)\" />\n </div>\n }\n @for (col of pinnedLeftColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"></ng-container>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n <div #bodyCenter class=\"grid-body-center grow overflow-hidden relative\">\n <ngs-scrollbar-area>\n <div #bodyCenterContent class=\"rows-container\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [style.width.px]=\"centerWidth()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @for (col of centerColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"/>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"virtual-spacer relative\" [style.height.px]=\"totalHeight()\" [style.width.px]=\"centerWidth()\"></div>\n </ngs-scrollbar-area>\n </div>\n\n @if (pinnedRightColumns().length > 0 || actionBarTemplateRef) {\n <div #bodyRight class=\"grid-body-right pinned-viewport shrink-0 overflow-hidden z-10 pinned right-0\"\n [ngStyle]=\"rightPinnedWidthStyles()\">\n <div #bodyRightCanvas class=\"pinned-canvas\">\n <div #bodyRightContent class=\"pinned-content relative\" [style.height.px]=\"totalHeight()\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 right-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @for (col of pinnedRightColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"></ng-container>\n </div>\n }\n @if (actionBarTemplateRef) {\n <div class=\"cell flex items-center shrink-0\"\n [style.width.px]=\"actionBarWidth()\"\n [style.min-width.px]=\"actionBarWidth()\"\n [style.max-width.px]=\"actionBarWidth()\">\n <ng-container [ngTemplateOutlet]=\"actionBarTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\"/>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (withPagination() && !paginator()) {\n <ngs-paginator [pageSizeOptions]=\"pageSizeOptions()\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [pageSize]=\"pageSize()\"\n [pageIndex]=\"pageIndex()\"\n [length]=\"effectivePaginatorLength()\"\n [disabled]=\"_isLoading() || _isFiltering()\"\n (page)=\"onPageChange($event)\"/>\n }\n </div>\n } @else {\n @if (isNoResults) {\n @if (emptyFilterResultsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"emptyFilterResultsTemplateRef\"/>\n } @else {\n <ngs-empty-state>\n <ngs-empty-state-icon>\n <ngs-icon [name]=\"emptyFilterResultsIcon()\"/>\n </ngs-empty-state-icon>\n <ngs-empty-state-content>{{ interpolatedEmptyFilterResultsText() }}</ngs-empty-state-content>\n </ngs-empty-state>\n }\n } @else {\n @if (emptyTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"emptyTemplateRef\"/>\n } @else {\n <ngs-empty-state>\n <ngs-empty-state-icon>\n <ngs-icon [name]=\"emptyIcon()\"/>\n </ngs-empty-state-icon>\n <ngs-empty-state-content>{{ emptyText() }}</ngs-empty-state-content>\n </ngs-empty-state>\n }\n }\n }\n }\n</div>\n\n<ng-template #cellContent let-row=\"row\" let-col=\"col\">\n <div class=\"overflow-hidden w-full\">\n @if (col.cellRenderer && hasCellRenderer(col.cellRenderer)) {\n <ng-container [ngComponentOutlet]=\"getCellRenderer(col.cellRenderer)\"\n [ngComponentOutletInputs]=\"{ element: row, columnDef: col, fieldData: getNestedValue(row, col.field) }\"\n [ngComponentOutletInjector]=\"injector\"/>\n } @else {\n {{ getNestedValue(row, col.field) }}\n }\n </div>\n</ng-template>\n\n<ngs-menu #columnMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n @if (col.sortable) {\n <button ngs-menu-item (click)=\"sortColumn(col, 'asc')\">\n <ngs-icon name=\"fluent:arrow-sort-up-24-regular\" size=\"20\"/>\n Sort Ascending\n </button>\n <button ngs-menu-item (click)=\"sortColumn(col, 'desc')\">\n <ngs-icon name=\"fluent:arrow-sort-down-24-regular\" size=\"20\"/>\n Sort Descending\n </button>\n <ngs-menu-divider/>\n }\n <button ngs-menu-item [ngsMenuTriggerFor]=\"pinMenu\" [ngsMenuTriggerData]=\"{ col: col }\">\n <ngs-icon name=\"fluent:pin-24-regular\" size=\"20\"/>\n Pin Column\n </button>\n <ngs-menu-divider/>\n <button ngs-menu-item (click)=\"autosizeColumn(col)\">\n Autosize This Column\n </button>\n <button ngs-menu-item (click)=\"autosizeAllColumns()\">\n Autosize All Columns\n </button>\n <ngs-menu-divider/>\n <button ngs-menu-item (click)=\"openColumnSettingsDialog()\">\n Choose Columns\n </button>\n <button ngs-menu-item (click)=\"resetColumns()\">\n Reset Columns\n </button>\n </ng-template>\n</ngs-menu>\n\n<ngs-menu #pinMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n <button ngs-menu-item\n [selected]=\"!col.pinned\"\n (click)=\"pinColumn(col, null)\">\n No Pin\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'start'\"\n (click)=\"pinColumn(col, 'start')\">\n Pin Left\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'end'\"\n (click)=\"pinColumn(col, 'end')\">\n Pin Right\n </button>\n </ng-template>\n</ngs-menu>\n","import { DataViewCellRendererDef } from './types';\n\nexport function cellRenderer<T>(cellRenderer: string, component: any): DataViewCellRendererDef {\n return {\n cellRenderer,\n component\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,154 @@
1
+ import * as i0 from '@angular/core';
2
+ import { viewChild, input, signal, inject, Component } from '@angular/core';
3
+ import { NgControl } from '@angular/forms';
4
+ import { FormFieldControl } from '@ngstarter-ui/components/form-field';
5
+ import { Select, Option } from '@ngstarter-ui/components/select';
6
+ import { Subject, takeUntil } from 'rxjs';
7
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
+ import { outputToObservable } from '@angular/core/rxjs-interop';
9
+
10
+ class DateFormatSelect {
11
+ static nextId = 0;
12
+ matSelect = viewChild.required(Select);
13
+ dateFormats = input([
14
+ { value: 'MM/dd/yyyy', name: 'MM/DD/YYYY' },
15
+ { value: 'dd.MM.yyyy', name: 'DD.MM.YYYY' },
16
+ { value: 'yyyy-MM-dd', name: 'YYYY-MM-DD' },
17
+ ], ...(ngDevMode ? [{ debugName: "dateFormats" }] : /* istanbul ignore next */ []));
18
+ _value = signal(null, ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
19
+ _focused = signal(false, ...(ngDevMode ? [{ debugName: "_focused" }] : /* istanbul ignore next */ []));
20
+ _describedBy = signal('', ...(ngDevMode ? [{ debugName: "_describedBy" }] : /* istanbul ignore next */ []));
21
+ stateChanges = new Subject();
22
+ id = `date-format-input-${DateFormatSelect.nextId++}`;
23
+ controlType = 'date-format-input';
24
+ autofilled = false;
25
+ get focused() {
26
+ return this._focused();
27
+ }
28
+ get empty() {
29
+ return !this._value();
30
+ }
31
+ get shouldLabelFloat() {
32
+ return this.focused || !this.empty;
33
+ }
34
+ get errorState() {
35
+ return this.ngControl?.invalid === true && this.ngControl.touched === true;
36
+ }
37
+ get value() {
38
+ return this._value();
39
+ }
40
+ set value(val) {
41
+ this._value.set(val);
42
+ this.stateChanges.next();
43
+ }
44
+ ngControl = inject(NgControl, { self: true, optional: true });
45
+ placeholderInput = input('', { ...(ngDevMode ? { debugName: "placeholderInput" } : /* istanbul ignore next */ {}), alias: 'placeholder' });
46
+ get placeholder() {
47
+ return this.placeholderInput();
48
+ }
49
+ _destroy$ = new Subject();
50
+ constructor() {
51
+ if (this.ngControl) {
52
+ this.ngControl.valueAccessor = this;
53
+ }
54
+ }
55
+ ngOnInit() {
56
+ outputToObservable(this.matSelect().closed)
57
+ .pipe(takeUntil(this._destroy$))
58
+ .subscribe(() => {
59
+ this._focused.set(false);
60
+ this.onTouched();
61
+ this.stateChanges.next();
62
+ });
63
+ }
64
+ _required = false;
65
+ get required() {
66
+ return this._required;
67
+ }
68
+ set required(value) {
69
+ this._required = coerceBooleanProperty(value);
70
+ this.stateChanges.next();
71
+ }
72
+ _disabled = false;
73
+ get disabled() {
74
+ return this._disabled;
75
+ }
76
+ set disabled(value) {
77
+ this._disabled = coerceBooleanProperty(value);
78
+ this.matSelect().setDisabledState(this._disabled);
79
+ this.stateChanges.next();
80
+ }
81
+ ngOnDestroy() {
82
+ this._destroy$.next();
83
+ this._destroy$.complete();
84
+ this.stateChanges.complete();
85
+ }
86
+ onFocus() {
87
+ if (!this.focused) {
88
+ this._focused.set(true);
89
+ this.stateChanges.next();
90
+ }
91
+ }
92
+ onBlur() {
93
+ if (!this.matSelect().panelOpen()) {
94
+ this._focused.set(false);
95
+ this.onTouched();
96
+ this.stateChanges.next();
97
+ }
98
+ }
99
+ onSelectionChange(event) {
100
+ this.value = event.value;
101
+ this.onChange(this.value);
102
+ }
103
+ setDescribedByIds(ids) {
104
+ this._describedBy.set(ids.join(' '));
105
+ }
106
+ onContainerClick() {
107
+ if (!this.disabled) {
108
+ this.matSelect().open();
109
+ }
110
+ }
111
+ onChange = () => { };
112
+ onTouched = () => { };
113
+ writeValue(value) {
114
+ this.value = value;
115
+ }
116
+ registerOnChange(fn) {
117
+ this.onChange = fn;
118
+ }
119
+ registerOnTouched(fn) {
120
+ this.onTouched = fn;
121
+ }
122
+ setDisabledState(isDisabled) {
123
+ this.disabled = isDisabled;
124
+ }
125
+ focus() {
126
+ this.matSelect().focus();
127
+ }
128
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DateFormatSelect, deps: [], target: i0.ɵɵFactoryTarget.Component });
129
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DateFormatSelect, isStandalone: true, selector: "ngs-date-format-select", inputs: { dateFormats: { classPropertyName: "dateFormats", publicName: "dateFormats", isSignal: true, isRequired: false, transformFunction: null }, placeholderInput: { classPropertyName: "placeholderInput", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "combobox" }, properties: { "id": "id", "attr.required": "required || null" } }, providers: [{
130
+ provide: FormFieldControl,
131
+ useExisting: DateFormatSelect
132
+ }], viewQueries: [{ propertyName: "matSelect", first: true, predicate: Select, descendants: true, isSignal: true }], exportAs: ["ngsDateFormatSelect"], ngImport: i0, template: "<ngs-select\n [value]=\"value\"\n (selectionChange)=\"onSelectionChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholder\">\n @for (format of dateFormats(); track format.value) {\n <ngs-option [value]=\"format.value\">{{ format.name }}</ngs-option>\n }\n</ngs-select>\n", styles: ["/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Select, selector: "ngs-select", inputs: ["id", "placeholder", "disabled", "required", "multiple", "hideCheckIcon", "ariaLabel", "tabIndex", "aria-describedby", "value"], outputs: ["selectionChange", "opened", "closed", "valueChange"], exportAs: ["ngsSelect"] }, { kind: "component", type: Option, selector: "ngs-option", inputs: ["value", "disabled", "selected"], outputs: ["onSelectionChange"], exportAs: ["ngsOption"] }] });
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DateFormatSelect, decorators: [{
135
+ type: Component,
136
+ args: [{ selector: 'ngs-date-format-select', exportAs: 'ngsDateFormatSelect', imports: [
137
+ Select,
138
+ Option
139
+ ], providers: [{
140
+ provide: FormFieldControl,
141
+ useExisting: DateFormatSelect
142
+ }], host: {
143
+ '[id]': 'id',
144
+ 'role': 'combobox',
145
+ '[attr.required]': 'required || null',
146
+ }, template: "<ngs-select\n [value]=\"value\"\n (selectionChange)=\"onSelectionChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholder\">\n @for (format of dateFormats(); track format.value) {\n <ngs-option [value]=\"format.value\">{{ format.name }}</ngs-option>\n }\n</ngs-select>\n", styles: ["/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
147
+ }], ctorParameters: () => [], propDecorators: { matSelect: [{ type: i0.ViewChild, args: [i0.forwardRef(() => Select), { isSignal: true }] }], dateFormats: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormats", required: false }] }], placeholderInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }] } });
148
+
149
+ /**
150
+ * Generated bundle index. Do not edit.
151
+ */
152
+
153
+ export { DateFormatSelect };
154
+ //# sourceMappingURL=ngstarter-ui-components-date-format-select.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngstarter-ui-components-date-format-select.mjs","sources":["../../../projects/components/date-format-select/src/date-format-select/date-format-select.ts","../../../projects/components/date-format-select/src/date-format-select/date-format-select.html","../../../projects/components/date-format-select/ngstarter-ui-components-date-format-select.ts"],"sourcesContent":["import {\n Component,\n inject,\n input,\n OnDestroy,\n signal, viewChild, OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { FormFieldControl } from '@ngstarter-ui/components/form-field';\nimport { Select, Option, SelectChange } from '@ngstarter-ui/components/select';\nimport { Subject, takeUntil } from 'rxjs';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\n\nexport type DateFormat = {\n value: string;\n name: string;\n};\n\n@Component({\n selector: 'ngs-date-format-select',\n exportAs: 'ngsDateFormatSelect',\n imports: [\n Select,\n Option\n ],\n templateUrl: './date-format-select.html',\n styleUrl: './date-format-select.scss',\n providers: [{\n provide: FormFieldControl,\n useExisting: DateFormatSelect\n }],\n host: {\n '[id]': 'id',\n 'role': 'combobox',\n '[attr.required]': 'required || null',\n },\n})\nexport class DateFormatSelect implements FormFieldControl<string>, ControlValueAccessor, OnDestroy, OnInit {\n private static nextId = 0;\n\n readonly matSelect = viewChild.required(Select);\n\n readonly dateFormats = input<DateFormat[]>([\n { value: 'MM/dd/yyyy', name: 'MM/DD/YYYY' },\n { value: 'dd.MM.yyyy', name: 'DD.MM.YYYY' },\n { value: 'yyyy-MM-dd', name: 'YYYY-MM-DD' },\n ]);\n\n private readonly _value = signal<string | null>(null);\n private readonly _focused = signal(false);\n readonly _describedBy = signal('');\n\n readonly stateChanges = new Subject<void>();\n readonly id = `date-format-input-${DateFormatSelect.nextId++}`;\n readonly controlType = 'date-format-input';\n readonly autofilled = false;\n\n get focused(): boolean {\n return this._focused();\n }\n\n get empty(): boolean {\n return !this._value();\n }\n\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n get errorState(): boolean {\n return this.ngControl?.invalid === true && this.ngControl.touched === true;\n }\n\n get value(): string | null {\n return this._value();\n }\n set value(val: string | null) {\n this._value.set(val);\n this.stateChanges.next();\n }\n\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n readonly placeholderInput = input<string>('', { alias: 'placeholder' });\n\n get placeholder(): string {\n return this.placeholderInput();\n }\n\n private readonly _destroy$ = new Subject<void>();\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n outputToObservable(this.matSelect().closed)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._focused.set(false);\n this.onTouched();\n this.stateChanges.next();\n });\n }\n\n private _required = false;\n\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean | string) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n private _disabled = false;\n\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean | string) {\n this._disabled = coerceBooleanProperty(value);\n this.matSelect().setDisabledState(this._disabled);\n this.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this.stateChanges.complete();\n }\n\n onFocus(): void {\n if (!this.focused) {\n this._focused.set(true);\n this.stateChanges.next();\n }\n }\n\n onBlur(): void {\n if (!this.matSelect().panelOpen()) {\n this._focused.set(false);\n this.onTouched();\n this.stateChanges.next();\n }\n }\n\n onSelectionChange(event: SelectChange): void {\n this.value = event.value;\n this.onChange(this.value);\n }\n\n setDescribedByIds(ids: string[]): void {\n this._describedBy.set(ids.join(' '));\n }\n\n onContainerClick(): void {\n if (!this.disabled) {\n this.matSelect().open();\n }\n }\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n focus(): void {\n this.matSelect().focus();\n }\n}\n","<ngs-select\n [value]=\"value\"\n (selectionChange)=\"onSelectionChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholder\">\n @for (format of dateFormats(); track format.value) {\n <ngs-option [value]=\"format.value\">{{ format.name }}</ngs-option>\n }\n</ngs-select>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}