@teambit/component.ui.version-dropdown 0.0.0-01a8c14a78caf9ebef95a98498b8e3e2a0b8268f

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-1757430649963.js +7 -0
  12. package/dist/version-dropdown-placeholder.d.ts +17 -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 +53 -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 +148 -0
  24. package/dist/version-dropdown.js.map +1 -0
  25. package/dist/version-dropdown.module.scss +139 -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 +53 -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 +23 -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 +53 -0
  44. package/version-dropdown-placeholder.tsx +109 -0
  45. package/version-dropdown.composition.tsx +36 -0
  46. package/version-dropdown.docs.tsx +68 -0
  47. package/version-dropdown.module.scss +139 -0
  48. package/version-dropdown.spec.tsx +29 -0
  49. package/version-dropdown.tsx +325 -0
  50. package/version-info/index.ts +2 -0
  51. package/version-info/version-info.module.scss +53 -0
  52. package/version-info/version-info.tsx +86 -0
@@ -0,0 +1,2 @@
1
+ export { VersionInfo } from './version-info';
2
+ export type { VersionInfoProps } from './version-info';
@@ -0,0 +1,53 @@
1
+ .versionRow {
2
+ display: flex;
3
+ justify-content: space-between;
4
+ align-items: center;
5
+ height: 40px;
6
+ padding: 0 16px;
7
+ line-height: 1.2em;
8
+
9
+ &:hover {
10
+ background-color: var(--surface-hover-color, #eceaff) !important;
11
+ }
12
+ }
13
+
14
+ .versionTimestamp {
15
+ min-width: fit-content;
16
+ margin-right: 2px;
17
+ text-align: right;
18
+ }
19
+
20
+ .versionUserAvatar {
21
+ flex: none;
22
+ padding: 0px 8px;
23
+ }
24
+
25
+ .laneIcon {
26
+ padding: 0px 4px;
27
+ }
28
+
29
+ .version {
30
+ display: flex;
31
+ flex-direction: row;
32
+ align-items: center;
33
+ justify-content: flex-start;
34
+ overflow: hidden;
35
+ }
36
+
37
+ .versionName {
38
+ padding: 0px 8px;
39
+ flex-grow: 1;
40
+ min-width: fit-content;
41
+ }
42
+
43
+ .commitMessage {
44
+ flex-grow: 1;
45
+ padding: 0px 8px;
46
+ }
47
+
48
+ .emptyMessage {
49
+ font-style: italic;
50
+ color: var(--bit-text-color-light, #6c707c);
51
+ padding: 0px 8px;
52
+ font-size: (var-bit-p-xs, 14px);
53
+ }
@@ -0,0 +1,86 @@
1
+ import { MenuLinkItem } from '@teambit/design.ui.surfaces.menu.link-item';
2
+ import { TimeAgo } from '@teambit/design.ui.time-ago';
3
+ import { VersionLabel } from '@teambit/component.ui.version-label';
4
+ import React, { useMemo, useRef, useEffect } from 'react';
5
+ import { UserAvatar } from '@teambit/design.ui.avatar';
6
+ import { Ellipsis } from '@teambit/design.ui.styles.ellipsis';
7
+ import classNames from 'classnames';
8
+ import type { DropdownComponentVersion } from '../version-dropdown';
9
+ import styles from './version-info.module.scss';
10
+
11
+ export interface VersionInfoProps extends DropdownComponentVersion {
12
+ currentVersion?: string;
13
+ latestVersion?: string;
14
+ overrideVersionHref?: (version: string) => string;
15
+ showDetails?: boolean;
16
+ onVersionClicked?: () => void;
17
+ }
18
+
19
+ export const VersionInfo = React.memo(React.forwardRef<HTMLDivElement, VersionInfoProps>(_VersionInfo));
20
+ function _VersionInfo(
21
+ {
22
+ version,
23
+ currentVersion,
24
+ latestVersion,
25
+ date,
26
+ username,
27
+ displayName,
28
+ email,
29
+ overrideVersionHref,
30
+ showDetails,
31
+ message,
32
+ tag,
33
+ profileImage,
34
+ onVersionClicked,
35
+ }: VersionInfoProps,
36
+ ref?: React.ForwardedRef<HTMLDivElement>
37
+ ) {
38
+ const isCurrent = version === currentVersion;
39
+ const author = useMemo(() => {
40
+ return {
41
+ displayName: displayName ?? '',
42
+ email,
43
+ name: username ?? '',
44
+ profileImage,
45
+ };
46
+ }, [displayName, email, username, profileImage]);
47
+
48
+ const timestamp = useMemo(() => (date ? new Date(parseInt(date)).toString() : new Date().toString()), [date]);
49
+ const currentVersionRef = useRef<HTMLDivElement>(null);
50
+
51
+ useEffect(() => {
52
+ if (isCurrent) {
53
+ currentVersionRef.current?.scrollIntoView({ block: 'nearest' });
54
+ }
55
+ }, [isCurrent]);
56
+
57
+ const href = overrideVersionHref ? overrideVersionHref(version) : `?version=${version}`;
58
+
59
+ const formattedVersion = useMemo(() => {
60
+ return tag ? version : version.slice(0, 6);
61
+ }, [tag, version]);
62
+
63
+ const isLatest = version === latestVersion;
64
+
65
+ return (
66
+ <div ref={ref || currentVersionRef} onClick={onVersionClicked}>
67
+ <MenuLinkItem active={isCurrent} href={href} className={styles.versionRow}>
68
+ <div className={styles.version}>
69
+ <UserAvatar size={24} account={author} className={styles.versionUserAvatar} showTooltip={true} />
70
+ <Ellipsis className={classNames(styles.versionName)}>{formattedVersion}</Ellipsis>
71
+ {isLatest && <VersionLabel status="latest" />}
72
+ <CommitMessage message={message} showDetails={showDetails} />
73
+ </div>
74
+ <Ellipsis className={styles.versionTimestamp}>
75
+ <TimeAgo date={timestamp} />
76
+ </Ellipsis>
77
+ </MenuLinkItem>
78
+ </div>
79
+ );
80
+ }
81
+
82
+ function CommitMessage({ message, showDetails }: { message?: string; showDetails?: boolean }) {
83
+ if (!showDetails) return null;
84
+ if (!message || message === '') return <Ellipsis className={styles.emptyMessage}>No commit message</Ellipsis>;
85
+ return <Ellipsis className={styles.commitMessage}>{message}</Ellipsis>;
86
+ }