ngx-tethys 20.0.1 → 20.0.2

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 (239) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/action/index.d.ts +3 -3
  3. package/affix/index.d.ts +1 -1
  4. package/alert/index.d.ts +3 -3
  5. package/anchor/index.d.ts +3 -3
  6. package/arrow-switcher/index.d.ts +6 -6
  7. package/autocomplete/index.d.ts +7 -7
  8. package/avatar/index.d.ts +9 -9
  9. package/back-top/index.d.ts +3 -3
  10. package/badge/index.d.ts +6 -6
  11. package/breadcrumb/index.d.ts +7 -7
  12. package/button/index.d.ts +19 -19
  13. package/calendar/index.d.ts +8 -8
  14. package/card/index.d.ts +6 -6
  15. package/carousel/index.d.ts +4 -4
  16. package/cascader/index.d.ts +24 -24
  17. package/collapse/index.d.ts +4 -4
  18. package/color-picker/index.d.ts +16 -16
  19. package/comment/index.d.ts +3 -3
  20. package/copy/index.d.ts +2 -2
  21. package/core/index.d.ts +22 -22
  22. package/date-picker/index.d.ts +111 -111
  23. package/date-range/index.d.ts +5 -5
  24. package/dialog/index.d.ts +18 -18
  25. package/divider/index.d.ts +3 -3
  26. package/drag-drop/index.d.ts +7 -7
  27. package/dropdown/index.d.ts +10 -10
  28. package/empty/index.d.ts +12 -12
  29. package/fesm2022/ngx-tethys-action.mjs +14 -12
  30. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  31. package/fesm2022/ngx-tethys-affix.mjs +7 -7
  32. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  33. package/fesm2022/ngx-tethys-alert.mjs +10 -10
  34. package/fesm2022/ngx-tethys-anchor.mjs +11 -11
  35. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  36. package/fesm2022/ngx-tethys-arrow-switcher.mjs +7 -7
  37. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  38. package/fesm2022/ngx-tethys-autocomplete.mjs +19 -18
  39. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  40. package/fesm2022/ngx-tethys-avatar.mjs +23 -22
  41. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  42. package/fesm2022/ngx-tethys-back-top.mjs +7 -7
  43. package/fesm2022/ngx-tethys-badge.mjs +7 -7
  44. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  45. package/fesm2022/ngx-tethys-breadcrumb.mjs +10 -10
  46. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  47. package/fesm2022/ngx-tethys-button.mjs +16 -16
  48. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  49. package/fesm2022/ngx-tethys-calendar.mjs +16 -16
  50. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  51. package/fesm2022/ngx-tethys-card.mjs +13 -13
  52. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  53. package/fesm2022/ngx-tethys-carousel.mjs +15 -15
  54. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  55. package/fesm2022/ngx-tethys-cascader.mjs +41 -34
  56. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  57. package/fesm2022/ngx-tethys-checkbox.mjs +7 -7
  58. package/fesm2022/ngx-tethys-collapse.mjs +10 -10
  59. package/fesm2022/ngx-tethys-color-picker.mjs +65 -57
  60. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  61. package/fesm2022/ngx-tethys-comment.mjs +13 -13
  62. package/fesm2022/ngx-tethys-copy.mjs +10 -10
  63. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  64. package/fesm2022/ngx-tethys-core.mjs +30 -25
  65. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  66. package/fesm2022/ngx-tethys-date-picker.mjs +184 -174
  67. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  68. package/fesm2022/ngx-tethys-date-range.mjs +16 -16
  69. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  70. package/fesm2022/ngx-tethys-dialog.mjs +24 -24
  71. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  72. package/fesm2022/ngx-tethys-divider.mjs +7 -7
  73. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  74. package/fesm2022/ngx-tethys-dot.mjs +7 -7
  75. package/fesm2022/ngx-tethys-drag-drop.mjs +24 -24
  76. package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
  77. package/fesm2022/ngx-tethys-dropdown.mjs +48 -47
  78. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  79. package/fesm2022/ngx-tethys-empty.mjs +13 -13
  80. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  81. package/fesm2022/ngx-tethys-flexible-text.mjs +7 -7
  82. package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
  83. package/fesm2022/ngx-tethys-form.mjs +64 -61
  84. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  85. package/fesm2022/ngx-tethys-fullscreen.mjs +18 -15
  86. package/fesm2022/ngx-tethys-fullscreen.mjs.map +1 -1
  87. package/fesm2022/ngx-tethys-grid.mjs +34 -33
  88. package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
  89. package/fesm2022/ngx-tethys-guider.mjs +25 -24
  90. package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
  91. package/fesm2022/ngx-tethys-i18n.mjs +3 -3
  92. package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
  93. package/fesm2022/ngx-tethys-icon.mjs +15 -13
  94. package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
  95. package/fesm2022/ngx-tethys-image.mjs +31 -29
  96. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  97. package/fesm2022/ngx-tethys-input-number.mjs +17 -10
  98. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  99. package/fesm2022/ngx-tethys-input.mjs +28 -27
  100. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  101. package/fesm2022/ngx-tethys-layout.mjs +63 -63
  102. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  103. package/fesm2022/ngx-tethys-list.mjs +21 -18
  104. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  105. package/fesm2022/ngx-tethys-loading.mjs +7 -7
  106. package/fesm2022/ngx-tethys-mention.mjs +35 -31
  107. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  108. package/fesm2022/ngx-tethys-menu.mjs +26 -26
  109. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  110. package/fesm2022/ngx-tethys-message.mjs +24 -24
  111. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  112. package/fesm2022/ngx-tethys-nav.mjs +27 -27
  113. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  114. package/fesm2022/ngx-tethys-notify.mjs +20 -20
  115. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  116. package/fesm2022/ngx-tethys-pagination.mjs +18 -18
  117. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  118. package/fesm2022/ngx-tethys-popover.mjs +22 -21
  119. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  120. package/fesm2022/ngx-tethys-progress.mjs +17 -17
  121. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  122. package/fesm2022/ngx-tethys-property-operation.mjs +11 -11
  123. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  124. package/fesm2022/ngx-tethys-property.mjs +12 -11
  125. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  126. package/fesm2022/ngx-tethys-radio.mjs +17 -17
  127. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  128. package/fesm2022/ngx-tethys-rate.mjs +12 -12
  129. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  130. package/fesm2022/ngx-tethys-resizable.mjs +21 -18
  131. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  132. package/fesm2022/ngx-tethys-result.mjs +11 -11
  133. package/fesm2022/ngx-tethys-result.mjs.map +1 -1
  134. package/fesm2022/ngx-tethys-segment.mjs +19 -16
  135. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  136. package/fesm2022/ngx-tethys-select.mjs +60 -38
  137. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  138. package/fesm2022/ngx-tethys-shared.mjs +82 -79
  139. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  140. package/fesm2022/ngx-tethys-skeleton.mjs +32 -32
  141. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  142. package/fesm2022/ngx-tethys-slide.mjs +37 -36
  143. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  144. package/fesm2022/ngx-tethys-slider.mjs +11 -11
  145. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  146. package/fesm2022/ngx-tethys-space.mjs +10 -10
  147. package/fesm2022/ngx-tethys-statistic.mjs +7 -7
  148. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  149. package/fesm2022/ngx-tethys-stepper.mjs +22 -22
  150. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  151. package/fesm2022/ngx-tethys-strength.mjs +7 -7
  152. package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
  153. package/fesm2022/ngx-tethys-switch.mjs +7 -7
  154. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  155. package/fesm2022/ngx-tethys-table.mjs +28 -28
  156. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  157. package/fesm2022/ngx-tethys-tabs.mjs +13 -13
  158. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  159. package/fesm2022/ngx-tethys-tag.mjs +11 -11
  160. package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
  161. package/fesm2022/ngx-tethys-testing.mjs +1 -1
  162. package/fesm2022/ngx-tethys-testing.mjs.map +1 -1
  163. package/fesm2022/ngx-tethys-time-picker.mjs +22 -22
  164. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  165. package/fesm2022/ngx-tethys-timeline.mjs +14 -14
  166. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  167. package/fesm2022/ngx-tethys-tooltip.mjs +19 -16
  168. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  169. package/fesm2022/ngx-tethys-transfer.mjs +15 -15
  170. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  171. package/fesm2022/ngx-tethys-tree-select.mjs +17 -17
  172. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  173. package/fesm2022/ngx-tethys-tree.mjs +50 -43
  174. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  175. package/fesm2022/ngx-tethys-typography.mjs +16 -16
  176. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  177. package/fesm2022/ngx-tethys-upload.mjs +26 -25
  178. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  179. package/fesm2022/ngx-tethys-util.mjs +11 -5
  180. package/fesm2022/ngx-tethys-util.mjs.map +1 -1
  181. package/fesm2022/ngx-tethys-vote.mjs +7 -7
  182. package/fesm2022/ngx-tethys-watermark.mjs +18 -15
  183. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  184. package/fesm2022/ngx-tethys.mjs +1 -1
  185. package/fesm2022/ngx-tethys.mjs.map +1 -1
  186. package/flexible-text/index.d.ts +5 -5
  187. package/form/index.d.ts +26 -22
  188. package/fullscreen/index.d.ts +4 -4
  189. package/grid/index.d.ts +12 -12
  190. package/guider/index.d.ts +10 -10
  191. package/i18n/index.d.ts +1 -1
  192. package/icon/index.d.ts +3 -3
  193. package/image/index.d.ts +12 -12
  194. package/input/index.d.ts +22 -22
  195. package/input-number/index.d.ts +4 -4
  196. package/layout/index.d.ts +16 -16
  197. package/list/index.d.ts +16 -15
  198. package/mention/index.d.ts +4 -4
  199. package/menu/index.d.ts +7 -7
  200. package/message/index.d.ts +5 -5
  201. package/nav/index.d.ts +12 -12
  202. package/notify/index.d.ts +1 -1
  203. package/package.json +1 -1
  204. package/pagination/index.d.ts +21 -17
  205. package/popover/index.d.ts +8 -8
  206. package/progress/index.d.ts +18 -18
  207. package/property/index.d.ts +6 -6
  208. package/property-operation/index.d.ts +3 -3
  209. package/radio/index.d.ts +6 -6
  210. package/rate/index.d.ts +5 -5
  211. package/resizable/index.d.ts +2 -2
  212. package/result/index.d.ts +8 -8
  213. package/schematics/testing/test-workspace.js +1 -0
  214. package/schematics/version.d.ts +1 -1
  215. package/schematics/version.js +1 -1
  216. package/segment/index.d.ts +9 -9
  217. package/select/index.d.ts +21 -21
  218. package/shared/index.d.ts +29 -29
  219. package/skeleton/index.d.ts +52 -52
  220. package/slide/index.d.ts +5 -5
  221. package/slider/index.d.ts +6 -6
  222. package/space/index.d.ts +1 -1
  223. package/statistic/index.d.ts +18 -18
  224. package/stepper/index.d.ts +8 -8
  225. package/switch/index.d.ts +2 -2
  226. package/table/index.d.ts +24 -24
  227. package/tabs/index.d.ts +6 -6
  228. package/testing/index.d.ts +1 -1
  229. package/time-picker/index.d.ts +21 -21
  230. package/timeline/index.d.ts +8 -8
  231. package/tooltip/index.d.ts +12 -12
  232. package/transfer/index.d.ts +16 -16
  233. package/tree/index.d.ts +28 -28
  234. package/tree-select/index.d.ts +13 -13
  235. package/typography/index.d.ts +3 -3
  236. package/upload/index.d.ts +4 -4
  237. package/util/index.d.ts +17 -7
  238. package/vote/index.d.ts +2 -2
  239. package/watermark/index.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-watermark.mjs","sources":["../../../src/watermark/config.ts","../../../src/watermark/watermark.directive.ts","../../../src/watermark/watermark.module.ts","../../../src/watermark/ngx-tethys-watermark.ts"],"sourcesContent":["export const DEFAULT_WATERMARK_CONFIG = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: '0.8',\n 'background-repeat': 'repeat',\n 'pointer-events': 'none',\n 'z-index': 2147483647,\n 'background-image': ''\n};\n\nexport const DEFAULT_CANVAS_CONFIG = {\n degree: 15,\n color: ['rgba(51, 51, 51, 0.12)', 'rgb(60, 65, 74)'],\n fontSize: 12,\n textLineHeight: 20,\n gutter: [250, 200]\n};\n","import { Directive, ElementRef, OnInit, inject, DestroyRef, effect, input, computed } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DEFAULT_WATERMARK_CONFIG, DEFAULT_CANVAS_CONFIG } from './config';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\nimport { coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\nimport { ThyThemeStore } from 'ngx-tethys/core';\n\n/**\n * @public\n * 水印样式配置\n */\nexport interface ThyCanvasConfigType {\n /**\n * 偏移角度\n */\n degree?: number;\n /**\n * 字体颜色。如果传的是数组,第一个为默认主题的字体颜色,第二个为黑暗主题的字体颜色\n */\n color?: string | string[];\n /**\n * 字体大小\n */\n fontSize?: number | string;\n /**\n * 文本行高\n */\n textLineHeight?: number;\n /**\n * 横纵间距\n */\n gutter?: number[];\n}\n\n/**\n * 水印指令\n * @name thyWatermark\n */\n@Directive({\n selector: '[thyWatermark]'\n})\nexport class ThyWatermarkDirective implements OnInit {\n private el = inject(ElementRef);\n\n /**\n * 是否禁用,默认为 false\n */\n readonly thyDisabled = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 水印内容\n */\n readonly thyWatermark = input<string>(undefined);\n\n /**\n * 水印样式配置\n */\n readonly thyCanvasConfig = input<ThyCanvasConfigType>(undefined);\n\n readonly content = computed(() => {\n const value = this.thyWatermark()?.replace(/^\\\"|\\\"$/g, '');\n return value || '';\n });\n\n private createWatermark$ = new Subject<string>();\n\n private observer: MutationObserver;\n\n private canvas: HTMLCanvasElement;\n\n private wmDiv: HTMLElement;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private thyThemeStore = inject(ThyThemeStore);\n\n constructor() {\n effect(() => {\n if (!this.thyDisabled() && this.thyThemeStore.theme()) {\n this.refreshWatermark();\n }\n });\n\n effect(() => {\n const thyWatermark = this.thyWatermark();\n if (thyWatermark) {\n this.refreshWatermark();\n }\n });\n\n effect(() => {\n const thyDisabled = this.thyDisabled();\n if (thyDisabled) {\n this.removeWatermark();\n } else {\n this.refreshWatermark();\n }\n });\n }\n\n ngOnInit() {\n if (!this.thyDisabled()) {\n this.createWatermark$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.observeAttributes()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {});\n });\n\n this.createWatermark();\n }\n }\n\n private refreshWatermark() {\n this.removeWatermark();\n this.createWatermark();\n }\n\n private removeWatermark() {\n if (this.wmDiv) {\n this.wmDiv.remove();\n this.wmDiv = null;\n }\n }\n\n createCanvas() {\n let { gutter, fontSize, color, degree, textLineHeight } = {\n ...DEFAULT_CANVAS_CONFIG,\n ...(this.thyCanvasConfig() || {})\n };\n color = this.thyThemeStore.normalizeColor(color);\n\n const [xGutter, yGutter] = gutter;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const getFakeSize = () => {\n const fakeBox = document.createElement('div');\n const fakeBoxStyle: Record<string, string | number> = {\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'inline-block',\n 'font-size': `${parseFloat('' + fontSize)}px`,\n 'word-wrap': 'break-word',\n 'font-family': 'inherit',\n 'white-space': 'pre-line'\n };\n const styleStr = Object.keys(fakeBoxStyle).reduce((pre, next) => ((pre += `${next}:${fakeBoxStyle[next]};`), pre), '');\n fakeBox.setAttribute('style', styleStr);\n\n fakeBox.innerHTML = this.content().replace(/(\\\\n)/gm, '</br>');\n document.querySelector('body').insertBefore(fakeBox, document.querySelector('body').firstChild);\n const { width, height } = fakeBox.getBoundingClientRect();\n fakeBox.remove();\n return { width, height };\n };\n const { width: fakeBoxWidth, height: fakeBoxHeight } = getFakeSize();\n\n const angle = (degree * Math.PI) / 180;\n const contentArr = this.content().split('\\\\n');\n const canvasHeight = Math.sin(angle) * fakeBoxWidth + fakeBoxHeight;\n\n let start = Math.ceil(Math.sin(angle) * fakeBoxWidth * Math.sin(angle));\n const canvasWidth = start + fakeBoxWidth;\n canvas.setAttribute('width', '' + (canvasWidth + xGutter));\n canvas.setAttribute('height', '' + (canvasHeight + yGutter));\n\n ctx.font = `${parseFloat('' + fontSize)}px microsoft yahei`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.fillStyle = color;\n ctx.rotate(0 - (degree * Math.PI) / 180);\n contentArr.map((k, i) => {\n ctx.fillText(k, -start + Math.ceil(canvasWidth / 2), Math.sin(angle) * canvasWidth + textLineHeight * i);\n start += Math.sin(angle) * textLineHeight;\n });\n this.canvas = canvas;\n return canvas;\n }\n\n private createWatermark(isRefresh = true) {\n const watermarkDiv = this.wmDiv || document.createElement('div');\n\n const background = !isRefresh ? this.canvas.toDataURL() : this.createCanvas().toDataURL();\n const watermarkStyle: Record<string, string | number> = {\n ...DEFAULT_WATERMARK_CONFIG,\n 'background-image': `url(${background})`\n };\n\n const styleStr = Object.keys(watermarkStyle).reduce((pre, next) => ((pre += `${next}:${watermarkStyle[next]};`), pre), '');\n watermarkDiv.setAttribute('style', styleStr);\n\n if (!this.wmDiv) {\n const parentNode = this.el.nativeElement;\n watermarkDiv.classList.add(`_vm`);\n this.wmDiv = watermarkDiv;\n parentNode.insertBefore(watermarkDiv, parentNode.firstChild);\n }\n this.createWatermark$.next('');\n }\n\n private observeAttributes() {\n this.observer?.disconnect();\n return new Observable(observe => {\n const stream = new Subject<MutationRecord[]>();\n this.observer = new MutationObserverFactory().create(mutations => stream.next(mutations));\n if (this.observer) {\n this.observer.observe(this.wmDiv, {\n attributes: true\n });\n }\n stream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.wmDiv) {\n this?.observer?.disconnect();\n this.createWatermark(false);\n }\n });\n observe.next(stream);\n return () => {\n this.observer?.disconnect();\n };\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyWatermarkDirective } from './watermark.directive';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyWatermarkDirective],\n exports: [ThyWatermarkDirective],\n providers: []\n})\nexport class ThyWatermarkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-watermark.mjs","sources":["../../../src/watermark/config.ts","../../../src/watermark/watermark.directive.ts","../../../src/watermark/watermark.module.ts","../../../src/watermark/ngx-tethys-watermark.ts"],"sourcesContent":["export const DEFAULT_WATERMARK_CONFIG = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: '0.8',\n 'background-repeat': 'repeat',\n 'pointer-events': 'none',\n 'z-index': 2147483647,\n 'background-image': ''\n};\n\nexport const DEFAULT_CANVAS_CONFIG = {\n degree: 15,\n color: ['rgba(51, 51, 51, 0.12)', 'rgb(60, 65, 74)'],\n fontSize: 12,\n textLineHeight: 20,\n gutter: [250, 200]\n};\n","import { Directive, ElementRef, OnInit, inject, DestroyRef, effect, input, computed } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DEFAULT_WATERMARK_CONFIG, DEFAULT_CANVAS_CONFIG } from './config';\nimport { MutationObserverFactory } from '@angular/cdk/observers';\nimport { coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\nimport { ThyThemeStore } from 'ngx-tethys/core';\n\n/**\n * @public\n * 水印样式配置\n */\nexport interface ThyCanvasConfigType {\n /**\n * 偏移角度\n */\n degree?: number;\n /**\n * 字体颜色。如果传的是数组,第一个为默认主题的字体颜色,第二个为黑暗主题的字体颜色\n */\n color?: string | string[];\n /**\n * 字体大小\n */\n fontSize?: number | string;\n /**\n * 文本行高\n */\n textLineHeight?: number;\n /**\n * 横纵间距\n */\n gutter?: number[];\n}\n\n/**\n * 水印指令\n * @name thyWatermark\n */\n@Directive({\n selector: '[thyWatermark]'\n})\nexport class ThyWatermarkDirective implements OnInit {\n private el = inject(ElementRef);\n\n /**\n * 是否禁用,默认为 false\n */\n readonly thyDisabled = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 水印内容\n */\n readonly thyWatermark = input<string>();\n\n /**\n * 水印样式配置\n */\n readonly thyCanvasConfig = input<ThyCanvasConfigType>();\n\n readonly content = computed(() => {\n // eslint-disable-next-line no-useless-escape\n const value = this.thyWatermark()?.replace(/^\\\"|\\\"$/g, '');\n return value || '';\n });\n\n private createWatermark$ = new Subject<string>();\n\n private observer: MutationObserver | null = null;\n\n private canvas!: HTMLCanvasElement;\n\n private wmDiv: HTMLElement | null = null;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private thyThemeStore = inject(ThyThemeStore);\n\n constructor() {\n effect(() => {\n if (!this.thyDisabled() && this.thyThemeStore.theme()) {\n this.refreshWatermark();\n }\n });\n\n effect(() => {\n const thyWatermark = this.thyWatermark();\n if (thyWatermark) {\n this.refreshWatermark();\n }\n });\n\n effect(() => {\n const thyDisabled = this.thyDisabled();\n if (thyDisabled) {\n this.removeWatermark();\n } else {\n this.refreshWatermark();\n }\n });\n }\n\n ngOnInit() {\n if (!this.thyDisabled()) {\n this.createWatermark$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.observeAttributes()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {});\n });\n\n this.createWatermark();\n }\n }\n\n private refreshWatermark() {\n this.removeWatermark();\n this.createWatermark();\n }\n\n private removeWatermark() {\n if (this.wmDiv) {\n this.wmDiv.remove();\n this.wmDiv = null;\n }\n }\n\n createCanvas() {\n const { gutter, fontSize, degree, textLineHeight } = {\n ...DEFAULT_CANVAS_CONFIG,\n ...(this.thyCanvasConfig() || {})\n };\n\n const color = this.thyThemeStore.normalizeColor({ ...DEFAULT_CANVAS_CONFIG, ...(this.thyCanvasConfig() || {}) }.color);\n\n const [xGutter, yGutter] = gutter;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n const getFakeSize = () => {\n const fakeBox = document.createElement('div');\n const fakeBoxStyle: Record<string, string | number> = {\n position: 'absolute',\n top: 0,\n left: 0,\n display: 'inline-block',\n 'font-size': `${parseFloat(`${fontSize}`)}px`,\n 'word-wrap': 'break-word',\n 'font-family': 'inherit',\n 'white-space': 'pre-line'\n };\n const styleStr = Object.keys(fakeBoxStyle).reduce((pre, next) => ((pre += `${next}:${fakeBoxStyle[next]};`), pre), '');\n fakeBox.setAttribute('style', styleStr);\n\n fakeBox.innerHTML = this.content().replace(/(\\\\n)/gm, '</br>');\n document.querySelector('body')!.insertBefore(fakeBox, document.querySelector('body')!.firstChild);\n const { width, height } = fakeBox.getBoundingClientRect();\n fakeBox.remove();\n return { width, height };\n };\n const { width: fakeBoxWidth, height: fakeBoxHeight } = getFakeSize();\n\n const angle = (degree * Math.PI) / 180;\n const contentArr = this.content().split('\\\\n');\n const canvasHeight = Math.sin(angle) * fakeBoxWidth + fakeBoxHeight;\n\n let start = Math.ceil(Math.sin(angle) * fakeBoxWidth * Math.sin(angle));\n const canvasWidth = start + fakeBoxWidth;\n canvas.setAttribute('width', `${canvasWidth + xGutter}`);\n canvas.setAttribute('height', `${canvasHeight + yGutter}`);\n\n ctx.font = `${parseFloat(`${fontSize}`)}px microsoft yahei`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'top';\n ctx.fillStyle = color!;\n ctx.rotate(0 - (degree * Math.PI) / 180);\n contentArr.map((k, i) => {\n ctx.fillText(k, -start + Math.ceil(canvasWidth / 2), Math.sin(angle) * canvasWidth + textLineHeight * i);\n start += Math.sin(angle) * textLineHeight;\n });\n this.canvas = canvas;\n return canvas;\n }\n\n private createWatermark(isRefresh = true) {\n const watermarkDiv = this.wmDiv || document.createElement('div');\n\n const background = !isRefresh ? this.canvas.toDataURL() : this.createCanvas().toDataURL();\n const watermarkStyle: Record<string, string | number> = {\n ...DEFAULT_WATERMARK_CONFIG,\n 'background-image': `url(${background})`\n };\n\n const styleStr = Object.keys(watermarkStyle).reduce((pre, next) => ((pre += `${next}:${watermarkStyle[next]};`), pre), '');\n watermarkDiv.setAttribute('style', styleStr);\n\n if (!this.wmDiv) {\n const parentNode = this.el.nativeElement;\n watermarkDiv.classList.add(`_vm`);\n this.wmDiv = watermarkDiv;\n parentNode.insertBefore(watermarkDiv, parentNode.firstChild);\n }\n this.createWatermark$.next('');\n }\n\n private observeAttributes() {\n this.observer?.disconnect();\n return new Observable(observe => {\n const stream = new Subject<MutationRecord[]>();\n this.observer = new MutationObserverFactory().create(mutations => stream.next(mutations));\n if (this.observer) {\n this.observer.observe(this.wmDiv!, {\n attributes: true\n });\n }\n stream.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.wmDiv) {\n this?.observer?.disconnect();\n this.createWatermark(false);\n }\n });\n observe.next(stream);\n return () => {\n this.observer?.disconnect();\n };\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyWatermarkDirective } from './watermark.directive';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyWatermarkDirective],\n exports: [ThyWatermarkDirective],\n providers: []\n})\nexport class ThyWatermarkModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Version } from '@angular/core';
2
2
 
3
- const VERSION = new Version('20.0.1');
3
+ const VERSION = new Version('20.0.2');
4
4
 
5
5
  /**
6
6
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('20.0.1');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('20.0.2');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
@@ -23,26 +23,26 @@ declare class ThyFlexibleText implements AfterContentInit, OnDestroy {
23
23
  * @type hover | focus | click
24
24
  * @default hover
25
25
  */
26
- readonly trigger: _angular_core.InputSignal<"focus" | "hover" | "click">;
26
+ readonly trigger: _angular_core.InputSignal<"focus" | "hover" | "click" | undefined>;
27
27
  /**
28
28
  * 自定义class类,如果不设置默认会包含 `flexible-text-container`
29
29
  */
30
- readonly thyContainerClass: _angular_core.InputSignal<string>;
30
+ readonly thyContainerClass: _angular_core.InputSignal<string | undefined>;
31
31
  /**
32
32
  * 需要展示的全部内容
33
33
  * @type string | TemplateRef<HTMLElement>
34
34
  */
35
- readonly thyTooltipContent: _angular_core.InputSignal<string | TemplateRef<HTMLElement>>;
35
+ readonly thyTooltipContent: _angular_core.InputSignal<string | TemplateRef<HTMLElement> | undefined>;
36
36
  /**
37
37
  * tooltip 的提示位置
38
38
  * @type top | bottom | left | right
39
39
  * @default top
40
40
  */
41
- readonly thyTooltipPlacement: _angular_core.InputSignal<ThyPlacement>;
41
+ readonly thyTooltipPlacement: _angular_core.InputSignal<ThyPlacement | undefined>;
42
42
  /**
43
43
  * tooltip 偏移量
44
44
  */
45
- readonly thyTooltipOffset: _angular_core.InputSignalWithTransform<number, unknown>;
45
+ readonly thyTooltipOffset: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
46
46
  private destroy$;
47
47
  private hostRenderer;
48
48
  static createResizeObserver(element: HTMLElement): Observable<unknown>;
package/form/index.d.ts CHANGED
@@ -51,8 +51,8 @@ interface ThyControlValidationResult {
51
51
  }
52
52
  interface ThyValidateResult {
53
53
  valid: boolean;
54
- invalidControls: ThyControlValidationResult[];
55
- validControls: ThyControlValidationResult[];
54
+ invalidControls?: ThyControlValidationResult[];
55
+ validControls?: ThyControlValidationResult[];
56
56
  }
57
57
  declare const THY_VALIDATOR_CONFIG: InjectionToken<ThyFormValidatorGlobalConfig>;
58
58
  declare const THY_FORM_CONFIG: InjectionToken<ThyFormConfig>;
@@ -99,14 +99,18 @@ declare class ThyFormValidatorService implements OnDestroy {
99
99
  private _getControls;
100
100
  private _getControlByName;
101
101
  validateControl(name: string): {
102
- valid: boolean;
102
+ valid: boolean | null;
103
103
  control: AbstractControl<any, any, any> | FormControlName;
104
- element: any;
104
+ element: HTMLElement;
105
105
  };
106
- validateControls(): any[];
106
+ validateControls(): {
107
+ valid: boolean | null;
108
+ control: AbstractControl<any, any, any> | FormControlName;
109
+ element: HTMLElement;
110
+ }[];
107
111
  addError(message: string): void;
108
112
  validate($event?: Event): boolean;
109
- validateWithDetail($event?: Event): ThyValidateResult;
113
+ validateWithDetail($event: Event): ThyValidateResult;
110
114
  reset(): void;
111
115
  setElementErrorMessage(name: string, message: string): void;
112
116
  ngOnDestroy(): void;
@@ -137,7 +141,7 @@ declare class ThyFormDirective implements OnInit, AfterViewInit, OnDestroy {
137
141
  * @type horizontal | vertical | inline
138
142
  * @default horizontal
139
143
  */
140
- readonly thyLayout: i0.InputSignal<ThyFormLayout>;
144
+ readonly thyLayout: i0.InputSignal<ThyFormLayout | undefined>;
141
145
  get isHorizontal(): boolean;
142
146
  private get layout();
143
147
  /**
@@ -145,11 +149,11 @@ declare class ThyFormDirective implements OnInit, AfterViewInit, OnDestroy {
145
149
  * @type submit | alwaysSubmit | forbidSubmit
146
150
  * @default submit
147
151
  */
148
- readonly thyEnterKeyMode: i0.InputSignal<ThyEnterKeyMode>;
152
+ readonly thyEnterKeyMode: i0.InputSignal<ThyEnterKeyMode | undefined>;
149
153
  /**
150
154
  * 表单验证规则配置项 (更多内容查看:thyFormValidatorConfig)
151
155
  */
152
- readonly thyFormValidatorConfig: i0.InputSignal<ThyFormValidatorConfig>;
156
+ readonly thyFormValidatorConfig: i0.InputSignal<ThyFormValidatorConfig | undefined>;
153
157
  wasValidated: boolean;
154
158
  onSubmitSuccess: ($event: any) => void;
155
159
  private _unsubscribe;
@@ -179,11 +183,11 @@ declare class ThyFormGroup implements OnInit {
179
183
  /**
180
184
  * Label 文本
181
185
  */
182
- readonly thyLabelText: i0.InputSignal<string>;
186
+ readonly thyLabelText: i0.InputSignal<string | undefined>;
183
187
  /**
184
188
  * Label 文本多语言 Key
185
189
  */
186
- readonly thyLabelTextTranslateKey: i0.InputSignal<string>;
190
+ readonly thyLabelTextTranslateKey: i0.InputSignal<string | undefined>;
187
191
  protected labelTextSignal: i0.Signal<any>;
188
192
  /**
189
193
  * Label 是否显示必填项样式
@@ -221,11 +225,11 @@ declare class ThyFormGroup implements OnInit {
221
225
  * 已废弃
222
226
  * @deprecated please use content because formGroup is same name with angular formGroup directive
223
227
  */
224
- contentTemplateRef: TemplateRef<any>;
228
+ contentTemplateRef?: TemplateRef<any>;
225
229
  /**
226
230
  * 内容自定义模板,`<ng-template #content></ng-template>`
227
231
  */
228
- contentTemplate: TemplateRef<any>;
232
+ contentTemplate?: TemplateRef<any>;
229
233
  constructor();
230
234
  ngOnInit(): void;
231
235
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyFormGroup, never>;
@@ -259,7 +263,7 @@ declare class ThyFormSubmitDirective implements OnInit {
259
263
  /**
260
264
  * Form 验证通过的提交函数
261
265
  */
262
- thyFormSubmit: i0.OutputEmitterRef<Event>;
266
+ readonly thyFormSubmit: i0.OutputEmitterRef<Event>;
263
267
  ngOnInit(): void;
264
268
  onSubmit($event: Event): void;
265
269
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyFormSubmitDirective, never>;
@@ -276,13 +280,13 @@ declare class ThyFormGroupFooter implements OnInit {
276
280
  private defaultConfig;
277
281
  _isFormGroup: boolean;
278
282
  isHorizontal: boolean;
279
- description: TemplateRef<any>;
283
+ description?: TemplateRef<any>;
280
284
  /**
281
285
  * 对齐方式
282
286
  * @type left | right | center
283
287
  * @default left
284
288
  */
285
- readonly thyAlign: i0.InputSignal<ThyFormGroupFooterAlign>;
289
+ readonly thyAlign: i0.InputSignal<ThyFormGroupFooterAlign | undefined>;
286
290
  footerClassMap: {};
287
291
  private get align();
288
292
  ngOnInit(): void;
@@ -299,7 +303,7 @@ declare class ThyFormGroupFooter implements OnInit {
299
303
  declare class ThyUniqueCheckValidator implements AsyncValidator {
300
304
  private elementRef;
301
305
  private thyForm;
302
- readonly thyUniqueCheck: i0.InputSignal<(value: any) => Observable<boolean>>;
306
+ readonly thyUniqueCheck: i0.InputSignal<((value: any) => Observable<boolean>) | undefined>;
303
307
  validate(ctrl: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;
304
308
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyUniqueCheckValidator, never>;
305
309
  static ɵdir: i0.ɵɵDirectiveDeclaration<ThyUniqueCheckValidator, "[thyUniqueCheck]", never, { "thyUniqueCheck": { "alias": "thyUniqueCheck"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -334,7 +338,7 @@ declare class ThyMinDirective implements Validator {
334
338
  set min(value: string);
335
339
  validate(control: AbstractControl): {
336
340
  [key: string]: any;
337
- };
341
+ } | null;
338
342
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyMinDirective, never>;
339
343
  static ɵdir: i0.ɵɵDirectiveDeclaration<ThyMinDirective, "[min][formControlName],[min][formControl],[min][ngModel]", never, { "min": { "alias": "min"; "required": false; }; }, {}, never, never, true, never>;
340
344
  }
@@ -348,7 +352,7 @@ declare class ThyMaxDirective implements Validator {
348
352
  set max(value: string);
349
353
  validate(control: AbstractControl): {
350
354
  [key: string]: any;
351
- };
355
+ } | null;
352
356
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyMaxDirective, never>;
353
357
  static ɵdir: i0.ɵɵDirectiveDeclaration<ThyMaxDirective, "[max][formControlName],[max][formControl],[max][ngModel]", never, { "max": { "alias": "max"; "required": false; }; }, {}, never, never, true, never>;
354
358
  }
@@ -364,9 +368,9 @@ declare class ThyConfirmValidatorDirective implements Validator {
364
368
  * 表单控件的校验值
365
369
  */
366
370
  readonly confirm: i0.InputSignal<string>;
367
- validate(control: AbstractControl): i2.ValidationErrors;
371
+ validate(control: AbstractControl): i2.ValidationErrors | null;
368
372
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyConfirmValidatorDirective, never>;
369
- static ɵdir: i0.ɵɵDirectiveDeclaration<ThyConfirmValidatorDirective, "[confirm]", never, { "confirm": { "alias": "confirm"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
373
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ThyConfirmValidatorDirective, "[confirm]", never, { "confirm": { "alias": "confirm"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
370
374
  }
371
375
 
372
376
  declare class ThyFormModule {
@@ -387,7 +391,7 @@ declare class ThyFormValidatorLoader {
387
391
  private getDefaultValidationMessage;
388
392
  constructor();
389
393
  get validationMessages(): ThyFormValidationMessages;
390
- get validateOn(): ngx_tethys_form.ThyValidateOn;
394
+ get validateOn(): ngx_tethys_form.ThyValidateOn | undefined;
391
395
  isElementInInputGroup(element: HTMLElement): boolean;
392
396
  getErrorMessage(name: string, key: string): string;
393
397
  getErrorMessages(name: string, validationErrors: ValidationErrors): string[];
@@ -41,12 +41,12 @@ declare class ThyFullscreenComponent implements OnInit, OnDestroy {
41
41
  /**
42
42
  * 打开全屏时需要添加的类名
43
43
  */
44
- readonly thyFullscreenClasses: i0.InputSignal<string>;
44
+ readonly thyFullscreenClasses: i0.InputSignal<string | undefined>;
45
45
  /**
46
46
  * 全屏之后的回调
47
47
  */
48
48
  readonly thyFullscreenChange: i0.OutputEmitterRef<boolean>;
49
- readonly fullscreenLaunch: i0.Signal<ElementRef<any>>;
49
+ readonly fullscreenLaunch: i0.Signal<ElementRef<any> | undefined>;
50
50
  private ngUnsubscribe$;
51
51
  private fullscreenLaunch$;
52
52
  constructor();
@@ -91,8 +91,8 @@ declare class ThyFullscreenRef<TResult = unknown> {
91
91
  protected exitImmersiveFullscreen(): void;
92
92
  launch(): void;
93
93
  exit(): void;
94
- afterLaunched(): Observable<TResult>;
95
- afterExited(): Observable<TResult>;
94
+ afterLaunched(): Observable<TResult | undefined>;
95
+ afterExited(): Observable<TResult | undefined>;
96
96
  }
97
97
 
98
98
  declare class ThyFullscreen {
package/grid/index.d.ts CHANGED
@@ -125,7 +125,7 @@ declare class ThyRowDirective {
125
125
  /**
126
126
  * 栅格的间距
127
127
  */
128
- readonly thyGutter: _angular_core.InputSignal<number | ThyGutterType>;
128
+ readonly thyGutter: _angular_core.InputSignal<number | ThyGutterType | undefined>;
129
129
  actualGutter$: ReplaySubject<[number, number]>;
130
130
  private hostRenderer;
131
131
  constructor();
@@ -153,12 +153,12 @@ declare class ThyColDirective {
153
153
  /**
154
154
  * 栅格项的占位列数,thySpan 如果传递了值,以 thySpan 为准
155
155
  */
156
- readonly thyCol: _angular_core.InputSignal<ThySpan>;
156
+ readonly thyCol: _angular_core.InputSignal<ThySpan | undefined>;
157
157
  /**
158
158
  * 栅格项的占位列数
159
159
  */
160
- readonly thySpan: _angular_core.InputSignal<ThySpan>;
161
- protected readonly span: _angular_core.Signal<ThySpan>;
160
+ readonly thySpan: _angular_core.InputSignal<ThySpan | undefined>;
161
+ protected readonly span: _angular_core.Signal<number | "auto">;
162
162
  private hostRenderer;
163
163
  private takeUntilDestroyed;
164
164
  constructor();
@@ -188,20 +188,20 @@ declare class ThyFlex {
188
188
  * Flex Wrap
189
189
  * @default nowrap
190
190
  */
191
- readonly thyWrap: _angular_core.InputSignal<ThyFlexWrap>;
191
+ readonly thyWrap: _angular_core.InputSignal<ThyFlexWrap | undefined>;
192
192
  /**
193
193
  * Justify Content
194
194
  */
195
- readonly thyJustifyContent: _angular_core.InputSignal<ThyFlexJustifyContent>;
195
+ readonly thyJustifyContent: _angular_core.InputSignal<ThyFlexJustifyContent | undefined>;
196
196
  /**
197
197
  * Align Items
198
198
  */
199
- readonly thyAlignItems: _angular_core.InputSignal<ThyFlexAlignItems>;
199
+ readonly thyAlignItems: _angular_core.InputSignal<ThyFlexAlignItems | undefined>;
200
200
  /**
201
201
  * Flex Item 之间的间隙 Gap
202
202
  * @default 0
203
203
  */
204
- readonly thyGap: _angular_core.InputSignal<number>;
204
+ readonly thyGap: _angular_core.InputSignal<number | undefined>;
205
205
  constructor();
206
206
  private updateClasses;
207
207
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThyFlex, never>;
@@ -224,21 +224,21 @@ declare class ThyFlexItem {
224
224
  /**
225
225
  * Flex Item 属性,表示 grow 、shrink 、basis
226
226
  */
227
- readonly thyFlexItem: _angular_core.InputSignal<string>;
227
+ readonly thyFlexItem: _angular_core.InputSignal<string | undefined>;
228
228
  /**
229
229
  * Flew Grow,设置或检索弹性盒子的扩展比率,设置 1 为填充剩余区域
230
230
  */
231
- readonly thyGrow: _angular_core.InputSignal<ThyFlexGrow>;
231
+ readonly thyGrow: _angular_core.InputSignal<ThyFlexGrow | undefined>;
232
232
  /**
233
233
  * Flex Shrink,设置或检索弹性盒收缩比例
234
234
  * @default 1
235
235
  */
236
- readonly thyShrink: _angular_core.InputSignal<ThyFlexShrink>;
236
+ readonly thyShrink: _angular_core.InputSignal<ThyFlexShrink | undefined>;
237
237
  /**
238
238
  * Flex Basis,设置或检索弹性盒伸缩基准值
239
239
  * @default 1
240
240
  */
241
- readonly thyBasis: _angular_core.InputSignal<string>;
241
+ readonly thyBasis: _angular_core.InputSignal<string | undefined>;
242
242
  constructor();
243
243
  private updateClasses;
244
244
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThyFlexItem, never>;
package/guider/index.d.ts CHANGED
@@ -120,14 +120,14 @@ interface IThyGuiderRef {
120
120
  close: () => void;
121
121
  end: () => void;
122
122
  }
123
- interface IThyGuiderManager {
124
- updateActive: (key: string, guiderRef: IThyGuiderRef) => void;
123
+ interface IThyGuiderManager<TthyGuiderRef = IThyGuiderRef> {
124
+ updateActive: (key: string, guiderRef?: TthyGuiderRef) => void;
125
125
  addStepTarget: (key: string, el: HTMLElement) => void;
126
126
  removeStepTarget: (key: string) => void;
127
127
  getActiveTarget: (key: string) => HTMLElement;
128
128
  getActive: () => {
129
129
  key: string;
130
- guiderRef: IThyGuiderRef;
130
+ guiderRef: TthyGuiderRef;
131
131
  };
132
132
  }
133
133
 
@@ -181,11 +181,11 @@ declare class ThyGuiderStepRef {
181
181
  private document;
182
182
  private renderer;
183
183
  private lastPointerContainer;
184
- private lastTargetElement;
185
- private targetElementObserver;
184
+ private lastTargetElement?;
185
+ private targetElementObserver?;
186
186
  private lastTipContainer;
187
187
  private guiderRef;
188
- private lastPopoverRef;
188
+ private lastPopoverRef?;
189
189
  constructor(step: ThyGuiderStep, stepIndex: number, rendererFactory: RendererFactory2, popover: ThyPopover, guiderManager: IThyGuiderManager, overlay: Overlay, document: Document);
190
190
  show(guiderRef: IThyGuiderRef): void;
191
191
  dispose(): void;
@@ -247,7 +247,7 @@ declare class ThyGuiderTargetDirective implements OnInit, OnDestroy, AfterViewIn
247
247
  ngAfterViewInit(): void;
248
248
  ngOnDestroy(): void;
249
249
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyGuiderTargetDirective, never>;
250
- static ɵdir: i0.ɵɵDirectiveDeclaration<ThyGuiderTargetDirective, "[thyGuiderTarget]", ["thyGuiderTarget"], { "target": { "alias": "thyGuiderTarget"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
250
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ThyGuiderTargetDirective, "[thyGuiderTarget]", ["thyGuiderTarget"], { "target": { "alias": "thyGuiderTarget"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
251
251
  }
252
252
 
253
253
  declare class ThyGuiderModule {
@@ -283,12 +283,12 @@ declare class ThyGuider {
283
283
  * @public
284
284
  * @order 60
285
285
  */
286
- declare class ThyGuiderManager implements IThyGuiderManager {
286
+ declare class ThyGuiderManager implements IThyGuiderManager<ThyGuiderRef> {
287
287
  private targetListMap;
288
- private thyGuiderRef;
288
+ private thyGuiderRef?;
289
289
  private activeStepKey;
290
290
  constructor();
291
- updateActive(key: string, guiderRef: ThyGuiderRef): void;
291
+ updateActive(key: string, guiderRef?: ThyGuiderRef): void;
292
292
  addStepTarget(key: string, el: HTMLElement): void;
293
293
  removeStepTarget(key: string): void;
294
294
  getActiveTarget(key: string): HTMLElement;
package/i18n/index.d.ts CHANGED
@@ -1046,7 +1046,7 @@ declare const _default: {
1046
1046
  };
1047
1047
  };
1048
1048
 
1049
- declare function normalizeLocale(localeId: string): ThyLocaleType;
1049
+ declare function normalizeLocale(localeId: string | null): ThyLocaleType;
1050
1050
  declare function getDefaultLocaleId(): ThyLocaleType;
1051
1051
 
1052
1052
  export { THY_I18N_DE_DE, THY_I18N_EN_US, THY_I18N_JA_JP, THY_I18N_LOCALE_ID, THY_I18N_ZH_HANS, THY_I18N_ZH_HANT, ThyI18nService, ThyLocaleType, _default as deDeLocale, _default$2 as enUsLocale, getDefaultLocaleId, injectLocale, _default$1 as jaJpLocale, normalizeLocale, _default$4 as zhHansLocale, _default$3 as zhHantLocale };
package/icon/index.d.ts CHANGED
@@ -18,7 +18,7 @@ declare class ThyIcon {
18
18
  * @type outline | fill | twotone
19
19
  */
20
20
  readonly thyIconType: _angular_core.InputSignal<"fill" | "outline" | "twotone">;
21
- readonly thyTwotoneColor: _angular_core.InputSignal<string>;
21
+ readonly thyTwotoneColor: _angular_core.InputSignal<string | undefined>;
22
22
  /**
23
23
  * 图标的名字
24
24
  */
@@ -27,8 +27,8 @@ declare class ThyIcon {
27
27
  * 图标的旋转角度
28
28
  * @default 0
29
29
  */
30
- readonly thyIconRotate: _angular_core.InputSignalWithTransform<number, unknown>;
31
- readonly thyIconSet: _angular_core.InputSignal<string>;
30
+ readonly thyIconRotate: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
31
+ readonly thyIconSet: _angular_core.InputSignal<string | undefined>;
32
32
  /**
33
33
  * 图标打底色,镂空的图标,会透过颜色来
34
34
  */
package/image/index.d.ts CHANGED
@@ -50,7 +50,7 @@ interface ThyImagePreviewOptions {
50
50
  interface ThyImagePreviewOperation {
51
51
  icon: string;
52
52
  name: string;
53
- action?: (image?: ThyImageInfo) => void;
53
+ action?: (image: ThyImageInfo) => void;
54
54
  type?: ThyImagePreviewOperationType;
55
55
  }
56
56
  type ThyImagePreviewMode = 'original-scale' | 'fit-screen';
@@ -58,10 +58,10 @@ type ThyImagePreviewOperationType = 'zoom-out' | 'zoom-in' | 'rotate-right' | 'd
58
58
 
59
59
  interface IThyImageDirective {
60
60
  previewable: boolean;
61
- thySrc: InputSignal<string>;
62
- thyPreviewSrc: InputSignal<string>;
63
- thyOriginSrc: InputSignal<string>;
64
- thyImageMeta: InputSignal<ThyImageMeta>;
61
+ thySrc: InputSignal<string | undefined>;
62
+ thyPreviewSrc: InputSignal<string | undefined>;
63
+ thyOriginSrc: InputSignal<string | undefined>;
64
+ thyImageMeta: InputSignal<ThyImageMeta | undefined>;
65
65
  }
66
66
  interface IThyImageGroupComponent {
67
67
  injector: Injector;
@@ -117,24 +117,24 @@ declare class ThyImageDirective implements IThyImageDirective, OnInit, AfterView
117
117
  /**
118
118
  * 图片地址
119
119
  */
120
- readonly thySrc: i0.InputSignal<string>;
120
+ readonly thySrc: i0.InputSignal<string | undefined>;
121
121
  /**
122
122
  * 预览图片地址
123
123
  */
124
- readonly thyPreviewSrc: i0.InputSignal<string>;
124
+ readonly thyPreviewSrc: i0.InputSignal<string | undefined>;
125
125
  /**
126
126
  * 图片原图地址
127
127
  */
128
- readonly thyOriginSrc: i0.InputSignal<string>;
128
+ readonly thyOriginSrc: i0.InputSignal<string | undefined>;
129
129
  /**
130
130
  * 图片附加信息,包含 { name: string, size?: string | number; }
131
131
  */
132
- readonly thyImageMeta: i0.InputSignal<ThyImageMeta>;
132
+ readonly thyImageMeta: i0.InputSignal<ThyImageMeta | undefined>;
133
133
  /**
134
134
  * 是否禁止预览
135
135
  * @default false
136
136
  */
137
- readonly thyDisablePreview: i0.InputSignalWithTransform<boolean, unknown>;
137
+ readonly thyDisablePreview: i0.InputSignalWithTransform<boolean | undefined, unknown>;
138
138
  /**
139
139
  * 是否自动计算图片资源大小
140
140
  */
@@ -189,7 +189,7 @@ declare class ThyImagePreview implements OnInit {
189
189
  private rotate;
190
190
  get previewImage(): InternalImageInfo;
191
191
  get previewImageOriginSrc(): string;
192
- get defaultZoom(): number;
192
+ get defaultZoom(): number | undefined;
193
193
  imageRef: ElementRef<HTMLImageElement>;
194
194
  imagePreviewWrapper: ElementRef<HTMLElement>;
195
195
  ngOnInit(): void;
@@ -198,7 +198,7 @@ declare class ThyImagePreview implements OnInit {
198
198
  useDefaultZoomUpdate(isUpdateImageWrapper: boolean): void;
199
199
  useCalculateZoomUpdate(isUpdateImageWrapper?: boolean): void;
200
200
  updatePreviewImage(): void;
201
- resolvePreviewImage(): Observable<Boolean>;
201
+ resolvePreviewImage(): Observable<boolean>;
202
202
  initPreview(): void;
203
203
  download(image: ThyImageInfo): void;
204
204
  zoomIn(): void;