@bigbinary/neeto-molecules 3.16.86 → 3.16.87

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.
package/README.md CHANGED
@@ -81,6 +81,7 @@ https://neeto-molecules.neeto.com/
81
81
  - [Taxonomy](./docs/components/Taxonomy.md)
82
82
  - [TimezoneMismatchModal](./docs/components/TimezoneMismatchModal.md)
83
83
  - [ToggleFeatureCard](./docs/components/ToggleFeatureCard.md)
84
+ - [VersionHistory](./docs/components/VersionHistory.md)
84
85
 
85
86
  ## Installation Instructions
86
87
 
@@ -0,0 +1,215 @@
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
+ import { isNotEmpty } from '@bigbinary/neeto-cist';
3
+ import withT$1 from '@bigbinary/neeto-commons-frontend/react-utils/withT';
4
+ import Refresh from '@bigbinary/neeto-icons/Refresh';
5
+ import Button from '@bigbinary/neetoui/Button';
6
+ import Typography from '@bigbinary/neetoui/Typography';
7
+ import Pane from '@bigbinary/neetoui/Pane';
8
+ import Spinner from '@bigbinary/neetoui/Spinner';
9
+ import { t } from 'i18next';
10
+ import classnames from 'classnames';
11
+ import { withT } from '@bigbinary/neeto-commons-frontend/react-utils';
12
+ import Tag from '@bigbinary/neetoui/Tag';
13
+ import Avatar from '@bigbinary/neetoui/Avatar';
14
+ import DateFormat from './DateFormat.js';
15
+ import MoreDropdown from './MoreDropdown.js';
16
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
17
+ import { createElement } from 'react';
18
+ import '@bigbinary/neeto-commons-frontend/react-utils/useTimer';
19
+ import '@bigbinary/neeto-commons-frontend/utils/datetime';
20
+ import '@bigbinary/neetoui/Tooltip';
21
+ import 'ramda';
22
+ import '@babel/runtime/helpers/objectWithoutProperties';
23
+ import '@bigbinary/neeto-icons/MenuHorizontal';
24
+ import '@bigbinary/neeto-icons/MenuVertical';
25
+ import '@bigbinary/neetoui/Dropdown';
26
+ import 'react-i18next';
27
+ import './inject-css-DmrvuTKK.js';
28
+
29
+ var REFRESH_BUTTON_TOOLTIP_PROPS = Object.freeze({
30
+ content: t("neetoMolecules.versionHistory.refreshButtonTooltip"),
31
+ position: "bottom"
32
+ });
33
+
34
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
35
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
36
+ var Version = withT(function (_ref) {
37
+ var t = _ref.t,
38
+ id = _ref.id,
39
+ date = _ref.date,
40
+ user = _ref.user,
41
+ onClick = _ref.onClick,
42
+ _ref$isDraft = _ref.isDraft,
43
+ isDraft = _ref$isDraft === void 0 ? false : _ref$isDraft,
44
+ _ref$isPublished = _ref.isPublished,
45
+ isPublished = _ref$isPublished === void 0 ? false : _ref$isPublished,
46
+ _ref$showMoreDropdown = _ref.showMoreDropdown,
47
+ showMoreDropdown = _ref$showMoreDropdown === void 0 ? false : _ref$showMoreDropdown,
48
+ _ref$moreDropdownProp = _ref.moreDropdownProps,
49
+ moreDropdownProps = _ref$moreDropdownProp === void 0 ? {} : _ref$moreDropdownProp,
50
+ _ref$isLast = _ref.isLast,
51
+ isLast = _ref$isLast === void 0 ? false : _ref$isLast;
52
+ return /*#__PURE__*/jsxs("div", {
53
+ className: "flex w-full gap-2",
54
+ children: [/*#__PURE__*/jsxs("div", {
55
+ className: "relative mt-2.5 flex flex-col items-center",
56
+ children: [/*#__PURE__*/jsx("span", {
57
+ className: classnames("neeto-ui-rounded-full neeto-ui-bg-gray-300 relative z-10 h-2 w-2", {
58
+ "neeto-ui-bg-warning-500": isDraft
59
+ }, {
60
+ "neeto-ui-bg-primary-500": isPublished
61
+ })
62
+ }), !isLast && /*#__PURE__*/jsx("span", {
63
+ "aria-hidden": "true",
64
+ className: "neeto-ui-bg-gray-300 absolute left-1/2 top-[9px] z-0 h-full w-px -translate-x-1/2"
65
+ })]
66
+ }), /*#__PURE__*/jsx("div", {
67
+ onClick: onClick,
68
+ className: classnames("w-full", {
69
+ "pb-3": !isDraft
70
+ }),
71
+ children: /*#__PURE__*/jsxs("div", {
72
+ className: "neeto-ui-rounded hover:neeto-ui-bg-gray-100 flex flex-grow cursor-pointer justify-between gap-4 px-1.5 pb-1.5 pt-1 transition-all duration-300",
73
+ children: [/*#__PURE__*/jsxs("div", {
74
+ className: "flex flex-grow flex-col gap-2",
75
+ children: [/*#__PURE__*/jsxs("div", {
76
+ className: "flex items-center gap-2",
77
+ children: [/*#__PURE__*/jsx(Typography, {
78
+ style: "h5",
79
+ weight: "medium",
80
+ children: /*#__PURE__*/jsx(DateFormat.DateWeekTime, {
81
+ date: date,
82
+ typographyProps: {
83
+ style: "body3",
84
+ lineHeight: "snug"
85
+ }
86
+ })
87
+ }), isDraft && /*#__PURE__*/jsx(Tag, {
88
+ className: "float-left",
89
+ "data-testid": "version-history-draft-tag",
90
+ label: t("neetoMolecules.common.actions.draft"),
91
+ size: "small",
92
+ style: "warning"
93
+ })]
94
+ }), /*#__PURE__*/jsxs("div", {
95
+ className: "flex items-center gap-2",
96
+ children: [/*#__PURE__*/jsx(Avatar, {
97
+ size: "small",
98
+ user: {
99
+ name: user
100
+ }
101
+ }), /*#__PURE__*/jsx(Typography, {
102
+ style: "body3",
103
+ children: user
104
+ })]
105
+ })]
106
+ }), showMoreDropdown && /*#__PURE__*/jsx("div", {
107
+ className: "flex-shrink-0",
108
+ onClick: function onClick(e) {
109
+ return e.stopPropagation();
110
+ },
111
+ children: /*#__PURE__*/jsx(MoreDropdown, _objectSpread$1({
112
+ dropdownButtonProps: {
113
+ className: "m-1",
114
+ size: "small",
115
+ disabled: moreDropdownProps.disabled
116
+ },
117
+ dropdownProps: {
118
+ strategy: "fixed",
119
+ appendTo: function appendTo() {
120
+ return document.body;
121
+ }
122
+ }
123
+ }, moreDropdownProps))
124
+ })]
125
+ })
126
+ })]
127
+ }, id);
128
+ });
129
+
130
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
131
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
132
+ var VersionHistory = withT$1(function (_ref) {
133
+ var t = _ref.t,
134
+ isOpen = _ref.isOpen,
135
+ onClose = _ref.onClose,
136
+ isLoading = _ref.isLoading,
137
+ _ref$draftVersions = _ref.draftVersions,
138
+ draftVersions = _ref$draftVersions === void 0 ? [] : _ref$draftVersions,
139
+ _ref$publishedVersion = _ref.publishedVersions,
140
+ publishedVersions = _ref$publishedVersion === void 0 ? [] : _ref$publishedVersion,
141
+ paneTitle = _ref.paneTitle,
142
+ _ref$showRefreshButto = _ref.showRefreshButton,
143
+ showRefreshButton = _ref$showRefreshButto === void 0 ? false : _ref$showRefreshButto,
144
+ onRefreshClick = _ref.onRefreshClick;
145
+ return /*#__PURE__*/jsx(Pane, {
146
+ isOpen: isOpen,
147
+ onClose: onClose,
148
+ children: isLoading ? /*#__PURE__*/jsx("div", {
149
+ className: "flex h-full w-full items-center justify-center",
150
+ children: /*#__PURE__*/jsx(Spinner, {})
151
+ }) : /*#__PURE__*/jsxs(Fragment, {
152
+ children: [/*#__PURE__*/jsxs(Pane.Header, {
153
+ className: "flex justify-between",
154
+ children: [/*#__PURE__*/jsx(Typography, {
155
+ "data-testid": "version-history-pane-header",
156
+ lineHeight: "normal",
157
+ style: "h2",
158
+ weight: "semibold",
159
+ children: paneTitle || t("neetoMolecules.versionHistory.paneTitle")
160
+ }), showRefreshButton && /*#__PURE__*/jsx(Button, {
161
+ "data-testid": "version-history-refresh-button",
162
+ icon: Refresh,
163
+ iconSize: 18,
164
+ size: "small",
165
+ style: "text",
166
+ tooltipProps: REFRESH_BUTTON_TOOLTIP_PROPS,
167
+ onClick: onRefreshClick
168
+ })]
169
+ }), /*#__PURE__*/jsx(Pane.Body, {
170
+ children: /*#__PURE__*/jsxs("div", {
171
+ className: "w-full space-y-4",
172
+ children: [isNotEmpty(draftVersions) && /*#__PURE__*/jsx("div", {
173
+ className: "flex flex-col",
174
+ children: draftVersions.map(function (version, index) {
175
+ var isLast = index === draftVersions.length - 1;
176
+ return /*#__PURE__*/createElement(Version, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, version), {}, {
177
+ isLast: isLast
178
+ })), {}, {
179
+ key: version.id
180
+ }));
181
+ })
182
+ }), isNotEmpty(publishedVersions) && /*#__PURE__*/jsxs("div", {
183
+ className: "flex items-center",
184
+ children: [/*#__PURE__*/jsx("hr", {
185
+ className: "neeto-ui-border-gray-200 flex-grow"
186
+ }), /*#__PURE__*/jsx(Typography, {
187
+ className: "neeto-ui-bg-gray-200 neeto-ui-text-gray-800 neeto-ui-rounded inline-block px-3 py-1",
188
+ "data-cy": "version-history-published-title",
189
+ "data-testid": "version-history-published-title",
190
+ lineHeight: "normal",
191
+ style: "body3",
192
+ weight: "medium",
193
+ children: t("neetoMolecules.versionHistory.publishedVersions")
194
+ }), /*#__PURE__*/jsx("hr", {
195
+ className: "neeto-ui-border-gray-200 flex-grow"
196
+ })]
197
+ }), /*#__PURE__*/jsx("div", {
198
+ className: "flex flex-col",
199
+ children: publishedVersions.map(function (version, index) {
200
+ var isLast = index === publishedVersions.length - 1;
201
+ return /*#__PURE__*/createElement(Version, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, version), {}, {
202
+ isLast: isLast
203
+ })), {}, {
204
+ key: version.id
205
+ }));
206
+ })
207
+ })]
208
+ })
209
+ })]
210
+ })
211
+ });
212
+ });
213
+
214
+ export { VersionHistory as default };
215
+ //# sourceMappingURL=VersionHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionHistory.js","sources":["../src/components/VersionHistory/constants.js","../src/components/VersionHistory/Version.jsx","../src/components/VersionHistory/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\n\nexport const REFRESH_BUTTON_TOOLTIP_PROPS = Object.freeze({\n content: t(\"neetoMolecules.versionHistory.refreshButtonTooltip\"),\n position: \"bottom\",\n});\n","import classnames from \"classnames\";\nimport { withT } from \"neetocommons/react-utils\";\nimport { Typography, Tag, Avatar } from \"neetoui\";\n\nimport DateFormat from \"components/DateFormat\";\nimport MoreDropdown from \"components/MoreDropdown\";\n\nconst Version = withT(\n ({\n t,\n id,\n date,\n user,\n onClick,\n isDraft = false,\n isPublished = false,\n showMoreDropdown = false,\n moreDropdownProps = {},\n isLast = false,\n }) => (\n <div className=\"flex w-full gap-2\" key={id}>\n <div className=\"relative mt-2.5 flex flex-col items-center\">\n <span\n className={classnames(\n \"neeto-ui-rounded-full neeto-ui-bg-gray-300 relative z-10 h-2 w-2\",\n { \"neeto-ui-bg-warning-500\": isDraft },\n { \"neeto-ui-bg-primary-500\": isPublished }\n )}\n />\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className=\"neeto-ui-bg-gray-300 absolute left-1/2 top-[9px] z-0 h-full w-px -translate-x-1/2\"\n />\n )}\n </div>\n <div\n {...{ onClick }}\n className={classnames(\"w-full\", { \"pb-3\": !isDraft })}\n >\n <div className=\"neeto-ui-rounded hover:neeto-ui-bg-gray-100 flex flex-grow cursor-pointer justify-between gap-4 px-1.5 pb-1.5 pt-1 transition-all duration-300\">\n <div className=\"flex flex-grow flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <Typography style=\"h5\" weight=\"medium\">\n <DateFormat.DateWeekTime\n {...{ date }}\n typographyProps={{ style: \"body3\", lineHeight: \"snug\" }}\n />\n </Typography>\n {isDraft && (\n <Tag\n className=\"float-left\"\n data-testid=\"version-history-draft-tag\"\n label={t(\"neetoMolecules.common.actions.draft\")}\n size=\"small\"\n style=\"warning\"\n />\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Avatar size=\"small\" user={{ name: user }} />\n <Typography style=\"body3\">{user}</Typography>\n </div>\n </div>\n {showMoreDropdown && (\n <div className=\"flex-shrink-0\" onClick={e => e.stopPropagation()}>\n <MoreDropdown\n dropdownButtonProps={{\n className: \"m-1\",\n size: \"small\",\n disabled: moreDropdownProps.disabled,\n }}\n dropdownProps={{\n strategy: \"fixed\",\n appendTo: () => document.body,\n }}\n {...moreDropdownProps}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )\n);\n\nexport default Version;\n","import { isNotEmpty } from \"neetocist\";\nimport withT from \"neetocommons/react-utils/withT\";\nimport { Refresh } from \"neetoicons\";\nimport { Button, Typography, Pane, Spinner } from \"neetoui\";\nimport PropTypes from \"prop-types\";\n\nimport { REFRESH_BUTTON_TOOLTIP_PROPS } from \"./constants\";\nimport Version from \"./Version\";\n\nconst VersionHistory = withT(\n ({\n t,\n isOpen,\n onClose,\n isLoading,\n draftVersions = [],\n publishedVersions = [],\n paneTitle,\n showRefreshButton = false,\n onRefreshClick,\n }) => (\n <Pane {...{ isOpen, onClose }}>\n {isLoading ? (\n <div className=\"flex h-full w-full items-center justify-center\">\n <Spinner />\n </div>\n ) : (\n <>\n <Pane.Header className=\"flex justify-between\">\n <Typography\n data-testid=\"version-history-pane-header\"\n lineHeight=\"normal\"\n style=\"h2\"\n weight=\"semibold\"\n >\n {paneTitle || t(\"neetoMolecules.versionHistory.paneTitle\")}\n </Typography>\n {showRefreshButton && (\n <Button\n data-testid=\"version-history-refresh-button\"\n icon={Refresh}\n iconSize={18}\n size=\"small\"\n style=\"text\"\n tooltipProps={REFRESH_BUTTON_TOOLTIP_PROPS}\n onClick={onRefreshClick}\n />\n )}\n </Pane.Header>\n <Pane.Body>\n <div className=\"w-full space-y-4\">\n {isNotEmpty(draftVersions) && (\n <div className=\"flex flex-col\">\n {draftVersions.map((version, index) => {\n const isLast = index === draftVersions.length - 1;\n\n return (\n <Version {...{ ...version, isLast }} key={version.id} />\n );\n })}\n </div>\n )}\n {isNotEmpty(publishedVersions) && (\n <div className=\"flex items-center\">\n <hr className=\"neeto-ui-border-gray-200 flex-grow\" />\n <Typography\n className=\"neeto-ui-bg-gray-200 neeto-ui-text-gray-800 neeto-ui-rounded inline-block px-3 py-1\"\n data-cy=\"version-history-published-title\"\n data-testid=\"version-history-published-title\"\n lineHeight=\"normal\"\n style=\"body3\"\n weight=\"medium\"\n >\n {t(\"neetoMolecules.versionHistory.publishedVersions\")}\n </Typography>\n <hr className=\"neeto-ui-border-gray-200 flex-grow\" />\n </div>\n )}\n <div className=\"flex flex-col\">\n {publishedVersions.map((version, index) => {\n const isLast = index === publishedVersions.length - 1;\n\n return (\n <Version {...{ ...version, isLast }} key={version.id} />\n );\n })}\n </div>\n </div>\n </Pane.Body>\n </>\n )}\n </Pane>\n )\n);\n\nVersionHistory.propTypes = {\n /**\n * To specify whether the version history pane should be opened or closed.\n */\n isOpen: PropTypes.bool.isRequired,\n /**\n * Handler function that is triggered when the close button is clicked.\n */\n onClose: PropTypes.func.isRequired,\n /**\n * Boolean flag to show loading state with spinner.\n */\n isLoading: PropTypes.bool,\n /**\n * Array of draft version objects to be displayed in the version history.\n */\n draftVersions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n date: PropTypes.instanceOf(Date).isRequired,\n user: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n isDraft: PropTypes.bool,\n isPublished: PropTypes.bool,\n showMoreDropdown: PropTypes.bool,\n moreDropdownProps: PropTypes.object,\n })\n ),\n /**\n * Array of published version objects to be displayed in the version history.\n */\n publishedVersions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n date: PropTypes.instanceOf(Date).isRequired,\n user: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n isDraft: PropTypes.bool,\n isPublished: PropTypes.bool,\n showMoreDropdown: PropTypes.bool,\n moreDropdownProps: PropTypes.object,\n })\n ),\n /**\n * Custom title to be displayed in the pane header. If not provided, a default title will be used.\n */\n paneTitle: PropTypes.string,\n /**\n * Boolean flag to show or hide the refresh button in the pane header.\n */\n showRefreshButton: PropTypes.bool,\n /**\n * Handler function that is triggered when the refresh button is clicked.\n */\n onRefreshClick: PropTypes.func,\n};\n\nexport default VersionHistory;\n"],"names":["REFRESH_BUTTON_TOOLTIP_PROPS","Object","freeze","content","t","position","Version","withT","_ref","id","date","user","onClick","_ref$isDraft","isDraft","_ref$isPublished","isPublished","_ref$showMoreDropdown","showMoreDropdown","_ref$moreDropdownProp","moreDropdownProps","_ref$isLast","isLast","_jsxs","className","children","_jsx","classnames","Typography","style","weight","DateFormat","DateWeekTime","typographyProps","lineHeight","Tag","label","size","Avatar","name","e","stopPropagation","MoreDropdown","_objectSpread","dropdownButtonProps","disabled","dropdownProps","strategy","appendTo","document","body","VersionHistory","isOpen","onClose","isLoading","_ref$draftVersions","draftVersions","_ref$publishedVersion","publishedVersions","paneTitle","_ref$showRefreshButto","showRefreshButton","onRefreshClick","Pane","Spinner","_Fragment","Header","Button","icon","Refresh","iconSize","tooltipProps","Body","isNotEmpty","map","version","index","length","_createElement","key"],"mappings":"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"}
@@ -0,0 +1,217 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var neetoCist = require('@bigbinary/neeto-cist');
5
+ var withT = require('@bigbinary/neeto-commons-frontend/react-utils/withT');
6
+ var Refresh = require('@bigbinary/neeto-icons/Refresh');
7
+ var Button = require('@bigbinary/neetoui/Button');
8
+ var Typography = require('@bigbinary/neetoui/Typography');
9
+ var Pane = require('@bigbinary/neetoui/Pane');
10
+ var Spinner = require('@bigbinary/neetoui/Spinner');
11
+ var i18next = require('i18next');
12
+ var classnames = require('classnames');
13
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
14
+ var Tag = require('@bigbinary/neetoui/Tag');
15
+ var Avatar = require('@bigbinary/neetoui/Avatar');
16
+ var DateFormat = require('./DateFormat.js');
17
+ var MoreDropdown = require('./MoreDropdown.js');
18
+ var jsxRuntime = require('react/jsx-runtime');
19
+ var React = require('react');
20
+ require('@bigbinary/neeto-commons-frontend/react-utils/useTimer');
21
+ require('@bigbinary/neeto-commons-frontend/utils/datetime');
22
+ require('@bigbinary/neetoui/Tooltip');
23
+ require('ramda');
24
+ require('@babel/runtime/helpers/objectWithoutProperties');
25
+ require('@bigbinary/neeto-icons/MenuHorizontal');
26
+ require('@bigbinary/neeto-icons/MenuVertical');
27
+ require('@bigbinary/neetoui/Dropdown');
28
+ require('react-i18next');
29
+ require('./inject-css-vQvjPR2x.js');
30
+
31
+ var REFRESH_BUTTON_TOOLTIP_PROPS = Object.freeze({
32
+ content: i18next.t("neetoMolecules.versionHistory.refreshButtonTooltip"),
33
+ position: "bottom"
34
+ });
35
+
36
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
38
+ var Version = reactUtils.withT(function (_ref) {
39
+ var t = _ref.t,
40
+ id = _ref.id,
41
+ date = _ref.date,
42
+ user = _ref.user,
43
+ onClick = _ref.onClick,
44
+ _ref$isDraft = _ref.isDraft,
45
+ isDraft = _ref$isDraft === void 0 ? false : _ref$isDraft,
46
+ _ref$isPublished = _ref.isPublished,
47
+ isPublished = _ref$isPublished === void 0 ? false : _ref$isPublished,
48
+ _ref$showMoreDropdown = _ref.showMoreDropdown,
49
+ showMoreDropdown = _ref$showMoreDropdown === void 0 ? false : _ref$showMoreDropdown,
50
+ _ref$moreDropdownProp = _ref.moreDropdownProps,
51
+ moreDropdownProps = _ref$moreDropdownProp === void 0 ? {} : _ref$moreDropdownProp,
52
+ _ref$isLast = _ref.isLast,
53
+ isLast = _ref$isLast === void 0 ? false : _ref$isLast;
54
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
55
+ className: "flex w-full gap-2",
56
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
57
+ className: "relative mt-2.5 flex flex-col items-center",
58
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
59
+ className: classnames("neeto-ui-rounded-full neeto-ui-bg-gray-300 relative z-10 h-2 w-2", {
60
+ "neeto-ui-bg-warning-500": isDraft
61
+ }, {
62
+ "neeto-ui-bg-primary-500": isPublished
63
+ })
64
+ }), !isLast && /*#__PURE__*/jsxRuntime.jsx("span", {
65
+ "aria-hidden": "true",
66
+ className: "neeto-ui-bg-gray-300 absolute left-1/2 top-[9px] z-0 h-full w-px -translate-x-1/2"
67
+ })]
68
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
69
+ onClick: onClick,
70
+ className: classnames("w-full", {
71
+ "pb-3": !isDraft
72
+ }),
73
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
74
+ className: "neeto-ui-rounded hover:neeto-ui-bg-gray-100 flex flex-grow cursor-pointer justify-between gap-4 px-1.5 pb-1.5 pt-1 transition-all duration-300",
75
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
76
+ className: "flex flex-grow flex-col gap-2",
77
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
78
+ className: "flex items-center gap-2",
79
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
80
+ style: "h5",
81
+ weight: "medium",
82
+ children: /*#__PURE__*/jsxRuntime.jsx(DateFormat.DateWeekTime, {
83
+ date: date,
84
+ typographyProps: {
85
+ style: "body3",
86
+ lineHeight: "snug"
87
+ }
88
+ })
89
+ }), isDraft && /*#__PURE__*/jsxRuntime.jsx(Tag, {
90
+ className: "float-left",
91
+ "data-testid": "version-history-draft-tag",
92
+ label: t("neetoMolecules.common.actions.draft"),
93
+ size: "small",
94
+ style: "warning"
95
+ })]
96
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
97
+ className: "flex items-center gap-2",
98
+ children: [/*#__PURE__*/jsxRuntime.jsx(Avatar, {
99
+ size: "small",
100
+ user: {
101
+ name: user
102
+ }
103
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography, {
104
+ style: "body3",
105
+ children: user
106
+ })]
107
+ })]
108
+ }), showMoreDropdown && /*#__PURE__*/jsxRuntime.jsx("div", {
109
+ className: "flex-shrink-0",
110
+ onClick: function onClick(e) {
111
+ return e.stopPropagation();
112
+ },
113
+ children: /*#__PURE__*/jsxRuntime.jsx(MoreDropdown, _objectSpread$1({
114
+ dropdownButtonProps: {
115
+ className: "m-1",
116
+ size: "small",
117
+ disabled: moreDropdownProps.disabled
118
+ },
119
+ dropdownProps: {
120
+ strategy: "fixed",
121
+ appendTo: function appendTo() {
122
+ return document.body;
123
+ }
124
+ }
125
+ }, moreDropdownProps))
126
+ })]
127
+ })
128
+ })]
129
+ }, id);
130
+ });
131
+
132
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
133
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
134
+ var VersionHistory = withT(function (_ref) {
135
+ var t = _ref.t,
136
+ isOpen = _ref.isOpen,
137
+ onClose = _ref.onClose,
138
+ isLoading = _ref.isLoading,
139
+ _ref$draftVersions = _ref.draftVersions,
140
+ draftVersions = _ref$draftVersions === void 0 ? [] : _ref$draftVersions,
141
+ _ref$publishedVersion = _ref.publishedVersions,
142
+ publishedVersions = _ref$publishedVersion === void 0 ? [] : _ref$publishedVersion,
143
+ paneTitle = _ref.paneTitle,
144
+ _ref$showRefreshButto = _ref.showRefreshButton,
145
+ showRefreshButton = _ref$showRefreshButto === void 0 ? false : _ref$showRefreshButto,
146
+ onRefreshClick = _ref.onRefreshClick;
147
+ return /*#__PURE__*/jsxRuntime.jsx(Pane, {
148
+ isOpen: isOpen,
149
+ onClose: onClose,
150
+ children: isLoading ? /*#__PURE__*/jsxRuntime.jsx("div", {
151
+ className: "flex h-full w-full items-center justify-center",
152
+ children: /*#__PURE__*/jsxRuntime.jsx(Spinner, {})
153
+ }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
154
+ children: [/*#__PURE__*/jsxRuntime.jsxs(Pane.Header, {
155
+ className: "flex justify-between",
156
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
157
+ "data-testid": "version-history-pane-header",
158
+ lineHeight: "normal",
159
+ style: "h2",
160
+ weight: "semibold",
161
+ children: paneTitle || t("neetoMolecules.versionHistory.paneTitle")
162
+ }), showRefreshButton && /*#__PURE__*/jsxRuntime.jsx(Button, {
163
+ "data-testid": "version-history-refresh-button",
164
+ icon: Refresh,
165
+ iconSize: 18,
166
+ size: "small",
167
+ style: "text",
168
+ tooltipProps: REFRESH_BUTTON_TOOLTIP_PROPS,
169
+ onClick: onRefreshClick
170
+ })]
171
+ }), /*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
172
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
173
+ className: "w-full space-y-4",
174
+ children: [neetoCist.isNotEmpty(draftVersions) && /*#__PURE__*/jsxRuntime.jsx("div", {
175
+ className: "flex flex-col",
176
+ children: draftVersions.map(function (version, index) {
177
+ var isLast = index === draftVersions.length - 1;
178
+ return /*#__PURE__*/React.createElement(Version, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, version), {}, {
179
+ isLast: isLast
180
+ })), {}, {
181
+ key: version.id
182
+ }));
183
+ })
184
+ }), neetoCist.isNotEmpty(publishedVersions) && /*#__PURE__*/jsxRuntime.jsxs("div", {
185
+ className: "flex items-center",
186
+ children: [/*#__PURE__*/jsxRuntime.jsx("hr", {
187
+ className: "neeto-ui-border-gray-200 flex-grow"
188
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography, {
189
+ className: "neeto-ui-bg-gray-200 neeto-ui-text-gray-800 neeto-ui-rounded inline-block px-3 py-1",
190
+ "data-cy": "version-history-published-title",
191
+ "data-testid": "version-history-published-title",
192
+ lineHeight: "normal",
193
+ style: "body3",
194
+ weight: "medium",
195
+ children: t("neetoMolecules.versionHistory.publishedVersions")
196
+ }), /*#__PURE__*/jsxRuntime.jsx("hr", {
197
+ className: "neeto-ui-border-gray-200 flex-grow"
198
+ })]
199
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
200
+ className: "flex flex-col",
201
+ children: publishedVersions.map(function (version, index) {
202
+ var isLast = index === publishedVersions.length - 1;
203
+ return /*#__PURE__*/React.createElement(Version, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, version), {}, {
204
+ isLast: isLast
205
+ })), {}, {
206
+ key: version.id
207
+ }));
208
+ })
209
+ })]
210
+ })
211
+ })]
212
+ })
213
+ });
214
+ });
215
+
216
+ module.exports = VersionHistory;
217
+ //# sourceMappingURL=VersionHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionHistory.js","sources":["../../src/components/VersionHistory/constants.js","../../src/components/VersionHistory/Version.jsx","../../src/components/VersionHistory/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\n\nexport const REFRESH_BUTTON_TOOLTIP_PROPS = Object.freeze({\n content: t(\"neetoMolecules.versionHistory.refreshButtonTooltip\"),\n position: \"bottom\",\n});\n","import classnames from \"classnames\";\nimport { withT } from \"neetocommons/react-utils\";\nimport { Typography, Tag, Avatar } from \"neetoui\";\n\nimport DateFormat from \"components/DateFormat\";\nimport MoreDropdown from \"components/MoreDropdown\";\n\nconst Version = withT(\n ({\n t,\n id,\n date,\n user,\n onClick,\n isDraft = false,\n isPublished = false,\n showMoreDropdown = false,\n moreDropdownProps = {},\n isLast = false,\n }) => (\n <div className=\"flex w-full gap-2\" key={id}>\n <div className=\"relative mt-2.5 flex flex-col items-center\">\n <span\n className={classnames(\n \"neeto-ui-rounded-full neeto-ui-bg-gray-300 relative z-10 h-2 w-2\",\n { \"neeto-ui-bg-warning-500\": isDraft },\n { \"neeto-ui-bg-primary-500\": isPublished }\n )}\n />\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className=\"neeto-ui-bg-gray-300 absolute left-1/2 top-[9px] z-0 h-full w-px -translate-x-1/2\"\n />\n )}\n </div>\n <div\n {...{ onClick }}\n className={classnames(\"w-full\", { \"pb-3\": !isDraft })}\n >\n <div className=\"neeto-ui-rounded hover:neeto-ui-bg-gray-100 flex flex-grow cursor-pointer justify-between gap-4 px-1.5 pb-1.5 pt-1 transition-all duration-300\">\n <div className=\"flex flex-grow flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <Typography style=\"h5\" weight=\"medium\">\n <DateFormat.DateWeekTime\n {...{ date }}\n typographyProps={{ style: \"body3\", lineHeight: \"snug\" }}\n />\n </Typography>\n {isDraft && (\n <Tag\n className=\"float-left\"\n data-testid=\"version-history-draft-tag\"\n label={t(\"neetoMolecules.common.actions.draft\")}\n size=\"small\"\n style=\"warning\"\n />\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Avatar size=\"small\" user={{ name: user }} />\n <Typography style=\"body3\">{user}</Typography>\n </div>\n </div>\n {showMoreDropdown && (\n <div className=\"flex-shrink-0\" onClick={e => e.stopPropagation()}>\n <MoreDropdown\n dropdownButtonProps={{\n className: \"m-1\",\n size: \"small\",\n disabled: moreDropdownProps.disabled,\n }}\n dropdownProps={{\n strategy: \"fixed\",\n appendTo: () => document.body,\n }}\n {...moreDropdownProps}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )\n);\n\nexport default Version;\n","import { isNotEmpty } from \"neetocist\";\nimport withT from \"neetocommons/react-utils/withT\";\nimport { Refresh } from \"neetoicons\";\nimport { Button, Typography, Pane, Spinner } from \"neetoui\";\nimport PropTypes from \"prop-types\";\n\nimport { REFRESH_BUTTON_TOOLTIP_PROPS } from \"./constants\";\nimport Version from \"./Version\";\n\nconst VersionHistory = withT(\n ({\n t,\n isOpen,\n onClose,\n isLoading,\n draftVersions = [],\n publishedVersions = [],\n paneTitle,\n showRefreshButton = false,\n onRefreshClick,\n }) => (\n <Pane {...{ isOpen, onClose }}>\n {isLoading ? (\n <div className=\"flex h-full w-full items-center justify-center\">\n <Spinner />\n </div>\n ) : (\n <>\n <Pane.Header className=\"flex justify-between\">\n <Typography\n data-testid=\"version-history-pane-header\"\n lineHeight=\"normal\"\n style=\"h2\"\n weight=\"semibold\"\n >\n {paneTitle || t(\"neetoMolecules.versionHistory.paneTitle\")}\n </Typography>\n {showRefreshButton && (\n <Button\n data-testid=\"version-history-refresh-button\"\n icon={Refresh}\n iconSize={18}\n size=\"small\"\n style=\"text\"\n tooltipProps={REFRESH_BUTTON_TOOLTIP_PROPS}\n onClick={onRefreshClick}\n />\n )}\n </Pane.Header>\n <Pane.Body>\n <div className=\"w-full space-y-4\">\n {isNotEmpty(draftVersions) && (\n <div className=\"flex flex-col\">\n {draftVersions.map((version, index) => {\n const isLast = index === draftVersions.length - 1;\n\n return (\n <Version {...{ ...version, isLast }} key={version.id} />\n );\n })}\n </div>\n )}\n {isNotEmpty(publishedVersions) && (\n <div className=\"flex items-center\">\n <hr className=\"neeto-ui-border-gray-200 flex-grow\" />\n <Typography\n className=\"neeto-ui-bg-gray-200 neeto-ui-text-gray-800 neeto-ui-rounded inline-block px-3 py-1\"\n data-cy=\"version-history-published-title\"\n data-testid=\"version-history-published-title\"\n lineHeight=\"normal\"\n style=\"body3\"\n weight=\"medium\"\n >\n {t(\"neetoMolecules.versionHistory.publishedVersions\")}\n </Typography>\n <hr className=\"neeto-ui-border-gray-200 flex-grow\" />\n </div>\n )}\n <div className=\"flex flex-col\">\n {publishedVersions.map((version, index) => {\n const isLast = index === publishedVersions.length - 1;\n\n return (\n <Version {...{ ...version, isLast }} key={version.id} />\n );\n })}\n </div>\n </div>\n </Pane.Body>\n </>\n )}\n </Pane>\n )\n);\n\nVersionHistory.propTypes = {\n /**\n * To specify whether the version history pane should be opened or closed.\n */\n isOpen: PropTypes.bool.isRequired,\n /**\n * Handler function that is triggered when the close button is clicked.\n */\n onClose: PropTypes.func.isRequired,\n /**\n * Boolean flag to show loading state with spinner.\n */\n isLoading: PropTypes.bool,\n /**\n * Array of draft version objects to be displayed in the version history.\n */\n draftVersions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n date: PropTypes.instanceOf(Date).isRequired,\n user: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n isDraft: PropTypes.bool,\n isPublished: PropTypes.bool,\n showMoreDropdown: PropTypes.bool,\n moreDropdownProps: PropTypes.object,\n })\n ),\n /**\n * Array of published version objects to be displayed in the version history.\n */\n publishedVersions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n date: PropTypes.instanceOf(Date).isRequired,\n user: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n isDraft: PropTypes.bool,\n isPublished: PropTypes.bool,\n showMoreDropdown: PropTypes.bool,\n moreDropdownProps: PropTypes.object,\n })\n ),\n /**\n * Custom title to be displayed in the pane header. If not provided, a default title will be used.\n */\n paneTitle: PropTypes.string,\n /**\n * Boolean flag to show or hide the refresh button in the pane header.\n */\n showRefreshButton: PropTypes.bool,\n /**\n * Handler function that is triggered when the refresh button is clicked.\n */\n onRefreshClick: PropTypes.func,\n};\n\nexport default VersionHistory;\n"],"names":["REFRESH_BUTTON_TOOLTIP_PROPS","Object","freeze","content","t","position","Version","withT","_ref","id","date","user","onClick","_ref$isDraft","isDraft","_ref$isPublished","isPublished","_ref$showMoreDropdown","showMoreDropdown","_ref$moreDropdownProp","moreDropdownProps","_ref$isLast","isLast","_jsxs","className","children","_jsx","classnames","Typography","style","weight","DateFormat","DateWeekTime","typographyProps","lineHeight","Tag","label","size","Avatar","name","e","stopPropagation","MoreDropdown","_objectSpread","dropdownButtonProps","disabled","dropdownProps","strategy","appendTo","document","body","VersionHistory","isOpen","onClose","isLoading","_ref$draftVersions","draftVersions","_ref$publishedVersion","publishedVersions","paneTitle","_ref$showRefreshButto","showRefreshButton","onRefreshClick","Pane","Spinner","_Fragment","Header","Button","icon","Refresh","iconSize","tooltipProps","Body","isNotEmpty","map","version","index","length","_createElement","key"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-molecules",
3
- "version": "3.16.86",
3
+ "version": "3.16.87",
4
4
  "description": "A package of reusable molecular components for neeto products.",
5
5
  "repository": "git@github.com:bigbinary/neeto-molecules.git",
6
6
  "author": "Amaljith K <amaljith.k@bigbinary.com>",
@@ -847,6 +847,11 @@
847
847
  },
848
848
  "statusDropdown": {
849
849
  "placeholder": "Select a status"
850
+ },
851
+ "versionHistory": {
852
+ "paneTitle": "Version history",
853
+ "publishedVersions": "Published versions",
854
+ "refreshButtonTooltip": "Refresh version history"
850
855
  }
851
856
  }
852
857
  }
@@ -0,0 +1,205 @@
1
+ import React from 'react';
2
+
3
+ type Version = {
4
+ id: string;
5
+ date: Date;
6
+ user: string;
7
+ onClick?: () => void;
8
+ isDraft?: boolean;
9
+ isPublished?: boolean;
10
+ showMoreDropdown?: boolean;
11
+ moreDropdownProps?: MoreDropdownProps;
12
+ };
13
+ type MoreDropdownProps = {
14
+ menuItems: MenuItem[];
15
+ disabled?: boolean;
16
+ dropdownButtonProps?: Record<string, any>;
17
+ dropdownProps?: Record<string, any>;
18
+ };
19
+ type MenuItem = {
20
+ key: string;
21
+ label: string;
22
+ onClick: () => void;
23
+ prefix?: React.ReactNode;
24
+ suffix?: React.ReactNode;
25
+ disabled?: boolean;
26
+ [key: string]: any;
27
+ };
28
+ /**
29
+ *
30
+ * A React component that displays a timeline of versions with user information,
31
+ *
32
+ * dates, and status indicators. Each version can be a draft, published, or regular
33
+ *
34
+ * version with optional dropdown actions.
35
+ *
36
+ * undefined
37
+ *
38
+ * undefined
39
+ *
40
+ * Each version object in draftVersions and publishedVersions should have the
41
+ *
42
+ * following properties:
43
+ *
44
+ * @example
45
+ *
46
+ * {
47
+ * id: string, // Required: Unique identifier for the version
48
+ * date: Date, // Required: Date when the version was created
49
+ * user: string, // Required: Name of the user who created this version
50
+ * onClick: function, // Optional: Function called when version is clicked
51
+ * isDraft: boolean, // Optional: Whether this is a draft version
52
+ * isPublished: boolean, // Optional: Whether this is a published version
53
+ * showMoreDropdown: boolean, // Optional: Whether to show more dropdown menu
54
+ * moreDropdownProps: object, // Optional: Props for MoreDropdown component
55
+ * }
56
+ * @endexample
57
+ * @example
58
+ *
59
+ * import VersionHistory from "@bigbinary/neeto-molecules/VersionHistory";
60
+ *
61
+ * const MyComponent = () => {
62
+ * const [isOpen, setIsOpen] = useState(false);
63
+ *
64
+ * const draftVersions = [
65
+ * {
66
+ * id: "draft-1",
67
+ * date: new Date("2024-01-15T10:30:00"),
68
+ * user: "Oliver Smith",
69
+ * isDraft: true,
70
+ * },
71
+ * ];
72
+ *
73
+ * const publishedVersions = [
74
+ * {
75
+ * id: "pub-1",
76
+ * date: new Date("2024-01-14T15:45:00"),
77
+ * user: "Sam Smith",
78
+ * isPublished: true,
79
+ * },
80
+ * ];
81
+ *
82
+ * return (
83
+ * <VersionHistory
84
+ * isOpen={isOpen}
85
+ * onClose={() => setIsOpen(false)}
86
+ * draftVersions={draftVersions}
87
+ * publishedVersions={publishedVersions}
88
+ * />
89
+ * );
90
+ * };
91
+ * @endexample
92
+ * @example
93
+ *
94
+ * import VersionHistory from "@bigbinary/neeto-molecules/VersionHistory";
95
+ * import { Refresh } from "neetoicons";
96
+ *
97
+ * const MyComponent = () => {
98
+ * const [isOpen, setIsOpen] = useState(false);
99
+ *
100
+ * const draftVersions = [
101
+ * {
102
+ * id: "draft-1",
103
+ * date: new Date("2024-01-15T10:30:00"),
104
+ * user: "Oliver Smith",
105
+ * isDraft: true,
106
+ * },
107
+ * ];
108
+ *
109
+ * const publishedVersions = [
110
+ * {
111
+ * id: "pub-1",
112
+ * date: new Date(),
113
+ * user: "Sam Smith",
114
+ * isPublished: true,
115
+ * showMoreDropdown: true,
116
+ * moreDropdownProps: {
117
+ * menuItems: [
118
+ * {
119
+ * key: "revert",
120
+ * label: "Revert to this version",
121
+ * onClick: () => handleRevert("version-1"),
122
+ * prefix: <Refresh size={16} />,
123
+ * },
124
+ * ],
125
+ * },
126
+ * },
127
+ * ];
128
+ *
129
+ * return (
130
+ * <VersionHistory
131
+ * isOpen={isOpen}
132
+ * onClose={() => setIsOpen(false)}
133
+ * draftVersions={draftVersions}
134
+ * publishedVersions={publishedVersions}
135
+ * />
136
+ * );
137
+ * };
138
+ * @endexample
139
+ * @example
140
+ *
141
+ * import VersionHistory from "@bigbinary/neeto-molecules/VersionHistory";
142
+ *
143
+ * const MyComponent = () => {
144
+ * const [isOpen, setIsOpen] = useState(false);
145
+ *
146
+ * const handleRefresh = () => {
147
+ * // Fetch updated versions
148
+ * fetchVersions();
149
+ * };
150
+ *
151
+ * const draftVersions = [
152
+ * {
153
+ * id: "draft-1",
154
+ * date: new Date("2024-01-15T10:30:00"),
155
+ * user: "Oliver Smith",
156
+ * isDraft: true,
157
+ * },
158
+ * ];
159
+ *
160
+ * const publishedVersions = [
161
+ * {
162
+ * id: "version-1",
163
+ * date: new Date(),
164
+ * user: "Sam Smith",
165
+ * isPublished: true,
166
+ * showMoreDropdown: true,
167
+ * moreDropdownProps: {
168
+ * menuItems: [
169
+ * {
170
+ * key: "revert",
171
+ * label: "Revert to this version",
172
+ * onClick: () => handleRevert("version-1"),
173
+ * prefix: <Refresh size={16} />,
174
+ * },
175
+ * ],
176
+ * },
177
+ * },
178
+ * ];
179
+ *
180
+ * return (
181
+ * <VersionHistory
182
+ * isOpen={isOpen}
183
+ * onClose={() => setIsOpen(false)}
184
+ * paneTitle="Article Version History"
185
+ * showRefreshButton={true}
186
+ * onRefreshClick={handleRefresh}
187
+ * draftVersions={draftVersions}
188
+ * publishedVersions={publishedVersions}
189
+ * />
190
+ * );
191
+ * };
192
+ * @endexample
193
+ */
194
+ declare const VersionHistory: React.FC<{
195
+ isOpen: boolean;
196
+ onClose: () => void;
197
+ isLoading?: boolean;
198
+ draftVersions?: Version[];
199
+ publishedVersions?: Version[];
200
+ paneTitle?: string;
201
+ showRefreshButton?: boolean;
202
+ onRefreshClick?: () => void;
203
+ }>;
204
+
205
+ export { VersionHistory as default };