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
@@ -11,11 +11,11 @@ chui_vp_main {
11
11
  display: block;
12
12
  width: 100%;
13
13
  border-radius: var(--radius_md);
14
- background: var(--ap_main_background);
14
+ background: var(--player_background);
15
15
  border: 1px solid var(--border_color);
16
16
  overflow: hidden;
17
- --seek-before-width: 0%;
18
- --volume-before-width: 0%;
17
+ --seek_before_width: 0%;
18
+ --volume_before_width: 0%;
19
19
  }
20
20
 
21
21
  /* Кадр занимает всю ширину, а высоту считает соотношение сторон: прежде элемент показывал
@@ -50,7 +50,7 @@ chui_vp_panel {
50
50
  `pointer-events` гасим вместе с прозрачностью — иначе невидимая полоса ловит щелчки */
51
51
  opacity: 0;
52
52
  pointer-events: none;
53
- transition: opacity var(--transition_time) var(--ease_out);
53
+ transition: opacity var(--motion_fast) var(--motion_ease);
54
54
  }
55
55
 
56
56
  chui_vp_main.vp_panel_open chui_vp_panel {
@@ -64,7 +64,9 @@ chui_vp_main.vp_controls_off chui_vp_panel {
64
64
  }
65
65
 
66
66
  /* КНОПКИ: площадка 32px с глифом 18px */
67
- chui_vp_play_pause, chui_vp_volume_icon, chui_vp_full_mode {
67
+ chui_vp_play_pause,
68
+ chui_vp_volume_icon,
69
+ chui_vp_full_mode {
68
70
  display: flex;
69
71
  align-items: center;
70
72
  justify-content: center;
@@ -76,6 +78,14 @@ chui_vp_play_pause, chui_vp_volume_icon, chui_vp_full_mode {
76
78
  border-radius: var(--radius_sm);
77
79
  }
78
80
 
81
+ /* Кегль глифа — ключом плеера: у `chui_icon` есть своё правило (размер шапки),
82
+ поэтому размер задаётся значку, а не кнопке. Прежде число стояло в коде */
83
+ chui_vp_play_pause chui_icon,
84
+ chui_vp_volume_icon chui_icon,
85
+ chui_vp_full_mode chui_icon {
86
+ font-size: var(--player_icon_size);
87
+ }
88
+
79
89
  /* Главная кнопка — светлый круг с глифом цвета подложки, как у Audio: он адаптивен к схеме
80
90
  и не спорит с акцентом полосы прогресса */
81
91
  chui_vp_play_pause {
@@ -97,12 +107,13 @@ chui_vp_play_pause:hover {
97
107
  }
98
108
 
99
109
  chui_vp_play_pause:active {
100
- transform: scale(.96);
110
+ transform: scale(0.96);
101
111
  }
102
112
 
103
113
  /* Глифы отвечают на курсор акцентом — у всех, кроме главной кнопки: она сама светлая,
104
114
  и её глиф должен остаться читаемым */
105
- chui_vp_volume_icon:hover chui_icon, chui_vp_full_mode:hover chui_icon {
115
+ chui_vp_volume_icon:hover chui_icon,
116
+ chui_vp_full_mode:hover chui_icon {
106
117
  color: var(--blue_prime_background);
107
118
  }
108
119
 
@@ -113,7 +124,7 @@ chui_vp_play_pause:active chui_icon {
113
124
 
114
125
  chui_vp_volume_icon:active,
115
126
  chui_vp_full_mode:active {
116
- transform: scale(.94);
127
+ transform: scale(0.94);
117
128
  }
118
129
 
119
130
  chui_vp_volume_icon:active chui_icon,
@@ -123,8 +134,11 @@ chui_vp_full_mode:active chui_icon {
123
134
 
124
135
  /* Кнопки полосы — кастомные теги, поэтому обводку фокуса рисуем сами.
125
136
  `outline` не сдвигает вёрстку */
126
- chui_vp_play_pause:focus-visible, chui_vp_volume_icon:focus-visible,
127
- chui_vp_full_mode:focus-visible, #chui_vp_seek:focus-visible, #chui_vp_volume:focus-visible {
137
+ chui_vp_play_pause:focus-visible,
138
+ chui_vp_volume_icon:focus-visible,
139
+ chui_vp_full_mode:focus-visible,
140
+ #chui_vp_seek:focus-visible,
141
+ #chui_vp_volume:focus-visible {
128
142
  outline: var(--focus_outline);
129
143
  outline-offset: var(--focus_outline_offset);
130
144
  }
@@ -152,7 +166,7 @@ chui_vp_seek_buf {
152
166
  width: 0;
153
167
  height: var(--player_track_height);
154
168
  border-radius: var(--radius_pill);
155
- background: var(--ap_slider_buf_background);
169
+ background: var(--player_slider_buffer_background);
156
170
  position: absolute;
157
171
  /* На те же полголовки ползунка, что и дорожка: иначе буфер выступал бы слева */
158
172
  inset-inline-start: 6px;
@@ -162,7 +176,8 @@ chui_vp_seek_buf {
162
176
  /* Прогресс и громкость — та же шкала, что у Audio: дорожка `--player_track_height`,
163
177
  заливка градиентом по доле, ползунок виден и в покое и не выезжает за дорожку
164
178
  (`padding-inline` на половину кружка) */
165
- #chui_vp_seek, #chui_vp_volume {
179
+ #chui_vp_seek,
180
+ #chui_vp_volume {
166
181
  margin: 0;
167
182
  -webkit-appearance: none;
168
183
  border-radius: var(--radius_pill);
@@ -194,24 +209,30 @@ chui_vp_seek_buf {
194
209
  }
195
210
 
196
211
  #chui_vp_seek {
197
- background-image: linear-gradient(to right,
198
- var(--blue_prime_background) 0 var(--seek-before-width, 0%),
199
- var(--ap_slider_background) var(--seek-before-width, 0%) 100%);
212
+ background-image: linear-gradient(
213
+ to right,
214
+ var(--blue_prime_background) 0 var(--seek_before_width, 0%),
215
+ var(--player_slider_background) var(--seek_before_width, 0%) 100%
216
+ );
200
217
  }
201
218
 
202
219
  /* Громкость — ступень звука, а не время: заливка нейтральная, чтобы не читалась второй
203
220
  полосой прогресса */
204
221
  #chui_vp_volume {
205
- background-image: linear-gradient(to right,
206
- var(--text_color) 0 var(--volume-before-width, 0%),
207
- var(--ap_slider_background) var(--volume-before-width, 0%) 100%);
222
+ background-image: linear-gradient(
223
+ to right,
224
+ var(--text_color) 0 var(--volume_before_width, 0%),
225
+ var(--player_slider_background) var(--volume_before_width, 0%) 100%
226
+ );
208
227
  }
209
228
 
210
229
  /* Выключенная громкость (нет звука) — заливка ступени приглушается, как у Audio */
211
230
  #chui_vp_volume:disabled {
212
- background-image: linear-gradient(to right,
213
- var(--ap_slider_buf_background) 0 var(--volume-before-width, 0%),
214
- var(--ap_slider_background) var(--volume-before-width, 0%) 100%);
231
+ background-image: linear-gradient(
232
+ to right,
233
+ var(--player_slider_buffer_background) 0 var(--volume_before_width, 0%),
234
+ var(--player_slider_background) var(--volume_before_width, 0%) 100%
235
+ );
215
236
  }
216
237
 
217
238
  #chui_vp_seek::-webkit-slider-runnable-track,
@@ -224,7 +245,8 @@ chui_vp_seek_buf {
224
245
 
225
246
  /* Ползунок виден всегда, но в покое он меньше — как у Audio. Ободок цвета полосы
226
247
  управления нужен там, где заливка белая */
227
- #chui_vp_seek::-webkit-slider-thumb, #chui_vp_volume::-webkit-slider-thumb {
248
+ #chui_vp_seek::-webkit-slider-thumb,
249
+ #chui_vp_volume::-webkit-slider-thumb {
228
250
  -webkit-appearance: none;
229
251
  border: none;
230
252
  height: 9px;
@@ -234,6 +256,14 @@ chui_vp_seek_buf {
234
256
  box-shadow: 0 0 0 2px var(--header_background);
235
257
  cursor: pointer;
236
258
  margin-top: calc((var(--player_track_height) - 9px) / 2);
259
+ /* Рост под курсором — тот же переход: своё время у ручки есть только здесь,
260
+ общее правило до псевдоэлемента бегунка не достаёт */
261
+ transition:
262
+ height var(--motion_fast) var(--motion_ease),
263
+ width var(--motion_fast) var(--motion_ease),
264
+ margin-top var(--motion_fast) var(--motion_ease),
265
+ background-color var(--motion_fast) var(--motion_ease),
266
+ box-shadow var(--motion_fast) var(--motion_ease);
237
267
  }
238
268
 
239
269
  /* У выключенной полосы ползунка нет: она и так приглушена заливкой */
@@ -254,10 +284,13 @@ chui_vp_main:hover #chui_vp_volume:not(:disabled)::-webkit-slider-thumb,
254
284
  width: 12px;
255
285
  margin-top: calc((var(--player_track_height) - 12px) / 2);
256
286
  background-color: var(--player_thumb_background);
257
- box-shadow: 0 0 0 2px var(--header_background), var(--box_shadow_main);
287
+ box-shadow:
288
+ 0 0 0 2px var(--header_background),
289
+ var(--box_shadow_main);
258
290
  }
259
291
 
260
- #chui_vp_seek:focus, #chui_vp_volume:focus,
292
+ #chui_vp_seek:focus,
293
+ #chui_vp_volume:focus,
261
294
  #chui_vp_seek:focus::-webkit-slider-runnable-track,
262
295
  #chui_vp_volume:focus::-webkit-slider-runnable-track {
263
296
  outline: none;
@@ -1,5 +1,5 @@
1
- const {Animation} = require("../../modules/chui_animations/animations");
2
- const {MenuKeyboard, makeKeyboardButton} = require("../../modules/chui_a11y/chui_a11y");
1
+ const { Animation } = require("../../modules/chui_animations/animations");
2
+ const { MenuKeyboard, makeKeyboardButton } = require("../../modules/chui_a11y/chui_a11y");
3
3
 
4
4
  const MENU_BAR_DROP_DOWN_ACTIVE_CLASS = "menu_bar_drop_down_button";
5
5
  // Панель открывается под кнопкой с зазором и не подходит к краю окна ближе этого отступа
@@ -10,13 +10,13 @@ class MenuBar {
10
10
  // Панели выпадающих списков лежат в body, а не в полосе (см. MenuBarDropDown), поэтому
11
11
  // снятие полосы обязано убирать и их: экземпляр находится по узлу полосы
12
12
  static #instances = new WeakMap();
13
- #chui_menu_bar_main = document.createElement("chui_menu_bar_main")
13
+ #chuiMenuBarMain = document.createElement("chui_menu_bar_main");
14
14
  #dropdowns = [];
15
15
  constructor(options = { test: Boolean() }) {
16
- require('../../modules/chui_functions').setStyles(__dirname + "/styles.css", 'chUiJS_MenuBar');
17
- MenuBar.#instances.set(this.#chui_menu_bar_main, this);
18
- if (options.test !== undefined) this.#chui_menu_bar_main.setAttribute("test", options.test)
19
- this.#chui_menu_bar_main.addEventListener("wheel", this.#wheel_event, {passive: true});
16
+ require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_MenuBar");
17
+ MenuBar.#instances.set(this.#chuiMenuBarMain, this);
18
+ if (options.test !== undefined) this.#chuiMenuBarMain.setAttribute("test", options.test);
19
+ this.#chuiMenuBarMain.addEventListener("wheel", this.#wheelEvent, { passive: true });
20
20
  }
21
21
  /*
22
22
  * Колесо мыши прокручивает полосу вбок.
@@ -26,16 +26,16 @@ class MenuBar {
26
26
  * (для этого нужен сдвиг или тачпад), поэтому переводим дельту сами — иначе до правых
27
27
  * пунктов полосы мышью было бы не добраться.
28
28
  */
29
- #wheel_event = (event) => {
30
- const bar = this.#chui_menu_bar_main;
29
+ #wheelEvent = (event) => {
30
+ const bar = this.#chuiMenuBarMain;
31
31
  if (bar.scrollWidth <= bar.clientWidth) return;
32
32
  bar.scrollLeft += event.deltaY;
33
33
  };
34
34
  addMenuItems(...components) {
35
- for (let component of components) {
36
- let element = component.set()
37
- new Animation(element).fadeIn()
38
- this.#chui_menu_bar_main.appendChild(element);
35
+ for (const component of components) {
36
+ const element = component.set();
37
+ new Animation(element).fadeIn();
38
+ this.#chuiMenuBarMain.appendChild(element);
39
39
  if (component instanceof MenuBarDropDown) this.#dropdowns.push(component);
40
40
  }
41
41
  }
@@ -43,8 +43,8 @@ class MenuBar {
43
43
  destroy() {
44
44
  for (const dropdown of this.#dropdowns) dropdown.unmount();
45
45
  this.#dropdowns = [];
46
- this.#chui_menu_bar_main.removeEventListener("wheel", this.#wheel_event);
47
- MenuBar.#instances.delete(this.#chui_menu_bar_main);
46
+ this.#chuiMenuBarMain.removeEventListener("wheel", this.#wheelEvent);
47
+ MenuBar.#instances.delete(this.#chuiMenuBarMain);
48
48
  return this;
49
49
  }
50
50
  /**
@@ -57,45 +57,46 @@ class MenuBar {
57
57
  return node;
58
58
  }
59
59
  set() {
60
- return this.#chui_menu_bar_main;
60
+ return this.#chuiMenuBarMain;
61
61
  }
62
- static DROPDOWN(options = {title: String(), items: []}) {
63
- return new MenuBarDropDown(options)
62
+ static DROPDOWN(options = { title: String(), items: [] }) {
63
+ return new MenuBarDropDown(options);
64
64
  }
65
65
  }
66
66
 
67
67
  class MenuBarDropDown {
68
- #mb_dd_main = document.createElement("menu_bar_drop_down_main");
69
- #mb_dd_button = document.createElement("menu_bar_drop_down_button");
70
- #mb_dd_dropdown = document.createElement("menu_bar_dropdown");
71
- #is_open = false;
68
+ #mbDdMain = document.createElement("menu_bar_drop_down_main");
69
+ #mbDdButton = document.createElement("menu_bar_drop_down_button");
70
+ #mbDdDropdown = document.createElement("menu_bar_dropdown");
71
+ #isOpen = false;
72
72
  #keyboard = undefined;
73
- constructor(options = {title: String(), items: []}) {
73
+ constructor(options = { title: String(), items: [] }) {
74
74
  // Панель собирают и отдельно от полосы (`MenuBar.DROPDOWN`) — свои стили нужны здесь же
75
- require('../../modules/chui_functions').setStyles(__dirname + "/styles.css", 'chUiJS_MenuBar');
75
+ require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_MenuBar");
76
76
  // Пустой заголовок остаётся пустым: подстановка заготовки опции рисовала слово «undefined»
77
- this.#mb_dd_button.innerText = options.title === undefined || options.title === null ? "" : options.title;
78
- this.#mb_dd_dropdown.id = require("randomstring").generate();
79
- this.#mb_dd_main.appendChild(this.#mb_dd_button)
80
- for (let item of Array.isArray(options.items) ? options.items : []) this.#mb_dd_dropdown.appendChild(item.set());
77
+ this.#mbDdButton.innerText = options.title === undefined || options.title === null ? "" : options.title;
78
+ this.#mbDdDropdown.id = require("randomstring").generate();
79
+ this.#mbDdMain.appendChild(this.#mbDdButton);
80
+ for (const item of Array.isArray(options.items) ? options.items : [])
81
+ this.#mbDdDropdown.appendChild(item.set());
81
82
  // Панель лежит в document.body, а не рядом с кнопкой: шапка — сама с backdrop-filter,
82
83
  // а элемент с backdrop-filter становится «backdrop root» — вложенная панель тогда не
83
84
  // блюрит содержимое под собой (замер: детальность 33.4 и с блюром, и без него; вне шапки
84
85
  // 20.1 против 31.5). Там же, в body, панель свободна и от контекста наложения шапки:
85
86
  // с z-index 1 внутри шапки её перекрывали выдвижные слои (app_menu, ящик уведомлений).
86
- document.body.appendChild(this.#mb_dd_dropdown);
87
+ document.body.appendChild(this.#mbDdDropdown);
87
88
 
88
89
  // Клавиатура и aria: кнопка открывает меню, стрелки ходят по пунктам, Escape закрывает
89
- this.#keyboard = new MenuKeyboard(this.#mb_dd_dropdown, {
90
+ this.#keyboard = new MenuKeyboard(this.#mbDdDropdown, {
90
91
  itemSelector: "button",
91
92
  onEscape: () => this.#close(),
92
- trigger: this.#mb_dd_button
93
+ trigger: this.#mbDdButton,
93
94
  });
94
- makeKeyboardButton(this.#mb_dd_button);
95
+ makeKeyboardButton(this.#mbDdButton);
95
96
  // Закрытый список тоже должен быть объявлен как закрытый: без этого у кнопки,
96
97
  // которую ни разу не открывали, не было бы aria-expanded
97
98
  this.#keyboard.setExpanded(false);
98
- this.#mb_dd_button.addEventListener("keydown", (event) => {
99
+ this.#mbDdButton.addEventListener("keydown", (event) => {
99
100
  if (event.key === "ArrowDown" || event.key === "ArrowUp") {
100
101
  event.preventDefault();
101
102
  this.#open();
@@ -104,56 +105,57 @@ class MenuBarDropDown {
104
105
  });
105
106
 
106
107
  // Слушатели
107
- this.#mb_dd_button.addEventListener("click", this.#mb_dd_button_click_event);
108
- this.#mb_dd_dropdown.addEventListener("click", this.#mb_dd_dropdown_click_event);
108
+ this.#mbDdButton.addEventListener("click", this.#mbDdButtonClickEvent);
109
+ this.#mbDdDropdown.addEventListener("click", this.#mbDdDropdownClickEvent);
109
110
  }
110
111
  #open() {
111
- this.#is_open = true;
112
+ this.#isOpen = true;
112
113
  // Панель живёт в body: если её снимали вместе с полосой (`unmount`), возвращаем на место
113
- if (document.body.contains(this.#mb_dd_dropdown) === false) document.body.appendChild(this.#mb_dd_dropdown);
114
- this.#mb_dd_button.classList.add(MENU_BAR_DROP_DOWN_ACTIVE_CLASS);
115
- // fadeIn показывает панель (display: flex), и только после этого её можно измерить
116
- new Animation(this.#mb_dd_dropdown).fadeIn();
114
+ if (document.body.contains(this.#mbDdDropdown) === false) document.body.appendChild(this.#mbDdDropdown);
115
+ this.#mbDdButton.classList.add(MENU_BAR_DROP_DOWN_ACTIVE_CLASS);
116
+ // panelIn показывает панель (display: flex), и только после этого её можно измерить
117
+ new Animation(this.#mbDdDropdown).panelIn();
117
118
  this.#positionDropdown();
118
- window.addEventListener('click', this.#window_click_event);
119
- window.addEventListener('resize', this.#position_dropdown_event);
119
+ window.addEventListener("click", this.#windowClickEvent);
120
+ window.addEventListener("resize", this.#positionDropdownEvent);
120
121
  this.#keyboard.setExpanded(true);
121
122
  }
122
123
  #close() {
123
- if (!this.#is_open) return;
124
- this.#is_open = false;
125
- this.#mb_dd_button.classList.remove(MENU_BAR_DROP_DOWN_ACTIVE_CLASS);
126
- new Animation(this.#mb_dd_dropdown).fadeOut();
127
- window.removeEventListener('click', this.#window_click_event);
128
- window.removeEventListener('resize', this.#position_dropdown_event);
124
+ if (!this.#isOpen) return;
125
+ this.#isOpen = false;
126
+ this.#mbDdButton.classList.remove(MENU_BAR_DROP_DOWN_ACTIVE_CLASS);
127
+ new Animation(this.#mbDdDropdown).fadeOut();
128
+ window.removeEventListener("click", this.#windowClickEvent);
129
+ window.removeEventListener("resize", this.#positionDropdownEvent);
129
130
  this.#keyboard.setExpanded(false);
130
131
  }
131
132
  // position: fixed — координаты считаются от окна, поэтому панель пересчитывается и на resize
132
133
  #positionDropdown() {
133
- const button = this.#mb_dd_button.getBoundingClientRect();
134
- const dropdown = this.#mb_dd_dropdown.getBoundingClientRect();
134
+ const button = this.#mbDdButton.getBoundingClientRect();
135
+ const dropdown = this.#mbDdDropdown.getBoundingClientRect();
135
136
  let left = button.left;
136
137
  // Панель у последнего пункта меню-бара уезжала бы за правый край окна
137
138
  if (left + dropdown.width > window.innerWidth - MENU_BAR_DROPDOWN_EDGE) {
138
139
  left = window.innerWidth - MENU_BAR_DROPDOWN_EDGE - dropdown.width;
139
140
  }
140
141
  if (left < MENU_BAR_DROPDOWN_EDGE) left = MENU_BAR_DROPDOWN_EDGE;
141
- this.#mb_dd_dropdown.style.left = `${Math.round(left)}px`;
142
- this.#mb_dd_dropdown.style.top = `${Math.round(button.bottom + MENU_BAR_DROPDOWN_GAP)}px`;
142
+ this.#mbDdDropdown.style.left = `${Math.round(left)}px`;
143
+ this.#mbDdDropdown.style.top = `${Math.round(button.bottom + MENU_BAR_DROPDOWN_GAP)}px`;
143
144
  }
144
- #mb_dd_button_click_event = () => {
145
- if (this.#is_open) this.#close(); else this.#open();
146
- }
147
- #mb_dd_dropdown_click_event = () => {
145
+ #mbDdButtonClickEvent = () => {
146
+ if (this.#isOpen) this.#close();
147
+ else this.#open();
148
+ };
149
+ #mbDdDropdownClickEvent = () => {
148
150
  this.#close();
149
- }
151
+ };
150
152
  // «Снаружи» — это и кнопка с обёрткой, и сама панель: она теперь не их потомок
151
- #window_click_event = (event) => {
152
- if (!this.#is_open) return;
153
- if (this.#mb_dd_main.contains(event.target) || this.#mb_dd_dropdown.contains(event.target)) return;
153
+ #windowClickEvent = (event) => {
154
+ if (!this.#isOpen) return;
155
+ if (this.#mbDdMain.contains(event.target) || this.#mbDdDropdown.contains(event.target)) return;
154
156
  this.#close();
155
- }
156
- #position_dropdown_event = () => this.#positionDropdown();
157
+ };
158
+ #positionDropdownEvent = () => this.#positionDropdown();
157
159
  /**
158
160
  * Убрать панель из body, не трогая клавиатурный слой: панель живёт в body, а не в полосе,
159
161
  * и её снимает тот, кто уводит полосу из шапки. Вернувшаяся полоса вернёт панель в body
@@ -161,7 +163,7 @@ class MenuBarDropDown {
161
163
  */
162
164
  unmount() {
163
165
  this.#close();
164
- this.#mb_dd_dropdown.remove();
166
+ this.#mbDdDropdown.remove();
165
167
  return this;
166
168
  }
167
169
  /** Полное удаление: панель больше не нужна — снять клавиатуру и убрать панель из body */
@@ -171,8 +173,8 @@ class MenuBarDropDown {
171
173
  return this;
172
174
  }
173
175
  set() {
174
- return this.#mb_dd_main;
176
+ return this.#mbDdMain;
175
177
  }
176
178
  }
177
179
 
178
- exports.MenuBar = MenuBar
180
+ exports.MenuBar = MenuBar;
@@ -1,11 +1,11 @@
1
1
  chui_menu_bar_main {
2
2
  /* Компактный режим. В шапке меню-бар — служебная полоса, а не контрол страницы, поэтому
3
- общесистемные отступы (--main_padding 8px 13px, --control_padding 8px, --margin 6px)
3
+ общесистемные отступы (--block_padding 8px 13px, --control_padding 8px, --block_margin 6px)
4
4
  уменьшены здесь локально. Токены переопределяются на корне полосы: Button пишет
5
5
  padding: var(--control_padding) инлайном, стилями его иначе не перебить.
6
6
  При полосе шапки 46px кнопки меню выходят ≈27px — они ниже кнопок шапки (30px),
7
7
  но не теряются в строке. */
8
- --main_padding: 5px 10px;
8
+ --block_padding: 5px 10px;
9
9
  --control_padding: 5px;
10
10
  display: flex;
11
11
  align-items: center;
@@ -15,7 +15,7 @@ chui_menu_bar_main {
15
15
  gap: 2px;
16
16
  /* Полоса идёт за кнопкой меню маршрутов; без этой кнопки (`disableAppMenu`)
17
17
  она упиралась бы в край окна */
18
- margin-inline-start: var(--margin);
18
+ margin-inline-start: var(--block_margin);
19
19
  /* Тесная шапка: полоса с вкладками, кнопкой меню и названием занимает больше, чем окно
20
20
  минимальной ширины (960px), и раньше лишние пункты просто исчезали — левый бокс шапки
21
21
  их обрезал. Теперь полоса прокручивается вбок (ось X), поэтому пункты остаются
@@ -33,7 +33,7 @@ chui_menu_bar_main {
33
33
  -webkit-app-region: no-drag;
34
34
  }
35
35
 
36
- /* Button и MenuBar.DROPDOWN несут свои внешние отступы (--margin и auto 6px) —
36
+ /* Button и MenuBar.DROPDOWN несут свои внешние отступы (--block_margin и auto 6px) —
37
37
  внутри полосы их заменяет gap, иначе полоса распухает по вертикали. */
38
38
  chui_menu_bar_main > chui_button,
39
39
  menu_bar_drop_down_main {
@@ -48,7 +48,7 @@ chui_menu_bar_main .chui_button {
48
48
  background: transparent;
49
49
  border: none;
50
50
  border-radius: var(--radius_sm);
51
- padding: var(--main_padding);
51
+ padding: var(--block_padding);
52
52
  }
53
53
 
54
54
  chui_menu_bar_main .chui_button:hover {
@@ -57,7 +57,8 @@ chui_menu_bar_main .chui_button:hover {
57
57
  }
58
58
 
59
59
  chui_menu_bar_main .chui_button:active:not(:disabled) {
60
- background: var(--element_background_prime); color: var(--text_color_hover);
60
+ background: var(--element_background_prime);
61
+ color: var(--text_color_hover);
61
62
  border: none;
62
63
  }
63
64
 
@@ -114,8 +115,8 @@ menu_bar_drop_down_button {
114
115
  cursor: pointer;
115
116
  height: max-content;
116
117
  width: max-content;
117
- border-radius: var(--border_radius);
118
- padding: var(--main_padding);
118
+ border-radius: var(--radius_sm);
119
+ padding: var(--block_padding);
119
120
  font-size: var(--font_default_size);
120
121
  font-weight: 400;
121
122
  border: none;
@@ -139,7 +140,7 @@ menu_bar_dropdown {
139
140
  display: none;
140
141
  flex-direction: column;
141
142
  min-width: max-content;
142
- padding: var(--margin);
143
+ padding: var(--block_margin);
143
144
  background: var(--header_background);
144
145
  color: var(--text_color);
145
146
  border: 1px solid var(--border_color);
@@ -152,7 +153,7 @@ menu_bar_dropdown {
152
153
  /* Пункты панели — плоские строки в стиле context_menu_item / user_item: синяя заливка ховера
153
154
  одна на всю семью меню (у `chui_button` ховер красит и текст, и глиф). Панель лежит в body,
154
155
  поэтому обёртка пункта больше не потомок полосы — её внешние отступы снимаются здесь
155
- (иначе между строками появлялись бы поля --margin). */
156
+ (иначе между строками появлялись бы поля --block_margin). */
156
157
  menu_bar_dropdown chui_button {
157
158
  margin: 0;
158
159
  width: -webkit-fill-available;
@@ -161,7 +162,7 @@ menu_bar_dropdown chui_button {
161
162
  menu_bar_dropdown .chui_button {
162
163
  width: -webkit-fill-available;
163
164
  justify-content: flex-start;
164
- padding: var(--main_padding);
165
+ padding: var(--block_padding);
165
166
  background: transparent;
166
167
  border: none;
167
168
  border-radius: var(--radius_sm);
@@ -173,7 +174,8 @@ menu_bar_dropdown .chui_button:hover {
173
174
  }
174
175
 
175
176
  menu_bar_dropdown .chui_button:active:not(:disabled) {
176
- background: var(--element_background_prime); color: var(--text_color_hover);
177
+ background: var(--element_background_prime);
178
+ color: var(--text_color_hover);
177
179
  border: none;
178
180
  }
179
181