@apify/ui-library 1.163.4 → 1.164.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/components/developer_badge/developer_badge.d.ts +13 -0
  2. package/dist/components/developer_badge/developer_badge.d.ts.map +1 -0
  3. package/dist/components/developer_badge/developer_badge.js +103 -0
  4. package/dist/components/developer_badge/developer_badge.test_ids.d.ts +5 -0
  5. package/dist/components/developer_badge/developer_badge.test_ids.d.ts.map +1 -0
  6. package/dist/components/developer_badge/developer_badge.test_ids.js +7 -0
  7. package/dist/components/developer_badge/index.d.ts +3 -0
  8. package/dist/components/developer_badge/index.d.ts.map +1 -0
  9. package/dist/components/index.d.ts +1 -0
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/files_hash_at_build.txt +1 -1
  12. package/dist/index.js +3 -1
  13. package/dist/src/components/developer_badge/developer_badge.d.ts +13 -0
  14. package/dist/src/components/developer_badge/developer_badge.d.ts.map +1 -0
  15. package/dist/src/components/developer_badge/developer_badge.js +98 -0
  16. package/dist/src/components/developer_badge/developer_badge.js.map +1 -0
  17. package/dist/src/components/developer_badge/developer_badge.test_ids.d.ts +5 -0
  18. package/dist/src/components/developer_badge/developer_badge.test_ids.d.ts.map +1 -0
  19. package/dist/src/components/developer_badge/developer_badge.test_ids.js +5 -0
  20. package/dist/src/components/developer_badge/developer_badge.test_ids.js.map +1 -0
  21. package/dist/src/components/developer_badge/index.d.ts +3 -0
  22. package/dist/src/components/developer_badge/index.d.ts.map +1 -0
  23. package/dist/src/components/developer_badge/index.js +3 -0
  24. package/dist/src/components/developer_badge/index.js.map +1 -0
  25. package/dist/src/components/index.d.ts +1 -0
  26. package/dist/src/components/index.d.ts.map +1 -1
  27. package/dist/src/components/index.js +1 -0
  28. package/dist/src/components/index.js.map +1 -1
  29. package/dist/src/test_ids.d.ts +1 -0
  30. package/dist/src/test_ids.d.ts.map +1 -1
  31. package/dist/src/test_ids.js +1 -0
  32. package/dist/src/test_ids.js.map +1 -1
  33. package/dist/test_ids.d.ts +1 -0
  34. package/dist/test_ids.d.ts.map +1 -1
  35. package/dist/test_ids.js +2 -1
  36. package/dist/tsconfig.build.tsbuildinfo +1 -1
  37. package/package.json +3 -3
  38. package/src/components/developer_badge/developer_badge.stories.tsx +35 -0
  39. package/src/components/developer_badge/developer_badge.test_ids.ts +4 -0
  40. package/src/components/developer_badge/developer_badge.tsx +117 -0
  41. package/src/components/developer_badge/index.ts +2 -0
  42. package/src/components/index.ts +1 -0
  43. package/src/test_ids.ts +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apify/ui-library",
3
- "version": "1.163.4",
3
+ "version": "1.164.0",
4
4
  "description": "React UI library used by apify.com",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -75,7 +75,7 @@
75
75
  "styled-components": "^6.1.19"
76
76
  },
77
77
  "devDependencies": {
78
- "@apify-packages/types": "^3.422.0",
78
+ "@apify-packages/types": "^3.423.0",
79
79
  "@storybook/react-vite": "^10.3.5",
80
80
  "@testing-library/react": "^16.3.2",
81
81
  "@types/hast": "^3.0.4",
@@ -95,5 +95,5 @@
95
95
  "src",
96
96
  "style"
97
97
  ],
98
- "gitHead": "a848827e4a0eef2cec4273b76bd4b55730cc22bf"
98
+ "gitHead": "b1b22d2019ff1da49674426111eaebfb5c3ab198"
99
99
  }
@@ -0,0 +1,35 @@
1
+ import type { Meta } from '@storybook/react-vite';
2
+
3
+ import { DEVELOPER_BADGE, DeveloperBadge, type DeveloperBadgeProps } from './developer_badge';
4
+
5
+ export default {
6
+ title: 'UI-Library/DeveloperBadge',
7
+ parameters: { layout: 'padded' },
8
+ component: DeveloperBadge,
9
+ args: {
10
+ variant: 'verified',
11
+ },
12
+ argTypes: {
13
+ variant: {
14
+ control: 'radio',
15
+ options: DEVELOPER_BADGE,
16
+ },
17
+ },
18
+ } as Meta<typeof DeveloperBadge>;
19
+
20
+ const Template = (args: DeveloperBadgeProps) => <DeveloperBadge {...args} />;
21
+
22
+ export const Standalone = Template.bind({});
23
+
24
+ export const AllVariants = () => {
25
+ return (
26
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '1.6rem' }}>
27
+ {DEVELOPER_BADGE.map((variant) => (
28
+ <div key={variant} style={{ display: 'flex', alignItems: 'center', gap: '1.6rem' }}>
29
+ <DeveloperBadge variant={variant} />
30
+ {variant}
31
+ </div>
32
+ ))}
33
+ </div>
34
+ );
35
+ };
@@ -0,0 +1,4 @@
1
+ export const developerBadgeTestIds = {
2
+ verified: 'verified-developer-badge',
3
+ partner: 'apify-partner-badge',
4
+ };
@@ -0,0 +1,117 @@
1
+ import styled, { css, keyframes } from 'styled-components';
2
+
3
+ import { VerifiedIcon } from '@apify/ui-icons';
4
+
5
+ import { theme } from '../../design_system/theme';
6
+ import type { WithTransientProps } from '../../type_utils';
7
+ import type { FlattenSimpleInterpolation } from '../../utils/type_utils';
8
+ import { developerBadgeTestIds } from './developer_badge.test_ids';
9
+
10
+ export const DEVELOPER_BADGE = ['verified', 'partner'] as const;
11
+ export type DEVELOPER_BADGE = (typeof DEVELOPER_BADGE)[number];
12
+
13
+ const partnerShineSweep = keyframes`
14
+ 0%,
15
+ 20% {
16
+ opacity: 0;
17
+ transform: translate(70%, 70%) scale(0.25);
18
+ }
19
+
20
+ 25% {
21
+ opacity: 0.15;
22
+ transform: translate(60%, 60%) scale(0.35);
23
+ }
24
+
25
+ 50% {
26
+ opacity: 1;
27
+ transform: translate(0, 0) scale(1.7);
28
+ }
29
+
30
+ 75% {
31
+ opacity: 0.15;
32
+ transform: translate(-60%, -60%) scale(0.35);
33
+ }
34
+
35
+ 80%,
36
+ 100% {
37
+ opacity: 0;
38
+ transform: translate(-70%, -70%) scale(0.25);
39
+ }
40
+ `;
41
+
42
+ const developerBadgeVariantStyle = {
43
+ verified: css`
44
+ background: ${theme.color.primary.action};
45
+ color: ${theme.color.neutral.iconOnPrimary};
46
+ `,
47
+ partner: css`
48
+ background: ${theme.color.buttercup.base};
49
+ /* The gold surface stays light in both color schemes, so the icon color is a static palette reference. */
50
+ color: ${theme.colorPalette.light.neutral950};
51
+
52
+ &::before {
53
+ content: '';
54
+ position: absolute;
55
+ z-index: 1;
56
+ inset: -50%;
57
+ background: linear-gradient(
58
+ 135deg,
59
+ transparent 36%,
60
+ ${theme.color.buttercup.light} 44%,
61
+ ${theme.colorPalette.light.neutral0} 50%,
62
+ ${theme.color.buttercup.light} 56%,
63
+ transparent 64%
64
+ );
65
+ animation: ${partnerShineSweep} 4s ease-out infinite;
66
+ }
67
+
68
+ svg {
69
+ position: relative;
70
+ z-index: 2;
71
+ }
72
+
73
+ @media (prefers-reduced-motion: reduce) {
74
+ &::before {
75
+ animation: none;
76
+ opacity: 0;
77
+ }
78
+ }
79
+ `,
80
+ } satisfies Record<DEVELOPER_BADGE, FlattenSimpleInterpolation>;
81
+
82
+ type StyledDeveloperBadgeProps = WithTransientProps<{ variant: DEVELOPER_BADGE }>;
83
+
84
+ const StyledDeveloperBadge = styled.span<StyledDeveloperBadgeProps>`
85
+ position: relative;
86
+ display: inline-flex;
87
+ align-items: center;
88
+ justify-content: center;
89
+ flex-shrink: 0;
90
+ width: ${theme.space.space24};
91
+ height: ${theme.space.space24};
92
+ overflow: hidden;
93
+ border-radius: ${theme.radius.radiusFull};
94
+
95
+ ${({ $variant }) => developerBadgeVariantStyle[$variant]};
96
+ `;
97
+
98
+ export type DeveloperBadgeProps = {
99
+ variant: DEVELOPER_BADGE;
100
+ className?: string;
101
+ };
102
+
103
+ /**
104
+ * Circular icon badge marking an Actor developer as a verified developer or an Apify partner.
105
+ *
106
+ * Purely visual — it carries no text; supply app-specific copy (e.g. via a wrapping Tooltip).
107
+ */
108
+ export const DeveloperBadge = ({ variant, ...props }: DeveloperBadgeProps) => {
109
+ // A user that is neither verified nor a partner has no badge — guards non-TS consumers passing an unknown variant.
110
+ if (!DEVELOPER_BADGE.includes(variant)) return null;
111
+
112
+ return (
113
+ <StyledDeveloperBadge $variant={variant} data-testid={developerBadgeTestIds[variant]} {...props}>
114
+ <VerifiedIcon size="20" />
115
+ </StyledDeveloperBadge>
116
+ );
117
+ };
@@ -0,0 +1,2 @@
1
+ export * from './developer_badge';
2
+ export * from './developer_badge.test_ids';
@@ -24,6 +24,7 @@ export * from './chip';
24
24
  export * from './image';
25
25
  export * from './rating';
26
26
  export * from './badge';
27
+ export * from './developer_badge';
27
28
  export * from './tag';
28
29
  export * from './tabs';
29
30
  export * from './shortcut';
package/src/test_ids.ts CHANGED
@@ -8,6 +8,7 @@ export { codeBlockTabTestId, codeBlockTestIds } from './components/code/code_blo
8
8
  export { oneLineCodeTestIds } from './components/code/one_line_code/one_line_code.test_ids.js';
9
9
  export { prismHighlighterTestIds } from './components/code/prism_highlighter.test_ids.js';
10
10
  export { collapsibleCardTestIds } from './components/collapsible_card/collapsible_card.test_ids.js';
11
+ export { developerBadgeTestIds } from './components/developer_badge/developer_badge.test_ids.js';
11
12
  export { dropdownTestIds } from './components/dropdown/dropdown.test_ids.js';
12
13
  export { paginationTestIds } from './components/pagination/pagination.test_ids.js';
13
14
  export {