chuijs 4.0.3 → 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 (258) hide show
  1. package/CHANGELOG.md +536 -0
  2. package/framework/appLayout/default/chui_app_layout.js +361 -303
  3. package/framework/appLayout/default/global_style.css +243 -89
  4. package/framework/appLayout/default/main_theme_style.css +188 -101
  5. package/framework/components/chui_accordion/accordion.js +17 -17
  6. package/framework/components/chui_accordion/styles.css +7 -7
  7. package/framework/components/chui_action_sheet/action_sheet.js +35 -32
  8. package/framework/components/chui_action_sheet/styles.css +10 -4
  9. package/framework/components/chui_actions_bar/actions_bar.js +338 -0
  10. package/framework/components/chui_actions_bar/styles.css +139 -0
  11. package/framework/components/chui_affix/affix.js +4 -4
  12. package/framework/components/chui_affix/styles.css +5 -0
  13. package/framework/components/chui_alert/alert.js +11 -5
  14. package/framework/components/chui_alert/styles.css +7 -0
  15. package/framework/components/chui_avatar/avatar.js +13 -13
  16. package/framework/components/chui_avatar/styles.css +1 -1
  17. package/framework/components/chui_avatar_group/avatar_group.js +4 -4
  18. package/framework/components/chui_avatar_group/styles.css +1 -1
  19. package/framework/components/chui_backtop/backtop.js +25 -2
  20. package/framework/components/chui_backtop/styles.css +21 -0
  21. package/framework/components/chui_badge/badge.js +15 -15
  22. package/framework/components/chui_badge/styles.css +6 -6
  23. package/framework/components/chui_banner/banner.js +222 -0
  24. package/framework/components/chui_banner/styles.css +170 -0
  25. package/framework/components/chui_breadcrumb/styles.css +1 -1
  26. package/framework/components/chui_button/button.js +24 -28
  27. package/framework/components/chui_button/styles.css +5 -5
  28. package/framework/components/chui_calendar/calendar.js +6 -6
  29. package/framework/components/chui_card/card.js +14 -14
  30. package/framework/components/chui_card_scroll/card_scroll.js +169 -0
  31. package/framework/components/chui_card_scroll/styles.css +86 -0
  32. package/framework/components/chui_chat/chat.js +73 -51
  33. package/framework/components/chui_chat/styles.css +18 -7
  34. package/framework/components/chui_clipboard_history/clipboard_history.js +25 -20
  35. package/framework/components/chui_clipboard_history/styles.css +10 -8
  36. package/framework/components/chui_code/code.js +8 -8
  37. package/framework/components/chui_code/styles.css +2 -2
  38. package/framework/components/chui_code_editor/code_editor.js +26 -26
  39. package/framework/components/chui_code_editor/styles.css +3 -3
  40. package/framework/components/chui_command_palette/command_palette.js +29 -29
  41. package/framework/components/chui_command_palette/styles.css +5 -5
  42. package/framework/components/chui_console/console.js +9 -9
  43. package/framework/components/chui_console/styles.css +5 -2
  44. package/framework/components/chui_content_block/content_block.js +2 -2
  45. package/framework/components/chui_context_menu/context_menu.js +162 -54
  46. package/framework/components/chui_context_menu/styles.css +82 -8
  47. package/framework/components/chui_custom_element/custom_element.js +11 -11
  48. package/framework/components/chui_data_grid/data_grid.js +268 -268
  49. package/framework/components/chui_data_grid/styles.css +14 -14
  50. package/framework/components/chui_descriptions/styles.css +1 -1
  51. package/framework/components/chui_details/details.js +12 -12
  52. package/framework/components/chui_details/styles.css +7 -7
  53. package/framework/components/chui_diff_viewer/diff_viewer.js +88 -88
  54. package/framework/components/chui_diff_viewer/styles.css +9 -9
  55. package/framework/components/chui_divider/divider.js +6 -6
  56. package/framework/components/chui_divider/styles.css +2 -2
  57. package/framework/components/chui_drawer/drawer.js +37 -14
  58. package/framework/components/chui_drawer/styles.css +18 -4
  59. package/framework/components/chui_drop_zone/drop_zone.js +6 -6
  60. package/framework/components/chui_drop_zone/styles.css +10 -6
  61. package/framework/components/chui_fieldset/fieldset.js +6 -6
  62. package/framework/components/chui_fieldset/styles.css +5 -5
  63. package/framework/components/chui_file_explorer/file_explorer.js +115 -115
  64. package/framework/components/chui_file_explorer/styles.css +6 -6
  65. package/framework/components/chui_form/form.js +11 -11
  66. package/framework/components/chui_gantt/gantt.js +41 -41
  67. package/framework/components/chui_gantt/styles.css +5 -5
  68. package/framework/components/chui_graphs/graphs.js +82 -46
  69. package/framework/components/chui_graphs/styles.css +26 -5
  70. package/framework/components/chui_hero/hero.js +63 -20
  71. package/framework/components/chui_hero/styles.css +176 -7
  72. package/framework/components/chui_html_block/html_block.js +5 -5
  73. package/framework/components/chui_html_block/styles.css +1 -1
  74. package/framework/components/chui_hx/styles.css +2 -2
  75. package/framework/components/chui_icons/icons.js +7 -7
  76. package/framework/components/chui_icons/styles.css +2 -1
  77. package/framework/components/chui_inputs/chui_check_box/styles.css +12 -3
  78. package/framework/components/chui_inputs/chui_chips/chips.js +92 -31
  79. package/framework/components/chui_inputs/chui_chips/styles.css +28 -5
  80. package/framework/components/chui_inputs/chui_color_picker/color_picker.js +20 -15
  81. package/framework/components/chui_inputs/chui_color_picker/styles.css +7 -7
  82. package/framework/components/chui_inputs/chui_combo_box/combo_box.js +58 -58
  83. package/framework/components/chui_inputs/chui_combo_box/styles.css +9 -9
  84. package/framework/components/chui_inputs/chui_date/date.js +93 -95
  85. package/framework/components/chui_inputs/chui_date/styles.css +8 -8
  86. package/framework/components/chui_inputs/chui_date_range/date_range.js +22 -22
  87. package/framework/components/chui_inputs/chui_date_range/styles.css +3 -3
  88. package/framework/components/chui_inputs/chui_datetime/datetime.js +12 -12
  89. package/framework/components/chui_inputs/chui_datetime/styles.css +3 -3
  90. package/framework/components/chui_inputs/chui_email/email.js +10 -10
  91. package/framework/components/chui_inputs/chui_email/styles.css +6 -6
  92. package/framework/components/chui_inputs/chui_file/file.js +8 -8
  93. package/framework/components/chui_inputs/chui_file/styles.css +12 -9
  94. package/framework/components/chui_inputs/chui_hotkey/hotkey.js +39 -39
  95. package/framework/components/chui_inputs/chui_hotkey/styles.css +6 -6
  96. package/framework/components/chui_inputs/chui_masked/masked.js +44 -44
  97. package/framework/components/chui_inputs/chui_masked/styles.css +5 -5
  98. package/framework/components/chui_inputs/chui_mention/mention.js +13 -13
  99. package/framework/components/chui_inputs/chui_mention/styles.css +14 -8
  100. package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +147 -137
  101. package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +14 -8
  102. package/framework/components/chui_inputs/chui_number/number.js +42 -45
  103. package/framework/components/chui_inputs/chui_number/styles.css +6 -6
  104. package/framework/components/chui_inputs/chui_otp/otp.js +32 -32
  105. package/framework/components/chui_inputs/chui_otp/styles.css +5 -5
  106. package/framework/components/chui_inputs/chui_password/password.js +30 -36
  107. package/framework/components/chui_inputs/chui_password/styles.css +7 -7
  108. package/framework/components/chui_inputs/chui_radio_button/styles.css +2 -2
  109. package/framework/components/chui_inputs/chui_rating/rating.js +28 -28
  110. package/framework/components/chui_inputs/chui_rating/styles.css +3 -3
  111. package/framework/components/chui_inputs/chui_select_box/select_box.js +54 -54
  112. package/framework/components/chui_inputs/chui_select_box/styles.css +10 -10
  113. package/framework/components/chui_inputs/chui_slider/slider.js +14 -14
  114. package/framework/components/chui_inputs/chui_slider/styles.css +5 -4
  115. package/framework/components/chui_inputs/chui_text/styles.css +7 -7
  116. package/framework/components/chui_inputs/chui_text/text.js +13 -17
  117. package/framework/components/chui_inputs/chui_text_area/styles.css +8 -8
  118. package/framework/components/chui_inputs/chui_text_area/text_area.js +23 -23
  119. package/framework/components/chui_inputs/chui_time/styles.css +13 -17
  120. package/framework/components/chui_inputs/chui_time/time.js +35 -24
  121. package/framework/components/chui_inputs/chui_toggle/styles.css +10 -3
  122. package/framework/components/chui_inputs/chui_toggle/toggle.js +16 -16
  123. package/framework/components/chui_json_editor/json_editor.js +87 -87
  124. package/framework/components/chui_json_editor/styles.css +5 -5
  125. package/framework/components/chui_json_viewer/json_viewer.js +80 -80
  126. package/framework/components/chui_json_viewer/styles.css +6 -6
  127. package/framework/components/chui_kanban/kanban.js +27 -27
  128. package/framework/components/chui_kanban/styles.css +8 -4
  129. package/framework/components/chui_kbd/styles.css +1 -1
  130. package/framework/components/chui_label/label.js +17 -17
  131. package/framework/components/chui_label/styles.css +1 -1
  132. package/framework/components/chui_link/link.js +9 -9
  133. package/framework/components/chui_link/styles.css +11 -4
  134. package/framework/components/chui_list/list.js +11 -11
  135. package/framework/components/chui_list/styles.css +2 -2
  136. package/framework/components/chui_markdown_editor/markdown_editor.js +66 -66
  137. package/framework/components/chui_markdown_editor/styles.css +5 -5
  138. package/framework/components/chui_media/audio.js +240 -246
  139. package/framework/components/chui_media/audio_styles.css +41 -23
  140. package/framework/components/chui_media/image.js +49 -46
  141. package/framework/components/chui_media/image_compare.js +35 -35
  142. package/framework/components/chui_media/image_compare_styles.css +5 -5
  143. package/framework/components/chui_media/image_styles.css +1 -1
  144. package/framework/components/chui_media/video.js +148 -148
  145. package/framework/components/chui_media/video_styles.css +27 -11
  146. package/framework/components/chui_menu_bar/menu_bar.js +54 -54
  147. package/framework/components/chui_menu_bar/styles.css +10 -10
  148. package/framework/components/chui_message_bar/message_bar.js +551 -0
  149. package/framework/components/chui_message_bar/styles.css +248 -0
  150. package/framework/components/chui_modal/modal.js +37 -13
  151. package/framework/components/chui_notification/notification.js +76 -54
  152. package/framework/components/chui_notification/notification_download.js +26 -81
  153. package/framework/components/chui_notification/notification_download_card.js +115 -0
  154. package/framework/components/chui_notification/notification_download_progress.css +2 -2
  155. package/framework/components/chui_notification/notification_download_progress.js +70 -108
  156. package/framework/components/chui_notification/notification_update.js +31 -31
  157. package/framework/components/chui_notification/status_plate.css +3 -3
  158. package/framework/components/chui_notification/styles.css +6 -1
  159. package/framework/components/chui_notification/styles_download.css +1 -1
  160. package/framework/components/chui_notification/styles_update.css +2 -2
  161. package/framework/components/chui_org_chart/org_chart.js +29 -29
  162. package/framework/components/chui_org_chart/styles.css +2 -2
  163. package/framework/components/chui_pagination/pagination.js +3 -3
  164. package/framework/components/chui_pagination/styles.css +1 -1
  165. package/framework/components/chui_paragraph/styles.css +2 -2
  166. package/framework/components/chui_popover/popover.js +29 -23
  167. package/framework/components/chui_popover/styles.css +1 -1
  168. package/framework/components/chui_popups/popups.js +124 -124
  169. package/framework/components/chui_popups/styles.css +5 -5
  170. package/framework/components/chui_print_button/print_button.js +15 -10
  171. package/framework/components/chui_progress_bar/progress_bar.js +34 -12
  172. package/framework/components/chui_progress_bar/styles.css +4 -4
  173. package/framework/components/chui_progress_ring/progress_ring.js +15 -15
  174. package/framework/components/chui_progress_ring/styles.css +1 -1
  175. package/framework/components/chui_qrcode/qrcode.js +12 -12
  176. package/framework/components/chui_query_builder/query_builder.js +46 -46
  177. package/framework/components/chui_query_builder/styles.css +4 -4
  178. package/framework/components/chui_radio_group/styles.css +1 -1
  179. package/framework/components/chui_result/result.js +15 -15
  180. package/framework/components/chui_result/styles.css +3 -3
  181. package/framework/components/chui_scheduler/scheduler.js +74 -74
  182. package/framework/components/chui_scheduler/styles.css +5 -5
  183. package/framework/components/chui_screen_spinner/screen_spinner.js +167 -0
  184. package/framework/components/chui_screen_spinner/styles.css +49 -0
  185. package/framework/components/chui_segmented_control/segmented_control.js +63 -6
  186. package/framework/components/chui_segmented_control/styles.css +32 -6
  187. package/framework/components/chui_settings/settings.js +45 -46
  188. package/framework/components/chui_settings/styles.css +4 -4
  189. package/framework/components/chui_shortcut_help/shortcut_help.js +32 -34
  190. package/framework/components/chui_sidebar_nav/sidebar_nav.js +98 -29
  191. package/framework/components/chui_sidebar_nav/styles.css +9 -3
  192. package/framework/components/chui_slideshow/slideshow.js +85 -85
  193. package/framework/components/chui_slideshow/styles.css +6 -6
  194. package/framework/components/chui_spinner/spinner.js +10 -10
  195. package/framework/components/chui_split_button/split_button.js +30 -12
  196. package/framework/components/chui_split_button/styles.css +21 -5
  197. package/framework/components/chui_splitter/splitter.js +11 -11
  198. package/framework/components/chui_splitter/styles.css +2 -2
  199. package/framework/components/chui_statistic/statistic.js +47 -47
  200. package/framework/components/chui_status_bar/styles.css +2 -2
  201. package/framework/components/chui_stepper/stepper.js +202 -31
  202. package/framework/components/chui_stepper/styles.css +79 -14
  203. package/framework/components/chui_sticky_bar/sticky_bar.js +44 -13
  204. package/framework/components/chui_sticky_bar/styles.css +10 -8
  205. package/framework/components/chui_tabs/chui_tabs.js +74 -26
  206. package/framework/components/chui_tabs/styles.css +40 -12
  207. package/framework/components/chui_text_editor/styles.css +7 -7
  208. package/framework/components/chui_text_editor/text_editor.js +56 -56
  209. package/framework/components/chui_text_editor/text_editor_panel.js +173 -174
  210. package/framework/components/chui_theme_toggle/theme_toggle.js +21 -5
  211. package/framework/components/chui_timeline/styles.css +3 -1
  212. package/framework/components/chui_toast_queue/styles.css +11 -11
  213. package/framework/components/chui_toast_queue/toast_queue.js +30 -27
  214. package/framework/components/chui_toolbar/styles.css +2 -2
  215. package/framework/components/chui_tooltip/styles.css +2 -2
  216. package/framework/components/chui_tooltip/tooltip.js +3 -3
  217. package/framework/components/chui_tour/styles.css +8 -8
  218. package/framework/components/chui_tour/tour.js +72 -72
  219. package/framework/components/chui_transfer/styles.css +6 -6
  220. package/framework/components/chui_transfer/transfer.js +93 -106
  221. package/framework/components/chui_tree_table/styles.css +4 -4
  222. package/framework/components/chui_tree_table/tree_table.js +45 -45
  223. package/framework/components/chui_tree_view/styles.css +10 -8
  224. package/framework/components/chui_tree_view/tree_view.js +185 -183
  225. package/framework/components/chui_user_bar/styles.css +145 -0
  226. package/framework/components/chui_user_bar/user_bar.js +402 -0
  227. package/framework/components/chui_user_list_bar/styles.css +173 -0
  228. package/framework/components/chui_user_list_bar/user_list_bar.js +485 -0
  229. package/framework/components/chui_watermark/watermark.js +17 -17
  230. package/framework/components/chui_webview/webview.js +9 -9
  231. package/framework/components/chui_write_bar/styles.css +172 -0
  232. package/framework/components/chui_write_bar/write_bar.js +320 -0
  233. package/framework/main_window.js +1234 -0
  234. package/framework/modules/chui_a11y/chui_a11y.js +78 -79
  235. package/framework/modules/chui_animations/animations.js +77 -15
  236. package/framework/modules/chui_animations/motion.js +120 -0
  237. package/framework/modules/chui_animations/styles.css +36 -3
  238. package/framework/modules/chui_functions.js +31 -27
  239. package/framework/modules/chui_highlight/styles.css +13 -10
  240. package/framework/modules/chui_i18n/chui_i18n.js +3 -3
  241. package/framework/modules/chui_i18n/locales/feedback.js +62 -0
  242. package/framework/modules/chui_i18n/locales/navigation.js +4 -0
  243. package/framework/modules/chui_json/chui_json.js +2 -2
  244. package/framework/modules/chui_logger/chui_logger.js +23 -8
  245. package/framework/modules/chui_page/page.js +10 -10
  246. package/framework/modules/chui_palette/palette.js +61 -0
  247. package/framework/modules/chui_qr/chui_qr.js +23 -23
  248. package/framework/modules/chui_scrollbar/chui_scrollbar.js +45 -45
  249. package/framework/modules/chui_scrollbar/styles.css +3 -3
  250. package/framework/modules/chui_services/chui_services.js +8 -8
  251. package/framework/modules/chui_services/desktop.js +77 -71
  252. package/framework/modules/chui_sortable/chui_sortable.js +17 -17
  253. package/framework/modules/chui_validate/chui_validate.js +3 -3
  254. package/framework/tray_bar/chui_menu_items.js +2 -2
  255. package/index.d.ts +266 -34
  256. package/index.js +20 -1168
  257. package/package.json +6 -4
  258. package/framework/components/telegram_bot/chui_telegram_bot.js +0 -191
@@ -151,16 +151,16 @@ class MaskedInput {
151
151
  #error = document.createElement("chui_error_message");
152
152
  #id = undefined;
153
153
  #name = undefined;
154
- #title_text = undefined;
155
- #label_text = undefined;
154
+ #titleText = undefined;
155
+ #labelText = undefined;
156
156
  #mask = "";
157
157
  #rendered = "";
158
- #placeholder_text = "";
159
- #placeholder_default = false;
158
+ #placeholderText = "";
159
+ #placeholderDefault = false;
160
160
  #disabled = false;
161
- #read_only = false;
161
+ #readOnly = false;
162
162
  #listeners = [];
163
- #on_change = undefined;
163
+ #onChange = undefined;
164
164
 
165
165
  constructor(
166
166
  options = {
@@ -182,8 +182,8 @@ class MaskedInput {
182
182
  MaskedInput.#counter += 1;
183
183
  this.#id = options.id === undefined ? `chui_masked_input_${MaskedInput.#counter}` : options.id;
184
184
  this.#name = options.name;
185
- this.#label_text = options.label;
186
- this.#on_change = options.onChange;
185
+ this.#labelText = options.label;
186
+ this.#onChange = options.onChange;
187
187
  this.#mask = options.mask === undefined ? MaskedInput.MASKS.PHONE : String(options.mask);
188
188
  this.#root.id = this.#id;
189
189
  this.#label.className = "masked_label";
@@ -211,13 +211,13 @@ class MaskedInput {
211
211
  this.#root.appendChild(this.#status);
212
212
  if (options.title !== undefined) this.setTitle(options.title);
213
213
  else this.#label.hidden = true;
214
- this.setLabel(this.#label_text === undefined ? I18n.t("forms.maskedLabel") : this.#label_text);
214
+ this.setLabel(this.#labelText === undefined ? I18n.t("forms.maskedLabel") : this.#labelText);
215
215
  if (options.hint !== undefined) this.setHint(options.hint);
216
216
  this.setPlaceholder(
217
217
  options.placeholder === undefined ? MaskedInput.placeholderText(this.#mask) : options.placeholder
218
218
  );
219
219
  // Флаг ставим после `setPlaceholder`: он же отмечает образец как заданный вручную
220
- this.#placeholder_default = options.placeholder === undefined;
220
+ this.#placeholderDefault = options.placeholder === undefined;
221
221
  // Текст «неверный формат» у маски значит «поле не дозаполнено» — так и говорим
222
222
  const messages = Object.assign({ pattern: I18n.t("forms.maskedIncomplete") }, options.messages);
223
223
  Validate.installField(
@@ -247,12 +247,12 @@ class MaskedInput {
247
247
  }
248
248
 
249
249
  getTitle() {
250
- return this.#title_text;
250
+ return this.#titleText;
251
251
  }
252
252
 
253
253
  /** Доступное имя поля, заданное в `label` */
254
254
  getLabel() {
255
- return this.#label_text;
255
+ return this.#labelText;
256
256
  }
257
257
 
258
258
  getMask() {
@@ -275,7 +275,7 @@ class MaskedInput {
275
275
  }
276
276
 
277
277
  getPlaceholder() {
278
- return this.#placeholder_text;
278
+ return this.#placeholderText;
279
279
  }
280
280
 
281
281
  getDisabled() {
@@ -283,7 +283,7 @@ class MaskedInput {
283
283
  }
284
284
 
285
285
  isReadOnly() {
286
- return this.#read_only;
286
+ return this.#readOnly;
287
287
  }
288
288
 
289
289
  // SET
@@ -302,7 +302,7 @@ class MaskedInput {
302
302
 
303
303
  /** Подпись над полем; `undefined` её убирает (имя тогда даёт `label`) */
304
304
  setTitle(text = undefined) {
305
- this.#title_text = text;
305
+ this.#titleText = text;
306
306
  if (text === undefined || text === "") {
307
307
  this.#label.hidden = true;
308
308
  this.#label.innerText = "";
@@ -319,8 +319,8 @@ class MaskedInput {
319
319
 
320
320
  /** Имя поля, когда подписи в разметке нет */
321
321
  setLabel(text = undefined) {
322
- this.#label_text = text;
323
- if (this.#title_text === undefined || this.#title_text === "") {
322
+ this.#labelText = text;
323
+ if (this.#titleText === undefined || this.#titleText === "") {
324
324
  if (text === undefined) this.#input.removeAttribute("aria-label");
325
325
  else this.#input.setAttribute("aria-label", String(text));
326
326
  }
@@ -342,9 +342,9 @@ class MaskedInput {
342
342
  }
343
343
 
344
344
  setPlaceholder(text = String()) {
345
- this.#placeholder_text = text === undefined ? "" : String(text);
346
- this.#placeholder_default = false;
347
- this.#input.placeholder = this.#placeholder_text;
345
+ this.#placeholderText = text === undefined ? "" : String(text);
346
+ this.#placeholderDefault = false;
347
+ this.#input.placeholder = this.#placeholderText;
348
348
  return this;
349
349
  }
350
350
 
@@ -358,10 +358,10 @@ class MaskedInput {
358
358
  const rules = this.getRules === undefined ? undefined : this.getRules();
359
359
  if (rules !== undefined) rules.pattern = MaskedInput.maskPattern(this.#mask);
360
360
  // Своя подсказка-образец остаётся, а вид маски по умолчанию пересобирается
361
- if (this.#placeholder_default) {
362
- this.#placeholder_text = MaskedInput.placeholderText(this.#mask);
363
- this.#input.placeholder = this.#placeholder_text;
364
- this.#placeholder_default = true;
361
+ if (this.#placeholderDefault) {
362
+ this.#placeholderText = MaskedInput.placeholderText(this.#mask);
363
+ this.#input.placeholder = this.#placeholderText;
364
+ this.#placeholderDefault = true;
365
365
  }
366
366
  return this;
367
367
  }
@@ -391,10 +391,10 @@ class MaskedInput {
391
391
  }
392
392
 
393
393
  /** Режим показа: значение видно, но поле не принимает нажатия */
394
- setReadOnly(read_only = Boolean()) {
395
- this.#read_only = read_only === true;
396
- this.#root.classList.toggle("masked_readonly", this.#read_only);
397
- this.#input.readOnly = this.#read_only;
394
+ setReadOnly(readOnly = Boolean()) {
395
+ this.#readOnly = readOnly === true;
396
+ this.#root.classList.toggle("masked_readonly", this.#readOnly);
397
+ this.#input.readOnly = this.#readOnly;
398
398
  return this;
399
399
  }
400
400
 
@@ -424,8 +424,8 @@ class MaskedInput {
424
424
 
425
425
  // === ВНУТРЕННЕЕ ===
426
426
  #accessibleName() {
427
- if (this.#title_text !== undefined && this.#title_text !== "") return this.#title_text;
428
- if (this.#label_text !== undefined && this.#label_text !== "") return this.#label_text;
427
+ if (this.#titleText !== undefined && this.#titleText !== "") return this.#titleText;
428
+ if (this.#labelText !== undefined && this.#labelText !== "") return this.#labelText;
429
429
  return I18n.t("forms.maskedLabel");
430
430
  }
431
431
 
@@ -476,7 +476,7 @@ class MaskedInput {
476
476
 
477
477
  #notify() {
478
478
  for (const listener of [...this.#listeners]) listener(this.#rendered, this);
479
- if (this.#on_change !== undefined) this.#on_change(this.#rendered, this);
479
+ if (this.#onChange !== undefined) this.#onChange(this.#rendered, this);
480
480
  }
481
481
 
482
482
  #announce(text = String()) {
@@ -489,36 +489,36 @@ class MaskedInput {
489
489
  * и раскладываем по позициям маски заново.
490
490
  */
491
491
  #onInput = () => {
492
- if (this.#disabled || this.#read_only) return;
492
+ if (this.#disabled || this.#readOnly) return;
493
493
  const next = this.#input.value;
494
494
  const previous = this.#rendered;
495
495
  let start = 0;
496
496
  while (start < previous.length && start < next.length && previous[start] === next[start]) start += 1;
497
- let previous_end = previous.length;
498
- let next_end = next.length;
499
- while (previous_end > start && next_end > start && previous[previous_end - 1] === next[next_end - 1]) {
500
- previous_end -= 1;
501
- next_end -= 1;
497
+ let previousEnd = previous.length;
498
+ let nextEnd = next.length;
499
+ while (previousEnd > start && nextEnd > start && previous[previousEnd - 1] === next[nextEnd - 1]) {
500
+ previousEnd -= 1;
501
+ nextEnd -= 1;
502
502
  }
503
- const inserted_text = next.slice(start, next_end);
503
+ const insertedText = next.slice(start, nextEnd);
504
504
  const data = MaskedInput.#collect(this.#mask, previous, 0);
505
505
  const before = MaskedInput.#placeholders(this.#mask, start);
506
- const removed = MaskedInput.#placeholders(this.#mask, previous_end) - before;
507
- const inserted = MaskedInput.#collect(this.#mask, inserted_text, start);
506
+ const removed = MaskedInput.#placeholders(this.#mask, previousEnd) - before;
507
+ const inserted = MaskedInput.#collect(this.#mask, insertedText, start);
508
508
  const list = data.slice(0, before).concat(inserted, data.slice(before + removed));
509
509
  const value = MaskedInput.#format(this.#mask, list);
510
- const complete_before = this.isComplete();
510
+ const completeBefore = this.isComplete();
511
511
  const changed = this.#apply(value);
512
512
  const caret = this.#caretAfter(value, before + inserted.length);
513
513
  this.#input.setSelectionRange(caret, caret);
514
514
  // Отклонённый символ и заполненная маска иначе не заметны: поле просто ничего не делает.
515
515
  // Литералы самой маски («-», «(») за отказ не считаем — их место в шаблоне.
516
- const junk = [...inserted_text].filter(
516
+ const junk = [...insertedText].filter(
517
517
  (symbol) => symbol !== "" && !this.#accepts(symbol) && !this.#mask.includes(symbol)
518
518
  );
519
519
  if (junk.length > 0) {
520
520
  this.#announce(I18n.t("forms.maskedAllowedOnly", { value: this.#allowedText() }));
521
- } else if (!complete_before && this.isComplete()) {
521
+ } else if (!completeBefore && this.isComplete()) {
522
522
  this.#announce(I18n.t("forms.maskedComplete"));
523
523
  } else if (this.#status.innerText !== "") {
524
524
  this.#announce("");
@@ -531,7 +531,7 @@ class MaskedInput {
531
531
  // Backspace снимает ближайший значимый символ слева, Delete — справа (как в тексте).
532
532
  // Иначе каретка сразу за литералом удаляла бы символ справа от себя.
533
533
  #onKeyDown = (event) => {
534
- if (this.#disabled || this.#read_only) return;
534
+ if (this.#disabled || this.#readOnly) return;
535
535
  if (event.key !== "Backspace" && event.key !== "Delete") return;
536
536
  const caret = this.#input.selectionStart;
537
537
  if (caret === null || caret !== this.#input.selectionEnd) return;
@@ -5,18 +5,18 @@ chui_masked_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: var(--control_width);
12
12
  height: max-content;
13
- margin: var(--margin);
13
+ margin: var(--block_margin);
14
14
  }
15
15
 
16
16
  .masked_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;
@@ -33,9 +33,9 @@ chui_masked_input {
33
33
  width: -webkit-fill-available;
34
34
  min-height: var(--control_height);
35
35
  margin: 0;
36
- padding: var(--main_padding);
36
+ padding: var(--block_padding);
37
37
  border: 1px solid var(--border_color);
38
- border-radius: var(--border_radius);
38
+ border-radius: var(--radius_sm);
39
39
  background: var(--element_background);
40
40
  color: var(--text_color);
41
41
  }
@@ -59,10 +59,10 @@ class Mention {
59
59
  #multiline = false;
60
60
  #placeholder = "";
61
61
  #name = undefined;
62
- #label_text = undefined;
63
- #hint_text = undefined;
62
+ #labelText = undefined;
63
+ #hintText = undefined;
64
64
  #disabled = false;
65
- #change_listeners = [];
65
+ #changeListeners = [];
66
66
 
67
67
  constructor(
68
68
  options = {
@@ -85,8 +85,8 @@ class Mention {
85
85
  ) {
86
86
  setStyles(__dirname + "/styles.css", "chUiJS_Mention");
87
87
  this.#name = options.name;
88
- this.#label_text = options.label;
89
- this.#hint_text = options.hint;
88
+ this.#labelText = options.label;
89
+ this.#hintText = options.hint;
90
90
  this.#placeholder = options.placeholder === undefined ? "" : options.placeholder;
91
91
  this.#multiline = options.multiline === true;
92
92
  if (options.trigger !== undefined) this.#trigger = options.trigger;
@@ -114,7 +114,7 @@ class Mention {
114
114
  this.#hint.id = `${this.#id}_hint`;
115
115
  this.#hint.className = "mention_hint";
116
116
  this.#hint.innerText =
117
- this.#hint_text === undefined ? I18n.t("forms.mentionHint", { trigger: this.#trigger }) : this.#hint_text;
117
+ this.#hintText === undefined ? I18n.t("forms.mentionHint", { trigger: this.#trigger }) : this.#hintText;
118
118
  this.#input.setAttribute("aria-describedby", this.#hint.id);
119
119
  this.#status.setAttribute("role", "status");
120
120
  this.#status.setAttribute("aria-live", "polite");
@@ -222,7 +222,7 @@ class Mention {
222
222
  }
223
223
  setTrigger(trigger = String()) {
224
224
  this.#trigger = trigger;
225
- if (this.#hint_text === undefined)
225
+ if (this.#hintText === undefined)
226
226
  this.#hint.innerText = I18n.t("forms.mentionHint", { trigger: this.#trigger });
227
227
  this.#setDropdown(false);
228
228
  return this;
@@ -233,7 +233,7 @@ class Mention {
233
233
  return this;
234
234
  }
235
235
  setHint(text = String()) {
236
- this.#hint_text = text;
236
+ this.#hintText = text;
237
237
  this.#hint.innerText = text;
238
238
  this.#hint.style.display = String(text).trim() === "" ? "none" : "";
239
239
  return this;
@@ -250,7 +250,7 @@ class Mention {
250
250
  return this;
251
251
  }
252
252
  addChangeListener(listener = () => {}) {
253
- this.#change_listeners.push(listener);
253
+ this.#changeListeners.push(listener);
254
254
  return this;
255
255
  }
256
256
  set() {
@@ -279,8 +279,8 @@ class Mention {
279
279
  return { start: index, query: query };
280
280
  }
281
281
  #syncFieldAria() {
282
- const has_title = this.#label !== undefined && this.#label.innerText !== "";
283
- if (has_title) {
282
+ const hasTitle = this.#label !== undefined && this.#label.innerText !== "";
283
+ if (hasTitle) {
284
284
  this.#input.setAttribute("aria-labelledby", this.#label.id);
285
285
  this.#input.removeAttribute("aria-label");
286
286
  return;
@@ -288,7 +288,7 @@ class Mention {
288
288
  this.#input.removeAttribute("aria-labelledby");
289
289
  this.#input.setAttribute(
290
290
  "aria-label",
291
- this.#label_text === undefined ? I18n.t("forms.mentionLabel") : this.#label_text
291
+ this.#labelText === undefined ? I18n.t("forms.mentionLabel") : this.#labelText
292
292
  );
293
293
  }
294
294
  /** Пересобрать подсказки по тексту до каретки и открыть список, если есть совпадения */
@@ -365,7 +365,7 @@ class Mention {
365
365
  }
366
366
  #emit() {
367
367
  const text = this.getValue();
368
- for (const listener of [...this.#change_listeners]) listener(text);
368
+ for (const listener of [...this.#changeListeners]) listener(text);
369
369
  }
370
370
 
371
371
  // === ОБРАБОТЧИКИ ===
@@ -5,11 +5,11 @@ chui_mention {
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
  height: max-content;
12
- margin: var(--margin);
12
+ margin: var(--block_margin);
13
13
  width: var(--control_width);
14
14
  font-size: var(--font_default_size);
15
15
  color: var(--text_color);
@@ -18,7 +18,7 @@ chui_mention {
18
18
  .mention_label {
19
19
  height: max-content;
20
20
  width: max-content;
21
- margin: 0 0 var(--margin);
21
+ margin: 0 0 var(--block_margin);
22
22
  font-size: var(--font_labels_size);
23
23
  font-weight: 500;
24
24
  color: var(--text_color);
@@ -31,7 +31,7 @@ mention_field {
31
31
  flex-direction: column;
32
32
  height: max-content;
33
33
  width: -webkit-fill-available;
34
- border-radius: var(--border_radius);
34
+ border-radius: var(--radius_sm);
35
35
  background: var(--element_background);
36
36
  border: 1px solid var(--border_color);
37
37
  }
@@ -41,10 +41,10 @@ mention_field {
41
41
  box-sizing: border-box;
42
42
  width: 100%;
43
43
  margin: 0;
44
- padding: var(--main_padding);
44
+ padding: var(--block_padding);
45
45
  background: transparent;
46
46
  border: none;
47
- border-radius: var(--border_radius);
47
+ border-radius: var(--radius_sm);
48
48
  color: var(--text_color);
49
49
  font-size: var(--font_default_size);
50
50
  font-family: inherit;
@@ -74,7 +74,7 @@ mention_dropdown {
74
74
  backdrop-filter: var(--global_blur);
75
75
  -webkit-backdrop-filter: var(--global_blur);
76
76
  border: 1px solid var(--border_color);
77
- border-radius: var(--border_radius);
77
+ border-radius: var(--radius_sm);
78
78
  box-shadow: var(--box_shadow_main);
79
79
  /* Прокрутка списка подсказок; `overflow: overlay` удалён в Chromium 122 */
80
80
  overflow: hidden auto;
@@ -87,6 +87,12 @@ mention_dropdown[hidden] {
87
87
  display: none;
88
88
  }
89
89
 
90
+ /* Появление списка подсказок: общий кадр панели, он же проигрывается заново при снятии
91
+ `hidden`. Прежде список появлялся без движения вовсе */
92
+ mention_dropdown {
93
+ animation: chui_panel_in var(--motion_base) var(--motion_spring);
94
+ }
95
+
90
96
  .mention_option {
91
97
  display: flex;
92
98
  flex-direction: row;
@@ -132,7 +138,7 @@ mention_dropdown[hidden] {
132
138
 
133
139
  .mention_hint {
134
140
  display: block;
135
- margin: var(--margin);
141
+ margin: var(--block_margin);
136
142
  color: var(--text_color_disabled);
137
143
  font-size: var(--font_labels_size);
138
144
  }