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
@@ -1,8 +1,8 @@
1
- const {setStyles} = require('../../../modules/chui_functions');
2
- const {DateInput} = require('../chui_date/date');
3
- const {Icon, Icons} = require('../../chui_icons/icons');
4
- const {Validate} = require('../../../modules/chui_validate/chui_validate');
5
- const {I18n} = require('../../../modules/chui_i18n/chui_i18n');
1
+ const { setStyles } = require("../../../modules/chui_functions");
2
+ const { DateInput } = require("../chui_date/date");
3
+ const { Icon, Icons } = require("../../chui_icons/icons");
4
+ const { Validate } = require("../../../modules/chui_validate/chui_validate");
5
+ const { I18n } = require("../../../modules/chui_i18n/chui_i18n");
6
6
 
7
7
  // Значение пары для правил — «начало..конец»: так его видит `validate()`
8
8
  const RANGE_PATTERN = "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.\\.[0-9]{4}-[0-9]{2}-[0-9]{2}$";
@@ -47,42 +47,49 @@ class DateRangeInput {
47
47
  #end = undefined;
48
48
  #id = undefined;
49
49
  #name = undefined;
50
- #title_text = undefined;
51
- #label_text = undefined;
52
- #ordering_message = undefined;
50
+ #titleText = undefined;
51
+ #labelText = undefined;
52
+ #orderingMessage = undefined;
53
53
  #disabled = false;
54
54
  #listeners = [];
55
- #on_change = undefined;
55
+ #onChange = undefined;
56
56
 
57
- constructor(options = {
58
- id: String(),
59
- name: String(),
60
- title: String(),
61
- label: String(),
62
- startTitle: String(),
63
- endTitle: String(),
64
- separator: undefined,
65
- value: undefined,
66
- disabled: Boolean(),
67
- changeListener: undefined,
68
- onChange: undefined
69
- }) {
57
+ constructor(
58
+ options = {
59
+ id: String(),
60
+ name: String(),
61
+ title: String(),
62
+ label: String(),
63
+ startTitle: String(),
64
+ endTitle: String(),
65
+ separator: undefined,
66
+ value: undefined,
67
+ disabled: Boolean(),
68
+ changeListener: undefined,
69
+ onChange: undefined,
70
+ }
71
+ ) {
70
72
  setStyles(__dirname + "/styles.css", "chUiJS_DateRangeInput");
71
73
  DateRangeInput.#counter += 1;
72
74
  this.#id = options.id === undefined ? `chui_date_range_input_${DateRangeInput.#counter}` : options.id;
73
75
  this.#name = options.name;
74
- this.#label_text = options.label;
75
- this.#on_change = options.onChange;
76
+ this.#labelText = options.label;
77
+ this.#onChange = options.onChange;
76
78
  if (options.changeListener !== undefined) this.addChangeListener(options.changeListener);
77
- if (options.messages !== undefined && options.messages.validate !== undefined) this.#ordering_message = String(options.messages.validate);
79
+ if (options.messages !== undefined && options.messages.validate !== undefined)
80
+ this.#orderingMessage = String(options.messages.validate);
78
81
  // Общий текст берётся из словаря: своё сообщение поля важнее перевода
79
- if (this.#ordering_message === undefined) this.#ordering_message = I18n.t("dateRange.wrongOrder");
82
+ if (this.#orderingMessage === undefined) this.#orderingMessage = I18n.t("dateRange.wrongOrder");
80
83
  this.#root.id = this.#id;
81
84
  this.#label.className = "date_range_label";
82
85
  this.#row.className = "date_range_row";
83
86
  this.#row.setAttribute("role", "group");
84
- this.#start = new DateInput({title: options.startTitle === undefined ? I18n.t("dateRange.start") : options.startTitle});
85
- this.#end = new DateInput({title: options.endTitle === undefined ? I18n.t("dateRange.end") : options.endTitle});
87
+ this.#start = new DateInput({
88
+ title: options.startTitle === undefined ? I18n.t("dateRange.start") : options.startTitle,
89
+ });
90
+ this.#end = new DateInput({
91
+ title: options.endTitle === undefined ? I18n.t("dateRange.end") : options.endTitle,
92
+ });
86
93
  this.#separator.className = "date_range_separator";
87
94
  this.#separator.setAttribute("aria-hidden", "true");
88
95
  const glyph = new Icon(options.separator === undefined ? Icons.NAVIGATION.EAST : options.separator).set();
@@ -102,21 +109,25 @@ class DateRangeInput {
102
109
  this.#root.appendChild(this.#label);
103
110
  this.#root.appendChild(this.#row);
104
111
  this.#root.appendChild(this.#status);
105
- this.setLabel(options.label === undefined
106
- ? (options.title === undefined ? I18n.t("dateRange.label") : options.title)
107
- : options.label);
112
+ this.setLabel(
113
+ options.label === undefined
114
+ ? options.title === undefined
115
+ ? I18n.t("dateRange.label")
116
+ : options.title
117
+ : options.label
118
+ );
108
119
  const rules = Validate.rulesFrom(options);
109
120
  // У поля даты min/max — это не границы Validate, а порядок пары
110
121
  delete rules.min;
111
122
  delete rules.max;
112
123
  if (rules.pattern === undefined) rules.pattern = RANGE_PATTERN;
113
- const own_validate = options.validate;
124
+ const ownValidate = options.validate;
114
125
  rules.validate = (value) => {
115
- const custom = own_validate === undefined ? undefined : own_validate(value);
126
+ const custom = ownValidate === undefined ? undefined : ownValidate(value);
116
127
  if (custom !== undefined && custom !== null && custom !== true) return custom;
117
128
  const [start, end] = String(value).split("..");
118
129
  if (start === undefined || end === undefined || start === "" || end === "") return undefined;
119
- if (end < start) return this.#ordering_message;
130
+ if (end < start) return this.#orderingMessage;
120
131
  return undefined;
121
132
  };
122
133
  Validate.installField(this, rules, this.#root, undefined, () => this.#rawValue(), this.#row);
@@ -134,17 +145,17 @@ class DateRangeInput {
134
145
  }
135
146
 
136
147
  getTitle() {
137
- return this.#title_text;
148
+ return this.#titleText;
138
149
  }
139
150
 
140
151
  /** Доступное имя группы, заданное в `label` */
141
152
  getLabel() {
142
- return this.#label_text;
153
+ return this.#labelText;
143
154
  }
144
155
 
145
156
  /** Период: строки «ГГГГ-ММ-ДД», пустая строка — дата не выбрана */
146
157
  getValue() {
147
- return {start: this.#start.getValue(), end: this.#end.getValue()};
158
+ return { start: this.#start.getValue(), end: this.#end.getValue() };
148
159
  }
149
160
 
150
161
  getStart() {
@@ -161,8 +172,8 @@ class DateRangeInput {
161
172
  const start = DateRangeInput.#display(value.start);
162
173
  const end = DateRangeInput.#display(value.end);
163
174
  if (start === "" && end === "") return I18n.t("dateRange.empty");
164
- if (start === "") return I18n.t("dateRange.to", {end: end});
165
- if (end === "") return I18n.t("dateRange.from", {start: start});
175
+ if (start === "") return I18n.t("dateRange.to", { end: end });
176
+ if (end === "") return I18n.t("dateRange.from", { start: start });
166
177
  return `${start} — ${end}`;
167
178
  }
168
179
 
@@ -184,7 +195,7 @@ class DateRangeInput {
184
195
 
185
196
  /** Подпись над парой полей; `undefined` её убирает */
186
197
  setTitle(text = undefined) {
187
- this.#title_text = text;
198
+ this.#titleText = text;
188
199
  if (text === undefined || text === "") {
189
200
  this.#label.hidden = true;
190
201
  this.#label.innerText = "";
@@ -197,7 +208,7 @@ class DateRangeInput {
197
208
 
198
209
  /** Доступное имя группы; `undefined` убирает его */
199
210
  setLabel(text = undefined) {
200
- this.#label_text = text;
211
+ this.#labelText = text;
201
212
  if (text === undefined) this.#row.removeAttribute("aria-label");
202
213
  else this.#row.setAttribute("aria-label", String(text));
203
214
  return this;
@@ -215,7 +226,7 @@ class DateRangeInput {
215
226
  this.#syncLimits();
216
227
  return this;
217
228
  }
218
- const pair = Array.isArray(value) ? {start: value[0], end: value[1]} : value;
229
+ const pair = Array.isArray(value) ? { start: value[0], end: value[1] } : value;
219
230
  const start = DateRangeInput.#parseDate(pair.start);
220
231
  const end = DateRangeInput.#parseDate(pair.end);
221
232
  if (start === undefined || end === undefined) {
@@ -285,13 +296,13 @@ class DateRangeInput {
285
296
  * так что перевёрнутый период не пройдёт проверку и без нативной границы.
286
297
  */
287
298
  #syncLimits() {
288
- const start_input = this.#start.set().querySelector("input.date_input");
289
- const end_input = this.#end.set().querySelector("input.date_input");
290
- if (start_input === null || end_input === null) return;
291
- start_input.removeAttribute("max");
299
+ const startInput = this.#start.set().querySelector("input.date_input");
300
+ const endInput = this.#end.set().querySelector("input.date_input");
301
+ if (startInput === null || endInput === null) return;
302
+ startInput.removeAttribute("max");
292
303
  const value = this.getValue();
293
- if (value.start === "") end_input.removeAttribute("min");
294
- else end_input.min = value.start;
304
+ if (value.start === "") endInput.removeAttribute("min");
305
+ else endInput.min = value.start;
295
306
  }
296
307
 
297
308
  #changed() {
@@ -299,7 +310,7 @@ class DateRangeInput {
299
310
  this.#status.innerText = this.getValueText();
300
311
  const value = this.getValue();
301
312
  for (const listener of [...this.#listeners]) listener(value, this);
302
- if (this.#on_change !== undefined) this.#on_change(value, this);
313
+ if (this.#onChange !== undefined) this.#onChange(value, this);
303
314
  }
304
315
 
305
316
  static #parseDate(value = undefined) {
@@ -319,4 +330,4 @@ class DateRangeInput {
319
330
  }
320
331
  }
321
332
 
322
- exports.DateRangeInput = DateRangeInput
333
+ exports.DateRangeInput = DateRangeInput;
@@ -5,18 +5,18 @@ chui_date_range_input {
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: flex;
10
10
  flex-direction: column;
11
11
  width: max-content;
12
12
  height: max-content;
13
- margin: var(--margin);
13
+ margin: var(--block_margin);
14
14
  }
15
15
 
16
16
  .date_range_label {
17
17
  display: block;
18
18
  width: max-content;
19
- margin: 0 0 var(--margin);
19
+ margin: 0 0 var(--block_margin);
20
20
  color: var(--text_color);
21
21
  font-size: var(--font_labels_size);
22
22
  font-weight: 500;
@@ -1,8 +1,8 @@
1
- const {setStyles} = require('../../../modules/chui_functions');
2
- const {DateInput} = require('../chui_date/date');
3
- const {TimeInput} = require('../chui_time/time');
4
- const {Validate} = require('../../../modules/chui_validate/chui_validate');
5
- const {I18n} = require('../../../modules/chui_i18n/chui_i18n');
1
+ const { setStyles } = require("../../../modules/chui_functions");
2
+ const { DateInput } = require("../chui_date/date");
3
+ const { TimeInput } = require("../chui_time/time");
4
+ const { Validate } = require("../../../modules/chui_validate/chui_validate");
5
+ const { I18n } = require("../../../modules/chui_i18n/chui_i18n");
6
6
 
7
7
  // Значение поля — «ГГГГ-ММ-ДДTЧЧ:ММ»: тот же вид, что у нативного datetime-local,
8
8
  // и такой же однозначный для сравнений (ширина всех частей постоянная)
@@ -43,44 +43,48 @@ class DateTimeInput {
43
43
  #time = undefined;
44
44
  #id = undefined;
45
45
  #name = undefined;
46
- #title_text = undefined;
47
- #label_text = undefined;
46
+ #titleText = undefined;
47
+ #labelText = undefined;
48
48
  #min = undefined;
49
49
  #max = undefined;
50
50
  #disabled = false;
51
51
  #listeners = [];
52
- #on_change = undefined;
52
+ #onChange = undefined;
53
53
 
54
- constructor(options = {
55
- id: String(),
56
- name: String(),
57
- title: String(),
58
- label: String(),
59
- dateTitle: String(),
60
- timeTitle: String(),
61
- value: undefined,
62
- step: Number(),
63
- min: String(),
64
- max: String(),
65
- disabled: Boolean(),
66
- changeListener: undefined,
67
- onChange: undefined
68
- }) {
54
+ constructor(
55
+ options = {
56
+ id: String(),
57
+ name: String(),
58
+ title: String(),
59
+ label: String(),
60
+ dateTitle: String(),
61
+ timeTitle: String(),
62
+ value: undefined,
63
+ step: Number(),
64
+ min: String(),
65
+ max: String(),
66
+ disabled: Boolean(),
67
+ changeListener: undefined,
68
+ onChange: undefined,
69
+ }
70
+ ) {
69
71
  setStyles(__dirname + "/styles.css", "chUiJS_DateTimeInput");
70
72
  DateTimeInput.#counter += 1;
71
73
  this.#id = options.id === undefined ? `chui_datetime_input_${DateTimeInput.#counter}` : options.id;
72
74
  this.#name = options.name;
73
- this.#label_text = options.label;
75
+ this.#labelText = options.label;
74
76
  this.#min = DateTimeInput.#parseMoment(options.min);
75
77
  this.#max = DateTimeInput.#parseMoment(options.max);
76
- this.#on_change = options.onChange;
78
+ this.#onChange = options.onChange;
77
79
  if (options.changeListener !== undefined) this.addChangeListener(options.changeListener);
78
80
  this.#root.id = this.#id;
79
81
  this.#label.className = "datetime_label";
80
82
  this.#row.className = "datetime_row";
81
83
  // Группа: у пары полей должно быть общее имя, иначе они читаются как два отдельных поля
82
84
  this.#row.setAttribute("role", "group");
83
- this.#date = new DateInput({title: options.dateTitle === undefined ? I18n.t("date.label") : options.dateTitle});
85
+ this.#date = new DateInput({
86
+ title: options.dateTitle === undefined ? I18n.t("date.label") : options.dateTitle,
87
+ });
84
88
  this.#time = new TimeInput({
85
89
  title: options.timeTitle === undefined ? I18n.t("time.label") : options.timeTitle,
86
90
  step: options.step,
@@ -93,21 +97,25 @@ class DateTimeInput {
93
97
  else this.#label.hidden = true;
94
98
  this.#root.appendChild(this.#label);
95
99
  this.#root.appendChild(this.#row);
96
- this.setLabel(options.label === undefined
97
- ? (options.title === undefined ? I18n.t("dateTime.label") : options.title)
98
- : options.label);
100
+ this.setLabel(
101
+ options.label === undefined
102
+ ? options.title === undefined
103
+ ? I18n.t("dateTime.label")
104
+ : options.title
105
+ : options.label
106
+ );
99
107
  // `min`/`max` как числа здесь не работают: у поля времени это окно, а не границы Validate
100
108
  const rules = Validate.rulesFrom(options);
101
109
  delete rules.min;
102
110
  delete rules.max;
103
111
  if (rules.pattern === undefined) rules.pattern = MOMENT_PATTERN;
104
- const own_validate = options.validate;
112
+ const ownValidate = options.validate;
105
113
  rules.validate = (value) => {
106
- const custom = own_validate === undefined ? undefined : own_validate(value);
114
+ const custom = ownValidate === undefined ? undefined : ownValidate(value);
107
115
  if (custom !== undefined && custom !== null && custom !== true) return custom;
108
116
  const moment = String(value);
109
- if (this.#min !== undefined && moment < this.#min) return I18n.t("dateTime.min", {min: this.#min});
110
- if (this.#max !== undefined && moment > this.#max) return I18n.t("dateTime.max", {max: this.#max});
117
+ if (this.#min !== undefined && moment < this.#min) return I18n.t("dateTime.min", { min: this.#min });
118
+ if (this.#max !== undefined && moment > this.#max) return I18n.t("dateTime.max", { max: this.#max });
111
119
  return undefined;
112
120
  };
113
121
  Validate.installField(this, rules, this.#root, undefined, () => this.#rawValue(), this.#row);
@@ -125,12 +133,12 @@ class DateTimeInput {
125
133
  }
126
134
 
127
135
  getTitle() {
128
- return this.#title_text;
136
+ return this.#titleText;
129
137
  }
130
138
 
131
139
  /** Доступное имя группы, заданное в `label` */
132
140
  getLabel() {
133
- return this.#label_text;
141
+ return this.#labelText;
134
142
  }
135
143
 
136
144
  /** Момент «ГГГГ-ММ-ДДTЧЧ:ММ»; пустая строка — заполнена не вся пара */
@@ -180,7 +188,7 @@ class DateTimeInput {
180
188
 
181
189
  /** Подпись над парой полей; `undefined` её убирает */
182
190
  setTitle(text = undefined) {
183
- this.#title_text = text;
191
+ this.#titleText = text;
184
192
  if (text === undefined || text === "") {
185
193
  this.#label.hidden = true;
186
194
  this.#label.innerText = "";
@@ -193,7 +201,7 @@ class DateTimeInput {
193
201
 
194
202
  /** Доступное имя группы; `undefined` убирает его */
195
203
  setLabel(text = undefined) {
196
- this.#label_text = text;
204
+ this.#labelText = text;
197
205
  if (text === undefined) this.#row.removeAttribute("aria-label");
198
206
  else this.#row.setAttribute("aria-label", String(text));
199
207
  return this;
@@ -272,7 +280,7 @@ class DateTimeInput {
272
280
  #changed() {
273
281
  const value = this.getValue();
274
282
  for (const listener of [...this.#listeners]) listener(value, this);
275
- if (this.#on_change !== undefined) this.#on_change(value, this);
283
+ if (this.#onChange !== undefined) this.#onChange(value, this);
276
284
  }
277
285
 
278
286
  static #parseMoment(value = undefined) {
@@ -292,4 +300,4 @@ class DateTimeInput {
292
300
  }
293
301
  }
294
302
 
295
- exports.DateTimeInput = DateTimeInput
303
+ exports.DateTimeInput = DateTimeInput;
@@ -5,18 +5,18 @@ chui_datetime_input {
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: flex;
10
10
  flex-direction: column;
11
11
  width: max-content;
12
12
  height: max-content;
13
- margin: var(--margin);
13
+ margin: var(--block_margin);
14
14
  }
15
15
 
16
16
  .datetime_label {
17
17
  display: block;
18
18
  width: max-content;
19
- margin: 0 0 var(--margin);
19
+ margin: 0 0 var(--block_margin);
20
20
  color: var(--text_color);
21
21
  font-size: var(--font_labels_size);
22
22
  font-weight: 500;
@@ -1,60 +1,72 @@
1
- const {Validate} = require('../../../modules/chui_validate/chui_validate');
1
+ const { Validate } = require("../../../modules/chui_validate/chui_validate");
2
2
 
3
3
  class EmailInput {
4
4
  #id = require("randomstring").generate();
5
- #chui_email_input = document.createElement('chui_email_input');
6
- #chui_email_main = document.createElement('chui_email_main');
7
- #label = document.createElement('label');
8
- #input = document.createElement('input');
5
+ #chuiEmailInput = document.createElement("chui_email_input");
6
+ #chuiEmailMain = document.createElement("chui_email_main");
7
+ #label = document.createElement("label");
8
+ #input = document.createElement("input");
9
9
  #title = undefined;
10
- constructor(options = {
11
- name: String(),
12
- title: String(),
13
- placeholder: String(),
14
- width: String(),
15
- required: Boolean()
16
- }) {
17
- require('../../../modules/chui_functions').setStyles(__dirname + "/styles.css", 'chUiJS_EmailInput');
10
+ constructor(
11
+ options = {
12
+ name: String(),
13
+ title: String(),
14
+ placeholder: String(),
15
+ width: String(),
16
+ required: Boolean(),
17
+ }
18
+ ) {
19
+ require("../../../modules/chui_functions").setStyles(__dirname + "/styles.css", "chUiJS_EmailInput");
18
20
  this.#title = options.title;
19
- this.#input.type = 'email';
20
- this.#input.className = 'email_input'
21
+ this.#input.type = "email";
22
+ this.#input.className = "email_input";
21
23
  this.#input.id = this.#id;
22
24
  if (options.name !== undefined) this.#input.name = options.name;
23
- this.#input.pattern = '^([a-zA-Z0-9_.+-])+@[a-zA-Z0-9-.]+\\.[a-zA-Z0-9-]{2,}$'
25
+ this.#input.pattern = "^([a-zA-Z0-9_.+-])+@[a-zA-Z0-9-.]+\\.[a-zA-Z0-9-]{2,}$";
24
26
  if (options.required !== undefined) this.#input.required = options.required;
25
27
  // Валидация: email-формат проверяется правилом type: 'email'
26
- Validate.installField(this, options, this.#chui_email_main, undefined, () => this.#input.value);
28
+ Validate.installField(this, options, this.#chuiEmailMain, undefined, () => this.#input.value);
27
29
  if (options.title !== undefined) {
28
30
  this.#label.innerText = options.title;
29
- this.#label.classList.add('email_label')
30
- this.#label.setAttribute('for', this.#id);
31
- this.#chui_email_input.appendChild(this.#label);
31
+ this.#label.classList.add("email_label");
32
+ this.#label.setAttribute("for", this.#id);
33
+ this.#chuiEmailInput.appendChild(this.#label);
32
34
  }
33
35
  if (options.placeholder !== undefined) this.#input.placeholder = options.placeholder;
34
- if (options.width !== undefined) this.#chui_email_input.style.width = options.width;
36
+ if (options.width !== undefined) this.#chuiEmailInput.style.width = options.width;
35
37
  // Рамку с кольцом при фокусе рисует общее правило темы (`chui_email_main:hover`,
36
38
  // `:focus-within`), а не компонент: прежде он ставил то же самое инлайном,
37
39
  // а на `blur` снимал весь атрибут `style`
38
- this.#chui_email_main.appendChild(this.#input);
39
- this.#chui_email_input.appendChild(this.#chui_email_main);
40
+ this.#chuiEmailMain.appendChild(this.#input);
41
+ this.#chuiEmailInput.appendChild(this.#chuiEmailMain);
42
+ }
43
+ getName() {
44
+ return this.#input.name;
45
+ }
46
+ getTitle() {
47
+ return this.#title;
48
+ }
49
+ getValue() {
50
+ return this.#input.value;
51
+ }
52
+ setValue(text = String()) {
53
+ this.#input.value = text;
40
54
  }
41
- getName() { return this.#input.name; }
42
- getTitle() { return this.#title; }
43
- getValue() { return this.#input.value; }
44
- setValue(text = String()) { this.#input.value = text; }
45
55
  setDisabled(boolean = Boolean()) {
46
- this.#input.disabled = boolean
56
+ this.#input.disabled = boolean;
47
57
  if (boolean) {
48
- this.#chui_email_main.classList.add("chui_email_main_disabled")
49
- this.#input.className = "email_input_disabled"
50
- this.#label.className = "email_label_disabled"
58
+ this.#chuiEmailMain.classList.add("chui_email_main_disabled");
59
+ this.#input.className = "email_input_disabled";
60
+ this.#label.className = "email_label_disabled";
51
61
  } else {
52
- this.#chui_email_main.classList.remove("chui_email_main_disabled")
53
- this.#input.className = "email_input"
54
- this.#label.className = "email_label"
62
+ this.#chuiEmailMain.classList.remove("chui_email_main_disabled");
63
+ this.#input.className = "email_input";
64
+ this.#label.className = "email_label";
55
65
  }
56
66
  }
57
- set() { return this.#chui_email_input; }
67
+ set() {
68
+ return this.#chuiEmailInput;
69
+ }
58
70
  }
59
71
 
60
- exports.EmailInput = EmailInput
72
+ exports.EmailInput = EmailInput;
@@ -4,12 +4,12 @@ chui_email_input {
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: flex;
9
9
  flex-direction: column;
10
10
  width: var(--control_width);
11
11
  height: max-content;
12
- margin: var(--margin);
12
+ margin: var(--block_margin);
13
13
  }
14
14
 
15
15
  chui_email_main {
@@ -17,11 +17,11 @@ chui_email_main {
17
17
  width: -webkit-fill-available;
18
18
  height: max-content;
19
19
  margin: 0;
20
- border-radius: var(--border_radius);
20
+ border-radius: var(--radius_sm);
21
21
  color: var(--text_color);
22
22
  align-items: center;
23
23
  position: relative;
24
- padding: var(--main_padding);
24
+ padding: var(--block_padding);
25
25
  background: var(--element_background);
26
26
  border: 1px solid var(--border_color);
27
27
  }
@@ -40,10 +40,10 @@ chui_email_main {
40
40
  .email_label {
41
41
  height: max-content;
42
42
  width: max-content;
43
- margin: 0 0 var(--margin);
43
+ margin: 0 0 var(--block_margin);
44
44
  font-size: var(--font_labels_size);
45
- font-weight:500;
46
- color: var(--text_color)
45
+ font-weight: 500;
46
+ color: var(--text_color);
47
47
  }
48
48
 
49
49
  /* DISABLED STYLES */
@@ -63,14 +63,14 @@ chui_email_main {
63
63
  cursor: not-allowed;
64
64
  height: max-content;
65
65
  width: max-content;
66
- margin: 0 0 var(--margin);
66
+ margin: 0 0 var(--block_margin);
67
67
  font-size: var(--font_labels_size);
68
- font-weight:500;
69
- color: var(--text_color_disabled)
68
+ font-weight: 500;
69
+ color: var(--text_color_disabled);
70
70
  }
71
71
 
72
72
  .chui_email_main_disabled {
73
73
  cursor: not-allowed;
74
74
  background: var(--element_background_disabled);
75
75
  border: 1px solid var(--border_color);
76
- }
76
+ }