@apify/ui-library 1.168.3 → 1.169.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 (101) hide show
  1. package/dist/components/index.d.ts +1 -0
  2. package/dist/components/index.d.ts.map +1 -1
  3. package/dist/components/skeleton/index.d.ts +6 -0
  4. package/dist/components/skeleton/index.d.ts.map +1 -0
  5. package/dist/components/skeleton/skeleton.d.ts +18 -0
  6. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  7. package/dist/components/skeleton/skeleton.js +19 -0
  8. package/dist/components/skeleton/skeleton.styled.d.ts +13 -0
  9. package/dist/components/skeleton/skeleton.styled.d.ts.map +1 -0
  10. package/dist/components/skeleton/skeleton.styled.js +55 -0
  11. package/dist/components/skeleton/skeleton.test_ids.d.ts +6 -0
  12. package/dist/components/skeleton/skeleton.test_ids.d.ts.map +1 -0
  13. package/dist/components/skeleton/skeleton.test_ids.js +8 -0
  14. package/dist/components/skeleton/skeleton.type-test.d.ts +2 -0
  15. package/dist/components/skeleton/skeleton.type-test.d.ts.map +1 -0
  16. package/dist/components/skeleton/skeleton_fade_in.d.ts +9 -0
  17. package/dist/components/skeleton/skeleton_fade_in.d.ts.map +1 -0
  18. package/dist/components/skeleton/skeleton_fade_in.js +15 -0
  19. package/dist/components/skeleton/skeleton_group.d.ts +13 -0
  20. package/dist/components/skeleton/skeleton_group.d.ts.map +1 -0
  21. package/dist/components/skeleton/skeleton_group.js +19 -0
  22. package/dist/design_system/colors/generated/colors_theme.dark.d.ts +13 -0
  23. package/dist/design_system/colors/generated/colors_theme.dark.d.ts.map +1 -1
  24. package/dist/design_system/colors/generated/colors_theme.dark.js +13 -0
  25. package/dist/design_system/colors/generated/colors_theme.light.d.ts +13 -0
  26. package/dist/design_system/colors/generated/colors_theme.light.d.ts.map +1 -1
  27. package/dist/design_system/colors/generated/colors_theme.light.js +13 -0
  28. package/dist/design_system/theme.d.ts +26 -0
  29. package/dist/design_system/theme.d.ts.map +1 -1
  30. package/dist/files_hash_at_build.txt +1 -1
  31. package/dist/index.js +6 -1
  32. package/dist/src/components/index.d.ts +1 -0
  33. package/dist/src/components/index.d.ts.map +1 -1
  34. package/dist/src/components/index.js +1 -0
  35. package/dist/src/components/index.js.map +1 -1
  36. package/dist/src/components/skeleton/index.d.ts +6 -0
  37. package/dist/src/components/skeleton/index.d.ts.map +1 -0
  38. package/dist/src/components/skeleton/index.js +6 -0
  39. package/dist/src/components/skeleton/index.js.map +1 -0
  40. package/dist/src/components/skeleton/skeleton.d.ts +18 -0
  41. package/dist/src/components/skeleton/skeleton.d.ts.map +1 -0
  42. package/dist/src/components/skeleton/skeleton.js +10 -0
  43. package/dist/src/components/skeleton/skeleton.js.map +1 -0
  44. package/dist/src/components/skeleton/skeleton.styled.d.ts +13 -0
  45. package/dist/src/components/skeleton/skeleton.styled.d.ts.map +1 -0
  46. package/dist/src/components/skeleton/skeleton.styled.js +55 -0
  47. package/dist/src/components/skeleton/skeleton.styled.js.map +1 -0
  48. package/dist/src/components/skeleton/skeleton.test_ids.d.ts +6 -0
  49. package/dist/src/components/skeleton/skeleton.test_ids.d.ts.map +1 -0
  50. package/dist/src/components/skeleton/skeleton.test_ids.js +6 -0
  51. package/dist/src/components/skeleton/skeleton.test_ids.js.map +1 -0
  52. package/dist/src/components/skeleton/skeleton.type-test.d.ts +2 -0
  53. package/dist/src/components/skeleton/skeleton.type-test.d.ts.map +1 -0
  54. package/dist/src/components/skeleton/skeleton.type-test.js +25 -0
  55. package/dist/src/components/skeleton/skeleton.type-test.js.map +1 -0
  56. package/dist/src/components/skeleton/skeleton_fade_in.d.ts +9 -0
  57. package/dist/src/components/skeleton/skeleton_fade_in.d.ts.map +1 -0
  58. package/dist/src/components/skeleton/skeleton_fade_in.js +9 -0
  59. package/dist/src/components/skeleton/skeleton_fade_in.js.map +1 -0
  60. package/dist/src/components/skeleton/skeleton_group.d.ts +13 -0
  61. package/dist/src/components/skeleton/skeleton_group.d.ts.map +1 -0
  62. package/dist/src/components/skeleton/skeleton_group.js +10 -0
  63. package/dist/src/components/skeleton/skeleton_group.js.map +1 -0
  64. package/dist/src/design_system/colors/generated/colors_theme.dark.d.ts +13 -0
  65. package/dist/src/design_system/colors/generated/colors_theme.dark.d.ts.map +1 -1
  66. package/dist/src/design_system/colors/generated/colors_theme.dark.js +13 -0
  67. package/dist/src/design_system/colors/generated/colors_theme.dark.js.map +1 -1
  68. package/dist/src/design_system/colors/generated/colors_theme.light.d.ts +13 -0
  69. package/dist/src/design_system/colors/generated/colors_theme.light.d.ts.map +1 -1
  70. package/dist/src/design_system/colors/generated/colors_theme.light.js +13 -0
  71. package/dist/src/design_system/colors/generated/colors_theme.light.js.map +1 -1
  72. package/dist/src/design_system/theme.d.ts +26 -0
  73. package/dist/src/design_system/theme.d.ts.map +1 -1
  74. package/dist/src/test_ids.d.ts +1 -0
  75. package/dist/src/test_ids.d.ts.map +1 -1
  76. package/dist/src/test_ids.js +1 -0
  77. package/dist/src/test_ids.js.map +1 -1
  78. package/dist/test_ids.d.ts +1 -0
  79. package/dist/test_ids.d.ts.map +1 -1
  80. package/dist/test_ids.js +2 -1
  81. package/dist/tsconfig.build.tsbuildinfo +1 -1
  82. package/package.json +3 -3
  83. package/src/components/index.ts +1 -0
  84. package/src/components/skeleton/examples/actor_idea_cards_skeleton.example.tsx +67 -0
  85. package/src/components/skeleton/examples/new_actor_wizard_cards_skeleton.example.tsx +55 -0
  86. package/src/components/skeleton/examples/publication_categories_skeleton.example.tsx +50 -0
  87. package/src/components/skeleton/examples/store_actor_cards_loading.example.tsx +74 -0
  88. package/src/components/skeleton/examples/store_actor_cards_skeleton.example.tsx +94 -0
  89. package/src/components/skeleton/index.ts +5 -0
  90. package/src/components/skeleton/skeleton.stories.tsx +221 -0
  91. package/src/components/skeleton/skeleton.styled.ts +66 -0
  92. package/src/components/skeleton/skeleton.test_ids.ts +5 -0
  93. package/src/components/skeleton/skeleton.tsx +34 -0
  94. package/src/components/skeleton/skeleton.type-test.ts +32 -0
  95. package/src/components/skeleton/skeleton_fade_in.tsx +21 -0
  96. package/src/components/skeleton/skeleton_group.tsx +32 -0
  97. package/src/design_system/colors/build_color_tokens.js +4 -2
  98. package/src/design_system/colors/colors.stories.tsx +9 -1
  99. package/src/design_system/colors/generated/colors_theme.dark.ts +13 -0
  100. package/src/design_system/colors/generated/colors_theme.light.ts +13 -0
  101. package/src/test_ids.ts +1 -0
@@ -0,0 +1,34 @@
1
+ import clsx from 'clsx';
2
+ import type { ComponentPropsWithoutRef } from 'react';
3
+
4
+ import type { MarginSpacingProps } from '../box';
5
+ import { StyledSkeleton, skeletonClassNames } from './skeleton.styled';
6
+ import { skeletonTestIds } from './skeleton.test_ids';
7
+
8
+ // Native onClick clashes with the legacy BoxProps handler type, so it is omitted.
9
+ export interface SkeletonProps
10
+ extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'onClick'>, MarginSpacingProps {
11
+ /**
12
+ * Any CSS length. Defaults to the full width of the container.
13
+ */
14
+ width?: string;
15
+ /**
16
+ * Any CSS length. Defaults to `1em`, the font size of the surrounding text.
17
+ */
18
+ height?: string;
19
+ }
20
+
21
+ /**
22
+ * Placeholder block shown only while data is loading. Compose blocks to mirror the layout of the content,
23
+ * inside a `SkeletonGroup`.
24
+ */
25
+ export const Skeleton = ({ width = '100%', height = '1em', className, ...rest }: SkeletonProps) => (
26
+ <StyledSkeleton
27
+ aria-hidden
28
+ data-test={skeletonTestIds.ROOT}
29
+ className={clsx(skeletonClassNames.ROOT, className)}
30
+ $width={width}
31
+ $height={height}
32
+ {...rest}
33
+ />
34
+ );
@@ -0,0 +1,32 @@
1
+ import { expectTypeOf } from 'vitest';
2
+
3
+ import type { SkeletonFadeInProps, SkeletonGroupProps, SkeletonProps } from './';
4
+
5
+ // Extends the native <div> element.
6
+ expectTypeOf<SkeletonProps>().toHaveProperty('title');
7
+ expectTypeOf<SkeletonProps>().toHaveProperty('style');
8
+ expectTypeOf<SkeletonFadeInProps>().toHaveProperty('aria-live');
9
+
10
+ // Own props and margin spacing props.
11
+ expectTypeOf<SkeletonProps>().toHaveProperty('width');
12
+ expectTypeOf<SkeletonProps>().toHaveProperty('height');
13
+ expectTypeOf<SkeletonProps>().toHaveProperty('mb');
14
+
15
+ // Every block has the same 4px radius, so there is no radius prop.
16
+ expectTypeOf<SkeletonProps>().not.toHaveProperty('radius');
17
+
18
+ // A skeleton stands in for content, it never holds any.
19
+ expectTypeOf<SkeletonProps>().not.toHaveProperty('children');
20
+ expectTypeOf<SkeletonProps>().not.toHaveProperty('p');
21
+ expectTypeOf<SkeletonFadeInProps>().toHaveProperty('children');
22
+
23
+ // Neither component is interactive.
24
+ expectTypeOf<SkeletonProps>().not.toHaveProperty('onClick');
25
+ expectTypeOf<SkeletonFadeInProps>().not.toHaveProperty('onClick');
26
+
27
+ // The group sets its own accessibility attributes and requires a label.
28
+ expectTypeOf<SkeletonGroupProps>().toHaveProperty('label');
29
+ expectTypeOf<SkeletonGroupProps['label']>().toEqualTypeOf<string>();
30
+ expectTypeOf<SkeletonGroupProps>().not.toHaveProperty('role');
31
+ expectTypeOf<SkeletonGroupProps>().not.toHaveProperty('aria-busy');
32
+ expectTypeOf<SkeletonGroupProps>().not.toHaveProperty('aria-label');
@@ -0,0 +1,21 @@
1
+ import clsx from 'clsx';
2
+ import type { ComponentPropsWithoutRef } from 'react';
3
+
4
+ import type { MarginSpacingProps, PaddingSpacingProps } from '../box';
5
+ import { StyledSkeletonFadeIn, skeletonClassNames } from './skeleton.styled';
6
+ import { skeletonTestIds } from './skeleton.test_ids';
7
+
8
+ // Native onClick clashes with the legacy BoxProps handler type, so it is omitted.
9
+ export interface SkeletonFadeInProps
10
+ extends Omit<ComponentPropsWithoutRef<'div'>, 'onClick'>, MarginSpacingProps, PaddingSpacingProps {}
11
+
12
+ /**
13
+ * Wraps the content that replaces a skeleton, so it fades in once instead of popping in.
14
+ */
15
+ export const SkeletonFadeIn = ({ className, ...rest }: SkeletonFadeInProps) => (
16
+ <StyledSkeletonFadeIn
17
+ data-test={skeletonTestIds.FADE_IN}
18
+ className={clsx(skeletonClassNames.FADE_IN, className)}
19
+ {...rest}
20
+ />
21
+ );
@@ -0,0 +1,32 @@
1
+ import clsx from 'clsx';
2
+ import type { ComponentPropsWithoutRef } from 'react';
3
+
4
+ import { Box, type MarginSpacingProps, type PaddingSpacingProps } from '../box';
5
+ import { skeletonClassNames } from './skeleton.styled';
6
+ import { skeletonTestIds } from './skeleton.test_ids';
7
+
8
+ // Native onClick clashes with the legacy BoxProps handler type, so it is omitted.
9
+ export interface SkeletonGroupProps
10
+ extends
11
+ Omit<ComponentPropsWithoutRef<'div'>, 'onClick' | 'role' | 'aria-busy' | 'aria-label'>,
12
+ MarginSpacingProps,
13
+ PaddingSpacingProps {
14
+ /**
15
+ * What is loading, used as the accessible name of the region, e.g. "Loading Actors".
16
+ */
17
+ label: string;
18
+ }
19
+
20
+ /**
21
+ * Wraps the skeleton blocks of one loading region, names it and marks it busy for assistive technology.
22
+ */
23
+ export const SkeletonGroup = ({ label, className, ...rest }: SkeletonGroupProps) => (
24
+ <Box
25
+ role="status"
26
+ aria-busy
27
+ aria-label={label}
28
+ data-test={skeletonTestIds.GROUP}
29
+ className={clsx(skeletonClassNames.GROUP, className)}
30
+ {...rest}
31
+ />
32
+ );
@@ -110,10 +110,12 @@ StyleDictionary.registerFilter({
110
110
  filter: (token) => ['Palette'].includes(token.path[0]),
111
111
  });
112
112
 
113
- // Select only tokens for theme colors (Decorative and Palette)
113
+ // Select only tokens for theme colors (Decorative, Palette, Brand and Third Party)
114
114
  StyleDictionary.registerFilter({
115
115
  name: 'only-theme',
116
- filter: (token) => ['Decorative', 'Palette', 'Brand'].includes(token.path[0]),
116
+ filter: (token) =>
117
+ ['Decorative', 'Palette', 'Brand'].includes(token.path[0]) ||
118
+ (token.path[0] === 'Semantic' && token.path[1] === 'Third_Party'),
117
119
  });
118
120
 
119
121
  // Select only the semantic neutral tokens (used for the brand dark neutral override)
@@ -36,6 +36,13 @@ const decorativePaletteFamilies = [
36
36
  'slate',
37
37
  ];
38
38
  const brandPaletteFamilies = ['magenta', 'mondo', 'lime', 'meteorite', 'logo'];
39
+ // Semantic tokens are labelled only by these families, so other theme values (e.g. third-party brand colors) can't take over the labels.
40
+ const labelPaletteFamilies = [
41
+ ...basePaletteFamilies,
42
+ ...neutralPaletteFamilies,
43
+ ...decorativePaletteFamilies,
44
+ ...brandPaletteFamilies,
45
+ ];
39
46
  const semanticColorSections: SemanticColorSection[] = [
40
47
  {
41
48
  title: 'Neutral',
@@ -173,7 +180,8 @@ const getColorDisplayName = (name: string, prefix: string) => {
173
180
 
174
181
  const getPaletteNameByValue = (value: string, palette: Record<string, string>) => {
175
182
  const paletteColor = Object.entries(palette).find(
176
- ([, paletteValue]) => paletteValue.toLowerCase() === value.toLowerCase(),
183
+ ([name, paletteValue]) =>
184
+ labelPaletteFamilies.includes(getPaletteFamily(name)) && paletteValue.toLowerCase() === value.toLowerCase(),
177
185
  );
178
186
 
179
187
  return paletteColor ? formatLabel(paletteColor[0]) : 'Color';
@@ -3,6 +3,19 @@
3
3
  */
4
4
 
5
5
  export const darkTheme = {
6
+ thirdPartyAnthropic: '#d97757',
7
+ thirdPartyChatGpt: '#ffffff',
8
+ thirdPartyClaude: '#d97757',
9
+ thirdPartyCursor: '#ffffff',
10
+ thirdPartyDiscord: '#5865f2',
11
+ thirdPartyGithub: '#ffffff',
12
+ thirdPartyLinkedin: '#0a66c2',
13
+ thirdPartyMake: '#6d00cc',
14
+ thirdPartyN8n: '#ea4b71',
15
+ thirdPartyPerplexity: '#20808d',
16
+ thirdPartyTwitter: '#ffffff',
17
+ thirdPartyYoutube: '#ff0000',
18
+ thirdPartyZapier: '#ff4a00',
6
19
  magentaDeep: '#694d6b',
7
20
  magentaMain: '#9d829f',
8
21
  magentaTint: '#fef3ff',
@@ -3,6 +3,19 @@
3
3
  */
4
4
 
5
5
  export const lightTheme = {
6
+ thirdPartyAnthropic: '#d97757',
7
+ thirdPartyChatGpt: '#000000',
8
+ thirdPartyClaude: '#d97757',
9
+ thirdPartyCursor: '#000000',
10
+ thirdPartyDiscord: '#5865f2',
11
+ thirdPartyGithub: '#181717',
12
+ thirdPartyLinkedin: '#0a66c2',
13
+ thirdPartyMake: '#6d00cc',
14
+ thirdPartyN8n: '#ea4b71',
15
+ thirdPartyPerplexity: '#20808d',
16
+ thirdPartyTwitter: '#000000',
17
+ thirdPartyYoutube: '#ff0000',
18
+ thirdPartyZapier: '#ff4a00',
6
19
  magentaDeep: '#694d6b',
7
20
  magentaMain: '#9d829f',
8
21
  magentaTint: '#fef3ff',
package/src/test_ids.ts CHANGED
@@ -16,6 +16,7 @@ export {
16
16
  selectControlTestId,
17
17
  selectMultiValueLabelTestId,
18
18
  } from './components/select/select.test_ids.js';
19
+ export { skeletonTestIds } from './components/skeleton/skeleton.test_ids.js';
19
20
  export { spinnerTestIds } from './components/spinner/spinner.test_ids.js';
20
21
  export {
21
22
  splitButtonMainActionTestId,