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.
Files changed (292) hide show
  1. package/CHANGELOG.md +597 -0
  2. package/README.md +43 -644
  3. package/framework/appLayout/default/chui_app_layout.js +602 -496
  4. package/framework/appLayout/default/global_style.css +288 -97
  5. package/framework/appLayout/default/main_theme_style.css +188 -101
  6. package/framework/components/chui_accordion/accordion.js +38 -35
  7. package/framework/components/chui_accordion/styles.css +13 -12
  8. package/framework/components/chui_action_sheet/action_sheet.js +93 -64
  9. package/framework/components/chui_action_sheet/styles.css +12 -5
  10. package/framework/components/chui_actions_bar/actions_bar.js +338 -0
  11. package/framework/components/chui_actions_bar/styles.css +139 -0
  12. package/framework/components/chui_affix/affix.js +16 -11
  13. package/framework/components/chui_affix/styles.css +5 -0
  14. package/framework/components/chui_alert/alert.js +34 -19
  15. package/framework/components/chui_alert/styles.css +7 -0
  16. package/framework/components/chui_avatar/avatar.js +36 -35
  17. package/framework/components/chui_avatar/styles.css +1 -1
  18. package/framework/components/chui_avatar_group/avatar_group.js +25 -23
  19. package/framework/components/chui_avatar_group/styles.css +1 -1
  20. package/framework/components/chui_backtop/backtop.js +60 -21
  21. package/framework/components/chui_backtop/styles.css +21 -0
  22. package/framework/components/chui_badge/badge.js +30 -28
  23. package/framework/components/chui_badge/styles.css +6 -6
  24. package/framework/components/chui_banner/banner.js +222 -0
  25. package/framework/components/chui_banner/styles.css +170 -0
  26. package/framework/components/chui_breadcrumb/breadcrumb.js +15 -13
  27. package/framework/components/chui_breadcrumb/styles.css +1 -1
  28. package/framework/components/chui_button/button.js +52 -36
  29. package/framework/components/chui_button/styles.css +7 -7
  30. package/framework/components/chui_calendar/calendar.js +18 -16
  31. package/framework/components/chui_card/card.js +52 -32
  32. package/framework/components/chui_card_scroll/card_scroll.js +169 -0
  33. package/framework/components/chui_card_scroll/styles.css +86 -0
  34. package/framework/components/chui_chat/chat.js +140 -79
  35. package/framework/components/chui_chat/styles.css +18 -7
  36. package/framework/components/chui_clipboard_history/clipboard_history.js +53 -39
  37. package/framework/components/chui_clipboard_history/styles.css +13 -9
  38. package/framework/components/chui_code/code.js +10 -10
  39. package/framework/components/chui_code/styles.css +4 -4
  40. package/framework/components/chui_code_editor/code_editor.js +73 -57
  41. package/framework/components/chui_code_editor/styles.css +6 -5
  42. package/framework/components/chui_command_palette/command_palette.js +87 -64
  43. package/framework/components/chui_command_palette/styles.css +5 -5
  44. package/framework/components/chui_console/console.js +13 -13
  45. package/framework/components/chui_console/styles.css +6 -3
  46. package/framework/components/chui_content_block/content_block.js +35 -21
  47. package/framework/components/chui_content_block/styles.css +2 -2
  48. package/framework/components/chui_context_menu/context_menu.js +171 -58
  49. package/framework/components/chui_context_menu/styles.css +82 -8
  50. package/framework/components/chui_custom_element/custom_element.js +25 -18
  51. package/framework/components/chui_data_grid/data_grid.js +633 -471
  52. package/framework/components/chui_data_grid/styles.css +24 -22
  53. package/framework/components/chui_descriptions/descriptions.js +34 -17
  54. package/framework/components/chui_descriptions/styles.css +1 -1
  55. package/framework/components/chui_details/details.js +42 -36
  56. package/framework/components/chui_details/styles.css +12 -11
  57. package/framework/components/chui_diff_viewer/diff_viewer.js +172 -147
  58. package/framework/components/chui_diff_viewer/styles.css +10 -10
  59. package/framework/components/chui_divider/divider.js +19 -17
  60. package/framework/components/chui_divider/styles.css +2 -2
  61. package/framework/components/chui_drawer/drawer.js +63 -38
  62. package/framework/components/chui_drawer/styles.css +18 -4
  63. package/framework/components/chui_drop_zone/drop_zone.js +37 -27
  64. package/framework/components/chui_drop_zone/styles.css +10 -6
  65. package/framework/components/chui_empty_state/empty_state.js +20 -15
  66. package/framework/components/chui_fieldset/fieldset.js +40 -23
  67. package/framework/components/chui_fieldset/styles.css +6 -6
  68. package/framework/components/chui_file_explorer/file_explorer.js +260 -189
  69. package/framework/components/chui_file_explorer/styles.css +8 -7
  70. package/framework/components/chui_form/form.js +40 -28
  71. package/framework/components/chui_form/styles.css +1 -1
  72. package/framework/components/chui_gantt/gantt.js +102 -78
  73. package/framework/components/chui_gantt/styles.css +5 -5
  74. package/framework/components/chui_graphs/graphs.js +376 -239
  75. package/framework/components/chui_graphs/styles.css +27 -6
  76. package/framework/components/chui_hero/hero.js +98 -37
  77. package/framework/components/chui_hero/styles.css +176 -7
  78. package/framework/components/chui_html_block/html_block.js +8 -8
  79. package/framework/components/chui_html_block/styles.css +3 -3
  80. package/framework/components/chui_hx/hx.js +3 -3
  81. package/framework/components/chui_hx/styles.css +13 -6
  82. package/framework/components/chui_icons/icons.js +2115 -2115
  83. package/framework/components/chui_icons/styles.css +4 -3
  84. package/framework/components/chui_inputs/chui_check_box/check_box.js +31 -19
  85. package/framework/components/chui_inputs/chui_check_box/styles.css +30 -21
  86. package/framework/components/chui_inputs/chui_chips/chips.js +141 -70
  87. package/framework/components/chui_inputs/chui_chips/styles.css +32 -7
  88. package/framework/components/chui_inputs/chui_color_picker/color_picker.js +55 -38
  89. package/framework/components/chui_inputs/chui_color_picker/styles.css +7 -7
  90. package/framework/components/chui_inputs/chui_combo_box/combo_box.js +127 -109
  91. package/framework/components/chui_inputs/chui_combo_box/styles.css +23 -21
  92. package/framework/components/chui_inputs/chui_date/date.js +161 -127
  93. package/framework/components/chui_inputs/chui_date/styles.css +20 -19
  94. package/framework/components/chui_inputs/chui_date_range/date_range.js +61 -50
  95. package/framework/components/chui_inputs/chui_date_range/styles.css +3 -3
  96. package/framework/components/chui_inputs/chui_datetime/datetime.js +47 -39
  97. package/framework/components/chui_inputs/chui_datetime/styles.css +3 -3
  98. package/framework/components/chui_inputs/chui_email/email.js +48 -36
  99. package/framework/components/chui_inputs/chui_email/styles.css +11 -11
  100. package/framework/components/chui_inputs/chui_file/file.js +71 -44
  101. package/framework/components/chui_inputs/chui_file/styles.css +23 -19
  102. package/framework/components/chui_inputs/chui_hotkey/hotkey.js +101 -76
  103. package/framework/components/chui_inputs/chui_hotkey/styles.css +6 -6
  104. package/framework/components/chui_inputs/chui_masked/masked.js +83 -72
  105. package/framework/components/chui_inputs/chui_masked/styles.css +5 -5
  106. package/framework/components/chui_inputs/chui_mention/mention.js +87 -40
  107. package/framework/components/chui_inputs/chui_mention/styles.css +14 -8
  108. package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +242 -212
  109. package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +23 -15
  110. package/framework/components/chui_inputs/chui_number/number.js +84 -70
  111. package/framework/components/chui_inputs/chui_number/styles.css +13 -13
  112. package/framework/components/chui_inputs/chui_otp/otp.js +71 -62
  113. package/framework/components/chui_inputs/chui_otp/styles.css +5 -5
  114. package/framework/components/chui_inputs/chui_password/password.js +72 -56
  115. package/framework/components/chui_inputs/chui_password/styles.css +15 -15
  116. package/framework/components/chui_inputs/chui_radio_button/radio_button.js +37 -25
  117. package/framework/components/chui_inputs/chui_radio_button/styles.css +22 -22
  118. package/framework/components/chui_inputs/chui_rating/rating.js +54 -50
  119. package/framework/components/chui_inputs/chui_rating/styles.css +3 -3
  120. package/framework/components/chui_inputs/chui_select_box/select_box.js +132 -108
  121. package/framework/components/chui_inputs/chui_select_box/styles.css +21 -21
  122. package/framework/components/chui_inputs/chui_slider/slider.js +41 -38
  123. package/framework/components/chui_inputs/chui_slider/styles.css +7 -5
  124. package/framework/components/chui_inputs/chui_text/styles.css +14 -14
  125. package/framework/components/chui_inputs/chui_text/text.js +69 -52
  126. package/framework/components/chui_inputs/chui_text_area/styles.css +14 -14
  127. package/framework/components/chui_inputs/chui_text_area/text_area.js +59 -36
  128. package/framework/components/chui_inputs/chui_time/styles.css +18 -20
  129. package/framework/components/chui_inputs/chui_time/time.js +71 -49
  130. package/framework/components/chui_inputs/chui_toggle/styles.css +13 -6
  131. package/framework/components/chui_inputs/chui_toggle/toggle.js +27 -27
  132. package/framework/components/chui_json_editor/json_editor.js +137 -127
  133. package/framework/components/chui_json_editor/styles.css +5 -5
  134. package/framework/components/chui_json_viewer/json_viewer.js +133 -114
  135. package/framework/components/chui_json_viewer/styles.css +9 -8
  136. package/framework/components/chui_kanban/kanban.js +78 -60
  137. package/framework/components/chui_kanban/styles.css +8 -4
  138. package/framework/components/chui_kbd/kbd.js +12 -10
  139. package/framework/components/chui_kbd/styles.css +1 -1
  140. package/framework/components/chui_label/label.js +31 -29
  141. package/framework/components/chui_label/styles.css +3 -3
  142. package/framework/components/chui_link/link.js +36 -29
  143. package/framework/components/chui_link/styles.css +11 -4
  144. package/framework/components/chui_list/list.js +42 -38
  145. package/framework/components/chui_list/styles.css +4 -3
  146. package/framework/components/chui_markdown_editor/markdown_editor.js +125 -109
  147. package/framework/components/chui_markdown_editor/styles.css +5 -5
  148. package/framework/components/chui_media/audio.js +457 -364
  149. package/framework/components/chui_media/audio_styles.css +74 -37
  150. package/framework/components/chui_media/image.js +99 -64
  151. package/framework/components/chui_media/image_compare.js +86 -55
  152. package/framework/components/chui_media/image_compare_styles.css +5 -5
  153. package/framework/components/chui_media/image_styles.css +4 -4
  154. package/framework/components/chui_media/video.js +264 -171
  155. package/framework/components/chui_media/video_styles.css +57 -24
  156. package/framework/components/chui_menu_bar/menu_bar.js +67 -65
  157. package/framework/components/chui_menu_bar/styles.css +14 -12
  158. package/framework/components/chui_message_bar/message_bar.js +551 -0
  159. package/framework/components/chui_message_bar/styles.css +248 -0
  160. package/framework/components/chui_modal/modal.js +81 -56
  161. package/framework/components/chui_modal/styles.css +3 -2
  162. package/framework/components/chui_notification/notification.js +107 -69
  163. package/framework/components/chui_notification/notification_download.js +28 -77
  164. package/framework/components/chui_notification/notification_download_card.js +115 -0
  165. package/framework/components/chui_notification/notification_download_progress.css +5 -4
  166. package/framework/components/chui_notification/notification_download_progress.js +73 -105
  167. package/framework/components/chui_notification/notification_update.js +44 -37
  168. package/framework/components/chui_notification/status_plate.css +3 -3
  169. package/framework/components/chui_notification/status_plate.js +2 -2
  170. package/framework/components/chui_notification/styles.css +6 -1
  171. package/framework/components/chui_notification/styles_download.css +2 -2
  172. package/framework/components/chui_notification/styles_update.css +3 -3
  173. package/framework/components/chui_org_chart/org_chart.js +101 -62
  174. package/framework/components/chui_org_chart/styles.css +2 -2
  175. package/framework/components/chui_pagination/pagination.js +65 -30
  176. package/framework/components/chui_pagination/styles.css +1 -1
  177. package/framework/components/chui_paragraph/paragraph.js +2 -2
  178. package/framework/components/chui_paragraph/styles.css +3 -3
  179. package/framework/components/chui_popover/popover.js +77 -50
  180. package/framework/components/chui_popover/styles.css +1 -1
  181. package/framework/components/chui_popups/popups.js +210 -181
  182. package/framework/components/chui_popups/styles.css +7 -7
  183. package/framework/components/chui_print_button/print_button.js +48 -33
  184. package/framework/components/chui_progress_bar/progress_bar.js +49 -19
  185. package/framework/components/chui_progress_bar/styles.css +6 -6
  186. package/framework/components/chui_progress_ring/progress_ring.js +32 -30
  187. package/framework/components/chui_progress_ring/styles.css +1 -1
  188. package/framework/components/chui_qrcode/qrcode.js +85 -41
  189. package/framework/components/chui_query_builder/query_builder.js +263 -170
  190. package/framework/components/chui_query_builder/styles.css +4 -4
  191. package/framework/components/chui_radio_group/radio_group.js +36 -26
  192. package/framework/components/chui_radio_group/styles.css +2 -2
  193. package/framework/components/chui_result/result.js +41 -31
  194. package/framework/components/chui_result/styles.css +3 -3
  195. package/framework/components/chui_scheduler/scheduler.js +126 -104
  196. package/framework/components/chui_scheduler/styles.css +11 -7
  197. package/framework/components/chui_screen_spinner/screen_spinner.js +167 -0
  198. package/framework/components/chui_screen_spinner/styles.css +49 -0
  199. package/framework/components/chui_segmented_control/segmented_control.js +90 -27
  200. package/framework/components/chui_segmented_control/styles.css +32 -6
  201. package/framework/components/chui_settings/settings.js +160 -87
  202. package/framework/components/chui_settings/styles.css +4 -4
  203. package/framework/components/chui_shortcut_help/shortcut_help.js +82 -61
  204. package/framework/components/chui_sidebar_nav/sidebar_nav.js +132 -53
  205. package/framework/components/chui_sidebar_nav/styles.css +9 -3
  206. package/framework/components/chui_skeleton/skeleton.js +29 -24
  207. package/framework/components/chui_slideshow/slideshow.js +122 -103
  208. package/framework/components/chui_slideshow/styles.css +22 -16
  209. package/framework/components/chui_spinner/spinner.js +17 -17
  210. package/framework/components/chui_spinner/styles.css +0 -1
  211. package/framework/components/chui_split_button/split_button.js +53 -30
  212. package/framework/components/chui_split_button/styles.css +22 -6
  213. package/framework/components/chui_splitter/splitter.js +46 -39
  214. package/framework/components/chui_splitter/styles.css +2 -2
  215. package/framework/components/chui_statistic/statistic.js +111 -84
  216. package/framework/components/chui_status_bar/status_bar.js +11 -9
  217. package/framework/components/chui_status_bar/styles.css +2 -2
  218. package/framework/components/chui_stepper/stepper.js +230 -54
  219. package/framework/components/chui_stepper/styles.css +79 -14
  220. package/framework/components/chui_sticky_bar/sticky_bar.js +53 -17
  221. package/framework/components/chui_sticky_bar/styles.css +11 -7
  222. package/framework/components/chui_tabs/chui_tabs.js +100 -46
  223. package/framework/components/chui_tabs/styles.css +43 -15
  224. package/framework/components/chui_text_editor/styles.css +24 -23
  225. package/framework/components/chui_text_editor/text_editor.js +103 -79
  226. package/framework/components/chui_text_editor/text_editor_panel.js +428 -367
  227. package/framework/components/chui_theme_toggle/theme_toggle.js +46 -25
  228. package/framework/components/chui_timeline/styles.css +3 -1
  229. package/framework/components/chui_timeline/timeline.js +14 -12
  230. package/framework/components/chui_toast_queue/styles.css +11 -11
  231. package/framework/components/chui_toast_queue/toast_queue.js +82 -73
  232. package/framework/components/chui_toolbar/styles.css +2 -2
  233. package/framework/components/chui_toolbar/toolbar.js +20 -13
  234. package/framework/components/chui_tooltip/styles.css +2 -2
  235. package/framework/components/chui_tooltip/tooltip.js +40 -27
  236. package/framework/components/chui_tour/styles.css +12 -7
  237. package/framework/components/chui_tour/tour.js +132 -98
  238. package/framework/components/chui_transfer/styles.css +8 -7
  239. package/framework/components/chui_transfer/transfer.js +143 -123
  240. package/framework/components/chui_tree_table/styles.css +4 -4
  241. package/framework/components/chui_tree_table/tree_table.js +88 -74
  242. package/framework/components/chui_tree_view/styles.css +14 -10
  243. package/framework/components/chui_tree_view/tree_view.js +298 -253
  244. package/framework/components/chui_user_bar/styles.css +145 -0
  245. package/framework/components/chui_user_bar/user_bar.js +402 -0
  246. package/framework/components/chui_user_list_bar/styles.css +173 -0
  247. package/framework/components/chui_user_list_bar/user_list_bar.js +485 -0
  248. package/framework/components/chui_watermark/watermark.js +41 -33
  249. package/framework/components/chui_webview/styles.css +2 -2
  250. package/framework/components/chui_webview/webview.js +64 -52
  251. package/framework/components/chui_write_bar/styles.css +172 -0
  252. package/framework/components/chui_write_bar/write_bar.js +320 -0
  253. package/framework/main_window.js +1234 -0
  254. package/framework/modules/chui_a11y/chui_a11y.js +153 -123
  255. package/framework/modules/chui_animations/animations.js +105 -43
  256. package/framework/modules/chui_animations/motion.js +120 -0
  257. package/framework/modules/chui_animations/styles.css +37 -4
  258. package/framework/modules/chui_bridge/preload.js +36 -25
  259. package/framework/modules/chui_functions.js +69 -63
  260. package/framework/modules/chui_highlight/chui_highlight.js +25 -22
  261. package/framework/modules/chui_highlight/styles.css +13 -10
  262. package/framework/modules/chui_i18n/chui_i18n.js +12 -10
  263. package/framework/modules/chui_i18n/locales/a11y.js +5 -5
  264. package/framework/modules/chui_i18n/locales/app_layout.js +5 -5
  265. package/framework/modules/chui_i18n/locales/calendar.js +3 -3
  266. package/framework/modules/chui_i18n/locales/common.js +3 -3
  267. package/framework/modules/chui_i18n/locales/data.js +36 -26
  268. package/framework/modules/chui_i18n/locales/editors.js +40 -13
  269. package/framework/modules/chui_i18n/locales/feedback.js +65 -3
  270. package/framework/modules/chui_i18n/locales/forms.js +8 -8
  271. package/framework/modules/chui_i18n/locales/graphics.js +8 -8
  272. package/framework/modules/chui_i18n/locales/media.js +4 -4
  273. package/framework/modules/chui_i18n/locales/navigation.js +12 -8
  274. package/framework/modules/chui_i18n/locales/validate.js +3 -3
  275. package/framework/modules/chui_json/chui_json.js +11 -11
  276. package/framework/modules/chui_layout/chui_layout.js +12 -10
  277. package/framework/modules/chui_logger/chui_logger.js +47 -28
  278. package/framework/modules/chui_page/page.js +39 -33
  279. package/framework/modules/chui_palette/palette.js +61 -0
  280. package/framework/modules/chui_qr/chui_qr.js +179 -88
  281. package/framework/modules/chui_scrollbar/chui_scrollbar.js +79 -68
  282. package/framework/modules/chui_scrollbar/styles.css +4 -2
  283. package/framework/modules/chui_services/chui_channels.js +27 -13
  284. package/framework/modules/chui_services/chui_services.js +47 -39
  285. package/framework/modules/chui_services/desktop.js +108 -101
  286. package/framework/modules/chui_sortable/chui_sortable.js +33 -28
  287. package/framework/modules/chui_validate/chui_validate.js +10 -7
  288. package/framework/tray_bar/chui_menu_items.js +136 -46
  289. package/index.d.ts +5046 -0
  290. package/index.js +199 -1254
  291. package/package.json +81 -68
  292. package/framework/components/telegram_bot/chui_telegram_bot.js +0 -184
@@ -4,11 +4,11 @@ chui_chips {
4
4
  карточку. Токены переопределены у корня поля, поэтому действуют только внутри него
5
5
  (тот же приём у полосы меню-бара). */
6
6
  --control_padding: var(--control_padding_sm);
7
- --main_padding: var(--main_padding_sm);
7
+ --block_padding: var(--block_padding_sm);
8
8
  display: block;
9
9
  /* fill-available учитывает собственный margin, 100% — нет */
10
10
  width: -webkit-fill-available;
11
- margin: var(--margin);
11
+ margin: var(--block_margin);
12
12
  font-size: var(--font_default_size);
13
13
  color: var(--text_color);
14
14
  }
@@ -16,7 +16,7 @@ chui_chips {
16
16
  chips_title {
17
17
  display: block;
18
18
  width: max-content;
19
- margin: 0 0 var(--margin);
19
+ margin: 0 0 var(--block_margin);
20
20
  font-size: var(--font_labels_size);
21
21
  font-weight: 500;
22
22
  color: var(--text_color);
@@ -37,7 +37,7 @@ chips_field {
37
37
  height: var(--control_height);
38
38
  padding: 3px 6px;
39
39
  border: 1px solid var(--border_color);
40
- border-radius: var(--border_radius);
40
+ border-radius: var(--radius_sm);
41
41
  background: var(--element_background);
42
42
  cursor: text;
43
43
  }
@@ -67,7 +67,8 @@ chips_item {
67
67
  box-sizing: border-box;
68
68
  flex: none;
69
69
  height: 21px;
70
- padding-block: 0 0; padding-inline: 8px 2px;
70
+ padding-block: 0 0;
71
+ padding-inline: 8px 2px;
71
72
  /* Скругление контрола (--radius_sm), как у полей и кнопок: капсула (--radius_pill)
72
73
  на невысокой метке читалась отдельным от полей элементом и выглядела тяжёлой.
73
74
  Заливка как у выбранных значений MultiComboBox: непрозрачная поверхность читается
@@ -98,7 +99,8 @@ chips_more {
98
99
  box-sizing: border-box;
99
100
  flex: none;
100
101
  height: 21px;
101
- padding-block: 0 0; padding-inline: 7px 7px;
102
+ padding-block: 0 0;
103
+ padding-inline: 7px 7px;
102
104
  border: 1px solid transparent;
103
105
  border-radius: var(--radius_sm);
104
106
  background: var(--element_background_hover);
@@ -191,7 +193,7 @@ chips_dropdown {
191
193
  overflow: hidden auto;
192
194
  padding: var(--control_padding);
193
195
  border: 1px solid var(--border_color);
194
- border-radius: var(--border_radius);
196
+ border-radius: var(--radius_sm);
195
197
  background: var(--header_background);
196
198
  backdrop-filter: var(--global_blur);
197
199
  box-shadow: var(--box_shadow_drop);
@@ -202,6 +204,29 @@ chips_dropdown[hidden] {
202
204
  display: none;
203
205
  }
204
206
 
207
+ /* Уход метки: она гаснет и сжимается, а из строки убирается по концу кадра */
208
+ .chips_item_leaving {
209
+ animation: chui_leave_up var(--motion_fast) var(--motion_ease) forwards;
210
+ }
211
+
212
+ /* Появление списка подсказок: общий кадр панели — он же проигрывается заново при снятии
213
+ `hidden`. Прежде список брал только общий кадр строки на быстром времени, и открытие
214
+ читалось рывком рядом с остальными дропдаунами */
215
+ chips_dropdown {
216
+ animation: chui_panel_in var(--motion_base) var(--motion_spring);
217
+ }
218
+
219
+ /* Появление метки: она встаёт на место, а не возникает рывком. Класс снимается по концу
220
+ кадра, поэтому пересборка списка метки не переигрывает */
221
+ .chips_item_appearing {
222
+ animation: chui_appear_up var(--motion_base) var(--motion_ease);
223
+ }
224
+
225
+ /* Уход: список гаснет и сходит вверх, `hidden` возвращается по концу кадра */
226
+ .chips_dropdown_leaving {
227
+ animation: chui_leave_up var(--motion_fast) var(--motion_ease) forwards;
228
+ }
229
+
205
230
  .chips_option {
206
231
  padding: 6px 8px;
207
232
  border-radius: var(--radius_sm);
@@ -1,6 +1,7 @@
1
- const {setStyles, optionOr} = require('../../../modules/chui_functions');
2
- const {Validate} = require('../../../modules/chui_validate/chui_validate');
3
- const {I18n} = require('../../../modules/chui_i18n/chui_i18n');
1
+ const { setStyles, optionOr } = require("../../../modules/chui_functions");
2
+ const { Validate } = require("../../../modules/chui_validate/chui_validate");
3
+ const { I18n } = require("../../../modules/chui_i18n/chui_i18n");
4
+ const { paletteColor } = require("../../../modules/chui_palette/palette");
4
5
 
5
6
  // Формат, который принимает и поле, и разбор значения: три или шесть знаков после «#»
6
7
  const HEX_PATTERN = "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
@@ -41,7 +42,11 @@ const HEX_PATTERN = "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$";
41
42
  * Слушателей и таймеров вне своих узлов нет, поэтому `destroy()` не нужен.
42
43
  */
43
44
  class ColorPicker {
44
- static PALETTE = ["#ff3b30", "#ff9500", "#ffcc00", "#34c759", "#007aff", "#5856d6", "#af52de", "#8e8e93"];
45
+ /* Готовые цвета — из общей палитры (светлая колонка: набор предлагается человеку,
46
+ а не подстраивается под схему окна) */
47
+ static PALETTE = ["red", "orange", "yellow", "green", "blue", "indigo", "purple", "gray"].map((name) =>
48
+ paletteColor(name, { scheme: "light" })
49
+ );
45
50
  static #counter = 0;
46
51
 
47
52
  #root = document.createElement("chui_color_picker");
@@ -55,36 +60,38 @@ class ColorPicker {
55
60
  #id = undefined;
56
61
  #name = undefined;
57
62
  #label = undefined;
58
- #title_text = undefined;
63
+ #titleText = undefined;
59
64
  #value = ColorPicker.PALETTE[4];
60
65
  #initial = ColorPicker.PALETTE[4];
61
66
  #items = [];
62
67
  #buttons = [];
63
- #show_input = true;
68
+ #showInput = true;
64
69
  #disabled = false;
65
70
  #listeners = [];
66
- #on_change = undefined;
67
-
68
- constructor(options = {
69
- id: String(),
70
- name: String(),
71
- title: String(),
72
- label: String(),
73
- value: String(),
74
- presets: undefined,
75
- showInput: Boolean(),
76
- disabled: Boolean(),
77
- changeListener: undefined,
78
- onChange: undefined
79
- }) {
71
+ #onChange = undefined;
72
+
73
+ constructor(
74
+ options = {
75
+ id: String(),
76
+ name: String(),
77
+ title: String(),
78
+ label: String(),
79
+ value: String(),
80
+ presets: undefined,
81
+ showInput: Boolean(),
82
+ disabled: Boolean(),
83
+ changeListener: undefined,
84
+ onChange: undefined,
85
+ }
86
+ ) {
80
87
  setStyles(__dirname + "/styles.css", "chUiJS_ColorPicker");
81
88
  ColorPicker.#counter += 1;
82
89
  this.#id = options.id === undefined ? `chui_color_picker_${ColorPicker.#counter}` : options.id;
83
90
  this.#root.id = this.#id;
84
91
  this.#name = options.name;
85
92
  this.#label = options.label;
86
- this.#show_input = options.showInput !== false;
87
- this.#on_change = options.onChange;
93
+ this.#showInput = options.showInput !== false;
94
+ this.#onChange = options.onChange;
88
95
  if (options.changeListener !== undefined) this.addChangeListener(options.changeListener);
89
96
  // Явно переданный цвет разбирается сразу: молча подменять его дефолтным нельзя,
90
97
  // а пустая заготовка `value: String()` из описания опций означает «цвет не задан»
@@ -102,7 +109,7 @@ class ColorPicker {
102
109
  this.#swatch.addEventListener("input", this.#onSwatchInput);
103
110
  this.#swatch.addEventListener("change", this.#onSwatchChange);
104
111
  this.#row.appendChild(this.#swatch);
105
- if (this.#show_input) {
112
+ if (this.#showInput) {
106
113
  this.#field.className = "color_picker_field";
107
114
  this.#hex.type = "text";
108
115
  this.#hex.className = "color_picker_hex";
@@ -128,8 +135,15 @@ class ColorPicker {
128
135
  else this.#title.hidden = true;
129
136
  this.setLabel(optionOr(options.label, I18n.t("forms.colorPickerLabel")));
130
137
  // Правила валидации: свой формат можно переопределить опцией pattern
131
- const rules = Object.assign({pattern: HEX_PATTERN}, options);
132
- Validate.installField(this, rules, this.#root, undefined, () => this.#validateValue(), this.#show_input ? this.#field : this.#row);
138
+ const rules = Object.assign({ pattern: HEX_PATTERN }, options);
139
+ Validate.installField(
140
+ this,
141
+ rules,
142
+ this.#root,
143
+ undefined,
144
+ () => this.#validateValue(),
145
+ this.#showInput ? this.#field : this.#row
146
+ );
133
147
  this.setPresets(options.presets === undefined ? ColorPicker.PALETTE : options.presets);
134
148
  this.setDisabled(options.disabled === true);
135
149
  this.#render();
@@ -145,7 +159,7 @@ class ColorPicker {
145
159
  }
146
160
 
147
161
  getTitle() {
148
- return this.#title_text;
162
+ return this.#titleText;
149
163
  }
150
164
 
151
165
  /** Доступное имя образца, заданное в `label` */
@@ -196,7 +210,7 @@ class ColorPicker {
196
210
 
197
211
  /** Подпись над контролом; `undefined` её убирает */
198
212
  setTitle(text = undefined) {
199
- this.#title_text = text;
213
+ this.#titleText = text;
200
214
  if (text === undefined || text === "") {
201
215
  this.#title.hidden = true;
202
216
  this.#title.innerText = "";
@@ -212,8 +226,9 @@ class ColorPicker {
212
226
  this.#label = text;
213
227
  if (text === undefined) this.#swatch.removeAttribute("aria-label");
214
228
  else this.#swatch.setAttribute("aria-label", String(text));
215
- const hex_label = text === undefined ? I18n.t("forms.colorPickerHex") : I18n.t("forms.colorPickerHexOf", {label: text});
216
- this.#hex.setAttribute("aria-label", hex_label);
229
+ const hexLabel =
230
+ text === undefined ? I18n.t("forms.colorPickerHex") : I18n.t("forms.colorPickerHexOf", { label: text });
231
+ this.#hex.setAttribute("aria-label", hexLabel);
217
232
  return this;
218
233
  }
219
234
 
@@ -247,10 +262,12 @@ class ColorPicker {
247
262
 
248
263
  /** Готовые цвета: строки `#rrggbb` или `{value, title}`; пустой массив убирает палитру */
249
264
  setPresets(presets = Array()) {
250
- this.#items = (Array.isArray(presets) ? presets : []).map((item) => {
251
- if (typeof item === "string") return {value: ColorPicker.parse(item), title: undefined};
252
- return {value: ColorPicker.parse(item.value), title: item.title};
253
- }).filter((item) => item.value !== undefined);
265
+ this.#items = (Array.isArray(presets) ? presets : [])
266
+ .map((item) => {
267
+ if (typeof item === "string") return { value: ColorPicker.parse(item), title: undefined };
268
+ return { value: ColorPicker.parse(item.value), title: item.title };
269
+ })
270
+ .filter((item) => item.value !== undefined);
254
271
  this.#renderPresets();
255
272
  this.#render();
256
273
  return this;
@@ -275,7 +292,7 @@ class ColorPicker {
275
292
  /** Фокус на поле HEX (или на образец, если поля нет): `Form` зовёт это при ошибке */
276
293
  focus() {
277
294
  if (this.#disabled) return this;
278
- if (this.#show_input) this.#hex.focus();
295
+ if (this.#showInput) this.#hex.focus();
279
296
  else this.#swatch.focus();
280
297
  return this;
281
298
  }
@@ -288,7 +305,7 @@ class ColorPicker {
288
305
  // === ВНУТРЕННЕЕ ===
289
306
  // Что проверяют правила: текст поля (то, что ввёл человек), иначе — само значение
290
307
  #validateValue() {
291
- if (!this.#show_input) return this.#value;
308
+ if (!this.#showInput) return this.#value;
292
309
  return this.#hex.value === undefined ? "" : this.#hex.value;
293
310
  }
294
311
 
@@ -330,7 +347,7 @@ class ColorPicker {
330
347
  this.#render();
331
348
  if (!changed) return;
332
349
  // Фокус остаётся на кнопке палитры: о смене цвета сообщает live-регион
333
- this.#status.innerText = I18n.t("forms.colorPickerApplied", {value: value});
350
+ this.#status.innerText = I18n.t("forms.colorPickerApplied", { value: value });
334
351
  this.#notify();
335
352
  }
336
353
 
@@ -347,7 +364,7 @@ class ColorPicker {
347
364
 
348
365
  #notify() {
349
366
  for (const listener of [...this.#listeners]) listener(this.#value, this);
350
- if (this.#on_change !== undefined) this.#on_change(this.#value, this);
367
+ if (this.#onChange !== undefined) this.#onChange(this.#value, this);
351
368
  }
352
369
 
353
370
  // Системная палитра шлёт input на каждое движение, change — когда цвет выбран
@@ -372,4 +389,4 @@ class ColorPicker {
372
389
  };
373
390
  }
374
391
 
375
- exports.ColorPicker = ColorPicker
392
+ exports.ColorPicker = ColorPicker;
@@ -5,11 +5,11 @@ chui_color_picker {
5
5
  карточку. Токены переопределены у корня поля, поэтому действуют только внутри него
6
6
  (тот же приём у полосы меню-бара). */
7
7
  --control_padding: var(--control_padding_sm);
8
- --main_padding: var(--main_padding_sm);
8
+ --block_padding: var(--block_padding_sm);
9
9
  display: block;
10
10
  width: max-content;
11
11
  max-width: 100%;
12
- margin: var(--margin);
12
+ margin: var(--block_margin);
13
13
  color: var(--text_color);
14
14
  font-size: var(--font_default_size);
15
15
  }
@@ -17,7 +17,7 @@ chui_color_picker {
17
17
  .color_picker_title {
18
18
  display: block;
19
19
  width: max-content;
20
- margin: 0 0 var(--margin);
20
+ margin: 0 0 var(--block_margin);
21
21
  color: var(--text_color);
22
22
  font-size: var(--font_labels_size);
23
23
  font-weight: 500;
@@ -41,7 +41,7 @@ chui_color_picker {
41
41
  height: var(--control_height);
42
42
  padding: 0;
43
43
  border: 1px solid var(--border_color);
44
- border-radius: var(--border_radius);
44
+ border-radius: var(--radius_sm);
45
45
  background: var(--element_background);
46
46
  cursor: pointer;
47
47
  -webkit-appearance: none;
@@ -54,7 +54,7 @@ chui_color_picker {
54
54
 
55
55
  .color_picker_swatch::-webkit-color-swatch {
56
56
  border: none;
57
- border-radius: calc(var(--border_radius) - 1px);
57
+ border-radius: calc(var(--radius_sm) - 1px);
58
58
  }
59
59
 
60
60
  .color_picker_swatch:focus-visible {
@@ -74,9 +74,9 @@ chui_color_picker {
74
74
  box-sizing: border-box;
75
75
  min-width: 104px;
76
76
  height: var(--control_height);
77
- padding: var(--main_padding);
77
+ padding: var(--block_padding);
78
78
  border: 1px solid var(--border_color);
79
- border-radius: var(--border_radius);
79
+ border-radius: var(--radius_sm);
80
80
  background: var(--element_background);
81
81
  }
82
82