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, optionOr} = require("../../modules/chui_functions");
2
- const {Icon, Icons} = require("../chui_icons/icons");
3
- const {I18n} = require("../../modules/chui_i18n/chui_i18n");
1
+ const { setStyles, optionOr } = require("../../modules/chui_functions");
2
+ const { Icon, Icons } = require("../chui_icons/icons");
3
+ const { I18n } = require("../../modules/chui_i18n/chui_i18n");
4
4
 
5
5
  /** Служебные ключи строки: всё остальное — значения колонок */
6
6
  const SERVICE_KEYS = ["id", "children", "expanded", "disabled", "selected"];
@@ -50,13 +50,13 @@ const SERVICE_KEYS = ["id", "children", "expanded", "disabled", "selected"];
50
50
  */
51
51
  class TreeTable {
52
52
  static #counter = 0;
53
- static #row_counter = 0;
53
+ static #rowCounter = 0;
54
54
 
55
55
  #root = document.createElement("chui_tree_table");
56
56
  #label = document.createElement("tree_table_label");
57
57
  #grid = document.createElement("tree_table_grid");
58
58
  #head = document.createElement("tree_table_head");
59
- #head_row = document.createElement("tree_table_head_row");
59
+ #headRow = document.createElement("tree_table_head_row");
60
60
  #body = document.createElement("tree_table_body");
61
61
  #empty = document.createElement("tree_table_empty");
62
62
  #status = document.createElement("tree_table_status");
@@ -68,39 +68,41 @@ class TreeTable {
68
68
  #filter = "";
69
69
  #selectable = false;
70
70
  #id = undefined;
71
- #title_text = undefined;
72
- #label_text = undefined;
71
+ #titleText = undefined;
72
+ #labelText = undefined;
73
73
  #indent = 18;
74
- #empty_text = undefined;
75
- #on_select = undefined;
76
- #on_toggle = undefined;
74
+ #emptyText = undefined;
75
+ #onSelect = undefined;
76
+ #onToggle = undefined;
77
77
  #listeners = [];
78
78
  // Строка, которая держит остановку обхода, и строка под фокусом до перерисовки
79
- #active_id = undefined;
80
- #focus_id = undefined;
81
- #visible_count = 0;
82
-
83
- constructor(options = {
84
- id: String(),
85
- title: String(),
86
- label: String(),
87
- columns: Array(),
88
- rows: Array(),
89
- expanded: Array(),
90
- selectable: Boolean(),
91
- indent: Number(),
92
- height: String(),
93
- emptyText: String(),
94
- onSelect: undefined,
95
- onToggle: undefined,
96
- changeEvent: undefined
97
- }) {
79
+ #activeId = undefined;
80
+ #focusId = undefined;
81
+ #visibleCount = 0;
82
+
83
+ constructor(
84
+ options = {
85
+ id: String(),
86
+ title: String(),
87
+ label: String(),
88
+ columns: Array(),
89
+ rows: Array(),
90
+ expanded: Array(),
91
+ selectable: Boolean(),
92
+ indent: Number(),
93
+ height: String(),
94
+ emptyText: String(),
95
+ onSelect: undefined,
96
+ onToggle: undefined,
97
+ changeEvent: undefined,
98
+ }
99
+ ) {
98
100
  setStyles(__dirname + "/styles.css", "chUiJS_TreeTable");
99
101
  TreeTable.#counter += 1;
100
102
  this.#id = options.id === undefined ? `chui_tree_table_${TreeTable.#counter}` : options.id;
101
103
  this.#root.id = this.#id;
102
- this.#on_select = options.onSelect;
103
- this.#on_toggle = options.onToggle;
104
+ this.#onSelect = options.onSelect;
105
+ this.#onToggle = options.onToggle;
104
106
  this.#selectable = options.selectable === true;
105
107
  if (options.changeEvent !== undefined) this.addChangeListener(options.changeEvent);
106
108
  this.#label.className = "tree_table_label";
@@ -109,23 +111,23 @@ class TreeTable {
109
111
  this.#grid.setAttribute("role", "treegrid");
110
112
  this.#head.className = "tree_table_head";
111
113
  this.#head.setAttribute("role", "rowgroup");
112
- this.#head_row.className = "tree_table_head_row";
113
- this.#head_row.setAttribute("role", "row");
114
+ this.#headRow.className = "tree_table_head_row";
115
+ this.#headRow.setAttribute("role", "row");
114
116
  this.#body.className = "tree_table_body";
115
117
  this.#body.setAttribute("role", "rowgroup");
116
118
  this.#empty.className = "tree_table_empty";
117
119
  this.#status.className = "tree_table_status chui_visually_hidden";
118
120
  this.#status.setAttribute("role", "status");
119
121
  this.#status.setAttribute("aria-live", "polite");
120
- this.#head.appendChild(this.#head_row);
122
+ this.#head.appendChild(this.#headRow);
121
123
  this.#grid.appendChild(this.#head);
122
124
  this.#grid.appendChild(this.#body);
123
125
  this.#root.appendChild(this.#label);
124
126
  this.#root.appendChild(this.#grid);
125
127
  this.#root.appendChild(this.#empty);
126
128
  this.#root.appendChild(this.#status);
127
- if (options.emptyText !== undefined) this.#empty_text = String(options.emptyText);
128
- else this.#empty_text = I18n.t("common.nothingFound");
129
+ if (options.emptyText !== undefined) this.#emptyText = String(options.emptyText);
130
+ else this.#emptyText = I18n.t("common.nothingFound");
129
131
  if (options.title !== undefined) this.setTitle(options.title);
130
132
  else this.#label.hidden = true;
131
133
  this.setLabel(optionOr(options.label, I18n.t("treeTable.label")));
@@ -148,12 +150,12 @@ class TreeTable {
148
150
  }
149
151
 
150
152
  getTitle() {
151
- return this.#title_text;
153
+ return this.#titleText;
152
154
  }
153
155
 
154
156
  /** Доступное имя таблицы, заданное в `label` */
155
157
  getLabel() {
156
- return this.#label_text;
158
+ return this.#labelText;
157
159
  }
158
160
 
159
161
  /** Колонки: копии описаний */
@@ -215,7 +217,7 @@ class TreeTable {
215
217
 
216
218
  /** Подпись над таблицей; `undefined` её убирает (имя тогда даёт `label`) */
217
219
  setTitle(text = undefined) {
218
- this.#title_text = text;
220
+ this.#titleText = text;
219
221
  if (text === undefined || text === "") {
220
222
  this.#label.hidden = true;
221
223
  this.#label.innerText = "";
@@ -230,7 +232,7 @@ class TreeTable {
230
232
 
231
233
  /** Имя таблицы, когда подписи в разметке нет */
232
234
  setLabel(text = undefined) {
233
- this.#label_text = text;
235
+ this.#labelText = text;
234
236
  this.#syncLabel();
235
237
  return this;
236
238
  }
@@ -335,7 +337,8 @@ class TreeTable {
335
337
  setFilter(text = String()) {
336
338
  this.#filter = text === undefined ? "" : String(text);
337
339
  this.#render();
338
- if (this.#filter !== "") this.#announce(I18n.t("treeTable.shownRows", {shown: this.#visible_count, total: this.#index.size}));
340
+ if (this.#filter !== "")
341
+ this.#announce(I18n.t("treeTable.shownRows", { shown: this.#visibleCount, total: this.#index.size }));
339
342
  return this;
340
343
  }
341
344
 
@@ -369,7 +372,10 @@ class TreeTable {
369
372
  const target = id === undefined ? undefined : String(id);
370
373
  const list = this.#body.querySelectorAll("tree_table_row");
371
374
  if (list.length === 0) return this;
372
- const row = target === undefined ? list[0] : this.#body.querySelector(`tree_table_row[data-id="${CSS.escape(target)}"]`);
375
+ const row =
376
+ target === undefined
377
+ ? list[0]
378
+ : this.#body.querySelector(`tree_table_row[data-id="${CSS.escape(target)}"]`);
373
379
  if (row === null) return this;
374
380
  this.#focusRow(row.dataset.id);
375
381
  return this;
@@ -385,9 +391,9 @@ class TreeTable {
385
391
  const source = row === undefined || row === null ? {} : row;
386
392
  const values = {};
387
393
  for (const key of Object.keys(source)) if (!SERVICE_KEYS.includes(key)) values[key] = source[key];
388
- TreeTable.#row_counter += 1;
394
+ TreeTable.#rowCounter += 1;
389
395
  return {
390
- id: source.id === undefined ? `tree_table_row_${TreeTable.#row_counter}` : String(source.id),
396
+ id: source.id === undefined ? `tree_table_row_${TreeTable.#rowCounter}` : String(source.id),
391
397
  values: values,
392
398
  disabled: source.disabled === true,
393
399
  default_expanded: source.expanded === true,
@@ -396,7 +402,7 @@ class TreeTable {
396
402
  }
397
403
 
398
404
  #describe(node) {
399
- const descriptor = {id: node.id};
405
+ const descriptor = { id: node.id };
400
406
  for (const key of Object.keys(node.values)) descriptor[key] = node.values[key];
401
407
  descriptor.expanded = node.children.length > 0 && this.#expanded.has(node.id);
402
408
  descriptor.disabled = node.disabled;
@@ -440,14 +446,14 @@ class TreeTable {
440
446
  }
441
447
 
442
448
  #accessibleName() {
443
- if (this.#title_text !== undefined && this.#title_text !== "") return this.#title_text;
444
- if (this.#label_text !== undefined && this.#label_text !== "") return this.#label_text;
449
+ if (this.#titleText !== undefined && this.#titleText !== "") return this.#titleText;
450
+ if (this.#labelText !== undefined && this.#labelText !== "") return this.#labelText;
445
451
  return I18n.t("treeTable.label");
446
452
  }
447
453
 
448
454
  // Имя сетки: видимая подпись — через aria-labelledby, скрытая — через aria-label
449
455
  #syncLabel() {
450
- if (this.#title_text !== undefined && this.#title_text !== "") {
456
+ if (this.#titleText !== undefined && this.#titleText !== "") {
451
457
  this.#grid.setAttribute("aria-labelledby", this.#label.id);
452
458
  this.#grid.removeAttribute("aria-label");
453
459
  return;
@@ -463,7 +469,7 @@ class TreeTable {
463
469
  const walk = (nodes, level) => {
464
470
  for (const node of nodes) {
465
471
  if (filter !== "" && !this.#matchesTree(node, filter)) continue;
466
- list.push({node: node, level: level});
472
+ list.push({ node: node, level: level });
467
473
  if (!this.#isOpen(node, filter)) continue;
468
474
  walk(node.children, level + 1);
469
475
  }
@@ -485,15 +491,19 @@ class TreeTable {
485
491
  }
486
492
 
487
493
  #matchesRow(node, filter) {
488
- return this.#columns.some((column) => String(node.values[column.key] === undefined ? "" : node.values[column.key]).toLowerCase().includes(filter));
494
+ return this.#columns.some((column) =>
495
+ String(node.values[column.key] === undefined ? "" : node.values[column.key])
496
+ .toLowerCase()
497
+ .includes(filter)
498
+ );
489
499
  }
490
500
 
491
501
  #render() {
492
502
  // Строки пересобираются, а фокус живёт на строке: запоминаем её до перерисовки
493
503
  const active = document.activeElement;
494
504
  const focused = active === null || !this.#grid.contains(active) ? null : active.closest("tree_table_row");
495
- if (focused !== null) this.#focus_id = focused.dataset.id;
496
- this.#head_row.innerHTML = "";
505
+ if (focused !== null) this.#focusId = focused.dataset.id;
506
+ this.#headRow.innerHTML = "";
497
507
  this.#body.innerHTML = "";
498
508
  for (const column of this.#columns) {
499
509
  const cell = document.createElement("tree_table_head_cell");
@@ -501,14 +511,14 @@ class TreeTable {
501
511
  if (column.align === "end") cell.classList.add("tree_table_cell_end");
502
512
  cell.setAttribute("role", "columnheader");
503
513
  cell.innerText = column.title;
504
- this.#head_row.appendChild(cell);
514
+ this.#headRow.appendChild(cell);
505
515
  }
506
516
  this.#head.hidden = this.#columns.length === 0;
507
517
  const visible = this.#flatten();
508
- this.#visible_count = visible.length;
518
+ this.#visibleCount = visible.length;
509
519
  for (const entry of visible) this.#body.appendChild(this.#rowNode(entry));
510
520
  this.#empty.hidden = visible.length > 0;
511
- this.#empty.innerText = this.#empty_text;
521
+ this.#empty.innerText = this.#emptyText;
512
522
  this.#applyStop();
513
523
  return this;
514
524
  }
@@ -550,7 +560,10 @@ class TreeTable {
550
560
  toggle.className = "tree_table_toggle";
551
561
  // Стрелка не отдельная остановка обхода: у таблицы одна остановка на строку
552
562
  toggle.setAttribute("tabindex", "-1");
553
- toggle.setAttribute("aria-label", I18n.t(open ? "a11y.collapseNode" : "a11y.expandNode", {name: this.#titleOf(node)}));
563
+ toggle.setAttribute(
564
+ "aria-label",
565
+ I18n.t(open ? "a11y.collapseNode" : "a11y.expandNode", { name: this.#titleOf(node) })
566
+ );
554
567
  toggle.dataset.id = node.id;
555
568
  const glyph = new Icon(Icons.NAVIGATION.CHEVRON_RIGHT, "18px").set();
556
569
  glyph.setAttribute("aria-hidden", "true");
@@ -581,14 +594,14 @@ class TreeTable {
581
594
  const list = [...this.#body.querySelectorAll("tree_table_row")];
582
595
  if (list.length === 0) return;
583
596
  const stop =
584
- list.find((row) => row.dataset.id === this.#active_id) ??
585
- list.find((row) => row.dataset.id === this.#focus_id) ??
597
+ list.find((row) => row.dataset.id === this.#activeId) ??
598
+ list.find((row) => row.dataset.id === this.#focusId) ??
586
599
  list[0];
587
- this.#active_id = stop.dataset.id;
600
+ this.#activeId = stop.dataset.id;
588
601
  for (const row of list) row.setAttribute("tabindex", row === stop ? "0" : "-1");
589
602
  // Фокус возвращаем только если он был в таблице: иначе перерисовка его бы украла
590
- if (this.#focus_id !== undefined && stop.dataset.id === this.#focus_id) {
591
- this.#focus_id = undefined;
603
+ if (this.#focusId !== undefined && stop.dataset.id === this.#focusId) {
604
+ this.#focusId = undefined;
592
605
  stop.focus();
593
606
  }
594
607
  }
@@ -596,7 +609,7 @@ class TreeTable {
596
609
  #focusRow(id = String()) {
597
610
  const row = this.#body.querySelector(`tree_table_row[data-id="${CSS.escape(id)}"]`);
598
611
  if (row === null) return;
599
- this.#active_id = id;
612
+ this.#activeId = id;
600
613
  for (const other of this.#body.querySelectorAll("tree_table_row")) {
601
614
  other.setAttribute("tabindex", other === row ? "0" : "-1");
602
615
  }
@@ -611,10 +624,12 @@ class TreeTable {
611
624
  else this.#expanded.delete(id);
612
625
  this.#render();
613
626
  if (silent) return this;
614
- this.#announce(value
615
- ? I18n.t("treeTable.expanded", {name: this.#titleOf(node), count: node.children.length})
616
- : I18n.t("treeTable.collapsed", {name: this.#titleOf(node)}));
617
- if (this.#on_toggle !== undefined) this.#on_toggle(this.#describe(node), value, this);
627
+ this.#announce(
628
+ value
629
+ ? I18n.t("treeTable.expanded", { name: this.#titleOf(node), count: node.children.length })
630
+ : I18n.t("treeTable.collapsed", { name: this.#titleOf(node) })
631
+ );
632
+ if (this.#onToggle !== undefined) this.#onToggle(this.#describe(node), value, this);
618
633
  return this;
619
634
  }
620
635
 
@@ -633,7 +648,7 @@ class TreeTable {
633
648
  const node = this.#selected === undefined ? undefined : this.#index.get(this.#selected);
634
649
  const row = node === undefined ? undefined : this.#describe(node);
635
650
  for (const listener of [...this.#listeners]) listener(row, this);
636
- if (this.#on_select !== undefined) this.#on_select(row, this);
651
+ if (this.#onSelect !== undefined) this.#onSelect(row, this);
637
652
  }
638
653
 
639
654
  #announce(text = String()) {
@@ -688,7 +703,7 @@ class TreeTable {
688
703
  const list = this.#body.querySelectorAll("tree_table_row");
689
704
  if (list.length === 0) return;
690
705
  // Нажатия на самой стрелке (настоящая кнопка) не перехватываем
691
- const from_button = event.target instanceof Element && event.target.closest("button") !== null;
706
+ const fromButton = event.target instanceof Element && event.target.closest("button") !== null;
692
707
  const row = this.#currentRow(event.target instanceof Element ? event.target : undefined);
693
708
  const id = row === null ? undefined : row.dataset.id;
694
709
  const node = id === undefined ? undefined : this.#index.get(id);
@@ -710,14 +725,14 @@ class TreeTable {
710
725
  this.#focusRow(list[list.length - 1].dataset.id);
711
726
  return;
712
727
  case "ArrowRight": {
713
- if (from_button || node === undefined || node.children.length === 0) return;
728
+ if (fromButton || node === undefined || node.children.length === 0) return;
714
729
  event.preventDefault();
715
730
  if (!this.#expanded.has(id) && this.#filter === "") this.expand(id);
716
731
  else this.#step(row, 1);
717
732
  return;
718
733
  }
719
734
  case "ArrowLeft": {
720
- if (from_button || node === undefined) return;
735
+ if (fromButton || node === undefined) return;
721
736
  event.preventDefault();
722
737
  if (node.children.length > 0 && this.#expanded.has(id)) {
723
738
  this.collapse(id);
@@ -728,13 +743,13 @@ class TreeTable {
728
743
  return;
729
744
  }
730
745
  case "Enter": {
731
- if (from_button || node === undefined || node.children.length === 0) return;
746
+ if (fromButton || node === undefined || node.children.length === 0) return;
732
747
  event.preventDefault();
733
748
  this.toggle(id);
734
749
  return;
735
750
  }
736
751
  case " ": {
737
- if (from_button || node === undefined) return;
752
+ if (fromButton || node === undefined) return;
738
753
  event.preventDefault();
739
754
  if (this.#selectable) this.#select(id);
740
755
  else if (node.children.length > 0) this.toggle(id);
@@ -746,5 +761,4 @@ class TreeTable {
746
761
  };
747
762
  }
748
763
 
749
- exports.TreeTable = TreeTable
750
-
764
+ exports.TreeTable = TreeTable;
@@ -7,9 +7,9 @@ chui_tree_view {
7
7
  height: max-content;
8
8
  font-size: var(--font_default_size);
9
9
  border: 1px solid var(--border_color);
10
- margin: var(--margin);
10
+ margin: var(--block_margin);
11
11
  padding: 4px;
12
- border-radius: var(--border_radius);
12
+ border-radius: var(--radius_sm);
13
13
  background: var(--element_background_2);
14
14
  box-sizing: border-box;
15
15
  }
@@ -31,7 +31,9 @@ tree_view_button {
31
31
  flex-direction: row;
32
32
  gap: 6px;
33
33
  width: -webkit-fill-available;
34
- min-height: 32px;
34
+ /* Высота строки — одна на вёрстку и на арифметику распорок: в переменном режиме
35
+ её пишет код после замера, 32px — значение до замера */
36
+ min-height: var(--tree_view_row_height, 32px);
35
37
  box-sizing: border-box;
36
38
  /* 4px панели + 9px строки = 13px — тот же отступ текста, что у ячеек таблиц и сетки */
37
39
  padding: 4px 9px;
@@ -66,7 +68,7 @@ tree_view_button_arrow {
66
68
  tree_view_button_arrow chui_icon {
67
69
  font-size: var(--header_icon_size);
68
70
  color: inherit;
69
- transition: transform var(--transition_time) ease;
71
+ transition: transform var(--motion_fast) var(--motion_ease);
70
72
  }
71
73
 
72
74
  /* Стрелка: свёрнутый узел смотрит вправо, раскрытый — вниз */
@@ -81,13 +83,14 @@ tree_view_button[aria-expanded="true"] tree_view_button_arrow chui_icon {
81
83
  tree_view_panel {
82
84
  display: block;
83
85
  width: -webkit-fill-available;
84
- padding-block: 0 0; padding-inline: 18px 0;
86
+ padding-block: 0 0;
87
+ padding-inline: 18px 0;
85
88
  overflow: hidden;
86
89
  max-height: 0;
87
90
  position: relative;
88
91
  color: var(--text_color);
89
92
  border: none;
90
- transition: max-height var(--transition_time) ease;
93
+ transition: max-height var(--motion_base) var(--motion_ease);
91
94
  }
92
95
 
93
96
  /* Направляющая уровня: показывает, что вложенные строки относятся к раскрытому узлу */
@@ -115,7 +118,8 @@ tree_view_button:hover {
115
118
  }
116
119
 
117
120
  tree_view_button:active {
118
- background: var(--element_background_prime); color: var(--text_color_hover);
121
+ background: var(--element_background_prime);
122
+ color: var(--text_color_hover);
119
123
  }
120
124
 
121
125
  tree_view_button:focus-visible {
@@ -168,7 +172,7 @@ tree_view_button.tree_view_button_drop_after {
168
172
  }
169
173
 
170
174
  tree_view_button.tree_view_button_drop_inside {
171
- background: var(--blue_prime_background_trans);
175
+ background: var(--blue_prime_background_tint_strong);
172
176
  color: var(--text_color_hover);
173
177
  }
174
178
 
@@ -182,8 +186,8 @@ tree_view_panel.tree_view_search_hidden {
182
186
 
183
187
  /* Совпадение подсвечивается спокойным акцентом: акцент зарезервирован за выбором */
184
188
  tree_view_button.tree_view_button_match {
185
- background: var(--blue_prime_background_trans);
186
- border-radius: var(--border_radius);
189
+ background: var(--blue_prime_background_tint_strong);
190
+ border-radius: var(--radius_sm);
187
191
  }
188
192
 
189
193
  /* === Отложенная отрисовка (опция deferRender) ===