@ng-nest/ui 20.1.7 → 20.2.1

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 (193) hide show
  1. package/auto-complete/index.d.ts +10 -2
  2. package/cascade/index.d.ts +2 -1
  3. package/checkbox/index.d.ts +1 -1
  4. package/collapse/index.d.ts +0 -3
  5. package/color-picker/index.d.ts +2 -1
  6. package/core/index.d.ts +3 -65
  7. package/date-picker/index.d.ts +20 -4
  8. package/dialog/index.d.ts +27 -11
  9. package/drawer/index.d.ts +10 -12
  10. package/dropdown/index.d.ts +2 -1
  11. package/fesm2022/ng-nest-ui-affix.mjs +11 -11
  12. package/fesm2022/ng-nest-ui-alert.mjs +13 -13
  13. package/fesm2022/ng-nest-ui-alert.mjs.map +1 -1
  14. package/fesm2022/ng-nest-ui-anchor.mjs +18 -18
  15. package/fesm2022/ng-nest-ui-anchor.mjs.map +1 -1
  16. package/fesm2022/ng-nest-ui-api.mjs +7 -7
  17. package/fesm2022/ng-nest-ui-api.mjs.map +1 -1
  18. package/fesm2022/ng-nest-ui-attachments.mjs +18 -18
  19. package/fesm2022/ng-nest-ui-auto-complete.mjs +33 -26
  20. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  21. package/fesm2022/ng-nest-ui-avatar.mjs +18 -18
  22. package/fesm2022/ng-nest-ui-avatar.mjs.map +1 -1
  23. package/fesm2022/ng-nest-ui-back-top.mjs +12 -12
  24. package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
  25. package/fesm2022/ng-nest-ui-badge.mjs +13 -13
  26. package/fesm2022/ng-nest-ui-badge.mjs.map +1 -1
  27. package/fesm2022/ng-nest-ui-base-form.mjs +8 -8
  28. package/fesm2022/ng-nest-ui-bubble.mjs +20 -20
  29. package/fesm2022/ng-nest-ui-bubble.mjs.map +1 -1
  30. package/fesm2022/ng-nest-ui-button.mjs +19 -19
  31. package/fesm2022/ng-nest-ui-button.mjs.map +1 -1
  32. package/fesm2022/ng-nest-ui-calendar.mjs +11 -11
  33. package/fesm2022/ng-nest-ui-card.mjs +11 -11
  34. package/fesm2022/ng-nest-ui-carousel.mjs +21 -21
  35. package/fesm2022/ng-nest-ui-carousel.mjs.map +1 -1
  36. package/fesm2022/ng-nest-ui-cascade.mjs +27 -25
  37. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  38. package/fesm2022/ng-nest-ui-checkbox.mjs +12 -12
  39. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  40. package/fesm2022/ng-nest-ui-collapse.mjs +20 -28
  41. package/fesm2022/ng-nest-ui-collapse.mjs.map +1 -1
  42. package/fesm2022/ng-nest-ui-color-picker.mjs +31 -29
  43. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  44. package/fesm2022/ng-nest-ui-color.mjs +11 -11
  45. package/fesm2022/ng-nest-ui-color.mjs.map +1 -1
  46. package/fesm2022/ng-nest-ui-comment.mjs +18 -18
  47. package/fesm2022/ng-nest-ui-container.mjs +35 -35
  48. package/fesm2022/ng-nest-ui-container.mjs.map +1 -1
  49. package/fesm2022/ng-nest-ui-core.mjs +20 -348
  50. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  51. package/fesm2022/ng-nest-ui-coversations.mjs +11 -11
  52. package/fesm2022/ng-nest-ui-crumb.mjs +11 -11
  53. package/fesm2022/ng-nest-ui-date-picker.mjs +92 -78
  54. package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
  55. package/fesm2022/ng-nest-ui-description.mjs +20 -20
  56. package/fesm2022/ng-nest-ui-description.mjs.map +1 -1
  57. package/fesm2022/ng-nest-ui-dialog.mjs +122 -73
  58. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  59. package/fesm2022/ng-nest-ui-doc.mjs +7 -7
  60. package/fesm2022/ng-nest-ui-doc.mjs.map +1 -1
  61. package/fesm2022/ng-nest-ui-drag.mjs +11 -11
  62. package/fesm2022/ng-nest-ui-drawer.mjs +67 -84
  63. package/fesm2022/ng-nest-ui-drawer.mjs.map +1 -1
  64. package/fesm2022/ng-nest-ui-dropdown.mjs +27 -25
  65. package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
  66. package/fesm2022/ng-nest-ui-empty.mjs +11 -11
  67. package/fesm2022/ng-nest-ui-examples.mjs +7 -7
  68. package/fesm2022/ng-nest-ui-examples.mjs.map +1 -1
  69. package/fesm2022/ng-nest-ui-find.mjs +12 -12
  70. package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
  71. package/fesm2022/ng-nest-ui-form.mjs +19 -19
  72. package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
  73. package/fesm2022/ng-nest-ui-highlight.mjs +15 -15
  74. package/fesm2022/ng-nest-ui-highlight.mjs.map +1 -1
  75. package/fesm2022/ng-nest-ui-i18n.mjs +14 -14
  76. package/fesm2022/ng-nest-ui-icon.mjs +14 -14
  77. package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
  78. package/fesm2022/ng-nest-ui-image.mjs +21 -21
  79. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  80. package/fesm2022/ng-nest-ui-inner.mjs +11 -11
  81. package/fesm2022/ng-nest-ui-inner.mjs.map +1 -1
  82. package/fesm2022/ng-nest-ui-input-number.mjs +12 -12
  83. package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
  84. package/fesm2022/ng-nest-ui-input.mjs +19 -19
  85. package/fesm2022/ng-nest-ui-input.mjs.map +1 -1
  86. package/fesm2022/ng-nest-ui-keyword.mjs +11 -11
  87. package/fesm2022/ng-nest-ui-keyword.mjs.map +1 -1
  88. package/fesm2022/ng-nest-ui-layout.mjs +18 -18
  89. package/fesm2022/ng-nest-ui-layout.mjs.map +1 -1
  90. package/fesm2022/ng-nest-ui-link.mjs +12 -12
  91. package/fesm2022/ng-nest-ui-link.mjs.map +1 -1
  92. package/fesm2022/ng-nest-ui-list.mjs +23 -23
  93. package/fesm2022/ng-nest-ui-list.mjs.map +1 -1
  94. package/fesm2022/ng-nest-ui-loading.mjs +12 -12
  95. package/fesm2022/ng-nest-ui-loading.mjs.map +1 -1
  96. package/fesm2022/ng-nest-ui-menu.mjs +18 -18
  97. package/fesm2022/ng-nest-ui-message-box.mjs +33 -20
  98. package/fesm2022/ng-nest-ui-message-box.mjs.map +1 -1
  99. package/fesm2022/ng-nest-ui-message.mjs +13 -13
  100. package/fesm2022/ng-nest-ui-message.mjs.map +1 -1
  101. package/fesm2022/ng-nest-ui-notification.mjs +13 -13
  102. package/fesm2022/ng-nest-ui-notification.mjs.map +1 -1
  103. package/fesm2022/ng-nest-ui-outlet.mjs +8 -8
  104. package/fesm2022/ng-nest-ui-page-header.mjs +11 -11
  105. package/fesm2022/ng-nest-ui-pagination.mjs +11 -11
  106. package/fesm2022/ng-nest-ui-pagination.mjs.map +1 -1
  107. package/fesm2022/ng-nest-ui-pattern.mjs +7 -7
  108. package/fesm2022/ng-nest-ui-pattern.mjs.map +1 -1
  109. package/fesm2022/ng-nest-ui-popconfirm.mjs +11 -11
  110. package/fesm2022/ng-nest-ui-popover.mjs +25 -21
  111. package/fesm2022/ng-nest-ui-popover.mjs.map +1 -1
  112. package/fesm2022/ng-nest-ui-portal.mjs +7 -7
  113. package/fesm2022/ng-nest-ui-progress.mjs +11 -11
  114. package/fesm2022/ng-nest-ui-prompts.mjs +11 -11
  115. package/fesm2022/ng-nest-ui-radio.mjs +12 -12
  116. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  117. package/fesm2022/ng-nest-ui-rate.mjs +12 -12
  118. package/fesm2022/ng-nest-ui-rate.mjs.map +1 -1
  119. package/fesm2022/ng-nest-ui-resizable.mjs +11 -11
  120. package/fesm2022/ng-nest-ui-resizable.mjs.map +1 -1
  121. package/fesm2022/ng-nest-ui-result.mjs +11 -11
  122. package/fesm2022/ng-nest-ui-ripple.mjs +11 -11
  123. package/fesm2022/ng-nest-ui-ripple.mjs.map +1 -1
  124. package/fesm2022/ng-nest-ui-scrollable.mjs +8 -8
  125. package/fesm2022/ng-nest-ui-scrollable.mjs.map +1 -1
  126. package/fesm2022/ng-nest-ui-select.mjs +34 -26
  127. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  128. package/fesm2022/ng-nest-ui-sender.mjs +15 -15
  129. package/fesm2022/ng-nest-ui-sender.mjs.map +1 -1
  130. package/fesm2022/ng-nest-ui-skeleton.mjs +11 -11
  131. package/fesm2022/ng-nest-ui-slider-select.mjs +13 -13
  132. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  133. package/fesm2022/ng-nest-ui-slider.mjs +12 -12
  134. package/fesm2022/ng-nest-ui-slider.mjs.map +1 -1
  135. package/fesm2022/ng-nest-ui-statistic.mjs +18 -18
  136. package/fesm2022/ng-nest-ui-steps.mjs +11 -11
  137. package/fesm2022/ng-nest-ui-suggestion.mjs +11 -11
  138. package/fesm2022/ng-nest-ui-switch.mjs +12 -12
  139. package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
  140. package/fesm2022/ng-nest-ui-table-view.mjs +60 -60
  141. package/fesm2022/ng-nest-ui-table-view.mjs.map +1 -1
  142. package/fesm2022/ng-nest-ui-table.mjs +60 -49
  143. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  144. package/fesm2022/ng-nest-ui-tabs.mjs +30 -30
  145. package/fesm2022/ng-nest-ui-tabs.mjs.map +1 -1
  146. package/fesm2022/ng-nest-ui-tag.mjs +29 -19
  147. package/fesm2022/ng-nest-ui-tag.mjs.map +1 -1
  148. package/fesm2022/ng-nest-ui-text-retract.mjs +11 -11
  149. package/fesm2022/ng-nest-ui-textarea.mjs +12 -12
  150. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  151. package/fesm2022/ng-nest-ui-theme.mjs +11 -11
  152. package/fesm2022/ng-nest-ui-thought-chain.mjs +11 -11
  153. package/fesm2022/ng-nest-ui-time-ago.mjs +7 -7
  154. package/fesm2022/ng-nest-ui-time-picker.mjs +31 -29
  155. package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
  156. package/fesm2022/ng-nest-ui-time-range.mjs +7 -7
  157. package/fesm2022/ng-nest-ui-timeline.mjs +11 -11
  158. package/fesm2022/ng-nest-ui-tooltip.mjs +27 -74
  159. package/fesm2022/ng-nest-ui-tooltip.mjs.map +1 -1
  160. package/fesm2022/ng-nest-ui-transfer.mjs +12 -12
  161. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  162. package/fesm2022/ng-nest-ui-tree-file.mjs +11 -11
  163. package/fesm2022/ng-nest-ui-tree-select.mjs +27 -25
  164. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  165. package/fesm2022/ng-nest-ui-tree.mjs +23 -23
  166. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  167. package/fesm2022/ng-nest-ui-typography.mjs +11 -11
  168. package/fesm2022/ng-nest-ui-upload.mjs +31 -28
  169. package/fesm2022/ng-nest-ui-upload.mjs.map +1 -1
  170. package/fesm2022/ng-nest-ui-welcome.mjs +11 -11
  171. package/message/index.d.ts +1 -3
  172. package/message-box/index.d.ts +4 -3
  173. package/notification/index.d.ts +1 -3
  174. package/package.json +52 -52
  175. package/popover/index.d.ts +2 -1
  176. package/radio/index.d.ts +1 -1
  177. package/select/index.d.ts +11 -2
  178. package/style/animates/base.scss +32 -0
  179. package/style/animates/conect.scss +32 -0
  180. package/style/animates/fade.scss +32 -0
  181. package/style/animates/index.scss +11 -0
  182. package/style/animates/move.scss +129 -0
  183. package/style/animates/opacity.scss +26 -0
  184. package/style/animates/slide.scss +113 -0
  185. package/style/core/index.css +353 -0
  186. package/style/core/index.css.map +1 -1
  187. package/style/core/index.scss +1 -6
  188. package/table/index.d.ts +15 -4
  189. package/table-view/index.d.ts +1 -1
  190. package/tag/index.d.ts +6 -1
  191. package/time-picker/index.d.ts +2 -1
  192. package/tooltip/index.d.ts +2 -12
  193. package/tree-select/index.d.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-back-top.mjs","sources":["../../../../lib/ng-nest/ui/back-top/back-top.property.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.html","../../../../lib/ng-nest/ui/back-top/back-top.module.ts","../../../../lib/ng-nest/ui/back-top/ng-nest-ui-back-top.ts"],"sourcesContent":["import { XPropertyFunction, XToCssPixelValue, XToNumber } from '@ng-nest/ui/core';\r\nimport { TemplateRef, Component, input } from '@angular/core';\r\nimport type { XNumber } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * BackTop\r\n * @selector x-back-top\r\n * @decorator component\r\n */\r\nexport const XBackTopPrefix = 'x-back-top';\r\nconst X_BACK_TOP_CONFIG_NAME = 'backTop';\r\n\r\n/**\r\n * BackTop Property\r\n */\r\n@Component({ selector: `${XBackTopPrefix}-property`, template: '' })\r\nexport class XBackTopProperty extends XPropertyFunction(X_BACK_TOP_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 距离右边的距离\r\n * @en_US Distance to the right\r\n */\r\n readonly right = input<string, XNumber>(this.config?.right ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 距离底部的距离\r\n * @en_US Distance from bottom\r\n */\r\n readonly bottom = input<string, XNumber>(this.config?.bottom ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 滚动多少高度后显示\r\n * @en_US Display after scrolling how much height\r\n */\r\n readonly visibilityHeight = input<number, XNumber>(this.config?.visibilityHeight ?? 200, { transform: XToNumber });\r\n /**\r\n * @zh_CN 内容模板\r\n * @en_US Content template\r\n */\r\n readonly template = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 滚动的元素\r\n * @en_US Scroll element\r\n */\r\n readonly target = input<string | HTMLElement>();\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n viewChild,\r\n computed,\r\n effect,\r\n signal\r\n} from '@angular/core';\r\nimport { XBackTopPrefix, XBackTopProperty } from './back-top.property';\r\nimport { XRequestAnimationFrame, XIsNumber, XIsString } from '@ng-nest/ui/core';\r\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { throttleTime, takeUntil, map, tap } from 'rxjs/operators';\r\nimport { XPortalService, XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { XLinkComponent } from '@ng-nest/ui/link';\r\n\r\n@Component({\r\n selector: `${XBackTopPrefix}`,\r\n imports: [NgTemplateOutlet, XLinkComponent],\r\n templateUrl: './back-top.component.html',\r\n styleUrls: ['./back-top.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XBackTopComponent extends XBackTopProperty implements OnDestroy {\r\n backTopTpl = viewChild.required<TemplateRef<void>>('backTopTpl');\r\n visiable = signal(false);\r\n scrolling = signal(false);\r\n portalRef!: XPortalOverlayRef<any>;\r\n private doc = inject(DOCUMENT);\r\n private portal = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private unSubject = new Subject<void>();\r\n\r\n scroll = computed(() => {\r\n const tg = this.target();\r\n if (!tg) return this.doc?.defaultView;\r\n return XIsString(tg) ? this.doc?.querySelector(tg) : tg;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.addEvent());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n onBackTop() {\r\n if (!this.scrolling()) {\r\n this.scrolling.set(true);\r\n this.scrollTo(0, 200);\r\n }\r\n }\r\n\r\n private addEvent() {\r\n this.unSubject.next();\r\n fromEvent(this.scroll()!, 'scroll')\r\n .pipe(\r\n throttleTime(20),\r\n map(() => this.scrollTop()),\r\n tap((x) => this.setVisible(x)),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe();\r\n }\r\n\r\n private scrollTop() {\r\n if (this.scroll() === this.doc.defaultView) {\r\n return this.doc.documentElement.scrollTop;\r\n } else {\r\n return (this.scroll() as HTMLElement).scrollTop;\r\n }\r\n }\r\n\r\n private setVisible(scrollTop: number) {\r\n const visible = scrollTop >= (this.visibilityHeight() as number);\r\n if (this.visiable() !== visible) {\r\n this.visiable.set(visible);\r\n if (this.visiable()) {\r\n this.portalRef = this.portal.attach({\r\n content: this.backTopTpl(),\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n positionStrategy: this.portal.setPlace('bottom-end', ...['0', this.right(), this.bottom(), '0'])\r\n }\r\n });\r\n } else {\r\n this.portalRef?.overlayRef?.hasAttached() && this.portalRef.overlayRef.detach();\r\n }\r\n }\r\n }\r\n\r\n private scrollTo(to: number, duration: number) {\r\n const difference = to - this.scrollTop();\r\n const perTick = (difference / duration) * 10;\r\n XRequestAnimationFrame(() => {\r\n const num = this.scrollTop() + perTick;\r\n if (XIsNumber(num) && num !== Infinity) {\r\n this.setScrollTop(num);\r\n }\r\n if (this.scrollTop() === to || duration <= 0) {\r\n this.scrolling.set(false);\r\n return;\r\n } else {\r\n this.scrollTo(to, duration - 10);\r\n }\r\n });\r\n }\r\n\r\n private setScrollTop(top: number) {\r\n if (this.scroll() === this.doc.defaultView) {\r\n this.doc.documentElement!.scrollTop = top!;\r\n } else {\r\n (this.scroll() as HTMLElement).scrollTop = top!;\r\n }\r\n }\r\n}\r\n","<ng-template #backTopTpl>\r\n <div class=\"x-back-top\" (click)=\"onBackTop()\">\r\n @if (!template()) {\r\n <x-link icon=\"fto-arrow-up\"> </x-link>\r\n }\r\n @if (template()) {\r\n <ng-container *ngTemplateOutlet=\"template()!\"></ng-container>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBackTopComponent } from './back-top.component';\r\n@NgModule({\r\n exports: [XBackTopComponent],\r\n imports: [XBackTopComponent]\r\n})\r\nexport class XBackTopModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-back-top.mjs","sources":["../../../../lib/ng-nest/ui/back-top/back-top.property.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.ts","../../../../lib/ng-nest/ui/back-top/back-top.component.html","../../../../lib/ng-nest/ui/back-top/back-top.module.ts","../../../../lib/ng-nest/ui/back-top/ng-nest-ui-back-top.ts"],"sourcesContent":["import { XPropertyFunction, XToCssPixelValue, XToNumber } from '@ng-nest/ui/core';\r\nimport { TemplateRef, Component, input } from '@angular/core';\r\nimport type { XNumber } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * BackTop\r\n * @selector x-back-top\r\n * @decorator component\r\n */\r\nexport const XBackTopPrefix = 'x-back-top';\r\nconst X_BACK_TOP_CONFIG_NAME = 'backTop';\r\n\r\n/**\r\n * BackTop Property\r\n */\r\n@Component({ selector: `${XBackTopPrefix}-property`, template: '' })\r\nexport class XBackTopProperty extends XPropertyFunction(X_BACK_TOP_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 距离右边的距离\r\n * @en_US Distance to the right\r\n */\r\n readonly right = input<string, XNumber>(this.config?.right ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 距离底部的距离\r\n * @en_US Distance from bottom\r\n */\r\n readonly bottom = input<string, XNumber>(this.config?.bottom ?? '2.5rem', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 滚动多少高度后显示\r\n * @en_US Display after scrolling how much height\r\n */\r\n readonly visibilityHeight = input<number, XNumber>(this.config?.visibilityHeight ?? 200, { transform: XToNumber });\r\n /**\r\n * @zh_CN 内容模板\r\n * @en_US Content template\r\n */\r\n readonly template = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 滚动的元素\r\n * @en_US Scroll element\r\n */\r\n readonly target = input<string | HTMLElement>();\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n viewChild,\r\n computed,\r\n effect,\r\n signal\r\n} from '@angular/core';\r\nimport { XBackTopPrefix, XBackTopProperty } from './back-top.property';\r\nimport { XRequestAnimationFrame, XIsNumber, XIsString } from '@ng-nest/ui/core';\r\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { throttleTime, takeUntil, map, tap } from 'rxjs/operators';\r\nimport { XPortalService, XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { XLinkComponent } from '@ng-nest/ui/link';\r\n\r\n@Component({\r\n selector: `${XBackTopPrefix}`,\r\n imports: [NgTemplateOutlet, XLinkComponent],\r\n templateUrl: './back-top.component.html',\r\n styleUrls: ['./back-top.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XBackTopComponent extends XBackTopProperty implements OnDestroy {\r\n backTopTpl = viewChild.required<TemplateRef<void>>('backTopTpl');\r\n visiable = signal(false);\r\n scrolling = signal(false);\r\n portalRef!: XPortalOverlayRef<any>;\r\n private doc = inject(DOCUMENT);\r\n private portal = inject(XPortalService);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private unSubject = new Subject<void>();\r\n\r\n scroll = computed(() => {\r\n const tg = this.target();\r\n if (!tg) return this.doc?.defaultView;\r\n return XIsString(tg) ? this.doc?.querySelector(tg) : tg;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.addEvent());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unSubject.next();\r\n this.unSubject.complete();\r\n }\r\n\r\n onBackTop() {\r\n if (!this.scrolling()) {\r\n this.scrolling.set(true);\r\n this.scrollTo(0, 200);\r\n }\r\n }\r\n\r\n private addEvent() {\r\n this.unSubject.next();\r\n fromEvent(this.scroll()!, 'scroll')\r\n .pipe(\r\n throttleTime(20),\r\n map(() => this.scrollTop()),\r\n tap((x) => this.setVisible(x)),\r\n takeUntil(this.unSubject)\r\n )\r\n .subscribe();\r\n }\r\n\r\n private scrollTop() {\r\n if (this.scroll() === this.doc.defaultView) {\r\n return this.doc.documentElement.scrollTop;\r\n } else {\r\n return (this.scroll() as HTMLElement).scrollTop;\r\n }\r\n }\r\n\r\n private setVisible(scrollTop: number) {\r\n const visible = scrollTop >= (this.visibilityHeight() as number);\r\n if (this.visiable() !== visible) {\r\n this.visiable.set(visible);\r\n if (this.visiable()) {\r\n this.portalRef = this.portal.attach({\r\n content: this.backTopTpl(),\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n positionStrategy: this.portal.setPlace('bottom-end', ...['0', this.right(), this.bottom(), '0'])\r\n }\r\n });\r\n } else {\r\n this.portalRef?.overlayRef?.hasAttached() && this.portalRef.overlayRef.detach();\r\n }\r\n }\r\n }\r\n\r\n private scrollTo(to: number, duration: number) {\r\n const difference = to - this.scrollTop();\r\n const perTick = (difference / duration) * 10;\r\n XRequestAnimationFrame(() => {\r\n const num = this.scrollTop() + perTick;\r\n if (XIsNumber(num) && num !== Infinity) {\r\n this.setScrollTop(num);\r\n }\r\n if (this.scrollTop() === to || duration <= 0) {\r\n this.scrolling.set(false);\r\n return;\r\n } else {\r\n this.scrollTo(to, duration - 10);\r\n }\r\n });\r\n }\r\n\r\n private setScrollTop(top: number) {\r\n if (this.scroll() === this.doc.defaultView) {\r\n this.doc.documentElement!.scrollTop = top!;\r\n } else {\r\n (this.scroll() as HTMLElement).scrollTop = top!;\r\n }\r\n }\r\n}\r\n","<ng-template #backTopTpl>\r\n <div class=\"x-back-top\" (click)=\"onBackTop()\">\r\n @if (!template()) {\r\n <x-link icon=\"fto-arrow-up\"> </x-link>\r\n }\r\n @if (template()) {\r\n <ng-container *ngTemplateOutlet=\"template()!\"></ng-container>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBackTopComponent } from './back-top.component';\r\n@NgModule({\r\n exports: [XBackTopComponent],\r\n imports: [XBackTopComponent]\r\n})\r\nexport class XBackTopModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;AAIA;;;;AAIG;AACI,MAAM,cAAc,GAAG;AAC9B,MAAM,sBAAsB,GAAG,SAAS;AAExC;;AAEG;MAEU,gBAAiB,SAAQ,iBAAiB,CAAC,sBAAsB,CAAC,CAAA;AAD/E,IAAA,WAAA,GAAA;;AAEE;;;AAGG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,QAAQ,yCAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA,CAAA,CAAC;AACxG;;;AAGG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,QAAQ,0CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA,CAAA,CAAC;AAC1G;;;AAGG;QACM,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAkB,IAAI,CAAC,MAAM,EAAE,gBAAgB,IAAI,GAAG,oDAAI,SAAS,EAAE,SAAS,EAAA,CAAA,GAAA,CAAtB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA,CAAA,CAAC;AAClH;;;AAGG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAoB;AAC7C;;;AAGG;QACM,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAwB;AAChD,IAAA;iIA1BY,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,0vBADkC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FACpD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,SAAS;mBAAC,EAAE,QAAQ,EAAE,CAAA,EAAG,cAAc,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;;;ACc7D,MAAO,iBAAkB,SAAQ,gBAAgB,CAAA;AAgBrD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAhBT,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAoB,YAAY,CAAC;AAChE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAEjB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAEvC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC,GAAG,EAAE,WAAW;AACrC,YAAA,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;AACzD,QAAA,CAAC,kDAAC;QAIA,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACvB;IACF;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,EAAG,EAAE,QAAQ;AAC/B,aAAA,IAAI,CACH,YAAY,CAAC,EAAE,CAAC,EAChB,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,EAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAC9B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAE1B,aAAA,SAAS,EAAE;IAChB;IAEQ,SAAS,GAAA;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS;QAC3C;aAAO;AACL,YAAA,OAAQ,IAAI,CAAC,MAAM,EAAkB,CAAC,SAAS;QACjD;IACF;AAEQ,IAAA,UAAU,CAAC,SAAiB,EAAA;QAClC,MAAM,OAAO,GAAG,SAAS,IAAK,IAAI,CAAC,gBAAgB,EAAa;AAChE,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,oBAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;oBAC1B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,oBAAA,aAAa,EAAE;AACb,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,MAAM,EAAE,QAAQ;wBAChB,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;AAChG;AACF,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE;YACjF;QACF;IACF;IAEQ,QAAQ,CAAC,EAAU,EAAE,QAAgB,EAAA;QAC3C,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QACxC,MAAM,OAAO,GAAG,CAAC,UAAU,GAAG,QAAQ,IAAI,EAAE;QAC5C,sBAAsB,CAAC,MAAK;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO;YACtC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,QAAQ,EAAE;AACtC,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YACxB;YACA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBACzB;YACF;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,EAAE,CAAC;YAClC;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,YAAY,CAAC,GAAW,EAAA;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;YAC1C,IAAI,CAAC,GAAG,CAAC,eAAgB,CAAC,SAAS,GAAG,GAAI;QAC5C;aAAO;AACJ,YAAA,IAAI,CAAC,MAAM,EAAkB,CAAC,SAAS,GAAG,GAAI;QACjD;IACF;iIAhGW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B9B,uTAUA,EAAA,MAAA,EAAA,CAAA,6SAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDaY,gBAAgB,oJAAE,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAM/B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAG,cAAc,CAAA,CAAE,EAAA,OAAA,EACpB,CAAC,gBAAgB,EAAE,cAAc,CAAC,EAAA,aAAA,EAG5B,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uTAAA,EAAA,MAAA,EAAA,CAAA,6SAAA,CAAA,EAAA;kGAGI,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MExBpD,cAAc,CAAA;iIAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kIAAd,cAAc,EAAA,OAAA,EAAA,CAFf,iBAAiB,CAAA,EAAA,OAAA,EAAA,CADjB,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAGhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAEhB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,iBAAiB,CAAC;oBAC5B,OAAO,EAAE,CAAC,iBAAiB;AAC5B,iBAAA;;;ACLD;;AAEG;;;;"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, Component, signal, computed, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
3
3
  import { NgClass, NgTemplateOutlet } from '@angular/common';
4
- import { XPropertyFunction, XToNumber, XToString, XToCssPixelValue, XToBoolean, XIsEmpty, XIsNumber, XIsString, XBadgeAnimation, XBadgeStandaloneAnimation } from '@ng-nest/ui/core';
4
+ import { XPropertyFunction, XToNumber, XToString, XToCssPixelValue, XToBoolean, XIsEmpty, XIsNumber, XIsString } from '@ng-nest/ui/core';
5
5
 
6
6
  /**
7
7
  * Badge
@@ -125,13 +125,13 @@ class XBadgeProperty extends XPropertyFunction(X_BADGE_CONFIG_NAME) {
125
125
  */
126
126
  this.standalone = input(false, ...(ngDevMode ? [{ debugName: "standalone", transform: XToBoolean }] : [{ transform: XToBoolean }]));
127
127
  }
128
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
129
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.0", type: XBadgeProperty, isStandalone: true, selector: "x-badge-property", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, offsetLeft: { classPropertyName: "offsetLeft", publicName: "offsetLeft", isSignal: true, isRequired: false, transformFunction: null }, offsetTop: { classPropertyName: "offsetTop", publicName: "offsetTop", isSignal: true, isRequired: false, transformFunction: null }, dot: { classPropertyName: "dot", publicName: "dot", isSignal: true, isRequired: false, transformFunction: null }, standalone: { classPropertyName: "standalone", publicName: "standalone", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
128
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
129
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.5", type: XBadgeProperty, isStandalone: true, selector: "x-badge-property", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, offsetLeft: { classPropertyName: "offsetLeft", publicName: "offsetLeft", isSignal: true, isRequired: false, transformFunction: null }, offsetTop: { classPropertyName: "offsetTop", publicName: "offsetTop", isSignal: true, isRequired: false, transformFunction: null }, dot: { classPropertyName: "dot", publicName: "dot", isSignal: true, isRequired: false, transformFunction: null }, standalone: { classPropertyName: "standalone", publicName: "standalone", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
130
130
  }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeProperty, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeProperty, decorators: [{
132
132
  type: Component,
133
133
  args: [{ selector: `${XBadgePrefix}-property`, template: '' }]
134
- }] });
134
+ }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], offsetLeft: [{ type: i0.Input, args: [{ isSignal: true, alias: "offsetLeft", required: false }] }], offsetTop: [{ type: i0.Input, args: [{ isSignal: true, alias: "offsetTop", required: false }] }], dot: [{ type: i0.Input, args: [{ isSignal: true, alias: "dot", required: false }] }], standalone: [{ type: i0.Input, args: [{ isSignal: true, alias: "standalone", required: false }] }] } });
135
135
 
136
136
  class XBadgeComponent extends XBadgeProperty {
137
137
  constructor() {
@@ -183,20 +183,20 @@ class XBadgeComponent extends XBadgeProperty {
183
183
  return this.displayNums().map((_x, index) => index);
184
184
  }, ...(ngDevMode ? [{ debugName: "maxNums" }] : []));
185
185
  }
186
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
187
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: XBadgeComponent, isStandalone: true, selector: "x-badge", usesInheritance: true, ngImport: i0, template: "<div\r\n #badge\r\n class=\"x-badge\"\r\n [ngClass]=\"classMap()\"\r\n [class.x-badge-dot]=\"dot()\"\r\n [class.x-badge-standalone]=\"standalone()\"\r\n>\r\n <ng-content></ng-content>\r\n @if (valueNumber() > 0 || dot()) {\r\n @if (standalone()) {\r\n <sup [@x-badge-standalone-animation] [style.marginRight]=\"offsetLeft()\" [style.marginTop]=\"offsetTop()\">\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n } @else {\r\n <sup [@x-badge-animation] [style.marginRight]=\"offsetLeft()\" [style.marginTop]=\"offsetTop()\">\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #dotTpl>\r\n @if (!dot()) {\r\n @for (item of maxNums(); track item) {\r\n <span class=\"x-badge-scroll\" [style.transform]=\"'translateY(-' + translateYNumbers()[$index] + '%)'\">\r\n @for (j of range(); track j) {\r\n <p>{{ j }}</p>\r\n }\r\n </span>\r\n }\r\n }\r\n</ng-template>\r\n", styles: ["x-badge{display:inline-block}.x-badge{margin:0;padding:0}.x-badge{font-size:var(--x-font-size);display:inline-block;box-sizing:border-box;text-align:center;position:relative}.x-badge>sup{position:absolute;top:0;right:0;overflow:hidden;transform:translate(50%,-50%);transform-origin:100% 0%;border-radius:.625rem;color:var(--x-white);display:inline-block;height:1.125rem;line-height:1.125rem;padding:0 .375rem;text-align:center;white-space:nowrap;box-shadow:0 0 0 .0625rem var(--x-white);vertical-align:middle}.x-badge-dot>sup{width:.5rem;height:.5rem;padding:0;right:0;border-radius:50%}.x-badge-standalone>sup{position:initial;transform:initial;transform-origin:initial}.x-badge-scroll{position:relative;height:1.125rem;display:inline-block;transition:transform var(--x-animation-duration-base) ease-in-out}.x-badge-primary>sup{background-color:var(--x-primary)}.x-badge-success>sup{background-color:var(--x-success)}.x-badge-info>sup{background-color:var(--x-info)}.x-badge-warning>sup{background-color:var(--x-warning)}.x-badge-danger>sup{background-color:var(--x-danger)}.x-badge-text>sup{background-color:var(--x-text)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [XBadgeAnimation, XBadgeStandaloneAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
186
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
187
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.5", type: XBadgeComponent, isStandalone: true, selector: "x-badge", usesInheritance: true, ngImport: i0, template: "<div\r\n #badge\r\n class=\"x-badge\"\r\n [ngClass]=\"classMap()\"\r\n [class.x-badge-dot]=\"dot()\"\r\n [class.x-badge-standalone]=\"standalone()\"\r\n>\r\n <ng-content></ng-content>\r\n @if (valueNumber() > 0 || dot()) {\r\n @if (standalone()) {\r\n <sup\r\n animate.enter=\"x-badge-standalone-enter\"\r\n animate.leave=\"x-badge-standalone-leave\"\r\n [style.marginRight]=\"offsetLeft()\"\r\n [style.marginTop]=\"offsetTop()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n } @else {\r\n <sup\r\n animate.enter=\"x-badge-enter\"\r\n animate.leave=\"x-badge-leave\"\r\n [style.marginRight]=\"offsetLeft()\"\r\n [style.marginTop]=\"offsetTop()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #dotTpl>\r\n @if (!dot()) {\r\n @for (item of maxNums(); track item) {\r\n <span class=\"x-badge-scroll\" [style.transform]=\"'translateY(-' + translateYNumbers()[$index] + '%)'\">\r\n @for (j of range(); track j) {\r\n <p>{{ j }}</p>\r\n }\r\n </span>\r\n }\r\n }\r\n</ng-template>\r\n", styles: ["x-badge{display:inline-block}.x-badge{margin:0;padding:0}.x-badge{font-size:var(--x-font-size);display:inline-block;box-sizing:border-box;text-align:center;position:relative}.x-badge>sup{position:absolute;top:0;right:0;overflow:hidden;transform:translate(50%,-50%);transform-origin:100% 0%;border-radius:.625rem;color:var(--x-white);display:inline-block;height:1.125rem;line-height:1.125rem;padding:0 .375rem;text-align:center;white-space:nowrap;box-shadow:0 0 0 .0625rem var(--x-white);vertical-align:middle}.x-badge-dot>sup{width:.5rem;height:.5rem;padding:0;right:0;border-radius:50%}.x-badge-standalone>sup{position:initial;transform:initial;transform-origin:initial}.x-badge-scroll{position:relative;height:1.125rem;display:inline-block;transition:transform var(--x-animation-duration-base) ease-in-out}.x-badge-primary>sup{background-color:var(--x-primary)}.x-badge-success>sup{background-color:var(--x-success)}.x-badge-info>sup{background-color:var(--x-info)}.x-badge-warning>sup{background-color:var(--x-warning)}.x-badge-danger>sup{background-color:var(--x-danger)}.x-badge-text>sup{background-color:var(--x-text)}.x-badge .x-badge-enter{animation:badge-enter var(--x-animation-duration-slow);animation-timing-function:ease-in}.x-badge .x-badge-leave{animation:badge-leave var(--x-animation-duration-slow);animation-timing-function:ease-out}@keyframes badge-enter{0%{opacity:0;transform:scale(0) translate(50%,-50%)}to{opacity:1;transform:scale(1) translate(50%,-50%)}}@keyframes badge-leave{0%{opacity:1;transform:scale(1) translate(50%,-50%)}to{opacity:0;transform:scale(0) translate(50%,-50%)}}.x-badge .x-badge-standalone-enter{animation:badge-standalone-enter var(--x-animation-duration-slow);animation-timing-function:ease-in}.x-badge .x-badge-standalone-leave{animation:badge-standalone-leave var(--x-animation-duration-slow);animation-timing-function:ease-out}@keyframes badge-standalone-enter{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes badge-standalone-leave{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
188
188
  }
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeComponent, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeComponent, decorators: [{
190
190
  type: Component,
191
- args: [{ selector: `${XBadgePrefix}`, imports: [NgClass, NgTemplateOutlet], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XBadgeAnimation, XBadgeStandaloneAnimation], template: "<div\r\n #badge\r\n class=\"x-badge\"\r\n [ngClass]=\"classMap()\"\r\n [class.x-badge-dot]=\"dot()\"\r\n [class.x-badge-standalone]=\"standalone()\"\r\n>\r\n <ng-content></ng-content>\r\n @if (valueNumber() > 0 || dot()) {\r\n @if (standalone()) {\r\n <sup [@x-badge-standalone-animation] [style.marginRight]=\"offsetLeft()\" [style.marginTop]=\"offsetTop()\">\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n } @else {\r\n <sup [@x-badge-animation] [style.marginRight]=\"offsetLeft()\" [style.marginTop]=\"offsetTop()\">\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #dotTpl>\r\n @if (!dot()) {\r\n @for (item of maxNums(); track item) {\r\n <span class=\"x-badge-scroll\" [style.transform]=\"'translateY(-' + translateYNumbers()[$index] + '%)'\">\r\n @for (j of range(); track j) {\r\n <p>{{ j }}</p>\r\n }\r\n </span>\r\n }\r\n }\r\n</ng-template>\r\n", styles: ["x-badge{display:inline-block}.x-badge{margin:0;padding:0}.x-badge{font-size:var(--x-font-size);display:inline-block;box-sizing:border-box;text-align:center;position:relative}.x-badge>sup{position:absolute;top:0;right:0;overflow:hidden;transform:translate(50%,-50%);transform-origin:100% 0%;border-radius:.625rem;color:var(--x-white);display:inline-block;height:1.125rem;line-height:1.125rem;padding:0 .375rem;text-align:center;white-space:nowrap;box-shadow:0 0 0 .0625rem var(--x-white);vertical-align:middle}.x-badge-dot>sup{width:.5rem;height:.5rem;padding:0;right:0;border-radius:50%}.x-badge-standalone>sup{position:initial;transform:initial;transform-origin:initial}.x-badge-scroll{position:relative;height:1.125rem;display:inline-block;transition:transform var(--x-animation-duration-base) ease-in-out}.x-badge-primary>sup{background-color:var(--x-primary)}.x-badge-success>sup{background-color:var(--x-success)}.x-badge-info>sup{background-color:var(--x-info)}.x-badge-warning>sup{background-color:var(--x-warning)}.x-badge-danger>sup{background-color:var(--x-danger)}.x-badge-text>sup{background-color:var(--x-text)}\n"] }]
191
+ args: [{ selector: `${XBadgePrefix}`, imports: [NgClass, NgTemplateOutlet], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n #badge\r\n class=\"x-badge\"\r\n [ngClass]=\"classMap()\"\r\n [class.x-badge-dot]=\"dot()\"\r\n [class.x-badge-standalone]=\"standalone()\"\r\n>\r\n <ng-content></ng-content>\r\n @if (valueNumber() > 0 || dot()) {\r\n @if (standalone()) {\r\n <sup\r\n animate.enter=\"x-badge-standalone-enter\"\r\n animate.leave=\"x-badge-standalone-leave\"\r\n [style.marginRight]=\"offsetLeft()\"\r\n [style.marginTop]=\"offsetTop()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n } @else {\r\n <sup\r\n animate.enter=\"x-badge-enter\"\r\n animate.leave=\"x-badge-leave\"\r\n [style.marginRight]=\"offsetLeft()\"\r\n [style.marginTop]=\"offsetTop()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #dotTpl>\r\n @if (!dot()) {\r\n @for (item of maxNums(); track item) {\r\n <span class=\"x-badge-scroll\" [style.transform]=\"'translateY(-' + translateYNumbers()[$index] + '%)'\">\r\n @for (j of range(); track j) {\r\n <p>{{ j }}</p>\r\n }\r\n </span>\r\n }\r\n }\r\n</ng-template>\r\n", styles: ["x-badge{display:inline-block}.x-badge{margin:0;padding:0}.x-badge{font-size:var(--x-font-size);display:inline-block;box-sizing:border-box;text-align:center;position:relative}.x-badge>sup{position:absolute;top:0;right:0;overflow:hidden;transform:translate(50%,-50%);transform-origin:100% 0%;border-radius:.625rem;color:var(--x-white);display:inline-block;height:1.125rem;line-height:1.125rem;padding:0 .375rem;text-align:center;white-space:nowrap;box-shadow:0 0 0 .0625rem var(--x-white);vertical-align:middle}.x-badge-dot>sup{width:.5rem;height:.5rem;padding:0;right:0;border-radius:50%}.x-badge-standalone>sup{position:initial;transform:initial;transform-origin:initial}.x-badge-scroll{position:relative;height:1.125rem;display:inline-block;transition:transform var(--x-animation-duration-base) ease-in-out}.x-badge-primary>sup{background-color:var(--x-primary)}.x-badge-success>sup{background-color:var(--x-success)}.x-badge-info>sup{background-color:var(--x-info)}.x-badge-warning>sup{background-color:var(--x-warning)}.x-badge-danger>sup{background-color:var(--x-danger)}.x-badge-text>sup{background-color:var(--x-text)}.x-badge .x-badge-enter{animation:badge-enter var(--x-animation-duration-slow);animation-timing-function:ease-in}.x-badge .x-badge-leave{animation:badge-leave var(--x-animation-duration-slow);animation-timing-function:ease-out}@keyframes badge-enter{0%{opacity:0;transform:scale(0) translate(50%,-50%)}to{opacity:1;transform:scale(1) translate(50%,-50%)}}@keyframes badge-leave{0%{opacity:1;transform:scale(1) translate(50%,-50%)}to{opacity:0;transform:scale(0) translate(50%,-50%)}}.x-badge .x-badge-standalone-enter{animation:badge-standalone-enter var(--x-animation-duration-slow);animation-timing-function:ease-in}.x-badge .x-badge-standalone-leave{animation:badge-standalone-leave var(--x-animation-duration-slow);animation-timing-function:ease-out}@keyframes badge-standalone-enter{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes badge-standalone-leave{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}\n"] }]
192
192
  }] });
193
193
 
194
194
  class XBadgeModule {
195
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
196
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: XBadgeModule, imports: [XBadgeComponent], exports: [XBadgeComponent] }); }
197
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeModule }); }
195
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
196
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.5", ngImport: i0, type: XBadgeModule, imports: [XBadgeComponent], exports: [XBadgeComponent] }); }
197
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeModule }); }
198
198
  }
199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBadgeModule, decorators: [{
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBadgeModule, decorators: [{
200
200
  type: NgModule,
201
201
  args: [{
202
202
  exports: [XBadgeComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-badge.mjs","sources":["../../../../lib/ng-nest/ui/badge/badge.property.ts","../../../../lib/ng-nest/ui/badge/badge.component.ts","../../../../lib/ng-nest/ui/badge/badge.component.html","../../../../lib/ng-nest/ui/badge/badge.module.ts","../../../../lib/ng-nest/ui/badge/ng-nest-ui-badge.ts"],"sourcesContent":["import { XPropertyFunction, XToNumber, XToString, XToCssPixelValue, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XNumber, XBoolean, XType } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Badge\r\n * @selector x-badge\r\n * @decorator component\r\n */\r\nexport const XBadgePrefix = 'x-badge';\r\nconst X_BADGE_CONFIG_NAME = 'badge';\r\n\r\n/**\r\n * Badge Property\r\n */\r\n@Component({ selector: `${XBadgePrefix}-property`, template: '' })\r\nexport class XBadgeProperty extends XPropertyFunction(X_BADGE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 类型,背景颜色\r\n * @en_US Type, the background color\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"12\" type=\"primary\">\r\n * <x-button>primary</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"success\">\r\n * <x-button>success</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"info\">\r\n * <x-button>info</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"warning\">\r\n * <x-button>warning</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"danger\">\r\n * <x-button>danger</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"text\">\r\n * <x-button>text</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly type = input<XBadgeType>(this.config?.type ?? 'danger');\r\n /**\r\n * @zh_CN 最大值\r\n * @en_US Max\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"200\" max=\"99\">\r\n * <x-button>99</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"300\" max=\"200\">\r\n * <x-button>200</x-button>\r\n * </x-badge>\r\n * ```\r\n */\r\n readonly max = input<number, XNumber>(99, { transform: XToNumber });\r\n /**\r\n * @zh_CN 显示值\r\n * @en_US Display value\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"88\">\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n */\r\n readonly value = input<string, XNumber>('', { transform: XToString });\r\n /**\r\n * @zh_CN 偏移值 left\r\n * @en_US Offset left value\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"88\" offsetLeft=\"5px\">\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly offsetLeft = input<string, XNumber>('', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 偏移值 top\r\n * @en_US Offset right value\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"88\" offsetTop=\"5px\">\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly offsetTop = input<string, XNumber>('', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 是否显示小红点\r\n * @en_US Whether to show the small red dot\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge dot>\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly dot = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 独立使用\r\n * @en_US Independent use\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge standalone value=\"25\"></x-badge>\r\n * <x-badge standalone value=\"200\" max=\"99\"></x-badge>\r\n * <x-badge standalone value=\"hot\"></x-badge>\r\n * <x-badge standalone dot></x-badge>\r\n * ```\r\n *\r\n */\r\n readonly standalone = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 标记类型\r\n * @en_US Mark type\r\n */\r\nexport type XBadgeType = XType;\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, computed, signal } from '@angular/core';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { XBadgePrefix, XBadgeProperty } from './badge.property';\r\nimport { XIsNumber, XIsEmpty, XBadgeAnimation, XBadgeStandaloneAnimation, XIsString } from '@ng-nest/ui/core';\r\n\r\n@Component({\r\n selector: `${XBadgePrefix}`,\r\n imports: [NgClass, NgTemplateOutlet],\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XBadgeAnimation, XBadgeStandaloneAnimation]\r\n})\r\nexport class XBadgeComponent extends XBadgeProperty {\r\n range = signal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '+']);\r\n\r\n valueNumber = computed(() => {\r\n return Number(this.value());\r\n });\r\n\r\n classMap = computed(() => ({\r\n [`${XBadgePrefix}-${this.type()}`]: !XIsEmpty(this.type())\r\n }));\r\n\r\n displayNums = computed(() => {\r\n const value = this.value();\r\n const max = this.max();\r\n const toNumber = Number(value);\r\n let displayValue = '';\r\n if (XIsNumber(toNumber) && max && toNumber > max) {\r\n displayValue = `${max}+`;\r\n } else {\r\n displayValue = `${value}`;\r\n }\r\n const res: (string | number)[] = [];\r\n for (let i = 0; i < displayValue.length; i++) {\r\n const str = displayValue[i];\r\n if (str === '+') {\r\n res.push(str);\r\n } else {\r\n res.push(Number(str));\r\n }\r\n }\r\n return res;\r\n });\r\n\r\n translateYNumbers = computed(() => {\r\n const displayNums = this.displayNums();\r\n const nums: number[] = [];\r\n for (let num of displayNums) {\r\n if (XIsString(num) && num === '+') {\r\n nums.push(10 * 100);\r\n } else if (XIsNumber(num)) {\r\n nums.push(num * 100);\r\n }\r\n }\r\n return nums;\r\n });\r\n\r\n maxNums = computed(() => {\r\n return this.displayNums().map((_x, index) => index) as number[];\r\n });\r\n}\r\n","<div\r\n #badge\r\n class=\"x-badge\"\r\n [ngClass]=\"classMap()\"\r\n [class.x-badge-dot]=\"dot()\"\r\n [class.x-badge-standalone]=\"standalone()\"\r\n>\r\n <ng-content></ng-content>\r\n @if (valueNumber() > 0 || dot()) {\r\n @if (standalone()) {\r\n <sup [@x-badge-standalone-animation] [style.marginRight]=\"offsetLeft()\" [style.marginTop]=\"offsetTop()\">\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n } @else {\r\n <sup [@x-badge-animation] [style.marginRight]=\"offsetLeft()\" [style.marginTop]=\"offsetTop()\">\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #dotTpl>\r\n @if (!dot()) {\r\n @for (item of maxNums(); track item) {\r\n <span class=\"x-badge-scroll\" [style.transform]=\"'translateY(-' + translateYNumbers()[$index] + '%)'\">\r\n @for (j of range(); track j) {\r\n <p>{{ j }}</p>\r\n }\r\n </span>\r\n }\r\n }\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBadgeComponent } from './badge.component';\r\n\r\n@NgModule({\r\n exports: [XBadgeComponent],\r\n imports: [XBadgeComponent]\r\n})\r\nexport class XBadgeModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-badge.mjs","sources":["../../../../lib/ng-nest/ui/badge/badge.property.ts","../../../../lib/ng-nest/ui/badge/badge.component.ts","../../../../lib/ng-nest/ui/badge/badge.component.html","../../../../lib/ng-nest/ui/badge/badge.module.ts","../../../../lib/ng-nest/ui/badge/ng-nest-ui-badge.ts"],"sourcesContent":["import { XPropertyFunction, XToNumber, XToString, XToCssPixelValue, XToBoolean } from '@ng-nest/ui/core';\r\nimport { Component, input } from '@angular/core';\r\nimport type { XNumber, XBoolean, XType } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Badge\r\n * @selector x-badge\r\n * @decorator component\r\n */\r\nexport const XBadgePrefix = 'x-badge';\r\nconst X_BADGE_CONFIG_NAME = 'badge';\r\n\r\n/**\r\n * Badge Property\r\n */\r\n@Component({ selector: `${XBadgePrefix}-property`, template: '' })\r\nexport class XBadgeProperty extends XPropertyFunction(X_BADGE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 类型,背景颜色\r\n * @en_US Type, the background color\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"12\" type=\"primary\">\r\n * <x-button>primary</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"success\">\r\n * <x-button>success</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"info\">\r\n * <x-button>info</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"warning\">\r\n * <x-button>warning</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"danger\">\r\n * <x-button>danger</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"12\" type=\"text\">\r\n * <x-button>text</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly type = input<XBadgeType>(this.config?.type ?? 'danger');\r\n /**\r\n * @zh_CN 最大值\r\n * @en_US Max\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"200\" max=\"99\">\r\n * <x-button>99</x-button>\r\n * </x-badge>\r\n * <x-badge value=\"300\" max=\"200\">\r\n * <x-button>200</x-button>\r\n * </x-badge>\r\n * ```\r\n */\r\n readonly max = input<number, XNumber>(99, { transform: XToNumber });\r\n /**\r\n * @zh_CN 显示值\r\n * @en_US Display value\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"88\">\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n */\r\n readonly value = input<string, XNumber>('', { transform: XToString });\r\n /**\r\n * @zh_CN 偏移值 left\r\n * @en_US Offset left value\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"88\" offsetLeft=\"5px\">\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly offsetLeft = input<string, XNumber>('', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 偏移值 top\r\n * @en_US Offset right value\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge value=\"88\" offsetTop=\"5px\">\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly offsetTop = input<string, XNumber>('', { transform: XToCssPixelValue });\r\n /**\r\n * @zh_CN 是否显示小红点\r\n * @en_US Whether to show the small red dot\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge dot>\r\n * <x-button>value</x-button>\r\n * </x-badge>\r\n * ```\r\n *\r\n */\r\n readonly dot = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 独立使用\r\n * @en_US Independent use\r\n * @example\r\n *\r\n * ```html\r\n * <x-badge standalone value=\"25\"></x-badge>\r\n * <x-badge standalone value=\"200\" max=\"99\"></x-badge>\r\n * <x-badge standalone value=\"hot\"></x-badge>\r\n * <x-badge standalone dot></x-badge>\r\n * ```\r\n *\r\n */\r\n readonly standalone = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\n/**\r\n * @zh_CN 标记类型\r\n * @en_US Mark type\r\n */\r\nexport type XBadgeType = XType;\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, computed, signal } from '@angular/core';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { XBadgePrefix, XBadgeProperty } from './badge.property';\r\nimport { XIsNumber, XIsEmpty, XIsString } from '@ng-nest/ui/core';\r\n\r\n@Component({\r\n selector: `${XBadgePrefix}`,\r\n imports: [NgClass, NgTemplateOutlet],\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XBadgeComponent extends XBadgeProperty {\r\n range = signal([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '+']);\r\n\r\n valueNumber = computed(() => {\r\n return Number(this.value());\r\n });\r\n\r\n classMap = computed(() => ({\r\n [`${XBadgePrefix}-${this.type()}`]: !XIsEmpty(this.type())\r\n }));\r\n\r\n displayNums = computed(() => {\r\n const value = this.value();\r\n const max = this.max();\r\n const toNumber = Number(value);\r\n let displayValue = '';\r\n if (XIsNumber(toNumber) && max && toNumber > max) {\r\n displayValue = `${max}+`;\r\n } else {\r\n displayValue = `${value}`;\r\n }\r\n const res: (string | number)[] = [];\r\n for (let i = 0; i < displayValue.length; i++) {\r\n const str = displayValue[i];\r\n if (str === '+') {\r\n res.push(str);\r\n } else {\r\n res.push(Number(str));\r\n }\r\n }\r\n return res;\r\n });\r\n\r\n translateYNumbers = computed(() => {\r\n const displayNums = this.displayNums();\r\n const nums: number[] = [];\r\n for (let num of displayNums) {\r\n if (XIsString(num) && num === '+') {\r\n nums.push(10 * 100);\r\n } else if (XIsNumber(num)) {\r\n nums.push(num * 100);\r\n }\r\n }\r\n return nums;\r\n });\r\n\r\n maxNums = computed(() => {\r\n return this.displayNums().map((_x, index) => index) as number[];\r\n });\r\n}\r\n","<div\r\n #badge\r\n class=\"x-badge\"\r\n [ngClass]=\"classMap()\"\r\n [class.x-badge-dot]=\"dot()\"\r\n [class.x-badge-standalone]=\"standalone()\"\r\n>\r\n <ng-content></ng-content>\r\n @if (valueNumber() > 0 || dot()) {\r\n @if (standalone()) {\r\n <sup\r\n animate.enter=\"x-badge-standalone-enter\"\r\n animate.leave=\"x-badge-standalone-leave\"\r\n [style.marginRight]=\"offsetLeft()\"\r\n [style.marginTop]=\"offsetTop()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n } @else {\r\n <sup\r\n animate.enter=\"x-badge-enter\"\r\n animate.leave=\"x-badge-leave\"\r\n [style.marginRight]=\"offsetLeft()\"\r\n [style.marginTop]=\"offsetTop()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"dotTpl\"></ng-container>\r\n </sup>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #dotTpl>\r\n @if (!dot()) {\r\n @for (item of maxNums(); track item) {\r\n <span class=\"x-badge-scroll\" [style.transform]=\"'translateY(-' + translateYNumbers()[$index] + '%)'\">\r\n @for (j of range(); track j) {\r\n <p>{{ j }}</p>\r\n }\r\n </span>\r\n }\r\n }\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBadgeComponent } from './badge.component';\r\n\r\n@NgModule({\r\n exports: [XBadgeComponent],\r\n imports: [XBadgeComponent]\r\n})\r\nexport class XBadgeModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -116,13 +116,13 @@ class XFormControlProp extends XProperty {
116
116
  */
117
117
  this.inputValidator = input(...(ngDevMode ? [undefined, { debugName: "inputValidator" }] : []));
118
118
  }
119
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XFormControlProp, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
120
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.0", type: XFormControlProp, isStandalone: true, selector: "x-formcontrol-prop", inputs: { validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, labelAlign: { classPropertyName: "labelAlign", publicName: "labelAlign", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, valueTpl: { classPropertyName: "valueTpl", publicName: "valueTpl", isSignal: true, isRequired: false, transformFunction: null }, valueTplContext: { classPropertyName: "valueTplContext", publicName: "valueTplContext", isSignal: true, isRequired: false, transformFunction: null }, before: { classPropertyName: "before", publicName: "before", isSignal: true, isRequired: false, transformFunction: null }, after: { classPropertyName: "after", publicName: "after", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, pointer: { classPropertyName: "pointer", publicName: "pointer", isSignal: true, isRequired: false, transformFunction: null }, inputValidator: { classPropertyName: "inputValidator", publicName: "inputValidator", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
119
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XFormControlProp, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
120
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.5", type: XFormControlProp, isStandalone: true, selector: "x-formcontrol-prop", inputs: { validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelWidth: { classPropertyName: "labelWidth", publicName: "labelWidth", isSignal: true, isRequired: false, transformFunction: null }, labelAlign: { classPropertyName: "labelAlign", publicName: "labelAlign", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, valueTpl: { classPropertyName: "valueTpl", publicName: "valueTpl", isSignal: true, isRequired: false, transformFunction: null }, valueTplContext: { classPropertyName: "valueTplContext", publicName: "valueTplContext", isSignal: true, isRequired: false, transformFunction: null }, before: { classPropertyName: "before", publicName: "before", isSignal: true, isRequired: false, transformFunction: null }, after: { classPropertyName: "after", publicName: "after", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, pointer: { classPropertyName: "pointer", publicName: "pointer", isSignal: true, isRequired: false, transformFunction: null }, inputValidator: { classPropertyName: "inputValidator", publicName: "inputValidator", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
121
121
  }
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XFormControlProp, decorators: [{
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XFormControlProp, decorators: [{
123
123
  type: Component,
124
124
  args: [{ selector: 'x-formcontrol-prop', template: '' }]
125
- }] });
125
+ }], propDecorators: { validator: [{ type: i0.Input, args: [{ isSignal: true, alias: "validator", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], labelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelWidth", required: false }] }], labelAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelAlign", required: false }] }], justify: [{ type: i0.Input, args: [{ isSignal: true, alias: "justify", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], valueTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueTpl", required: false }] }], valueTplContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueTplContext", required: false }] }], before: [{ type: i0.Input, args: [{ isSignal: true, alias: "before", required: false }] }], after: [{ type: i0.Input, args: [{ isSignal: true, alias: "after", required: false }] }], pattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "pattern", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }, { type: i0.Output, args: ["activeChange"] }], pointer: [{ type: i0.Input, args: [{ isSignal: true, alias: "pointer", required: false }] }], inputValidator: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputValidator", required: false }] }] } });
126
126
 
127
127
  function XValueAccessor(component) {
128
128
  return { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => component), multi: true };
@@ -240,11 +240,11 @@ function XFormControlFunction(configName) {
240
240
  }
241
241
 
242
242
  class XBaseFormModule {
243
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBaseFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
244
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: XBaseFormModule }); }
245
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBaseFormModule }); }
243
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBaseFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
244
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.5", ngImport: i0, type: XBaseFormModule }); }
245
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBaseFormModule }); }
246
246
  }
247
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBaseFormModule, decorators: [{
247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBaseFormModule, decorators: [{
248
248
  type: NgModule,
249
249
  args: [{
250
250
  imports: [],
@@ -98,13 +98,13 @@ class XBubbleProperty extends XPropertyFunction(X_BUBBLE_CONFIG_NAME) {
98
98
  */
99
99
  this.typingEnd = output();
100
100
  }
101
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
102
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.0", type: XBubbleProperty, isStandalone: true, selector: "x-bubble-property", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, typing: { classPropertyName: "typing", publicName: "typing", isSignal: true, isRequired: false, transformFunction: null }, speed: { classPropertyName: "speed", publicName: "speed", isSignal: true, isRequired: false, transformFunction: null }, renderer: { classPropertyName: "renderer", publicName: "renderer", isSignal: true, isRequired: false, transformFunction: null }, showCursor: { classPropertyName: "showCursor", publicName: "showCursor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { typingStart: "typingStart", typingOuput: "typingOuput", typingEnd: "typingEnd" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
101
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
102
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.5", type: XBubbleProperty, isStandalone: true, selector: "x-bubble-property", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, typing: { classPropertyName: "typing", publicName: "typing", isSignal: true, isRequired: false, transformFunction: null }, speed: { classPropertyName: "speed", publicName: "speed", isSignal: true, isRequired: false, transformFunction: null }, renderer: { classPropertyName: "renderer", publicName: "renderer", isSignal: true, isRequired: false, transformFunction: null }, showCursor: { classPropertyName: "showCursor", publicName: "showCursor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { typingStart: "typingStart", typingOuput: "typingOuput", typingEnd: "typingEnd" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
103
103
  }
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleProperty, decorators: [{
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleProperty, decorators: [{
105
105
  type: Component,
106
106
  args: [{ selector: `${XBubblePrefix}-property`, template: '' }]
107
- }] });
107
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], avatar: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatar", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], footer: [{ type: i0.Input, args: [{ isSignal: true, alias: "footer", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], typing: [{ type: i0.Input, args: [{ isSignal: true, alias: "typing", required: false }] }], speed: [{ type: i0.Input, args: [{ isSignal: true, alias: "speed", required: false }] }], renderer: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderer", required: false }] }], showCursor: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCursor", required: false }] }], typingStart: [{ type: i0.Output, args: ["typingStart"] }], typingOuput: [{ type: i0.Output, args: ["typingOuput"] }], typingEnd: [{ type: i0.Output, args: ["typingEnd"] }] } });
108
108
  /**
109
109
  * Bubbles
110
110
  * @selector x-bubbles
@@ -134,13 +134,13 @@ class XBubblesProperty extends XPropertyFunction(X_BUBBLES_CONFIG_NAME) {
134
134
  */
135
135
  this.scrollChange = output();
136
136
  }
137
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubblesProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
138
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.0", type: XBubblesProperty, isStandalone: true, selector: "x-bubbles-property", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrollChange: "scrollChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
137
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubblesProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
138
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.5", type: XBubblesProperty, isStandalone: true, selector: "x-bubbles-property", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrollChange: "scrollChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
139
139
  }
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubblesProperty, decorators: [{
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubblesProperty, decorators: [{
141
141
  type: Component,
142
142
  args: [{ selector: `${XBubblesPrefix}-property`, template: '' }]
143
- }] });
143
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], scrollChange: [{ type: i0.Output, args: ["scrollChange"] }] } });
144
144
 
145
145
  class XBubblesComponent extends XBubblesProperty {
146
146
  constructor() {
@@ -255,13 +255,13 @@ class XBubblesComponent extends XBubblesProperty {
255
255
  this.parentScrollElement.scrollTop = 0;
256
256
  }
257
257
  }
258
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubblesComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
259
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.0", type: XBubblesComponent, isStandalone: true, selector: "x-bubbles", queries: [{ propertyName: "bubbles", predicate: XBubbleComponent, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n", styles: ["x-bubbles{margin:0;padding:0}x-bubbles{display:flex;flex-direction:column;gap:1rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
258
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubblesComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
259
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.5", type: XBubblesComponent, isStandalone: true, selector: "x-bubbles", queries: [{ propertyName: "bubbles", predicate: XBubbleComponent, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n", styles: ["x-bubbles{margin:0;padding:0}x-bubbles{display:flex;flex-direction:column;gap:1rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
260
260
  }
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubblesComponent, decorators: [{
261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubblesComponent, decorators: [{
262
262
  type: Component,
263
263
  args: [{ selector: 'x-bubbles', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [], template: "<ng-content></ng-content>\r\n", styles: ["x-bubbles{margin:0;padding:0}x-bubbles{display:flex;flex-direction:column;gap:1rem}\n"] }]
264
- }] });
264
+ }], propDecorators: { bubbles: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => XBubbleComponent), { isSignal: true }] }] } });
265
265
 
266
266
  class XBubbleComponent extends XBubbleProperty {
267
267
  constructor() {
@@ -363,20 +363,20 @@ class XBubbleComponent extends XBubbleProperty {
363
363
  ngOnDestroy() {
364
364
  this.stopTyping();
365
365
  }
366
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
367
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: XBubbleComponent, isStandalone: true, selector: "x-bubble", viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentRef"], descendants: true, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"x-bubble\" [ngClass]=\"classMap()\">\r\n @if (!!avatar()) {\r\n <div class=\"x-bubble-avatar\" [class.x-bubble-avatar-hidden]=\"avatar()?.hidden\">\r\n <x-avatar\r\n [icon]=\"avatar()?.icon!\"\r\n [label]=\"avatar()?.label!\"\r\n [src]=\"avatar()?.src!\"\r\n [size]=\"avatar()?.size ?? size()\"\r\n [gap]=\"avatar()?.gap ?? '0.25rem'\"\r\n [fit]=\"avatar()?.fit ?? 'cover'\"\r\n [backgroundColor]=\"avatar()?.backgroundColor ?? '#999999'\"\r\n [color]=\"avatar()?.color ?? '#FFFFFF'\"\r\n [shape]=\"avatar()?.shape ?? 'circle'\"\r\n ></x-avatar>\r\n </div>\r\n }\r\n <div class=\"x-bubble-wrapper\">\r\n @if (loading()) {\r\n <div class=\"x-bubble-content\" [x-loading]=\"true\" [size]=\"'small'\" inline></div>\r\n } @else {\r\n @if (header()) {\r\n <div class=\"x-bubble-header\">\r\n <ng-container *xOutlet=\"header()\">{{ header() }}</ng-container>\r\n </div>\r\n }\r\n @if (isString()) {\r\n <div class=\"x-bubble-content\" #contentRef [innerHTML]=\"renderedContent\"></div>\r\n } @else if (isTemplate()) {\r\n <div class=\"x-bubble-content\" #contentRef>\r\n <ng-container *xOutlet=\"content()\"></ng-container>\r\n </div>\r\n }\r\n @if (footer()) {\r\n <div class=\"x-bubble-footer\">\r\n <ng-container *xOutlet=\"footer()\">{{ footer() }}</ng-container>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".x-bubble{margin:0;padding:0}.x-bubble{display:flex}.x-bubble-wrapper{flex:auto;display:flex;flex-direction:column;align-items:flex-start;min-width:0;max-width:100%}.x-bubble-content{position:relative;box-sizing:border-box;min-width:0;max-width:100%;color:var(--x-text);font-size:var(--x-font-size);border-radius:var(--x-border-radius);word-break:break-word}.x-bubble-outlined .x-bubble-content{border:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-bubble-filled .x-bubble-content{background-color:var(--x-background-a200)}.x-bubble-shadow .x-bubble-content{box-shadow:var(--x-box-shadow)}.x-bubble-end{flex-direction:row-reverse}.x-bubble-end .x-bubble-wrapper{align-items:flex-end}.x-bubble-header{margin-bottom:.25rem}.x-bubble-footer{margin-top:.5rem}.x-bubble-cursor.x-bubble-typing .x-bubble-content:after{content:\"\";display:inline-block;width:.0625rem;height:1.1em;margin-left:.0625rem;background-color:currentColor;vertical-align:middle;animation:x-bubble-blink 1s infinite}.x-bubble-cursor:not(.x-bubble-typing) .x-bubble-content:after{display:none}.x-bubble-avatar-hidden{visibility:hidden}@keyframes x-bubble-blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.x-bubble.x-big{column-gap:var(--x-padding-big)}.x-bubble.x-big .x-bubble-content{padding:calc(var(--x-padding-big) - .25rem) var(--x-padding-big);line-height:calc(var(--x-height-big) - 1rem);min-height:calc(var(--x-padding-big) * 2 + var(--x-height-big) - 1.5rem)}.x-bubble.x-large{column-gap:var(--x-padding-large)}.x-bubble.x-large .x-bubble-content{padding:calc(var(--x-padding-large) - .25rem) var(--x-padding-large);line-height:calc(var(--x-height-large) - 1rem);min-height:calc(var(--x-padding-large) * 2 + var(--x-height-large) - 1.5rem)}.x-bubble.x-medium{column-gap:var(--x-padding-medium)}.x-bubble.x-medium .x-bubble-content{padding:calc(var(--x-padding-medium) - .25rem) var(--x-padding-medium);line-height:calc(var(--x-height-medium) - 1rem);min-height:calc(var(--x-padding-medium) * 2 + var(--x-height-medium) - 1.5rem)}.x-bubble.x-small{column-gap:var(--x-padding-small)}.x-bubble.x-small .x-bubble-content{padding:calc(var(--x-padding-small) - .25rem) var(--x-padding-small);line-height:calc(var(--x-height-small) - 1rem);min-height:calc(var(--x-padding-small) * 2 + var(--x-height-small) - 1.5rem)}.x-bubble.x-mini{column-gap:var(--x-padding-mini)}.x-bubble.x-mini .x-bubble-content{padding:calc(var(--x-padding-mini) - .25rem) var(--x-padding-mini);line-height:calc(var(--x-height-mini) - 1rem);min-height:calc(var(--x-padding-mini) * 2 + var(--x-height-mini) - 1.5rem)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: XAvatarComponent, selector: "x-avatar" }, { kind: "component", type: XLoadingComponent, selector: "x-loading, [x-loading]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
366
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
367
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.5", type: XBubbleComponent, isStandalone: true, selector: "x-bubble", viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentRef"], descendants: true, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"x-bubble\" [ngClass]=\"classMap()\">\r\n @if (!!avatar()) {\r\n <div class=\"x-bubble-avatar\" [class.x-bubble-avatar-hidden]=\"avatar()?.hidden\">\r\n <x-avatar\r\n [icon]=\"avatar()?.icon!\"\r\n [label]=\"avatar()?.label!\"\r\n [src]=\"avatar()?.src!\"\r\n [size]=\"avatar()?.size ?? size()\"\r\n [gap]=\"avatar()?.gap ?? '0.25rem'\"\r\n [fit]=\"avatar()?.fit ?? 'cover'\"\r\n [backgroundColor]=\"avatar()?.backgroundColor ?? '#999999'\"\r\n [color]=\"avatar()?.color ?? '#FFFFFF'\"\r\n [shape]=\"avatar()?.shape ?? 'circle'\"\r\n ></x-avatar>\r\n </div>\r\n }\r\n <div class=\"x-bubble-wrapper\">\r\n @if (loading()) {\r\n <div class=\"x-bubble-content\" [x-loading]=\"true\" [size]=\"'small'\" inline></div>\r\n } @else {\r\n @if (header()) {\r\n <div class=\"x-bubble-header\">\r\n <ng-container *xOutlet=\"header()\">{{ header() }}</ng-container>\r\n </div>\r\n }\r\n @if (isString()) {\r\n <div class=\"x-bubble-content\" #contentRef [innerHTML]=\"renderedContent\"></div>\r\n } @else if (isTemplate()) {\r\n <div class=\"x-bubble-content\" #contentRef>\r\n <ng-container *xOutlet=\"content()\"></ng-container>\r\n </div>\r\n }\r\n @if (footer()) {\r\n <div class=\"x-bubble-footer\">\r\n <ng-container *xOutlet=\"footer()\">{{ footer() }}</ng-container>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".x-bubble{margin:0;padding:0}.x-bubble{display:flex}.x-bubble-wrapper{flex:auto;display:flex;flex-direction:column;align-items:flex-start;min-width:0;max-width:100%}.x-bubble-content{position:relative;box-sizing:border-box;min-width:0;max-width:100%;color:var(--x-text);font-size:var(--x-font-size);border-radius:var(--x-border-radius);word-break:break-word}.x-bubble-outlined .x-bubble-content{border:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-bubble-filled .x-bubble-content{background-color:var(--x-background-a200)}.x-bubble-shadow .x-bubble-content{box-shadow:var(--x-box-shadow)}.x-bubble-end{flex-direction:row-reverse}.x-bubble-end .x-bubble-wrapper{align-items:flex-end}.x-bubble-header{margin-bottom:.25rem}.x-bubble-footer{margin-top:.5rem}.x-bubble-cursor.x-bubble-typing .x-bubble-content:after{content:\"\";display:inline-block;width:.0625rem;height:1.1em;margin-left:.0625rem;background-color:currentColor;vertical-align:middle;animation:x-bubble-blink 1s infinite}.x-bubble-cursor:not(.x-bubble-typing) .x-bubble-content:after{display:none}.x-bubble-avatar-hidden{visibility:hidden}@keyframes x-bubble-blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.x-bubble.x-big{column-gap:var(--x-padding-big)}.x-bubble.x-big .x-bubble-content{padding:calc(var(--x-padding-big) - .25rem) var(--x-padding-big);line-height:calc(var(--x-height-big) - 1rem);min-height:calc(var(--x-padding-big) * 2 + var(--x-height-big) - 1.5rem)}.x-bubble.x-large{column-gap:var(--x-padding-large)}.x-bubble.x-large .x-bubble-content{padding:calc(var(--x-padding-large) - .25rem) var(--x-padding-large);line-height:calc(var(--x-height-large) - 1rem);min-height:calc(var(--x-padding-large) * 2 + var(--x-height-large) - 1.5rem)}.x-bubble.x-medium{column-gap:var(--x-padding-medium)}.x-bubble.x-medium .x-bubble-content{padding:calc(var(--x-padding-medium) - .25rem) var(--x-padding-medium);line-height:calc(var(--x-height-medium) - 1rem);min-height:calc(var(--x-padding-medium) * 2 + var(--x-height-medium) - 1.5rem)}.x-bubble.x-small{column-gap:var(--x-padding-small)}.x-bubble.x-small .x-bubble-content{padding:calc(var(--x-padding-small) - .25rem) var(--x-padding-small);line-height:calc(var(--x-height-small) - 1rem);min-height:calc(var(--x-padding-small) * 2 + var(--x-height-small) - 1.5rem)}.x-bubble.x-mini{column-gap:var(--x-padding-mini)}.x-bubble.x-mini .x-bubble-content{padding:calc(var(--x-padding-mini) - .25rem) var(--x-padding-mini);line-height:calc(var(--x-height-mini) - 1rem);min-height:calc(var(--x-padding-mini) * 2 + var(--x-height-mini) - 1.5rem)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: XAvatarComponent, selector: "x-avatar" }, { kind: "component", type: XLoadingComponent, selector: "x-loading, [x-loading]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
368
368
  }
369
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleComponent, decorators: [{
369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleComponent, decorators: [{
370
370
  type: Component,
371
371
  args: [{ selector: 'x-bubble', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, XOutletDirective, XAvatarComponent, XLoadingComponent], template: "<div class=\"x-bubble\" [ngClass]=\"classMap()\">\r\n @if (!!avatar()) {\r\n <div class=\"x-bubble-avatar\" [class.x-bubble-avatar-hidden]=\"avatar()?.hidden\">\r\n <x-avatar\r\n [icon]=\"avatar()?.icon!\"\r\n [label]=\"avatar()?.label!\"\r\n [src]=\"avatar()?.src!\"\r\n [size]=\"avatar()?.size ?? size()\"\r\n [gap]=\"avatar()?.gap ?? '0.25rem'\"\r\n [fit]=\"avatar()?.fit ?? 'cover'\"\r\n [backgroundColor]=\"avatar()?.backgroundColor ?? '#999999'\"\r\n [color]=\"avatar()?.color ?? '#FFFFFF'\"\r\n [shape]=\"avatar()?.shape ?? 'circle'\"\r\n ></x-avatar>\r\n </div>\r\n }\r\n <div class=\"x-bubble-wrapper\">\r\n @if (loading()) {\r\n <div class=\"x-bubble-content\" [x-loading]=\"true\" [size]=\"'small'\" inline></div>\r\n } @else {\r\n @if (header()) {\r\n <div class=\"x-bubble-header\">\r\n <ng-container *xOutlet=\"header()\">{{ header() }}</ng-container>\r\n </div>\r\n }\r\n @if (isString()) {\r\n <div class=\"x-bubble-content\" #contentRef [innerHTML]=\"renderedContent\"></div>\r\n } @else if (isTemplate()) {\r\n <div class=\"x-bubble-content\" #contentRef>\r\n <ng-container *xOutlet=\"content()\"></ng-container>\r\n </div>\r\n }\r\n @if (footer()) {\r\n <div class=\"x-bubble-footer\">\r\n <ng-container *xOutlet=\"footer()\">{{ footer() }}</ng-container>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".x-bubble{margin:0;padding:0}.x-bubble{display:flex}.x-bubble-wrapper{flex:auto;display:flex;flex-direction:column;align-items:flex-start;min-width:0;max-width:100%}.x-bubble-content{position:relative;box-sizing:border-box;min-width:0;max-width:100%;color:var(--x-text);font-size:var(--x-font-size);border-radius:var(--x-border-radius);word-break:break-word}.x-bubble-outlined .x-bubble-content{border:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-bubble-filled .x-bubble-content{background-color:var(--x-background-a200)}.x-bubble-shadow .x-bubble-content{box-shadow:var(--x-box-shadow)}.x-bubble-end{flex-direction:row-reverse}.x-bubble-end .x-bubble-wrapper{align-items:flex-end}.x-bubble-header{margin-bottom:.25rem}.x-bubble-footer{margin-top:.5rem}.x-bubble-cursor.x-bubble-typing .x-bubble-content:after{content:\"\";display:inline-block;width:.0625rem;height:1.1em;margin-left:.0625rem;background-color:currentColor;vertical-align:middle;animation:x-bubble-blink 1s infinite}.x-bubble-cursor:not(.x-bubble-typing) .x-bubble-content:after{display:none}.x-bubble-avatar-hidden{visibility:hidden}@keyframes x-bubble-blink{0%{opacity:1}50%{opacity:0}to{opacity:1}}.x-bubble.x-big{column-gap:var(--x-padding-big)}.x-bubble.x-big .x-bubble-content{padding:calc(var(--x-padding-big) - .25rem) var(--x-padding-big);line-height:calc(var(--x-height-big) - 1rem);min-height:calc(var(--x-padding-big) * 2 + var(--x-height-big) - 1.5rem)}.x-bubble.x-large{column-gap:var(--x-padding-large)}.x-bubble.x-large .x-bubble-content{padding:calc(var(--x-padding-large) - .25rem) var(--x-padding-large);line-height:calc(var(--x-height-large) - 1rem);min-height:calc(var(--x-padding-large) * 2 + var(--x-height-large) - 1.5rem)}.x-bubble.x-medium{column-gap:var(--x-padding-medium)}.x-bubble.x-medium .x-bubble-content{padding:calc(var(--x-padding-medium) - .25rem) var(--x-padding-medium);line-height:calc(var(--x-height-medium) - 1rem);min-height:calc(var(--x-padding-medium) * 2 + var(--x-height-medium) - 1.5rem)}.x-bubble.x-small{column-gap:var(--x-padding-small)}.x-bubble.x-small .x-bubble-content{padding:calc(var(--x-padding-small) - .25rem) var(--x-padding-small);line-height:calc(var(--x-height-small) - 1rem);min-height:calc(var(--x-padding-small) * 2 + var(--x-height-small) - 1.5rem)}.x-bubble.x-mini{column-gap:var(--x-padding-mini)}.x-bubble.x-mini .x-bubble-content{padding:calc(var(--x-padding-mini) - .25rem) var(--x-padding-mini);line-height:calc(var(--x-height-mini) - 1rem);min-height:calc(var(--x-padding-mini) * 2 + var(--x-height-mini) - 1.5rem)}\n"] }]
372
- }], ctorParameters: () => [] });
372
+ }], ctorParameters: () => [], propDecorators: { contentRef: [{ type: i0.ViewChild, args: ['contentRef', { isSignal: true }] }] } });
373
373
 
374
374
  class XBubbleModule {
375
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
376
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: XBubbleModule, imports: [XBubbleComponent, XBubblesComponent], exports: [XBubbleComponent, XBubblesComponent] }); }
377
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleModule, imports: [XBubbleComponent] }); }
375
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
376
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.5", ngImport: i0, type: XBubbleModule, imports: [XBubbleComponent, XBubblesComponent], exports: [XBubbleComponent, XBubblesComponent] }); }
377
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleModule, imports: [XBubbleComponent] }); }
378
378
  }
379
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: XBubbleModule, decorators: [{
379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: XBubbleModule, decorators: [{
380
380
  type: NgModule,
381
381
  args: [{
382
382
  exports: [XBubbleComponent, XBubblesComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-bubble.mjs","sources":["../../../../lib/ng-nest/ui/bubble/bubble.property.ts","../../../../lib/ng-nest/ui/bubble/bubbles.component.ts","../../../../lib/ng-nest/ui/bubble/bubbles.component.html","../../../../lib/ng-nest/ui/bubble/bubble.component.ts","../../../../lib/ng-nest/ui/bubble/bubble.component.html","../../../../lib/ng-nest/ui/bubble/bubble.module.ts","../../../../lib/ng-nest/ui/bubble/ng-nest-ui-bubble.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\r\nimport { XBoolean, XNumber, XPropertyFunction, XSize, XTemplate, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { XAvatarOption } from '@ng-nest/ui/avatar';\r\n\r\n/**\r\n * Bubble\r\n * @selector x-bubble\r\n * @decorator component\r\n */\r\nexport const XBubblePrefix = 'x-bubble';\r\nconst X_BUBBLE_CONFIG_NAME = 'bubble';\r\n\r\n/**\r\n * Bubble Property\r\n */\r\n@Component({ selector: `${XBubblePrefix}-property`, template: '' })\r\nexport class XBubbleProperty extends XPropertyFunction(X_BUBBLE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 气泡内容\r\n * @en_US Bubble content\r\n */\r\n readonly content = input<XTemplate>();\r\n /**\r\n * @zh_CN 头像\r\n * @en_US Avatar\r\n */\r\n readonly avatar = input<XBubbleAvatarOption>();\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n readonly size = input<XSize>(this.config?.size ?? 'medium');\r\n /**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\n readonly variant = input<XBubbleVariant>(this.config?.variant ?? 'outlined');\r\n /**\r\n * @zh_CN 位置\r\n * @en_US Bubble placement\r\n */\r\n readonly placement = input<XBubblePlacement>('start');\r\n /**\r\n * @zh_CN 气泡头部内容\r\n * @en_US Bubble header content\r\n */\r\n readonly header = input<XTemplate>();\r\n /**\r\n * @zh_CN 气泡底部内容\r\n * @en_US Bubble header content\r\n */\r\n readonly footer = input<XTemplate>();\r\n /**\r\n * @zh_CN 加载中\r\n * @en_US Loading\r\n */\r\n readonly loading = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 内容输出打字机效果\r\n * @en_US Typing effect\r\n */\r\n readonly typing = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 打字机输出速度\r\n * @en_US Typing speed\r\n */\r\n readonly speed = input<number, XNumber>(30, { transform: XToNumber });\r\n /**\r\n * @zh_CN 内容渲染器,可自定义内容的渲染方式,如 HTML、Markdown\r\n * @en_US Content renderer, can customize content rendering, such as HTML, Markdown\r\n */\r\n readonly renderer = input<XBubbleContentRenderer>();\r\n /**\r\n * @zh_CN 是否显示打字机光标\r\n * @en_US Whether to show the typing cursor\r\n */\r\n readonly showCursor = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 打字开始\r\n * @en_US Typing start\r\n */\r\n readonly typingStart = output<void>();\r\n /**\r\n * @zh_CN 打字正在输出的字符\r\n * @en_US Typing output character\r\n */\r\n readonly typingOuput = output<string>();\r\n /**\r\n * @zh_CN 打字结束\r\n * @en_US Typing end\r\n */\r\n readonly typingEnd = output<void>();\r\n}\r\n\r\n/**\r\n * @zh_CN 头像配置,继承了组件 Avatar 相关属性\r\n * @en_US Avatar settings\r\n */\r\nexport interface XBubbleAvatarOption extends XAvatarOption {\r\n /**\r\n * @zh_CN 是否显示头像\r\n * @en_US Whether to show the avatar\r\n */\r\n hidden?: boolean;\r\n}\r\n\r\n/**\r\n * Bubbles\r\n * @selector x-bubbles\r\n * @decorator component\r\n */\r\nexport const XBubblesPrefix = 'x-bubbles';\r\nconst X_BUBBLES_CONFIG_NAME = 'bubbles';\r\n\r\n/**\r\n * Bubbles Property\r\n */\r\n@Component({ selector: `${XBubblesPrefix}-property`, template: '' })\r\nexport class XBubblesProperty extends XPropertyFunction(X_BUBBLES_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n readonly size = input<XSize>();\r\n /**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\n readonly variant = input<XBubbleVariant>();\r\n /**\r\n * @zh_CN 滚动条滚动事件,自动获取父级可滚动的元素\r\n * @en_US Scroll event of the scroll bar, automatically obtaining the scrollable element of the parent\r\n */\r\n readonly scrollChange = output<Event>();\r\n}\r\n\r\n/**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\nexport type XBubbleVariant = 'outlined' | 'filled' | 'shadow' | 'borderless';\r\n\r\n/**\r\n * @zh_CN 位置\r\n * @en_US Bubble placement\r\n */\r\nexport type XBubblePlacement = 'start' | 'end';\r\n\r\n/**\r\n * @zh_CN 内容渲染函数\r\n * @en_US Bubble content renderer\r\n */\r\nexport type XBubbleContentRenderer = (content: string) => string | undefined;\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n contentChildren,\r\n ElementRef,\r\n inject,\r\n Renderer2,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { XBubblesProperty } from './bubble.property';\r\nimport { XBubbleComponent } from './bubble.component';\r\nimport { fromEvent, Subject, Subscription, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'x-bubbles',\r\n templateUrl: './bubbles.component.html',\r\n styleUrls: ['./bubbles.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: []\r\n})\r\nexport class XBubblesComponent extends XBubblesProperty {\r\n elementRef = inject(ElementRef);\r\n renderer = inject(Renderer2);\r\n\r\n private parentScrollElement: HTMLElement | null = null;\r\n private isFollowing = true;\r\n private removeScrollListener: Subscription | null = null;\r\n private contentMutationObserver: MutationObserver | null = null;\r\n private typingObserver: MutationObserver | null = null;\r\n private $destroy = new Subject<void>();\r\n\r\n bubbles = contentChildren(XBubbleComponent);\r\n\r\n ngAfterViewInit(): void {\r\n this.stepScroll();\r\n this.observeContentChanges();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const bubbles = this.bubbles();\r\n if (bubbles.length <= 0) return;\r\n const lastBubble = bubbles[bubbles.length - 1];\r\n if (lastBubble && lastBubble.typing() && lastBubble.pendingContent().length > 0) {\r\n if (!this.typingObserver) {\r\n this.startTypingObserver(lastBubble);\r\n }\r\n } else {\r\n if (this.typingObserver) {\r\n this.stopTypingObserver();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeScrollListener?.unsubscribe();\r\n this.contentMutationObserver?.disconnect();\r\n this.stopTypingObserver();\r\n this.$destroy.next();\r\n this.$destroy.complete();\r\n }\r\n\r\n private stepScroll() {\r\n const newScroll = this.getParentScrollElement(this.elementRef.nativeElement);\r\n if (this.parentScrollElement && newScroll === this.parentScrollElement) return;\r\n this.parentScrollElement = newScroll;\r\n if (this.parentScrollElement) {\r\n this.removeScrollListener?.unsubscribe();\r\n this.removeScrollListener = fromEvent(this.parentScrollElement, 'scroll')\r\n .pipe(takeUntil(this.$destroy))\r\n .subscribe((event: Event) => {\r\n const atBottom =\r\n this.parentScrollElement!.scrollHeight - this.parentScrollElement!.scrollTop ===\r\n this.parentScrollElement!.clientHeight;\r\n if (!atBottom) {\r\n this.isFollowing = false;\r\n } else {\r\n this.isFollowing = true;\r\n }\r\n this.scrollChange.emit(event);\r\n });\r\n }\r\n }\r\n\r\n private getParentScrollElement(element: HTMLElement): HTMLElement | null {\r\n let parent = this.renderer.parentNode(element) as HTMLElement;\r\n while (parent && parent.nodeType === 1) {\r\n const overflowY = getComputedStyle(parent).overflowY;\r\n if (overflowY === 'auto' || overflowY === 'scroll') {\r\n return parent;\r\n }\r\n parent = this.renderer.parentNode(parent);\r\n }\r\n return null;\r\n }\r\n private observeContentChanges(): void {\r\n this.contentMutationObserver = new MutationObserver(() => {\r\n this.isFollowing = true;\r\n this.scrollToBottom();\r\n });\r\n\r\n this.contentMutationObserver.observe(this.elementRef.nativeElement, { childList: true });\r\n }\r\n\r\n private startTypingObserver(bubble: XBubbleComponent): void {\r\n const bubbleContent = bubble.contentRef()?.nativeElement;\r\n if (bubbleContent) {\r\n this.typingObserver = new MutationObserver(() => {\r\n if (this.isFollowing) {\r\n this.scrollToBottom();\r\n }\r\n });\r\n\r\n this.typingObserver.observe(bubbleContent, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n }\r\n }\r\n\r\n private stopTypingObserver(): void {\r\n if (this.typingObserver) {\r\n this.typingObserver.disconnect();\r\n this.typingObserver = null;\r\n }\r\n }\r\n\r\n scrollToBottom(): void {\r\n this.stepScroll();\r\n if (this.parentScrollElement) {\r\n this.parentScrollElement.scrollTop = this.parentScrollElement.scrollHeight;\r\n }\r\n }\r\n\r\n scrollToTop(): void {\r\n this.stepScroll();\r\n if (this.parentScrollElement) {\r\n this.parentScrollElement.scrollTop = 0;\r\n }\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n computed,\r\n viewChild,\r\n ElementRef,\r\n signal,\r\n effect,\r\n SimpleChanges,\r\n inject,\r\n Renderer2\r\n} from '@angular/core';\r\nimport { XBubblePrefix, XBubbleProperty } from './bubble.property';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XIsEmpty, XIsString, XIsTemplateRef } from '@ng-nest/ui/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { XAvatarComponent } from '@ng-nest/ui/avatar';\r\nimport { XLoadingComponent } from '@ng-nest/ui/loading';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { XBubblesComponent } from './bubbles.component';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: 'x-bubble',\r\n templateUrl: './bubble.component.html',\r\n styleUrls: ['./bubble.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgClass, XOutletDirective, XAvatarComponent, XLoadingComponent]\r\n})\r\nexport class XBubbleComponent extends XBubbleProperty {\r\n sanitizer = inject(DomSanitizer);\r\n renderer2 = inject(Renderer2);\r\n private bubbles = inject(XBubblesComponent, { optional: true, host: true });\r\n\r\n contentRef = viewChild<ElementRef<HTMLElement>>('contentRef');\r\n\r\n classMap = computed(() => ({\r\n [`${XBubblePrefix}-${this.variantSignal()}`]: !XIsEmpty(this.variantSignal()),\r\n [`${XBubblePrefix}-${this.placement()}`]: !XIsEmpty(this.placement()),\r\n [`${XBubblePrefix}-cursor`]: this.showCursor() && this.typing(),\r\n [`${XBubblePrefix}-typing`]: this.typing() && this.pendingContent().length > 0,\r\n [`x-${this.sizeSignal()}`]: !XIsEmpty(this.sizeSignal())\r\n }));\r\n\r\n typedContent = signal('');\r\n pendingContent = signal('');\r\n pendingContentObserver = toObservable(this.pendingContent);\r\n private typingInterval: any = null;\r\n\r\n sizeSignal = computed(() => {\r\n return this.bubbles?.size() || this.size();\r\n });\r\n\r\n variantSignal = computed(() => {\r\n return this.bubbles?.variant() || this.variant();\r\n });\r\n\r\n isTemplate = computed(() => {\r\n return XIsTemplateRef(this.content());\r\n });\r\n\r\n isString = computed(() => {\r\n return XIsString(this.content());\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.isString() && !this.typing()) {\r\n this.stopTyping();\r\n this.typedContent.set(this.typedContent() + this.pendingContent());\r\n this.pendingContent.set('');\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { content } = changes;\r\n if (content && this.isString()) {\r\n const newFullContent = changes['content'].currentValue || '';\r\n const currentTypedContent = this.typedContent();\r\n\r\n if (!this.typing()) {\r\n this.typedContent.set(newFullContent);\r\n return;\r\n }\r\n\r\n if (newFullContent.startsWith(currentTypedContent)) {\r\n this.pendingContent.set(newFullContent.substring(currentTypedContent.length));\r\n this.startTyping();\r\n } else {\r\n this.stopTyping();\r\n this.typedContent.set('');\r\n this.pendingContent.set(newFullContent);\r\n this.startTyping();\r\n }\r\n }\r\n }\r\n\r\n get renderedContent() {\r\n const finalContent = this.typing() ? this.typedContent() : (this.content() as string) || '';\r\n let renderedString: string;\r\n\r\n if (this.renderer()) {\r\n renderedString = this.renderer()!(finalContent) || '';\r\n } else {\r\n renderedString = finalContent;\r\n }\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(renderedString);\r\n }\r\n\r\n private startTyping(): void {\r\n if (this.typingInterval) {\r\n return;\r\n }\r\n\r\n if (this.pendingContent().length === 0) {\r\n return;\r\n }\r\n\r\n this.typingStart.emit();\r\n this.typingInterval = setInterval(() => {\r\n if (this.pendingContent().length > 0) {\r\n const nextChar = this.pendingContent().charAt(0);\r\n this.typedContent.update((current) => current + nextChar);\r\n this.pendingContent.update((current) => current.substring(1));\r\n this.typingOuput.emit(nextChar);\r\n } else {\r\n this.typingEnd.emit();\r\n this.stopTyping();\r\n }\r\n }, this.speed());\r\n }\r\n\r\n private stopTyping(): void {\r\n if (this.typingInterval) {\r\n clearInterval(this.typingInterval);\r\n this.typingInterval = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopTyping();\r\n }\r\n}\r\n","<div class=\"x-bubble\" [ngClass]=\"classMap()\">\r\n @if (!!avatar()) {\r\n <div class=\"x-bubble-avatar\" [class.x-bubble-avatar-hidden]=\"avatar()?.hidden\">\r\n <x-avatar\r\n [icon]=\"avatar()?.icon!\"\r\n [label]=\"avatar()?.label!\"\r\n [src]=\"avatar()?.src!\"\r\n [size]=\"avatar()?.size ?? size()\"\r\n [gap]=\"avatar()?.gap ?? '0.25rem'\"\r\n [fit]=\"avatar()?.fit ?? 'cover'\"\r\n [backgroundColor]=\"avatar()?.backgroundColor ?? '#999999'\"\r\n [color]=\"avatar()?.color ?? '#FFFFFF'\"\r\n [shape]=\"avatar()?.shape ?? 'circle'\"\r\n ></x-avatar>\r\n </div>\r\n }\r\n <div class=\"x-bubble-wrapper\">\r\n @if (loading()) {\r\n <div class=\"x-bubble-content\" [x-loading]=\"true\" [size]=\"'small'\" inline></div>\r\n } @else {\r\n @if (header()) {\r\n <div class=\"x-bubble-header\">\r\n <ng-container *xOutlet=\"header()\">{{ header() }}</ng-container>\r\n </div>\r\n }\r\n @if (isString()) {\r\n <div class=\"x-bubble-content\" #contentRef [innerHTML]=\"renderedContent\"></div>\r\n } @else if (isTemplate()) {\r\n <div class=\"x-bubble-content\" #contentRef>\r\n <ng-container *xOutlet=\"content()\"></ng-container>\r\n </div>\r\n }\r\n @if (footer()) {\r\n <div class=\"x-bubble-footer\">\r\n <ng-container *xOutlet=\"footer()\">{{ footer() }}</ng-container>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBubbleComponent } from './bubble.component';\r\nimport { XBubblesComponent } from './bubbles.component';\r\n\r\n@NgModule({\r\n exports: [XBubbleComponent, XBubblesComponent],\r\n imports: [XBubbleComponent, XBubblesComponent]\r\n})\r\nexport class XBubbleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-bubble.mjs","sources":["../../../../lib/ng-nest/ui/bubble/bubble.property.ts","../../../../lib/ng-nest/ui/bubble/bubbles.component.ts","../../../../lib/ng-nest/ui/bubble/bubbles.component.html","../../../../lib/ng-nest/ui/bubble/bubble.component.ts","../../../../lib/ng-nest/ui/bubble/bubble.component.html","../../../../lib/ng-nest/ui/bubble/bubble.module.ts","../../../../lib/ng-nest/ui/bubble/ng-nest-ui-bubble.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\r\nimport { XBoolean, XNumber, XPropertyFunction, XSize, XTemplate, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { XAvatarOption } from '@ng-nest/ui/avatar';\r\n\r\n/**\r\n * Bubble\r\n * @selector x-bubble\r\n * @decorator component\r\n */\r\nexport const XBubblePrefix = 'x-bubble';\r\nconst X_BUBBLE_CONFIG_NAME = 'bubble';\r\n\r\n/**\r\n * Bubble Property\r\n */\r\n@Component({ selector: `${XBubblePrefix}-property`, template: '' })\r\nexport class XBubbleProperty extends XPropertyFunction(X_BUBBLE_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 气泡内容\r\n * @en_US Bubble content\r\n */\r\n readonly content = input<XTemplate>();\r\n /**\r\n * @zh_CN 头像\r\n * @en_US Avatar\r\n */\r\n readonly avatar = input<XBubbleAvatarOption>();\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n readonly size = input<XSize>(this.config?.size ?? 'medium');\r\n /**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\n readonly variant = input<XBubbleVariant>(this.config?.variant ?? 'outlined');\r\n /**\r\n * @zh_CN 位置\r\n * @en_US Bubble placement\r\n */\r\n readonly placement = input<XBubblePlacement>('start');\r\n /**\r\n * @zh_CN 气泡头部内容\r\n * @en_US Bubble header content\r\n */\r\n readonly header = input<XTemplate>();\r\n /**\r\n * @zh_CN 气泡底部内容\r\n * @en_US Bubble header content\r\n */\r\n readonly footer = input<XTemplate>();\r\n /**\r\n * @zh_CN 加载中\r\n * @en_US Loading\r\n */\r\n readonly loading = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 内容输出打字机效果\r\n * @en_US Typing effect\r\n */\r\n readonly typing = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 打字机输出速度\r\n * @en_US Typing speed\r\n */\r\n readonly speed = input<number, XNumber>(30, { transform: XToNumber });\r\n /**\r\n * @zh_CN 内容渲染器,可自定义内容的渲染方式,如 HTML、Markdown\r\n * @en_US Content renderer, can customize content rendering, such as HTML, Markdown\r\n */\r\n readonly renderer = input<XBubbleContentRenderer>();\r\n /**\r\n * @zh_CN 是否显示打字机光标\r\n * @en_US Whether to show the typing cursor\r\n */\r\n readonly showCursor = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n /**\r\n * @zh_CN 打字开始\r\n * @en_US Typing start\r\n */\r\n readonly typingStart = output<void>();\r\n /**\r\n * @zh_CN 打字正在输出的字符\r\n * @en_US Typing output character\r\n */\r\n readonly typingOuput = output<string>();\r\n /**\r\n * @zh_CN 打字结束\r\n * @en_US Typing end\r\n */\r\n readonly typingEnd = output<void>();\r\n}\r\n\r\n/**\r\n * @zh_CN 头像配置,继承了组件 Avatar 相关属性\r\n * @en_US Avatar settings\r\n */\r\nexport interface XBubbleAvatarOption extends XAvatarOption {\r\n /**\r\n * @zh_CN 是否显示头像\r\n * @en_US Whether to show the avatar\r\n */\r\n hidden?: boolean;\r\n}\r\n\r\n/**\r\n * Bubbles\r\n * @selector x-bubbles\r\n * @decorator component\r\n */\r\nexport const XBubblesPrefix = 'x-bubbles';\r\nconst X_BUBBLES_CONFIG_NAME = 'bubbles';\r\n\r\n/**\r\n * Bubbles Property\r\n */\r\n@Component({ selector: `${XBubblesPrefix}-property`, template: '' })\r\nexport class XBubblesProperty extends XPropertyFunction(X_BUBBLES_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n readonly size = input<XSize>();\r\n /**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\n readonly variant = input<XBubbleVariant>();\r\n /**\r\n * @zh_CN 滚动条滚动事件,自动获取父级可滚动的元素\r\n * @en_US Scroll event of the scroll bar, automatically obtaining the scrollable element of the parent\r\n */\r\n readonly scrollChange = output<Event>();\r\n}\r\n\r\n/**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\nexport type XBubbleVariant = 'outlined' | 'filled' | 'shadow' | 'borderless';\r\n\r\n/**\r\n * @zh_CN 位置\r\n * @en_US Bubble placement\r\n */\r\nexport type XBubblePlacement = 'start' | 'end';\r\n\r\n/**\r\n * @zh_CN 内容渲染函数\r\n * @en_US Bubble content renderer\r\n */\r\nexport type XBubbleContentRenderer = (content: string) => string | undefined;\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n contentChildren,\r\n ElementRef,\r\n inject,\r\n Renderer2,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { XBubblesProperty } from './bubble.property';\r\nimport { XBubbleComponent } from './bubble.component';\r\nimport { fromEvent, Subject, Subscription, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'x-bubbles',\r\n templateUrl: './bubbles.component.html',\r\n styleUrls: ['./bubbles.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: []\r\n})\r\nexport class XBubblesComponent extends XBubblesProperty {\r\n elementRef = inject(ElementRef);\r\n renderer = inject(Renderer2);\r\n\r\n private parentScrollElement: HTMLElement | null = null;\r\n private isFollowing = true;\r\n private removeScrollListener: Subscription | null = null;\r\n private contentMutationObserver: MutationObserver | null = null;\r\n private typingObserver: MutationObserver | null = null;\r\n private $destroy = new Subject<void>();\r\n\r\n bubbles = contentChildren(XBubbleComponent);\r\n\r\n ngAfterViewInit(): void {\r\n this.stepScroll();\r\n this.observeContentChanges();\r\n }\r\n\r\n ngDoCheck(): void {\r\n const bubbles = this.bubbles();\r\n if (bubbles.length <= 0) return;\r\n const lastBubble = bubbles[bubbles.length - 1];\r\n if (lastBubble && lastBubble.typing() && lastBubble.pendingContent().length > 0) {\r\n if (!this.typingObserver) {\r\n this.startTypingObserver(lastBubble);\r\n }\r\n } else {\r\n if (this.typingObserver) {\r\n this.stopTypingObserver();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeScrollListener?.unsubscribe();\r\n this.contentMutationObserver?.disconnect();\r\n this.stopTypingObserver();\r\n this.$destroy.next();\r\n this.$destroy.complete();\r\n }\r\n\r\n private stepScroll() {\r\n const newScroll = this.getParentScrollElement(this.elementRef.nativeElement);\r\n if (this.parentScrollElement && newScroll === this.parentScrollElement) return;\r\n this.parentScrollElement = newScroll;\r\n if (this.parentScrollElement) {\r\n this.removeScrollListener?.unsubscribe();\r\n this.removeScrollListener = fromEvent(this.parentScrollElement, 'scroll')\r\n .pipe(takeUntil(this.$destroy))\r\n .subscribe((event: Event) => {\r\n const atBottom =\r\n this.parentScrollElement!.scrollHeight - this.parentScrollElement!.scrollTop ===\r\n this.parentScrollElement!.clientHeight;\r\n if (!atBottom) {\r\n this.isFollowing = false;\r\n } else {\r\n this.isFollowing = true;\r\n }\r\n this.scrollChange.emit(event);\r\n });\r\n }\r\n }\r\n\r\n private getParentScrollElement(element: HTMLElement): HTMLElement | null {\r\n let parent = this.renderer.parentNode(element) as HTMLElement;\r\n while (parent && parent.nodeType === 1) {\r\n const overflowY = getComputedStyle(parent).overflowY;\r\n if (overflowY === 'auto' || overflowY === 'scroll') {\r\n return parent;\r\n }\r\n parent = this.renderer.parentNode(parent);\r\n }\r\n return null;\r\n }\r\n private observeContentChanges(): void {\r\n this.contentMutationObserver = new MutationObserver(() => {\r\n this.isFollowing = true;\r\n this.scrollToBottom();\r\n });\r\n\r\n this.contentMutationObserver.observe(this.elementRef.nativeElement, { childList: true });\r\n }\r\n\r\n private startTypingObserver(bubble: XBubbleComponent): void {\r\n const bubbleContent = bubble.contentRef()?.nativeElement;\r\n if (bubbleContent) {\r\n this.typingObserver = new MutationObserver(() => {\r\n if (this.isFollowing) {\r\n this.scrollToBottom();\r\n }\r\n });\r\n\r\n this.typingObserver.observe(bubbleContent, {\r\n childList: true,\r\n subtree: true,\r\n characterData: true\r\n });\r\n }\r\n }\r\n\r\n private stopTypingObserver(): void {\r\n if (this.typingObserver) {\r\n this.typingObserver.disconnect();\r\n this.typingObserver = null;\r\n }\r\n }\r\n\r\n scrollToBottom(): void {\r\n this.stepScroll();\r\n if (this.parentScrollElement) {\r\n this.parentScrollElement.scrollTop = this.parentScrollElement.scrollHeight;\r\n }\r\n }\r\n\r\n scrollToTop(): void {\r\n this.stepScroll();\r\n if (this.parentScrollElement) {\r\n this.parentScrollElement.scrollTop = 0;\r\n }\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n computed,\r\n viewChild,\r\n ElementRef,\r\n signal,\r\n effect,\r\n SimpleChanges,\r\n inject,\r\n Renderer2\r\n} from '@angular/core';\r\nimport { XBubblePrefix, XBubbleProperty } from './bubble.property';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XIsEmpty, XIsString, XIsTemplateRef } from '@ng-nest/ui/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { XAvatarComponent } from '@ng-nest/ui/avatar';\r\nimport { XLoadingComponent } from '@ng-nest/ui/loading';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { XBubblesComponent } from './bubbles.component';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: 'x-bubble',\r\n templateUrl: './bubble.component.html',\r\n styleUrls: ['./bubble.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgClass, XOutletDirective, XAvatarComponent, XLoadingComponent]\r\n})\r\nexport class XBubbleComponent extends XBubbleProperty {\r\n sanitizer = inject(DomSanitizer);\r\n renderer2 = inject(Renderer2);\r\n private bubbles = inject(XBubblesComponent, { optional: true, host: true });\r\n\r\n contentRef = viewChild<ElementRef<HTMLElement>>('contentRef');\r\n\r\n classMap = computed(() => ({\r\n [`${XBubblePrefix}-${this.variantSignal()}`]: !XIsEmpty(this.variantSignal()),\r\n [`${XBubblePrefix}-${this.placement()}`]: !XIsEmpty(this.placement()),\r\n [`${XBubblePrefix}-cursor`]: this.showCursor() && this.typing(),\r\n [`${XBubblePrefix}-typing`]: this.typing() && this.pendingContent().length > 0,\r\n [`x-${this.sizeSignal()}`]: !XIsEmpty(this.sizeSignal())\r\n }));\r\n\r\n typedContent = signal('');\r\n pendingContent = signal('');\r\n pendingContentObserver = toObservable(this.pendingContent);\r\n private typingInterval: any = null;\r\n\r\n sizeSignal = computed(() => {\r\n return this.bubbles?.size() || this.size();\r\n });\r\n\r\n variantSignal = computed(() => {\r\n return this.bubbles?.variant() || this.variant();\r\n });\r\n\r\n isTemplate = computed(() => {\r\n return XIsTemplateRef(this.content());\r\n });\r\n\r\n isString = computed(() => {\r\n return XIsString(this.content());\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.isString() && !this.typing()) {\r\n this.stopTyping();\r\n this.typedContent.set(this.typedContent() + this.pendingContent());\r\n this.pendingContent.set('');\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { content } = changes;\r\n if (content && this.isString()) {\r\n const newFullContent = changes['content'].currentValue || '';\r\n const currentTypedContent = this.typedContent();\r\n\r\n if (!this.typing()) {\r\n this.typedContent.set(newFullContent);\r\n return;\r\n }\r\n\r\n if (newFullContent.startsWith(currentTypedContent)) {\r\n this.pendingContent.set(newFullContent.substring(currentTypedContent.length));\r\n this.startTyping();\r\n } else {\r\n this.stopTyping();\r\n this.typedContent.set('');\r\n this.pendingContent.set(newFullContent);\r\n this.startTyping();\r\n }\r\n }\r\n }\r\n\r\n get renderedContent() {\r\n const finalContent = this.typing() ? this.typedContent() : (this.content() as string) || '';\r\n let renderedString: string;\r\n\r\n if (this.renderer()) {\r\n renderedString = this.renderer()!(finalContent) || '';\r\n } else {\r\n renderedString = finalContent;\r\n }\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(renderedString);\r\n }\r\n\r\n private startTyping(): void {\r\n if (this.typingInterval) {\r\n return;\r\n }\r\n\r\n if (this.pendingContent().length === 0) {\r\n return;\r\n }\r\n\r\n this.typingStart.emit();\r\n this.typingInterval = setInterval(() => {\r\n if (this.pendingContent().length > 0) {\r\n const nextChar = this.pendingContent().charAt(0);\r\n this.typedContent.update((current) => current + nextChar);\r\n this.pendingContent.update((current) => current.substring(1));\r\n this.typingOuput.emit(nextChar);\r\n } else {\r\n this.typingEnd.emit();\r\n this.stopTyping();\r\n }\r\n }, this.speed());\r\n }\r\n\r\n private stopTyping(): void {\r\n if (this.typingInterval) {\r\n clearInterval(this.typingInterval);\r\n this.typingInterval = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopTyping();\r\n }\r\n}\r\n","<div class=\"x-bubble\" [ngClass]=\"classMap()\">\r\n @if (!!avatar()) {\r\n <div class=\"x-bubble-avatar\" [class.x-bubble-avatar-hidden]=\"avatar()?.hidden\">\r\n <x-avatar\r\n [icon]=\"avatar()?.icon!\"\r\n [label]=\"avatar()?.label!\"\r\n [src]=\"avatar()?.src!\"\r\n [size]=\"avatar()?.size ?? size()\"\r\n [gap]=\"avatar()?.gap ?? '0.25rem'\"\r\n [fit]=\"avatar()?.fit ?? 'cover'\"\r\n [backgroundColor]=\"avatar()?.backgroundColor ?? '#999999'\"\r\n [color]=\"avatar()?.color ?? '#FFFFFF'\"\r\n [shape]=\"avatar()?.shape ?? 'circle'\"\r\n ></x-avatar>\r\n </div>\r\n }\r\n <div class=\"x-bubble-wrapper\">\r\n @if (loading()) {\r\n <div class=\"x-bubble-content\" [x-loading]=\"true\" [size]=\"'small'\" inline></div>\r\n } @else {\r\n @if (header()) {\r\n <div class=\"x-bubble-header\">\r\n <ng-container *xOutlet=\"header()\">{{ header() }}</ng-container>\r\n </div>\r\n }\r\n @if (isString()) {\r\n <div class=\"x-bubble-content\" #contentRef [innerHTML]=\"renderedContent\"></div>\r\n } @else if (isTemplate()) {\r\n <div class=\"x-bubble-content\" #contentRef>\r\n <ng-container *xOutlet=\"content()\"></ng-container>\r\n </div>\r\n }\r\n @if (footer()) {\r\n <div class=\"x-bubble-footer\">\r\n <ng-container *xOutlet=\"footer()\">{{ footer() }}</ng-container>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBubbleComponent } from './bubble.component';\r\nimport { XBubblesComponent } from './bubbles.component';\r\n\r\n@NgModule({\r\n exports: [XBubbleComponent, XBubblesComponent],\r\n imports: [XBubbleComponent, XBubblesComponent]\r\n})\r\nexport class XBubbleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}