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
|
@@ -37,7 +37,11 @@
|
|
|
37
37
|
он дорого (композитинг всего, что под слоем). Насыщенность оставлена: она и даёт
|
|
38
38
|
ощущение стекла, а не серой плёнки. */
|
|
39
39
|
--global_blur: saturate(180%) blur(20px);
|
|
40
|
+
/* Отступ поверхности (карточка, панель, список): 8px по вертикали, 13px по горизонтали.
|
|
41
|
+
Значение держит прежнее имя --main_padding, новое --block_padding читает его:
|
|
42
|
+
чужие стили правят ключ по имени, и переименование не должно их отключать. */
|
|
40
43
|
--main_padding: calc(8px * var(--density)) calc(13px * var(--density));
|
|
44
|
+
--block_padding: var(--main_padding);
|
|
41
45
|
/* Отступ внутри контрола — 8px по всем сторонам: пара к --control_width.
|
|
42
46
|
Прежнее имя --test_padding оставлено псевдонимом: оно попало в документацию и в
|
|
43
47
|
чужие проекты, поэтому убираем его отдельным шагом, а не молча ломаем вёрстку. */
|
|
@@ -46,10 +50,11 @@
|
|
|
46
50
|
|
|
47
51
|
/* Компактный шаг контрола — для кнопки и полей ввода. 5px по вертикали дают 29px высоты
|
|
48
52
|
(строка 17 + отступы 10 + 2 черты при `box-sizing: border-box`), то есть тот же шаг,
|
|
49
|
-
что у кнопок шапки (30px). Общие --
|
|
53
|
+
что у кнопок шапки (30px). Общие --block_padding/--control_padding трогать нельзя:
|
|
50
54
|
их берут ещё 43 файла поверхностей и списков, где 8px и есть нужная плотность,
|
|
51
55
|
поэтому контролы задают себе компактные значения локально у своего корня. */
|
|
52
56
|
--main_padding_sm: calc(5px * var(--density)) calc(11px * var(--density));
|
|
57
|
+
--block_padding_sm: var(--main_padding_sm);
|
|
53
58
|
--control_padding_sm: calc(5px * var(--density));
|
|
54
59
|
/* Высота контрола одним числом: её берут те поля, у которых высота не следует
|
|
55
60
|
из содержимого (chips, color_picker, hotkey, masked, date, time) */
|
|
@@ -61,17 +66,18 @@
|
|
|
61
66
|
До неё плееры держали числа у себя (30/36 px у кнопки, 24/30 px у глифов) */
|
|
62
67
|
--player_control_size: calc(32px * var(--density));
|
|
63
68
|
--player_play_size: calc(36px * var(--density));
|
|
64
|
-
/* Глифы панели: глиф меньше кнопки — кнопка читается площадкой, а не рамкой
|
|
69
|
+
/* Глифы панели: глиф меньше кнопки — кнопка читается площадкой, а не рамкой значка.
|
|
70
|
+
Размер берут стили плееров (`font-size` у кнопки), а значок его наследует: одно число
|
|
71
|
+
на оба плеера. Прежде оно было вписано числом в код (пять мест) */
|
|
65
72
|
--player_icon_size: 18px;
|
|
66
73
|
/* Высота полосы прогресса и дорожки громкости */
|
|
67
74
|
--player_track_height: 4px;
|
|
68
|
-
--player_row_height: calc(34px * var(--density));
|
|
69
|
-
/* Ползунок дорожек: белый круг в обеих схемах — он лежит и на акцентной заливке,
|
|
70
|
-
и на серой дорожке, а цвет подложки на нём пропадал (в тёмной схеме — чёрный блоб) */
|
|
71
|
-
--player_thumb_background: #ffffff;
|
|
72
75
|
--header_icon_size: 13pt;
|
|
73
76
|
--font_default_size: 14px;
|
|
74
77
|
--font_labels_size: 12px;
|
|
78
|
+
/* Моно-шрифт: семейство ставит `chui_fonts.installMono()`. Ключ общий, потому что
|
|
79
|
+
код рисуют несколько компонентов (вставка кода, редакторы, примеры в подписях) */
|
|
80
|
+
--font_mono: "chui_mono", monospace;
|
|
75
81
|
/* Дубль размера подписи: уведомление читается тем же кеглем. Алиас разрешается
|
|
76
82
|
на `:root`, поэтому локальное переопределение `--font_labels_size` его не меняет */
|
|
77
83
|
--font_notification_size: var(--font_labels_size);
|
|
@@ -84,7 +90,10 @@
|
|
|
84
90
|
--font_lead_size: 18px;
|
|
85
91
|
--font_display_size: 30px;
|
|
86
92
|
--button_text_color: var(--text_color);
|
|
93
|
+
/* Отступ между блоками. Значение держит прежнее имя --margin, новое --block_margin
|
|
94
|
+
читает его — по той же причине, что и у отступа поверхности. */
|
|
87
95
|
--margin: calc(6px * var(--density));
|
|
96
|
+
--block_margin: var(--margin);
|
|
88
97
|
/* Высота шапки: одна точка правды. От неё считаются отступ содержимого, положение
|
|
89
98
|
и отступы выдвижных панелей — раньше то же число было вписано в четырёх местах
|
|
90
99
|
(47px, 46px, 65px), и правка одного значения уводила панели.
|
|
@@ -93,31 +102,23 @@
|
|
|
93
102
|
47px = кнопка 30px + отступы 8px сверху и снизу + черта 1px. */
|
|
94
103
|
--header_height: calc(47px * var(--density));
|
|
95
104
|
/* Вертикальный отступ содержимого полосы: 30px кнопка + 8 сверху и снизу = 46px полосы.
|
|
96
|
-
Горизонтальные зазоры шапки — общий --
|
|
105
|
+
Горизонтальные зазоры шапки — общий --block_margin. */
|
|
97
106
|
--header_margin: calc(8px * var(--density));
|
|
98
107
|
|
|
99
108
|
/* Скругления: контролы — radius_sm, поверхности — radius_md, капсулы — pill.
|
|
100
109
|
Отдельного «среднего» значения больше нет: 10px рядом с 8 и 12 не читались как
|
|
101
110
|
система, а выглядели как случайный набор. */
|
|
102
|
-
--border_radius: var(--radius_sm);
|
|
103
111
|
--radius_sm: 8px;
|
|
104
112
|
--radius_md: 12px;
|
|
105
113
|
--radius_pill: 999px;
|
|
106
114
|
--radius_circle: 50%;
|
|
115
|
+
/* Прежнее имя малого скругления: было --border_radius без шкалы в названии. Внутри
|
|
116
|
+
стили читают --radius_sm, чужой ключ остаётся псевдонимом и уйдёт отдельным шагом. */
|
|
117
|
+
--border_radius: var(--radius_sm);
|
|
107
118
|
|
|
108
119
|
/* Ширина управляющих элементов */
|
|
109
120
|
--control_width: 200px;
|
|
110
121
|
|
|
111
|
-
/* Тени: три уровня — контактный (main), всплывающий (drop) и модальный (modal).
|
|
112
|
-
Форма одна на всю оболочку: два слоя с большим разлётом и малым процентом — тень
|
|
113
|
-
читается как мягкое затемнение под элементом, а не как обводка. Одиночный слой с
|
|
114
|
-
малым разлётом читался именно обводкой, а резкие тени (20–40%) — как грязь на карточках.
|
|
115
|
-
В тёмной схеме та же форма с большими процентами: чёрная тень на почти чёрной
|
|
116
|
-
подложке иначе не видна (см. main_theme_style.css). */
|
|
117
|
-
--box_shadow_main: 0 1px 2px rgb(0 0 0 / 4%), 0 3px 10px rgb(0 0 0 / 5%);
|
|
118
|
-
--box_shadow_drop: 0 2px 6px rgb(0 0 0 / 5%), 0 14px 36px rgb(0 0 0 / 9%);
|
|
119
|
-
--box_shadow_modal: 0 4px 12px rgb(0 0 0 / 6%), 0 28px 72px rgb(0 0 0 / 14%);
|
|
120
|
-
|
|
121
122
|
/* Фокус. Кольцо одно на всю оболочку: `--focus_outline` для обычных
|
|
122
123
|
элементов и `--focus_outline_offset_inset` — для тех, кого обрезает
|
|
123
124
|
контейнер (ячейка сетки, журнал чата, строки листа действий). */
|
|
@@ -125,11 +126,26 @@
|
|
|
125
126
|
--focus_outline_offset: 2px;
|
|
126
127
|
--focus_outline_offset_inset: -2px;
|
|
127
128
|
|
|
128
|
-
/*
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
/* Движение: три длительности и три кривые — один набор на всё приложение.
|
|
130
|
+
Длительность выбирается по роли, а не «на глаз»: состояния (наведение, нажатие,
|
|
131
|
+
фокус) быстрые, появление и перемещение — базовые, крупные поверхности (ящик,
|
|
132
|
+
шторка, полоса меню) медленные. Уход короче входа: покачивание на выходе задерживало
|
|
133
|
+
бы следующий экран.
|
|
134
|
+
Кривые: `--motion_ease` тормозит к покою (вход и перемещение читаются как отклик),
|
|
135
|
+
`--motion_ease_in_out` — для обратимых ходов (высота раскрытия, уход карточки),
|
|
136
|
+
`--motion_spring` даёт лёгкий перелёт на отклике (появление меню и диалога).
|
|
137
|
+
Прежние имена оставлены псевдонимами: они разошлись по стилям и документации. */
|
|
138
|
+
--motion_fast: 0.15s;
|
|
139
|
+
--motion_base: 0.25s;
|
|
140
|
+
--motion_slow: 0.4s;
|
|
141
|
+
--motion_ease: cubic-bezier(0.32, 0.72, 0, 1);
|
|
142
|
+
--motion_ease_in_out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
143
|
+
--motion_spring: cubic-bezier(0.34, 1.4, 0.64, 1);
|
|
144
|
+
/* Переключатель состояния без движения: у `visibility` время нулевое, а всё движение
|
|
145
|
+
несёт соседнее свойство — так узел появляется сразу, а исчезает только после ухода */
|
|
146
|
+
--motion_none: 0s;
|
|
147
|
+
--transition_time: var(--motion_fast);
|
|
148
|
+
--ease_out: var(--motion_ease);
|
|
133
149
|
|
|
134
150
|
/* Схема нативных частей: палитры приложения разложены по prefers-color-scheme,
|
|
135
151
|
поэтому браузер должен рисовать и родные части (каретка, выделение, системные
|
|
@@ -149,6 +165,67 @@ html {
|
|
|
149
165
|
background: var(--main_background);
|
|
150
166
|
}
|
|
151
167
|
|
|
168
|
+
/* Вложенная поверхность. Контейнерные поверхности носят заливку карточки — и карточка тоже:
|
|
169
|
+
внутри карточки контейнер сливался с хозяином, и разделяла их только граница (шаг светлоты 0;
|
|
170
|
+
так в витрине выглядели SidebarNav, List, Toolbar, CodeEditor и остальные). Вложенный
|
|
171
|
+
контейнер берёт нейтральную заливку: на карточке это шаг светлоты 8.4 в тёмной схеме и 5.6
|
|
172
|
+
в светлой — не меньше, чем между подложкой и карточкой (7.7 и 4.4), а числа печатает
|
|
173
|
+
`npm run palette:check`. В обоих списках — контейнерные поверхности: то, что носит заливку
|
|
174
|
+
карточки и может оказаться внутри другого такого же. Своя заливка у контейнера остаётся:
|
|
175
|
+
на подложке он читается как карточка, и лишь вложенность опускает его на нейтральную ступень. */
|
|
176
|
+
:is(
|
|
177
|
+
chui_card,
|
|
178
|
+
chui_list,
|
|
179
|
+
chui_sidebar_nav,
|
|
180
|
+
chui_toolbar,
|
|
181
|
+
chui_status_bar,
|
|
182
|
+
chui_shortcut_help,
|
|
183
|
+
chui_clipboard_history,
|
|
184
|
+
chui_code_editor,
|
|
185
|
+
chui_json_viewer,
|
|
186
|
+
chui_tree_view,
|
|
187
|
+
chui_gantt,
|
|
188
|
+
chui_scheduler,
|
|
189
|
+
chui_splitter,
|
|
190
|
+
chui_drop_zone,
|
|
191
|
+
chui_statistic,
|
|
192
|
+
chui_alert,
|
|
193
|
+
chui_banner,
|
|
194
|
+
chui_actions_bar,
|
|
195
|
+
chui_user_bar,
|
|
196
|
+
write_bar_row,
|
|
197
|
+
chui_editor_controls,
|
|
198
|
+
.chui_code,
|
|
199
|
+
.settings_section
|
|
200
|
+
)
|
|
201
|
+
:is(
|
|
202
|
+
chui_card,
|
|
203
|
+
chui_list,
|
|
204
|
+
chui_sidebar_nav,
|
|
205
|
+
chui_toolbar,
|
|
206
|
+
chui_status_bar,
|
|
207
|
+
chui_shortcut_help,
|
|
208
|
+
chui_clipboard_history,
|
|
209
|
+
chui_code_editor,
|
|
210
|
+
chui_json_viewer,
|
|
211
|
+
chui_tree_view,
|
|
212
|
+
chui_gantt,
|
|
213
|
+
chui_scheduler,
|
|
214
|
+
chui_splitter,
|
|
215
|
+
chui_drop_zone,
|
|
216
|
+
chui_statistic,
|
|
217
|
+
chui_alert,
|
|
218
|
+
chui_banner,
|
|
219
|
+
chui_actions_bar,
|
|
220
|
+
chui_user_bar,
|
|
221
|
+
write_bar_row,
|
|
222
|
+
chui_editor_controls,
|
|
223
|
+
.chui_code,
|
|
224
|
+
.settings_section
|
|
225
|
+
) {
|
|
226
|
+
background: var(--element_background);
|
|
227
|
+
}
|
|
228
|
+
|
|
152
229
|
/* Коробки полей ввода. У внутреннего `input` своей рамки нет, а общее правило фокуса его
|
|
153
230
|
намеренно исключает (`:not(input)` — у полей рисуется системная рамка), поэтому активное
|
|
154
231
|
поле было видно только по карету. Наведение и фокус описаны одним правилом на список
|
|
@@ -263,7 +340,7 @@ chui_error_message {
|
|
|
263
340
|
display: block;
|
|
264
341
|
color: var(--red_prime_background);
|
|
265
342
|
font-size: var(--font_labels_size);
|
|
266
|
-
margin: var(--
|
|
343
|
+
margin: var(--block_margin);
|
|
267
344
|
}
|
|
268
345
|
|
|
269
346
|
/* Активный пункт меню/опции при навигации с клавиатуры — совпадает с :hover.
|
|
@@ -279,51 +356,81 @@ chui_error_message {
|
|
|
279
356
|
}
|
|
280
357
|
|
|
281
358
|
* {
|
|
282
|
-
font-family:
|
|
359
|
+
font-family: "chui_I";
|
|
283
360
|
font-style: normal;
|
|
284
361
|
user-select: none;
|
|
285
362
|
outline: none;
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
363
|
+
/* Движение по умолчанию: цвет, тень и яркость — быстрые состояния, прозрачность и
|
|
364
|
+
перемещение — базовые. Кривая одна (торможение к покою), поэтому один и тот же жест
|
|
365
|
+
в разных местах читается одинаково, а свои списки ниже только уточняют его */
|
|
366
|
+
transition:
|
|
367
|
+
background-color var(--motion_fast) var(--motion_ease),
|
|
368
|
+
color var(--motion_fast) var(--motion_ease),
|
|
369
|
+
border-color var(--motion_fast) var(--motion_ease),
|
|
370
|
+
box-shadow var(--motion_fast) var(--motion_ease),
|
|
371
|
+
filter var(--motion_fast) var(--motion_ease),
|
|
372
|
+
opacity var(--motion_base) var(--motion_ease),
|
|
373
|
+
transform var(--motion_base) var(--motion_ease);
|
|
374
|
+
animation-duration: var(--motion_base);
|
|
293
375
|
position: relative;
|
|
294
376
|
font-size: var(--font_default_size);
|
|
295
377
|
line-height: normal;
|
|
296
378
|
}
|
|
297
379
|
|
|
298
380
|
*:before {
|
|
299
|
-
font-family:
|
|
381
|
+
font-family: "chui_I";
|
|
300
382
|
font-style: normal;
|
|
301
383
|
user-select: none;
|
|
302
384
|
outline: none;
|
|
303
|
-
transition:
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
385
|
+
transition:
|
|
386
|
+
background-color var(--motion_fast) var(--motion_ease),
|
|
387
|
+
color var(--motion_fast) var(--motion_ease),
|
|
388
|
+
border-color var(--motion_fast) var(--motion_ease),
|
|
389
|
+
box-shadow var(--motion_fast) var(--motion_ease),
|
|
390
|
+
filter var(--motion_fast) var(--motion_ease),
|
|
391
|
+
opacity var(--motion_base) var(--motion_ease),
|
|
392
|
+
transform var(--motion_base) var(--motion_ease);
|
|
393
|
+
animation-duration: var(--motion_base);
|
|
310
394
|
position: relative;
|
|
311
395
|
font-size: var(--font_default_size);
|
|
312
396
|
line-height: normal;
|
|
313
397
|
}
|
|
314
398
|
|
|
399
|
+
/* Смена темы — кроссфейдом: браузер снимает страницу до и после смены и переводит один кадр
|
|
400
|
+
в другой (ведёт его служба темы, `crossFade` в `chui_animations/motion`). Своим переходом
|
|
401
|
+
смену схемы не показать: цвет приходит сменой `prefers-color-scheme`, а переходы на такое
|
|
402
|
+
изменение браузер не запускает (проверено замером — цвет подложки менялся кадром, хотя
|
|
403
|
+
класс с временем перехода на корне уже стоял). Время и кривая — из токенов движения:
|
|
404
|
+
смена схемы меняет цвет всего окна сразу, это крупная поверхность. При уменьшенном
|
|
405
|
+
движении кроссфейд не запускается вовсе — это решает JS. */
|
|
406
|
+
::view-transition-old(root),
|
|
407
|
+
::view-transition-new(root) {
|
|
408
|
+
animation-duration: var(--motion_slow, 0.4s);
|
|
409
|
+
animation-timing-function: var(--motion_ease, ease-out);
|
|
410
|
+
}
|
|
411
|
+
|
|
315
412
|
:root *:focus-visible:not(input):not(textarea):not(select):not([contenteditable="true"]) {
|
|
316
413
|
outline: var(--focus_outline);
|
|
317
414
|
outline-offset: var(--focus_outline_offset);
|
|
318
415
|
}
|
|
319
|
-
|
|
320
416
|
/* Кольцо изнутри — там, где внешний контур срезает край контейнера с
|
|
321
417
|
`overflow: hidden` или прокруткой: ячейка сетки уезжает под закреплённые
|
|
322
418
|
колонки, журнал чата и строки листа действий лежат в обрезанной коробке.
|
|
323
419
|
Селектор повторяет вес общего правила: `:where` специфичности не добавляет,
|
|
324
420
|
а без повтора исключение проиграло бы — общее правило весит больше любого
|
|
325
421
|
компонентного (0,6,0 против 0,2,0). */
|
|
326
|
-
:root
|
|
422
|
+
:root
|
|
423
|
+
*:focus-visible:not(input):not(textarea):not(select):not([contenteditable="true"]):where(
|
|
424
|
+
data_grid_cell,
|
|
425
|
+
chat_log,
|
|
426
|
+
chat_input,
|
|
427
|
+
message_bar_feed,
|
|
428
|
+
user_list_bar_item,
|
|
429
|
+
chui_user_bar,
|
|
430
|
+
time_option,
|
|
431
|
+
action_sheet_action,
|
|
432
|
+
action_sheet_cancel
|
|
433
|
+
) {
|
|
327
434
|
outline-offset: var(--focus_outline_offset_inset);
|
|
328
435
|
}
|
|
329
436
|
|
|
@@ -459,7 +566,7 @@ header {
|
|
|
459
566
|
логическими свойствами, поэтому в RTL скругление зеркалится; верхние углы прямые —
|
|
460
567
|
их срезал бы композитор. */
|
|
461
568
|
align-items: start;
|
|
462
|
-
background-color: var(--
|
|
569
|
+
background-color: var(--bar_background);
|
|
463
570
|
backdrop-filter: var(--global_blur);
|
|
464
571
|
justify-content: space-between;
|
|
465
572
|
border-bottom: 1px solid var(--border_color);
|
|
@@ -523,7 +630,7 @@ notification_panel {
|
|
|
523
630
|
position: fixed;
|
|
524
631
|
top: calc(var(--header_height) - 1px);
|
|
525
632
|
inset-inline-end: 0;
|
|
526
|
-
padding: var(--
|
|
633
|
+
padding: var(--block_margin);
|
|
527
634
|
align-items: flex-end;
|
|
528
635
|
justify-content: flex-start;
|
|
529
636
|
z-index: 1001;
|
|
@@ -533,8 +640,10 @@ notification_panel {
|
|
|
533
640
|
chui_notification/styles.css): у всплывающей тени разлёт больше, и её обрезало бы
|
|
534
641
|
краем панели в серый прямоугольник под карточками. */
|
|
535
642
|
overflow: hidden auto;
|
|
536
|
-
max-height: calc(100% - var(--header_height) - 18px - (var(--
|
|
537
|
-
|
|
643
|
+
max-height: calc(100% - var(--header_height) - 18px - (var(--block_margin) * 2));
|
|
644
|
+
/* Раскрытие панели — обратимый ход по высоте, поэтому базовая длительность и мягкая кривая
|
|
645
|
+
с обеих сторон, а не быстрая кривая состояний */
|
|
646
|
+
transition: max-height var(--motion_base) var(--motion_ease_in_out);
|
|
538
647
|
}
|
|
539
648
|
|
|
540
649
|
app_menu {
|
|
@@ -544,10 +653,12 @@ app_menu {
|
|
|
544
653
|
justify-content: flex-start;
|
|
545
654
|
align-items: flex-start;
|
|
546
655
|
z-index: 1000;
|
|
547
|
-
margin: calc(var(--header_height) + (var(--
|
|
656
|
+
margin: calc(var(--header_height) + (var(--block_margin) * 2)) calc(var(--block_margin) * 2)
|
|
657
|
+
calc(var(--block_margin) * 2) calc(var(--block_margin) * 2);
|
|
548
658
|
border-radius: var(--radius_md);
|
|
549
659
|
box-shadow: var(--box_shadow_drop);
|
|
550
|
-
|
|
660
|
+
/* Меню маршрутов — полоса оболочки: заливка — цвет подложки, а не карточки */
|
|
661
|
+
background: var(--bar_background);
|
|
551
662
|
backdrop-filter: var(--global_blur);
|
|
552
663
|
height: -webkit-fill-available;
|
|
553
664
|
width: -webkit-fill-available;
|
|
@@ -562,26 +673,29 @@ notification_box {
|
|
|
562
673
|
align-items: flex-start;
|
|
563
674
|
height: -webkit-fill-available;
|
|
564
675
|
z-index: 1000;
|
|
565
|
-
margin: calc(var(--header_height) + (var(--
|
|
676
|
+
margin: calc(var(--header_height) + (var(--block_margin) * 2)) calc(var(--block_margin) * 2)
|
|
677
|
+
calc(var(--block_margin) * 2) calc(var(--block_margin) * 2);
|
|
566
678
|
border-radius: var(--radius_md);
|
|
567
679
|
box-shadow: var(--box_shadow_drop);
|
|
568
|
-
|
|
680
|
+
/* Ящик уведомлений — тоже полоса оболочки: заливка — цвет подложки */
|
|
681
|
+
background: var(--bar_background);
|
|
569
682
|
backdrop-filter: var(--global_blur);
|
|
570
683
|
width: -webkit-fill-available;
|
|
571
684
|
border: 1px solid var(--border_color);
|
|
572
685
|
}
|
|
573
686
|
|
|
574
|
-
/* Панели выезжают сдвигом (transform ставит JS), поэтому движение задано здесь явно и
|
|
575
|
-
кривой --
|
|
576
|
-
переходят как у всех
|
|
687
|
+
/* Панели выезжают сдвигом (transform ставит JS), поэтому движение задано здесь явно и
|
|
688
|
+
с кривой --motion_ease: выезд читается как отклик, а не как линейный сдвиг. Остальные
|
|
689
|
+
свойства переходят как у всех элементов, но с быстрой длительностью — это состояния. */
|
|
577
690
|
app_menu,
|
|
578
691
|
notification_box {
|
|
579
|
-
transition:
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
692
|
+
transition:
|
|
693
|
+
transform var(--motion_base) var(--motion_ease),
|
|
694
|
+
background-color var(--motion_fast) var(--motion_ease),
|
|
695
|
+
color var(--motion_fast) var(--motion_ease),
|
|
696
|
+
border-color var(--motion_fast) var(--motion_ease),
|
|
697
|
+
box-shadow var(--motion_fast) var(--motion_ease),
|
|
698
|
+
opacity var(--motion_fast) var(--motion_ease);
|
|
585
699
|
}
|
|
586
700
|
|
|
587
701
|
/* Шапка ящика уведомлений: заголовок со счётчиком истории и действие «Очистить». */
|
|
@@ -590,9 +704,10 @@ notification_box_header {
|
|
|
590
704
|
flex-direction: row;
|
|
591
705
|
align-items: center;
|
|
592
706
|
justify-content: space-between;
|
|
593
|
-
gap: var(--
|
|
707
|
+
gap: var(--block_margin);
|
|
594
708
|
width: -webkit-fill-available;
|
|
595
|
-
padding-block: 10px 10px;
|
|
709
|
+
padding-block: 10px 10px;
|
|
710
|
+
padding-inline: 14px 10px;
|
|
596
711
|
box-shadow: inset 0 -1px 0 var(--border_color);
|
|
597
712
|
}
|
|
598
713
|
|
|
@@ -687,8 +802,10 @@ route_views > * {
|
|
|
687
802
|
}
|
|
688
803
|
|
|
689
804
|
/* Разделитель дней в истории: липнет к верху списка, пока видна его группа, поэтому день
|
|
690
|
-
остаётся названным и в середине длинной истории.
|
|
691
|
-
|
|
805
|
+
остаётся названным и в середине длинной истории. Подпись прозрачная полностью — ни заливки,
|
|
806
|
+
ни размытия: она не рисует полосу поверх списка, а только называет день. Текст — по центру
|
|
807
|
+
ящика. Из-за этого карточки при прокрутке проходят под подписью: это цена прозрачности,
|
|
808
|
+
прежде её закрывала заливка материала. */
|
|
692
809
|
notification_group {
|
|
693
810
|
position: sticky;
|
|
694
811
|
top: 0;
|
|
@@ -696,11 +813,12 @@ notification_group {
|
|
|
696
813
|
flex: none;
|
|
697
814
|
width: -webkit-fill-available;
|
|
698
815
|
padding: 8px 6px 6px;
|
|
699
|
-
background:
|
|
700
|
-
backdrop-filter:
|
|
816
|
+
background: transparent;
|
|
817
|
+
backdrop-filter: none;
|
|
701
818
|
color: var(--text_color_disabled);
|
|
702
819
|
font-size: var(--font_notification_size);
|
|
703
820
|
font-weight: 500;
|
|
821
|
+
text-align: center;
|
|
704
822
|
}
|
|
705
823
|
|
|
706
824
|
/* Отметка непрочитанного: точка в углу записи, пока ящик не открывали. Абсолютная, а не
|
|
@@ -732,6 +850,35 @@ notification_box_empty {
|
|
|
732
850
|
|
|
733
851
|
.notification_box_empty_visible {
|
|
734
852
|
display: flex;
|
|
853
|
+
/* Подсказка приходит движением: класс включает `display`, поэтому общий кадр
|
|
854
|
+
появления проигрывается заново, а не вспыхивает после очистки */
|
|
855
|
+
animation: chui_appear_up var(--motion_base) var(--motion_ease);
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
/*
|
|
859
|
+
* Очистка истории. Карточки уходят каскадом: номер в очереди ставит JS
|
|
860
|
+
* (`--notification_clear_index`), шаг — доля токена движения, поэтому весь список
|
|
861
|
+
* читается как рассыпающийся, а не выключенный одним щелчком. `forwards` держит
|
|
862
|
+
* конечное состояние, пока узел ещё в разметке: узел убирают по концу кадра.
|
|
863
|
+
*/
|
|
864
|
+
.notification_clearing {
|
|
865
|
+
animation: notification_clear var(--motion_fast) var(--motion_ease) forwards;
|
|
866
|
+
animation-delay: calc(var(--motion_fast) / 4 * var(--notification_clear_index, 0));
|
|
867
|
+
/* Уезжающая карточка уже не цель: иначе её можно было бы нажать на ходу */
|
|
868
|
+
pointer-events: none;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
@keyframes notification_clear {
|
|
872
|
+
to {
|
|
873
|
+
opacity: 0;
|
|
874
|
+
transform: translateX(100%);
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/* Уход подписи дня: она гаснет вместе с карточками, а не пропадает из-под них */
|
|
879
|
+
.notification_group_leaving {
|
|
880
|
+
animation: chui_leave_up var(--motion_fast) var(--motion_ease) forwards;
|
|
881
|
+
pointer-events: none;
|
|
735
882
|
}
|
|
736
883
|
|
|
737
884
|
/* Кнопки шапки — одна высота и один вертикальный отступ: 30 + 8 + 8 = 46px полосы.
|
|
@@ -754,17 +901,16 @@ notification_button {
|
|
|
754
901
|
высоты) — пилюля наведения казалась узкой. */
|
|
755
902
|
width: 30px;
|
|
756
903
|
border: none;
|
|
757
|
-
border-radius: var(--
|
|
904
|
+
border-radius: var(--radius_sm);
|
|
758
905
|
padding: 0;
|
|
759
906
|
margin-block: var(--header_margin) var(--header_margin);
|
|
760
907
|
/* Отступ справа такой же, как слева: справа от кнопки уведомлений стоит группа
|
|
761
908
|
кнопок окна с разделительной чертой (см. wc_box), и без своего отступа черта
|
|
762
909
|
прилипала к значку */
|
|
763
|
-
margin-inline: var(--
|
|
910
|
+
margin-inline: var(--block_margin) var(--block_margin);
|
|
764
911
|
background: transparent;
|
|
765
912
|
color: var(--text_color);
|
|
766
913
|
-webkit-app-region: no-drag;
|
|
767
|
-
transition: background-color var(--transition_time) ease, color var(--transition_time) ease;
|
|
768
914
|
}
|
|
769
915
|
|
|
770
916
|
notification_button:hover {
|
|
@@ -772,7 +918,8 @@ notification_button:hover {
|
|
|
772
918
|
}
|
|
773
919
|
|
|
774
920
|
notification_button:active {
|
|
775
|
-
background: var(--element_background_prime);
|
|
921
|
+
background: var(--element_background_prime);
|
|
922
|
+
color: var(--text_color_hover);
|
|
776
923
|
}
|
|
777
924
|
|
|
778
925
|
/* Открытый ящик уведомлений: тонировка акцента, а не ховер и не заливка во весь цвет */
|
|
@@ -814,14 +961,13 @@ app_menu_button {
|
|
|
814
961
|
height: 30px;
|
|
815
962
|
width: 30px;
|
|
816
963
|
border: none;
|
|
817
|
-
border-radius: var(--
|
|
964
|
+
border-radius: var(--radius_sm);
|
|
818
965
|
padding: 0;
|
|
819
966
|
margin-block: var(--header_margin) var(--header_margin);
|
|
820
|
-
margin-inline: var(--
|
|
967
|
+
margin-inline: var(--block_margin) var(--block_margin);
|
|
821
968
|
background: transparent;
|
|
822
969
|
color: var(--text_color);
|
|
823
970
|
-webkit-app-region: no-drag;
|
|
824
|
-
transition: background-color var(--transition_time) ease, color var(--transition_time) ease;
|
|
825
971
|
}
|
|
826
972
|
|
|
827
973
|
app_menu_button:hover {
|
|
@@ -829,7 +975,8 @@ app_menu_button:hover {
|
|
|
829
975
|
}
|
|
830
976
|
|
|
831
977
|
app_menu_button:active {
|
|
832
|
-
background: var(--element_background_prime);
|
|
978
|
+
background: var(--element_background_prime);
|
|
979
|
+
color: var(--text_color_hover);
|
|
833
980
|
}
|
|
834
981
|
|
|
835
982
|
/* Открытое меню маршрутов: та же тонировка акцента, что и у пунктов внутри */
|
|
@@ -904,11 +1051,12 @@ page_name {
|
|
|
904
1051
|
border: none;
|
|
905
1052
|
border-radius: var(--radius_pill);
|
|
906
1053
|
padding: 0 12px;
|
|
907
|
-
margin-block: var(--header_margin) var(--header_margin);
|
|
1054
|
+
margin-block: var(--header_margin) var(--header_margin);
|
|
1055
|
+
margin-inline: 0 var(--block_margin);
|
|
908
1056
|
font-size: var(--font_default_size);
|
|
909
1057
|
font-weight: 500;
|
|
910
1058
|
background: var(--element_background_disabled);
|
|
911
|
-
color: var(--text_color)
|
|
1059
|
+
color: var(--text_color);
|
|
912
1060
|
}
|
|
913
1061
|
|
|
914
1062
|
/* Пустое название не занимает места: до выбора страницы шапка не должна держать пустую капсулу */
|
|
@@ -952,7 +1100,8 @@ route:hover {
|
|
|
952
1100
|
}
|
|
953
1101
|
|
|
954
1102
|
route:active {
|
|
955
|
-
background: var(--element_background_prime);
|
|
1103
|
+
background: var(--element_background_prime);
|
|
1104
|
+
color: var(--text_color_hover);
|
|
956
1105
|
}
|
|
957
1106
|
|
|
958
1107
|
route_title {
|
|
@@ -1034,7 +1183,7 @@ blockquote {
|
|
|
1034
1183
|
margin: 1.5em 10px;
|
|
1035
1184
|
padding: 9px 14px;
|
|
1036
1185
|
color: var(--text_color);
|
|
1037
|
-
border-radius: var(--
|
|
1186
|
+
border-radius: var(--radius_sm);
|
|
1038
1187
|
display: flex;
|
|
1039
1188
|
}
|
|
1040
1189
|
|
|
@@ -1043,7 +1192,7 @@ header_left_box {
|
|
|
1043
1192
|
min-width: 0;
|
|
1044
1193
|
overflow: hidden;
|
|
1045
1194
|
width: -webkit-fill-available;
|
|
1046
|
-
align-items: center
|
|
1195
|
+
align-items: center;
|
|
1047
1196
|
}
|
|
1048
1197
|
|
|
1049
1198
|
header_right_box {
|
|
@@ -1070,9 +1219,10 @@ user_button {
|
|
|
1070
1219
|
width: max-content;
|
|
1071
1220
|
border: none;
|
|
1072
1221
|
color: var(--text_color);
|
|
1073
|
-
border-radius: var(--
|
|
1222
|
+
border-radius: var(--radius_sm);
|
|
1074
1223
|
padding: 5px 13px;
|
|
1075
|
-
margin-block: var(--header_margin) var(--header_margin);
|
|
1224
|
+
margin-block: var(--header_margin) var(--header_margin);
|
|
1225
|
+
margin-inline: var(--block_margin) 0;
|
|
1076
1226
|
font-size: var(--font_default_size);
|
|
1077
1227
|
background: transparent;
|
|
1078
1228
|
font-weight: 500;
|
|
@@ -1087,7 +1237,8 @@ user_button:hover {
|
|
|
1087
1237
|
}
|
|
1088
1238
|
|
|
1089
1239
|
user_button:active {
|
|
1090
|
-
background: var(--element_background_prime);
|
|
1240
|
+
background: var(--element_background_prime);
|
|
1241
|
+
color: var(--text_color_hover);
|
|
1091
1242
|
}
|
|
1092
1243
|
|
|
1093
1244
|
/* Открытое меню: тонировка акцента — та же, что у открытых кнопок шапки.
|
|
@@ -1114,7 +1265,7 @@ user_dropdown {
|
|
|
1114
1265
|
z-index: 1002;
|
|
1115
1266
|
flex-direction: column;
|
|
1116
1267
|
min-width: 165px;
|
|
1117
|
-
padding: var(--
|
|
1268
|
+
padding: var(--block_margin);
|
|
1118
1269
|
background: var(--header_background);
|
|
1119
1270
|
color: var(--text_color);
|
|
1120
1271
|
border: 1px solid var(--border_color);
|
|
@@ -1125,7 +1276,7 @@ user_dropdown {
|
|
|
1125
1276
|
}
|
|
1126
1277
|
|
|
1127
1278
|
/* Пункт — плоская строка в стиле context_menu_item / пункта меню-бара: синяя заливка
|
|
1128
|
-
ховера одна на всю семью меню, а размеры строки берутся из --
|
|
1279
|
+
ховера одна на всю семью меню, а размеры строки берутся из --block_padding. */
|
|
1129
1280
|
user_dropdown user_item {
|
|
1130
1281
|
color: var(--text_color);
|
|
1131
1282
|
display: flex;
|
|
@@ -1135,8 +1286,8 @@ user_dropdown user_item {
|
|
|
1135
1286
|
cursor: pointer;
|
|
1136
1287
|
text-align: start;
|
|
1137
1288
|
width: -webkit-fill-available;
|
|
1138
|
-
padding: var(--
|
|
1139
|
-
border-radius: var(--
|
|
1289
|
+
padding: var(--block_padding);
|
|
1290
|
+
border-radius: var(--radius_sm);
|
|
1140
1291
|
}
|
|
1141
1292
|
|
|
1142
1293
|
user_dropdown user_item:hover {
|
|
@@ -1170,7 +1321,7 @@ user_dd_image_main {
|
|
|
1170
1321
|
align-items: center;
|
|
1171
1322
|
justify-content: center;
|
|
1172
1323
|
flex-wrap: nowrap;
|
|
1173
|
-
margin-bottom: 6px
|
|
1324
|
+
margin-bottom: 6px;
|
|
1174
1325
|
}
|
|
1175
1326
|
|
|
1176
1327
|
/* chUiJS_HeaderButton */
|
|
@@ -1181,9 +1332,10 @@ header_button {
|
|
|
1181
1332
|
height: calc(30px * var(--density));
|
|
1182
1333
|
width: max-content;
|
|
1183
1334
|
border: none;
|
|
1184
|
-
border-radius: var(--
|
|
1335
|
+
border-radius: var(--radius_sm);
|
|
1185
1336
|
padding: 5px 13px;
|
|
1186
|
-
margin-block: var(--header_margin) var(--header_margin);
|
|
1337
|
+
margin-block: var(--header_margin) var(--header_margin);
|
|
1338
|
+
margin-inline: var(--block_margin) 0;
|
|
1187
1339
|
font-size: var(--font_default_size);
|
|
1188
1340
|
background: transparent;
|
|
1189
1341
|
color: var(--text_color);
|
|
@@ -1192,7 +1344,6 @@ header_button {
|
|
|
1192
1344
|
flex-direction: row;
|
|
1193
1345
|
align-items: center;
|
|
1194
1346
|
-webkit-app-region: no-drag;
|
|
1195
|
-
transition: background-color var(--transition_time) ease, color var(--transition_time) ease;
|
|
1196
1347
|
}
|
|
1197
1348
|
|
|
1198
1349
|
header_button header_button_title {
|
|
@@ -1210,7 +1361,8 @@ header_button:hover {
|
|
|
1210
1361
|
}
|
|
1211
1362
|
|
|
1212
1363
|
header_button:active {
|
|
1213
|
-
background: var(--element_background_prime);
|
|
1364
|
+
background: var(--element_background_prime);
|
|
1365
|
+
color: var(--text_color_hover);
|
|
1214
1366
|
}
|
|
1215
1367
|
|
|
1216
1368
|
/*Управление окном — те же кнопки-иконки, что и остальные в шапке, но приглушённые:
|
|
@@ -1243,7 +1395,9 @@ wc_box:not(:first-child) {
|
|
|
1243
1395
|
box-shadow: inset 1px 0 0 var(--border_color);
|
|
1244
1396
|
}
|
|
1245
1397
|
|
|
1246
|
-
wc_close,
|
|
1398
|
+
wc_close,
|
|
1399
|
+
wc_maximize,
|
|
1400
|
+
wc_minimize {
|
|
1247
1401
|
cursor: pointer;
|
|
1248
1402
|
display: flex;
|
|
1249
1403
|
align-items: center;
|
|
@@ -1255,7 +1409,6 @@ wc_close, wc_maximize, wc_minimize {
|
|
|
1255
1409
|
border-radius: var(--radius_sm);
|
|
1256
1410
|
background: transparent;
|
|
1257
1411
|
color: var(--text_color_disabled);
|
|
1258
|
-
transition: background-color var(--transition_time) ease, color var(--transition_time) ease;
|
|
1259
1412
|
}
|
|
1260
1413
|
|
|
1261
1414
|
/* Значки кнопок окна нарисованы линиями (SVG), а не взяты из шрифта иконок: три системные
|
|
@@ -1273,12 +1426,15 @@ wc_minimize svg {
|
|
|
1273
1426
|
color: var(--text_color_disabled);
|
|
1274
1427
|
}
|
|
1275
1428
|
|
|
1276
|
-
wc_maximize:hover,
|
|
1429
|
+
wc_maximize:hover,
|
|
1430
|
+
wc_minimize:hover {
|
|
1277
1431
|
background: var(--element_background_hover);
|
|
1278
1432
|
}
|
|
1279
1433
|
|
|
1280
|
-
wc_maximize:active,
|
|
1281
|
-
|
|
1434
|
+
wc_maximize:active,
|
|
1435
|
+
wc_minimize:active {
|
|
1436
|
+
background: var(--element_background_prime);
|
|
1437
|
+
color: var(--text_color_hover);
|
|
1282
1438
|
}
|
|
1283
1439
|
|
|
1284
1440
|
wc_maximize:hover svg,
|
|
@@ -1303,7 +1459,9 @@ wc_close:active svg {
|
|
|
1303
1459
|
color: var(--text_color);
|
|
1304
1460
|
}
|
|
1305
1461
|
|
|
1306
|
-
wc_close:focus-visible,
|
|
1462
|
+
wc_close:focus-visible,
|
|
1463
|
+
wc_maximize:focus-visible,
|
|
1464
|
+
wc_minimize:focus-visible {
|
|
1307
1465
|
outline: var(--focus_outline);
|
|
1308
1466
|
outline-offset: var(--focus_outline_offset);
|
|
1309
1467
|
}
|
|
@@ -1333,4 +1491,37 @@ header_tabs {
|
|
|
1333
1491
|
|
|
1334
1492
|
.header_tab_active header_button_icon chui_icon {
|
|
1335
1493
|
color: var(--link_color);
|
|
1336
|
-
}
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
/* ── Появление строки в списке ─────────────────────────────── */
|
|
1497
|
+
/* Списки, которые наполняются по одной (журнал, чат, буфер обмена, лента), читаются
|
|
1498
|
+
растущим документом, если строка встаёт на место, а не возникает рывком. Кадр общий:
|
|
1499
|
+
одно движение на все списки, а время и кривая — из токенов движения */
|
|
1500
|
+
@keyframes chui_appear_up {
|
|
1501
|
+
from {
|
|
1502
|
+
opacity: 0;
|
|
1503
|
+
transform: translateY(6px);
|
|
1504
|
+
}
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
/* Уход строки или слоя: гаснет и сходит вверх. Пара к `chui_appear_up`: узел убирается
|
|
1508
|
+
по концу кадра, а `forwards` держит конечное состояние, пока он ещё в документе */
|
|
1509
|
+
@keyframes chui_leave_up {
|
|
1510
|
+
to {
|
|
1511
|
+
opacity: 0;
|
|
1512
|
+
transform: translateY(-6px);
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
/* ── Появление всплывающей панели у триггера ───────────────── */
|
|
1517
|
+
/* Выпадающий список, меню и поповер читаются раскрывшимися у своего триггера, если панель
|
|
1518
|
+
приходит сверху вниз и чуть вырастает. Прежний `fade-in` менял только прозрачность —
|
|
1519
|
+
открытие получалось рывком.
|
|
1520
|
+
Конечное состояние не объявлено: панель возвращается к своим стилям, и вычисленный
|
|
1521
|
+
`transform` на ней не остаётся (иначе панель стала бы содержащим блоком для детей). */
|
|
1522
|
+
@keyframes chui_panel_in {
|
|
1523
|
+
from {
|
|
1524
|
+
opacity: 0;
|
|
1525
|
+
transform: translateY(-4px) scale(0.97);
|
|
1526
|
+
}
|
|
1527
|
+
}
|