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,4 +1,4 @@
|
|
|
1
|
-
const {setStyles, optionOr} = require(
|
|
1
|
+
const { setStyles, optionOr } = require("../../modules/chui_functions");
|
|
2
2
|
|
|
3
3
|
/** Схемы источника картинки: остальное считается локальным путём и читается как data URL */
|
|
4
4
|
const URL_SCHEMES = ["data:", "http:", "https:", "file:", "blob:"];
|
|
@@ -32,7 +32,7 @@ const URL_SCHEMES = ["data:", "http:", "https:", "file:", "blob:"];
|
|
|
32
32
|
*/
|
|
33
33
|
class Watermark {
|
|
34
34
|
static #counter = 0;
|
|
35
|
-
static #DEFAULT_GAP = {x: 100, y: 100};
|
|
35
|
+
static #DEFAULT_GAP = { x: 100, y: 100 };
|
|
36
36
|
static #DEFAULT_ROTATE = -22;
|
|
37
37
|
static #DEFAULT_OPACITY = 0.15;
|
|
38
38
|
static #DEFAULT_FONT_SIZE = 16;
|
|
@@ -44,20 +44,28 @@ class Watermark {
|
|
|
44
44
|
#id = undefined;
|
|
45
45
|
#text = undefined;
|
|
46
46
|
#image = undefined;
|
|
47
|
-
#
|
|
48
|
-
#font = {size: Watermark.#DEFAULT_FONT_SIZE, weight: 400, family: undefined, color: undefined};
|
|
47
|
+
#imageNode = undefined;
|
|
48
|
+
#font = { size: Watermark.#DEFAULT_FONT_SIZE, weight: 400, family: undefined, color: undefined };
|
|
49
49
|
#rotate = Watermark.#DEFAULT_ROTATE;
|
|
50
|
-
#gap = {...Watermark.#DEFAULT_GAP};
|
|
50
|
+
#gap = { ...Watermark.#DEFAULT_GAP };
|
|
51
51
|
#opacity = Watermark.#DEFAULT_OPACITY;
|
|
52
|
-
#
|
|
52
|
+
#zIndex = Watermark.#DEFAULT_Z_INDEX;
|
|
53
53
|
#scheme = undefined;
|
|
54
54
|
#destroyed = false;
|
|
55
55
|
|
|
56
|
-
constructor(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
constructor(
|
|
57
|
+
options = {
|
|
58
|
+
id: String(),
|
|
59
|
+
text: String(),
|
|
60
|
+
image: String(),
|
|
61
|
+
font: Object(),
|
|
62
|
+
rotate: Number(),
|
|
63
|
+
gap: Object(),
|
|
64
|
+
opacity: Number(),
|
|
65
|
+
zIndex: Number(),
|
|
66
|
+
components: [],
|
|
67
|
+
}
|
|
68
|
+
) {
|
|
61
69
|
setStyles(__dirname + "/styles.css", "chUiJS_Watermark");
|
|
62
70
|
Watermark.#counter += 1;
|
|
63
71
|
this.#id = optionOr(options.id, `chui_watermark_${Watermark.#counter}`);
|
|
@@ -98,7 +106,7 @@ class Watermark {
|
|
|
98
106
|
|
|
99
107
|
/** Настройки метки: `{size, weight, family, color}` */
|
|
100
108
|
getFont() {
|
|
101
|
-
return {...this.#font};
|
|
109
|
+
return { ...this.#font };
|
|
102
110
|
}
|
|
103
111
|
|
|
104
112
|
getRotate() {
|
|
@@ -107,7 +115,7 @@ class Watermark {
|
|
|
107
115
|
|
|
108
116
|
/** Шаг между метками */
|
|
109
117
|
getGap() {
|
|
110
|
-
return {...this.#gap};
|
|
118
|
+
return { ...this.#gap };
|
|
111
119
|
}
|
|
112
120
|
|
|
113
121
|
getOpacity() {
|
|
@@ -115,7 +123,7 @@ class Watermark {
|
|
|
115
123
|
}
|
|
116
124
|
|
|
117
125
|
getZIndex() {
|
|
118
|
-
return this.#
|
|
126
|
+
return this.#zIndex;
|
|
119
127
|
}
|
|
120
128
|
|
|
121
129
|
/** Слой с метками (для своих стилей) */
|
|
@@ -148,12 +156,12 @@ class Watermark {
|
|
|
148
156
|
*/
|
|
149
157
|
setImage(image = undefined) {
|
|
150
158
|
this.#image = image;
|
|
151
|
-
this.#
|
|
159
|
+
this.#imageNode = undefined;
|
|
152
160
|
if (image !== undefined && image !== null && image !== "") {
|
|
153
161
|
const node = new Image();
|
|
154
162
|
node.onload = () => this.#draw();
|
|
155
163
|
node.src = Watermark.#resolveSource(image);
|
|
156
|
-
this.#
|
|
164
|
+
this.#imageNode = node;
|
|
157
165
|
}
|
|
158
166
|
this.#draw();
|
|
159
167
|
return this;
|
|
@@ -194,8 +202,8 @@ class Watermark {
|
|
|
194
202
|
|
|
195
203
|
setZIndex(zIndex = Number()) {
|
|
196
204
|
const number = Number(zIndex);
|
|
197
|
-
this.#
|
|
198
|
-
this.#root.style.setProperty("--watermark_z_index", String(this.#
|
|
205
|
+
this.#zIndex = Number.isFinite(number) ? number : Watermark.#DEFAULT_Z_INDEX;
|
|
206
|
+
this.#root.style.setProperty("--watermark_z_index", String(this.#zIndex));
|
|
199
207
|
return this;
|
|
200
208
|
}
|
|
201
209
|
|
|
@@ -245,12 +253,12 @@ class Watermark {
|
|
|
245
253
|
}
|
|
246
254
|
|
|
247
255
|
static #normalizeGap(gap = Object()) {
|
|
248
|
-
const source = Array.isArray(gap) ? {x: gap[0], y: gap[1]} : gap;
|
|
256
|
+
const source = Array.isArray(gap) ? { x: gap[0], y: gap[1] } : gap;
|
|
249
257
|
const x = Number(source === undefined ? undefined : source.x);
|
|
250
258
|
const y = Number(source === undefined ? undefined : source.y);
|
|
251
259
|
return {
|
|
252
260
|
x: Number.isFinite(x) && x > 0 ? x : Watermark.#DEFAULT_GAP.x,
|
|
253
|
-
y: Number.isFinite(y) && y > 0 ? y : Watermark.#DEFAULT_GAP.y
|
|
261
|
+
y: Number.isFinite(y) && y > 0 ? y : Watermark.#DEFAULT_GAP.y,
|
|
254
262
|
};
|
|
255
263
|
}
|
|
256
264
|
|
|
@@ -265,33 +273,33 @@ class Watermark {
|
|
|
265
273
|
weight: this.#font.weight,
|
|
266
274
|
// Шрифт и цвет палитры берём из вычисленного стиля: канва наследование не умеет
|
|
267
275
|
family: optionOr(this.#font.family, style.fontFamily),
|
|
268
|
-
color: optionOr(this.#font.color, style.color)
|
|
276
|
+
color: optionOr(this.#font.color, style.color),
|
|
269
277
|
};
|
|
270
278
|
}
|
|
271
279
|
|
|
272
280
|
#draw() {
|
|
273
281
|
if (this.#destroyed) return this;
|
|
274
282
|
const text = this.#text === undefined ? "" : String(this.#text);
|
|
275
|
-
const image = this.#
|
|
276
|
-
const
|
|
277
|
-
const
|
|
283
|
+
const image = this.#imageNode;
|
|
284
|
+
const hasImage = image !== undefined && image.complete === true && image.naturalWidth > 0;
|
|
285
|
+
const hasText = text !== "";
|
|
278
286
|
// Метки нечем рисовать — слой не показываем, чтобы не занимать место
|
|
279
|
-
this.#layer.hidden =
|
|
287
|
+
this.#layer.hidden = hasText === false && hasImage === false;
|
|
280
288
|
if (this.#layer.hidden) {
|
|
281
289
|
// Снимаем значение, а не ставим `none`: базовое состояние даёт CSS
|
|
282
290
|
this.#layer.style.removeProperty("background-image");
|
|
283
291
|
return this;
|
|
284
292
|
}
|
|
285
|
-
const
|
|
286
|
-
const tile = {x: this.#gap.x, y: this.#gap.y};
|
|
293
|
+
const pixelRatio = typeof window !== "undefined" && window.devicePixelRatio > 0 ? window.devicePixelRatio : 1;
|
|
294
|
+
const tile = { x: this.#gap.x, y: this.#gap.y };
|
|
287
295
|
// Плитка = две метки по каждой оси: на стыках соседних плиток рисунок сходится
|
|
288
296
|
const canvas = document.createElement("canvas");
|
|
289
|
-
canvas.width = Math.round(tile.x * 2 *
|
|
290
|
-
canvas.height = Math.round(tile.y * 2 *
|
|
297
|
+
canvas.width = Math.round(tile.x * 2 * pixelRatio);
|
|
298
|
+
canvas.height = Math.round(tile.y * 2 * pixelRatio);
|
|
291
299
|
const context = canvas.getContext("2d");
|
|
292
|
-
context.scale(
|
|
300
|
+
context.scale(pixelRatio, pixelRatio);
|
|
293
301
|
context.globalAlpha = this.#opacity;
|
|
294
|
-
if (
|
|
302
|
+
if (hasText) {
|
|
295
303
|
const font = this.#resolveFont();
|
|
296
304
|
context.font = `${font.weight} ${font.size}px ${font.family}`;
|
|
297
305
|
context.fillStyle = font.color;
|
|
@@ -307,7 +315,7 @@ class Watermark {
|
|
|
307
315
|
}
|
|
308
316
|
}
|
|
309
317
|
}
|
|
310
|
-
if (
|
|
318
|
+
if (hasImage) {
|
|
311
319
|
const max = Math.min(tile.x, tile.y) * 0.6;
|
|
312
320
|
const ratio = Math.min(max / image.naturalWidth, max / image.naturalHeight, 1);
|
|
313
321
|
const width = image.naturalWidth * ratio;
|
|
@@ -330,4 +338,4 @@ class Watermark {
|
|
|
330
338
|
}
|
|
331
339
|
}
|
|
332
340
|
|
|
333
|
-
exports.Watermark = Watermark
|
|
341
|
+
exports.Watermark = Watermark;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const { Animation } = require(
|
|
2
|
-
const { Spinner } = require(
|
|
3
|
-
const {Log} = require("../../../framework/modules/chui_logger/chui_logger");
|
|
1
|
+
const { Animation } = require("../../modules/chui_animations/animations");
|
|
2
|
+
const { Spinner } = require("../chui_spinner/spinner");
|
|
3
|
+
const { Log } = require("../../../framework/modules/chui_logger/chui_logger");
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Встроенный браузер на `<webview>`.
|
|
@@ -25,7 +25,7 @@ class WebView {
|
|
|
25
25
|
userAgent: undefined,
|
|
26
26
|
webPreferences: "allowRunningInsecureContent, javascript=yes",
|
|
27
27
|
partition: undefined,
|
|
28
|
-
preload: undefined
|
|
28
|
+
preload: undefined,
|
|
29
29
|
};
|
|
30
30
|
/** Безопасный набор для недоверенного контента: без Node, с webSecurity и без попапов */
|
|
31
31
|
static SECURE = {
|
|
@@ -33,43 +33,52 @@ class WebView {
|
|
|
33
33
|
webSecurity: true,
|
|
34
34
|
allowPopups: false,
|
|
35
35
|
plugins: false,
|
|
36
|
-
webPreferences: "javascript=yes"
|
|
36
|
+
webPreferences: "javascript=yes",
|
|
37
37
|
};
|
|
38
|
-
#id = require("randomstring").generate()
|
|
39
|
-
#
|
|
40
|
-
#WebView = document.createElement(
|
|
41
|
-
#
|
|
38
|
+
#id = require("randomstring").generate();
|
|
39
|
+
#mainBlock = document.createElement("chui_webview");
|
|
40
|
+
#WebView = document.createElement("webview");
|
|
41
|
+
#chuiLoad = document.createElement("chui_load");
|
|
42
42
|
constructor(url = String(), dev = false, options = {}) {
|
|
43
|
-
require(
|
|
44
|
-
const settings = {...WebView.DEFAULTS};
|
|
43
|
+
require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_WebView");
|
|
44
|
+
const settings = { ...WebView.DEFAULTS };
|
|
45
45
|
// undefined в объекте опций означает «как по умолчанию», а не «перезаписать пустым»
|
|
46
46
|
for (const [key, value] of Object.entries(options)) {
|
|
47
47
|
if (value !== undefined) settings[key] = value;
|
|
48
48
|
}
|
|
49
|
-
this.#WebView.setAttribute(
|
|
50
|
-
this.#WebView.setAttribute(
|
|
51
|
-
if (settings.nodeIntegration === true) this.#WebView.setAttribute(
|
|
52
|
-
if (settings.plugins === true) this.#WebView.setAttribute(
|
|
53
|
-
this.#WebView.setAttribute(
|
|
49
|
+
this.#WebView.setAttribute("id", this.#id);
|
|
50
|
+
this.#WebView.setAttribute("src", url);
|
|
51
|
+
if (settings.nodeIntegration === true) this.#WebView.setAttribute("nodeintegration", "true");
|
|
52
|
+
if (settings.plugins === true) this.#WebView.setAttribute("plugins", "true");
|
|
53
|
+
this.#WebView.setAttribute(
|
|
54
|
+
"useragent",
|
|
55
|
+
settings.userAgent === undefined ? getFirefoxUserAgent() : String(settings.userAgent)
|
|
56
|
+
);
|
|
54
57
|
// Атрибут отрицательный: ставим его только когда webSecurity выключен явно
|
|
55
|
-
if (settings.webSecurity === false) this.#WebView.setAttribute(
|
|
56
|
-
if (settings.allowPopups === true) this.#WebView.setAttribute(
|
|
57
|
-
if (settings.webPreferences !== undefined)
|
|
58
|
+
if (settings.webSecurity === false) this.#WebView.setAttribute("disablewebsecurity", "true");
|
|
59
|
+
if (settings.allowPopups === true) this.#WebView.setAttribute("allowpopups", "true");
|
|
60
|
+
if (settings.webPreferences !== undefined)
|
|
61
|
+
this.#WebView.setAttribute(
|
|
62
|
+
"webpreferences",
|
|
63
|
+
settings.nodeIntegration === true
|
|
64
|
+
? withNodeIntegration(String(settings.webPreferences))
|
|
65
|
+
: String(settings.webPreferences)
|
|
66
|
+
);
|
|
58
67
|
if (settings.partition !== undefined) this.#WebView.setAttribute("partition", String(settings.partition));
|
|
59
68
|
if (settings.preload !== undefined) this.#WebView.setAttribute("preload", String(settings.preload));
|
|
60
|
-
|
|
61
|
-
this.#
|
|
62
|
-
this.#
|
|
69
|
+
const spinner = new Spinner(Spinner.SIZE.BIG);
|
|
70
|
+
this.#chuiLoad.appendChild(spinner.set());
|
|
71
|
+
this.#mainBlock.appendChild(this.#WebView);
|
|
63
72
|
const loadStart = () => {
|
|
64
|
-
this.#
|
|
65
|
-
}
|
|
73
|
+
this.#mainBlock.appendChild(this.#chuiLoad);
|
|
74
|
+
};
|
|
66
75
|
const loadStop = () => {
|
|
67
76
|
new Animation(this.#WebView).fadeIn();
|
|
68
|
-
this.#
|
|
77
|
+
this.#mainBlock.removeChild(this.#chuiLoad);
|
|
69
78
|
if (dev) this.#WebView.openDevTools();
|
|
70
|
-
}
|
|
71
|
-
this.#WebView.addEventListener(
|
|
72
|
-
this.#WebView.addEventListener(
|
|
79
|
+
};
|
|
80
|
+
this.#WebView.addEventListener("did-start-loading", loadStart);
|
|
81
|
+
this.#WebView.addEventListener("did-stop-loading", loadStop);
|
|
73
82
|
}
|
|
74
83
|
setPartition(partition = String()) {
|
|
75
84
|
this.#WebView.partition = partition;
|
|
@@ -78,51 +87,51 @@ class WebView {
|
|
|
78
87
|
this.#WebView.preload = "file://" + path;
|
|
79
88
|
}
|
|
80
89
|
addStartLoadEvent(listener = () => {}) {
|
|
81
|
-
this.#WebView.addEventListener(
|
|
90
|
+
this.#WebView.addEventListener("did-start-loading", listener);
|
|
82
91
|
}
|
|
83
92
|
addStopLoadEvent(listener = () => {}) {
|
|
84
|
-
this.#WebView.addEventListener(
|
|
93
|
+
this.#WebView.addEventListener("did-stop-loading", listener);
|
|
85
94
|
}
|
|
86
95
|
addFinishLoadEvent(listener = () => {}) {
|
|
87
|
-
this.#WebView.addEventListener(
|
|
96
|
+
this.#WebView.addEventListener("did-finish-load", listener);
|
|
88
97
|
}
|
|
89
98
|
async executeJavaScript(code = String()) {
|
|
90
99
|
try {
|
|
91
100
|
await this.#WebView.executeJavaScript(code);
|
|
92
101
|
} catch (err) {
|
|
93
|
-
Log.error(err)
|
|
102
|
+
Log.error(err);
|
|
94
103
|
}
|
|
95
104
|
}
|
|
96
105
|
insertCustomRes(options = { cssPath: String(), jsPath: String() }) {
|
|
97
|
-
this.#WebView.addEventListener(
|
|
98
|
-
const fs = require(
|
|
106
|
+
this.#WebView.addEventListener("did-frame-finish-load", async () => {
|
|
107
|
+
const fs = require("fs");
|
|
99
108
|
if (options.cssPath !== undefined) {
|
|
100
|
-
|
|
101
|
-
this.#WebView.insertCSS(String(data)).catch(r => Log.error(r));
|
|
109
|
+
const data = fs.readFileSync(options.cssPath, "utf8");
|
|
110
|
+
this.#WebView.insertCSS(String(data)).catch((r) => Log.error(r));
|
|
102
111
|
}
|
|
103
112
|
if (options.jsPath !== undefined) {
|
|
104
113
|
try {
|
|
105
|
-
const data = fs.readFileSync(options.jsPath,
|
|
114
|
+
const data = fs.readFileSync(options.jsPath, "utf8");
|
|
106
115
|
await this.#WebView.executeJavaScript(data);
|
|
107
116
|
} catch (err) {
|
|
108
117
|
Log.error(err);
|
|
109
118
|
}
|
|
110
119
|
}
|
|
111
|
-
})
|
|
120
|
+
});
|
|
112
121
|
}
|
|
113
122
|
async send(channel = String(), ...args) {
|
|
114
123
|
// Аргументы передаются как есть: `webview.send(channel, ...args)`. Раньше они
|
|
115
124
|
// уезжали одним массивом, и слушатель в гостевой странице видел один аргумент
|
|
116
|
-
await this.#WebView.send(channel, ...args)
|
|
125
|
+
await this.#WebView.send(channel, ...args);
|
|
117
126
|
}
|
|
118
127
|
setUrl(url = String()) {
|
|
119
|
-
this.#WebView.setAttribute(
|
|
128
|
+
this.#WebView.setAttribute("src", url);
|
|
120
129
|
}
|
|
121
130
|
getWebContentsId() {
|
|
122
|
-
return this.#WebView.getWebContentsId()
|
|
131
|
+
return this.#WebView.getWebContentsId();
|
|
123
132
|
}
|
|
124
133
|
set() {
|
|
125
|
-
return this.#
|
|
134
|
+
return this.#mainBlock;
|
|
126
135
|
}
|
|
127
136
|
}
|
|
128
137
|
|
|
@@ -141,19 +150,22 @@ const withNodeIntegration = (preferences = String()) => {
|
|
|
141
150
|
|
|
142
151
|
const getFirefoxUserAgent = () => {
|
|
143
152
|
const rootUAs = {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
153
|
+
mac: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:FXVERSION.0) Gecko/20100101 Firefox/FXVERSION.0",
|
|
154
|
+
windows: "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:FXVERSION.0) Gecko/20100101 Firefox/FXVERSION.0",
|
|
155
|
+
linux: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:FXVERSION.0) Gecko/20100101 Firefox/FXVERSION.0",
|
|
147
156
|
};
|
|
148
157
|
let rootUA;
|
|
149
|
-
if (process.platform ===
|
|
150
|
-
|
|
151
|
-
} else if (process.platform ===
|
|
152
|
-
|
|
158
|
+
if (process.platform === "win32") {
|
|
159
|
+
rootUA = rootUAs.windows;
|
|
160
|
+
} else if (process.platform === "darwin") {
|
|
161
|
+
rootUA = rootUAs.mac;
|
|
153
162
|
} else {
|
|
154
|
-
|
|
163
|
+
rootUA = rootUAs.linux;
|
|
155
164
|
}
|
|
156
|
-
return rootUA.replace(
|
|
165
|
+
return rootUA.replace(
|
|
166
|
+
/FXVERSION/g,
|
|
167
|
+
91 + Math.floor((Date.now() - 1628553600000) / (4.1 * 7 * 24 * 60 * 60 * 1000))
|
|
168
|
+
);
|
|
157
169
|
};
|
|
158
170
|
|
|
159
|
-
exports.WebView = WebView
|
|
171
|
+
exports.WebView = WebView;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/* Панель ввода: строка «вложения — текст — отправка».
|
|
2
|
+
Панель не полагает, где она стоит: в карточке она читается кромкой той же карточки,
|
|
3
|
+
а поверх содержимого её поднимают тенью (`data-shadow="true"`), которую включает
|
|
4
|
+
приложение — заодно с `StickyBar`, если панель должна прилипать к низу окна. */
|
|
5
|
+
|
|
6
|
+
chui_write_bar {
|
|
7
|
+
display: block;
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
width: -webkit-fill-available;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
write_bar_row {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: row;
|
|
15
|
+
/* Кнопки встают по низу: пока поле в одну линию, разницы нет, а на выросшем поле
|
|
16
|
+
строка кнопок остаётся там же, где была, — она не едет за текстом */
|
|
17
|
+
align-items: flex-end;
|
|
18
|
+
gap: 6px;
|
|
19
|
+
box-sizing: border-box;
|
|
20
|
+
width: -webkit-fill-available;
|
|
21
|
+
padding: var(--control_padding);
|
|
22
|
+
background: var(--element_background_2);
|
|
23
|
+
border-top: 1px solid var(--border_color);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Тень вместо верхней линии: панель поверх содержимого отделяется материалом, а не чертой */
|
|
27
|
+
chui_write_bar[data-shadow="true"] write_bar_row {
|
|
28
|
+
border-top-color: transparent;
|
|
29
|
+
box-shadow: var(--box_shadow_main);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Пустой слот места не занимает: у панели без вложений слева нет зазора */
|
|
33
|
+
write_bar_slot {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-direction: row;
|
|
36
|
+
align-items: center;
|
|
37
|
+
gap: 2px;
|
|
38
|
+
flex: none;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
write_bar_slot:empty {
|
|
42
|
+
display: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.write_bar_field {
|
|
46
|
+
flex: 1 1 auto;
|
|
47
|
+
min-width: 0;
|
|
48
|
+
box-sizing: border-box;
|
|
49
|
+
resize: none;
|
|
50
|
+
/* Коробка поля — как у остальных полей фреймворка: заливка контрола, волосяная линия
|
|
51
|
+
и радиус. Отступы и строка подобраны под `--control_height`, поэтому в одну линию
|
|
52
|
+
поле ровно той же высоты, что кнопки панели, и строка читается одной линией:
|
|
53
|
+
с прежними отступами 8px поле было на 8px выше кнопок и панель выглядела кривой. */
|
|
54
|
+
min-height: var(--control_height);
|
|
55
|
+
padding: calc(var(--control_padding_sm) - 1px) 10px;
|
|
56
|
+
line-height: 1.25;
|
|
57
|
+
/* Прокрутка появляется только на выросшем поле: в одну линию у поля нет полосы,
|
|
58
|
+
которая отнимала бы ширину у текста (предел роста задаёт JS — maxHeight) */
|
|
59
|
+
overflow-y: hidden;
|
|
60
|
+
border-radius: var(--radius_sm);
|
|
61
|
+
border: 1px solid var(--border_color);
|
|
62
|
+
background: var(--element_background);
|
|
63
|
+
color: var(--text_color);
|
|
64
|
+
font-family: inherit;
|
|
65
|
+
font-size: var(--font_default_size);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.write_bar_field[data-scrollable="true"] {
|
|
69
|
+
overflow-y: auto;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.write_bar_field::placeholder {
|
|
73
|
+
color: var(--text_color_disabled);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.write_bar_field:hover:not(:disabled) {
|
|
77
|
+
border-color: var(--border_color_hover);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Активное поле выдаёт кромка, а не кольцо: в панели ввода каретка и так показывает,
|
|
81
|
+
где набирают, а контур вокруг строки рябит на каждом щелчке по полю */
|
|
82
|
+
.write_bar_field:focus {
|
|
83
|
+
outline: none;
|
|
84
|
+
border-color: var(--blue_prime_background);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.write_bar_field:disabled {
|
|
88
|
+
cursor: not-allowed;
|
|
89
|
+
background: var(--element_background_disabled);
|
|
90
|
+
color: var(--text_color_disabled);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Кнопка панели: круг со значком, подпись живёт в `aria-label` и подсказке */
|
|
94
|
+
.write_bar_button {
|
|
95
|
+
position: relative;
|
|
96
|
+
flex: none;
|
|
97
|
+
cursor: pointer;
|
|
98
|
+
display: flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
justify-content: center;
|
|
101
|
+
box-sizing: border-box;
|
|
102
|
+
width: var(--control_height);
|
|
103
|
+
height: var(--control_height);
|
|
104
|
+
padding: 0;
|
|
105
|
+
border: none;
|
|
106
|
+
border-radius: var(--radius_circle);
|
|
107
|
+
background: transparent;
|
|
108
|
+
color: var(--text_color);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.write_bar_button:hover {
|
|
112
|
+
background: var(--element_background_hover);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Нажатие — акцент, как у Button: контрол отвечает на клик ещё до действия */
|
|
116
|
+
.write_bar_button:active:not(:disabled) {
|
|
117
|
+
background: var(--blue_prime_background);
|
|
118
|
+
color: var(--text_color_hover);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.write_bar_button:disabled {
|
|
122
|
+
cursor: not-allowed;
|
|
123
|
+
background: transparent;
|
|
124
|
+
color: var(--text_color_disabled);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Отправка — акцентная кнопка панели: она одна здесь означает «сделать» */
|
|
128
|
+
.write_bar_button[data-accent="true"] {
|
|
129
|
+
background: var(--blue_prime_background);
|
|
130
|
+
color: var(--text_color_hover);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.write_bar_button[data-accent="true"]:hover {
|
|
134
|
+
background: var(--blue_prime_background_tint_strong);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.write_bar_button[data-accent="true"]:disabled {
|
|
138
|
+
cursor: not-allowed;
|
|
139
|
+
background: var(--button_background_disabled);
|
|
140
|
+
color: var(--text_color_disabled);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.write_bar_button chui_icon {
|
|
144
|
+
color: inherit;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* Счётчик кнопки: число выбранного важнее подписи, поэтому плашка в углу круга */
|
|
148
|
+
write_bar_badge {
|
|
149
|
+
position: absolute;
|
|
150
|
+
top: -2px;
|
|
151
|
+
inset-inline-end: -2px;
|
|
152
|
+
box-sizing: border-box;
|
|
153
|
+
min-width: 16px;
|
|
154
|
+
height: 16px;
|
|
155
|
+
padding-inline: 4px;
|
|
156
|
+
border-radius: var(--radius_pill);
|
|
157
|
+
background: var(--red_prime_background);
|
|
158
|
+
color: var(--text_color_hover);
|
|
159
|
+
font-size: 10px;
|
|
160
|
+
font-weight: 600;
|
|
161
|
+
line-height: 16px;
|
|
162
|
+
text-align: center;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
write_bar_badge[hidden] {
|
|
166
|
+
display: none;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* DISABLED STYLES */
|
|
170
|
+
chui_write_bar[data-disabled="true"] write_bar_row {
|
|
171
|
+
background: var(--element_background_disabled);
|
|
172
|
+
}
|