chuijs 4.0.2 → 4.0.4

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 (292) hide show
  1. package/CHANGELOG.md +597 -0
  2. package/README.md +43 -644
  3. package/framework/appLayout/default/chui_app_layout.js +602 -496
  4. package/framework/appLayout/default/global_style.css +288 -97
  5. package/framework/appLayout/default/main_theme_style.css +188 -101
  6. package/framework/components/chui_accordion/accordion.js +38 -35
  7. package/framework/components/chui_accordion/styles.css +13 -12
  8. package/framework/components/chui_action_sheet/action_sheet.js +93 -64
  9. package/framework/components/chui_action_sheet/styles.css +12 -5
  10. package/framework/components/chui_actions_bar/actions_bar.js +338 -0
  11. package/framework/components/chui_actions_bar/styles.css +139 -0
  12. package/framework/components/chui_affix/affix.js +16 -11
  13. package/framework/components/chui_affix/styles.css +5 -0
  14. package/framework/components/chui_alert/alert.js +34 -19
  15. package/framework/components/chui_alert/styles.css +7 -0
  16. package/framework/components/chui_avatar/avatar.js +36 -35
  17. package/framework/components/chui_avatar/styles.css +1 -1
  18. package/framework/components/chui_avatar_group/avatar_group.js +25 -23
  19. package/framework/components/chui_avatar_group/styles.css +1 -1
  20. package/framework/components/chui_backtop/backtop.js +60 -21
  21. package/framework/components/chui_backtop/styles.css +21 -0
  22. package/framework/components/chui_badge/badge.js +30 -28
  23. package/framework/components/chui_badge/styles.css +6 -6
  24. package/framework/components/chui_banner/banner.js +222 -0
  25. package/framework/components/chui_banner/styles.css +170 -0
  26. package/framework/components/chui_breadcrumb/breadcrumb.js +15 -13
  27. package/framework/components/chui_breadcrumb/styles.css +1 -1
  28. package/framework/components/chui_button/button.js +52 -36
  29. package/framework/components/chui_button/styles.css +7 -7
  30. package/framework/components/chui_calendar/calendar.js +18 -16
  31. package/framework/components/chui_card/card.js +52 -32
  32. package/framework/components/chui_card_scroll/card_scroll.js +169 -0
  33. package/framework/components/chui_card_scroll/styles.css +86 -0
  34. package/framework/components/chui_chat/chat.js +140 -79
  35. package/framework/components/chui_chat/styles.css +18 -7
  36. package/framework/components/chui_clipboard_history/clipboard_history.js +53 -39
  37. package/framework/components/chui_clipboard_history/styles.css +13 -9
  38. package/framework/components/chui_code/code.js +10 -10
  39. package/framework/components/chui_code/styles.css +4 -4
  40. package/framework/components/chui_code_editor/code_editor.js +73 -57
  41. package/framework/components/chui_code_editor/styles.css +6 -5
  42. package/framework/components/chui_command_palette/command_palette.js +87 -64
  43. package/framework/components/chui_command_palette/styles.css +5 -5
  44. package/framework/components/chui_console/console.js +13 -13
  45. package/framework/components/chui_console/styles.css +6 -3
  46. package/framework/components/chui_content_block/content_block.js +35 -21
  47. package/framework/components/chui_content_block/styles.css +2 -2
  48. package/framework/components/chui_context_menu/context_menu.js +171 -58
  49. package/framework/components/chui_context_menu/styles.css +82 -8
  50. package/framework/components/chui_custom_element/custom_element.js +25 -18
  51. package/framework/components/chui_data_grid/data_grid.js +633 -471
  52. package/framework/components/chui_data_grid/styles.css +24 -22
  53. package/framework/components/chui_descriptions/descriptions.js +34 -17
  54. package/framework/components/chui_descriptions/styles.css +1 -1
  55. package/framework/components/chui_details/details.js +42 -36
  56. package/framework/components/chui_details/styles.css +12 -11
  57. package/framework/components/chui_diff_viewer/diff_viewer.js +172 -147
  58. package/framework/components/chui_diff_viewer/styles.css +10 -10
  59. package/framework/components/chui_divider/divider.js +19 -17
  60. package/framework/components/chui_divider/styles.css +2 -2
  61. package/framework/components/chui_drawer/drawer.js +63 -38
  62. package/framework/components/chui_drawer/styles.css +18 -4
  63. package/framework/components/chui_drop_zone/drop_zone.js +37 -27
  64. package/framework/components/chui_drop_zone/styles.css +10 -6
  65. package/framework/components/chui_empty_state/empty_state.js +20 -15
  66. package/framework/components/chui_fieldset/fieldset.js +40 -23
  67. package/framework/components/chui_fieldset/styles.css +6 -6
  68. package/framework/components/chui_file_explorer/file_explorer.js +260 -189
  69. package/framework/components/chui_file_explorer/styles.css +8 -7
  70. package/framework/components/chui_form/form.js +40 -28
  71. package/framework/components/chui_form/styles.css +1 -1
  72. package/framework/components/chui_gantt/gantt.js +102 -78
  73. package/framework/components/chui_gantt/styles.css +5 -5
  74. package/framework/components/chui_graphs/graphs.js +376 -239
  75. package/framework/components/chui_graphs/styles.css +27 -6
  76. package/framework/components/chui_hero/hero.js +98 -37
  77. package/framework/components/chui_hero/styles.css +176 -7
  78. package/framework/components/chui_html_block/html_block.js +8 -8
  79. package/framework/components/chui_html_block/styles.css +3 -3
  80. package/framework/components/chui_hx/hx.js +3 -3
  81. package/framework/components/chui_hx/styles.css +13 -6
  82. package/framework/components/chui_icons/icons.js +2115 -2115
  83. package/framework/components/chui_icons/styles.css +4 -3
  84. package/framework/components/chui_inputs/chui_check_box/check_box.js +31 -19
  85. package/framework/components/chui_inputs/chui_check_box/styles.css +30 -21
  86. package/framework/components/chui_inputs/chui_chips/chips.js +141 -70
  87. package/framework/components/chui_inputs/chui_chips/styles.css +32 -7
  88. package/framework/components/chui_inputs/chui_color_picker/color_picker.js +55 -38
  89. package/framework/components/chui_inputs/chui_color_picker/styles.css +7 -7
  90. package/framework/components/chui_inputs/chui_combo_box/combo_box.js +127 -109
  91. package/framework/components/chui_inputs/chui_combo_box/styles.css +23 -21
  92. package/framework/components/chui_inputs/chui_date/date.js +161 -127
  93. package/framework/components/chui_inputs/chui_date/styles.css +20 -19
  94. package/framework/components/chui_inputs/chui_date_range/date_range.js +61 -50
  95. package/framework/components/chui_inputs/chui_date_range/styles.css +3 -3
  96. package/framework/components/chui_inputs/chui_datetime/datetime.js +47 -39
  97. package/framework/components/chui_inputs/chui_datetime/styles.css +3 -3
  98. package/framework/components/chui_inputs/chui_email/email.js +48 -36
  99. package/framework/components/chui_inputs/chui_email/styles.css +11 -11
  100. package/framework/components/chui_inputs/chui_file/file.js +71 -44
  101. package/framework/components/chui_inputs/chui_file/styles.css +23 -19
  102. package/framework/components/chui_inputs/chui_hotkey/hotkey.js +101 -76
  103. package/framework/components/chui_inputs/chui_hotkey/styles.css +6 -6
  104. package/framework/components/chui_inputs/chui_masked/masked.js +83 -72
  105. package/framework/components/chui_inputs/chui_masked/styles.css +5 -5
  106. package/framework/components/chui_inputs/chui_mention/mention.js +87 -40
  107. package/framework/components/chui_inputs/chui_mention/styles.css +14 -8
  108. package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +242 -212
  109. package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +23 -15
  110. package/framework/components/chui_inputs/chui_number/number.js +84 -70
  111. package/framework/components/chui_inputs/chui_number/styles.css +13 -13
  112. package/framework/components/chui_inputs/chui_otp/otp.js +71 -62
  113. package/framework/components/chui_inputs/chui_otp/styles.css +5 -5
  114. package/framework/components/chui_inputs/chui_password/password.js +72 -56
  115. package/framework/components/chui_inputs/chui_password/styles.css +15 -15
  116. package/framework/components/chui_inputs/chui_radio_button/radio_button.js +37 -25
  117. package/framework/components/chui_inputs/chui_radio_button/styles.css +22 -22
  118. package/framework/components/chui_inputs/chui_rating/rating.js +54 -50
  119. package/framework/components/chui_inputs/chui_rating/styles.css +3 -3
  120. package/framework/components/chui_inputs/chui_select_box/select_box.js +132 -108
  121. package/framework/components/chui_inputs/chui_select_box/styles.css +21 -21
  122. package/framework/components/chui_inputs/chui_slider/slider.js +41 -38
  123. package/framework/components/chui_inputs/chui_slider/styles.css +7 -5
  124. package/framework/components/chui_inputs/chui_text/styles.css +14 -14
  125. package/framework/components/chui_inputs/chui_text/text.js +69 -52
  126. package/framework/components/chui_inputs/chui_text_area/styles.css +14 -14
  127. package/framework/components/chui_inputs/chui_text_area/text_area.js +59 -36
  128. package/framework/components/chui_inputs/chui_time/styles.css +18 -20
  129. package/framework/components/chui_inputs/chui_time/time.js +71 -49
  130. package/framework/components/chui_inputs/chui_toggle/styles.css +13 -6
  131. package/framework/components/chui_inputs/chui_toggle/toggle.js +27 -27
  132. package/framework/components/chui_json_editor/json_editor.js +137 -127
  133. package/framework/components/chui_json_editor/styles.css +5 -5
  134. package/framework/components/chui_json_viewer/json_viewer.js +133 -114
  135. package/framework/components/chui_json_viewer/styles.css +9 -8
  136. package/framework/components/chui_kanban/kanban.js +78 -60
  137. package/framework/components/chui_kanban/styles.css +8 -4
  138. package/framework/components/chui_kbd/kbd.js +12 -10
  139. package/framework/components/chui_kbd/styles.css +1 -1
  140. package/framework/components/chui_label/label.js +31 -29
  141. package/framework/components/chui_label/styles.css +3 -3
  142. package/framework/components/chui_link/link.js +36 -29
  143. package/framework/components/chui_link/styles.css +11 -4
  144. package/framework/components/chui_list/list.js +42 -38
  145. package/framework/components/chui_list/styles.css +4 -3
  146. package/framework/components/chui_markdown_editor/markdown_editor.js +125 -109
  147. package/framework/components/chui_markdown_editor/styles.css +5 -5
  148. package/framework/components/chui_media/audio.js +457 -364
  149. package/framework/components/chui_media/audio_styles.css +74 -37
  150. package/framework/components/chui_media/image.js +99 -64
  151. package/framework/components/chui_media/image_compare.js +86 -55
  152. package/framework/components/chui_media/image_compare_styles.css +5 -5
  153. package/framework/components/chui_media/image_styles.css +4 -4
  154. package/framework/components/chui_media/video.js +264 -171
  155. package/framework/components/chui_media/video_styles.css +57 -24
  156. package/framework/components/chui_menu_bar/menu_bar.js +67 -65
  157. package/framework/components/chui_menu_bar/styles.css +14 -12
  158. package/framework/components/chui_message_bar/message_bar.js +551 -0
  159. package/framework/components/chui_message_bar/styles.css +248 -0
  160. package/framework/components/chui_modal/modal.js +81 -56
  161. package/framework/components/chui_modal/styles.css +3 -2
  162. package/framework/components/chui_notification/notification.js +107 -69
  163. package/framework/components/chui_notification/notification_download.js +28 -77
  164. package/framework/components/chui_notification/notification_download_card.js +115 -0
  165. package/framework/components/chui_notification/notification_download_progress.css +5 -4
  166. package/framework/components/chui_notification/notification_download_progress.js +73 -105
  167. package/framework/components/chui_notification/notification_update.js +44 -37
  168. package/framework/components/chui_notification/status_plate.css +3 -3
  169. package/framework/components/chui_notification/status_plate.js +2 -2
  170. package/framework/components/chui_notification/styles.css +6 -1
  171. package/framework/components/chui_notification/styles_download.css +2 -2
  172. package/framework/components/chui_notification/styles_update.css +3 -3
  173. package/framework/components/chui_org_chart/org_chart.js +101 -62
  174. package/framework/components/chui_org_chart/styles.css +2 -2
  175. package/framework/components/chui_pagination/pagination.js +65 -30
  176. package/framework/components/chui_pagination/styles.css +1 -1
  177. package/framework/components/chui_paragraph/paragraph.js +2 -2
  178. package/framework/components/chui_paragraph/styles.css +3 -3
  179. package/framework/components/chui_popover/popover.js +77 -50
  180. package/framework/components/chui_popover/styles.css +1 -1
  181. package/framework/components/chui_popups/popups.js +210 -181
  182. package/framework/components/chui_popups/styles.css +7 -7
  183. package/framework/components/chui_print_button/print_button.js +48 -33
  184. package/framework/components/chui_progress_bar/progress_bar.js +49 -19
  185. package/framework/components/chui_progress_bar/styles.css +6 -6
  186. package/framework/components/chui_progress_ring/progress_ring.js +32 -30
  187. package/framework/components/chui_progress_ring/styles.css +1 -1
  188. package/framework/components/chui_qrcode/qrcode.js +85 -41
  189. package/framework/components/chui_query_builder/query_builder.js +263 -170
  190. package/framework/components/chui_query_builder/styles.css +4 -4
  191. package/framework/components/chui_radio_group/radio_group.js +36 -26
  192. package/framework/components/chui_radio_group/styles.css +2 -2
  193. package/framework/components/chui_result/result.js +41 -31
  194. package/framework/components/chui_result/styles.css +3 -3
  195. package/framework/components/chui_scheduler/scheduler.js +126 -104
  196. package/framework/components/chui_scheduler/styles.css +11 -7
  197. package/framework/components/chui_screen_spinner/screen_spinner.js +167 -0
  198. package/framework/components/chui_screen_spinner/styles.css +49 -0
  199. package/framework/components/chui_segmented_control/segmented_control.js +90 -27
  200. package/framework/components/chui_segmented_control/styles.css +32 -6
  201. package/framework/components/chui_settings/settings.js +160 -87
  202. package/framework/components/chui_settings/styles.css +4 -4
  203. package/framework/components/chui_shortcut_help/shortcut_help.js +82 -61
  204. package/framework/components/chui_sidebar_nav/sidebar_nav.js +132 -53
  205. package/framework/components/chui_sidebar_nav/styles.css +9 -3
  206. package/framework/components/chui_skeleton/skeleton.js +29 -24
  207. package/framework/components/chui_slideshow/slideshow.js +122 -103
  208. package/framework/components/chui_slideshow/styles.css +22 -16
  209. package/framework/components/chui_spinner/spinner.js +17 -17
  210. package/framework/components/chui_spinner/styles.css +0 -1
  211. package/framework/components/chui_split_button/split_button.js +53 -30
  212. package/framework/components/chui_split_button/styles.css +22 -6
  213. package/framework/components/chui_splitter/splitter.js +46 -39
  214. package/framework/components/chui_splitter/styles.css +2 -2
  215. package/framework/components/chui_statistic/statistic.js +111 -84
  216. package/framework/components/chui_status_bar/status_bar.js +11 -9
  217. package/framework/components/chui_status_bar/styles.css +2 -2
  218. package/framework/components/chui_stepper/stepper.js +230 -54
  219. package/framework/components/chui_stepper/styles.css +79 -14
  220. package/framework/components/chui_sticky_bar/sticky_bar.js +53 -17
  221. package/framework/components/chui_sticky_bar/styles.css +11 -7
  222. package/framework/components/chui_tabs/chui_tabs.js +100 -46
  223. package/framework/components/chui_tabs/styles.css +43 -15
  224. package/framework/components/chui_text_editor/styles.css +24 -23
  225. package/framework/components/chui_text_editor/text_editor.js +103 -79
  226. package/framework/components/chui_text_editor/text_editor_panel.js +428 -367
  227. package/framework/components/chui_theme_toggle/theme_toggle.js +46 -25
  228. package/framework/components/chui_timeline/styles.css +3 -1
  229. package/framework/components/chui_timeline/timeline.js +14 -12
  230. package/framework/components/chui_toast_queue/styles.css +11 -11
  231. package/framework/components/chui_toast_queue/toast_queue.js +82 -73
  232. package/framework/components/chui_toolbar/styles.css +2 -2
  233. package/framework/components/chui_toolbar/toolbar.js +20 -13
  234. package/framework/components/chui_tooltip/styles.css +2 -2
  235. package/framework/components/chui_tooltip/tooltip.js +40 -27
  236. package/framework/components/chui_tour/styles.css +12 -7
  237. package/framework/components/chui_tour/tour.js +132 -98
  238. package/framework/components/chui_transfer/styles.css +8 -7
  239. package/framework/components/chui_transfer/transfer.js +143 -123
  240. package/framework/components/chui_tree_table/styles.css +4 -4
  241. package/framework/components/chui_tree_table/tree_table.js +88 -74
  242. package/framework/components/chui_tree_view/styles.css +14 -10
  243. package/framework/components/chui_tree_view/tree_view.js +298 -253
  244. package/framework/components/chui_user_bar/styles.css +145 -0
  245. package/framework/components/chui_user_bar/user_bar.js +402 -0
  246. package/framework/components/chui_user_list_bar/styles.css +173 -0
  247. package/framework/components/chui_user_list_bar/user_list_bar.js +485 -0
  248. package/framework/components/chui_watermark/watermark.js +41 -33
  249. package/framework/components/chui_webview/styles.css +2 -2
  250. package/framework/components/chui_webview/webview.js +64 -52
  251. package/framework/components/chui_write_bar/styles.css +172 -0
  252. package/framework/components/chui_write_bar/write_bar.js +320 -0
  253. package/framework/main_window.js +1234 -0
  254. package/framework/modules/chui_a11y/chui_a11y.js +153 -123
  255. package/framework/modules/chui_animations/animations.js +105 -43
  256. package/framework/modules/chui_animations/motion.js +120 -0
  257. package/framework/modules/chui_animations/styles.css +37 -4
  258. package/framework/modules/chui_bridge/preload.js +36 -25
  259. package/framework/modules/chui_functions.js +69 -63
  260. package/framework/modules/chui_highlight/chui_highlight.js +25 -22
  261. package/framework/modules/chui_highlight/styles.css +13 -10
  262. package/framework/modules/chui_i18n/chui_i18n.js +12 -10
  263. package/framework/modules/chui_i18n/locales/a11y.js +5 -5
  264. package/framework/modules/chui_i18n/locales/app_layout.js +5 -5
  265. package/framework/modules/chui_i18n/locales/calendar.js +3 -3
  266. package/framework/modules/chui_i18n/locales/common.js +3 -3
  267. package/framework/modules/chui_i18n/locales/data.js +36 -26
  268. package/framework/modules/chui_i18n/locales/editors.js +40 -13
  269. package/framework/modules/chui_i18n/locales/feedback.js +65 -3
  270. package/framework/modules/chui_i18n/locales/forms.js +8 -8
  271. package/framework/modules/chui_i18n/locales/graphics.js +8 -8
  272. package/framework/modules/chui_i18n/locales/media.js +4 -4
  273. package/framework/modules/chui_i18n/locales/navigation.js +12 -8
  274. package/framework/modules/chui_i18n/locales/validate.js +3 -3
  275. package/framework/modules/chui_json/chui_json.js +11 -11
  276. package/framework/modules/chui_layout/chui_layout.js +12 -10
  277. package/framework/modules/chui_logger/chui_logger.js +47 -28
  278. package/framework/modules/chui_page/page.js +39 -33
  279. package/framework/modules/chui_palette/palette.js +61 -0
  280. package/framework/modules/chui_qr/chui_qr.js +179 -88
  281. package/framework/modules/chui_scrollbar/chui_scrollbar.js +79 -68
  282. package/framework/modules/chui_scrollbar/styles.css +4 -2
  283. package/framework/modules/chui_services/chui_channels.js +27 -13
  284. package/framework/modules/chui_services/chui_services.js +47 -39
  285. package/framework/modules/chui_services/desktop.js +108 -101
  286. package/framework/modules/chui_sortable/chui_sortable.js +33 -28
  287. package/framework/modules/chui_validate/chui_validate.js +10 -7
  288. package/framework/tray_bar/chui_menu_items.js +136 -46
  289. package/index.d.ts +5046 -0
  290. package/index.js +199 -1254
  291. package/package.json +81 -68
  292. package/framework/components/telegram_bot/chui_telegram_bot.js +0 -184
@@ -1,6 +1,6 @@
1
- const {setStyles} = require("../../../modules/chui_functions");
2
- const {Validate} = require("../../../modules/chui_validate/chui_validate");
3
- const {I18n} = require("../../../modules/chui_i18n/chui_i18n");
1
+ const { setStyles } = require("../../../modules/chui_functions");
2
+ const { Validate } = require("../../../modules/chui_validate/chui_validate");
3
+ const { I18n } = require("../../../modules/chui_i18n/chui_i18n");
4
4
 
5
5
  /**
6
6
  * Поле с маской: позиции значения заданы шаблоном, литералы маски подставляются сами.
@@ -151,37 +151,39 @@ class MaskedInput {
151
151
  #error = document.createElement("chui_error_message");
152
152
  #id = undefined;
153
153
  #name = undefined;
154
- #title_text = undefined;
155
- #label_text = undefined;
154
+ #titleText = undefined;
155
+ #labelText = undefined;
156
156
  #mask = "";
157
157
  #rendered = "";
158
- #placeholder_text = "";
159
- #placeholder_default = false;
158
+ #placeholderText = "";
159
+ #placeholderDefault = false;
160
160
  #disabled = false;
161
- #read_only = false;
161
+ #readOnly = false;
162
162
  #listeners = [];
163
- #on_change = undefined;
164
-
165
- constructor(options = {
166
- id: String(),
167
- name: String(),
168
- title: String(),
169
- label: String(),
170
- hint: String(),
171
- mask: String(),
172
- placeholder: String(),
173
- value: String(),
174
- disabled: Boolean(),
175
- readOnly: Boolean(),
176
- changeListener: undefined,
177
- onChange: undefined
178
- }) {
163
+ #onChange = undefined;
164
+
165
+ constructor(
166
+ options = {
167
+ id: String(),
168
+ name: String(),
169
+ title: String(),
170
+ label: String(),
171
+ hint: String(),
172
+ mask: String(),
173
+ placeholder: String(),
174
+ value: String(),
175
+ disabled: Boolean(),
176
+ readOnly: Boolean(),
177
+ changeListener: undefined,
178
+ onChange: undefined,
179
+ }
180
+ ) {
179
181
  setStyles(__dirname + "/styles.css", "chUiJS_MaskedInput");
180
182
  MaskedInput.#counter += 1;
181
183
  this.#id = options.id === undefined ? `chui_masked_input_${MaskedInput.#counter}` : options.id;
182
184
  this.#name = options.name;
183
- this.#label_text = options.label;
184
- this.#on_change = options.onChange;
185
+ this.#labelText = options.label;
186
+ this.#onChange = options.onChange;
185
187
  this.#mask = options.mask === undefined ? MaskedInput.MASKS.PHONE : String(options.mask);
186
188
  this.#root.id = this.#id;
187
189
  this.#label.className = "masked_label";
@@ -209,18 +211,26 @@ class MaskedInput {
209
211
  this.#root.appendChild(this.#status);
210
212
  if (options.title !== undefined) this.setTitle(options.title);
211
213
  else this.#label.hidden = true;
212
- this.setLabel(this.#label_text === undefined ? I18n.t("forms.maskedLabel") : this.#label_text);
214
+ this.setLabel(this.#labelText === undefined ? I18n.t("forms.maskedLabel") : this.#labelText);
213
215
  if (options.hint !== undefined) this.setHint(options.hint);
214
- this.setPlaceholder(options.placeholder === undefined
215
- ? MaskedInput.placeholderText(this.#mask) : options.placeholder);
216
+ this.setPlaceholder(
217
+ options.placeholder === undefined ? MaskedInput.placeholderText(this.#mask) : options.placeholder
218
+ );
216
219
  // Флаг ставим после `setPlaceholder`: он же отмечает образец как заданный вручную
217
- this.#placeholder_default = options.placeholder === undefined;
220
+ this.#placeholderDefault = options.placeholder === undefined;
218
221
  // Текст «неверный формат» у маски значит «поле не дозаполнено» — так и говорим
219
- const messages = Object.assign({pattern: I18n.t("forms.maskedIncomplete")}, options.messages);
220
- Validate.installField(this, Object.assign({}, options, {
221
- pattern: MaskedInput.maskPattern(this.#mask),
222
- messages: messages,
223
- }), this.#root, this.#error, () => this.#rendered, this.#main);
222
+ const messages = Object.assign({ pattern: I18n.t("forms.maskedIncomplete") }, options.messages);
223
+ Validate.installField(
224
+ this,
225
+ Object.assign({}, options, {
226
+ pattern: MaskedInput.maskPattern(this.#mask),
227
+ messages: messages,
228
+ }),
229
+ this.#root,
230
+ this.#error,
231
+ () => this.#rendered,
232
+ this.#main
233
+ );
224
234
  if (options.value !== undefined && options.value !== "") this.setValue(options.value);
225
235
  this.setReadOnly(options.readOnly === true);
226
236
  this.setDisabled(options.disabled === true);
@@ -237,12 +247,12 @@ class MaskedInput {
237
247
  }
238
248
 
239
249
  getTitle() {
240
- return this.#title_text;
250
+ return this.#titleText;
241
251
  }
242
252
 
243
253
  /** Доступное имя поля, заданное в `label` */
244
254
  getLabel() {
245
- return this.#label_text;
255
+ return this.#labelText;
246
256
  }
247
257
 
248
258
  getMask() {
@@ -265,7 +275,7 @@ class MaskedInput {
265
275
  }
266
276
 
267
277
  getPlaceholder() {
268
- return this.#placeholder_text;
278
+ return this.#placeholderText;
269
279
  }
270
280
 
271
281
  getDisabled() {
@@ -273,7 +283,7 @@ class MaskedInput {
273
283
  }
274
284
 
275
285
  isReadOnly() {
276
- return this.#read_only;
286
+ return this.#readOnly;
277
287
  }
278
288
 
279
289
  // SET
@@ -292,7 +302,7 @@ class MaskedInput {
292
302
 
293
303
  /** Подпись над полем; `undefined` её убирает (имя тогда даёт `label`) */
294
304
  setTitle(text = undefined) {
295
- this.#title_text = text;
305
+ this.#titleText = text;
296
306
  if (text === undefined || text === "") {
297
307
  this.#label.hidden = true;
298
308
  this.#label.innerText = "";
@@ -309,8 +319,8 @@ class MaskedInput {
309
319
 
310
320
  /** Имя поля, когда подписи в разметке нет */
311
321
  setLabel(text = undefined) {
312
- this.#label_text = text;
313
- if (this.#title_text === undefined || this.#title_text === "") {
322
+ this.#labelText = text;
323
+ if (this.#titleText === undefined || this.#titleText === "") {
314
324
  if (text === undefined) this.#input.removeAttribute("aria-label");
315
325
  else this.#input.setAttribute("aria-label", String(text));
316
326
  }
@@ -332,9 +342,9 @@ class MaskedInput {
332
342
  }
333
343
 
334
344
  setPlaceholder(text = String()) {
335
- this.#placeholder_text = text === undefined ? "" : String(text);
336
- this.#placeholder_default = false;
337
- this.#input.placeholder = this.#placeholder_text;
345
+ this.#placeholderText = text === undefined ? "" : String(text);
346
+ this.#placeholderDefault = false;
347
+ this.#input.placeholder = this.#placeholderText;
338
348
  return this;
339
349
  }
340
350
 
@@ -348,10 +358,10 @@ class MaskedInput {
348
358
  const rules = this.getRules === undefined ? undefined : this.getRules();
349
359
  if (rules !== undefined) rules.pattern = MaskedInput.maskPattern(this.#mask);
350
360
  // Своя подсказка-образец остаётся, а вид маски по умолчанию пересобирается
351
- if (this.#placeholder_default) {
352
- this.#placeholder_text = MaskedInput.placeholderText(this.#mask);
353
- this.#input.placeholder = this.#placeholder_text;
354
- this.#placeholder_default = true;
361
+ if (this.#placeholderDefault) {
362
+ this.#placeholderText = MaskedInput.placeholderText(this.#mask);
363
+ this.#input.placeholder = this.#placeholderText;
364
+ this.#placeholderDefault = true;
355
365
  }
356
366
  return this;
357
367
  }
@@ -381,10 +391,10 @@ class MaskedInput {
381
391
  }
382
392
 
383
393
  /** Режим показа: значение видно, но поле не принимает нажатия */
384
- setReadOnly(read_only = Boolean()) {
385
- this.#read_only = read_only === true;
386
- this.#root.classList.toggle("masked_readonly", this.#read_only);
387
- this.#input.readOnly = this.#read_only;
394
+ setReadOnly(readOnly = Boolean()) {
395
+ this.#readOnly = readOnly === true;
396
+ this.#root.classList.toggle("masked_readonly", this.#readOnly);
397
+ this.#input.readOnly = this.#readOnly;
388
398
  return this;
389
399
  }
390
400
 
@@ -414,8 +424,8 @@ class MaskedInput {
414
424
 
415
425
  // === ВНУТРЕННЕЕ ===
416
426
  #accessibleName() {
417
- if (this.#title_text !== undefined && this.#title_text !== "") return this.#title_text;
418
- if (this.#label_text !== undefined && this.#label_text !== "") return this.#label_text;
427
+ if (this.#titleText !== undefined && this.#titleText !== "") return this.#titleText;
428
+ if (this.#labelText !== undefined && this.#labelText !== "") return this.#labelText;
419
429
  return I18n.t("forms.maskedLabel");
420
430
  }
421
431
 
@@ -466,7 +476,7 @@ class MaskedInput {
466
476
 
467
477
  #notify() {
468
478
  for (const listener of [...this.#listeners]) listener(this.#rendered, this);
469
- if (this.#on_change !== undefined) this.#on_change(this.#rendered, this);
479
+ if (this.#onChange !== undefined) this.#onChange(this.#rendered, this);
470
480
  }
471
481
 
472
482
  #announce(text = String()) {
@@ -479,35 +489,36 @@ class MaskedInput {
479
489
  * и раскладываем по позициям маски заново.
480
490
  */
481
491
  #onInput = () => {
482
- if (this.#disabled || this.#read_only) return;
492
+ if (this.#disabled || this.#readOnly) return;
483
493
  const next = this.#input.value;
484
494
  const previous = this.#rendered;
485
495
  let start = 0;
486
496
  while (start < previous.length && start < next.length && previous[start] === next[start]) start += 1;
487
- let previous_end = previous.length;
488
- let next_end = next.length;
489
- while (previous_end > start && next_end > start && previous[previous_end - 1] === next[next_end - 1]) {
490
- previous_end -= 1;
491
- next_end -= 1;
497
+ let previousEnd = previous.length;
498
+ let nextEnd = next.length;
499
+ while (previousEnd > start && nextEnd > start && previous[previousEnd - 1] === next[nextEnd - 1]) {
500
+ previousEnd -= 1;
501
+ nextEnd -= 1;
492
502
  }
493
- const inserted_text = next.slice(start, next_end);
503
+ const insertedText = next.slice(start, nextEnd);
494
504
  const data = MaskedInput.#collect(this.#mask, previous, 0);
495
505
  const before = MaskedInput.#placeholders(this.#mask, start);
496
- const removed = MaskedInput.#placeholders(this.#mask, previous_end) - before;
497
- const inserted = MaskedInput.#collect(this.#mask, inserted_text, start);
506
+ const removed = MaskedInput.#placeholders(this.#mask, previousEnd) - before;
507
+ const inserted = MaskedInput.#collect(this.#mask, insertedText, start);
498
508
  const list = data.slice(0, before).concat(inserted, data.slice(before + removed));
499
509
  const value = MaskedInput.#format(this.#mask, list);
500
- const complete_before = this.isComplete();
510
+ const completeBefore = this.isComplete();
501
511
  const changed = this.#apply(value);
502
512
  const caret = this.#caretAfter(value, before + inserted.length);
503
513
  this.#input.setSelectionRange(caret, caret);
504
514
  // Отклонённый символ и заполненная маска иначе не заметны: поле просто ничего не делает.
505
515
  // Литералы самой маски («-», «(») за отказ не считаем — их место в шаблоне.
506
- const junk = [...inserted_text].filter((symbol) =>
507
- symbol !== "" && !this.#accepts(symbol) && !this.#mask.includes(symbol));
516
+ const junk = [...insertedText].filter(
517
+ (symbol) => symbol !== "" && !this.#accepts(symbol) && !this.#mask.includes(symbol)
518
+ );
508
519
  if (junk.length > 0) {
509
- this.#announce(I18n.t("forms.maskedAllowedOnly", {value: this.#allowedText()}));
510
- } else if (!complete_before && this.isComplete()) {
520
+ this.#announce(I18n.t("forms.maskedAllowedOnly", { value: this.#allowedText() }));
521
+ } else if (!completeBefore && this.isComplete()) {
511
522
  this.#announce(I18n.t("forms.maskedComplete"));
512
523
  } else if (this.#status.innerText !== "") {
513
524
  this.#announce("");
@@ -520,7 +531,7 @@ class MaskedInput {
520
531
  // Backspace снимает ближайший значимый символ слева, Delete — справа (как в тексте).
521
532
  // Иначе каретка сразу за литералом удаляла бы символ справа от себя.
522
533
  #onKeyDown = (event) => {
523
- if (this.#disabled || this.#read_only) return;
534
+ if (this.#disabled || this.#readOnly) return;
524
535
  if (event.key !== "Backspace" && event.key !== "Delete") return;
525
536
  const caret = this.#input.selectionStart;
526
537
  if (caret === null || caret !== this.#input.selectionEnd) return;
@@ -542,4 +553,4 @@ class MaskedInput {
542
553
  };
543
554
  }
544
555
 
545
- exports.MaskedInput = MaskedInput
556
+ exports.MaskedInput = MaskedInput;
@@ -5,18 +5,18 @@ chui_masked_input {
5
5
  карточку. Токены переопределены у корня поля, поэтому действуют только внутри него
6
6
  (тот же приём у полосы меню-бара). */
7
7
  --control_padding: var(--control_padding_sm);
8
- --main_padding: var(--main_padding_sm);
8
+ --block_padding: var(--block_padding_sm);
9
9
  display: flex;
10
10
  flex-direction: column;
11
11
  width: var(--control_width);
12
12
  height: max-content;
13
- margin: var(--margin);
13
+ margin: var(--block_margin);
14
14
  }
15
15
 
16
16
  .masked_label {
17
17
  display: block;
18
18
  width: max-content;
19
- margin: 0 0 var(--margin);
19
+ margin: 0 0 var(--block_margin);
20
20
  color: var(--text_color);
21
21
  font-size: var(--font_labels_size);
22
22
  font-weight: 500;
@@ -33,9 +33,9 @@ chui_masked_input {
33
33
  width: -webkit-fill-available;
34
34
  min-height: var(--control_height);
35
35
  margin: 0;
36
- padding: var(--main_padding);
36
+ padding: var(--block_padding);
37
37
  border: 1px solid var(--border_color);
38
- border-radius: var(--border_radius);
38
+ border-radius: var(--radius_sm);
39
39
  background: var(--element_background);
40
40
  color: var(--text_color);
41
41
  }
@@ -1,8 +1,8 @@
1
- const {setStyles, dropdownPlacement} = require('../../../modules/chui_functions');
2
- const {Validate} = require('../../../modules/chui_validate/chui_validate');
3
- const {ComboboxKeyboard} = require('../../../modules/chui_a11y/chui_a11y');
4
- const {Icon} = require('../../chui_icons/icons');
5
- const {I18n} = require('../../../modules/chui_i18n/chui_i18n');
1
+ const { setStyles, dropdownPlacement } = require("../../../modules/chui_functions");
2
+ const { Validate } = require("../../../modules/chui_validate/chui_validate");
3
+ const { ComboboxKeyboard } = require("../../../modules/chui_a11y/chui_a11y");
4
+ const { Icon } = require("../../chui_icons/icons");
5
+ const { I18n } = require("../../../modules/chui_i18n/chui_i18n");
6
6
 
7
7
  /** Сколько подсказок показывать за раз */
8
8
  const DEFAULT_LIMIT = 6;
@@ -51,7 +51,7 @@ class Mention {
51
51
  #dropdown = document.createElement("mention_dropdown");
52
52
  #hint = document.createElement("mention_hint");
53
53
  // Объявление для скринридера: класс общей утилиты скрытия (по нему его узнают стенды)
54
- #status = Object.assign(document.createElement("chui_visually_hidden"), {className: "chui_visually_hidden"});
54
+ #status = Object.assign(document.createElement("chui_visually_hidden"), { className: "chui_visually_hidden" });
55
55
  #a11y = undefined;
56
56
  #items = [];
57
57
  #trigger = "@";
@@ -59,21 +59,34 @@ class Mention {
59
59
  #multiline = false;
60
60
  #placeholder = "";
61
61
  #name = undefined;
62
- #label_text = undefined;
63
- #hint_text = undefined;
62
+ #labelText = undefined;
63
+ #hintText = undefined;
64
64
  #disabled = false;
65
- #change_listeners = [];
65
+ #changeListeners = [];
66
66
 
67
- constructor(options = {
68
- name: String(), title: String(), label: String(), hint: String(), placeholder: String(),
69
- width: String(), multiline: Boolean(), rows: Number(), items: [], trigger: String(),
70
- limit: Number(), disabled: Boolean(), value: String(),
71
- required: Boolean(), changeListener: undefined
72
- }) {
67
+ constructor(
68
+ options = {
69
+ name: String(),
70
+ title: String(),
71
+ label: String(),
72
+ hint: String(),
73
+ placeholder: String(),
74
+ width: String(),
75
+ multiline: Boolean(),
76
+ rows: Number(),
77
+ items: [],
78
+ trigger: String(),
79
+ limit: Number(),
80
+ disabled: Boolean(),
81
+ value: String(),
82
+ required: Boolean(),
83
+ changeListener: undefined,
84
+ }
85
+ ) {
73
86
  setStyles(__dirname + "/styles.css", "chUiJS_Mention");
74
87
  this.#name = options.name;
75
- this.#label_text = options.label;
76
- this.#hint_text = options.hint;
88
+ this.#labelText = options.label;
89
+ this.#hintText = options.hint;
77
90
  this.#placeholder = options.placeholder === undefined ? "" : options.placeholder;
78
91
  this.#multiline = options.multiline === true;
79
92
  if (options.trigger !== undefined) this.#trigger = options.trigger;
@@ -100,7 +113,8 @@ class Mention {
100
113
  this.#dropdown.setAttribute("aria-label", I18n.t("forms.mentionOptions"));
101
114
  this.#hint.id = `${this.#id}_hint`;
102
115
  this.#hint.className = "mention_hint";
103
- this.#hint.innerText = this.#hint_text === undefined ? I18n.t("forms.mentionHint", {trigger: this.#trigger}) : this.#hint_text;
116
+ this.#hint.innerText =
117
+ this.#hintText === undefined ? I18n.t("forms.mentionHint", { trigger: this.#trigger }) : this.#hintText;
104
118
  this.#input.setAttribute("aria-describedby", this.#hint.id);
105
119
  this.#status.setAttribute("role", "status");
106
120
  this.#status.setAttribute("aria-live", "polite");
@@ -115,7 +129,7 @@ class Mention {
115
129
  dropdown: this.#dropdown,
116
130
  optionSelector: ".mention_option",
117
131
  onEscape: () => this.#setDropdown(false),
118
- onOpen: () => this.#syncDropdown()
132
+ onOpen: () => this.#syncDropdown(),
119
133
  });
120
134
  this.#input.addEventListener("input", this.#onInput);
121
135
  this.#input.addEventListener("keyup", this.#onCaretMove);
@@ -133,15 +147,31 @@ class Mention {
133
147
  }
134
148
 
135
149
  // GET
136
- getId() { return this.#id; }
137
- getName() { return this.#name; }
138
- getTitle() { return this.#label === undefined ? undefined : this.#label.innerText; }
150
+ getId() {
151
+ return this.#id;
152
+ }
153
+ getName() {
154
+ return this.#name;
155
+ }
156
+ getTitle() {
157
+ return this.#label === undefined ? undefined : this.#label.innerText;
158
+ }
139
159
  /** Текст поля целиком — упоминания остаются в нём как набранные */
140
- getValue() { return this.#input.value; }
141
- getItems() { return [...this.#items]; }
142
- getTrigger() { return this.#trigger; }
143
- isDisabled() { return this.#disabled; }
144
- getInput() { return this.#input; }
160
+ getValue() {
161
+ return this.#input.value;
162
+ }
163
+ getItems() {
164
+ return [...this.#items];
165
+ }
166
+ getTrigger() {
167
+ return this.#trigger;
168
+ }
169
+ isDisabled() {
170
+ return this.#disabled;
171
+ }
172
+ getInput() {
173
+ return this.#input;
174
+ }
145
175
 
146
176
  /**
147
177
  * Упоминания по текущему тексту: для каждого пункта ищется `триггер + подпись`.
@@ -154,7 +184,11 @@ class Mention {
154
184
  const token = this.#trigger + String(item.title);
155
185
  let index = text.indexOf(token);
156
186
  while (index !== -1) {
157
- found.push({title: item.title, value: item.value === undefined ? item.title : item.value, index: index});
187
+ found.push({
188
+ title: item.title,
189
+ value: item.value === undefined ? item.title : item.value,
190
+ index: index,
191
+ });
158
192
  index = text.indexOf(token, index + token.length);
159
193
  }
160
194
  }
@@ -188,7 +222,8 @@ class Mention {
188
222
  }
189
223
  setTrigger(trigger = String()) {
190
224
  this.#trigger = trigger;
191
- if (this.#hint_text === undefined) this.#hint.innerText = I18n.t("forms.mentionHint", {trigger: this.#trigger});
225
+ if (this.#hintText === undefined)
226
+ this.#hint.innerText = I18n.t("forms.mentionHint", { trigger: this.#trigger });
192
227
  this.#setDropdown(false);
193
228
  return this;
194
229
  }
@@ -198,7 +233,7 @@ class Mention {
198
233
  return this;
199
234
  }
200
235
  setHint(text = String()) {
201
- this.#hint_text = text;
236
+ this.#hintText = text;
202
237
  this.#hint.innerText = text;
203
238
  this.#hint.style.display = String(text).trim() === "" ? "none" : "";
204
239
  return this;
@@ -215,10 +250,12 @@ class Mention {
215
250
  return this;
216
251
  }
217
252
  addChangeListener(listener = () => {}) {
218
- this.#change_listeners.push(listener);
253
+ this.#changeListeners.push(listener);
219
254
  return this;
220
255
  }
221
- set() { return this.#root; }
256
+ set() {
257
+ return this.#root;
258
+ }
222
259
 
223
260
  // === ВНУТРЕННЕЕ ===
224
261
  #caret() {
@@ -239,17 +276,20 @@ class Mention {
239
276
  if (/\s/.test(query)) return undefined;
240
277
  const before = index === 0 ? "" : text[index - 1];
241
278
  if (before !== "" && BEFORE_TRIGGER.test(before) === false) return undefined;
242
- return {start: index, query: query};
279
+ return { start: index, query: query };
243
280
  }
244
281
  #syncFieldAria() {
245
- const has_title = this.#label !== undefined && this.#label.innerText !== "";
246
- if (has_title) {
282
+ const hasTitle = this.#label !== undefined && this.#label.innerText !== "";
283
+ if (hasTitle) {
247
284
  this.#input.setAttribute("aria-labelledby", this.#label.id);
248
285
  this.#input.removeAttribute("aria-label");
249
286
  return;
250
287
  }
251
288
  this.#input.removeAttribute("aria-labelledby");
252
- this.#input.setAttribute("aria-label", this.#label_text === undefined ? I18n.t("forms.mentionLabel") : this.#label_text);
289
+ this.#input.setAttribute(
290
+ "aria-label",
291
+ this.#labelText === undefined ? I18n.t("forms.mentionLabel") : this.#labelText
292
+ );
253
293
  }
254
294
  /** Пересобрать подсказки по тексту до каретки и открыть список, если есть совпадения */
255
295
  #syncDropdown() {
@@ -314,7 +354,7 @@ class Mention {
314
354
  this.#input.value = value.slice(0, token.start) + inserted + value.slice(caret);
315
355
  this.#setCaret(token.start + inserted.length);
316
356
  this.#setDropdown(false);
317
- this.#announce(I18n.t("forms.mentionInserted", {value: item.title}));
357
+ this.#announce(I18n.t("forms.mentionInserted", { value: item.title }));
318
358
  this.#emit();
319
359
  this.#input.focus();
320
360
  return true;
@@ -325,7 +365,7 @@ class Mention {
325
365
  }
326
366
  #emit() {
327
367
  const text = this.getValue();
328
- for (const listener of [...this.#change_listeners]) listener(text);
368
+ for (const listener of [...this.#changeListeners]) listener(text);
329
369
  }
330
370
 
331
371
  // === ОБРАБОТЧИКИ ===
@@ -335,7 +375,14 @@ class Mention {
335
375
  };
336
376
  /** Каретка переехала (стрелки, щелчок, Home/End) — упоминание под ней могло измениться */
337
377
  #onCaretMove = (event) => {
338
- if (event.type === "keyup" && event.key !== "ArrowLeft" && event.key !== "ArrowRight" && event.key !== "Home" && event.key !== "End") return;
378
+ if (
379
+ event.type === "keyup" &&
380
+ event.key !== "ArrowLeft" &&
381
+ event.key !== "ArrowRight" &&
382
+ event.key !== "Home" &&
383
+ event.key !== "End"
384
+ )
385
+ return;
339
386
  if (document.activeElement !== this.#input) return;
340
387
  this.#syncDropdown();
341
388
  };
@@ -348,4 +395,4 @@ class Mention {
348
395
  };
349
396
  }
350
397
 
351
- exports.Mention = Mention
398
+ exports.Mention = Mention;
@@ -5,11 +5,11 @@ chui_mention {
5
5
  карточку. Токены переопределены у корня поля, поэтому действуют только внутри него
6
6
  (тот же приём у полосы меню-бара). */
7
7
  --control_padding: var(--control_padding_sm);
8
- --main_padding: var(--main_padding_sm);
8
+ --block_padding: var(--block_padding_sm);
9
9
  display: flex;
10
10
  flex-direction: column;
11
11
  height: max-content;
12
- margin: var(--margin);
12
+ margin: var(--block_margin);
13
13
  width: var(--control_width);
14
14
  font-size: var(--font_default_size);
15
15
  color: var(--text_color);
@@ -18,7 +18,7 @@ chui_mention {
18
18
  .mention_label {
19
19
  height: max-content;
20
20
  width: max-content;
21
- margin: 0 0 var(--margin);
21
+ margin: 0 0 var(--block_margin);
22
22
  font-size: var(--font_labels_size);
23
23
  font-weight: 500;
24
24
  color: var(--text_color);
@@ -31,7 +31,7 @@ mention_field {
31
31
  flex-direction: column;
32
32
  height: max-content;
33
33
  width: -webkit-fill-available;
34
- border-radius: var(--border_radius);
34
+ border-radius: var(--radius_sm);
35
35
  background: var(--element_background);
36
36
  border: 1px solid var(--border_color);
37
37
  }
@@ -41,10 +41,10 @@ mention_field {
41
41
  box-sizing: border-box;
42
42
  width: 100%;
43
43
  margin: 0;
44
- padding: var(--main_padding);
44
+ padding: var(--block_padding);
45
45
  background: transparent;
46
46
  border: none;
47
- border-radius: var(--border_radius);
47
+ border-radius: var(--radius_sm);
48
48
  color: var(--text_color);
49
49
  font-size: var(--font_default_size);
50
50
  font-family: inherit;
@@ -74,7 +74,7 @@ mention_dropdown {
74
74
  backdrop-filter: var(--global_blur);
75
75
  -webkit-backdrop-filter: var(--global_blur);
76
76
  border: 1px solid var(--border_color);
77
- border-radius: var(--border_radius);
77
+ border-radius: var(--radius_sm);
78
78
  box-shadow: var(--box_shadow_main);
79
79
  /* Прокрутка списка подсказок; `overflow: overlay` удалён в Chromium 122 */
80
80
  overflow: hidden auto;
@@ -87,6 +87,12 @@ mention_dropdown[hidden] {
87
87
  display: none;
88
88
  }
89
89
 
90
+ /* Появление списка подсказок: общий кадр панели, он же проигрывается заново при снятии
91
+ `hidden`. Прежде список появлялся без движения вовсе */
92
+ mention_dropdown {
93
+ animation: chui_panel_in var(--motion_base) var(--motion_spring);
94
+ }
95
+
90
96
  .mention_option {
91
97
  display: flex;
92
98
  flex-direction: row;
@@ -132,7 +138,7 @@ mention_dropdown[hidden] {
132
138
 
133
139
  .mention_hint {
134
140
  display: block;
135
- margin: var(--margin);
141
+ margin: var(--block_margin);
136
142
  color: var(--text_color_disabled);
137
143
  font-size: var(--font_labels_size);
138
144
  }