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
@@ -3,7 +3,7 @@ chui_data_grid {
3
3
  flex-direction: column;
4
4
  /* fill-available учитывает собственный margin, 100% — нет */
5
5
  width: -webkit-fill-available;
6
- margin: var(--margin);
6
+ margin: var(--block_margin);
7
7
  font-size: var(--font_default_size);
8
8
  /* Локальные поверхности сетки: систему токенов не трогаем, но полный
9
9
  `--element_background` давал плотный серый блок, поэтому тело — только часть
@@ -14,7 +14,8 @@ chui_data_grid {
14
14
  серого: так полоса шапки читается, но не превращается в яркую ленту */
15
15
  --data_grid_surface: color-mix(in srgb, var(--element_background) 60%, transparent);
16
16
  --data_grid_body: linear-gradient(var(--data_grid_surface), var(--data_grid_surface)), var(--element_background_2);
17
- --data_grid_head: linear-gradient(var(--element_background), var(--element_background)),
17
+ --data_grid_head:
18
+ linear-gradient(var(--element_background), var(--element_background)),
18
19
  linear-gradient(var(--data_grid_surface), var(--data_grid_surface)), var(--element_background_2);
19
20
  /* Выделение — мягкая тонировка акцента: плотный токен (0.26 в тёмной схеме) читался
20
21
  тяжёлым синим блоком во всю строку */
@@ -56,9 +57,10 @@ data_grid_error {
56
57
  box-sizing: border-box;
57
58
  width: 100%;
58
59
  margin-bottom: 6px;
59
- padding-block: 6px 6px; padding-inline: 12px 12px;
60
- border: 1px solid var(--badge_error_back);
61
- border-radius: var(--border_radius);
60
+ padding-block: 6px 6px;
61
+ padding-inline: 12px 12px;
62
+ border: 1px solid var(--badge_error_background);
63
+ border-radius: var(--radius_sm);
62
64
  background: var(--element_background_2);
63
65
  font-size: var(--font_default_size);
64
66
  }
@@ -97,24 +99,23 @@ data_grid_head data_grid_cell.data_grid_cell_pinned {
97
99
 
98
100
  data_grid_cell.data_grid_cell_pinned_last {
99
101
  border-inline-end: 1px solid var(--border_color);
100
- /* Тень закреплённой колонки направленная (вбок), поэтому своего токена у неё нет:
101
- общие тени накрывают элемент со всех сторон. Разлёт больше, процент меньше —
102
- чтобы край колонки читался мягкой границей, а не линией. */
103
- box-shadow: 2px 0 8px rgb(0 0 0 / 6%);
102
+ /* Тень закреплённой колонки — общий ключ: она направленная, вбок, а общие тени
103
+ накрывают элемент со всех сторон. Разлёт больше, процент меньше — чтобы край
104
+ колонки читался мягкой границей, а не линией */
105
+ box-shadow: var(--box_shadow_edge);
104
106
  }
105
107
 
106
108
  /* Наведение на строку: у закреплённой ячейки свой непрозрачный фон, поэтому заливку
107
109
  строки она перекрывает — плотность поднимаем её же слоями */
108
110
  chui_data_grid data_grid_body data_grid_row:hover data_grid_cell.data_grid_cell_pinned {
109
- background: linear-gradient(var(--element_background_hover), var(--element_background_hover)),
110
- var(--data_grid_body);
111
+ background:
112
+ linear-gradient(var(--element_background_hover), var(--element_background_hover)), var(--data_grid_body);
111
113
  }
112
114
 
113
115
  chui_data_grid data_grid_row[aria-selected="true"] data_grid_cell.data_grid_cell_pinned {
114
116
  /* Тонировка выделения поверх непрозрачной поверхности — закреплённая ячейка и в выделенной
115
117
  строке не просвечивает прокрученным содержимым */
116
- background: linear-gradient(var(--data_grid_selection), var(--data_grid_selection)),
117
- var(--data_grid_body);
118
+ background: linear-gradient(var(--data_grid_selection), var(--data_grid_selection)), var(--data_grid_body);
118
119
  }
119
120
 
120
121
  /* Полоса выделения — на первой ячейке: закреплённая ячейка перекрывает фон строки,
@@ -130,7 +131,7 @@ data_grid_head {
130
131
  box-sizing: border-box;
131
132
  border: 1px solid var(--border_color);
132
133
  border-bottom: none;
133
- border-radius: var(--border_radius) var(--border_radius) 0 0;
134
+ border-radius: var(--radius_sm) var(--radius_sm) 0 0;
134
135
  /* Шапка — на один шаг плотнее тела и остаётся отличима от карточки. Слои непрозрачные:
135
136
  закреплённые ячейки шапки перекрывают уезжающие под них колонки */
136
137
  background: var(--data_grid_head);
@@ -322,7 +323,7 @@ data_grid_body {
322
323
  height: 340px;
323
324
  margin: 0;
324
325
  border: 1px solid var(--border_color);
325
- border-radius: 0 0 var(--border_radius) var(--border_radius);
326
+ border-radius: 0 0 var(--radius_sm) var(--radius_sm);
326
327
  /* Спокойная нейтральная поверхность тела: у строки своего фона нет,
327
328
  поэтому цвет строк даёт именно она */
328
329
  background: var(--data_grid_surface);
@@ -337,7 +338,7 @@ data_grid_spacer {
337
338
 
338
339
  data_grid_body_empty {
339
340
  display: block;
340
- padding: var(--main_padding);
341
+ padding: var(--block_padding);
341
342
  text-align: center;
342
343
  color: var(--text_color_disabled);
343
344
  }
@@ -350,7 +351,7 @@ data_grid_body_empty[hidden] {
350
351
  когда пользователь долистал до конца уже загруженного */
351
352
  data_grid_body_loader {
352
353
  display: block;
353
- padding: var(--main_padding);
354
+ padding: var(--block_padding);
354
355
  text-align: center;
355
356
  color: var(--text_color_disabled);
356
357
  border-top: 1px solid var(--border_color);
@@ -419,12 +420,13 @@ data_grid_cell.data_grid_cell_editing {
419
420
  min-width: 0;
420
421
  min-height: var(--control_height);
421
422
  box-sizing: border-box;
422
- /* Отступ снимаем: у своих редакторов-компонентов он свой (`margin: var(--margin)`),
423
+ /* Отступ снимаем: у своих редакторов-компонентов он свой (`margin: var(--block_margin)`),
423
424
  и поле съезжало в ячейке */
424
425
  margin: 0;
425
- padding-block: 0 0; padding-inline: 8px 8px;
426
+ padding-block: 0 0;
427
+ padding-inline: 8px 8px;
426
428
  border: 1px solid var(--blue_prime_background);
427
- border-radius: var(--border_radius);
429
+ border-radius: var(--radius_sm);
428
430
  /* Приподнятая непрозрачная поверхность — та же, что у полей фреймворка: непрозрачная,
429
431
  чтобы в выделенной строке поле не заливалось тонировкой, и светлее тела, чтобы поле
430
432
  читалось как поле, а не как дыра в строке */
@@ -443,7 +445,7 @@ data_grid_cell.data_grid_cell_editing_select {
443
445
  padding: 0 4px;
444
446
  }
445
447
 
446
- /* Корень Select — целый компонент: у него свой внешний отступ (`margin: var(--margin)`)
448
+ /* Корень Select — целый компонент: у него свой внешний отступ (`margin: var(--block_margin)`)
447
449
  и ширина контрола (`width: var(--control_width)`). Внутри ячейки это лишнее: из-за отступа
448
450
  ячейка вырастала до 29 + 12 = 41 px и перекрывала соседей, а поле сужалось и съезжало
449
451
  вправо. Растягиваем поле на ячейку и снимаем отступ */
@@ -467,7 +469,7 @@ data_grid_row:has(data_grid_cell.data_grid_cell_editing) {
467
469
  }
468
470
 
469
471
  /* Крутилка числа — системная: значение правят клавишами, поэтому вид у поля свой */
470
- input[type=number].data_grid_editor::-webkit-inner-spin-button {
472
+ input[type="number"].data_grid_editor::-webkit-inner-spin-button {
471
473
  -webkit-appearance: none;
472
474
  }
473
475
 
@@ -1,5 +1,5 @@
1
- const {setStyles, optionOr} = require('../../modules/chui_functions');
2
- const {I18n} = require('../../modules/chui_i18n/chui_i18n');
1
+ const { setStyles, optionOr } = require("../../modules/chui_functions");
2
+ const { I18n } = require("../../modules/chui_i18n/chui_i18n");
3
3
 
4
4
  /**
5
5
  * Список свойств: пары «подпись — значение» одной таблицей — для панели свойств, карточки
@@ -34,11 +34,11 @@ const {I18n} = require('../../modules/chui_i18n/chui_i18n');
34
34
  class Descriptions {
35
35
  static LAYOUT = {
36
36
  HORIZONTAL: "horizontal",
37
- VERTICAL: "vertical"
37
+ VERTICAL: "vertical",
38
38
  };
39
39
  static SIZE = {
40
40
  DEFAULT: "default",
41
- SMALL: "small"
41
+ SMALL: "small",
42
42
  };
43
43
  static #counter = 0;
44
44
  static #MAX_COLUMNS = 4;
@@ -52,11 +52,18 @@ class Descriptions {
52
52
  #columns = 1;
53
53
  #bordered = false;
54
54
 
55
- constructor(options = {
56
- id: String(), title: String(), items: [],
57
- columns: Number(), bordered: Boolean(),
58
- layout: String(), size: String(), label: String()
59
- }) {
55
+ constructor(
56
+ options = {
57
+ id: String(),
58
+ title: String(),
59
+ items: [],
60
+ columns: Number(),
61
+ bordered: Boolean(),
62
+ layout: String(),
63
+ size: String(),
64
+ label: String(),
65
+ }
66
+ ) {
60
67
  setStyles(__dirname + "/styles.css", "chUiJS_Descriptions");
61
68
  Descriptions.#counter += 1;
62
69
  this.#id = optionOr(options.id, `chui_descriptions_${Descriptions.#counter}`);
@@ -93,7 +100,7 @@ class Descriptions {
93
100
  return this.#entries.map((entry) => ({
94
101
  label: entry.label,
95
102
  value: entry.value,
96
- span: Math.min(entry.span, this.#columns)
103
+ span: Math.min(entry.span, this.#columns),
97
104
  }));
98
105
  }
99
106
 
@@ -149,14 +156,16 @@ class Descriptions {
149
156
 
150
157
  /** Раскладка пары: подпись слева от значения или над ним */
151
158
  setLayout(layout = String()) {
152
- const known = layout === Descriptions.LAYOUT.VERTICAL ? Descriptions.LAYOUT.VERTICAL : Descriptions.LAYOUT.HORIZONTAL;
159
+ const known =
160
+ layout === Descriptions.LAYOUT.VERTICAL ? Descriptions.LAYOUT.VERTICAL : Descriptions.LAYOUT.HORIZONTAL;
153
161
  this.#root.dataset.layout = known;
154
162
  return this;
155
163
  }
156
164
 
157
165
  /** Размер строк: `Descriptions.SIZE.{DEFAULT, SMALL}` */
158
166
  setSize(size = String()) {
159
- this.#root.dataset.size = size === Descriptions.SIZE.SMALL ? Descriptions.SIZE.SMALL : Descriptions.SIZE.DEFAULT;
167
+ this.#root.dataset.size =
168
+ size === Descriptions.SIZE.SMALL ? Descriptions.SIZE.SMALL : Descriptions.SIZE.DEFAULT;
160
169
  return this;
161
170
  }
162
171
 
@@ -197,10 +206,18 @@ class Descriptions {
197
206
  #push(item = undefined) {
198
207
  if (item === undefined || item === null) return;
199
208
  const label = item.label === undefined ? "" : String(item.label);
200
- const span = Number.isFinite(Number(item.span)) && Math.floor(Number(item.span)) >= 1
201
- ? Math.floor(Number(item.span))
202
- : 1;
203
- this.#entries.push({label: label, value: item.value, span: span, node: undefined, term: undefined, value_node: undefined});
209
+ const span =
210
+ Number.isFinite(Number(item.span)) && Math.floor(Number(item.span)) >= 1
211
+ ? Math.floor(Number(item.span))
212
+ : 1;
213
+ this.#entries.push({
214
+ label: label,
215
+ value: item.value,
216
+ span: span,
217
+ node: undefined,
218
+ term: undefined,
219
+ value_node: undefined,
220
+ });
204
221
  }
205
222
 
206
223
  #render() {
@@ -250,4 +267,4 @@ class Descriptions {
250
267
  }
251
268
  }
252
269
 
253
- exports.Descriptions = Descriptions
270
+ exports.Descriptions = Descriptions;
@@ -8,7 +8,7 @@ chui_descriptions {
8
8
  /* Компонент сам задаёт ширину: в flex-колонке с align-items: flex-start
9
9
  блок без ширины получил бы max-content и вылез за карточку */
10
10
  width: -webkit-fill-available;
11
- margin: var(--margin);
11
+ margin: var(--block_margin);
12
12
  --descriptions_columns: 1;
13
13
  color: var(--text_color);
14
14
  font-size: var(--font_default_size);
@@ -1,31 +1,37 @@
1
- const {Icon, Icons} = require("../chui_icons/icons");
1
+ const { Icon, Icons } = require("../chui_icons/icons");
2
2
 
3
- const {makeKeyboardButton} = require("../../modules/chui_a11y/chui_a11y");
3
+ const { makeKeyboardButton } = require("../../modules/chui_a11y/chui_a11y");
4
4
 
5
5
  /** Идентификаторы для aria-controls у раскрывающихся панелей */
6
- let disclosure_panel_counter = 0;
6
+ let disclosurePanelCounter = 0;
7
7
 
8
8
  class Details {
9
9
  #name = require("randomstring").generate();
10
- #chui_details = document.createElement(`chui_details`);
10
+ #chuiDetails = document.createElement(`chui_details`);
11
11
  //
12
- #ab = document.createElement('details_button')
13
- #bt = document.createElement('details_button_text')
14
- #barrow = document.createElement('details_button_arrow')
12
+ #ab = document.createElement("details_button");
13
+ #bt = document.createElement("details_button_text");
14
+ #barrow = document.createElement("details_button_arrow");
15
15
  //
16
- #ap = document.createElement('details_panel')
17
- #html = document.createElement('details_panel_html')
16
+ #ap = document.createElement("details_panel");
17
+ #html = document.createElement("details_panel_html");
18
18
  #direction;
19
19
  #wrap;
20
20
  #align;
21
21
  #justify;
22
22
  #width;
23
- constructor(options = {
24
- title: String(), contenteditable: Boolean(),
25
- direction: String(), wrap: String(), align: String(),
26
- justify: String(), width: String()
27
- }) {
28
- require('../../modules/chui_functions').setStyles(__dirname + "/styles.css", 'chUiJS_Details');
23
+ constructor(
24
+ options = {
25
+ title: String(),
26
+ contenteditable: Boolean(),
27
+ direction: String(),
28
+ wrap: String(),
29
+ align: String(),
30
+ justify: String(),
31
+ width: String(),
32
+ }
33
+ ) {
34
+ require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_Details");
29
35
  this.#direction = options.direction;
30
36
  this.#wrap = options.wrap;
31
37
  this.#align = options.align;
@@ -33,39 +39,39 @@ class Details {
33
39
  this.#width = options.width;
34
40
  // Заготовка опции (`Boolean()`) равносильна незаданной: без проверки в разметке оставался
35
41
  // `contenteditable="undefined"` — посторонний атрибут на каждой панели
36
- if (options.contenteditable !== undefined) this.#html.setAttribute('contenteditable', options.contenteditable);
42
+ if (options.contenteditable !== undefined) this.#html.setAttribute("contenteditable", options.contenteditable);
37
43
 
38
44
  if (this.#direction !== undefined) this.#html.style.flexDirection = this.#direction;
39
45
  if (this.#wrap !== undefined) this.#html.style.flexWrap = this.#wrap;
40
46
  if (this.#align !== undefined) this.#html.style.alignItems = this.#align;
41
47
  if (this.#justify !== undefined) this.#html.style.justifyContent = this.#justify;
42
48
  if (this.#width !== undefined) {
43
- this.#chui_details.style.width = this.#width;
49
+ this.#chuiDetails.style.width = this.#width;
44
50
  this.#ab.style.width = this.#width;
45
51
  this.#ap.style.width = this.#width;
46
52
  this.#html.style.width = this.#width;
47
53
  }
48
54
 
49
- this.#ab.setAttribute('name', this.#name)
55
+ this.#ab.setAttribute("name", this.#name);
50
56
  // Пустая заготовка (`title: String()` в описании опций) — это «заголовка нет»,
51
57
  // а не текст «undefined» в кнопке раскрытия
52
58
  this.#bt.innerText = options.title === undefined || options.title === null ? "" : String(options.title);
53
59
  this.#barrow.innerHTML = new Icon(Icons.HARDWARE.KEYBOARD_ARROW_DOWN).getHTML();
54
- this.#ab.appendChild(this.#bt)
55
- this.#ab.appendChild(this.#barrow)
56
- this.#ap.appendChild(this.#html)
57
- this.#chui_details.appendChild(this.#ab)
58
- this.#chui_details.appendChild(this.#ap)
60
+ this.#ab.appendChild(this.#bt);
61
+ this.#ab.appendChild(this.#barrow);
62
+ this.#ap.appendChild(this.#html);
63
+ this.#chuiDetails.appendChild(this.#ab);
64
+ this.#chuiDetails.appendChild(this.#ap);
59
65
 
60
66
  //ФУНКЦИИ
61
- let test = this.#chui_details.children;
67
+ const test = this.#chuiDetails.children;
62
68
  let i;
63
69
  for (i = 0; i < test.length; i++) {
64
- let elem = test[i];
65
- if (elem.tagName === 'DETAILS_BUTTON') {
66
- let panel = elem.nextElementSibling;
70
+ const elem = test[i];
71
+ if (elem.tagName === "DETAILS_BUTTON") {
72
+ const panel = elem.nextElementSibling;
67
73
  // Доступность: кнопка раскрытия — role=button с состоянием, панель — отдельный регион
68
- panel.id = "chui_details_panel_" + (disclosure_panel_counter += 1);
74
+ panel.id = "chui_details_panel_" + (disclosurePanelCounter += 1);
69
75
  panel.setAttribute("role", "region");
70
76
  elem.setAttribute("aria-controls", panel.id);
71
77
  elem.setAttribute("aria-expanded", "false");
@@ -73,9 +79,9 @@ class Details {
73
79
  // Tab и в дереве доступности — поэтому свёрнутая панель помечается инерт
74
80
  panel.inert = true;
75
81
  makeKeyboardButton(elem);
76
- elem.addEventListener('click', () => {
77
- elem.classList.toggle('details_active')
78
- let panel = elem.nextElementSibling;
82
+ elem.addEventListener("click", () => {
83
+ elem.classList.toggle("details_active");
84
+ const panel = elem.nextElementSibling;
79
85
  // Стрелка и углы кнопки зависят от `aria-expanded` — их ведёт CSS,
80
86
  // а инлайном остаётся только измеренная высота панели
81
87
  if (panel.style.maxHeight) {
@@ -85,19 +91,19 @@ class Details {
85
91
  panel.inert = false;
86
92
  panel.style.maxHeight = panel.scrollHeight + "px";
87
93
  }
88
- elem.setAttribute("aria-expanded", elem.classList.contains('details_active') ? "true" : "false");
89
- })
94
+ elem.setAttribute("aria-expanded", elem.classList.contains("details_active") ? "true" : "false");
95
+ });
90
96
  }
91
97
  }
92
98
  }
93
99
  add(...components) {
94
- for (let component of components) {
100
+ for (const component of components) {
95
101
  this.#html.appendChild(component.set());
96
102
  }
97
103
  }
98
104
  set() {
99
- return this.#chui_details;
105
+ return this.#chuiDetails;
100
106
  }
101
107
  }
102
108
 
103
- exports.Details = Details
109
+ exports.Details = Details;
@@ -5,10 +5,10 @@ chui_details {
5
5
  /* Ширина по умолчанию — по колонке: с `max-content` заголовок сжимался в плашку
6
6
  по тексту и блок читался незаконченным (опция `width` перекрывает это значение) */
7
7
  width: -webkit-fill-available;
8
- margin: var(--margin);
8
+ margin: var(--block_margin);
9
9
  font-size: var(--font_default_size);
10
- font-weight:400;
11
- border-radius: var(--border_radius);
10
+ font-weight: 400;
11
+ border-radius: var(--radius_sm);
12
12
  border: none;
13
13
  }
14
14
 
@@ -21,14 +21,14 @@ details_button_arrow {
21
21
  details_button {
22
22
  background: var(--element_background);
23
23
  cursor: pointer;
24
- padding: var(--main_padding);
24
+ padding: var(--block_padding);
25
25
  font-size: var(--font_default_size);
26
26
  width: -webkit-fill-available;
27
27
  text-align: start;
28
28
  outline: none;
29
29
  display: flex;
30
30
  align-items: center;
31
- border-radius: var(--border_radius);
31
+ border-radius: var(--radius_sm);
32
32
  color: var(--text_color);
33
33
  border: none;
34
34
  }
@@ -40,19 +40,19 @@ details_panel {
40
40
  overflow: hidden;
41
41
  width: -webkit-fill-available;
42
42
  max-height: 0;
43
- border-end-end-radius: var(--border_radius);
44
- border-end-start-radius: var(--border_radius);
43
+ border-end-end-radius: var(--radius_sm);
44
+ border-end-start-radius: var(--radius_sm);
45
45
  color: var(--text_color);
46
46
  border: none;
47
47
  /* Раскрытие идёт по `max-height`, которое считает JS: без перехода панель
48
48
  раскрывалась рывком */
49
- transition: max-height var(--transition_time) var(--ease_out);
49
+ transition: max-height var(--motion_base) var(--motion_ease);
50
50
  }
51
51
 
52
52
  details_panel_html {
53
53
  padding: 8px 0;
54
54
  width: -webkit-fill-available;
55
- display: flex
55
+ display: flex;
56
56
  }
57
57
 
58
58
  details_button:hover {
@@ -60,7 +60,8 @@ details_button:hover {
60
60
  }
61
61
 
62
62
  details_button:active {
63
- background: var(--element_background_prime); color: var(--text_color_hover);
63
+ background: var(--element_background_prime);
64
+ color: var(--text_color_hover);
64
65
  }
65
66
 
66
67
  details_button:hover details_button_text {
@@ -98,4 +99,4 @@ details_button[aria-expanded="true"] details_button_arrow chui_icon {
98
99
 
99
100
  details_button[aria-expanded="false"] details_button_arrow chui_icon {
100
101
  transform: rotate(0deg);
101
- }
102
+ }