@ansible/ansible-ui-framework 0.0.428 → 0.0.449

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 (55) hide show
  1. package/README.md +1 -1
  2. package/cjs/PageActions/PageAction.d.ts +1 -1
  3. package/cjs/PageActions/PageSingleAction.js +1 -1
  4. package/cjs/PageCells/TextCell.d.ts +1 -1
  5. package/cjs/PageDetails/PageDetail.d.ts +6 -0
  6. package/cjs/PageDetails/PageDetail.js +27 -0
  7. package/cjs/PageDetails/PageDetails.d.ts +5 -0
  8. package/cjs/PageDetails/PageDetails.js +45 -0
  9. package/cjs/PageDetails/PageDetailsFromColumns.d.ts +6 -0
  10. package/cjs/{PageTable/PageTableDetails.js → PageDetails/PageDetailsFromColumns.js} +7 -6
  11. package/cjs/PageForm/Inputs/PageFormCheckbox.d.ts +9 -8
  12. package/cjs/PageForm/Inputs/PageFormCheckbox.js +8 -4
  13. package/cjs/PageForm/Inputs/PageFormFileUpload.js +1 -1
  14. package/cjs/PageForm/Inputs/PageFormSelect.js +1 -1
  15. package/cjs/PageForm/Inputs/PageFormSelectOption.d.ts +2 -0
  16. package/cjs/PageForm/Inputs/PageFormSelectOption.js +11 -1
  17. package/cjs/PageForm/Inputs/PageFormTextArea.js +1 -1
  18. package/cjs/PageForm/Inputs/PageFormTextInput.js +1 -1
  19. package/cjs/PageForm/PageForm.d.ts +2 -0
  20. package/cjs/PageForm/PageForm.js +10 -9
  21. package/cjs/PageForm/Utils/PageFormHidden.d.ts +6 -0
  22. package/cjs/PageForm/Utils/PageFormHidden.js +13 -0
  23. package/cjs/PageForm/Utils/PageFormSection.d.ts +5 -0
  24. package/cjs/PageForm/Utils/PageFormSection.js +20 -0
  25. package/cjs/PageForm/{Inputs → Utils}/PageFormWatch.d.ts +0 -0
  26. package/cjs/PageForm/{Inputs → Utils}/PageFormWatch.js +1 -2
  27. package/cjs/PageHeader.d.ts +9 -11
  28. package/cjs/PageHeader.js +9 -11
  29. package/cjs/PageTable/PageTable.d.ts +2 -7
  30. package/cjs/PageTable/PageTable.js +1 -7
  31. package/cjs/PageTable/PageTableCard.js +3 -3
  32. package/cjs/PageTabs.d.ts +2 -1
  33. package/cjs/PageTabs.js +6 -2
  34. package/cjs/index.d.ts +3 -3
  35. package/cjs/index.js +3 -3
  36. package/package.json +1 -1
  37. package/cjs/PageDataList.d.ts +0 -46
  38. package/cjs/PageDataList.js +0 -61
  39. package/cjs/PageForm/FormPage.d.ts +0 -17
  40. package/cjs/PageForm/FormPage.js +0 -73
  41. package/cjs/PageTable/PageTableDetails.d.ts +0 -6
  42. package/cjs/components/Details.d.ts +0 -36
  43. package/cjs/components/Details.js +0 -63
  44. package/docs/Components.md +0 -9
  45. package/docs/Framework.md +0 -19
  46. package/docs/Guides.md +0 -6
  47. package/docs/_config.yml +0 -2
  48. package/docs/assets/css/style.scss +0 -139
  49. package/docs/components/BulkActionDialog.md +0 -30
  50. package/docs/components/PageFramework.md +0 -11
  51. package/docs/components/PageHeader.md +0 -31
  52. package/docs/components/PageLayout.md +0 -18
  53. package/docs/components/PageTable.md +0 -17
  54. package/docs/guides/GettingStarted.md +0 -90
  55. package/docs/guides/PageTableGuide.md +0 -178
package/README.md CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  A framework for building applications using [PatternFly](https://www.patternfly.org), developed by the Ansible UI developers.
4
4
 
5
- [Documentation](https://laughing-spoon-f689339f.pages.github.io/)
5
+ [Documentation](https://github.com/ansible/ansible-ui/wiki/Ansible-UI-Framework)
@@ -26,7 +26,7 @@ export type IPageSingleAction<T extends object> = IPageActionCommon & {
26
26
  type: PageActionType.single;
27
27
  variant?: ButtonVariant;
28
28
  onClick: (item: T) => void;
29
- isDisabled?: (item: T) => string;
29
+ isDisabled?: (item: T) => string | undefined;
30
30
  isHidden?: (item: T) => boolean;
31
31
  };
32
32
  export type IPageDropdownAction<T extends object> = IPageActionCommon & {
@@ -30,6 +30,6 @@ function PageSingleAction(props) {
30
30
  if (props.iconOnly) {
31
31
  variant = react_core_1.ButtonVariant.plain;
32
32
  }
33
- return ((0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsx)(react_core_1.Tooltip, __assign({ content: tooltip, trigger: tooltip ? undefined : 'manual' }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Button, __assign({ variant: variant, icon: Icon ? ((0, jsx_runtime_1.jsx)("span", __assign({ style: { marginLeft: -4, paddingRight: 4 } }, { children: (0, jsx_runtime_1.jsx)(Icon, {}) }))) : undefined, isAriaDisabled: Boolean(isDisabled), onClick: function () { return selectedItem && action.onClick(selectedItem); }, isDanger: action.isDanger }, { children: props.iconOnly && Icon ? (0, jsx_runtime_1.jsx)(Icon, {}) : action.shortLabel ? action.shortLabel : action.label })) })) }));
33
+ return ((0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsx)(react_core_1.Tooltip, __assign({ content: tooltip, trigger: tooltip ? undefined : 'manual' }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Button, __assign({ id: props.action.label.toLowerCase().split(' ').join('-'), variant: variant, icon: Icon ? ((0, jsx_runtime_1.jsx)("span", __assign({ style: { marginLeft: -4, paddingRight: 4 } }, { children: (0, jsx_runtime_1.jsx)(Icon, {}) }))) : undefined, isAriaDisabled: Boolean(isDisabled), onClick: function () { return selectedItem && action.onClick(selectedItem); }, isDanger: action.isDanger }, { children: props.iconOnly && Icon ? (0, jsx_runtime_1.jsx)(Icon, {}) : action.shortLabel ? action.shortLabel : action.label })) })) }));
34
34
  }
35
35
  exports.PageSingleAction = PageSingleAction;
@@ -3,7 +3,7 @@ import { PFColor } from '../components/pfcolors';
3
3
  export interface TextCellProps {
4
4
  icon?: ReactNode;
5
5
  iconSize?: 'sm' | 'md' | 'lg';
6
- text?: string;
6
+ text?: string | null;
7
7
  to?: string;
8
8
  onClick?: () => void;
9
9
  color?: PFColor;
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function PageDetail(props: {
3
+ label?: string;
4
+ children?: ReactNode;
5
+ isEmpty?: boolean;
6
+ }): JSX.Element;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.PageDetail = void 0;
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var react_core_1 = require("@patternfly/react-core");
17
+ function PageDetail(props) {
18
+ var _a;
19
+ if (props.children === null || typeof props.children === 'undefined' || props.children === '') {
20
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
21
+ }
22
+ if (props.isEmpty) {
23
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
24
+ }
25
+ return ((0, jsx_runtime_1.jsxs)(react_core_1.DescriptionListGroup, { children: [props.label && (0, jsx_runtime_1.jsx)(react_core_1.DescriptionListTerm, { children: props.label }), (0, jsx_runtime_1.jsx)(react_core_1.DescriptionListDescription, __assign({ id: (_a = props.label) === null || _a === void 0 ? void 0 : _a.toLowerCase().split(' ').join('-') }, { children: props.children }))] }));
26
+ }
27
+ exports.PageDetail = PageDetail;
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function PageDetails(props: {
3
+ children?: ReactNode;
4
+ disablePadding?: boolean;
5
+ }): JSX.Element;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.PageDetails = void 0;
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var react_core_1 = require("@patternfly/react-core");
17
+ var Settings_1 = require("../Settings");
18
+ function PageDetails(props) {
19
+ var disablePadding = props.disablePadding;
20
+ var settings = (0, Settings_1.useSettings)();
21
+ var orientation = settings.formLayout;
22
+ var columns = settings.formColumns;
23
+ var isCompact = false;
24
+ return ((0, jsx_runtime_1.jsx)(react_core_1.PageSection, __assign({ padding: { default: 'noPadding' }, style: {
25
+ backgroundColor: settings.theme === 'dark'
26
+ ? 'var(--pf-global--BackgroundColor--300)'
27
+ : 'var(--pf-global--BackgroundColor--100)',
28
+ } }, { children: (0, jsx_runtime_1.jsx)(react_core_1.DescriptionList, __assign({ orientation: {
29
+ sm: orientation,
30
+ md: orientation,
31
+ lg: orientation,
32
+ xl: orientation,
33
+ '2xl': orientation,
34
+ }, columnModifier: columns === 'multiple'
35
+ ? {
36
+ default: '1Col',
37
+ sm: '1Col',
38
+ md: '2Col',
39
+ lg: '2Col',
40
+ xl: '3Col',
41
+ '2xl': '3Col',
42
+ }
43
+ : undefined, style: { maxWidth: 1200, padding: disablePadding ? undefined : 24 }, isCompact: isCompact }, { children: props.children })) })));
44
+ }
45
+ exports.PageDetails = PageDetails;
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { ITableColumn } from '../PageTable/PageTable';
3
+ export declare function PageDetailsFromColumns<T extends object>(props: {
4
+ item: T | undefined;
5
+ columns: ITableColumn<T>[];
6
+ }): JSX.Element;
@@ -11,16 +11,17 @@ var __assign = (this && this.__assign) || function () {
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.TableDetails = void 0;
14
+ exports.PageDetailsFromColumns = void 0;
15
15
  var jsx_runtime_1 = require("react/jsx-runtime");
16
16
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
17
17
  /* eslint-disable @typescript-eslint/no-empty-function */
18
- var Details_1 = require("../components/Details");
19
- var PageTable_1 = require("./PageTable");
20
- function TableDetails(props) {
18
+ var PageTable_1 = require("../PageTable/PageTable");
19
+ var PageDetail_1 = require("./PageDetail");
20
+ var PageDetails_1 = require("./PageDetails");
21
+ function PageDetailsFromColumns(props) {
21
22
  var item = props.item, columns = props.columns;
22
23
  if (!item)
23
24
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
24
- return ((0, jsx_runtime_1.jsx)(Details_1.DetailsList, { children: columns.map(function (column) { return ((0, jsx_runtime_1.jsx)(Details_1.Detail, __assign({ label: column.header }, { children: (0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: column, item: item }) }), column.id)); }) }));
25
+ return ((0, jsx_runtime_1.jsx)(PageDetails_1.PageDetails, { children: columns.map(function (column) { return ((0, jsx_runtime_1.jsx)(PageDetail_1.PageDetail, __assign({ label: column.header }, { children: (0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: column, item: item }) }), column.id)); }) }));
25
26
  }
26
- exports.TableDetails = TableDetails;
27
+ exports.PageDetailsFromColumns = PageDetailsFromColumns;
@@ -1,9 +1,10 @@
1
- import { ReactNode } from 'react';
2
- export declare function PageFormCheckbox(props: {
3
- label: string;
1
+ /// <reference types="react" />
2
+ import { CheckboxProps } from '@patternfly/react-core';
3
+ import { Validate } from 'react-hook-form';
4
+ export type PageFormCheckboxProps = {
5
+ id?: string;
4
6
  name: string;
5
- helperText?: string;
6
- required?: boolean;
7
- description?: ReactNode;
8
- body?: ReactNode;
9
- }): JSX.Element;
7
+ validate?: Validate<string> | Record<string, Validate<string>>;
8
+ } & Omit<CheckboxProps, 'id' | 'onChange' | 'value'>;
9
+ /** PatternFly Checkbox wrapper for use with react-hook-form */
10
+ export declare function PageFormCheckbox(props: PageFormCheckboxProps): JSX.Element;
@@ -15,10 +15,14 @@ exports.PageFormCheckbox = void 0;
15
15
  var jsx_runtime_1 = require("react/jsx-runtime");
16
16
  var react_core_1 = require("@patternfly/react-core");
17
17
  var react_hook_form_1 = require("react-hook-form");
18
+ /** PatternFly Checkbox wrapper for use with react-hook-form */
18
19
  function PageFormCheckbox(props) {
19
- var control = (0, react_hook_form_1.useFormContext)().control;
20
- var field = (0, react_hook_form_1.useController)({ control: control, name: props.name }).field;
21
- var id = props.name;
22
- return ((0, jsx_runtime_1.jsx)(react_core_1.Checkbox, __assign({ label: props.label, id: id, "aria-describedby": "".concat(id, "-helper"), description: props.description, body: field.value ? props.body : undefined }, field, { isChecked: !!field.value })));
20
+ var name = props.name, readOnly = props.readOnly, validate = props.validate;
21
+ var _a = (0, react_hook_form_1.useFormContext)(), control = _a.control, isSubmitting = _a.formState.isSubmitting;
22
+ return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: name, control: control, shouldUnregister: true, render: function (_a) {
23
+ var _b;
24
+ var _c = _a.field, onChange = _c.onChange, value = _c.value;
25
+ return ((0, jsx_runtime_1.jsx)(react_core_1.Checkbox, __assign({}, props, { id: (_b = props.id) !== null && _b !== void 0 ? _b : name.split('.').join('-'), isChecked: !!value, onChange: onChange, readOnly: readOnly || isSubmitting, minLength: undefined, maxLength: undefined, ref: undefined })));
26
+ }, rules: { validate: validate } }));
23
27
  }
24
28
  exports.PageFormCheckbox = PageFormCheckbox;
@@ -42,7 +42,7 @@ function PageFormFileUpload(props) {
42
42
  var handleFileReadStarted = function (_fileHandle) {
43
43
  setIsLoading(true);
44
44
  };
45
- return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: props.name, control: control, render: function (_a) {
45
+ return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: props.name, control: control, shouldUnregister: true, render: function (_a) {
46
46
  var _b = _a.field, onChange = _b.onChange, value = _b.value, error = _a.fieldState.error;
47
47
  var handleClear = function (_event) {
48
48
  setFilename('');
@@ -18,7 +18,7 @@ var FormGroupSelect_1 = require("./FormGroupSelect");
18
18
  /** PatternFly Select wrapper for use with react-hook-form */
19
19
  function PageFormSelect(props) {
20
20
  var _a = (0, react_hook_form_1.useFormContext)(), control = _a.control, isSubmitting = _a.formState.isSubmitting;
21
- return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: props.name, control: control, render: function (_a) {
21
+ return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: props.name, control: control, shouldUnregister: true, render: function (_a) {
22
22
  var _b = _a.field, onChange = _b.onChange, value = _b.value, error = _a.fieldState.error;
23
23
  return ((0, jsx_runtime_1.jsx)(FormGroupSelect_1.FormGroupSelect, __assign({}, props, { value: value, onSelect: function (_, value) { return onChange(value); }, helperTextInvalid: error === null || error === void 0 ? void 0 : error.message, isReadOnly: props.isReadOnly || isSubmitting })));
24
24
  } }));
@@ -1,7 +1,9 @@
1
1
  /// <reference types="react" />
2
+ import { Validate } from 'react-hook-form';
2
3
  import { FormGroupSelectOptionProps } from './FormGroupSelectOption';
3
4
  export type PageFormSelectOptionProps<T> = {
4
5
  name: string;
6
+ validate?: Validate<string> | Record<string, Validate<string>>;
5
7
  } & Omit<FormGroupSelectOptionProps<T>, 'onSelect' | 'value'>;
6
8
  /** Select wrapper for use with react-hook-form */
7
9
  export declare function PageFormSelectOption<T>(props: PageFormSelectOptionProps<T>): JSX.Element;
@@ -14,14 +14,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.PageFormSelectOption = void 0;
15
15
  var jsx_runtime_1 = require("react/jsx-runtime");
16
16
  var react_hook_form_1 = require("react-hook-form");
17
+ var capitalize_1 = require("../../utils/capitalize");
17
18
  var FormGroupSelectOption_1 = require("./FormGroupSelectOption");
18
19
  /** Select wrapper for use with react-hook-form */
19
20
  function PageFormSelectOption(props) {
21
+ var label = props.label, isRequired = props.isRequired, validate = props.validate;
20
22
  var _a = (0, react_hook_form_1.useFormContext)(), control = _a.control, isSubmitting = _a.formState.isSubmitting;
21
- return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: props.name, control: control, render: function (_a) {
23
+ return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: props.name, control: control, shouldUnregister: true, render: function (_a) {
22
24
  var _b;
23
25
  var _c = _a.field, onChange = _c.onChange, value = _c.value, error = _a.fieldState.error;
24
26
  return ((0, jsx_runtime_1.jsx)(FormGroupSelectOption_1.FormGroupSelectOption, __assign({}, props, { id: (_b = props.id) !== null && _b !== void 0 ? _b : props.name, value: value, onSelect: function (_, value) { return onChange(value); }, helperTextInvalid: error === null || error === void 0 ? void 0 : error.message, isReadOnly: props.isReadOnly || isSubmitting })));
27
+ }, rules: {
28
+ required: typeof label === 'string' && typeof isRequired === 'boolean'
29
+ ? {
30
+ value: true,
31
+ message: "".concat((0, capitalize_1.capitalizeFirstLetter)(label.toLocaleLowerCase()), " is required."),
32
+ }
33
+ : isRequired,
34
+ validate: validate,
25
35
  } }));
26
36
  }
27
37
  exports.PageFormSelectOption = PageFormSelectOption;
@@ -20,7 +20,7 @@ var FormGroupTextArea_1 = require("./FormGroupTextArea");
20
20
  function PageFormTextArea(props) {
21
21
  var name = props.name, label = props.label, isReadOnly = props.isReadOnly, isRequired = props.isRequired, minLength = props.minLength, maxLength = props.maxLength, pattern = props.pattern, validate = props.validate;
22
22
  var _a = (0, react_hook_form_1.useFormContext)(), control = _a.control, isSubmitting = _a.formState.isSubmitting;
23
- return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: name, control: control, render: function (_a) {
23
+ return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: name, control: control, shouldUnregister: true, render: function (_a) {
24
24
  var _b;
25
25
  var _c = _a.field, onChange = _c.onChange, value = _c.value, error = _a.fieldState.error;
26
26
  return ((0, jsx_runtime_1.jsx)(FormGroupTextArea_1.FormGroupTextArea, __assign({}, props, { id: (_b = props.id) !== null && _b !== void 0 ? _b : name, value: value, onChange: onChange, helperTextInvalid: error === null || error === void 0 ? void 0 : error.message, isReadOnly: isReadOnly || isSubmitting, minLength: undefined, maxLength: undefined })));
@@ -22,7 +22,7 @@ var FormGroupTextInput_1 = require("./FormGroupTextInput");
22
22
  function PageFormTextInput(props) {
23
23
  var label = props.label, name = props.name, isReadOnly = props.isReadOnly, isRequired = props.isRequired, minLength = props.minLength, maxLength = props.maxLength, pattern = props.pattern, validate = props.validate, selectTitle = props.selectTitle;
24
24
  var _a = (0, react_hook_form_1.useFormContext)(), control = _a.control, setValue = _a.setValue, _b = _a.formState, isSubmitting = _b.isSubmitting, isValidating = _b.isValidating;
25
- return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: name, control: control, render: function (_a) {
25
+ return ((0, jsx_runtime_1.jsx)(react_hook_form_1.Controller, { name: name, control: control, shouldUnregister: true, render: function (_a) {
26
26
  var _b;
27
27
  var _c = _a.field, onChange = _c.onChange, value = _c.value, error = _a.fieldState.error;
28
28
  return ((0, jsx_runtime_1.jsx)(FormGroupTextInput_1.FormGroupTextInput, __assign({}, props, { id: (_b = props.id) !== null && _b !== void 0 ? _b : name.split('.').join('-'), value: value, onChange: onChange, helperTextInvalid: !(validate && isValidating) && (error === null || error === void 0 ? void 0 : error.message), isReadOnly: isReadOnly || isSubmitting, minLength: undefined, maxLength: undefined }, { children: selectTitle && ((0, jsx_runtime_1.jsx)(react_core_1.Button, __assign({ variant: "control", onClick: function () {
@@ -12,6 +12,8 @@ export declare function PageForm<T extends object>(props: {
12
12
  isVertical?: boolean;
13
13
  singleColumn?: boolean;
14
14
  disableScrolling?: boolean;
15
+ disableBody?: boolean;
16
+ disablePadding?: boolean;
15
17
  }): JSX.Element;
16
18
  export type PageFormSubmitHandler<T extends FieldValues> = (data: T, setError: (error: string) => void, setFieldError: (fieldName: FieldPath<T>, error: ErrorOption) => void) => Promise<unknown>;
17
19
  export declare function PageFormSubmitButton(props: {
@@ -71,12 +71,13 @@ var react_1 = require("react");
71
71
  var react_hook_form_1 = require("react-hook-form");
72
72
  var Scrollable_1 = require("../components/Scrollable");
73
73
  var useBreakPoint_1 = require("../components/useBreakPoint");
74
+ var PageBody_1 = require("../PageBody");
74
75
  var Settings_1 = require("../Settings");
75
76
  var useFrameworkTranslations_1 = require("../useFrameworkTranslations");
76
77
  function PageForm(props) {
77
78
  var _this = this;
78
79
  var _a;
79
- var schema = props.schema, defaultValue = props.defaultValue;
80
+ var schema = props.schema, defaultValue = props.defaultValue, disableBody = props.disableBody, disablePadding = props.disablePadding;
80
81
  var form = (0, react_hook_form_1.useForm)({
81
82
  defaultValues: defaultValue !== null && defaultValue !== void 0 ? defaultValue : {},
82
83
  resolver: schema
@@ -96,9 +97,7 @@ function PageForm(props) {
96
97
  var xl = multipleColumns ? (isHorizontal ? 6 : 6) : 12;
97
98
  var xl2 = multipleColumns ? (isHorizontal ? 4 : 4) : 12;
98
99
  var maxWidth = multipleColumns ? undefined : isHorizontal ? 960 : 800;
99
- return (
100
- // <PageBody>
101
- (0, jsx_runtime_1.jsx)(react_hook_form_1.FormProvider, __assign({}, form, { children: (0, jsx_runtime_1.jsxs)(react_core_1.Form
100
+ var Component = ((0, jsx_runtime_1.jsx)(react_hook_form_1.FormProvider, __assign({}, form, { children: (0, jsx_runtime_1.jsxs)(react_core_1.Form
102
101
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
103
102
  , __assign({
104
103
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
@@ -128,12 +127,14 @@ function PageForm(props) {
128
127
  flexGrow: 1,
129
128
  overflow: props.disableScrolling ? undefined : 'hidden',
130
129
  gap: 0,
131
- } }, { children: [props.disableScrolling ? ((0, jsx_runtime_1.jsx)("div", __assign({ style: { maxWidth: maxWidth, padding: 24 } }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Grid, __assign({ hasGutter: true, span: 12, sm: sm, md: md, lg: lg, xl: xl, xl2: xl2 }, { children: props.children })) }))) : ((0, jsx_runtime_1.jsx)(Scrollable_1.Scrollable, __assign({ style: { height: '100%', flexGrow: 1 } }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ style: { maxWidth: maxWidth, padding: 24 } }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Grid, __assign({ hasGutter: true, span: 12, sm: sm, md: md, lg: lg, xl: xl, xl2: xl2 }, { children: props.children })) })) }))), error && ((0, jsx_runtime_1.jsx)(react_core_1.Alert, { variant: "danger", title: error !== null && error !== void 0 ? error : '', isInline: true, style: { paddingLeft: isMd && props.onCancel ? 190 : undefined } })), props.onCancel ? ((0, jsx_runtime_1.jsx)("div", __assign({ style: {
130
+ } }, { children: [props.disableScrolling ? ((0, jsx_runtime_1.jsx)("div", __assign({ style: { maxWidth: maxWidth, padding: disablePadding ? undefined : 24 } }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Grid, __assign({ hasGutter: true, span: 12, sm: sm, md: md, lg: lg, xl: xl, xl2: xl2 }, { children: props.children })) }))) : ((0, jsx_runtime_1.jsx)(Scrollable_1.Scrollable, __assign({ style: { height: '100%', flexGrow: 1 } }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ style: { maxWidth: maxWidth, padding: disablePadding ? undefined : 24 } }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Grid, __assign({ hasGutter: true, span: 12, sm: sm, md: md, lg: lg, xl: xl, xl2: xl2 }, { children: props.children })) })) }))), error && ((0, jsx_runtime_1.jsx)(react_core_1.Alert, { variant: "danger", title: error !== null && error !== void 0 ? error : '', isInline: true, style: { paddingLeft: isMd && props.onCancel ? 190 : undefined } })), props.onCancel ? ((0, jsx_runtime_1.jsx)("div", __assign({ style: {
132
131
  backgroundColor: settings.theme === 'dark' ? 'var(--pf-global--BackgroundColor--400)' : undefined,
133
- padding: 24,
134
- } }, { children: (0, jsx_runtime_1.jsxs)(react_core_1.ActionGroup, __assign({ style: { marginTop: 0 } }, { children: [(0, jsx_runtime_1.jsx)(PageFormSubmitButton, { children: props.submitText }), props.onCancel && ((0, jsx_runtime_1.jsx)(PageFormCancelButton, __assign({ onCancel: props.onCancel }, { children: (_a = props.cancelText) !== null && _a !== void 0 ? _a : frameworkTranslations.cancelText })))] })) }))) : ((0, jsx_runtime_1.jsx)(PageFormSubmitButton, __assign({ style: { marginTop: 48 } }, { children: props.submitText })))] })) }))
135
- // </PageBody>
136
- );
132
+ padding: disablePadding ? undefined : 24,
133
+ } }, { children: (0, jsx_runtime_1.jsxs)(react_core_1.ActionGroup, __assign({ style: { marginTop: 0 } }, { children: [(0, jsx_runtime_1.jsx)(PageFormSubmitButton, { children: props.submitText }), props.onCancel && ((0, jsx_runtime_1.jsx)(PageFormCancelButton, __assign({ onCancel: props.onCancel }, { children: (_a = props.cancelText) !== null && _a !== void 0 ? _a : frameworkTranslations.cancelText })))] })) }))) : ((0, jsx_runtime_1.jsx)(PageFormSubmitButton, __assign({ style: { marginTop: 48 } }, { children: props.submitText })))] })) })));
134
+ if (!disableBody) {
135
+ Component = (0, jsx_runtime_1.jsx)(PageBody_1.PageBody, { children: Component });
136
+ }
137
+ return Component;
137
138
  }
138
139
  exports.PageForm = PageForm;
139
140
  function PageFormSubmitButton(props) {
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function PageFormHidden<T>(props: {
3
+ watch: string;
4
+ hidden: (value: T) => boolean;
5
+ children: ReactNode;
6
+ }): JSX.Element;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageFormHidden = void 0;
4
+ var jsx_runtime_1 = require("react/jsx-runtime");
5
+ var react_hook_form_1 = require("react-hook-form");
6
+ function PageFormHidden(props) {
7
+ var value = (0, react_hook_form_1.useWatch)({ name: props.watch });
8
+ var hidden = props.hidden(value);
9
+ if (hidden)
10
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
11
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: props.children });
12
+ }
13
+ exports.PageFormHidden = PageFormHidden;
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+ export declare function PageFormSection(props: {
3
+ title: string;
4
+ children: ReactNode;
5
+ }): JSX.Element;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.PageFormSection = void 0;
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var react_core_1 = require("@patternfly/react-core");
17
+ function PageFormSection(props) {
18
+ return ((0, jsx_runtime_1.jsx)(react_core_1.FormSection, __assign({ title: props.title, style: { marginTop: 16 } }, { children: props.children })));
19
+ }
20
+ exports.PageFormSection = PageFormSection;
@@ -4,8 +4,7 @@ exports.PageFormWatch = void 0;
4
4
  var jsx_runtime_1 = require("react/jsx-runtime");
5
5
  var react_hook_form_1 = require("react-hook-form");
6
6
  function PageFormWatch(props) {
7
- var control = (0, react_hook_form_1.useFormContext)().control;
8
- var value = (0, react_hook_form_1.useWatch)({ control: control, name: props.watch });
7
+ var value = (0, react_hook_form_1.useWatch)({ name: props.watch });
9
8
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: props.children(value) });
10
9
  }
11
10
  exports.PageFormWatch = PageFormWatch;
@@ -31,16 +31,14 @@ export interface PageHeaderProps {
31
31
  * @param {ReactNode} headerActions - The actions for the page.
32
32
  *
33
33
  * @example
34
- * <Page>
35
- * <PageLayout>
36
- * <PageHeader
37
- * breadcrumbs={[{ label: 'Home', to: '/home' }, { label: 'Page title' }]}
38
- * title='Page title'
39
- * description='Page description'
40
- * headerActions={<TypedActions actions={actions} />}
41
- * />
42
- * <PageBody />...</PageBody>
43
- * </PageLayout>
44
- * <Page>
34
+ * <PageLayout>
35
+ * <PageHeader
36
+ * breadcrumbs={[{ label: 'Home', to: '/home' }, { label: 'Page title' }]}
37
+ * title='Page title'
38
+ * description='Page description'
39
+ * headerActions={<TypedActions actions={actions} />}
40
+ * />
41
+ * ...
42
+ * </PageLayout>
45
43
  */
46
44
  export declare function PageHeader(props: PageHeaderProps): JSX.Element;
package/cjs/PageHeader.js CHANGED
@@ -45,17 +45,15 @@ function Breadcrumbs(props) {
45
45
  * @param {ReactNode} headerActions - The actions for the page.
46
46
  *
47
47
  * @example
48
- * <Page>
49
- * <PageLayout>
50
- * <PageHeader
51
- * breadcrumbs={[{ label: 'Home', to: '/home' }, { label: 'Page title' }]}
52
- * title='Page title'
53
- * description='Page description'
54
- * headerActions={<TypedActions actions={actions} />}
55
- * />
56
- * <PageBody />...</PageBody>
57
- * </PageLayout>
58
- * <Page>
48
+ * <PageLayout>
49
+ * <PageHeader
50
+ * breadcrumbs={[{ label: 'Home', to: '/home' }, { label: 'Page title' }]}
51
+ * title='Page title'
52
+ * description='Page description'
53
+ * headerActions={<TypedActions actions={actions} />}
54
+ * />
55
+ * ...
56
+ * </PageLayout>
59
57
  */
60
58
  function PageHeader(props) {
61
59
  var navigation = props.navigation, breadcrumbs = props.breadcrumbs, title = props.title, description = props.description, controls = props.controls, headerActions = props.headerActions;
@@ -1,12 +1,7 @@
1
1
  import { Dispatch, ReactNode, SetStateAction } from 'react';
2
2
  import { IPageAction } from '../PageActions/PageAction';
3
- import { PageHeaderProps } from '../PageHeader';
4
3
  import { PageTableViewType } from './PageTableViewType';
5
4
  import { IToolbarFilter } from './PageToolbar';
6
- export type TablePageProps<T extends object> = PageHeaderProps & PageTableProps<T> & {
7
- error?: Error;
8
- };
9
- export declare function TablePage<T extends object>(props: TablePageProps<T>): JSX.Element;
10
5
  export type PageTableProps<T extends object> = {
11
6
  keyFn: (item: T) => string | number;
12
7
  itemCount?: number;
@@ -111,11 +106,11 @@ export interface ITableColumnTypeDateTime<T extends object> extends ITableColumn
111
106
  }
112
107
  export interface ITableColumnTypeDescription<T extends object> extends ITableColumnCommon<T> {
113
108
  type: 'description';
114
- value: CellFn<T, string | undefined>;
109
+ value: CellFn<T, string | undefined | null>;
115
110
  }
116
111
  export interface ITableColumnTypeText<T extends object> extends ITableColumnCommon<T> {
117
112
  type: 'text';
118
- value: CellFn<T, string | undefined>;
113
+ value: CellFn<T, string | null | undefined>;
119
114
  }
120
115
  export type ITableColumn<T extends object> = ITableColumnTypeReactNode<T> | ITableColumnTypeDateTime<T> | ITableColumnTypeLabels<T> | ITableColumnTypeCount<T> | ITableColumnTypeText<T> | ITableColumnTypeDescription<T>;
121
116
  export declare function TableColumnCell<T extends object>(props: {
@@ -30,7 +30,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
30
30
  return (mod && mod.__esModule) ? mod : { "default": mod };
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.TableColumnCell = exports.TableColumnCardType = exports.TableColumnSomething = exports.PageTable = exports.TablePage = void 0;
33
+ exports.TableColumnCell = exports.TableColumnCardType = exports.TableColumnSomething = exports.PageTable = void 0;
34
34
  var jsx_runtime_1 = require("react/jsx-runtime");
35
35
  var react_core_1 = require("@patternfly/react-core");
36
36
  var react_icons_1 = require("@patternfly/react-icons");
@@ -46,18 +46,12 @@ var DateTimeCell_1 = require("../PageCells/DateTimeCell");
46
46
  var LabelsCell_1 = require("../PageCells/LabelsCell");
47
47
  var TextCell_1 = require("../PageCells/TextCell");
48
48
  var PageColumnModal_1 = require("../PageColumnModal");
49
- var PageHeader_1 = require("../PageHeader");
50
- var PageLayout_1 = require("../PageLayout");
51
49
  var Settings_1 = require("../Settings");
52
50
  var PagePagination_1 = require("./PagePagination");
53
51
  var PageTableCards_1 = require("./PageTableCards");
54
52
  var PageTableList_1 = require("./PageTableList");
55
53
  var PageTableViewType_1 = require("./PageTableViewType");
56
54
  var PageToolbar_1 = require("./PageToolbar");
57
- function TablePage(props) {
58
- return ((0, jsx_runtime_1.jsxs)(PageLayout_1.PageLayout, { children: [(0, jsx_runtime_1.jsx)(PageHeader_1.PageHeader, __assign({}, props)), (0, jsx_runtime_1.jsx)(PageTable, __assign({}, props))] }));
59
- }
60
- exports.TablePage = TablePage;
61
55
  /**
62
56
  * The PageTable component is used for adding a table to a page.
63
57
  *
@@ -28,9 +28,9 @@ var jsx_runtime_1 = require("react/jsx-runtime");
28
28
  /* eslint-disable @typescript-eslint/no-empty-function */
29
29
  var react_core_1 = require("@patternfly/react-core");
30
30
  var react_1 = require("react");
31
- var Details_1 = require("../components/Details");
32
31
  var IconWrapper_1 = require("../components/IconWrapper");
33
32
  var PageActions_1 = require("../PageActions/PageActions");
33
+ var PageDetail_1 = require("../PageDetails/PageDetail");
34
34
  var PageTable_1 = require("./PageTable");
35
35
  function PageTableCard(props) {
36
36
  var _a;
@@ -144,9 +144,9 @@ function useColumnsToTableCardFn(columns, keyFn) {
144
144
  icon: (_a = nameColumn === null || nameColumn === void 0 ? void 0 : nameColumn.icon) === null || _a === void 0 ? void 0 : _a.call(nameColumn, item),
145
145
  title: (0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: nameColumn, item: item }),
146
146
  subtitle: subtitleColumn && (!subtitleColumn.value || subtitleColumn.value(item)) && ((0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: subtitleColumn, item: item })),
147
- cardBody: ((0, jsx_runtime_1.jsx)(react_core_1.CardBody, { children: (0, jsx_runtime_1.jsxs)(react_core_1.DescriptionList, __assign({ isCompact: true }, { children: [hasDescription && ((0, jsx_runtime_1.jsx)(Details_1.Detail, { children: descriptionColumn.type === 'description' ? ((0, jsx_runtime_1.jsx)("div", { children: descriptionColumn.value(item) })) : ((0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: descriptionColumn, item: item })) }, descriptionColumn.id)), cardColumns
147
+ cardBody: ((0, jsx_runtime_1.jsx)(react_core_1.CardBody, { children: (0, jsx_runtime_1.jsxs)(react_core_1.DescriptionList, __assign({ isCompact: true }, { children: [hasDescription && ((0, jsx_runtime_1.jsx)(PageDetail_1.PageDetail, { children: descriptionColumn.type === 'description' ? ((0, jsx_runtime_1.jsx)("div", { children: descriptionColumn.value(item) })) : ((0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: descriptionColumn, item: item })) }, descriptionColumn.id)), cardColumns
148
148
  .filter(function (column) { return !column.value || column.value(item); })
149
- .map(function (column) { return ((0, jsx_runtime_1.jsx)(Details_1.Detail, __assign({ label: column.header }, { children: (0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: column, item: item }) }), column.id)); }), countColumns.length > 0 && ((0, jsx_runtime_1.jsx)(Details_1.Detail, { children: (0, jsx_runtime_1.jsx)("div", __assign({ style: { display: 'flex', gap: 16, marginTop: 8, flexWrap: 'wrap' } }, { children: countColumns.map(function (column, i) { return ((0, jsx_runtime_1.jsxs)("div", __assign({ style: { display: 'flex', gap: 6, alignItems: 'baseline' } }, { children: [(0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: column, item: item }), (0, jsx_runtime_1.jsx)("small", __assign({ style: { opacity: 0.7 } }, { children: column.header }))] }), i)); }) })) }))] })) })),
149
+ .map(function (column) { return ((0, jsx_runtime_1.jsx)(PageDetail_1.PageDetail, __assign({ label: column.header }, { children: (0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: column, item: item }) }), column.id)); }), countColumns.length > 0 && ((0, jsx_runtime_1.jsx)(PageDetail_1.PageDetail, { children: (0, jsx_runtime_1.jsx)("div", __assign({ style: { display: 'flex', gap: 16, marginTop: 8, flexWrap: 'wrap' } }, { children: countColumns.map(function (column, i) { return ((0, jsx_runtime_1.jsxs)("div", __assign({ style: { display: 'flex', gap: 6, alignItems: 'baseline' } }, { children: [(0, jsx_runtime_1.jsx)(PageTable_1.TableColumnCell, { column: column, item: item }), (0, jsx_runtime_1.jsx)("small", __assign({ style: { opacity: 0.7 } }, { children: column.header }))] }), i)); }) })) }))] })) })),
150
150
  labels: labelColumn && ((_b = labelColumn.value(item)) === null || _b === void 0 ? void 0 : _b.map(function (label) { return ({ label: label }); })),
151
151
  };
152
152
  if (!hasDescription && cardColumns.length === 0 && countColumns.length === 0) {
package/cjs/PageTabs.d.ts CHANGED
@@ -3,9 +3,10 @@ export declare function PageTabs(props: {
3
3
  children: ReactNode;
4
4
  preComponents?: ReactNode;
5
5
  postComponents?: ReactNode;
6
+ loading?: boolean;
6
7
  }): JSX.Element;
7
8
  export declare function PageTab(props: {
8
- title?: string;
9
+ label?: string;
9
10
  children: ReactNode;
10
11
  }): JSX.Element;
11
12
  export declare function PageTabsOld(props: {
package/cjs/PageTabs.js CHANGED
@@ -33,19 +33,23 @@ var react_core_1 = require("@patternfly/react-core");
33
33
  var react_1 = require("react");
34
34
  function PageTabs(props) {
35
35
  var _a;
36
+ var loading = props.loading;
36
37
  var _b = __read((0, react_1.useState)(0), 2), activeKey = _b[0], setActiveKey = _b[1];
37
38
  var onSelect = (0, react_1.useCallback)(function (_, key) { return setActiveKey(key); }, [setActiveKey]);
38
39
  var children = react_1.Children.toArray(props.children);
39
40
  var tabs = children.map(function (child, index) {
40
41
  if ((0, react_1.isValidElement)(child)) {
41
42
  if (child.type === PageTab) {
42
- var title = child.props.title;
43
- return ((0, jsx_runtime_1.jsx)(react_core_1.Tab, { title: title ? title : (0, jsx_runtime_1.jsx)(react_core_1.Skeleton, { width: "60px" }), eventKey: index }, title !== null && title !== void 0 ? title : index));
43
+ var label = child.props.label;
44
+ return ((0, jsx_runtime_1.jsx)(react_core_1.Tab, { title: label ? label : (0, jsx_runtime_1.jsx)(react_core_1.Skeleton, { width: "60px" }), eventKey: index }, label !== null && label !== void 0 ? label : index));
44
45
  }
45
46
  }
46
47
  return child;
47
48
  });
48
49
  var content = children[activeKey];
50
+ if (loading) {
51
+ return ((0, jsx_runtime_1.jsx)(PageTabs, { children: (0, jsx_runtime_1.jsx)(PageTab, { children: (0, jsx_runtime_1.jsx)(react_core_1.PageSection, __assign({ variant: "light" }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Skeleton, {}) })) }) }));
52
+ }
49
53
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_core_1.PageSection, __assign({ type: react_core_1.PageSectionTypes.tabs }, { children: (0, jsx_runtime_1.jsxs)(react_core_1.Flex, __assign({ spaceItems: { default: 'spaceItemsNone' } }, { children: [props.preComponents && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_core_1.FlexItem
50
54
  // style={{ paddingLeft: 16 }}
51
55
  , { children: props.preComponents }), (0, jsx_runtime_1.jsx)(react_core_1.Divider, { orientation: { default: 'vertical' }, component: "div" })] })), (0, jsx_runtime_1.jsx)(react_core_1.FlexItem, __assign({ grow: { default: 'grow' } }, { children: (0, jsx_runtime_1.jsx)(react_core_1.Tabs, __assign({ activeKey: activeKey, onSelect: onSelect, inset: props.preComponents
package/cjs/index.d.ts CHANGED
@@ -2,7 +2,6 @@ export * from './BulkActionDialog';
2
2
  export * from './BulkConfirmationDialog';
3
3
  export * from './components/BulkSelector';
4
4
  export * from './components/Collapse';
5
- export * from './components/Details';
6
5
  export * from './components/Help';
7
6
  export * from './components/icons/RunningIcon';
8
7
  export * from './components/pfcolors';
@@ -20,7 +19,9 @@ export * from './PageCells/DateTimeCell';
20
19
  export * from './PageCells/ElapsedTimeCell';
21
20
  export * from './PageCells/LabelsCell';
22
21
  export * from './PageCells/TextCell';
23
- export * from './PageDataList';
22
+ export * from './PageDetails/PageDetail';
23
+ export * from './PageDetails/PageDetails';
24
+ export * from './PageDetails/PageDetailsFromColumns';
24
25
  export * from './PageDialog';
25
26
  export * from './PageForm/Inputs/FormGroupSelect';
26
27
  export * from './PageForm/Inputs/FormGroupSelectOption';
@@ -31,7 +32,6 @@ export * from './PageHeader';
31
32
  export * from './PageLayout';
32
33
  export * from './PageTable/PageTable';
33
34
  export * from './PageTable/PageTableCards';
34
- export * from './PageTable/PageTableDetails';
35
35
  export * from './PageTable/PageToolbar';
36
36
  export * from './PageTable/useTableItems';
37
37
  export * from './PageTabs';