@steroidsjs/core 3.0.3 → 3.0.5

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 (37) hide show
  1. package/components/MetaComponent.d.ts +1 -0
  2. package/components/MetaComponent.js +2 -1
  3. package/docs-autogen-result.json +138 -5
  4. package/en.json +13 -7
  5. package/package.json +1 -1
  6. package/ui/form/AutoCompleteField/AutoCompleteField.js +1 -2
  7. package/ui/form/CheckboxField/CheckboxField.js +0 -1
  8. package/ui/form/CheckboxListField/CheckboxListField.d.ts +1 -0
  9. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +5 -0
  10. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +22 -14
  11. package/ui/form/DateField/DateField.js +1 -2
  12. package/ui/form/DateRangeField/DateRangeField.js +0 -1
  13. package/ui/form/DateTimeField/DateTimeField.js +0 -1
  14. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +0 -1
  15. package/ui/form/DropDownField/DropDownField.js +0 -1
  16. package/ui/form/EmailField/EmailField.js +0 -1
  17. package/ui/form/Field/fieldWrapper.js +4 -2
  18. package/ui/form/Form/Form.d.ts +16 -1
  19. package/ui/form/Form/Form.js +4 -3
  20. package/ui/form/ImageField/ImageField.js +5 -4
  21. package/ui/form/InputField/InputField.js +0 -1
  22. package/ui/form/NumberField/NumberField.js +1 -2
  23. package/ui/form/PasswordField/PasswordField.js +1 -2
  24. package/ui/form/RadioField/RadioField.js +0 -1
  25. package/ui/form/RadioListField/RadioListField.d.ts +1 -0
  26. package/ui/form/RadioListField/RadioListField.js +0 -1
  27. package/ui/form/RateField/RateField.js +1 -2
  28. package/ui/form/SwitcherField/SwitcherField.js +1 -2
  29. package/ui/form/TimeField/TimeField.js +1 -2
  30. package/ui/form/TimeRangeField/TimeRangeField.js +7 -4
  31. package/ui/form/index.d.ts +10 -4
  32. package/ui/form/index.js +17 -8
  33. package/ui/format/TimeFormatter/TimeFormatter.d.ts +26 -0
  34. package/ui/format/TimeFormatter/TimeFormatter.js +21 -0
  35. package/ui/format/TimeFormatter/index.d.ts +2 -0
  36. package/ui/format/TimeFormatter/index.js +7 -0
  37. package/ui/nav/Tree/Tree.d.ts +2 -0
@@ -157,6 +157,7 @@ export default class MetaComponent implements IMetaComponent {
157
157
  time: {
158
158
  jsType: string;
159
159
  field: string;
160
+ formatter: string;
160
161
  };
161
162
  };
162
163
  }
@@ -166,7 +166,8 @@ var MetaComponent = /** @class */ (function () {
166
166
  },
167
167
  time: {
168
168
  jsType: 'string',
169
- field: 'TimeField'
169
+ field: 'TimeField',
170
+ formatter: 'TimeFormatter'
170
171
  }
171
172
  };
172
173
  };
@@ -15230,7 +15230,7 @@
15230
15230
  "decorators": [],
15231
15231
  "description": "",
15232
15232
  "required": true,
15233
- "type": "{color: string, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string, required: boolean}[]",
15233
+ "type": "{color: string, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string, required: boolean, size: string}[]",
15234
15234
  "example": null
15235
15235
  },
15236
15236
  {
@@ -15423,6 +15423,15 @@
15423
15423
  "example": "items",
15424
15424
  "defaultValue": null
15425
15425
  },
15426
+ {
15427
+ "name": "hasOnlyLeafCheckboxes",
15428
+ "decorators": [],
15429
+ "description": "Отображать чекбоксы только на узлах, не имеющих вложенных элементов",
15430
+ "required": false,
15431
+ "type": "boolean",
15432
+ "example": null,
15433
+ "defaultValue": null
15434
+ },
15426
15435
  {
15427
15436
  "name": "hint",
15428
15437
  "decorators": [],
@@ -15697,6 +15706,14 @@
15697
15706
  "type": "string",
15698
15707
  "example": null
15699
15708
  },
15709
+ {
15710
+ "name": "hasOnlyLeafCheckboxes",
15711
+ "decorators": [],
15712
+ "description": "",
15713
+ "required": false,
15714
+ "type": "boolean",
15715
+ "example": null
15716
+ },
15700
15717
  {
15701
15718
  "name": "input",
15702
15719
  "decorators": [],
@@ -20607,7 +20624,7 @@
20607
20624
  {
20608
20625
  "name": "size",
20609
20626
  "decorators": [],
20610
- "description": "Размер компонента",
20627
+ "description": "Размер компонента и вложенных полей",
20611
20628
  "required": false,
20612
20629
  "type": "string",
20613
20630
  "example": null,
@@ -21601,7 +21618,7 @@
21601
21618
  {
21602
21619
  "name": "size",
21603
21620
  "decorators": [],
21604
- "description": "Размер компонента",
21621
+ "description": "Размер компонента и вложенных полей",
21605
21622
  "required": false,
21606
21623
  "type": "string",
21607
21624
  "example": null
@@ -21618,7 +21635,8 @@
21618
21635
  "defaultProps": {
21619
21636
  "actionMethod": "'POST'",
21620
21637
  "autoStartTwoFactor": "true",
21621
- "captchaActionName": "'submit'"
21638
+ "captchaActionName": "'submit'",
21639
+ "size": "'md'"
21622
21640
  },
21623
21641
  "extends": [
21624
21642
  "IUiComponent"
@@ -21759,6 +21777,15 @@
21759
21777
  "example": null,
21760
21778
  "defaultValue": null
21761
21779
  },
21780
+ {
21781
+ "name": "size",
21782
+ "decorators": [],
21783
+ "description": "Размер компонента и вложенных полей",
21784
+ "required": false,
21785
+ "type": "string",
21786
+ "example": null,
21787
+ "defaultValue": "'md'"
21788
+ },
21762
21789
  {
21763
21790
  "name": "style",
21764
21791
  "decorators": [],
@@ -21768,6 +21795,15 @@
21768
21795
  "example": "{width: '45%'}",
21769
21796
  "defaultValue": null
21770
21797
  },
21798
+ {
21799
+ "name": "submitButtonProps",
21800
+ "decorators": [],
21801
+ "description": "Параметры для кнопки отправки формы",
21802
+ "required": false,
21803
+ "type": "IButtonProps",
21804
+ "example": "{\n block: true,\n}",
21805
+ "defaultValue": null
21806
+ },
21771
21807
  {
21772
21808
  "name": "submitErrorMessage",
21773
21809
  "decorators": [],
@@ -22069,6 +22105,14 @@
22069
22105
  "type": "any",
22070
22106
  "example": null
22071
22107
  },
22108
+ {
22109
+ "name": "size",
22110
+ "decorators": [],
22111
+ "description": "",
22112
+ "required": false,
22113
+ "type": "string",
22114
+ "example": null
22115
+ },
22072
22116
  {
22073
22117
  "name": "style",
22074
22118
  "decorators": [],
@@ -22077,6 +22121,14 @@
22077
22121
  "type": "CSSProperties",
22078
22122
  "example": null
22079
22123
  },
22124
+ {
22125
+ "name": "submitButtonProps",
22126
+ "decorators": [],
22127
+ "description": "",
22128
+ "required": false,
22129
+ "type": "IButtonProps",
22130
+ "example": null
22131
+ },
22080
22132
  {
22081
22133
  "name": "submitLabel",
22082
22134
  "decorators": [],
@@ -26583,7 +26635,7 @@
26583
26635
  "decorators": [],
26584
26636
  "description": "",
26585
26637
  "required": true,
26586
- "type": "{disabled: boolean, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string, required: boolean}[]",
26638
+ "type": "{disabled: boolean, id: string | number | boolean, isHovered: boolean, isSelected: boolean, label: string, required: boolean, size: string}[]",
26587
26639
  "example": null
26588
26640
  },
26589
26641
  {
@@ -31095,6 +31147,45 @@
31095
31147
  ],
31096
31148
  "methods": []
31097
31149
  },
31150
+ "ITimeFormatterProps": {
31151
+ "name": "ITimeFormatterProps",
31152
+ "moduleName": "ui/format/TimeFormatter/TimeFormatter",
31153
+ "title": "TimeFormatter",
31154
+ "description": "\nКомпонент TimeFormatter предназначен для форматирования времени с использованием заданного формата.\nОн позволяет кастомизировать отображение времени, используя переданный view React компонент.\n",
31155
+ "tags": {},
31156
+ "defaultProps": null,
31157
+ "extends": [],
31158
+ "properties": [
31159
+ {
31160
+ "name": "format",
31161
+ "decorators": [],
31162
+ "description": "Формат времени",
31163
+ "required": false,
31164
+ "type": "string",
31165
+ "example": "HH:mm",
31166
+ "defaultValue": null
31167
+ },
31168
+ {
31169
+ "name": "value",
31170
+ "decorators": [],
31171
+ "description": "Время",
31172
+ "required": false,
31173
+ "type": "string",
31174
+ "example": "16:15",
31175
+ "defaultValue": null
31176
+ },
31177
+ {
31178
+ "name": "view",
31179
+ "decorators": [],
31180
+ "description": "Переопределение view React компонента для кастомизации отображения колонки",
31181
+ "required": false,
31182
+ "type": "React.ReactNode | {}",
31183
+ "example": "MyCustomView",
31184
+ "defaultValue": null
31185
+ }
31186
+ ],
31187
+ "methods": []
31188
+ },
31098
31189
  "IHeaderProps": {
31099
31190
  "name": "IHeaderProps",
31100
31191
  "moduleName": "ui/layout/Header/Header",
@@ -35927,6 +36018,15 @@
35927
36018
  "example": null,
35928
36019
  "defaultValue": null
35929
36020
  },
36021
+ {
36022
+ "name": "size",
36023
+ "decorators": [],
36024
+ "description": "Размер компонента и вложенных полей",
36025
+ "required": false,
36026
+ "type": "string",
36027
+ "example": null,
36028
+ "defaultValue": null
36029
+ },
35930
36030
  {
35931
36031
  "name": "style",
35932
36032
  "decorators": [],
@@ -35936,6 +36036,15 @@
35936
36036
  "example": "{width: '45%'}",
35937
36037
  "defaultValue": null
35938
36038
  },
36039
+ {
36040
+ "name": "submitButtonProps",
36041
+ "decorators": [],
36042
+ "description": "Параметры для кнопки отправки формы",
36043
+ "required": false,
36044
+ "type": "IButtonProps",
36045
+ "example": "{\n block: true,\n}",
36046
+ "defaultValue": null
36047
+ },
35939
36048
  {
35940
36049
  "name": "submitErrorMessage",
35941
36050
  "decorators": [],
@@ -38826,6 +38935,14 @@
38826
38935
  "required": false,
38827
38936
  "type": "React.ReactNode | {}",
38828
38937
  "example": "MyCustomView"
38938
+ },
38939
+ {
38940
+ "name": "withoutPointerOnLabel",
38941
+ "decorators": [],
38942
+ "description": "",
38943
+ "required": false,
38944
+ "type": "boolean",
38945
+ "example": null
38829
38946
  }
38830
38947
  ],
38831
38948
  "methods": [
@@ -38872,6 +38989,15 @@
38872
38989
  "example": null
38873
38990
  }
38874
38991
  ]
38992
+ },
38993
+ {
38994
+ "name": "onNestedItemClick",
38995
+ "decorators": [],
38996
+ "description": "",
38997
+ "required": false,
38998
+ "type": "void",
38999
+ "example": null,
39000
+ "parameters": []
38875
39001
  }
38876
39002
  ]
38877
39003
  },
@@ -43045,6 +43171,13 @@
43045
43171
  "description": "",
43046
43172
  "tags": {}
43047
43173
  },
43174
+ "ui/format/TimeFormatter/TimeFormatter": {
43175
+ "name": "default",
43176
+ "moduleName": "ui/format/TimeFormatter/TimeFormatter",
43177
+ "title": "",
43178
+ "description": "",
43179
+ "tags": {}
43180
+ },
43048
43181
  "ui/layout/Header/Header": {
43049
43182
  "name": "default",
43050
43183
  "moduleName": "ui/layout/Header/Header",
package/en.json CHANGED
@@ -955,21 +955,17 @@
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": "",
960
958
  "\nКомпонент для создания пошаговой формы. Предоставляет управление и синхронизацию состояния формы,\nа также список шагов формы для удобной навигации.\nПоля для шагов можно передавать как в виде компонентов, так и в виде объекта с названием поля.\nПозволяет выполнять отправку данных формы на сервер с возможностью валидации и перехода к неверно заполненным полям.\n\n": "",
959
+ "\nКомпонент TimeFormatter предназначен для форматирования времени с использованием заданного формата.\nОн позволяет кастомизировать отображение времени, используя переданный view React компонент.\n": "",
961
960
  "При повторном нажатии на выбранный элемент из дерева, он продолжит отображаться как активный.": "",
962
961
  "Дополнительные свойства, которые передаются во view компонента": "",
963
962
  "Пропсы для инпута загрузки файлов": "",
964
963
  "Переопределение view React компонента для кастомизации отображения элемента инпута": "",
965
964
  "Кастомный placeholder для инпута": "",
966
- "Компоненты для подключения wysiwyg редактора": "",
967
965
  "Если true, то location.pathname будет совпадать с теми путями, которые содержат слеш в конце.\nНапример, если указать путь '/catalog/', тогда совпадение будет с '/catalog/' и '/catalog/chapter', но не '/catalog'.": "",
968
966
  "Кастомная иконка, заменяющая иконку раскрытия по умолчанию": "",
969
967
  "Опции маски для полей": "",
970
968
  "Дополнительные кнопки": "",
971
- "Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
972
- "Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
973
969
  "Свойства для Form": "",
974
970
  "Свойства для кнопки продолжить/отправить": "",
975
971
  "Свойства для кнопки возврата": "",
@@ -977,7 +973,17 @@
977
973
  "Ориентация списка шагов формы": "",
978
974
  "Коллекция полей и аттрибутов для каждого шага формы. Можно передавать как компонент, так и объект с полями.\nГлавное, чтобы внутри шага использовался один из способов.": "",
979
975
  "Свойства для Steps": "",
980
- "CSS-класс для элемента навигации.": "",
976
+ "Формат времени": "",
977
+ "Время": "",
981
978
  "Флаг, который позволяет использовать вложенные роуты c указанием вложенного пути": "",
982
- "Скрыть иконку c лева от элемента": ""
979
+ "Скрыть иконку c лева от элемента": "",
980
+ "\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": "",
981
+ "Компонент для создания 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": "",
982
+ "Компоненты для подключения wysiwyg редактора": "",
983
+ "Отображать чекбоксы только на узлах, не имеющих вложенных элементов": "",
984
+ "Размер компонента и вложенных полей": "",
985
+ "Параметры для кнопки отправки формы": "",
986
+ "Конструктор редактора 'ckeditor5-react' из библиотеки @steroidsjs/ckeditor5/packages/ckeditor5-build-classic\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
987
+ "Компонент редактора 'ckeditor5-react' из библиотеки @ckeditor\nПримечание: для использования встроенного отображения 'HtmlField', данный компонент должен быть передан": "",
988
+ "CSS-класс для элемента навигации.": ""
983
989
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.3",
3
+ "version": "3.0.5",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -120,7 +120,6 @@ AutoCompleteField.defaultProps = {
120
120
  autoComplete: true,
121
121
  multiple: false,
122
122
  disabled: false,
123
- required: false,
124
- size: 'md'
123
+ required: false
125
124
  };
126
125
  exports["default"] = (0, fieldWrapper_1["default"])('AutoCompleteField', AutoCompleteField);
@@ -70,7 +70,6 @@ CheckboxField.defaultProps = {
70
70
  disabled: false,
71
71
  required: false,
72
72
  className: '',
73
- size: 'md',
74
73
  inputProps: {}
75
74
  };
76
75
  exports["default"] = (0, fieldWrapper_1["default"])('CheckboxField', CheckboxField, { label: false });
@@ -64,6 +64,7 @@ export interface ICheckboxListFieldViewProps extends IFieldWrapperOutputProps {
64
64
  isHovered: boolean;
65
65
  color?: string;
66
66
  required?: boolean;
67
+ size?: Size;
67
68
  }[];
68
69
  selectedIds: (PrimaryKey | any)[];
69
70
  onItemSelect: (id: PrimaryKey | any) => void;
@@ -46,6 +46,10 @@ export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<I
46
46
  * Первичный ключ для доступа к вложенным элементам
47
47
  */
48
48
  primaryKey?: string;
49
+ /**
50
+ * Отображать чекбоксы только на узлах, не имеющих вложенных элементов
51
+ */
52
+ hasOnlyLeafCheckboxes?: boolean;
49
53
  [key: string]: any;
50
54
  }
51
55
  export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps, Pick<ITreeProps, 'levelPadding' | 'customIcon'> {
@@ -61,6 +65,7 @@ export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps, P
61
65
  onItemSelect: (checkbox: IPreparedTreeItem) => void;
62
66
  renderCheckbox: (checkboxProps: ICheckboxFieldViewProps) => JSX.Element;
63
67
  size?: Size;
68
+ hasOnlyLeafCheckboxes?: boolean;
64
69
  }
65
70
  export declare const getNestedItemsIds: (item: any, groupAttribute: any) => any[];
66
71
  declare const _default: import("../../../ui/form/Field/fieldWrapper").FieldWrapperComponent<ICheckboxTreeFieldProps>;
@@ -41,6 +41,7 @@ exports.getNestedItemsIds = void 0;
41
41
  var react_1 = __importStar(require("react"));
42
42
  var react_use_1 = require("react-use");
43
43
  var isArray_1 = __importDefault(require("lodash-es/isArray"));
44
+ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
44
45
  var hooks_1 = require("../../../hooks");
45
46
  var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
46
47
  var getNestedItemsIds = function (item, groupAttribute) {
@@ -68,7 +69,9 @@ function CheckboxTreeField(props) {
68
69
  var inputSelectedIds = (0, react_1.useMemo)(function () { return props.selectedIds || [].concat(props.input.value || []); }, [props.input.value, props.selectedIds]);
69
70
  // Data Provider
70
71
  var items = (0, hooks_1.useDataProvider)({
71
- items: props.items
72
+ items: props.items,
73
+ initialSelectedIds: inputSelectedIds,
74
+ dataProvider: props.dataProvider
72
75
  }).items;
73
76
  // Tree items
74
77
  var treeItems = (0, hooks_1.useTree)({
@@ -85,24 +88,27 @@ function CheckboxTreeField(props) {
85
88
  inputValue: props.input.value
86
89
  }), selectedIds = _a.selectedIds, setSelectedIds = _a.setSelectedIds;
87
90
  var onItemSelect = (0, react_1.useCallback)(function (checkbox) {
88
- if (checkbox.hasItems) {
91
+ if (checkbox.hasItems && !props.hasOnlyLeafCheckboxes) {
89
92
  var selectedItemIds = (0, exports.getNestedItemsIds)(checkbox, props.primaryKey);
90
93
  setSelectedIds(selectedItemIds);
91
94
  }
92
- else {
95
+ else if (checkbox.id && !checkbox.hasItems) {
93
96
  setSelectedIds(checkbox.id);
94
97
  }
95
- }, [props.primaryKey, setSelectedIds]);
96
- // Sync with form
97
- (0, react_1.useEffect)(function () {
98
- props.input.onChange.call(null, selectedIds);
99
- if (props.onChange) {
100
- props.onChange(selectedIds);
101
- }
102
- }, [props, props.input.onChange, selectedIds]);
98
+ }, [props.hasOnlyLeafCheckboxes, props.primaryKey, setSelectedIds]);
103
99
  var onReset = (0, react_1.useCallback)(function () {
104
100
  setSelectedIds([]);
105
101
  }, [setSelectedIds]);
102
+ // Sync with form
103
+ var prevSelectedIds = (0, react_use_1.usePrevious)(selectedIds);
104
+ (0, react_1.useEffect)(function () {
105
+ if (!(0, isEqual_1["default"])(prevSelectedIds || [], selectedIds)) {
106
+ props.input.onChange.call(null, selectedIds);
107
+ if (props.onChange) {
108
+ props.onChange.call(null, selectedIds);
109
+ }
110
+ }
111
+ }, [prevSelectedIds, props.input.onChange, props.multiple, props.onChange, selectedIds]);
106
112
  // Reset selected ids on form reset
107
113
  var prevInputValue = (0, react_use_1.usePrevious)(props.input.value);
108
114
  (0, react_use_1.useUpdateEffect)(function () {
@@ -119,8 +125,9 @@ function CheckboxTreeField(props) {
119
125
  selectedIds: selectedIds,
120
126
  renderCheckbox: renderCheckbox,
121
127
  size: props.size,
122
- levelPadding: props.levelPadding
123
- }); }, [onItemSelect, props.levelPadding, props.size, renderCheckbox, selectedIds, treeItems]);
128
+ levelPadding: props.levelPadding,
129
+ hasOnlyLeafCheckboxes: props.hasOnlyLeafCheckboxes
130
+ }); }, [onItemSelect, props.levelPadding, props.hasOnlyLeafCheckboxes, props.size, renderCheckbox, selectedIds, treeItems]);
124
131
  return components.ui.renderView(props.view || 'form.CheckboxTreeFieldView', viewProps);
125
132
  }
126
133
  CheckboxTreeField.defaultProps = {
@@ -129,6 +136,7 @@ CheckboxTreeField.defaultProps = {
129
136
  className: '',
130
137
  levelPadding: 32,
131
138
  alwaysOpened: false,
132
- primaryKey: 'items'
139
+ primaryKey: 'items',
140
+ hasOnlyLeafCheckboxes: false
133
141
  };
134
142
  exports["default"] = (0, fieldWrapper_1["default"])('CheckboxTreeField', CheckboxTreeField);
@@ -54,7 +54,6 @@ DateField.defaultProps = {
54
54
  maskOptions: (0, kit_1.maskitoDateOptionsGenerator)({
55
55
  mode: 'dd/mm/yyyy',
56
56
  separator: '.'
57
- }),
58
- size: 'md'
57
+ })
59
58
  };
60
59
  exports["default"] = (0, fieldWrapper_1["default"])('DateField', DateField);
@@ -132,7 +132,6 @@ DateRangeField.defaultProps = {
132
132
  showRemove: true,
133
133
  hasInitialFocus: false,
134
134
  icon: true,
135
- size: 'md',
136
135
  maskOptions: {
137
136
  from: (0, kit_1.maskitoDateOptionsGenerator)({
138
137
  mode: 'dd/mm/yyyy',
@@ -87,7 +87,6 @@ DateTimeField.defaultProps = {
87
87
  valueFormat: 'YYYY-MM-DD' + DATE_TIME_SEPARATOR + 'HH:mm',
88
88
  useUTC: false,
89
89
  dateInUTC: false,
90
- size: 'md',
91
90
  icon: true,
92
91
  maskOptions: (0, kit_1.maskitoDateTimeOptionsGenerator)({
93
92
  dateMode: 'dd/mm/yyyy',
@@ -173,7 +173,6 @@ DateTimeRangeField.defaultProps = {
173
173
  useUTC: false,
174
174
  dateInUTC: false,
175
175
  icon: true,
176
- size: 'md',
177
176
  maskOptions: {
178
177
  from: (0, kit_1.maskitoDateTimeOptionsGenerator)({
179
178
  dateMode: 'dd/mm/yyyy',
@@ -239,7 +239,6 @@ function DropDownField(props) {
239
239
  DropDownField.defaultProps = {
240
240
  primaryKey: 'id',
241
241
  outline: false,
242
- size: 'md',
243
242
  color: 'basic',
244
243
  disabled: false,
245
244
  required: false,
@@ -81,7 +81,6 @@ function EmailField(props) {
81
81
  return components.ui.renderView(props.view || 'form.InputFieldView', viewProps);
82
82
  }
83
83
  EmailField.defaultProps = {
84
- size: 'md',
85
84
  disabled: false,
86
85
  required: false,
87
86
  showClear: false,
@@ -45,6 +45,7 @@ var form_1 = require("../../../utils/form");
45
45
  var Form_1 = require("../Form/Form");
46
46
  var FieldLayout_1 = __importDefault(require("../FieldLayout/FieldLayout"));
47
47
  var hooks_1 = require("../../../hooks");
48
+ var DEFAULT_SIZE = 'md';
48
49
  var getKey = function (baseName, attribute) { return baseName + (0, upperFirst_1["default"])(attribute || ''); };
49
50
  var createDynamicField = function (componentId, Component, options) {
50
51
  var DynamicField = function (props) {
@@ -132,9 +133,10 @@ function fieldWrapper(componentId, Component, optionsConfig) {
132
133
  var uniqueId = (0, hooks_1.useUniqueId)('input');
133
134
  var inputId = props.id || uniqueId;
134
135
  if (props.isRenderWithoutFieldLayout) {
135
- return components.ui.renderView(Component.DynamicField, props);
136
+ return components.ui.renderView(Component.DynamicField, __assign(__assign({}, props), { size: props.size || DEFAULT_SIZE }));
136
137
  }
137
- return components.ui.renderView(FieldLayout_1["default"], __assign(__assign({}, attributesProps), { className: props.fieldLayoutClassName, size: props.size || context.size || null, required: (0, has_1["default"])(props, 'required') ? props.required : metaProps.required, label: options.label === false ? null : ((0, has_1["default"])(props, 'label') ? props.label : metaProps.label), hint: (0, has_1["default"])(props, 'hint') ? props.hint : metaProps.hint, errors: props.errors, id: inputId, children: (React.createElement(Component.DynamicField, __assign({}, props, { id: inputId }))) }));
138
+ var size = props.size || context.size || DEFAULT_SIZE;
139
+ return components.ui.renderView(FieldLayout_1["default"], __assign(__assign({}, attributesProps), { size: size, className: props.fieldLayoutClassName, required: (0, has_1["default"])(props, 'required') ? props.required : metaProps.required, label: options.label === false ? null : ((0, has_1["default"])(props, 'label') ? props.label : metaProps.label), hint: (0, has_1["default"])(props, 'hint') ? props.hint : metaProps.hint, errors: props.errors, id: inputId, children: (React.createElement(Component.DynamicField, __assign({}, props, { id: inputId, size: size }))) }));
138
140
  };
139
141
  NewComponent.WrappedComponent = Component;
140
142
  NewComponent.displayName = componentId;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { IButtonProps } from '@steroidsjs/core/ui/form/Button/Button';
2
3
  import { IAddressBarConfig } from '../../../hooks/useAddressBar';
3
4
  import { IFieldProps } from '../Field/Field';
4
5
  /**
@@ -128,6 +129,13 @@ export interface IFormProps extends IUiComponent {
128
129
  * @example Submit
129
130
  */
130
131
  submitLabel?: string;
132
+ /**
133
+ * Параметры для кнопки отправки формы
134
+ * @example {
135
+ * block: true,
136
+ * }
137
+ */
138
+ submitButtonProps?: IButtonProps;
131
139
  /**
132
140
  * Синхронизация значений формы с адресной строкой
133
141
  * @example true
@@ -153,6 +161,10 @@ export interface IFormProps extends IUiComponent {
153
161
  * Дополнительные кнопки
154
162
  */
155
163
  buttons?: React.ReactNode;
164
+ /**
165
+ * Размер компонента и вложенных полей
166
+ */
167
+ size?: Size;
156
168
  [key: string]: any;
157
169
  }
158
170
  export interface IFormViewProps {
@@ -164,6 +176,8 @@ export interface IFormViewProps {
164
176
  style?: CustomStyle;
165
177
  children?: React.ReactNode;
166
178
  buttons?: React.ReactNode;
179
+ submitButtonProps?: IButtonProps;
180
+ size?: Size;
167
181
  }
168
182
  export interface IFormReducerState {
169
183
  values: any;
@@ -187,7 +201,7 @@ export interface IFormContext {
187
201
  */
188
202
  prefix?: string | boolean;
189
203
  /**
190
- * Размер компонента
204
+ * Размер компонента и вложенных полей
191
205
  */
192
206
  size?: Size;
193
207
  /**
@@ -213,6 +227,7 @@ declare namespace Form {
213
227
  actionMethod: string;
214
228
  autoStartTwoFactor: boolean;
215
229
  captchaActionName: string;
230
+ size: string;
216
231
  };
217
232
  }
218
233
  export default Form;
@@ -321,8 +321,8 @@ function Form(props) {
321
321
  reducer: reducer,
322
322
  dispatch: dispatch
323
323
  }); }, [dispatch, props.formId, props.model, props.prefix, props.size, provider, reducer]);
324
- var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { isSubmitting: isSubmitting, onSubmit: onSubmit, submitLabel: props.submitLabel, fields: props.fields, children: props.children, className: props.className, style: props.style, autoFocus: props.autoFocus, buttons: props.buttons })); }, [isSubmitting, onSubmit, props.autoFocus, props.buttons, props.children, props.className, props.fields, props.style,
325
- props.submitLabel, props.viewProps]);
324
+ var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { isSubmitting: isSubmitting, onSubmit: onSubmit, submitLabel: props.submitLabel, submitButtonProps: props.submitButtonProps, fields: props.fields, children: props.children, className: props.className, style: props.style, autoFocus: props.autoFocus, buttons: props.buttons, size: props.size })); }, [isSubmitting, onSubmit, props.autoFocus, props.buttons, props.children, props.className, props.fields,
325
+ props.size, props.style, props.submitButtonProps, props.submitLabel, props.viewProps]);
326
326
  // Wait initialization (only for redux)
327
327
  if (values === undefined) {
328
328
  return null;
@@ -335,6 +335,7 @@ function Form(props) {
335
335
  Form.defaultProps = {
336
336
  actionMethod: 'POST',
337
337
  autoStartTwoFactor: true,
338
- captchaActionName: 'submit'
338
+ captchaActionName: 'submit',
339
+ size: 'md'
339
340
  };
340
341
  exports["default"] = Form;
@@ -50,10 +50,11 @@ var useFile_1 = __importDefault(require("../../../hooks/useFile"));
50
50
  var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
51
51
  var modal_1 = require("../../../actions/modal");
52
52
  function ImageField(props) {
53
+ var _a;
53
54
  var components = (0, hooks_1.useComponents)();
54
55
  var dispatch = (0, useDispatch_1["default"])();
55
56
  // Add cropping option
56
- var _a = (0, react_1.useState)(null), croppedImage = _a[0], setCroppedImage = _a[1];
57
+ var _b = (0, react_1.useState)(null), croppedImage = _b[0], setCroppedImage = _b[1];
57
58
  var modalId = (0, react_1.useMemo)(function () { var _a; return ((_a = props.modalProps) === null || _a === void 0 ? void 0 : _a.modalId) || (0, uniqueId_1["default"])('cropModal'); }, [props.modalProps.modalId]);
58
59
  var ImageFieldModalVIew = props.modalView || components.ui.getView('form.ImageFieldModalView');
59
60
  var responseParser = (0, react_1.useCallback)(function (text) {
@@ -66,11 +67,11 @@ function ImageField(props) {
66
67
  catch (e) { }
67
68
  return data;
68
69
  }, [ImageFieldModalVIew, modalId, dispatch, props.crop, props.modalProps]);
69
- var _b = (0, useFile_1["default"])(__assign(__assign({}, props), { multiple: false, imagesOnly: true, uploader: __assign({ uploaderConfigs: {
70
+ var _c = (0, useFile_1["default"])(__assign(__assign({}, props), { multiple: false, imagesOnly: true, uploader: __assign({ uploaderConfigs: {
70
71
  xhr: {
71
72
  responseParser: props.crop ? responseParser : null
72
73
  }
73
- } }, props.uploader) })), files = _b.files, onBrowse = _b.onBrowse, onRemove = _b.onRemove, onAdd = _b.onAdd;
74
+ } }, props.uploader) })), files = _c.files, onBrowse = _c.onBrowse, onRemove = _c.onRemove, onAdd = _c.onAdd;
74
75
  var oldCroppedImage = (0, react_use_1.usePrevious)(croppedImage);
75
76
  // Fetch cropped image
76
77
  (0, react_1.useEffect)(function () {
@@ -88,7 +89,7 @@ function ImageField(props) {
88
89
  props.input.onChange(res.id);
89
90
  });
90
91
  }
91
- }, [components.http, croppedImage, onAdd, onRemove, props.crop.backendUrl, props.input, oldCroppedImage]);
92
+ }, [components.http, croppedImage, onAdd, onRemove, (_a = props.crop) === null || _a === void 0 ? void 0 : _a.backendUrl, props.input, oldCroppedImage]);
92
93
  var ImageFieldView = props.view || components.ui.getView('form.ImageFieldView');
93
94
  var item = (0, react_1.useMemo)(function () {
94
95
  var result = null;
@@ -133,7 +133,6 @@ function InputField(props) {
133
133
  }
134
134
  InputField.defaultProps = {
135
135
  type: 'text',
136
- size: 'md',
137
136
  disabled: false,
138
137
  required: false,
139
138
  showClear: false,
@@ -95,7 +95,6 @@ function NumberField(props) {
95
95
  }
96
96
  NumberField.defaultProps = {
97
97
  disabled: false,
98
- required: false,
99
- size: 'md'
98
+ required: false
100
99
  };
101
100
  exports["default"] = (0, fieldWrapper_1["default"])('NumberField', NumberField);
@@ -83,7 +83,6 @@ PasswordField.defaultProps = {
83
83
  disabled: false,
84
84
  showSecurityBar: false,
85
85
  showSecurityIcon: true,
86
- required: false,
87
- size: 'md'
86
+ required: false
88
87
  };
89
88
  exports["default"] = (0, fieldWrapper_1["default"])('PasswordField', PasswordField);
@@ -66,7 +66,6 @@ RadioField.defaultProps = {
66
66
  disabled: false,
67
67
  required: false,
68
68
  className: '',
69
- size: 'md',
70
69
  inputProps: {}
71
70
  };
72
71
  exports["default"] = (0, fieldWrapper_1["default"])('RadioField', RadioField);
@@ -32,6 +32,7 @@ export interface IRadioListFieldViewProps extends IFieldWrapperOutputProps {
32
32
  isSelected: boolean;
33
33
  isHovered: boolean;
34
34
  required?: boolean;
35
+ size?: Size;
35
36
  }[];
36
37
  selectedIds: (PrimaryKey | any)[];
37
38
  className?: CssClassName;
@@ -94,7 +94,6 @@ RadioListField.defaultProps = {
94
94
  className: '',
95
95
  multiple: true,
96
96
  errors: null,
97
- size: 'md',
98
97
  orientation: 'vertical'
99
98
  };
100
99
  exports["default"] = (0, fieldWrapper_1["default"])('RadioListField', RadioListField);
@@ -57,7 +57,6 @@ function RateField(props) {
57
57
  RateField.defaultProps = {
58
58
  allowClear: false,
59
59
  itemsCount: 5,
60
- disabled: false,
61
- size: 'md'
60
+ disabled: false
62
61
  };
63
62
  exports["default"] = (0, fieldWrapper_1["default"])('RateField', RateField);
@@ -93,7 +93,6 @@ SwitcherField.defaultProps = {
93
93
  disabled: false,
94
94
  required: false,
95
95
  className: '',
96
- errors: null,
97
- size: 'md'
96
+ errors: null
98
97
  };
99
98
  exports["default"] = (0, fieldWrapper_1["default"])('SwitcherField', SwitcherField);
@@ -45,9 +45,8 @@ TimeField.defaultProps = {
45
45
  showRemove: true,
46
46
  type: 'text',
47
47
  valueFormat: 'HH:mm',
48
- useUTC: true,
48
+ useUTC: false,
49
49
  dateInUTC: false,
50
- size: 'md',
51
50
  icon: true
52
51
  };
53
52
  exports["default"] = (0, fieldWrapper_1["default"])('TimeField', TimeField);
@@ -40,7 +40,9 @@ function TimeRangeField(props) {
40
40
  inputProps: props.inputPropsFrom,
41
41
  placeholder: props.placeholder,
42
42
  valueFormat: props.valueFormat,
43
- displayFormat: props.displayFormat
43
+ displayFormat: props.displayFormat,
44
+ useUTC: props.useUTC,
45
+ dateInUTC: props.dateInUTC
44
46
  }), onNowFrom = _a.onNow, onCloseFrom = _a.onClose, inputPropsFrom = _a.inputProps, onClearFrom = _a.onClear, isOpenedFrom = _a.isOpened;
45
47
  // Input 'to'
46
48
  var _b = (0, useDateInputState_1["default"])({
@@ -51,7 +53,9 @@ function TimeRangeField(props) {
51
53
  inputProps: props.inputPropsTo,
52
54
  placeholder: props.placeholder,
53
55
  valueFormat: props.valueFormat,
54
- displayFormat: props.displayFormat
56
+ displayFormat: props.displayFormat,
57
+ useUTC: props.useUTC,
58
+ dateInUTC: props.dateInUTC
55
59
  }), onNowTo = _b.onNow, onCloseTo = _b.onClose, inputPropsTo = _b.inputProps, onClearTo = _b.onClear, isOpenedTo = _b.isOpened;
56
60
  var _c = (0, useDateRange_1["default"])({
57
61
  onClearFrom: onClearFrom,
@@ -80,9 +84,8 @@ TimeRangeField.defaultProps = {
80
84
  hasInitialFocus: false,
81
85
  type: 'text',
82
86
  valueFormat: 'HH:mm',
83
- useUTC: true,
87
+ useUTC: false,
84
88
  dateInUTC: false,
85
- size: 'md',
86
89
  icon: true
87
90
  };
88
91
  exports["default"] = (0, fieldWrapper_1["default"])('TimeRangeField', TimeRangeField, {
@@ -10,6 +10,7 @@ import DateRangeField from './DateRangeField';
10
10
  import DateTimeField from './DateTimeField';
11
11
  import DateTimeRangeField from './DateTimeRangeField';
12
12
  import DropDownField from './DropDownField';
13
+ import EmailField from './EmailField';
13
14
  import Field from './Field';
14
15
  import FieldLayout from './FieldLayout';
15
16
  import FieldList from './FieldList';
@@ -17,21 +18,23 @@ import FieldSet from './FieldSet';
17
18
  import FileField from './FileField';
18
19
  import Form from './Form';
19
20
  import HtmlField from './HtmlField';
21
+ import ImageField from './ImageField';
20
22
  import InputField from './InputField';
23
+ import MaskField from './MaskField';
21
24
  import NavField from './NavField';
22
25
  import NumberField from './NumberField';
23
26
  import PasswordField from './PasswordField';
24
27
  import RadioField from './RadioField';
25
28
  import RadioListField from './RadioListField';
29
+ import RateField from './RateField';
26
30
  import ReCaptchaField from './ReCaptchaField';
27
31
  import SliderField from './SliderField';
28
32
  import SwitcherField from './SwitcherField';
29
33
  import TextField from './TextField';
30
34
  import TimeField from './TimeField';
31
- import RateField from './RateField';
32
- import MaskField from './MaskField';
33
- import EmailField from './EmailField';
34
- export { AutoCompleteField, BlankField, Button, CheckboxField, CheckboxListField, CheckboxTreeField, DateField, DateRangeField, DateTimeField, DateTimeRangeField, DropDownField, Field, FieldLayout, FieldList, FieldSet, FileField, Form, HtmlField, InputField, NavField, NumberField, PasswordField, RadioField, RadioListField, ReCaptchaField, SliderField, SwitcherField, TextField, TimeField, RateField, MaskField, EmailField, };
35
+ import TimeRangeField from './TimeRangeField';
36
+ import WizardForm from './WizardForm';
37
+ export { AutoCompleteField, BlankField, Button, CheckboxField, CheckboxListField, CheckboxTreeField, DateField, DateRangeField, DateTimeField, DateTimeRangeField, DropDownField, Field, FieldLayout, FieldList, FieldSet, FileField, Form, HtmlField, ImageField, InputField, NavField, NumberField, PasswordField, RadioField, RadioListField, ReCaptchaField, SliderField, SwitcherField, TextField, TimeField, RateField, MaskField, EmailField, TimeRangeField, WizardForm, };
35
38
  declare const _default: {
36
39
  AutoCompleteField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./AutoCompleteField/AutoCompleteField").IAutoCompleteFieldProps>;
37
40
  BlankField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./BlankField/BlankField").IBlankFieldProps>;
@@ -51,6 +54,7 @@ declare const _default: {
51
54
  FileField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./FileField/FileField").IFileFieldProps>;
52
55
  Form: typeof Form;
53
56
  HtmlField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./HtmlField/HtmlField").IHtmlFieldProps>;
57
+ ImageField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./ImageField/ImageField").IImageFieldProps>;
54
58
  InputField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./InputField/InputField").IInputFieldProps>;
55
59
  NavField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./NavField/NavField").INavFieldProps>;
56
60
  NumberField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./NumberField/NumberField").INumberFieldProps>;
@@ -65,5 +69,7 @@ declare const _default: {
65
69
  RateField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./RateField/RateField").IRateFieldProps>;
66
70
  MaskField: typeof MaskField;
67
71
  EmailField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./EmailField/EmailField").IEmailFieldProps>;
72
+ TimeRangeField: import("./Field/fieldWrapper").FieldWrapperComponent<import("./TimeRangeField/TimeRangeField").ITimeRangeFieldProps>;
73
+ WizardForm: typeof WizardForm;
68
74
  };
69
75
  export default _default;
package/ui/form/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
- exports.EmailField = exports.MaskField = exports.RateField = exports.TimeField = exports.TextField = exports.SwitcherField = exports.SliderField = exports.ReCaptchaField = exports.RadioListField = exports.RadioField = exports.PasswordField = exports.NumberField = exports.NavField = exports.InputField = exports.HtmlField = exports.Form = exports.FileField = exports.FieldSet = exports.FieldList = exports.FieldLayout = exports.Field = exports.DropDownField = exports.DateTimeRangeField = exports.DateTimeField = exports.DateRangeField = exports.DateField = exports.CheckboxTreeField = exports.CheckboxListField = exports.CheckboxField = exports.Button = exports.BlankField = exports.AutoCompleteField = void 0;
6
+ exports.WizardForm = exports.TimeRangeField = exports.EmailField = exports.MaskField = exports.RateField = exports.TimeField = exports.TextField = exports.SwitcherField = exports.SliderField = exports.ReCaptchaField = exports.RadioListField = exports.RadioField = exports.PasswordField = exports.NumberField = exports.NavField = exports.InputField = exports.ImageField = exports.HtmlField = exports.Form = exports.FileField = exports.FieldSet = exports.FieldList = exports.FieldLayout = exports.Field = exports.DropDownField = exports.DateTimeRangeField = exports.DateTimeField = exports.DateRangeField = exports.DateField = exports.CheckboxTreeField = exports.CheckboxListField = exports.CheckboxField = exports.Button = exports.BlankField = exports.AutoCompleteField = void 0;
7
7
  var AutoCompleteField_1 = __importDefault(require("./AutoCompleteField"));
8
8
  exports.AutoCompleteField = AutoCompleteField_1["default"];
9
9
  var BlankField_1 = __importDefault(require("./BlankField"));
@@ -26,6 +26,8 @@ var DateTimeRangeField_1 = __importDefault(require("./DateTimeRangeField"));
26
26
  exports.DateTimeRangeField = DateTimeRangeField_1["default"];
27
27
  var DropDownField_1 = __importDefault(require("./DropDownField"));
28
28
  exports.DropDownField = DropDownField_1["default"];
29
+ var EmailField_1 = __importDefault(require("./EmailField"));
30
+ exports.EmailField = EmailField_1["default"];
29
31
  var Field_1 = __importDefault(require("./Field"));
30
32
  exports.Field = Field_1["default"];
31
33
  var FieldLayout_1 = __importDefault(require("./FieldLayout"));
@@ -40,8 +42,12 @@ var Form_1 = __importDefault(require("./Form"));
40
42
  exports.Form = Form_1["default"];
41
43
  var HtmlField_1 = __importDefault(require("./HtmlField"));
42
44
  exports.HtmlField = HtmlField_1["default"];
45
+ var ImageField_1 = __importDefault(require("./ImageField"));
46
+ exports.ImageField = ImageField_1["default"];
43
47
  var InputField_1 = __importDefault(require("./InputField"));
44
48
  exports.InputField = InputField_1["default"];
49
+ var MaskField_1 = __importDefault(require("./MaskField"));
50
+ exports.MaskField = MaskField_1["default"];
45
51
  var NavField_1 = __importDefault(require("./NavField"));
46
52
  exports.NavField = NavField_1["default"];
47
53
  var NumberField_1 = __importDefault(require("./NumberField"));
@@ -52,6 +58,8 @@ var RadioField_1 = __importDefault(require("./RadioField"));
52
58
  exports.RadioField = RadioField_1["default"];
53
59
  var RadioListField_1 = __importDefault(require("./RadioListField"));
54
60
  exports.RadioListField = RadioListField_1["default"];
61
+ var RateField_1 = __importDefault(require("./RateField"));
62
+ exports.RateField = RateField_1["default"];
55
63
  var ReCaptchaField_1 = __importDefault(require("./ReCaptchaField"));
56
64
  exports.ReCaptchaField = ReCaptchaField_1["default"];
57
65
  var SliderField_1 = __importDefault(require("./SliderField"));
@@ -62,12 +70,10 @@ var TextField_1 = __importDefault(require("./TextField"));
62
70
  exports.TextField = TextField_1["default"];
63
71
  var TimeField_1 = __importDefault(require("./TimeField"));
64
72
  exports.TimeField = TimeField_1["default"];
65
- var RateField_1 = __importDefault(require("./RateField"));
66
- exports.RateField = RateField_1["default"];
67
- var MaskField_1 = __importDefault(require("./MaskField"));
68
- exports.MaskField = MaskField_1["default"];
69
- var EmailField_1 = __importDefault(require("./EmailField"));
70
- exports.EmailField = EmailField_1["default"];
73
+ var TimeRangeField_1 = __importDefault(require("./TimeRangeField"));
74
+ exports.TimeRangeField = TimeRangeField_1["default"];
75
+ var WizardForm_1 = __importDefault(require("./WizardForm"));
76
+ exports.WizardForm = WizardForm_1["default"];
71
77
  exports["default"] = {
72
78
  AutoCompleteField: AutoCompleteField_1["default"],
73
79
  BlankField: BlankField_1["default"],
@@ -87,6 +93,7 @@ exports["default"] = {
87
93
  FileField: FileField_1["default"],
88
94
  Form: Form_1["default"],
89
95
  HtmlField: HtmlField_1["default"],
96
+ ImageField: ImageField_1["default"],
90
97
  InputField: InputField_1["default"],
91
98
  NavField: NavField_1["default"],
92
99
  NumberField: NumberField_1["default"],
@@ -100,5 +107,7 @@ exports["default"] = {
100
107
  TimeField: TimeField_1["default"],
101
108
  RateField: RateField_1["default"],
102
109
  MaskField: MaskField_1["default"],
103
- EmailField: EmailField_1["default"]
110
+ EmailField: EmailField_1["default"],
111
+ TimeRangeField: TimeRangeField_1["default"],
112
+ WizardForm: WizardForm_1["default"]
104
113
  };
@@ -0,0 +1,26 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * TimeFormatter
4
+ *
5
+ * Компонент TimeFormatter предназначен для форматирования времени с использованием заданного формата.
6
+ * Он позволяет кастомизировать отображение времени, используя переданный view React компонент.
7
+ **/
8
+ export interface ITimeFormatterProps {
9
+ /**
10
+ * Формат времени
11
+ * @example HH:mm
12
+ */
13
+ format?: string;
14
+ /**
15
+ * Время
16
+ * @example 16:15
17
+ */
18
+ value?: string;
19
+ /**
20
+ * Переопределение view React компонента для кастомизации отображения колонки
21
+ * @example MyCustomView
22
+ */
23
+ view?: CustomView;
24
+ [key: string]: any;
25
+ }
26
+ export default function TimeFormatter(props: ITimeFormatterProps): JSX.Element;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var hooks_1 = require("@steroidsjs/core/hooks");
7
+ var dayjs_1 = __importDefault(require("dayjs"));
8
+ var defaultProps = {
9
+ format: 'HH:mm'
10
+ };
11
+ function TimeFormatter(props) {
12
+ var components = (0, hooks_1.useComponents)();
13
+ if (!props.value) {
14
+ return null;
15
+ }
16
+ var time = (0, dayjs_1["default"])(props.value).format(props.format || defaultProps.format);
17
+ return components.ui.renderView(props.view || 'format.DefaultFormatterView', {
18
+ value: time
19
+ });
20
+ }
21
+ exports["default"] = TimeFormatter;
@@ -0,0 +1,2 @@
1
+ import TimeFormatter from './TimeFormatter';
2
+ export default TimeFormatter;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ var TimeFormatter_1 = __importDefault(require("./TimeFormatter"));
7
+ exports["default"] = TimeFormatter_1["default"];
@@ -6,6 +6,8 @@ export interface ITreeViewProps extends ITreeProps {
6
6
  export interface ITreeItemViewProps extends ITreeProps {
7
7
  item: IPreparedTreeItem;
8
8
  children?: JSX.Element;
9
+ onNestedItemClick?: () => void;
10
+ withoutPointerOnLabel?: boolean;
9
11
  }
10
12
  /**
11
13
  * Tree