chuijs 4.0.3 → 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 (258) hide show
  1. package/CHANGELOG.md +536 -0
  2. package/framework/appLayout/default/chui_app_layout.js +361 -303
  3. package/framework/appLayout/default/global_style.css +243 -89
  4. package/framework/appLayout/default/main_theme_style.css +188 -101
  5. package/framework/components/chui_accordion/accordion.js +17 -17
  6. package/framework/components/chui_accordion/styles.css +7 -7
  7. package/framework/components/chui_action_sheet/action_sheet.js +35 -32
  8. package/framework/components/chui_action_sheet/styles.css +10 -4
  9. package/framework/components/chui_actions_bar/actions_bar.js +338 -0
  10. package/framework/components/chui_actions_bar/styles.css +139 -0
  11. package/framework/components/chui_affix/affix.js +4 -4
  12. package/framework/components/chui_affix/styles.css +5 -0
  13. package/framework/components/chui_alert/alert.js +11 -5
  14. package/framework/components/chui_alert/styles.css +7 -0
  15. package/framework/components/chui_avatar/avatar.js +13 -13
  16. package/framework/components/chui_avatar/styles.css +1 -1
  17. package/framework/components/chui_avatar_group/avatar_group.js +4 -4
  18. package/framework/components/chui_avatar_group/styles.css +1 -1
  19. package/framework/components/chui_backtop/backtop.js +25 -2
  20. package/framework/components/chui_backtop/styles.css +21 -0
  21. package/framework/components/chui_badge/badge.js +15 -15
  22. package/framework/components/chui_badge/styles.css +6 -6
  23. package/framework/components/chui_banner/banner.js +222 -0
  24. package/framework/components/chui_banner/styles.css +170 -0
  25. package/framework/components/chui_breadcrumb/styles.css +1 -1
  26. package/framework/components/chui_button/button.js +24 -28
  27. package/framework/components/chui_button/styles.css +5 -5
  28. package/framework/components/chui_calendar/calendar.js +6 -6
  29. package/framework/components/chui_card/card.js +14 -14
  30. package/framework/components/chui_card_scroll/card_scroll.js +169 -0
  31. package/framework/components/chui_card_scroll/styles.css +86 -0
  32. package/framework/components/chui_chat/chat.js +73 -51
  33. package/framework/components/chui_chat/styles.css +18 -7
  34. package/framework/components/chui_clipboard_history/clipboard_history.js +25 -20
  35. package/framework/components/chui_clipboard_history/styles.css +10 -8
  36. package/framework/components/chui_code/code.js +8 -8
  37. package/framework/components/chui_code/styles.css +2 -2
  38. package/framework/components/chui_code_editor/code_editor.js +26 -26
  39. package/framework/components/chui_code_editor/styles.css +3 -3
  40. package/framework/components/chui_command_palette/command_palette.js +29 -29
  41. package/framework/components/chui_command_palette/styles.css +5 -5
  42. package/framework/components/chui_console/console.js +9 -9
  43. package/framework/components/chui_console/styles.css +5 -2
  44. package/framework/components/chui_content_block/content_block.js +2 -2
  45. package/framework/components/chui_context_menu/context_menu.js +162 -54
  46. package/framework/components/chui_context_menu/styles.css +82 -8
  47. package/framework/components/chui_custom_element/custom_element.js +11 -11
  48. package/framework/components/chui_data_grid/data_grid.js +268 -268
  49. package/framework/components/chui_data_grid/styles.css +14 -14
  50. package/framework/components/chui_descriptions/styles.css +1 -1
  51. package/framework/components/chui_details/details.js +12 -12
  52. package/framework/components/chui_details/styles.css +7 -7
  53. package/framework/components/chui_diff_viewer/diff_viewer.js +88 -88
  54. package/framework/components/chui_diff_viewer/styles.css +9 -9
  55. package/framework/components/chui_divider/divider.js +6 -6
  56. package/framework/components/chui_divider/styles.css +2 -2
  57. package/framework/components/chui_drawer/drawer.js +37 -14
  58. package/framework/components/chui_drawer/styles.css +18 -4
  59. package/framework/components/chui_drop_zone/drop_zone.js +6 -6
  60. package/framework/components/chui_drop_zone/styles.css +10 -6
  61. package/framework/components/chui_fieldset/fieldset.js +6 -6
  62. package/framework/components/chui_fieldset/styles.css +5 -5
  63. package/framework/components/chui_file_explorer/file_explorer.js +115 -115
  64. package/framework/components/chui_file_explorer/styles.css +6 -6
  65. package/framework/components/chui_form/form.js +11 -11
  66. package/framework/components/chui_gantt/gantt.js +41 -41
  67. package/framework/components/chui_gantt/styles.css +5 -5
  68. package/framework/components/chui_graphs/graphs.js +82 -46
  69. package/framework/components/chui_graphs/styles.css +26 -5
  70. package/framework/components/chui_hero/hero.js +63 -20
  71. package/framework/components/chui_hero/styles.css +176 -7
  72. package/framework/components/chui_html_block/html_block.js +5 -5
  73. package/framework/components/chui_html_block/styles.css +1 -1
  74. package/framework/components/chui_hx/styles.css +2 -2
  75. package/framework/components/chui_icons/icons.js +7 -7
  76. package/framework/components/chui_icons/styles.css +2 -1
  77. package/framework/components/chui_inputs/chui_check_box/styles.css +12 -3
  78. package/framework/components/chui_inputs/chui_chips/chips.js +92 -31
  79. package/framework/components/chui_inputs/chui_chips/styles.css +28 -5
  80. package/framework/components/chui_inputs/chui_color_picker/color_picker.js +20 -15
  81. package/framework/components/chui_inputs/chui_color_picker/styles.css +7 -7
  82. package/framework/components/chui_inputs/chui_combo_box/combo_box.js +58 -58
  83. package/framework/components/chui_inputs/chui_combo_box/styles.css +9 -9
  84. package/framework/components/chui_inputs/chui_date/date.js +93 -95
  85. package/framework/components/chui_inputs/chui_date/styles.css +8 -8
  86. package/framework/components/chui_inputs/chui_date_range/date_range.js +22 -22
  87. package/framework/components/chui_inputs/chui_date_range/styles.css +3 -3
  88. package/framework/components/chui_inputs/chui_datetime/datetime.js +12 -12
  89. package/framework/components/chui_inputs/chui_datetime/styles.css +3 -3
  90. package/framework/components/chui_inputs/chui_email/email.js +10 -10
  91. package/framework/components/chui_inputs/chui_email/styles.css +6 -6
  92. package/framework/components/chui_inputs/chui_file/file.js +8 -8
  93. package/framework/components/chui_inputs/chui_file/styles.css +12 -9
  94. package/framework/components/chui_inputs/chui_hotkey/hotkey.js +39 -39
  95. package/framework/components/chui_inputs/chui_hotkey/styles.css +6 -6
  96. package/framework/components/chui_inputs/chui_masked/masked.js +44 -44
  97. package/framework/components/chui_inputs/chui_masked/styles.css +5 -5
  98. package/framework/components/chui_inputs/chui_mention/mention.js +13 -13
  99. package/framework/components/chui_inputs/chui_mention/styles.css +14 -8
  100. package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +147 -137
  101. package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +14 -8
  102. package/framework/components/chui_inputs/chui_number/number.js +42 -45
  103. package/framework/components/chui_inputs/chui_number/styles.css +6 -6
  104. package/framework/components/chui_inputs/chui_otp/otp.js +32 -32
  105. package/framework/components/chui_inputs/chui_otp/styles.css +5 -5
  106. package/framework/components/chui_inputs/chui_password/password.js +30 -36
  107. package/framework/components/chui_inputs/chui_password/styles.css +7 -7
  108. package/framework/components/chui_inputs/chui_radio_button/styles.css +2 -2
  109. package/framework/components/chui_inputs/chui_rating/rating.js +28 -28
  110. package/framework/components/chui_inputs/chui_rating/styles.css +3 -3
  111. package/framework/components/chui_inputs/chui_select_box/select_box.js +54 -54
  112. package/framework/components/chui_inputs/chui_select_box/styles.css +10 -10
  113. package/framework/components/chui_inputs/chui_slider/slider.js +14 -14
  114. package/framework/components/chui_inputs/chui_slider/styles.css +5 -4
  115. package/framework/components/chui_inputs/chui_text/styles.css +7 -7
  116. package/framework/components/chui_inputs/chui_text/text.js +13 -17
  117. package/framework/components/chui_inputs/chui_text_area/styles.css +8 -8
  118. package/framework/components/chui_inputs/chui_text_area/text_area.js +23 -23
  119. package/framework/components/chui_inputs/chui_time/styles.css +13 -17
  120. package/framework/components/chui_inputs/chui_time/time.js +35 -24
  121. package/framework/components/chui_inputs/chui_toggle/styles.css +10 -3
  122. package/framework/components/chui_inputs/chui_toggle/toggle.js +16 -16
  123. package/framework/components/chui_json_editor/json_editor.js +87 -87
  124. package/framework/components/chui_json_editor/styles.css +5 -5
  125. package/framework/components/chui_json_viewer/json_viewer.js +80 -80
  126. package/framework/components/chui_json_viewer/styles.css +6 -6
  127. package/framework/components/chui_kanban/kanban.js +27 -27
  128. package/framework/components/chui_kanban/styles.css +8 -4
  129. package/framework/components/chui_kbd/styles.css +1 -1
  130. package/framework/components/chui_label/label.js +17 -17
  131. package/framework/components/chui_label/styles.css +1 -1
  132. package/framework/components/chui_link/link.js +9 -9
  133. package/framework/components/chui_link/styles.css +11 -4
  134. package/framework/components/chui_list/list.js +11 -11
  135. package/framework/components/chui_list/styles.css +2 -2
  136. package/framework/components/chui_markdown_editor/markdown_editor.js +66 -66
  137. package/framework/components/chui_markdown_editor/styles.css +5 -5
  138. package/framework/components/chui_media/audio.js +240 -246
  139. package/framework/components/chui_media/audio_styles.css +41 -23
  140. package/framework/components/chui_media/image.js +49 -46
  141. package/framework/components/chui_media/image_compare.js +35 -35
  142. package/framework/components/chui_media/image_compare_styles.css +5 -5
  143. package/framework/components/chui_media/image_styles.css +1 -1
  144. package/framework/components/chui_media/video.js +148 -148
  145. package/framework/components/chui_media/video_styles.css +27 -11
  146. package/framework/components/chui_menu_bar/menu_bar.js +54 -54
  147. package/framework/components/chui_menu_bar/styles.css +10 -10
  148. package/framework/components/chui_message_bar/message_bar.js +551 -0
  149. package/framework/components/chui_message_bar/styles.css +248 -0
  150. package/framework/components/chui_modal/modal.js +37 -13
  151. package/framework/components/chui_notification/notification.js +76 -54
  152. package/framework/components/chui_notification/notification_download.js +26 -81
  153. package/framework/components/chui_notification/notification_download_card.js +115 -0
  154. package/framework/components/chui_notification/notification_download_progress.css +2 -2
  155. package/framework/components/chui_notification/notification_download_progress.js +70 -108
  156. package/framework/components/chui_notification/notification_update.js +31 -31
  157. package/framework/components/chui_notification/status_plate.css +3 -3
  158. package/framework/components/chui_notification/styles.css +6 -1
  159. package/framework/components/chui_notification/styles_download.css +1 -1
  160. package/framework/components/chui_notification/styles_update.css +2 -2
  161. package/framework/components/chui_org_chart/org_chart.js +29 -29
  162. package/framework/components/chui_org_chart/styles.css +2 -2
  163. package/framework/components/chui_pagination/pagination.js +3 -3
  164. package/framework/components/chui_pagination/styles.css +1 -1
  165. package/framework/components/chui_paragraph/styles.css +2 -2
  166. package/framework/components/chui_popover/popover.js +29 -23
  167. package/framework/components/chui_popover/styles.css +1 -1
  168. package/framework/components/chui_popups/popups.js +124 -124
  169. package/framework/components/chui_popups/styles.css +5 -5
  170. package/framework/components/chui_print_button/print_button.js +15 -10
  171. package/framework/components/chui_progress_bar/progress_bar.js +34 -12
  172. package/framework/components/chui_progress_bar/styles.css +4 -4
  173. package/framework/components/chui_progress_ring/progress_ring.js +15 -15
  174. package/framework/components/chui_progress_ring/styles.css +1 -1
  175. package/framework/components/chui_qrcode/qrcode.js +12 -12
  176. package/framework/components/chui_query_builder/query_builder.js +46 -46
  177. package/framework/components/chui_query_builder/styles.css +4 -4
  178. package/framework/components/chui_radio_group/styles.css +1 -1
  179. package/framework/components/chui_result/result.js +15 -15
  180. package/framework/components/chui_result/styles.css +3 -3
  181. package/framework/components/chui_scheduler/scheduler.js +74 -74
  182. package/framework/components/chui_scheduler/styles.css +5 -5
  183. package/framework/components/chui_screen_spinner/screen_spinner.js +167 -0
  184. package/framework/components/chui_screen_spinner/styles.css +49 -0
  185. package/framework/components/chui_segmented_control/segmented_control.js +63 -6
  186. package/framework/components/chui_segmented_control/styles.css +32 -6
  187. package/framework/components/chui_settings/settings.js +45 -46
  188. package/framework/components/chui_settings/styles.css +4 -4
  189. package/framework/components/chui_shortcut_help/shortcut_help.js +32 -34
  190. package/framework/components/chui_sidebar_nav/sidebar_nav.js +98 -29
  191. package/framework/components/chui_sidebar_nav/styles.css +9 -3
  192. package/framework/components/chui_slideshow/slideshow.js +85 -85
  193. package/framework/components/chui_slideshow/styles.css +6 -6
  194. package/framework/components/chui_spinner/spinner.js +10 -10
  195. package/framework/components/chui_split_button/split_button.js +30 -12
  196. package/framework/components/chui_split_button/styles.css +21 -5
  197. package/framework/components/chui_splitter/splitter.js +11 -11
  198. package/framework/components/chui_splitter/styles.css +2 -2
  199. package/framework/components/chui_statistic/statistic.js +47 -47
  200. package/framework/components/chui_status_bar/styles.css +2 -2
  201. package/framework/components/chui_stepper/stepper.js +202 -31
  202. package/framework/components/chui_stepper/styles.css +79 -14
  203. package/framework/components/chui_sticky_bar/sticky_bar.js +44 -13
  204. package/framework/components/chui_sticky_bar/styles.css +10 -8
  205. package/framework/components/chui_tabs/chui_tabs.js +74 -26
  206. package/framework/components/chui_tabs/styles.css +40 -12
  207. package/framework/components/chui_text_editor/styles.css +7 -7
  208. package/framework/components/chui_text_editor/text_editor.js +56 -56
  209. package/framework/components/chui_text_editor/text_editor_panel.js +173 -174
  210. package/framework/components/chui_theme_toggle/theme_toggle.js +21 -5
  211. package/framework/components/chui_timeline/styles.css +3 -1
  212. package/framework/components/chui_toast_queue/styles.css +11 -11
  213. package/framework/components/chui_toast_queue/toast_queue.js +30 -27
  214. package/framework/components/chui_toolbar/styles.css +2 -2
  215. package/framework/components/chui_tooltip/styles.css +2 -2
  216. package/framework/components/chui_tooltip/tooltip.js +3 -3
  217. package/framework/components/chui_tour/styles.css +8 -8
  218. package/framework/components/chui_tour/tour.js +72 -72
  219. package/framework/components/chui_transfer/styles.css +6 -6
  220. package/framework/components/chui_transfer/transfer.js +93 -106
  221. package/framework/components/chui_tree_table/styles.css +4 -4
  222. package/framework/components/chui_tree_table/tree_table.js +45 -45
  223. package/framework/components/chui_tree_view/styles.css +10 -8
  224. package/framework/components/chui_tree_view/tree_view.js +185 -183
  225. package/framework/components/chui_user_bar/styles.css +145 -0
  226. package/framework/components/chui_user_bar/user_bar.js +402 -0
  227. package/framework/components/chui_user_list_bar/styles.css +173 -0
  228. package/framework/components/chui_user_list_bar/user_list_bar.js +485 -0
  229. package/framework/components/chui_watermark/watermark.js +17 -17
  230. package/framework/components/chui_webview/webview.js +9 -9
  231. package/framework/components/chui_write_bar/styles.css +172 -0
  232. package/framework/components/chui_write_bar/write_bar.js +320 -0
  233. package/framework/main_window.js +1234 -0
  234. package/framework/modules/chui_a11y/chui_a11y.js +78 -79
  235. package/framework/modules/chui_animations/animations.js +77 -15
  236. package/framework/modules/chui_animations/motion.js +120 -0
  237. package/framework/modules/chui_animations/styles.css +36 -3
  238. package/framework/modules/chui_functions.js +31 -27
  239. package/framework/modules/chui_highlight/styles.css +13 -10
  240. package/framework/modules/chui_i18n/chui_i18n.js +3 -3
  241. package/framework/modules/chui_i18n/locales/feedback.js +62 -0
  242. package/framework/modules/chui_i18n/locales/navigation.js +4 -0
  243. package/framework/modules/chui_json/chui_json.js +2 -2
  244. package/framework/modules/chui_logger/chui_logger.js +23 -8
  245. package/framework/modules/chui_page/page.js +10 -10
  246. package/framework/modules/chui_palette/palette.js +61 -0
  247. package/framework/modules/chui_qr/chui_qr.js +23 -23
  248. package/framework/modules/chui_scrollbar/chui_scrollbar.js +45 -45
  249. package/framework/modules/chui_scrollbar/styles.css +3 -3
  250. package/framework/modules/chui_services/chui_services.js +8 -8
  251. package/framework/modules/chui_services/desktop.js +77 -71
  252. package/framework/modules/chui_sortable/chui_sortable.js +17 -17
  253. package/framework/modules/chui_validate/chui_validate.js +3 -3
  254. package/framework/tray_bar/chui_menu_items.js +2 -2
  255. package/index.d.ts +266 -34
  256. package/index.js +20 -1168
  257. package/package.json +6 -4
  258. package/framework/components/telegram_bot/chui_telegram_bot.js +0 -191
@@ -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
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 });
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();
35
+ for (const component of components) {
36
+ const element = component.set();
37
37
  new Animation(element).fadeIn();
38
- this.#chui_menu_bar_main.appendChild(element);
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,7 +57,7 @@ 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
62
  static DROPDOWN(options = { title: String(), items: [] }) {
63
63
  return new MenuBarDropDown(options);
@@ -65,38 +65,38 @@ class MenuBar {
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
73
  constructor(options = { title: String(), items: [] }) {
74
74
  // Панель собирают и отдельно от полосы (`MenuBar.DROPDOWN`) — свои стили нужны здесь же
75
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 : [])
81
- 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());
82
82
  // Панель лежит в document.body, а не рядом с кнопкой: шапка — сама с backdrop-filter,
83
83
  // а элемент с backdrop-filter становится «backdrop root» — вложенная панель тогда не
84
84
  // блюрит содержимое под собой (замер: детальность 33.4 и с блюром, и без него; вне шапки
85
85
  // 20.1 против 31.5). Там же, в body, панель свободна и от контекста наложения шапки:
86
86
  // с z-index 1 внутри шапки её перекрывали выдвижные слои (app_menu, ящик уведомлений).
87
- document.body.appendChild(this.#mb_dd_dropdown);
87
+ document.body.appendChild(this.#mbDdDropdown);
88
88
 
89
89
  // Клавиатура и aria: кнопка открывает меню, стрелки ходят по пунктам, Escape закрывает
90
- this.#keyboard = new MenuKeyboard(this.#mb_dd_dropdown, {
90
+ this.#keyboard = new MenuKeyboard(this.#mbDdDropdown, {
91
91
  itemSelector: "button",
92
92
  onEscape: () => this.#close(),
93
- trigger: this.#mb_dd_button,
93
+ trigger: this.#mbDdButton,
94
94
  });
95
- makeKeyboardButton(this.#mb_dd_button);
95
+ makeKeyboardButton(this.#mbDdButton);
96
96
  // Закрытый список тоже должен быть объявлен как закрытый: без этого у кнопки,
97
97
  // которую ни разу не открывали, не было бы aria-expanded
98
98
  this.#keyboard.setExpanded(false);
99
- this.#mb_dd_button.addEventListener("keydown", (event) => {
99
+ this.#mbDdButton.addEventListener("keydown", (event) => {
100
100
  if (event.key === "ArrowDown" || event.key === "ArrowUp") {
101
101
  event.preventDefault();
102
102
  this.#open();
@@ -105,57 +105,57 @@ class MenuBarDropDown {
105
105
  });
106
106
 
107
107
  // Слушатели
108
- this.#mb_dd_button.addEventListener("click", this.#mb_dd_button_click_event);
109
- 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);
110
110
  }
111
111
  #open() {
112
- this.#is_open = true;
112
+ this.#isOpen = true;
113
113
  // Панель живёт в body: если её снимали вместе с полосой (`unmount`), возвращаем на место
114
- if (document.body.contains(this.#mb_dd_dropdown) === false) document.body.appendChild(this.#mb_dd_dropdown);
115
- this.#mb_dd_button.classList.add(MENU_BAR_DROP_DOWN_ACTIVE_CLASS);
116
- // fadeIn показывает панель (display: flex), и только после этого её можно измерить
117
- 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();
118
118
  this.#positionDropdown();
119
- window.addEventListener("click", this.#window_click_event);
120
- window.addEventListener("resize", this.#position_dropdown_event);
119
+ window.addEventListener("click", this.#windowClickEvent);
120
+ window.addEventListener("resize", this.#positionDropdownEvent);
121
121
  this.#keyboard.setExpanded(true);
122
122
  }
123
123
  #close() {
124
- if (!this.#is_open) return;
125
- this.#is_open = false;
126
- this.#mb_dd_button.classList.remove(MENU_BAR_DROP_DOWN_ACTIVE_CLASS);
127
- new Animation(this.#mb_dd_dropdown).fadeOut();
128
- window.removeEventListener("click", this.#window_click_event);
129
- 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);
130
130
  this.#keyboard.setExpanded(false);
131
131
  }
132
132
  // position: fixed — координаты считаются от окна, поэтому панель пересчитывается и на resize
133
133
  #positionDropdown() {
134
- const button = this.#mb_dd_button.getBoundingClientRect();
135
- const dropdown = this.#mb_dd_dropdown.getBoundingClientRect();
134
+ const button = this.#mbDdButton.getBoundingClientRect();
135
+ const dropdown = this.#mbDdDropdown.getBoundingClientRect();
136
136
  let left = button.left;
137
137
  // Панель у последнего пункта меню-бара уезжала бы за правый край окна
138
138
  if (left + dropdown.width > window.innerWidth - MENU_BAR_DROPDOWN_EDGE) {
139
139
  left = window.innerWidth - MENU_BAR_DROPDOWN_EDGE - dropdown.width;
140
140
  }
141
141
  if (left < MENU_BAR_DROPDOWN_EDGE) left = MENU_BAR_DROPDOWN_EDGE;
142
- this.#mb_dd_dropdown.style.left = `${Math.round(left)}px`;
143
- 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`;
144
144
  }
145
- #mb_dd_button_click_event = () => {
146
- if (this.#is_open) this.#close();
145
+ #mbDdButtonClickEvent = () => {
146
+ if (this.#isOpen) this.#close();
147
147
  else this.#open();
148
148
  };
149
- #mb_dd_dropdown_click_event = () => {
149
+ #mbDdDropdownClickEvent = () => {
150
150
  this.#close();
151
151
  };
152
152
  // «Снаружи» — это и кнопка с обёрткой, и сама панель: она теперь не их потомок
153
- #window_click_event = (event) => {
154
- if (!this.#is_open) return;
155
- 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;
156
156
  this.#close();
157
157
  };
158
- #position_dropdown_event = () => this.#positionDropdown();
158
+ #positionDropdownEvent = () => this.#positionDropdown();
159
159
  /**
160
160
  * Убрать панель из body, не трогая клавиатурный слой: панель живёт в body, а не в полосе,
161
161
  * и её снимает тот, кто уводит полосу из шапки. Вернувшаяся полоса вернёт панель в body
@@ -163,7 +163,7 @@ class MenuBarDropDown {
163
163
  */
164
164
  unmount() {
165
165
  this.#close();
166
- this.#mb_dd_dropdown.remove();
166
+ this.#mbDdDropdown.remove();
167
167
  return this;
168
168
  }
169
169
  /** Полное удаление: панель больше не нужна — снять клавиатуру и убрать панель из body */
@@ -173,7 +173,7 @@ class MenuBarDropDown {
173
173
  return this;
174
174
  }
175
175
  set() {
176
- return this.#mb_dd_main;
176
+ return this.#mbDdMain;
177
177
  }
178
178
  }
179
179
 
@@ -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 {
@@ -115,8 +115,8 @@ menu_bar_drop_down_button {
115
115
  cursor: pointer;
116
116
  height: max-content;
117
117
  width: max-content;
118
- border-radius: var(--border_radius);
119
- padding: var(--main_padding);
118
+ border-radius: var(--radius_sm);
119
+ padding: var(--block_padding);
120
120
  font-size: var(--font_default_size);
121
121
  font-weight: 400;
122
122
  border: none;
@@ -140,7 +140,7 @@ menu_bar_dropdown {
140
140
  display: none;
141
141
  flex-direction: column;
142
142
  min-width: max-content;
143
- padding: var(--margin);
143
+ padding: var(--block_margin);
144
144
  background: var(--header_background);
145
145
  color: var(--text_color);
146
146
  border: 1px solid var(--border_color);
@@ -153,7 +153,7 @@ menu_bar_dropdown {
153
153
  /* Пункты панели — плоские строки в стиле context_menu_item / user_item: синяя заливка ховера
154
154
  одна на всю семью меню (у `chui_button` ховер красит и текст, и глиф). Панель лежит в body,
155
155
  поэтому обёртка пункта больше не потомок полосы — её внешние отступы снимаются здесь
156
- (иначе между строками появлялись бы поля --margin). */
156
+ (иначе между строками появлялись бы поля --block_margin). */
157
157
  menu_bar_dropdown chui_button {
158
158
  margin: 0;
159
159
  width: -webkit-fill-available;
@@ -162,7 +162,7 @@ menu_bar_dropdown chui_button {
162
162
  menu_bar_dropdown .chui_button {
163
163
  width: -webkit-fill-available;
164
164
  justify-content: flex-start;
165
- padding: var(--main_padding);
165
+ padding: var(--block_padding);
166
166
  background: transparent;
167
167
  border: none;
168
168
  border-radius: var(--radius_sm);