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
@@ -4,9 +4,9 @@ chui_chat {
4
4
  flex-direction: column;
5
5
  height: max-content;
6
6
  width: 360px;
7
- margin: var(--margin);
7
+ margin: var(--block_margin);
8
8
  overflow: hidden;
9
- border-radius: var(--border_radius);
9
+ border-radius: var(--radius_sm);
10
10
  background: var(--element_background);
11
11
  border: 1px solid var(--border_color);
12
12
  font-size: var(--font_default_size);
@@ -17,7 +17,7 @@ chat_header {
17
17
  display: flex;
18
18
  flex-direction: column;
19
19
  gap: 2px;
20
- padding: var(--control_padding) var(--main_padding);
20
+ padding: var(--control_padding) var(--block_padding);
21
21
  border-bottom: 1px solid var(--border_color);
22
22
  }
23
23
 
@@ -100,10 +100,21 @@ chat_bubble {
100
100
  flex-direction: column;
101
101
  gap: 2px;
102
102
  padding: 8px 10px;
103
- border-radius: var(--border_radius);
103
+ border-radius: var(--radius_sm);
104
104
  background: var(--element_background);
105
105
  border: 1px solid var(--border_color);
106
106
  color: var(--text_color);
107
+ /* Новое сообщение встаёт на место: кадр общий — см. `chui_appear_up` в global_style.css */
108
+ animation: chui_appear_up var(--motion_base) var(--motion_ease);
109
+ }
110
+
111
+ /* Строка «печатает…»: появляется и уходит движением, `hidden` возвращается по концу кадра */
112
+ chat_typing {
113
+ animation: chui_appear_up var(--motion_base) var(--motion_ease);
114
+ }
115
+
116
+ .chat_typing_leaving {
117
+ animation: chui_leave_up var(--motion_fast) var(--motion_ease) forwards;
107
118
  }
108
119
 
109
120
  /* Свои сообщения — акцентом и справа */
@@ -149,7 +160,7 @@ chat_meta {
149
160
  }
150
161
 
151
162
  chat_bubble[data-own="true"] chat_meta {
152
- color: var(--text_color_hover_disable);
163
+ color: var(--text_color_hover_disabled);
153
164
  }
154
165
 
155
166
  chat_status {
@@ -169,7 +180,7 @@ chat_status[data-status="failed"] {
169
180
 
170
181
  /* Строка «печатает…» */
171
182
  chat_typing {
172
- padding: 0 var(--main_padding) var(--control_padding);
183
+ padding: 0 var(--block_padding) var(--control_padding);
173
184
  color: var(--text_color_disabled);
174
185
  font-size: var(--font_labels_size);
175
186
  }
@@ -220,7 +231,7 @@ chat_composer {
220
231
  }
221
232
 
222
233
  .chat_send:hover {
223
- background: var(--blue_prime_background_trans);
234
+ background: var(--blue_prime_background_tint_strong);
224
235
  }
225
236
 
226
237
  .chat_send:disabled {
@@ -1,7 +1,8 @@
1
- const {setStyles, optionOr} = require('../../modules/chui_functions');
2
- const {Icon, Icons} = require('../chui_icons/icons');
3
- const {Desktop} = require('../../modules/chui_services/desktop');
4
- 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 { Desktop } = require("../../modules/chui_services/desktop");
4
+ const { I18n } = require("../../modules/chui_i18n/chui_i18n");
5
+ const { reportError } = require("../../modules/chui_logger/chui_logger");
5
6
 
6
7
  /**
7
8
  * Панель истории буфера обмена: последние тексты, которые приложение кладло в буфер.
@@ -25,28 +26,32 @@ class ClipboardHistory {
25
26
 
26
27
  #root = document.createElement("chui_clipboard_history");
27
28
  #title = document.createElement("clipboard_history_title");
28
- #clear_button = document.createElement("button");
29
+ #clearButton = document.createElement("button");
29
30
  #list = document.createElement("clipboard_history_list");
30
31
  #empty = document.createElement("clipboard_history_empty");
31
32
  #status = document.createElement("clipboard_history_status");
32
33
  #id = undefined;
33
34
  #items = [];
34
35
  #truncate = 80;
35
- #empty_text = I18n.t("graphics.clipboardEmpty");
36
- #show_clear = true;
37
- #on_change = undefined;
36
+ #emptyText = I18n.t("graphics.clipboardEmpty");
37
+ #showClear = true;
38
+ #onChange = undefined;
39
+ #onError = undefined;
38
40
  #unsubscribe = undefined;
39
41
  #bound = false;
40
42
 
41
- constructor(options = {
42
- id: String(),
43
- title: String(),
44
- emptyText: String(),
45
- truncate: Number(),
46
- label: String(),
47
- showClear: Boolean(),
48
- onChange: undefined
49
- }) {
43
+ constructor(
44
+ options = {
45
+ id: String(),
46
+ title: String(),
47
+ emptyText: String(),
48
+ truncate: Number(),
49
+ label: String(),
50
+ showClear: Boolean(),
51
+ onChange: undefined,
52
+ onError: undefined,
53
+ }
54
+ ) {
50
55
  setStyles(__dirname + "/styles.css", "chUiJS_ClipboardHistory");
51
56
  ClipboardHistory.#counter += 1;
52
57
  this.#id = options.id === undefined ? `chui_clipboard_history_${ClipboardHistory.#counter}` : options.id;
@@ -54,23 +59,24 @@ class ClipboardHistory {
54
59
  // Панель — именованный регион: к ней можно перейти с клавиатуры и из списка регионов
55
60
  this.#root.setAttribute("role", "region");
56
61
  this.#truncate = options.truncate === undefined ? this.#truncate : options.truncate;
57
- this.#empty_text = options.emptyText === undefined ? this.#empty_text : options.emptyText;
58
- this.#show_clear = options.showClear !== false;
59
- this.#on_change = options.onChange;
62
+ this.#emptyText = options.emptyText === undefined ? this.#emptyText : options.emptyText;
63
+ this.#showClear = options.showClear !== false;
64
+ this.#onChange = options.onChange;
65
+ this.#onError = options.onError;
60
66
  this.setTitle(optionOr(options.title, I18n.t("graphics.clipboardHistory")));
61
67
  this.setLabel(optionOr(options.label, this.#title.innerText));
62
68
  this.#list.setAttribute("role", "list");
63
- this.#clear_button.type = "button";
64
- this.#clear_button.className = "clipboard_history_clear";
65
- this.#clear_button.innerText = I18n.t("common.clear");
66
- this.#clear_button.addEventListener("click", this.#onClear);
67
- this.#empty.innerText = this.#empty_text;
69
+ this.#clearButton.type = "button";
70
+ this.#clearButton.className = "clipboard_history_clear";
71
+ this.#clearButton.innerText = I18n.t("common.clear");
72
+ this.#clearButton.addEventListener("click", this.#onClear);
73
+ this.#empty.innerText = this.#emptyText;
68
74
  this.#status.classList.add("chui_visually_hidden");
69
75
  this.#status.setAttribute("role", "status");
70
76
  this.#status.setAttribute("aria-live", "polite");
71
77
  const head = document.createElement("clipboard_history_head");
72
78
  head.appendChild(this.#title);
73
- if (this.#show_clear) head.appendChild(this.#clear_button);
79
+ if (this.#showClear) head.appendChild(this.#clearButton);
74
80
  this.#root.appendChild(head);
75
81
  this.#root.appendChild(this.#list);
76
82
  this.#root.appendChild(this.#empty);
@@ -81,9 +87,13 @@ class ClipboardHistory {
81
87
  this.#render(items);
82
88
  });
83
89
  this.#bound = true;
84
- Desktop.clipboard.history.list().then((items) => {
85
- if (this.#bound) this.#render(items);
86
- }).catch(() => {});
90
+ Desktop.clipboard.history
91
+ .list()
92
+ .then((items) => {
93
+ if (this.#bound) this.#render(items);
94
+ })
95
+ // Первичную загрузку тоже не глушим: при сбое панель осталась бы пустой без причины
96
+ .catch((error) => reportError(error, this.#onError));
87
97
  }
88
98
 
89
99
  // GET
@@ -123,7 +133,7 @@ class ClipboardHistory {
123
133
  }
124
134
 
125
135
  setEmptyText(text = String()) {
126
- this.#empty_text = text;
136
+ this.#emptyText = text;
127
137
  this.#empty.innerText = text;
128
138
  return this;
129
139
  }
@@ -141,7 +151,9 @@ class ClipboardHistory {
141
151
  const text = this.#items[index];
142
152
  if (text === undefined) return Promise.resolve(this.getItems());
143
153
  return Desktop.clipboard.history.copy(text).then((items) => {
144
- this.#announce(I18n.t("graphics.clipboardCopied", {value: ClipboardHistory.#short(text, this.#truncate)}));
154
+ this.#announce(
155
+ I18n.t("graphics.clipboardCopied", { value: ClipboardHistory.#short(text, this.#truncate) })
156
+ );
145
157
  return items;
146
158
  });
147
159
  }
@@ -185,8 +197,8 @@ class ClipboardHistory {
185
197
  this.#items.forEach((text, index) => this.#list.appendChild(this.#createItem(text, index)));
186
198
  this.#list.hidden = this.#items.length === 0;
187
199
  this.#empty.hidden = this.#items.length > 0;
188
- this.#clear_button.disabled = this.#items.length === 0;
189
- if (this.#on_change !== undefined) this.#on_change(this.getItems());
200
+ this.#clearButton.disabled = this.#items.length === 0;
201
+ if (this.#onChange !== undefined) this.#onChange(this.getItems());
190
202
  }
191
203
 
192
204
  #createItem(text = String(), index = Number()) {
@@ -198,7 +210,7 @@ class ClipboardHistory {
198
210
  copy.type = "button";
199
211
  copy.className = "clipboard_history_text";
200
212
  copy.dataset.action = "copy";
201
- copy.setAttribute("aria-label", I18n.t("graphics.clipboardCopy", {value: label}));
213
+ copy.setAttribute("aria-label", I18n.t("graphics.clipboardCopy", { value: label }));
202
214
  copy.title = text;
203
215
  const icon = document.createElement("clipboard_history_icon");
204
216
  icon.innerHTML = new Icon(Icons.CONTENT.CONTENT_COPY, "16px").getHTML();
@@ -211,7 +223,7 @@ class ClipboardHistory {
211
223
  remove.type = "button";
212
224
  remove.className = "clipboard_history_remove";
213
225
  remove.dataset.action = "remove";
214
- remove.setAttribute("aria-label", I18n.t("graphics.clipboardRemove", {value: label}));
226
+ remove.setAttribute("aria-label", I18n.t("graphics.clipboardRemove", { value: label }));
215
227
  remove.innerHTML = new Icon(Icons.ACTIONS.DELETE, "16px").getHTML();
216
228
  item.appendChild(copy);
217
229
  item.appendChild(remove);
@@ -223,13 +235,15 @@ class ClipboardHistory {
223
235
  if (button === null || !this.#list.contains(button)) return;
224
236
  const item = button.closest("clipboard_history_item");
225
237
  const index = Number(item.dataset.index);
226
- if (button.dataset.action === "copy") this.copy(index).catch(() => {});
227
- else this.remove(index).catch(() => {});
238
+ if (button.dataset.action === "copy") this.copy(index).catch((error) => reportError(error, this.#onError));
239
+ else this.remove(index).catch((error) => reportError(error, this.#onError));
228
240
  };
229
241
 
230
242
  #onClear = () => {
231
- this.clear().then(() => this.#announce(I18n.t("graphics.clipboardCleared"))).catch(() => {});
243
+ this.clear()
244
+ .then(() => this.#announce(I18n.t("graphics.clipboardCleared")))
245
+ .catch((error) => reportError(error, this.#onError));
232
246
  };
233
247
  }
234
248
 
235
- exports.ClipboardHistory = ClipboardHistory
249
+ exports.ClipboardHistory = ClipboardHistory;
@@ -3,12 +3,12 @@ chui_clipboard_history {
3
3
  display: block;
4
4
  width: -webkit-fill-available;
5
5
  box-sizing: border-box;
6
- margin: var(--margin);
6
+ margin: var(--block_margin);
7
7
  color: var(--text_color);
8
8
  font-size: var(--font_default_size);
9
9
  background: var(--element_background_2);
10
10
  border: 1px solid var(--border_color);
11
- border-radius: var(--border_radius);
11
+ border-radius: var(--radius_sm);
12
12
  overflow: hidden;
13
13
  }
14
14
 
@@ -17,7 +17,7 @@ clipboard_history_head {
17
17
  align-items: center;
18
18
  justify-content: space-between;
19
19
  gap: 12px;
20
- padding: var(--main_padding);
20
+ padding: var(--block_padding);
21
21
  border-bottom: 1px solid var(--border_color);
22
22
  }
23
23
 
@@ -28,7 +28,7 @@ clipboard_history_title {
28
28
  button.clipboard_history_clear {
29
29
  padding: 2px 10px;
30
30
  border: none;
31
- border-radius: var(--border_radius);
31
+ border-radius: var(--radius_sm);
32
32
  background: var(--element_background);
33
33
  color: var(--text_color);
34
34
  font-family: inherit;
@@ -65,7 +65,10 @@ clipboard_history_item {
65
65
  display: flex;
66
66
  align-items: center;
67
67
  gap: 6px;
68
- padding-block: 2px 2px; padding-inline: 4px var(--main_padding);
68
+ padding-block: 2px 2px;
69
+ padding-inline: 4px var(--block_padding);
70
+ /* Новый элемент буфера встаёт на место: кадр общий — см. `chui_appear_up` в global_style.css */
71
+ animation: chui_appear_up var(--motion_base) var(--motion_ease);
69
72
  }
70
73
 
71
74
  clipboard_history_item + clipboard_history_item {
@@ -80,7 +83,7 @@ button.clipboard_history_text {
80
83
  min-width: 0;
81
84
  padding: 6px 8px;
82
85
  border: none;
83
- border-radius: var(--border_radius);
86
+ border-radius: var(--radius_sm);
84
87
  background: transparent;
85
88
  color: var(--text_color);
86
89
  font-family: inherit;
@@ -93,7 +96,8 @@ button.clipboard_history_text:hover {
93
96
  background: var(--element_background_hover);
94
97
  }
95
98
 
96
- button.clipboard_history_text:focus-visible, button.clipboard_history_remove:focus-visible {
99
+ button.clipboard_history_text:focus-visible,
100
+ button.clipboard_history_remove:focus-visible {
97
101
  outline: var(--focus_outline);
98
102
  outline-offset: var(--focus_outline_offset);
99
103
  }
@@ -119,7 +123,7 @@ button.clipboard_history_remove {
119
123
  height: 26px;
120
124
  padding: 0;
121
125
  border: none;
122
- border-radius: var(--border_radius);
126
+ border-radius: var(--radius_sm);
123
127
  background: transparent;
124
128
  color: var(--text_color_disabled);
125
129
  cursor: pointer;
@@ -132,7 +136,7 @@ button.clipboard_history_remove:hover {
132
136
 
133
137
  clipboard_history_empty {
134
138
  display: block;
135
- padding: var(--main_padding);
139
+ padding: var(--block_padding);
136
140
  text-align: center;
137
141
  color: var(--text_color_disabled);
138
142
  }
@@ -1,19 +1,19 @@
1
1
  class CodeBlock {
2
- #chui_code = document.createElement(`code`);
2
+ #chuiCode = document.createElement(`code`);
3
3
  constructor(text = String(), options = { textAlign: String(), wordBreak: String(), width: String() }) {
4
- require('../../modules/chui_functions').setStyles(__dirname + "/styles.css", 'chUiJS_code');
5
- this.#chui_code.innerText = text;
6
- this.#chui_code.classList.add("chui_code");
7
- if (options.textAlign !== undefined) this.#chui_code.style.textAlign = options.textAlign;
8
- if (options.wordBreak !== undefined) this.#chui_code.style.wordBreak = options.wordBreak;
9
- if (options.width !== undefined) this.#chui_code.style.width = options.width;
4
+ require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_code");
5
+ this.#chuiCode.innerText = text;
6
+ this.#chuiCode.classList.add("chui_code");
7
+ if (options.textAlign !== undefined) this.#chuiCode.style.textAlign = options.textAlign;
8
+ if (options.wordBreak !== undefined) this.#chuiCode.style.wordBreak = options.wordBreak;
9
+ if (options.width !== undefined) this.#chuiCode.style.width = options.width;
10
10
  }
11
11
  setText(text = String()) {
12
- this.#chui_code.innerText = text;
12
+ this.#chuiCode.innerText = text;
13
13
  }
14
14
  set() {
15
- return this.#chui_code;
15
+ return this.#chuiCode;
16
16
  }
17
17
  }
18
18
 
19
- exports.CodeBlock = CodeBlock
19
+ exports.CodeBlock = CodeBlock;
@@ -6,12 +6,12 @@
6
6
  box-sizing: border-box;
7
7
  height: max-content;
8
8
  width: max-content;
9
- margin: var(--margin);
9
+ margin: var(--block_margin);
10
10
  padding: 10px 12px;
11
11
  background: var(--element_background_2);
12
12
  border: 1px solid var(--border_color);
13
- border-radius: var(--border_radius);
14
- font-family: 'chui_mono', monospace;
13
+ border-radius: var(--radius_sm);
14
+ font-family: "chui_mono", monospace;
15
15
  font-size: var(--font_default_size);
16
16
  font-weight: 400;
17
17
  line-height: 1.5;
@@ -19,4 +19,4 @@
19
19
  white-space: pre-wrap;
20
20
  /* Длинная строка прокручивается внутри блока, а не раздвигает карточку */
21
21
  overflow-x: auto;
22
- }
22
+ }
@@ -1,6 +1,6 @@
1
- const {setStyles} = require('../../modules/chui_functions');
2
- const {highlight, escapeHtml} = require('../../modules/chui_highlight/chui_highlight');
3
- const {I18n} = require('../../modules/chui_i18n/chui_i18n');
1
+ const { setStyles } = require("../../modules/chui_functions");
2
+ const { highlight, escapeHtml } = require("../../modules/chui_highlight/chui_highlight");
3
+ const { I18n } = require("../../modules/chui_i18n/chui_i18n");
4
4
 
5
5
  /**
6
6
  * Редактор кода: поле ввода с подсветкой синтаксиса и нумерацией строк.
@@ -38,7 +38,7 @@ class CodeEditor {
38
38
  JAVASCRIPT: "javascript",
39
39
  JSON: "json",
40
40
  CSS: "css",
41
- PLAIN: "plain"
41
+ PLAIN: "plain",
42
42
  };
43
43
  static #counter = 0;
44
44
 
@@ -51,41 +51,43 @@ class CodeEditor {
51
51
  #input = document.createElement("textarea");
52
52
  #id = undefined;
53
53
  #language = CodeEditor.LANGUAGE.JAVASCRIPT;
54
- #line_numbers = true;
55
- #read_only = false;
56
- #tab_size = 4;
54
+ #lineNumbers = true;
55
+ #readOnly = false;
56
+ #tabSize = 4;
57
57
  #label = undefined;
58
58
  #placeholder = undefined;
59
- #on_change = undefined;
60
- #on_save = undefined;
61
-
62
- constructor(options = {
63
- id: String(),
64
- value: String(),
65
- language: String(),
66
- title: String(),
67
- label: String(),
68
- placeholder: String(),
69
- height: String(),
70
- wide: Boolean(),
71
- lineNumbers: Boolean(),
72
- readOnly: Boolean(),
73
- tabSize: Number(),
74
- onChange: undefined,
75
- onSave: undefined
76
- }) {
77
- require('../../modules/chui_fonts').installMono();
59
+ #onChange = undefined;
60
+ #onSave = undefined;
61
+
62
+ constructor(
63
+ options = {
64
+ id: String(),
65
+ value: String(),
66
+ language: String(),
67
+ title: String(),
68
+ label: String(),
69
+ placeholder: String(),
70
+ height: String(),
71
+ wide: Boolean(),
72
+ lineNumbers: Boolean(),
73
+ readOnly: Boolean(),
74
+ tabSize: Number(),
75
+ onChange: undefined,
76
+ onSave: undefined,
77
+ }
78
+ ) {
79
+ require("../../modules/chui_fonts").installMono();
78
80
  setStyles(__dirname + "/styles.css", "chUiJS_CodeEditor");
79
81
  CodeEditor.#counter += 1;
80
82
  this.#id = options.id === undefined ? `chui_code_editor_${CodeEditor.#counter}` : options.id;
81
83
  this.#root.id = this.#id;
82
84
  this.#language = options.language === undefined ? this.#language : options.language;
83
- this.#line_numbers = options.lineNumbers !== false;
84
- this.#tab_size = options.tabSize === undefined ? this.#tab_size : options.tabSize;
85
+ this.#lineNumbers = options.lineNumbers !== false;
86
+ this.#tabSize = options.tabSize === undefined ? this.#tabSize : options.tabSize;
85
87
  this.#label = options.label;
86
88
  this.#placeholder = options.placeholder;
87
- this.#on_change = options.onChange;
88
- this.#on_save = options.onSave;
89
+ this.#onChange = options.onChange;
90
+ this.#onSave = options.onSave;
89
91
  this.#title.innerText = options.title === undefined ? "" : options.title;
90
92
  this.#title.hidden = options.title === undefined;
91
93
  // Текст и подсветка — нативные <textarea> и <pre>, поэтому у них классы, а не теги
@@ -105,11 +107,11 @@ class CodeEditor {
105
107
  this.#body.appendChild(this.#input);
106
108
  if (options.title !== undefined) this.#root.appendChild(this.#title);
107
109
  this.#root.appendChild(this.#body);
108
- this.#root.style.setProperty("--code_editor_tab_size", String(this.#tab_size));
110
+ this.#root.style.setProperty("--code_editor_tab_size", String(this.#tabSize));
109
111
  if (options.height !== undefined) this.setHeight(options.height);
110
112
  if (options.wide === true) this.#root.classList.add("code_editor_wide");
111
113
  // Скрытые номера строк — это класс с нулевой шириной колонки, а не только флаг
112
- this.#root.classList.toggle("code_editor_no_lines", !this.#line_numbers);
114
+ this.#root.classList.toggle("code_editor_no_lines", !this.#lineNumbers);
113
115
  this.setReadOnly(options.readOnly === true);
114
116
  this.#input.addEventListener("input", this.#onInput);
115
117
  this.#input.addEventListener("scroll", this.#syncScroll);
@@ -136,15 +138,15 @@ class CodeEditor {
136
138
  }
137
139
 
138
140
  isReadOnly() {
139
- return this.#read_only;
141
+ return this.#readOnly;
140
142
  }
141
143
 
142
144
  isLineNumbersVisible() {
143
- return this.#line_numbers;
145
+ return this.#lineNumbers;
144
146
  }
145
147
 
146
148
  getTabSize() {
147
- return this.#tab_size;
149
+ return this.#tabSize;
148
150
  }
149
151
 
150
152
  // SET
@@ -187,22 +189,22 @@ class CodeEditor {
187
189
  }
188
190
 
189
191
  setReadOnly(readOnly = Boolean()) {
190
- this.#read_only = readOnly === true;
191
- this.#input.readOnly = this.#read_only;
192
- this.#root.classList.toggle("code_editor_readonly", this.#read_only);
192
+ this.#readOnly = readOnly === true;
193
+ this.#input.readOnly = this.#readOnly;
194
+ this.#root.classList.toggle("code_editor_readonly", this.#readOnly);
193
195
  return this;
194
196
  }
195
197
 
196
198
  setLineNumbers(visible = Boolean()) {
197
- this.#line_numbers = visible === true;
198
- this.#root.classList.toggle("code_editor_no_lines", !this.#line_numbers);
199
+ this.#lineNumbers = visible === true;
200
+ this.#root.classList.toggle("code_editor_no_lines", !this.#lineNumbers);
199
201
  this.#refresh();
200
202
  return this;
201
203
  }
202
204
 
203
205
  setTabSize(size = Number()) {
204
- this.#tab_size = size;
205
- this.#root.style.setProperty("--code_editor_tab_size", String(this.#tab_size));
206
+ this.#tabSize = size;
207
+ this.#root.style.setProperty("--code_editor_tab_size", String(this.#tabSize));
206
208
  return this;
207
209
  }
208
210
 
@@ -232,7 +234,10 @@ class CodeEditor {
232
234
  // === ВНУТРЕННЕЕ ===
233
235
  #applyLabel() {
234
236
  const language = this.#language === CodeEditor.LANGUAGE.PLAIN ? I18n.t("editor.noHighlight") : this.#language;
235
- this.#input.setAttribute("aria-label", this.#label === undefined ? I18n.t("editor.codeEditor", {language: language}) : this.#label);
237
+ this.#input.setAttribute(
238
+ "aria-label",
239
+ this.#label === undefined ? I18n.t("editor.codeEditor", { language: language }) : this.#label
240
+ );
236
241
  }
237
242
 
238
243
  /** Значение + перерисовка подсветки и нумерации; `caret` — куда вернуть каретку */
@@ -243,7 +248,7 @@ class CodeEditor {
243
248
  this.#input.selectionStart = caret;
244
249
  this.#input.selectionEnd = caret;
245
250
  }
246
- if (this.#on_change !== undefined) this.#on_change(value);
251
+ if (this.#onChange !== undefined) this.#onChange(value);
247
252
  }
248
253
 
249
254
  #refresh() {
@@ -255,7 +260,9 @@ class CodeEditor {
255
260
  this.#code.innerHTML = highlight(value, this.#language);
256
261
  }
257
262
  const lines = value.split("\n").length;
258
- this.#lines.innerText = this.#line_numbers ? Array.from({length: lines}, (_, index) => index + 1).join("\n") : "";
263
+ this.#lines.innerText = this.#lineNumbers
264
+ ? Array.from({ length: lines }, (_, index) => index + 1).join("\n")
265
+ : "";
259
266
  this.#syncScroll();
260
267
  }
261
268
 
@@ -268,7 +275,7 @@ class CodeEditor {
268
275
 
269
276
  #onInput = () => {
270
277
  this.#refresh();
271
- if (this.#on_change !== undefined) this.#on_change(this.getValue());
278
+ if (this.#onChange !== undefined) this.#onChange(this.getValue());
272
279
  };
273
280
 
274
281
  #onKeyDown = (event) => {
@@ -277,12 +284,12 @@ class CodeEditor {
277
284
  const end = this.#input.selectionEnd === undefined ? value.length : this.#input.selectionEnd;
278
285
  if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === "s") {
279
286
  event.preventDefault();
280
- if (this.#on_save !== undefined) this.#on_save(value);
287
+ if (this.#onSave !== undefined) this.#onSave(value);
281
288
  return;
282
289
  }
283
290
  if (event.key === "Tab") {
284
291
  event.preventDefault();
285
- if (this.#read_only) return;
292
+ if (this.#readOnly) return;
286
293
  if (event.shiftKey) this.#outdent();
287
294
  else this.#indent();
288
295
  return;
@@ -311,8 +318,14 @@ class CodeEditor {
311
318
  }
312
319
  const from = value.lastIndexOf("\n", start - 1) + 1;
313
320
  const block = value.slice(from, end);
314
- const shifted = block.split("\n").map((line) => `\t${line}`).join("\n");
315
- this.#applyValue(`${value.slice(0, from)}${shifted}${value.slice(end)}`, start + 1 + (shifted.length - block.length));
321
+ const shifted = block
322
+ .split("\n")
323
+ .map((line) => `\t${line}`)
324
+ .join("\n");
325
+ this.#applyValue(
326
+ `${value.slice(0, from)}${shifted}${value.slice(end)}`,
327
+ start + 1 + (shifted.length - block.length)
328
+ );
316
329
  }
317
330
 
318
331
  /** Shift+Tab: убрать один отступ у выделенных строк */
@@ -323,14 +336,17 @@ class CodeEditor {
323
336
  const from = value.lastIndexOf("\n", start - 1) + 1;
324
337
  const block = value.slice(from, end);
325
338
  let removed = 0;
326
- const shifted = block.split("\n").map((line) => {
327
- const match = line.match(/^[ \t]/);
328
- if (match === null) return line;
329
- removed += 1;
330
- return line.slice(1);
331
- }).join("\n");
339
+ const shifted = block
340
+ .split("\n")
341
+ .map((line) => {
342
+ const match = line.match(/^[ \t]/);
343
+ if (match === null) return line;
344
+ removed += 1;
345
+ return line.slice(1);
346
+ })
347
+ .join("\n");
332
348
  this.#applyValue(`${value.slice(0, from)}${shifted}${value.slice(end)}`, Math.max(from, start - removed));
333
349
  }
334
350
  }
335
351
 
336
- exports.CodeEditor = CodeEditor
352
+ exports.CodeEditor = CodeEditor;
@@ -6,12 +6,12 @@ chui_code_editor {
6
6
  flex-direction: column;
7
7
  width: -webkit-fill-available;
8
8
  box-sizing: border-box;
9
- margin: var(--margin);
9
+ margin: var(--block_margin);
10
10
  color: var(--text_color);
11
11
  background: var(--element_background_2);
12
12
  border: 1px solid var(--border_color);
13
- border-radius: var(--border_radius);
14
- font-family: 'chui_mono', monospace;
13
+ border-radius: var(--radius_sm);
14
+ font-family: "chui_mono", monospace;
15
15
  font-size: var(--font_default_size);
16
16
  overflow: hidden;
17
17
  }
@@ -51,7 +51,8 @@ code_editor_lines {
51
51
  bottom: 0;
52
52
  width: var(--code_editor_gutter);
53
53
  box-sizing: border-box;
54
- padding-block: 8px 8px; padding-inline: 8px 6px;
54
+ padding-block: 8px 8px;
55
+ padding-inline: 8px 6px;
55
56
  overflow: hidden;
56
57
  text-align: end;
57
58
  white-space: pre;
@@ -110,7 +111,7 @@ textarea.code_editor_input {
110
111
  }
111
112
 
112
113
  textarea.code_editor_input::selection {
113
- background: var(--blue_prime_background_trans);
114
+ background: var(--blue_prime_background_tint_strong);
114
115
  color: transparent;
115
116
  }
116
117