chuijs 4.0.2 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +597 -0
- package/README.md +43 -644
- package/framework/appLayout/default/chui_app_layout.js +602 -496
- package/framework/appLayout/default/global_style.css +288 -97
- package/framework/appLayout/default/main_theme_style.css +188 -101
- package/framework/components/chui_accordion/accordion.js +38 -35
- package/framework/components/chui_accordion/styles.css +13 -12
- package/framework/components/chui_action_sheet/action_sheet.js +93 -64
- package/framework/components/chui_action_sheet/styles.css +12 -5
- package/framework/components/chui_actions_bar/actions_bar.js +338 -0
- package/framework/components/chui_actions_bar/styles.css +139 -0
- package/framework/components/chui_affix/affix.js +16 -11
- package/framework/components/chui_affix/styles.css +5 -0
- package/framework/components/chui_alert/alert.js +34 -19
- package/framework/components/chui_alert/styles.css +7 -0
- package/framework/components/chui_avatar/avatar.js +36 -35
- package/framework/components/chui_avatar/styles.css +1 -1
- package/framework/components/chui_avatar_group/avatar_group.js +25 -23
- package/framework/components/chui_avatar_group/styles.css +1 -1
- package/framework/components/chui_backtop/backtop.js +60 -21
- package/framework/components/chui_backtop/styles.css +21 -0
- package/framework/components/chui_badge/badge.js +30 -28
- package/framework/components/chui_badge/styles.css +6 -6
- package/framework/components/chui_banner/banner.js +222 -0
- package/framework/components/chui_banner/styles.css +170 -0
- package/framework/components/chui_breadcrumb/breadcrumb.js +15 -13
- package/framework/components/chui_breadcrumb/styles.css +1 -1
- package/framework/components/chui_button/button.js +52 -36
- package/framework/components/chui_button/styles.css +7 -7
- package/framework/components/chui_calendar/calendar.js +18 -16
- package/framework/components/chui_card/card.js +52 -32
- package/framework/components/chui_card_scroll/card_scroll.js +169 -0
- package/framework/components/chui_card_scroll/styles.css +86 -0
- package/framework/components/chui_chat/chat.js +140 -79
- package/framework/components/chui_chat/styles.css +18 -7
- package/framework/components/chui_clipboard_history/clipboard_history.js +53 -39
- package/framework/components/chui_clipboard_history/styles.css +13 -9
- package/framework/components/chui_code/code.js +10 -10
- package/framework/components/chui_code/styles.css +4 -4
- package/framework/components/chui_code_editor/code_editor.js +73 -57
- package/framework/components/chui_code_editor/styles.css +6 -5
- package/framework/components/chui_command_palette/command_palette.js +87 -64
- package/framework/components/chui_command_palette/styles.css +5 -5
- package/framework/components/chui_console/console.js +13 -13
- package/framework/components/chui_console/styles.css +6 -3
- package/framework/components/chui_content_block/content_block.js +35 -21
- package/framework/components/chui_content_block/styles.css +2 -2
- package/framework/components/chui_context_menu/context_menu.js +171 -58
- package/framework/components/chui_context_menu/styles.css +82 -8
- package/framework/components/chui_custom_element/custom_element.js +25 -18
- package/framework/components/chui_data_grid/data_grid.js +633 -471
- package/framework/components/chui_data_grid/styles.css +24 -22
- package/framework/components/chui_descriptions/descriptions.js +34 -17
- package/framework/components/chui_descriptions/styles.css +1 -1
- package/framework/components/chui_details/details.js +42 -36
- package/framework/components/chui_details/styles.css +12 -11
- package/framework/components/chui_diff_viewer/diff_viewer.js +172 -147
- package/framework/components/chui_diff_viewer/styles.css +10 -10
- package/framework/components/chui_divider/divider.js +19 -17
- package/framework/components/chui_divider/styles.css +2 -2
- package/framework/components/chui_drawer/drawer.js +63 -38
- package/framework/components/chui_drawer/styles.css +18 -4
- package/framework/components/chui_drop_zone/drop_zone.js +37 -27
- package/framework/components/chui_drop_zone/styles.css +10 -6
- package/framework/components/chui_empty_state/empty_state.js +20 -15
- package/framework/components/chui_fieldset/fieldset.js +40 -23
- package/framework/components/chui_fieldset/styles.css +6 -6
- package/framework/components/chui_file_explorer/file_explorer.js +260 -189
- package/framework/components/chui_file_explorer/styles.css +8 -7
- package/framework/components/chui_form/form.js +40 -28
- package/framework/components/chui_form/styles.css +1 -1
- package/framework/components/chui_gantt/gantt.js +102 -78
- package/framework/components/chui_gantt/styles.css +5 -5
- package/framework/components/chui_graphs/graphs.js +376 -239
- package/framework/components/chui_graphs/styles.css +27 -6
- package/framework/components/chui_hero/hero.js +98 -37
- package/framework/components/chui_hero/styles.css +176 -7
- package/framework/components/chui_html_block/html_block.js +8 -8
- package/framework/components/chui_html_block/styles.css +3 -3
- package/framework/components/chui_hx/hx.js +3 -3
- package/framework/components/chui_hx/styles.css +13 -6
- package/framework/components/chui_icons/icons.js +2115 -2115
- package/framework/components/chui_icons/styles.css +4 -3
- package/framework/components/chui_inputs/chui_check_box/check_box.js +31 -19
- package/framework/components/chui_inputs/chui_check_box/styles.css +30 -21
- package/framework/components/chui_inputs/chui_chips/chips.js +141 -70
- package/framework/components/chui_inputs/chui_chips/styles.css +32 -7
- package/framework/components/chui_inputs/chui_color_picker/color_picker.js +55 -38
- package/framework/components/chui_inputs/chui_color_picker/styles.css +7 -7
- package/framework/components/chui_inputs/chui_combo_box/combo_box.js +127 -109
- package/framework/components/chui_inputs/chui_combo_box/styles.css +23 -21
- package/framework/components/chui_inputs/chui_date/date.js +161 -127
- package/framework/components/chui_inputs/chui_date/styles.css +20 -19
- package/framework/components/chui_inputs/chui_date_range/date_range.js +61 -50
- package/framework/components/chui_inputs/chui_date_range/styles.css +3 -3
- package/framework/components/chui_inputs/chui_datetime/datetime.js +47 -39
- package/framework/components/chui_inputs/chui_datetime/styles.css +3 -3
- package/framework/components/chui_inputs/chui_email/email.js +48 -36
- package/framework/components/chui_inputs/chui_email/styles.css +11 -11
- package/framework/components/chui_inputs/chui_file/file.js +71 -44
- package/framework/components/chui_inputs/chui_file/styles.css +23 -19
- package/framework/components/chui_inputs/chui_hotkey/hotkey.js +101 -76
- package/framework/components/chui_inputs/chui_hotkey/styles.css +6 -6
- package/framework/components/chui_inputs/chui_masked/masked.js +83 -72
- package/framework/components/chui_inputs/chui_masked/styles.css +5 -5
- package/framework/components/chui_inputs/chui_mention/mention.js +87 -40
- package/framework/components/chui_inputs/chui_mention/styles.css +14 -8
- package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +242 -212
- package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +23 -15
- package/framework/components/chui_inputs/chui_number/number.js +84 -70
- package/framework/components/chui_inputs/chui_number/styles.css +13 -13
- package/framework/components/chui_inputs/chui_otp/otp.js +71 -62
- package/framework/components/chui_inputs/chui_otp/styles.css +5 -5
- package/framework/components/chui_inputs/chui_password/password.js +72 -56
- package/framework/components/chui_inputs/chui_password/styles.css +15 -15
- package/framework/components/chui_inputs/chui_radio_button/radio_button.js +37 -25
- package/framework/components/chui_inputs/chui_radio_button/styles.css +22 -22
- package/framework/components/chui_inputs/chui_rating/rating.js +54 -50
- package/framework/components/chui_inputs/chui_rating/styles.css +3 -3
- package/framework/components/chui_inputs/chui_select_box/select_box.js +132 -108
- package/framework/components/chui_inputs/chui_select_box/styles.css +21 -21
- package/framework/components/chui_inputs/chui_slider/slider.js +41 -38
- package/framework/components/chui_inputs/chui_slider/styles.css +7 -5
- package/framework/components/chui_inputs/chui_text/styles.css +14 -14
- package/framework/components/chui_inputs/chui_text/text.js +69 -52
- package/framework/components/chui_inputs/chui_text_area/styles.css +14 -14
- package/framework/components/chui_inputs/chui_text_area/text_area.js +59 -36
- package/framework/components/chui_inputs/chui_time/styles.css +18 -20
- package/framework/components/chui_inputs/chui_time/time.js +71 -49
- package/framework/components/chui_inputs/chui_toggle/styles.css +13 -6
- package/framework/components/chui_inputs/chui_toggle/toggle.js +27 -27
- package/framework/components/chui_json_editor/json_editor.js +137 -127
- package/framework/components/chui_json_editor/styles.css +5 -5
- package/framework/components/chui_json_viewer/json_viewer.js +133 -114
- package/framework/components/chui_json_viewer/styles.css +9 -8
- package/framework/components/chui_kanban/kanban.js +78 -60
- package/framework/components/chui_kanban/styles.css +8 -4
- package/framework/components/chui_kbd/kbd.js +12 -10
- package/framework/components/chui_kbd/styles.css +1 -1
- package/framework/components/chui_label/label.js +31 -29
- package/framework/components/chui_label/styles.css +3 -3
- package/framework/components/chui_link/link.js +36 -29
- package/framework/components/chui_link/styles.css +11 -4
- package/framework/components/chui_list/list.js +42 -38
- package/framework/components/chui_list/styles.css +4 -3
- package/framework/components/chui_markdown_editor/markdown_editor.js +125 -109
- package/framework/components/chui_markdown_editor/styles.css +5 -5
- package/framework/components/chui_media/audio.js +457 -364
- package/framework/components/chui_media/audio_styles.css +74 -37
- package/framework/components/chui_media/image.js +99 -64
- package/framework/components/chui_media/image_compare.js +86 -55
- package/framework/components/chui_media/image_compare_styles.css +5 -5
- package/framework/components/chui_media/image_styles.css +4 -4
- package/framework/components/chui_media/video.js +264 -171
- package/framework/components/chui_media/video_styles.css +57 -24
- package/framework/components/chui_menu_bar/menu_bar.js +67 -65
- package/framework/components/chui_menu_bar/styles.css +14 -12
- package/framework/components/chui_message_bar/message_bar.js +551 -0
- package/framework/components/chui_message_bar/styles.css +248 -0
- package/framework/components/chui_modal/modal.js +81 -56
- package/framework/components/chui_modal/styles.css +3 -2
- package/framework/components/chui_notification/notification.js +107 -69
- package/framework/components/chui_notification/notification_download.js +28 -77
- package/framework/components/chui_notification/notification_download_card.js +115 -0
- package/framework/components/chui_notification/notification_download_progress.css +5 -4
- package/framework/components/chui_notification/notification_download_progress.js +73 -105
- package/framework/components/chui_notification/notification_update.js +44 -37
- package/framework/components/chui_notification/status_plate.css +3 -3
- package/framework/components/chui_notification/status_plate.js +2 -2
- package/framework/components/chui_notification/styles.css +6 -1
- package/framework/components/chui_notification/styles_download.css +2 -2
- package/framework/components/chui_notification/styles_update.css +3 -3
- package/framework/components/chui_org_chart/org_chart.js +101 -62
- package/framework/components/chui_org_chart/styles.css +2 -2
- package/framework/components/chui_pagination/pagination.js +65 -30
- package/framework/components/chui_pagination/styles.css +1 -1
- package/framework/components/chui_paragraph/paragraph.js +2 -2
- package/framework/components/chui_paragraph/styles.css +3 -3
- package/framework/components/chui_popover/popover.js +77 -50
- package/framework/components/chui_popover/styles.css +1 -1
- package/framework/components/chui_popups/popups.js +210 -181
- package/framework/components/chui_popups/styles.css +7 -7
- package/framework/components/chui_print_button/print_button.js +48 -33
- package/framework/components/chui_progress_bar/progress_bar.js +49 -19
- package/framework/components/chui_progress_bar/styles.css +6 -6
- package/framework/components/chui_progress_ring/progress_ring.js +32 -30
- package/framework/components/chui_progress_ring/styles.css +1 -1
- package/framework/components/chui_qrcode/qrcode.js +85 -41
- package/framework/components/chui_query_builder/query_builder.js +263 -170
- package/framework/components/chui_query_builder/styles.css +4 -4
- package/framework/components/chui_radio_group/radio_group.js +36 -26
- package/framework/components/chui_radio_group/styles.css +2 -2
- package/framework/components/chui_result/result.js +41 -31
- package/framework/components/chui_result/styles.css +3 -3
- package/framework/components/chui_scheduler/scheduler.js +126 -104
- package/framework/components/chui_scheduler/styles.css +11 -7
- package/framework/components/chui_screen_spinner/screen_spinner.js +167 -0
- package/framework/components/chui_screen_spinner/styles.css +49 -0
- package/framework/components/chui_segmented_control/segmented_control.js +90 -27
- package/framework/components/chui_segmented_control/styles.css +32 -6
- package/framework/components/chui_settings/settings.js +160 -87
- package/framework/components/chui_settings/styles.css +4 -4
- package/framework/components/chui_shortcut_help/shortcut_help.js +82 -61
- package/framework/components/chui_sidebar_nav/sidebar_nav.js +132 -53
- package/framework/components/chui_sidebar_nav/styles.css +9 -3
- package/framework/components/chui_skeleton/skeleton.js +29 -24
- package/framework/components/chui_slideshow/slideshow.js +122 -103
- package/framework/components/chui_slideshow/styles.css +22 -16
- package/framework/components/chui_spinner/spinner.js +17 -17
- package/framework/components/chui_spinner/styles.css +0 -1
- package/framework/components/chui_split_button/split_button.js +53 -30
- package/framework/components/chui_split_button/styles.css +22 -6
- package/framework/components/chui_splitter/splitter.js +46 -39
- package/framework/components/chui_splitter/styles.css +2 -2
- package/framework/components/chui_statistic/statistic.js +111 -84
- package/framework/components/chui_status_bar/status_bar.js +11 -9
- package/framework/components/chui_status_bar/styles.css +2 -2
- package/framework/components/chui_stepper/stepper.js +230 -54
- package/framework/components/chui_stepper/styles.css +79 -14
- package/framework/components/chui_sticky_bar/sticky_bar.js +53 -17
- package/framework/components/chui_sticky_bar/styles.css +11 -7
- package/framework/components/chui_tabs/chui_tabs.js +100 -46
- package/framework/components/chui_tabs/styles.css +43 -15
- package/framework/components/chui_text_editor/styles.css +24 -23
- package/framework/components/chui_text_editor/text_editor.js +103 -79
- package/framework/components/chui_text_editor/text_editor_panel.js +428 -367
- package/framework/components/chui_theme_toggle/theme_toggle.js +46 -25
- package/framework/components/chui_timeline/styles.css +3 -1
- package/framework/components/chui_timeline/timeline.js +14 -12
- package/framework/components/chui_toast_queue/styles.css +11 -11
- package/framework/components/chui_toast_queue/toast_queue.js +82 -73
- package/framework/components/chui_toolbar/styles.css +2 -2
- package/framework/components/chui_toolbar/toolbar.js +20 -13
- package/framework/components/chui_tooltip/styles.css +2 -2
- package/framework/components/chui_tooltip/tooltip.js +40 -27
- package/framework/components/chui_tour/styles.css +12 -7
- package/framework/components/chui_tour/tour.js +132 -98
- package/framework/components/chui_transfer/styles.css +8 -7
- package/framework/components/chui_transfer/transfer.js +143 -123
- package/framework/components/chui_tree_table/styles.css +4 -4
- package/framework/components/chui_tree_table/tree_table.js +88 -74
- package/framework/components/chui_tree_view/styles.css +14 -10
- package/framework/components/chui_tree_view/tree_view.js +298 -253
- package/framework/components/chui_user_bar/styles.css +145 -0
- package/framework/components/chui_user_bar/user_bar.js +402 -0
- package/framework/components/chui_user_list_bar/styles.css +173 -0
- package/framework/components/chui_user_list_bar/user_list_bar.js +485 -0
- package/framework/components/chui_watermark/watermark.js +41 -33
- package/framework/components/chui_webview/styles.css +2 -2
- package/framework/components/chui_webview/webview.js +64 -52
- package/framework/components/chui_write_bar/styles.css +172 -0
- package/framework/components/chui_write_bar/write_bar.js +320 -0
- package/framework/main_window.js +1234 -0
- package/framework/modules/chui_a11y/chui_a11y.js +153 -123
- package/framework/modules/chui_animations/animations.js +105 -43
- package/framework/modules/chui_animations/motion.js +120 -0
- package/framework/modules/chui_animations/styles.css +37 -4
- package/framework/modules/chui_bridge/preload.js +36 -25
- package/framework/modules/chui_functions.js +69 -63
- package/framework/modules/chui_highlight/chui_highlight.js +25 -22
- package/framework/modules/chui_highlight/styles.css +13 -10
- package/framework/modules/chui_i18n/chui_i18n.js +12 -10
- 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 +65 -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 +12 -8
- package/framework/modules/chui_i18n/locales/validate.js +3 -3
- package/framework/modules/chui_json/chui_json.js +11 -11
- package/framework/modules/chui_layout/chui_layout.js +12 -10
- package/framework/modules/chui_logger/chui_logger.js +47 -28
- package/framework/modules/chui_page/page.js +39 -33
- package/framework/modules/chui_palette/palette.js +61 -0
- package/framework/modules/chui_qr/chui_qr.js +179 -88
- package/framework/modules/chui_scrollbar/chui_scrollbar.js +79 -68
- package/framework/modules/chui_scrollbar/styles.css +4 -2
- package/framework/modules/chui_services/chui_channels.js +27 -13
- package/framework/modules/chui_services/chui_services.js +47 -39
- package/framework/modules/chui_services/desktop.js +108 -101
- package/framework/modules/chui_sortable/chui_sortable.js +33 -28
- package/framework/modules/chui_validate/chui_validate.js +10 -7
- package/framework/tray_bar/chui_menu_items.js +136 -46
- package/index.d.ts +5046 -0
- package/index.js +199 -1254
- package/package.json +81 -68
- package/framework/components/telegram_bot/chui_telegram_bot.js +0 -184
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
const {setStyles, markdownToHtml} = require("../../modules/chui_functions");
|
|
2
|
-
const {Icon, Icons} = require("../chui_icons/icons");
|
|
3
|
-
const {RovingKeyboard} = require("../../modules/chui_a11y/chui_a11y");
|
|
4
|
-
const {Validate} = require("../../modules/chui_validate/chui_validate");
|
|
5
|
-
const {I18n} = require("../../modules/chui_i18n/chui_i18n");
|
|
1
|
+
const { setStyles, markdownToHtml } = require("../../modules/chui_functions");
|
|
2
|
+
const { Icon, Icons } = require("../chui_icons/icons");
|
|
3
|
+
const { RovingKeyboard } = require("../../modules/chui_a11y/chui_a11y");
|
|
4
|
+
const { Validate } = require("../../modules/chui_validate/chui_validate");
|
|
5
|
+
const { I18n } = require("../../modules/chui_i18n/chui_i18n");
|
|
6
6
|
|
|
7
7
|
/** Действия панели разметки: ключ подписи, значок, сочетание и правка */
|
|
8
8
|
const ACTIONS = [
|
|
9
|
-
{id: "bold", labelKey: "editor.bold", icon: Icons.EDITOR.FORMAT_BOLD, shortcut: "Control+B"},
|
|
10
|
-
{id: "italic", labelKey: "editor.italic", icon: Icons.EDITOR.FORMAT_ITALIC, shortcut: "Control+I"},
|
|
11
|
-
{id: "strike", labelKey: "editor.strikethrough", icon: Icons.EDITOR.STRIKETHROUGH_S},
|
|
12
|
-
{id: "heading", labelKey: "editor.heading", icon: Icons.EDITOR.TITLE},
|
|
13
|
-
{id: "quote", labelKey: "editor.quote", icon: Icons.EDITOR.FORMAT_QUOTE},
|
|
14
|
-
{id: "bullets", labelKey: "editor.list", icon: Icons.EDITOR.FORMAT_LIST_BULLETED},
|
|
15
|
-
{id: "numbers", labelKey: "editor.orderedList", icon: Icons.EDITOR.FORMAT_LIST_NUMBERED},
|
|
16
|
-
{id: "checklist", labelKey: "editor.checklist", icon: Icons.EDITOR.CHECKLIST},
|
|
17
|
-
{id: "code", labelKey: "editor.code", icon: Icons.ACTIONS.CODE},
|
|
18
|
-
{id: "codeblock", labelKey: "editor.codeBlock", icon: Icons.ACTIONS.TERMINAL},
|
|
19
|
-
{id: "link", labelKey: "editor.link", icon: Icons.EDITOR.INSERT_LINK, shortcut: "Control+K"},
|
|
9
|
+
{ id: "bold", labelKey: "editor.bold", icon: Icons.EDITOR.FORMAT_BOLD, shortcut: "Control+B" },
|
|
10
|
+
{ id: "italic", labelKey: "editor.italic", icon: Icons.EDITOR.FORMAT_ITALIC, shortcut: "Control+I" },
|
|
11
|
+
{ id: "strike", labelKey: "editor.strikethrough", icon: Icons.EDITOR.STRIKETHROUGH_S },
|
|
12
|
+
{ id: "heading", labelKey: "editor.heading", icon: Icons.EDITOR.TITLE },
|
|
13
|
+
{ id: "quote", labelKey: "editor.quote", icon: Icons.EDITOR.FORMAT_QUOTE },
|
|
14
|
+
{ id: "bullets", labelKey: "editor.list", icon: Icons.EDITOR.FORMAT_LIST_BULLETED },
|
|
15
|
+
{ id: "numbers", labelKey: "editor.orderedList", icon: Icons.EDITOR.FORMAT_LIST_NUMBERED },
|
|
16
|
+
{ id: "checklist", labelKey: "editor.checklist", icon: Icons.EDITOR.CHECKLIST },
|
|
17
|
+
{ id: "code", labelKey: "editor.code", icon: Icons.ACTIONS.CODE },
|
|
18
|
+
{ id: "codeblock", labelKey: "editor.codeBlock", icon: Icons.ACTIONS.TERMINAL },
|
|
19
|
+
{ id: "link", labelKey: "editor.link", icon: Icons.EDITOR.INSERT_LINK, shortcut: "Control+K" },
|
|
20
20
|
];
|
|
21
21
|
|
|
22
22
|
/** Что делает каждое действие: обёртка вокруг выделения или приставка к строкам */
|
|
23
23
|
const WRAPS = {
|
|
24
|
-
bold: {before: "**", after: "**", placeholderKey: "editor.placeholderText"},
|
|
25
|
-
italic: {before: "*", after: "*", placeholderKey: "editor.placeholderText"},
|
|
26
|
-
strike: {before: "~~", after: "~~", placeholderKey: "editor.placeholderText"},
|
|
27
|
-
code: {before: "`", after: "`", placeholderKey: "editor.placeholderCode"},
|
|
28
|
-
codeblock: {before: "```\n", after: "\n```", placeholderKey: "editor.placeholderCode"},
|
|
29
|
-
link: {before: "[", after: "](url)", placeholderKey: "editor.placeholderText"},
|
|
24
|
+
bold: { before: "**", after: "**", placeholderKey: "editor.placeholderText" },
|
|
25
|
+
italic: { before: "*", after: "*", placeholderKey: "editor.placeholderText" },
|
|
26
|
+
strike: { before: "~~", after: "~~", placeholderKey: "editor.placeholderText" },
|
|
27
|
+
code: { before: "`", after: "`", placeholderKey: "editor.placeholderCode" },
|
|
28
|
+
codeblock: { before: "```\n", after: "\n```", placeholderKey: "editor.placeholderCode" },
|
|
29
|
+
link: { before: "[", after: "](url)", placeholderKey: "editor.placeholderText" },
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -80,45 +80,47 @@ class MarkdownEditor {
|
|
|
80
80
|
#hint = document.createElement("markdown_editor_hint");
|
|
81
81
|
#status = document.createElement("markdown_editor_status");
|
|
82
82
|
#error = document.createElement("chui_error_message");
|
|
83
|
-
#
|
|
83
|
+
#previewButton = undefined;
|
|
84
84
|
#actions = new Map();
|
|
85
85
|
#id = undefined;
|
|
86
86
|
#name = undefined;
|
|
87
|
-
#
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
87
|
+
#titleText = undefined;
|
|
88
|
+
#labelText = undefined;
|
|
89
|
+
#previewEnabled = false;
|
|
90
|
+
#previewOn = false;
|
|
91
|
+
#maxLength = undefined;
|
|
92
92
|
#width = undefined;
|
|
93
93
|
#disabled = false;
|
|
94
|
-
#
|
|
94
|
+
#readOnly = false;
|
|
95
95
|
#listeners = [];
|
|
96
|
-
#
|
|
97
|
-
|
|
98
|
-
constructor(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
96
|
+
#onChange = undefined;
|
|
97
|
+
|
|
98
|
+
constructor(
|
|
99
|
+
options = {
|
|
100
|
+
id: String(),
|
|
101
|
+
name: String(),
|
|
102
|
+
title: String(),
|
|
103
|
+
label: String(),
|
|
104
|
+
hint: String(),
|
|
105
|
+
value: String(),
|
|
106
|
+
rows: Number(),
|
|
107
|
+
preview: Boolean(),
|
|
108
|
+
maxLength: Number(),
|
|
109
|
+
width: String(),
|
|
110
|
+
disabled: Boolean(),
|
|
111
|
+
readOnly: Boolean(),
|
|
112
|
+
changeListener: undefined,
|
|
113
|
+
onChange: undefined,
|
|
114
|
+
}
|
|
115
|
+
) {
|
|
114
116
|
setStyles(__dirname + "/styles.css", "chUiJS_MarkdownEditor");
|
|
115
117
|
MarkdownEditor.#counter += 1;
|
|
116
118
|
this.#id = options.id === undefined ? `chui_markdown_editor_${MarkdownEditor.#counter}` : options.id;
|
|
117
119
|
this.#name = options.name;
|
|
118
|
-
this.#
|
|
119
|
-
this.#
|
|
120
|
-
this.#
|
|
121
|
-
this.#
|
|
120
|
+
this.#labelText = options.label;
|
|
121
|
+
this.#onChange = options.onChange;
|
|
122
|
+
this.#previewEnabled = options.preview === true;
|
|
123
|
+
this.#maxLength = options.maxLength === undefined ? undefined : Number(options.maxLength);
|
|
122
124
|
this.#root.id = this.#id;
|
|
123
125
|
this.#label.className = "markdown_editor_label";
|
|
124
126
|
this.#toolbar.className = "markdown_editor_toolbar";
|
|
@@ -145,7 +147,7 @@ class MarkdownEditor {
|
|
|
145
147
|
this.#buildToolbar();
|
|
146
148
|
// Панель — одна остановка обхода: по кнопкам ходят стрелки/Home/End (tabindex переходящий).
|
|
147
149
|
// Слушатели слоя стоят на самой панели, поэтому destroy() за ним не нужен (как у TextEditorPanel)
|
|
148
|
-
new RovingKeyboard(this.#toolbar, {itemSelector: "button"});
|
|
150
|
+
new RovingKeyboard(this.#toolbar, { itemSelector: "button" });
|
|
149
151
|
this.#panes.appendChild(this.#textarea);
|
|
150
152
|
this.#panes.appendChild(this.#preview);
|
|
151
153
|
this.#footer.appendChild(this.#count);
|
|
@@ -157,7 +159,7 @@ class MarkdownEditor {
|
|
|
157
159
|
this.#root.appendChild(this.#status);
|
|
158
160
|
if (options.width !== undefined) this.setWidth(options.width);
|
|
159
161
|
this.setTitle(options.title);
|
|
160
|
-
this.setLabel(this.#
|
|
162
|
+
this.setLabel(this.#labelText === undefined ? I18n.t("editor.markdownText") : this.#labelText);
|
|
161
163
|
if (options.hint !== undefined) this.setHint(options.hint);
|
|
162
164
|
this.setRows(options.rows === undefined ? 8 : options.rows);
|
|
163
165
|
this.setTextAreaValue(options.value === undefined ? "" : options.value);
|
|
@@ -180,12 +182,12 @@ class MarkdownEditor {
|
|
|
180
182
|
}
|
|
181
183
|
|
|
182
184
|
getTitle() {
|
|
183
|
-
return this.#
|
|
185
|
+
return this.#titleText;
|
|
184
186
|
}
|
|
185
187
|
|
|
186
188
|
/** Доступное имя поля, заданное в `label` */
|
|
187
189
|
getLabel() {
|
|
188
|
-
return this.#
|
|
190
|
+
return this.#labelText;
|
|
189
191
|
}
|
|
190
192
|
|
|
191
193
|
/** Текст Markdown как есть */
|
|
@@ -199,11 +201,11 @@ class MarkdownEditor {
|
|
|
199
201
|
}
|
|
200
202
|
|
|
201
203
|
isPreview() {
|
|
202
|
-
return this.#
|
|
204
|
+
return this.#previewOn;
|
|
203
205
|
}
|
|
204
206
|
|
|
205
207
|
getMaxLength() {
|
|
206
|
-
return this.#
|
|
208
|
+
return this.#maxLength;
|
|
207
209
|
}
|
|
208
210
|
|
|
209
211
|
/** Ширина поля (по умолчанию — общая ширина контрола `--control_width`) */
|
|
@@ -212,7 +214,7 @@ class MarkdownEditor {
|
|
|
212
214
|
}
|
|
213
215
|
|
|
214
216
|
isReadOnly() {
|
|
215
|
-
return this.#
|
|
217
|
+
return this.#readOnly;
|
|
216
218
|
}
|
|
217
219
|
|
|
218
220
|
getDisabled() {
|
|
@@ -233,7 +235,7 @@ class MarkdownEditor {
|
|
|
233
235
|
this.#hint.id = `${id}_hint`;
|
|
234
236
|
// Подпись — настоящий <label>: её связь с полем не должна отставать от идентификаторов
|
|
235
237
|
this.#label.setAttribute("for", this.#textarea.id);
|
|
236
|
-
if (this.#
|
|
238
|
+
if (this.#previewButton !== undefined) this.#previewButton.setAttribute("aria-controls", this.#preview.id);
|
|
237
239
|
this.#syncDescribedBy();
|
|
238
240
|
return this;
|
|
239
241
|
}
|
|
@@ -255,7 +257,7 @@ class MarkdownEditor {
|
|
|
255
257
|
|
|
256
258
|
/** Подпись над полем; `undefined` её убирает (имя тогда даёт `label`) */
|
|
257
259
|
setTitle(text = undefined) {
|
|
258
|
-
this.#
|
|
260
|
+
this.#titleText = text;
|
|
259
261
|
// `for` держим всегда: в разметке настоящий <label>, а подпись появляется и исчезает
|
|
260
262
|
this.#label.setAttribute("for", this.#textarea.id);
|
|
261
263
|
if (text === undefined || text === "") {
|
|
@@ -272,8 +274,8 @@ class MarkdownEditor {
|
|
|
272
274
|
|
|
273
275
|
/** Имя поля, когда подписи в разметке нет */
|
|
274
276
|
setLabel(text = undefined) {
|
|
275
|
-
this.#
|
|
276
|
-
if (this.#
|
|
277
|
+
this.#labelText = text;
|
|
278
|
+
if (this.#titleText === undefined || this.#titleText === "") {
|
|
277
279
|
if (text === undefined) this.#textarea.removeAttribute("aria-label");
|
|
278
280
|
else this.#textarea.setAttribute("aria-label", String(text));
|
|
279
281
|
}
|
|
@@ -305,7 +307,7 @@ class MarkdownEditor {
|
|
|
305
307
|
setValue(value = String(), silent = false) {
|
|
306
308
|
const text = value === undefined || value === null ? "" : String(value);
|
|
307
309
|
// В тихом режиме (так зовёт Form.setValues) слишком длинный текст не подставляем
|
|
308
|
-
if (silent === true && this.#
|
|
310
|
+
if (silent === true && this.#maxLength !== undefined && text.length > this.#maxLength) return this;
|
|
309
311
|
this.setTextAreaValue(text);
|
|
310
312
|
this.#syncCount();
|
|
311
313
|
return this;
|
|
@@ -320,20 +322,23 @@ class MarkdownEditor {
|
|
|
320
322
|
|
|
321
323
|
/** Предпросмотр: кнопка панели становится переключателем */
|
|
322
324
|
setPreview(on = Boolean()) {
|
|
323
|
-
if (!this.#
|
|
324
|
-
this.#
|
|
325
|
-
this.#textarea.hidden = this.#
|
|
326
|
-
this.#preview.hidden = !this.#
|
|
327
|
-
if (this.#
|
|
328
|
-
if (this.#
|
|
329
|
-
this.#
|
|
330
|
-
this.#
|
|
325
|
+
if (!this.#previewEnabled) return this;
|
|
326
|
+
this.#previewOn = on === true;
|
|
327
|
+
this.#textarea.hidden = this.#previewOn;
|
|
328
|
+
this.#preview.hidden = !this.#previewOn;
|
|
329
|
+
if (this.#previewOn) this.#preview.innerHTML = this.getPreviewHtml();
|
|
330
|
+
if (this.#previewButton !== undefined) {
|
|
331
|
+
this.#previewButton.setAttribute("aria-pressed", this.#previewOn ? "true" : "false");
|
|
332
|
+
this.#previewButton.setAttribute(
|
|
333
|
+
"aria-label",
|
|
334
|
+
this.#previewOn ? I18n.t("editor.showMarkup") : I18n.t("editor.showPreview")
|
|
335
|
+
);
|
|
331
336
|
}
|
|
332
337
|
return this;
|
|
333
338
|
}
|
|
334
339
|
|
|
335
340
|
togglePreview() {
|
|
336
|
-
return this.setPreview(!this.#
|
|
341
|
+
return this.setPreview(!this.#previewOn);
|
|
337
342
|
}
|
|
338
343
|
|
|
339
344
|
/** Убирает или возвращает панель разметки (поле остаётся полем) */
|
|
@@ -352,10 +357,10 @@ class MarkdownEditor {
|
|
|
352
357
|
return this.#eachLine(marker);
|
|
353
358
|
}
|
|
354
359
|
|
|
355
|
-
setReadOnly(
|
|
356
|
-
this.#
|
|
357
|
-
this.#root.classList.toggle("markdown_editor_readonly", this.#
|
|
358
|
-
this.#textarea.readOnly = this.#
|
|
360
|
+
setReadOnly(readOnly = Boolean()) {
|
|
361
|
+
this.#readOnly = readOnly === true;
|
|
362
|
+
this.#root.classList.toggle("markdown_editor_readonly", this.#readOnly);
|
|
363
|
+
this.#textarea.readOnly = this.#readOnly;
|
|
359
364
|
this.#actionButtonState();
|
|
360
365
|
return this;
|
|
361
366
|
}
|
|
@@ -377,7 +382,7 @@ class MarkdownEditor {
|
|
|
377
382
|
/** Фокус на текст; `Form` зовёт это при ошибке валидации */
|
|
378
383
|
focus() {
|
|
379
384
|
if (this.#disabled) return this;
|
|
380
|
-
if (this.#
|
|
385
|
+
if (this.#previewOn) this.setPreview(false);
|
|
381
386
|
this.#textarea.focus();
|
|
382
387
|
return this;
|
|
383
388
|
}
|
|
@@ -389,8 +394,8 @@ class MarkdownEditor {
|
|
|
389
394
|
|
|
390
395
|
// === ВНУТРЕННЕЕ ===
|
|
391
396
|
#accessibleName() {
|
|
392
|
-
if (this.#
|
|
393
|
-
if (this.#
|
|
397
|
+
if (this.#titleText !== undefined && this.#titleText !== "") return this.#titleText;
|
|
398
|
+
if (this.#labelText !== undefined && this.#labelText !== "") return this.#labelText;
|
|
394
399
|
return I18n.t("editor.markdownText");
|
|
395
400
|
}
|
|
396
401
|
|
|
@@ -398,8 +403,8 @@ class MarkdownEditor {
|
|
|
398
403
|
// предпросмотр — не правка: его гасит только запрет самого поля (раньше setDisabled
|
|
399
404
|
// включал кнопки обратно и затирал режим только для чтения)
|
|
400
405
|
#actionButtonState() {
|
|
401
|
-
for (const button of this.#actions.values()) button.disabled = this.#disabled || this.#
|
|
402
|
-
if (this.#
|
|
406
|
+
for (const button of this.#actions.values()) button.disabled = this.#disabled || this.#readOnly;
|
|
407
|
+
if (this.#previewButton !== undefined) this.#previewButton.disabled = this.#disabled;
|
|
403
408
|
return this;
|
|
404
409
|
}
|
|
405
410
|
|
|
@@ -409,7 +414,12 @@ class MarkdownEditor {
|
|
|
409
414
|
button.type = "button";
|
|
410
415
|
button.className = "markdown_editor_action";
|
|
411
416
|
button.dataset.action = action.id;
|
|
412
|
-
button.setAttribute(
|
|
417
|
+
button.setAttribute(
|
|
418
|
+
"aria-label",
|
|
419
|
+
action.shortcut === undefined
|
|
420
|
+
? I18n.t(action.labelKey)
|
|
421
|
+
: `${I18n.t(action.labelKey)} (${action.shortcut.replace("Control", "Ctrl")})`
|
|
422
|
+
);
|
|
413
423
|
if (action.shortcut !== undefined) button.setAttribute("aria-keyshortcuts", action.shortcut);
|
|
414
424
|
const glyph = new Icon(action.icon, "18px").set();
|
|
415
425
|
glyph.setAttribute("aria-hidden", "true");
|
|
@@ -418,27 +428,27 @@ class MarkdownEditor {
|
|
|
418
428
|
this.#actions.set(action.id, button);
|
|
419
429
|
this.#toolbar.appendChild(button);
|
|
420
430
|
}
|
|
421
|
-
if (!this.#
|
|
431
|
+
if (!this.#previewEnabled) return;
|
|
422
432
|
const divider = document.createElement("markdown_editor_divider");
|
|
423
433
|
divider.setAttribute("aria-hidden", "true");
|
|
424
434
|
this.#toolbar.appendChild(divider);
|
|
425
|
-
this.#
|
|
426
|
-
this.#
|
|
427
|
-
this.#
|
|
428
|
-
this.#
|
|
429
|
-
this.#
|
|
430
|
-
this.#
|
|
435
|
+
this.#previewButton = document.createElement("button");
|
|
436
|
+
this.#previewButton.type = "button";
|
|
437
|
+
this.#previewButton.className = "markdown_editor_action markdown_editor_preview";
|
|
438
|
+
this.#previewButton.setAttribute("aria-pressed", "false");
|
|
439
|
+
this.#previewButton.setAttribute("aria-label", I18n.t("editor.showPreview"));
|
|
440
|
+
this.#previewButton.setAttribute("aria-controls", this.#preview.id);
|
|
431
441
|
const glyph = new Icon(Icons.ACTIONS.VISIBILITY, "18px").set();
|
|
432
442
|
glyph.setAttribute("aria-hidden", "true");
|
|
433
|
-
this.#
|
|
434
|
-
this.#
|
|
435
|
-
this.#toolbar.appendChild(this.#
|
|
443
|
+
this.#previewButton.appendChild(glyph);
|
|
444
|
+
this.#previewButton.addEventListener("click", () => this.togglePreview());
|
|
445
|
+
this.#toolbar.appendChild(this.#previewButton);
|
|
436
446
|
}
|
|
437
447
|
|
|
438
448
|
// Значение ставится программно: слушателей не дёргаем (как у других полей)
|
|
439
449
|
setTextAreaValue(text = String()) {
|
|
440
450
|
this.#textarea.value = text;
|
|
441
|
-
if (this.#
|
|
451
|
+
if (this.#previewOn) this.#preview.innerHTML = this.getPreviewHtml();
|
|
442
452
|
return this;
|
|
443
453
|
}
|
|
444
454
|
|
|
@@ -451,11 +461,11 @@ class MarkdownEditor {
|
|
|
451
461
|
}
|
|
452
462
|
|
|
453
463
|
#syncCount() {
|
|
454
|
-
const
|
|
455
|
-
this.#footer.hidden = !
|
|
456
|
-
if (!
|
|
457
|
-
this.#count.innerText = `${this.getValue().length} / ${this.#
|
|
458
|
-
this.#count.classList.toggle("markdown_editor_count_over", this.getValue().length > this.#
|
|
464
|
+
const hasLimit = this.#maxLength !== undefined;
|
|
465
|
+
this.#footer.hidden = !hasLimit;
|
|
466
|
+
if (!hasLimit) return this;
|
|
467
|
+
this.#count.innerText = `${this.getValue().length} / ${this.#maxLength}`;
|
|
468
|
+
this.#count.classList.toggle("markdown_editor_count_over", this.getValue().length > this.#maxLength);
|
|
459
469
|
return this;
|
|
460
470
|
}
|
|
461
471
|
|
|
@@ -466,11 +476,11 @@ class MarkdownEditor {
|
|
|
466
476
|
#notify() {
|
|
467
477
|
const value = this.getValue();
|
|
468
478
|
for (const listener of [...this.#listeners]) listener(value, this);
|
|
469
|
-
if (this.#
|
|
479
|
+
if (this.#onChange !== undefined) this.#onChange(value, this);
|
|
470
480
|
}
|
|
471
481
|
|
|
472
482
|
// Правка диапазона: вставка идёт командой, поэтому Ctrl+Z в поле её отменяет
|
|
473
|
-
#replaceRange(start = Number(), end = Number(), text = String(),
|
|
483
|
+
#replaceRange(start = Number(), end = Number(), text = String(), caretStart = Number(), caretEnd = Number()) {
|
|
474
484
|
const textarea = this.#textarea;
|
|
475
485
|
textarea.focus();
|
|
476
486
|
textarea.setSelectionRange(start, end);
|
|
@@ -486,8 +496,8 @@ class MarkdownEditor {
|
|
|
486
496
|
this.#syncCount();
|
|
487
497
|
this.#notify();
|
|
488
498
|
}
|
|
489
|
-
if (this.#
|
|
490
|
-
textarea.setSelectionRange(
|
|
499
|
+
if (this.#previewOn) this.#preview.innerHTML = this.getPreviewHtml();
|
|
500
|
+
textarea.setSelectionRange(caretStart, caretEnd);
|
|
491
501
|
return this;
|
|
492
502
|
}
|
|
493
503
|
|
|
@@ -501,7 +511,13 @@ class MarkdownEditor {
|
|
|
501
511
|
const from = start + before.length;
|
|
502
512
|
const to = from + inner.length;
|
|
503
513
|
// С выделением остаётся выделен весь результат, без него каретка встаёт внутрь разметки
|
|
504
|
-
return this.#replaceRange(
|
|
514
|
+
return this.#replaceRange(
|
|
515
|
+
start,
|
|
516
|
+
end,
|
|
517
|
+
text,
|
|
518
|
+
selected === "" && placeholder !== "" ? from : start,
|
|
519
|
+
selected === "" && placeholder !== "" ? to : start + text.length
|
|
520
|
+
);
|
|
505
521
|
}
|
|
506
522
|
|
|
507
523
|
#eachLine(marker = undefined) {
|
|
@@ -518,7 +534,7 @@ class MarkdownEditor {
|
|
|
518
534
|
}
|
|
519
535
|
|
|
520
536
|
#apply(id = String()) {
|
|
521
|
-
if (this.#disabled || this.#
|
|
537
|
+
if (this.#disabled || this.#readOnly) return this;
|
|
522
538
|
const action = ACTIONS.find((item) => item.id === id);
|
|
523
539
|
const wrap = WRAPS[id];
|
|
524
540
|
if (id === "link") this.#linkWrap();
|
|
@@ -528,7 +544,7 @@ class MarkdownEditor {
|
|
|
528
544
|
else if (id === "bullets") this.#eachLine("- ");
|
|
529
545
|
else if (id === "checklist") this.#eachLine("- [ ] ");
|
|
530
546
|
else if (id === "numbers") this.#eachLine((line, index) => `${index + 1}. ${line}`);
|
|
531
|
-
if (action !== undefined) this.#announce(I18n.t("editor.applied", {action: I18n.t(action.labelKey)}));
|
|
547
|
+
if (action !== undefined) this.#announce(I18n.t("editor.applied", { action: I18n.t(action.labelKey) }));
|
|
532
548
|
return this;
|
|
533
549
|
}
|
|
534
550
|
|
|
@@ -551,14 +567,14 @@ class MarkdownEditor {
|
|
|
551
567
|
}
|
|
552
568
|
|
|
553
569
|
#onInput = () => {
|
|
554
|
-
if (this.#disabled || this.#
|
|
570
|
+
if (this.#disabled || this.#readOnly) return;
|
|
555
571
|
this.#syncCount();
|
|
556
|
-
if (this.#
|
|
572
|
+
if (this.#previewOn) this.#preview.innerHTML = this.getPreviewHtml();
|
|
557
573
|
this.#notify();
|
|
558
574
|
};
|
|
559
575
|
|
|
560
576
|
#onKeyDown = (event) => {
|
|
561
|
-
if (this.#disabled || this.#
|
|
577
|
+
if (this.#disabled || this.#readOnly) return;
|
|
562
578
|
if (event.ctrlKey !== true && event.metaKey !== true) return;
|
|
563
579
|
const key = String(event.key).toLowerCase();
|
|
564
580
|
if (key !== "b" && key !== "i" && key !== "k") return;
|
|
@@ -567,4 +583,4 @@ class MarkdownEditor {
|
|
|
567
583
|
};
|
|
568
584
|
}
|
|
569
585
|
|
|
570
|
-
exports.MarkdownEditor = MarkdownEditor
|
|
586
|
+
exports.MarkdownEditor = MarkdownEditor;
|
|
@@ -8,13 +8,13 @@ chui_markdown_editor {
|
|
|
8
8
|
width: var(--control_width);
|
|
9
9
|
max-width: 100%;
|
|
10
10
|
height: max-content;
|
|
11
|
-
margin: var(--
|
|
11
|
+
margin: var(--block_margin);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
.markdown_editor_label {
|
|
15
15
|
display: block;
|
|
16
16
|
width: max-content;
|
|
17
|
-
margin: var(--
|
|
17
|
+
margin: var(--block_margin);
|
|
18
18
|
color: var(--text_color);
|
|
19
19
|
font-size: var(--font_labels_size);
|
|
20
20
|
font-weight: 500;
|
|
@@ -33,7 +33,7 @@ chui_markdown_editor {
|
|
|
33
33
|
padding: 4px;
|
|
34
34
|
border: 1px solid var(--border_color);
|
|
35
35
|
border-bottom: none;
|
|
36
|
-
border-radius: var(--
|
|
36
|
+
border-radius: var(--radius_sm) var(--radius_sm) 0 0;
|
|
37
37
|
background: var(--element_background_2);
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -98,7 +98,7 @@ markdown_editor_divider {
|
|
|
98
98
|
box-sizing: border-box;
|
|
99
99
|
overflow: hidden;
|
|
100
100
|
border: 1px solid var(--border_color);
|
|
101
|
-
border-radius: 0 0 var(--
|
|
101
|
+
border-radius: 0 0 var(--radius_sm) var(--radius_sm);
|
|
102
102
|
background: var(--element_background);
|
|
103
103
|
}
|
|
104
104
|
|
|
@@ -123,7 +123,7 @@ markdown_editor_divider {
|
|
|
123
123
|
border: none;
|
|
124
124
|
background: transparent;
|
|
125
125
|
color: var(--text_color);
|
|
126
|
-
font-family: var(--
|
|
126
|
+
font-family: var(--font_mono);
|
|
127
127
|
font-size: var(--font_default_size);
|
|
128
128
|
line-height: 1.5;
|
|
129
129
|
resize: vertical;
|