ngx-tethys 19.0.12 → 19.1.0-next.0

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 (270) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/action/action.component.d.ts +2 -2
  3. package/alert/alert.component.d.ts +1 -1
  4. package/anchor/anchor-link.component.d.ts +8 -8
  5. package/anchor/anchor.component.d.ts +15 -21
  6. package/arrow-switcher/arrow-switcher.component.d.ts +15 -22
  7. package/autocomplete/autocomplete.component.d.ts +10 -17
  8. package/autocomplete/autocomplete.trigger.directive.d.ts +10 -18
  9. package/avatar/avatar-list/avatar-list.component.d.ts +1 -1
  10. package/avatar/avatar.component.d.ts +5 -5
  11. package/back-top/back-top.component.d.ts +9 -12
  12. package/badge/badge.component.d.ts +19 -59
  13. package/breadcrumb/breadcrumb.component.d.ts +15 -20
  14. package/button/button-icon.component.d.ts +3 -2
  15. package/button/button.component.d.ts +3 -2
  16. package/calendar/calendar-header.component.d.ts +9 -8
  17. package/calendar/calendar.component.d.ts +16 -16
  18. package/card/card.component.d.ts +5 -11
  19. package/card/content.component.d.ts +3 -8
  20. package/card/header.component.d.ts +7 -8
  21. package/carousel/carousel.component.d.ts +22 -27
  22. package/cascader/cascader-li.component.d.ts +13 -21
  23. package/cascader/cascader-search-option.component.d.ts +8 -16
  24. package/cascader/cascader.component.d.ts +58 -80
  25. package/checkbox/checkbox.component.d.ts +2 -5
  26. package/collapse/collapse-item.component.d.ts +12 -19
  27. package/collapse/collapse.component.d.ts +6 -12
  28. package/collapse/collapse.token.d.ts +3 -3
  29. package/color-picker/color-picker-custom-panel.component.d.ts +5 -5
  30. package/color-picker/color-picker-panel.component.d.ts +7 -11
  31. package/color-picker/color-picker.component.d.ts +19 -35
  32. package/color-picker/parts/alpha/alpha.component.d.ts +8 -8
  33. package/color-picker/parts/hue/hue.component.d.ts +6 -6
  34. package/color-picker/parts/indicator/indicator.component.d.ts +4 -3
  35. package/color-picker/parts/inputs/inputs.component.d.ts +9 -9
  36. package/color-picker/parts/saturation/saturation.component.d.ts +9 -9
  37. package/comment/comment.component.d.ts +4 -5
  38. package/copy/copy.directive.d.ts +8 -9
  39. package/date-picker/abstract-picker.component.d.ts +8 -7
  40. package/date-picker/lib/calendar/calendar-footer.component.d.ts +2 -1
  41. package/date-picker/lib/popups/inner-popup.component.d.ts +2 -1
  42. package/date-picker/picker.component.d.ts +2 -1
  43. package/date-range/date-range.component.d.ts +2 -2
  44. package/dialog/body/dialog-body.component.d.ts +2 -6
  45. package/dialog/confirm/confirm.component.d.ts +2 -2
  46. package/dialog/footer/dialog-footer.component.d.ts +6 -9
  47. package/dialog/header/dialog-header.component.d.ts +9 -11
  48. package/divider/divider.component.d.ts +12 -16
  49. package/dot/dot.component.d.ts +5 -13
  50. package/drag-drop/drag-handle.directive.d.ts +2 -1
  51. package/drag-drop/drag.directive.d.ts +2 -1
  52. package/drag-drop/drop-container.directive.d.ts +2 -1
  53. package/dropdown/dropdown-menu-item.directive.d.ts +3 -2
  54. package/dropdown/dropdown-menu.component.d.ts +2 -1
  55. package/dropdown/dropdown.directive.d.ts +2 -1
  56. package/empty/empty.component.d.ts +21 -27
  57. package/fesm2022/ngx-tethys-anchor.mjs +91 -118
  58. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  59. package/fesm2022/ngx-tethys-arrow-switcher.mjs +51 -77
  60. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  61. package/fesm2022/ngx-tethys-autocomplete.mjs +69 -103
  62. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  63. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  64. package/fesm2022/ngx-tethys-back-top.mjs +33 -46
  65. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  66. package/fesm2022/ngx-tethys-badge.mjs +104 -208
  67. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  68. package/fesm2022/ngx-tethys-breadcrumb.mjs +66 -70
  69. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  70. package/fesm2022/ngx-tethys-calendar.mjs +85 -87
  71. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  72. package/fesm2022/ngx-tethys-card.mjs +72 -77
  73. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  74. package/fesm2022/ngx-tethys-carousel.mjs +82 -99
  75. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  76. package/fesm2022/ngx-tethys-cascader.mjs +313 -468
  77. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  78. package/fesm2022/ngx-tethys-checkbox.mjs +10 -17
  79. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  80. package/fesm2022/ngx-tethys-collapse.mjs +66 -71
  81. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  82. package/fesm2022/ngx-tethys-color-picker.mjs +187 -246
  83. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  84. package/fesm2022/ngx-tethys-comment.mjs +16 -10
  85. package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
  86. package/fesm2022/ngx-tethys-copy.mjs +25 -28
  87. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  88. package/fesm2022/ngx-tethys-dialog.mjs +81 -82
  89. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  90. package/fesm2022/ngx-tethys-divider.mjs +49 -58
  91. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  92. package/fesm2022/ngx-tethys-dot.mjs +45 -68
  93. package/fesm2022/ngx-tethys-dot.mjs.map +1 -1
  94. package/fesm2022/ngx-tethys-empty.mjs +107 -95
  95. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  96. package/fesm2022/ngx-tethys-form.mjs +161 -200
  97. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  98. package/fesm2022/ngx-tethys-fullscreen.mjs +21 -23
  99. package/fesm2022/ngx-tethys-fullscreen.mjs.map +1 -1
  100. package/fesm2022/ngx-tethys-grid.mjs +160 -152
  101. package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
  102. package/fesm2022/ngx-tethys-i18n.mjs +25 -25
  103. package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
  104. package/fesm2022/ngx-tethys-input-number.mjs +101 -114
  105. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  106. package/fesm2022/ngx-tethys-input.mjs +268 -271
  107. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  108. package/fesm2022/ngx-tethys-loading.mjs +17 -35
  109. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  110. package/fesm2022/ngx-tethys-mention.mjs +3 -3
  111. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  112. package/fesm2022/ngx-tethys-menu.mjs +106 -179
  113. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  114. package/fesm2022/ngx-tethys-nav.mjs +169 -201
  115. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  116. package/fesm2022/ngx-tethys-pagination.mjs +230 -294
  117. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  118. package/fesm2022/ngx-tethys-popover.mjs +67 -70
  119. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  120. package/fesm2022/ngx-tethys-progress.mjs +196 -244
  121. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  122. package/fesm2022/ngx-tethys-property.mjs +102 -105
  123. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  124. package/fesm2022/ngx-tethys-radio.mjs +34 -38
  125. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  126. package/fesm2022/ngx-tethys-result.mjs +46 -28
  127. package/fesm2022/ngx-tethys-result.mjs.map +1 -1
  128. package/fesm2022/ngx-tethys-skeleton.mjs +339 -342
  129. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  130. package/fesm2022/ngx-tethys-slider.mjs +75 -108
  131. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  132. package/fesm2022/ngx-tethys-space.mjs +26 -46
  133. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  134. package/fesm2022/ngx-tethys-statistic.mjs +114 -151
  135. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  136. package/fesm2022/ngx-tethys-stepper.mjs +74 -107
  137. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  138. package/fesm2022/ngx-tethys-switch.mjs +80 -140
  139. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  140. package/fesm2022/ngx-tethys-table.mjs +1 -1
  141. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  142. package/fesm2022/ngx-tethys-tabs.mjs +69 -87
  143. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  144. package/fesm2022/ngx-tethys-tag.mjs +42 -64
  145. package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
  146. package/fesm2022/ngx-tethys-timeline.mjs +104 -129
  147. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  148. package/fesm2022/ngx-tethys-typography.mjs +36 -33
  149. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  150. package/fesm2022/ngx-tethys-upload.mjs +91 -130
  151. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  152. package/fesm2022/ngx-tethys-util.mjs.map +1 -1
  153. package/fesm2022/ngx-tethys-watermark.mjs +36 -40
  154. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  155. package/fesm2022/ngx-tethys.mjs +1 -1
  156. package/fesm2022/ngx-tethys.mjs.map +1 -1
  157. package/form/form-group-error/form-group-error.component.d.ts +2 -3
  158. package/form/form-group-label.directive.d.ts +2 -1
  159. package/form/form-group.component.d.ts +17 -24
  160. package/form/form-submit.directive.d.ts +2 -2
  161. package/form/form.directive.d.ts +6 -8
  162. package/form/from-group-footer/form-group-footer.component.d.ts +2 -2
  163. package/form/validator/confirm-validator.directive.d.ts +2 -2
  164. package/form/validator/unique-validator.directive.d.ts +2 -2
  165. package/fullscreen/fullscreen.component.d.ts +7 -7
  166. package/grid/flex.d.ts +14 -19
  167. package/grid/thy-col.directive.d.ts +6 -9
  168. package/grid/thy-grid-item.component.d.ts +3 -4
  169. package/grid/thy-grid.component.d.ts +11 -12
  170. package/grid/thy-row.directive.d.ts +12 -12
  171. package/icon/icon.component.d.ts +3 -2
  172. package/image/image.directive.d.ts +3 -2
  173. package/input/input-count.component.d.ts +4 -5
  174. package/input/input-group.component.d.ts +20 -20
  175. package/input/input-search.component.d.ts +15 -20
  176. package/input/input.component.d.ts +20 -21
  177. package/input/input.directive.d.ts +4 -6
  178. package/input-number/input-number.component.d.ts +21 -29
  179. package/layout/header.component.d.ts +4 -9
  180. package/layout/sidebar-header.component.d.ts +2 -1
  181. package/layout/sidebar.component.d.ts +8 -7
  182. package/list/list.component.d.ts +2 -1
  183. package/list/selection/selection-list.d.ts +4 -3
  184. package/loading/loading.component.d.ts +4 -10
  185. package/mention/mention.directive.d.ts +2 -2
  186. package/menu/group/menu-group.component.d.ts +16 -33
  187. package/menu/item/action/menu-item-action.component.d.ts +7 -8
  188. package/menu/item/icon/menu-item-icon.component.d.ts +2 -2
  189. package/menu/item/menu-item.component.d.ts +4 -4
  190. package/menu/item/name/menu-item-name.component.d.ts +2 -3
  191. package/menu/menu.component.d.ts +3 -7
  192. package/nav/icon-nav/icon-nav-link.directive.d.ts +3 -7
  193. package/nav/icon-nav/icon-nav.component.d.ts +3 -8
  194. package/nav/nav-ink-bar.directive.d.ts +4 -6
  195. package/nav/nav-item.directive.d.ts +7 -10
  196. package/nav/nav.component.d.ts +20 -48
  197. package/package.json +1 -1
  198. package/pagination/pagination.component.d.ts +48 -109
  199. package/popover/header/popover-header.component.d.ts +7 -6
  200. package/popover/popover.directive.d.ts +11 -18
  201. package/progress/progress-circle.component.d.ts +32 -21
  202. package/progress/progress-strip.component.d.ts +10 -14
  203. package/progress/progress.component.d.ts +15 -23
  204. package/property/examples/single/single.component.scss +6 -0
  205. package/property/properties.component.d.ts +6 -13
  206. package/property/property-item.component.d.ts +21 -26
  207. package/property/styles/properties.scss +124 -52
  208. package/property-operation/property-operation.component.d.ts +6 -5
  209. package/radio/button/radio-button.component.d.ts +2 -2
  210. package/radio/group/radio-group.component.d.ts +8 -7
  211. package/radio/radio.component.d.ts +2 -2
  212. package/radio/radio.token.d.ts +2 -2
  213. package/rate/rate-item.component.d.ts +2 -1
  214. package/rate/rate.component.d.ts +4 -3
  215. package/resizable/resizable.directive.d.ts +4 -9
  216. package/resizable/resize-handle.component.d.ts +2 -1
  217. package/resizable/resize-handles.component.d.ts +2 -1
  218. package/result/result.component.d.ts +9 -10
  219. package/schematics/version.d.ts +1 -1
  220. package/schematics/version.js +1 -1
  221. package/segment/segment-item.component.d.ts +2 -1
  222. package/segment/segment.component.d.ts +2 -1
  223. package/select/custom-select/custom-select.component.d.ts +11 -10
  224. package/select/native-select/native-select.component.d.ts +2 -1
  225. package/shared/base-form-check.component.d.ts +3 -2
  226. package/shared/directives/thy-autofocus.directive.d.ts +3 -2
  227. package/shared/directives/thy-scroll.directive.d.ts +2 -1
  228. package/shared/directives/thy-show.d.ts +2 -1
  229. package/shared/option/group/option-group.component.d.ts +2 -1
  230. package/shared/option/list-option/list-option.component.d.ts +2 -7
  231. package/shared/option/option.component.d.ts +2 -1
  232. package/shared/select/select-control/select-control.component.d.ts +7 -6
  233. package/skeleton/skeleton-circle.component.d.ts +16 -19
  234. package/skeleton/skeleton-rectangle.component.d.ts +20 -23
  235. package/skeleton/skeleton.component.d.ts +5 -6
  236. package/skeleton/stylized/bullet-list.component.d.ts +11 -13
  237. package/skeleton/stylized/list.component.d.ts +10 -12
  238. package/skeleton/stylized/paragraph.component.d.ts +12 -14
  239. package/slide/slide-body/slide-body-section.component.d.ts +2 -1
  240. package/slider/slider.component.d.ts +17 -24
  241. package/space/space.component.d.ts +8 -8
  242. package/statistic/statistic.component.d.ts +35 -40
  243. package/stepper/step-header.component.d.ts +6 -10
  244. package/stepper/step.component.d.ts +6 -6
  245. package/stepper/stepper.component.d.ts +15 -20
  246. package/switch/switch.component.d.ts +24 -35
  247. package/table/table-column.component.d.ts +6 -5
  248. package/table/table-skeleton.component.d.ts +3 -10
  249. package/table/table.component.d.ts +11 -10
  250. package/tabs/tab-content.component.d.ts +4 -4
  251. package/tabs/tab.component.d.ts +4 -5
  252. package/tabs/tabs.component.d.ts +13 -15
  253. package/tag/tag.component.d.ts +10 -16
  254. package/time-picker/time-picker-panel.component.d.ts +3 -2
  255. package/time-picker/time-picker.component.d.ts +6 -5
  256. package/timeline/timeline-item.component.d.ts +9 -13
  257. package/timeline/timeline.component.d.ts +13 -17
  258. package/tooltip/tooltip.directive.d.ts +3 -2
  259. package/tree/tree-node.component.d.ts +6 -15
  260. package/tree/tree.component.d.ts +8 -7
  261. package/tree-select/tree-select.component.d.ts +8 -7
  262. package/typography/bg-color.directive.d.ts +3 -3
  263. package/typography/text/text.component.d.ts +2 -2
  264. package/typography/text-color.directive.d.ts +3 -3
  265. package/upload/file-drop.directive.d.ts +9 -11
  266. package/upload/file-select-base.d.ts +6 -10
  267. package/upload/file-select.component.d.ts +10 -20
  268. package/util/helpers/helpers.d.ts +2 -1
  269. package/vote/vote.component.d.ts +4 -3
  270. package/watermark/watermark.directive.d.ts +7 -9
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-input.mjs","sources":["../../../src/input/input.directive.ts","../../../src/input/input.component.ts","../../../src/input/input.component.html","../../../src/input/input-group.component.ts","../../../src/input/input-group.component.html","../../../src/input/input-search.component.ts","../../../src/input/input-search.component.html","../../../src/input/input-count.component.ts","../../../src/input/module.ts","../../../src/input/ngx-tethys-input.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding, Input, OnInit, Renderer2, inject } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nexport type ThyInputSize = 'xs' | 'sm' | 'md' | 'lg' | '';\n\nconst inputGroupSizeMap = {\n xs: ['form-control-xs'],\n sm: ['form-control-sm'],\n md: ['form-control-md'],\n lg: ['form-control-lg']\n};\n\n/**\n * 输入框指令\n * @name thyInput\n * @order 10\n */\n@Directive({\n selector: 'input[thyInput], select[thyInput], textarea[thyInput]',\n exportAs: 'thyInput'\n})\nexport class ThyInputDirective implements OnInit {\n private elementRef = inject(ElementRef);\n private render = inject(Renderer2);\n private control = inject(NgControl, { optional: true, self: true })!;\n\n @HostBinding('class.form-control') isFormControl = true;\n\n private initialized = false;\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 输入框大小\n * @type 'xs' | 'sm' | 'md' | 'default' | 'lg'\n * @default default\n */\n @Input()\n set thySize(size: ThyInputSize) {\n if (size && inputGroupSizeMap[size]) {\n this.hostRenderer.updateClass(inputGroupSizeMap[size]);\n } else {\n this.hostRenderer.updateClass([]);\n }\n }\n\n get ngControl() {\n return this.control;\n }\n\n get nativeElement(): HTMLInputElement {\n return this.elementRef.nativeElement;\n }\n\n ngOnInit() {\n this.initialized = true;\n }\n}\n","import { take } from 'rxjs/operators';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { ThyInputDirective, ThyInputSize } from './input.directive';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyInput),\n multi: true\n};\n\nconst noop = () => {};\n\nconst password = 'password';\n\n/**\n * 内部集成输入框组件,建议 thy-input-group 和 thyInput 组合使用\n * @name thy-input\n * @order 50\n */\n@Component({\n selector: 'thy-input',\n templateUrl: './input.component.html',\n providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-input form-control',\n '[class.form-control-active]': 'focused',\n '[class.disabled]': 'disabled'\n },\n imports: [NgTemplateOutlet, ThyInputDirective, ThyAutofocusDirective, FormsModule, ThyIcon]\n})\nexport class ThyInput implements ControlValueAccessor, OnInit {\n private ngZone = inject(NgZone);\n private elementRef = inject(ElementRef);\n\n /**\n * Placeholder\n */\n @Input() placeholder = '';\n\n /**\n * 输入框大小\n * @type 'xs' | 'sm' | 'md' | 'default' | 'lg'\n * @default default\n */\n @Input() thySize: ThyInputSize;\n\n /**\n * 是否自动聚焦\n */\n @Input({ transform: coerceBooleanProperty }) thyAutofocus = false;\n\n /**\n * 输入框类型\n * @type 'number' | 'input'\n */\n @Input()\n set thyType(value: string) {\n this.type = value;\n }\n\n /**\n * @deprecated please use thyType\n */\n @Input() type: string;\n\n /**\n * 输入 Label 文本\n */\n @Input() thyLabelText: string;\n\n /**\n * 是否只读\n */\n @Input({ transform: coerceBooleanProperty }) readonly = false;\n\n /**\n * focus 聚焦事件\n */\n @Output() focus: EventEmitter<Event> = new EventEmitter<Event>();\n\n /**\n * blur 失焦事件\n */\n @Output() blur: EventEmitter<Event> = new EventEmitter<Event>();\n\n /**\n * 后置模板\n */\n @ContentChild('append') appendTemplate: TemplateRef<any>;\n\n /**\n * 前置模板\n */\n @ContentChild('prepend') prependTemplate: TemplateRef<any>;\n\n @ViewChild('eye', { static: true }) eyeTemplate: TemplateRef<any>;\n\n public _type = 'text';\n\n public value: string;\n\n public showLabel: boolean;\n\n public focused = false;\n\n public disabled = false;\n\n private onTouchedCallback: () => void = noop;\n\n private onChangeCallback: (_: any) => void = noop;\n\n ngOnInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n if (this.isPassword(this.type)) {\n this.appendTemplate = this.eyeTemplate;\n }\n });\n }\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onModelChange() {\n this.onChangeCallback(this.value);\n }\n\n onInputFocus(event: Event) {\n this.focused = true;\n this.showLabel = true;\n this.focus.emit(event);\n }\n\n onInputBlur(event: Event) {\n this.onTouchedCallback();\n if (this.elementRef.nativeElement.onblur) {\n this.elementRef.nativeElement.onblur(event);\n }\n this.focused = false;\n this.showLabel = false;\n this.blur.emit(event);\n }\n\n isPassword(value: string) {\n return value === password;\n }\n\n togglePasswordType() {\n this.type = this.isPassword(this.type) ? 'text' : 'password';\n }\n}\n","@if (prependTemplate) {\n <div #prepend class=\"input-prepend\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n </div>\n}\n<input\n #input\n thyInput\n [thySize]=\"thySize\"\n [thyAutofocus]=\"thyAutofocus\"\n [type]=\"type\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onModelChange()\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n [readonly]=\"readonly\"\n />\n<span class=\"input-label input-label-{{ thySize }}\" [class.active]=\"showLabel\">{{ thyLabelText }}</span>\n@if (appendTemplate) {\n <div #append class=\"input-append\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n </div>\n}\n\n<ng-template #eye>\n <a href=\"javascript:;\" class=\"link-secondary input-password-icon\" (click)=\"togglePasswordType()\">\n @if (isPassword(type)) {\n <thy-icon thyIconName=\"eye\"></thy-icon>\n }\n @if (!isPassword(type)) {\n <thy-icon thyIconName=\"eye-invisible\"></thy-icon>\n }\n </a>\n</ng-template>\n","import {\n Component,\n HostBinding,\n Input,\n ContentChild,\n TemplateRef,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n AfterContentChecked,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n NgZone,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { ThyTranslate, useHostFocusControl } from 'ngx-tethys/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyInputDirective } from './input.directive';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { throttleTime } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, of } from 'rxjs';\nimport { FocusOrigin } from '@angular/cdk/a11y';\n\nexport type InputGroupSize = 'sm' | 'lg' | 'md' | '';\n\nconst inputGroupSizeMap = {\n sm: ['input-group-sm'],\n lg: ['input-group-lg'],\n md: ['input-group-md']\n};\n\n/**\n * 输入框分组\n * @name thy-input-group\n * @order 20\n */\n@Component({\n selector: 'thy-input-group',\n templateUrl: './input-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-input-group',\n '[class.form-control]': 'prefixTemplate || suffixTemplate',\n '[class.thy-input-group-with-prefix]': 'prefixTemplate',\n '[class.thy-input-group-with-suffix]': 'suffixTemplate',\n '[class.thy-input-group-with-textarea-suffix]': 'isTextareaSuffix',\n '[class.thy-input-group-with-scroll-bar]': 'isTextareaSuffix && hasScrollbar'\n },\n imports: [NgTemplateOutlet]\n})\nexport class ThyInputGroup implements OnInit, AfterContentChecked, OnDestroy {\n private thyTranslate = inject(ThyTranslate);\n private ngZone = inject(NgZone);\n private cdr = inject(ChangeDetectorRef);\n\n private hostRenderer = useHostRenderer();\n\n private hostFocusControl = useHostFocusControl();\n\n private readonly destroyRef = inject(DestroyRef);\n\n public appendText: string;\n\n public prependText: string;\n\n public isTextareaSuffix: boolean;\n\n public hasScrollbar: boolean;\n\n @HostBinding('class.disabled') disabled = false;\n\n /**\n * 输入框上添加的后置文本\n */\n @Input()\n set thyAppendText(value: string) {\n this.appendText = value;\n }\n\n /**\n * 输入框上添加的后置文本多语言 Key\n */\n @Input()\n set thyAppendTextTranslateKey(value: string) {\n if (value) {\n this.appendText = this.thyTranslate.instant(value);\n }\n }\n\n /**\n * 输入框上添加的前置文本\n */\n @Input()\n set thyPrependText(value: string) {\n this.prependText = value;\n }\n\n /**\n * 输入框上添加的前置文本多语言 Key\n */\n @Input()\n set thyPrependTextTranslateKey(value: string) {\n if (value) {\n this.prependText = this.thyTranslate.instant(value);\n }\n }\n\n /**\n * 输入框分组大小\n * @type 'sm' | 'lg' | 'md' | ''\n * @default ''\n */\n @Input()\n set thySize(size: InputGroupSize) {\n if (size && inputGroupSizeMap[size]) {\n this.hostRenderer.updateClass(inputGroupSizeMap[size]);\n } else {\n this.hostRenderer.updateClass([]);\n }\n }\n\n /**\n * 后置模板\n */\n @ContentChild('append') appendTemplate: TemplateRef<unknown>;\n\n /**\n * 前置模板\n */\n @ContentChild('prepend') prependTemplate: TemplateRef<unknown>;\n\n /**\n * 前缀\n */\n @ContentChild('prefix') prefixTemplate: TemplateRef<unknown>;\n\n /**\n * 后缀\n */\n @ContentChild('suffix') suffixTemplate: TemplateRef<unknown>;\n\n /**\n * @private\n */\n @ContentChild(ThyInputDirective) inputDirective: ThyInputDirective;\n\n ngOnInit() {\n this.hostFocusControl.focusChanged = (origin: FocusOrigin) => {\n if (origin) {\n this.hostRenderer.addClass('form-control-active');\n } else {\n this.hostRenderer.removeClass('form-control-active');\n }\n };\n }\n\n ngAfterContentChecked(): void {\n this.disabled = !!this.inputDirective?.nativeElement?.hasAttribute('disabled');\n\n this.isTextareaSuffix = this.inputDirective?.nativeElement?.tagName === 'TEXTAREA';\n if (this.isTextareaSuffix) {\n this.determineHasScrollbar();\n }\n }\n\n private determineHasScrollbar() {\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver(this.inputDirective.nativeElement)\n .pipe(throttleTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const hasScrollbar = this.inputDirective.nativeElement.scrollHeight > this.inputDirective.nativeElement.clientHeight;\n if (this.hasScrollbar !== hasScrollbar) {\n this.ngZone.run(() => {\n this.hasScrollbar = hasScrollbar;\n this.cdr.detectChanges();\n });\n }\n });\n });\n }\n\n private resizeObserver(element: HTMLElement): Observable<ResizeObserverEntry[]> {\n return typeof ResizeObserver === 'undefined' || !ResizeObserver\n ? of(null)\n : new Observable(observer => {\n const resize = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n observer.next(entries);\n });\n resize.observe(element);\n return () => {\n resize.disconnect();\n };\n });\n }\n\n ngOnDestroy() {\n this.hostFocusControl.destroy();\n }\n}\n","@if (prependText) {\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n </div>\n}\n@if (prependTemplate) {\n <div class=\"input-group-prepend\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n </div>\n}\n\n@if (prefixTemplate) {\n <div class=\"input-group-prefix\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n </div>\n}\n\n<ng-content></ng-content>\n\n@if (appendText) {\n <div class=\"input-group-append\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n </div>\n}\n@if (appendTemplate) {\n <div class=\"input-group-append\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n </div>\n}\n\n@if (suffixTemplate) {\n <div class=\"input-group-suffix\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n </div>\n}\n","import {\n AbstractControlValueAccessor,\n Constructor,\n mixinDisabled,\n mixinInitialized,\n mixinTabIndex,\n ThyCanDisable,\n ThyHasTabIndex,\n ThyInitialized,\n useHostFocusControl\n} from 'ngx-tethys/core';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { ThyInputDirective, ThyInputSize } from './input.directive';\n\nimport { FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport type ThyInputSearchTheme = 'default' | 'ellipse' | 'transparent' | '';\nexport type ThyInputSearchIconPosition = 'before' | 'after';\n\nexport const CUSTOM_INPUT_SEARCH_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyInputSearch),\n multi: true\n};\n\nconst noop = () => {};\n\nconst _MixinBase: Constructor<ThyHasTabIndex> &\n Constructor<ThyInitialized> &\n Constructor<ThyCanDisable> &\n typeof AbstractControlValueAccessor = mixinInitialized(mixinTabIndex(mixinDisabled(AbstractControlValueAccessor)));\n\n/**\n * 搜索输入框\n * @name thy-input-search\n * @order 30\n */\n@Component({\n selector: 'thy-input-search',\n templateUrl: './input-search.component.html',\n providers: [CUSTOM_INPUT_SEARCH_CONTROL_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-input form-control thy-input-search',\n '[class.thy-input-search-ellipse]': 'thyTheme === \"ellipse\"',\n '[class.thy-input-search-transparent]': 'thyTheme === \"transparent\"',\n '[class.thy-input-search-before-with-clear]': 'searchText && iconPosition === \"before\"',\n '[class.form-control-active]': 'focused',\n '[attr.tabindex]': 'tabIndex'\n },\n imports: [ThyIcon, ThyInputDirective, ThyAutofocusDirective, FormsModule]\n})\nexport class ThyInputSearch extends _MixinBase implements ControlValueAccessor, OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private elementRef = inject(ElementRef);\n\n @ViewChild('input', { static: true }) inputElement: ElementRef<any>;\n\n private hostRenderer = useHostRenderer();\n\n private hostFocusControl = useHostFocusControl();\n\n public disabled = false;\n\n public autoFocus = false;\n\n public iconPosition: ThyInputSearchIconPosition = 'before';\n\n searchText: string;\n\n focused = false;\n\n /**\n * 搜索框 name 属性\n */\n @Input() name = '';\n\n /**\n * 搜索框 Placeholder\n */\n @Input() placeholder = '';\n\n /**\n * 搜索框风格\n * @type 'default' | 'ellipse' | 'transparent'\n * @default default\n */\n @Input() thyTheme: ThyInputSearchTheme;\n\n /**\n * 是否自动聚焦\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n set thySearchFocus(value: boolean) {\n this.autoFocus = value;\n this.focused = value;\n }\n\n /**\n * 搜索图标位置,当传入 after 时,搜索图标在输入框后方显示,有内容时显示为关闭按钮\n * @type\n */\n @Input() set thyIconPosition(value: ThyInputSearchIconPosition) {\n this.iconPosition = value || 'before';\n this.updateClasses();\n }\n\n /**\n * 输入框大小\n * @type 'xs' | 'sm' | 'md' | 'default' | 'lg'\n */\n @Input() thySize: ThyInputSize;\n\n /**\n * @deprecated please use thyClear\n */\n @Output() clear: EventEmitter<Event> = new EventEmitter<Event>();\n\n /**\n * 清除搜索事件\n */\n @Output() thyClear: EventEmitter<Event> = new EventEmitter<Event>();\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.updateClasses(true);\n\n this.hostFocusControl.focusChanged = (origin: FocusOrigin) => {\n if (this.disabled) {\n return;\n }\n\n if (origin) {\n if (!this.focused) {\n this.inputElement.nativeElement.focus();\n }\n } else {\n if (this.focused) {\n this.focused = false;\n this.onTouchedFn();\n }\n }\n this.cdr.markForCheck();\n };\n }\n\n updateClasses(forceUpdate = false) {\n if (this.initialized || forceUpdate) {\n this.hostRenderer.updateClass([`thy-input-search-${this.iconPosition}`]);\n }\n }\n\n writeValue(value: any): void {\n this.searchText = value;\n this.cdr.markForCheck();\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n searchModelChange() {\n this.onChangeFn(this.searchText);\n }\n\n clearSearchText(event: Event) {\n const element = this.elementRef.nativeElement.querySelector('.input-search-control');\n element.focus();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.searchText = '';\n this.onChangeFn(this.searchText);\n this.clear.emit(event);\n this.thyClear.emit(event);\n }\n\n ngOnDestroy(): void {\n this.hostFocusControl.destroy();\n }\n}\n","@if (iconPosition === 'before') {\n <thy-icon class=\"input-prepend\" thyIconName=\"search\"></thy-icon>\n}\n<input\n class=\"input-search-control\"\n #input\n thyInput\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [thyAutofocus]=\"autoFocus\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"searchModelChange()\"\n (focus)=\"!focused ? (focused = true) : null\"\n [thySize]=\"thySize\"\n tabindex=\"-1\" />\n@if (iconPosition === 'after') {\n <div class=\"input-append input-append-divider\">\n @if (searchText) {\n <a class=\"close\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n } @else {\n <thy-icon class=\"text-placeholder\" thyIconName=\"search\"></thy-icon>\n }\n </div>\n}\n\n@if (searchText && iconPosition === 'before') {\n <a class=\"close input-append\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n","import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, inject, DestroyRef } from '@angular/core';\nimport { ThyInputDirective } from './input.directive';\nimport { switchMap, filter, tap } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { ThyInputGroup } from './input-group.component';\n\n/**\n * 输入框输入文字展示\n * @name thy-input-count\n * @order 40\n */\n@Component({\n selector: 'thy-input-count',\n template: '{{inputLength}} / {{maxLength}}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-input-count text-muted'\n }\n})\nexport class ThyInputCount implements OnInit {\n private changeDetectorRef = inject(ChangeDetectorRef);\n private inputGroup = inject(ThyInputGroup, { optional: true })!;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private hasInput = false;\n\n /**\n * 输入框组件,如果不传默认会读取外层 thy-input-group 下的 thyInput 指令\n * @type ThyInputDirective\n */\n @Input() set thyInput(value: ThyInputDirective) {\n this.hasInput = true;\n this.thyInput$.next(value);\n }\n\n maxLength: number | string;\n\n inputLength = 0;\n\n thyInput$ = new Subject<ThyInputDirective>();\n\n constructor() {\n this.setup();\n }\n\n setup() {\n this.thyInput$\n .pipe(\n filter(input => {\n return !!input;\n }),\n tap(input => {\n this.maxLength = input.nativeElement.getAttribute('maxlength');\n this.changeDetectorRef.markForCheck();\n }),\n takeUntilDestroyed(this.destroyRef),\n switchMap(input => {\n return input.ngControl.valueChanges;\n }),\n tap(value => {\n this.inputLength = value?.length || 0;\n this.changeDetectorRef.markForCheck();\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe();\n }\n\n ngOnInit(): void {\n if (!this.hasInput && this.inputGroup && this.inputGroup.inputDirective) {\n this.thyInput$.next(this.inputGroup.inputDirective);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyInputDirective } from './input.directive';\nimport { ThyInput } from './input.component';\nimport { ThyInputGroup } from './input-group.component';\nimport { ThyInputSearch } from './input-search.component';\nimport { FormsModule } from '@angular/forms';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyInputCount } from './input-count.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThySharedModule,\n ThyIconModule,\n ThyDividerModule,\n ThyInputDirective,\n ThyInput,\n ThyInputGroup,\n ThyInputSearch,\n ThyInputCount\n ],\n exports: [ThyInputDirective, ThyInput, ThyInputGroup, ThyInputSearch, ThyInputCount]\n})\nexport class ThyInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["inputGroupSizeMap","noop"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-input.mjs","sources":["../../../src/input/input.directive.ts","../../../src/input/input.component.ts","../../../src/input/input.component.html","../../../src/input/input-group.component.ts","../../../src/input/input-group.component.html","../../../src/input/input-search.component.ts","../../../src/input/input-search.component.html","../../../src/input/input-count.component.ts","../../../src/input/module.ts","../../../src/input/ngx-tethys-input.ts"],"sourcesContent":["import { Directive, ElementRef, HostBinding, Input, OnInit, Renderer2, effect, inject, input } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nexport type ThyInputSize = 'xs' | 'sm' | 'md' | 'lg' | '';\n\nconst inputGroupSizeMap = {\n xs: ['form-control-xs'],\n sm: ['form-control-sm'],\n md: ['form-control-md'],\n lg: ['form-control-lg']\n};\n\n/**\n * 输入框指令\n * @name thyInput\n * @order 10\n */\n@Directive({\n selector: 'input[thyInput], select[thyInput], textarea[thyInput]',\n exportAs: 'thyInput'\n})\nexport class ThyInputDirective {\n private elementRef = inject(ElementRef);\n private render = inject(Renderer2);\n private control = inject(NgControl, { optional: true, self: true })!;\n\n @HostBinding('class.form-control') isFormControl = true;\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 输入框大小\n * @type 'xs' | 'sm' | 'md' | 'default' | 'lg'\n * @default default\n */\n readonly thySize = input<ThyInputSize>(undefined);\n\n get ngControl() {\n return this.control;\n }\n\n get nativeElement(): HTMLInputElement {\n return this.elementRef.nativeElement;\n }\n\n constructor() {\n effect(() => {\n const size = this.thySize();\n if (size && inputGroupSizeMap[size]) {\n this.hostRenderer.updateClass(inputGroupSizeMap[size]);\n } else {\n this.hostRenderer.updateClass([]);\n }\n });\n }\n}\n","import { take } from 'rxjs/operators';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n ElementRef,\n forwardRef,\n NgZone,\n OnInit,\n TemplateRef,\n ViewEncapsulation,\n inject,\n input,\n effect,\n signal,\n output,\n contentChild\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { ThyInputDirective, ThyInputSize } from './input.directive';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyInput),\n multi: true\n};\n\nconst noop = () => {};\n\nconst password = 'password';\n\n/**\n * 内部集成输入框组件,建议 thy-input-group 和 thyInput 组合使用\n * @name thy-input\n * @order 50\n */\n@Component({\n selector: 'thy-input',\n templateUrl: './input.component.html',\n providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-input form-control',\n '[class.form-control-active]': 'focused()',\n '[class.disabled]': 'disabled()'\n },\n imports: [NgTemplateOutlet, ThyInputDirective, ThyAutofocusDirective, FormsModule, ThyIcon]\n})\nexport class ThyInput implements ControlValueAccessor, OnInit {\n private ngZone = inject(NgZone);\n private elementRef = inject(ElementRef);\n\n /**\n * Placeholder\n */\n readonly placeholder = input('');\n\n /**\n * 输入框大小\n * @type 'xs' | 'sm' | 'md' | 'default' | 'lg'\n * @default default\n */\n readonly thySize = input<ThyInputSize>();\n\n /**\n * 是否自动聚焦\n */\n readonly thyAutofocus = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 输入框类型\n * @type 'number' | 'input'\n */\n readonly thyType = input<string>();\n\n /**\n * @deprecated please use thyType\n */\n readonly _type = input<string>(undefined, { alias: 'type' });\n\n /**\n * 输入 Label 文本\n */\n readonly thyLabelText = input<string>(undefined);\n\n /**\n * 是否只读\n */\n readonly readonly = input(false, { transform: coerceBooleanProperty });\n\n /**\n * focus 聚焦事件\n */\n readonly focus = output<Event>();\n\n /**\n * blur 失焦事件\n */\n readonly blur = output<Event>();\n\n /**\n * 后置模板\n */\n readonly appendTemplate = contentChild<TemplateRef<any>>('append');\n\n /**\n * 前置模板\n */\n readonly prependTemplate = contentChild<TemplateRef<any>>('prepend');\n\n public type = signal<string>(undefined);\n\n public value = signal('');\n\n public showLabel = signal(false);\n\n public focused = signal(false);\n\n public disabled = signal(false);\n\n private onTouchedCallback: () => void = noop;\n\n private onChangeCallback: (_: any) => void = noop;\n\n public isPasswordType = signal(false);\n\n constructor() {\n effect(() => {\n this.type.set(this.thyType() || this._type());\n });\n }\n\n ngOnInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.isPasswordType.set(this.isPassword(this.type()));\n });\n }\n\n writeValue(value: any): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n onModelChange() {\n this.onChangeCallback(this.value());\n }\n\n onInputFocus(event: Event) {\n this.focused.set(true);\n this.showLabel.set(true);\n this.focus.emit(event);\n }\n\n onInputBlur(event: Event) {\n this.onTouchedCallback();\n if (this.elementRef.nativeElement.onblur) {\n this.elementRef.nativeElement.onblur(event);\n }\n this.focused.set(false);\n this.showLabel.set(false);\n this.blur.emit(event);\n }\n\n isPassword(value: string) {\n return value === password;\n }\n\n togglePasswordType() {\n this.type.set(this.isPassword(this.type()) ? 'text' : 'password');\n }\n}\n","@if (prependTemplate()) {\n <div #prepend class=\"input-prepend\">\n <ng-template *ngTemplateOutlet=\"prependTemplate()\"></ng-template>\n </div>\n}\n<input\n #input\n thyInput\n [thySize]=\"thySize()\"\n [thyAutofocus]=\"thyAutofocus()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onModelChange()\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputBlur($event)\"\n [readonly]=\"readonly()\"\n />\n<span class=\"input-label input-label-{{ thySize() }}\" [class.active]=\"showLabel()\">{{ thyLabelText() }}</span>\n\n@if (isPasswordType() || appendTemplate()) {\n <div #append class=\"input-append\">\n @if (isPasswordType()) {\n <a href=\"javascript:;\" class=\"link-secondary input-password-icon\" (click)=\"togglePasswordType()\">\n @if (isPassword(type())) {\n <thy-icon thyIconName=\"eye\"></thy-icon>\n }\n @if (!isPassword(type())) {\n <thy-icon thyIconName=\"eye-invisible\"></thy-icon>\n }\n </a>\n } @else {\n <ng-template *ngTemplateOutlet=\"appendTemplate()\"></ng-template>\n }\n </div>\n}\n","import {\n Component,\n TemplateRef,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n NgZone,\n inject,\n DestroyRef,\n input,\n computed,\n effect,\n contentChild,\n signal\n} from '@angular/core';\nimport { ThyTranslate, useHostFocusControl } from 'ngx-tethys/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyInputDirective } from './input.directive';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { throttleTime } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, of } from 'rxjs';\nimport { FocusOrigin } from '@angular/cdk/a11y';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\n\nexport type InputGroupSize = 'sm' | 'lg' | 'md' | '';\n\nconst inputGroupSizeMap = {\n sm: ['input-group-sm'],\n lg: ['input-group-lg'],\n md: ['input-group-md']\n};\n\n/**\n * 输入框分组\n * @name thy-input-group\n * @order 20\n */\n@Component({\n selector: 'thy-input-group',\n templateUrl: './input-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'thy-input-group',\n '[class.form-control]': 'prefixTemplate() || suffixTemplate()',\n '[class.thy-input-group-with-prefix]': 'prefixTemplate()',\n '[class.thy-input-group-with-suffix]': 'suffixTemplate()',\n '[class.thy-input-group-with-textarea-suffix]': 'isTextareaSuffix()',\n '[class.thy-input-group-with-scroll-bar]': 'isTextareaSuffix() && hasScrollbar()',\n '[class.disabled]': 'disabled()'\n },\n imports: [NgTemplateOutlet]\n})\nexport class ThyInputGroup implements OnInit, OnDestroy {\n private thyTranslate = inject(ThyTranslate);\n private ngZone = inject(NgZone);\n\n private hostRenderer = useHostRenderer();\n\n private hostFocusControl = useHostFocusControl();\n\n private readonly destroyRef = inject(DestroyRef);\n\n public isTextareaSuffix = signal(false);\n\n public hasScrollbar = signal(false);\n\n disabled = signal(false);\n\n /**\n * 输入框上添加的后置文本\n */\n readonly thyAppendText = input<string>();\n\n /**\n * 输入框上添加的后置文本多语言 Key\n */\n readonly thyAppendTextTranslateKey = input<string>();\n\n /**\n * 输入框上添加的前置文本\n */\n readonly thyPrependText = input<string>();\n\n /**\n * 输入框上添加的前置文本多语言 Key\n */\n readonly thyPrependTextTranslateKey = input<string>();\n\n protected readonly prependText = computed(() => {\n const prependTextTranslateKey = this.thyPrependTextTranslateKey();\n if (prependTextTranslateKey) {\n return this.thyTranslate.instant(prependTextTranslateKey);\n }\n return this.thyPrependText();\n });\n\n protected readonly appendText = computed(() => {\n const appendTextTranslateKey = this.thyAppendTextTranslateKey();\n if (appendTextTranslateKey) {\n return this.thyTranslate.instant(appendTextTranslateKey);\n }\n return this.thyAppendText();\n });\n\n /**\n * 输入框分组大小\n * @type 'sm' | 'lg' | 'md' | ''\n * @default ''\n */\n readonly thySize = input<InputGroupSize>();\n\n /**\n * 后置模板\n */\n readonly appendTemplate = contentChild<TemplateRef<unknown>>('append');\n\n /**\n * 前置模板\n */\n readonly prependTemplate = contentChild<TemplateRef<unknown>>('prepend');\n\n /**\n * 前缀\n */\n readonly prefixTemplate = contentChild<TemplateRef<unknown>>('prefix');\n\n /**\n * 后缀\n */\n readonly suffixTemplate = contentChild<TemplateRef<unknown>>('suffix');\n\n /**\n * @private\n */\n readonly inputDirective = contentChild(ThyInputDirective);\n\n private disabledObservable: MutationObserver;\n\n constructor() {\n effect(() => {\n const size = this.thySize();\n if (size && inputGroupSizeMap[size]) {\n this.hostRenderer.updateClass(inputGroupSizeMap[size]);\n } else {\n this.hostRenderer.updateClass([]);\n }\n });\n\n effect(() => {\n const inputDirective = this.inputDirective();\n if (inputDirective?.nativeElement) {\n this.isTextareaSuffix.set(inputDirective?.nativeElement?.tagName === 'TEXTAREA');\n if (this.isTextareaSuffix()) {\n this.determineHasScrollbar();\n }\n }\n });\n\n effect(() => {\n const inputDirective = this.inputDirective();\n this.disabledObservable?.disconnect();\n if (inputDirective?.nativeElement) {\n this.disabledObservable = new MutationObserverFactory().create(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'disabled') {\n this.disabled.set(!!inputDirective.nativeElement.hasAttribute('disabled'));\n }\n }\n });\n if (this.disabledObservable) {\n this.disabledObservable.observe(inputDirective.nativeElement, {\n attributes: true,\n attributeFilter: ['disabled']\n });\n }\n }\n });\n }\n\n ngOnInit() {\n this.hostFocusControl.focusChanged = (origin: FocusOrigin) => {\n if (origin) {\n this.hostRenderer.addClass('form-control-active');\n } else {\n this.hostRenderer.removeClass('form-control-active');\n }\n };\n }\n\n private determineHasScrollbar() {\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver(this.inputDirective().nativeElement)\n .pipe(throttleTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const hasScrollbar =\n this.inputDirective().nativeElement.scrollHeight > this.inputDirective().nativeElement.clientHeight;\n if (this.hasScrollbar() !== hasScrollbar) {\n this.ngZone.run(() => {\n this.hasScrollbar.set(hasScrollbar);\n });\n }\n });\n });\n }\n\n private resizeObserver(element: HTMLElement): Observable<ResizeObserverEntry[]> {\n return typeof ResizeObserver === 'undefined' || !ResizeObserver\n ? of(null)\n : new Observable(observer => {\n const resize = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n observer.next(entries);\n });\n resize.observe(element);\n return () => {\n resize.disconnect();\n };\n });\n }\n\n ngOnDestroy() {\n this.hostFocusControl.destroy();\n }\n}\n","@if (prependText()) {\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text\">{{ prependText() }}</span>\n </div>\n}\n@if (prependTemplate()) {\n <div class=\"input-group-prepend\">\n <ng-template *ngTemplateOutlet=\"prependTemplate()\"></ng-template>\n </div>\n}\n\n@if (prefixTemplate()) {\n <div class=\"input-group-prefix\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate()\"></ng-template>\n </div>\n}\n\n<ng-content></ng-content>\n\n@if (appendText()) {\n <div class=\"input-group-append\">\n <span class=\"input-group-text\">{{ appendText() }}</span>\n </div>\n}\n@if (appendTemplate()) {\n <div class=\"input-group-append\">\n <ng-template *ngTemplateOutlet=\"appendTemplate()\"></ng-template>\n </div>\n}\n\n@if (suffixTemplate()) {\n <div class=\"input-group-suffix\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate()\"></ng-template>\n </div>\n}\n","import {\n AbstractControlValueAccessor,\n Constructor,\n mixinDisabled,\n mixinInitialized,\n mixinTabIndex,\n ThyCanDisable,\n ThyHasTabIndex,\n ThyInitialized,\n useHostFocusControl\n} from 'ngx-tethys/core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n forwardRef,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n inject,\n input,\n effect,\n signal,\n output,\n viewChild\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { ThyInputDirective, ThyInputSize } from './input.directive';\n\nimport { FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport type ThyInputSearchTheme = 'default' | 'ellipse' | 'transparent' | '';\nexport type ThyInputSearchIconPosition = 'before' | 'after';\n\nexport const CUSTOM_INPUT_SEARCH_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyInputSearch),\n multi: true\n};\n\nconst noop = () => {};\n\nconst _MixinBase: Constructor<ThyHasTabIndex> &\n Constructor<ThyInitialized> &\n Constructor<ThyCanDisable> &\n typeof AbstractControlValueAccessor = mixinInitialized(mixinTabIndex(mixinDisabled(AbstractControlValueAccessor)));\n\n/**\n * 搜索输入框\n * @name thy-input-search\n * @order 30\n */\n@Component({\n selector: 'thy-input-search',\n templateUrl: './input-search.component.html',\n providers: [CUSTOM_INPUT_SEARCH_CONTROL_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-input form-control thy-input-search',\n '[class.thy-input-search-ellipse]': 'thyTheme() === \"ellipse\"',\n '[class.thy-input-search-transparent]': 'thyTheme() === \"transparent\"',\n '[class.thy-input-search-before-with-clear]': 'searchText() && iconPosition() === \"before\"',\n '[class.form-control-active]': 'focused()',\n '[attr.tabindex]': 'tabIndex'\n },\n imports: [ThyIcon, ThyInputDirective, ThyAutofocusDirective, FormsModule]\n})\nexport class ThyInputSearch extends _MixinBase implements ControlValueAccessor, OnInit, OnDestroy {\n private elementRef = inject(ElementRef);\n\n readonly inputElement = viewChild<ElementRef<any>>('input');\n\n private hostRenderer = useHostRenderer();\n\n private hostFocusControl = useHostFocusControl();\n\n public disabled = signal(false);\n\n searchText = signal<string>('');\n\n focused = signal(false);\n\n /**\n * 搜索框 name 属性\n */\n readonly name = input('');\n\n /**\n * 搜索框 Placeholder\n */\n readonly placeholder = input('');\n\n /**\n * 搜索框风格\n * @type 'default' | 'ellipse' | 'transparent'\n * @default default\n */\n readonly thyTheme = input<ThyInputSearchTheme>();\n\n /**\n * 是否自动聚焦\n * @default false\n */\n readonly autoFocus = input(false, { alias: 'thySearchFocus', transform: coerceBooleanProperty });\n\n /**\n * 搜索图标位置,当传入 after 时,搜索图标在输入框后方显示,有内容时显示为关闭按钮\n * @type ThyInputSearchIconPosition\n */\n readonly iconPosition = input('before', {\n alias: 'thyIconPosition',\n transform: (value: ThyInputSearchIconPosition) => value || 'before'\n });\n\n /**\n * 输入框大小\n * @type 'xs' | 'sm' | 'md' | 'default' | 'lg'\n */\n readonly thySize = input<ThyInputSize>();\n\n /**\n * @deprecated please use thyClear\n */\n readonly clear = output<Event>();\n\n /**\n * 清除搜索事件\n */\n readonly thyClear = output<Event>();\n\n constructor() {\n super();\n\n effect(() => {\n this.focused.set(this.autoFocus());\n });\n\n effect(() => {\n const iconPosition = this.iconPosition();\n this.hostRenderer.updateClass([`thy-input-search-${iconPosition}`]);\n });\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.hostFocusControl.focusChanged = (origin: FocusOrigin) => {\n if (this.disabled()) {\n return;\n }\n\n if (origin) {\n if (!this.focused()) {\n this.inputElement().nativeElement.focus();\n }\n } else {\n if (this.focused()) {\n this.focused.set(false);\n this.onTouchedFn();\n }\n }\n };\n }\n\n writeValue(value: any): void {\n this.searchText.set(value);\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n searchModelChange() {\n this.onChangeFn(this.searchText());\n }\n\n clearSearchText(event: Event) {\n const element = this.elementRef.nativeElement.querySelector('.input-search-control');\n element.focus();\n event.stopPropagation();\n if (this.disabled()) {\n return;\n }\n this.searchText.set('');\n this.onChangeFn(this.searchText());\n this.clear.emit(event);\n this.thyClear.emit(event);\n }\n\n ngOnDestroy(): void {\n this.hostFocusControl.destroy();\n }\n}\n","@if (iconPosition() === 'before') {\n <thy-icon class=\"input-prepend\" thyIconName=\"search\"></thy-icon>\n}\n<input\n class=\"input-search-control\"\n #input\n thyInput\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [thyAutofocus]=\"autoFocus()\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"searchModelChange()\"\n (focus)=\"!focused() ? (focused.set(true)) : null\"\n [thySize]=\"thySize()\"\n tabindex=\"-1\" />\n@if (iconPosition() === 'after') {\n <div class=\"input-append input-append-divider\">\n @if (searchText()) {\n <a class=\"close\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n } @else {\n <thy-icon class=\"text-placeholder\" thyIconName=\"search\"></thy-icon>\n }\n </div>\n}\n\n@if (searchText() && iconPosition() === 'before') {\n <a class=\"close input-append\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n","import { Component, OnInit, ChangeDetectionStrategy, inject, DestroyRef, input, effect, signal } from '@angular/core';\nimport { ThyInputDirective } from './input.directive';\nimport { switchMap, filter, tap } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { ThyInputGroup } from './input-group.component';\n\n/**\n * 输入框输入文字展示\n * @name thy-input-count\n * @order 40\n */\n@Component({\n selector: 'thy-input-count',\n template: '{{inputLength()}} / {{maxLength()}}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-input-count text-muted'\n }\n})\nexport class ThyInputCount implements OnInit {\n private inputGroup = inject(ThyInputGroup, { optional: true })!;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private hasInput = false;\n\n /**\n * 输入框组件,如果不传默认会读取外层 thy-input-group 下的 thyInput 指令\n * @type ThyInputDirective\n */\n readonly thyInput = input<ThyInputDirective>();\n\n maxLength = signal<number | string>(undefined);\n\n inputLength = signal(0);\n\n thyInput$ = new Subject<ThyInputDirective>();\n\n constructor() {\n this.setup();\n\n effect(() => {\n const input = this.thyInput();\n if (input) {\n this.hasInput = true;\n this.thyInput$.next(input);\n }\n });\n }\n\n setup() {\n this.thyInput$\n .pipe(\n filter(input => {\n return !!input;\n }),\n tap(input => {\n this.maxLength.set(input.nativeElement.getAttribute('maxlength'));\n }),\n takeUntilDestroyed(this.destroyRef),\n switchMap(input => {\n return input.ngControl.valueChanges;\n }),\n tap(value => {\n this.inputLength.set(value?.length || 0);\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe();\n }\n\n ngOnInit(): void {\n const inputDirective = this.inputGroup.inputDirective();\n if (!this.hasInput && this.inputGroup && inputDirective) {\n this.thyInput$.next(inputDirective);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyInputDirective } from './input.directive';\nimport { ThyInput } from './input.component';\nimport { ThyInputGroup } from './input-group.component';\nimport { ThyInputSearch } from './input-search.component';\nimport { FormsModule } from '@angular/forms';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyInputCount } from './input-count.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ThySharedModule,\n ThyIconModule,\n ThyDividerModule,\n ThyInputDirective,\n ThyInput,\n ThyInputGroup,\n ThyInputSearch,\n ThyInputCount\n ],\n exports: [ThyInputDirective, ThyInput, ThyInputGroup, ThyInputSearch, ThyInputCount]\n})\nexport class ThyInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["inputGroupSizeMap","noop"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, HostBinding, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
2
+ import { input, HostBinding, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import { coerceBooleanProperty } from 'ngx-tethys/util';
4
4
  import { CommonModule } from '@angular/common';
5
5
 
@@ -10,46 +10,28 @@ import { CommonModule } from '@angular/common';
10
10
  */
11
11
  class ThyLoading {
12
12
  constructor() {
13
- this.changeDetectorRef = inject(ChangeDetectorRef);
13
+ /**
14
+ * 数据是否加载完成
15
+ * @default false
16
+ */
17
+ this.thyDone = input(false, { transform: coerceBooleanProperty });
18
+ /**
19
+ * 自定义加载提示文案
20
+ */
21
+ this.thyTip = input('');
22
+ /**
23
+ * 加载时是否启用嵌套遮罩模式,不传或传 false,没有遮罩层,加载完成出现内容
24
+ */
25
+ this.thyIsMask = input(false, { transform: coerceBooleanProperty });
14
26
  this.loadingClassName = true;
15
27
  }
16
- /**
17
- * 数据是否加载完成
18
- * @default false
19
- */
20
- set thyDone(value) {
21
- this.isDone = value;
22
- this.changeDetectorRef.markForCheck();
23
- }
24
- /**
25
- * 自定义加载提示文案
26
- */
27
- set thyTip(value) {
28
- this.tip = value;
29
- this.changeDetectorRef.markForCheck();
30
- }
31
- /**
32
- * 加载时是否启用嵌套遮罩模式,不传或传 false,没有遮罩层,加载完成出现内容
33
- */
34
- set thyIsMask(value) {
35
- this.isMask = value;
36
- this.changeDetectorRef.markForCheck();
37
- }
38
28
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyLoading, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyLoading, isStandalone: true, selector: "thy-loading", inputs: { thyDone: ["thyDone", "thyDone", coerceBooleanProperty], thyTip: "thyTip", thyIsMask: ["thyIsMask", "thyIsMask", coerceBooleanProperty] }, host: { properties: { "class.thy-loading": "this.loadingClassName" } }, ngImport: i0, template: "<div [class.thy-loading-mask]=\"isMask && !isDone\">\n @if (!isDone) {\n <div class=\"thy-loading-indicator\">\n <h4>\n <span [style.display]=\"tip ? 'inline' : 'none'\">{{ tip }}</span>\n <div class=\"thy-loading-ellipsis\">\n <span class=\"thy-spot\"></span>\n </div>\n </h4>\n </div>\n }\n @if (isMask || isDone) {\n <ng-content></ng-content>\n }\n</div>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyLoading, isStandalone: true, selector: "thy-loading", inputs: { thyDone: { classPropertyName: "thyDone", publicName: "thyDone", isSignal: true, isRequired: false, transformFunction: null }, thyTip: { classPropertyName: "thyTip", publicName: "thyTip", isSignal: true, isRequired: false, transformFunction: null }, thyIsMask: { classPropertyName: "thyIsMask", publicName: "thyIsMask", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-loading": "this.loadingClassName" } }, ngImport: i0, template: "<div [class.thy-loading-mask]=\"thyIsMask() && !thyDone()\">\n @if (!thyDone()) {\n <div class=\"thy-loading-indicator\">\n <h4>\n <span [style.display]=\"thyTip() ? 'inline' : 'none'\">{{ thyTip() }}</span>\n <div class=\"thy-loading-ellipsis\">\n <span class=\"thy-spot\"></span>\n </div>\n </h4>\n </div>\n }\n @if (thyIsMask() || thyDone()) {\n <ng-content></ng-content>\n }\n</div>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
30
  }
41
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyLoading, decorators: [{
42
32
  type: Component,
43
- args: [{ selector: 'thy-loading', changeDetection: ChangeDetectionStrategy.OnPush, imports: [], template: "<div [class.thy-loading-mask]=\"isMask && !isDone\">\n @if (!isDone) {\n <div class=\"thy-loading-indicator\">\n <h4>\n <span [style.display]=\"tip ? 'inline' : 'none'\">{{ tip }}</span>\n <div class=\"thy-loading-ellipsis\">\n <span class=\"thy-spot\"></span>\n </div>\n </h4>\n </div>\n }\n @if (isMask || isDone) {\n <ng-content></ng-content>\n }\n</div>\n" }]
44
- }], propDecorators: { thyDone: [{
45
- type: Input,
46
- args: [{ transform: coerceBooleanProperty }]
47
- }], thyTip: [{
48
- type: Input
49
- }], thyIsMask: [{
50
- type: Input,
51
- args: [{ transform: coerceBooleanProperty }]
52
- }], loadingClassName: [{
33
+ args: [{ selector: 'thy-loading', changeDetection: ChangeDetectionStrategy.OnPush, imports: [], template: "<div [class.thy-loading-mask]=\"thyIsMask() && !thyDone()\">\n @if (!thyDone()) {\n <div class=\"thy-loading-indicator\">\n <h4>\n <span [style.display]=\"thyTip() ? 'inline' : 'none'\">{{ thyTip() }}</span>\n <div class=\"thy-loading-ellipsis\">\n <span class=\"thy-spot\"></span>\n </div>\n </h4>\n </div>\n }\n @if (thyIsMask() || thyDone()) {\n <ng-content></ng-content>\n }\n</div>\n" }]
34
+ }], propDecorators: { loadingClassName: [{
53
35
  type: HostBinding,
54
36
  args: ['class.thy-loading']
55
37
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-loading.mjs","sources":["../../../src/loading/loading.component.ts","../../../src/loading/loading.component.html","../../../src/loading/loading.module.ts","../../../src/loading/ngx-tethys-loading.ts"],"sourcesContent":["import { Component, Input, HostBinding, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';\n\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 加载组件,页面调用接口等待请求时,给用户的反馈\n * @name thy-loading\n * @order 10\n */\n@Component({\n selector: 'thy-loading',\n templateUrl: './loading.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: []\n})\nexport class ThyLoading {\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n public isDone: boolean;\n\n public tip: string;\n\n public isMask: boolean;\n\n /**\n * 数据是否加载完成\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n set thyDone(value: boolean) {\n this.isDone = value;\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * 自定义加载提示文案\n */\n @Input()\n set thyTip(value: string) {\n this.tip = value;\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * 加载时是否启用嵌套遮罩模式,不传或传 false,没有遮罩层,加载完成出现内容\n */\n @Input({ transform: coerceBooleanProperty })\n set thyIsMask(value: boolean) {\n this.isMask = value;\n this.changeDetectorRef.markForCheck();\n }\n\n @HostBinding('class.thy-loading') loadingClassName = true;\n}\n","<div [class.thy-loading-mask]=\"isMask && !isDone\">\n @if (!isDone) {\n <div class=\"thy-loading-indicator\">\n <h4>\n <span [style.display]=\"tip ? 'inline' : 'none'\">{{ tip }}</span>\n <div class=\"thy-loading-ellipsis\">\n <span class=\"thy-spot\"></span>\n </div>\n </h4>\n </div>\n }\n @if (isMask || isDone) {\n <ng-content></ng-content>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyLoading } from './loading.component';\n\n@NgModule({\n imports: [CommonModule, ThyLoading],\n exports: [ThyLoading]\n})\nexport class ThyLoadingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAIA;;;;AAIG;MAOU,UAAU,CAAA;AANvB,IAAA,WAAA,GAAA;AAOY,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAoCnB,IAAgB,CAAA,gBAAA,GAAG,IAAI;AAC5D;AA7BG;;;AAGG;IACH,IACI,OAAO,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAGzC;;AAEG;IACH,IACI,MAAM,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAChB,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAGzC;;AAEG;IACH,IACI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;8GAlChC,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAaC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,qBAAqB,CAkBrB,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,qBAAqB,qGC9C7C,8ZAeA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDAa,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAEN,eAAA,EAAA,uBAAuB,CAAC,MAAM,WACtC,EAAE,EAAA,QAAA,EAAA,8ZAAA,EAAA;8BAgBP,OAAO,EAAA,CAAA;sBADV,KAAK;uBAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE;gBAUvC,MAAM,EAAA,CAAA;sBADT;gBAUG,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE;gBAMT,gBAAgB,EAAA,CAAA;sBAAjD,WAAW;uBAAC,mBAAmB;;;ME5CvB,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAHf,OAAA,EAAA,CAAA,YAAY,EAAE,UAAU,aACxB,UAAU,CAAA,EAAA,CAAA,CAAA;AAEX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAHf,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;oBACnC,OAAO,EAAE,CAAC,UAAU;AACvB,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-tethys-loading.mjs","sources":["../../../src/loading/loading.component.ts","../../../src/loading/loading.component.html","../../../src/loading/loading.module.ts","../../../src/loading/ngx-tethys-loading.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, input } from '@angular/core';\n\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 加载组件,页面调用接口等待请求时,给用户的反馈\n * @name thy-loading\n * @order 10\n */\n@Component({\n selector: 'thy-loading',\n templateUrl: './loading.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: []\n})\nexport class ThyLoading {\n /**\n * 数据是否加载完成\n * @default false\n */\n readonly thyDone = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 自定义加载提示文案\n */\n readonly thyTip = input<string>('');\n\n /**\n * 加载时是否启用嵌套遮罩模式,不传或传 false,没有遮罩层,加载完成出现内容\n */\n readonly thyIsMask = input(false, { transform: coerceBooleanProperty });\n\n @HostBinding('class.thy-loading') loadingClassName = true;\n}\n","<div [class.thy-loading-mask]=\"thyIsMask() && !thyDone()\">\n @if (!thyDone()) {\n <div class=\"thy-loading-indicator\">\n <h4>\n <span [style.display]=\"thyTip() ? 'inline' : 'none'\">{{ thyTip() }}</span>\n <div class=\"thy-loading-ellipsis\">\n <span class=\"thy-spot\"></span>\n </div>\n </h4>\n </div>\n }\n @if (thyIsMask() || thyDone()) {\n <ng-content></ng-content>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyLoading } from './loading.component';\n\n@NgModule({\n imports: [CommonModule, ThyLoading],\n exports: [ThyLoading]\n})\nexport class ThyLoadingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAIA;;;;AAIG;MAOU,UAAU,CAAA;AANvB,IAAA,WAAA,GAAA;AAOI;;;AAGG;QACM,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;AAErE;;AAEG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,EAAE,CAAC;AAEnC;;AAEG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;QAErC,IAAgB,CAAA,gBAAA,GAAG,IAAI;AAC5D;8GAlBY,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,whBCfvB,2bAeA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDAa,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAEN,eAAA,EAAA,uBAAuB,CAAC,MAAM,WACtC,EAAE,EAAA,QAAA,EAAA,2bAAA,EAAA;8BAmBuB,gBAAgB,EAAA,CAAA;sBAAjD,WAAW;uBAAC,mBAAmB;;;MExBvB,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAHf,OAAA,EAAA,CAAA,YAAY,EAAE,UAAU,aACxB,UAAU,CAAA,EAAA,CAAA,CAAA;AAEX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAHf,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;oBACnC,OAAO,EAAE,CAAC,UAAU;AACvB,iBAAA;;;ACPD;;AAEG;;;;"}
@@ -439,7 +439,7 @@ class ThyMentionDirective {
439
439
  /**
440
440
  * 选择后的回调函数
441
441
  */
442
- this.select = output();
442
+ this.thySelectSuggestion = output();
443
443
  this.mentions = computed(() => {
444
444
  if (this.thyMention()) {
445
445
  return this.thyMention().map(mention => {
@@ -481,7 +481,7 @@ class ThyMentionDirective {
481
481
  this.elementRef.nativeElement.innerText = newValue;
482
482
  }
483
483
  this.openedSuggestionsRef.close();
484
- this.select.emit(event);
484
+ this.thySelectSuggestion.emit(event);
485
485
  });
486
486
  }
487
487
  ngOnDestroy() {
@@ -528,7 +528,7 @@ class ThyMentionDirective {
528
528
  }
529
529
  }
530
530
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
531
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: ThyMentionDirective, isStandalone: true, selector: "[thyMention]", inputs: { thyMention: { classPropertyName: "thyMention", publicName: "thyMention", isSignal: true, isRequired: false, transformFunction: null }, thyPopoverConfig: { classPropertyName: "thyPopoverConfig", publicName: "thyPopoverConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "select" }, ngImport: i0 }); }
531
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: ThyMentionDirective, isStandalone: true, selector: "[thyMention]", inputs: { thyMention: { classPropertyName: "thyMention", publicName: "thyMention", isSignal: true, isRequired: false, transformFunction: null }, thyPopoverConfig: { classPropertyName: "thyPopoverConfig", publicName: "thyPopoverConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thySelectSuggestion: "thySelectSuggestion" }, ngImport: i0 }); }
532
532
  }
533
533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionDirective, decorators: [{
534
534
  type: Directive,
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-mention.mjs","sources":["../../../src/mention/adapter/adapter.ts","../../../src/mention/adapter/textarea.adapter.ts","../../../src/mention/adapter/editable.adapter.ts","../../../src/mention/adapter/index.ts","../../../src/mention/caret-positioner.ts","../../../src/mention/suggestions/suggestions.component.ts","../../../src/mention/suggestions/suggestions.component.html","../../../src/mention/mention.directive.ts","../../../src/mention/mention.module.ts","../../../src/mention/ngx-tethys-mention.ts"],"sourcesContent":["import { MentionDefaultDataItem, Mention } from '../interfaces';\n\nexport interface SeekQueryResult {\n term: string;\n start: number;\n end: number;\n}\n\nexport interface MatchedMention<T = MentionDefaultDataItem> {\n query: SeekQueryResult;\n mention: Mention<T>;\n}\n\nexport type MentionInputorElement = HTMLTextAreaElement | HTMLInputElement;\nexport abstract class MentionAdapter {\n inputor: MentionInputorElement;\n\n matchedMention: MatchedMention;\n\n constructor(inputor: MentionInputorElement) {\n this.inputor = inputor;\n }\n\n abstract seekQuery(event: Event, mention: Mention): SeekQueryResult;\n\n abstract insertMention(item: MentionDefaultDataItem): string;\n\n lookup(event: Event, mentions: Mention[]) {\n this.matchedMention = null;\n for (const mention of mentions) {\n const query = this.seekQuery(event, mention);\n if (query) {\n this.matchedMention = {\n query: query,\n mention: mention\n };\n break;\n }\n }\n return this.matchedMention;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class TextareaMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n public seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = this.inputor.selectionStart;\n const value = this.inputor.value.replace(/[\\r\\n]/g, ' ');\n // @123 | @456 => 0(start) => @123\n // @123 @456 | => 5(start) => @456\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n public insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.value;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n this.focus(this.matchedMention.query.start + insertValue.length);\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n\n private focus(caretPosition?: number): void {\n this.inputor.focus();\n this.inputor.setSelectionRange(caretPosition, caretPosition);\n }\n\n private isEditable() {\n return !this.inputor.readOnly && !this.inputor.disabled;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class EditableMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = getSelection().focusOffset;\n const value = this.inputor.innerText.replace(/[\\r\\n]/g, ' ');\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.innerText;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n}\n","import { isInputOrTextarea } from 'ngx-tethys/util';\nimport { TextareaMentionAdapter } from './textarea.adapter';\nimport { EditableMentionAdapter } from './editable.adapter';\nimport { MentionInputorElement } from './adapter';\n\nexport function createMentionAdapter(element: MentionInputorElement) {\n if (isInputOrTextarea(element)) {\n return new TextareaMentionAdapter(element);\n } else {\n element.contentEditable = 'true';\n return new EditableMentionAdapter(element);\n }\n}\n\nexport * from './editable.adapter';\nexport * from './textarea.adapter';\nexport * from './adapter';\n","import { Injectable } from '@angular/core';\nimport { getElementOffset } from 'ngx-tethys/util';\n\nexport interface CaretCoordinates {\n top: number;\n left: number;\n height: number;\n}\n\nexport interface CaretOptions {\n debug: boolean;\n}\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && window['mozInnerScreenX'] != null;\n\nexport type InputOrTextAreaElement = HTMLInputElement | HTMLTextAreaElement;\nexport type AllElement = InputOrTextAreaElement | HTMLElement;\n\nexport class CaretPositioner {\n // get caret coordinates in input or textarea\n // copy from repo: https://github.com/component/textarea-caret-position\n static getTextareaCaretCoordinates(element: InputOrTextAreaElement, position: number, options?: CaretOptions): CaretCoordinates {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n const debug = (options && options.debug) || false;\n if (debug) {\n const el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) {\n el.parentNode.removeChild(el);\n }\n }\n\n // The mirror div will replicate the textarea's style\n const div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : element['currentStyle']; // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) {\n style.wordWrap = 'break-word'; // only for textarea-s\n }\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug) {\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n }\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = parseInt(computed.height, 10);\n const outerHeight =\n parseInt(computed.paddingTop, 10) +\n parseInt(computed.paddingBottom, 10) +\n parseInt(computed.borderTopWidth, 10) +\n parseInt(computed.borderBottomWidth, 10);\n const targetHeight = outerHeight + parseInt(computed.lineHeight, 10);\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n } else {\n style.lineHeight = '0';\n }\n } else {\n style.lineHeight = computed.height;\n }\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height, 10)) {\n style.overflowY = 'scroll';\n }\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n\n const span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth'], 10),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth'], 10),\n height: parseInt(computed['lineHeight'], 10)\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n }\n\n static getEditableCaretCoordinates(element: HTMLElement): CaretCoordinates {\n if (window.getSelection().rangeCount) {\n const range = window.getSelection().getRangeAt(0);\n const rect = range.getBoundingClientRect();\n // using the start or endcontainer is... uhm yeah... difficult...? :D\n let height: string | number =\n range.startContainer.nodeType === 1\n ? getComputedStyle(range.startContainer as Element).lineHeight\n : getComputedStyle(range.startContainer.parentNode as Element).lineHeight;\n if (isNaN(height as any)) {\n let node = range.startContainer as HTMLElement;\n if (range.startContainer.nodeType !== 1) {\n node = node.parentNode as HTMLElement;\n }\n const current = node.style.lineHeight;\n node.style.lineHeight = '1em';\n height = parseInt(getComputedStyle(node).lineHeight, 10);\n node.style.lineHeight = current != null ? current : '';\n if (!node.getAttribute('style').length) {\n // clean up if empty\n node.removeAttribute('style');\n }\n }\n const editableRect = element.getBoundingClientRect();\n return {\n top: rect.top - editableRect.top,\n left: rect.left - editableRect.left,\n height: height as number\n };\n } else {\n return {\n top: 0,\n left: 0,\n height: 0\n };\n }\n }\n\n static getCaretCoordinates(element: AllElement, position: number, options?: CaretOptions) {\n const isInput = ['INPUT', 'TEXTAREA'].indexOf(element.nodeName) >= 0;\n if (isInput) {\n return this.getTextareaCaretCoordinates(element as InputOrTextAreaElement, position, options);\n } else {\n return this.getEditableCaretCoordinates(element);\n }\n }\n\n // get caret position in view window\n static getCaretPosition(element: AllElement, position: number, options?: CaretOptions) {\n const coordinates = CaretPositioner.getCaretCoordinates(element, position, options);\n const elementOffset = getElementOffset(element);\n return {\n top: coordinates.top + elementOffset.top,\n left: coordinates.left + elementOffset.left\n };\n }\n}\n","import { ThySelectionListChange, ThySelectionList } from 'ngx-tethys/list';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Observable, of, Subject } from 'rxjs';\nimport { catchError, debounceTime, switchMap, take } from 'rxjs/operators';\nimport { Component, ElementRef, NgZone, OnDestroy, OnInit, inject, signal, input } from '@angular/core';\nimport { SeekQueryResult } from '../adapter/adapter';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from '../interfaces';\nimport { ThyListOption } from 'ngx-tethys/shared';\nimport { ThyLoading } from 'ngx-tethys/loading';\nimport { NgTemplateOutlet, SlicePipe } from '@angular/common';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-mention-suggestions',\n templateUrl: './suggestions.component.html',\n imports: [NgTemplateOutlet, ThyLoading, ThySelectionList, ThyListOption, SlicePipe],\n host: { class: 'thy-mention-suggestions' }\n})\nexport class ThyMentionSuggestions<TItem = MentionDefaultDataItem> implements OnInit, OnDestroy {\n readonly mention = input<Mention<TItem>>();\n\n data = signal<TItem[]>([]);\n\n suggestionSelect$ = new Subject<MentionSuggestionSelectEvent>();\n\n debounce = 150;\n\n loadingDone = signal(true);\n\n private search$ = new Subject<SeekQueryResult>();\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private ngZone = inject(NgZone);\n\n private popoverRef = inject<ThyPopoverRef<any>>(ThyPopoverRef);\n\n constructor() {\n this.search$\n .pipe(\n switchMap(query => {\n const data = this.mention().search(query.term, this.mention().data);\n if (data instanceof Observable) {\n this.loadingDone.set(false);\n return (data as Observable<TItem[]>).pipe(debounceTime(this.debounce));\n } else {\n return of(data as TItem[]);\n }\n }),\n catchError(() => {\n this.loadingDone.set(false);\n return of([]);\n })\n )\n .subscribe(data => {\n this.loadingDone.set(true);\n this.data.set(data || []);\n\n if (this.popoverRef) {\n if (this.mention().autoClose && this.data().length === 0) {\n this.popoverRef.close();\n }\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.popoverRef.updatePosition();\n });\n }\n });\n }\n\n ngOnInit(): void {\n if (this.mention().popoverClass) {\n this.elementRef.nativeElement.classList.add(this.mention().popoverClass);\n }\n }\n\n search(query: SeekQueryResult) {\n this.search$.next(query);\n }\n\n select(item: TItem, event: Event) {\n this.suggestionSelect$.next({ event, item });\n }\n\n selectionChange(event: ThySelectionListChange<TItem>) {\n this.select(event.value, event.event);\n }\n\n ngOnDestroy() {\n this.search$.complete();\n }\n}\n","@if (mention().suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention().suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data() }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone()\"></thy-loading>\n @if (loadingDone()) {\n @if (data()?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data() | slice: 0 : mention().limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention().displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention().displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention().emptyText }}\n </div>\n }\n }\n}\n","import { ThyPopover, ThyPopoverConfig, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { EMPTY, fromEvent, Subject } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\nimport { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, computed, inject, input, output } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\nimport { createMentionAdapter, MatchedMention, MentionAdapter, MentionInputorElement } from './adapter';\nimport { CaretPositioner } from './caret-positioner';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from './interfaces';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\nimport { isInputOrTextarea } from 'ngx-tethys/util';\n\nconst SUGGESTION_BACKDROP_CLASS = 'thy-mention-suggestions-backdrop';\n\nconst POPOVER_DEFAULT_CONFIG = { backdropClass: SUGGESTION_BACKDROP_CLASS, placement: 'bottomLeft' };\n\nconst DEFAULT_MENTION_CONFIG: Partial<Mention> = {\n autoClose: true,\n emptyText: '无匹配数据,按空格完成输入',\n search: (term: string, data: MentionDefaultDataItem[]) => {\n return data.filter(item => {\n return !item.name || item.name.toLowerCase().includes(term.toLowerCase());\n });\n }\n};\n\n/**\n * @name thyMention\n * @order 10\n */\n@Directive({ selector: '[thyMention]' })\nexport class ThyMentionDirective implements OnInit, OnDestroy {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private thyPopover = inject(ThyPopover);\n private ngControl = inject(NgControl, { optional: true, self: true })!;\n\n private adapter: MentionAdapter = null;\n\n public openedSuggestionsRef: ThyPopoverRef<ThyMentionSuggestions>;\n\n /**\n * 提及输入配置参数,同时支持多个提及规则\n * @type Mention<any>[]\n */\n readonly thyMention = input<Mention<any>[]>([]);\n\n /**\n * Popover 弹出层参数配置\n */\n readonly thyPopoverConfig = input<ThyPopoverConfig>();\n\n /**\n * 选择后的回调函数\n */\n readonly select = output<MentionSuggestionSelectEvent>();\n\n get isOpened() {\n return !!this.openedSuggestionsRef;\n }\n\n mentions = computed(() => {\n if (this.thyMention()) {\n return this.thyMention().map(mention => {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !mention.trigger) {\n throw new Error(`mention trigger is required`);\n }\n return Object.assign({}, DEFAULT_MENTION_CONFIG, mention);\n });\n } else {\n return [];\n }\n });\n\n private destroy$ = new Subject<void>();\n\n private openedSuggestionsRef$ = new Subject<ThyPopoverRef<ThyMentionSuggestions> | null>();\n\n constructor() {\n const elementRef = this.elementRef;\n\n this.adapter = createMentionAdapter(elementRef.nativeElement as MentionInputorElement);\n }\n\n ngOnInit() {\n fromEvent(this.elementRef.nativeElement, 'input')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onInput(event));\n\n fromEvent(this.elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onClick(event));\n\n this.openedSuggestionsRef$\n .pipe(\n switchMap(openedSuggestionsRef =>\n // Re-subscribe to `suggestionSelect$` every time the suggestions component is re-created,\n // otherwise, unsubscribe, if it gets closed.\n openedSuggestionsRef ? openedSuggestionsRef.componentInstance.suggestionSelect$ : EMPTY\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n const newValue = this.adapter.insertMention(event.item);\n if (isInputOrTextarea(this.elementRef.nativeElement)) {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValue(newValue);\n }\n } else {\n this.elementRef.nativeElement.innerText = newValue;\n }\n this.openedSuggestionsRef.close();\n this.select.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n onClick(event: Event) {\n this.lookup(event);\n }\n\n onInput(event: Event) {\n this.lookup(event);\n }\n\n private lookup(event: Event) {\n const matched = this.adapter.lookup(event, this.mentions());\n if (matched) {\n this.openSuggestions(matched);\n } else {\n this.closeSuggestions();\n }\n }\n\n private openSuggestions(matched: MatchedMention) {\n if (!this.openedSuggestionsRef) {\n const inputElement = this.elementRef.nativeElement as HTMLInputElement;\n const position = CaretPositioner.getCaretPosition(inputElement, matched.query.start);\n const fontSize = parseInt(getComputedStyle(this.elementRef.nativeElement).fontSize, 10);\n this.openedSuggestionsRef = this.thyPopover.open(\n ThyMentionSuggestions,\n Object.assign(\n {},\n POPOVER_DEFAULT_CONFIG,\n {\n origin: this.elementRef,\n originPosition: { x: position.left, y: position.top, width: fontSize, height: fontSize },\n initialState: { mention: matched.mention }\n },\n this.thyPopoverConfig()\n )\n );\n this.openedSuggestionsRef.afterClosed().subscribe(() => {\n this.openedSuggestionsRef = null;\n this.openedSuggestionsRef$.next(null);\n });\n\n this.openedSuggestionsRef$.next(this.openedSuggestionsRef);\n }\n\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.componentInstance.search(matched.query);\n }\n }\n\n private closeSuggestions() {\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.close();\n }\n }\n}\n","import { ThyListModule } from 'ngx-tethys/list';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyMentionDirective } from './mention.directive';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ThyPopoverModule, ThyListModule, ThyLoadingModule, ThyMentionDirective, ThyMentionSuggestions],\n exports: [ThyMentionDirective],\n providers: []\n})\nexport class ThyMentionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-mention.mjs","sources":["../../../src/mention/adapter/adapter.ts","../../../src/mention/adapter/textarea.adapter.ts","../../../src/mention/adapter/editable.adapter.ts","../../../src/mention/adapter/index.ts","../../../src/mention/caret-positioner.ts","../../../src/mention/suggestions/suggestions.component.ts","../../../src/mention/suggestions/suggestions.component.html","../../../src/mention/mention.directive.ts","../../../src/mention/mention.module.ts","../../../src/mention/ngx-tethys-mention.ts"],"sourcesContent":["import { MentionDefaultDataItem, Mention } from '../interfaces';\n\nexport interface SeekQueryResult {\n term: string;\n start: number;\n end: number;\n}\n\nexport interface MatchedMention<T = MentionDefaultDataItem> {\n query: SeekQueryResult;\n mention: Mention<T>;\n}\n\nexport type MentionInputorElement = HTMLTextAreaElement | HTMLInputElement;\nexport abstract class MentionAdapter {\n inputor: MentionInputorElement;\n\n matchedMention: MatchedMention;\n\n constructor(inputor: MentionInputorElement) {\n this.inputor = inputor;\n }\n\n abstract seekQuery(event: Event, mention: Mention): SeekQueryResult;\n\n abstract insertMention(item: MentionDefaultDataItem): string;\n\n lookup(event: Event, mentions: Mention[]) {\n this.matchedMention = null;\n for (const mention of mentions) {\n const query = this.seekQuery(event, mention);\n if (query) {\n this.matchedMention = {\n query: query,\n mention: mention\n };\n break;\n }\n }\n return this.matchedMention;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class TextareaMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n public seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = this.inputor.selectionStart;\n const value = this.inputor.value.replace(/[\\r\\n]/g, ' ');\n // @123 | @456 => 0(start) => @123\n // @123 @456 | => 5(start) => @456\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n public insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.value;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n this.focus(this.matchedMention.query.start + insertValue.length);\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n\n private focus(caretPosition?: number): void {\n this.inputor.focus();\n this.inputor.setSelectionRange(caretPosition, caretPosition);\n }\n\n private isEditable() {\n return !this.inputor.readOnly && !this.inputor.disabled;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class EditableMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = getSelection().focusOffset;\n const value = this.inputor.innerText.replace(/[\\r\\n]/g, ' ');\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.innerText;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n}\n","import { isInputOrTextarea } from 'ngx-tethys/util';\nimport { TextareaMentionAdapter } from './textarea.adapter';\nimport { EditableMentionAdapter } from './editable.adapter';\nimport { MentionInputorElement } from './adapter';\n\nexport function createMentionAdapter(element: MentionInputorElement) {\n if (isInputOrTextarea(element)) {\n return new TextareaMentionAdapter(element);\n } else {\n element.contentEditable = 'true';\n return new EditableMentionAdapter(element);\n }\n}\n\nexport * from './editable.adapter';\nexport * from './textarea.adapter';\nexport * from './adapter';\n","import { Injectable } from '@angular/core';\nimport { getElementOffset } from 'ngx-tethys/util';\n\nexport interface CaretCoordinates {\n top: number;\n left: number;\n height: number;\n}\n\nexport interface CaretOptions {\n debug: boolean;\n}\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && window['mozInnerScreenX'] != null;\n\nexport type InputOrTextAreaElement = HTMLInputElement | HTMLTextAreaElement;\nexport type AllElement = InputOrTextAreaElement | HTMLElement;\n\nexport class CaretPositioner {\n // get caret coordinates in input or textarea\n // copy from repo: https://github.com/component/textarea-caret-position\n static getTextareaCaretCoordinates(element: InputOrTextAreaElement, position: number, options?: CaretOptions): CaretCoordinates {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n const debug = (options && options.debug) || false;\n if (debug) {\n const el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) {\n el.parentNode.removeChild(el);\n }\n }\n\n // The mirror div will replicate the textarea's style\n const div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : element['currentStyle']; // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) {\n style.wordWrap = 'break-word'; // only for textarea-s\n }\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug) {\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n }\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = parseInt(computed.height, 10);\n const outerHeight =\n parseInt(computed.paddingTop, 10) +\n parseInt(computed.paddingBottom, 10) +\n parseInt(computed.borderTopWidth, 10) +\n parseInt(computed.borderBottomWidth, 10);\n const targetHeight = outerHeight + parseInt(computed.lineHeight, 10);\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n } else {\n style.lineHeight = '0';\n }\n } else {\n style.lineHeight = computed.height;\n }\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height, 10)) {\n style.overflowY = 'scroll';\n }\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n\n const span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth'], 10),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth'], 10),\n height: parseInt(computed['lineHeight'], 10)\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n }\n\n static getEditableCaretCoordinates(element: HTMLElement): CaretCoordinates {\n if (window.getSelection().rangeCount) {\n const range = window.getSelection().getRangeAt(0);\n const rect = range.getBoundingClientRect();\n // using the start or endcontainer is... uhm yeah... difficult...? :D\n let height: string | number =\n range.startContainer.nodeType === 1\n ? getComputedStyle(range.startContainer as Element).lineHeight\n : getComputedStyle(range.startContainer.parentNode as Element).lineHeight;\n if (isNaN(height as any)) {\n let node = range.startContainer as HTMLElement;\n if (range.startContainer.nodeType !== 1) {\n node = node.parentNode as HTMLElement;\n }\n const current = node.style.lineHeight;\n node.style.lineHeight = '1em';\n height = parseInt(getComputedStyle(node).lineHeight, 10);\n node.style.lineHeight = current != null ? current : '';\n if (!node.getAttribute('style').length) {\n // clean up if empty\n node.removeAttribute('style');\n }\n }\n const editableRect = element.getBoundingClientRect();\n return {\n top: rect.top - editableRect.top,\n left: rect.left - editableRect.left,\n height: height as number\n };\n } else {\n return {\n top: 0,\n left: 0,\n height: 0\n };\n }\n }\n\n static getCaretCoordinates(element: AllElement, position: number, options?: CaretOptions) {\n const isInput = ['INPUT', 'TEXTAREA'].indexOf(element.nodeName) >= 0;\n if (isInput) {\n return this.getTextareaCaretCoordinates(element as InputOrTextAreaElement, position, options);\n } else {\n return this.getEditableCaretCoordinates(element);\n }\n }\n\n // get caret position in view window\n static getCaretPosition(element: AllElement, position: number, options?: CaretOptions) {\n const coordinates = CaretPositioner.getCaretCoordinates(element, position, options);\n const elementOffset = getElementOffset(element);\n return {\n top: coordinates.top + elementOffset.top,\n left: coordinates.left + elementOffset.left\n };\n }\n}\n","import { ThySelectionListChange, ThySelectionList } from 'ngx-tethys/list';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Observable, of, Subject } from 'rxjs';\nimport { catchError, debounceTime, switchMap, take } from 'rxjs/operators';\nimport { Component, ElementRef, NgZone, OnDestroy, OnInit, inject, signal, input } from '@angular/core';\nimport { SeekQueryResult } from '../adapter/adapter';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from '../interfaces';\nimport { ThyListOption } from 'ngx-tethys/shared';\nimport { ThyLoading } from 'ngx-tethys/loading';\nimport { NgTemplateOutlet, SlicePipe } from '@angular/common';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-mention-suggestions',\n templateUrl: './suggestions.component.html',\n imports: [NgTemplateOutlet, ThyLoading, ThySelectionList, ThyListOption, SlicePipe],\n host: { class: 'thy-mention-suggestions' }\n})\nexport class ThyMentionSuggestions<TItem = MentionDefaultDataItem> implements OnInit, OnDestroy {\n readonly mention = input<Mention<TItem>>();\n\n data = signal<TItem[]>([]);\n\n suggestionSelect$ = new Subject<MentionSuggestionSelectEvent>();\n\n debounce = 150;\n\n loadingDone = signal(true);\n\n private search$ = new Subject<SeekQueryResult>();\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private ngZone = inject(NgZone);\n\n private popoverRef = inject<ThyPopoverRef<any>>(ThyPopoverRef);\n\n constructor() {\n this.search$\n .pipe(\n switchMap(query => {\n const data = this.mention().search(query.term, this.mention().data);\n if (data instanceof Observable) {\n this.loadingDone.set(false);\n return (data as Observable<TItem[]>).pipe(debounceTime(this.debounce));\n } else {\n return of(data as TItem[]);\n }\n }),\n catchError(() => {\n this.loadingDone.set(false);\n return of([]);\n })\n )\n .subscribe(data => {\n this.loadingDone.set(true);\n this.data.set(data || []);\n\n if (this.popoverRef) {\n if (this.mention().autoClose && this.data().length === 0) {\n this.popoverRef.close();\n }\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.popoverRef.updatePosition();\n });\n }\n });\n }\n\n ngOnInit(): void {\n if (this.mention().popoverClass) {\n this.elementRef.nativeElement.classList.add(this.mention().popoverClass);\n }\n }\n\n search(query: SeekQueryResult) {\n this.search$.next(query);\n }\n\n select(item: TItem, event: Event) {\n this.suggestionSelect$.next({ event, item });\n }\n\n selectionChange(event: ThySelectionListChange<TItem>) {\n this.select(event.value, event.event);\n }\n\n ngOnDestroy() {\n this.search$.complete();\n }\n}\n","@if (mention().suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention().suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data() }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone()\"></thy-loading>\n @if (loadingDone()) {\n @if (data()?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data() | slice: 0 : mention().limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention().displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention().displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention().emptyText }}\n </div>\n }\n }\n}\n","import { ThyPopover, ThyPopoverConfig, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { EMPTY, fromEvent, Subject } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\nimport { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, computed, inject, input, output } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\nimport { createMentionAdapter, MatchedMention, MentionAdapter, MentionInputorElement } from './adapter';\nimport { CaretPositioner } from './caret-positioner';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from './interfaces';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\nimport { isInputOrTextarea } from 'ngx-tethys/util';\n\nconst SUGGESTION_BACKDROP_CLASS = 'thy-mention-suggestions-backdrop';\n\nconst POPOVER_DEFAULT_CONFIG = { backdropClass: SUGGESTION_BACKDROP_CLASS, placement: 'bottomLeft' };\n\nconst DEFAULT_MENTION_CONFIG: Partial<Mention> = {\n autoClose: true,\n emptyText: '无匹配数据,按空格完成输入',\n search: (term: string, data: MentionDefaultDataItem[]) => {\n return data.filter(item => {\n return !item.name || item.name.toLowerCase().includes(term.toLowerCase());\n });\n }\n};\n\n/**\n * @name thyMention\n * @order 10\n */\n@Directive({ selector: '[thyMention]' })\nexport class ThyMentionDirective implements OnInit, OnDestroy {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private thyPopover = inject(ThyPopover);\n private ngControl = inject(NgControl, { optional: true, self: true })!;\n\n private adapter: MentionAdapter = null;\n\n public openedSuggestionsRef: ThyPopoverRef<ThyMentionSuggestions>;\n\n /**\n * 提及输入配置参数,同时支持多个提及规则\n * @type Mention<any>[]\n */\n readonly thyMention = input<Mention<any>[]>([]);\n\n /**\n * Popover 弹出层参数配置\n */\n readonly thyPopoverConfig = input<ThyPopoverConfig>();\n\n /**\n * 选择后的回调函数\n */\n readonly thySelectSuggestion = output<MentionSuggestionSelectEvent>();\n\n get isOpened() {\n return !!this.openedSuggestionsRef;\n }\n\n mentions = computed(() => {\n if (this.thyMention()) {\n return this.thyMention().map(mention => {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !mention.trigger) {\n throw new Error(`mention trigger is required`);\n }\n return Object.assign({}, DEFAULT_MENTION_CONFIG, mention);\n });\n } else {\n return [];\n }\n });\n\n private destroy$ = new Subject<void>();\n\n private openedSuggestionsRef$ = new Subject<ThyPopoverRef<ThyMentionSuggestions> | null>();\n\n constructor() {\n const elementRef = this.elementRef;\n\n this.adapter = createMentionAdapter(elementRef.nativeElement as MentionInputorElement);\n }\n\n ngOnInit() {\n fromEvent(this.elementRef.nativeElement, 'input')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onInput(event));\n\n fromEvent(this.elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onClick(event));\n\n this.openedSuggestionsRef$\n .pipe(\n switchMap(openedSuggestionsRef =>\n // Re-subscribe to `suggestionSelect$` every time the suggestions component is re-created,\n // otherwise, unsubscribe, if it gets closed.\n openedSuggestionsRef ? openedSuggestionsRef.componentInstance.suggestionSelect$ : EMPTY\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n const newValue = this.adapter.insertMention(event.item);\n if (isInputOrTextarea(this.elementRef.nativeElement)) {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValue(newValue);\n }\n } else {\n this.elementRef.nativeElement.innerText = newValue;\n }\n this.openedSuggestionsRef.close();\n this.thySelectSuggestion.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n onClick(event: Event) {\n this.lookup(event);\n }\n\n onInput(event: Event) {\n this.lookup(event);\n }\n\n private lookup(event: Event) {\n const matched = this.adapter.lookup(event, this.mentions());\n if (matched) {\n this.openSuggestions(matched);\n } else {\n this.closeSuggestions();\n }\n }\n\n private openSuggestions(matched: MatchedMention) {\n if (!this.openedSuggestionsRef) {\n const inputElement = this.elementRef.nativeElement as HTMLInputElement;\n const position = CaretPositioner.getCaretPosition(inputElement, matched.query.start);\n const fontSize = parseInt(getComputedStyle(this.elementRef.nativeElement).fontSize, 10);\n this.openedSuggestionsRef = this.thyPopover.open(\n ThyMentionSuggestions,\n Object.assign(\n {},\n POPOVER_DEFAULT_CONFIG,\n {\n origin: this.elementRef,\n originPosition: { x: position.left, y: position.top, width: fontSize, height: fontSize },\n initialState: { mention: matched.mention }\n },\n this.thyPopoverConfig()\n )\n );\n this.openedSuggestionsRef.afterClosed().subscribe(() => {\n this.openedSuggestionsRef = null;\n this.openedSuggestionsRef$.next(null);\n });\n\n this.openedSuggestionsRef$.next(this.openedSuggestionsRef);\n }\n\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.componentInstance.search(matched.query);\n }\n }\n\n private closeSuggestions() {\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.close();\n }\n }\n}\n","import { ThyListModule } from 'ngx-tethys/list';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyMentionDirective } from './mention.directive';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ThyPopoverModule, ThyListModule, ThyLoadingModule, ThyMentionDirective, ThyMentionSuggestions],\n exports: [ThyMentionDirective],\n providers: []\n})\nexport class ThyMentionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}