@teambit/component.ui.version-dropdown 0.0.0-0fcec20801a4b40c3b5cc91a8c8ae02e1ff20ddb

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 (52) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.js +9 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/lane-info/index.d.ts +2 -0
  5. package/dist/lane-info/index.js +6 -0
  6. package/dist/lane-info/index.js.map +1 -0
  7. package/dist/lane-info/lane-info.d.ts +6 -0
  8. package/dist/lane-info/lane-info.js +20 -0
  9. package/dist/lane-info/lane-info.js.map +1 -0
  10. package/dist/lane-info/lane-info.module.scss +27 -0
  11. package/dist/preview-1753277474239.js +7 -0
  12. package/dist/version-dropdown-placeholder.d.ts +16 -0
  13. package/dist/version-dropdown-placeholder.js +92 -0
  14. package/dist/version-dropdown-placeholder.js.map +1 -0
  15. package/dist/version-dropdown-placeholder.module.scss +50 -0
  16. package/dist/version-dropdown.composition.d.ts +3 -0
  17. package/dist/version-dropdown.composition.js +28 -0
  18. package/dist/version-dropdown.composition.js.map +1 -0
  19. package/dist/version-dropdown.d.ts +53 -0
  20. package/dist/version-dropdown.docs.d.ts +35 -0
  21. package/dist/version-dropdown.docs.js +67 -0
  22. package/dist/version-dropdown.docs.js.map +1 -0
  23. package/dist/version-dropdown.js +153 -0
  24. package/dist/version-dropdown.js.map +1 -0
  25. package/dist/version-dropdown.module.scss +128 -0
  26. package/dist/version-dropdown.spec.d.ts +1 -0
  27. package/dist/version-dropdown.spec.js +33 -0
  28. package/dist/version-dropdown.spec.js.map +1 -0
  29. package/dist/version-info/index.d.ts +2 -0
  30. package/dist/version-info/index.js +6 -0
  31. package/dist/version-info/index.js.map +1 -0
  32. package/dist/version-info/version-info.d.ts +10 -0
  33. package/dist/version-info/version-info.js +79 -0
  34. package/dist/version-info/version-info.js.map +1 -0
  35. package/dist/version-info/version-info.module.scss +54 -0
  36. package/index.ts +4 -0
  37. package/lane-info/index.ts +2 -0
  38. package/lane-info/lane-info.module.scss +27 -0
  39. package/lane-info/lane-info.tsx +22 -0
  40. package/package.json +71 -0
  41. package/types/asset.d.ts +29 -0
  42. package/types/style.d.ts +42 -0
  43. package/version-dropdown-placeholder.module.scss +50 -0
  44. package/version-dropdown-placeholder.tsx +108 -0
  45. package/version-dropdown.composition.tsx +36 -0
  46. package/version-dropdown.docs.tsx +68 -0
  47. package/version-dropdown.module.scss +128 -0
  48. package/version-dropdown.spec.tsx +29 -0
  49. package/version-dropdown.tsx +330 -0
  50. package/version-info/index.ts +2 -0
  51. package/version-info/version-info.module.scss +54 -0
  52. package/version-info/version-info.tsx +87 -0
@@ -0,0 +1,4 @@
1
+ export { SimpleVersion, DetailedVersion } from './version-dropdown-placeholder';
2
+ export type { VersionProps } from './version-dropdown-placeholder';
3
+ export { VersionDropdown } from './version-dropdown';
4
+ export type { DropdownComponentVersion, GetActiveTabIndex } from './version-dropdown';
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionDropdown = exports.DetailedVersion = exports.SimpleVersion = void 0;
4
+ var version_dropdown_placeholder_1 = require("./version-dropdown-placeholder");
5
+ Object.defineProperty(exports, "SimpleVersion", { enumerable: true, get: function () { return version_dropdown_placeholder_1.SimpleVersion; } });
6
+ Object.defineProperty(exports, "DetailedVersion", { enumerable: true, get: function () { return version_dropdown_placeholder_1.DetailedVersion; } });
7
+ var version_dropdown_1 = require("./version-dropdown");
8
+ Object.defineProperty(exports, "VersionDropdown", { enumerable: true, get: function () { return version_dropdown_1.VersionDropdown; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,+EAAgF;AAAvE,6HAAA,aAAa,OAAA;AAAE,+HAAA,eAAe,OAAA;AAEvC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA"}
@@ -0,0 +1,2 @@
1
+ export { LaneInfo } from './lane-info';
2
+ export type { LaneInfoProps } from './lane-info';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LaneInfo = void 0;
4
+ var lane_info_1 = require("./lane-info");
5
+ Object.defineProperty(exports, "LaneInfo", { enumerable: true, get: function () { return lane_info_1.LaneInfo; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lane-info/index.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { LaneModel } from '@teambit/lanes.ui.models.lanes-model';
2
+ import React from 'react';
3
+ export type LaneInfoProps = LaneModel & {
4
+ currentLane?: LaneModel;
5
+ };
6
+ export declare function LaneInfo({ id, currentLane }: LaneInfoProps): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LaneInfo = LaneInfo;
7
+ const lanes_ui_models_lanes_model_1 = require("@teambit/lanes.ui.models.lanes-model");
8
+ const react_1 = __importDefault(require("react"));
9
+ const design_ui_surfaces_menu_link_item_1 = require("@teambit/design.ui.surfaces.menu.link-item");
10
+ const evangelist_elements_icon_1 = require("@teambit/evangelist.elements.icon");
11
+ const lane_info_module_scss_1 = __importDefault(require("./lane-info.module.scss"));
12
+ function LaneInfo({ id, currentLane }) {
13
+ const isCurrent = currentLane && id.isEqual(currentLane.id);
14
+ return (react_1.default.createElement("div", { key: id.toString() },
15
+ react_1.default.createElement(design_ui_surfaces_menu_link_item_1.MenuLinkItem, { active: isCurrent, href: lanes_ui_models_lanes_model_1.LanesModel.getLaneUrl(id), className: lane_info_module_scss_1.default.versionRow },
16
+ react_1.default.createElement("span", null,
17
+ react_1.default.createElement(evangelist_elements_icon_1.Icon, { className: lane_info_module_scss_1.default.laneIcon, of: "lane" }),
18
+ id.toString()))));
19
+ }
20
+ //# sourceMappingURL=lane-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lane-info.js","sourceRoot":"","sources":["../../lane-info/lane-info.tsx"],"names":[],"mappings":";;;;;AAQA,4BAaC;AArBD,sFAA6E;AAC7E,kDAA0B;AAC1B,kGAA0E;AAC1E,gFAAyD;AACzD,oFAA6C;AAI7C,SAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,WAAW,EAAiB;IACzD,MAAM,SAAS,GAAG,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE5D,OAAO,CACL,uCAAK,GAAG,EAAE,EAAE,CAAC,QAAQ,EAAE;QACrB,8BAAC,gDAAY,IAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,wCAAU,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,+BAAM,CAAC,UAAU;YAC5F;gBACE,8BAAC,+BAAI,IAAC,SAAS,EAAE,+BAAM,CAAC,QAAQ,EAAE,EAAE,EAAC,MAAM,GAAQ;gBAClD,EAAE,CAAC,QAAQ,EAAE,CACT,CACM,CACX,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ .versionRow {
2
+ display: flex;
3
+ justify-content: space-between;
4
+ align-items: center;
5
+ height: 40px;
6
+ padding: 0 24px;
7
+
8
+ .versionTimestamp {
9
+ margin-right: 2px;
10
+ }
11
+ .versionUserAvatar {
12
+ padding: 0px 8px;
13
+ }
14
+ .laneIcon {
15
+ padding: 0px 4px;
16
+ }
17
+ .version {
18
+ width: 60%;
19
+ display: flex;
20
+ flex-direction: row;
21
+ align-content: space-between;
22
+ align-items: center;
23
+ }
24
+ .versionName {
25
+ padding: 0px 8px;
26
+ }
27
+ }
@@ -0,0 +1,7 @@
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_ui_version-dropdown@0fcec20801a4b40c3b5cc91a8c8ae02e1ff20ddb/dist/version-dropdown.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_ui_version-dropdown@0fcec20801a4b40c3b5cc91a8c8ae02e1ff20ddb/dist/version-dropdown.docs.js';
3
+
4
+ export const compositions = [compositions_0];
5
+ export const overview = [overview_0];
6
+
7
+ export const compositions_metadata = {"compositions":[{"displayName":"Version dropdown with one version","identifier":"VersionDropdownWithOneVersion"},{"displayName":"Version dropdown with multiple versions","identifier":"VersionDropdownWithMultipleVersions"}]};
@@ -0,0 +1,16 @@
1
+ import React, { HTMLAttributes } from 'react';
2
+ import { DropdownComponentVersion } from './version-dropdown';
3
+ export type VersionProps = {
4
+ currentVersion?: string;
5
+ isTag?: (version?: string) => boolean;
6
+ disabled?: boolean;
7
+ hasMoreVersions?: boolean;
8
+ showFullVersion?: boolean;
9
+ loading?: boolean;
10
+ useCurrentVersionLog?: (props: {
11
+ skip?: boolean;
12
+ version?: string;
13
+ }) => DropdownComponentVersion | undefined;
14
+ } & HTMLAttributes<HTMLDivElement>;
15
+ export declare function SimpleVersion({ currentVersion, className, disabled, hasMoreVersions, isTag, useCurrentVersionLog, showFullVersion, loading, ...rest }: VersionProps): React.JSX.Element;
16
+ export declare function DetailedVersion({ currentVersion, className, disabled, hasMoreVersions, isTag, loading, useCurrentVersionLog, showFullVersion, ...rest }: VersionProps): React.JSX.Element;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SimpleVersion = SimpleVersion;
41
+ exports.DetailedVersion = DetailedVersion;
42
+ const react_1 = __importDefault(require("react"));
43
+ const design_ui_styles_ellipsis_1 = require("@teambit/design.ui.styles.ellipsis");
44
+ const classnames_1 = __importDefault(require("classnames"));
45
+ const semver = __importStar(require("semver"));
46
+ const evangelist_elements_icon_1 = require("@teambit/evangelist.elements.icon");
47
+ const design_ui_time_ago_1 = require("@teambit/design.ui.time-ago");
48
+ const design_ui_avatar_1 = require("@teambit/design.ui.avatar");
49
+ const base_ui_loaders_skeleton_1 = require("@teambit/base-ui.loaders.skeleton");
50
+ const version_dropdown_placeholder_module_scss_1 = __importDefault(require("./version-dropdown-placeholder.module.scss"));
51
+ function SimpleVersion(_a) {
52
+ var { currentVersion, className, disabled, hasMoreVersions, isTag = (version) => semver.valid(version) !== null,
53
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
+ useCurrentVersionLog, showFullVersion, loading } = _a, rest = __rest(_a, ["currentVersion", "className", "disabled", "hasMoreVersions", "isTag", "useCurrentVersionLog", "showFullVersion", "loading"]);
55
+ if (loading)
56
+ return react_1.default.createElement(base_ui_loaders_skeleton_1.WordSkeleton, { className: version_dropdown_placeholder_module_scss_1.default.loader, length: 9 });
57
+ const formattedVersion = showFullVersion || isTag(currentVersion) ? currentVersion : currentVersion === null || currentVersion === void 0 ? void 0 : currentVersion.slice(0, 6);
58
+ return (react_1.default.createElement("div", Object.assign({}, rest, { className: (0, classnames_1.default)(version_dropdown_placeholder_module_scss_1.default.simple, className, disabled && version_dropdown_placeholder_module_scss_1.default.disabled) }),
59
+ react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, { className: (0, classnames_1.default)(version_dropdown_placeholder_module_scss_1.default.versionName), onClick: rest.onClick }, formattedVersion),
60
+ hasMoreVersions && react_1.default.createElement(evangelist_elements_icon_1.Icon, { of: "fat-arrow-down", onClick: rest.onClick })));
61
+ }
62
+ function DetailedVersion(_a) {
63
+ var { currentVersion, className, disabled, hasMoreVersions, isTag = (version) => semver.valid(version) !== null, loading, useCurrentVersionLog, showFullVersion } = _a, rest = __rest(_a, ["currentVersion", "className", "disabled", "hasMoreVersions", "isTag", "loading", "useCurrentVersionLog", "showFullVersion"]);
64
+ const currentVersionLog = useCurrentVersionLog === null || useCurrentVersionLog === void 0 ? void 0 : useCurrentVersionLog({ skip: loading, version: currentVersion });
65
+ const { displayName, message, username, email, date: _date, profileImage } = currentVersionLog || {};
66
+ const author = react_1.default.useMemo(() => {
67
+ return {
68
+ displayName: displayName !== null && displayName !== void 0 ? displayName : '',
69
+ email,
70
+ name: username !== null && username !== void 0 ? username : '',
71
+ profileImage,
72
+ };
73
+ }, [displayName, email, username, profileImage]);
74
+ const formattedVersion = showFullVersion || isTag(currentVersion) ? currentVersion : currentVersion === null || currentVersion === void 0 ? void 0 : currentVersion.slice(0, 6);
75
+ const date = _date ? new Date(+_date) : undefined;
76
+ const timestamp = react_1.default.useMemo(() => (date ? new Date(+date).toString() : new Date().toString()), [date]);
77
+ if (loading)
78
+ return react_1.default.createElement(base_ui_loaders_skeleton_1.WordSkeleton, { className: version_dropdown_placeholder_module_scss_1.default.loader, length: 9 });
79
+ return (react_1.default.createElement("div", Object.assign({}, rest, { className: (0, classnames_1.default)(version_dropdown_placeholder_module_scss_1.default.detailed, className, disabled && version_dropdown_placeholder_module_scss_1.default.disabled) }),
80
+ react_1.default.createElement(design_ui_avatar_1.UserAvatar, { size: 24, account: author !== null && author !== void 0 ? author : {}, className: version_dropdown_placeholder_module_scss_1.default.versionUserAvatar, showTooltip: true, onClick: rest.onClick }),
81
+ react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, { className: (0, classnames_1.default)(version_dropdown_placeholder_module_scss_1.default.versionName), onClick: rest.onClick }, formattedVersion),
82
+ commitMessage(message, rest.onClick),
83
+ react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, { className: version_dropdown_placeholder_module_scss_1.default.versionTimestamp, onClick: rest.onClick },
84
+ react_1.default.createElement(design_ui_time_ago_1.TimeAgo, { date: timestamp, onClick: rest.onClick })),
85
+ hasMoreVersions && react_1.default.createElement(evangelist_elements_icon_1.Icon, { of: "fat-arrow-down", onClick: rest.onClick })));
86
+ }
87
+ function commitMessage(message, onClick) {
88
+ if (!message || message === '')
89
+ return (react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, { className: version_dropdown_placeholder_module_scss_1.default.emptyMessage, onClick: onClick }, "No commit message"));
90
+ return (react_1.default.createElement(design_ui_styles_ellipsis_1.Ellipsis, { className: version_dropdown_placeholder_module_scss_1.default.commitMessage, onClick: onClick }, message));
91
+ }
92
+ //# sourceMappingURL=version-dropdown-placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-dropdown-placeholder.js","sourceRoot":"","sources":["../version-dropdown-placeholder.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,sCAuBC;AAED,0CA8CC;AA7FD,kDAA8C;AAC9C,kFAA8D;AAC9D,4DAAoC;AACpC,+CAAiC;AACjC,gFAAyD;AACzD,oEAAsD;AACtD,gEAAuD;AACvD,gFAAiE;AAGjE,0HAAgE;AAYhE,SAAgB,aAAa,CAAC,EAWf;QAXe,EAC5B,cAAc,EACd,SAAS,EACT,QAAQ,EACR,eAAe,EACf,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI;IACnD,6DAA6D;IAC7D,oBAAoB,EACpB,eAAe,EACf,OAAO,OAEM,EADV,IAAI,cAVqB,6HAW7B,CADQ;IAEP,IAAI,OAAO;QAAE,OAAO,8BAAC,uCAAY,IAAC,SAAS,EAAE,kDAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAI,CAAC;IAC1E,MAAM,gBAAgB,GAAG,eAAe,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjH,OAAO,CACL,uDAAS,IAAI,IAAE,SAAS,EAAE,IAAA,oBAAU,EAAC,kDAAM,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,IAAI,kDAAM,CAAC,QAAQ,CAAC;QACzF,8BAAC,oCAAQ,IAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,kDAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IACvE,gBAAgB,CACR;QACV,eAAe,IAAI,8BAAC,+BAAI,IAAC,EAAE,EAAC,gBAAgB,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAI,CACnE,CACP,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,EAUjB;QAViB,EAC9B,cAAc,EACd,SAAS,EACT,QAAQ,EACR,eAAe,EACf,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EACnD,OAAO,EACP,oBAAoB,EACpB,eAAe,OAEF,EADV,IAAI,cATuB,6HAU/B,CADQ;IAEP,MAAM,iBAAiB,GAAG,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7F,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,iBAAiB,IAAI,EAAE,CAAC;IACrG,MAAM,MAAM,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChC,OAAO;YACL,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE;YAC9B,KAAK;YACL,IAAI,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE;YACpB,YAAY;SACb,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,eAAe,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjH,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,MAAM,SAAS,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3G,IAAI,OAAO;QAAE,OAAO,8BAAC,uCAAY,IAAC,SAAS,EAAE,kDAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAI,CAAC;IAE1E,OAAO,CACL,uDAAS,IAAI,IAAE,SAAS,EAAE,IAAA,oBAAU,EAAC,kDAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,kDAAM,CAAC,QAAQ,CAAC;QAC3F,8BAAC,6BAAU,IACT,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,EACrB,SAAS,EAAE,kDAAM,CAAC,iBAAiB,EACnC,WAAW,EAAE,IAAI,EACjB,OAAO,EAAE,IAAI,CAAC,OAAO,GACrB;QACF,8BAAC,oCAAQ,IAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,kDAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IACvE,gBAAgB,CACR;QACV,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACrC,8BAAC,oCAAQ,IAAC,SAAS,EAAE,kDAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO;YACjE,8BAAC,4BAAO,IAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAI,CAC1C;QACV,eAAe,IAAI,8BAAC,+BAAI,IAAC,EAAE,EAAC,gBAAgB,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAI,CACnE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB,EAAE,OAA6D;IACpG,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,EAAE;QAC5B,OAAO,CACL,8BAAC,oCAAQ,IAAC,SAAS,EAAE,kDAAM,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,wBAE/C,CACZ,CAAC;IACJ,OAAO,CACL,8BAAC,oCAAQ,IAAC,SAAS,EAAE,kDAAM,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,IACxD,OAAO,CACC,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,50 @@
1
+ .simple,
2
+ .detailed {
3
+ cursor: pointer;
4
+ border: 1px solid var(--bit-border-color, #babec9);
5
+ border-radius: 6px;
6
+ transition: background-color 300ms ease-in-out;
7
+ height: 30px;
8
+ display: flex;
9
+ align-items: center;
10
+ box-sizing: border-box;
11
+ user-select: none;
12
+ flex-wrap: nowrap;
13
+ gap: 8px;
14
+ padding: 8px;
15
+ line-height: 1.2em;
16
+
17
+ &:hover {
18
+ background-color: var(--bit-bg-heavy);
19
+ }
20
+
21
+ &.disabled {
22
+ cursor: default;
23
+ background-color: var(--border-medium-color, #ededed);
24
+ color: var(--on-background-medium-color, #707279);
25
+ > span {
26
+ display: none;
27
+ }
28
+ }
29
+ }
30
+ .versionName {
31
+ flex-grow: 1;
32
+ min-width: fit-content;
33
+ }
34
+
35
+ .commitMessage {
36
+ flex-grow: 1;
37
+ max-width: 200px;
38
+ }
39
+
40
+ .versionUserAvatar {
41
+ flex: none;
42
+ margin-right: 5px;
43
+ }
44
+
45
+ .loader {
46
+ color: var(--bit-bg-dent, #f6f6f6);
47
+ > span {
48
+ padding: 4px;
49
+ }
50
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const VersionDropdownWithOneVersion: () => React.JSX.Element;
3
+ export declare const VersionDropdownWithMultipleVersions: () => React.JSX.Element;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VersionDropdownWithMultipleVersions = exports.VersionDropdownWithOneVersion = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_router_dom_1 = require("react-router-dom");
9
+ const documenter_theme_theme_compositions_1 = require("@teambit/documenter.theme.theme-compositions");
10
+ const version_dropdown_1 = require("./version-dropdown");
11
+ const style = { display: 'flex', justifyContent: 'center', alignContent: 'center' };
12
+ const VersionDropdownWithOneVersion = () => {
13
+ return (react_1.default.createElement(documenter_theme_theme_compositions_1.ThemeCompositions, { style: style },
14
+ react_1.default.createElement(version_dropdown_1.VersionDropdown, { useComponentVersions: () => ({
15
+ tags: [{ version: '0.1' }],
16
+ }), currentVersion: "0.1" })));
17
+ };
18
+ exports.VersionDropdownWithOneVersion = VersionDropdownWithOneVersion;
19
+ const VersionDropdownWithMultipleVersions = () => {
20
+ const versions = ['0.3', '0.2', '0.1'].map((version) => ({ version }));
21
+ return (react_1.default.createElement(documenter_theme_theme_compositions_1.ThemeCompositions, { style: style },
22
+ react_1.default.createElement(react_router_dom_1.MemoryRouter, null,
23
+ react_1.default.createElement(version_dropdown_1.VersionDropdown, { useComponentVersions: () => ({
24
+ tags: [{ version: '0.1' }],
25
+ }), currentVersion: versions[0].version }))));
26
+ };
27
+ exports.VersionDropdownWithMultipleVersions = VersionDropdownWithMultipleVersions;
28
+ //# sourceMappingURL=version-dropdown.composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-dropdown.composition.js","sourceRoot":"","sources":["../version-dropdown.composition.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,uDAAgD;AAChD,sGAAiF;AACjF,yDAAqD;AAErD,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAE7E,MAAM,6BAA6B,GAAG,GAAG,EAAE;IAChD,OAAO,CACL,8BAAC,uDAAiB,IAAC,KAAK,EAAE,KAAK;QAC7B,8BAAC,kCAAe,IACd,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAC3B,CAAC,EACF,cAAc,EAAC,KAAK,GACpB,CACgB,CACrB,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,6BAA6B,iCAWxC;AAEK,MAAM,mCAAmC,GAAG,GAAG,EAAE;IACtD,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAEvE,OAAO,CACL,8BAAC,uDAAiB,IAAC,KAAK,EAAE,KAAK;QAC7B,8BAAC,+BAAY;YACX,8BAAC,kCAAe,IACd,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC3B,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;iBAC3B,CAAC,EACF,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GACnC,CACW,CACG,CACrB,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,mCAAmC,uCAe9C"}
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import { LegacyComponentLog } from '@teambit/legacy-component-log';
3
+ import { LaneModel } from '@teambit/lanes.ui.models.lanes-model';
4
+ import { VersionProps } from './version-dropdown-placeholder';
5
+ export declare const LOCAL_VERSION = "workspace";
6
+ export type DropdownComponentVersion = Partial<LegacyComponentLog> & {
7
+ version: string;
8
+ };
9
+ export type UseComponentDropdownVersionsResult = {
10
+ tags?: DropdownComponentVersion[];
11
+ snaps?: DropdownComponentVersion[];
12
+ loading?: boolean;
13
+ };
14
+ export type UseComponentDropdownVersionsProps = {
15
+ skip?: boolean;
16
+ };
17
+ export type UseComponentDropdownVersions = (props?: UseComponentDropdownVersionsProps) => UseComponentDropdownVersionsResult;
18
+ export type GetActiveTabIndex = (currentVersion?: string, tabs?: Array<VersionMenuTab>, tags?: DropdownComponentVersion[], snaps?: DropdownComponentVersion[], currentLane?: LaneModel) => number;
19
+ export type VersionDropdownProps = {
20
+ localVersion?: boolean;
21
+ latestVersion?: string;
22
+ currentVersion: string;
23
+ useCurrentVersionLog?: (props?: {
24
+ skip?: boolean;
25
+ version?: string;
26
+ }) => DropdownComponentVersion | undefined;
27
+ hasMoreVersions?: boolean;
28
+ loading?: boolean;
29
+ useComponentVersions?: UseComponentDropdownVersions;
30
+ currentLane?: LaneModel;
31
+ lanes?: LaneModel[];
32
+ getActiveTabIndex?: GetActiveTabIndex;
33
+ overrideVersionHref?: (version: string) => string;
34
+ placeholderClassName?: string;
35
+ dropdownClassName?: string;
36
+ menuClassName?: string;
37
+ showVersionDetails?: boolean;
38
+ disabled?: boolean;
39
+ PlaceholderComponent?: React.ComponentType<VersionProps>;
40
+ } & React.HTMLAttributes<HTMLDivElement>;
41
+ export declare const VersionDropdown: React.MemoExoticComponent<typeof _VersionDropdown>;
42
+ declare function _VersionDropdown({ currentVersion, latestVersion, localVersion, useCurrentVersionLog, hasMoreVersions, loading, overrideVersionHref, className, placeholderClassName, getActiveTabIndex, dropdownClassName, menuClassName, showVersionDetails, disabled, PlaceholderComponent: _PlaceholderComponent, currentLane, useComponentVersions, lanes, ...rest }: VersionDropdownProps): React.JSX.Element;
43
+ export type VersionMenuTab = {
44
+ name: 'SNAP';
45
+ payload: DropdownComponentVersion[];
46
+ } | {
47
+ name: 'LANE';
48
+ payload: LaneModel[];
49
+ } | {
50
+ name: 'TAG';
51
+ payload: DropdownComponentVersion[];
52
+ };
53
+ export {};
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { MemoryRouter } from 'react-router-dom';
3
+ declare function Overview(): React.JSX.Element;
4
+ declare namespace Overview {
5
+ var abstract: string;
6
+ var labels: string[];
7
+ var examples: ({
8
+ scope: {
9
+ VersionDropdown: React.MemoExoticComponent<({ currentVersion, latestVersion, localVersion, useCurrentVersionLog, hasMoreVersions, loading, overrideVersionHref, className, placeholderClassName, getActiveTabIndex, dropdownClassName, menuClassName, showVersionDetails, disabled, PlaceholderComponent: _PlaceholderComponent, currentLane, useComponentVersions, lanes, ...rest }: import("./version-dropdown").VersionDropdownProps) => React.JSX.Element>;
10
+ style: {
11
+ display: string;
12
+ justifyContent: string;
13
+ alignContent: string;
14
+ };
15
+ MemoryRouter?: undefined;
16
+ };
17
+ title: string;
18
+ description: string;
19
+ code: string;
20
+ } | {
21
+ scope: {
22
+ VersionDropdown: React.MemoExoticComponent<({ currentVersion, latestVersion, localVersion, useCurrentVersionLog, hasMoreVersions, loading, overrideVersionHref, className, placeholderClassName, getActiveTabIndex, dropdownClassName, menuClassName, showVersionDetails, disabled, PlaceholderComponent: _PlaceholderComponent, currentLane, useComponentVersions, lanes, ...rest }: import("./version-dropdown").VersionDropdownProps) => React.JSX.Element>;
23
+ style: {
24
+ display: string;
25
+ justifyContent: string;
26
+ alignContent: string;
27
+ };
28
+ MemoryRouter: typeof MemoryRouter;
29
+ };
30
+ title: string;
31
+ description: string;
32
+ code: string;
33
+ })[];
34
+ }
35
+ export default Overview;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = Overview;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_router_dom_1 = require("react-router-dom");
9
+ const documenter_ui_section_1 = require("@teambit/documenter.ui.section");
10
+ const documenter_theme_theme_compositions_1 = require("@teambit/documenter.theme.theme-compositions");
11
+ const documenter_ui_separator_1 = require("@teambit/documenter.ui.separator");
12
+ const version_dropdown_1 = require("./version-dropdown");
13
+ function Overview() {
14
+ return (react_1.default.createElement(documenter_theme_theme_compositions_1.ThemeCompositions, null,
15
+ react_1.default.createElement(react_1.default.Fragment, null,
16
+ react_1.default.createElement(documenter_ui_section_1.Section, null,
17
+ "The version-dropdown displays the latest version of the viewed component. ",
18
+ react_1.default.createElement("br", null),
19
+ "If previous versions are available, the component will display a list of them, when clicked. ",
20
+ react_1.default.createElement("br", null),
21
+ "This allows the user to navigate to previous versions, and explore them."),
22
+ react_1.default.createElement(documenter_ui_separator_1.Separator, null))));
23
+ }
24
+ Overview.abstract = 'The version-dropdown lists the latest and previous versions of the viewed component.';
25
+ Overview.labels = ['react', 'typescript', 'version', 'dropdown'];
26
+ const style = { display: 'flex', justifyContent: 'center', alignContent: 'center' };
27
+ Overview.examples = [
28
+ {
29
+ scope: {
30
+ VersionDropdown: version_dropdown_1.VersionDropdown,
31
+ style,
32
+ },
33
+ title: 'Version Dropdown',
34
+ description: 'Using the Version Dropdown component with one verion',
35
+ code: `
36
+ () => {
37
+ return (
38
+ <div style={{...style, minHeight: 150 }}>
39
+ <VersionDropdown versions={['0.1']} currentVersion="0.1" />
40
+ </div>
41
+ );
42
+ }
43
+ `,
44
+ },
45
+ {
46
+ scope: {
47
+ VersionDropdown: version_dropdown_1.VersionDropdown,
48
+ style,
49
+ MemoryRouter: react_router_dom_1.MemoryRouter,
50
+ },
51
+ title: 'Version Dropdown with multiple versions',
52
+ description: 'Using the Version Dropdown component with more than one version',
53
+ code: `
54
+ () => {
55
+ const versions = ['0.3', '0.2', '0.1'];
56
+ return (
57
+ <div style={{...style, minHeight: 400, alignItems: 'end', justifyContent: 'flex-end', margin: 10 }}>
58
+ <MemoryRouter>
59
+ <VersionDropdown versions={versions} currentVersion={versions[0]} />
60
+ </MemoryRouter>
61
+ </div>
62
+ );
63
+ }
64
+ `,
65
+ },
66
+ ];
67
+ //# sourceMappingURL=version-dropdown.docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-dropdown.docs.js","sourceRoot":"","sources":["../version-dropdown.docs.tsx"],"names":[],"mappings":";;;;;AAOA,2BAaC;AApBD,kDAA0B;AAC1B,uDAAgD;AAChD,0EAAyD;AACzD,sGAAiF;AACjF,8EAA6D;AAC7D,yDAAqD;AAErD,SAAwB,QAAQ;IAC9B,OAAO,CACL,8BAAC,uDAAiB;QAChB;YACE,8BAAC,+BAAO;;gBACoE,yCAAM;;gBACa,yCAAM;2FAE3F;YACV,8BAAC,mCAAS,OAAG,CACZ,CACe,CACrB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,QAAQ,GAAG,sFAAsF,CAAC;AAE3G,QAAQ,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEjE,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEpF,QAAQ,CAAC,QAAQ,GAAG;IAClB;QACE,KAAK,EAAE;YACL,eAAe,EAAf,kCAAe;YACf,KAAK;SACN;QACD,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE;;;;;;;;OAQH;KACJ;IACD;QACE,KAAK,EAAE;YACL,eAAe,EAAf,kCAAe;YACf,KAAK;YACL,YAAY,EAAZ,+BAAY;SACb;QACD,KAAK,EAAE,yCAAyC;QAChD,WAAW,EAAE,iEAAiE;QAC9E,IAAI,EAAE;;;;;;;;;;;OAWH;KACJ;CACF,CAAC"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.VersionDropdown = exports.LOCAL_VERSION = void 0;
41
+ const react_1 = __importStar(require("react"));
42
+ const design_ui_surfaces_menu_link_item_1 = require("@teambit/design.ui.surfaces.menu.link-item");
43
+ const evangelist_surfaces_dropdown_1 = require("@teambit/evangelist.surfaces.dropdown");
44
+ const ui_foundation_ui_use_box_tab_1 = require("@teambit/ui-foundation.ui.use-box.tab");
45
+ const design_ui_avatar_1 = require("@teambit/design.ui.avatar");
46
+ const base_ui_loaders_skeleton_1 = require("@teambit/base-ui.loaders.skeleton");
47
+ const classnames_1 = __importDefault(require("classnames"));
48
+ const version_dropdown_module_scss_1 = __importDefault(require("./version-dropdown.module.scss"));
49
+ const version_info_1 = require("./version-info");
50
+ const lane_info_1 = require("./lane-info");
51
+ const version_dropdown_placeholder_1 = require("./version-dropdown-placeholder");
52
+ exports.LOCAL_VERSION = 'workspace';
53
+ exports.VersionDropdown = react_1.default.memo(_VersionDropdown);
54
+ const VersionMenu = react_1.default.memo(_VersionMenu);
55
+ function _VersionDropdown(_a) {
56
+ var { currentVersion, latestVersion, localVersion, useCurrentVersionLog, hasMoreVersions, loading, overrideVersionHref, className, placeholderClassName, getActiveTabIndex, dropdownClassName, menuClassName, showVersionDetails = true, disabled, PlaceholderComponent: _PlaceholderComponent, currentLane, useComponentVersions, lanes } = _a, rest = __rest(_a, ["currentVersion", "latestVersion", "localVersion", "useCurrentVersionLog", "hasMoreVersions", "loading", "overrideVersionHref", "className", "placeholderClassName", "getActiveTabIndex", "dropdownClassName", "menuClassName", "showVersionDetails", "disabled", "PlaceholderComponent", "currentLane", "useComponentVersions", "lanes"]);
57
+ const [key, setKey] = (0, react_1.useState)(0);
58
+ const singleVersion = !hasMoreVersions;
59
+ const [open, setOpen] = (0, react_1.useState)(false);
60
+ react_1.default.useEffect(() => {
61
+ if (loading && open) {
62
+ setOpen(false);
63
+ }
64
+ }, [loading]);
65
+ const handlePlaceholderClicked = (e) => {
66
+ if (loading)
67
+ return;
68
+ if (e.target === e.currentTarget) {
69
+ setOpen((o) => !o);
70
+ }
71
+ };
72
+ const defaultPlaceholder = (react_1.default.createElement(version_dropdown_placeholder_1.SimpleVersion, { useCurrentVersionLog: useCurrentVersionLog, disabled: disabled, className: placeholderClassName, currentVersion: currentVersion, onClick: handlePlaceholderClicked, hasMoreVersions: hasMoreVersions, loading: loading, showFullVersion: currentVersion === 'workspace' }));
73
+ const PlaceholderComponent = _PlaceholderComponent ? (react_1.default.createElement(_PlaceholderComponent, { useCurrentVersionLog: useCurrentVersionLog, disabled: disabled, className: placeholderClassName, currentVersion: currentVersion, onClick: handlePlaceholderClicked, hasMoreVersions: hasMoreVersions, loading: loading, showFullVersion: currentVersion === 'workspace' })) : (defaultPlaceholder);
74
+ if (disabled || (singleVersion && !loading)) {
75
+ return react_1.default.createElement("div", { className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.noVersions, className) }, PlaceholderComponent);
76
+ }
77
+ return (react_1.default.createElement("div", Object.assign({}, rest, { className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.versionDropdown, className) }),
78
+ react_1.default.createElement(evangelist_surfaces_dropdown_1.Dropdown, { className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.dropdown, dropdownClassName), dropClass: (0, classnames_1.default)(version_dropdown_module_scss_1.default.menu, menuClassName), open: open, onClick: handlePlaceholderClicked, onClickOutside: () => setOpen(false), onChange: (_e, _open) => _open && setKey((x) => x + 1), PlaceholderComponent: (_a) => {
79
+ var { children } = _a, other = __rest(_a, ["children"]);
80
+ return (react_1.default.createElement("div", Object.assign({}, other, { className: placeholderClassName, onClick: handlePlaceholderClicked }), children));
81
+ }, placeholder: PlaceholderComponent },
82
+ react_1.default.createElement(VersionMenu, { className: menuClassName, key: key, currentVersion: currentVersion, latestVersion: latestVersion, localVersion: localVersion, overrideVersionHref: overrideVersionHref, showVersionDetails: showVersionDetails, currentLane: currentLane, getActiveTabIndex: getActiveTabIndex, lanes: lanes, useVersions: useComponentVersions, onVersionClicked: () => setOpen(false), open: open }))));
83
+ }
84
+ const defaultActiveTabIndex = (currentVersion, tabs = [], tags, snaps) => {
85
+ if ((snaps || []).some((snap) => snap.version === currentVersion))
86
+ return tabs.findIndex((tab) => tab.name === 'SNAP');
87
+ return 0;
88
+ };
89
+ const VERSION_TAB_NAMES = ['TAG', 'SNAP', 'LANE'];
90
+ function _VersionMenu(_a) {
91
+ var _b, _c;
92
+ var { currentVersion, localVersion, latestVersion, overrideVersionHref, showVersionDetails, useVersions, currentLane, lanes, getActiveTabIndex = defaultActiveTabIndex, loading: loadingFromProps, open, onVersionClicked } = _a, rest = __rest(_a, ["currentVersion", "localVersion", "latestVersion", "overrideVersionHref", "showVersionDetails", "useVersions", "currentLane", "lanes", "getActiveTabIndex", "loading", "open", "onVersionClicked"]);
93
+ const { snaps, tags, loading: loadingVersions } = (useVersions === null || useVersions === void 0 ? void 0 : useVersions()) || {};
94
+ const loading = loadingFromProps || loadingVersions;
95
+ const tabs = react_1.default.useMemo(() => VERSION_TAB_NAMES.map((name) => {
96
+ switch (name) {
97
+ case 'SNAP':
98
+ return { name, payload: snaps || [] };
99
+ case 'LANE':
100
+ return { name, payload: lanes || [] };
101
+ default:
102
+ return { name, payload: tags || [] };
103
+ }
104
+ }).filter((tab) => tab.payload.length > 0), [snaps === null || snaps === void 0 ? void 0 : snaps.length, tags === null || tags === void 0 ? void 0 : tags.length, lanes === null || lanes === void 0 ? void 0 : lanes.length, loading]);
105
+ const [activeTabIndex, setActiveTab] = react_1.default.useState(getActiveTabIndex(currentVersion, tabs, tags, snaps, currentLane));
106
+ const activeTab = react_1.default.useMemo(() => (activeTabIndex !== undefined ? tabs[activeTabIndex] : undefined), [activeTabIndex, tabs]);
107
+ react_1.default.useEffect(() => {
108
+ if (!currentLane)
109
+ return;
110
+ if (tabs.length === 0)
111
+ return;
112
+ const _activeTabIndex = getActiveTabIndex(currentVersion, tabs, tags, snaps, currentLane);
113
+ if (_activeTabIndex !== activeTabIndex)
114
+ setActiveTab(_activeTabIndex);
115
+ }, [currentLane, tabs.length, tags === null || tags === void 0 ? void 0 : tags.length, snaps === null || snaps === void 0 ? void 0 : snaps.length, currentVersion, loading]);
116
+ const multipleTabs = tabs.length > 1;
117
+ const message = multipleTabs
118
+ ? 'Switch to view tags, snaps, or lanes'
119
+ : `Switch between ${(_b = tabs[0]) === null || _b === void 0 ? void 0 : _b.name.toLocaleLowerCase()}s`;
120
+ const showTab = activeTabIndex !== undefined && ((_c = tabs[activeTabIndex]) === null || _c === void 0 ? void 0 : _c.payload.length) > 0;
121
+ const _rowRenderer = react_1.default.useCallback(function VersionRowRenderer({ index }) {
122
+ const { name, payload = [] } = activeTab || {};
123
+ const item = payload[index];
124
+ if (!item)
125
+ return null;
126
+ if (name === 'LANE') {
127
+ const lane = item;
128
+ return react_1.default.createElement(lane_info_1.LaneInfo, Object.assign({ key: lane.id.toString(), currentLane: currentLane }, lane));
129
+ }
130
+ const version = item;
131
+ return (react_1.default.createElement(version_info_1.VersionInfo, Object.assign({ key: version.version, currentVersion: currentVersion, latestVersion: latestVersion, overrideVersionHref: overrideVersionHref, showDetails: showVersionDetails, onVersionClicked: onVersionClicked }, version)));
132
+ }, [activeTab, currentVersion, latestVersion, showVersionDetails, currentLane === null || currentLane === void 0 ? void 0 : currentLane.id.toString(), showTab]);
133
+ const rowRenderer = react_1.default.useMemo(() => (showTab && activeTab ? _rowRenderer : () => null), [showTab, activeTab, _rowRenderer]);
134
+ const ActiveTab = react_1.default.useMemo(() => {
135
+ return activeTab === null || activeTab === void 0 ? void 0 : activeTab.payload.map((payload, index) => {
136
+ return rowRenderer({ index });
137
+ });
138
+ }, [activeTab]);
139
+ return (react_1.default.createElement("div", Object.assign({}, rest, { className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.versionMenuContainer, !open && version_dropdown_module_scss_1.default.hide) }),
140
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.top },
141
+ loading && react_1.default.createElement(base_ui_loaders_skeleton_1.LineSkeleton, { count: 6, className: version_dropdown_module_scss_1.default.loader }),
142
+ !loading && react_1.default.createElement("div", { className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.titleContainer, version_dropdown_module_scss_1.default.title) }, message),
143
+ !loading && localVersion && (react_1.default.createElement(design_ui_surfaces_menu_link_item_1.MenuLinkItem, { href: '?', active: currentVersion === exports.LOCAL_VERSION, className: (0, classnames_1.default)(version_dropdown_module_scss_1.default.versionRow, version_dropdown_module_scss_1.default.localVersion), onClick: onVersionClicked },
144
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.version },
145
+ react_1.default.createElement(design_ui_avatar_1.UserAvatar, { size: 24, account: {}, className: version_dropdown_module_scss_1.default.versionUserAvatar }),
146
+ react_1.default.createElement("span", { className: version_dropdown_module_scss_1.default.versionName }, exports.LOCAL_VERSION))))),
147
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(multipleTabs && version_dropdown_module_scss_1.default.tabs) }, multipleTabs &&
148
+ tabs.map(({ name }, index) => {
149
+ return (react_1.default.createElement(ui_foundation_ui_use_box_tab_1.Tab, { className: version_dropdown_module_scss_1.default.tab, key: name, isActive: activeTabIndex === index, onClick: () => setActiveTab(index) }, name));
150
+ })),
151
+ react_1.default.createElement("div", { className: version_dropdown_module_scss_1.default.versionContainerRoot }, ActiveTab)));
152
+ }
153
+ //# sourceMappingURL=version-dropdown.js.map