@fibery/ui-kit 1.12.2 → 1.14.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 (53) hide show
  1. package/package.json +5 -7
  2. package/src/designSystem.ts +2 -0
  3. package/src/emoji-picker/app-icon-picker.tsx +54 -0
  4. package/src/emoji-picker/emoji-index.ts +8 -0
  5. package/src/emoji-picker/emoji-picker.tsx +75 -0
  6. package/src/emoji-picker/emoji.tsx +11 -0
  7. package/src/{emoji-mart → emoji-picker}/icon-emoji-picker.tsx +13 -11
  8. package/src/emoji-picker/index.tsx +5 -0
  9. package/src/emoji-picker/lazy-emoji-data-store.tsx +29 -0
  10. package/src/emoji-picker/lazy-icon-data-store.tsx +55 -0
  11. package/src/emoji-picker/primitives/category.tsx +107 -0
  12. package/src/emoji-picker/primitives/content.tsx +48 -0
  13. package/src/emoji-picker/primitives/emoji.tsx +130 -0
  14. package/src/emoji-picker/primitives/footer.tsx +12 -0
  15. package/src/emoji-picker/primitives/grid.tsx +67 -0
  16. package/src/emoji-picker/primitives/header.tsx +11 -0
  17. package/src/emoji-picker/primitives/layout.ts +5 -0
  18. package/src/emoji-picker/primitives/root.tsx +79 -0
  19. package/src/emoji-picker/primitives/search-provider.tsx +22 -0
  20. package/src/emoji-picker/primitives/search.tsx +133 -0
  21. package/src/emoji-picker/primitives/skin-provider.tsx +27 -0
  22. package/src/emoji-picker/primitives/skin-tone.tsx +99 -0
  23. package/src/emoji-picker/stores/emoji-data-store.tsx +50 -0
  24. package/src/emoji-picker/utils/emoji-set.ts +5 -0
  25. package/src/{emoji-mart → emoji-picker/utils}/emoji-support.ts +6 -10
  26. package/src/emoji-picker/utils/frequently.ts +82 -0
  27. package/src/emoji-picker/utils/load-emoji-data.ts +4 -0
  28. package/src/emoji-picker/utils/store.ts +40 -0
  29. package/src/icons/ast/AddAfter.ts +8 -0
  30. package/src/icons/ast/AddBefore.ts +8 -0
  31. package/src/icons/ast/ArrowBarLeft.ts +8 -0
  32. package/src/icons/ast/ArrowBarRight.ts +8 -0
  33. package/src/icons/ast/Columns2.ts +8 -0
  34. package/src/icons/ast/Columns4.ts +8 -0
  35. package/src/icons/ast/MessagePlusSquare.ts +8 -0
  36. package/src/icons/ast/UsbFlashDrive.ts +8 -0
  37. package/src/icons/ast/index.tsx +8 -0
  38. package/src/icons/react/AddAfter.tsx +12 -0
  39. package/src/icons/react/AddBefore.tsx +12 -0
  40. package/src/icons/react/ArrowBarLeft.tsx +12 -0
  41. package/src/icons/react/ArrowBarRight.tsx +12 -0
  42. package/src/icons/react/Columns2.tsx +12 -0
  43. package/src/icons/react/Columns4.tsx +12 -0
  44. package/src/icons/react/MessagePlusSquare.tsx +12 -0
  45. package/src/icons/react/UsbFlashDrive.tsx +12 -0
  46. package/src/icons/react/index.tsx +8 -0
  47. package/src/emoji-mart/app-icon-picker.tsx +0 -68
  48. package/src/emoji-mart/data/get-data.tsx +0 -58
  49. package/src/emoji-mart/emoji/emoji.tsx +0 -26
  50. package/src/emoji-mart/emoji/index.tsx +0 -24
  51. package/src/emoji-mart/emoji-index.ts +0 -5
  52. package/src/emoji-mart/emoji-mart.tsx +0 -216
  53. package/src/emoji-mart/emoji-picker.tsx +0 -78
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const ArrowBarLeft: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"d":"M15.75 3.75a.75.75 0 0 0-1.5 0v12.5a.75.75 0 0 0 1.5 0V3.75ZM6.78 8.03a.75.75 0 0 0-1.06-1.06l-2.5 2.5a.75.75 0 0 0 0 1.06l2.5 2.5a.75.75 0 0 0 1.06-1.06l-1.22-1.22h5.69a.75.75 0 0 0 0-1.5H5.56l1.22-1.22Z"},"children":[]}],"metadata":""}]},"name":"arrow-bar-left"};
7
+
8
+ export default ArrowBarLeft;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const ArrowBarRight: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"d":"M5.5 16.25a.75.75 0 0 1-1.5 0V3.75a.75.75 0 0 1 1.5 0v12.5ZM14.03 13.03a.75.75 0 1 1-1.06-1.06l1.22-1.22H8.5a.75.75 0 0 1 0-1.5h5.69l-1.22-1.22a.75.75 0 0 1 1.06-1.06l2.5 2.5a.75.75 0 0 1 0 1.06l-2.5 2.5Z"},"children":[]}],"metadata":""}]},"name":"arrow-bar-right"};
7
+
8
+ export default ArrowBarRight;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const Columns2: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M4.25 4.5a.75.75 0 0 0-.75.75v9.5c0 .414.336.75.75.75h5v-11h-5Zm6.5 0v11h5a.75.75 0 0 0 .75-.75v-9.5a.75.75 0 0 0-.75-.75h-5ZM2 5.25A2.25 2.25 0 0 1 4.25 3h11.5A2.25 2.25 0 0 1 18 5.25v9.5A2.25 2.25 0 0 1 15.75 17H4.25A2.25 2.25 0 0 1 2 14.75v-9.5Z"},"children":[]}],"metadata":""}]},"name":"columns-2"};
7
+
8
+ export default Columns2;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const Columns4: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M4.25 4.5a.75.75 0 0 0-.75.75v9.5c0 .414.336.75.75.75H5.5v-11H4.25ZM7 4.5v11h2.25v-11H7Zm3.75 0v11H13v-11h-2.25Zm3.75 0v11h1.25a.75.75 0 0 0 .75-.75v-9.5a.75.75 0 0 0-.75-.75H14.5ZM2 5.25A2.25 2.25 0 0 1 4.25 3h11.5A2.25 2.25 0 0 1 18 5.25v9.5A2.25 2.25 0 0 1 15.75 17H4.25A2.25 2.25 0 0 1 2 14.75v-9.5Z"},"children":[]}],"metadata":""}]},"name":"columns-4"};
7
+
8
+ export default Columns4;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const MessagePlusSquare: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"d":"M10.75 6.25a.75.75 0 0 0-1.5 0V8H7.5a.75.75 0 0 0 0 1.5h1.75v1.75a.75.75 0 0 0 1.5 0V9.5h1.75a.75.75 0 0 0 0-1.5h-1.75V6.25Z"},"children":[]},{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M13.531 1.75H6.47c-.674 0-1.224 0-1.672.037-.463.037-.882.118-1.272.317a3.25 3.25 0 0 0-1.42 1.42c-.2.391-.28.81-.318 1.273-.037.448-.037.998-.037 1.672v5.306c0 .67 0 1.15.11 1.566A3.25 3.25 0 0 0 4.16 15.64c.27.072.566.098.924.107v1.228c0 .198 0 .394.015.554.014.153.05.428.24.666.222.278.558.44.913.44.305-.001.542-.145.67-.23a6.55 6.55 0 0 0 .442-.334l2.01-1.608c.43-.343.565-.447.708-.52.14-.072.29-.125.444-.156.157-.032.328-.036.878-.036h2.128c.674 0 1.225 0 1.672-.037.463-.037.882-.118 1.273-.317a3.25 3.25 0 0 0 1.42-1.42c.199-.391.28-.81.317-1.273.037-.447.037-.998.037-1.672V6.47c0-.674 0-1.224-.037-1.672-.037-.463-.118-.882-.317-1.272a3.25 3.25 0 0 0-1.42-1.42c-.391-.2-.81-.28-1.273-.318-.447-.037-.998-.037-1.671-.037ZM4.207 3.44c.144-.073.343-.128.713-.158.38-.031.869-.032 1.581-.032h7c.713 0 1.202 0 1.581.032.37.03.57.085.713.159.33.168.598.435.765.765.074.144.13.343.16.713.03.38.031.869.031 1.581V11c0 .712 0 1.202-.032 1.58-.03.371-.085.57-.159.714a1.75 1.75 0 0 1-.765.765c-.144.074-.343.13-.713.16-.38.03-.868.031-1.58.031h-2.165c-.455 0-.788 0-1.112.066a3.248 3.248 0 0 0-.826.29c-.295.15-.554.358-.91.643l-1.905 1.524V15a.75.75 0 0 0-.75-.75c-.823 0-1.087-.006-1.286-.06a1.75 1.75 0 0 1-1.237-1.237c-.053-.199-.06-.463-.06-1.286V6.5c0-.712 0-1.202.032-1.58.03-.371.085-.57.159-.714a1.75 1.75 0 0 1 .765-.765Z"},"children":[]}],"metadata":""}]},"name":"message-plus-square"};
7
+
8
+ export default MessagePlusSquare;
@@ -0,0 +1,8 @@
1
+
2
+ // This icon file is generated automatically.
3
+
4
+ import { IconDefinition } from '../types';
5
+
6
+ const UsbFlashDrive: IconDefinition = {"icon":{"type":"root","children":[{"type":"element","tagName":"svg","properties":{"viewBox":"0 0 20 20"},"children":[{"type":"element","tagName":"path","properties":{"d":"M9.083 4.167a.75.75 0 0 0-1.5 0V5a.75.75 0 1 0 1.5 0v-.833ZM12.417 4.167a.75.75 0 0 0-1.5 0V5a.75.75 0 0 0 1.5 0v-.833Z"},"children":[]},{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","clipRule":"evenodd","d":"M6.309.917c-.212 0-.414 0-.584.013-.185.015-.398.05-.61.16-.298.15-.54.393-.692.691a1.602 1.602 0 0 0-.16.61c-.013.17-.013.372-.013.584v3.902a1.979 1.979 0 0 0-.347.136A2.417 2.417 0 0 0 2.847 8.07c-.154.301-.212.617-.238.94a14.88 14.88 0 0 0-.026 1.127v4.228c0 .673 0 1.224.037 1.671.038.464.119.882.318 1.273a3.25 3.25 0 0 0 1.42 1.42c.39.2.81.28 1.272.318.448.036.999.036 1.672.036h5.396c.674 0 1.224 0 1.672-.036.463-.038.882-.119 1.272-.318a3.25 3.25 0 0 0 1.42-1.42c.2-.39.28-.81.318-1.273.037-.447.037-.998.037-1.671v-4.228c0-.441 0-.817-.025-1.126-.027-.324-.085-.64-.239-.941a2.417 2.417 0 0 0-1.056-1.057 1.978 1.978 0 0 0-.347-.136V2.975c0-.212 0-.414-.014-.584a1.603 1.603 0 0 0-.159-.61 1.583 1.583 0 0 0-.691-.692 1.602 1.602 0 0 0-.61-.159 7.607 7.607 0 0 0-.585-.013H6.31ZM14.25 6.75V3c0-.246 0-.385-.009-.486a.692.692 0 0 0-.007-.064.083.083 0 0 0-.018-.017.707.707 0 0 0-.063-.008 6.87 6.87 0 0 0-.486-.008H6.333c-.245 0-.385 0-.486.008a.702.702 0 0 0-.063.008.083.083 0 0 0-.018.017.707.707 0 0 0-.007.064A6.87 6.87 0 0 0 5.75 3v3.75H14.25Zm-9.666 1.6c.055-.028.151-.06.383-.08.24-.02.554-.02 1.033-.02h8c.48 0 .793 0 1.034.02.231.02.327.052.382.08a.917.917 0 0 1 .4.4c.029.055.062.152.08.383.02.24.02.555.02 1.034v4.166c0 .713 0 1.202-.03 1.581-.031.37-.086.57-.16.714a1.75 1.75 0 0 1-.765.765c-.144.073-.343.128-.713.159-.38.03-.869.031-1.581.031H7.334c-.713 0-1.202 0-1.581-.031-.37-.03-.57-.086-.714-.16a1.75 1.75 0 0 1-.765-.764c-.073-.144-.129-.343-.159-.714-.03-.379-.032-.868-.032-1.58v-4.167c0-.48.001-.794.02-1.034.02-.231.052-.328.08-.382a.917.917 0 0 1 .401-.401Z"},"children":[]}],"metadata":""}]},"name":"usb-flash-drive"};
7
+
8
+ export default UsbFlashDrive;
@@ -1,6 +1,8 @@
1
1
  // This icon file is generated automatically.
2
2
  export { default as ActivityLog } from './ActivityLog';
3
3
  export { default as Activity } from './Activity';
4
+ export { default as AddAfter } from './AddAfter';
5
+ export { default as AddBefore } from './AddBefore';
4
6
  export { default as AddCompact } from './AddCompact';
5
7
  export { default as AddGroup } from './AddGroup';
6
8
  export { default as AddReactions } from './AddReactions';
@@ -19,6 +21,8 @@ export { default as AppTemplates } from './AppTemplates';
19
21
  export { default as AppWebhooks } from './AppWebhooks';
20
22
  export { default as AppWiki } from './AppWiki';
21
23
  export { default as App } from './App';
24
+ export { default as ArrowBarLeft } from './ArrowBarLeft';
25
+ export { default as ArrowBarRight } from './ArrowBarRight';
22
26
  export { default as ArrowBottom } from './ArrowBottom';
23
27
  export { default as ArrowCollapseVertical } from './ArrowCollapseVertical';
24
28
  export { default as ArrowCollapse } from './ArrowCollapse';
@@ -35,6 +39,8 @@ export { default as Checked } from './Checked';
35
39
  export { default as ClearValue } from './ClearValue';
36
40
  export { default as Close } from './Close';
37
41
  export { default as ColorCoding } from './ColorCoding';
42
+ export { default as Columns2 } from './Columns2';
43
+ export { default as Columns4 } from './Columns4';
38
44
  export { default as Columns } from './Columns';
39
45
  export { default as Copy } from './Copy';
40
46
  export { default as CopyUrl } from './CopyUrl';
@@ -80,6 +86,7 @@ export { default as Levels } from './Levels';
80
86
  export { default as Lock } from './Lock';
81
87
  export { default as Markdown } from './Markdown';
82
88
  export { default as MenuCollapser } from './MenuCollapser';
89
+ export { default as MessagePlusSquare } from './MessagePlusSquare';
83
90
  export { default as Milestones } from './Milestones';
84
91
  export { default as Minus } from './Minus';
85
92
  export { default as MoreCompact } from './MoreCompact';
@@ -186,6 +193,7 @@ export { default as TypeSingleSelect } from './TypeSingleSelect';
186
193
  export { default as TypeText } from './TypeText';
187
194
  export { default as TypeUrl } from './TypeUrl';
188
195
  export { default as Upgrade } from './Upgrade';
196
+ export { default as UsbFlashDrive } from './UsbFlashDrive';
189
197
  export { default as ViewBoard } from './ViewBoard';
190
198
  export { default as ViewCalendar } from './ViewCalendar';
191
199
  export { default as ViewCanvas } from './ViewCanvas';
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import AddAfterSvg from '../ast/AddAfter';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const AddAfter = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={AddAfterSvg} />;
10
+
11
+ AddAfter.displayName = 'AddAfter';
12
+ export default AddAfter;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import AddBeforeSvg from '../ast/AddBefore';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const AddBefore = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={AddBeforeSvg} />;
10
+
11
+ AddBefore.displayName = 'AddBefore';
12
+ export default AddBefore;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import ArrowBarLeftSvg from '../ast/ArrowBarLeft';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const ArrowBarLeft = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={ArrowBarLeftSvg} />;
10
+
11
+ ArrowBarLeft.displayName = 'ArrowBarLeft';
12
+ export default ArrowBarLeft;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import ArrowBarRightSvg from '../ast/ArrowBarRight';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const ArrowBarRight = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={ArrowBarRightSvg} />;
10
+
11
+ ArrowBarRight.displayName = 'ArrowBarRight';
12
+ export default ArrowBarRight;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import Columns2Svg from '../ast/Columns2';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const Columns2 = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={Columns2Svg} />;
10
+
11
+ Columns2.displayName = 'Columns2';
12
+ export default Columns2;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import Columns4Svg from '../ast/Columns4';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const Columns4 = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={Columns4Svg} />;
10
+
11
+ Columns4.displayName = 'Columns4';
12
+ export default Columns4;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import MessagePlusSquareSvg from '../ast/MessagePlusSquare';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const MessagePlusSquare = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={MessagePlusSquareSvg} />;
10
+
11
+ MessagePlusSquare.displayName = 'MessagePlusSquare';
12
+ export default MessagePlusSquare;
@@ -0,0 +1,12 @@
1
+ // This icon file is generated automatically.
2
+
3
+ import UsbFlashDriveSvg from '../ast/UsbFlashDrive';
4
+ import { Icon } from '../Icon';
5
+ import { IconBaseProps } from '../types';
6
+
7
+ const UsbFlashDrive = (
8
+ props: IconBaseProps,
9
+ ): JSX.Element => <Icon {...props} icon={UsbFlashDriveSvg} />;
10
+
11
+ UsbFlashDrive.displayName = 'UsbFlashDrive';
12
+ export default UsbFlashDrive;
@@ -1,6 +1,8 @@
1
1
  // This icon file is generated automatically.
2
2
  export { default as ActivityLog } from './ActivityLog';
3
3
  export { default as Activity } from './Activity';
4
+ export { default as AddAfter } from './AddAfter';
5
+ export { default as AddBefore } from './AddBefore';
4
6
  export { default as AddCompact } from './AddCompact';
5
7
  export { default as AddGroup } from './AddGroup';
6
8
  export { default as AddReactions } from './AddReactions';
@@ -19,6 +21,8 @@ export { default as AppTemplates } from './AppTemplates';
19
21
  export { default as AppWebhooks } from './AppWebhooks';
20
22
  export { default as AppWiki } from './AppWiki';
21
23
  export { default as App } from './App';
24
+ export { default as ArrowBarLeft } from './ArrowBarLeft';
25
+ export { default as ArrowBarRight } from './ArrowBarRight';
22
26
  export { default as ArrowBottom } from './ArrowBottom';
23
27
  export { default as ArrowCollapseVertical } from './ArrowCollapseVertical';
24
28
  export { default as ArrowCollapse } from './ArrowCollapse';
@@ -35,6 +39,8 @@ export { default as Checked } from './Checked';
35
39
  export { default as ClearValue } from './ClearValue';
36
40
  export { default as Close } from './Close';
37
41
  export { default as ColorCoding } from './ColorCoding';
42
+ export { default as Columns2 } from './Columns2';
43
+ export { default as Columns4 } from './Columns4';
38
44
  export { default as Columns } from './Columns';
39
45
  export { default as Copy } from './Copy';
40
46
  export { default as CopyUrl } from './CopyUrl';
@@ -80,6 +86,7 @@ export { default as Levels } from './Levels';
80
86
  export { default as Lock } from './Lock';
81
87
  export { default as Markdown } from './Markdown';
82
88
  export { default as MenuCollapser } from './MenuCollapser';
89
+ export { default as MessagePlusSquare } from './MessagePlusSquare';
83
90
  export { default as Milestones } from './Milestones';
84
91
  export { default as Minus } from './Minus';
85
92
  export { default as MoreCompact } from './MoreCompact';
@@ -186,6 +193,7 @@ export { default as TypeSingleSelect } from './TypeSingleSelect';
186
193
  export { default as TypeText } from './TypeText';
187
194
  export { default as TypeUrl } from './TypeUrl';
188
195
  export { default as Upgrade } from './Upgrade';
196
+ export { default as UsbFlashDrive } from './UsbFlashDrive';
189
197
  export { default as ViewBoard } from './ViewBoard';
190
198
  export { default as ViewCalendar } from './ViewCalendar';
191
199
  export { default as ViewCanvas } from './ViewCanvas';
@@ -1,68 +0,0 @@
1
- import {forwardRef, useMemo} from "react";
2
- import {getThemedUrl} from "../AppIconWithFallback";
3
- import {useThemeMode} from "../ThemeProvider";
4
- import appIcons from "../appIcons.json";
5
- import {alignTheme} from "../theme-settings";
6
- import {$TSFixMe} from "../tsfixme";
7
- import type {EmojiDataProps} from "./data/get-data";
8
- import {EmojiMartWrapper, NimblePicker, NimblePickerProps} from "./emoji-mart";
9
- import {ColorPicker} from "../ColorPicker";
10
- import {cardTypeColors} from "../designSystem";
11
-
12
- const EMPTY_DATA = {
13
- aliases: {},
14
- emojis: {},
15
- categories: [],
16
- compressed: false,
17
- };
18
-
19
- type NimblePickerWithData = Omit<NimblePickerProps, keyof EmojiDataProps>;
20
-
21
- export type AppIconPickerProps = {
22
- borderless?: boolean;
23
- color?: string;
24
- getHoverColor?: (color: string) => string | undefined;
25
- colors?: string[];
26
- onColorSelect?: (c: $TSFixMe) => void;
27
- } & NimblePickerWithData;
28
-
29
- const i18n = {search: "Search icon...", notfound: "No Icons Found"};
30
-
31
- export const AppIconPicker = forwardRef<HTMLDivElement, AppIconPickerProps>(function AppIconPicker(
32
- {borderless = true, color, getHoverColor, colors = cardTypeColors, onColorSelect, ...pickerProps},
33
- ref
34
- ) {
35
- const themeMode = useThemeMode();
36
-
37
- const alignedTheme = alignTheme(themeMode);
38
-
39
- const customIcons = useMemo(
40
- () =>
41
- appIcons.map((icon) => {
42
- return {
43
- ...icon,
44
- imageUrl: getThemedUrl(icon.file, alignedTheme),
45
- };
46
- }),
47
- [alignedTheme]
48
- );
49
-
50
- return (
51
- <EmojiMartWrapper
52
- ref={ref}
53
- emojiHoverColor={color ? getHoverColor?.(color) : undefined}
54
- borderless={borderless}
55
- hideCategories
56
- >
57
- <NimblePicker custom={customIcons} i18n={i18n} {...pickerProps} data={EMPTY_DATA} showSkinTones={false} />
58
- {onColorSelect ? (
59
- <ColorPicker
60
- colors={colors}
61
- getSwatchHoverColor={getHoverColor}
62
- color={color}
63
- onChangeComplete={onColorSelect}
64
- />
65
- ) : null}
66
- </EmojiMartWrapper>
67
- );
68
- });
@@ -1,58 +0,0 @@
1
- import {detectEmojiSupportLevel} from "../emoji-support";
2
- import type {Data} from "emoji-mart";
3
-
4
- export type EmojiDataProps = {
5
- native: boolean;
6
- data: Data;
7
- backgroundImageFn: (set: string) => string;
8
- set: "apple" | "twitter";
9
- sheetColumns: number;
10
- sheetRows: number;
11
- };
12
-
13
- let promise: Promise<EmojiDataProps>;
14
-
15
- const backgroundImageFn = (set: string) =>
16
- `https://fibery-ui-public-assets.s3.eu-central-1.amazonaws.com/images/emoji-datasource-${set}-15_0_1-64.png`;
17
-
18
- export const loadEmojiData = async () => {
19
- const data = await import("@fibery/emoji-data/data/all.json");
20
- return data.default;
21
- };
22
-
23
- const getAppleDataProps = async (): Promise<EmojiDataProps> => {
24
- const [level, data] = await Promise.all([detectEmojiSupportLevel(), loadEmojiData()]);
25
-
26
- return {
27
- native: level >= 14,
28
- // type declarations between @fibery/emoji-data and emoji-mart conflict a bit but they are compatible
29
- data: data as unknown as Data,
30
- backgroundImageFn,
31
- set: "apple",
32
- sheetColumns: 61,
33
- sheetRows: 61,
34
- };
35
- };
36
- const getTwitterDataProps = async (): Promise<EmojiDataProps> => {
37
- const data = await loadEmojiData();
38
-
39
- return {
40
- native: false,
41
- // type declarations between @fibery/emoji-data and emoji-mart conflict a bit but they are compatible
42
- data: data as unknown as Data,
43
- backgroundImageFn,
44
- set: "twitter",
45
- sheetColumns: 61,
46
- sheetRows: 61,
47
- };
48
- };
49
-
50
- const isApple = () => /Mac|iPhone|iPad/.test(navigator.userAgent);
51
-
52
- export const getEmojiDataProps = async () => {
53
- if (!promise) {
54
- promise = isApple() ? getAppleDataProps() : getTwitterDataProps();
55
- }
56
-
57
- return promise;
58
- };
@@ -1,26 +0,0 @@
1
- import {css} from "@linaria/core";
2
- import {NimbleEmoji, NimbleEmojiProps} from "emoji-mart";
3
- import {themeVars} from "../../designSystem";
4
-
5
- const emojiWrapperCss = css`
6
- display: inline-flex;
7
- align-items: center;
8
-
9
- & span.emoji-mart-emoji {
10
- color: ${themeVars.textColor};
11
- line-height: 1;
12
- vertical-align: middle;
13
- & span {
14
- vertical-align: middle;
15
- }
16
- }
17
- `;
18
-
19
- export type EmojiMartEmojiProps = NimbleEmojiProps;
20
- export const EmojiMartEmoji: React.FC<NimbleEmojiProps> = (props) => {
21
- return (
22
- <span className={emojiWrapperCss}>
23
- <NimbleEmoji {...props} />
24
- </span>
25
- );
26
- };
@@ -1,24 +0,0 @@
1
- import {lazy, Suspense} from "react";
2
- import {EmojiDataProps, getEmojiDataProps} from "../data/get-data";
3
- import {EmojiMartEmoji, type EmojiMartEmojiProps} from "./emoji";
4
-
5
- type EmojiProps = Omit<EmojiMartEmojiProps, keyof EmojiDataProps>;
6
-
7
- const LazyEmojiComponent = lazy(async () => {
8
- const emojiDataProps = await getEmojiDataProps();
9
-
10
- function Emoji(props: EmojiProps) {
11
- return <EmojiMartEmoji {...props} {...emojiDataProps} />;
12
- }
13
- return {
14
- default: Emoji,
15
- };
16
- });
17
-
18
- export const Emoji: React.FC<EmojiProps> = function EmojiOrLoader(props) {
19
- return (
20
- <Suspense fallback={<div style={{width: props.size, height: props.size}} />}>
21
- <LazyEmojiComponent {...props} />
22
- </Suspense>
23
- );
24
- };
@@ -1,5 +0,0 @@
1
- import {NimbleEmojiIndex} from "@fibery/emoji-data";
2
-
3
- import data from "@fibery/emoji-data/data/all.json";
4
-
5
- export const emojiIndex = new NimbleEmojiIndex(data);
@@ -1,216 +0,0 @@
1
- import {CSSProperties, css, cx} from "@linaria/core";
2
- import "emoji-mart/css/emoji-mart.css";
3
- import {forwardRef} from "react";
4
- import {useTheme, useThemeMode} from "../ThemeProvider";
5
- import {border, fontFamily, space, textStyles, themeVars} from "../designSystem";
6
-
7
- import {NimblePickerProps, NimblePicker as Picker} from "emoji-mart";
8
- import {alignTheme} from "../theme-settings";
9
-
10
- export type {BaseEmoji, EmojiSkin, NimblePickerProps} from "emoji-mart";
11
-
12
- export const NimblePicker = (props: NimblePickerProps) => {
13
- const themeMode = useThemeMode();
14
- const theme = useTheme();
15
-
16
- return (
17
- <Picker
18
- theme={alignTheme(themeMode)}
19
- title={""}
20
- showPreview={false}
21
- skinEmoji="hand"
22
- color={theme.primary}
23
- emoji=""
24
- emojiSize={20}
25
- emojiTooltip
26
- {...props}
27
- />
28
- );
29
- };
30
-
31
- const emojiMartCss = css`
32
- padding: 0 ${space.l}px;
33
- position: relative;
34
-
35
- .emoji-mart {
36
- font-family: ${fontFamily};
37
- background-color: ${themeVars.actionMenuBg};
38
- margin-top: ${space.xxs}px;
39
- display: block;
40
- width: 288px !important;
41
-
42
- + * {
43
- border-top: 1px solid ${themeVars.separatorColor};
44
- }
45
- }
46
-
47
- .emoji-mart-bar {
48
- border-bottom: 1px solid ${themeVars.separatorColor};
49
-
50
- &:last-child {
51
- border: 0;
52
- }
53
- }
54
-
55
- .emoji-mart-search {
56
- padding-bottom: ${space.s}px;
57
- padding-left: 0;
58
- padding-right: 0;
59
-
60
- & input {
61
- ${textStyles.regular}
62
- background-color: ${themeVars.inputBgColor};
63
- color: ${themeVars.textColor};
64
- box-shadow: ${themeVars.inputBorderColor};
65
- height: 32px;
66
- border: 0;
67
- }
68
-
69
- & .emoji-mart-search-icon {
70
- top: 5px;
71
- right: 4px;
72
- }
73
- }
74
-
75
- .emoji-mart-scroll {
76
- padding-left: 0;
77
- padding-right: 0;
78
- height: 238px;
79
- }
80
-
81
- .emoji-anchor-bar {
82
- height: ${space.xxs}px;
83
- }
84
-
85
- .emoji-mart-category-label {
86
- & span {
87
- ${textStyles.heading6}
88
- background-color: ${themeVars.actionMenuBg};
89
- color: ${themeVars.textColor};
90
- color: ${themeVars.accentTextColor};
91
- padding-top: ${space.l}px;
92
- }
93
- }
94
-
95
- .emoji-mart-category .emoji-mart-emoji span,
96
- .emoji-mart-anchor {
97
- cursor: pointer !important;
98
- }
99
-
100
- .emoji-mart-category .emoji-mart-emoji:hover::before {
101
- background-color: var(--fibery-emoji-hover-color, ${themeVars.badgeBgColor}) !important;
102
- border-radius: ${border.radius8}px !important;
103
- }
104
- .emoji-mart-dark .emoji-mart-category-label span {
105
- background-color: ${themeVars.actionMenuBg};
106
- }
107
-
108
- .emoji-mart-skin-swatch {
109
- cursor: pointer;
110
- }
111
-
112
- .emoji-mart-preview {
113
- height: 0px;
114
- position: unset;
115
- }
116
-
117
- .emoji-mart-emoji {
118
- color: ${themeVars.textColor};
119
- /* pathetic attemts to make it a bit faster without forking */
120
- content-visibility: auto;
121
- contain-intrinsic-size: 20px;
122
- cursor: pointer;
123
- }
124
- .emoji-mart-category-list,
125
- .emoji-mart-category-list li {
126
- /* hack to maintain correct size of hidden emojis becuase of content-visibility */
127
- line-height: 0;
128
- }
129
- .emoji-mart-preview-skins {
130
- top: 16px;
131
- right: 12px !important;
132
- z-index: 2;
133
- background-color: ${themeVars.actionMenuBg};
134
-
135
- & .emoji-mart-skin-swatches {
136
- background-color: ${themeVars.actionMenuBg};
137
-
138
- &.opened {
139
- & .emoji-mart-skin-swatch {
140
- width: 32px !important;
141
- }
142
- }
143
-
144
- & .emoji-mart-skin-swatch {
145
- height: 32px !important;
146
-
147
- &.selected {
148
- width: 32px !important;
149
- padding: 0;
150
- }
151
-
152
- &:hover {
153
- background-color: ${themeVars.badgeBgColor} !important;
154
- border-radius: ${border.radius8}px !important;
155
- }
156
- }
157
- & .emoji-mart-skin-text {
158
- height: auto;
159
- padding: 0;
160
- background-color: ${themeVars.actionMenuBg};
161
- color: ${themeVars.accentTextColor};
162
- border-radius: 0;
163
-
164
- &.opened {
165
- width: 98px;
166
- padding-left: 8px;
167
- }
168
- }
169
- }
170
- }
171
- `;
172
-
173
- const borderlessEmojiMartCss = css`
174
- .emoji-mart {
175
- border-radius: 0;
176
- border: none;
177
- }
178
- `;
179
- const hideCategoriesEmojiMartCss = css`
180
- .emoji-mart-bar:first-child {
181
- display: none;
182
- }
183
- `;
184
-
185
- const emojiMartWithShortSearchCss = css`
186
- .emoji-mart-search {
187
- width: 250px;
188
- }
189
- `;
190
-
191
- type EmojiMartWrapperProps = React.PropsWithChildren<{
192
- borderless?: boolean;
193
- hideCategories?: boolean;
194
- shortSearch?: boolean;
195
- emojiHoverColor?: string;
196
- }>;
197
-
198
- export const EmojiMartWrapper = forwardRef<HTMLDivElement, EmojiMartWrapperProps>(function EmojiMartWrapper(
199
- {borderless, hideCategories, emojiHoverColor, shortSearch, children},
200
- ref
201
- ) {
202
- return (
203
- <div
204
- style={{"--fibery-emoji-hover-color": emojiHoverColor} as CSSProperties}
205
- ref={ref}
206
- className={cx(
207
- emojiMartCss,
208
- borderless && borderlessEmojiMartCss,
209
- hideCategories && hideCategoriesEmojiMartCss,
210
- shortSearch && emojiMartWithShortSearchCss
211
- )}
212
- >
213
- {children}
214
- </div>
215
- );
216
- });