@elementar-rt/components 0.6.55 → 0.6.57

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 (345) hide show
  1. package/README.md +49 -49
  2. package/badge/index.d.ts +18 -0
  3. package/bottom-sheet/index.d.ts +32 -0
  4. package/button-toggle/index.d.ts +33 -0
  5. package/calendar/index.d.ts +44 -0
  6. package/card/index.d.ts +32 -0
  7. package/chips/index.d.ts +23 -0
  8. package/clipboard-copy/index.d.ts +28 -0
  9. package/code-highlighter/index.d.ts +5 -1
  10. package/color-scheme/index.d.ts +1 -1
  11. package/combobox/index.d.ts +38 -0
  12. package/content-editor/index.d.ts +18 -0
  13. package/dashboard/index.d.ts +1 -1
  14. package/data-grid/index.d.ts +64 -0
  15. package/datepicker/index.d.ts +32 -0
  16. package/dialog/index.d.ts +48 -0
  17. package/digit-roller/index.d.ts +18 -0
  18. package/empty-state/index.d.ts +17 -0
  19. package/expansion-panel/index.d.ts +12 -0
  20. package/fesm2022/elementar-rt-components-action-required.mjs +4 -4
  21. package/fesm2022/elementar-rt-components-action-required.mjs.map +1 -1
  22. package/fesm2022/elementar-rt-components-alert.mjs +17 -17
  23. package/fesm2022/elementar-rt-components-alert.mjs.map +1 -1
  24. package/fesm2022/elementar-rt-components-announcement.mjs +8 -8
  25. package/fesm2022/elementar-rt-components-announcement.mjs.map +1 -1
  26. package/fesm2022/elementar-rt-components-avatar.mjs +22 -22
  27. package/fesm2022/elementar-rt-components-avatar.mjs.map +1 -1
  28. package/fesm2022/elementar-rt-components-badge.mjs +38 -0
  29. package/fesm2022/elementar-rt-components-badge.mjs.map +1 -0
  30. package/fesm2022/elementar-rt-components-block-loader.mjs +7 -7
  31. package/fesm2022/elementar-rt-components-block-loader.mjs.map +1 -1
  32. package/fesm2022/elementar-rt-components-block-state.mjs +24 -24
  33. package/fesm2022/elementar-rt-components-block-state.mjs.map +1 -1
  34. package/fesm2022/elementar-rt-components-bottom-sheet.mjs +71 -0
  35. package/fesm2022/elementar-rt-components-bottom-sheet.mjs.map +1 -0
  36. package/fesm2022/elementar-rt-components-brand-colors.mjs +5 -5
  37. package/fesm2022/elementar-rt-components-brand-colors.mjs.map +1 -1
  38. package/fesm2022/elementar-rt-components-breadcrumbs.mjs +41 -41
  39. package/fesm2022/elementar-rt-components-breadcrumbs.mjs.map +1 -1
  40. package/fesm2022/elementar-rt-components-button-toggle.mjs +89 -0
  41. package/fesm2022/elementar-rt-components-button-toggle.mjs.map +1 -0
  42. package/fesm2022/elementar-rt-components-calendar.mjs +130 -0
  43. package/fesm2022/elementar-rt-components-calendar.mjs.map +1 -0
  44. package/fesm2022/elementar-rt-components-card-overlay.mjs +7 -7
  45. package/fesm2022/elementar-rt-components-card-overlay.mjs.map +1 -1
  46. package/fesm2022/elementar-rt-components-card.mjs +60 -0
  47. package/fesm2022/elementar-rt-components-card.mjs.map +1 -0
  48. package/fesm2022/elementar-rt-components-carousel.mjs +22 -22
  49. package/fesm2022/elementar-rt-components-carousel.mjs.map +1 -1
  50. package/fesm2022/elementar-rt-components-chips.mjs +54 -0
  51. package/fesm2022/elementar-rt-components-chips.mjs.map +1 -0
  52. package/fesm2022/elementar-rt-components-clipboard-copy.mjs +115 -0
  53. package/fesm2022/elementar-rt-components-clipboard-copy.mjs.map +1 -0
  54. package/fesm2022/elementar-rt-components-code-highlighter.mjs +19 -6
  55. package/fesm2022/elementar-rt-components-code-highlighter.mjs.map +1 -1
  56. package/fesm2022/elementar-rt-components-color-picker.mjs +27 -27
  57. package/fesm2022/elementar-rt-components-color-picker.mjs.map +1 -1
  58. package/fesm2022/elementar-rt-components-color-scheme.mjs +11 -11
  59. package/fesm2022/elementar-rt-components-color-scheme.mjs.map +1 -1
  60. package/fesm2022/elementar-rt-components-combobox.mjs +70 -0
  61. package/fesm2022/elementar-rt-components-combobox.mjs.map +1 -0
  62. package/fesm2022/elementar-rt-components-command-bar.mjs +12 -12
  63. package/fesm2022/elementar-rt-components-command-bar.mjs.map +1 -1
  64. package/fesm2022/elementar-rt-components-comment-editor.mjs +82 -82
  65. package/fesm2022/elementar-rt-components-comment-editor.mjs.map +1 -1
  66. package/fesm2022/elementar-rt-components-comparison-slider.mjs +10 -10
  67. package/fesm2022/elementar-rt-components-comparison-slider.mjs.map +1 -1
  68. package/fesm2022/elementar-rt-components-confirm.mjs +7 -7
  69. package/fesm2022/elementar-rt-components-confirm.mjs.map +1 -1
  70. package/fesm2022/elementar-rt-components-content-editor.mjs +121 -0
  71. package/fesm2022/elementar-rt-components-content-editor.mjs.map +1 -0
  72. package/fesm2022/elementar-rt-components-content-fade.mjs +4 -4
  73. package/fesm2022/elementar-rt-components-content-fade.mjs.map +1 -1
  74. package/fesm2022/elementar-rt-components-cookie-popup.mjs +13 -13
  75. package/fesm2022/elementar-rt-components-cookie-popup.mjs.map +1 -1
  76. package/fesm2022/elementar-rt-components-core.mjs +64 -64
  77. package/fesm2022/elementar-rt-components-core.mjs.map +1 -1
  78. package/fesm2022/elementar-rt-components-country-select.mjs +5 -5
  79. package/fesm2022/elementar-rt-components-country-select.mjs.map +1 -1
  80. package/fesm2022/elementar-rt-components-crop.mjs +4 -4
  81. package/fesm2022/elementar-rt-components-crop.mjs.map +1 -1
  82. package/fesm2022/elementar-rt-components-currency-select.mjs +5 -5
  83. package/fesm2022/elementar-rt-components-currency-select.mjs.map +1 -1
  84. package/fesm2022/elementar-rt-components-dashboard.mjs +9 -9
  85. package/fesm2022/elementar-rt-components-dashboard.mjs.map +1 -1
  86. package/fesm2022/elementar-rt-components-data-grid.mjs +120 -0
  87. package/fesm2022/elementar-rt-components-data-grid.mjs.map +1 -0
  88. package/fesm2022/elementar-rt-components-data-view.mjs +17 -17
  89. package/fesm2022/elementar-rt-components-data-view.mjs.map +1 -1
  90. package/fesm2022/elementar-rt-components-date-format-select.mjs +5 -5
  91. package/fesm2022/elementar-rt-components-date-format-select.mjs.map +1 -1
  92. package/fesm2022/elementar-rt-components-datepicker.mjs +81 -0
  93. package/fesm2022/elementar-rt-components-datepicker.mjs.map +1 -0
  94. package/fesm2022/elementar-rt-components-dialog.mjs +97 -0
  95. package/fesm2022/elementar-rt-components-dialog.mjs.map +1 -0
  96. package/fesm2022/elementar-rt-components-digit-roller.mjs +41 -0
  97. package/fesm2022/elementar-rt-components-digit-roller.mjs.map +1 -0
  98. package/fesm2022/elementar-rt-components-divider.mjs +8 -8
  99. package/fesm2022/elementar-rt-components-divider.mjs.map +1 -1
  100. package/fesm2022/elementar-rt-components-drawer.mjs +8 -8
  101. package/fesm2022/elementar-rt-components-drawer.mjs.map +1 -1
  102. package/fesm2022/elementar-rt-components-emoji-picker.mjs +7 -7
  103. package/fesm2022/elementar-rt-components-emoji-picker.mjs.map +1 -1
  104. package/fesm2022/elementar-rt-components-empty-state.mjs +35 -0
  105. package/fesm2022/elementar-rt-components-empty-state.mjs.map +1 -0
  106. package/fesm2022/elementar-rt-components-expand.mjs +4 -4
  107. package/fesm2022/elementar-rt-components-expand.mjs.map +1 -1
  108. package/fesm2022/elementar-rt-components-expansion-panel.mjs +32 -0
  109. package/fesm2022/elementar-rt-components-expansion-panel.mjs.map +1 -0
  110. package/fesm2022/elementar-rt-components-filter-builder.mjs +13 -13
  111. package/fesm2022/elementar-rt-components-filter-builder.mjs.map +1 -1
  112. package/fesm2022/elementar-rt-components-filter-select.mjs +126 -0
  113. package/fesm2022/elementar-rt-components-filter-select.mjs.map +1 -0
  114. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs +123 -0
  115. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs.map +1 -0
  116. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs +22 -0
  117. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs.map +1 -0
  118. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs +40 -0
  119. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs.map +1 -0
  120. package/fesm2022/{elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs → elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs} +5 -5
  121. package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs.map +1 -0
  122. package/fesm2022/{elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs → elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs} +5 -5
  123. package/fesm2022/elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs.map +1 -0
  124. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs +33 -0
  125. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs.map +1 -0
  126. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs +38 -0
  127. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs.map +1 -0
  128. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs +39 -0
  129. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs.map +1 -0
  130. package/fesm2022/{elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs → elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs} +5 -5
  131. package/fesm2022/elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs.map +1 -0
  132. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs +37 -0
  133. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs.map +1 -0
  134. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs +35 -0
  135. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs.map +1 -0
  136. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs +22 -0
  137. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs.map +1 -0
  138. package/fesm2022/elementar-rt-components-form-renderer.mjs +29 -29
  139. package/fesm2022/elementar-rt-components-form-renderer.mjs.map +1 -1
  140. package/fesm2022/elementar-rt-components-gauge.mjs +8 -8
  141. package/fesm2022/elementar-rt-components-gauge.mjs.map +1 -1
  142. package/fesm2022/elementar-rt-components-grid.mjs +37 -0
  143. package/fesm2022/elementar-rt-components-grid.mjs.map +1 -0
  144. package/fesm2022/elementar-rt-components-guided-tour.mjs +161 -0
  145. package/fesm2022/elementar-rt-components-guided-tour.mjs.map +1 -0
  146. package/fesm2022/elementar-rt-components-headless-stepper.mjs +72 -0
  147. package/fesm2022/elementar-rt-components-headless-stepper.mjs.map +1 -0
  148. package/fesm2022/elementar-rt-components-icon.mjs +4 -4
  149. package/fesm2022/elementar-rt-components-icon.mjs.map +1 -1
  150. package/fesm2022/elementar-rt-components-image-placeholder.mjs +30 -0
  151. package/fesm2022/elementar-rt-components-image-placeholder.mjs.map +1 -0
  152. package/fesm2022/elementar-rt-components-image-resizer.mjs +10 -10
  153. package/fesm2022/elementar-rt-components-image-resizer.mjs.map +1 -1
  154. package/fesm2022/elementar-rt-components-image-viewer.mjs +19 -19
  155. package/fesm2022/elementar-rt-components-image-viewer.mjs.map +1 -1
  156. package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs +97 -0
  157. package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs.map +1 -0
  158. package/fesm2022/elementar-rt-components-incidents.mjs +49 -49
  159. package/fesm2022/elementar-rt-components-incidents.mjs.map +1 -1
  160. package/fesm2022/elementar-rt-components-inline-text-edit.mjs +4 -4
  161. package/fesm2022/elementar-rt-components-inline-text-edit.mjs.map +1 -1
  162. package/fesm2022/elementar-rt-components-input-mask.mjs +9 -9
  163. package/fesm2022/elementar-rt-components-input-mask.mjs.map +1 -1
  164. package/fesm2022/elementar-rt-components-input-validator.mjs.map +1 -1
  165. package/fesm2022/elementar-rt-components-kanban-board.mjs +7 -7
  166. package/fesm2022/elementar-rt-components-kanban-board.mjs.map +1 -1
  167. package/fesm2022/elementar-rt-components-keyboard.mjs +63 -0
  168. package/fesm2022/elementar-rt-components-keyboard.mjs.map +1 -0
  169. package/fesm2022/elementar-rt-components-layout.mjs +32 -32
  170. package/fesm2022/elementar-rt-components-layout.mjs.map +1 -1
  171. package/fesm2022/elementar-rt-components-list.mjs +43 -0
  172. package/fesm2022/elementar-rt-components-list.mjs.map +1 -0
  173. package/fesm2022/elementar-rt-components-logo.mjs +12 -12
  174. package/fesm2022/elementar-rt-components-logo.mjs.map +1 -1
  175. package/fesm2022/elementar-rt-components-marquee.mjs +7 -7
  176. package/fesm2022/elementar-rt-components-marquee.mjs.map +1 -1
  177. package/fesm2022/elementar-rt-components-menu.mjs +94 -0
  178. package/fesm2022/elementar-rt-components-menu.mjs.map +1 -0
  179. package/fesm2022/elementar-rt-components-micro-chart.mjs +24 -24
  180. package/fesm2022/elementar-rt-components-micro-chart.mjs.map +1 -1
  181. package/fesm2022/elementar-rt-components-multi-select.mjs +66 -0
  182. package/fesm2022/elementar-rt-components-multi-select.mjs.map +1 -0
  183. package/fesm2022/elementar-rt-components-navigation.mjs +39 -39
  184. package/fesm2022/elementar-rt-components-navigation.mjs.map +1 -1
  185. package/fesm2022/elementar-rt-components-notifications.mjs +40 -40
  186. package/fesm2022/elementar-rt-components-notifications.mjs.map +1 -1
  187. package/fesm2022/elementar-rt-components-number-input.mjs +17 -17
  188. package/fesm2022/elementar-rt-components-number-input.mjs.map +1 -1
  189. package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs +4 -4
  190. package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs.map +1 -1
  191. package/fesm2022/elementar-rt-components-overlay.mjs.map +1 -1
  192. package/fesm2022/elementar-rt-components-page-loading-bar.mjs +4 -4
  193. package/fesm2022/elementar-rt-components-page-loading-bar.mjs.map +1 -1
  194. package/fesm2022/elementar-rt-components-paginator.mjs +50 -0
  195. package/fesm2022/elementar-rt-components-paginator.mjs.map +1 -0
  196. package/fesm2022/elementar-rt-components-panel.mjs +24 -24
  197. package/fesm2022/elementar-rt-components-panel.mjs.map +1 -1
  198. package/fesm2022/elementar-rt-components-password-strength.mjs +13 -13
  199. package/fesm2022/elementar-rt-components-password-strength.mjs.map +1 -1
  200. package/fesm2022/elementar-rt-components-phone-input.mjs +11 -11
  201. package/fesm2022/elementar-rt-components-phone-input.mjs.map +1 -1
  202. package/fesm2022/elementar-rt-components-pin-input.mjs +8 -8
  203. package/fesm2022/elementar-rt-components-pin-input.mjs.map +1 -1
  204. package/fesm2022/elementar-rt-components-popover.mjs +10 -10
  205. package/fesm2022/elementar-rt-components-popover.mjs.map +1 -1
  206. package/fesm2022/elementar-rt-components-progress-bar.mjs +32 -0
  207. package/fesm2022/elementar-rt-components-progress-bar.mjs.map +1 -0
  208. package/fesm2022/elementar-rt-components-progress-spinner.mjs +94 -0
  209. package/fesm2022/elementar-rt-components-progress-spinner.mjs.map +1 -0
  210. package/fesm2022/elementar-rt-components-radio-card.mjs +17 -17
  211. package/fesm2022/elementar-rt-components-radio-card.mjs.map +1 -1
  212. package/fesm2022/elementar-rt-components-rail-nav.mjs +12 -12
  213. package/fesm2022/elementar-rt-components-rail-nav.mjs.map +1 -1
  214. package/fesm2022/elementar-rt-components-rating.mjs +84 -0
  215. package/fesm2022/elementar-rt-components-rating.mjs.map +1 -0
  216. package/fesm2022/elementar-rt-components-resizable-container.mjs +4 -4
  217. package/fesm2022/elementar-rt-components-resizable-container.mjs.map +1 -1
  218. package/fesm2022/elementar-rt-components-screen-loader.mjs +4 -4
  219. package/fesm2022/elementar-rt-components-screen-loader.mjs.map +1 -1
  220. package/fesm2022/elementar-rt-components-scroll-spy.mjs +16 -16
  221. package/fesm2022/elementar-rt-components-scroll-spy.mjs.map +1 -1
  222. package/fesm2022/elementar-rt-components-segmented.mjs +12 -12
  223. package/fesm2022/elementar-rt-components-segmented.mjs.map +1 -1
  224. package/fesm2022/elementar-rt-components-side-panel.mjs +8 -8
  225. package/fesm2022/elementar-rt-components-side-panel.mjs.map +1 -1
  226. package/fesm2022/elementar-rt-components-sidebar.mjs +61 -61
  227. package/fesm2022/elementar-rt-components-sidebar.mjs.map +1 -1
  228. package/fesm2022/elementar-rt-components-sidenav.mjs +72 -0
  229. package/fesm2022/elementar-rt-components-sidenav.mjs.map +1 -0
  230. package/fesm2022/elementar-rt-components-signature-pad.mjs +4 -4
  231. package/fesm2022/elementar-rt-components-signature-pad.mjs.map +1 -1
  232. package/fesm2022/elementar-rt-components-skeleton.mjs +16 -16
  233. package/fesm2022/elementar-rt-components-skeleton.mjs.map +1 -1
  234. package/fesm2022/elementar-rt-components-slider.mjs +64 -0
  235. package/fesm2022/elementar-rt-components-slider.mjs.map +1 -0
  236. package/fesm2022/elementar-rt-components-snackbar.mjs +81 -0
  237. package/fesm2022/elementar-rt-components-snackbar.mjs.map +1 -0
  238. package/fesm2022/elementar-rt-components-sort.mjs +69 -0
  239. package/fesm2022/elementar-rt-components-sort.mjs.map +1 -0
  240. package/fesm2022/elementar-rt-components-splash-screen.mjs +4 -4
  241. package/fesm2022/elementar-rt-components-splash-screen.mjs.map +1 -1
  242. package/fesm2022/elementar-rt-components-split-pane.mjs +70 -0
  243. package/fesm2022/elementar-rt-components-split-pane.mjs.map +1 -0
  244. package/fesm2022/elementar-rt-components-stat-card.mjs +27 -0
  245. package/fesm2022/elementar-rt-components-stat-card.mjs.map +1 -0
  246. package/fesm2022/elementar-rt-components-step-tracker.mjs +30 -0
  247. package/fesm2022/elementar-rt-components-step-tracker.mjs.map +1 -0
  248. package/fesm2022/elementar-rt-components-stepper.mjs +6 -6
  249. package/fesm2022/elementar-rt-components-stepper.mjs.map +1 -1
  250. package/fesm2022/elementar-rt-components-suggestions.mjs +18 -18
  251. package/fesm2022/elementar-rt-components-suggestions.mjs.map +1 -1
  252. package/fesm2022/elementar-rt-components-tab-panel.mjs +48 -48
  253. package/fesm2022/elementar-rt-components-tab-panel.mjs.map +1 -1
  254. package/fesm2022/elementar-rt-components-table.mjs +84 -0
  255. package/fesm2022/elementar-rt-components-table.mjs.map +1 -0
  256. package/fesm2022/elementar-rt-components-tabs.mjs +59 -0
  257. package/fesm2022/elementar-rt-components-tabs.mjs.map +1 -0
  258. package/fesm2022/elementar-rt-components-tag.mjs +28 -0
  259. package/fesm2022/elementar-rt-components-tag.mjs.map +1 -0
  260. package/fesm2022/elementar-rt-components-text-editor.mjs +85 -85
  261. package/fesm2022/elementar-rt-components-text-editor.mjs.map +1 -1
  262. package/fesm2022/elementar-rt-components-thumbnail-maker.mjs +7 -7
  263. package/fesm2022/elementar-rt-components-thumbnail-maker.mjs.map +1 -1
  264. package/fesm2022/elementar-rt-components-tiles.mjs +35 -0
  265. package/fesm2022/elementar-rt-components-tiles.mjs.map +1 -0
  266. package/fesm2022/elementar-rt-components-timeline.mjs +39 -39
  267. package/fesm2022/elementar-rt-components-timeline.mjs.map +1 -1
  268. package/fesm2022/elementar-rt-components-timepicker.mjs +75 -0
  269. package/fesm2022/elementar-rt-components-timepicker.mjs.map +1 -0
  270. package/fesm2022/elementar-rt-components-timezone-select.mjs +8 -8
  271. package/fesm2022/elementar-rt-components-timezone-select.mjs.map +1 -1
  272. package/fesm2022/elementar-rt-components-toast.mjs +98 -0
  273. package/fesm2022/elementar-rt-components-toast.mjs.map +1 -0
  274. package/fesm2022/elementar-rt-components-toolbar.mjs +24 -0
  275. package/fesm2022/elementar-rt-components-toolbar.mjs.map +1 -0
  276. package/fesm2022/elementar-rt-components-tooltip.mjs +119 -0
  277. package/fesm2022/elementar-rt-components-tooltip.mjs.map +1 -0
  278. package/fesm2022/elementar-rt-components-tree.mjs +77 -0
  279. package/fesm2022/elementar-rt-components-tree.mjs.map +1 -0
  280. package/fesm2022/elementar-rt-components-upload.mjs +57 -57
  281. package/fesm2022/elementar-rt-components-upload.mjs.map +1 -1
  282. package/fesm2022/elementar-rt-components-video-player.mjs +144 -0
  283. package/fesm2022/elementar-rt-components-video-player.mjs.map +1 -0
  284. package/fesm2022/elementar-rt-components-video-viewer.mjs +98 -0
  285. package/fesm2022/elementar-rt-components-video-viewer.mjs.map +1 -0
  286. package/fesm2022/elementar-rt-components.mjs.map +1 -1
  287. package/filter-select/index.d.ts +40 -0
  288. package/grid/index.d.ts +24 -0
  289. package/guided-tour/index.d.ts +45 -0
  290. package/headless-stepper/index.d.ts +30 -0
  291. package/image-placeholder/index.d.ts +18 -0
  292. package/image-zoom-viewer/index.d.ts +33 -0
  293. package/keyboard/index.d.ts +13 -0
  294. package/list/index.d.ts +18 -0
  295. package/menu/index.d.ts +38 -0
  296. package/multi-select/index.d.ts +36 -0
  297. package/package.json +245 -53
  298. package/paginator/index.d.ts +26 -0
  299. package/progress-bar/index.d.ts +17 -0
  300. package/progress-spinner/index.d.ts +19 -0
  301. package/rating/index.d.ts +30 -0
  302. package/sidenav/index.d.ts +31 -0
  303. package/slider/index.d.ts +26 -0
  304. package/snackbar/index.d.ts +36 -0
  305. package/sort/index.d.ts +27 -0
  306. package/split-pane/index.d.ts +25 -0
  307. package/stat-card/index.d.ts +16 -0
  308. package/step-tracker/index.d.ts +21 -0
  309. package/styles/_common.scss +777 -776
  310. package/styles/themes/cyan-orange.scss +41 -41
  311. package/styles/themes/default.scss +5 -5
  312. package/styles/themes/magenta-violet.scss +41 -41
  313. package/styles/themes/rose-red.scss +41 -41
  314. package/table/index.d.ts +44 -0
  315. package/tabs/index.d.ts +26 -0
  316. package/tag/index.d.ts +17 -0
  317. package/tiles/index.d.ts +14 -0
  318. package/timepicker/index.d.ts +29 -0
  319. package/toast/index.d.ts +48 -0
  320. package/toolbar/index.d.ts +10 -0
  321. package/tooltip/index.d.ts +30 -0
  322. package/tree/index.d.ts +42 -0
  323. package/video-player/index.d.ts +49 -0
  324. package/video-viewer/index.d.ts +33 -0
  325. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs +0 -123
  326. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs.map +0 -1
  327. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs +0 -22
  328. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs.map +0 -1
  329. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs +0 -40
  330. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs.map +0 -1
  331. package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs.map +0 -1
  332. package/fesm2022/elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs.map +0 -1
  333. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs +0 -33
  334. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs.map +0 -1
  335. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs +0 -38
  336. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs.map +0 -1
  337. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs +0 -39
  338. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs.map +0 -1
  339. package/fesm2022/elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs.map +0 -1
  340. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs +0 -37
  341. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs.map +0 -1
  342. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs +0 -35
  343. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs.map +0 -1
  344. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs +0 -22
  345. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs.map +0 -1
@@ -0,0 +1,144 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, booleanAttribute, viewChild, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+
4
+ class VideoPlayerComponent {
5
+ src = input('', ...(ngDevMode ? [{ debugName: "src" }] : []));
6
+ poster = input('', ...(ngDevMode ? [{ debugName: "poster" }] : []));
7
+ autoplay = input(false, ...(ngDevMode ? [{ debugName: "autoplay", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
8
+ loop = input(false, ...(ngDevMode ? [{ debugName: "loop", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
9
+ chapters = input([], ...(ngDevMode ? [{ debugName: "chapters" }] : []));
10
+ _videoEl = viewChild('videoEl', ...(ngDevMode ? [{ debugName: "_videoEl" }] : []));
11
+ _playing = signal(false, ...(ngDevMode ? [{ debugName: "_playing" }] : []));
12
+ _muted = signal(false, ...(ngDevMode ? [{ debugName: "_muted" }] : []));
13
+ _volume = signal(1, ...(ngDevMode ? [{ debugName: "_volume" }] : []));
14
+ _currentTime = signal(0, ...(ngDevMode ? [{ debugName: "_currentTime" }] : []));
15
+ _duration = signal(0, ...(ngDevMode ? [{ debugName: "_duration" }] : []));
16
+ _buffered = signal(0, ...(ngDevMode ? [{ debugName: "_buffered" }] : []));
17
+ _speed = signal(1, ...(ngDevMode ? [{ debugName: "_speed" }] : []));
18
+ _showSpeedMenu = signal(false, ...(ngDevMode ? [{ debugName: "_showSpeedMenu" }] : []));
19
+ _fullscreen = signal(false, ...(ngDevMode ? [{ debugName: "_fullscreen" }] : []));
20
+ _progress = computed(() => this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_progress" }] : []));
21
+ _bufferedPct = computed(() => this._duration() > 0 ? (this._buffered() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_bufferedPct" }] : []));
22
+ _currentChapter = computed(() => {
23
+ const t = this._currentTime();
24
+ const chapters = [...this.chapters()].sort((a, b) => b.time - a.time);
25
+ return chapters.find(c => t >= c.time)?.label ?? '';
26
+ }, ...(ngDevMode ? [{ debugName: "_currentChapter" }] : []));
27
+ _speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
28
+ ngAfterViewInit() {
29
+ const v = this._videoEl()?.nativeElement;
30
+ if (v && this.autoplay()) {
31
+ v.play().catch(() => { });
32
+ }
33
+ }
34
+ ngOnDestroy() { }
35
+ _togglePlay() {
36
+ const v = this._video();
37
+ if (!v)
38
+ return;
39
+ if (this._playing()) {
40
+ v.pause();
41
+ }
42
+ else {
43
+ v.play().catch(() => { });
44
+ }
45
+ }
46
+ _toggleMute() {
47
+ const v = this._video();
48
+ if (!v)
49
+ return;
50
+ v.muted = !v.muted;
51
+ this._muted.set(v.muted);
52
+ }
53
+ _onVolumeChange(e) {
54
+ const v = this._video();
55
+ if (!v)
56
+ return;
57
+ const vol = parseFloat(e.target.value);
58
+ v.volume = vol;
59
+ v.muted = vol === 0;
60
+ this._volume.set(vol);
61
+ this._muted.set(v.muted);
62
+ }
63
+ _onSeek(e) {
64
+ const v = this._video();
65
+ if (!v)
66
+ return;
67
+ const pct = parseFloat(e.target.value);
68
+ v.currentTime = (pct / 100) * this._duration();
69
+ }
70
+ _setSpeed(s) {
71
+ const v = this._video();
72
+ if (!v)
73
+ return;
74
+ v.playbackRate = s;
75
+ this._speed.set(s);
76
+ this._showSpeedMenu.set(false);
77
+ }
78
+ _togglePiP() {
79
+ const v = this._video();
80
+ if (!v)
81
+ return;
82
+ if (document.pictureInPictureElement) {
83
+ document.exitPictureInPicture().catch(() => { });
84
+ }
85
+ else {
86
+ v.requestPictureInPicture().catch(() => { });
87
+ }
88
+ }
89
+ _toggleFullscreen() {
90
+ const el = document.querySelector('.vp-container');
91
+ if (!el)
92
+ return;
93
+ if (document.fullscreenElement) {
94
+ document.exitFullscreen().then(() => this._fullscreen.set(false)).catch(() => { });
95
+ }
96
+ else {
97
+ el.requestFullscreen().then(() => this._fullscreen.set(true)).catch(() => { });
98
+ }
99
+ }
100
+ _onTimeUpdate() {
101
+ const v = this._video();
102
+ if (!v)
103
+ return;
104
+ this._currentTime.set(v.currentTime);
105
+ if (v.buffered.length > 0)
106
+ this._buffered.set(v.buffered.end(v.buffered.length - 1));
107
+ }
108
+ _onPlay() { this._playing.set(true); }
109
+ _onPause() { this._playing.set(false); }
110
+ _onLoadedMetadata() {
111
+ const v = this._video();
112
+ if (v)
113
+ this._duration.set(v.duration);
114
+ }
115
+ _formatTime(s) {
116
+ if (!s || isNaN(s))
117
+ return '0:00';
118
+ const h = Math.floor(s / 3600);
119
+ const m = Math.floor((s % 3600) / 60);
120
+ const sec = Math.floor(s % 60);
121
+ if (h > 0)
122
+ return `${h}:${m.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`;
123
+ return `${m}:${sec.toString().padStart(2, '0')}`;
124
+ }
125
+ _chapterOffset(chapter) {
126
+ return this._duration() > 0 ? (chapter.time / this._duration()) * 100 : 0;
127
+ }
128
+ _video() {
129
+ return this._videoEl()?.nativeElement ?? null;
130
+ }
131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VideoPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
132
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VideoPlayerComponent, isStandalone: true, selector: "emr-video-player", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, poster: { classPropertyName: "poster", publicName: "poster", isSignal: true, isRequired: false, transformFunction: null }, autoplay: { classPropertyName: "autoplay", publicName: "autoplay", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, chapters: { classPropertyName: "chapters", publicName: "chapters", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_videoEl", first: true, predicate: ["videoEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}\u00D7\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}\u00D7</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.vp-container{position:relative;background:#000;border-radius:.75rem;overflow:hidden;aspect-ratio:16/9}.vp-container:hover .vp-controls{opacity:1}.vp-video{width:100%;height:100%;object-fit:contain;cursor:pointer;display:block}.vp-chapter-badge{position:absolute;top:calc(var(--spacing, .25rem) * 3);left:calc(var(--spacing, .25rem) * 3);background:#0009;color:#fff;font-size:.75rem;font-weight:600;padding:calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);border-radius:9999px}.vp-controls{position:absolute;bottom:0;left:0;right:0;padding:calc(var(--spacing, .25rem) * 4) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 2);background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .2s ease;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.vp-progress-wrap{position:relative;height:calc(var(--spacing, .25rem) * 4);display:flex;align-items:center}.vp-buffered{position:absolute;left:0;height:3px;background:#ffffff4d;border-radius:9999px;pointer-events:none;z-index:0}.vp-seek{width:100%;position:relative;z-index:1;accent-color:var(--color-primary);cursor:pointer;background:transparent;height:3px}.vp-chapter-marker{position:absolute;width:2px;height:calc(var(--spacing, .25rem) * 2.5);background:#fff9;border-radius:1px;z-index:2;pointer-events:none;transform:translate(-50%)}.vp-bar{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.vp-bar-left,.vp-bar-right{display:flex;align-items:center;gap:var(--spacing, .25rem)}.vp-btn{width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#fff;border-radius:.375rem}.vp-btn:hover{background:#ffffff26}.vp-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}.vp-volume{width:calc(var(--spacing, .25rem) * 20);accent-color:var(--color-primary);cursor:pointer}.vp-time{font-size:.75rem;color:#ffffffd9;white-space:nowrap;font-variant-numeric:tabular-nums}.vp-speed-wrap{position:relative}.vp-speed-btn{font-size:.75rem;font-weight:700;width:auto;padding:0 calc(var(--spacing, .25rem) * 1.5);min-width:calc(var(--spacing, .25rem) * 9)}.vp-speed-menu{position:absolute;bottom:calc(100% + calc(var(--spacing, .25rem) * 2));right:0;background:var(--color-surface-container-high);border:1px solid var(--color-outline-variant);border-radius:.5rem;overflow:hidden;display:flex;flex-direction:column;min-width:calc(var(--spacing, .25rem) * 16);box-shadow:0 4px 16px #0000004d}.vp-speed-opt{font-size:.875rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 3);background:transparent;border:none;cursor:pointer;text-align:center;color:var(--color-on-surface)}.vp-speed-opt:hover{background:var(--color-surface-container)}.vp-speed-opt[data-active]{color:var(--color-primary);font-weight:600}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VideoPlayerComponent, decorators: [{
135
+ type: Component,
136
+ args: [{ selector: 'emr-video-player', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}\u00D7\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}\u00D7</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.vp-container{position:relative;background:#000;border-radius:.75rem;overflow:hidden;aspect-ratio:16/9}.vp-container:hover .vp-controls{opacity:1}.vp-video{width:100%;height:100%;object-fit:contain;cursor:pointer;display:block}.vp-chapter-badge{position:absolute;top:calc(var(--spacing, .25rem) * 3);left:calc(var(--spacing, .25rem) * 3);background:#0009;color:#fff;font-size:.75rem;font-weight:600;padding:calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);border-radius:9999px}.vp-controls{position:absolute;bottom:0;left:0;right:0;padding:calc(var(--spacing, .25rem) * 4) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 2);background:linear-gradient(transparent,#000000b3);opacity:0;transition:opacity .2s ease;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.vp-progress-wrap{position:relative;height:calc(var(--spacing, .25rem) * 4);display:flex;align-items:center}.vp-buffered{position:absolute;left:0;height:3px;background:#ffffff4d;border-radius:9999px;pointer-events:none;z-index:0}.vp-seek{width:100%;position:relative;z-index:1;accent-color:var(--color-primary);cursor:pointer;background:transparent;height:3px}.vp-chapter-marker{position:absolute;width:2px;height:calc(var(--spacing, .25rem) * 2.5);background:#fff9;border-radius:1px;z-index:2;pointer-events:none;transform:translate(-50%)}.vp-bar{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.vp-bar-left,.vp-bar-right{display:flex;align-items:center;gap:var(--spacing, .25rem)}.vp-btn{width:calc(var(--spacing, .25rem) * 8);height:calc(var(--spacing, .25rem) * 8);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#fff;border-radius:.375rem}.vp-btn:hover{background:#ffffff26}.vp-btn svg{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4)}.vp-volume{width:calc(var(--spacing, .25rem) * 20);accent-color:var(--color-primary);cursor:pointer}.vp-time{font-size:.75rem;color:#ffffffd9;white-space:nowrap;font-variant-numeric:tabular-nums}.vp-speed-wrap{position:relative}.vp-speed-btn{font-size:.75rem;font-weight:700;width:auto;padding:0 calc(var(--spacing, .25rem) * 1.5);min-width:calc(var(--spacing, .25rem) * 9)}.vp-speed-menu{position:absolute;bottom:calc(100% + calc(var(--spacing, .25rem) * 2));right:0;background:var(--color-surface-container-high);border:1px solid var(--color-outline-variant);border-radius:.5rem;overflow:hidden;display:flex;flex-direction:column;min-width:calc(var(--spacing, .25rem) * 16);box-shadow:0 4px 16px #0000004d}.vp-speed-opt{font-size:.875rem;padding:calc(var(--spacing, .25rem) * 1.5) calc(var(--spacing, .25rem) * 3);background:transparent;border:none;cursor:pointer;text-align:center;color:var(--color-on-surface)}.vp-speed-opt:hover{background:var(--color-surface-container)}.vp-speed-opt[data-active]{color:var(--color-primary);font-weight:600}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
137
+ }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], poster: [{ type: i0.Input, args: [{ isSignal: true, alias: "poster", required: false }] }], autoplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoplay", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], chapters: [{ type: i0.Input, args: [{ isSignal: true, alias: "chapters", required: false }] }], _videoEl: [{ type: i0.ViewChild, args: ['videoEl', { isSignal: true }] }] } });
138
+
139
+ /**
140
+ * Generated bundle index. Do not edit.
141
+ */
142
+
143
+ export { VideoPlayerComponent };
144
+ //# sourceMappingURL=elementar-rt-components-video-player.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementar-rt-components-video-player.mjs","sources":["../../../projects/components/video-player/src/video-player/video-player.component.ts","../../../projects/components/video-player/src/video-player/video-player.component.html","../../../projects/components/video-player/elementar-rt-components-video-player.ts"],"sourcesContent":["import {\n Component, input, signal, computed, ChangeDetectionStrategy,\n booleanAttribute, viewChild, ElementRef, AfterViewInit, OnDestroy\n} from '@angular/core';\n\nexport interface VideoChapter {\n time: number;\n label: string;\n}\n\n@Component({\n selector: 'emr-video-player',\n standalone: true,\n templateUrl: './video-player.component.html',\n styleUrl: './video-player.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VideoPlayerComponent implements AfterViewInit, OnDestroy {\n src = input('');\n poster = input('');\n autoplay = input(false, { transform: booleanAttribute });\n loop = input(false, { transform: booleanAttribute });\n chapters = input<VideoChapter[]>([]);\n\n protected _videoEl = viewChild<ElementRef<HTMLVideoElement>>('videoEl');\n\n protected _playing = signal(false);\n protected _muted = signal(false);\n protected _volume = signal(1);\n protected _currentTime = signal(0);\n protected _duration = signal(0);\n protected _buffered = signal(0);\n protected _speed = signal(1);\n protected _showSpeedMenu = signal(false);\n protected _fullscreen = signal(false);\n\n protected _progress = computed(() =>\n this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0\n );\n\n protected _bufferedPct = computed(() =>\n this._duration() > 0 ? (this._buffered() / this._duration()) * 100 : 0\n );\n\n protected _currentChapter = computed(() => {\n const t = this._currentTime();\n const chapters = [...this.chapters()].sort((a, b) => b.time - a.time);\n return chapters.find(c => t >= c.time)?.label ?? '';\n });\n\n protected readonly _speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n\n ngAfterViewInit(): void {\n const v = this._videoEl()?.nativeElement;\n if (v && this.autoplay()) { v.play().catch(() => {}); }\n }\n\n ngOnDestroy(): void {}\n\n protected _togglePlay(): void {\n const v = this._video();\n if (!v) return;\n if (this._playing()) { v.pause(); } else { v.play().catch(() => {}); }\n }\n\n protected _toggleMute(): void {\n const v = this._video();\n if (!v) return;\n v.muted = !v.muted;\n this._muted.set(v.muted);\n }\n\n protected _onVolumeChange(e: Event): void {\n const v = this._video();\n if (!v) return;\n const vol = parseFloat((e.target as HTMLInputElement).value);\n v.volume = vol;\n v.muted = vol === 0;\n this._volume.set(vol);\n this._muted.set(v.muted);\n }\n\n protected _onSeek(e: Event): void {\n const v = this._video();\n if (!v) return;\n const pct = parseFloat((e.target as HTMLInputElement).value);\n v.currentTime = (pct / 100) * this._duration();\n }\n\n protected _setSpeed(s: number): void {\n const v = this._video();\n if (!v) return;\n v.playbackRate = s;\n this._speed.set(s);\n this._showSpeedMenu.set(false);\n }\n\n protected _togglePiP(): void {\n const v = this._video();\n if (!v) return;\n if (document.pictureInPictureElement) {\n document.exitPictureInPicture().catch(() => {});\n } else {\n v.requestPictureInPicture().catch(() => {});\n }\n }\n\n protected _toggleFullscreen(): void {\n const el = document.querySelector('.vp-container') as HTMLElement;\n if (!el) return;\n if (document.fullscreenElement) {\n document.exitFullscreen().then(() => this._fullscreen.set(false)).catch(() => {});\n } else {\n el.requestFullscreen().then(() => this._fullscreen.set(true)).catch(() => {});\n }\n }\n\n protected _onTimeUpdate(): void {\n const v = this._video();\n if (!v) return;\n this._currentTime.set(v.currentTime);\n if (v.buffered.length > 0) this._buffered.set(v.buffered.end(v.buffered.length - 1));\n }\n\n protected _onPlay(): void { this._playing.set(true); }\n protected _onPause(): void { this._playing.set(false); }\n protected _onLoadedMetadata(): void {\n const v = this._video();\n if (v) this._duration.set(v.duration);\n }\n\n protected _formatTime(s: number): string {\n if (!s || isNaN(s)) return '0:00';\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n const sec = Math.floor(s % 60);\n if (h > 0) return `${h}:${m.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`;\n return `${m}:${sec.toString().padStart(2, '0')}`;\n }\n\n protected _chapterOffset(chapter: VideoChapter): number {\n return this._duration() > 0 ? (chapter.time / this._duration()) * 100 : 0;\n }\n\n private _video(): HTMLVideoElement | null {\n return this._videoEl()?.nativeElement ?? null;\n }\n}\n","<div class=\"vp-container\">\n <video\n #videoEl\n class=\"vp-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [loop]=\"loop()\"\n [muted]=\"_muted()\"\n (timeupdate)=\"_onTimeUpdate()\"\n (play)=\"_onPlay()\"\n (pause)=\"_onPause()\"\n (loadedmetadata)=\"_onLoadedMetadata()\"\n (click)=\"_togglePlay()\"\n ></video>\n\n @if (_currentChapter()) {\n <div class=\"vp-chapter-badge\">{{ _currentChapter() }}</div>\n }\n\n <div class=\"vp-controls\">\n <!-- Progress bar -->\n <div class=\"vp-progress-wrap\">\n <div class=\"vp-buffered\" [style.width.%]=\"_bufferedPct()\"></div>\n <input\n type=\"range\" class=\"vp-seek\"\n min=\"0\" max=\"100\" step=\"0.1\"\n [value]=\"_progress()\"\n (input)=\"_onSeek($event)\"\n />\n @for (ch of chapters(); track ch.time) {\n <div class=\"vp-chapter-marker\" [style.left.%]=\"_chapterOffset(ch)\" [title]=\"ch.label\"></div>\n }\n </div>\n\n <!-- Bottom bar -->\n <div class=\"vp-bar\">\n <div class=\"vp-bar-left\">\n <!-- Play/Pause -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePlay()\" [attr.aria-label]=\"_playing() ? 'Pause' : 'Play'\">\n @if (_playing()) {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><polygon points=\"5 3 19 12 5 21 5 3\"/></svg>\n }\n </button>\n\n <!-- Volume -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleMute()\" aria-label=\"Mute\">\n @if (_muted() || _volume() === 0) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"/><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>\n }\n </button>\n <input type=\"range\" class=\"vp-volume\" min=\"0\" max=\"1\" step=\"0.05\" [value]=\"_volume()\" (input)=\"_onVolumeChange($event)\" aria-label=\"Volume\" />\n\n <!-- Time -->\n <span class=\"vp-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n </div>\n\n <div class=\"vp-bar-right\">\n <!-- Speed -->\n <div class=\"vp-speed-wrap\">\n <button type=\"button\" class=\"vp-btn vp-speed-btn\" (click)=\"_showSpeedMenu.set(!_showSpeedMenu())\">\n {{ _speed() }}×\n </button>\n @if (_showSpeedMenu()) {\n <div class=\"vp-speed-menu\">\n @for (s of _speeds; track s) {\n <button type=\"button\" class=\"vp-speed-opt\" [attr.data-active]=\"_speed() === s || null\" (click)=\"_setSpeed(s)\">{{ s }}×</button>\n }\n </div>\n }\n </div>\n\n <!-- PiP -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_togglePiP()\" aria-label=\"Picture in picture\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><rect x=\"12\" y=\"10\" width=\"8\" height=\"6\" rx=\"1\" fill=\"currentColor\"/></svg>\n </button>\n\n <!-- Fullscreen -->\n <button type=\"button\" class=\"vp-btn\" (click)=\"_toggleFullscreen()\" aria-label=\"Fullscreen\">\n @if (_fullscreen()) {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 0 2-2h3M3 16h3a2 2 0 0 0 2 2v3\"/></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"/></svg>\n }\n </button>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, booleanAttribute, output, inject, signal, computed, HostListener, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { DomSanitizer } from '@angular/platform-browser';
4
+
5
+ class VideoViewerComponent {
6
+ src = input('', ...(ngDevMode ? [{ debugName: "src" }] : []));
7
+ poster = input('', ...(ngDevMode ? [{ debugName: "poster" }] : []));
8
+ open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
9
+ closed = output();
10
+ _sanitizer = inject(DomSanitizer);
11
+ _open = signal(false, ...(ngDevMode ? [{ debugName: "_open" }] : []));
12
+ _playing = signal(false, ...(ngDevMode ? [{ debugName: "_playing" }] : []));
13
+ _muted = signal(false, ...(ngDevMode ? [{ debugName: "_muted" }] : []));
14
+ _volume = signal(1, ...(ngDevMode ? [{ debugName: "_volume" }] : []));
15
+ _currentTime = signal(0, ...(ngDevMode ? [{ debugName: "_currentTime" }] : []));
16
+ _duration = signal(0, ...(ngDevMode ? [{ debugName: "_duration" }] : []));
17
+ _progress = computed(() => this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0, ...(ngDevMode ? [{ debugName: "_progress" }] : []));
18
+ _videoType = computed(() => {
19
+ const s = this.src();
20
+ if (/youtube\.com|youtu\.be/.test(s))
21
+ return 'youtube';
22
+ if (/vimeo\.com/.test(s))
23
+ return 'vimeo';
24
+ return 'mp4';
25
+ }, ...(ngDevMode ? [{ debugName: "_videoType" }] : []));
26
+ _embedUrl = computed(() => {
27
+ const s = this.src();
28
+ const type = this._videoType();
29
+ if (type === 'youtube') {
30
+ const id = s.match(/(?:v=|youtu\.be\/)([^&?/]+)/)?.[1];
31
+ if (id)
32
+ return this._sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${id}?autoplay=1`);
33
+ }
34
+ if (type === 'vimeo') {
35
+ const id = s.match(/vimeo\.com\/(\d+)/)?.[1];
36
+ if (id)
37
+ return this._sanitizer.bypassSecurityTrustResourceUrl(`https://player.vimeo.com/video/${id}?autoplay=1`);
38
+ }
39
+ return null;
40
+ }, ...(ngDevMode ? [{ debugName: "_embedUrl" }] : []));
41
+ onKey(e) {
42
+ if (!this._open())
43
+ return;
44
+ if (e.code === 'Space') {
45
+ e.preventDefault();
46
+ this._togglePlay();
47
+ }
48
+ if (e.code === 'Escape')
49
+ this._close();
50
+ if (e.code === 'KeyF')
51
+ this._fullscreen();
52
+ }
53
+ _show() { this._open.set(true); }
54
+ _close() { this._open.set(false); this.closed.emit(); }
55
+ _togglePlay() { this._playing.set(!this._playing()); }
56
+ _toggleMute() { this._muted.set(!this._muted()); }
57
+ _onTimeUpdate(e) {
58
+ const v = e.target;
59
+ this._currentTime.set(v.currentTime);
60
+ this._duration.set(v.duration);
61
+ }
62
+ _onSeek(e) {
63
+ const v = e.target;
64
+ const video = document.querySelector('.vv-video');
65
+ if (video)
66
+ video.currentTime = (parseFloat(v.value) / 100) * this._duration();
67
+ }
68
+ _fullscreen() {
69
+ const el = document.querySelector('.vv-player');
70
+ if (el?.requestFullscreen)
71
+ el.requestFullscreen();
72
+ }
73
+ _formatTime(s) {
74
+ if (!s || isNaN(s))
75
+ return '0:00';
76
+ const m = Math.floor(s / 60);
77
+ const sec = Math.floor(s % 60);
78
+ return `${m}:${sec.toString().padStart(2, '0')}`;
79
+ }
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VideoViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: VideoViewerComponent, isStandalone: true, selector: "emr-video-viewer", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, poster: { classPropertyName: "poster", publicName: "poster", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { listeners: { "keydown": "onKey($event)" }, properties: { "attr.data-open": "_open() || null" } }, ngImport: i0, template: "@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">\u00D7</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { \u23F8 } @else { \u25B6 }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { \uD83D\uDD07 } @else { \uD83D\uDD0A }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">\u26F6</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n", styles: [".vv-backdrop{position:fixed;inset:0;background:#000000d9;z-index:9000;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 4);animation:fadeIn .2s ease}.vv-player{position:relative;width:100%;max-width:calc(var(--spacing, .25rem) * 192);aspect-ratio:16/9;background:#000;border-radius:.75rem;overflow:hidden}.vv-close{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:10;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);display:flex;align-items:center;justify-content:center;background:#0009;border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:1.25rem;line-height:1}.vv-close:hover{background:#000c}.vv-video{width:100%;height:100%;object-fit:contain;cursor:pointer}.vv-embed{width:100%;height:100%;border:none}.vv-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3);background:linear-gradient(transparent,#000000b3)}.vv-btn{background:transparent;border:none;cursor:pointer;color:#fff;font-size:1rem;padding:var(--spacing, .25rem);border-radius:.25rem}.vv-btn:hover{background:#ffffff26}.vv-time{font-size:.75rem;color:#fffc;white-space:nowrap}.vv-seek{flex:1;height:var(--spacing, .25rem);cursor:pointer;accent-color:var(--color-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: VideoViewerComponent, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'emr-video-viewer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
86
+ '[attr.data-open]': '_open() || null',
87
+ }, template: "@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">\u00D7</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { \u23F8 } @else { \u25B6 }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { \uD83D\uDD07 } @else { \uD83D\uDD0A }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">\u26F6</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n", styles: [".vv-backdrop{position:fixed;inset:0;background:#000000d9;z-index:9000;display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 4);animation:fadeIn .2s ease}.vv-player{position:relative;width:100%;max-width:calc(var(--spacing, .25rem) * 192);aspect-ratio:16/9;background:#000;border-radius:.75rem;overflow:hidden}.vv-close{position:absolute;top:calc(var(--spacing, .25rem) * 3);right:calc(var(--spacing, .25rem) * 3);z-index:10;width:calc(var(--spacing, .25rem) * 9);height:calc(var(--spacing, .25rem) * 9);display:flex;align-items:center;justify-content:center;background:#0009;border:none;border-radius:50%;cursor:pointer;color:#fff;font-size:1.25rem;line-height:1}.vv-close:hover{background:#000c}.vv-video{width:100%;height:100%;object-fit:contain;cursor:pointer}.vv-embed{width:100%;height:100%;border:none}.vv-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding:calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3);background:linear-gradient(transparent,#000000b3)}.vv-btn{background:transparent;border:none;cursor:pointer;color:#fff;font-size:1rem;padding:var(--spacing, .25rem);border-radius:.25rem}.vv-btn:hover{background:#ffffff26}.vv-time{font-size:.75rem;color:#fffc;white-space:nowrap}.vv-seek{flex:1;height:var(--spacing, .25rem);cursor:pointer;accent-color:var(--color-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
88
+ }], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], poster: [{ type: i0.Input, args: [{ isSignal: true, alias: "poster", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], onKey: [{
89
+ type: HostListener,
90
+ args: ['keydown', ['$event']]
91
+ }] } });
92
+
93
+ /**
94
+ * Generated bundle index. Do not edit.
95
+ */
96
+
97
+ export { VideoViewerComponent };
98
+ //# sourceMappingURL=elementar-rt-components-video-viewer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementar-rt-components-video-viewer.mjs","sources":["../../../projects/components/video-viewer/src/video-viewer/video-viewer.component.ts","../../../projects/components/video-viewer/src/video-viewer/video-viewer.component.html","../../../projects/components/video-viewer/elementar-rt-components-video-viewer.ts"],"sourcesContent":["import {\n Component, input, signal, computed, ChangeDetectionStrategy,\n booleanAttribute, output, HostListener\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { inject } from '@angular/core';\n\ntype VideoType = 'mp4' | 'youtube' | 'vimeo';\n\n@Component({\n selector: 'emr-video-viewer',\n standalone: true,\n templateUrl: './video-viewer.component.html',\n styleUrl: './video-viewer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-open]': '_open() || null',\n }\n})\nexport class VideoViewerComponent {\n src = input('');\n poster = input('');\n open = input(false, { transform: booleanAttribute });\n\n closed = output<void>();\n\n private _sanitizer = inject(DomSanitizer);\n\n protected _open = signal(false);\n protected _playing = signal(false);\n protected _muted = signal(false);\n protected _volume = signal(1);\n protected _currentTime = signal(0);\n protected _duration = signal(0);\n protected _progress = computed(() =>\n this._duration() > 0 ? (this._currentTime() / this._duration()) * 100 : 0\n );\n\n protected _videoType = computed<VideoType>(() => {\n const s = this.src();\n if (/youtube\\.com|youtu\\.be/.test(s)) return 'youtube';\n if (/vimeo\\.com/.test(s)) return 'vimeo';\n return 'mp4';\n });\n\n protected _embedUrl = computed<SafeResourceUrl | null>(() => {\n const s = this.src();\n const type = this._videoType();\n if (type === 'youtube') {\n const id = s.match(/(?:v=|youtu\\.be\\/)([^&?/]+)/)?.[1];\n if (id) return this._sanitizer.bypassSecurityTrustResourceUrl(`https://www.youtube.com/embed/${id}?autoplay=1`);\n }\n if (type === 'vimeo') {\n const id = s.match(/vimeo\\.com\\/(\\d+)/)?.[1];\n if (id) return this._sanitizer.bypassSecurityTrustResourceUrl(`https://player.vimeo.com/video/${id}?autoplay=1`);\n }\n return null;\n });\n\n @HostListener('keydown', ['$event'])\n onKey(e: KeyboardEvent): void {\n if (!this._open()) return;\n if (e.code === 'Space') { e.preventDefault(); this._togglePlay(); }\n if (e.code === 'Escape') this._close();\n if (e.code === 'KeyF') this._fullscreen();\n }\n\n protected _show(): void { this._open.set(true); }\n protected _close(): void { this._open.set(false); this.closed.emit(); }\n\n protected _togglePlay(): void { this._playing.set(!this._playing()); }\n protected _toggleMute(): void { this._muted.set(!this._muted()); }\n\n protected _onTimeUpdate(e: Event): void {\n const v = e.target as HTMLVideoElement;\n this._currentTime.set(v.currentTime);\n this._duration.set(v.duration);\n }\n\n protected _onSeek(e: Event): void {\n const v = (e.target as HTMLInputElement);\n const video = document.querySelector('.vv-video') as HTMLVideoElement;\n if (video) video.currentTime = (parseFloat(v.value) / 100) * this._duration();\n }\n\n protected _fullscreen(): void {\n const el = document.querySelector('.vv-player') as HTMLElement;\n if (el?.requestFullscreen) el.requestFullscreen();\n }\n\n protected _formatTime(s: number): string {\n if (!s || isNaN(s)) return '0:00';\n const m = Math.floor(s / 60);\n const sec = Math.floor(s % 60);\n return `${m}:${sec.toString().padStart(2, '0')}`;\n }\n}\n","@if (_open()) {\n <div class=\"vv-backdrop\" (click)=\"_close()\">\n <div class=\"vv-player\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"vv-close\" (click)=\"_close()\" aria-label=\"Close\">×</button>\n\n @if (_videoType() === 'mp4') {\n <video\n class=\"vv-video\"\n [src]=\"src()\"\n [poster]=\"poster()\"\n [muted]=\"_muted()\"\n [volume]=\"_volume()\"\n [autoplay]=\"true\"\n (timeupdate)=\"_onTimeUpdate($event)\"\n (play)=\"_playing.set(true)\"\n (pause)=\"_playing.set(false)\"\n (click)=\"_togglePlay()\"\n ></video>\n <div class=\"vv-controls\">\n <button type=\"button\" class=\"vv-btn\" (click)=\"_togglePlay()\">\n @if (_playing()) { ⏸ } @else { ▶ }\n </button>\n <span class=\"vv-time\">{{ _formatTime(_currentTime()) }} / {{ _formatTime(_duration()) }}</span>\n <input\n type=\"range\" class=\"vv-seek\" min=\"0\" max=\"100\"\n [value]=\"_progress()\"\n (change)=\"_onSeek($event)\"\n />\n <button type=\"button\" class=\"vv-btn\" (click)=\"_toggleMute()\">\n @if (_muted()) { 🔇 } @else { 🔊 }\n </button>\n <button type=\"button\" class=\"vv-btn\" (click)=\"_fullscreen()\">⛶</button>\n </div>\n } @else {\n <iframe\n class=\"vv-embed\"\n [src]=\"_embedUrl()\"\n frameborder=\"0\"\n allowfullscreen\n allow=\"autoplay; fullscreen; picture-in-picture\"\n ></iframe>\n }\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"elementar-rt-components.mjs","sources":["../../../projects/components/index.ts","../../../projects/components/elementar-rt-components.ts"],"sourcesContent":["export default null;\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA,YAAe,IAAI;;ACAnB;;AAEG"}
1
+ {"version":3,"file":"elementar-rt-components.mjs","sources":["../../../projects/components/index.ts","../../../projects/components/elementar-rt-components.ts"],"sourcesContent":["export default null;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA,YAAe,IAAI;;ACAnB;;AAEG"}
@@ -0,0 +1,40 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ControlValueAccessor } from '@angular/forms';
3
+
4
+ interface FilterSelectOption {
5
+ value: unknown;
6
+ label: string;
7
+ group?: string;
8
+ }
9
+ declare class FilterSelectComponent implements ControlValueAccessor {
10
+ options: _angular_core.InputSignal<FilterSelectOption[]>;
11
+ placeholder: _angular_core.InputSignal<string>;
12
+ multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
13
+ loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
14
+ clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
15
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
16
+ valueChange: _angular_core.OutputEmitterRef<unknown>;
17
+ protected _open: _angular_core.WritableSignal<boolean>;
18
+ protected _search: _angular_core.WritableSignal<string>;
19
+ private _value;
20
+ protected _selected: _angular_core.Signal<unknown>;
21
+ protected _hasValue: _angular_core.Signal<boolean>;
22
+ protected _displayLabel: _angular_core.Signal<string>;
23
+ protected _filtered: _angular_core.Signal<FilterSelectOption[]>;
24
+ protected _groups: _angular_core.Signal<Map<string, FilterSelectOption[]>>;
25
+ private _onChange;
26
+ private _onTouched;
27
+ writeValue(val: unknown): void;
28
+ registerOnChange(fn: (_: unknown) => void): void;
29
+ registerOnTouched(fn: () => void): void;
30
+ setDisabledState(_: boolean): void;
31
+ protected _toggle(): void;
32
+ protected _select(opt: FilterSelectOption): void;
33
+ protected _isSelected(opt: FilterSelectOption): boolean;
34
+ protected _clear(e: MouseEvent): void;
35
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterSelectComponent, never>;
36
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterSelectComponent, "emr-filter-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
37
+ }
38
+
39
+ export { FilterSelectComponent };
40
+ export type { FilterSelectOption };
@@ -0,0 +1,24 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type GridColumns = number | {
4
+ xs?: number;
5
+ sm?: number;
6
+ md?: number;
7
+ lg?: number;
8
+ xl?: number;
9
+ };
10
+ declare class GridComponent {
11
+ columns: _angular_core.InputSignal<GridColumns>;
12
+ gap: _angular_core.InputSignal<string>;
13
+ rowGap: _angular_core.InputSignal<string>;
14
+ align: _angular_core.InputSignal<string>;
15
+ justify: _angular_core.InputSignal<string>;
16
+ protected _colsStyle: _angular_core.Signal<string>;
17
+ protected _gapStyle: _angular_core.Signal<string | null>;
18
+ protected _rowGapStyle: _angular_core.Signal<string | null>;
19
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GridComponent, never>;
20
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GridComponent, "emr-grid", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "rowGap": { "alias": "rowGap"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
21
+ }
22
+
23
+ export { GridComponent };
24
+ export type { GridColumns };
@@ -0,0 +1,45 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnInit, OnDestroy } from '@angular/core';
3
+
4
+ interface TourStep {
5
+ target: string;
6
+ title: string;
7
+ description: string;
8
+ position?: 'top' | 'bottom' | 'left' | 'right';
9
+ }
10
+ declare class EmrGuidedTour {
11
+ private _appRef;
12
+ private _injector;
13
+ private _overlayRef;
14
+ private _host;
15
+ private _storageKey;
16
+ isCompleted(id: string): boolean;
17
+ start(steps: TourStep[], tourId?: string): void;
18
+ stop(): void;
19
+ private _destroy;
20
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmrGuidedTour, never>;
21
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EmrGuidedTour>;
22
+ }
23
+
24
+ declare class GuidedTourOverlayComponent implements OnInit, OnDestroy {
25
+ steps: TourStep[];
26
+ tourComplete: _angular_core.OutputEmitterRef<void>;
27
+ tourSkipped: _angular_core.OutputEmitterRef<void>;
28
+ protected _current: _angular_core.WritableSignal<number>;
29
+ protected _cutoutStyle: _angular_core.WritableSignal<string>;
30
+ protected _tooltipStyle: _angular_core.WritableSignal<string>;
31
+ protected _step: _angular_core.WritableSignal<TourStep | null>;
32
+ private _raf;
33
+ ngOnInit(): void;
34
+ ngOnDestroy(): void;
35
+ protected next(): void;
36
+ protected prev(): void;
37
+ protected complete(): void;
38
+ protected skip(): void;
39
+ private _updatePositions;
40
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GuidedTourOverlayComponent, never>;
41
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GuidedTourOverlayComponent, "emr-guided-tour-overlay", never, {}, { "tourComplete": "tourComplete"; "tourSkipped": "tourSkipped"; }, never, never, true, never>;
42
+ }
43
+
44
+ export { EmrGuidedTour, GuidedTourOverlayComponent };
45
+ export type { TourStep };
@@ -0,0 +1,30 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface HeadlessStepConfig {
4
+ valid?: boolean;
5
+ label?: string;
6
+ }
7
+ declare class EmrHeadlessStepperService {
8
+ private _steps;
9
+ private _current;
10
+ private _visited;
11
+ readonly currentStep: _angular_core.Signal<number>;
12
+ readonly stepCount: _angular_core.Signal<number>;
13
+ readonly isFirst: _angular_core.Signal<boolean>;
14
+ readonly isLast: _angular_core.Signal<boolean>;
15
+ readonly canProceed: _angular_core.Signal<boolean>;
16
+ readonly visitedSteps: _angular_core.Signal<Set<number>>;
17
+ configure(steps: HeadlessStepConfig[]): void;
18
+ setStepValid(index: number, valid: boolean): void;
19
+ next(): boolean;
20
+ prev(): boolean;
21
+ goTo(index: number): boolean;
22
+ reset(): void;
23
+ isStepVisited(index: number): boolean;
24
+ isStepValid(index: number): boolean;
25
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmrHeadlessStepperService, never>;
26
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EmrHeadlessStepperService>;
27
+ }
28
+
29
+ export { EmrHeadlessStepperService };
30
+ export type { HeadlessStepConfig };
@@ -0,0 +1,18 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type ImagePlaceholderMode = 'skeleton' | 'blur' | 'icon';
4
+ declare class ImagePlaceholderComponent {
5
+ src: _angular_core.InputSignal<string>;
6
+ alt: _angular_core.InputSignal<string>;
7
+ mode: _angular_core.InputSignal<ImagePlaceholderMode>;
8
+ lowResSrc: _angular_core.InputSignal<string>;
9
+ protected _loaded: _angular_core.WritableSignal<boolean>;
10
+ protected _error: _angular_core.WritableSignal<boolean>;
11
+ protected _onLoad(): void;
12
+ protected _onError(): void;
13
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImagePlaceholderComponent, never>;
14
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImagePlaceholderComponent, "emr-image-placeholder", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "lowResSrc": { "alias": "lowResSrc"; "required": false; "isSignal": true; }; }, {}, never, ["[emrErrorSlot]"], true, never>;
15
+ }
16
+
17
+ export { ImagePlaceholderComponent };
18
+ export type { ImagePlaceholderMode };
@@ -0,0 +1,33 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare class ImageZoomViewerComponent {
4
+ src: _angular_core.InputSignal<string>;
5
+ alt: _angular_core.InputSignal<string>;
6
+ minZoom: _angular_core.InputSignalWithTransform<number, unknown>;
7
+ maxZoom: _angular_core.InputSignalWithTransform<number, unknown>;
8
+ showMinimap: _angular_core.InputSignalWithTransform<boolean, unknown>;
9
+ protected _scale: _angular_core.WritableSignal<number>;
10
+ protected _translateX: _angular_core.WritableSignal<number>;
11
+ protected _translateY: _angular_core.WritableSignal<number>;
12
+ protected _isZoomed: _angular_core.Signal<boolean>;
13
+ private _panning;
14
+ private _lastX;
15
+ private _lastY;
16
+ protected _onWheel(e: WheelEvent): void;
17
+ protected _onMouseDown(e: MouseEvent): void;
18
+ protected _onMouseMove(e: MouseEvent): void;
19
+ protected _onMouseUp(): void;
20
+ protected _onTouchStart(e: TouchEvent): void;
21
+ protected _onTouchMove(e: TouchEvent): void;
22
+ protected _onTouchEnd(): void;
23
+ protected _reset(): void;
24
+ protected _imgStyle: _angular_core.Signal<string>;
25
+ protected _scaleLabel: _angular_core.Signal<string>;
26
+ protected _zoomIn(): void;
27
+ protected _zoomOut(): void;
28
+ protected _minimapStyle: _angular_core.Signal<string>;
29
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImageZoomViewerComponent, never>;
30
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImageZoomViewerComponent, "emr-image-zoom-viewer", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "minZoom": { "alias": "minZoom"; "required": false; "isSignal": true; }; "maxZoom": { "alias": "maxZoom"; "required": false; "isSignal": true; }; "showMinimap": { "alias": "showMinimap"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
31
+ }
32
+
33
+ export { ImageZoomViewerComponent };
@@ -0,0 +1,13 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type Platform = 'mac' | 'win' | 'auto';
4
+ declare class KeyboardComponent {
5
+ keys: _angular_core.InputSignal<string[]>;
6
+ platform: _angular_core.InputSignal<Platform>;
7
+ private _isMac;
8
+ protected _resolved: _angular_core.Signal<string[]>;
9
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KeyboardComponent, never>;
10
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KeyboardComponent, "emr-keyboard", never, { "keys": { "alias": "keys"; "required": false; "isSignal": true; }; "platform": { "alias": "platform"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11
+ }
12
+
13
+ export { KeyboardComponent };
@@ -0,0 +1,18 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare class ListComponent {
4
+ dense: _angular_core.InputSignalWithTransform<boolean, unknown>;
5
+ divided: _angular_core.InputSignalWithTransform<boolean, unknown>;
6
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListComponent, never>;
7
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListComponent, "emr-list", ["emrList"], { "dense": { "alias": "dense"; "required": false; "isSignal": true; }; "divided": { "alias": "divided"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
8
+ }
9
+
10
+ declare class ListItemComponent {
11
+ interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
12
+ selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
13
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
14
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListItemComponent, never>;
15
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListItemComponent, "emr-list-item", ["emrListItem"], { "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["[emrListItemAvatar],[emrListItemIcon]", "[emrListItemTitle]", "[emrListItemSubtitle]", "*", "[emrListItemTrailing]"], true, never>;
16
+ }
17
+
18
+ export { ListComponent, ListItemComponent };