@steroidsjs/core 3.0.92 → 3.0.94

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 (205) hide show
  1. package/actions/auth.js +1 -0
  2. package/actions/list.js +12 -10
  3. package/actions/notifications.d.ts +1 -1
  4. package/actions/notifications.js +5 -3
  5. package/components/ClientStorageComponent.js +1 -1
  6. package/components/HttpComponent.js +3 -3
  7. package/components/JwtHttpComponent.js +2 -2
  8. package/components/LocaleComponent.js +4 -3
  9. package/components/MetricsComponent.js +1 -1
  10. package/components/ResourceComponent.d.ts +2 -0
  11. package/components/ResourceComponent.js +9 -3
  12. package/components/SocialComponent.js +3 -1
  13. package/components/StoreComponent.d.ts +33 -21
  14. package/components/StoreComponent.js +5 -10
  15. package/components/UiComponent.js +1 -1
  16. package/components/social/GitlabProvider.js +3 -1
  17. package/docs-autogen-result.json +987 -81
  18. package/en.json +18 -6
  19. package/hooks/index.d.ts +5 -5
  20. package/hooks/index.js +10 -10
  21. package/hooks/useAddressBar.js +13 -9
  22. package/hooks/useApplication.d.ts +9 -9
  23. package/hooks/useApplication.js +17 -15
  24. package/hooks/useDataProvider.js +13 -7
  25. package/hooks/useDataSelect.js +4 -4
  26. package/hooks/useFetch.d.ts +12 -7
  27. package/hooks/useFetch.js +7 -5
  28. package/hooks/useFile.js +12 -7
  29. package/hooks/useLayout.js +25 -23
  30. package/hooks/useList.d.ts +4 -4
  31. package/hooks/useList.js +29 -23
  32. package/hooks/useListField.js +1 -1
  33. package/hooks/useSaveCursorPosition.js +1 -1
  34. package/hooks/useTree.d.ts +1 -1
  35. package/hooks/useTree.js +7 -6
  36. package/hooks/useUniqueId.js +1 -1
  37. package/index.d.ts +49 -0
  38. package/package.json +4 -4
  39. package/providers/ComponentsProvider.d.ts +5 -5
  40. package/providers/SsrProvider.d.ts +4 -0
  41. package/providers/SsrProvider.js +7 -5
  42. package/providers/index.d.ts +1 -1
  43. package/providers/index.js +2 -2
  44. package/reducers/auth.js +1 -0
  45. package/reducers/fields.js +2 -1
  46. package/reducers/form.js +4 -3
  47. package/reducers/index.d.ts +1 -1
  48. package/reducers/index.js +2 -2
  49. package/reducers/list.js +4 -3
  50. package/reducers/modal.js +2 -1
  51. package/reducers/notifications.js +2 -1
  52. package/reducers/router.js +13 -7
  53. package/ui/content/Accordion/index.d.ts +1 -1
  54. package/ui/content/Accordion/index.js +2 -2
  55. package/ui/content/Alert/Alert.d.ts +1 -1
  56. package/ui/content/Badge/Badge.d.ts +1 -1
  57. package/ui/content/Calendar/Calendar.js +2 -2
  58. package/ui/content/CalendarSystem/CalendarSystem.d.ts +2 -2
  59. package/ui/content/CalendarSystem/CalendarSystem.js +2 -2
  60. package/ui/content/CalendarSystem/hooks/useCalendarControls.js +5 -3
  61. package/ui/content/CalendarSystem/hooks/useCalendarSystem.js +11 -11
  62. package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.d.ts +1 -1
  63. package/ui/content/CalendarSystem/hooks/useCalendarSystemEventGroupModals.js +2 -2
  64. package/ui/content/CalendarSystem/hooks/useCalendarSystemModals.js +6 -4
  65. package/ui/content/CalendarSystem/hooks/useDisplayDate.js +1 -1
  66. package/ui/content/CalendarSystem/hooks/useEventsFromDate.js +1 -1
  67. package/ui/content/CalendarSystem/utils/utils.js +6 -4
  68. package/ui/content/Card/Card.d.ts +1 -1
  69. package/ui/content/Chat/Chat.d.ts +1 -1
  70. package/ui/content/Chat/Chat.js +1 -1
  71. package/ui/content/Chat/hooks/useChat.js +5 -5
  72. package/ui/content/Chat/utils/addNewMessageIntoGroupedMessages.js +1 -1
  73. package/ui/content/Chat/utils/calculateMessageTimeAgo.js +6 -2
  74. package/ui/content/Chat/utils/getMessagesGroupedByDate.d.ts +1 -1
  75. package/ui/content/Chat/utils/getMessagesGroupedByDate.js +1 -1
  76. package/ui/content/Chat/utils/index.d.ts +1 -1
  77. package/ui/content/Chat/utils/index.js +3 -3
  78. package/ui/content/CopyToClipboard/CopyToClipboard.js +1 -1
  79. package/ui/content/Dashboard/Dashboard.js +1 -1
  80. package/ui/content/Detail/Detail.js +5 -3
  81. package/ui/content/DropDown/DropDown.js +1 -1
  82. package/ui/content/Kanban/Kanban.d.ts +3 -3
  83. package/ui/content/Kanban/Kanban.js +4 -4
  84. package/ui/content/Kanban/enums/KanbanPrioritiesEnum.d.ts +1 -1
  85. package/ui/content/Kanban/enums/KanbanPrioritiesEnum.js +6 -2
  86. package/ui/content/Kanban/enums/index.d.ts +1 -1
  87. package/ui/content/Kanban/enums/index.js +2 -2
  88. package/ui/content/Kanban/hooks/useKanban.js +2 -2
  89. package/ui/content/Kanban/reducers/kanban.js +1 -0
  90. package/ui/content/Slider/Slider.d.ts +1 -1
  91. package/ui/content/Slider/Slider.js +0 -1
  92. package/ui/content/index.d.ts +7 -7
  93. package/ui/content/index.js +15 -15
  94. package/ui/crud/Crud/Crud.js +4 -4
  95. package/ui/crud/Crud/CrudContent.d.ts +2 -2
  96. package/ui/crud/Crud/CrudContent.js +11 -5
  97. package/ui/crud/Crud/CrudModal.js +1 -1
  98. package/ui/crud/Crud/utils.js +5 -3
  99. package/ui/crud/index.d.ts +1 -1
  100. package/ui/form/AutoCompleteField/AutoCompleteField.js +2 -2
  101. package/ui/form/BlankField/BlankField.js +1 -1
  102. package/ui/form/Button/Button.d.ts +2 -2
  103. package/ui/form/Button/Button.js +4 -2
  104. package/ui/form/Button/index.js +1 -0
  105. package/ui/form/CheckboxField/CheckboxField.js +5 -3
  106. package/ui/form/CheckboxListField/CheckboxListField.d.ts +1 -1
  107. package/ui/form/CheckboxListField/CheckboxListField.js +1 -1
  108. package/ui/form/CheckboxTreeField/CheckboxTreeField.d.ts +3 -3
  109. package/ui/form/CheckboxTreeField/CheckboxTreeField.js +3 -3
  110. package/ui/form/DateField/DateField.d.ts +2 -2
  111. package/ui/form/DateField/DateField.js +7 -7
  112. package/ui/form/DateField/useDateInputState.js +1 -1
  113. package/ui/form/DateField/useDateRange.js +3 -3
  114. package/ui/form/DateField/useDateTime.js +1 -1
  115. package/ui/form/DateRangeField/DateRangeField.d.ts +2 -2
  116. package/ui/form/DateRangeField/DateRangeField.js +15 -13
  117. package/ui/form/DateTimeField/DateTimeField.d.ts +1 -1
  118. package/ui/form/DateTimeField/DateTimeField.js +9 -9
  119. package/ui/form/DateTimeField/utils.js +12 -3
  120. package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +1 -1
  121. package/ui/form/DateTimeRangeField/DateTimeRangeField.js +15 -13
  122. package/ui/form/DropDownField/DropDownField.d.ts +3 -3
  123. package/ui/form/DropDownField/DropDownField.js +5 -5
  124. package/ui/form/EmailField/EmailField.d.ts +1 -1
  125. package/ui/form/EmailField/EmailField.js +2 -2
  126. package/ui/form/Field/Field.js +3 -3
  127. package/ui/form/Field/fieldWrapper.js +6 -6
  128. package/ui/form/FieldLayout/FieldLayout.js +1 -1
  129. package/ui/form/FieldList/FieldList.js +15 -11
  130. package/ui/form/FieldSet/FieldSet.js +5 -3
  131. package/ui/form/FileField/FileField.d.ts +1 -1
  132. package/ui/form/FileField/FileField.js +2 -2
  133. package/ui/form/Form/Form.d.ts +2 -2
  134. package/ui/form/Form/Form.js +28 -25
  135. package/ui/form/HtmlField/HtmlField.js +2 -2
  136. package/ui/form/ImageField/ImageField.d.ts +2 -2
  137. package/ui/form/ImageField/ImageField.js +4 -4
  138. package/ui/form/InputField/InputField.d.ts +2 -2
  139. package/ui/form/InputField/InputField.js +11 -11
  140. package/ui/form/NavField/NavField.d.ts +2 -2
  141. package/ui/form/NavField/NavField.js +3 -3
  142. package/ui/form/NumberField/NumberField.d.ts +2 -2
  143. package/ui/form/NumberField/NumberField.js +5 -4
  144. package/ui/form/NumberField/hooks/useInputTypeNumber.js +2 -2
  145. package/ui/form/PasswordField/PasswordField.d.ts +1 -1
  146. package/ui/form/PasswordField/PasswordField.js +3 -1
  147. package/ui/form/RadioField/RadioField.d.ts +4 -1
  148. package/ui/form/RadioField/RadioField.js +0 -5
  149. package/ui/form/RadioListField/RadioListField.d.ts +5 -1
  150. package/ui/form/RadioListField/RadioListField.js +0 -4
  151. package/ui/form/RateField/RateField.js +2 -2
  152. package/ui/form/SliderField/SliderField.d.ts +1 -1
  153. package/ui/form/SliderField/SliderField.js +2 -2
  154. package/ui/form/SwitcherField/SwitcherField.d.ts +11 -1
  155. package/ui/form/TextField/TextField.js +1 -1
  156. package/ui/form/TimeField/TimeField.js +8 -8
  157. package/ui/form/TimeField/utils.js +9 -2
  158. package/ui/form/TimeRangeField/TimeRangeField.js +11 -11
  159. package/ui/form/WizardForm/WizardForm.d.ts +1 -1
  160. package/ui/form/WizardForm/WizardForm.js +4 -4
  161. package/ui/form/WizardForm/utils.d.ts +1 -1
  162. package/ui/form/WizardForm/utils.js +3 -3
  163. package/ui/form/index.d.ts +2 -2
  164. package/ui/form/index.js +4 -4
  165. package/ui/form/validate.js +5 -5
  166. package/ui/format/EnumFormatter/EnumFormatter.js +3 -1
  167. package/ui/format/Format/Format.js +1 -1
  168. package/ui/layout/Header/Header.d.ts +3 -3
  169. package/ui/layout/Loader/Loader.d.ts +1 -1
  170. package/ui/layout/Notifications/Notifications.d.ts +1 -1
  171. package/ui/layout/Notifications/Notifications.js +3 -3
  172. package/ui/layout/ProgressBar/ProgressBar.js +1 -1
  173. package/ui/layout/Sidebar/Sidebar.d.ts +1 -1
  174. package/ui/layout/Tooltip/Tooltip.js +1 -1
  175. package/ui/layout/index.d.ts +1 -1
  176. package/ui/layout/index.js +2 -2
  177. package/ui/list/CheckboxColumn/CheckboxColumn.js +1 -1
  178. package/ui/list/Empty/Empty.js +6 -2
  179. package/ui/list/Grid/Grid.d.ts +1 -1
  180. package/ui/list/Grid/Grid.js +6 -4
  181. package/ui/list/InfiniteScroll/InfiniteScroll.js +5 -3
  182. package/ui/list/LayoutNames/LayoutNames.d.ts +2 -2
  183. package/ui/list/LayoutNames/LayoutNames.js +5 -3
  184. package/ui/list/Pagination/Pagination.js +4 -2
  185. package/ui/list/PaginationSize/PaginationSize.d.ts +1 -1
  186. package/ui/list/PaginationSize/PaginationSize.js +5 -3
  187. package/ui/list/SearchForm/SearchForm.js +1 -1
  188. package/ui/list/Steps/Steps.js +1 -1
  189. package/ui/list/TreeTable/TreeTable.d.ts +1 -1
  190. package/ui/list/TreeTable/TreeTable.js +9 -7
  191. package/ui/modal/ModalPortal/ModalPortal.js +2 -2
  192. package/ui/modal/TwoFactorModal/TwoFactorModal.js +3 -1
  193. package/ui/nav/ButtonGroup/ButtonGroup.d.ts +1 -1
  194. package/ui/nav/Controls/Controls.d.ts +1 -1
  195. package/ui/nav/Nav/Nav.js +2 -2
  196. package/ui/nav/Router/Router.js +10 -8
  197. package/ui/nav/Router/helpers.js +1 -1
  198. package/ui/nav/index.d.ts +3 -3
  199. package/ui/nav/index.js +6 -6
  200. package/ui/typography/Text/Text.d.ts +1 -1
  201. package/ui/typography/Title/Title.d.ts +1 -1
  202. package/utils/calculateComponentAbsolutePosition.js +9 -3
  203. package/utils/calendar.js +2 -1
  204. package/utils/data.js +27 -17
  205. package/utils/form.js +10 -8
package/hooks/useList.js CHANGED
@@ -39,26 +39,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  exports.__esModule = true;
40
40
  exports.createInitialValues = exports.getDefaultSearchModel = exports.normalizeSortProps = exports.defaultConfig = void 0;
41
41
  /* eslint-disable @typescript-eslint/no-use-before-define */
42
- var react_1 = __importStar(require("react"));
42
+ var InfiniteScroll_1 = require("@steroidsjs/core/ui/list/InfiniteScroll/InfiniteScroll");
43
43
  var get_1 = __importDefault(require("lodash-es/get"));
44
- var union_1 = __importDefault(require("lodash-es/union"));
45
44
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
45
+ var union_1 = __importDefault(require("lodash-es/union"));
46
+ var react_1 = __importStar(require("react"));
46
47
  var react_use_1 = require("react-use");
47
- var InfiniteScroll_1 = require("@steroidsjs/core/ui/list/InfiniteScroll/InfiniteScroll");
48
48
  var useSelector_1 = __importDefault(require("./useSelector"));
49
- var list_1 = require("../reducers/list");
50
- var useModel_1 = __importDefault(require("../hooks/useModel"));
49
+ var form_1 = require("../actions/form");
50
+ var list_1 = require("../actions/list");
51
51
  var useAddressBar_1 = __importDefault(require("../hooks/useAddressBar"));
52
- var list_2 = require("../actions/list");
53
52
  var useDispatch_1 = __importDefault(require("../hooks/useDispatch"));
54
- var form_1 = require("../actions/form");
53
+ var useInitial_1 = __importDefault(require("../hooks/useInitial"));
54
+ var useModel_1 = __importDefault(require("../hooks/useModel"));
55
55
  var form_2 = require("../reducers/form");
56
+ var list_2 = require("../reducers/list");
57
+ var layout_1 = require("../ui/layout");
58
+ var Empty_1 = require("../ui/list/Empty/Empty");
56
59
  var LayoutNames_1 = require("../ui/list/LayoutNames/LayoutNames");
57
- var useInitial_1 = __importDefault(require("../hooks/useInitial"));
58
60
  var Pagination_1 = require("../ui/list/Pagination/Pagination");
59
61
  var PaginationSize_1 = require("../ui/list/PaginationSize/PaginationSize");
60
- var Empty_1 = require("../ui/list/Empty/Empty");
61
- var layout_1 = require("../ui/layout");
62
62
  exports.defaultConfig = {
63
63
  actionMethod: 'get',
64
64
  primaryKey: 'id',
@@ -69,12 +69,15 @@ exports.defaultConfig = {
69
69
  defaultValue: null
70
70
  }
71
71
  };
72
- var normalizeSortProps = function (props) { return (__assign(__assign(__assign({}, exports.defaultConfig.sort), { enable: !!props }), (typeof props === 'boolean' ? { enable: props } : props))); };
72
+ var normalizeSortProps = function (props) { return (__assign(__assign(__assign({}, exports.defaultConfig.sort), { enable: !!props }), (typeof props === 'boolean' ? {
73
+ enable: props
74
+ } : props))); };
73
75
  exports.normalizeSortProps = normalizeSortProps;
74
76
  var getDefaultSearchModel = function (_a) {
75
77
  var paginationProps = _a.paginationProps, paginationSizeProps = _a.paginationSizeProps, sort = _a.sort, layoutNamesProps = _a.layoutNamesProps;
76
78
  return ({
77
79
  attributes: [
80
+ // default attributes
78
81
  paginationProps.enable && {
79
82
  type: 'number',
80
83
  attribute: paginationProps.attribute,
@@ -86,6 +89,7 @@ var getDefaultSearchModel = function (_a) {
86
89
  defaultValue: paginationSizeProps.defaultValue
87
90
  },
88
91
  sort.enable && {
92
+ // TODO Need list of strings
89
93
  type: 'string',
90
94
  jsType: 'string[]',
91
95
  attribute: sort.attribute,
@@ -116,7 +120,7 @@ var FIRST_PAGE = 1;
116
120
  function useList(config) {
117
121
  var _a, _b;
118
122
  // Get list from redux state
119
- var list = (0, useSelector_1["default"])(function (state) { return (0, list_1.getList)(state, config.listId); });
123
+ var list = (0, useSelector_1["default"])(function (state) { return (0, list_2.getList)(state, config.listId); });
120
124
  // Normalize sort config
121
125
  var sort = (0, exports.normalizeSortProps)(config.sort);
122
126
  // Loading
@@ -171,7 +175,9 @@ function useList(config) {
171
175
  var model = (0, useModel_1["default"])(config.model);
172
176
  var searchModel = (0, useModel_1["default"])(config.searchModel || ((_a = config.searchForm) === null || _a === void 0 ? void 0 : _a.model), defaultSearchModel);
173
177
  // Address bar synchronization
174
- var _c = (0, useAddressBar_1["default"])(__assign({ enable: !!config.addressBar, model: searchModel }, (typeof config.addressBar === 'boolean' ? { enable: config.addressBar } : config.addressBar))), initialQuery = _c.initialQuery, updateQuery = _c.updateQuery;
178
+ var _c = (0, useAddressBar_1["default"])(__assign({ enable: !!config.addressBar, model: searchModel }, (typeof config.addressBar === 'boolean' ? {
179
+ enable: config.addressBar
180
+ } : config.addressBar))), initialQuery = _c.initialQuery, updateQuery = _c.updateQuery;
175
181
  // Outside search form
176
182
  var searchFormFields = (_b = config.searchForm) === null || _b === void 0 ? void 0 : _b.fields;
177
183
  var SearchForm = require('../ui/list/SearchForm')["default"];
@@ -210,7 +216,7 @@ function useList(config) {
210
216
  var _a;
211
217
  if (!list) {
212
218
  var toDispatch = [
213
- (0, list_2.listInit)(config.listId, {
219
+ (0, list_1.listInit)(config.listId, {
214
220
  listId: config.listId,
215
221
  action: config.action || config.action === '' ? config.action : null,
216
222
  actionMethod: config.actionMethod || exports.defaultConfig.actionMethod,
@@ -234,10 +240,10 @@ function useList(config) {
234
240
  }),
235
241
  ];
236
242
  if (config.initialItems || config.items) {
237
- toDispatch.push((0, list_2.listSetItems)(config.listId, config.initialItems || config.items));
243
+ toDispatch.push((0, list_1.listSetItems)(config.listId, config.initialItems || config.items));
238
244
  }
239
245
  if (!config.initialItems) {
240
- toDispatch.push((0, list_2.listLazyFetch)(config.listId));
246
+ toDispatch.push((0, list_1.listLazyFetch)(config.listId));
241
247
  }
242
248
  dispatch(toDispatch);
243
249
  }
@@ -260,7 +266,7 @@ function useList(config) {
260
266
  updateQuery(formValues);
261
267
  // Send request
262
268
  if (config.autoFetchOnFormChanges !== false) {
263
- dispatch((0, list_2.listLazyFetch)(config.listId));
269
+ dispatch((0, list_1.listLazyFetch)(config.listId));
264
270
  }
265
271
  }
266
272
  }, [config.autoFetchOnFormChanges, config.listId, dispatch, formId, formValues,
@@ -278,16 +284,16 @@ function useList(config) {
278
284
  // Check change items
279
285
  (0, react_use_1.useUpdateEffect)(function () {
280
286
  dispatch([
281
- (0, list_2.listSetItems)(config.listId, config.items),
287
+ (0, list_1.listSetItems)(config.listId, config.items),
282
288
  ]);
283
- }, [dispatch, config.items, config.listId, list === null || list === void 0 ? void 0 : list.isFetched]);
289
+ }, [dispatch, config.items, config.listId]);
284
290
  // Check change action
285
291
  var prevAction = (0, react_use_1.usePrevious)(config.action);
286
292
  (0, react_use_1.useUpdateEffect)(function () {
287
293
  if (prevAction && !(0, isEqual_1["default"])(config.action, prevAction)) {
288
294
  dispatch([
289
- (0, list_2.listChangeAction)(config.listId, config.action),
290
- (0, list_2.listLazyFetch)(config.listId),
295
+ (0, list_1.listChangeAction)(config.listId, config.action),
296
+ (0, list_1.listLazyFetch)(config.listId),
291
297
  ]);
292
298
  }
293
299
  }, [dispatch, config.listId, config.action, prevAction]);
@@ -298,14 +304,14 @@ function useList(config) {
298
304
  : exports.defaultConfig.autoDestroy;
299
305
  if (autoDestroy) {
300
306
  dispatch([
301
- (0, list_2.listDestroy)(config.listId),
307
+ (0, list_1.listDestroy)(config.listId),
302
308
  (0, form_1.formDestroy)(config.listId),
303
309
  ]);
304
310
  }
305
311
  });
306
312
  var onFetch = (0, react_1.useCallback)(function (params) {
307
313
  if (params === void 0) { params = {}; }
308
- dispatch((0, list_2.listFetch)(config.listId, params));
314
+ dispatch((0, list_1.listFetch)(config.listId, params));
309
315
  }, [config.listId, dispatch]);
310
316
  var onSort = (0, react_1.useCallback)(function (value) {
311
317
  dispatch((0, form_1.formChange)(formId, sort.attribute, value));
@@ -37,9 +37,9 @@ 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_1 = __importStar(require("react"));
41
40
  var hooks_1 = require("@steroidsjs/core/hooks");
42
41
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
42
+ var react_1 = __importStar(require("react"));
43
43
  var react_use_1 = require("react-use");
44
44
  function useListField(props) {
45
45
  var components = (0, hooks_1.useComponents)();
@@ -6,9 +6,9 @@ exports.__esModule = true;
6
6
  /* eslint-disable consistent-return */
7
7
  /* eslint-disable no-return-assign */
8
8
  /* eslint-disable no-unused-expressions */
9
- var react_1 = require("react");
10
9
  var debounce_1 = __importDefault(require("lodash-es/debounce"));
11
10
  var isNull_1 = __importDefault(require("lodash-es/isNull"));
11
+ var react_1 = require("react");
12
12
  var DEFAULT_DEBOUNCE_DELAY_MS = 300;
13
13
  function useSaveCursorPosition(config) {
14
14
  var _a, _b, _c;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
1
  import { IButtonProps } from '@steroidsjs/core/ui/form/Button/Button';
2
+ import React from 'react';
3
3
  export interface ITreeItem extends IButtonProps {
4
4
  /**
5
5
  * Идентификатор узла
package/hooks/useTree.js CHANGED
@@ -14,15 +14,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
16
  exports.__esModule = true;
17
- var react_1 = require("react");
18
- var isString_1 = __importDefault(require("lodash-es/isString"));
19
- var omit_1 = __importDefault(require("lodash-es/omit"));
20
- var join_1 = __importDefault(require("lodash-es/join"));
21
- var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
22
17
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
18
+ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
23
19
  var isNil_1 = __importDefault(require("lodash-es/isNil"));
20
+ var isString_1 = __importDefault(require("lodash-es/isString"));
21
+ var join_1 = __importDefault(require("lodash-es/join"));
24
22
  var keys_1 = __importDefault(require("lodash-es/keys"));
23
+ var omit_1 = __importDefault(require("lodash-es/omit"));
25
24
  var pickBy_1 = __importDefault(require("lodash-es/pickBy"));
25
+ var react_1 = require("react");
26
26
  var react_use_1 = require("react-use");
27
27
  var useComponents_1 = __importDefault(require("./useComponents"));
28
28
  var useSelector_1 = __importDefault(require("./useSelector"));
@@ -124,7 +124,8 @@ function useTree(config) {
124
124
  // Выполняет поиск текущего роута в дереве: раскрывает дерево до элемента, делает элемент активным
125
125
  var onItemFocus = (0, react_1.useCallback)(function () {
126
126
  var currentRouteAsTreeItem = findChildById(items, selectedItemId, primaryKey);
127
- var currentRouteUniqueIdParts = currentRouteAsTreeItem.uniqueId.split(DOT_SEPARATOR); // Get all parent levels of item
127
+ // Get all parent levels of item
128
+ var currentRouteUniqueIdParts = currentRouteAsTreeItem.uniqueId.split(DOT_SEPARATOR);
128
129
  var itemsToExpand = {};
129
130
  var itemToExpandKey;
130
131
  currentRouteUniqueIdParts.forEach(function (item, index) {
@@ -3,8 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
- var react_1 = require("react");
7
6
  var uniqueId_1 = __importDefault(require("lodash-es/uniqueId"));
7
+ var react_1 = require("react");
8
8
  function useUniqueId(prefix) {
9
9
  var idRef = (0, react_1.useRef)('');
10
10
  if (!idRef.current) {
package/index.d.ts CHANGED
@@ -37,6 +37,55 @@ declare type ColorName =
37
37
  | 'basic'
38
38
  | string;
39
39
 
40
+ /**
41
+ * Название цвета для Alert и Notification
42
+ */
43
+ declare type AlertColorName =
44
+ | 'success'
45
+ | 'info'
46
+ | 'warning'
47
+ | 'error'
48
+ | 'default'
49
+ | string;
50
+
51
+ /**
52
+ * Название цвета для Button
53
+ */
54
+ declare type ButtonColorName =
55
+ | 'basic'
56
+ | 'primary'
57
+ | 'secondary'
58
+ | 'success'
59
+ | 'danger'
60
+ | 'warning'
61
+ | 'info'
62
+ | string;
63
+
64
+ /**
65
+ * Название цвета для Badge
66
+ */
67
+ declare type BadgeColorName =
68
+ | 'primary'
69
+ | 'secondary'
70
+ | 'success'
71
+ | 'danger'
72
+ | 'warning'
73
+ | 'info'
74
+ | string;
75
+
76
+ /**
77
+ * Название цвета для Text, Title
78
+ */
79
+ declare type TypographyColorName =
80
+ | 'primary'
81
+ | 'secondary'
82
+ | 'success'
83
+ | 'danger'
84
+ | 'warning'
85
+ | 'info'
86
+ | 'text-color'
87
+ | string;
88
+
40
89
  /**
41
90
  * Уникальный ключ. ID, UUID или другое
42
91
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.92",
3
+ "version": "3.0.94",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -41,8 +41,8 @@
41
41
  "load-js": "^3.0.3",
42
42
  "lodash": "^4.17.21",
43
43
  "lodash-es": "^4.17.21",
44
- "path-to-regexp": "^1.7.0",
45
- "qs": "^6.14.1",
44
+ "path-to-regexp": "1.9.0",
45
+ "qs": "^6.15.0",
46
46
  "react": "^18.2.0",
47
47
  "react-click-outside": "^3.0.1",
48
48
  "react-day-picker": "^8.7.1",
@@ -64,7 +64,7 @@
64
64
  "@babel/preset-env": "^7.13.15",
65
65
  "@babel/preset-react": "^7.13.13",
66
66
  "@babel/preset-typescript": "^7.13.0",
67
- "@steroidsjs/eslint-config": "^2.1.6",
67
+ "@steroidsjs/eslint-config": "^3.0.5",
68
68
  "@testing-library/dom": "^8.20.0",
69
69
  "@testing-library/jest-dom": "^5.16.5",
70
70
  "@testing-library/react": "^13.4.0",
@@ -1,14 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
- import { IHttpComponent } from '../components/HttpComponent';
3
+ import { IClientStorageComponent } from '../components/ClientStorageComponent';
4
4
  import { IHtmlComponent } from '../components/HtmlComponent';
5
- import { IWebSocketComponent } from '../components/WebSocketComponent';
5
+ import { IHttpComponent } from '../components/HttpComponent';
6
+ import { ILocaleComponent } from '../components/LocaleComponent';
6
7
  import { IMetaComponent } from '../components/MetaComponent';
8
+ import { IResourceComponent } from '../components/ResourceComponent';
7
9
  import { IStoreComponent } from '../components/StoreComponent';
8
- import { IClientStorageComponent } from '../components/ClientStorageComponent';
9
- import { ILocaleComponent } from '../components/LocaleComponent';
10
10
  import { IUiApplicationComponent } from '../components/UiComponent';
11
- import { IResourceComponent } from '../components/ResourceComponent';
11
+ import { IWebSocketComponent } from '../components/WebSocketComponent';
12
12
  declare global {
13
13
  interface Window {
14
14
  SteroidsComponents: IComponents;
@@ -4,12 +4,16 @@ import { StaticRouterContext } from 'react-router';
4
4
  export interface IPreloadedData {
5
5
  [configId: string]: any;
6
6
  }
7
+ export interface IPreloadedErrors {
8
+ [configId: string]: any;
9
+ }
7
10
  export interface ISsr {
8
11
  history?: {
9
12
  initialEntries: string[];
10
13
  };
11
14
  staticContext?: StaticRouterContext;
12
15
  preloadedData?: IPreloadedData;
16
+ preloadedErrors?: IPreloadedErrors;
13
17
  }
14
18
  export declare const SsrProviderContext: React.Context<ISsr>;
15
19
  export interface ISsrProviderProps extends ISsr, PropsWithChildren<any> {
@@ -25,12 +25,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  exports.__esModule = true;
26
26
  exports.SsrProviderContext = void 0;
27
27
  var React = __importStar(require("react"));
28
+ var react_1 = require("react");
28
29
  exports.SsrProviderContext = React.createContext(null);
29
30
  function SsrProvider(props) {
30
- return (React.createElement(exports.SsrProviderContext.Provider, { value: {
31
- history: props.history,
32
- staticContext: props.staticContext,
33
- preloadedData: props.preloadedData
34
- } }, props.children));
31
+ var value = (0, react_1.useMemo)(function () { return ({
32
+ history: props.history,
33
+ staticContext: props.staticContext,
34
+ preloadedData: props.preloadedData
35
+ }); }, [props.history, props.preloadedData, props.staticContext]);
36
+ return (React.createElement(exports.SsrProviderContext.Provider, { value: value }, props.children));
35
37
  }
36
38
  exports["default"] = SsrProvider;
@@ -1,4 +1,4 @@
1
- import ScreenProvider from './ScreenProvider';
2
1
  import ComponentsProvider from './ComponentsProvider';
2
+ import ScreenProvider from './ScreenProvider';
3
3
  import SsrProvider from './SsrProvider';
4
4
  export { SsrProvider, ScreenProvider, ComponentsProvider, };
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  exports.__esModule = true;
6
6
  exports.ComponentsProvider = exports.ScreenProvider = exports.SsrProvider = void 0;
7
- var ScreenProvider_1 = __importDefault(require("./ScreenProvider"));
8
- exports.ScreenProvider = ScreenProvider_1["default"];
9
7
  var ComponentsProvider_1 = __importDefault(require("./ComponentsProvider"));
10
8
  exports.ComponentsProvider = ComponentsProvider_1["default"];
9
+ var ScreenProvider_1 = __importDefault(require("./ScreenProvider"));
10
+ exports.ScreenProvider = ScreenProvider_1["default"];
11
11
  var SsrProvider_1 = __importDefault(require("./SsrProvider"));
12
12
  exports.SsrProvider = SsrProvider_1["default"];
package/reducers/auth.js CHANGED
@@ -33,6 +33,7 @@ var initialState = {
33
33
  user: null,
34
34
  data: null
35
35
  };
36
+ // eslint-disable-next-line default-param-last
36
37
  exports["default"] = (function (state, action) {
37
38
  var _a;
38
39
  if (state === void 0) { state = initialState; }
@@ -15,8 +15,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  exports.__esModule = true;
17
17
  exports.getDataProviderItems = exports.getModel = exports.getEnumLabels = exports.isMetaFetched = exports.normalizeName = void 0;
18
- var isString_1 = __importDefault(require("lodash-es/isString"));
19
18
  var get_1 = __importDefault(require("lodash-es/get"));
19
+ var isString_1 = __importDefault(require("lodash-es/isString"));
20
20
  var fields_1 = require("../actions/fields");
21
21
  var initialState = {
22
22
  props: {},
@@ -25,6 +25,7 @@ var initialState = {
25
25
  };
26
26
  var normalizeName = function (name) { return name.replace(/\\/g, '.').replace(/^\./, ''); };
27
27
  exports.normalizeName = normalizeName;
28
+ // eslint-disable-next-line default-param-last
28
29
  exports["default"] = (function (state, action) {
29
30
  var _a;
30
31
  if (state === void 0) { state = initialState; }
package/reducers/form.js CHANGED
@@ -15,12 +15,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  exports.__esModule = true;
17
17
  exports.getFormValues = exports.formSelector = exports.reducerItem = void 0;
18
+ var dot_prop_immutable_1 = require("dot-prop-immutable");
19
+ var cloneDeep_1 = __importDefault(require("lodash-es/cloneDeep"));
18
20
  var get_1 = __importDefault(require("lodash-es/get"));
21
+ var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
19
22
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
20
- var cloneDeep_1 = __importDefault(require("lodash-es/cloneDeep"));
21
23
  var isObject_1 = __importDefault(require("lodash-es/isObject"));
22
- var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
23
- var dot_prop_immutable_1 = require("dot-prop-immutable");
24
24
  var form_1 = require("../actions/form");
25
25
  /**
26
26
  * Редьюрес для одной формы. Используется как для Redux, так и для React Reducer
@@ -76,6 +76,7 @@ function reducerItem(state, action) {
76
76
  }
77
77
  exports.reducerItem = reducerItem;
78
78
  var initialState = {};
79
+ // eslint-disable-next-line default-param-last
79
80
  exports["default"] = (function (state, action) {
80
81
  if (state === void 0) { state = initialState; }
81
82
  if (action.formId) {
@@ -2,8 +2,8 @@ import auth from './auth';
2
2
  import fields from './fields';
3
3
  import form from './form';
4
4
  import list from './list';
5
- import notifications from './notifications';
6
5
  import modal from './modal';
6
+ import notifications from './notifications';
7
7
  import router from './router';
8
8
  export { form, auth, fields, list, notifications, modal, router, };
9
9
  declare const _default: (asyncReducers: any) => import("redux").Reducer<import("redux").CombinedState<{
package/reducers/index.js CHANGED
@@ -24,10 +24,10 @@ var form_1 = __importDefault(require("./form"));
24
24
  exports.form = form_1["default"];
25
25
  var list_1 = __importDefault(require("./list"));
26
26
  exports.list = list_1["default"];
27
- var notifications_1 = __importDefault(require("./notifications"));
28
- exports.notifications = notifications_1["default"];
29
27
  var modal_1 = __importDefault(require("./modal"));
30
28
  exports.modal = modal_1["default"];
29
+ var notifications_1 = __importDefault(require("./notifications"));
30
+ exports.notifications = notifications_1["default"];
31
31
  var router_1 = __importDefault(require("./router"));
32
32
  exports.router = router_1["default"];
33
33
  exports["default"] = (function (asyncReducers) { return (0, redux_1.combineReducers)(__assign(__assign({ form: form_1["default"], auth: auth_1["default"], fields: fields_1["default"], list: list_1["default"], notifications: notifications_1["default"], modal: modal_1["default"] }, asyncReducers), { router: function (state, action) { return (0, router_1["default"])(asyncReducers.router ? asyncReducers.router(state, action) : {}, action); } })); });
package/reducers/list.js CHANGED
@@ -25,10 +25,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  var _a;
26
26
  exports.__esModule = true;
27
27
  exports.getCheckedIds = exports.isSelectedAll = exports.isSelected = exports.getSelectedIds = exports.getListItems = exports.getIds = exports.getList = exports.isListInitialized = void 0;
28
- var get_1 = __importDefault(require("lodash-es/get"));
29
- var isMatch_1 = __importDefault(require("lodash-es/isMatch"));
30
28
  var every_1 = __importDefault(require("lodash-es/every"));
31
29
  var extend_1 = __importDefault(require("lodash-es/extend"));
30
+ var get_1 = __importDefault(require("lodash-es/get"));
31
+ var isMatch_1 = __importDefault(require("lodash-es/isMatch"));
32
32
  var list_1 = require("../actions/list");
33
33
  var initialState = {
34
34
  lists: {},
@@ -41,7 +41,7 @@ var reducerMap = (_a = {},
41
41
  },
42
42
  _a[list_1.LIST_SET_ITEMS] = function (state, action) {
43
43
  var _a;
44
- return (__assign(__assign({}, state), { lists: __assign(__assign({}, state.lists), (_a = {}, _a[action.listId] = __assign(__assign({}, state.lists[action.listId]), { items: action.items }), _a)) }));
44
+ return (__assign(__assign({}, state), { lists: __assign(__assign({}, state.lists), (_a = {}, _a[action.listId] = __assign(__assign({}, state.lists[action.listId]), { items: action.items, sourceItems: action.items }), _a)) }));
45
45
  },
46
46
  _a[list_1.LIST_BEFORE_FETCH] = function (state, action) {
47
47
  var _a;
@@ -145,6 +145,7 @@ var reducerMap = (_a = {},
145
145
  return (__assign(__assign({}, state), { lists: __assign(__assign({}, state.lists), (_a = {}, _a[action.listId] = __assign(__assign({}, state.lists[action.listId]), { action: action.action }), _a)) }));
146
146
  },
147
147
  _a);
148
+ // eslint-disable-next-line default-param-last
148
149
  exports["default"] = (function (state, action) {
149
150
  if (state === void 0) { state = initialState; }
150
151
  return reducerMap[action.type]
package/reducers/modal.js CHANGED
@@ -24,13 +24,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  };
25
25
  exports.__esModule = true;
26
26
  exports.getOpened = exports.MODAL_DEFAULT_GROUP = void 0;
27
- var get_1 = __importDefault(require("lodash-es/get"));
28
27
  var dot_prop_immutable_1 = require("dot-prop-immutable");
28
+ var get_1 = __importDefault(require("lodash-es/get"));
29
29
  var modal_1 = require("../actions/modal");
30
30
  exports.MODAL_DEFAULT_GROUP = 'modal';
31
31
  var initialState = {
32
32
  opened: {}
33
33
  };
34
+ // eslint-disable-next-line default-param-last
34
35
  exports["default"] = (function (state, action) {
35
36
  if (state === void 0) { state = initialState; }
36
37
  switch (action.type) {
@@ -17,6 +17,7 @@ var initialState = {
17
17
  items: [],
18
18
  position: ''
19
19
  };
20
+ // eslint-disable-next-line default-param-last
20
21
  exports["default"] = (function (state, action) {
21
22
  if (state === void 0) { state = initialState; }
22
23
  switch (action.type) {
@@ -26,7 +27,7 @@ exports["default"] = (function (state, action) {
26
27
  .concat([
27
28
  {
28
29
  id: action.id,
29
- level: action.level || 'info',
30
+ type: action.notificationType || 'info',
30
31
  message: action.message,
31
32
  isClosing: false,
32
33
  position: action.position
@@ -39,15 +39,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  var _a;
40
40
  exports.__esModule = true;
41
41
  exports.getNavItems = exports.getRouteParent = exports.getRouteChildren = exports.getRouteBreadcrumbs = exports.getRouteParam = exports.getRouteParams = exports.getRouteProp = exports.getRoute = exports.getRouteId = exports.getRoutesMap = exports.getActiveRouteIds = exports.getRouterParams = exports.isRouterInitialized = exports.getMatch = exports.findRecursive = exports.normalizeRoutes = exports.checkIsActive = exports.buildUrl = void 0;
42
- var path_to_regexp_1 = require("path-to-regexp");
43
- var react_router_1 = require("react-router");
44
- var queryString = __importStar(require("qs"));
45
42
  var get_1 = __importDefault(require("lodash-es/get"));
46
43
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
47
44
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
48
- var pick_1 = __importDefault(require("lodash-es/pick"));
49
- var isObject_1 = __importDefault(require("lodash-es/isObject"));
50
45
  var isFunction_1 = __importDefault(require("lodash-es/isFunction"));
46
+ var isObject_1 = __importDefault(require("lodash-es/isObject"));
47
+ var pick_1 = __importDefault(require("lodash-es/pick"));
48
+ var path_to_regexp_1 = require("path-to-regexp");
49
+ var queryString = __importStar(require("qs"));
50
+ var react_router_1 = require("react-router");
51
51
  var router_1 = require("../actions/router");
52
52
  var initialState = {
53
53
  location: null,
@@ -122,7 +122,9 @@ var normalizeRoutes = function (state, item, activeIds, routesMap) {
122
122
  items = Object.keys(item.items)
123
123
  .map(function (id) { return (0, exports.normalizeRoutes)(state, __assign(__assign({}, item.items[id]), { id: id }), activeIds, routesMap); });
124
124
  }
125
- var normalizedItem = __assign(__assign({}, item), { id: item.id, title: item.title || item.title === '' ? item.title : item.label, label: item.label || item.label === '' ? item.label : item.title, icon: item.icon || null, exact: !!item.exact, strict: !!item.strict, path: item.path || '', isVisible: item.isVisible !== false, isNavVisible: item.isNavVisible !== false, component: null, componentProps: null, roles: item.roles || [], items: items });
125
+ var normalizedItem = __assign(__assign({}, item), { id: item.id, title: item.title || item.title === '' ? item.title : item.label, label: item.label || item.label === '' ? item.label : item.title, icon: item.icon || null, exact: !!item.exact, strict: !!item.strict, path: item.path || '', isVisible: item.isVisible !== false, isNavVisible: item.isNavVisible !== false,
126
+ // Do not store component class in redux
127
+ component: null, componentProps: null, roles: item.roles || [], items: items });
126
128
  routesMap[normalizedItem.id] = normalizedItem;
127
129
  if ((0, exports.checkIsActive)(state, normalizedItem)) {
128
130
  activeIds.push(normalizedItem.id);
@@ -176,6 +178,7 @@ var reducerMap = (_a = {},
176
178
  },
177
179
  _a[router_1.ROUTER_SET_PARAMS] = function (state, action) { return (__assign(__assign({}, state), { params: __assign(__assign(__assign({}, state.params), state.location.query), action.params) })); },
178
180
  _a);
181
+ // eslint-disable-next-line default-param-last
179
182
  exports["default"] = (function (state, action) {
180
183
  if (state === void 0) { state = initialState; }
181
184
  return reducerMap[action.type]
@@ -197,6 +200,7 @@ var getRoute = function (state, routeId) {
197
200
  return (0, get_1["default"])(state.router, ['routesMap', routeId || (0, exports.getRouteId)(state)]) || null;
198
201
  };
199
202
  exports.getRoute = getRoute;
203
+ // eslint-disable-next-line default-param-last
200
204
  var getRouteProp = function (state, routeId, propName) {
201
205
  if (routeId === void 0) { routeId = null; }
202
206
  return (0, get_1["default"])((0, exports.getRoute)(state, routeId), propName) || null;
@@ -231,5 +235,7 @@ var getRouteParent = function (state, routeId, level) {
231
235
  };
232
236
  exports.getRouteParent = getRouteParent;
233
237
  // TODO levels...
234
- var getNavItems = function (state, routeId /*, level = 1*/) { return (0, exports.getRouteChildren)(state, routeId); };
238
+ var getNavItems = function (state,
239
+ /*, level = 1*/
240
+ routeId) { return (0, exports.getRouteChildren)(state, routeId); };
235
241
  exports.getNavItems = getNavItems;
@@ -1,3 +1,3 @@
1
- import AccordionItem from './AccordionItem';
2
1
  import Accordion from './Accordion';
2
+ import AccordionItem from './AccordionItem';
3
3
  export { AccordionItem, Accordion, };
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  exports.__esModule = true;
6
6
  exports.Accordion = exports.AccordionItem = void 0;
7
- var AccordionItem_1 = __importDefault(require("./AccordionItem"));
8
- exports.AccordionItem = AccordionItem_1["default"];
9
7
  var Accordion_1 = __importDefault(require("./Accordion"));
10
8
  exports.Accordion = Accordion_1["default"];
9
+ var AccordionItem_1 = __importDefault(require("./AccordionItem"));
10
+ exports.AccordionItem = AccordionItem_1["default"];
@@ -25,7 +25,7 @@ export interface IAlertProps extends IUiComponent {
25
25
  * Типы Оповещений
26
26
  * @example 'info'
27
27
  */
28
- type?: 'success' | 'info' | 'warning' | 'error' | 'default' | string;
28
+ type?: AlertColorName;
29
29
  /** Основное сообщения Оповещения
30
30
  * @example 'Sending is confirmed!'
31
31
  */
@@ -27,7 +27,7 @@ export interface IBadgeProps extends IUiComponent {
27
27
  * Тип badge
28
28
  * @example 'primary'
29
29
  */
30
- type: ColorName;
30
+ type: BadgeColorName;
31
31
  /**
32
32
  * Стиль скругления
33
33
  */
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  exports.__esModule = true;
6
- var react_1 = require("react");
7
6
  var dayjs_1 = __importDefault(require("dayjs"));
8
- var utc_1 = __importDefault(require("dayjs/plugin/utc"));
9
7
  var timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
8
+ var utc_1 = __importDefault(require("dayjs/plugin/utc"));
9
+ var react_1 = require("react");
10
10
  var hooks_1 = require("../../../hooks");
11
11
  var calendar_1 = require("../../../utils/calendar");
12
12
  dayjs_1["default"].extend(utc_1["default"]);