@taiga-ui/core 4.52.0-canary.ece97e9 → 4.52.0-canary.efbd0d4

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 (306) hide show
  1. package/README.md +1 -1
  2. package/classes/accessors.d.ts +2 -2
  3. package/components/calendar/calendar-sheet.component.d.ts +1 -1
  4. package/components/calendar/calendar-sheet.options.d.ts +1 -3
  5. package/{pipes/calendar-sheet → components/calendar}/calendar-sheet.pipe.d.ts +2 -2
  6. package/components/calendar/calendar-spin.component.d.ts +1 -0
  7. package/components/calendar/calendar-year.component.d.ts +1 -1
  8. package/components/calendar/calendar.options.d.ts +9 -0
  9. package/components/calendar/index.d.ts +3 -0
  10. package/{pipes/order-week-days → components/calendar}/order-week-days.pipe.d.ts +1 -1
  11. package/components/data-list/data-list.component.d.ts +7 -11
  12. package/components/data-list/data-list.d.ts +3 -4
  13. package/components/data-list/data-list.tokens.d.ts +1 -23
  14. package/components/data-list/index.d.ts +3 -4
  15. package/components/data-list/opt-group.directive.d.ts +2 -2
  16. package/components/data-list/option-content.directive.d.ts +14 -0
  17. package/components/data-list/option-with-value.directive.d.ts +9 -0
  18. package/components/data-list/option.directive.d.ts +19 -0
  19. package/components/icon/icon.component.d.ts +2 -2
  20. package/components/index.d.ts +2 -4
  21. package/components/input/index.d.ts +2 -0
  22. package/components/input/input.d.ts +5 -0
  23. package/components/input/input.directive.d.ts +29 -0
  24. package/components/label/label.directive.d.ts +1 -1
  25. package/components/link/index.d.ts +0 -1
  26. package/components/link/link.directive.d.ts +8 -6
  27. package/components/loader/loader.options.d.ts +1 -3
  28. package/components/notification/index.d.ts +3 -0
  29. package/components/notification/notification.component.d.ts +14 -0
  30. package/components/notification/notification.d.ts +3 -0
  31. package/components/notification/notification.directive.d.ts +4 -5
  32. package/components/notification/notification.options.d.ts +10 -7
  33. package/components/notification/notification.service.d.ts +17 -0
  34. package/components/root/root.component.d.ts +1 -1
  35. package/components/scrollbar/scroll-ref.directive.d.ts +2 -0
  36. package/components/scrollbar/scrollbar.component.d.ts +1 -5
  37. package/components/spin-button/spin-button.component.d.ts +1 -1
  38. package/components/textfield/index.d.ts +0 -1
  39. package/components/textfield/textfield-multi/textfield-item.component.d.ts +3 -2
  40. package/components/textfield/textfield-multi/textfield-multi.component.d.ts +8 -13
  41. package/components/textfield/textfield.component.d.ts +20 -32
  42. package/components/textfield/textfield.d.ts +2 -3
  43. package/directives/date-format/date-format.directive.d.ts +3 -7
  44. package/directives/group/group.directive.d.ts +7 -7
  45. package/directives/group/group.options.d.ts +1 -3
  46. package/directives/index.d.ts +0 -5
  47. package/directives/items-handlers/items-handlers.directive.d.ts +5 -9
  48. package/directives/items-handlers/items-handlers.tokens.d.ts +4 -4
  49. package/directives/number-format/number-format.directive.d.ts +3 -7
  50. package/fesm2022/taiga-ui-core-classes.mjs +9 -11
  51. package/fesm2022/taiga-ui-core-classes.mjs.map +1 -1
  52. package/fesm2022/taiga-ui-core-components-button.mjs +7 -7
  53. package/fesm2022/taiga-ui-core-components-button.mjs.map +1 -1
  54. package/fesm2022/taiga-ui-core-components-calendar.mjs +137 -32
  55. package/fesm2022/taiga-ui-core-components-calendar.mjs.map +1 -1
  56. package/fesm2022/taiga-ui-core-components-cell.mjs +7 -7
  57. package/fesm2022/taiga-ui-core-components-cell.mjs.map +1 -1
  58. package/fesm2022/taiga-ui-core-components-data-list.mjs +110 -279
  59. package/fesm2022/taiga-ui-core-components-data-list.mjs.map +1 -1
  60. package/fesm2022/taiga-ui-core-components-error.mjs +12 -11
  61. package/fesm2022/taiga-ui-core-components-error.mjs.map +1 -1
  62. package/fesm2022/taiga-ui-core-components-expand.mjs +3 -3
  63. package/fesm2022/taiga-ui-core-components-icon.mjs +10 -11
  64. package/fesm2022/taiga-ui-core-components-icon.mjs.map +1 -1
  65. package/fesm2022/taiga-ui-core-components-input.mjs +103 -0
  66. package/fesm2022/taiga-ui-core-components-input.mjs.map +1 -0
  67. package/fesm2022/taiga-ui-core-components-label.mjs +11 -13
  68. package/fesm2022/taiga-ui-core-components-label.mjs.map +1 -1
  69. package/fesm2022/taiga-ui-core-components-link.mjs +13 -28
  70. package/fesm2022/taiga-ui-core-components-link.mjs.map +1 -1
  71. package/fesm2022/taiga-ui-core-components-loader.mjs +7 -12
  72. package/fesm2022/taiga-ui-core-components-loader.mjs.map +1 -1
  73. package/fesm2022/taiga-ui-core-components-notification.mjs +99 -29
  74. package/fesm2022/taiga-ui-core-components-notification.mjs.map +1 -1
  75. package/fesm2022/taiga-ui-core-components-root.mjs +9 -13
  76. package/fesm2022/taiga-ui-core-components-root.mjs.map +1 -1
  77. package/fesm2022/taiga-ui-core-components-scrollbar.mjs +42 -51
  78. package/fesm2022/taiga-ui-core-components-scrollbar.mjs.map +1 -1
  79. package/fesm2022/taiga-ui-core-components-spin-button.mjs +6 -6
  80. package/fesm2022/taiga-ui-core-components-spin-button.mjs.map +1 -1
  81. package/fesm2022/taiga-ui-core-components-textfield.mjs +100 -262
  82. package/fesm2022/taiga-ui-core-components-textfield.mjs.map +1 -1
  83. package/fesm2022/{taiga-ui-core-directives-title.mjs → taiga-ui-core-components-title.mjs} +8 -8
  84. package/fesm2022/{taiga-ui-core-directives-title.mjs.map → taiga-ui-core-components-title.mjs.map} +1 -1
  85. package/fesm2022/taiga-ui-core-components.mjs +2 -4
  86. package/fesm2022/taiga-ui-core-components.mjs.map +1 -1
  87. package/fesm2022/taiga-ui-core-directives-appearance.mjs +16 -16
  88. package/fesm2022/taiga-ui-core-directives-appearance.mjs.map +1 -1
  89. package/fesm2022/taiga-ui-core-directives-date-format.mjs +26 -20
  90. package/fesm2022/taiga-ui-core-directives-date-format.mjs.map +1 -1
  91. package/fesm2022/taiga-ui-core-directives-group.mjs +23 -35
  92. package/fesm2022/taiga-ui-core-directives-group.mjs.map +1 -1
  93. package/fesm2022/taiga-ui-core-directives-icons.mjs +12 -12
  94. package/fesm2022/taiga-ui-core-directives-icons.mjs.map +1 -1
  95. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs +16 -40
  96. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs.map +1 -1
  97. package/fesm2022/taiga-ui-core-directives-number-format.mjs +32 -20
  98. package/fesm2022/taiga-ui-core-directives-number-format.mjs.map +1 -1
  99. package/fesm2022/taiga-ui-core-directives.mjs +0 -5
  100. package/fesm2022/taiga-ui-core-directives.mjs.map +1 -1
  101. package/fesm2022/taiga-ui-core-pipes-format-number.mjs +21 -15
  102. package/fesm2022/taiga-ui-core-pipes-format-number.mjs.map +1 -1
  103. package/fesm2022/taiga-ui-core-pipes.mjs +0 -7
  104. package/fesm2022/taiga-ui-core-pipes.mjs.map +1 -1
  105. package/fesm2022/taiga-ui-core-portals-alert.mjs +73 -0
  106. package/fesm2022/taiga-ui-core-portals-alert.mjs.map +1 -0
  107. package/fesm2022/taiga-ui-core-portals-dialog.mjs +158 -0
  108. package/fesm2022/taiga-ui-core-portals-dialog.mjs.map +1 -0
  109. package/fesm2022/{taiga-ui-core-directives-dropdown.mjs → taiga-ui-core-portals-dropdown.mjs} +171 -302
  110. package/fesm2022/taiga-ui-core-portals-dropdown.mjs.map +1 -0
  111. package/fesm2022/{taiga-ui-core-directives-hint.mjs → taiga-ui-core-portals-hint.mjs} +67 -69
  112. package/fesm2022/taiga-ui-core-portals-hint.mjs.map +1 -0
  113. package/fesm2022/taiga-ui-core-portals-modal.mjs +89 -0
  114. package/fesm2022/taiga-ui-core-portals-modal.mjs.map +1 -0
  115. package/fesm2022/{taiga-ui-core-directives-popup.mjs → taiga-ui-core-portals-popup.mjs} +11 -11
  116. package/fesm2022/taiga-ui-core-portals-popup.mjs.map +1 -0
  117. package/fesm2022/taiga-ui-core-portals.mjs +11 -0
  118. package/fesm2022/taiga-ui-core-portals.mjs.map +1 -0
  119. package/fesm2022/taiga-ui-core-services.mjs +15 -79
  120. package/fesm2022/taiga-ui-core-services.mjs.map +1 -1
  121. package/fesm2022/taiga-ui-core-tokens.mjs +51 -60
  122. package/fesm2022/taiga-ui-core-tokens.mjs.map +1 -1
  123. package/fesm2022/taiga-ui-core-utils-format.mjs +1 -22
  124. package/fesm2022/taiga-ui-core-utils-format.mjs.map +1 -1
  125. package/fesm2022/taiga-ui-core-utils-miscellaneous.mjs +19 -19
  126. package/fesm2022/taiga-ui-core-utils-miscellaneous.mjs.map +1 -1
  127. package/fesm2022/taiga-ui-core.mjs +1 -1
  128. package/index.d.ts +1 -1
  129. package/package.json +65 -95
  130. package/pipes/format-number/format-number.pipe.d.ts +6 -4
  131. package/pipes/index.d.ts +0 -7
  132. package/{directives/notification/notification.directive.d.ts → portals/alert/alert.directive.d.ts} +3 -3
  133. package/{directives/notification/notification.service.d.ts → portals/alert/alert.service.d.ts} +3 -3
  134. package/portals/alert/index.d.ts +2 -0
  135. package/{components → portals}/dialog/dialog.component.d.ts +2 -3
  136. package/{components → portals}/dialog/dialog.options.d.ts +2 -3
  137. package/{components → portals}/dialog/dialog.providers.d.ts +1 -2
  138. package/{components → portals}/dialog/dialog.service.d.ts +1 -1
  139. package/{components → portals}/dialog/index.d.ts +0 -1
  140. package/{directives → portals}/dropdown/dropdown-hover.directive.d.ts +5 -10
  141. package/{directives → portals}/dropdown/dropdown-hover.options.d.ts +1 -3
  142. package/{directives → portals}/dropdown/dropdown-manual.directive.d.ts +2 -2
  143. package/portals/dropdown/dropdown-open.directive.d.ts +30 -0
  144. package/{directives → portals}/dropdown/dropdown-options.directive.d.ts +0 -4
  145. package/{directives → portals}/dropdown/dropdown-position-sided.directive.d.ts +3 -3
  146. package/{directives → portals}/dropdown/dropdown-position.directive.d.ts +5 -5
  147. package/{directives → portals}/dropdown/dropdown-selection.directive.d.ts +4 -5
  148. package/{directives → portals}/dropdown/dropdown.bindings.d.ts +0 -1
  149. package/{directives → portals}/dropdown/dropdown.d.ts +1 -2
  150. package/{directives → portals}/dropdown/dropdown.directive.d.ts +5 -6
  151. package/{directives → portals}/dropdown/index.d.ts +0 -1
  152. package/{directives → portals}/hint/hint-position.directive.d.ts +3 -3
  153. package/{directives → portals}/hint/hint.directive.d.ts +1 -1
  154. package/portals/index.d.ts +6 -0
  155. package/{components → portals}/modal/modal.component.d.ts +3 -3
  156. package/{components → portals}/modal/modal.service.d.ts +3 -3
  157. package/services/index.d.ts +0 -3
  158. package/styles/components/appearance.less +5 -0
  159. package/styles/components/button.less +10 -20
  160. package/styles/components/icon.less +11 -0
  161. package/styles/components/icons.less +2 -1
  162. package/styles/components/label.less +3 -12
  163. package/styles/components/link.less +9 -24
  164. package/styles/components/notification.less +21 -22
  165. package/styles/components/textfield.less +129 -211
  166. package/styles/components/title.less +8 -8
  167. package/styles/mixins/appearance.less +10 -26
  168. package/styles/mixins/appearance.scss +8 -24
  169. package/styles/mixins/date-picker.less +1 -1
  170. package/styles/mixins/mixins.less +0 -5
  171. package/styles/mixins/mixins.scss +0 -5
  172. package/styles/mixins/picker.less +1 -1
  173. package/styles/mixins/picker.scss +1 -1
  174. package/styles/mixins/slider.less +1 -1
  175. package/styles/mixins/slider.scss +2 -3
  176. package/styles/taiga-ui-local.less +0 -1
  177. package/styles/taiga-ui-local.scss +0 -1
  178. package/styles/taiga-ui-theme.less +0 -1
  179. package/styles/theme/appearance/outline.less +9 -18
  180. package/styles/theme/appearance/primary.less +2 -4
  181. package/styles/theme/appearance/secondary.less +6 -14
  182. package/styles/theme/appearance/status.less +0 -4
  183. package/styles/theme/appearance/table.less +36 -35
  184. package/styles/theme/appearance/textfield.less +30 -27
  185. package/styles/theme/appearance.less +0 -1
  186. package/styles/theme/variables.less +16 -19
  187. package/tokens/breakpoint.d.ts +4 -0
  188. package/tokens/common-icons.d.ts +3 -3
  189. package/tokens/date-format.d.ts +2 -3
  190. package/tokens/icons.d.ts +0 -4
  191. package/tokens/index.d.ts +1 -4
  192. package/tokens/number-format.d.ts +2 -3
  193. package/types/index.d.ts +0 -2
  194. package/types/point.d.ts +1 -1
  195. package/types/size.d.ts +0 -11
  196. package/utils/format/index.d.ts +0 -1
  197. package/utils/miscellaneous/font-scaling.d.ts +2 -1
  198. package/utils/miscellaneous/get-duration.d.ts +2 -0
  199. package/utils/miscellaneous/index.d.ts +1 -1
  200. package/animations/animations.d.ts +0 -109
  201. package/animations/index.d.ts +0 -1
  202. package/components/alert/alert.component.d.ts +0 -14
  203. package/components/alert/alert.directive.d.ts +0 -8
  204. package/components/alert/alert.interfaces.d.ts +0 -13
  205. package/components/alert/alert.service.d.ts +0 -11
  206. package/components/alert/alert.tokens.d.ts +0 -6
  207. package/components/alert/index.d.ts +0 -5
  208. package/components/data-list/data-list.directive.d.ts +0 -7
  209. package/components/data-list/option/option-content.d.ts +0 -16
  210. package/components/data-list/option/option-legacy.component.d.ts +0 -24
  211. package/components/data-list/option/option.directive.d.ts +0 -27
  212. package/components/dialog/active-zone-adapter.directive.d.ts +0 -11
  213. package/components/dialog/dialogs.component.d.ts +0 -8
  214. package/components/header/header.directive.d.ts +0 -17
  215. package/components/header/index.d.ts +0 -1
  216. package/components/link/link.options.d.ts +0 -12
  217. package/components/textfield/textfield.directive.d.ts +0 -35
  218. package/directives/dropdown/dropdown-open-legacy.directive.d.ts +0 -12
  219. package/directives/dropdown/dropdown-open.directive.d.ts +0 -33
  220. package/directives/notification/index.d.ts +0 -2
  221. package/fesm2022/taiga-ui-core-animations.mjs +0 -370
  222. package/fesm2022/taiga-ui-core-animations.mjs.map +0 -1
  223. package/fesm2022/taiga-ui-core-components-alert.mjs +0 -110
  224. package/fesm2022/taiga-ui-core-components-alert.mjs.map +0 -1
  225. package/fesm2022/taiga-ui-core-components-dialog.mjs +0 -227
  226. package/fesm2022/taiga-ui-core-components-dialog.mjs.map +0 -1
  227. package/fesm2022/taiga-ui-core-components-header.mjs +0 -42
  228. package/fesm2022/taiga-ui-core-components-header.mjs.map +0 -1
  229. package/fesm2022/taiga-ui-core-components-modal.mjs +0 -89
  230. package/fesm2022/taiga-ui-core-components-modal.mjs.map +0 -1
  231. package/fesm2022/taiga-ui-core-directives-dropdown.mjs.map +0 -1
  232. package/fesm2022/taiga-ui-core-directives-hint.mjs.map +0 -1
  233. package/fesm2022/taiga-ui-core-directives-notification.mjs +0 -73
  234. package/fesm2022/taiga-ui-core-directives-notification.mjs.map +0 -1
  235. package/fesm2022/taiga-ui-core-directives-popup.mjs.map +0 -1
  236. package/fesm2022/taiga-ui-core-pipes-auto-color.mjs +0 -25
  237. package/fesm2022/taiga-ui-core-pipes-auto-color.mjs.map +0 -1
  238. package/fesm2022/taiga-ui-core-pipes-calendar-sheet.mjs +0 -94
  239. package/fesm2022/taiga-ui-core-pipes-calendar-sheet.mjs.map +0 -1
  240. package/fesm2022/taiga-ui-core-pipes-flag.mjs +0 -32
  241. package/fesm2022/taiga-ui-core-pipes-flag.mjs.map +0 -1
  242. package/fesm2022/taiga-ui-core-pipes-format-date.mjs +0 -28
  243. package/fesm2022/taiga-ui-core-pipes-format-date.mjs.map +0 -1
  244. package/fesm2022/taiga-ui-core-pipes-initials.mjs +0 -29
  245. package/fesm2022/taiga-ui-core-pipes-initials.mjs.map +0 -1
  246. package/fesm2022/taiga-ui-core-pipes-month.mjs +0 -30
  247. package/fesm2022/taiga-ui-core-pipes-month.mjs.map +0 -1
  248. package/fesm2022/taiga-ui-core-pipes-order-week-days.mjs +0 -36
  249. package/fesm2022/taiga-ui-core-pipes-order-week-days.mjs.map +0 -1
  250. package/pipes/auto-color/auto-color.pipe.d.ts +0 -7
  251. package/pipes/auto-color/index.d.ts +0 -1
  252. package/pipes/calendar-sheet/index.d.ts +0 -1
  253. package/pipes/calendar-sheet/utils.d.ts +0 -20
  254. package/pipes/flag/flag.pipe.d.ts +0 -14
  255. package/pipes/flag/index.d.ts +0 -1
  256. package/pipes/format-date/format-date.pipe.d.ts +0 -9
  257. package/pipes/format-date/index.d.ts +0 -1
  258. package/pipes/initials/index.d.ts +0 -1
  259. package/pipes/initials/initials.pipe.d.ts +0 -7
  260. package/pipes/month/index.d.ts +0 -1
  261. package/pipes/month/month.pipe.d.ts +0 -10
  262. package/pipes/order-week-days/index.d.ts +0 -1
  263. package/services/breakpoint.service.d.ts +0 -16
  264. package/services/dark-theme.service.d.ts +0 -10
  265. package/services/format-date.service.d.ts +0 -8
  266. package/styles/mixins/wrapper.less +0 -64
  267. package/styles/mixins/wrapper.scss +0 -61
  268. package/styles/theme/appearance/opposite.less +0 -17
  269. package/styles/theme/wrapper.less +0 -211
  270. package/tokens/day-type-handler.d.ts +0 -7
  271. package/tokens/first-day-of-week.d.ts +0 -5
  272. package/tokens/scroll-ref.d.ts +0 -2
  273. package/tokens/spin-icons.d.ts +0 -6
  274. package/types/range-state.d.ts +0 -4
  275. package/types/value-content-context.d.ts +0 -4
  276. package/utils/format/string-hash-to-hsl.d.ts +0 -6
  277. package/utils/miscellaneous/to-animation-options.d.ts +0 -4
  278. /package/{directives → components}/title/index.d.ts +0 -0
  279. /package/{directives → components}/title/title.directive.d.ts +0 -0
  280. /package/{components → portals}/dialog/dialog.directive.d.ts +0 -0
  281. /package/{components → portals}/dialog/dialog.factory.d.ts +0 -0
  282. /package/{directives → portals}/dropdown/dropdown-content.directive.d.ts +0 -0
  283. /package/{directives → portals}/dropdown/dropdown-context.directive.d.ts +0 -0
  284. /package/{directives → portals}/dropdown/dropdown-limit-width.d.ts +0 -0
  285. /package/{directives → portals}/dropdown/dropdown.component.d.ts +0 -0
  286. /package/{directives → portals}/dropdown/dropdown.driver.d.ts +0 -0
  287. /package/{directives → portals}/dropdown/dropdown.providers.d.ts +0 -0
  288. /package/{directives → portals}/dropdown/with-dropdown-open.directive.d.ts +0 -0
  289. /package/{directives → portals}/hint/hint-describe.directive.d.ts +0 -0
  290. /package/{directives → portals}/hint/hint-driver.directive.d.ts +0 -0
  291. /package/{directives → portals}/hint/hint-host.directive.d.ts +0 -0
  292. /package/{directives → portals}/hint/hint-hover.directive.d.ts +0 -0
  293. /package/{directives → portals}/hint/hint-manual.directive.d.ts +0 -0
  294. /package/{directives → portals}/hint/hint-options.directive.d.ts +0 -0
  295. /package/{directives → portals}/hint/hint-overflow.directive.d.ts +0 -0
  296. /package/{directives → portals}/hint/hint-pointer.directive.d.ts +0 -0
  297. /package/{directives → portals}/hint/hint-unstyled.component.d.ts +0 -0
  298. /package/{directives → portals}/hint/hint.component.d.ts +0 -0
  299. /package/{directives → portals}/hint/hint.d.ts +0 -0
  300. /package/{directives → portals}/hint/hint.providers.d.ts +0 -0
  301. /package/{directives → portals}/hint/index.d.ts +0 -0
  302. /package/{components → portals}/modal/index.d.ts +0 -0
  303. /package/{directives → portals}/popup/index.d.ts +0 -0
  304. /package/{directives → portals}/popup/popup.directive.d.ts +0 -0
  305. /package/{directives → portals}/popup/popup.service.d.ts +0 -0
  306. /package/{directives → portals}/popup/popups.component.d.ts +0 -0
@@ -6,45 +6,61 @@ tui-textfield {
6
6
 
7
7
  --t-height: var(--tui-height-l);
8
8
  --t-padding: var(--tui-padding-l);
9
- --t-label: -0.7em;
10
- --t-label-size: 0.83em;
9
+ --t-label-y: -0.75rem;
10
+ --t-label-font: var(--tui-font-body-s);
11
11
  --t-end: ~'0rem';
12
12
  --t-start: ~'0rem';
13
13
 
14
14
  position: relative;
15
15
  display: flex;
16
16
  flex-wrap: wrap;
17
- align-items: center;
18
- cursor: pointer;
17
+ align-items: flex-start;
19
18
  min-block-size: var(--t-height);
20
19
  padding: 0 var(--t-padding);
21
20
  border-radius: var(--tui-radius-l);
22
- font: var(--tui-font-text-ui-m);
21
+ font: var(--tui-font-ui-m);
23
22
  line-height: 1.25rem;
24
23
  box-sizing: border-box;
25
24
  gap: 0 0.25rem;
26
25
  isolation: isolate;
27
26
 
28
- // Increasing specificity to override custom appearance
29
- &[tuiIcons]:read-only {
30
- color: var(--tui-text-tertiary);
27
+ &[tuiAppearance] {
28
+ outline: none;
29
+
30
+ &[data-appearance=''] {
31
+ color: var(--tui-text-tertiary);
32
+
33
+ &:not([data-mode~='readonly']) {
34
+ .appearance-hover({
35
+ color: var(--tui-text-secondary);
36
+ });
37
+ }
38
+ }
31
39
  }
32
40
 
33
- &[style*='--t-icon-start:'] {
41
+ &[data-icon-start] {
34
42
  --t-start: 2.25rem;
35
43
  }
36
44
 
37
- &[style*='--t-icon-end:'] {
45
+ &[data-icon-end] {
38
46
  --t-end: 2.25rem;
39
47
  }
40
48
 
41
- &[tuiIcons]::after {
42
- position: relative;
43
- block-size: auto;
44
- align-self: stretch;
45
- border-inline-start: var(--t-padding) solid transparent;
46
- border-inline-end: var(--t-padding) solid transparent;
47
- margin: 0 calc(-1 * var(--t-padding));
49
+ &[tuiIcons] {
50
+ &::before {
51
+ z-index: 1;
52
+ block-size: var(--t-height);
53
+ margin-inline-end: 0.5rem;
54
+ pointer-events: none;
55
+ }
56
+
57
+ &::after {
58
+ position: relative;
59
+ block-size: var(--t-height);
60
+ cursor: pointer;
61
+ border-inline: var(--t-padding) solid transparent;
62
+ margin: 0 calc(-1 * var(--t-padding));
63
+ }
48
64
  }
49
65
 
50
66
  &::-webkit-resizer {
@@ -68,63 +84,40 @@ tui-textfield {
68
84
  background-clip: content-box;
69
85
  }
70
86
 
71
- label,
87
+ [tuiLabel],
72
88
  & > .t-content,
73
89
  & > .t-template {
74
90
  pointer-events: none;
75
91
  }
76
92
 
77
- input,
78
- select,
79
- textarea {
80
- font: inherit;
81
- resize: none;
82
- outline: none;
83
- padding-block-start: 1.125rem;
84
- padding-block-end: 1.125rem;
85
- color: var(--tui-text-primary);
86
-
87
- &[inputmode='none'] {
88
- caret-color: transparent;
89
- }
90
- }
91
-
92
93
  &[data-size='s'] {
93
94
  --t-height: var(--tui-height-s);
94
95
  --t-padding: var(--tui-padding-s);
95
96
 
96
97
  border-radius: var(--tui-radius-m);
97
98
  gap: 0;
98
- font: var(--tui-font-text-ui-s);
99
+ font: var(--tui-font-ui-s);
99
100
  line-height: 1rem;
100
101
 
101
- &[style*='--t-icon-start:'] {
102
+ &[data-icon-start] {
102
103
  --t-start: 1.25rem;
103
104
  }
104
105
 
105
- &[style*='--t-icon-end:'] {
106
+ &[data-icon-end] {
106
107
  --t-end: 1.25rem;
107
108
  }
108
109
 
109
110
  &::before {
110
- margin-inline-end: 0.5rem;
111
- margin-inline-start: -0.125rem;
111
+ margin-inline: -0.125rem 0.5rem;
112
112
  font-size: 1rem;
113
113
  }
114
114
 
115
115
  &::after {
116
- margin-inline-end: calc(-0.125rem - var(--t-padding));
117
116
  margin-inline-start: calc(0.625rem - var(--t-padding));
117
+ margin-inline-end: calc(-0.125rem - var(--t-padding));
118
118
  font-size: 1rem;
119
119
  }
120
120
 
121
- input,
122
- select,
123
- textarea {
124
- padding-block-start: 0.5rem;
125
- padding-block-end: 0.5rem;
126
- }
127
-
128
121
  & > .t-content {
129
122
  margin-inline-end: -0.375rem;
130
123
  }
@@ -133,22 +126,23 @@ tui-textfield {
133
126
  &[data-size='m'] {
134
127
  --t-height: var(--tui-height-m);
135
128
  --t-padding: var(--tui-padding-m);
129
+ --t-label-font: var(--tui-font-body-xs);
130
+ --t-label-y: -0.5625rem;
136
131
 
137
132
  border-radius: var(--tui-radius-m);
138
- font: var(--tui-font-text-ui-s);
133
+ font: var(--tui-font-ui-s);
139
134
  line-height: 1rem;
140
135
 
141
- &[style*='--t-icon-start:'] {
136
+ &[data-icon-start] {
142
137
  --t-start: 1.75rem;
143
138
  }
144
139
 
145
- &[style*='--t-icon-end:'] {
140
+ &[data-icon-end] {
146
141
  --t-end: 1.75rem;
147
142
  }
148
143
 
149
144
  &::before {
150
- margin-inline-start: -0.125rem;
151
- margin-inline-end: 0.125rem;
145
+ margin-inline: -0.125rem 0.125rem;
152
146
  }
153
147
 
154
148
  &::after {
@@ -156,13 +150,6 @@ tui-textfield {
156
150
  margin-inline-end: calc(-0.125rem - var(--t-padding));
157
151
  }
158
152
 
159
- input,
160
- select,
161
- textarea {
162
- padding-block-start: 0.875rem;
163
- padding-block-end: 0.875rem;
164
- }
165
-
166
153
  & > .t-content {
167
154
  margin-inline-end: -0.125rem;
168
155
  }
@@ -172,177 +159,93 @@ tui-textfield {
172
159
  --t-label: -0.7rem;
173
160
  }
174
161
 
175
- /*
176
- TODO: refactor to the following way after Chrome 105+ & Safari 15.4+
177
- &:hover:has(input:not(:read-only)),
178
- &:hover:has(textarea:not(:read-only)),
179
- &:hover:has(select:not([data-mode='readonly'])) {
180
- color: var(--tui-text-secondary);
181
- }
182
- */
183
- &[tuiIcons]:hover {
184
- color: var(--tui-text-secondary);
185
-
186
- &:has(input:read-only):not([multi]),
187
- &:has(textarea:read-only),
188
- &:has(select[data-mode~='readonly']) {
189
- color: var(--tui-text-tertiary);
190
- }
191
- }
192
-
193
- &::before {
194
- z-index: 1;
195
- margin-inline-end: 0.5rem;
162
+ &:is(._disabled, [data-state='disabled']) {
196
163
  pointer-events: none;
197
- }
198
-
199
- &:has(:disabled:not(.t-filler, button, option, [tuiChip]))::before,
200
- &:has(:disabled:not(.t-filler, button, option, [tuiChip]))::after,
201
- &:has(:disabled:not(.t-filler, button, option, [tuiChip])) > .t-template {
202
- opacity: var(--tui-disabled-opacity);
203
- }
204
-
205
- // TODO: Fallback until Safari 15.4
206
- &._disabled::before,
207
- &._disabled::after,
208
- &._disabled > .t-template {
209
164
  opacity: var(--tui-disabled-opacity);
210
- }
211
165
 
212
- &:has(label:not(:empty)) {
213
- & > .t-template,
214
- input:not([type='range']),
215
- select:defined,
216
- textarea:defined {
217
- padding-block-start: calc(var(--t-height) / 3);
218
- padding-block-end: 0;
166
+ [tuiAppearance]:is(._disabled, :disabled, [data-state='disabled']) {
167
+ opacity: 1;
219
168
  }
220
- }
221
169
 
222
- &:not([data-focus='true']):has(label:not(:empty)) {
223
- & > .t-template,
224
- input:not([type='range']),
225
- select:defined,
226
- textarea:defined {
227
- &::placeholder,
228
- &._empty {
229
- color: transparent;
230
- }
170
+ tui-icon {
171
+ display: none;
231
172
  }
232
173
  }
233
174
 
234
- // TODO: Fallback until Safari 15.4
235
175
  &._with-label {
236
176
  & > .t-template,
237
- input:not([type='range']),
238
- select:defined,
239
- textarea:defined {
177
+ .t-filler,
178
+ [tuiInput] {
240
179
  padding-block-start: calc(var(--t-height) / 3);
241
180
  padding-block-end: 0;
242
181
  }
243
- }
244
182
 
245
- &:not([data-focus='true'])._with-label {
246
- & > .t-template,
247
- input:not([type='range']),
248
- select:defined,
249
- textarea:defined {
250
- &::placeholder,
251
- &._empty {
252
- color: transparent;
183
+ &:is(:not([data-focus='true']), [data-mode~='readonly']) {
184
+ & > .t-template,
185
+ [tuiInput] {
186
+ &::placeholder,
187
+ &._empty {
188
+ color: transparent;
189
+ }
253
190
  }
254
191
  }
255
192
  }
256
193
 
257
194
  & > .t-template,
258
- input:defined,
259
- select:defined,
260
- textarea:defined {
261
- .fullsize();
262
-
195
+ .t-filler,
196
+ [tuiInput] {
197
+ position: absolute;
198
+ inset: 0 auto auto 0;
199
+ inline-size: stretch;
200
+ block-size: 100%;
263
201
  appearance: none;
202
+ background: none;
203
+ font: inherit;
204
+ resize: none;
205
+ outline: none;
206
+ color: var(--tui-text-primary);
264
207
  box-sizing: border-box;
265
208
  border-radius: inherit;
266
209
  border-width: 0;
267
210
  overscroll-behavior: none;
268
211
  // StackBlitz changes "0rem" to "0" breaking calc
269
212
  padding-inline-start: calc(var(--t-start, ~'0rem') + var(--t-padding));
270
- padding-inline-end: calc(var(--t-end, ~'0rem') + var(--t-side) + var(--t-padding));
271
- }
272
-
273
- & > .t-template {
274
- display: flex;
275
- align-items: center;
276
- color: var(--tui-text-primary);
277
- }
278
-
279
- &._with-template input:first-of-type,
280
- &._with-template select,
281
- &._with-template textarea {
282
- color: transparent !important;
283
- }
213
+ padding-inline-end: calc(var(--t-end, ~'0rem') + var(--t-side, ~'0rem') + var(--t-padding));
284
214
 
285
- input:not([type='range']),
286
- select:defined,
287
- textarea:defined {
288
- pointer-events: auto;
289
- background: none;
290
-
291
- // TODO: Remove :not when we drop old select tuiTextfield in v5
292
- &:not(select):read-only ~ .t-filler {
215
+ &:is(input, textarea):read-only ~ .t-filler {
293
216
  display: none;
294
217
  }
295
218
 
296
219
  &:disabled {
297
- & ~ label,
298
- & ~ .t-content {
299
- opacity: var(--tui-disabled-opacity);
300
-
301
- > tui-icon {
302
- display: none;
303
- }
304
- }
220
+ animation: tuiPresent 1s infinite;
221
+ opacity: 1;
305
222
  }
306
223
 
307
- &:-webkit-autofill,
308
- &:not(._empty):not(:placeholder-shown) {
309
- & ~ label {
310
- font-size: var(--t-label-size);
311
- transform: translateY(var(--t-label));
312
- }
313
-
314
- &:not(:disabled)[data-mode~='invalid'] ~ label,
315
- &:invalid:not(:disabled):not([data-mode]) ~ label {
316
- color: var(--tui-text-negative);
317
- }
318
-
319
- &:not(:disabled):not([data-mode~='readonly']) ~ .t-content .t-clear {
320
- display: flex;
321
- }
224
+ &[inputmode='none'] {
225
+ caret-color: transparent;
322
226
  }
227
+ }
323
228
 
324
- &:not([data-mode~='readonly']) {
325
- .appearance-focus({
326
- &::placeholder,
327
- &._empty {
328
- color: var(--tui-text-tertiary);
329
- }
229
+ & > .t-template {
230
+ display: flex;
231
+ block-size: 100%;
232
+ align-items: center;
233
+ }
330
234
 
331
- & ~ label {
332
- color: var(--tui-text-primary) !important;
333
- font-size: var(--t-label-size);
334
- transform: translateY(var(--t-label));
335
- }
336
- });
337
- }
235
+ &._with-template [tuiInput] {
236
+ color: transparent !important;
237
+ }
338
238
 
339
- // @deprecated remove in v5
340
- .ios-only({
341
- &._ios-fix {
342
- position: fixed;
343
- left: 1000rem;
344
- }
345
- });
239
+ [tuiInput]:-webkit-autofill,
240
+ [tuiInput][chrome-autofilled], /* Chrome on IOS */
241
+ [tuiInput]:not(._empty, :placeholder-shown),
242
+ &[multi][multi]:not(._empty) {
243
+ [tuiLabel],
244
+ &:not(tui-textfield) ~ [tuiLabel] {
245
+ font: var(--t-label-font);
246
+ line-height: var(--t-height);
247
+ transform: translateY(var(--t-label-y));
248
+ }
346
249
  }
347
250
 
348
251
  // Increasing specificity to override all other styles
@@ -355,22 +258,18 @@ tui-textfield {
355
258
  flex: 1;
356
259
  align-self: flex-start;
357
260
  font-size: inherit;
261
+ user-select: none;
358
262
  line-height: var(--t-height);
359
263
  transition-duration: inherit;
360
264
  }
361
265
 
362
- label:defined,
363
- input:defined::placeholder,
364
- textarea:defined::placeholder,
365
- select:defined._empty {
266
+ [tuiLabel],
267
+ [tuiInput]::placeholder,
268
+ [tuiInput]._empty {
366
269
  color: var(--tui-text-secondary);
367
270
  }
368
271
 
369
272
  select {
370
- &:not([data-mode~='readonly']) {
371
- cursor: pointer;
372
- }
373
-
374
273
  option[value='']:disabled {
375
274
  // Hide placeholder from native datalist (Windows OS only)
376
275
  color: transparent;
@@ -390,7 +289,8 @@ tui-textfield {
390
289
  }
391
290
 
392
291
  button,
393
- a {
292
+ a,
293
+ tui-icon {
394
294
  pointer-events: auto;
395
295
  }
396
296
 
@@ -403,26 +303,21 @@ tui-textfield {
403
303
  margin-inline-start: auto;
404
304
  isolation: isolate;
405
305
  border-radius: inherit;
406
-
407
- > tui-icon {
408
- pointer-events: auto;
409
- }
410
306
  }
411
307
 
412
308
  textarea ~ .t-content {
413
309
  min-inline-size: 0.5rem;
414
310
  }
415
311
 
416
- .t-clear {
417
- z-index: 1;
312
+ &:is([data-mode~='readonly'], [data-state='disabled'], ._empty) .t-clear,
313
+ [tuiInput]._empty ~ .t-content .t-clear,
314
+ [tuiInput]:disabled ~ .t-content .t-clear {
418
315
  display: none;
419
- pointer-events: auto;
420
316
  }
421
317
 
422
- & > .t-filler:defined {
423
- pointer-events: none;
318
+ .t-filler {
319
+ pointer-events: none !important;
424
320
  color: var(--tui-text-tertiary);
425
- opacity: 1;
426
321
  }
427
322
 
428
323
  [tuiFluidTypography] {
@@ -436,4 +331,27 @@ tui-textfield {
436
331
  &:has(input[type='tel']) {
437
332
  direction: ltr;
438
333
  }
334
+
335
+ .appearance-invalid({
336
+ [tuiInput]:not(._empty) ~ [tuiLabel],
337
+ &[multi]:not(._empty) [tuiLabel] {
338
+ color: var(--tui-text-negative);
339
+ }
340
+ });
341
+
342
+ &:not([data-mode~='readonly']) {
343
+ .appearance-focus({
344
+ [tuiInput]::placeholder,
345
+ [tuiInput]._empty {
346
+ color: var(--tui-text-tertiary);
347
+ }
348
+
349
+ [tuiLabel] {
350
+ color: var(--tui-text-primary) !important;
351
+ font: var(--t-label-font);
352
+ line-height: var(--t-height);
353
+ transform: translateY(var(--t-label-y));
354
+ }
355
+ });
356
+ }
439
357
  }
@@ -26,32 +26,32 @@
26
26
  text-align: start;
27
27
  gap: 0.25rem;
28
28
  margin: 0;
29
- font: var(--tui-font-text-ui-m);
29
+ font: var(--tui-font-ui-m);
30
30
 
31
31
  &[data-size='s'] {
32
32
  gap: 0.125rem;
33
- font: var(--tui-font-text-s);
33
+ font: var(--tui-font-body-s);
34
34
 
35
35
  [tuiSubtitle] {
36
- font: var(--tui-font-text-xs);
36
+ font: var(--tui-font-body-xs);
37
37
  }
38
38
  }
39
39
 
40
40
  &[data-size='m'] {
41
41
  gap: 0.125rem;
42
- font: var(--tui-font-heading-5);
42
+ font: var(--tui-font-heading-h5);
43
43
 
44
44
  [tuiSubtitle] {
45
- font: var(--tui-font-text-m);
45
+ font: var(--tui-font-body-m);
46
46
  }
47
47
  }
48
48
 
49
49
  &[data-size='l'] {
50
50
  gap: 0.5rem;
51
- font: var(--tui-font-heading-3);
51
+ font: var(--tui-font-heading-h3);
52
52
 
53
53
  [tuiSubtitle] {
54
- font: var(--tui-font-text-m);
54
+ font: var(--tui-font-body-m);
55
55
  }
56
56
  }
57
57
 
@@ -67,7 +67,7 @@
67
67
  }
68
68
 
69
69
  [tuiSubtitle] {
70
- font: var(--tui-font-text-ui-s);
70
+ font: var(--tui-font-ui-s);
71
71
  margin: 0;
72
72
  }
73
73
 
@@ -3,7 +3,7 @@
3
3
  .appearance-hover(@content) {
4
4
  .interactive({
5
5
  @media @tui-mouse {
6
- &:hover:not(:disabled):not([data-state]) {
6
+ &:hover:not([data-state]) {
7
7
  @content();
8
8
  }
9
9
  }
@@ -12,19 +12,11 @@
12
12
  &[data-state='hover'] {
13
13
  @content();
14
14
  }
15
-
16
- /* @deprecated TODO remove in v5 */
17
- @media @tui-mouse {
18
- &[tuiWrapper]:hover:not(._no-hover),
19
- &[tuiWrapper][data-state='hover'] {
20
- @content();
21
- }
22
- }
23
15
  }
24
16
 
25
17
  .appearance-active(@content) {
26
18
  .interactive({
27
- &:active:not(:disabled):not([data-state]) {
19
+ &:active:not([data-state]) {
28
20
  @content();
29
21
  }
30
22
  });
@@ -32,13 +24,6 @@
32
24
  &[data-state='active'] {
33
25
  @content();
34
26
  }
35
-
36
- /* @deprecated TODO remove in v5 */
37
- &[tuiWrapper]:active:not(._no-active),
38
- &[tuiWrapper][data-state='active'],
39
- &[tuiWrapper][data-state='active']:hover {
40
- @content();
41
- }
42
27
  }
43
28
 
44
29
  .appearance-disabled(@content) {
@@ -46,12 +31,6 @@
46
31
  &[data-state='disabled'] {
47
32
  @content();
48
33
  }
49
-
50
- /* @deprecated TODO remove in v5 */
51
- &[tuiWrapper]:disabled:not([data-state]),
52
- &[tuiWrapper][data-state='disabled'] {
53
- @content();
54
- }
55
34
  }
56
35
 
57
36
  .appearance-focus(@content) {
@@ -62,10 +41,15 @@
62
41
  &[data-focus='true'] {
63
42
  @content();
64
43
  }
44
+ }
65
45
 
66
- /* @deprecated TODO remove in v5 */
67
- &[tuiWrapper]:not(._focused):has(:focus-visible),
68
- &[tuiWrapper]._focused {
46
+ .appearance-invalid(@content) {
47
+ &:is([data-mode~='invalid'], .tui-invalid, :invalid):not(
48
+ [data-mode~='readonly'],
49
+ [data-mode~='valid'],
50
+ [data-state='disabled'],
51
+ :disabled
52
+ ) {
69
53
  @content();
70
54
  }
71
55
  }
@@ -13,14 +13,6 @@
13
13
  &[data-state='hover'] {
14
14
  @content;
15
15
  }
16
-
17
- /* @deprecated TODO remove in v5 */
18
- @media ($tui-mouse) {
19
- &[tuiWrapper]:hover:not(._no-hover),
20
- &[tuiWrapper][data-state='hover'] {
21
- @content;
22
- }
23
- }
24
16
  }
25
17
 
26
18
  @mixin appearance-active {
@@ -33,13 +25,6 @@
33
25
  &[data-state='active'] {
34
26
  @content;
35
27
  }
36
-
37
- /* @deprecated TODO remove in v5 */
38
- &[tuiWrapper]:active:not(._no-active),
39
- &[tuiWrapper][data-state='active'],
40
- &[tuiWrapper][data-state='active']:hover {
41
- @content;
42
- }
43
28
  }
44
29
 
45
30
  @mixin appearance-disabled {
@@ -47,12 +32,6 @@
47
32
  &[data-state='disabled'] {
48
33
  @content;
49
34
  }
50
-
51
- /* @deprecated TODO remove in v5 */
52
- &[tuiWrapper]:disabled:not([data-state]),
53
- &[tuiWrapper][data-state='disabled'] {
54
- @content;
55
- }
56
35
  }
57
36
 
58
37
  @mixin appearance-focus {
@@ -63,10 +42,15 @@
63
42
  &[data-focus='true'] {
64
43
  @content;
65
44
  }
45
+ }
66
46
 
67
- /* @deprecated TODO remove in v5 */
68
- &[tuiWrapper]:not(._focused):has(:focus-visible),
69
- &[tuiWrapper]._focused {
47
+ @mixin appearance-invalid {
48
+ &:is([data-mode~='invalid'], .tui-invalid, :invalid):not(
49
+ [data-mode~='readonly'],
50
+ [data-mode~='valid'],
51
+ [data-state='disabled'],
52
+ :disabled
53
+ ) {
70
54
  @content;
71
55
  }
72
56
  }