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
|
@@ -3,7 +3,7 @@ chui_data_grid {
|
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
/* fill-available учитывает собственный margin, 100% — нет */
|
|
5
5
|
width: -webkit-fill-available;
|
|
6
|
-
margin: var(--
|
|
6
|
+
margin: var(--block_margin);
|
|
7
7
|
font-size: var(--font_default_size);
|
|
8
8
|
/* Локальные поверхности сетки: систему токенов не трогаем, но полный
|
|
9
9
|
`--element_background` давал плотный серый блок, поэтому тело — только часть
|
|
@@ -14,7 +14,8 @@ chui_data_grid {
|
|
|
14
14
|
серого: так полоса шапки читается, но не превращается в яркую ленту */
|
|
15
15
|
--data_grid_surface: color-mix(in srgb, var(--element_background) 60%, transparent);
|
|
16
16
|
--data_grid_body: linear-gradient(var(--data_grid_surface), var(--data_grid_surface)), var(--element_background_2);
|
|
17
|
-
--data_grid_head:
|
|
17
|
+
--data_grid_head:
|
|
18
|
+
linear-gradient(var(--element_background), var(--element_background)),
|
|
18
19
|
linear-gradient(var(--data_grid_surface), var(--data_grid_surface)), var(--element_background_2);
|
|
19
20
|
/* Выделение — мягкая тонировка акцента: плотный токен (0.26 в тёмной схеме) читался
|
|
20
21
|
тяжёлым синим блоком во всю строку */
|
|
@@ -56,9 +57,10 @@ data_grid_error {
|
|
|
56
57
|
box-sizing: border-box;
|
|
57
58
|
width: 100%;
|
|
58
59
|
margin-bottom: 6px;
|
|
59
|
-
padding-block: 6px 6px;
|
|
60
|
-
|
|
61
|
-
border
|
|
60
|
+
padding-block: 6px 6px;
|
|
61
|
+
padding-inline: 12px 12px;
|
|
62
|
+
border: 1px solid var(--badge_error_background);
|
|
63
|
+
border-radius: var(--radius_sm);
|
|
62
64
|
background: var(--element_background_2);
|
|
63
65
|
font-size: var(--font_default_size);
|
|
64
66
|
}
|
|
@@ -97,24 +99,23 @@ data_grid_head data_grid_cell.data_grid_cell_pinned {
|
|
|
97
99
|
|
|
98
100
|
data_grid_cell.data_grid_cell_pinned_last {
|
|
99
101
|
border-inline-end: 1px solid var(--border_color);
|
|
100
|
-
/* Тень закреплённой колонки
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
box-shadow:
|
|
102
|
+
/* Тень закреплённой колонки — общий ключ: она направленная, вбок, а общие тени
|
|
103
|
+
накрывают элемент со всех сторон. Разлёт больше, процент меньше — чтобы край
|
|
104
|
+
колонки читался мягкой границей, а не линией */
|
|
105
|
+
box-shadow: var(--box_shadow_edge);
|
|
104
106
|
}
|
|
105
107
|
|
|
106
108
|
/* Наведение на строку: у закреплённой ячейки свой непрозрачный фон, поэтому заливку
|
|
107
109
|
строки она перекрывает — плотность поднимаем её же слоями */
|
|
108
110
|
chui_data_grid data_grid_body data_grid_row:hover data_grid_cell.data_grid_cell_pinned {
|
|
109
|
-
background:
|
|
110
|
-
var(--data_grid_body);
|
|
111
|
+
background:
|
|
112
|
+
linear-gradient(var(--element_background_hover), var(--element_background_hover)), var(--data_grid_body);
|
|
111
113
|
}
|
|
112
114
|
|
|
113
115
|
chui_data_grid data_grid_row[aria-selected="true"] data_grid_cell.data_grid_cell_pinned {
|
|
114
116
|
/* Тонировка выделения поверх непрозрачной поверхности — закреплённая ячейка и в выделенной
|
|
115
117
|
строке не просвечивает прокрученным содержимым */
|
|
116
|
-
background: linear-gradient(var(--data_grid_selection), var(--data_grid_selection)),
|
|
117
|
-
var(--data_grid_body);
|
|
118
|
+
background: linear-gradient(var(--data_grid_selection), var(--data_grid_selection)), var(--data_grid_body);
|
|
118
119
|
}
|
|
119
120
|
|
|
120
121
|
/* Полоса выделения — на первой ячейке: закреплённая ячейка перекрывает фон строки,
|
|
@@ -130,7 +131,7 @@ data_grid_head {
|
|
|
130
131
|
box-sizing: border-box;
|
|
131
132
|
border: 1px solid var(--border_color);
|
|
132
133
|
border-bottom: none;
|
|
133
|
-
border-radius: var(--
|
|
134
|
+
border-radius: var(--radius_sm) var(--radius_sm) 0 0;
|
|
134
135
|
/* Шапка — на один шаг плотнее тела и остаётся отличима от карточки. Слои непрозрачные:
|
|
135
136
|
закреплённые ячейки шапки перекрывают уезжающие под них колонки */
|
|
136
137
|
background: var(--data_grid_head);
|
|
@@ -322,7 +323,7 @@ data_grid_body {
|
|
|
322
323
|
height: 340px;
|
|
323
324
|
margin: 0;
|
|
324
325
|
border: 1px solid var(--border_color);
|
|
325
|
-
border-radius: 0 0 var(--
|
|
326
|
+
border-radius: 0 0 var(--radius_sm) var(--radius_sm);
|
|
326
327
|
/* Спокойная нейтральная поверхность тела: у строки своего фона нет,
|
|
327
328
|
поэтому цвет строк даёт именно она */
|
|
328
329
|
background: var(--data_grid_surface);
|
|
@@ -337,7 +338,7 @@ data_grid_spacer {
|
|
|
337
338
|
|
|
338
339
|
data_grid_body_empty {
|
|
339
340
|
display: block;
|
|
340
|
-
padding: var(--
|
|
341
|
+
padding: var(--block_padding);
|
|
341
342
|
text-align: center;
|
|
342
343
|
color: var(--text_color_disabled);
|
|
343
344
|
}
|
|
@@ -350,7 +351,7 @@ data_grid_body_empty[hidden] {
|
|
|
350
351
|
когда пользователь долистал до конца уже загруженного */
|
|
351
352
|
data_grid_body_loader {
|
|
352
353
|
display: block;
|
|
353
|
-
padding: var(--
|
|
354
|
+
padding: var(--block_padding);
|
|
354
355
|
text-align: center;
|
|
355
356
|
color: var(--text_color_disabled);
|
|
356
357
|
border-top: 1px solid var(--border_color);
|
|
@@ -419,12 +420,13 @@ data_grid_cell.data_grid_cell_editing {
|
|
|
419
420
|
min-width: 0;
|
|
420
421
|
min-height: var(--control_height);
|
|
421
422
|
box-sizing: border-box;
|
|
422
|
-
/* Отступ снимаем: у своих редакторов-компонентов он свой (`margin: var(--
|
|
423
|
+
/* Отступ снимаем: у своих редакторов-компонентов он свой (`margin: var(--block_margin)`),
|
|
423
424
|
и поле съезжало в ячейке */
|
|
424
425
|
margin: 0;
|
|
425
|
-
padding-block: 0 0;
|
|
426
|
+
padding-block: 0 0;
|
|
427
|
+
padding-inline: 8px 8px;
|
|
426
428
|
border: 1px solid var(--blue_prime_background);
|
|
427
|
-
border-radius: var(--
|
|
429
|
+
border-radius: var(--radius_sm);
|
|
428
430
|
/* Приподнятая непрозрачная поверхность — та же, что у полей фреймворка: непрозрачная,
|
|
429
431
|
чтобы в выделенной строке поле не заливалось тонировкой, и светлее тела, чтобы поле
|
|
430
432
|
читалось как поле, а не как дыра в строке */
|
|
@@ -443,7 +445,7 @@ data_grid_cell.data_grid_cell_editing_select {
|
|
|
443
445
|
padding: 0 4px;
|
|
444
446
|
}
|
|
445
447
|
|
|
446
|
-
/* Корень Select — целый компонент: у него свой внешний отступ (`margin: var(--
|
|
448
|
+
/* Корень Select — целый компонент: у него свой внешний отступ (`margin: var(--block_margin)`)
|
|
447
449
|
и ширина контрола (`width: var(--control_width)`). Внутри ячейки это лишнее: из-за отступа
|
|
448
450
|
ячейка вырастала до 29 + 12 = 41 px и перекрывала соседей, а поле сужалось и съезжало
|
|
449
451
|
вправо. Растягиваем поле на ячейку и снимаем отступ */
|
|
@@ -467,7 +469,7 @@ data_grid_row:has(data_grid_cell.data_grid_cell_editing) {
|
|
|
467
469
|
}
|
|
468
470
|
|
|
469
471
|
/* Крутилка числа — системная: значение правят клавишами, поэтому вид у поля свой */
|
|
470
|
-
input[type=number].data_grid_editor::-webkit-inner-spin-button {
|
|
472
|
+
input[type="number"].data_grid_editor::-webkit-inner-spin-button {
|
|
471
473
|
-webkit-appearance: none;
|
|
472
474
|
}
|
|
473
475
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const {setStyles, optionOr} = require(
|
|
2
|
-
const {I18n} = require(
|
|
1
|
+
const { setStyles, optionOr } = require("../../modules/chui_functions");
|
|
2
|
+
const { I18n } = require("../../modules/chui_i18n/chui_i18n");
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Список свойств: пары «подпись — значение» одной таблицей — для панели свойств, карточки
|
|
@@ -34,11 +34,11 @@ const {I18n} = require('../../modules/chui_i18n/chui_i18n');
|
|
|
34
34
|
class Descriptions {
|
|
35
35
|
static LAYOUT = {
|
|
36
36
|
HORIZONTAL: "horizontal",
|
|
37
|
-
VERTICAL: "vertical"
|
|
37
|
+
VERTICAL: "vertical",
|
|
38
38
|
};
|
|
39
39
|
static SIZE = {
|
|
40
40
|
DEFAULT: "default",
|
|
41
|
-
SMALL: "small"
|
|
41
|
+
SMALL: "small",
|
|
42
42
|
};
|
|
43
43
|
static #counter = 0;
|
|
44
44
|
static #MAX_COLUMNS = 4;
|
|
@@ -52,11 +52,18 @@ class Descriptions {
|
|
|
52
52
|
#columns = 1;
|
|
53
53
|
#bordered = false;
|
|
54
54
|
|
|
55
|
-
constructor(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
constructor(
|
|
56
|
+
options = {
|
|
57
|
+
id: String(),
|
|
58
|
+
title: String(),
|
|
59
|
+
items: [],
|
|
60
|
+
columns: Number(),
|
|
61
|
+
bordered: Boolean(),
|
|
62
|
+
layout: String(),
|
|
63
|
+
size: String(),
|
|
64
|
+
label: String(),
|
|
65
|
+
}
|
|
66
|
+
) {
|
|
60
67
|
setStyles(__dirname + "/styles.css", "chUiJS_Descriptions");
|
|
61
68
|
Descriptions.#counter += 1;
|
|
62
69
|
this.#id = optionOr(options.id, `chui_descriptions_${Descriptions.#counter}`);
|
|
@@ -93,7 +100,7 @@ class Descriptions {
|
|
|
93
100
|
return this.#entries.map((entry) => ({
|
|
94
101
|
label: entry.label,
|
|
95
102
|
value: entry.value,
|
|
96
|
-
span: Math.min(entry.span, this.#columns)
|
|
103
|
+
span: Math.min(entry.span, this.#columns),
|
|
97
104
|
}));
|
|
98
105
|
}
|
|
99
106
|
|
|
@@ -149,14 +156,16 @@ class Descriptions {
|
|
|
149
156
|
|
|
150
157
|
/** Раскладка пары: подпись слева от значения или над ним */
|
|
151
158
|
setLayout(layout = String()) {
|
|
152
|
-
const known =
|
|
159
|
+
const known =
|
|
160
|
+
layout === Descriptions.LAYOUT.VERTICAL ? Descriptions.LAYOUT.VERTICAL : Descriptions.LAYOUT.HORIZONTAL;
|
|
153
161
|
this.#root.dataset.layout = known;
|
|
154
162
|
return this;
|
|
155
163
|
}
|
|
156
164
|
|
|
157
165
|
/** Размер строк: `Descriptions.SIZE.{DEFAULT, SMALL}` */
|
|
158
166
|
setSize(size = String()) {
|
|
159
|
-
this.#root.dataset.size =
|
|
167
|
+
this.#root.dataset.size =
|
|
168
|
+
size === Descriptions.SIZE.SMALL ? Descriptions.SIZE.SMALL : Descriptions.SIZE.DEFAULT;
|
|
160
169
|
return this;
|
|
161
170
|
}
|
|
162
171
|
|
|
@@ -197,10 +206,18 @@ class Descriptions {
|
|
|
197
206
|
#push(item = undefined) {
|
|
198
207
|
if (item === undefined || item === null) return;
|
|
199
208
|
const label = item.label === undefined ? "" : String(item.label);
|
|
200
|
-
const span =
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
209
|
+
const span =
|
|
210
|
+
Number.isFinite(Number(item.span)) && Math.floor(Number(item.span)) >= 1
|
|
211
|
+
? Math.floor(Number(item.span))
|
|
212
|
+
: 1;
|
|
213
|
+
this.#entries.push({
|
|
214
|
+
label: label,
|
|
215
|
+
value: item.value,
|
|
216
|
+
span: span,
|
|
217
|
+
node: undefined,
|
|
218
|
+
term: undefined,
|
|
219
|
+
value_node: undefined,
|
|
220
|
+
});
|
|
204
221
|
}
|
|
205
222
|
|
|
206
223
|
#render() {
|
|
@@ -250,4 +267,4 @@ class Descriptions {
|
|
|
250
267
|
}
|
|
251
268
|
}
|
|
252
269
|
|
|
253
|
-
exports.Descriptions = Descriptions
|
|
270
|
+
exports.Descriptions = Descriptions;
|
|
@@ -8,7 +8,7 @@ chui_descriptions {
|
|
|
8
8
|
/* Компонент сам задаёт ширину: в flex-колонке с align-items: flex-start
|
|
9
9
|
блок без ширины получил бы max-content и вылез за карточку */
|
|
10
10
|
width: -webkit-fill-available;
|
|
11
|
-
margin: var(--
|
|
11
|
+
margin: var(--block_margin);
|
|
12
12
|
--descriptions_columns: 1;
|
|
13
13
|
color: var(--text_color);
|
|
14
14
|
font-size: var(--font_default_size);
|
|
@@ -1,31 +1,37 @@
|
|
|
1
|
-
const {Icon, Icons} = require("../chui_icons/icons");
|
|
1
|
+
const { Icon, Icons } = require("../chui_icons/icons");
|
|
2
2
|
|
|
3
|
-
const {makeKeyboardButton} = require("../../modules/chui_a11y/chui_a11y");
|
|
3
|
+
const { makeKeyboardButton } = require("../../modules/chui_a11y/chui_a11y");
|
|
4
4
|
|
|
5
5
|
/** Идентификаторы для aria-controls у раскрывающихся панелей */
|
|
6
|
-
let
|
|
6
|
+
let disclosurePanelCounter = 0;
|
|
7
7
|
|
|
8
8
|
class Details {
|
|
9
9
|
#name = require("randomstring").generate();
|
|
10
|
-
#
|
|
10
|
+
#chuiDetails = document.createElement(`chui_details`);
|
|
11
11
|
//
|
|
12
|
-
#ab = document.createElement(
|
|
13
|
-
#bt = document.createElement(
|
|
14
|
-
#barrow = document.createElement(
|
|
12
|
+
#ab = document.createElement("details_button");
|
|
13
|
+
#bt = document.createElement("details_button_text");
|
|
14
|
+
#barrow = document.createElement("details_button_arrow");
|
|
15
15
|
//
|
|
16
|
-
#ap = document.createElement(
|
|
17
|
-
#html = document.createElement(
|
|
16
|
+
#ap = document.createElement("details_panel");
|
|
17
|
+
#html = document.createElement("details_panel_html");
|
|
18
18
|
#direction;
|
|
19
19
|
#wrap;
|
|
20
20
|
#align;
|
|
21
21
|
#justify;
|
|
22
22
|
#width;
|
|
23
|
-
constructor(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
constructor(
|
|
24
|
+
options = {
|
|
25
|
+
title: String(),
|
|
26
|
+
contenteditable: Boolean(),
|
|
27
|
+
direction: String(),
|
|
28
|
+
wrap: String(),
|
|
29
|
+
align: String(),
|
|
30
|
+
justify: String(),
|
|
31
|
+
width: String(),
|
|
32
|
+
}
|
|
33
|
+
) {
|
|
34
|
+
require("../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_Details");
|
|
29
35
|
this.#direction = options.direction;
|
|
30
36
|
this.#wrap = options.wrap;
|
|
31
37
|
this.#align = options.align;
|
|
@@ -33,39 +39,39 @@ class Details {
|
|
|
33
39
|
this.#width = options.width;
|
|
34
40
|
// Заготовка опции (`Boolean()`) равносильна незаданной: без проверки в разметке оставался
|
|
35
41
|
// `contenteditable="undefined"` — посторонний атрибут на каждой панели
|
|
36
|
-
if (options.contenteditable !== undefined) this.#html.setAttribute(
|
|
42
|
+
if (options.contenteditable !== undefined) this.#html.setAttribute("contenteditable", options.contenteditable);
|
|
37
43
|
|
|
38
44
|
if (this.#direction !== undefined) this.#html.style.flexDirection = this.#direction;
|
|
39
45
|
if (this.#wrap !== undefined) this.#html.style.flexWrap = this.#wrap;
|
|
40
46
|
if (this.#align !== undefined) this.#html.style.alignItems = this.#align;
|
|
41
47
|
if (this.#justify !== undefined) this.#html.style.justifyContent = this.#justify;
|
|
42
48
|
if (this.#width !== undefined) {
|
|
43
|
-
this.#
|
|
49
|
+
this.#chuiDetails.style.width = this.#width;
|
|
44
50
|
this.#ab.style.width = this.#width;
|
|
45
51
|
this.#ap.style.width = this.#width;
|
|
46
52
|
this.#html.style.width = this.#width;
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
this.#ab.setAttribute(
|
|
55
|
+
this.#ab.setAttribute("name", this.#name);
|
|
50
56
|
// Пустая заготовка (`title: String()` в описании опций) — это «заголовка нет»,
|
|
51
57
|
// а не текст «undefined» в кнопке раскрытия
|
|
52
58
|
this.#bt.innerText = options.title === undefined || options.title === null ? "" : String(options.title);
|
|
53
59
|
this.#barrow.innerHTML = new Icon(Icons.HARDWARE.KEYBOARD_ARROW_DOWN).getHTML();
|
|
54
|
-
this.#ab.appendChild(this.#bt)
|
|
55
|
-
this.#ab.appendChild(this.#barrow)
|
|
56
|
-
this.#ap.appendChild(this.#html)
|
|
57
|
-
this.#
|
|
58
|
-
this.#
|
|
60
|
+
this.#ab.appendChild(this.#bt);
|
|
61
|
+
this.#ab.appendChild(this.#barrow);
|
|
62
|
+
this.#ap.appendChild(this.#html);
|
|
63
|
+
this.#chuiDetails.appendChild(this.#ab);
|
|
64
|
+
this.#chuiDetails.appendChild(this.#ap);
|
|
59
65
|
|
|
60
66
|
//ФУНКЦИИ
|
|
61
|
-
|
|
67
|
+
const test = this.#chuiDetails.children;
|
|
62
68
|
let i;
|
|
63
69
|
for (i = 0; i < test.length; i++) {
|
|
64
|
-
|
|
65
|
-
if (elem.tagName ===
|
|
66
|
-
|
|
70
|
+
const elem = test[i];
|
|
71
|
+
if (elem.tagName === "DETAILS_BUTTON") {
|
|
72
|
+
const panel = elem.nextElementSibling;
|
|
67
73
|
// Доступность: кнопка раскрытия — role=button с состоянием, панель — отдельный регион
|
|
68
|
-
panel.id = "chui_details_panel_" + (
|
|
74
|
+
panel.id = "chui_details_panel_" + (disclosurePanelCounter += 1);
|
|
69
75
|
panel.setAttribute("role", "region");
|
|
70
76
|
elem.setAttribute("aria-controls", panel.id);
|
|
71
77
|
elem.setAttribute("aria-expanded", "false");
|
|
@@ -73,9 +79,9 @@ class Details {
|
|
|
73
79
|
// Tab и в дереве доступности — поэтому свёрнутая панель помечается инерт
|
|
74
80
|
panel.inert = true;
|
|
75
81
|
makeKeyboardButton(elem);
|
|
76
|
-
elem.addEventListener(
|
|
77
|
-
elem.classList.toggle(
|
|
78
|
-
|
|
82
|
+
elem.addEventListener("click", () => {
|
|
83
|
+
elem.classList.toggle("details_active");
|
|
84
|
+
const panel = elem.nextElementSibling;
|
|
79
85
|
// Стрелка и углы кнопки зависят от `aria-expanded` — их ведёт CSS,
|
|
80
86
|
// а инлайном остаётся только измеренная высота панели
|
|
81
87
|
if (panel.style.maxHeight) {
|
|
@@ -85,19 +91,19 @@ class Details {
|
|
|
85
91
|
panel.inert = false;
|
|
86
92
|
panel.style.maxHeight = panel.scrollHeight + "px";
|
|
87
93
|
}
|
|
88
|
-
elem.setAttribute("aria-expanded", elem.classList.contains(
|
|
89
|
-
})
|
|
94
|
+
elem.setAttribute("aria-expanded", elem.classList.contains("details_active") ? "true" : "false");
|
|
95
|
+
});
|
|
90
96
|
}
|
|
91
97
|
}
|
|
92
98
|
}
|
|
93
99
|
add(...components) {
|
|
94
|
-
for (
|
|
100
|
+
for (const component of components) {
|
|
95
101
|
this.#html.appendChild(component.set());
|
|
96
102
|
}
|
|
97
103
|
}
|
|
98
104
|
set() {
|
|
99
|
-
return this.#
|
|
105
|
+
return this.#chuiDetails;
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
|
|
103
|
-
exports.Details = Details
|
|
109
|
+
exports.Details = Details;
|
|
@@ -5,10 +5,10 @@ chui_details {
|
|
|
5
5
|
/* Ширина по умолчанию — по колонке: с `max-content` заголовок сжимался в плашку
|
|
6
6
|
по тексту и блок читался незаконченным (опция `width` перекрывает это значение) */
|
|
7
7
|
width: -webkit-fill-available;
|
|
8
|
-
margin: var(--
|
|
8
|
+
margin: var(--block_margin);
|
|
9
9
|
font-size: var(--font_default_size);
|
|
10
|
-
font-weight:400;
|
|
11
|
-
border-radius: var(--
|
|
10
|
+
font-weight: 400;
|
|
11
|
+
border-radius: var(--radius_sm);
|
|
12
12
|
border: none;
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -21,14 +21,14 @@ details_button_arrow {
|
|
|
21
21
|
details_button {
|
|
22
22
|
background: var(--element_background);
|
|
23
23
|
cursor: pointer;
|
|
24
|
-
padding: var(--
|
|
24
|
+
padding: var(--block_padding);
|
|
25
25
|
font-size: var(--font_default_size);
|
|
26
26
|
width: -webkit-fill-available;
|
|
27
27
|
text-align: start;
|
|
28
28
|
outline: none;
|
|
29
29
|
display: flex;
|
|
30
30
|
align-items: center;
|
|
31
|
-
border-radius: var(--
|
|
31
|
+
border-radius: var(--radius_sm);
|
|
32
32
|
color: var(--text_color);
|
|
33
33
|
border: none;
|
|
34
34
|
}
|
|
@@ -40,19 +40,19 @@ details_panel {
|
|
|
40
40
|
overflow: hidden;
|
|
41
41
|
width: -webkit-fill-available;
|
|
42
42
|
max-height: 0;
|
|
43
|
-
border-end-end-radius: var(--
|
|
44
|
-
border-end-start-radius: var(--
|
|
43
|
+
border-end-end-radius: var(--radius_sm);
|
|
44
|
+
border-end-start-radius: var(--radius_sm);
|
|
45
45
|
color: var(--text_color);
|
|
46
46
|
border: none;
|
|
47
47
|
/* Раскрытие идёт по `max-height`, которое считает JS: без перехода панель
|
|
48
48
|
раскрывалась рывком */
|
|
49
|
-
transition: max-height var(--
|
|
49
|
+
transition: max-height var(--motion_base) var(--motion_ease);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
details_panel_html {
|
|
53
53
|
padding: 8px 0;
|
|
54
54
|
width: -webkit-fill-available;
|
|
55
|
-
display: flex
|
|
55
|
+
display: flex;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
details_button:hover {
|
|
@@ -60,7 +60,8 @@ details_button:hover {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
details_button:active {
|
|
63
|
-
background: var(--element_background_prime);
|
|
63
|
+
background: var(--element_background_prime);
|
|
64
|
+
color: var(--text_color_hover);
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
details_button:hover details_button_text {
|
|
@@ -98,4 +99,4 @@ details_button[aria-expanded="true"] details_button_arrow chui_icon {
|
|
|
98
99
|
|
|
99
100
|
details_button[aria-expanded="false"] details_button_arrow chui_icon {
|
|
100
101
|
transform: rotate(0deg);
|
|
101
|
-
}
|
|
102
|
+
}
|