@steroidsjs/core 3.0.1 → 3.0.3

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 (85) hide show
  1. package/docs-autogen-result.json +97 -10
  2. package/en.json +6 -0
  3. package/hooks/useApplication.d.ts +1 -1
  4. package/package.json +1 -1
  5. package/ui/content/DropDown/DropDown.js +1 -3
  6. package/ui/content/Kanban/Kanban.d.ts +7 -1
  7. package/ui/content/Kanban/Kanban.js +2 -1
  8. package/ui/content/Kanban/hooks/useKanban.d.ts +6 -0
  9. package/ui/content/Kanban/hooks/useKanban.js +2 -1
  10. package/ui/content/Slider/Slider.d.ts +2 -1
  11. package/ui/content/Slider/Slider.js +19 -3
  12. package/ui/form/AutoCompleteField/AutoCompleteField.d.ts +1 -2
  13. package/ui/form/AutoCompleteField/AutoCompleteField.js +24 -11
  14. package/ui/form/Button/Button.d.ts +1 -1
  15. package/ui/form/Button/Button.js +29 -5
  16. package/ui/form/CheckboxField/CheckboxField.d.ts +1 -1
  17. package/ui/form/CheckboxField/CheckboxField.js +13 -4
  18. package/ui/form/CheckboxListField/CheckboxListField.d.ts +2 -1
  19. package/ui/form/CheckboxListField/CheckboxListField.js +13 -4
  20. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +1 -1
  21. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +9 -1
  22. package/ui/form/DateField/DateField.js +3 -1
  23. package/ui/form/DateRangeField/DateRangeField.js +18 -13
  24. package/ui/form/DateTimeField/DateTimeField.d.ts +1 -1
  25. package/ui/form/DateTimeField/DateTimeField.js +19 -1
  26. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +20 -1
  27. package/ui/form/DropDownField/DropDownField.js +34 -2
  28. package/ui/form/EmailField/EmailField.js +53 -3
  29. package/ui/form/Field/Field.js +3 -3
  30. package/ui/form/FieldLayout/FieldLayout.js +12 -12
  31. package/ui/form/FieldList/FieldList.d.ts +1 -1
  32. package/ui/form/FieldList/FieldList.js +7 -6
  33. package/ui/form/FieldSet/FieldSet.js +6 -1
  34. package/ui/form/FileField/FileField.js +13 -3
  35. package/ui/form/Form/Form.d.ts +1 -1
  36. package/ui/form/Form/Form.js +12 -14
  37. package/ui/form/HtmlField/HtmlField.d.ts +20 -1
  38. package/ui/form/HtmlField/HtmlField.js +11 -12
  39. package/ui/form/ImageField/ImageField.js +12 -8
  40. package/ui/form/InputField/InputField.js +24 -3
  41. package/ui/form/MaskField/MaskField.js +1 -13
  42. package/ui/form/NavField/NavField.js +12 -2
  43. package/ui/form/NumberField/NumberField.js +16 -3
  44. package/ui/form/PasswordField/PasswordField.js +15 -2
  45. package/ui/form/RadioField/RadioField.d.ts +1 -1
  46. package/ui/form/RadioField/RadioField.js +15 -4
  47. package/ui/form/RadioListField/RadioListField.d.ts +2 -1
  48. package/ui/form/RadioListField/RadioListField.js +14 -4
  49. package/ui/form/RateField/RateField.js +11 -1
  50. package/ui/form/ReCaptchaField/ReCaptchaField.js +6 -12
  51. package/ui/form/SliderField/SliderField.d.ts +1 -1
  52. package/ui/form/SliderField/SliderField.js +5 -3
  53. package/ui/form/SwitcherField/SwitcherField.d.ts +1 -1
  54. package/ui/form/SwitcherField/SwitcherField.js +14 -4
  55. package/ui/form/TextField/TextField.js +2 -1
  56. package/ui/form/TimeField/TimeField.js +3 -1
  57. package/ui/form/TimeRangeField/TimeRangeField.js +4 -1
  58. package/ui/layout/Notifications/Notifications.d.ts +1 -1
  59. package/ui/layout/Notifications/Notifications.js +7 -3
  60. package/ui/layout/ProgressBar/ProgressBar.d.ts +1 -1
  61. package/ui/layout/ProgressBar/ProgressBar.js +22 -26
  62. package/ui/layout/Sidebar/Sidebar.js +16 -12
  63. package/ui/list/ControlsColumn/ControlsColumn.js +7 -1
  64. package/ui/list/Grid/Grid.d.ts +1 -1
  65. package/ui/list/Grid/Grid.js +33 -8
  66. package/ui/list/LayoutNames/LayoutNames.d.ts +1 -1
  67. package/ui/list/LayoutNames/LayoutNames.js +2 -3
  68. package/ui/list/List/List.js +19 -4
  69. package/ui/list/Pagination/Pagination.d.ts +1 -1
  70. package/ui/list/Pagination/Pagination.js +22 -6
  71. package/ui/list/PaginationSize/PaginationSize.d.ts +1 -1
  72. package/ui/list/PaginationSize/PaginationSize.js +10 -4
  73. package/ui/modal/Modal/Modal.d.ts +2 -2
  74. package/ui/modal/Modal/Modal.js +16 -3
  75. package/ui/modal/ModalPortal/ModalPortal.js +2 -3
  76. package/ui/nav/Breadcrumbs/Breadcrumbs.js +10 -12
  77. package/ui/nav/ButtonGroup/ButtonGroup.js +19 -38
  78. package/ui/nav/Controls/Controls.js +6 -1
  79. package/ui/nav/Nav/Nav.d.ts +9 -1
  80. package/ui/nav/Nav/Nav.js +16 -7
  81. package/ui/nav/Router/Router.d.ts +2 -2
  82. package/ui/nav/Router/Router.js +17 -16
  83. package/ui/nav/Router/helpers.d.ts +1 -1
  84. package/ui/nav/Router/helpers.js +19 -16
  85. package/ui/nav/Tree/Tree.js +10 -12
@@ -2844,7 +2844,7 @@
2844
2844
  "decorators": [],
2845
2845
  "description": "",
2846
2846
  "required": false,
2847
- "type": "IRouterProps",
2847
+ "type": "Omit",
2848
2848
  "example": null
2849
2849
  },
2850
2850
  {
@@ -10364,7 +10364,9 @@
10364
10364
  "tags": {},
10365
10365
  "defaultProps": null,
10366
10366
  "extends": [
10367
- "IModalProps"
10367
+ "IModalProps",
10368
+ "Pick<IKanbanConfig",
10369
+ "'createTaskEditorConfig'>"
10368
10370
  ],
10369
10371
  "properties": [
10370
10372
  {
@@ -10439,6 +10441,14 @@
10439
10441
  "type": "any",
10440
10442
  "example": null
10441
10443
  },
10444
+ {
10445
+ "name": "createTaskEditorConfig",
10446
+ "decorators": [],
10447
+ "description": "Компоненты для подключения wysiwyg редактора",
10448
+ "required": true,
10449
+ "type": "Pick",
10450
+ "example": "CKEditor"
10451
+ },
10442
10452
  {
10443
10453
  "name": "formId",
10444
10454
  "decorators": [],
@@ -10630,7 +10640,7 @@
10630
10640
  "name": "IKanbanProps",
10631
10641
  "moduleName": "ui/content/Kanban/Kanban",
10632
10642
  "title": "Kanban",
10633
- "description": "\nКомпонент `Kanban` позволяет создать доску для управления задачами.\nКоличество столбцов задается с помощью пропа `columns`.\nЗадачи на доске можно создавать, редактировать и перемещать с визуальным отображением.\n\nДля работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`\nи передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`\nкомпоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.\n",
10643
+ "description": "\nКомпонент `Kanban` позволяет создать доску для управления задачами.\nКоличество столбцов задается с помощью пропа `columns`.\nЗадачи на доске можно создавать, редактировать и перемещать с визуальным отображением.\n\nДля работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`\nи передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`\nкомпоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.\n\nДля корректной работы функционала создания задач,\nнеобходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nИмпортированные компоненты нужно передать в проп `createTaskEditorConfig`,\nв поле `htmlComponent` передать `CKEditor`, а в `editorConstructor` передать `ClassicEditor`.\n",
10634
10644
  "tags": {},
10635
10645
  "defaultProps": null,
10636
10646
  "extends": [
@@ -10665,6 +10675,15 @@
10665
10675
  "example": "[\n {\n id: 1,\n title: 'column 1',\n tasks: [\n {\n content: 'item 1',\n id: 1\n }\n ],\n },\n {\n id: 2,\n title: 'column 2',\n tasks: [],\n }\n]",
10666
10676
  "defaultValue": null
10667
10677
  },
10678
+ {
10679
+ "name": "createTaskEditorConfig",
10680
+ "decorators": [],
10681
+ "description": "Компоненты для подключения wysiwyg редактора",
10682
+ "required": true,
10683
+ "type": "Pick",
10684
+ "example": "CKEditor",
10685
+ "defaultValue": null
10686
+ },
10668
10687
  {
10669
10688
  "name": "dndContext",
10670
10689
  "decorators": [],
@@ -11278,6 +11297,14 @@
11278
11297
  "type": "IKanbanColumn[]",
11279
11298
  "example": "[\n {\n id: 1,\n title: 'column 1',\n tasks: [\n {\n content: 'item 1',\n id: 1\n }\n ],\n },\n {\n id: 2,\n title: 'column 2',\n tasks: [],\n }\n]"
11280
11299
  },
11300
+ {
11301
+ "name": "createTaskEditorConfig",
11302
+ "decorators": [],
11303
+ "description": "Компоненты для подключения wysiwyg редактора",
11304
+ "required": true,
11305
+ "type": "Pick",
11306
+ "example": "CKEditor"
11307
+ },
11281
11308
  {
11282
11309
  "name": "kanbanId",
11283
11310
  "decorators": [],
@@ -13428,7 +13455,7 @@
13428
13455
  "decorators": [],
13429
13456
  "description": "",
13430
13457
  "required": true,
13431
- "type": "{className: string, disabled: boolean, name: string, placeholder: string, type: string, value: string | number, onBlur: null, onChange: null, onFocus: null}",
13458
+ "type": "{className: string, disabled: boolean, name: string, placeholder: string, type: string, value: string | number, onBlur: null, onChange: null}",
13432
13459
  "example": null
13433
13460
  },
13434
13461
  {
@@ -15203,7 +15230,7 @@
15203
15230
  "decorators": [],
15204
15231
  "description": "",
15205
15232
  "required": true,
15206
- "type": "{color: string, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string}[]",
15233
+ "type": "{color: string, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string, required: boolean}[]",
15207
15234
  "example": null
15208
15235
  },
15209
15236
  {
@@ -15285,7 +15312,7 @@
15285
15312
  "'items'>",
15286
15313
  "IUiComponent",
15287
15314
  "Pick<ITreeProps",
15288
- "'levelPadding' | 'alwaysOpened' | 'showIcon' | 'customIcon'>"
15315
+ "'levelPadding' | 'alwaysOpened' | 'customIcon'>"
15289
15316
  ],
15290
15317
  "properties": [
15291
15318
  {
@@ -22065,7 +22092,7 @@
22065
22092
  "name": "IHtmlFieldProps",
22066
22093
  "moduleName": "ui/form/HtmlField/HtmlField",
22067
22094
  "title": "HtmlField",
22068
- "description": "Компонент для создания HTML-разметки, использующий WYSIWYG редактор",
22095
+ "description": "Компонент для создания HTML-разметки, использующий WYSIWYG редактор.\n\nДля использования WYSIWYG редактора, необходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nКомпонент `CKEditor` нужно передать в проп `htmlComponent`, а конструктор `ClassicEditor` в проп `editorConstructor`.\n\nПри передаче `HtmlField` с бэкенда, необходимо переопределить `view` компонента, указав локальный.\nВ локальном компоненте добавить вместо пропсов `htmlComponent` и `editorConstructor` импорты `CKEditor` и `ClassicEditor` соотвественно.\n",
22069
22096
  "tags": {},
22070
22097
  "defaultProps": null,
22071
22098
  "extends": [
@@ -22119,6 +22146,15 @@
22119
22146
  "example": "true",
22120
22147
  "defaultValue": null
22121
22148
  },
22149
+ {
22150
+ "name": "editorConstructor",
22151
+ "decorators": [],
22152
+ "description": "Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан",
22153
+ "required": false,
22154
+ "type": "any",
22155
+ "example": "ClassicEditor",
22156
+ "defaultValue": null
22157
+ },
22122
22158
  {
22123
22159
  "name": "editorProps",
22124
22160
  "decorators": [],
@@ -22164,6 +22200,15 @@
22164
22200
  "example": "'Only english letters'",
22165
22201
  "defaultValue": null
22166
22202
  },
22203
+ {
22204
+ "name": "htmlComponent",
22205
+ "decorators": [],
22206
+ "description": "Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан",
22207
+ "required": false,
22208
+ "type": "any",
22209
+ "example": "CKEditor",
22210
+ "defaultValue": null
22211
+ },
22167
22212
  {
22168
22213
  "name": "id",
22169
22214
  "decorators": [],
@@ -22399,6 +22444,14 @@
22399
22444
  "type": "boolean",
22400
22445
  "example": "true"
22401
22446
  },
22447
+ {
22448
+ "name": "editorConstructor",
22449
+ "decorators": [],
22450
+ "description": "Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан",
22451
+ "required": false,
22452
+ "type": "any",
22453
+ "example": "ClassicEditor"
22454
+ },
22402
22455
  {
22403
22456
  "name": "editorProps",
22404
22457
  "decorators": [],
@@ -22439,6 +22492,14 @@
22439
22492
  "type": "string",
22440
22493
  "example": "'Only english letters'"
22441
22494
  },
22495
+ {
22496
+ "name": "htmlComponent",
22497
+ "decorators": [],
22498
+ "description": "Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан",
22499
+ "required": false,
22500
+ "type": "any",
22501
+ "example": "CKEditor"
22502
+ },
22442
22503
  {
22443
22504
  "name": "id",
22444
22505
  "decorators": [],
@@ -26522,7 +26583,7 @@
26522
26583
  "decorators": [],
26523
26584
  "description": "",
26524
26585
  "required": true,
26525
- "type": "{disabled: boolean, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string}[]",
26586
+ "type": "{disabled: boolean, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string, required: boolean}[]",
26526
26587
  "example": null
26527
26588
  },
26528
26589
  {
@@ -38159,6 +38220,15 @@
38159
38220
  "example": null,
38160
38221
  "defaultValue": null
38161
38222
  },
38223
+ {
38224
+ "name": "disabled",
38225
+ "decorators": [],
38226
+ "description": "Переводит кнопку в состояние \"не активна\"",
38227
+ "required": false,
38228
+ "type": "boolean",
38229
+ "example": "true",
38230
+ "defaultValue": null
38231
+ },
38162
38232
  {
38163
38233
  "name": "items",
38164
38234
  "decorators": [],
@@ -38177,6 +38247,15 @@
38177
38247
  "example": "'link'",
38178
38248
  "defaultValue": "'button'"
38179
38249
  },
38250
+ {
38251
+ "name": "navClassName",
38252
+ "decorators": [],
38253
+ "description": "CSS-класс для элемента навигации.",
38254
+ "required": false,
38255
+ "type": "string",
38256
+ "example": null,
38257
+ "defaultValue": null
38258
+ },
38180
38259
  {
38181
38260
  "name": "size",
38182
38261
  "decorators": [],
@@ -38244,6 +38323,14 @@
38244
38323
  "type": "string",
38245
38324
  "example": null
38246
38325
  },
38326
+ {
38327
+ "name": "disabled",
38328
+ "decorators": [],
38329
+ "description": "Переводит кнопку в состояние \"не активна\"",
38330
+ "required": false,
38331
+ "type": "boolean",
38332
+ "example": "true"
38333
+ },
38247
38334
  {
38248
38335
  "name": "items",
38249
38336
  "decorators": [],
@@ -38263,7 +38350,7 @@
38263
38350
  {
38264
38351
  "name": "navClassName",
38265
38352
  "decorators": [],
38266
- "description": "",
38353
+ "description": "CSS-класс для элемента навигации.",
38267
38354
  "required": false,
38268
38355
  "type": "string",
38269
38356
  "example": null
@@ -38560,7 +38647,7 @@
38560
38647
  "decorators": [],
38561
38648
  "description": "Дерево роутов",
38562
38649
  "required": true,
38563
- "type": "IRouteItem[] | {}",
38650
+ "type": "IRouteItem | IRouteItem[] | {}",
38564
38651
  "example": "{id: 'root', path: '/', component: IndexPage, items: [...]}",
38565
38652
  "defaultValue": null
38566
38653
  },
package/en.json CHANGED
@@ -955,16 +955,21 @@
955
955
  "Будет ли отображён item?": "",
956
956
  "Устанавливать ли фокус и показывать панель времени сразу после рендера страницы": "",
957
957
  "Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку": "",
958
+ "\nКомпонент `Kanban` позволяет создать доску для управления задачами.\nКоличество столбцов задается с помощью пропа `columns`.\nЗадачи на доске можно создавать, редактировать и перемещать с визуальным отображением.\n\nДля работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`\nи передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`\nкомпоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.\n\nДля корректной работы функционала создания задач,\nнеобходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nИмпортированные компоненты нужно передать в проп `createTaskEditorConfig`,\nв поле `htmlComponent` передать `CKEditor`, а в `editorConstructor` передать `ClassicEditor`.\n": "",
959
+ "Компонент для создания HTML-разметки, использующий WYSIWYG редактор.\n\nДля использования WYSIWYG редактора, необходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nКомпонент `CKEditor` нужно передать в проп `htmlComponent`, а конструктор `ClassicEditor` в проп `editorConstructor`.\n\nПри передаче `HtmlField` с бэкенда, необходимо переопределить `view` компонента, указав локальный.\nВ локальном компоненте добавить вместо пропсов `htmlComponent` и `editorConstructor` импорты `CKEditor` и `ClassicEditor` соотвественно.\n": "",
958
960
  "\nКомпонент для создания пошаговой формы. Предоставляет управление и синхронизацию состояния формы,\nа также список шагов формы для удобной навигации.\nПоля для шагов можно передавать как в виде компонентов, так и в виде объекта с названием поля.\nПозволяет выполнять отправку данных формы на сервер с возможностью валидации и перехода к неверно заполненным полям.\n\n": "",
959
961
  "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.": "",
960
962
  "Дополнительные свойства, которые передаются во view компонента": "",
961
963
  "Пропсы для инпута загрузки файлов": "",
962
964
  "Переопределение view React компонента для кастомизации отображения элемента инпута": "",
963
965
  "Кастомный placeholder для инпута": "",
966
+ "Компоненты для подключения wysiwyg редактора": "",
964
967
  "Если true, то location.pathname будет совпадать с теми путями, которые содержат слеш в конце.\nНапример, если указать путь '/catalog/', тогда совпадение будет с '/catalog/' и '/catalog/chapter', но не '/catalog'.": "",
965
968
  "Кастомная иконка, заменяющая иконку раскрытия по умолчанию": "",
966
969
  "Опции маски для полей": "",
967
970
  "Дополнительные кнопки": "",
971
+ "Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
972
+ "Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
968
973
  "Свойства для Form": "",
969
974
  "Свойства для кнопки продолжить/отправить": "",
970
975
  "Свойства для кнопки возврата": "",
@@ -972,6 +977,7 @@
972
977
  "Ориентация списка шагов формы": "",
973
978
  "Коллекция полей и аттрибутов для каждого шага формы. Можно передавать как компонент, так и объект с полями.\nГлавное, чтобы внутри шага использовался один из способов.": "",
974
979
  "Свойства для Steps": "",
980
+ "CSS-класс для элемента навигации.": "",
975
981
  "Флаг, который позволяет использовать вложенные роуты c указанием вложенного пути": "",
976
982
  "Скрыть иконку c лева от элемента": ""
977
983
  }
@@ -46,7 +46,7 @@ export interface IApplicationHookConfig {
46
46
  layoutProps?: Record<string, unknown>;
47
47
  screen?: Omit<IScreenProviderProps, 'children'>;
48
48
  theme?: Omit<IThemeProviderProps, 'children'>;
49
- routerProps?: IRouterProps;
49
+ routerProps?: Omit<IRouterProps, 'routes'>;
50
50
  /**
51
51
  * These fetch configurations will be used to preload and store for no matter what route matched in case of SSR
52
52
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -102,9 +102,7 @@ function DropDown(props) {
102
102
  childrenElement
103
103
  ? React.cloneElement(childrenElement, resultProps)
104
104
  : (React.createElement("span", null, props.children)),
105
- isComponentExist && (
106
- // TODO Change Portal to global
107
- React.createElement(TooltipPortalInner_1["default"], null,
105
+ isComponentExist && (React.createElement(TooltipPortalInner_1["default"], null,
108
106
  React.createElement(DropDownView, __assign({}, viewProps))))));
109
107
  }
110
108
  DropDown.defaultProps = {
@@ -50,7 +50,7 @@ export interface IKanbanColumn {
50
50
  title: string;
51
51
  tasks: IKanbanTask[];
52
52
  }
53
- export interface IKanbanModalViewProps extends IModalProps {
53
+ export interface IKanbanModalViewProps extends IModalProps, Pick<IKanbanConfig, 'createTaskEditorConfig'> {
54
54
  modalType: KanbanModalTypeEnum;
55
55
  formId: string;
56
56
  columns: IKanbanColumn[];
@@ -79,6 +79,12 @@ export interface IKanbanTaskDetailsModalViewProps extends IModalProps {
79
79
  * Для работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`
80
80
  * и передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`
81
81
  * компоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.
82
+ *
83
+ * Для корректной работы функционала создания задач,
84
+ * необходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,
85
+ * затем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.
86
+ * Импортированные компоненты нужно передать в проп `createTaskEditorConfig`,
87
+ * в поле `htmlComponent` передать `CKEditor`, а в `editorConstructor` передать `ClassicEditor`.
82
88
  */
83
89
  export interface IKanbanProps extends IKanbanConfig, IUiComponent {
84
90
  /**
@@ -35,7 +35,8 @@ function Kanban(props) {
35
35
  assigners: props.assigners,
36
36
  tags: props.tags,
37
37
  lastTaskId: props.lastTaskId,
38
- onDragEnd: props.onDragEnd
38
+ onDragEnd: props.onDragEnd,
39
+ createTaskEditorConfig: props.createTaskEditorConfig
39
40
  }), columns = _a.columns, onDragEnd = _a.onDragEnd, onOpenTaskDetailsModal = _a.onOpenTaskDetailsModal, onOpenCreateTaskModal = _a.onOpenCreateTaskModal;
40
41
  // Task
41
42
  var Task = components.ui.getView('content.KanbanTaskView');
@@ -1,3 +1,4 @@
1
+ import { IHtmlFieldProps } from '@steroidsjs/core/ui/form/HtmlField/HtmlField';
1
2
  import { IDragEndResult, IKanbanColumn, IKanbanTask, ITaskAssigner, ITaskTag } from '../Kanban';
2
3
  export interface IKanbanConfig {
3
4
  /**
@@ -35,6 +36,11 @@ export interface IKanbanConfig {
35
36
  * Массив исполнителей, которых можно назначить для выполнения задачи
36
37
  */
37
38
  assigners?: ITaskAssigner[];
39
+ /**
40
+ * Компоненты для подключения wysiwyg редактора
41
+ * @example CKEditor
42
+ */
43
+ createTaskEditorConfig: Pick<IHtmlFieldProps, 'htmlComponent' | 'editorConstructor'>;
38
44
  /**
39
45
  * Обработчик события окончания перетаскивания карточки или колонки
40
46
  * В result передается объект с информацией о событии
@@ -105,10 +105,11 @@ function useKanban(config) {
105
105
  // common modal
106
106
  var KanbanModalView = components.ui.getView('content.KanbanModalView');
107
107
  var createOrEditTaskCommonModalProps = react_1["default"].useMemo(function () { return ({
108
+ createTaskEditorConfig: config.createTaskEditorConfig,
108
109
  columns: kanban === null || kanban === void 0 ? void 0 : kanban.columns,
109
110
  assigners: normalizeAssignersForDropDownItems(config.assigners || []),
110
111
  tags: tags
111
- }); }, [config.assigners, kanban === null || kanban === void 0 ? void 0 : kanban.columns, tags]);
112
+ }); }, [config.createTaskEditorConfig, config.assigners, kanban === null || kanban === void 0 ? void 0 : kanban.columns, tags]);
112
113
  // create task modal
113
114
  var onOpenCreateTaskModal = react_1["default"].useCallback(function (columnId) {
114
115
  if (columnId) {
@@ -25,4 +25,5 @@ export interface ISliderProps extends IUiComponent, Omit<SplideProps, 'items'> {
25
25
  [key: string]: any;
26
26
  }
27
27
  export type ISliderViewProps = ISliderProps;
28
- export default function Slider(props: ISliderProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
28
+ declare const _default: React.ForwardRefExoticComponent<Omit<ISliderProps, "ref"> & React.RefAttributes<unknown>>;
29
+ export default _default;
@@ -1,8 +1,24 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
2
16
  exports.__esModule = true;
17
+ /* eslint-disable import/no-extraneous-dependencies */
18
+ var react_1 = __importDefault(require("react"));
3
19
  var hooks_1 = require("../../../hooks");
4
- function Slider(props) {
20
+ function Slider(props, ref) {
5
21
  var components = (0, hooks_1.useComponents)();
6
- return components.ui.renderView(props.view || 'content.SliderView', props);
22
+ return components.ui.renderView(props.view || 'content.SliderView', __assign(__assign({}, props), { ref: ref }));
7
23
  }
8
- exports["default"] = Slider;
24
+ exports["default"] = react_1["default"].forwardRef(Slider);
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IDataProviderConfig } from '../../../hooks/useDataProvider';
3
3
  import { IDataSelectConfig } from '../../../hooks/useDataSelect';
4
4
  import { IBaseFieldProps } from '../InputField/InputField';
@@ -46,7 +46,6 @@ export interface IAutoCompleteFieldViewProps extends Omit<IAutoCompleteFieldProp
46
46
  value: string | number;
47
47
  disabled: boolean;
48
48
  onChange: (value: string) => void;
49
- onFocus: (e: Event | React.FocusEvent) => void;
50
49
  onBlur: (e: Event | React.FocusEvent) => void;
51
50
  className?: CssClassName;
52
51
  };
@@ -72,16 +72,6 @@ function AutoCompleteField(props) {
72
72
  setQuery(value);
73
73
  props.input.onChange.call(null, value);
74
74
  }, [props.input.onChange]);
75
- // TODO
76
- var onFocus = function (e) {
77
- props.onOpen();
78
- if (props.searchOnFocus) {
79
- props.onSearch(props.input.value);
80
- }
81
- if (props.inputProps && props.inputProps.onFocus) {
82
- props.inputProps.onFocus(e);
83
- }
84
- };
85
75
  var onBlur = (0, react_1.useCallback)(function (e) {
86
76
  setTimeout(function () {
87
77
  if (props.isOpened) {
@@ -100,7 +90,30 @@ function AutoCompleteField(props) {
100
90
  (0, react_1.useEffect)(function () {
101
91
  props.input.onChange.call(null, selectedIds[0] || null);
102
92
  }, [props.input.onChange, selectedIds]);
103
- return components.ui.renderView(props.view || 'form.AutoCompleteFieldView', __assign(__assign({}, props), { inputProps: inputProps, items: items, isLoading: isLoading, hoveredId: hoveredId, selectedIds: selectedIds, onOpen: onOpen, isOpened: isOpened, onClose: onClose, forwardedRef: forwardedRef, onItemHover: onItemHover, onItemSelect: onItemSelect, categories: getCategories(props.items) }));
93
+ var viewProps = (0, react_1.useMemo)(function () { return ({
94
+ inputProps: inputProps,
95
+ items: items,
96
+ isLoading: isLoading,
97
+ hoveredId: hoveredId,
98
+ selectedIds: selectedIds,
99
+ onOpen: onOpen,
100
+ isOpened: isOpened,
101
+ onClose: onClose,
102
+ forwardedRef: forwardedRef,
103
+ onItemHover: onItemHover,
104
+ onItemSelect: onItemSelect,
105
+ primaryKey: props.primaryKey,
106
+ size: props.size,
107
+ placeholder: props.placeholder,
108
+ disabled: props.disabled,
109
+ required: props.required,
110
+ categories: getCategories(props.items),
111
+ className: props.className,
112
+ style: props.style
113
+ }); }, [inputProps, items, isLoading, hoveredId, selectedIds, onOpen, isOpened, onClose,
114
+ onItemHover, onItemSelect, props.primaryKey, props.size, props.placeholder, props.disabled,
115
+ props.required, props.items, props.className, props.style]);
116
+ return components.ui.renderView(props.view || 'form.AutoCompleteFieldView', viewProps);
104
117
  }
105
118
  AutoCompleteField.defaultProps = {
106
119
  primaryKey: 'label',
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  export interface IButtonBadge {
3
3
  /**
4
4
  * Включить/выключить badge
@@ -34,9 +34,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
34
34
  return result;
35
35
  };
36
36
  exports.__esModule = true;
37
- var React = __importStar(require("react"));
37
+ var react_1 = __importStar(require("react"));
38
38
  var react_redux_1 = require("react-redux");
39
- var react_1 = require("react");
40
39
  var router_1 = require("../../../actions/router");
41
40
  var router_2 = require("../../../reducers/router");
42
41
  var hooks_1 = require("../../../hooks");
@@ -56,7 +55,7 @@ function Button(props) {
56
55
  isLoading: false,
57
56
  isFailed: false
58
57
  }), _b = _a[0], isLoading = _b.isLoading, isFailed = _b.isFailed, setStateFlags = _a[1];
59
- React.useEffect(function () {
58
+ react_1["default"].useEffect(function () {
60
59
  setStateFlags({
61
60
  isLoading: props.isLoading,
62
61
  isFailed: props.isFailed
@@ -126,8 +125,33 @@ function Button(props) {
126
125
  }
127
126
  }
128
127
  }, [dispatch, props, tag]);
129
- var button = components.ui.renderView(props.view || 'form.ButtonView', __assign(__assign({}, props), { badge: badge, isFailed: isFailed, isLoading: isLoading, disabled: disabled, submitting: submitting, tag: tag, formId: (context === null || context === void 0 ? void 0 : context.formId) || null, url: url || (tag === 'a' ? '#' : null), onClick: !disabled ? onClick : undefined, children: props.label || props.children }));
130
- return button;
128
+ var viewProps = (0, react_1.useMemo)(function () { return ({
129
+ badge: badge,
130
+ isFailed: isFailed,
131
+ isLoading: isLoading,
132
+ disabled: disabled,
133
+ submitting: submitting,
134
+ tag: tag,
135
+ label: props.label,
136
+ hint: props.hint,
137
+ icon: props.icon,
138
+ link: props.link,
139
+ outline: props.outline,
140
+ color: props.color,
141
+ block: props.block,
142
+ target: props.target,
143
+ type: props.type,
144
+ size: props.size,
145
+ formId: (context === null || context === void 0 ? void 0 : context.formId) || null,
146
+ url: url || (tag === 'a' ? '#' : null),
147
+ onClick: !disabled ? onClick : undefined,
148
+ children: props.label || props.children,
149
+ className: props.className,
150
+ style: props.style
151
+ }); }, [badge, context === null || context === void 0 ? void 0 : context.formId, disabled, isFailed, isLoading, onClick, props.block,
152
+ props.children, props.className, props.color, props.hint, props.icon, props.label,
153
+ props.link, props.outline, props.size, props.style, props.target, props.type, submitting, tag, url]);
154
+ return components.ui.renderView(props.view || 'form.ButtonView', viewProps);
131
155
  }
132
156
  Button.defaultProps = {
133
157
  type: 'button',
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
3
3
  /**
4
4
  * CheckboxField
@@ -37,14 +37,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  exports.__esModule = true;
40
- var React = __importStar(require("react"));
41
- var react_1 = require("react");
40
+ var react_1 = __importStar(require("react"));
42
41
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
43
42
  var hooks_1 = require("../../../hooks");
44
43
  function CheckboxField(props) {
45
44
  var _a, _b;
46
45
  var components = (0, hooks_1.useComponents)();
47
- var onChangeHandler = React.useCallback(function () {
46
+ var onChangeHandler = react_1["default"].useCallback(function () {
48
47
  var _a;
49
48
  props.input.onChange(!((_a = props.input) === null || _a === void 0 ? void 0 : _a.value));
50
49
  if (props.onChange) {
@@ -55,7 +54,17 @@ function CheckboxField(props) {
55
54
  var _a, _b;
56
55
  return (__assign({ name: (_a = props.input) === null || _a === void 0 ? void 0 : _a.name, type: 'checkbox', checked: !!((_b = props.input) === null || _b === void 0 ? void 0 : _b.value), onChange: onChangeHandler, disabled: props.disabled, required: props.required }, props.inputProps));
57
56
  }, [onChangeHandler, props.disabled, (_a = props.input) === null || _a === void 0 ? void 0 : _a.name, (_b = props.input) === null || _b === void 0 ? void 0 : _b.value, props.inputProps, props.required]);
58
- return components.ui.renderView(props.view || 'form.CheckboxFieldView', __assign(__assign({}, props), { inputProps: inputProps }));
57
+ var viewProps = (0, react_1.useMemo)(function () { return ({
58
+ inputProps: inputProps,
59
+ color: props.color,
60
+ size: props.size,
61
+ errors: props.errors,
62
+ className: props.className,
63
+ style: props.style,
64
+ id: props.id,
65
+ label: props.label
66
+ }); }, [inputProps, props.className, props.color, props.errors, props.id, props.label, props.size, props.style]);
67
+ return components.ui.renderView(props.view || 'form.CheckboxFieldView', viewProps);
59
68
  }
60
69
  CheckboxField.defaultProps = {
61
70
  disabled: false,
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import Enum from '../../../base/Enum';
3
3
  import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../../../ui/form/Field/fieldWrapper';
4
4
  import { IDataProviderConfig } from '../../../hooks/useDataProvider';
@@ -63,6 +63,7 @@ export interface ICheckboxListFieldViewProps extends IFieldWrapperOutputProps {
63
63
  isSelected: boolean;
64
64
  isHovered: boolean;
65
65
  color?: string;
66
+ required?: boolean;
66
67
  }[];
67
68
  selectedIds: (PrimaryKey | any)[];
68
69
  onItemSelect: (id: PrimaryKey | any) => void;
@@ -37,8 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  exports.__esModule = true;
40
- var React = __importStar(require("react"));
41
- var react_1 = require("react");
40
+ var react_1 = __importStar(require("react"));
42
41
  var react_use_1 = require("react-use");
43
42
  var hooks_1 = require("../../../hooks");
44
43
  var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
@@ -80,8 +79,18 @@ function CheckboxListField(props) {
80
79
  }
81
80
  }, [onReset, prevInputValue, props.input.value, selectedIds.length]);
82
81
  var CheckboxFieldView = props.itemView || components.ui.getView('form.CheckboxFieldView');
83
- var renderCheckbox = function (checkboxProps) { return (React.createElement(CheckboxFieldView, __assign({}, checkboxProps))); };
84
- return components.ui.renderView(props.view || 'form.CheckboxListFieldView', __assign(__assign({}, props), { items: items, inputProps: inputProps, onItemSelect: onItemSelect, selectedIds: selectedIds, renderCheckbox: renderCheckbox }));
82
+ var renderCheckbox = function (checkboxProps) { return (react_1["default"].createElement(CheckboxFieldView, __assign({}, checkboxProps))); };
83
+ var viewProps = (0, react_1.useMemo)(function () { return ({
84
+ items: items,
85
+ inputProps: inputProps,
86
+ onItemSelect: onItemSelect,
87
+ selectedIds: selectedIds,
88
+ renderCheckbox: renderCheckbox,
89
+ orientation: props.orientation,
90
+ size: props.size,
91
+ disabled: props.disabled
92
+ }); }, [inputProps, items, onItemSelect, props.disabled, props.orientation, props.size, renderCheckbox, selectedIds]);
93
+ return components.ui.renderView(props.view || 'form.CheckboxListFieldView', viewProps);
85
94
  }
86
95
  CheckboxListField.defaultProps = {
87
96
  disabled: false,