ngx-tethys 22.0.1 → 22.0.3

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 (189) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/button/styles/button-group.scss +25 -18
  3. package/button/styles/button.scss +3 -1
  4. package/button/styles/mixin.scss +7 -2
  5. package/button/styles/theme.scss +3 -1
  6. package/cascader/styles/cascader.scss +5 -0
  7. package/date-picker/styles/index.scss +5 -0
  8. package/date-picker/styles/picker.scss +5 -0
  9. package/fesm2022/ngx-tethys-action.mjs +13 -4
  10. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  11. package/fesm2022/ngx-tethys-alert.mjs +34 -13
  12. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  13. package/fesm2022/ngx-tethys-arrow-switcher.mjs +17 -6
  14. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  15. package/fesm2022/ngx-tethys-autocomplete.mjs +11 -3
  16. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  17. package/fesm2022/ngx-tethys-badge.mjs +17 -5
  18. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  19. package/fesm2022/ngx-tethys-breadcrumb.mjs +1 -1
  20. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  21. package/fesm2022/ngx-tethys-button.mjs +54 -27
  22. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  23. package/fesm2022/ngx-tethys-calendar.mjs +1 -1
  24. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  25. package/fesm2022/ngx-tethys-card.mjs +1 -3
  26. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  27. package/fesm2022/ngx-tethys-carousel.mjs +1 -1
  28. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  29. package/fesm2022/ngx-tethys-cascader.mjs +37 -29
  30. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  31. package/fesm2022/ngx-tethys-collapse.mjs +19 -8
  32. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  33. package/fesm2022/ngx-tethys-color-picker.mjs +1 -1
  34. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  35. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  36. package/fesm2022/ngx-tethys-date-picker.mjs +36 -24
  37. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  38. package/fesm2022/ngx-tethys-date-range.mjs +2 -2
  39. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  40. package/fesm2022/ngx-tethys-dialog.mjs +194 -196
  41. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  42. package/fesm2022/ngx-tethys-divider.mjs +18 -7
  43. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  44. package/fesm2022/ngx-tethys-dot.mjs +18 -7
  45. package/fesm2022/ngx-tethys-dot.mjs.map +1 -1
  46. package/fesm2022/ngx-tethys-dropdown.mjs +16 -5
  47. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  48. package/fesm2022/ngx-tethys-form.mjs +447 -101
  49. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  50. package/fesm2022/ngx-tethys-image.mjs +1 -1
  51. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  52. package/fesm2022/ngx-tethys-input-number.mjs +11 -5
  53. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  54. package/fesm2022/ngx-tethys-input.mjs +61 -20
  55. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  56. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  57. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  58. package/fesm2022/ngx-tethys-menu.mjs +36 -6
  59. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  60. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  61. package/fesm2022/ngx-tethys-native-table.mjs +26 -11
  62. package/fesm2022/ngx-tethys-native-table.mjs.map +1 -1
  63. package/fesm2022/ngx-tethys-nav.mjs +26 -16
  64. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  65. package/fesm2022/ngx-tethys-notify.mjs +1 -1
  66. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  67. package/fesm2022/ngx-tethys-pagination.mjs +1 -1
  68. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  69. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  70. package/fesm2022/ngx-tethys-progress.mjs +81 -55
  71. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  72. package/fesm2022/ngx-tethys-property-operation.mjs +32 -24
  73. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  74. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  75. package/fesm2022/ngx-tethys-radio.mjs +1 -0
  76. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  77. package/fesm2022/ngx-tethys-segment.mjs +0 -1
  78. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  79. package/fesm2022/ngx-tethys-select.mjs +29 -11
  80. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  81. package/fesm2022/ngx-tethys-shared.mjs +17 -8
  82. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  83. package/fesm2022/ngx-tethys-slide.mjs +1 -1
  84. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  85. package/fesm2022/ngx-tethys-slider.mjs +38 -13
  86. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  87. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  88. package/fesm2022/ngx-tethys-statistic.mjs +20 -10
  89. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  90. package/fesm2022/ngx-tethys-stepper.mjs +1 -1
  91. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  92. package/fesm2022/ngx-tethys-strength.mjs +9 -1
  93. package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
  94. package/fesm2022/ngx-tethys-switch.mjs +20 -11
  95. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  96. package/fesm2022/ngx-tethys-table.mjs +28 -17
  97. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  98. package/fesm2022/ngx-tethys-tabs.mjs +17 -23
  99. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  100. package/fesm2022/ngx-tethys-time-picker.mjs +12 -6
  101. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  102. package/fesm2022/ngx-tethys-timeline.mjs +2 -8
  103. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  104. package/fesm2022/ngx-tethys-tree-select.mjs +12 -7
  105. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  106. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  107. package/fesm2022/ngx-tethys-typography.mjs +0 -1
  108. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  109. package/fesm2022/ngx-tethys.mjs +1 -1
  110. package/fesm2022/ngx-tethys.mjs.map +1 -1
  111. package/form/styles/forms.scss +1 -0
  112. package/form/styles/mixin.scss +37 -0
  113. package/form/styles/theme.scss +1 -0
  114. package/input/styles/input.scss +28 -19
  115. package/input-number/styles/input-number.scss +22 -3
  116. package/menu/examples/variant/variant.component.scss +21 -0
  117. package/nav/examples/pulled/pulled.component.scss +6 -0
  118. package/package.json +1 -1
  119. package/schematics/ng-update/update-22/badge-dot-hollow-migration.spec.js +4 -4
  120. package/schematics/ng-update/update-22/button-appearance-migration.js +16 -6
  121. package/schematics/ng-update/update-22/button-appearance-migration.spec.js +6 -5
  122. package/schematics/ng-update/update-22/button-group-appearance-migration.d.ts +6 -0
  123. package/schematics/ng-update/update-22/button-group-appearance-migration.js +157 -0
  124. package/schematics/ng-update/update-22/button-group-appearance-migration.spec.d.ts +1 -0
  125. package/schematics/ng-update/update-22/button-group-appearance-migration.spec.js +56 -0
  126. package/schematics/ng-update/update-22/class-name-migration.spec.js +135 -0
  127. package/schematics/ng-update/update-22/divider-deeper-migration.js +12 -5
  128. package/schematics/ng-update/update-22/divider-deeper-migration.spec.js +9 -1
  129. package/schematics/ng-update/update-22/index.js +9 -1
  130. package/schematics/ng-update/update-22/index.spec.js +844 -3
  131. package/schematics/ng-update/update-22/input-search-appearance-migration.d.ts +6 -0
  132. package/schematics/ng-update/update-22/input-search-appearance-migration.js +94 -0
  133. package/schematics/ng-update/update-22/input-search-appearance-migration.spec.d.ts +1 -0
  134. package/schematics/ng-update/update-22/input-search-appearance-migration.spec.js +41 -0
  135. package/schematics/ng-update/update-22/menu-theme-migration.d.ts +14 -0
  136. package/schematics/ng-update/update-22/menu-theme-migration.js +108 -0
  137. package/schematics/ng-update/update-22/menu-theme-migration.spec.d.ts +1 -0
  138. package/schematics/ng-update/update-22/menu-theme-migration.spec.js +42 -0
  139. package/schematics/ng-update/update-22/select-borderless-migration.d.ts +6 -0
  140. package/schematics/ng-update/update-22/select-borderless-migration.js +111 -0
  141. package/schematics/ng-update/update-22/select-borderless-migration.spec.d.ts +1 -0
  142. package/schematics/ng-update/update-22/select-borderless-migration.spec.js +49 -0
  143. package/schematics/ng-update/update-22/update-data.js +155 -1
  144. package/schematics/version.d.ts +1 -1
  145. package/schematics/version.js +1 -1
  146. package/select/styles/custom-select.scss +5 -0
  147. package/select/styles/theme.scss +10 -0
  148. package/shared/select/select-control/select-control.scss +4 -3
  149. package/time-picker/styles/time-picker.scss +11 -2
  150. package/types/ngx-tethys-action.d.ts +14 -5
  151. package/types/ngx-tethys-alert.d.ts +28 -8
  152. package/types/ngx-tethys-arrow-switcher.d.ts +16 -5
  153. package/types/ngx-tethys-autocomplete.d.ts +8 -2
  154. package/types/ngx-tethys-badge.d.ts +14 -4
  155. package/types/ngx-tethys-button.d.ts +41 -12
  156. package/types/ngx-tethys-card.d.ts +3 -6
  157. package/types/ngx-tethys-cascader.d.ts +9 -3
  158. package/types/ngx-tethys-collapse.d.ts +18 -5
  159. package/types/ngx-tethys-core.d.ts +2 -1
  160. package/types/ngx-tethys-date-picker.d.ts +15 -3
  161. package/types/ngx-tethys-dialog.d.ts +1 -3
  162. package/types/ngx-tethys-divider.d.ts +20 -9
  163. package/types/ngx-tethys-dot.d.ts +25 -13
  164. package/types/ngx-tethys-dropdown.d.ts +16 -5
  165. package/types/ngx-tethys-form.d.ts +198 -55
  166. package/types/ngx-tethys-input-number.d.ts +8 -2
  167. package/types/ngx-tethys-input.d.ts +43 -12
  168. package/types/ngx-tethys-menu.d.ts +16 -4
  169. package/types/ngx-tethys-native-table.d.ts +21 -6
  170. package/types/ngx-tethys-nav.d.ts +18 -7
  171. package/types/ngx-tethys-progress.d.ts +42 -18
  172. package/types/ngx-tethys-property-operation.d.ts +6 -0
  173. package/types/ngx-tethys-segment.d.ts +0 -1
  174. package/types/ngx-tethys-select.d.ts +23 -5
  175. package/types/ngx-tethys-shared.d.ts +12 -3
  176. package/types/ngx-tethys-slider.d.ts +22 -8
  177. package/types/ngx-tethys-space.d.ts +3 -1
  178. package/types/ngx-tethys-statistic.d.ts +23 -9
  179. package/types/ngx-tethys-stepper.d.ts +1 -1
  180. package/types/ngx-tethys-strength.d.ts +5 -0
  181. package/types/ngx-tethys-switch.d.ts +15 -4
  182. package/types/ngx-tethys-table.d.ts +24 -8
  183. package/types/ngx-tethys-tabs.d.ts +17 -8
  184. package/types/ngx-tethys-time-picker.d.ts +8 -2
  185. package/types/ngx-tethys-timeline.d.ts +13 -14
  186. package/types/ngx-tethys-tree-select.d.ts +8 -3
  187. package/types/ngx-tethys-typography.d.ts +0 -1
  188. /package/action/examples/{type/type.component.scss → color/color.component.scss} +0 -0
  189. /package/badge/examples/{type/type.component.scss → color/color.component.scss} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,61 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [22.0.3](github.com/atinc/ngx-tethys/compare/22.0.2...22.0.3) (2026-09-24)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **radio:** support md size class for radio-group #TINFR-4085 ([#3947](/github.com/atinc/ngx-tethys/issues/3947)) ([aaafd1a](github.com/atinc/ngx-tethys/commits/aaafd1a1e347db9e4719b5ff185ca70e9b5e9b17)), closes [#TINFR-4085](github.com/atinc/ngx-tethys/issues/TINFR-4085)
11
+
12
+
13
+ ### Features
14
+
15
+ * **action:** add thyColor and ThyActionColor, deprecate thyType and ThyActionType #TINFR-4096 ([#3957](/github.com/atinc/ngx-tethys/issues/3957)) ([5f81cd9](github.com/atinc/ngx-tethys/commits/5f81cd9519816718e6e039233a31d6d32ce25d6f)), closes [#TINFR-4096](github.com/atinc/ngx-tethys/issues/TINFR-4096)
16
+ * **arrow-switcher:** add thyVariant and ThyArrowSwitcherVariant, deprecate thyTheme and ThyArrowSwitcherTheme #TINFR-4094 ([#3955](/github.com/atinc/ngx-tethys/issues/3955)) ([07f6160](github.com/atinc/ngx-tethys/commits/07f616046fc21d8d8c8238dd88af65cc69317a60)), closes [#TINFR-4094](github.com/atinc/ngx-tethys/issues/TINFR-4094)
17
+ * **autocomplete:** support thyAppearance outline | subtle | ghost #TINFR-4110 ([#3967](/github.com/atinc/ngx-tethys/issues/3967)) ([6ea6f71](github.com/atinc/ngx-tethys/commits/6ea6f71744e61bd20ddf884b097a901f588601fd)), closes [#TINFR-4110](github.com/atinc/ngx-tethys/issues/TINFR-4110)
18
+ * **badge:** add thyColor, ThyBadgeColor and mark thyType as deprecated #TINFR-4089 ([#3951](/github.com/atinc/ngx-tethys/issues/3951)) ([8895cbc](github.com/atinc/ngx-tethys/commits/8895cbcc7a76558a7102f6b353cbce42d0e17de5)), closes [#TINFR-4089](github.com/atinc/ngx-tethys/issues/TINFR-4089)
19
+ * **button:** support thyAppearance for button-group and mark thyType deprecated #TINFR-3995 ([#3946](/github.com/atinc/ngx-tethys/issues/3946)) ([83e39cd](github.com/atinc/ngx-tethys/commits/83e39cdbad171277b02b589202989036524af1a6)), closes [#TINFR-3995](github.com/atinc/ngx-tethys/issues/TINFR-3995)
20
+ * **cascader:** support thyAppearance outline | subtle | ghost #TINFR-4109 ([#3970](/github.com/atinc/ngx-tethys/issues/3970)) ([825f4c0](github.com/atinc/ngx-tethys/commits/825f4c0d4c47ba732ed0f9da376c2b6974273ed1)), closes [#TINFR-4109](github.com/atinc/ngx-tethys/issues/TINFR-4109)
21
+ * **datePicker:** support thyAppearance outline | subtle | ghost #TIN… ([#3968](/github.com/atinc/ngx-tethys/issues/3968)) ([3af16c9](github.com/atinc/ngx-tethys/commits/3af16c917ce25e66e6580a5a4922486b7844ed46))
22
+ * **divider:** support thyAppearance,ThyDividerAppearance,and mark thyStyle,ThyDividerStyle as deprecated #TINFR-4087 ([#3949](/github.com/atinc/ngx-tethys/issues/3949)) ([3dff1b6](github.com/atinc/ngx-tethys/commits/3dff1b681051b9cd0fc7ffc300c9b17a5ca67236)), closes [#TINFR-4087](github.com/atinc/ngx-tethys/issues/TINFR-4087) [#TINFR-4087](github.com/atinc/ngx-tethys/issues/TINFR-4087)
23
+ * **dropdown:** introduce thyColor and ThyDropdownMenuItemColor, mark thyType and ThyDropdownMenuItemType as deprecated #TINFR-4095 ([#3956](/github.com/atinc/ngx-tethys/issues/3956)) ([0a246de](github.com/atinc/ngx-tethys/commits/0a246defaeeb04b5a8f0669196edf15962c0f9db)), closes [#TINFR-4095](github.com/atinc/ngx-tethys/issues/TINFR-4095)
24
+ * **form:** 支持由 schema 驱动的动态表单 #TINFR-4119 ([#3966](/github.com/atinc/ngx-tethys/issues/3966)) ([c3fffeb](github.com/atinc/ngx-tethys/commits/c3fffeb8fcc35a12abbcbef62b960683162d7d64)), closes [#TINFR-4119](github.com/atinc/ngx-tethys/issues/TINFR-4119) [#TINFR-4119](github.com/atinc/ngx-tethys/issues/TINFR-4119)
25
+ * **input-number:** support thyAppearance outline | subtle | ghost #TINFR-4113 ([#3971](/github.com/atinc/ngx-tethys/issues/3971)) ([cddd76c](github.com/atinc/ngx-tethys/commits/cddd76c3f90c0c5a543d9f9ab22a467436844d21)), closes [#TINFR-4113](github.com/atinc/ngx-tethys/issues/TINFR-4113)
26
+ * **input-search:** add thyAppearance,ThyInputSearchAppearance and mark thyTheme,ThyInputSearchTheme as deprecated #TINFR-4099 ([#3958](/github.com/atinc/ngx-tethys/issues/3958)) ([2f0cdc8](github.com/atinc/ngx-tethys/commits/2f0cdc8344e4e9b8fa9624eac8d190834fd6c1dd)), closes [#TINFR-4099](github.com/atinc/ngx-tethys/issues/TINFR-4099)
27
+ * **input-search:** rename thyTheme and ThyInputSearchTheme to thyVariant and ThyInputSearchVariant #TINFR-4099 ([1bfe11b](github.com/atinc/ngx-tethys/commits/1bfe11b03f36218c0a770058a04830199493a3e7)), closes [#TINFR-4099](github.com/atinc/ngx-tethys/issues/TINFR-4099)
28
+ * **input:** support thyAppearance outline | subtle | ghost #TINFR-4107 ([#3960](/github.com/atinc/ngx-tethys/issues/3960)) ([2cc4e35](github.com/atinc/ngx-tethys/commits/2cc4e3561388f508e31c4d05726124ea0d289f52)), closes [#TINFR-4107](github.com/atinc/ngx-tethys/issues/TINFR-4107)
29
+ * **menu:** thyVariant,ThyMenuVariant support compact,loose and thyTheme,ThyMenuTheme support light,dark #TINFR-4070 ([#3945](/github.com/atinc/ngx-tethys/issues/3945)) ([a29b087](github.com/atinc/ngx-tethys/commits/a29b08712c2f58261097dcba748dab4fc02ac934)), closes [#TINFR-4070](github.com/atinc/ngx-tethys/issues/TINFR-4070) [#TINFR-4078](github.com/atinc/ngx-tethys/issues/TINFR-4078)
30
+ * **nav, property-operation:** deprecate thy-icon-nav, thyIconNavLink, thy-property-operation, and related components #NEXUS-5493 ([#3961](/github.com/atinc/ngx-tethys/issues/3961)) ([a7a5829](github.com/atinc/ngx-tethys/commits/a7a582910527b264950813ca65dd36e6b71a7787)), closes [#NEXUS-5493](github.com/atinc/ngx-tethys/issues/NEXUS-5493)
31
+ * **progress:** add thyColor,ThyProgressColor,ThyProgressShape,ThyProgressGapPosition and mark thyType,ThyProgressType,ThyProgressShapeType,ThyProgressGapPositionType as deprecated #TINFR-4090 ([#3952](/github.com/atinc/ngx-tethys/issues/3952)) ([a6970c9](github.com/atinc/ngx-tethys/commits/a6970c9c821eb981c55d1a8015dda8355b137c22)), closes [#TINFR-4090](github.com/atinc/ngx-tethys/issues/TINFR-4090)
32
+ * **select:** support thyAppearance outline | subtle | ghost #TINFR-4108 ([#3965](/github.com/atinc/ngx-tethys/issues/3965)) ([26bd3a0](github.com/atinc/ngx-tethys/commits/26bd3a02daddaa3cea0648eb864a78bcea2ad526)), closes [#TINFR-4108](github.com/atinc/ngx-tethys/issues/TINFR-4108)
33
+ * **slider:** thyColor support primary | success | info | warning | danger | string,mark thyType, ThySliderType as deprecated #TINFR-4086 ([#3948](/github.com/atinc/ngx-tethys/issues/3948)) ([a25b133](github.com/atinc/ngx-tethys/commits/a25b1330fb89c4ab7f2930921f9260396a242538)), closes [#TINFR-4086](github.com/atinc/ngx-tethys/issues/TINFR-4086)
34
+ * **statistic:** deprecate thyShape and ThyStatisticShape, introduce thyAppearance and ThyStatisticAppearance, ThyStatisticColorType → ThyStatisticColor, ThyStatisticSizes → ThyStatisticSize #TINFR-4091 ([#3953](/github.com/atinc/ngx-tethys/issues/3953)) ([3fc074b](github.com/atinc/ngx-tethys/commits/3fc074b9647872c5f345542343e436d590b9221d)), closes [#TINFR-4091](github.com/atinc/ngx-tethys/issues/TINFR-4091)
35
+ * **strength:** deprecate thy-strength and ThyStrengthModule, scheduled for removal in v23 ([#3962](/github.com/atinc/ngx-tethys/issues/3962)) ([f25087e](github.com/atinc/ngx-tethys/commits/f25087e989fb20c06c79a7d64b8178e1c9a40d5e))
36
+ * **switch:** add thyColor, ThySwitchColor and mark thyType as deprecated #TINFR-4088 ([#3950](/github.com/atinc/ngx-tethys/issues/3950)) ([ae1bed7](github.com/atinc/ngx-tethys/commits/ae1bed75399a236f01f94b15a7d5383aae5dbafb)), closes [#TINFR-4088](github.com/atinc/ngx-tethys/issues/TINFR-4088)
37
+ * **table:** add thyAppearance,deprecate thyTheme in thy-native-table and thy-table-skeleton ([#3959](/github.com/atinc/ngx-tethys/issues/3959)) ([50c2870](github.com/atinc/ngx-tethys/commits/50c2870f9aef5433c81bf1303db0cfe72532d60f))
38
+ * **time-picker:** support thyAppearance outline | subtle | ghost #TINFR-4114 ([#3972](/github.com/atinc/ngx-tethys/issues/3972)) ([a95c881](github.com/atinc/ngx-tethys/commits/a95c8810f4182ad98ebaec0d3cf9edf0d35d87d5)), closes [#TINFR-4114](github.com/atinc/ngx-tethys/issues/TINFR-4114)
39
+ * **timeline:** rename thyColor to ThyTimelineColor and ThyTimeMode to ThyTimelineMode; mark old types as deprecated #TINFR-4092 ([#3954](/github.com/atinc/ngx-tethys/issues/3954)) ([c1de9ef](github.com/atinc/ngx-tethys/commits/c1de9efb2e189d2cadb91f58b4dab1d638b4c03d)), closes [#TINFR-4092](github.com/atinc/ngx-tethys/issues/TINFR-4092)
40
+ * **tree-select:** support thyAppearance outline | subtle | ghost #TINFR-4115 ([#3974](/github.com/atinc/ngx-tethys/issues/3974)) ([4c26815](github.com/atinc/ngx-tethys/commits/4c268155d4e570f42c8c81508351d6100d7640bf)), closes [#TINFR-4115](github.com/atinc/ngx-tethys/issues/TINFR-4115)
41
+
42
+ ## [22.0.2](github.com/atinc/ngx-tethys/compare/22.0.0...22.0.2) (2026-09-14)
43
+
44
+
45
+ ### Bug Fixes
46
+
47
+ * **input:** omit native type when thyType is null or undefined #TINFR-3994 ([cba2115](github.com/atinc/ngx-tethys/commits/cba21156a006fa9fd86094a3705570580ed538e2)), closes [#TINFR-3994](github.com/atinc/ngx-tethys/issues/TINFR-3994)
48
+ * **tabs:** keep current active tab when tabs change dynamically #NEXUS-5367 ([#3943](/github.com/atinc/ngx-tethys/issues/3943)) ([de469c2](github.com/atinc/ngx-tethys/commits/de469c20fe7797b9b1ea44a8ca11989a1e90d7e9)), closes [#NEXUS-5367](github.com/atinc/ngx-tethys/issues/NEXUS-5367)
49
+
50
+
51
+ ### Features
52
+
53
+ * **alert:** support thyColor, thyAppearance, ThyAlertColor, ThyAlertAppearance and mark thyType, thyTheme, ThyAlertTheme, ThyAlertType as deprecated #TINFR-3829 ([#3938](/github.com/atinc/ngx-tethys/issues/3938)) ([07b3eb0](github.com/atinc/ngx-tethys/commits/07b3eb0b30f2353b1f29cfcaa85fdb1725c05ef8)), closes [#TINFR-3829](github.com/atinc/ngx-tethys/issues/TINFR-3829)
54
+ * **button:** add thyColor, ThyButtonColor and mark thyType,ThyButtonType as deprecated #TINFR-4066 ([#3941](/github.com/atinc/ngx-tethys/issues/3941)) ([41e4cb2](github.com/atinc/ngx-tethys/commits/41e4cb254e134a87b0eee31e008dae26713d9397)), closes [#TINFR-4066](github.com/atinc/ngx-tethys/issues/TINFR-4066)
55
+ * **collapse:** support ThyCollapseAppearance, thyAppearance and mark thyTheme, ThyCollapseTheme as deprecated #TINFR-4068 ([#3939](/github.com/atinc/ngx-tethys/issues/3939)) ([734429b](github.com/atinc/ngx-tethys/commits/734429b4aece8bf50b1532ac62fb0c2ea920d2f6)), closes [#TINFR-4068](github.com/atinc/ngx-tethys/issues/TINFR-4068) [#TINFR-4068](github.com/atinc/ngx-tethys/issues/TINFR-4068)
56
+ * **dot:** support thyAppearance,ThyDotAppearance and mark thyTheme,ThyThemeType as deprecated #TINFR-4067 ([#3940](/github.com/atinc/ngx-tethys/issues/3940)) ([ecfe1c0](github.com/atinc/ngx-tethys/commits/ecfe1c057d7824ec91e20ab54ee2c8a2ca2db58b)), closes [#TINFR-4067](github.com/atinc/ngx-tethys/issues/TINFR-4067) [#TINFR-4067](github.com/atinc/ngx-tethys/issues/TINFR-4067)
57
+ * **nav:** add thyVariant instead of thyType #TINFR-3839 ([8745cf9](github.com/atinc/ngx-tethys/commits/8745cf9acd5c61e0dd1446c29129280a50ce5c04)), closes [#TINFR-3839](github.com/atinc/ngx-tethys/issues/TINFR-3839)
58
+ * **tabs:** add thyVariant,ThyTabsVariant and mark thyType,ThyTabsType as deprecated #TINFR-3840 ([#3942](/github.com/atinc/ngx-tethys/issues/3942)) ([2ed0ef9](github.com/atinc/ngx-tethys/commits/2ed0ef91146e3598a2c8643713b31138ad86d97a)), closes [#TINFR-3840](github.com/atinc/ngx-tethys/issues/TINFR-3840)
59
+
5
60
  ## [22.0.1](github.com/atinc/ngx-tethys/compare/22.0.0...22.0.1) (2026-09-10)
6
61
 
7
62
 
@@ -80,9 +80,7 @@
80
80
  }
81
81
  }
82
82
 
83
- // Sizing
84
- //
85
- // Remix the default button sizing classes into new ones for easier manipulation.
83
+ // Sizing(保留给 radio-group 等仍使用 btn-group-{size} 的场景;thy-button-group 已改为同步子按钮 size)
86
84
 
87
85
  .btn-group-xs > .btn {
88
86
  @extend .btn-xs;
@@ -114,7 +112,17 @@
114
112
  }
115
113
  }
116
114
 
117
- // type
115
+ // type(thyType 兼容,勿删)
116
+
117
+ @mixin btn-group-divider {
118
+ position: absolute;
119
+ content: '';
120
+ width: bootstrap-variables.$btn-border-width;
121
+ height: 100%;
122
+ top: 0;
123
+ left: 0px;
124
+ background: rgba(variables.$white, 0.3);
125
+ }
118
126
 
119
127
  @each $color, $value in functions-variables.$theme-colors {
120
128
  .btn-group-#{$color} > .btn {
@@ -122,13 +130,7 @@
122
130
  // 按钮中间的分割线
123
131
  &:not(:first-child) {
124
132
  &::before {
125
- position: absolute;
126
- content: '';
127
- width: bootstrap-variables.$btn-border-width;
128
- height: 100%;
129
- top: 0;
130
- left: 0px;
131
- background: rgba(variables.$white, 0.3);
133
+ @include btn-group-divider;
132
134
  }
133
135
  }
134
136
  }
@@ -136,13 +138,7 @@
136
138
  .btn-group-#{$color} {
137
139
  .btn:not(:first-child) {
138
140
  &::before {
139
- position: absolute;
140
- content: '';
141
- width: bootstrap-variables.$btn-border-width;
142
- height: 100%;
143
- top: 0;
144
- left: 0px;
145
- background: rgba(variables.$white, 0.3);
141
+ @include btn-group-divider;
146
142
  }
147
143
  }
148
144
  }
@@ -161,6 +157,17 @@
161
157
  }
162
158
  }
163
159
 
160
+ // thyAppearance="fill":实心色按钮组中间分割线
161
+ .btn-group-fill {
162
+ @each $color, $value in functions-variables.$theme-colors {
163
+ > .btn-#{$color}:not(:first-child) {
164
+ &::before {
165
+ @include btn-group-divider;
166
+ }
167
+ }
168
+ }
169
+ }
170
+
164
171
  // The clickable button for toggling the menu
165
172
  // Set the same inset shadow as the :active state
166
173
  .btn-group.show .dropdown-toggle {
@@ -97,7 +97,9 @@ fieldset:disabled a.btn {
97
97
  variables.$gray-200
98
98
  );
99
99
 
100
- &:hover {
100
+ &:hover,
101
+ &:not(:disabled):not(.disabled):active,
102
+ &:not(:disabled):not(.disabled).active {
101
103
  @include shadow.box-shadow(0px 2px 5px 1px variables.$gray-80);
102
104
  }
103
105
  }
@@ -22,7 +22,10 @@
22
22
  color: $color;
23
23
  @include gradients.gradient-bg($background);
24
24
  border-color: $border;
25
- @include hover.hover {
25
+ &:hover,
26
+ &:not(:disabled):not(.disabled):active,
27
+ &:not(:disabled):not(.disabled).active,
28
+ .show > &.dropdown-toggle {
26
29
  color: $hover-color;
27
30
  @include gradients.gradient-bg($hover-background);
28
31
  border-color: $hover-border;
@@ -88,7 +91,9 @@
88
91
  }
89
92
 
90
93
  @mixin button-hover-box-shadow($color) {
91
- &:hover {
94
+ &:hover,
95
+ &:not(:disabled):not(.disabled):active,
96
+ &:not(:disabled):not(.disabled).active {
92
97
  @include shadow.box-shadow(0px 2px 5px 1px rgba($color, 0.6));
93
98
  }
94
99
  }
@@ -6,7 +6,9 @@
6
6
  .btn-default {
7
7
  @include button-variant($gray-700, $gray-700, $gray-200, $gray-200, $gray-200, $gray-200, $gray-200, $gray-200);
8
8
 
9
- &:hover {
9
+ &:hover,
10
+ &:not(:disabled):not(.disabled):active,
11
+ &:not(:disabled):not(.disabled).active {
10
12
  box-shadow: 0px 2px 5px 1px $gray-80;
11
13
  }
12
14
  }
@@ -9,6 +9,11 @@ $cascader-menu-min-width: 122px;
9
9
  &:focus {
10
10
  .form-control-custom:not(.disabled) {
11
11
  border: 1px solid variables.$primary;
12
+
13
+ &.form-control-ghost {
14
+ border-color: transparent;
15
+ background-color: transparent;
16
+ }
12
17
  }
13
18
  }
14
19
 
@@ -16,6 +16,11 @@
16
16
  &:focus {
17
17
  .thy-calendar-picker-input:not(.thy-input-disabled) {
18
18
  border-color: variables.$primary;
19
+
20
+ &.form-control-ghost {
21
+ border-color: transparent;
22
+ background-color: transparent;
23
+ }
19
24
  }
20
25
  }
21
26
  }
@@ -122,6 +122,11 @@
122
122
  cursor: variables.$hand-cursor;
123
123
  .panel-is-opened {
124
124
  border-color: variables.$primary;
125
+
126
+ &.form-control-ghost {
127
+ border-color: transparent;
128
+ background-color: transparent;
129
+ }
125
130
  }
126
131
  .form-control {
127
132
  padding-right: variables.$input-padding-x-md + variables.$font-size-md;
@@ -46,10 +46,19 @@ class ThyAction {
46
46
  this.hostRenderer = useHostRenderer();
47
47
  this.feedbackTimer = null;
48
48
  /**
49
- * 操作图标的类型
49
+ * 操作图标的颜色
50
+ * @type primary | success | danger | warning
51
+ */
52
+ this.thyColor = input(/* @ts-ignore */
53
+ ...(ngDevMode ? [undefined, { debugName: "thyColor" }] : /* istanbul ignore next */ []));
54
+ /**
55
+ * 操作图标的类型(已废弃,将在 v23 彻底删除),请使用 thyColor
56
+ * @deprecated please use thyColor, will be removed in v23
50
57
  * @type primary | success | danger | warning
51
58
  */
52
59
  this.thyType = input('primary', { ...(ngDevMode ? { debugName: "thyType" } : /* istanbul ignore next */ {}), transform: (value) => value || 'primary' });
60
+ this.color = computed(() => this.thyColor() || this.thyType() || 'primary', /* @ts-ignore */
61
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
53
62
  /**
54
63
  * 操作图标,支持传参同时也支持在投影中写 thy-icon 组件
55
64
  */
@@ -135,7 +144,7 @@ class ThyAction {
135
144
  }
136
145
  updateClasses() {
137
146
  const classNames = [];
138
- classNames.push(`action-${this.thyType()}`);
147
+ classNames.push(`action-${this.color()}`);
139
148
  if (this.thyAppearance() === 'lite') {
140
149
  classNames.push('thy-action-lite');
141
150
  }
@@ -145,7 +154,7 @@ class ThyAction {
145
154
  this.feedbackTimer?.unsubscribe();
146
155
  }
147
156
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ThyAction, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ThyAction, isStandalone: true, selector: "thy-action, [thyAction]", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thyIcon: { classPropertyName: "thyIcon", publicName: "thyIcon", isSignal: true, isRequired: false, transformFunction: null }, thyActionIcon: { classPropertyName: "thyActionIcon", publicName: "thyActionIcon", isSignal: true, isRequired: false, transformFunction: null }, thyActive: { classPropertyName: "thyActive", publicName: "thyActive", isSignal: true, isRequired: false, transformFunction: null }, thyActionActive: { classPropertyName: "thyActionActive", publicName: "thyActionActive", isSignal: true, isRequired: false, transformFunction: null }, thyAppearance: { classPropertyName: "thyAppearance", publicName: "thyAppearance", isSignal: true, isRequired: false, transformFunction: null }, thyHoverIcon: { classPropertyName: "thyHoverIcon", publicName: "thyHoverIcon", isSignal: true, isRequired: false, transformFunction: null }, thyDisabled: { classPropertyName: "thyDisabled", publicName: "thyDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.active": "active()", "class.thy-action-hover-icon": "thyHoverIcon()", "class.thy-action-has-feedback": "!!feedback()", "class.disabled": "thyDisabled()" }, classAttribute: "thy-action" }, ngImport: i0, template: "@if (icon() && !feedback()) {\n <thy-icon [thyIconName]=\"icon()\"></thy-icon>\n}\n@if (feedbackOptions()?.icon) {\n <thy-icon [class]=\"feedbackOptions()?.class\" [thyIconName]=\"$safeNavigationMigration(feedbackOptions()?.icon)\"></thy-icon>\n}\n@if (thyHoverIcon()) {\n <thy-icon class=\"hover-icon\" [thyIconName]=\"thyHoverIcon()\"></thy-icon>\n}\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }] }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ThyAction, isStandalone: true, selector: "thy-action, [thyAction]", inputs: { thyColor: { classPropertyName: "thyColor", publicName: "thyColor", isSignal: true, isRequired: false, transformFunction: null }, thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thyIcon: { classPropertyName: "thyIcon", publicName: "thyIcon", isSignal: true, isRequired: false, transformFunction: null }, thyActionIcon: { classPropertyName: "thyActionIcon", publicName: "thyActionIcon", isSignal: true, isRequired: false, transformFunction: null }, thyActive: { classPropertyName: "thyActive", publicName: "thyActive", isSignal: true, isRequired: false, transformFunction: null }, thyActionActive: { classPropertyName: "thyActionActive", publicName: "thyActionActive", isSignal: true, isRequired: false, transformFunction: null }, thyAppearance: { classPropertyName: "thyAppearance", publicName: "thyAppearance", isSignal: true, isRequired: false, transformFunction: null }, thyHoverIcon: { classPropertyName: "thyHoverIcon", publicName: "thyHoverIcon", isSignal: true, isRequired: false, transformFunction: null }, thyDisabled: { classPropertyName: "thyDisabled", publicName: "thyDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.active": "active()", "class.thy-action-hover-icon": "thyHoverIcon()", "class.thy-action-has-feedback": "!!feedback()", "class.disabled": "thyDisabled()" }, classAttribute: "thy-action" }, ngImport: i0, template: "@if (icon() && !feedback()) {\n <thy-icon [thyIconName]=\"icon()\"></thy-icon>\n}\n@if (feedbackOptions()?.icon) {\n <thy-icon [class]=\"feedbackOptions()?.class\" [thyIconName]=\"$safeNavigationMigration(feedbackOptions()?.icon)\"></thy-icon>\n}\n@if (thyHoverIcon()) {\n <thy-icon class=\"hover-icon\" [thyIconName]=\"thyHoverIcon()\"></thy-icon>\n}\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }] }); }
149
158
  }
150
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ThyAction, decorators: [{
151
160
  type: Component,
@@ -156,7 +165,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
156
165
  '[class.thy-action-has-feedback]': '!!feedback()',
157
166
  '[class.disabled]': 'thyDisabled()'
158
167
  }, imports: [ThyIcon], template: "@if (icon() && !feedback()) {\n <thy-icon [thyIconName]=\"icon()\"></thy-icon>\n}\n@if (feedbackOptions()?.icon) {\n <thy-icon [class]=\"feedbackOptions()?.class\" [thyIconName]=\"$safeNavigationMigration(feedbackOptions()?.icon)\"></thy-icon>\n}\n@if (thyHoverIcon()) {\n <thy-icon class=\"hover-icon\" [thyIconName]=\"thyHoverIcon()\"></thy-icon>\n}\n<ng-content></ng-content>\n" }]
159
- }], ctorParameters: () => [], propDecorators: { thyType: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyType", required: false }] }], thyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyIcon", required: false }] }], thyActionIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyActionIcon", required: false }] }], thyActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyActive", required: false }] }], thyActionActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyActionActive", required: false }] }], thyAppearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAppearance", required: false }] }], thyHoverIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyHoverIcon", required: false }] }], thyDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDisabled", required: false }] }] } });
168
+ }], ctorParameters: () => [], propDecorators: { thyColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyColor", required: false }] }], thyType: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyType", required: false }] }], thyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyIcon", required: false }] }], thyActionIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyActionIcon", required: false }] }], thyActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyActive", required: false }] }], thyActionActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyActionActive", required: false }] }], thyAppearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAppearance", required: false }] }], thyHoverIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyHoverIcon", required: false }] }], thyDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDisabled", required: false }] }] } });
160
169
 
161
170
  /**
162
171
  * Actions 组件
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-action.mjs","sources":["../../../src/action/action.component.ts","../../../src/action/action.component.html","../../../src/action/actions.component.ts","../../../src/action/action.module.ts","../../../src/action/ngx-tethys-action.ts"],"sourcesContent":["import {\n AfterViewInit,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n OnInit,\n Renderer2,\n Signal,\n WritableSignal,\n computed,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { Subscription, timer } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport type ThyActionType = 'primary' | 'success' | 'danger' | 'warning';\n\nexport type ThyActionAppearance = 'fill' | 'lite';\n\nexport type ThyActionFeedback = 'success' | 'error';\n\nexport interface ThyActionFeedbackOptions {\n icon?: string;\n class?: string;\n duration?: number;\n}\n\nconst defaultFeedbackOptions: Record<ThyActionFeedback, ThyActionFeedbackOptions> = {\n success: {\n icon: 'check-circle-fill',\n class: 'text-success',\n duration: 3000\n },\n error: {\n icon: 'close-circle-fill',\n class: 'text-danger',\n duration: 3000\n }\n};\n/**\n * 立即操作组件\n * @name thy-action,[thyAction]\n */\n@Component({\n selector: 'thy-action, [thyAction]',\n templateUrl: './action.component.html',\n host: {\n class: 'thy-action',\n '[class.active]': 'active()',\n '[class.thy-action-hover-icon]': 'thyHoverIcon()',\n '[class.thy-action-has-feedback]': '!!feedback()',\n '[class.disabled]': 'thyDisabled()'\n },\n imports: [ThyIcon]\n})\nexport class ThyAction implements OnInit, AfterViewInit, OnDestroy {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private renderer = inject(Renderer2);\n private destroyRef = inject(DestroyRef);\n\n public readonly icon: Signal<string> = computed(() => this.thyActionIcon() || this.thyIcon());\n\n feedback: WritableSignal<ThyActionFeedback | null> = signal(null);\n\n feedbackOptions: WritableSignal<ThyActionFeedbackOptions | null> = signal(null);\n\n readonly active: Signal<boolean> = computed(() => this.thyActionActive() || this.thyActive());\n\n private hostRenderer = useHostRenderer();\n\n private feedbackTimer: Subscription | null = null;\n\n /**\n * 操作图标的类型\n * @type primary | success | danger | warning\n */\n readonly thyType = input<ThyActionType, ThyActionType>('primary', {\n transform: (value: ThyActionType) => value || 'primary'\n });\n\n /**\n * 操作图标,支持传参同时也支持在投影中写 thy-icon 组件\n */\n readonly thyIcon = input<string>('');\n\n /**\n * 操作图标,当 thyIcon 和其他指令参数名有冲突时使用 thyActionIcon\n */\n readonly thyActionIcon = input<string>('');\n\n /**\n * 操作的图标 Active 状态,设置为 true 时会在 Item 上添加 active class\n */\n readonly thyActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 操作的图标 Active 状态,当 thyActive 和其他指令参数名有冲突时使用 thyActionActive\n */\n readonly thyActionActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 操作图标的外观,fill(背景色填充) | lite(简单文本颜色变化)\n * @type fill | lite\n * @default fill\n */\n readonly thyAppearance = input<ThyActionAppearance>('fill');\n\n /**\n * Hover 展示的图标\n */\n readonly thyHoverIcon = input<string>();\n\n /**\n * 是否处于禁用状态\n */\n readonly thyDisabled = input(false, { transform: coerceBooleanProperty });\n\n ngOnInit(): void {\n this.updateClasses();\n }\n\n ngAfterViewInit() {\n this.wrapSpanForText(this.elementRef.nativeElement.childNodes);\n }\n\n constructor() {\n effect(() => {\n this.updateClasses();\n });\n }\n\n setMarginRight(marginRight: string) {\n this.elementRef.nativeElement.style.marginRight = marginRight;\n }\n\n /**\n * 触发成功反馈操作\n */\n success(options?: ThyActionFeedbackOptions) {\n this.setFeedback('success', options);\n }\n\n /**\n * 触发失败反馈操作\n */\n error(options?: ThyActionFeedbackOptions) {\n this.setFeedback('error', options);\n }\n\n private setFeedback(feedback: ThyActionFeedback, options: ThyActionFeedbackOptions | undefined) {\n if (this.thyDisabled()) {\n return;\n }\n options = Object.assign({}, defaultFeedbackOptions[feedback], options);\n this.feedback.set(feedback);\n this.feedbackOptions.set(options);\n\n if (options.duration) {\n if (this.feedbackTimer) {\n this.feedbackTimer.unsubscribe();\n }\n this.feedbackTimer = timer(options.duration)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.feedback.set(null);\n this.feedbackOptions.set(null);\n });\n }\n }\n\n private wrapSpanForText(nodes: NodeList): void {\n nodes.forEach(node => {\n if (node.nodeName === '#text') {\n const span = this.renderer.createElement('span');\n const parent = this.renderer.parentNode(node);\n // this.renderer.addClass(span, 'thy-action-wrap-span');\n this.renderer.insertBefore(parent, span, node);\n this.renderer.appendChild(span, node);\n }\n });\n }\n\n private updateClasses() {\n const classNames: string[] = [];\n classNames.push(`action-${this.thyType()}`);\n if (this.thyAppearance() === 'lite') {\n classNames.push('thy-action-lite');\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n ngOnDestroy(): void {\n this.feedbackTimer?.unsubscribe();\n }\n}\n","@if (icon() && !feedback()) {\n <thy-icon [thyIconName]=\"icon()\"></thy-icon>\n}\n@if (feedbackOptions()?.icon) {\n <thy-icon [class]=\"feedbackOptions()?.class\" [thyIconName]=\"$safeNavigationMigration(feedbackOptions()?.icon)\"></thy-icon>\n}\n@if (thyHoverIcon()) {\n <thy-icon class=\"hover-icon\" [thyIconName]=\"thyHoverIcon()\"></thy-icon>\n}\n<ng-content></ng-content>\n","import { Component, OnInit, contentChildren, effect, input } from '@angular/core';\nimport { ThySpacingSize, getNumericSize } from 'ngx-tethys/core';\nimport { ThyAction } from './action.component';\n\n/**\n * Actions 组件\n * @name thy-actions\n */\n@Component({\n selector: 'thy-actions',\n template: ` <ng-content></ng-content> `,\n host: {\n class: 'thy-actions'\n }\n})\nexport class ThyActions implements OnInit {\n readonly actions = contentChildren<ThyAction>(ThyAction);\n\n /**\n * 大小,支持 `zero` | `xxs` | `xs` | `sm` | `md` | `lg` | `xlg` 和自定义数字大小\n * @type string | number\n */\n readonly thySize = input<ThySpacingSize>('md');\n\n constructor() {\n effect(() => {\n this.setActionsSize();\n });\n }\n\n ngOnInit(): void {}\n\n private setActionsSize() {\n const actions: ThyAction[] = Array.from(this.actions());\n actions.forEach((action: ThyAction, index) => {\n // can't set marginRight value for last item\n if (index !== actions.length - 1) {\n action.setMarginRight(`${getNumericSize(this.thySize(), 'md')}px`);\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyAction } from './action.component';\nimport { ThyActions } from './actions.component';\n\n@NgModule({\n imports: [CommonModule, ThyIconModule, ThyAction, ThyActions],\n exports: [ThyAction, ThyActions]\n})\nexport class ThyActionModule {}\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-action.mjs","sources":["../../../src/action/action.component.ts","../../../src/action/action.component.html","../../../src/action/actions.component.ts","../../../src/action/action.module.ts","../../../src/action/ngx-tethys-action.ts"],"sourcesContent":["import {\n AfterViewInit,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n OnInit,\n Renderer2,\n Signal,\n WritableSignal,\n computed,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { Subscription, timer } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport type ThyActionColor = 'primary' | 'success' | 'danger' | 'warning';\n\n/** @deprecated use ThyActionColor, will be removed in v23 */\nexport type ThyActionType = ThyActionColor;\n\nexport type ThyActionAppearance = 'fill' | 'lite';\n\nexport type ThyActionFeedback = 'success' | 'error';\n\nexport interface ThyActionFeedbackOptions {\n icon?: string;\n class?: string;\n duration?: number;\n}\n\nconst defaultFeedbackOptions: Record<ThyActionFeedback, ThyActionFeedbackOptions> = {\n success: {\n icon: 'check-circle-fill',\n class: 'text-success',\n duration: 3000\n },\n error: {\n icon: 'close-circle-fill',\n class: 'text-danger',\n duration: 3000\n }\n};\n/**\n * 立即操作组件\n * @name thy-action,[thyAction]\n */\n@Component({\n selector: 'thy-action, [thyAction]',\n templateUrl: './action.component.html',\n host: {\n class: 'thy-action',\n '[class.active]': 'active()',\n '[class.thy-action-hover-icon]': 'thyHoverIcon()',\n '[class.thy-action-has-feedback]': '!!feedback()',\n '[class.disabled]': 'thyDisabled()'\n },\n imports: [ThyIcon]\n})\nexport class ThyAction implements OnInit, AfterViewInit, OnDestroy {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private renderer = inject(Renderer2);\n private destroyRef = inject(DestroyRef);\n\n public readonly icon: Signal<string> = computed(() => this.thyActionIcon() || this.thyIcon());\n\n feedback: WritableSignal<ThyActionFeedback | null> = signal(null);\n\n feedbackOptions: WritableSignal<ThyActionFeedbackOptions | null> = signal(null);\n\n readonly active: Signal<boolean> = computed(() => this.thyActionActive() || this.thyActive());\n\n private hostRenderer = useHostRenderer();\n\n private feedbackTimer: Subscription | null = null;\n\n /**\n * 操作图标的颜色\n * @type primary | success | danger | warning\n */\n readonly thyColor = input<ThyActionColor>();\n\n /**\n * 操作图标的类型(已废弃,将在 v23 彻底删除),请使用 thyColor\n * @deprecated please use thyColor, will be removed in v23\n * @type primary | success | danger | warning\n */\n readonly thyType = input<ThyActionType, ThyActionType>('primary', {\n transform: (value: ThyActionType) => value || 'primary'\n });\n\n readonly color = computed(() => this.thyColor() || this.thyType() || 'primary');\n\n /**\n * 操作图标,支持传参同时也支持在投影中写 thy-icon 组件\n */\n readonly thyIcon = input<string>('');\n\n /**\n * 操作图标,当 thyIcon 和其他指令参数名有冲突时使用 thyActionIcon\n */\n readonly thyActionIcon = input<string>('');\n\n /**\n * 操作的图标 Active 状态,设置为 true 时会在 Item 上添加 active class\n */\n readonly thyActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 操作的图标 Active 状态,当 thyActive 和其他指令参数名有冲突时使用 thyActionActive\n */\n readonly thyActionActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 操作图标的外观,fill(背景色填充) | lite(简单文本颜色变化)\n * @type fill | lite\n * @default fill\n */\n readonly thyAppearance = input<ThyActionAppearance>('fill');\n\n /**\n * Hover 展示的图标\n */\n readonly thyHoverIcon = input<string>();\n\n /**\n * 是否处于禁用状态\n */\n readonly thyDisabled = input(false, { transform: coerceBooleanProperty });\n\n ngOnInit(): void {\n this.updateClasses();\n }\n\n ngAfterViewInit() {\n this.wrapSpanForText(this.elementRef.nativeElement.childNodes);\n }\n\n constructor() {\n effect(() => {\n this.updateClasses();\n });\n }\n\n setMarginRight(marginRight: string) {\n this.elementRef.nativeElement.style.marginRight = marginRight;\n }\n\n /**\n * 触发成功反馈操作\n */\n success(options?: ThyActionFeedbackOptions) {\n this.setFeedback('success', options);\n }\n\n /**\n * 触发失败反馈操作\n */\n error(options?: ThyActionFeedbackOptions) {\n this.setFeedback('error', options);\n }\n\n private setFeedback(feedback: ThyActionFeedback, options: ThyActionFeedbackOptions | undefined) {\n if (this.thyDisabled()) {\n return;\n }\n options = Object.assign({}, defaultFeedbackOptions[feedback], options);\n this.feedback.set(feedback);\n this.feedbackOptions.set(options);\n\n if (options.duration) {\n if (this.feedbackTimer) {\n this.feedbackTimer.unsubscribe();\n }\n this.feedbackTimer = timer(options.duration)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.feedback.set(null);\n this.feedbackOptions.set(null);\n });\n }\n }\n\n private wrapSpanForText(nodes: NodeList): void {\n nodes.forEach(node => {\n if (node.nodeName === '#text') {\n const span = this.renderer.createElement('span');\n const parent = this.renderer.parentNode(node);\n // this.renderer.addClass(span, 'thy-action-wrap-span');\n this.renderer.insertBefore(parent, span, node);\n this.renderer.appendChild(span, node);\n }\n });\n }\n\n private updateClasses() {\n const classNames: string[] = [];\n classNames.push(`action-${this.color()}`);\n if (this.thyAppearance() === 'lite') {\n classNames.push('thy-action-lite');\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n ngOnDestroy(): void {\n this.feedbackTimer?.unsubscribe();\n }\n}\n","@if (icon() && !feedback()) {\n <thy-icon [thyIconName]=\"icon()\"></thy-icon>\n}\n@if (feedbackOptions()?.icon) {\n <thy-icon [class]=\"feedbackOptions()?.class\" [thyIconName]=\"$safeNavigationMigration(feedbackOptions()?.icon)\"></thy-icon>\n}\n@if (thyHoverIcon()) {\n <thy-icon class=\"hover-icon\" [thyIconName]=\"thyHoverIcon()\"></thy-icon>\n}\n<ng-content></ng-content>\n","import { Component, OnInit, contentChildren, effect, input } from '@angular/core';\nimport { ThySpacingSize, getNumericSize } from 'ngx-tethys/core';\nimport { ThyAction } from './action.component';\n\n/**\n * Actions 组件\n * @name thy-actions\n */\n@Component({\n selector: 'thy-actions',\n template: ` <ng-content></ng-content> `,\n host: {\n class: 'thy-actions'\n }\n})\nexport class ThyActions implements OnInit {\n readonly actions = contentChildren<ThyAction>(ThyAction);\n\n /**\n * 大小,支持 `zero` | `xxs` | `xs` | `sm` | `md` | `lg` | `xlg` 和自定义数字大小\n * @type string | number\n */\n readonly thySize = input<ThySpacingSize>('md');\n\n constructor() {\n effect(() => {\n this.setActionsSize();\n });\n }\n\n ngOnInit(): void {}\n\n private setActionsSize() {\n const actions: ThyAction[] = Array.from(this.actions());\n actions.forEach((action: ThyAction, index) => {\n // can't set marginRight value for last item\n if (index !== actions.length - 1) {\n action.setMarginRight(`${getNumericSize(this.thySize(), 'md')}px`);\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyAction } from './action.component';\nimport { ThyActions } from './actions.component';\n\n@NgModule({\n imports: [CommonModule, ThyIconModule, ThyAction, ThyActions],\n exports: [ThyAction, ThyActions]\n})\nexport class ThyActionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -32,19 +32,39 @@ class ThyAlert {
32
32
  }, /* @ts-ignore */
33
33
  ...(ngDevMode ? [{ debugName: "messageIsTemplate" }] : /* istanbul ignore next */ []));
34
34
  /**
35
- * 指定警告提示的类型
35
+ * 指定警告提示的颜色
36
+ * @type success | warning | danger | info | primary | primary-weak | success-weak | warning-weak | danger-weak
37
+ * @default info
38
+ */
39
+ this.thyColor = input(/* @ts-ignore */
40
+ ...(ngDevMode ? [undefined, { debugName: "thyColor" }] : /* istanbul ignore next */ []));
41
+ /**
42
+ * 指定警告提示的外观
43
+ * @type fill | bordered | naked
44
+ * @default fill
45
+ */
46
+ this.thyAppearance = input(/* @ts-ignore */
47
+ ...(ngDevMode ? [undefined, { debugName: "thyAppearance" }] : /* istanbul ignore next */ []));
48
+ /**
49
+ * 指定警告提示的类型(已废弃),请使用 thyColor
50
+ * @deprecated please use thyColor
36
51
  * @type success | warning | danger | info | primary | primary-weak | success-weak | warning-weak | danger-weak
37
52
  * @default info
38
53
  */
39
54
  this.thyType = input('info', /* @ts-ignore */
40
55
  ...(ngDevMode ? [{ debugName: "thyType" }] : /* istanbul ignore next */ []));
41
56
  /**
42
- * 指定警告提示的主题
57
+ * 指定警告提示的主题(已废弃,将在 v23 彻底移除),请使用 thyAppearance
58
+ * @deprecated please use thyAppearance, will be removed in v23
43
59
  * @type fill | bordered | naked
44
60
  * @default fill
45
61
  */
46
62
  this.thyTheme = input('fill', /* @ts-ignore */
47
63
  ...(ngDevMode ? [{ debugName: "thyTheme" }] : /* istanbul ignore next */ []));
64
+ this.color = computed(() => this.thyColor() || this.thyType() || 'info', /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
66
+ this.appearance = computed(() => this.thyAppearance() || this.thyTheme() || 'fill', /* @ts-ignore */
67
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
48
68
  /**
49
69
  * 显示警告提示的内容
50
70
  */
@@ -57,11 +77,12 @@ class ThyAlert {
57
77
  ...(ngDevMode ? [undefined, { debugName: "thyIcon" }] : /* istanbul ignore next */ []));
58
78
  this.icon = computed(() => {
59
79
  const icon = this.thyIcon();
80
+ const color = this.color();
60
81
  if (icon) {
61
- return isString(icon) ? icon : typeIconsMap[this.thyType()];
82
+ return isString(icon) ? icon : typeIconsMap[color];
62
83
  }
63
84
  else {
64
- return icon === 'false' || icon === false ? '' : typeIconsMap[this.thyType()];
85
+ return icon === 'false' || icon === false ? '' : typeIconsMap[color];
65
86
  }
66
87
  }, /* @ts-ignore */
67
88
  ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
@@ -85,24 +106,24 @@ class ThyAlert {
85
106
  }
86
107
  updateClass() {
87
108
  // 兼容 'primary-weak', 'success-weak', 'warning-weak', 'danger-weak' types
88
- let theme = this.thyTheme();
89
- let type = this.thyType();
90
- if (weakTypes.includes(type)) {
91
- theme = 'bordered';
92
- type = type.split('-')[0];
109
+ let appearance = this.appearance();
110
+ let color = this.color();
111
+ if (weakTypes.includes(color)) {
112
+ appearance = 'bordered';
113
+ color = color.split('-')[0];
93
114
  }
94
- this.hostRenderer.updateClass([`thy-alert-${theme}`, `thy-alert-${theme}-${type}`]);
115
+ this.hostRenderer.updateClass([`thy-alert-${appearance}`, `thy-alert-${appearance}-${color}`]);
95
116
  }
96
117
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ThyAlert, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ThyAlert, isStandalone: true, selector: "thy-alert", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thyTheme: { classPropertyName: "thyTheme", publicName: "thyTheme", isSignal: true, isRequired: false, transformFunction: null }, thyMessage: { classPropertyName: "thyMessage", publicName: "thyMessage", isSignal: true, isRequired: false, transformFunction: null }, thyIcon: { classPropertyName: "thyIcon", publicName: "thyIcon", isSignal: true, isRequired: false, transformFunction: null }, thyCloseable: { classPropertyName: "thyCloseable", publicName: "thyCloseable", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-alert-hidden": "hidden" }, classAttribute: "thy-alert" }, queries: [{ propertyName: "alertOperation", first: true, predicate: ["operation"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"thy-alert-content\">\n @if (icon()) {\n <thy-icon class=\"thy-alert-icon\" [thyIconName]=\"icon()\"></thy-icon>\n }\n @if (thyTheme() === 'naked') {\n <span class=\"thy-alert-tips\">Tips\uFF1A </span>\n }\n @if (messageIsTemplate()) {\n <ng-template *ngTemplateOutlet=\"thyMessage()\"></ng-template>\n } @else if (thyMessage()) {\n <span>{{ thyMessage() }}</span>\n }\n @if (alertOperation()) {\n <div class=\"thy-alert-operation\">\n <ng-container [ngTemplateOutlet]=\"alertOperation()\"></ng-container>\n </div>\n }\n</div>\n@if (thyCloseable()) {\n <a href=\"javascript:;\" class=\"thy-alert-close\" (click)=\"closeAlert()\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ThyAlert, isStandalone: true, selector: "thy-alert", inputs: { thyColor: { classPropertyName: "thyColor", publicName: "thyColor", isSignal: true, isRequired: false, transformFunction: null }, thyAppearance: { classPropertyName: "thyAppearance", publicName: "thyAppearance", isSignal: true, isRequired: false, transformFunction: null }, thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thyTheme: { classPropertyName: "thyTheme", publicName: "thyTheme", isSignal: true, isRequired: false, transformFunction: null }, thyMessage: { classPropertyName: "thyMessage", publicName: "thyMessage", isSignal: true, isRequired: false, transformFunction: null }, thyIcon: { classPropertyName: "thyIcon", publicName: "thyIcon", isSignal: true, isRequired: false, transformFunction: null }, thyCloseable: { classPropertyName: "thyCloseable", publicName: "thyCloseable", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-alert-hidden": "hidden" }, classAttribute: "thy-alert" }, queries: [{ propertyName: "alertOperation", first: true, predicate: ["operation"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"thy-alert-content\">\n @if (icon()) {\n <thy-icon class=\"thy-alert-icon\" [thyIconName]=\"icon()\"></thy-icon>\n }\n @if (appearance() === 'naked') {\n <span class=\"thy-alert-tips\">Tips\uFF1A </span>\n }\n @if (messageIsTemplate()) {\n <ng-template *ngTemplateOutlet=\"thyMessage()\"></ng-template>\n } @else if (thyMessage()) {\n <span>{{ thyMessage() }}</span>\n }\n @if (alertOperation()) {\n <div class=\"thy-alert-operation\">\n <ng-container [ngTemplateOutlet]=\"alertOperation()\"></ng-container>\n </div>\n }\n</div>\n@if (thyCloseable()) {\n <a href=\"javascript:;\" class=\"thy-alert-close\" (click)=\"closeAlert()\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
98
119
  }
99
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ThyAlert, decorators: [{
100
121
  type: Component,
101
122
  args: [{ selector: 'thy-alert', host: {
102
123
  class: 'thy-alert',
103
124
  '[class.thy-alert-hidden]': 'hidden'
104
- }, imports: [ThyIcon, NgTemplateOutlet], template: "<div class=\"thy-alert-content\">\n @if (icon()) {\n <thy-icon class=\"thy-alert-icon\" [thyIconName]=\"icon()\"></thy-icon>\n }\n @if (thyTheme() === 'naked') {\n <span class=\"thy-alert-tips\">Tips\uFF1A </span>\n }\n @if (messageIsTemplate()) {\n <ng-template *ngTemplateOutlet=\"thyMessage()\"></ng-template>\n } @else if (thyMessage()) {\n <span>{{ thyMessage() }}</span>\n }\n @if (alertOperation()) {\n <div class=\"thy-alert-operation\">\n <ng-container [ngTemplateOutlet]=\"alertOperation()\"></ng-container>\n </div>\n }\n</div>\n@if (thyCloseable()) {\n <a href=\"javascript:;\" class=\"thy-alert-close\" (click)=\"closeAlert()\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n" }]
105
- }], ctorParameters: () => [], propDecorators: { thyType: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyType", required: false }] }], thyTheme: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyTheme", required: false }] }], thyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyMessage", required: false }] }], thyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyIcon", required: false }] }], thyCloseable: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyCloseable", required: false }] }], alertOperation: [{ type: i0.ContentChild, args: ['operation', { isSignal: true }] }] } });
125
+ }, imports: [ThyIcon, NgTemplateOutlet], template: "<div class=\"thy-alert-content\">\n @if (icon()) {\n <thy-icon class=\"thy-alert-icon\" [thyIconName]=\"icon()\"></thy-icon>\n }\n @if (appearance() === 'naked') {\n <span class=\"thy-alert-tips\">Tips\uFF1A </span>\n }\n @if (messageIsTemplate()) {\n <ng-template *ngTemplateOutlet=\"thyMessage()\"></ng-template>\n } @else if (thyMessage()) {\n <span>{{ thyMessage() }}</span>\n }\n @if (alertOperation()) {\n <div class=\"thy-alert-operation\">\n <ng-container [ngTemplateOutlet]=\"alertOperation()\"></ng-container>\n </div>\n }\n</div>\n@if (thyCloseable()) {\n <a href=\"javascript:;\" class=\"thy-alert-close\" (click)=\"closeAlert()\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n" }]
126
+ }], ctorParameters: () => [], propDecorators: { thyColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyColor", required: false }] }], thyAppearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyAppearance", required: false }] }], thyType: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyType", required: false }] }], thyTheme: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyTheme", required: false }] }], thyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyMessage", required: false }] }], thyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyIcon", required: false }] }], thyCloseable: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyCloseable", required: false }] }], alertOperation: [{ type: i0.ContentChild, args: ['operation', { isSignal: true }] }] } });
106
127
 
107
128
  /**
108
129
  * 操作按钮的样式指令,可为警告内容添加自定义操作按钮样式
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-alert.mjs","sources":["../../../src/alert/alert.component.ts","../../../src/alert/alert.component.html","../../../src/alert/alert.directive.ts","../../../src/alert/alert.module.ts","../../../src/alert/ngx-tethys-alert.ts"],"sourcesContent":["import { Component, TemplateRef, input, contentChild, effect, computed } from '@angular/core';\nimport { coerceBooleanProperty, isString } from 'ngx-tethys/util';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgTemplateOutlet } from '@angular/common';\n\nconst weakTypes = ['primary-weak', 'success-weak', 'warning-weak', 'danger-weak'];\n\ntype ThyAlertType =\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'primary'\n | 'primary-weak'\n | 'success-weak'\n | 'warning-weak'\n | 'danger-weak';\n\nexport type ThyAlertTheme = 'fill' | 'bordered' | 'naked';\n\nconst typeIconsMap: Record<string, string> = {\n success: 'check-circle-fill',\n warning: 'waring-fill',\n danger: 'close-circle-fill',\n info: 'minus-circle-fill',\n primary: 'info-circle-fill',\n 'primary-weak': 'info-circle-fill',\n 'success-weak': 'check-circle-fill',\n 'warning-weak': 'waring-fill',\n 'danger-weak': 'close-circle-fill'\n};\n\n/**\n * 警告提示,展现需要关注的信息\n * @name thy-alert\n * @order 10\n */\n@Component({\n selector: 'thy-alert',\n templateUrl: './alert.component.html',\n host: {\n class: 'thy-alert',\n '[class.thy-alert-hidden]': 'hidden'\n },\n imports: [ThyIcon, NgTemplateOutlet]\n})\nexport class ThyAlert {\n protected hidden = false;\n\n private hostRenderer = useHostRenderer();\n\n messageIsTemplate = computed(() => {\n const value = this.thyMessage();\n return value instanceof TemplateRef;\n });\n\n /**\n * 指定警告提示的类型\n * @type success | warning | danger | info | primary | primary-weak | success-weak | warning-weak | danger-weak\n * @default info\n */\n thyType = input<ThyAlertType>('info');\n\n /**\n * 指定警告提示的主题\n * @type fill | bordered | naked\n * @default fill\n */\n thyTheme = input<ThyAlertTheme>('fill');\n\n /**\n * 显示警告提示的内容\n */\n thyMessage = input<string | TemplateRef<HTMLElement>>();\n\n /**\n * 显示自定义图标,可传 true/false 控制是否显示图标,或者传字符串去指定图标名称\n */\n thyIcon = input<boolean | string>();\n\n icon = computed(() => {\n const icon = this.thyIcon();\n if (icon) {\n return isString(icon) ? icon : typeIconsMap[this.thyType()];\n } else {\n return icon === 'false' || icon === false ? '' : typeIconsMap[this.thyType()];\n }\n });\n\n /**\n * 是否显示关闭警告框按钮,默认不显示\n * @default false\n */\n thyCloseable = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 警告框自定义操作\n * @type TemplateRef\n */\n alertOperation = contentChild<TemplateRef<any>>('operation');\n\n constructor() {\n effect(() => {\n this.updateClass();\n });\n }\n\n closeAlert() {\n this.hidden = true;\n }\n\n private updateClass() {\n // 兼容 'primary-weak', 'success-weak', 'warning-weak', 'danger-weak' types\n let theme = this.thyTheme();\n let type = this.thyType();\n if (weakTypes.includes(type)) {\n theme = 'bordered';\n type = type.split('-')[0] as ThyAlertType;\n }\n this.hostRenderer.updateClass([`thy-alert-${theme}`, `thy-alert-${theme}-${type}`]);\n }\n}\n","<div class=\"thy-alert-content\">\n @if (icon()) {\n <thy-icon class=\"thy-alert-icon\" [thyIconName]=\"icon()\"></thy-icon>\n }\n @if (thyTheme() === 'naked') {\n <span class=\"thy-alert-tips\">Tips: </span>\n }\n @if (messageIsTemplate()) {\n <ng-template *ngTemplateOutlet=\"thyMessage()\"></ng-template>\n } @else if (thyMessage()) {\n <span>{{ thyMessage() }}</span>\n }\n @if (alertOperation()) {\n <div class=\"thy-alert-operation\">\n <ng-container [ngTemplateOutlet]=\"alertOperation()\"></ng-container>\n </div>\n }\n</div>\n@if (thyCloseable()) {\n <a href=\"javascript:;\" class=\"thy-alert-close\" (click)=\"closeAlert()\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n/**\n * 操作按钮的样式指令,可为警告内容添加自定义操作按钮样式\n * @name thyAlertActionItem\n * @order 20\n */\n@Directive({\n selector: '[thyAlertActionItem]'\n})\nexport class ThyAlertActionItemDirective {\n @HostBinding('class.thy-alert-action') class = true;\n\n constructor() {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyAlert } from './alert.component';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyAlertActionItemDirective } from './alert.directive';\n\n@NgModule({\n imports: [CommonModule, ThyIconModule, ThyAlert, ThyAlertActionItemDirective],\n exports: [ThyAlert, ThyAlertActionItemDirective]\n})\nexport class ThyAlertModule {}\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-alert.mjs","sources":["../../../src/alert/alert.component.ts","../../../src/alert/alert.component.html","../../../src/alert/alert.directive.ts","../../../src/alert/alert.module.ts","../../../src/alert/ngx-tethys-alert.ts"],"sourcesContent":["import { Component, TemplateRef, input, contentChild, effect, computed } from '@angular/core';\nimport { coerceBooleanProperty, isString } from 'ngx-tethys/util';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgTemplateOutlet } from '@angular/common';\n\nconst weakTypes = ['primary-weak', 'success-weak', 'warning-weak', 'danger-weak'];\n\nexport type ThyAlertColor =\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'primary'\n | 'primary-weak'\n | 'success-weak'\n | 'warning-weak'\n | 'danger-weak';\n\nexport type ThyAlertAppearance = 'fill' | 'bordered' | 'naked';\n\n/** @deprecated use ThyAlertAppearance */\nexport type ThyAlertTheme = ThyAlertAppearance;\n\n/** @deprecated use ThyAlertColor */\nexport type ThyAlertType = ThyAlertColor;\n\nconst typeIconsMap: Record<string, string> = {\n success: 'check-circle-fill',\n warning: 'waring-fill',\n danger: 'close-circle-fill',\n info: 'minus-circle-fill',\n primary: 'info-circle-fill',\n 'primary-weak': 'info-circle-fill',\n 'success-weak': 'check-circle-fill',\n 'warning-weak': 'waring-fill',\n 'danger-weak': 'close-circle-fill'\n};\n\n/**\n * 警告提示,展现需要关注的信息\n * @name thy-alert\n * @order 10\n */\n@Component({\n selector: 'thy-alert',\n templateUrl: './alert.component.html',\n host: {\n class: 'thy-alert',\n '[class.thy-alert-hidden]': 'hidden'\n },\n imports: [ThyIcon, NgTemplateOutlet]\n})\nexport class ThyAlert {\n protected hidden = false;\n\n private hostRenderer = useHostRenderer();\n\n messageIsTemplate = computed(() => {\n const value = this.thyMessage();\n return value instanceof TemplateRef;\n });\n\n /**\n * 指定警告提示的颜色\n * @type success | warning | danger | info | primary | primary-weak | success-weak | warning-weak | danger-weak\n * @default info\n */\n readonly thyColor = input<ThyAlertColor>();\n\n /**\n * 指定警告提示的外观\n * @type fill | bordered | naked\n * @default fill\n */\n readonly thyAppearance = input<ThyAlertAppearance>();\n\n /**\n * 指定警告提示的类型(已废弃),请使用 thyColor\n * @deprecated please use thyColor\n * @type success | warning | danger | info | primary | primary-weak | success-weak | warning-weak | danger-weak\n * @default info\n */\n readonly thyType = input<ThyAlertType>('info');\n\n /**\n * 指定警告提示的主题(已废弃,将在 v23 彻底移除),请使用 thyAppearance\n * @deprecated please use thyAppearance, will be removed in v23\n * @type fill | bordered | naked\n * @default fill\n */\n readonly thyTheme = input<ThyAlertTheme>('fill');\n\n readonly color = computed(() => this.thyColor() || this.thyType() || 'info');\n\n readonly appearance = computed(() => this.thyAppearance() || this.thyTheme() || 'fill');\n\n /**\n * 显示警告提示的内容\n */\n thyMessage = input<string | TemplateRef<HTMLElement>>();\n\n /**\n * 显示自定义图标,可传 true/false 控制是否显示图标,或者传字符串去指定图标名称\n */\n thyIcon = input<boolean | string>();\n\n icon = computed(() => {\n const icon = this.thyIcon();\n const color = this.color();\n if (icon) {\n return isString(icon) ? icon : typeIconsMap[color];\n } else {\n return icon === 'false' || icon === false ? '' : typeIconsMap[color];\n }\n });\n\n /**\n * 是否显示关闭警告框按钮,默认不显示\n * @default false\n */\n thyCloseable = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 警告框自定义操作\n * @type TemplateRef\n */\n alertOperation = contentChild<TemplateRef<any>>('operation');\n\n constructor() {\n effect(() => {\n this.updateClass();\n });\n }\n\n closeAlert() {\n this.hidden = true;\n }\n\n private updateClass() {\n // 兼容 'primary-weak', 'success-weak', 'warning-weak', 'danger-weak' types\n let appearance = this.appearance();\n let color = this.color();\n if (weakTypes.includes(color)) {\n appearance = 'bordered';\n color = color.split('-')[0] as ThyAlertColor;\n }\n this.hostRenderer.updateClass([`thy-alert-${appearance}`, `thy-alert-${appearance}-${color}`]);\n }\n}\n","<div class=\"thy-alert-content\">\n @if (icon()) {\n <thy-icon class=\"thy-alert-icon\" [thyIconName]=\"icon()\"></thy-icon>\n }\n @if (appearance() === 'naked') {\n <span class=\"thy-alert-tips\">Tips: </span>\n }\n @if (messageIsTemplate()) {\n <ng-template *ngTemplateOutlet=\"thyMessage()\"></ng-template>\n } @else if (thyMessage()) {\n <span>{{ thyMessage() }}</span>\n }\n @if (alertOperation()) {\n <div class=\"thy-alert-operation\">\n <ng-container [ngTemplateOutlet]=\"alertOperation()\"></ng-container>\n </div>\n }\n</div>\n@if (thyCloseable()) {\n <a href=\"javascript:;\" class=\"thy-alert-close\" (click)=\"closeAlert()\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n/**\n * 操作按钮的样式指令,可为警告内容添加自定义操作按钮样式\n * @name thyAlertActionItem\n * @order 20\n */\n@Directive({\n selector: '[thyAlertActionItem]'\n})\nexport class ThyAlertActionItemDirective {\n @HostBinding('class.thy-alert-action') class = true;\n\n constructor() {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyAlert } from './alert.component';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyAlertActionItemDirective } from './alert.directive';\n\n@NgModule({\n imports: [CommonModule, ThyIconModule, ThyAlert, ThyAlertActionItemDirective],\n exports: [ThyAlert, ThyAlertActionItemDirective]\n})\nexport class ThyAlertModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}