chuijs 4.0.1 → 4.0.3

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 (222) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +43 -632
  3. package/framework/appLayout/default/chui_app_layout.js +314 -273
  4. package/framework/appLayout/default/global_style.css +93 -53
  5. package/framework/components/chui_accordion/accordion.js +29 -26
  6. package/framework/components/chui_accordion/styles.css +6 -5
  7. package/framework/components/chui_action_sheet/action_sheet.js +59 -33
  8. package/framework/components/chui_action_sheet/styles.css +2 -1
  9. package/framework/components/chui_affix/affix.js +11 -6
  10. package/framework/components/chui_alert/alert.js +23 -14
  11. package/framework/components/chui_avatar/avatar.js +23 -22
  12. package/framework/components/chui_avatar_group/avatar_group.js +21 -19
  13. package/framework/components/chui_backtop/backtop.js +35 -19
  14. package/framework/components/chui_badge/badge.js +15 -13
  15. package/framework/components/chui_breadcrumb/breadcrumb.js +15 -13
  16. package/framework/components/chui_button/button.js +42 -22
  17. package/framework/components/chui_button/styles.css +2 -2
  18. package/framework/components/chui_calendar/calendar.js +12 -10
  19. package/framework/components/chui_card/card.js +43 -23
  20. package/framework/components/chui_chat/chat.js +72 -33
  21. package/framework/components/chui_clipboard_history/clipboard_history.js +30 -21
  22. package/framework/components/chui_clipboard_history/styles.css +4 -2
  23. package/framework/components/chui_code/code.js +2 -2
  24. package/framework/components/chui_code/styles.css +2 -2
  25. package/framework/components/chui_code_editor/code_editor.js +47 -31
  26. package/framework/components/chui_code_editor/styles.css +3 -2
  27. package/framework/components/chui_command_palette/command_palette.js +60 -37
  28. package/framework/components/chui_console/console.js +5 -5
  29. package/framework/components/chui_console/styles.css +1 -1
  30. package/framework/components/chui_content_block/content_block.js +33 -19
  31. package/framework/components/chui_content_block/styles.css +2 -2
  32. package/framework/components/chui_context_menu/context_menu.js +9 -4
  33. package/framework/components/chui_custom_element/custom_element.js +22 -15
  34. package/framework/components/chui_data_grid/data_grid.js +396 -234
  35. package/framework/components/chui_data_grid/styles.css +10 -8
  36. package/framework/components/chui_descriptions/descriptions.js +34 -17
  37. package/framework/components/chui_details/details.js +32 -26
  38. package/framework/components/chui_details/styles.css +5 -4
  39. package/framework/components/chui_diff_viewer/diff_viewer.js +91 -66
  40. package/framework/components/chui_diff_viewer/styles.css +1 -1
  41. package/framework/components/chui_divider/divider.js +13 -11
  42. package/framework/components/chui_drawer/drawer.js +27 -25
  43. package/framework/components/chui_drop_zone/drop_zone.js +31 -21
  44. package/framework/components/chui_empty_state/empty_state.js +20 -15
  45. package/framework/components/chui_fieldset/fieldset.js +37 -20
  46. package/framework/components/chui_fieldset/styles.css +1 -1
  47. package/framework/components/chui_file_explorer/file_explorer.js +157 -86
  48. package/framework/components/chui_file_explorer/styles.css +2 -1
  49. package/framework/components/chui_form/form.js +31 -19
  50. package/framework/components/chui_form/styles.css +1 -1
  51. package/framework/components/chui_gantt/gantt.js +64 -40
  52. package/framework/components/chui_graphs/graphs.js +301 -200
  53. package/framework/components/chui_graphs/styles.css +1 -1
  54. package/framework/components/chui_hero/hero.js +40 -22
  55. package/framework/components/chui_html_block/html_block.js +6 -6
  56. package/framework/components/chui_html_block/styles.css +2 -2
  57. package/framework/components/chui_hx/hx.js +3 -3
  58. package/framework/components/chui_hx/styles.css +11 -4
  59. package/framework/components/chui_icons/icons.js +2109 -2109
  60. package/framework/components/chui_icons/styles.css +2 -2
  61. package/framework/components/chui_inputs/chui_check_box/check_box.js +31 -19
  62. package/framework/components/chui_inputs/chui_check_box/styles.css +18 -18
  63. package/framework/components/chui_inputs/chui_chips/chips.js +50 -40
  64. package/framework/components/chui_inputs/chui_chips/styles.css +4 -2
  65. package/framework/components/chui_inputs/chui_color_picker/color_picker.js +36 -24
  66. package/framework/components/chui_inputs/chui_combo_box/combo_box.js +100 -82
  67. package/framework/components/chui_inputs/chui_combo_box/styles.css +14 -12
  68. package/framework/components/chui_inputs/chui_date/date.js +102 -66
  69. package/framework/components/chui_inputs/chui_date/styles.css +12 -11
  70. package/framework/components/chui_inputs/chui_date_range/date_range.js +40 -29
  71. package/framework/components/chui_inputs/chui_datetime/datetime.js +35 -27
  72. package/framework/components/chui_inputs/chui_email/email.js +43 -31
  73. package/framework/components/chui_inputs/chui_email/styles.css +5 -5
  74. package/framework/components/chui_inputs/chui_file/file.js +68 -41
  75. package/framework/components/chui_inputs/chui_file/styles.css +13 -12
  76. package/framework/components/chui_inputs/chui_hotkey/hotkey.js +61 -36
  77. package/framework/components/chui_inputs/chui_masked/masked.js +39 -28
  78. package/framework/components/chui_inputs/chui_mention/mention.js +77 -30
  79. package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +173 -153
  80. package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +9 -7
  81. package/framework/components/chui_inputs/chui_number/number.js +58 -41
  82. package/framework/components/chui_inputs/chui_number/styles.css +7 -7
  83. package/framework/components/chui_inputs/chui_otp/otp.js +38 -29
  84. package/framework/components/chui_inputs/chui_password/password.js +58 -36
  85. package/framework/components/chui_inputs/chui_password/styles.css +8 -8
  86. package/framework/components/chui_inputs/chui_radio_button/radio_button.js +37 -25
  87. package/framework/components/chui_inputs/chui_radio_button/styles.css +20 -20
  88. package/framework/components/chui_inputs/chui_rating/rating.js +26 -22
  89. package/framework/components/chui_inputs/chui_select_box/select_box.js +102 -78
  90. package/framework/components/chui_inputs/chui_select_box/styles.css +11 -11
  91. package/framework/components/chui_inputs/chui_slider/slider.js +29 -26
  92. package/framework/components/chui_inputs/chui_slider/styles.css +2 -1
  93. package/framework/components/chui_inputs/chui_text/styles.css +8 -8
  94. package/framework/components/chui_inputs/chui_text/text.js +65 -44
  95. package/framework/components/chui_inputs/chui_text_area/styles.css +6 -6
  96. package/framework/components/chui_inputs/chui_text_area/text_area.js +51 -28
  97. package/framework/components/chui_inputs/chui_time/styles.css +5 -3
  98. package/framework/components/chui_inputs/chui_time/time.js +38 -27
  99. package/framework/components/chui_inputs/chui_toggle/styles.css +3 -3
  100. package/framework/components/chui_inputs/chui_toggle/toggle.js +16 -16
  101. package/framework/components/chui_json_editor/json_editor.js +53 -43
  102. package/framework/components/chui_json_viewer/json_viewer.js +52 -33
  103. package/framework/components/chui_json_viewer/styles.css +3 -2
  104. package/framework/components/chui_kanban/kanban.js +52 -34
  105. package/framework/components/chui_kbd/kbd.js +12 -10
  106. package/framework/components/chui_label/label.js +14 -12
  107. package/framework/components/chui_label/styles.css +2 -2
  108. package/framework/components/chui_link/link.js +27 -20
  109. package/framework/components/chui_list/list.js +31 -27
  110. package/framework/components/chui_list/styles.css +2 -1
  111. package/framework/components/chui_markdown_editor/markdown_editor.js +60 -44
  112. package/framework/components/chui_media/audio.js +326 -227
  113. package/framework/components/chui_media/audio_styles.css +40 -21
  114. package/framework/components/chui_media/image.js +70 -38
  115. package/framework/components/chui_media/image_compare.js +52 -21
  116. package/framework/components/chui_media/image_styles.css +3 -3
  117. package/framework/components/chui_media/video.js +155 -62
  118. package/framework/components/chui_media/video_styles.css +33 -16
  119. package/framework/components/chui_menu_bar/menu_bar.js +26 -24
  120. package/framework/components/chui_menu_bar/styles.css +4 -2
  121. package/framework/components/chui_modal/modal.js +44 -43
  122. package/framework/components/chui_modal/styles.css +3 -2
  123. package/framework/components/chui_notification/notification.js +50 -34
  124. package/framework/components/chui_notification/notification_download.js +31 -25
  125. package/framework/components/chui_notification/notification_download_progress.css +3 -2
  126. package/framework/components/chui_notification/notification_download_progress.js +47 -41
  127. package/framework/components/chui_notification/notification_update.js +23 -16
  128. package/framework/components/chui_notification/status_plate.js +2 -2
  129. package/framework/components/chui_notification/styles_download.css +1 -1
  130. package/framework/components/chui_notification/styles_update.css +1 -1
  131. package/framework/components/chui_org_chart/org_chart.js +74 -35
  132. package/framework/components/chui_pagination/pagination.js +62 -27
  133. package/framework/components/chui_paragraph/paragraph.js +2 -2
  134. package/framework/components/chui_paragraph/styles.css +1 -1
  135. package/framework/components/chui_popover/popover.js +49 -28
  136. package/framework/components/chui_popups/popups.js +137 -108
  137. package/framework/components/chui_popups/styles.css +2 -2
  138. package/framework/components/chui_print_button/print_button.js +33 -23
  139. package/framework/components/chui_progress_bar/progress_bar.js +23 -15
  140. package/framework/components/chui_progress_bar/styles.css +2 -2
  141. package/framework/components/chui_progress_ring/progress_ring.js +17 -15
  142. package/framework/components/chui_qrcode/qrcode.js +75 -31
  143. package/framework/components/chui_query_builder/query_builder.js +216 -123
  144. package/framework/components/chui_radio_group/radio_group.js +36 -26
  145. package/framework/components/chui_radio_group/styles.css +1 -1
  146. package/framework/components/chui_result/result.js +26 -16
  147. package/framework/components/chui_scheduler/scheduler.js +57 -35
  148. package/framework/components/chui_scheduler/styles.css +6 -2
  149. package/framework/components/chui_segmented_control/segmented_control.js +27 -21
  150. package/framework/components/chui_settings/settings.js +122 -48
  151. package/framework/components/chui_shortcut_help/shortcut_help.js +55 -32
  152. package/framework/components/chui_sidebar_nav/sidebar_nav.js +33 -23
  153. package/framework/components/chui_skeleton/skeleton.js +29 -24
  154. package/framework/components/chui_slideshow/slideshow.js +60 -41
  155. package/framework/components/chui_slideshow/styles.css +18 -12
  156. package/framework/components/chui_spinner/spinner.js +8 -8
  157. package/framework/components/chui_spinner/styles.css +0 -1
  158. package/framework/components/chui_split_button/split_button.js +23 -18
  159. package/framework/components/chui_split_button/styles.css +1 -1
  160. package/framework/components/chui_splitter/splitter.js +35 -28
  161. package/framework/components/chui_statistic/statistic.js +65 -38
  162. package/framework/components/chui_status_bar/status_bar.js +11 -9
  163. package/framework/components/chui_stepper/stepper.js +27 -22
  164. package/framework/components/chui_sticky_bar/sticky_bar.js +9 -4
  165. package/framework/components/chui_sticky_bar/styles.css +3 -1
  166. package/framework/components/chui_tabs/chui_tabs.js +28 -22
  167. package/framework/components/chui_tabs/styles.css +3 -3
  168. package/framework/components/chui_text_editor/styles.css +20 -19
  169. package/framework/components/chui_text_editor/text_editor.js +85 -61
  170. package/framework/components/chui_text_editor/text_editor_panel.js +346 -284
  171. package/framework/components/chui_theme_toggle/theme_toggle.js +27 -22
  172. package/framework/components/chui_timeline/timeline.js +14 -12
  173. package/framework/components/chui_toast_queue/toast_queue.js +52 -46
  174. package/framework/components/chui_toolbar/toolbar.js +20 -13
  175. package/framework/components/chui_tooltip/tooltip.js +37 -24
  176. package/framework/components/chui_tour/styles.css +8 -3
  177. package/framework/components/chui_tour/tour.js +61 -27
  178. package/framework/components/chui_transfer/styles.css +2 -1
  179. package/framework/components/chui_transfer/transfer.js +75 -42
  180. package/framework/components/chui_tree_table/tree_table.js +43 -29
  181. package/framework/components/chui_tree_view/styles.css +4 -2
  182. package/framework/components/chui_tree_view/tree_view.js +142 -99
  183. package/framework/components/chui_watermark/watermark.js +24 -16
  184. package/framework/components/chui_webview/styles.css +2 -2
  185. package/framework/components/chui_webview/webview.js +62 -50
  186. package/framework/components/telegram_bot/chui_telegram_bot.js +71 -64
  187. package/framework/modules/chui_a11y/chui_a11y.js +77 -46
  188. package/framework/modules/chui_animations/animations.js +42 -42
  189. package/framework/modules/chui_animations/styles.css +1 -1
  190. package/framework/modules/chui_bridge/preload.js +56 -26
  191. package/framework/modules/chui_functions.js +52 -50
  192. package/framework/modules/chui_highlight/chui_highlight.js +25 -22
  193. package/framework/modules/chui_i18n/chui_i18n.js +9 -7
  194. package/framework/modules/chui_i18n/locales/a11y.js +5 -5
  195. package/framework/modules/chui_i18n/locales/app_layout.js +5 -5
  196. package/framework/modules/chui_i18n/locales/calendar.js +3 -3
  197. package/framework/modules/chui_i18n/locales/common.js +3 -3
  198. package/framework/modules/chui_i18n/locales/data.js +36 -26
  199. package/framework/modules/chui_i18n/locales/editors.js +40 -13
  200. package/framework/modules/chui_i18n/locales/feedback.js +3 -3
  201. package/framework/modules/chui_i18n/locales/forms.js +8 -8
  202. package/framework/modules/chui_i18n/locales/graphics.js +8 -8
  203. package/framework/modules/chui_i18n/locales/media.js +4 -4
  204. package/framework/modules/chui_i18n/locales/navigation.js +8 -8
  205. package/framework/modules/chui_i18n/locales/validate.js +3 -3
  206. package/framework/modules/chui_json/chui_json.js +9 -9
  207. package/framework/modules/chui_layout/chui_layout.js +12 -10
  208. package/framework/modules/chui_logger/chui_logger.js +29 -25
  209. package/framework/modules/chui_page/page.js +33 -27
  210. package/framework/modules/chui_page/styles.css +3 -26
  211. package/framework/modules/chui_qr/chui_qr.js +158 -67
  212. package/framework/modules/chui_scrollbar/chui_scrollbar.js +35 -24
  213. package/framework/modules/chui_scrollbar/styles.css +3 -1
  214. package/framework/modules/chui_services/chui_channels.js +76 -11
  215. package/framework/modules/chui_services/chui_services.js +39 -31
  216. package/framework/modules/chui_services/desktop.js +149 -30
  217. package/framework/modules/chui_sortable/chui_sortable.js +17 -12
  218. package/framework/modules/chui_validate/chui_validate.js +7 -4
  219. package/framework/tray_bar/chui_menu_items.js +136 -46
  220. package/index.d.ts +4814 -0
  221. package/index.js +449 -334
  222. package/package.json +79 -68
@@ -1,7 +1,7 @@
1
- const fs = require("fs")
1
+ const fs = require("fs");
2
2
 
3
3
  function sleep(ms) {
4
- return new Promise(resolve => setTimeout(resolve, ms));
4
+ return new Promise((resolve) => setTimeout(resolve, ms));
5
5
  }
6
6
 
7
7
  /** Кэш прочитанных таблиц стилей: один файл отдаётся разным `id` без повторного чтения с диска */
@@ -9,11 +9,11 @@ const styles_cache = new Map();
9
9
 
10
10
  function setStyles(pathToCSS = String(), component = String()) {
11
11
  if (document.getElementById(component) != null) return;
12
- if (styles_cache.has(pathToCSS) === false) styles_cache.set(pathToCSS, fs.readFileSync(pathToCSS, 'utf8'));
13
- let style = document.createElement('style');
12
+ if (styles_cache.has(pathToCSS) === false) styles_cache.set(pathToCSS, fs.readFileSync(pathToCSS, "utf8"));
13
+ let style = document.createElement("style");
14
14
  style.innerHTML = styles_cache.get(pathToCSS);
15
- style.type = 'text/css';
16
- style.setAttribute('id', component);
15
+ style.type = "text/css";
16
+ style.setAttribute("id", component);
17
17
  document.head.appendChild(style);
18
18
  }
19
19
 
@@ -23,17 +23,17 @@ function style_parse(json, component) {
23
23
  let stringz = JSON.parse(JSON.stringify(json));
24
24
  let style_string = [];
25
25
  for (let i = 0; i < stringz.length; i++) {
26
- style_string.push(`${stringz[i].name} {`)
27
- JSON.parse(JSON.stringify(stringz[i].style), function(key, value) {
28
- if (typeof value !== 'object') style_string.push(`${key}:${value};`)
26
+ style_string.push(`${stringz[i].name} {`);
27
+ JSON.parse(JSON.stringify(stringz[i].style), function (key, value) {
28
+ if (typeof value !== "object") style_string.push(`${key}:${value};`);
29
29
  return value;
30
30
  });
31
- style_string.push(`}\n`)
31
+ style_string.push(`}\n`);
32
32
  }
33
- let style = document.createElement('style');
33
+ let style = document.createElement("style");
34
34
  style.innerText = style_string.join("").slice(0, -1);
35
- style.type = 'text/css';
36
- style.setAttribute('id', component);
35
+ style.type = "text/css";
36
+ style.setAttribute("id", component);
37
37
  document.head.appendChild(style);
38
38
  }
39
39
 
@@ -48,13 +48,13 @@ const render = (rendez) => {
48
48
  reject(e);
49
49
  }
50
50
  };
51
- if (document.readyState === 'loading') window.addEventListener('DOMContentLoaded', run, { once: true });
51
+ if (document.readyState === "loading") window.addEventListener("DOMContentLoaded", run, { once: true });
52
52
  else run();
53
53
  });
54
- }
54
+ };
55
55
 
56
56
  function getDefaultIcon() {
57
- return require('path').join(__dirname, 'chui_icon.png');
57
+ return require("path").join(__dirname, "chui_icon.png");
58
58
  }
59
59
 
60
60
  const DROPDOWN_VIEWPORT_MARGIN = 8;
@@ -70,7 +70,8 @@ function dropdownViewport(anchor = new HTMLElement()) {
70
70
  let current = anchor.parentElement;
71
71
  while (current !== null) {
72
72
  const style = window.getComputedStyle(current);
73
- const clips = /(auto|scroll|overlay|hidden)/.test(style.overflowY) ||
73
+ const clips =
74
+ /(auto|scroll|overlay|hidden)/.test(style.overflowY) ||
74
75
  /(auto|scroll|overlay|hidden)/.test(style.overflowX);
75
76
  if (clips) {
76
77
  const box = current.getBoundingClientRect();
@@ -79,7 +80,7 @@ function dropdownViewport(anchor = new HTMLElement()) {
79
80
  }
80
81
  current = current.parentElement;
81
82
  }
82
- return {top: top, bottom: Math.max(bottom, top)};
83
+ return { top: top, bottom: Math.max(bottom, top) };
83
84
  }
84
85
 
85
86
  /**
@@ -93,7 +94,7 @@ function dropdownPlacement(dropdown = new HTMLElement(), anchor = new HTMLElemen
93
94
  const spaceBelow = view.bottom - anchorRect.bottom - DROPDOWN_VIEWPORT_MARGIN;
94
95
  const spaceAbove = anchorRect.top - view.top - DROPDOWN_VIEWPORT_MARGIN;
95
96
  const up = dropdown.offsetHeight > spaceBelow && spaceAbove >= spaceBelow;
96
- return {up: up, maxHeight: Math.max(0, up ? spaceAbove : spaceBelow)};
97
+ return { up: up, maxHeight: Math.max(0, up ? spaceAbove : spaceBelow) };
97
98
  }
98
99
 
99
100
  /**
@@ -116,24 +117,25 @@ function shouldOpenDropdownUp(dropdown = new HTMLElement(), anchor = new HTMLEle
116
117
  let markdown_parser = undefined;
117
118
  function markdownToHtml(text = String()) {
118
119
  if (text === undefined || text === null || String(text) === "") return "";
119
- if (markdown_parser === undefined) markdown_parser = new (require('markdown-it'))({html: false, linkify: false, breaks: false});
120
+ if (markdown_parser === undefined)
121
+ markdown_parser = new (require("markdown-it"))({ html: false, linkify: false, breaks: false });
120
122
  return markdown_parser.render(String(text)).trim();
121
123
  }
122
124
 
123
125
  /** Обратный разбор: HTML → markdown (`turndown`) */
124
126
  function htmlToMarkdown(text = String()) {
125
127
  if (text === undefined || text === null || String(text) === "") return "";
126
- const TurndownService = require('turndown');
128
+ const TurndownService = require("turndown");
127
129
  return new TurndownService().turndown(String(text));
128
130
  }
129
131
 
130
132
  function getDate() {
131
133
  let date = new Date();
132
- let day = ('0' + Number(date.getDate()).toString()).slice(-2);
133
- let month = ('0' + Number(date.getMonth() + 1).toString()).slice(-2);
134
+ let day = ("0" + Number(date.getDate()).toString()).slice(-2);
135
+ let month = ("0" + Number(date.getMonth() + 1).toString()).slice(-2);
134
136
  let year = date.getFullYear();
135
- let hours = ('0' + Number(date.getHours()).toString()).slice(-2);
136
- let minutes = ('0' + Number(date.getMinutes()).toString()).slice(-2);
137
+ let hours = ("0" + Number(date.getHours()).toString()).slice(-2);
138
+ let minutes = ("0" + Number(date.getMinutes()).toString()).slice(-2);
137
139
  return `${day}.${month}.${year} ${hours}:${minutes}`;
138
140
  }
139
141
 
@@ -145,8 +147,8 @@ function getDate() {
145
147
  * в узкой карточке съедала полстроки заголовка и читалась служебной подписью.
146
148
  */
147
149
  function getTime(date = new Date()) {
148
- const hours = ('0' + Number(date.getHours()).toString()).slice(-2);
149
- const minutes = ('0' + Number(date.getMinutes()).toString()).slice(-2);
150
+ const hours = ("0" + Number(date.getHours()).toString()).slice(-2);
151
+ const minutes = ("0" + Number(date.getMinutes()).toString()).slice(-2);
150
152
  return `${hours}:${minutes}`;
151
153
  }
152
154
 
@@ -159,18 +161,18 @@ function getTime(date = new Date()) {
159
161
  * как строки.
160
162
  */
161
163
  function getDayKey(date = new Date()) {
162
- const month = ('0' + Number(date.getMonth() + 1).toString()).slice(-2);
163
- const day = ('0' + Number(date.getDate()).toString()).slice(-2);
164
+ const month = ("0" + Number(date.getMonth() + 1).toString()).slice(-2);
165
+ const day = ("0" + Number(date.getDate()).toString()).slice(-2);
164
166
  return `${date.getFullYear()}-${month}-${day}`;
165
167
  }
166
168
 
167
169
  function formatBytes(bytes, decimals = 2) {
168
- if (!+bytes) return '0 Bytes'
169
- const k = 1024
170
- const dm = decimals < 0 ? 0 : decimals
171
- const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
172
- const i = Math.floor(Math.log(bytes) / Math.log(k))
173
- return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`
170
+ if (!+bytes) return "0 Bytes";
171
+ const k = 1024;
172
+ const dm = decimals < 0 ? 0 : decimals;
173
+ const sizes = ["Bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
174
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
175
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
174
176
  }
175
177
 
176
178
  /**
@@ -204,18 +206,18 @@ function scrollParent(node = undefined) {
204
206
  return document.scrollingElement;
205
207
  }
206
208
 
207
- exports.getDate = getDate
208
- exports.getTime = getTime
209
- exports.getDayKey = getDayKey
210
- exports.sleep = sleep
211
- exports.style_parse = style_parse
212
- exports.render = render
213
- exports.markdownToHtml = markdownToHtml
214
- exports.htmlToMarkdown = htmlToMarkdown
215
- exports.getDefaultIcon = getDefaultIcon
216
- exports.shouldOpenDropdownUp = shouldOpenDropdownUp
217
- exports.dropdownPlacement = dropdownPlacement
218
- exports.setStyles = setStyles
219
- exports.formatBytes = formatBytes
220
- exports.optionOr = optionOr
221
- exports.scrollParent = scrollParent
209
+ exports.getDate = getDate;
210
+ exports.getTime = getTime;
211
+ exports.getDayKey = getDayKey;
212
+ exports.sleep = sleep;
213
+ exports.style_parse = style_parse;
214
+ exports.render = render;
215
+ exports.markdownToHtml = markdownToHtml;
216
+ exports.htmlToMarkdown = htmlToMarkdown;
217
+ exports.getDefaultIcon = getDefaultIcon;
218
+ exports.shouldOpenDropdownUp = shouldOpenDropdownUp;
219
+ exports.dropdownPlacement = dropdownPlacement;
220
+ exports.setStyles = setStyles;
221
+ exports.formatBytes = formatBytes;
222
+ exports.optionOr = optionOr;
223
+ exports.scrollParent = scrollParent;
@@ -1,4 +1,4 @@
1
- const {setStyles} = require("../chui_functions");
1
+ const { setStyles } = require("../chui_functions");
2
2
 
3
3
  /**
4
4
  * Подсветка кода регулярными токенами: общий модуль для `CodeEditor` и `JsonEditor`.
@@ -16,32 +16,35 @@ const {setStyles} = require("../chui_functions");
16
16
  */
17
17
  const RULES = {
18
18
  javascript: [
19
- {type: "comment", source: "/\\*[\\s\\S]*?\\*/|//[^\\n]*"},
20
- {type: "string", source: "`(?:\\\\.|[^`\\\\])*`|\"(?:\\\\.|[^\"\\\\\\n])*\"|'(?:\\\\.|[^'\\\\\\n])*'"},
21
- {type: "number", source: "\\b(?:0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b"},
22
- {type: "keyword", source: "\\b(?:const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|class|new|import|export|from|async|await|try|catch|finally|throw|typeof|instanceof|extends|super|this|null|undefined|true|false|delete|in|of|yield)\\b"},
23
- {type: "function", source: "\\b[A-Za-z_$][\\w$]*(?=\\s*\\()"},
24
- {type: "property", source: "(?<=\\.)[A-Za-z_$][\\w$]*"},
25
- {type: "operator", source: "=>|===|!==|==|!=|<=|>=|&&|\\|\\||[+\\-*/%!<>=&|^~?:]"}
19
+ { type: "comment", source: "/\\*[\\s\\S]*?\\*/|//[^\\n]*" },
20
+ { type: "string", source: "`(?:\\\\.|[^`\\\\])*`|\"(?:\\\\.|[^\"\\\\\\n])*\"|'(?:\\\\.|[^'\\\\\\n])*'" },
21
+ { type: "number", source: "\\b(?:0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b" },
22
+ {
23
+ type: "keyword",
24
+ source: "\\b(?:const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|class|new|import|export|from|async|await|try|catch|finally|throw|typeof|instanceof|extends|super|this|null|undefined|true|false|delete|in|of|yield)\\b",
25
+ },
26
+ { type: "function", source: "\\b[A-Za-z_$][\\w$]*(?=\\s*\\()" },
27
+ { type: "property", source: "(?<=\\.)[A-Za-z_$][\\w$]*" },
28
+ { type: "operator", source: "=>|===|!==|==|!=|<=|>=|&&|\\|\\||[+\\-*/%!<>=&|^~?:]" },
26
29
  ],
27
30
  json: [
28
- {type: "key", source: "\"(?:\\\\.|[^\"\\\\])*\"(?=\\s*:)"},
29
- {type: "string", source: "\"(?:\\\\.|[^\"\\\\])*\""},
30
- {type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b"},
31
- {type: "keyword", source: "\\b(?:true|false|null)\\b"},
32
- {type: "operator", source: "[{}\\[\\],:]"}
31
+ { type: "key", source: '"(?:\\\\.|[^"\\\\])*"(?=\\s*:)' },
32
+ { type: "string", source: '"(?:\\\\.|[^"\\\\])*"' },
33
+ { type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b" },
34
+ { type: "keyword", source: "\\b(?:true|false|null)\\b" },
35
+ { type: "operator", source: "[{}\\[\\],:]" },
33
36
  ],
34
37
  css: [
35
- {type: "comment", source: "/\\*[\\s\\S]*?\\*/"},
36
- {type: "keyword", source: "@[a-zA-Z-]+"},
37
- {type: "string", source: "\"(?:\\\\.|[^\"\\\\\n])*\"|'(?:\\\\.|[^'\\\\\n])*'"},
38
+ { type: "comment", source: "/\\*[\\s\\S]*?\\*/" },
39
+ { type: "keyword", source: "@[a-zA-Z-]+" },
40
+ { type: "string", source: "\"(?:\\\\.|[^\"\\\\\n])*\"|'(?:\\\\.|[^'\\\\\n])*'" },
38
41
  // Цвета проверяем раньше селекторов: #ff9500 иначе считался бы идентификатором
39
- {type: "color", source: "#[0-9a-fA-F]{3,8}\\b"},
40
- {type: "selector", source: "[.#][A-Za-z_][\\w-]*|(?<=^|\\s|,)[a-zA-Z][\\w-]*(?=\\s*[,{])"},
41
- {type: "property", source: "[a-zA-Z-]+(?=\\s*:)"},
42
- {type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:px|em|rem|%|vh|vw|s|ms|deg|fr)?\\b"},
43
- {type: "operator", source: "[{};:,]"}
44
- ]
42
+ { type: "color", source: "#[0-9a-fA-F]{3,8}\\b" },
43
+ { type: "selector", source: "[.#][A-Za-z_][\\w-]*|(?<=^|\\s|,)[a-zA-Z][\\w-]*(?=\\s*[,{])" },
44
+ { type: "property", source: "[a-zA-Z-]+(?=\\s*:)" },
45
+ { type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:px|em|rem|%|vh|vw|s|ms|deg|fr)?\\b" },
46
+ { type: "operator", source: "[{};:,]" },
47
+ ],
45
48
  };
46
49
 
47
50
  /** Языки, для которых есть правила подсветки */
@@ -29,16 +29,16 @@ const NAMESPACES = [
29
29
  require("./locales/navigation"),
30
30
  require("./locales/forms"),
31
31
  require("./locales/feedback"),
32
- require("./locales/graphics")
32
+ require("./locales/graphics"),
33
33
  ];
34
34
 
35
35
  /** Направление письма по умолчанию для известных языков: остальные считаются LTR */
36
- const DIRECTIONS = {ar: "rtl", he: "rtl", fa: "rtl", ur: "rtl"};
36
+ const DIRECTIONS = { ar: "rtl", he: "rtl", fa: "rtl", ur: "rtl" };
37
37
 
38
38
  const FALLBACK = "ru";
39
39
 
40
40
  function buildDictionaries() {
41
- const dictionaries = {ru: {}, en: {}};
41
+ const dictionaries = { ru: {}, en: {} };
42
42
  for (const namespace of NAMESPACES) {
43
43
  for (const locale of Object.keys(namespace)) {
44
44
  if (dictionaries[locale] === undefined) dictionaries[locale] = {};
@@ -111,7 +111,9 @@ class I18n {
111
111
  if (entry === undefined) return String(key);
112
112
  const template = typeof entry === "object" && entry !== null ? this.#pluralForm(entry, params) : entry;
113
113
  if (params === undefined) return template;
114
- return template.replace(/\{(\w+)\}/g, (match, name) => (params[name] === undefined ? match : String(params[name])));
114
+ return template.replace(/\{(\w+)\}/g, (match, name) =>
115
+ params[name] === undefined ? match : String(params[name])
116
+ );
115
117
  }
116
118
 
117
119
  /** Форма числа по правилам языка: `count` обязателен, иначе берётся `other` */
@@ -137,7 +139,7 @@ class I18n {
137
139
 
138
140
  /** Словарь языка целиком (для инструментов и тестов) */
139
141
  static getMessages(locale = this.#locale) {
140
- return {...(this.#dictionaries[locale] === undefined ? {} : this.#dictionaries[locale])};
142
+ return { ...(this.#dictionaries[locale] === undefined ? {} : this.#dictionaries[locale]) };
141
143
  }
142
144
 
143
145
  /**
@@ -182,8 +184,8 @@ class I18n {
182
184
  }
183
185
  }
184
186
 
185
- exports.I18n = I18n
186
- exports.I18N_DIRECTIONS = DIRECTIONS
187
+ exports.I18n = I18n;
188
+ exports.I18N_DIRECTIONS = DIRECTIONS;
187
189
 
188
190
  // При загрузке в рендерере документ сразу получает `dir` и `lang` по умолчанию:
189
191
  // без атрибута стили с логическими свойствами не знают направления
@@ -18,7 +18,7 @@ module.exports = {
18
18
  "a11y.sideBottom": "Снизу",
19
19
  "a11y.previous": "Назад",
20
20
  "a11y.next": "Вперёд",
21
- "a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% (всего {total}%)"
21
+ "a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% (всего {total}%)",
22
22
  },
23
23
  en: {
24
24
  "a11y.closeDialog": "Close dialog",
@@ -26,8 +26,8 @@ module.exports = {
26
26
  "a11y.closeMessage": "Close message",
27
27
  "a11y.resizePanel": "Resize panels",
28
28
  "a11y.resizePanelHint": "Drag to resize, double-click to restore the original sizes",
29
- "a11y.expandNode": "Expand \"{name}\"",
30
- "a11y.collapseNode": "Collapse \"{name}\"",
29
+ "a11y.expandNode": 'Expand "{name}"',
30
+ "a11y.collapseNode": 'Collapse "{name}"',
31
31
  "a11y.backToTop": "Back to top",
32
32
  "a11y.sideLeft": "Left",
33
33
  "a11y.sideRight": "Right",
@@ -35,6 +35,6 @@ module.exports = {
35
35
  "a11y.sideBottom": "Bottom",
36
36
  "a11y.previous": "Previous",
37
37
  "a11y.next": "Next",
38
- "a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% ({total}% total)"
39
- }
38
+ "a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% ({total}% total)",
39
+ },
40
40
  };
@@ -12,7 +12,7 @@ module.exports = {
12
12
  "appLayout.search.placeholder": "Поиск...",
13
13
  "appLayout.search.sections": "Поиск по разделам",
14
14
  "appLayout.search.empty": "Ничего не найдено",
15
- "appLayout.search.alreadyAdded": "Страница \"{title}\" уже добавлена в меню",
15
+ "appLayout.search.alreadyAdded": 'Страница "{title}" уже добавлена в меню',
16
16
  "appLayout.notifications.title": "Уведомления",
17
17
  "appLayout.notifications.empty": "Уведомлений пока нет",
18
18
  "appLayout.notifications.today": "Сегодня",
@@ -30,7 +30,7 @@ module.exports = {
30
30
  "appLayout.update.downloaded": "Загрузка завершена",
31
31
  "appLayout.update.downloading": "Загрузка новой версии {version}",
32
32
  "appLayout.recentDocuments": "Открыть последние",
33
- "appLayout.clearRecentDocuments": "Очистить список"
33
+ "appLayout.clearRecentDocuments": "Очистить список",
34
34
  },
35
35
  en: {
36
36
  "appLayout.window.close": "Close",
@@ -41,7 +41,7 @@ module.exports = {
41
41
  "appLayout.search.placeholder": "Search...",
42
42
  "appLayout.search.sections": "Search sections",
43
43
  "appLayout.search.empty": "Nothing found",
44
- "appLayout.search.alreadyAdded": "Page \"{title}\" is already in the menu",
44
+ "appLayout.search.alreadyAdded": 'Page "{title}" is already in the menu',
45
45
  "appLayout.notifications.title": "Notifications",
46
46
  "appLayout.notifications.empty": "No notifications yet",
47
47
  "appLayout.notifications.today": "Today",
@@ -59,6 +59,6 @@ module.exports = {
59
59
  "appLayout.update.downloaded": "Download complete",
60
60
  "appLayout.update.downloading": "Downloading version {version}",
61
61
  "appLayout.recentDocuments": "Open recent",
62
- "appLayout.clearRecentDocuments": "Clear list"
63
- }
62
+ "appLayout.clearRecentDocuments": "Clear list",
63
+ },
64
64
  };
@@ -49,7 +49,7 @@ module.exports = {
49
49
  "gantt.task": "Задача",
50
50
  "gantt.empty": "Задач нет",
51
51
  "gantt.progress": "выполнено {progress}%",
52
- "gantt.dependsOn": "зависит от: {tasks}"
52
+ "gantt.dependsOn": "зависит от: {tasks}",
53
53
  },
54
54
  en: {
55
55
  "date.calendar": "Calendar",
@@ -95,6 +95,6 @@ module.exports = {
95
95
  "gantt.task": "Task",
96
96
  "gantt.empty": "No tasks",
97
97
  "gantt.progress": "{progress}% done",
98
- "gantt.dependsOn": "depends on: {tasks}"
99
- }
98
+ "gantt.dependsOn": "depends on: {tasks}",
99
+ },
100
100
  };
@@ -28,7 +28,7 @@ module.exports = {
28
28
  "common.expand": "Развернуть",
29
29
  "common.collapse": "Свернуть",
30
30
  "common.today": "Сегодня",
31
- "common.yesterday": "Вчера"
31
+ "common.yesterday": "Вчера",
32
32
  },
33
33
  en: {
34
34
  "common.close": "Close",
@@ -55,6 +55,6 @@ module.exports = {
55
55
  "common.expand": "Expand",
56
56
  "common.collapse": "Collapse",
57
57
  "common.today": "Today",
58
- "common.yesterday": "Yesterday"
59
- }
58
+ "common.yesterday": "Yesterday",
59
+ },
60
60
  };
@@ -69,7 +69,12 @@ module.exports = {
69
69
  "data.orgChartEmpty": "В схеме нет сотрудников",
70
70
  "data.orgChartExpanded": "Развёрнуто: {name}, подчинённых {count}",
71
71
  "data.orgChartCollapsed": "Свёрнуто: {name}, скрыто подчинённых {count}",
72
- "data.orgChartReports": {one: "{count} подчинённый", few: "{count} подчинённых", many: "{count} подчинённых", other: "{count} подчинённых"},
72
+ "data.orgChartReports": {
73
+ one: "{count} подчинённый",
74
+ few: "{count} подчинённых",
75
+ many: "{count} подчинённых",
76
+ other: "{count} подчинённых",
77
+ },
73
78
 
74
79
  "transfer.title": "Перенос значений",
75
80
  "transfer.available": "Доступно",
@@ -154,7 +159,12 @@ module.exports = {
154
159
  "queryBuilder.yes": "Да",
155
160
  "queryBuilder.no": "Нет",
156
161
  "queryBuilder.unset": "Не выбрано",
157
- "queryBuilder.rulesCount": {one: "{count} условие", few: "{count} условия", many: "{count} условий", other: "{count} условия"},
162
+ "queryBuilder.rulesCount": {
163
+ one: "{count} условие",
164
+ few: "{count} условия",
165
+ many: "{count} условий",
166
+ other: "{count} условия",
167
+ },
158
168
  "queryBuilder.operator.equals": "равно",
159
169
  "queryBuilder.operator.notEquals": "не равно",
160
170
  "queryBuilder.operator.contains": "содержит",
@@ -166,7 +176,7 @@ module.exports = {
166
176
  "queryBuilder.operator.less": "меньше",
167
177
  "queryBuilder.operator.lessOrEqual": "меньше или равно",
168
178
  "queryBuilder.operator.isEmpty": "пусто",
169
- "queryBuilder.operator.isNotEmpty": "не пусто"
179
+ "queryBuilder.operator.isNotEmpty": "не пусто",
170
180
  },
171
181
  en: {
172
182
  "data.empty": "No data",
@@ -199,28 +209,28 @@ module.exports = {
199
209
  "dataGrid.groupTitle": "{key} — rows: {count}",
200
210
  "dataGrid.columns": "Columns",
201
211
  "dataGrid.showAll": "Show all",
202
- "dataGrid.columnMove": "Moving column \"{title}\"",
203
- "dataGrid.columnPlace": "Column \"{title}\" is at position {place} of {total}",
212
+ "dataGrid.columnMove": 'Moving column "{title}"',
213
+ "dataGrid.columnPlace": 'Column "{title}" is at position {place} of {total}',
204
214
  "dataGrid.emptyValue": "empty",
205
215
  "dataGrid.yes": "yes",
206
216
  "dataGrid.no": "no",
207
- "dataGrid.editStart": "Editing: \"{title}\", row {row}",
208
- "dataGrid.enterNumber": "\"{title}\": enter a number",
209
- "dataGrid.notNumber": "\"{title}\": \"{text}\" is not a number",
210
- "dataGrid.editCanceled": "\"{title}\": editing canceled",
217
+ "dataGrid.editStart": 'Editing: "{title}", row {row}',
218
+ "dataGrid.enterNumber": '"{title}": enter a number',
219
+ "dataGrid.notNumber": '"{title}": "{text}" is not a number',
220
+ "dataGrid.editCanceled": '"{title}": editing canceled',
211
221
  "dataGrid.editCanceledReason": "{message} — editing canceled",
212
- "dataGrid.saved": "Saved: \"{title}\" = {value}",
222
+ "dataGrid.saved": 'Saved: "{title}" = {value}',
213
223
  "dataGrid.loadedRows": "Rows loaded: {shown}",
214
224
  "dataGrid.loadedRowsOf": "Rows loaded: {shown} of {total}",
215
- "dataGrid.filterActive": "filter \"{filter}\"",
216
- "dataGrid.filterSummary": "Filter \"{filter}\": {shown} of {total}",
225
+ "dataGrid.filterActive": 'filter "{filter}"',
226
+ "dataGrid.filterSummary": 'Filter "{filter}": {shown} of {total}',
217
227
  "dataGrid.rowsSummary": "Rows: {shown}",
218
228
  "dataGrid.groupsSummary": "groups: {count}",
219
- "dataGrid.sortSummary": "sorted by \"{title}\" {direction}",
229
+ "dataGrid.sortSummary": 'sorted by "{title}" {direction}',
220
230
 
221
- "table.sortBy": "Sort by \"{head}\"",
231
+ "table.sortBy": 'Sort by "{head}"',
222
232
  "table.filter": "Filter",
223
- "table.filterBy": "Filter by \"{title}\"",
233
+ "table.filterBy": 'Filter by "{title}"',
224
234
  "table.filterFound": "Filter: {found} of {total} found",
225
235
  "table.selectedRows": "Rows selected: {count}",
226
236
 
@@ -230,23 +240,23 @@ module.exports = {
230
240
  "data.orgChartEmpty": "No employees in the chart",
231
241
  "data.orgChartExpanded": "Expanded: {name}, {count} reports",
232
242
  "data.orgChartCollapsed": "Collapsed: {name}, {count} reports hidden",
233
- "data.orgChartReports": {one: "{count} report", other: "{count} reports"},
243
+ "data.orgChartReports": { one: "{count} report", other: "{count} reports" },
234
244
 
235
245
  "transfer.title": "Transfer values",
236
246
  "transfer.available": "Available",
237
247
  "transfer.chosen": "Selected",
238
- "transfer.addMarked": "Add marked to \"{title}\"",
239
- "transfer.removeMarked": "Remove marked from \"{title}\"",
248
+ "transfer.addMarked": 'Add marked to "{title}"',
249
+ "transfer.removeMarked": 'Remove marked from "{title}"',
240
250
  "transfer.nothingChosen": "Nothing selected",
241
251
  "transfer.nothingMarked": "Nothing marked",
242
252
  "transfer.search": "Search",
243
- "transfer.searchIn": "Search in \"{title}\"",
244
- "transfer.clearSearchIn": "Clear search in \"{title}\"",
253
+ "transfer.searchIn": 'Search in "{title}"',
254
+ "transfer.clearSearchIn": 'Clear search in "{title}"',
245
255
  "transfer.selectMin": "Select at least {min}",
246
256
  "transfer.selectMax": "Select at most {max}",
247
257
  "transfer.maxReached": "You can select at most {max}",
248
- "transfer.emptyList": "The list \"{title}\" is empty",
249
- "transfer.moved": "Moved to \"{title}\": {titles}. Selected {count} of {total}",
258
+ "transfer.emptyList": 'The list "{title}" is empty',
259
+ "transfer.moved": 'Moved to "{title}": {titles}. Selected {count} of {total}',
250
260
 
251
261
  "treeTable.label": "Tree table",
252
262
  "treeTable.shownRows": "Rows shown: {shown} of {total}",
@@ -315,7 +325,7 @@ module.exports = {
315
325
  "queryBuilder.yes": "Yes",
316
326
  "queryBuilder.no": "No",
317
327
  "queryBuilder.unset": "Not selected",
318
- "queryBuilder.rulesCount": {one: "{count} condition", other: "{count} conditions"},
328
+ "queryBuilder.rulesCount": { one: "{count} condition", other: "{count} conditions" },
319
329
  "queryBuilder.operator.equals": "equals",
320
330
  "queryBuilder.operator.notEquals": "does not equal",
321
331
  "queryBuilder.operator.contains": "contains",
@@ -327,6 +337,6 @@ module.exports = {
327
337
  "queryBuilder.operator.less": "less than",
328
338
  "queryBuilder.operator.lessOrEqual": "less than or equal",
329
339
  "queryBuilder.operator.isEmpty": "is empty",
330
- "queryBuilder.operator.isNotEmpty": "is not empty"
331
- }
332
- };
340
+ "queryBuilder.operator.isNotEmpty": "is not empty",
341
+ },
342
+ };
@@ -104,10 +104,30 @@ module.exports = {
104
104
  "jsonViewer.dataTree": "{name}: дерево данных",
105
105
  "jsonViewer.expanded": "Развёрнуто: {name}",
106
106
  "jsonViewer.collapsed": "Свёрнуто: {name}",
107
- "jsonViewer.elements": {one: "{count} элемент", few: "{count} элемента", many: "{count} элементов", other: "{count} элемента"},
108
- "jsonViewer.properties": {one: "{count} свойство", few: "{count} свойства", many: "{count} свойств", other: "{count} свойства"},
109
- "jsonViewer.found": {one: "Найден {count} узел", few: "Найдено {count} узла", many: "Найдено {count} узлов", other: "Найдено {count} узла"},
110
- "jsonViewer.visible": {one: "Виден {count} узел", few: "Видно {count} узла", many: "Видно {count} узлов", other: "Видно {count} узла"},
107
+ "jsonViewer.elements": {
108
+ one: "{count} элемент",
109
+ few: "{count} элемента",
110
+ many: "{count} элементов",
111
+ other: "{count} элемента",
112
+ },
113
+ "jsonViewer.properties": {
114
+ one: "{count} свойство",
115
+ few: "{count} свойства",
116
+ many: "{count} свойств",
117
+ other: "{count} свойства",
118
+ },
119
+ "jsonViewer.found": {
120
+ one: "Найден {count} узел",
121
+ few: "Найдено {count} узла",
122
+ many: "Найдено {count} узлов",
123
+ other: "Найдено {count} узла",
124
+ },
125
+ "jsonViewer.visible": {
126
+ one: "Виден {count} узел",
127
+ few: "Видно {count} узла",
128
+ many: "Видно {count} узлов",
129
+ other: "Видно {count} узла",
130
+ },
111
131
 
112
132
  "diffViewer.title": "Сравнение текста",
113
133
  "diffViewer.before": "Было",
@@ -119,8 +139,14 @@ module.exports = {
119
139
  "diffViewer.lineAdded": "Добавлена строка {number}",
120
140
  "diffViewer.lineRemoved": "Удалена строка {number}",
121
141
  "diffViewer.lineChanged": "Заменена строка {number}",
122
- "diffViewer.showLines": {one: "Показать {count} строку", few: "Показать {count} строки", many: "Показать {count} строк", other: "Показать {count} строки"},
123
- "diffViewer.summary": "Изменений: {groups}, добавлено строк: {added}, удалено строк: {removed}, заменено строк: {changed}"
142
+ "diffViewer.showLines": {
143
+ one: "Показать {count} строку",
144
+ few: "Показать {count} строки",
145
+ many: "Показать {count} строк",
146
+ other: "Показать {count} строки",
147
+ },
148
+ "diffViewer.summary":
149
+ "Изменений: {groups}, добавлено строк: {added}, удалено строк: {removed}, заменено строк: {changed}",
124
150
  },
125
151
  en: {
126
152
  "editor.formatting": "Formatting",
@@ -219,10 +245,10 @@ module.exports = {
219
245
  "jsonViewer.dataTree": "{name}: data tree",
220
246
  "jsonViewer.expanded": "Expanded: {name}",
221
247
  "jsonViewer.collapsed": "Collapsed: {name}",
222
- "jsonViewer.elements": {one: "{count} element", other: "{count} elements"},
223
- "jsonViewer.properties": {one: "{count} property", other: "{count} properties"},
224
- "jsonViewer.found": {one: "{count} node found", other: "{count} nodes found"},
225
- "jsonViewer.visible": {one: "{count} node visible", other: "{count} nodes visible"},
248
+ "jsonViewer.elements": { one: "{count} element", other: "{count} elements" },
249
+ "jsonViewer.properties": { one: "{count} property", other: "{count} properties" },
250
+ "jsonViewer.found": { one: "{count} node found", other: "{count} nodes found" },
251
+ "jsonViewer.visible": { one: "{count} node visible", other: "{count} nodes visible" },
226
252
 
227
253
  "diffViewer.title": "Text comparison",
228
254
  "diffViewer.before": "Before",
@@ -234,7 +260,8 @@ module.exports = {
234
260
  "diffViewer.lineAdded": "Line {number} added",
235
261
  "diffViewer.lineRemoved": "Line {number} removed",
236
262
  "diffViewer.lineChanged": "Line {number} changed",
237
- "diffViewer.showLines": {one: "Show {count} line", other: "Show {count} lines"},
238
- "diffViewer.summary": "Changes: {groups}, lines added: {added}, lines removed: {removed}, lines changed: {changed}"
239
- }
263
+ "diffViewer.showLines": { one: "Show {count} line", other: "Show {count} lines" },
264
+ "diffViewer.summary":
265
+ "Changes: {groups}, lines added: {added}, lines removed: {removed}, lines changed: {changed}",
266
+ },
240
267
  };