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,8 +1,8 @@
1
- const {Animation} = require('../../modules/chui_animations/animations');
2
- const {OverlayA11y, ComboboxKeyboard} = require('../../modules/chui_a11y/chui_a11y');
3
- const {Icon, Icons} = require('../chui_icons/icons');
4
- const {setStyles, optionOr} = require('../../modules/chui_functions');
5
- const {I18n} = require('../../modules/chui_i18n/chui_i18n');
1
+ const { Animation } = require("../../modules/chui_animations/animations");
2
+ const { OverlayA11y, ComboboxKeyboard } = require("../../modules/chui_a11y/chui_a11y");
3
+ const { Icon, Icons } = require("../chui_icons/icons");
4
+ const { setStyles, optionOr } = require("../../modules/chui_functions");
5
+ const { I18n } = require("../../modules/chui_i18n/chui_i18n");
6
6
 
7
7
  /**
8
8
  * Командная строка (command palette): нечёткий поиск по списку команд и запуск
@@ -32,14 +32,22 @@ const {I18n} = require('../../modules/chui_i18n/chui_i18n');
32
32
  class CommandPalette {
33
33
  static #counter = 0;
34
34
  // Значения берутся лениво: язык может быть задан до сборки интерфейса, но уже после загрузки модуля
35
- static get DEFAULT_LABEL() { return I18n.t("navigation.commandPalette"); }
36
- static get DEFAULT_PLACEHOLDER() { return I18n.t("navigation.commandPlaceholder"); }
37
- static get DEFAULT_EMPTY_TEXT() { return I18n.t("common.nothingFound"); }
35
+ static get DEFAULT_LABEL() {
36
+ return I18n.t("navigation.commandPalette");
37
+ }
38
+ static get DEFAULT_PLACEHOLDER() {
39
+ return I18n.t("navigation.commandPlaceholder");
40
+ }
41
+ static get DEFAULT_EMPTY_TEXT() {
42
+ return I18n.t("common.nothingFound");
43
+ }
38
44
  /** Сколько последних запущенных команд показывать отдельной группой */
39
45
  static MAX_RECENT = 4;
40
46
  /** По умолчанию показываем не больше столько совпадений */
41
47
  static DEFAULT_LIMIT = 50;
42
- static get RECENT_GROUP() { return I18n.t("navigation.recentGroup"); }
48
+ static get RECENT_GROUP() {
49
+ return I18n.t("navigation.recentGroup");
50
+ }
43
51
 
44
52
  #id = undefined;
45
53
  // Занавес на всё окно: он же элемент слоя для OverlayA11y
@@ -71,18 +79,20 @@ class CommandPalette {
71
79
  #hotkey_handler = undefined;
72
80
  isOpen = false;
73
81
 
74
- constructor(options = {
75
- id: String(),
76
- label: String(),
77
- placeholder: String(),
78
- emptyText: String(),
79
- commands: [],
80
- limit: Number(),
81
- recent: Boolean(),
82
- closeOnRun: Boolean(),
83
- hotkey: String(),
84
- onRun: undefined
85
- }) {
82
+ constructor(
83
+ options = {
84
+ id: String(),
85
+ label: String(),
86
+ placeholder: String(),
87
+ emptyText: String(),
88
+ commands: [],
89
+ limit: Number(),
90
+ recent: Boolean(),
91
+ closeOnRun: Boolean(),
92
+ hotkey: String(),
93
+ onRun: undefined,
94
+ }
95
+ ) {
86
96
  setStyles(__dirname + "/styles.css", "chUiJS_CommandPalette");
87
97
  CommandPalette.#counter += 1;
88
98
  // Пустая строка означает «не задана» — как у остальных опций-имён: иначе id слоя
@@ -90,7 +100,8 @@ class CommandPalette {
90
100
  this.#id = optionOr(options.id, `chui_command_palette_${CommandPalette.#counter}`);
91
101
  this.#palette.id = this.#id;
92
102
  this.#label = optionOr(options.label, CommandPalette.DEFAULT_LABEL);
93
- this.#placeholder = options.placeholder === undefined ? CommandPalette.DEFAULT_PLACEHOLDER : options.placeholder;
103
+ this.#placeholder =
104
+ options.placeholder === undefined ? CommandPalette.DEFAULT_PLACEHOLDER : options.placeholder;
94
105
  this.#empty_text = options.emptyText === undefined ? CommandPalette.DEFAULT_EMPTY_TEXT : options.emptyText;
95
106
  this.#limit = options.limit === undefined ? CommandPalette.DEFAULT_LIMIT : options.limit;
96
107
  this.#recent_enabled = options.recent === undefined ? true : options.recent;
@@ -118,13 +129,13 @@ class CommandPalette {
118
129
  this.#a11y = new OverlayA11y(this.#palette, {
119
130
  role: "dialog",
120
131
  label: this.#label,
121
- onEscape: () => this.close()
132
+ onEscape: () => this.close(),
122
133
  });
123
134
  // Клавиатурный слой списка: стрелки, Home/End, Enter по активной команде
124
135
  this.#keyboard = new ComboboxKeyboard(this.#input, {
125
136
  dropdown: this.#list,
126
137
  optionSelector: "command_palette_option",
127
- onEscape: () => this.close()
138
+ onEscape: () => this.close(),
128
139
  });
129
140
  // Enter до выбора стрелками запускает первую найденную команду
130
141
  this.#input.addEventListener("keydown", this.#onInputKeyDown);
@@ -340,7 +351,7 @@ class CommandPalette {
340
351
  icon: command.icon,
341
352
  keywords: command.keywords,
342
353
  shortcut: command.shortcut,
343
- run: command.run
354
+ run: command.run,
344
355
  };
345
356
  }
346
357
 
@@ -358,7 +369,7 @@ class CommandPalette {
358
369
  // `id` часто латинский — по нему удобно искать в русском интерфейсе («graphs»)
359
370
  [command.id, 2],
360
371
  [command.subtitle, 1],
361
- [command.group, 1]
372
+ [command.group, 1],
362
373
  ];
363
374
  let best = -1;
364
375
  for (const [value, weight] of fields) {
@@ -380,7 +391,11 @@ class CommandPalette {
380
391
  for (const char of needle) {
381
392
  const found = haystack.indexOf(char, position);
382
393
  if (found === -1) return -1;
383
- const at_word_start = found === 0 || haystack[found - 1] === " " || haystack[found - 1] === "-" || haystack[found - 1] === "/";
394
+ const at_word_start =
395
+ found === 0 ||
396
+ haystack[found - 1] === " " ||
397
+ haystack[found - 1] === "-" ||
398
+ haystack[found - 1] === "/";
384
399
  score += found === previous + 1 ? 6 : 1;
385
400
  if (at_word_start) score += 4;
386
401
  previous = found;
@@ -390,7 +405,11 @@ class CommandPalette {
390
405
  }
391
406
 
392
407
  static #isHotkey(event = Object(), hotkey = String()) {
393
- const parts = hotkey.toLowerCase().split("+").map((part) => part.trim()).filter(Boolean);
408
+ const parts = hotkey
409
+ .toLowerCase()
410
+ .split("+")
411
+ .map((part) => part.trim())
412
+ .filter(Boolean);
394
413
  if (parts.length === 0) return false;
395
414
  const key = parts[parts.length - 1];
396
415
  const mod = parts.includes("mod") || parts.includes("ctrl") || parts.includes("cmd") || parts.includes("meta");
@@ -417,12 +436,12 @@ class CommandPalette {
417
436
  }
418
437
  let result = [...groups].map(([name, commands]) => ({
419
438
  name: name,
420
- commands: commands.slice().sort((left, right) => scores.get(right) - scores.get(left))
439
+ commands: commands.slice().sort((left, right) => scores.get(right) - scores.get(left)),
421
440
  }));
422
441
  // «Недавние» показываем только на пустом запросе: иначе они мешают релевантности
423
442
  if (this.#recent_enabled && query.trim() === "" && this.#recent.length > 0) {
424
443
  const recent = this.#recent.map((id) => this.getCommand(id)).filter((command) => command !== undefined);
425
- if (recent.length > 0) result = [{name: CommandPalette.RECENT_GROUP, commands: recent}, ...result];
444
+ if (recent.length > 0) result = [{ name: CommandPalette.RECENT_GROUP, commands: recent }, ...result];
426
445
  }
427
446
  return result;
428
447
  }
@@ -456,11 +475,12 @@ class CommandPalette {
456
475
  // Пустой список убираем совсем: иначе он делит высоту с надписью и та съезжает вниз
457
476
  this.#list.hidden = found === 0;
458
477
  // Скрытый live-регион: скринридер слышит, сколько команд нашлось
459
- this.#status.innerText = found === 0
460
- ? this.#empty_text
461
- : (query.trim() === ""
462
- ? I18n.t("navigation.commandsFound", {count: found})
463
- : I18n.t("navigation.commandsFoundFor", {count: found, query: query.trim()}));
478
+ this.#status.innerText =
479
+ found === 0
480
+ ? this.#empty_text
481
+ : query.trim() === ""
482
+ ? I18n.t("navigation.commandsFound", { count: found })
483
+ : I18n.t("navigation.commandsFoundFor", { count: found, query: query.trim() });
464
484
  this.#keyboard.refresh();
465
485
  return this;
466
486
  }
@@ -495,7 +515,10 @@ class CommandPalette {
495
515
 
496
516
  #run(command = Object()) {
497
517
  if (this.#recent_enabled) {
498
- this.#recent = [command.id, ...this.#recent.filter((id) => id !== command.id)].slice(0, CommandPalette.MAX_RECENT);
518
+ this.#recent = [command.id, ...this.#recent.filter((id) => id !== command.id)].slice(
519
+ 0,
520
+ CommandPalette.MAX_RECENT
521
+ );
499
522
  }
500
523
  // Слой закрывается до запуска: команда может открыть свой диалог, и фокус
501
524
  // вернётся на элемент, который открывал палитру, а не в закрывающуюся панель
@@ -532,4 +555,4 @@ class CommandPalette {
532
555
  };
533
556
  }
534
557
 
535
- exports.CommandPalette = CommandPalette
558
+ exports.CommandPalette = CommandPalette;
@@ -1,9 +1,9 @@
1
1
  class Console {
2
2
  #chui_console = document.createElement(`chui_console`);
3
3
  constructor(options = { width: String(), height: String(), label: String() }) {
4
- const {setStyles, optionOr} = require('../../modules/chui_functions');
5
- const {I18n} = require('../../modules/chui_i18n/chui_i18n');
6
- setStyles(__dirname + "/styles.css", 'chUiJS_console');
4
+ const { setStyles, optionOr } = require("../../modules/chui_functions");
5
+ const { I18n } = require("../../modules/chui_i18n/chui_i18n");
6
+ setStyles(__dirname + "/styles.css", "chUiJS_console");
7
7
  // Журнал — не только картинка: строки добавляются одна за другой, поэтому у области
8
8
  // есть роль и имя, а скринридер объявляет дописанное (было безымянное полотно)
9
9
  this.#chui_console.setAttribute("role", "log");
@@ -18,11 +18,11 @@ class Console {
18
18
  addText(text = String()) {
19
19
  const chui_console_text = document.createElement(`chui_console_text`);
20
20
  chui_console_text.innerText = text;
21
- this.#chui_console.appendChild(chui_console_text)
21
+ this.#chui_console.appendChild(chui_console_text);
22
22
  }
23
23
  set() {
24
24
  return this.#chui_console;
25
25
  }
26
26
  }
27
27
 
28
- exports.Console = Console
28
+ exports.Console = Console;
@@ -29,4 +29,4 @@ chui_console_text {
29
29
  padding: var(--control_padding);
30
30
  text-align: start;
31
31
  user-select: text;
32
- }
32
+ }
@@ -1,17 +1,19 @@
1
- const {Animation} = require("../../modules/chui_animations/animations");
1
+ const { Animation } = require("../../modules/chui_animations/animations");
2
2
 
3
3
  class ContentBlock {
4
4
  #body = document.createElement(`contentblock`);
5
5
  #disableMarginChild = false;
6
- constructor(options = {
7
- display: String(),
8
- direction: String(),
9
- wrap: String(),
10
- align: String(),
11
- justify: String(),
12
- disableMarginChild: Boolean(),
13
- }) {
14
- require('../../modules/chui_functions').setStyles(__dirname + "/styles.css", 'chUiJS_ContentBlock');
6
+ constructor(
7
+ options = {
8
+ display: String(),
9
+ direction: String(),
10
+ wrap: String(),
11
+ align: String(),
12
+ justify: String(),
13
+ disableMarginChild: Boolean(),
14
+ }
15
+ ) {
16
+ require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_ContentBlock");
15
17
  if (options.display !== undefined) this.#body.style.display = options.display;
16
18
  if (options.direction !== undefined) this.#body.style.flexDirection = options.direction;
17
19
  if (options.wrap !== undefined) this.#body.style.flexWrap = options.wrap;
@@ -31,20 +33,32 @@ class ContentBlock {
31
33
  }
32
34
  add(...components) {
33
35
  for (let component of components) {
34
- new Animation(component.set()).fadeIn()
35
- this.#body.appendChild(component.set())
36
+ new Animation(component.set()).fadeIn();
37
+ this.#body.appendChild(component.set());
36
38
  }
37
39
  }
38
- clear() { this.#body.innerHTML = ''; }
40
+ clear() {
41
+ this.#body.innerHTML = "";
42
+ }
39
43
  // SETS
40
44
  setAutoOverflow(boolean = Boolean(false)) {
41
45
  this.#body.classList.toggle("contentblock_auto_overflow", boolean === true);
42
46
  }
43
- setContentEditable(boolean= Boolean(false)) { this.#body.setAttribute('contenteditable', boolean); }
44
- setWidth(width = String()) { this.#body.style.width = width; }
45
- setHeight(height = String()) { this.#body.style.height = height; }
46
- setPadding(value = String()) { this.#body.style.padding = value; }
47
- set() { return this.#body; }
47
+ setContentEditable(boolean = Boolean(false)) {
48
+ this.#body.setAttribute("contenteditable", boolean);
49
+ }
50
+ setWidth(width = String()) {
51
+ this.#body.style.width = width;
52
+ }
53
+ setHeight(height = String()) {
54
+ this.#body.style.height = height;
55
+ }
56
+ setPadding(value = String()) {
57
+ this.#body.style.padding = value;
58
+ }
59
+ set() {
60
+ return this.#body;
61
+ }
48
62
  }
49
63
 
50
- exports.ContentBlock = ContentBlock
64
+ exports.ContentBlock = ContentBlock;
@@ -1,5 +1,5 @@
1
1
  contentblock {
2
- display: flex
2
+ display: flex;
3
3
  }
4
4
 
5
5
  /* Опция `disableMarginChild`: внешние отступы детей снимает CSS, а не обход детей в JS
@@ -11,4 +11,4 @@ contentblock.contentblock_no_margin > * {
11
11
  /* `setAutoOverflow(true)` */
12
12
  contentblock.contentblock_auto_overflow {
13
13
  overflow: auto;
14
- }
14
+ }
@@ -25,7 +25,7 @@ class ContextMenu {
25
25
  itemSelector: "context_menu_item",
26
26
  submenuSelector: "context_menu_submenu",
27
27
  onSubmenuOpen: (row) => this.#openSubMenu(row),
28
- onEscape: () => this.hide()
28
+ onEscape: () => this.hide(),
29
29
  });
30
30
  document.body.appendChild(this.#menu);
31
31
  }
@@ -87,7 +87,7 @@ class ContextMenu {
87
87
  onSubmenuOpen: (inner_row) => this.#openSubMenu(inner_row),
88
88
  onEscape: () => this.#closeSubMenu(row),
89
89
  submenu: true,
90
- trigger: row
90
+ trigger: row,
91
91
  });
92
92
  row.addEventListener("mouseenter", () => this.#openSubMenu(row));
93
93
  row.addEventListener("mouseleave", () => this.#closeSubMenu(row));
@@ -250,8 +250,13 @@ class ContextMenu {
250
250
  */
251
251
  #restoreFocus() {
252
252
  const target = this.#return_focus;
253
- if (target !== undefined && target !== null && document.body.contains(target) &&
254
- typeof target.matches === "function" && target.matches(A11Y_FOCUSABLE_SELECTOR)) {
253
+ if (
254
+ target !== undefined &&
255
+ target !== null &&
256
+ document.body.contains(target) &&
257
+ typeof target.matches === "function" &&
258
+ target.matches(A11Y_FOCUSABLE_SELECTOR)
259
+ ) {
255
260
  target.focus();
256
261
  return;
257
262
  }
@@ -1,32 +1,39 @@
1
1
  class CustomElement {
2
- #chui_custom_element = undefined
3
- constructor(options = {
4
- tag: String(), id: String(), className: String(), pathToCSS: String()
5
- }) {
6
- const {setStyles, optionOr} = require('../../modules/chui_functions');
2
+ #chui_custom_element = undefined;
3
+ constructor(
4
+ options = {
5
+ tag: String(),
6
+ id: String(),
7
+ className: String(),
8
+ pathToCSS: String(),
9
+ }
10
+ ) {
11
+ const { setStyles, optionOr } = require("../../modules/chui_functions");
7
12
  // Пустая заготовка опции равносильна отсутствующей: `createElement("")` падал TypeError
8
13
  const tag = optionOr(options.tag, undefined);
9
- if (tag === undefined) throw new Error("Не установлен тэг элемента")
14
+ if (tag === undefined) throw new Error("Не установлен тэг элемента");
10
15
  this.#chui_custom_element = document.createElement(tag);
11
16
  const id = optionOr(options.id, undefined);
12
- if (id === undefined) throw new Error("Не установлен идентификатор элемента")
17
+ if (id === undefined) throw new Error("Не установлен идентификатор элемента");
13
18
  // Файл стилей — необязательная опция: пустой путь читался как файл и падал ENOENT
14
19
  const path_to_css = optionOr(options.pathToCSS, undefined);
15
- if (path_to_css !== undefined) setStyles(path_to_css, `chUiJS_CustomElement_${id}`)
16
- this.#chui_custom_element.id = id
20
+ if (path_to_css !== undefined) setStyles(path_to_css, `chUiJS_CustomElement_${id}`);
21
+ this.#chui_custom_element.id = id;
17
22
  const class_name = optionOr(options.className, undefined);
18
- if (class_name !== undefined) this.#chui_custom_element.className = class_name
23
+ if (class_name !== undefined) this.#chui_custom_element.className = class_name;
19
24
  }
20
25
  addEventListener(type = String(), listener = () => {}) {
21
- this.#chui_custom_element.addEventListener(type, listener)
26
+ this.#chui_custom_element.addEventListener(type, listener);
22
27
  }
23
28
  innerText(innerText = String()) {
24
- this.#chui_custom_element.innerText = innerText
29
+ this.#chui_custom_element.innerText = innerText;
25
30
  }
26
31
  innerHTML(innerHTML = String()) {
27
- this.#chui_custom_element.innerHTML = innerHTML
32
+ this.#chui_custom_element.innerHTML = innerHTML;
33
+ }
34
+ set() {
35
+ return this.#chui_custom_element;
28
36
  }
29
- set() { return this.#chui_custom_element }
30
37
  }
31
38
 
32
- exports.CustomElement = CustomElement
39
+ exports.CustomElement = CustomElement;