@fibery/ui-kit 1.8.0 → 1.9.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fibery/ui-kit",
3
- "version": "1.8.0",
3
+ "version": "1.9.1",
4
4
  "main": "index.ts",
5
5
  "private": false,
6
6
  "files": [
@@ -22,7 +22,10 @@
22
22
  "src/Pallete.ts",
23
23
  "src/tooltip.tsx",
24
24
  "src/BackButton.tsx",
25
- "src/Button"
25
+ "src/Button",
26
+ "src/emoji-mart.tsx",
27
+ "src/emoji-picker.tsx",
28
+ "src/app-icon-picker.tsx"
26
29
  ],
27
30
  "license": "UNLICENSED",
28
31
  "dependencies": {
@@ -92,8 +95,8 @@
92
95
  "svgo": "2.8.0",
93
96
  "typescript": "5.0.3",
94
97
  "unist-util-reduce": "0.2.2",
95
- "@fibery/eslint-config": "8.3.0",
96
- "@fibery/babel-preset": "7.2.0"
98
+ "@fibery/babel-preset": "7.2.0",
99
+ "@fibery/eslint-config": "8.3.0"
97
100
  },
98
101
  "jest": {
99
102
  "testEnvironment": "jsdom",
@@ -31,7 +31,7 @@ const getBorderColor = ({
31
31
  if (primary) {
32
32
  return mainColor;
33
33
  }
34
- return getOpacities(mainColor).opacity15;
34
+ return getOpacities(mainColor).opacity30;
35
35
  };
36
36
 
37
37
  const getHoverBorderColor = ({
@@ -19,6 +19,7 @@ import BaseSelect, {
19
19
  ActionMeta,
20
20
  OnChangeValue,
21
21
  PropsValue,
22
+ components as reactSelectComponents,
22
23
  } from "react-select";
23
24
  import BaseCreatableSelect, {CreatableProps} from "react-select/creatable";
24
25
  import WindowedSelect, {components, WindowedMenuList} from "react-windowed-select";
@@ -245,6 +246,7 @@ export function CreatableSelectInner<
245
246
  isCollectionMode,
246
247
  menuPortalTarget,
247
248
  styles = {},
249
+ virtualized = true,
248
250
  ...rest
249
251
  }: CreatableProps<Option, IsMulti, Group> & SelectProps<Option, IsMulti, Group>,
250
252
  ref: any
@@ -263,7 +265,7 @@ export function CreatableSelectInner<
263
265
  tabSelectsValue={false}
264
266
  components={{
265
267
  Menu,
266
- MenuList: WindowedMenuList,
268
+ MenuList: virtualized ? WindowedMenuList : reactSelectComponents.MenuList,
267
269
  DropdownIndicator,
268
270
  ClearIndicator,
269
271
  Option: OptionComponent,
@@ -0,0 +1,50 @@
1
+ import {forwardRef, useMemo} from "react";
2
+ import {EmojiMartWrapper, NimblePicker, PickerProps} from "./emoji-mart";
3
+ import {useThemeMode} from "./ThemeProvider";
4
+ import {alignTheme} from "./theme-settings";
5
+ import appIcons from "./appIcons.json";
6
+ import {getThemedUrl} from "./AppIconWithFallback";
7
+
8
+ const EMPTY_DATA = {
9
+ aliases: {},
10
+ emojis: {},
11
+ categories: [],
12
+ compressed: false,
13
+ };
14
+
15
+ export type AppIconPickerProps = {borderless?: boolean} & PickerProps;
16
+
17
+ export const AppIconPicker = forwardRef<HTMLDivElement, AppIconPickerProps>(function AppIconPicker(
18
+ {borderless = true, ...pickerProps},
19
+ ref
20
+ ) {
21
+ const themeMode = useThemeMode();
22
+
23
+ const alignedTheme = alignTheme(themeMode);
24
+
25
+ const customIcons = useMemo(
26
+ () =>
27
+ appIcons.map((icon) => {
28
+ return {
29
+ ...icon,
30
+ imageUrl: getThemedUrl(icon.file, alignedTheme),
31
+ };
32
+ }),
33
+ [alignedTheme]
34
+ );
35
+
36
+ return (
37
+ <EmojiMartWrapper ref={ref} borderless={borderless} hideCategories>
38
+ <NimblePicker
39
+ data={EMPTY_DATA}
40
+ theme={alignedTheme}
41
+ showSkinTones={false}
42
+ showPreview={false}
43
+ title=""
44
+ custom={customIcons}
45
+ emojiSize={22}
46
+ {...pickerProps}
47
+ />
48
+ </EmojiMartWrapper>
49
+ );
50
+ });
@@ -237,8 +237,8 @@ const lightColors = {
237
237
  filterGroupBorder: blackA.blackA3,
238
238
  //end
239
239
  disabledInversedTextColor: shades.opacity25,
240
- danger: brandColors.red,
241
- active: brandColors.red,
240
+ danger: red.red9,
241
+ active: red.red9,
242
242
  warning: "#FFD41E",
243
243
  cardBg: "#FFFFFF",
244
244
  cardSelected: "#FFFB8F",
@@ -397,8 +397,8 @@ const darkColors = {
397
397
  filterGroupBorder: whiteA.whiteA3,
398
398
  //end
399
399
  disabledInversedTextColor: lights.opacity25,
400
- danger: redDark.red9,
401
- active: brandColors.red,
400
+ danger: redDark.red10,
401
+ active: redDark.red10,
402
402
  warning: "#FFD41E",
403
403
  cardBg: slateDark.slate6,
404
404
  cardSelected: slateDark.slate5,
@@ -580,20 +580,12 @@ export const colors = {
580
580
  brandColors,
581
581
  stateColors,
582
582
  textColor: "#2A3844",
583
- disabledTextColor: shades.opacity40,
584
583
  inversedTextColor: "#FFFFFF",
585
584
  disabledInversedTextColor: lights.opacity25,
586
585
  danger: brandColors.red,
587
- active: brandColors.red,
588
- warning: "#FFD41E",
589
- cardBg: "#FFFFFF",
590
586
  cardSelected: "#FFFB8F",
591
587
  cardSelectedHover: "rgba(240, 244, 247, 0.6)",
592
- selectedImageBorder: "rgba(42, 56, 68, 0.3)",
593
588
  unitBg: "rgba(220, 224, 228, 0.33)",
594
- infoBox: "rgba(255, 212, 0, 0.2)",
595
- errorBg: "rgba(255, 241, 240, 1)",
596
- timelineScaleSelectBorderColor: chroma("#FFFFFF").alpha(opacity.opacity40).css(),
597
589
  transparent,
598
590
  shades,
599
591
  lights,
@@ -892,7 +884,7 @@ export const textStyles = {
892
884
  lineHeight: lineHeight.regular,
893
885
  fontWeight: fontWeight.regular,
894
886
  color: themeVars.textColor,
895
- border: `1px solid ${colors.active}`,
887
+ border: `1px solid ${themeVars.active}`,
896
888
  borderRadius: radius,
897
889
  },
898
890
  } as const;
@@ -0,0 +1,122 @@
1
+ import "emoji-mart/css/emoji-mart.css";
2
+ import {forwardRef} from "react";
3
+ import {border, space, textStyles, themeVars} from "./designSystem";
4
+ import {cx, css} from "@linaria/core";
5
+ import {Emoji as EmojiMartEmoji, EmojiProps} from "emoji-mart";
6
+
7
+ export {detectEmojiSupportLevel} from "./emojiSupport";
8
+ export {emojiIndex, Picker, NimblePicker} from "emoji-mart";
9
+ export type {BaseEmoji, PickerProps, EmojiSkin} from "emoji-mart";
10
+
11
+ export const backgroundImageFn = () => "https://assets-temp.fibery.io/images/emoji-datasource-apple-5_0_1-64.png";
12
+
13
+ const emojiMartCss = css`
14
+ .emoji-mart {
15
+ background-color: ${themeVars.actionMenuBg};
16
+ margin-top: ${space.xxs}px;
17
+ display: block;
18
+ }
19
+
20
+ .emoji-mart-bar {
21
+ border-bottom: 1px solid ${themeVars.separatorColor};
22
+
23
+ &:last-child {
24
+ border-top: 1px solid ${themeVars.separatorColor};
25
+ }
26
+ }
27
+
28
+ .emoji-mart-search {
29
+ padding-bottom: ${space.s}px;
30
+
31
+ & input {
32
+ ${textStyles.regular}
33
+ background-color: ${themeVars.inputBgColor};
34
+ color: ${themeVars.textColor};
35
+ box-shadow: ${themeVars.inputBorderColor};
36
+ height: 34px;
37
+ border: 0;
38
+ }
39
+ }
40
+
41
+ .emoji-anchor-bar {
42
+ height: ${space.xxs}px;
43
+ }
44
+
45
+ .emoji-mart-category-label {
46
+ & span {
47
+ ${textStyles.heading6}
48
+ background-color: ${themeVars.actionMenuBg};
49
+ color: ${themeVars.textColor};
50
+ color: ${themeVars.accentTextColor};
51
+ padding-top: ${space.l}px;
52
+ }
53
+ }
54
+
55
+ .emoji-mart-category .emoji-mart-emoji span,
56
+ .emoji-mart-anchor {
57
+ cursor: pointer !important;
58
+ }
59
+
60
+ .emoji-mart-category .emoji-mart-emoji:hover::before {
61
+ background-color: ${themeVars.badgeBgColor} !important;
62
+ border-radius: ${border.radius8}px !important;
63
+ }
64
+ .emoji-mart-dark .emoji-mart-category-label span {
65
+ background-color: ${themeVars.actionMenuBg};
66
+ }
67
+
68
+ .emoji-mart-skin-swatch {
69
+ cursor: pointer;
70
+ }
71
+
72
+ .emoji-mart-preview {
73
+ height: 50px;
74
+ }
75
+
76
+ .emoji-mart-preview-skins {
77
+ right: 15px;
78
+ }
79
+
80
+ .emoji-mart-emoji {
81
+ /* pathetic attemts to make it a bit faster without forking */
82
+ content-visibility: auto;
83
+ contain-intrinsic-size: 22px;
84
+ }
85
+ .emoji-mart-category-list,
86
+ .emoji-mart-category-list li {
87
+ /* hack to maintain correct size of hidden emojis becuase of content-visibility */
88
+ line-height: 0;
89
+ }
90
+ `;
91
+
92
+ const borderlessEmojiMartCss = css`
93
+ .emoji-mart {
94
+ border-radius: 0;
95
+ border: none;
96
+ }
97
+ `;
98
+ const hideCategoriesEmojiMartCss = css`
99
+ .emoji-mart-bar:first-child {
100
+ display: none;
101
+ }
102
+ `;
103
+
104
+ type EmojiMartWrapperProps = React.PropsWithChildren<{borderless?: boolean; hideCategories?: boolean}>;
105
+
106
+ export const EmojiMartWrapper = forwardRef<HTMLDivElement, EmojiMartWrapperProps>(function EmojiMartWrapper(
107
+ {borderless, hideCategories, children},
108
+ ref
109
+ ) {
110
+ return (
111
+ <div
112
+ ref={ref}
113
+ className={cx(emojiMartCss, borderless && borderlessEmojiMartCss, hideCategories && hideCategoriesEmojiMartCss)}
114
+ >
115
+ {children}
116
+ </div>
117
+ );
118
+ });
119
+
120
+ export const Emoji: React.FC<EmojiProps> = (props) => {
121
+ return <EmojiMartEmoji backgroundImageFn={backgroundImageFn} {...props} />;
122
+ };
@@ -0,0 +1,32 @@
1
+ import {forwardRef} from "react";
2
+ import {useTheme, useThemeMode} from "./ThemeProvider";
3
+ import {EmojiMartWrapper, Picker, PickerProps, backgroundImageFn} from "./emoji-mart";
4
+ import {alignTheme} from "./theme-settings";
5
+
6
+ type EmojiPickerProps = {
7
+ borderless?: boolean;
8
+ } & PickerProps;
9
+
10
+ export const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(function EmojiPickerComponent(
11
+ {borderless = true, ...pickerProps},
12
+ ref
13
+ ) {
14
+ const themeMode = useThemeMode();
15
+ const theme = useTheme();
16
+
17
+ return (
18
+ <EmojiMartWrapper ref={ref} borderless={borderless}>
19
+ <Picker
20
+ theme={alignTheme(themeMode)}
21
+ backgroundImageFn={backgroundImageFn}
22
+ native
23
+ title={""}
24
+ showPreview={false}
25
+ color={theme.primary}
26
+ emoji=""
27
+ emojiSize={22}
28
+ {...pickerProps}
29
+ />
30
+ </EmojiMartWrapper>
31
+ );
32
+ });