@plesk/ui-library 3.43.2 → 3.44.0

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 (287) hide show
  1. package/cjs/components/Action/Action.js +10 -3
  2. package/cjs/components/Alert/Alert.js +1 -0
  3. package/cjs/components/AutoClosable/AutoClosable.js +47 -61
  4. package/cjs/components/AuxiliaryActions/AuxiliaryActions.js +13 -4
  5. package/cjs/components/Button/Button.js +1 -0
  6. package/cjs/components/Card/Card.js +10 -15
  7. package/cjs/components/CardList/CardList.js +6 -9
  8. package/cjs/components/CardList/CardListToolbar.js +12 -18
  9. package/cjs/components/ClosingConfirmation/useClosingConfirmation.js +7 -11
  10. package/cjs/components/CodeEditor/CodeEditor.js +1 -2
  11. package/cjs/components/Columns/Columns.js +1 -2
  12. package/cjs/components/ComboBox/ComboBox.js +1 -2
  13. package/cjs/components/ComboBoxDropdown/ComboBoxDropdown.js +4 -2
  14. package/cjs/components/ComboBoxDropdown/index.js +1 -2
  15. package/cjs/components/Cuttable/Cuttable.js +6 -8
  16. package/cjs/components/Dialog/Dialog.js +17 -13
  17. package/cjs/components/Drawer/Drawer.js +14 -7
  18. package/cjs/components/Drawer/DrawerProgress.js +4 -6
  19. package/cjs/components/Dropdown/Dropdown.js +12 -9
  20. package/cjs/components/Dropdown/index.js +1 -2
  21. package/cjs/components/ExtendedStatusMessage/ExtendedStatusMessage.js +1 -0
  22. package/cjs/components/Figure/index.js +1 -2
  23. package/cjs/components/Form/Form.js +19 -20
  24. package/cjs/components/Form/index.js +1 -2
  25. package/cjs/components/FormField/FormField.js +77 -51
  26. package/cjs/components/FormField/index.js +1 -2
  27. package/cjs/components/FormFieldCheckbox/FormFieldCheckbox.js +6 -2
  28. package/cjs/components/FormFieldPassword/FormFieldPassword.js +18 -21
  29. package/cjs/components/FormFieldPassword/PasswordMeter.js +9 -15
  30. package/cjs/components/FormFieldPassword/estimatePassword.js +21 -33
  31. package/cjs/components/FormFieldRadioButtons/FormFieldRadioButtons.js +50 -44
  32. package/cjs/components/FormFieldSelect/FormFieldSelect.js +1 -1
  33. package/cjs/components/FormFieldText/FormFieldText.js +7 -1
  34. package/cjs/components/Heading/Heading.js +1 -2
  35. package/cjs/components/Hint/Hint.js +2 -1
  36. package/cjs/components/Icon/Icon.js +6 -0
  37. package/cjs/components/Icon/index.js +1 -2
  38. package/cjs/components/Icon/utils.js +17 -8
  39. package/cjs/components/InPlaceEdit/Editor.js +5 -8
  40. package/cjs/components/InPlaceEdit/InPlaceEdit.js +3 -5
  41. package/cjs/components/InputFile/InputFile.js +7 -9
  42. package/cjs/components/Item/Item.js +1 -2
  43. package/cjs/components/ItemList/ItemList.js +1 -2
  44. package/cjs/components/Layer/index.js +1 -2
  45. package/cjs/components/Layout/Layout.js +2 -2
  46. package/cjs/components/Link/Link.js +2 -0
  47. package/cjs/components/List/List.js +38 -45
  48. package/cjs/components/List/ListAction.js +1 -0
  49. package/cjs/components/List/ListActions.js +1 -0
  50. package/cjs/components/List/ListEmptyView.js +7 -10
  51. package/cjs/components/List/ListOperation.js +3 -12
  52. package/cjs/components/LocaleProvider/LocaleProvider.js +20 -12
  53. package/cjs/components/LocaleProvider/index.js +1 -2
  54. package/cjs/components/Media/Media.js +1 -2
  55. package/cjs/components/Menu/Menu.js +10 -8
  56. package/cjs/components/Menu/MenuBaseItem.js +1 -2
  57. package/cjs/components/Menu/MenuItem.js +2 -1
  58. package/cjs/components/Overlay/Overlay.js +2 -0
  59. package/cjs/components/Pagination/Pagination.js +6 -10
  60. package/cjs/components/Pagination/index.js +1 -2
  61. package/cjs/components/Popover/Popover.js +1 -1
  62. package/cjs/components/Popper/index.js +1 -2
  63. package/cjs/components/ProgressDialog/ProgressDialog.js +5 -7
  64. package/cjs/components/ProgressStep/ProgressStep.js +1 -2
  65. package/cjs/components/ProgressStep/index.js +1 -2
  66. package/cjs/components/Section/Section.js +87 -225
  67. package/cjs/components/{Dropdown/locale/en-US.js → Section/SectionContext.js} +4 -3
  68. package/cjs/components/Section/index.js +1 -2
  69. package/cjs/components/Section/useCollapsed.js +19 -0
  70. package/cjs/components/Section/useVertical.js +38 -0
  71. package/cjs/components/SegmentedControl/DropdownControl.js +1 -2
  72. package/cjs/components/SegmentedControl/SegmentedControl.js +1 -0
  73. package/cjs/components/SegmentedControl/index.js +1 -2
  74. package/cjs/components/Select/Select.js +10 -7
  75. package/cjs/components/Select/SelectControl.js +13 -3
  76. package/cjs/components/SplitButton/index.js +1 -2
  77. package/cjs/components/Spot/SpotPopup.js +3 -4
  78. package/cjs/components/Status/Status.js +1 -0
  79. package/cjs/components/Subnav/index.js +1 -2
  80. package/cjs/components/Tabs/SearchBar.js +1 -2
  81. package/cjs/components/Tabs/TabIcon.js +1 -2
  82. package/cjs/components/Tabs/TabList.js +30 -14
  83. package/cjs/components/Tabs/TabListItem.js +5 -1
  84. package/cjs/components/Tabs/Tabs.js +16 -12
  85. package/cjs/components/Tabs/useWidths.js +5 -5
  86. package/cjs/components/Toast/Toast.js +1 -0
  87. package/cjs/components/Toast/index.js +1 -2
  88. package/cjs/components/Toaster/GroupLabel.js +5 -3
  89. package/cjs/components/Toolbar/Toolbar.js +1 -2
  90. package/cjs/components/Toolbar/ToolbarGroup.js +1 -2
  91. package/cjs/components/Toolbar/ToolbarMenu.js +1 -2
  92. package/cjs/components/Tooltip/Tooltip.js +11 -4
  93. package/cjs/components/Translate/Translate.js +13 -3
  94. package/cjs/components/Translate/index.js +28 -3
  95. package/cjs/components/Translate/locale.js +25 -0
  96. package/cjs/components/VerticalContext/index.js +1 -2
  97. package/cjs/components/index.js +16 -3
  98. package/cjs/hooks/useResizeObserver.js +8 -2
  99. package/cjs/index.js +1 -1
  100. package/cjs/locales/ar.js +124 -0
  101. package/cjs/locales/ca-ES.js +124 -0
  102. package/cjs/locales/cs-CZ.js +124 -0
  103. package/cjs/locales/da-DK.js +124 -0
  104. package/cjs/locales/de-DE.js +124 -0
  105. package/cjs/locales/el-GR.js +124 -0
  106. package/cjs/locales/en-US.js +124 -0
  107. package/cjs/locales/es-ES.js +124 -0
  108. package/cjs/locales/fi-FI.js +124 -0
  109. package/cjs/locales/fr-FR.js +124 -0
  110. package/cjs/locales/he-IL.js +124 -0
  111. package/cjs/locales/hu-HU.js +124 -0
  112. package/cjs/locales/id-ID.js +124 -0
  113. package/cjs/locales/index.js +172 -0
  114. package/cjs/locales/it-IT.js +124 -0
  115. package/cjs/locales/ja-JP.js +124 -0
  116. package/cjs/locales/ko-KR.js +124 -0
  117. package/cjs/locales/ms-MY.js +124 -0
  118. package/cjs/locales/nb-NO.js +124 -0
  119. package/cjs/locales/nl-NL.js +124 -0
  120. package/cjs/locales/pl-PL.js +124 -0
  121. package/cjs/locales/pt-BR.js +124 -0
  122. package/cjs/locales/pt-PT.js +124 -0
  123. package/cjs/locales/ro-RO.js +124 -0
  124. package/cjs/locales/ru-RU.js +124 -0
  125. package/cjs/locales/sv-SE.js +124 -0
  126. package/cjs/locales/th-TH.js +124 -0
  127. package/cjs/locales/tl-PH.js +124 -0
  128. package/cjs/locales/tr-TR.js +124 -0
  129. package/cjs/locales/uk-UA.js +124 -0
  130. package/cjs/locales/vi-VN.js +124 -0
  131. package/cjs/locales/zh-CN.js +124 -0
  132. package/cjs/locales/zh-TW.js +124 -0
  133. package/cjs/utils.js +17 -2
  134. package/dist/plesk-ui-library-rtl.css +1 -1
  135. package/dist/plesk-ui-library-rtl.css.map +1 -1
  136. package/dist/plesk-ui-library.css +1 -1
  137. package/dist/plesk-ui-library.css.map +1 -1
  138. package/dist/plesk-ui-library.js +5517 -1054
  139. package/dist/plesk-ui-library.js.map +1 -1
  140. package/dist/plesk-ui-library.min.js +6 -6
  141. package/dist/plesk-ui-library.min.js.map +1 -1
  142. package/esm/components/Action/Action.js +9 -1
  143. package/esm/components/Alert/Alert.js +1 -0
  144. package/esm/components/AutoClosable/AutoClosable.js +48 -62
  145. package/esm/components/AuxiliaryActions/AuxiliaryActions.js +13 -4
  146. package/esm/components/Button/Button.js +1 -0
  147. package/esm/components/Card/Card.js +9 -13
  148. package/esm/components/CardList/CardList.js +5 -7
  149. package/esm/components/CardList/CardListToolbar.js +11 -16
  150. package/esm/components/ClosingConfirmation/useClosingConfirmation.js +7 -11
  151. package/esm/components/ComboBoxDropdown/ComboBoxDropdown.js +3 -0
  152. package/esm/components/Cuttable/Cuttable.js +6 -8
  153. package/esm/components/Dialog/Dialog.js +18 -12
  154. package/esm/components/Drawer/Drawer.js +15 -8
  155. package/esm/components/Drawer/DrawerProgress.js +3 -4
  156. package/esm/components/Dropdown/Dropdown.js +11 -9
  157. package/esm/components/ExtendedStatusMessage/ExtendedStatusMessage.js +1 -0
  158. package/esm/components/Form/Form.js +18 -18
  159. package/esm/components/FormField/FormField.js +77 -51
  160. package/esm/components/FormFieldCheckbox/FormFieldCheckbox.js +6 -2
  161. package/esm/components/FormFieldPassword/FormFieldPassword.js +18 -21
  162. package/esm/components/FormFieldPassword/PasswordMeter.js +8 -13
  163. package/esm/components/FormFieldPassword/estimatePassword.js +21 -32
  164. package/esm/components/FormFieldRadioButtons/FormFieldRadioButtons.js +49 -42
  165. package/esm/components/FormFieldSelect/FormFieldSelect.js +1 -1
  166. package/esm/components/FormFieldText/FormFieldText.js +7 -1
  167. package/esm/components/Hint/Hint.js +2 -1
  168. package/esm/components/Icon/Icon.js +6 -0
  169. package/esm/components/Icon/utils.js +16 -6
  170. package/esm/components/InPlaceEdit/Editor.js +5 -8
  171. package/esm/components/InPlaceEdit/InPlaceEdit.js +3 -5
  172. package/esm/components/InputFile/InputFile.js +7 -9
  173. package/esm/components/Layout/Layout.js +2 -2
  174. package/esm/components/Link/Link.js +2 -0
  175. package/esm/components/List/List.js +37 -43
  176. package/esm/components/List/ListAction.js +1 -0
  177. package/esm/components/List/ListActions.js +1 -0
  178. package/esm/components/List/ListEmptyView.js +7 -10
  179. package/esm/components/List/ListOperation.js +3 -12
  180. package/esm/components/LocaleProvider/LocaleProvider.js +18 -11
  181. package/esm/components/Menu/Menu.js +10 -8
  182. package/esm/components/Menu/MenuItem.js +2 -1
  183. package/esm/components/Overlay/Overlay.js +2 -0
  184. package/esm/components/Pagination/Pagination.js +6 -10
  185. package/esm/components/Popover/Popover.js +1 -1
  186. package/esm/components/ProgressDialog/ProgressDialog.js +5 -7
  187. package/esm/components/Section/Section.js +88 -224
  188. package/esm/components/Section/SectionContext.js +5 -0
  189. package/esm/components/Section/useCollapsed.js +12 -0
  190. package/esm/components/Section/useVertical.js +30 -0
  191. package/esm/components/SegmentedControl/SegmentedControl.js +1 -0
  192. package/esm/components/Select/Select.js +10 -6
  193. package/esm/components/Select/SelectControl.js +14 -4
  194. package/esm/components/Spot/SpotPopup.js +3 -4
  195. package/esm/components/Status/Status.js +1 -0
  196. package/esm/components/Tabs/TabList.js +29 -12
  197. package/esm/components/Tabs/TabListItem.js +5 -1
  198. package/esm/components/Tabs/Tabs.js +17 -13
  199. package/esm/components/Tabs/useWidths.js +5 -5
  200. package/esm/components/Toast/Toast.js +1 -0
  201. package/esm/components/Toaster/GroupLabel.js +5 -3
  202. package/esm/components/Tooltip/Tooltip.js +11 -4
  203. package/esm/components/Translate/Translate.js +11 -2
  204. package/esm/components/Translate/index.js +3 -2
  205. package/esm/components/Translate/locale.js +15 -0
  206. package/esm/components/index.js +1 -1
  207. package/esm/hooks/useResizeObserver.js +8 -2
  208. package/esm/index.js +1 -1
  209. package/esm/locales/ar.js +119 -0
  210. package/esm/locales/ca-ES.js +119 -0
  211. package/esm/locales/cs-CZ.js +119 -0
  212. package/esm/locales/da-DK.js +119 -0
  213. package/esm/locales/de-DE.js +119 -0
  214. package/esm/locales/el-GR.js +119 -0
  215. package/esm/locales/en-US.js +119 -0
  216. package/esm/locales/es-ES.js +119 -0
  217. package/esm/locales/fi-FI.js +119 -0
  218. package/esm/locales/fr-FR.js +119 -0
  219. package/esm/locales/he-IL.js +119 -0
  220. package/esm/locales/hu-HU.js +119 -0
  221. package/esm/locales/id-ID.js +119 -0
  222. package/esm/locales/index.js +165 -0
  223. package/esm/locales/it-IT.js +119 -0
  224. package/esm/locales/ja-JP.js +119 -0
  225. package/esm/locales/ko-KR.js +119 -0
  226. package/esm/locales/ms-MY.js +119 -0
  227. package/esm/locales/nb-NO.js +119 -0
  228. package/esm/locales/nl-NL.js +119 -0
  229. package/esm/locales/pl-PL.js +119 -0
  230. package/esm/locales/pt-BR.js +119 -0
  231. package/esm/locales/pt-PT.js +119 -0
  232. package/esm/locales/ro-RO.js +119 -0
  233. package/esm/locales/ru-RU.js +119 -0
  234. package/esm/locales/sv-SE.js +119 -0
  235. package/esm/locales/th-TH.js +119 -0
  236. package/esm/locales/tl-PH.js +119 -0
  237. package/esm/locales/tr-TR.js +119 -0
  238. package/esm/locales/uk-UA.js +119 -0
  239. package/esm/locales/vi-VN.js +119 -0
  240. package/esm/locales/zh-CN.js +119 -0
  241. package/esm/locales/zh-TW.js +119 -0
  242. package/esm/utils.js +14 -0
  243. package/package.json +4 -4
  244. package/styleguide/build/bundle.cf3363eb.js +2 -0
  245. package/styleguide/index.html +2 -2
  246. package/types/components/AutoClosable/AutoClosable.d.ts +5 -37
  247. package/types/components/Button/Button.d.ts +2 -2
  248. package/types/components/ComboBoxDropdown/ComboBoxDropdown.d.ts +2 -1
  249. package/types/components/Form/types.d.ts +2 -0
  250. package/types/components/FormField/FormField.d.ts +6 -0
  251. package/types/components/FormFieldSelect/FormFieldSelect.d.ts +1 -1
  252. package/types/components/Hint/Hint.d.ts +11 -8
  253. package/types/components/Icon/Icon.d.ts +5 -0
  254. package/types/components/Input/Input.d.ts +2 -2
  255. package/types/components/LocaleProvider/LocaleProvider.d.ts +3 -2
  256. package/types/components/Menu/Menu.d.ts +5 -0
  257. package/types/components/Menu/MenuItem.d.ts +6 -1
  258. package/types/components/Overlay/Overlay.d.ts +4 -0
  259. package/types/components/Popover/Popover.d.ts +1 -1
  260. package/types/components/Section/Section.d.ts +3 -46
  261. package/types/components/Section/SectionContext.d.ts +5 -0
  262. package/types/components/Section/useCollapsed.d.ts +1 -0
  263. package/types/components/Section/useVertical.d.ts +2 -0
  264. package/types/components/Select/SelectControl.d.ts +2 -0
  265. package/types/components/Tabs/TabList.d.ts +3 -1
  266. package/types/components/Tabs/TabListItem.d.ts +4 -1
  267. package/types/components/Tabs/useWidths.d.ts +2 -2
  268. package/types/components/Tooltip/Tooltip.d.ts +1 -0
  269. package/types/components/Translate/Translate.d.ts +7 -1
  270. package/types/components/Translate/index.d.ts +2 -1
  271. package/types/components/Translate/locale.d.ts +4 -0
  272. package/types/components/index.d.ts +1 -1
  273. package/types/hooks/useResizeObserver.d.ts +2 -1
  274. package/types/locales/index.d.ts +10 -0
  275. package/types/utils.d.ts +3 -0
  276. package/cjs/components/ClosingConfirmation/locale/en-US.js +0 -12
  277. package/cjs/components/FormFieldPassword/locale/en-US.js +0 -33
  278. package/cjs/components/InPlaceEdit/locale/en-US.js +0 -12
  279. package/cjs/components/InputFile/locale/en-US.js +0 -10
  280. package/esm/components/ClosingConfirmation/locale/en-US.js +0 -7
  281. package/esm/components/Dropdown/locale/en-US.js +0 -5
  282. package/esm/components/FormFieldPassword/locale/en-US.js +0 -28
  283. package/esm/components/InPlaceEdit/locale/en-US.js +0 -7
  284. package/esm/components/InputFile/locale/en-US.js +0 -5
  285. package/styleguide/build/bundle.2360aa9e.js +0 -2
  286. package/types/components/InPlaceEdit/locale/en-US.d.ts +0 -6
  287. /package/styleguide/build/{bundle.2360aa9e.js.LICENSE.txt → bundle.cf3363eb.js.LICENSE.txt} +0 -0
@@ -25,6 +25,7 @@ const ListAction = _ref => {
25
25
  }
26
26
  return /*#__PURE__*/_jsx(MenuItem, {
27
27
  tooltip: tooltip,
28
+ menuRole: "listbox",
28
29
  ...props,
29
30
  children: children
30
31
  });
@@ -69,6 +69,7 @@ const ListActions = _ref => {
69
69
  secondaryDropdown = /*#__PURE__*/_jsx(Dropdown, {
70
70
  className: `${baseClassName}__menu`,
71
71
  menu: /*#__PURE__*/_jsx(Menu, {
72
+ role: "listbox",
72
73
  children: secondaryItems
73
74
  }),
74
75
  menuPlacement: "bottom-end",
@@ -2,7 +2,7 @@
2
2
 
3
3
  import classNames from 'classnames';
4
4
  import Heading from '../Heading';
5
- import Translate from '../Translate';
5
+ import { InternalTranslate } from '../Translate';
6
6
  import empty from './images/default.png';
7
7
  import filtered from './images/filtered.png';
8
8
  import { CLS_PREFIX } from '../../constants';
@@ -27,12 +27,10 @@ const createImage = (baseClassName, image, reason) => {
27
27
  };
28
28
  const createTitle = (baseClassName, title, reason) => {
29
29
  if (title === undefined) {
30
- title = reason === 'filtered' ? /*#__PURE__*/_jsx(Translate, {
31
- content: "ListEmptyView.filteredTitle",
32
- fallback: "Could not find any items matching the filter"
33
- }) : /*#__PURE__*/_jsx(Translate, {
34
- content: "ListEmptyView.emptyTitle",
35
- fallback: "Looks like there's nothing here"
30
+ title = reason === 'filtered' ? /*#__PURE__*/_jsx(InternalTranslate, {
31
+ content: "ListEmptyView.filteredTitle"
32
+ }) : /*#__PURE__*/_jsx(InternalTranslate, {
33
+ content: "ListEmptyView.emptyTitle"
36
34
  });
37
35
  }
38
36
  return /*#__PURE__*/_jsx(Heading, {
@@ -46,9 +44,8 @@ const createDescription = (baseClassName, description, reason) => {
46
44
  return null;
47
45
  }
48
46
  if (description === undefined && reason === 'filtered') {
49
- description = /*#__PURE__*/_jsx(Translate, {
50
- content: "ListEmptyView.filteredDescription",
51
- fallback: "Refine your query or remove some of the criteria from the filter and try again."
47
+ description = /*#__PURE__*/_jsx(InternalTranslate, {
48
+ content: "ListEmptyView.filteredDescription"
52
49
  });
53
50
  }
54
51
  return /*#__PURE__*/_jsx("div", {
@@ -4,7 +4,7 @@ import { useContext, useState, useRef, cloneElement, isValidElement } from 'reac
4
4
  import { safeInvoke } from '../utils';
5
5
  import ListOperationContext from './ListOperationContext';
6
6
  import Popover from '../Popover';
7
- import Translate from '../Translate';
7
+ import { InternalTranslate } from '../Translate';
8
8
  import Button from '../Button';
9
9
  import Media from '../Media';
10
10
  import Icon from '../Icon';
@@ -16,18 +16,9 @@ const toBold = value => value === undefined ? undefined : /*#__PURE__*/_jsx(Text
16
16
  children: value
17
17
  });
18
18
  const getDefaultText = key => {
19
- let fallback;
20
- switch (key) {
21
- case 'cancelButton':
22
- fallback = 'Cancel';
23
- break;
24
- default:
25
- throw new Error('Unknown key');
26
- }
27
19
  const content = `ListOperation.${key}`;
28
- return /*#__PURE__*/_jsx(Translate, {
29
- content: content,
30
- fallback: fallback
20
+ return /*#__PURE__*/_jsx(InternalTranslate, {
21
+ content: content
31
22
  });
32
23
  };
33
24
  /**
@@ -3,6 +3,9 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
 
4
4
  import { PureComponent, isValidElement, cloneElement, createContext, useContext, useCallback, useMemo } from 'react';
5
5
  import PropTypes from 'prop-types';
6
+ import { getLocaleMessages } from '../Translate';
7
+
8
+ // eslint-disable-next-line max-params
6
9
  import { jsx as _jsx } from "react/jsx-runtime";
7
10
  const applyParams = function (message) {
8
11
  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -43,14 +46,18 @@ const getMessage = (fullKey, messages) => {
43
46
  return messages[fullKey];
44
47
  };
45
48
  const createTranslate = messages =>
46
- // eslint-disable-next-line default-param-last
49
+ // eslint-disable-next-line default-param-last,max-params
47
50
  function (key) {
48
51
  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
49
52
  let fallback = arguments.length > 2 ? arguments[2] : undefined;
53
+ let defaultMessages = arguments.length > 3 ? arguments[3] : undefined;
50
54
  if (typeof key !== 'string') {
51
55
  return '';
52
56
  }
53
57
  let message = getMessage(key, messages);
58
+ if (typeof message !== 'string' && defaultMessages) {
59
+ message = getMessage(key, defaultMessages);
60
+ }
54
61
  if (typeof message !== 'string') {
55
62
  message = typeof fallback === 'string' ? fallback : `[${key}]`;
56
63
  }
@@ -88,18 +95,18 @@ _defineProperty(LocaleProvider, "childContextTypes", {
88
95
  export default LocaleProvider;
89
96
  export const useTranslate = namespace => {
90
97
  const context = useContext(LocaleContext);
91
- return useCallback((key, params, fallback) => {
92
- if (context) {
93
- const {
94
- locale: {
95
- lmsg
96
- }
97
- } = context;
98
- return lmsg(namespace ? `${namespace}.${key}` : key, params, fallback);
99
- }
100
- return typeof fallback === 'string' ? applyParams(fallback, params) : `[${key}]`;
98
+ return useCallback(
99
+ // eslint-disable-next-line max-params
100
+ (key, params, fallback, defaultMessages) => {
101
+ const lmsg = context?.locale.lmsg ?? createTranslate({});
102
+ return lmsg(namespace ? `${namespace}.${key}` : key, params, fallback, defaultMessages);
101
103
  }, [context, namespace]);
102
104
  };
105
+ export const useInternalTranslate = namespace => {
106
+ const translate = useTranslate(namespace);
107
+ const defaultMessages = getLocaleMessages();
108
+ return (key, params, fallback) => translate(key, params, fallback, defaultMessages);
109
+ };
103
110
  export const LocaleBetaProvider = _ref => {
104
111
  let {
105
112
  messages,
@@ -35,6 +35,7 @@ const Menu = /*#__PURE__*/forwardRef(function Menu(_ref, ref) {
35
35
  onFocus,
36
36
  autoFocus,
37
37
  overlay = false,
38
+ role: menuRole = 'menu',
38
39
  baseClassName = `${CLS_PREFIX}menu`,
39
40
  ...props
40
41
  } = _ref;
@@ -44,7 +45,7 @@ const Menu = /*#__PURE__*/forwardRef(function Menu(_ref, ref) {
44
45
  focusPrev,
45
46
  focusFirst,
46
47
  focusLast
47
- } = useMemo(() => createFocusManager(rootRef, node => (node.getAttribute('role') === 'menuitem' || node.getAttribute('role') === 'menuitemcheckbox') && node.getAttribute('aria-disabled') !== 'true'), []);
48
+ } = useMemo(() => createFocusManager(rootRef, node => (menuRole === 'menu' && (node.getAttribute('role') === 'menuitem' || node.getAttribute('role') === 'menuitemcheckbox') || menuRole === 'listbox' && node.getAttribute('role') === 'option') && node.getAttribute('aria-disabled') !== 'true'), [menuRole]);
48
49
  const handleKeyDown = e => {
49
50
  switch (e.key) {
50
51
  case 'ArrowUp':
@@ -79,26 +80,27 @@ const Menu = /*#__PURE__*/forwardRef(function Menu(_ref, ref) {
79
80
  if (! /*#__PURE__*/isValidElement(child)) {
80
81
  return child;
81
82
  }
82
- const props = {
83
+ const itemProps = {
83
84
  tabIndex: -1
84
85
  };
85
86
  if (onItemClick) {
86
- props.onClick = wrapFunction(child.props.onClick, onItemClick.bind(null, child, index));
87
+ itemProps.onClick = wrapFunction(child.props.onClick, onItemClick.bind(null, child, index));
87
88
  }
88
89
  if (!hasTabIndex && (child.type === MenuItem || child.type === MenuSelectableItem) && !child.props.disabled) {
89
- props.tabIndex = 0;
90
+ itemProps.tabIndex = 0;
90
91
  hasTabIndex = true;
91
- } else {
92
- props.tabIndex = -1;
93
92
  }
94
- return /*#__PURE__*/cloneElement(child, props);
93
+ if (menuRole === 'listbox' && (child.type === MenuItem || child.type === MenuSelectableItem)) {
94
+ itemProps.role = 'option';
95
+ }
96
+ return /*#__PURE__*/cloneElement(child, itemProps);
95
97
  });
96
98
  return /*#__PURE__*/_jsx("div", {
97
99
  className: classNames(baseClassName, className, {
98
100
  [`${baseClassName}--icons`]: hasIconItem(children),
99
101
  [`${baseClassName}--overlay`]: overlay
100
102
  }),
101
- role: "menu",
103
+ role: menuRole,
102
104
  ...props,
103
105
  ref: el => {
104
106
  rootRef.current = el;
@@ -19,6 +19,7 @@ const MenuItem = _ref => {
19
19
  icon,
20
20
  label,
21
21
  tooltip,
22
+ menuRole = 'menu',
22
23
  baseClassName = `${CLS_PREFIX}menu__item`,
23
24
  disabled = false,
24
25
  active = false,
@@ -34,7 +35,7 @@ const MenuItem = _ref => {
34
35
  onClick(e);
35
36
  }
36
37
  },
37
- role: "menuitem",
38
+ role: menuRole === 'listbox' ? 'option' : 'menuitem',
38
39
  "aria-disabled": disabled ? 'true' : undefined,
39
40
  tabIndex: disabled ? -1 : 0,
40
41
  icon: icon,
@@ -28,6 +28,7 @@ const OverlayCore = _ref => {
28
28
  canCloseOnBackdropClick = true,
29
29
  canCloseOnEscapePress = true,
30
30
  style = {},
31
+ containerProps = {},
31
32
  onAnimationExited,
32
33
  ...props
33
34
  } = _ref;
@@ -124,6 +125,7 @@ const OverlayCore = _ref => {
124
125
  ref: contentRef,
125
126
  role: "dialog",
126
127
  "aria-modal": "true",
128
+ ...containerProps,
127
129
  children: [/*#__PURE__*/_jsx("div", {
128
130
  className: `${baseClassName}__body`,
129
131
  children: children
@@ -8,7 +8,7 @@ import Link from '../Link';
8
8
  import Popover from '../Popover';
9
9
  import SegmentedControl from '../SegmentedControl';
10
10
  import Text from '../Text';
11
- import Translate from '../Translate';
11
+ import { InternalTranslate } from '../Translate';
12
12
  import { safeInvoke } from '../utils';
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  export const ITEMS_PER_PAGE_OPTIONS = [25, 100, 'all'];
@@ -58,9 +58,8 @@ const Pagination = _ref => {
58
58
  incrementIcon: "arrow-right",
59
59
  className: `${baseClassName}__input`
60
60
  })
61
- }), /*#__PURE__*/_jsx(Translate, {
61
+ }), /*#__PURE__*/_jsx(InternalTranslate, {
62
62
  content: "Pagination.totalShort",
63
- fallback: "of %%total%%",
64
63
  params: {
65
64
  total
66
65
  },
@@ -68,18 +67,16 @@ const Pagination = _ref => {
68
67
  })]
69
68
  }), onItemsPerPageChange ? /*#__PURE__*/_jsxs("div", {
70
69
  className: `${baseClassName}__options`,
71
- children: [/*#__PURE__*/_jsx(Translate, {
70
+ children: [/*#__PURE__*/_jsx(InternalTranslate, {
72
71
  content: "Pagination.itemsPerPage",
73
- fallback: "Items per page",
74
72
  className: `${baseClassName}__text`
75
73
  }), /*#__PURE__*/_jsx(SegmentedControl, {
76
74
  ghost: true,
77
75
  buttons: itemsPerPageOptions.map(value => {
78
76
  let title = value;
79
77
  if (value === 'all') {
80
- title = /*#__PURE__*/_jsx(Translate, {
81
- content: "Pagination.all",
82
- fallback: "All"
78
+ title = /*#__PURE__*/_jsx(InternalTranslate, {
79
+ content: "Pagination.all"
83
80
  });
84
81
  }
85
82
  return {
@@ -99,9 +96,8 @@ const Pagination = _ref => {
99
96
  fontSize: "sm",
100
97
  component: Link,
101
98
  nowrap: true,
102
- children: /*#__PURE__*/_jsx(Translate, {
99
+ children: /*#__PURE__*/_jsx(InternalTranslate, {
103
100
  content: "Pagination.total",
104
- fallback: "Page %%current%% of %%total%%",
105
101
  params: {
106
102
  current,
107
103
  total
@@ -137,7 +137,7 @@ class Popover extends Component {
137
137
  targetRef
138
138
  } = this.props;
139
139
  if (targetRef || this.targetRef.current) {
140
- return [targetRef, this.targetRef];
140
+ return [targetRef?.current ?? null, this.targetRef.current ?? null];
141
141
  }
142
142
  return [findDOMNode(this)];
143
143
  });
@@ -5,7 +5,7 @@ import { Component } from 'react';
5
5
  import classNames from 'classnames';
6
6
  import Dialog from '../Dialog';
7
7
  import { CLS_PREFIX } from '../../constants';
8
- import Translate from '../Translate';
8
+ import { InternalTranslate } from '../Translate';
9
9
  import { safeInvoke } from '../utils';
10
10
  import { STATUS_DONE, STATUS_ERROR, STATUS_WARNING } from '../ProgressStep';
11
11
  import Progress from '../Progress';
@@ -118,12 +118,10 @@ class ProgressDialog extends Component {
118
118
  } = this.state;
119
119
  const canClose = isFinished || isFinishedWithWarnings || isFailed;
120
120
  const canCancel = cancelable && !canClose;
121
- const cancelTitle = canClose ? /*#__PURE__*/_jsx(Translate, {
122
- content: "ProgressDialog.closeButton",
123
- fallback: "Close"
124
- }) : /*#__PURE__*/_jsx(Translate, {
125
- content: "ProgressDialog.cancelButton",
126
- fallback: "Cancel"
121
+ const cancelTitle = canClose ? /*#__PURE__*/_jsx(InternalTranslate, {
122
+ content: "ProgressDialog.closeButton"
123
+ }) : /*#__PURE__*/_jsx(InternalTranslate, {
124
+ content: "ProgressDialog.cancelButton"
127
125
  });
128
126
  return /*#__PURE__*/_jsxs(Dialog, {
129
127
  className: classNames(baseClassName, className),
@@ -1,244 +1,108 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  // Copyright 1999-2025. WebPros International GmbH. All rights reserved.
3
2
 
4
3
  import classNames from 'classnames';
5
- import { Children, Component, isValidElement, useContext } from 'react';
6
- import Measure from 'react-measure';
4
+ import { useContext, useMemo, useRef } from 'react';
7
5
  import { CLS_PREFIX } from '../../constants';
8
6
  import Button from '../Button';
9
- import FormContext from '../Form/FormContext';
10
7
  import InPlaceEdit from '../InPlaceEdit';
11
8
  import { isClickable } from '../utils';
12
- import VerticalContext, { VERTICAL_BREAKPOINT } from '../VerticalContext';
9
+ import VerticalContext from '../VerticalContext';
10
+ import SectionContext from './SectionContext';
11
+ import { useCollapsed } from './useCollapsed';
12
+ import { useVertical } from './useVertical';
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- const getErrorsForChildren = (form, children) => {
15
- let errors = {};
16
- Children.forEach(children, child => {
17
- if (! /*#__PURE__*/isValidElement(child)) {
18
- return;
19
- }
20
- if (child.props.name) {
21
- errors = {
22
- ...errors,
23
- ...form.getErrors(child.props.name)
24
- };
25
- }
26
- if (child.props.children) {
27
- errors = {
28
- ...errors,
29
- ...getErrorsForChildren(form, child.props.children)
30
- };
31
- }
32
- });
33
- return errors;
34
- };
35
14
  export const SECTION_BASE_CLASS_NAME = `${CLS_PREFIX}section`;
36
- class Section extends Component {
37
- constructor() {
38
- super(...arguments);
39
- _defineProperty(this, "state", {
40
- vertical: false
41
- });
42
- _defineProperty(this, "handleResize", _ref => {
43
- let {
44
- bounds
45
- } = _ref;
46
- if (this.props.vertical !== undefined || !bounds) {
47
- return;
48
- }
49
- this.setState({
50
- vertical: bounds.width < VERTICAL_BREAKPOINT
51
- });
52
- });
53
- _defineProperty(this, "handleCollapse", e => {
54
- if (isClickable(e)) {
55
- return;
56
- }
57
- this.setState(_ref2 => {
58
- let {
59
- collapsed
60
- } = _ref2;
61
- return {
62
- collapsed: !collapsed
63
- };
64
- }, () => {
65
- this.props.onToggle?.(this.state.collapsed ?? false);
66
- });
67
- });
68
- }
69
- static getDerivedStateFromProps(props, state) {
70
- const {
71
- collapsible,
72
- collapsed,
73
- form,
74
- children
75
- } = props;
76
- const {
77
- prevCollapsed,
78
- prevErrors
79
- } = state;
80
- const nextState = {};
81
- if (collapsed !== prevCollapsed) {
82
- nextState.collapsed = collapsed;
83
- }
84
- nextState.prevCollapsed = collapsed;
85
- if (collapsible && form) {
86
- const errors = getErrorsForChildren(form, children);
87
- if (JSON.stringify(errors) !== JSON.stringify(prevErrors) && Object.keys(errors).length > 0) {
88
- nextState.collapsed = false;
89
- }
90
- nextState.prevErrors = errors;
91
- }
92
- return nextState;
93
- }
94
- renderCollapseButton(_ref3) {
95
- let {
96
- baseClassName,
97
- collapsible
98
- } = _ref3;
99
- const {
100
- collapsed
101
- } = this.state;
102
- return collapsible && /*#__PURE__*/_jsx(Button, {
103
- ghost: true,
104
- className: classNames(`${baseClassName}__control-button`, `${baseClassName}__control-button--collapse`),
105
- icon: {
106
- name: 'chevron-up',
107
- flipVertical: collapsed
108
- },
109
- onClick: this.handleCollapse
110
- });
111
- }
112
- renderCloseButton(_ref4) {
113
- let {
114
- baseClassName,
115
- onClose,
116
- buttons
117
- } = _ref4;
118
- return (onClose || buttons) && /*#__PURE__*/_jsxs("div", {
119
- className: `${baseClassName}__header-buttons`,
120
- children: [buttons, onClose && /*#__PURE__*/_jsx(Button, {
121
- ghost: true,
122
- className: classNames(`${baseClassName}__control-button`, `${baseClassName}__control-button--close`),
123
- onClick: onClose,
124
- icon: "cross-mark"
125
- })]
126
- });
127
- }
128
- renderTitle(_ref5) {
129
- let {
130
- baseClassName,
131
- title,
132
- onTitleChange
133
- } = _ref5;
134
- return title && /*#__PURE__*/_jsx(InPlaceEdit, {
135
- className: `${baseClassName}__title`,
136
- value: title,
137
- onChange: onTitleChange,
138
- onClick: e => {
139
- const button = e.target?.closest(`.${baseClassName}__header`)?.querySelector(`.${baseClassName}__control-button`);
140
- button?.click();
141
- }
142
- });
143
- }
144
- renderContent(_ref6) {
145
- let {
146
- collapsible,
147
- children
148
- } = _ref6;
149
- const {
150
- collapsed
151
- } = this.state;
152
- if (collapsible && collapsed) {
153
- return null;
154
- }
155
- return children;
156
- }
157
- render() {
158
- const {
159
- baseClassName = SECTION_BASE_CLASS_NAME,
160
- className,
161
- intent,
162
- collapsible = false,
163
- title,
164
- collapsed,
165
- onTitleChange,
166
- onClose,
167
- onToggle,
168
- buttons,
169
- vertical: verticalProp,
170
- children,
171
- form,
172
- ...props
173
- } = this.props;
174
- const vertical = verticalProp === undefined ? this.state.vertical : verticalProp;
175
- return /*#__PURE__*/_jsx(VerticalContext.Provider, {
176
- value: vertical,
177
- children: /*#__PURE__*/_jsx(Measure, {
178
- onResize: this.handleResize,
179
- bounds: true,
180
- children: _ref7 => {
181
- let {
182
- measureRef
183
- } = _ref7;
184
- return /*#__PURE__*/_jsxs("div", {
185
- ref: measureRef,
186
- className: classNames(baseClassName, {
187
- [`${baseClassName}--${intent}`]: intent,
188
- [`${baseClassName}--collapsible`]: collapsible,
189
- [`${baseClassName}--collapsed`]: this.state.collapsed,
190
- [`${baseClassName}--vertical`]: vertical
191
- }, className),
192
- ...props,
193
- children: [title && /*#__PURE__*/_jsxs("div", {
194
- className: `${baseClassName}__header`,
195
- children: [this.renderCollapseButton({
196
- baseClassName,
197
- collapsible
198
- }), this.renderTitle({
199
- baseClassName,
200
- title,
201
- onTitleChange
202
- }), this.renderCloseButton({
203
- baseClassName,
204
- onClose,
205
- buttons
206
- })]
207
- }), this.renderContent({
208
- collapsible,
209
- children
210
- })]
211
- });
212
- }
213
- })
214
- });
215
- }
216
- }
217
15
 
218
16
  /**
219
17
  * `Section` component is used for dividing of complex content into groups for better readability
220
18
  * and comprehension of the presented information.
221
19
  * @since 0.0.54
222
20
  */
223
- const SectionWrapper = _ref8 => {
21
+ const Section = _ref => {
224
22
  let {
225
- collapsible = false,
226
- collapsed = false,
227
23
  baseClassName = SECTION_BASE_CLASS_NAME,
24
+ className,
25
+ intent,
26
+ collapsible = false,
27
+ collapsed: externalCollapsed = false,
28
+ onToggle,
29
+ title,
30
+ onTitleChange,
31
+ onClose,
32
+ buttons,
33
+ vertical: externalVertical,
34
+ children,
228
35
  ...props
229
- } = _ref8;
230
- const form = useContext(FormContext);
231
- const verticalContext = useContext(VerticalContext);
232
- const vertical = props.vertical === undefined ? verticalContext : props.vertical;
233
- return /*#__PURE__*/_jsx(Section, {
234
- ...props,
235
- form: form,
236
- vertical: vertical,
237
- collapsible: collapsible,
238
- collapsed: collapsed,
239
- baseClassName: baseClassName
36
+ } = _ref;
37
+ const containerRef = useRef(null);
38
+ const collapseButtonRef = useRef(null);
39
+ const vertical = useVertical(externalVertical, containerRef);
40
+ const [collapsed, setCollapsed] = useCollapsed(externalCollapsed);
41
+ const toggleCollapsed = () => {
42
+ setCollapsed(prevCollapsed => {
43
+ onToggle?.(!prevCollapsed);
44
+ return !prevCollapsed;
45
+ });
46
+ };
47
+ const parentSectionContext = useContext(SectionContext);
48
+ const sectionContextValue = useMemo(() => ({
49
+ expand: () => {
50
+ parentSectionContext?.expand();
51
+ setCollapsed(false);
52
+ }
53
+ }), [setCollapsed, parentSectionContext]);
54
+ return /*#__PURE__*/_jsx(SectionContext.Provider, {
55
+ value: sectionContextValue,
56
+ children: /*#__PURE__*/_jsx(VerticalContext.Provider, {
57
+ value: vertical,
58
+ children: /*#__PURE__*/_jsxs("div", {
59
+ ref: containerRef,
60
+ className: classNames(baseClassName, {
61
+ [`${baseClassName}--${intent}`]: intent,
62
+ [`${baseClassName}--collapsible`]: collapsible,
63
+ [`${baseClassName}--collapsed`]: collapsed,
64
+ [`${baseClassName}--vertical`]: vertical
65
+ }, className),
66
+ ...props,
67
+ children: [title && /*#__PURE__*/_jsxs("div", {
68
+ className: `${baseClassName}__header`,
69
+ children: [collapsible && /*#__PURE__*/_jsx(Button, {
70
+ ref: collapseButtonRef,
71
+ ghost: true,
72
+ className: classNames(`${baseClassName}__control-button`, `${baseClassName}__control-button--collapse`),
73
+ icon: {
74
+ name: 'chevron-up',
75
+ flipVertical: collapsed
76
+ },
77
+ onClick: toggleCollapsed,
78
+ "aria-expanded": !collapsed
79
+ }), /*#__PURE__*/_jsx(InPlaceEdit, {
80
+ className: `${baseClassName}__title`,
81
+ value: title,
82
+ onChange: onTitleChange,
83
+ onClick: e => {
84
+ if (!collapsible || isClickable(e)) {
85
+ return;
86
+ }
87
+ collapseButtonRef.current?.click();
88
+ }
89
+ }), (onClose || buttons) && /*#__PURE__*/_jsxs("div", {
90
+ className: `${baseClassName}__header-buttons`,
91
+ children: [buttons, onClose && /*#__PURE__*/_jsx(Button, {
92
+ ghost: true,
93
+ className: classNames(`${baseClassName}__control-button`, `${baseClassName}__control-button--close`),
94
+ onClick: onClose,
95
+ icon: "cross-mark"
96
+ })]
97
+ })]
98
+ }), /*#__PURE__*/_jsx("div", {
99
+ style: {
100
+ display: collapsed ? 'none' : undefined
101
+ },
102
+ children: children
103
+ })]
104
+ })
105
+ })
240
106
  });
241
107
  };
242
- SectionWrapper.displayName = 'Section';
243
- SectionWrapper.WrappedComponent = Section;
244
- export default SectionWrapper;
108
+ export default Section;
@@ -0,0 +1,5 @@
1
+ // Copyright 1999-2025. WebPros International GmbH. All rights reserved.
2
+
3
+ import { createContext } from 'react';
4
+ const SectionContext = /*#__PURE__*/createContext(null);
5
+ export default SectionContext;
@@ -0,0 +1,12 @@
1
+ // Copyright 1999-2025. WebPros International GmbH. All rights reserved.
2
+
3
+ import { useState } from 'react';
4
+ export const useCollapsed = externalCollapsed => {
5
+ const [collapsed, setCollapsed] = useState(externalCollapsed ?? false);
6
+ const [prevExternalCollapsed, setPrevExternalCollapsed] = useState(externalCollapsed);
7
+ if (externalCollapsed !== prevExternalCollapsed) {
8
+ setPrevExternalCollapsed(externalCollapsed);
9
+ setCollapsed(externalCollapsed ?? false);
10
+ }
11
+ return [collapsed, setCollapsed];
12
+ };