chuijs 4.0.2 → 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.
- package/CHANGELOG.md +61 -0
- package/README.md +43 -644
- package/framework/appLayout/default/chui_app_layout.js +308 -260
- package/framework/appLayout/default/global_style.css +85 -48
- package/framework/components/chui_accordion/accordion.js +29 -26
- package/framework/components/chui_accordion/styles.css +6 -5
- package/framework/components/chui_action_sheet/action_sheet.js +59 -33
- package/framework/components/chui_action_sheet/styles.css +2 -1
- package/framework/components/chui_affix/affix.js +11 -6
- package/framework/components/chui_alert/alert.js +23 -14
- package/framework/components/chui_avatar/avatar.js +23 -22
- package/framework/components/chui_avatar_group/avatar_group.js +21 -19
- package/framework/components/chui_backtop/backtop.js +35 -19
- package/framework/components/chui_badge/badge.js +15 -13
- package/framework/components/chui_breadcrumb/breadcrumb.js +15 -13
- package/framework/components/chui_button/button.js +42 -22
- package/framework/components/chui_button/styles.css +2 -2
- package/framework/components/chui_calendar/calendar.js +12 -10
- package/framework/components/chui_card/card.js +43 -23
- package/framework/components/chui_chat/chat.js +72 -33
- package/framework/components/chui_clipboard_history/clipboard_history.js +30 -21
- package/framework/components/chui_clipboard_history/styles.css +4 -2
- package/framework/components/chui_code/code.js +2 -2
- package/framework/components/chui_code/styles.css +2 -2
- package/framework/components/chui_code_editor/code_editor.js +47 -31
- package/framework/components/chui_code_editor/styles.css +3 -2
- package/framework/components/chui_command_palette/command_palette.js +60 -37
- package/framework/components/chui_console/console.js +5 -5
- package/framework/components/chui_console/styles.css +1 -1
- package/framework/components/chui_content_block/content_block.js +33 -19
- package/framework/components/chui_content_block/styles.css +2 -2
- package/framework/components/chui_context_menu/context_menu.js +9 -4
- package/framework/components/chui_custom_element/custom_element.js +22 -15
- package/framework/components/chui_data_grid/data_grid.js +396 -234
- package/framework/components/chui_data_grid/styles.css +10 -8
- package/framework/components/chui_descriptions/descriptions.js +34 -17
- package/framework/components/chui_details/details.js +32 -26
- package/framework/components/chui_details/styles.css +5 -4
- package/framework/components/chui_diff_viewer/diff_viewer.js +91 -66
- package/framework/components/chui_diff_viewer/styles.css +1 -1
- package/framework/components/chui_divider/divider.js +13 -11
- package/framework/components/chui_drawer/drawer.js +27 -25
- package/framework/components/chui_drop_zone/drop_zone.js +31 -21
- package/framework/components/chui_empty_state/empty_state.js +20 -15
- package/framework/components/chui_fieldset/fieldset.js +37 -20
- package/framework/components/chui_fieldset/styles.css +1 -1
- package/framework/components/chui_file_explorer/file_explorer.js +157 -86
- package/framework/components/chui_file_explorer/styles.css +2 -1
- package/framework/components/chui_form/form.js +31 -19
- package/framework/components/chui_form/styles.css +1 -1
- package/framework/components/chui_gantt/gantt.js +64 -40
- package/framework/components/chui_graphs/graphs.js +301 -200
- package/framework/components/chui_graphs/styles.css +1 -1
- package/framework/components/chui_hero/hero.js +40 -22
- package/framework/components/chui_html_block/html_block.js +6 -6
- package/framework/components/chui_html_block/styles.css +2 -2
- package/framework/components/chui_hx/hx.js +3 -3
- package/framework/components/chui_hx/styles.css +11 -4
- package/framework/components/chui_icons/icons.js +2109 -2109
- package/framework/components/chui_icons/styles.css +2 -2
- package/framework/components/chui_inputs/chui_check_box/check_box.js +31 -19
- package/framework/components/chui_inputs/chui_check_box/styles.css +18 -18
- package/framework/components/chui_inputs/chui_chips/chips.js +50 -40
- package/framework/components/chui_inputs/chui_chips/styles.css +4 -2
- package/framework/components/chui_inputs/chui_color_picker/color_picker.js +36 -24
- package/framework/components/chui_inputs/chui_combo_box/combo_box.js +100 -82
- package/framework/components/chui_inputs/chui_combo_box/styles.css +14 -12
- package/framework/components/chui_inputs/chui_date/date.js +102 -66
- package/framework/components/chui_inputs/chui_date/styles.css +12 -11
- package/framework/components/chui_inputs/chui_date_range/date_range.js +40 -29
- package/framework/components/chui_inputs/chui_datetime/datetime.js +35 -27
- package/framework/components/chui_inputs/chui_email/email.js +43 -31
- package/framework/components/chui_inputs/chui_email/styles.css +5 -5
- package/framework/components/chui_inputs/chui_file/file.js +68 -41
- package/framework/components/chui_inputs/chui_file/styles.css +13 -12
- package/framework/components/chui_inputs/chui_hotkey/hotkey.js +61 -36
- package/framework/components/chui_inputs/chui_masked/masked.js +39 -28
- package/framework/components/chui_inputs/chui_mention/mention.js +77 -30
- package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +173 -153
- package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +9 -7
- package/framework/components/chui_inputs/chui_number/number.js +58 -41
- package/framework/components/chui_inputs/chui_number/styles.css +7 -7
- package/framework/components/chui_inputs/chui_otp/otp.js +38 -29
- package/framework/components/chui_inputs/chui_password/password.js +58 -36
- package/framework/components/chui_inputs/chui_password/styles.css +8 -8
- package/framework/components/chui_inputs/chui_radio_button/radio_button.js +37 -25
- package/framework/components/chui_inputs/chui_radio_button/styles.css +20 -20
- package/framework/components/chui_inputs/chui_rating/rating.js +26 -22
- package/framework/components/chui_inputs/chui_select_box/select_box.js +102 -78
- package/framework/components/chui_inputs/chui_select_box/styles.css +11 -11
- package/framework/components/chui_inputs/chui_slider/slider.js +29 -26
- package/framework/components/chui_inputs/chui_slider/styles.css +2 -1
- package/framework/components/chui_inputs/chui_text/styles.css +8 -8
- package/framework/components/chui_inputs/chui_text/text.js +65 -44
- package/framework/components/chui_inputs/chui_text_area/styles.css +6 -6
- package/framework/components/chui_inputs/chui_text_area/text_area.js +51 -28
- package/framework/components/chui_inputs/chui_time/styles.css +5 -3
- package/framework/components/chui_inputs/chui_time/time.js +38 -27
- package/framework/components/chui_inputs/chui_toggle/styles.css +3 -3
- package/framework/components/chui_inputs/chui_toggle/toggle.js +16 -16
- package/framework/components/chui_json_editor/json_editor.js +53 -43
- package/framework/components/chui_json_viewer/json_viewer.js +52 -33
- package/framework/components/chui_json_viewer/styles.css +3 -2
- package/framework/components/chui_kanban/kanban.js +52 -34
- package/framework/components/chui_kbd/kbd.js +12 -10
- package/framework/components/chui_label/label.js +14 -12
- package/framework/components/chui_label/styles.css +2 -2
- package/framework/components/chui_link/link.js +27 -20
- package/framework/components/chui_list/list.js +31 -27
- package/framework/components/chui_list/styles.css +2 -1
- package/framework/components/chui_markdown_editor/markdown_editor.js +60 -44
- package/framework/components/chui_media/audio.js +326 -227
- package/framework/components/chui_media/audio_styles.css +40 -21
- package/framework/components/chui_media/image.js +70 -38
- package/framework/components/chui_media/image_compare.js +52 -21
- package/framework/components/chui_media/image_styles.css +3 -3
- package/framework/components/chui_media/video.js +155 -62
- package/framework/components/chui_media/video_styles.css +33 -16
- package/framework/components/chui_menu_bar/menu_bar.js +26 -24
- package/framework/components/chui_menu_bar/styles.css +4 -2
- package/framework/components/chui_modal/modal.js +44 -43
- package/framework/components/chui_modal/styles.css +3 -2
- package/framework/components/chui_notification/notification.js +50 -34
- package/framework/components/chui_notification/notification_download.js +31 -25
- package/framework/components/chui_notification/notification_download_progress.css +3 -2
- package/framework/components/chui_notification/notification_download_progress.js +47 -41
- package/framework/components/chui_notification/notification_update.js +23 -16
- package/framework/components/chui_notification/status_plate.js +2 -2
- package/framework/components/chui_notification/styles_download.css +1 -1
- package/framework/components/chui_notification/styles_update.css +1 -1
- package/framework/components/chui_org_chart/org_chart.js +74 -35
- package/framework/components/chui_pagination/pagination.js +62 -27
- package/framework/components/chui_paragraph/paragraph.js +2 -2
- package/framework/components/chui_paragraph/styles.css +1 -1
- package/framework/components/chui_popover/popover.js +49 -28
- package/framework/components/chui_popups/popups.js +137 -108
- package/framework/components/chui_popups/styles.css +2 -2
- package/framework/components/chui_print_button/print_button.js +33 -23
- package/framework/components/chui_progress_bar/progress_bar.js +23 -15
- package/framework/components/chui_progress_bar/styles.css +2 -2
- package/framework/components/chui_progress_ring/progress_ring.js +17 -15
- package/framework/components/chui_qrcode/qrcode.js +75 -31
- package/framework/components/chui_query_builder/query_builder.js +216 -123
- package/framework/components/chui_radio_group/radio_group.js +36 -26
- package/framework/components/chui_radio_group/styles.css +1 -1
- package/framework/components/chui_result/result.js +26 -16
- package/framework/components/chui_scheduler/scheduler.js +57 -35
- package/framework/components/chui_scheduler/styles.css +6 -2
- package/framework/components/chui_segmented_control/segmented_control.js +27 -21
- package/framework/components/chui_settings/settings.js +122 -48
- package/framework/components/chui_shortcut_help/shortcut_help.js +55 -32
- package/framework/components/chui_sidebar_nav/sidebar_nav.js +33 -23
- package/framework/components/chui_skeleton/skeleton.js +29 -24
- package/framework/components/chui_slideshow/slideshow.js +60 -41
- package/framework/components/chui_slideshow/styles.css +18 -12
- package/framework/components/chui_spinner/spinner.js +8 -8
- package/framework/components/chui_spinner/styles.css +0 -1
- package/framework/components/chui_split_button/split_button.js +23 -18
- package/framework/components/chui_split_button/styles.css +1 -1
- package/framework/components/chui_splitter/splitter.js +35 -28
- package/framework/components/chui_statistic/statistic.js +65 -38
- package/framework/components/chui_status_bar/status_bar.js +11 -9
- package/framework/components/chui_stepper/stepper.js +27 -22
- package/framework/components/chui_sticky_bar/sticky_bar.js +9 -4
- package/framework/components/chui_sticky_bar/styles.css +3 -1
- package/framework/components/chui_tabs/chui_tabs.js +28 -22
- package/framework/components/chui_tabs/styles.css +3 -3
- package/framework/components/chui_text_editor/styles.css +20 -19
- package/framework/components/chui_text_editor/text_editor.js +85 -61
- package/framework/components/chui_text_editor/text_editor_panel.js +346 -284
- package/framework/components/chui_theme_toggle/theme_toggle.js +27 -22
- package/framework/components/chui_timeline/timeline.js +14 -12
- package/framework/components/chui_toast_queue/toast_queue.js +52 -46
- package/framework/components/chui_toolbar/toolbar.js +20 -13
- package/framework/components/chui_tooltip/tooltip.js +37 -24
- package/framework/components/chui_tour/styles.css +8 -3
- package/framework/components/chui_tour/tour.js +61 -27
- package/framework/components/chui_transfer/styles.css +2 -1
- package/framework/components/chui_transfer/transfer.js +75 -42
- package/framework/components/chui_tree_table/tree_table.js +43 -29
- package/framework/components/chui_tree_view/styles.css +4 -2
- package/framework/components/chui_tree_view/tree_view.js +142 -99
- package/framework/components/chui_watermark/watermark.js +24 -16
- package/framework/components/chui_webview/styles.css +2 -2
- package/framework/components/chui_webview/webview.js +62 -50
- package/framework/components/telegram_bot/chui_telegram_bot.js +71 -64
- package/framework/modules/chui_a11y/chui_a11y.js +77 -46
- package/framework/modules/chui_animations/animations.js +42 -42
- package/framework/modules/chui_animations/styles.css +1 -1
- package/framework/modules/chui_bridge/preload.js +36 -25
- package/framework/modules/chui_functions.js +52 -50
- package/framework/modules/chui_highlight/chui_highlight.js +25 -22
- package/framework/modules/chui_i18n/chui_i18n.js +9 -7
- package/framework/modules/chui_i18n/locales/a11y.js +5 -5
- package/framework/modules/chui_i18n/locales/app_layout.js +5 -5
- package/framework/modules/chui_i18n/locales/calendar.js +3 -3
- package/framework/modules/chui_i18n/locales/common.js +3 -3
- package/framework/modules/chui_i18n/locales/data.js +36 -26
- package/framework/modules/chui_i18n/locales/editors.js +40 -13
- package/framework/modules/chui_i18n/locales/feedback.js +3 -3
- package/framework/modules/chui_i18n/locales/forms.js +8 -8
- package/framework/modules/chui_i18n/locales/graphics.js +8 -8
- package/framework/modules/chui_i18n/locales/media.js +4 -4
- package/framework/modules/chui_i18n/locales/navigation.js +8 -8
- package/framework/modules/chui_i18n/locales/validate.js +3 -3
- package/framework/modules/chui_json/chui_json.js +9 -9
- package/framework/modules/chui_layout/chui_layout.js +12 -10
- package/framework/modules/chui_logger/chui_logger.js +29 -25
- package/framework/modules/chui_page/page.js +33 -27
- package/framework/modules/chui_qr/chui_qr.js +158 -67
- package/framework/modules/chui_scrollbar/chui_scrollbar.js +35 -24
- package/framework/modules/chui_scrollbar/styles.css +3 -1
- package/framework/modules/chui_services/chui_channels.js +27 -13
- package/framework/modules/chui_services/chui_services.js +39 -31
- package/framework/modules/chui_services/desktop.js +32 -31
- package/framework/modules/chui_sortable/chui_sortable.js +17 -12
- package/framework/modules/chui_validate/chui_validate.js +7 -4
- package/framework/tray_bar/chui_menu_items.js +136 -46
- package/index.d.ts +4814 -0
- package/index.js +385 -292
- package/package.json +79 -68
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const {Animation} = require(
|
|
2
|
-
const {OverlayA11y, ComboboxKeyboard} = require(
|
|
3
|
-
const {Icon, Icons} = require(
|
|
4
|
-
const {setStyles, optionOr} = require(
|
|
5
|
-
const {I18n} = require(
|
|
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() {
|
|
36
|
-
|
|
37
|
-
|
|
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() {
|
|
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(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
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(
|
|
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(
|
|
5
|
-
const {I18n} = require(
|
|
6
|
-
setStyles(__dirname + "/styles.css",
|
|
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;
|
|
@@ -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(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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() {
|
|
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)) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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 (
|
|
254
|
-
|
|
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(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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;
|