@acorex/components 22.1.0-next.31 → 22.1.0-next.32

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 (262) hide show
  1. package/emoji/README.md +3 -0
  2. package/emojipicker/README.md +3 -0
  3. package/fesm2022/acorex-components-accordion.mjs +13 -13
  4. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  5. package/fesm2022/acorex-components-action-sheet.mjs +13 -13
  6. package/fesm2022/acorex-components-alert.mjs +7 -7
  7. package/fesm2022/acorex-components-aspect-ratio.mjs +3 -3
  8. package/fesm2022/acorex-components-audio-wave.mjs +295 -271
  9. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  10. package/fesm2022/acorex-components-autocomplete.mjs +7 -7
  11. package/fesm2022/acorex-components-avatar.mjs +10 -10
  12. package/fesm2022/acorex-components-badge.mjs +7 -7
  13. package/fesm2022/acorex-components-bottom-navigation.mjs +10 -10
  14. package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
  15. package/fesm2022/acorex-components-bubble.mjs +71 -0
  16. package/fesm2022/acorex-components-bubble.mjs.map +1 -0
  17. package/fesm2022/acorex-components-button-group.mjs +22 -15
  18. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  19. package/fesm2022/acorex-components-button.mjs +14 -14
  20. package/fesm2022/acorex-components-button.mjs.map +1 -1
  21. package/fesm2022/acorex-components-calendar.mjs +332 -130
  22. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  23. package/fesm2022/acorex-components-check-box.mjs +7 -7
  24. package/fesm2022/acorex-components-chips.mjs +7 -7
  25. package/fesm2022/acorex-components-circular-progress.mjs +7 -7
  26. package/fesm2022/acorex-components-code-editor.mjs +44 -19
  27. package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
  28. package/fesm2022/acorex-components-color-box.mjs +7 -7
  29. package/fesm2022/acorex-components-color-palette.mjs +28 -28
  30. package/fesm2022/acorex-components-combo-box.mjs +244 -54
  31. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  32. package/fesm2022/acorex-components-command.mjs +7 -7
  33. package/fesm2022/acorex-components-comment.mjs +28 -28
  34. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BBWe3tfe.mjs +19099 -0
  35. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BBWe3tfe.mjs.map +1 -0
  36. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-F5fLD_SK.mjs +50 -0
  37. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-F5fLD_SK.mjs.map +1 -0
  38. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-Bk3ixvt2.mjs +87 -0
  39. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-Bk3ixvt2.mjs.map +1 -0
  40. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-OAHRGH_G.mjs +65 -0
  41. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-OAHRGH_G.mjs.map +1 -0
  42. package/fesm2022/acorex-components-conversation.mjs +1 -15470
  43. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  44. package/fesm2022/acorex-components-cron-job.mjs +47 -47
  45. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  46. package/fesm2022/acorex-components-data-list.mjs +3 -3
  47. package/fesm2022/acorex-components-data-pager.mjs +35 -35
  48. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  49. package/fesm2022/acorex-components-data-table.mjs +734 -165
  50. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  51. package/fesm2022/acorex-components-datetime-box.mjs +7 -7
  52. package/fesm2022/acorex-components-datetime-input.mjs +7 -7
  53. package/fesm2022/acorex-components-datetime-picker.mjs +8 -8
  54. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  55. package/fesm2022/acorex-components-decorators.mjs +60 -30
  56. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  57. package/fesm2022/acorex-components-dialog.mjs +11 -11
  58. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  59. package/fesm2022/acorex-components-drawer.mjs +10 -10
  60. package/fesm2022/acorex-components-dropdown-button.mjs +8 -8
  61. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  62. package/fesm2022/acorex-components-dropdown.mjs +14 -14
  63. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  64. package/fesm2022/acorex-components-editor.mjs +15 -14
  65. package/fesm2022/acorex-components-editor.mjs.map +1 -1
  66. package/fesm2022/acorex-components-emoji.mjs +74 -0
  67. package/fesm2022/acorex-components-emoji.mjs.map +1 -0
  68. package/fesm2022/acorex-components-emojipicker.mjs +425 -0
  69. package/fesm2022/acorex-components-emojipicker.mjs.map +1 -0
  70. package/fesm2022/acorex-components-fab.mjs +6 -6
  71. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  72. package/fesm2022/acorex-components-file-viewer.mjs +372 -122
  73. package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
  74. package/fesm2022/acorex-components-form.mjs +17 -17
  75. package/fesm2022/acorex-components-form.mjs.map +1 -1
  76. package/fesm2022/acorex-components-grid-layout-builder.mjs +10 -10
  77. package/fesm2022/acorex-components-highlight.mjs +80 -0
  78. package/fesm2022/acorex-components-highlight.mjs.map +1 -0
  79. package/fesm2022/acorex-components-image-editor.mjs +780 -451
  80. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  81. package/fesm2022/acorex-components-image.mjs +7 -7
  82. package/fesm2022/acorex-components-inline-reaction.mjs +111 -0
  83. package/fesm2022/acorex-components-inline-reaction.mjs.map +1 -0
  84. package/fesm2022/acorex-components-json-viewer.mjs +7 -7
  85. package/fesm2022/acorex-components-kanban.mjs +3 -3
  86. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  87. package/fesm2022/acorex-components-kbd.mjs +6 -6
  88. package/fesm2022/acorex-components-label.mjs +7 -7
  89. package/fesm2022/acorex-components-list.mjs +28 -9
  90. package/fesm2022/acorex-components-list.mjs.map +1 -1
  91. package/fesm2022/acorex-components-loading-dialog.mjs +10 -10
  92. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  93. package/fesm2022/acorex-components-loading.mjs +16 -16
  94. package/fesm2022/acorex-components-lookup.mjs +764 -156
  95. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  96. package/fesm2022/acorex-components-map.mjs +20 -13
  97. package/fesm2022/acorex-components-map.mjs.map +1 -1
  98. package/fesm2022/acorex-components-media-viewer.mjs +215 -218
  99. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  100. package/fesm2022/acorex-components-menu.mjs +146 -45
  101. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  102. package/fesm2022/acorex-components-message-status.mjs +71 -0
  103. package/fesm2022/acorex-components-message-status.mjs.map +1 -0
  104. package/fesm2022/acorex-components-message-time.mjs +36 -0
  105. package/fesm2022/acorex-components-message-time.mjs.map +1 -0
  106. package/fesm2022/acorex-components-message.mjs +120 -0
  107. package/fesm2022/acorex-components-message.mjs.map +1 -0
  108. package/fesm2022/acorex-components-navbar.mjs +7 -7
  109. package/fesm2022/acorex-components-notification.mjs +11 -11
  110. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  111. package/fesm2022/acorex-components-number-box.mjs +7 -7
  112. package/fesm2022/acorex-components-otp.mjs +7 -7
  113. package/fesm2022/acorex-components-page.mjs +10 -10
  114. package/fesm2022/acorex-components-paint.mjs +25 -25
  115. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  116. package/fesm2022/acorex-components-password-box.mjs +10 -10
  117. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  118. package/fesm2022/acorex-components-pdf-reader.mjs +7 -7
  119. package/fesm2022/acorex-components-phone-box.mjs +7 -7
  120. package/fesm2022/acorex-components-picker.mjs +13 -13
  121. package/fesm2022/acorex-components-popover.mjs +33 -15
  122. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  123. package/fesm2022/acorex-components-popup.mjs +67 -56
  124. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  125. package/fesm2022/acorex-components-progress-bar.mjs +7 -7
  126. package/fesm2022/acorex-components-qrcode.mjs +7 -7
  127. package/fesm2022/acorex-components-radio.mjs +7 -7
  128. package/fesm2022/acorex-components-rail-navigation.mjs +14 -14
  129. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  130. package/fesm2022/acorex-components-range-slider.mjs +9 -9
  131. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  132. package/fesm2022/acorex-components-rate-picker.mjs +7 -7
  133. package/fesm2022/acorex-components-reaction.mjs +144 -0
  134. package/fesm2022/acorex-components-reaction.mjs.map +1 -0
  135. package/fesm2022/acorex-components-rest-api-generator.mjs +22 -22
  136. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  137. package/fesm2022/acorex-components-result.mjs +7 -7
  138. package/fesm2022/acorex-components-routing-progress.mjs +7 -7
  139. package/fesm2022/acorex-components-rrule.mjs +9 -9
  140. package/fesm2022/acorex-components-rrule.mjs.map +1 -1
  141. package/fesm2022/acorex-components-scheduler-picker.mjs +56 -56
  142. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  143. package/fesm2022/acorex-components-scheduler.mjs +34 -34
  144. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  145. package/fesm2022/acorex-components-search-box.mjs +7 -7
  146. package/fesm2022/acorex-components-select-box.mjs +7 -7
  147. package/fesm2022/acorex-components-selection-list.mjs +7 -8
  148. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  149. package/fesm2022/acorex-components-side-menu.mjs +55 -42
  150. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  151. package/fesm2022/acorex-components-sidebar.mjs +28 -28
  152. package/fesm2022/acorex-components-skeleton.mjs +7 -7
  153. package/fesm2022/acorex-components-slider.mjs +7 -7
  154. package/fesm2022/acorex-components-sliding-item.mjs +13 -13
  155. package/fesm2022/acorex-components-step-wizard.mjs +16 -18
  156. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  157. package/fesm2022/acorex-components-switch.mjs +10 -10
  158. package/fesm2022/acorex-components-tabs.mjs +529 -78
  159. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  160. package/fesm2022/acorex-components-tag-box.mjs +7 -7
  161. package/fesm2022/acorex-components-tag.mjs +7 -7
  162. package/fesm2022/acorex-components-text-area.mjs +7 -7
  163. package/fesm2022/acorex-components-text-box.mjs +7 -7
  164. package/fesm2022/acorex-components-time-duration.mjs +7 -7
  165. package/fesm2022/acorex-components-time-line.mjs +10 -10
  166. package/fesm2022/acorex-components-toast.mjs +10 -10
  167. package/fesm2022/acorex-components-toolbar.mjs +7 -7
  168. package/fesm2022/acorex-components-tooltip.mjs +10 -10
  169. package/fesm2022/acorex-components-tree-view.mjs +58 -15
  170. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  171. package/fesm2022/acorex-components-uploader.mjs +13 -13
  172. package/fesm2022/acorex-components-video-player.mjs +7 -7
  173. package/fesm2022/acorex-components-wysiwyg.mjs +109 -39
  174. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  175. package/highlight/README.md +13 -0
  176. package/inline-reaction/README.md +3 -0
  177. package/lookup/README.md +1 -1
  178. package/message/README.md +3 -0
  179. package/message-status/README.md +3 -0
  180. package/message-time/README.md +3 -0
  181. package/package.json +42 -12
  182. package/reaction/README.md +3 -0
  183. package/types/acorex-components-action-sheet.d.ts +1 -1
  184. package/types/acorex-components-audio-wave.d.ts +132 -73
  185. package/types/acorex-components-bubble.d.ts +31 -0
  186. package/types/acorex-components-button-group.d.ts +4 -0
  187. package/types/acorex-components-button.d.ts +1 -1
  188. package/types/acorex-components-calendar.d.ts +43 -12
  189. package/types/acorex-components-check-box.d.ts +1 -1
  190. package/types/acorex-components-code-editor.d.ts +4 -1
  191. package/types/acorex-components-color-box.d.ts +1 -1
  192. package/types/acorex-components-color-palette.d.ts +2 -2
  193. package/types/acorex-components-combo-box.d.ts +34 -4
  194. package/types/acorex-components-command.d.ts +1 -1
  195. package/types/acorex-components-conversation.d.ts +1771 -1342
  196. package/types/acorex-components-cron-job.d.ts +6 -6
  197. package/types/acorex-components-data-pager.d.ts +2 -2
  198. package/types/acorex-components-data-table.d.ts +194 -21
  199. package/types/acorex-components-datetime-box.d.ts +1 -1
  200. package/types/acorex-components-datetime-picker.d.ts +1 -1
  201. package/types/acorex-components-decorators.d.ts +13 -1
  202. package/types/acorex-components-dialog.d.ts +1 -1
  203. package/types/acorex-components-dropdown.d.ts +1 -1
  204. package/types/acorex-components-editor.d.ts +1 -1
  205. package/types/acorex-components-emoji.d.ts +42 -0
  206. package/types/acorex-components-emojipicker.d.ts +146 -0
  207. package/types/acorex-components-file-viewer.d.ts +50 -6
  208. package/types/acorex-components-highlight.d.ts +31 -0
  209. package/types/acorex-components-image-editor.d.ts +72 -50
  210. package/types/acorex-components-inline-reaction.d.ts +52 -0
  211. package/types/acorex-components-list.d.ts +12 -0
  212. package/types/acorex-components-loading-dialog.d.ts +1 -1
  213. package/types/acorex-components-loading.d.ts +1 -1
  214. package/types/acorex-components-lookup.d.ts +213 -82
  215. package/types/acorex-components-map.d.ts +7 -2
  216. package/types/acorex-components-media-viewer.d.ts +4 -3
  217. package/types/acorex-components-menu.d.ts +17 -5
  218. package/types/acorex-components-message-status.d.ts +23 -0
  219. package/types/acorex-components-message-time.d.ts +19 -0
  220. package/types/acorex-components-message.d.ts +59 -0
  221. package/types/acorex-components-notification.d.ts +1 -1
  222. package/types/acorex-components-number-box.d.ts +1 -1
  223. package/types/acorex-components-otp.d.ts +1 -1
  224. package/types/acorex-components-page.d.ts +2 -2
  225. package/types/acorex-components-paint.d.ts +2 -2
  226. package/types/acorex-components-password-box.d.ts +1 -1
  227. package/types/acorex-components-phone-box.d.ts +1 -1
  228. package/types/acorex-components-popover.d.ts +10 -4
  229. package/types/acorex-components-popup.d.ts +20 -10
  230. package/types/acorex-components-rail-navigation.d.ts +1 -1
  231. package/types/acorex-components-range-slider.d.ts +1 -1
  232. package/types/acorex-components-reaction.d.ts +85 -0
  233. package/types/acorex-components-rest-api-generator.d.ts +1 -1
  234. package/types/acorex-components-rrule.d.ts +1 -1
  235. package/types/acorex-components-scheduler-picker.d.ts +1 -1
  236. package/types/acorex-components-scheduler.d.ts +1 -1
  237. package/types/acorex-components-search-box.d.ts +1 -1
  238. package/types/acorex-components-selection-list.d.ts +1 -1
  239. package/types/acorex-components-side-menu.d.ts +6 -8
  240. package/types/acorex-components-slider.d.ts +1 -1
  241. package/types/acorex-components-step-wizard.d.ts +4 -4
  242. package/types/acorex-components-switch.d.ts +1 -1
  243. package/types/acorex-components-tabs.d.ts +150 -19
  244. package/types/acorex-components-tag-box.d.ts +2 -2
  245. package/types/acorex-components-text-area.d.ts +1 -1
  246. package/types/acorex-components-text-box.d.ts +1 -1
  247. package/types/acorex-components-time-duration.d.ts +1 -1
  248. package/types/acorex-components-toast.d.ts +1 -1
  249. package/types/acorex-components-tree-view.d.ts +32 -3
  250. package/types/acorex-components-wysiwyg.d.ts +15 -2
  251. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +0 -50
  252. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +0 -1
  253. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs +0 -210
  254. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs.map +0 -1
  255. package/fesm2022/acorex-components-flow-chart.mjs +0 -735
  256. package/fesm2022/acorex-components-flow-chart.mjs.map +0 -1
  257. package/fesm2022/acorex-components-query-builder.mjs +0 -267
  258. package/fesm2022/acorex-components-query-builder.mjs.map +0 -1
  259. package/flow-chart/README.md +0 -3
  260. package/query-builder/README.md +0 -3
  261. package/types/acorex-components-flow-chart.d.ts +0 -187
  262. package/types/acorex-components-query-builder.d.ts +0 -52
@@ -0,0 +1,146 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { AXValueChangedEvent } from '@acorex/cdk/common';
3
+ import { AXGestureEvent } from '@acorex/cdk/gesture';
4
+ import { AXTabStripChangedEvent } from '@acorex/components/tabs';
5
+ import { AXEmoji, AXEmojiCategory, AXEmojiPickerCategoryId, AXEmojiCategoryMeta } from '@acorex/core/constants';
6
+
7
+ /**
8
+ * Telegram-style emoji picker with category tabs, search, and recent emojis.
9
+ *
10
+ * @category Components
11
+ */
12
+ declare class AXEmojiPickerComponent {
13
+ private readonly hostRef;
14
+ private readonly destroyRef;
15
+ /** Emoji entries available in the picker. */
16
+ readonly items: _angular_core.InputSignal<readonly AXEmoji[]>;
17
+ /** Rendered emoji size in the grid. */
18
+ readonly size: _angular_core.InputSignal<number>;
19
+ /**
20
+ * Emoji rendering style passed to {@link AXEmojiComponent}.
21
+ * `google` uses Noto Color Emoji (Android/Google look) on Windows too.
22
+ *
23
+ * @defaultValue 'google'
24
+ */
25
+ readonly appearance: _angular_core.InputSignal<"google" | "native">;
26
+ /** Whether the search box is shown. */
27
+ readonly showSearch: _angular_core.InputSignal<boolean>;
28
+ /** Whether the recent category tab is shown. */
29
+ readonly showRecent: _angular_core.InputSignal<boolean>;
30
+ /** Number of emoji columns in the virtualized grid. */
31
+ readonly columns: _angular_core.InputSignal<number>;
32
+ /** Search box placeholder text. */
33
+ readonly searchPlaceholder: _angular_core.InputSignal<string>;
34
+ /** Unicode emoji group categories to hide from tabs and results. */
35
+ readonly excludeCategories: _angular_core.InputSignal<readonly AXEmojiCategory[]>;
36
+ /** `AXEmoji.code` values to hide (e.g. `1f595`). */
37
+ readonly excludeCodes: _angular_core.InputSignal<readonly string[]>;
38
+ /** `AXEmoji.unicode` glyph values to hide (e.g. `🖕`). */
39
+ readonly excludeUnicode: _angular_core.InputSignal<readonly string[]>;
40
+ /** Emits when the user selects an emoji. */
41
+ readonly selected: _angular_core.OutputEmitterRef<AXEmoji>;
42
+ /**
43
+ * Recently used emojis supplied by the parent (e.g. API, LocalStorage).
44
+ * Rendered in the Recent tab when {@link showRecent} is enabled.
45
+ */
46
+ readonly recentItems: _angular_core.InputSignal<readonly AXEmoji[]>;
47
+ /** Emits the updated recent list after the user selects an allowed emoji. */
48
+ readonly recentChanged: _angular_core.OutputEmitterRef<readonly AXEmoji[]>;
49
+ /** Current search query. */
50
+ protected readonly searchQuery: _angular_core.WritableSignal<string>;
51
+ /** Active category tab. */
52
+ protected readonly activeCategoryId: _angular_core.WritableSignal<AXEmojiPickerCategoryId>;
53
+ private readonly containerWidth;
54
+ protected readonly effectiveColumns: _angular_core.Signal<number>;
55
+ protected readonly availableWidthCss: _angular_core.Signal<string>;
56
+ constructor();
57
+ /** Items after picker exclusions are applied. */
58
+ protected readonly filteredItems: _angular_core.Signal<readonly AXEmoji[]>;
59
+ private readonly categoryIndex;
60
+ /** Recent items after active exclusions are applied for display. */
61
+ protected readonly visibleRecentItems: _angular_core.Signal<AXEmoji[]>;
62
+ protected onCategorySwipe(event: AXGestureEvent): void;
63
+ /** Visible category tabs. */
64
+ protected readonly categories: _angular_core.Signal<readonly AXEmojiCategoryMeta[]>;
65
+ /** Emojis shown in the current view (category or search results). */
66
+ protected readonly visibleEmojis: _angular_core.Signal<readonly AXEmoji[]>;
67
+ /** Rows used by the virtual scroll viewport. */
68
+ protected readonly emojiRows: _angular_core.Signal<readonly (readonly AXEmoji[])[]>;
69
+ /** Virtual scroll row height in pixels. */
70
+ protected readonly rowHeight: _angular_core.Signal<number>;
71
+ /** Whether the user is searching. */
72
+ protected readonly isSearching: _angular_core.Signal<boolean>;
73
+ /** Whether the current view has no emojis. */
74
+ protected readonly isEmpty: _angular_core.Signal<boolean>;
75
+ /** Keeps the active tab valid when exclusions change. */
76
+ private readonly syncActiveCategory;
77
+ /** Selects a category tab and clears search. */
78
+ protected selectCategory(categoryId: AXEmojiPickerCategoryId): void;
79
+ /** Whether the given category tab is active. */
80
+ protected isCategoryActive(categoryId: AXEmojiPickerCategoryId): boolean;
81
+ /** Whether the category tab is the virtual recent group. */
82
+ protected isRecentCategory(categoryId: AXEmojiPickerCategoryId): boolean;
83
+ /** Syncs the active emoji category when a tab is selected. */
84
+ protected onCategoryTabChanged(event: AXTabStripChangedEvent): void;
85
+ /** Updates the search query from the search box. */
86
+ protected onSearchChanged(event: AXValueChangedEvent<string>): void;
87
+ /** Emits the selected emoji and notifies the parent of the updated recent list. */
88
+ protected selectEmoji(emoji: AXEmoji): void;
89
+ /** @ignore */
90
+ protected trackRow(index: number, row: readonly AXEmoji[]): string;
91
+ private rememberRecent;
92
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXEmojiPickerComponent, never>;
93
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXEmojiPickerComponent, "ax-emoji-picker", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "showRecent": { "alias": "showRecent"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "excludeCategories": { "alias": "excludeCategories"; "required": false; "isSignal": true; }; "excludeCodes": { "alias": "excludeCodes"; "required": false; "isSignal": true; }; "excludeUnicode": { "alias": "excludeUnicode"; "required": false; "isSignal": true; }; "recentItems": { "alias": "recentItems"; "required": false; "isSignal": true; }; }, { "selected": "selected"; "recentChanged": "recentChanged"; }, never, never, true, never>;
94
+ }
95
+
96
+ /** Maximum number of emojis kept in the recent list. */
97
+ declare const RECENT_EMOJI_LIMIT = 20;
98
+ /** Grid cell size in px (`--ax-comp-emoji-picker-cell-size`). */
99
+ declare const EMOJI_PICKER_CELL_SIZE_PX = 36;
100
+ /** Grid cell size in px on narrow viewports. */
101
+ declare const EMOJI_PICKER_CELL_SIZE_PX_COMPACT = 32;
102
+ /** Gap between grid cells in px (`--ax-comp-emoji-picker-cell-gap`). */
103
+ declare const EMOJI_PICKER_CELL_GAP_PX = 2;
104
+ /** Horizontal padding around the emoji grid in px. */
105
+ declare const EMOJI_PICKER_GRID_PADDING_PX = 24;
106
+ /** Minimum column count. */
107
+ declare const EMOJI_PICKER_MIN_COLUMNS = 1;
108
+ /** Nearest ancestor that participates in layout (skips `display: contents`). */
109
+ declare function getEmojiPickerLayoutContainer(element: HTMLElement): HTMLElement;
110
+ /**
111
+ * Available width for the picker grid.
112
+ * Uses the tightest ancestor content box and the visible viewport slot so an
113
+ * overflowing parent cannot keep an 8-column grid that is clipped off-screen.
114
+ */
115
+ declare function resolveEmojiPickerContainerWidth(element: HTMLElement): number;
116
+ /** Resolves column count from container width while keeping a fixed cell size and gap. */
117
+ declare function resolveEmojiPickerColumns(containerWidth: number, requested: number): number;
118
+ /** Maximum number of emojis returned by search. */
119
+ declare const SEARCH_RESULT_LIMIT = 200;
120
+ /** User-defined exclusions for picker emoji lists. */
121
+ interface AXEmojiPickerFilter {
122
+ /** Unicode emoji group categories to hide from tabs and results. */
123
+ readonly excludeCategories?: readonly AXEmojiCategory[];
124
+ /** `AXEmoji.code` values to hide (hyphen-separated code points, e.g. `1f595`). */
125
+ readonly excludeCodes?: readonly string[];
126
+ /** `AXEmoji.unicode` glyph values to hide (e.g. `👋`). */
127
+ readonly excludeUnicode?: readonly string[];
128
+ }
129
+ /** Applies picker exclusions and default people-body curation. */
130
+ declare function filterPickerItems(items: readonly AXEmoji[], filter?: AXEmojiPickerFilter): readonly AXEmoji[];
131
+ /**
132
+ * Builds a category index for picker rendering.
133
+ * Expects items to be pre-filtered with {@link filterPickerItems}.
134
+ */
135
+ declare function buildEmojiPickerIndex(items: readonly AXEmoji[]): ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]>;
136
+ /** Searches pre-filtered emoji metadata by name and keywords. */
137
+ declare function searchPickerEmojis(items: readonly AXEmoji[], query: string, limit?: number): readonly AXEmoji[];
138
+
139
+ declare class AXEmojiPickerModule {
140
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXEmojiPickerModule, never>;
141
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXEmojiPickerModule, never, [typeof AXEmojiPickerComponent], [typeof AXEmojiPickerComponent]>;
142
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXEmojiPickerModule>;
143
+ }
144
+
145
+ export { AXEmojiPickerComponent, AXEmojiPickerModule, EMOJI_PICKER_CELL_GAP_PX, EMOJI_PICKER_CELL_SIZE_PX, EMOJI_PICKER_CELL_SIZE_PX_COMPACT, EMOJI_PICKER_GRID_PADDING_PX, EMOJI_PICKER_MIN_COLUMNS, RECENT_EMOJI_LIMIT, SEARCH_RESULT_LIMIT, buildEmojiPickerIndex, filterPickerItems, getEmojiPickerLayoutContainer, resolveEmojiPickerColumns, resolveEmojiPickerContainerWidth, searchPickerEmojis };
146
+ export type { AXEmojiPickerFilter };
@@ -1,8 +1,9 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnDestroy, TemplateRef, Type, Provider } from '@angular/core';
3
+ import { AXMenuItem } from '@acorex/components/menu';
3
4
  import { AXComponentContent, AXComponentInputs } from '@acorex/core/components';
4
5
  import { Subject } from 'rxjs';
5
- import { AXStyleColorType, AXComponentClosedPromise } from '@acorex/cdk/common';
6
+ import { AXStyleColorType, AXClickEvent, AXComponentClosedPromise } from '@acorex/cdk/common';
6
7
  import * as _acorex_core_file from '@acorex/core/file';
7
8
  import { AXFileTypeExtensionHint, AXFileType, AXFileTypeViewComponent } from '@acorex/core/file';
8
9
  import { SafeResourceUrl } from '@angular/platform-browser';
@@ -35,7 +36,7 @@ declare class AXFileViewerService {
35
36
  /** Resolve a potentially lazy URL — caches the result. */
36
37
  resolveUrl(item: AXFileViewerItem, key: 'url' | 'thumbnailUrl'): Promise<string | undefined>;
37
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerService, never>;
38
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileViewerService>;
39
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
39
40
  }
40
41
 
41
42
  /** Infers a file-type catalog name from the item. */
@@ -43,6 +44,16 @@ declare function resolveFileViewerFileType(item: AXFileViewerItem): string;
43
44
  /** Builds an extension hint from item metadata. */
44
45
  declare function buildFileViewerExtensionHint(item: AXFileViewerItem): AXFileTypeExtensionHint | undefined;
45
46
 
47
+ interface AXFileViewerHeaderActionClickEvent {
48
+ sender: AXFileViewerContainerComponent;
49
+ nativeEvent: Event;
50
+ canceled: boolean;
51
+ item: {
52
+ name?: string;
53
+ text: string;
54
+ data?: unknown;
55
+ };
56
+ }
46
57
  declare class AXFileViewerContainerComponent implements OnDestroy {
47
58
  #private;
48
59
  readonly items: _angular_core.InputSignal<AXFileViewerItem[]>;
@@ -51,18 +62,27 @@ declare class AXFileViewerContainerComponent implements OnDestroy {
51
62
  readonly pagination: _angular_core.InputSignal<boolean>;
52
63
  readonly download: _angular_core.InputSignal<boolean>;
53
64
  readonly fullscreen: _angular_core.InputSignal<boolean>;
65
+ /** Header action buttons rendered in the top-right actions area. */
66
+ readonly headerActions: _angular_core.InputSignal<AXMenuItem[]>;
54
67
  /** When true, opens in a gallery overlay and closes when fullscreen exits. */
55
68
  readonly galleryMode: _angular_core.InputSignal<boolean>;
56
69
  readonly headerContent: _angular_core.InputSignal<AXComponentContent>;
57
70
  readonly headerContentInputs: _angular_core.InputSignal<AXComponentInputs>;
58
71
  readonly fallbackContent: _angular_core.InputSignal<AXComponentContent>;
59
72
  readonly fallbackContentInputs: _angular_core.InputSignal<AXComponentInputs>;
73
+ /** Custom empty-state template or component. Falls back to the built-in empty state. */
74
+ readonly emptyContent: _angular_core.InputSignal<AXComponentContent>;
75
+ readonly emptyContentInputs: _angular_core.InputSignal<AXComponentInputs>;
60
76
  /** External loading flag — show overlay while parent data is being fetched. */
61
77
  readonly loading: _angular_core.InputSignal<boolean>;
78
+ readonly headerActionClick: _angular_core.OutputEmitterRef<AXFileViewerHeaderActionClickEvent>;
62
79
  readonly fullscreenClosed: _angular_core.OutputEmitterRef<void>;
63
80
  readonly service: AXFileViewerService;
64
81
  private readonly host;
65
82
  private readonly fullScreenService;
83
+ private readonly document;
84
+ private readonly platformId;
85
+ private readonly destroyRef;
66
86
  private readonly mainCarouselRef;
67
87
  private readonly thumbCarouselRef;
68
88
  private initToken;
@@ -70,6 +90,7 @@ declare class AXFileViewerContainerComponent implements OnDestroy {
70
90
  /** True while carousels are being (re)initialized. */
71
91
  readonly initializing: _angular_core.WritableSignal<boolean>;
72
92
  readonly isBusy: _angular_core.Signal<boolean>;
93
+ readonly isEmpty: _angular_core.Signal<boolean>;
73
94
  readonly isFirstSlide: _angular_core.Signal<boolean>;
74
95
  readonly isLastSlide: _angular_core.Signal<boolean>;
75
96
  readonly currentItem: _angular_core.Signal<AXFileViewerItem>;
@@ -80,6 +101,9 @@ declare class AXFileViewerContainerComponent implements OnDestroy {
80
101
  readonly headerTemplateContent: _angular_core.Signal<TemplateRef<any>>;
81
102
  readonly headerComponentContent: _angular_core.Signal<Type<unknown>>;
82
103
  readonly hasHeaderCenterContent: _angular_core.Signal<boolean>;
104
+ readonly emptyTemplateContent: _angular_core.Signal<TemplateRef<any>>;
105
+ readonly emptyComponentContent: _angular_core.Signal<Type<unknown>>;
106
+ readonly resolvedHeaderActions: _angular_core.Signal<AXMenuItem[]>;
83
107
  readonly headerContentContext: _angular_core.Signal<{
84
108
  item: AXFileViewerItem;
85
109
  items: AXFileViewerItem[];
@@ -91,11 +115,16 @@ declare class AXFileViewerContainerComponent implements OnDestroy {
91
115
  formatSize(size?: number): string;
92
116
  private readonly mainCarouselOptions;
93
117
  private readonly thumbnailCarouselOptions;
118
+ constructor();
119
+ resolveHeaderAction(action: AXMenuItem): AXMenuItem;
120
+ onHeaderActionClick(action: AXMenuItem, event: AXClickEvent): void;
121
+ private isFullscreenAction;
94
122
  toggleFullscreen(): void;
95
123
  enterFullscreen(): void;
96
124
  /** @param emitGalleryClose When false, skips gallery close notification (used during service teardown). */
97
125
  exitFullscreen(emitGalleryClose?: boolean): void;
98
126
  closeGallery(): void;
127
+ private onFullscreenEscape;
99
128
  private initCarousels;
100
129
  private readonly onSlideChange;
101
130
  next(): void;
@@ -104,7 +133,7 @@ declare class AXFileViewerContainerComponent implements OnDestroy {
104
133
  downloadCurrent(): Promise<void>;
105
134
  ngOnDestroy(): void;
106
135
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerContainerComponent, never>;
107
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerContainerComponent, "ax-file-viewer-container", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "startIndex": { "alias": "startIndex"; "required": false; "isSignal": true; }; "thumbnail": { "alias": "thumbnail"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "download": { "alias": "download"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "galleryMode": { "alias": "galleryMode"; "required": false; "isSignal": true; }; "headerContent": { "alias": "headerContent"; "required": false; "isSignal": true; }; "headerContentInputs": { "alias": "headerContentInputs"; "required": false; "isSignal": true; }; "fallbackContent": { "alias": "fallbackContent"; "required": false; "isSignal": true; }; "fallbackContentInputs": { "alias": "fallbackContentInputs"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "fullscreenClosed": "fullscreenClosed"; }, never, never, true, never>;
136
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerContainerComponent, "ax-file-viewer-container", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "startIndex": { "alias": "startIndex"; "required": false; "isSignal": true; }; "thumbnail": { "alias": "thumbnail"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "download": { "alias": "download"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; "galleryMode": { "alias": "galleryMode"; "required": false; "isSignal": true; }; "headerContent": { "alias": "headerContent"; "required": false; "isSignal": true; }; "headerContentInputs": { "alias": "headerContentInputs"; "required": false; "isSignal": true; }; "fallbackContent": { "alias": "fallbackContent"; "required": false; "isSignal": true; }; "fallbackContentInputs": { "alias": "fallbackContentInputs"; "required": false; "isSignal": true; }; "emptyContent": { "alias": "emptyContent"; "required": false; "isSignal": true; }; "emptyContentInputs": { "alias": "emptyContentInputs"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "headerActionClick": "headerActionClick"; "fullscreenClosed": "fullscreenClosed"; }, never, never, true, never>;
108
137
  }
109
138
 
110
139
  interface AXFileViewerGalleryConfig {
@@ -112,12 +141,15 @@ interface AXFileViewerGalleryConfig {
112
141
  startIndex?: number;
113
142
  thumbnail?: boolean;
114
143
  download?: boolean;
144
+ headerActions?: AXMenuItem[];
115
145
  loading?: boolean;
116
146
  panelClass?: string[];
117
147
  headerContent?: AXComponentContent | null;
118
148
  headerContentInputs?: AXComponentInputs | null;
119
149
  fallbackContent?: AXComponentContent | null;
120
150
  fallbackContentInputs?: AXComponentInputs | null;
151
+ emptyContent?: AXComponentContent | null;
152
+ emptyContentInputs?: AXComponentInputs | null;
121
153
  }
122
154
  interface AXFileViewerGalleryRef<TResult = any> {
123
155
  close: (data?: TResult) => void;
@@ -156,7 +188,7 @@ declare class AXFileViewerGalleryService {
156
188
  bringToFront(id: number): void;
157
189
  private openInternal;
158
190
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerGalleryService, never>;
159
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileViewerGalleryService>;
191
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
160
192
  }
161
193
 
162
194
  /** Registers file-viewer components on standard file-type catalog entries. */
@@ -171,6 +203,11 @@ declare class AXFileViewerHeaderPlaceholderComponent {
171
203
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerHeaderPlaceholderComponent, "ax-file-viewer-header-placeholder", never, { "slideCounter": { "alias": "slideCounter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
172
204
  }
173
205
 
206
+ declare class AXFileViewerEmptyStateComponent {
207
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerEmptyStateComponent, never>;
208
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerEmptyStateComponent, "ax-file-viewer-empty-state", never, {}, {}, never, never, true, never>;
209
+ }
210
+
174
211
  declare class AXFileViewerSlideComponent {
175
212
  readonly item: _angular_core.InputSignal<AXFileViewerItem>;
176
213
  readonly index: _angular_core.InputSignal<number>;
@@ -202,6 +239,7 @@ declare class AXFileViewerThumbPreviewComponent {
202
239
  private readonly service;
203
240
  readonly src: _angular_core.WritableSignal<string>;
204
241
  readonly icon: _angular_core.Signal<string>;
242
+ onImageError(): void;
205
243
  private resolvePreview;
206
244
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerThumbPreviewComponent, never>;
207
245
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerThumbPreviewComponent, "ax-file-viewer-thumb-preview", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -226,6 +264,7 @@ declare class AXFileViewerImageComponent implements AXFileTypeViewComponent<AXFi
226
264
  private readonly service;
227
265
  readonly src: _angular_core.WritableSignal<string>;
228
266
  readonly loading: _angular_core.WritableSignal<boolean>;
267
+ private loadedId;
229
268
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerImageComponent, never>;
230
269
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerImageComponent, "ax-file-viewer-image", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
231
270
  }
@@ -234,8 +273,10 @@ declare class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFi
234
273
  #private;
235
274
  readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
236
275
  private readonly service;
276
+ private readonly mediaEl;
237
277
  readonly src: _angular_core.WritableSignal<string>;
238
278
  readonly loading: _angular_core.WritableSignal<boolean>;
279
+ private loadedId;
239
280
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerVideoComponent, never>;
240
281
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerVideoComponent, "ax-file-viewer-video", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
241
282
  }
@@ -244,8 +285,10 @@ declare class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFi
244
285
  #private;
245
286
  readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
246
287
  private readonly service;
288
+ private readonly mediaEl;
247
289
  readonly src: _angular_core.WritableSignal<string>;
248
290
  readonly loading: _angular_core.WritableSignal<boolean>;
291
+ private loadedId;
249
292
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerAudioComponent, never>;
250
293
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerAudioComponent, "ax-file-viewer-audio", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
251
294
  }
@@ -257,6 +300,7 @@ declare class AXFileViewerPdfComponent implements AXFileTypeViewComponent<AXFile
257
300
  private readonly sanitizer;
258
301
  readonly safeSrc: _angular_core.WritableSignal<SafeResourceUrl>;
259
302
  readonly loading: _angular_core.WritableSignal<boolean>;
303
+ private loadedId;
260
304
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerPdfComponent, never>;
261
305
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerPdfComponent, "ax-file-viewer-pdf", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
262
306
  }
@@ -268,5 +312,5 @@ declare class AXFileViewerFileFallbackComponent implements AXFileTypeViewCompone
268
312
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerFileFallbackComponent, "ax-file-viewer-fallback", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
269
313
  }
270
314
 
271
- export { AXFileViewerAudioComponent, AXFileViewerContainerComponent, AXFileViewerFileFallbackComponent, AXFileViewerGalleryService, AXFileViewerHeaderPlaceholderComponent, AXFileViewerImageComponent, AXFileViewerPdfComponent, AXFileViewerService, AXFileViewerSlideComponent, AXFileViewerThumbPreviewComponent, AXFileViewerThumbnailsComponent, AXFileViewerVideoComponent, buildFileViewerExtensionHint, createFileViewerFileTypes, provideFileViewer, resolveFileViewerFileType };
272
- export type { AXFileViewerGalleryConfig, AXFileViewerGalleryRef, AXFileViewerItem, AXFileViewerViewPayload };
315
+ export { AXFileViewerAudioComponent, AXFileViewerContainerComponent, AXFileViewerEmptyStateComponent, AXFileViewerFileFallbackComponent, AXFileViewerGalleryService, AXFileViewerHeaderPlaceholderComponent, AXFileViewerImageComponent, AXFileViewerPdfComponent, AXFileViewerService, AXFileViewerSlideComponent, AXFileViewerThumbPreviewComponent, AXFileViewerThumbnailsComponent, AXFileViewerVideoComponent, buildFileViewerExtensionHint, createFileViewerFileTypes, provideFileViewer, resolveFileViewerFileType };
316
+ export type { AXFileViewerGalleryConfig, AXFileViewerGalleryRef, AXFileViewerHeaderActionClickEvent, AXFileViewerItem, AXFileViewerViewPayload };
@@ -0,0 +1,31 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { AXHighlightOptions, AXHighlightSegment } from '@acorex/core/utils';
3
+ import { SafeHtml } from '@angular/platform-browser';
4
+
5
+ /**
6
+ * Renders text with search-term matches wrapped in `.ax-highlight` spans.
7
+ *
8
+ * Uses a single innerHTML string so Angular control-flow whitespace cannot insert
9
+ * gaps between highlighted and non-highlighted characters.
10
+ *
11
+ * Does not use the `ax-highlight-text` class on the host — that class is reserved for
12
+ * {@link AXHighlightService} DOM wrappers.
13
+ */
14
+ declare class AXHighlightTextComponent {
15
+ #private;
16
+ private readonly sanitizer;
17
+ /** The full text to render. */
18
+ readonly text: _angular_core.InputSignal<string>;
19
+ /** The search term or terms to highlight within the text. */
20
+ readonly query: _angular_core.InputSignal<string | readonly string[]>;
21
+ /** When true, highlighting is disabled and plain text is shown. */
22
+ readonly highlightDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
23
+ /** Optional highlight behavior configuration. */
24
+ readonly highlightOptions: _angular_core.InputSignal<AXHighlightOptions>;
25
+ protected readonly segments: _angular_core.Signal<AXHighlightSegment[]>;
26
+ protected readonly highlightedHtml: _angular_core.Signal<SafeHtml>;
27
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXHighlightTextComponent, never>;
28
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXHighlightTextComponent, "ax-highlight-text", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "highlightDisabled": { "alias": "highlightDisabled"; "required": false; "isSignal": true; }; "highlightOptions": { "alias": "highlightOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
29
+ }
30
+
31
+ export { AXHighlightTextComponent };
@@ -2,15 +2,6 @@ import * as polytype from 'polytype';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { OnDestroy, ElementRef, Renderer2 } from '@angular/core';
4
4
  import { MXBaseComponent, MXInputBaseValueComponent, MXLookComponent } from '@acorex/cdk/common';
5
- import * as i1 from '@acorex/components/button';
6
- import * as i2 from '@angular/forms';
7
- import * as i3 from '@acorex/components/range-slider';
8
- import * as i4 from '@acorex/components/select-box';
9
- import * as i5 from '@acorex/components/color-box';
10
- import * as i6 from '@acorex/components/popover';
11
- import * as i7 from '@acorex/components/decorators';
12
- import * as i8 from '@acorex/components/loading';
13
- import * as i9 from '@acorex/components/dialog';
14
5
 
15
6
  type AXImageEditorTool = 'pen' | 'highlight' | 'crop' | 'rotate';
16
7
  declare class AXImageEditorService {
@@ -25,19 +16,27 @@ declare class AXImageEditorService {
25
16
  userInteract: boolean;
26
17
  }>;
27
18
  isImageLoad: _angular_core.WritableSignal<boolean>;
19
+ loadError: _angular_core.WritableSignal<boolean>;
28
20
  newImage: HTMLImageElement | null;
29
21
  initialImage: HTMLImageElement | null;
30
22
  imageBlob: _angular_core.WritableSignal<Blob[]>;
31
23
  undoPressed: _angular_core.WritableSignal<boolean>;
32
24
  redoPressed: _angular_core.WritableSignal<boolean>;
25
+ canUndo: _angular_core.WritableSignal<boolean>;
26
+ canRedo: _angular_core.WritableSignal<boolean>;
33
27
  cropperRatio: _angular_core.WritableSignal<string>;
34
28
  cropperSize: _angular_core.WritableSignal<number>;
35
29
  toggleTool(tool: AXImageEditorTool): void;
36
30
  activateTool(tool: AXImageEditorTool): void;
31
+ undo(): void;
32
+ redo(): void;
33
+ /** Handles Ctrl/Cmd+Z and Ctrl/Cmd+Y history shortcuts. Returns true when handled. */
34
+ handleHistoryShortcut(event: KeyboardEvent): boolean;
37
35
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorService, never>;
38
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXImageEditorService>;
36
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
39
37
  }
40
38
 
39
+ type AXImageEditorCropHandle = 'right' | 'top' | 'left' | 'bottom' | 'right-top' | 'bottom-right' | 'bottom-left' | 'left-top';
41
40
  /**
42
41
  * paint mode.
43
42
  * @category Components
@@ -55,39 +54,43 @@ declare class AXImageEditorCropperWindowComponent implements OnDestroy {
55
54
  protected cropperWindow: _angular_core.Signal<ElementRef<any>>;
56
55
  private currentX;
57
56
  private currentY;
58
- private prevX;
59
- private prevY;
60
57
  private aspectWidth;
61
58
  private aspectHeight;
62
59
  private isMousePressed;
63
60
  protected renderer: Renderer2;
64
61
  private platformID;
65
- private mouseMoveEvent;
66
- private mouseUpEvent;
67
- private mouseMoveEvent2;
68
- private mouseUpEvent2;
69
- private mouseDownEvent;
70
- private mouseLeaveEvent;
62
+ private mouseMoveEvent?;
63
+ private mouseUpEvent?;
64
+ private mouseMoveEvent2?;
65
+ private mouseUpEvent2?;
66
+ private mouseDownEvent?;
67
+ private mouseLeaveEvent?;
68
+ private positioned;
71
69
  ngOnDestroy(): void;
72
- protected panMove(e: MouseEvent): void;
73
- protected panDown(e: MouseEvent): void;
70
+ protected panMove(e: PointerEvent): void;
71
+ protected panDown(e: PointerEvent): void;
74
72
  protected panUp(): void;
75
73
  getCropperArea(): DOMRect;
76
- private setPosition;
77
74
  private startX;
78
75
  private startY;
79
76
  private startWidth;
80
77
  private startHeight;
81
78
  private startLeft;
82
79
  private startTop;
83
- protected handleSelector(e: MouseEvent, value: string): void;
84
- protected changeSizeHandler(e: MouseEvent): void;
80
+ protected handleSelector(e: PointerEvent, value: AXImageEditorCropHandle): void;
81
+ protected changeSizeHandler(e: PointerEvent): void;
85
82
  protected clearSelector(): void;
83
+ private normalizeRatio;
84
+ private centerOnParent;
85
+ private getImageBounds;
86
+ private constrainCropBox;
87
+ private clampToParent;
88
+ private applyPosition;
86
89
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorCropperWindowComponent, never>;
87
90
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorCropperWindowComponent, "ax-image-editor-cropper-window", never, { "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
88
91
  }
89
92
 
90
- declare class AXImageEditorViewComponent extends MXBaseComponent implements OnDestroy {
93
+ declare class AXImageEditorViewComponent extends MXBaseComponent {
91
94
  /**
92
95
  * its change grid display state.
93
96
  */
@@ -118,44 +121,54 @@ declare class AXImageEditorViewComponent extends MXBaseComponent implements OnDe
118
121
  protected isDrawRectangleCreated: _angular_core.WritableSignal<boolean>;
119
122
  /** @ignore */
120
123
  protected parent: AXImageEditorContainerComponent;
121
- /** @ignore */
122
- protected renderer: Renderer2;
124
+ private readonly destroyRef;
125
+ private readonly host;
123
126
  /** @ignore */
124
127
  protected imageEditorHistory: _angular_core.WritableSignal<HTMLImageElement[]>;
125
128
  /** @ignore */
126
129
  protected imageEditorHistoryPointer: _angular_core.WritableSignal<number>;
127
- /** @ignore */
128
- private resizeEventListener;
129
- /** @ignore */
130
- private imageLoadEventListener;
131
- private originalWidth;
132
- private originalHeight;
133
- private scale;
130
+ private canvasReady;
131
+ private drawing;
132
+ private didDraw;
133
+ private highlightSnapshot;
134
+ private highlightPoints;
135
+ private persistGeneration;
136
+ private sourceToken;
137
+ constructor();
134
138
  /** @ignore */
135
139
  protected resizeWindow(): void;
136
140
  /** @ignore */
137
141
  protected canvasResponsive(image: HTMLImageElement): void;
138
- /** @ignore */
139
- constructor();
140
- /** @ignore */
141
- ngOnDestroy(): void;
142
- private setInitialImage;
143
- /** @ignore */
144
- protected imageChanged(): void;
142
+ private loadSource;
143
+ private paintImage;
144
+ private fitCanvasDisplay;
145
+ private replaceHistory;
146
+ private pushHistory;
147
+ private syncHistoryFlags;
148
+ private applyUndo;
149
+ private applyRedo;
150
+ private canvasPoint;
151
+ private isDrawTool;
145
152
  /** @ignore */
146
153
  protected penConfigHandler(penType: 'pen' | 'highlight'): void;
154
+ private strokeHighlight;
147
155
  /** @ignore */
148
- protected mouseDownHandler(e: MouseEvent): void;
156
+ protected historyKeyDown(event: KeyboardEvent): void;
149
157
  /** @ignore */
150
- protected mouseMoveHandler(e: MouseEvent): void;
158
+ protected focusCanvas(): void;
151
159
  /** @ignore */
152
- protected mouseUpHandler(): void;
160
+ protected mouseDownHandler(event: PointerEvent): void;
153
161
  /** @ignore */
154
- crop(): Promise<void>;
162
+ protected mouseMoveHandler(event: PointerEvent): void;
155
163
  /** @ignore */
156
- protected rotateImage(): void;
164
+ protected mouseUpHandler(event?: PointerEvent): void;
165
+ /** Applies the current cropper selection. */
166
+ crop(): Promise<void>;
167
+ /** Encodes the current canvas into JPEG, PNG, and WebP blobs. */
168
+ commitChanges(): Promise<Blob[]>;
157
169
  /** @ignore */
158
- protected saveImageChange(): Promise<void>;
170
+ protected rotateImage(): Promise<void>;
171
+ private persistCanvas;
159
172
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorViewComponent, never>;
160
173
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorViewComponent, "ax-image-editor-view", never, { "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "cropperSize": { "alias": "cropperSize"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
161
174
  }
@@ -163,7 +176,7 @@ declare class AXImageEditorViewComponent extends MXBaseComponent implements OnDe
163
176
  declare const AXImageEditorContainerComponent_base: polytype.Polytype.ClusteredConstructor<[{
164
177
  new (): MXInputBaseValueComponent<Blob[]>;
165
178
  ɵfac: _angular_core.ɵɵFactoryDeclaration<MXInputBaseValueComponent<any>, never>;
166
- ɵprov: _angular_core.ɵɵInjectableDeclaration<MXInputBaseValueComponent<any>>;
179
+ ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
167
180
  }, typeof MXLookComponent]>;
168
181
  /**
169
182
  * paint container.
@@ -173,12 +186,21 @@ declare class AXImageEditorContainerComponent extends AXImageEditorContainerComp
173
186
  #private;
174
187
  /** @ignore */
175
188
  protected service: AXImageEditorService;
189
+ private readonly host;
190
+ private readonly destroyRef;
176
191
  imageEditorContainer: _angular_core.Signal<ElementRef<any>>;
177
192
  view: _angular_core.Signal<AXImageEditorViewComponent>;
193
+ constructor();
194
+ /** @ignore */
195
+ protected focusEditor(): void;
178
196
  /** Applies the current cropper selection. */
179
197
  crop(): Promise<void>;
180
- get __hostClass(): string;
181
- private get __hostName();
198
+ /** @ignore */
199
+ protected onEditorPointerDown(event: PointerEvent): void;
200
+ /** @ignore */
201
+ protected handleHistoryShortcut(event: KeyboardEvent): void;
202
+ /** Encodes the current canvas into JPEG, PNG, and WebP blobs. */
203
+ commitChanges(): Promise<Blob[]>;
182
204
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorContainerComponent, never>;
183
205
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorContainerComponent, "ax-image-editor-container", never, { "look": { "alias": "look"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "onValueChanged": "onValueChanged"; }, ["view"], ["ax-header", "ax-image-editor-view", "ax-footer", "ax-validation-rule"], true, never>;
184
206
  }
@@ -287,7 +309,7 @@ declare class AXImageEditorToolSelectorComponent {
287
309
 
288
310
  declare class AXImageEditorModule {
289
311
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorModule, never>;
290
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXImageEditorModule, never, [typeof i1.AXButtonModule, typeof i2.FormsModule, typeof i3.AXRangeSliderModule, typeof i4.AXSelectBoxModule, typeof i5.AXColorBoxModule, typeof i6.AXPopoverModule, typeof i7.AXDecoratorModule, typeof i8.AXLoadingModule, typeof i9.AXDialogModule, typeof AXImageEditorViewComponent, typeof AXImageEditorContainerComponent, typeof AXImageEditorCropComponent, typeof AXImageEditorHistoryComponent, typeof AXImageEditorToolSelectorComponent, typeof AXImageEditorToolsBarComponent, typeof AXImageEditorPenComponent, typeof AXImageEditorHighlightComponent, typeof AXImageEditorRotateComponent, typeof AXImageEditorCropperWindowComponent], [typeof AXImageEditorViewComponent, typeof AXImageEditorContainerComponent, typeof AXImageEditorCropComponent, typeof AXImageEditorHistoryComponent, typeof AXImageEditorToolSelectorComponent, typeof AXImageEditorToolsBarComponent, typeof AXImageEditorPenComponent, typeof AXImageEditorHighlightComponent, typeof AXImageEditorRotateComponent, typeof AXImageEditorCropperWindowComponent]>;
312
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXImageEditorModule, never, [typeof AXImageEditorViewComponent, typeof AXImageEditorContainerComponent, typeof AXImageEditorCropComponent, typeof AXImageEditorHistoryComponent, typeof AXImageEditorToolSelectorComponent, typeof AXImageEditorToolsBarComponent, typeof AXImageEditorPenComponent, typeof AXImageEditorHighlightComponent, typeof AXImageEditorRotateComponent, typeof AXImageEditorCropperWindowComponent], [typeof AXImageEditorViewComponent, typeof AXImageEditorContainerComponent, typeof AXImageEditorCropComponent, typeof AXImageEditorHistoryComponent, typeof AXImageEditorToolSelectorComponent, typeof AXImageEditorToolsBarComponent, typeof AXImageEditorPenComponent, typeof AXImageEditorHighlightComponent, typeof AXImageEditorRotateComponent, typeof AXImageEditorCropperWindowComponent]>;
291
313
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXImageEditorModule>;
292
314
  }
293
315