@fibery/ui-kit 1.18.0 → 1.20.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 (81) hide show
  1. package/package.json +9 -7
  2. package/src/a11y-color.ts +9 -6
  3. package/src/antd/styles.ts +6 -6
  4. package/src/back-button.tsx +1 -1
  5. package/src/{Button → button}/button.tsx +5 -5
  6. package/src/button.tsx +1 -1
  7. package/src/design-system.ts +83 -34
  8. package/src/emoji-picker/emoji-picker-content-with-color.tsx +4 -4
  9. package/src/emoji-picker/emoji-picker.tsx +2 -2
  10. package/src/emoji-picker/icon-emoji-picker.tsx +1 -1
  11. package/src/emoji-picker/primitives/category.tsx +3 -3
  12. package/src/emoji-picker/primitives/emoji.tsx +26 -3
  13. package/src/emoji-picker/primitives/footer.tsx +1 -1
  14. package/src/emoji-picker/primitives/header.tsx +1 -1
  15. package/src/emoji-picker/primitives/layout.ts +2 -2
  16. package/src/emoji-picker/primitives/search.tsx +6 -6
  17. package/src/emoji-picker/primitives/skin-tone.tsx +1 -1
  18. package/src/error-alert.tsx +4 -4
  19. package/src/form-field-loader.tsx +3 -3
  20. package/src/icons/Icon.tsx +2 -2
  21. package/src/icons/ast/AlertTriangle.ts +8 -0
  22. package/src/icons/ast/BellRinging.ts +1 -1
  23. package/src/icons/ast/Clock.ts +8 -0
  24. package/src/icons/ast/ClockAlarm.ts +8 -0
  25. package/src/icons/ast/Copy.ts +1 -1
  26. package/src/icons/ast/DragBlockHandleSingle.ts +8 -0
  27. package/src/icons/ast/ExtensionComments.ts +1 -1
  28. package/src/icons/ast/Eye.ts +8 -0
  29. package/src/icons/ast/Monitor.ts +8 -0
  30. package/src/icons/ast/NetworkAdd.ts +8 -0
  31. package/src/icons/ast/RemovePeople.ts +8 -0
  32. package/src/icons/ast/RicheditorCommentCreate.ts +1 -1
  33. package/src/icons/ast/RicheditorMarkTextBackgroundColor.ts +8 -0
  34. package/src/icons/ast/Success.ts +8 -0
  35. package/src/icons/ast/WarningTriangle.ts +8 -0
  36. package/src/icons/ast/index.tsx +11 -1
  37. package/src/icons/react/AlertTriangle.tsx +12 -0
  38. package/src/icons/react/Clock.tsx +12 -0
  39. package/src/icons/react/ClockAlarm.tsx +12 -0
  40. package/src/icons/react/DragBlockHandleSingle.tsx +12 -0
  41. package/src/icons/react/Eye.tsx +12 -0
  42. package/src/icons/react/Monitor.tsx +12 -0
  43. package/src/icons/react/NetworkAdd.tsx +12 -0
  44. package/src/icons/react/RemovePeople.tsx +12 -0
  45. package/src/icons/react/RicheditorMarkTextBackgroundColor.tsx +12 -0
  46. package/src/icons/react/Success.tsx +12 -0
  47. package/src/icons/react/WarningTriangle.tsx +12 -0
  48. package/src/icons/react/index.tsx +11 -1
  49. package/src/loaders.tsx +10 -10
  50. package/src/loading-sausage.tsx +2 -2
  51. package/src/media-query-utils.ts +1 -1
  52. package/src/{Select → select}/custom-select-partials/clear-indicator.tsx +1 -1
  53. package/src/{Select → select}/custom-select-partials/group-heading.tsx +2 -2
  54. package/src/{Select → select}/custom-select-partials/menu.tsx +9 -1
  55. package/src/{Select → select}/custom-select-partials/no-option-message.tsx +1 -1
  56. package/src/select/custom-select-partials/option.tsx +122 -0
  57. package/src/{Select → select}/index.tsx +40 -5
  58. package/src/{Select → select}/select-in-popover.tsx +14 -14
  59. package/src/{Select → select}/styles.ts +15 -9
  60. package/src/toast/primitives.tsx +46 -28
  61. package/src/toast/toast-action.tsx +28 -0
  62. package/src/toast/toast-provider.tsx +15 -0
  63. package/src/toast/toast-queue.ts +117 -0
  64. package/src/toast/toast.tsx +121 -0
  65. package/src/toast/toaster.tsx +35 -0
  66. package/src/toast/utils/toastify-item-name.ts +6 -0
  67. package/src/tooltip.tsx +2 -2
  68. package/src/Select/custom-select-partials/option.tsx +0 -92
  69. package/src/icons/ast/RicheditorMarkHighlight.ts +0 -8
  70. package/src/icons/react/RicheditorMarkHighlight.tsx +0 -12
  71. package/src/toast/index.tsx +0 -47
  72. /package/src/{Button → button}/actions-button-compact.tsx +0 -0
  73. /package/src/{Button → button}/actions-button.tsx +0 -0
  74. /package/src/{Button → button}/add-button.tsx +0 -0
  75. /package/src/{Button → button}/back-button.tsx +0 -0
  76. /package/src/{Button → button}/button-base.tsx +0 -0
  77. /package/src/{Button → button}/button-group.tsx +0 -0
  78. /package/src/{Button → button}/icon-button.tsx +0 -0
  79. /package/src/{Select → select}/custom-select-partials/drop-down-indicator.tsx +0 -0
  80. /package/src/{Select → select}/select-control-settings-context.tsx +0 -0
  81. /package/src/{Select → select}/select-loader.tsx +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fibery/ui-kit",
3
- "version": "1.18.0",
3
+ "version": "1.20.0",
4
4
  "main": "index.ts",
5
5
  "private": false,
6
6
  "files": [
@@ -17,12 +17,12 @@
17
17
  "src/loaders.tsx",
18
18
  "src/loading-sausage.tsx",
19
19
  "src/icons/**/*.ts*",
20
- "src/Select",
20
+ "src/select",
21
21
  "src/error-alert.tsx",
22
22
  "src/pallete.ts",
23
23
  "src/tooltip.tsx",
24
24
  "src/back-button.tsx",
25
- "src/Button",
25
+ "src/button",
26
26
  "src/emoji-picker/**/*.ts*",
27
27
  "src/toast/**/*.ts*",
28
28
  "src/a11y-color.ts"
@@ -48,11 +48,12 @@
48
48
  "cmdk": "0.2.0",
49
49
  "color-hash": "1.0.3",
50
50
  "d3-shape": "1.3.7",
51
- "date-fns": "^2.29.2",
51
+ "date-fns": "2.29.2",
52
52
  "invariant": "2.2.4",
53
53
  "lodash": "4.17.21",
54
54
  "md5": "2.2.1",
55
55
  "moment": "2.29.4",
56
+ "popper-max-size-modifier": "0.2.0",
56
57
  "prop-types": "15.7.2",
57
58
  "rc-input-number": "7.3.11",
58
59
  "rc-menu": "9.8.1",
@@ -67,8 +68,8 @@
67
68
  "screenfull": "6.0.1",
68
69
  "ua-parser-js": "0.7.24",
69
70
  "@fibery/helpers": "1.2.0",
70
- "@fibery/emoji-data": "2.2.0",
71
- "@fibery/react": "1.1.0"
71
+ "@fibery/react": "1.3.0",
72
+ "@fibery/emoji-data": "2.2.1"
72
73
  },
73
74
  "peerDependencies": {
74
75
  "react": "^18.2.0",
@@ -85,6 +86,7 @@
85
86
  "@types/chroma-js": "2.1.3",
86
87
  "@types/color-hash": "1.0.2",
87
88
  "@types/invariant": "2.2.34",
89
+ "@types/jest": "27.0.1",
88
90
  "@types/lodash": "4.14.172",
89
91
  "@types/prop-types": "15.7.5",
90
92
  "@types/react": "18.0.26",
@@ -101,7 +103,7 @@
101
103
  "typescript": "5.1.6",
102
104
  "unist-util-reduce": "0.2.2",
103
105
  "@fibery/babel-preset": "7.3.0",
104
- "@fibery/eslint-config": "8.4.0"
106
+ "@fibery/eslint-config": "8.5.0"
105
107
  },
106
108
  "jest": {
107
109
  "testEnvironment": "jsdom",
package/src/a11y-color.ts CHANGED
@@ -59,23 +59,26 @@ const checkColor = (colorValue: string) => {
59
59
  * @return {string} - The closest hex color for `toMakeA11y` on `background`
60
60
  */
61
61
  export function a11yColor(toMakeA11y: string, background: string, minimumContrast = 3.0) {
62
+ const key = toMakeA11y + background + minimumContrast;
63
+ if (cache.has(key)) {
64
+ return cache.get(key);
65
+ }
62
66
  if (!checkColor(toMakeA11y) || !checkColor(background)) {
67
+ cache.put(key, toMakeA11y);
63
68
  return toMakeA11y;
64
69
  }
65
70
 
66
71
  if (minimumContrast < 0 && minimumContrast > 21) {
67
72
  throw new Error(`Minimum contrast must be a number between 0 and 21. It was ${minimumContrast}`);
68
73
  }
69
- const key = toMakeA11y + background + minimumContrast;
70
- if (cache.has(key)) {
71
- return cache.get(key);
72
- }
73
74
  const a11y = chroma(toMakeA11y);
74
75
  const bg = chroma(background);
75
76
 
76
77
  // Check the ratio straight away, if it passes return the value as hex
77
78
  if (chroma.contrast(background, toMakeA11y) >= minimumContrast) {
78
- return a11y.hex();
79
+ const val = a11y.hex();
80
+ cache.put(key, val);
81
+ return val;
79
82
  }
80
83
 
81
84
  // Ratio didn't pass so we need to find the nearest color
@@ -142,6 +145,6 @@ export function a11yColor(toMakeA11y: string, background: string, minimumContras
142
145
  minLightness = midLightness;
143
146
  }
144
147
  }
145
-
148
+ cache.put(key, foundColor);
146
149
  return foundColor;
147
150
  }
@@ -27,8 +27,8 @@ export const inputOverrides = {
27
27
  minHeight: layout.inputHeight,
28
28
  paddingTop: 0,
29
29
  paddingBottom: 0,
30
- paddingLeft: space.l,
31
- paddingRight: space.l,
30
+ paddingLeft: space.s12,
31
+ paddingRight: space.s12,
32
32
  border: 0,
33
33
  borderColor: colors.transparent,
34
34
  transition: `box-shadow ${transition}`,
@@ -114,8 +114,8 @@ export const inputStyles = css`
114
114
  "& .ant-input.ant-input-disabled": inputOverrides.disabled,
115
115
  },
116
116
  "& textarea.ant-input": {
117
- paddingTop: space.m,
118
- paddingBottom: space.m,
117
+ paddingTop: space.s8,
118
+ paddingBottom: space.s8,
119
119
  },
120
120
  "& .ant-select-disabled .ant-select-selection": {
121
121
  backgroundColor: colors.transparent,
@@ -128,7 +128,7 @@ export const inputStyles = css`
128
128
  "&& input::placeholder, && textarea::placeholder": {
129
129
  color: themeVars.inputPlaceholderTextColor,
130
130
  },
131
- "& .ant-input-affix-wrapper .ant-input-prefix": {left: space.s},
132
- "& .ant-input-affix-wrapper .ant-input:not(:first-child)": {paddingLeft: space.s + space.xl + space.m}, // Match TitlePreview spacing
131
+ "& .ant-input-affix-wrapper .ant-input-prefix": {left: space.s6},
132
+ "& .ant-input-affix-wrapper .ant-input:not(:first-child)": {paddingLeft: space.s6 + space.s24 + space.s8}, // Match TitlePreview spacing
133
133
  }}
134
134
  `;
@@ -1,3 +1,3 @@
1
- import {BackButton} from "./Button/back-button";
1
+ import {BackButton} from "./button/back-button";
2
2
 
3
3
  export {BackButton};
@@ -119,11 +119,11 @@ const shortcutStyle = css`
119
119
  ...textStyles.small,
120
120
  color: "currentColor",
121
121
  borderRadius: border.radius4,
122
- paddingLeft: space.xs,
123
- paddingRight: space.xs,
124
- paddingBottom: space.xxs,
125
- marginRight: -space.xs,
126
- marginLeft: space.xxs,
122
+ paddingLeft: space.s4,
123
+ paddingRight: space.s4,
124
+ paddingBottom: space.s2,
125
+ marginRight: -space.s4,
126
+ marginLeft: space.s2,
127
127
  opacity: opacity.opacity80,
128
128
  display: "inline-block",
129
129
  }}
package/src/button.tsx CHANGED
@@ -1,3 +1,3 @@
1
- import {Button} from "./Button/button";
1
+ import {Button} from "./button/button";
2
2
 
3
3
  export {Button};
@@ -262,13 +262,16 @@ export const themeColors = {
262
262
  getOpacities(slateDark.slate1).opacity40
263
263
  }`,
264
264
  ],
265
- colorBgSelectOptionDefault: [transparent, transparent],
266
- colorBgSelectOptionDefaultHover: [slate.slate4, slateDark.slate4],
267
- colorBgSelectOptionSelected: [indigo.indigo4, indigoDark.indigo4],
268
- colorBgSelectOptionSelectedHover: [indigo.indigo6, indigoDark.indigo6],
269
- colorBgSelectOptionDisabled: [transparent, transparent],
270
- colorBgSelectOptionSelectedDisabled: [indigo.indigo5, indigoDark.indigo5],
271
- opacitySelectOptionDisabled: [`${opacity.opacity40}`, `${opacity.opacity40}`],
265
+ colorBgListItemGeneral: [transparent, transparent],
266
+ colorBgListItemGeneralHover: [slate.slate3, slateDark.slate4],
267
+ colorBgListItemGeneralFocus: [slate.slate4, slateDark.slate6],
268
+ colorBgListItemGeneralSelected: [indigo.indigo3, indigoDark.indigo4],
269
+ colorBgListItemGeneralSelectedHover: [indigo.indigo4, indigoDark.indigo6],
270
+ colorBgListItemGeneralSelectedFocus: [indigo.indigo4, indigoDark.indigo6],
271
+ colorBgListItemGeneralDisabled: [transparent, transparent],
272
+ colorTextListItemGeneralDisabled: [slate.slate9, slateDark.slate9],
273
+ colorBgListItemGeneralSelectedDisabled: [indigo.indigo5, indigoDark.indigo5],
274
+ opacityListItemGeneralDisabled: [`${opacity.opacity40}`, `${opacity.opacity40}`],
272
275
 
273
276
  // Search Items
274
277
  colorBgSearchItemHover: [slate.slate4, slateDark.slate4],
@@ -308,13 +311,21 @@ export const themeColors = {
308
311
  // Selected Entity Box State
309
312
  colorBgEntityBoxSelected: [indigo.indigo2, indigoDark.indigo3],
310
313
  shadowStrokeEntityBoxSelected: [
311
- `0 0 0 1px ${indigo.indigo9}, 0 0 0 3px ${getOpacities(indigo.indigo9).opacity40}`,
314
+ `0 0 0 1px ${getOpacities(indigo.indigo9).opacity40}, 0 0 0 3px ${getOpacities(indigo.indigo9).opacity40}`,
312
315
  `0 0 0 1px ${indigoDark.indigo9}, 0 0 0 3px ${getOpacities(indigoDark.indigo9).opacity40}`,
313
316
  ],
314
317
  // :hover
315
318
  colorBgEntityBoxSelectedHover: [indigo.indigo3, indigoDark.indigo3],
319
+ shadowStrokeEntityBoxSelectedHover: [
320
+ `0 0 0 1px ${getOpacities(indigo.indigo9).opacity60}, 0 0 0 3px ${getOpacities(indigo.indigo9).opacity40}`,
321
+ `0 0 0 1px ${indigoDark.indigo9}, 0 0 0 3px ${getOpacities(indigoDark.indigo9).opacity40}`,
322
+ ],
316
323
  //::drag
317
324
  colorBgEntityBoxSelectedDrag: [indigo.indigo3, indigoDark.indigo3],
325
+ shadowStrokeEntityBoxSelectedDrag: [
326
+ `0 0 0 1px ${getOpacities(indigo.indigo9).opacity40}, 0 0 0 3px ${getOpacities(indigo.indigo9).opacity40}`,
327
+ `0 0 0 1px ${indigoDark.indigo9}, 0 0 0 3px ${getOpacities(indigoDark.indigo9).opacity40}`,
328
+ ],
318
329
  // Disabled Entity Box State (done)
319
330
  opacityEntityBoxDisabled: [`${opacity.opacity65}`, `${opacity.opacity65}`],
320
331
  // :hover
@@ -337,6 +348,11 @@ export const themeColors = {
337
348
  `0 0 0 1px ${getOpacities(slateDark.slate2).opacity10}, 0 2px 4px -4px ${getOpacities(slateDark.slate2).opacity20}`,
338
349
  ],
339
350
 
351
+ colorBgMenuHeaderAvatar: [whiteA.whiteA0, slateDark.slate2],
352
+ shadowMenuHeaderAvatar: [
353
+ `0px 1px 4px ${getOpacities(slate.slate11).opacity10}, 0 0 0 1px ${getOpacities(slate.slate5).opacity50}`,
354
+ `0 0 0 1px ${getOpacities(slateDark.slate9).opacity20}`,
355
+ ],
340
356
  // Main Menu Items Styles and States
341
357
  // Dragged
342
358
  opacityMenuItemDragged: [`${opacity.opacity40}`, `${opacity.opacity40}`],
@@ -354,6 +370,8 @@ export const themeColors = {
354
370
  colorBgMenuItemSelectedHover: [indigo.indigo6, indigoDark.indigo6],
355
371
  // :focus, :focus:hover
356
372
  colorBgMenuItemSelectedFocused: [indigo.indigo6, indigoDark.indigo6],
373
+ colorBgFieldEditorContainer: [slate.slate2, slateDark.slate3],
374
+ colorBgFieldEditorLinkEqualSign: [slate.slate6, slateDark.slate2],
357
375
  allowedDropColor: [getOpacities(slate.slate3).opacity80, getOpacities(slateDark.slate3).opacity80],
358
376
  relationViewBgColor: [slate.slate2, slateDark.slate3],
359
377
  unitBg: [slate.slate3, slateDark.slate6],
@@ -396,10 +414,10 @@ export const themeColors = {
396
414
  progressIconFill: [getOpacities(slate.slate12).opacity80, getOpacities(slateDark.slate12).opacity80],
397
415
  progressIconDoneBg: [getOpacities(slate.slate12).opacity80, getOpacities(slateDark.slate12).opacity90],
398
416
  progressIconDoneFill: [getOpacities(slate.slate1).opacity95, getOpacities(slateDark.slate1).opacity80],
399
- instrumentsMenuBg: [getOpacities(whiteA.whiteA0).opacity85, getOpacities(slateDark.slate4).opacity95],
417
+ instrumentsMenuBg: [getOpacities(whiteA.whiteA0).opacity95, getOpacities(slateDark.slate4).opacity95],
400
418
  instrumentsMenuShadow: [
401
- `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 2px 4px -4px ${getOpacities(slate.slate10).opacity20}`,
402
- `0px 2px 8px ${getOpacities(slate.slate2).opacity95}`,
419
+ `0 0 0 1px ${getOpacities(slate.slate10).opacity10}, 0 2px 8px -6px ${getOpacities(slate.slate10).opacity30}`,
420
+ `0 0 0 1px ${getOpacities(slateDark.slate1).opacity10}, 0 2px 8px -6px ${getOpacities(slateDark.slate1).opacity40}`,
403
421
  ],
404
422
  selectedColorBorder: [getOpacities(slate.slate6).opacity50, getOpacities(slate.slate6).opacity20],
405
423
  formBg: [slate.slate2, slateDark.slate2],
@@ -411,9 +429,9 @@ export const themeColors = {
411
429
  filterGroup1Bg: [slate.slate2, slateDark.slate6],
412
430
  filterGroup2Bg: [slate.slate3, slateDark.slate7],
413
431
  filterGroupBorder: [blackA.blackA3, whiteA.whiteA3],
414
- colorBgNotificationHover: [slate.slate4, slateDark.slate4],
415
- colorBgNotificationSelected: [indigo.indigo4, indigoDark.indigo4],
416
- colorBgNotificationSelectedHover: [indigo.indigo6, indigoDark.indigo6],
432
+ colorBgNotificationHover: [slate.slate3, slateDark.slate4],
433
+ colorBgNotificationSelected: [indigo.indigo3, indigoDark.indigo4],
434
+ colorBgNotificationSelectedHover: [indigo.indigo4, indigoDark.indigo6],
417
435
  disabledInversedTextColor: [shades.opacity25, lights.opacity25],
418
436
  danger: [red.red9, redDark.red10],
419
437
  active: [red.red9, redDark.red10],
@@ -436,7 +454,7 @@ export const themeColors = {
436
454
  richTextTableBorder: [blackA.blackA5, whiteA.whiteA7],
437
455
  gridHeaderBgColor: [slate.slate2, slateDark.slate3],
438
456
  gridHeaderHoverBgColor: [slate.slate3, slateDark.slate4],
439
- gridHeaderTextColor: [slate.slate9, slateDark.slate10],
457
+ gridHeaderTextColor: [slate.slate10, slateDark.slate11],
440
458
  gridCellBgColor: [whiteA.whiteA0, slateDark.slate2],
441
459
  gridCellBorderColor: [slate.slate5, slateDark.slate6],
442
460
  gridPinnedCellBorderColor: [slate.slate8, slateDark.slate8],
@@ -448,7 +466,7 @@ export const themeColors = {
448
466
  gridDisabledSelectedCellBgColor: [indigo.indigo4, indigoDark.indigo5],
449
467
  gridActiveCellBorderColor: [indigo.indigo8, indigoDark.indigo9],
450
468
  colorBgReactionsDefault: [slate.slate3, slateDark.slate6],
451
- colorBgReactionsHover: [slate.slate1, slateDark.slate2],
469
+ colorBgReactionsHover: [whiteA.whiteA0, slateDark.slate2],
452
470
  colorBorderReactionsHover: [slate.slate8, slateDark.slate9],
453
471
  colorBgReactionsSelectedDefault: [indigo.indigo3, indigoDark.indigo8],
454
472
  colorBorderReactionsSelectedDefault: [indigo.indigo8, indigoDark.indigo8],
@@ -456,6 +474,7 @@ export const themeColors = {
456
474
  colorBorderReactionsSelectedHover: [indigo.indigo9, indigo.indigo10],
457
475
  colorTextReactionsSelected: [indigo.indigo10, slateDark.slate12],
458
476
  colorBgToastDefault: [slate.slate1, slateDark.slate1],
477
+ colorBgDbTabHover: [slate.slate3, slateDark.slate4],
459
478
  } as const;
460
479
 
461
480
  type ThemeDefs = typeof themeColors;
@@ -610,10 +629,24 @@ export const getLinkedHighlightBackgroundColor = _.memoize(
610
629
  (themeMode, color) => `${themeMode}-${color}`
611
630
  );
612
631
 
632
+ export const getLinkedHighlightDecorationBackgroundColor = _.memoize(
633
+ (themeColors: ThemeColors, color: string): string => {
634
+ switch (themeColors.mode) {
635
+ case "dark":
636
+ return makeChromaColor(color).alpha(0.9).luminance(0.5).darken(0.2).css();
637
+ case "light":
638
+ return makeChromaColor(color).alpha(0.9).luminance(0.5).css();
639
+ default:
640
+ return makeChromaColor(color).alpha(0.9).luminance(0.5).css();
641
+ }
642
+ },
643
+ (themeMode, color) => `${themeMode}-${color}`
644
+ );
645
+
613
646
  export const getEnumBackgroundColor = _.memoize(
614
647
  (mode: ThemeMode, color: string) => {
615
648
  return getThemeValue(mode, {
616
- light: a11yColor(getOpacities(color).opacity20, lightColors.whiteColor, 1),
649
+ light: a11yColor(getOpacities(color).opacity15, lightColors.whiteColor, 1),
617
650
  dark: a11yColor(getOpacities(color).opacity30, darkColors.menuBg, 1.3),
618
651
  });
619
652
  },
@@ -670,24 +703,42 @@ export const colors = {
670
703
  } as const;
671
704
 
672
705
  export const space = {
673
- xxs: 2, // Not recommended
674
- xs: 4,
675
- s: 6,
676
- m: 8,
677
- l: 12,
678
- xl: 24,
679
- xxl: 48, // Not recommended
706
+ spaceAuto: "auto",
707
+ s0: 0,
708
+ s1: 1,
709
+ s2: 2,
710
+ s4: 4,
711
+ s6: 6,
712
+ s8: 8,
713
+ s10: 10,
714
+ s12: 12,
715
+ s14: 14,
716
+ s16: 16,
717
+ s20: 20,
718
+ s24: 24,
719
+ s28: 28,
720
+ s32: 32,
721
+ s36: 36,
722
+ s40: 40,
723
+ s44: 44,
724
+ s48: 48,
725
+ s56: 56,
726
+ s64: 64,
727
+ s80: 80,
728
+ s96: 96,
729
+ s112: 112,
730
+ s128: 128,
680
731
  } as const;
681
732
  /** Token for nested items spacing in nested trees */
682
- export const spaceNestedTreeLevel = 40;
733
+ export const spaceNestedTreeLevel = 28;
683
734
  export const spaceNestedTreeInterval = 0;
684
735
  export const layout = {
685
- logoSize: 24,
736
+ logoSize: 16,
686
737
  menuDefaultWidth: 243,
687
- menuMinWidth: 46, //TODO: make dependency to itemHeight
738
+ menuMinWidth: 47, //TODO: make dependency to itemHeight
688
739
  menuMaxWidth: 480,
689
740
  menuItemMinWidth: 80,
690
- menuGroupHeaderIndent: 40, // I'm ok
741
+ menuGroupHeaderIndent: 28, // I'm ok
691
742
  menuItemLevelIndent: 24,
692
743
  listItemHeight: 38,
693
744
  itemHeight: 36,
@@ -695,7 +746,7 @@ export const layout = {
695
746
  groupTitleHeight: 30,
696
747
  menuItemHeight: 32,
697
748
  newMenuItemHeight: 30, // I'm ok
698
- viewHeaderHeight: space.l * 7,
749
+ viewHeaderHeight: space.s12 * 7,
699
750
  viewHeaderCompactHeight: 52,
700
751
  columnMinWidth: 240,
701
752
  columnWidths: {compact: 200, default: 240, list: 280, full: 320},
@@ -703,7 +754,7 @@ export const layout = {
703
754
  typeEditorWidth: "30vw",
704
755
  typeEditorMinWidth: 480,
705
756
  viewSetupWidth: "30vw",
706
- viewSetupMinWidth: 525,
757
+ viewSetupMinWidth: 380,
707
758
  inputHeight: 36, //TODO: merge input and item height?
708
759
  timelineLineHeight: 46,
709
760
  timelineGroupPadding: 6,
@@ -721,8 +772,6 @@ export const layout = {
721
772
  unitHeight: 18,
722
773
  } as const;
723
774
 
724
- export const radius = 3;
725
-
726
775
  export const border = {
727
776
  radius0: 0,
728
777
  radius1: 1,
@@ -947,7 +996,7 @@ export const textStyles = {
947
996
  lineHeight: lineHeight.regular,
948
997
  fontWeight: fontWeight.regular,
949
998
  color: themeVars.textColor,
950
- borderRadius: radius,
999
+ borderRadius: border.radius6,
951
1000
  },
952
1001
  important: {
953
1002
  fontFamily,
@@ -956,6 +1005,6 @@ export const textStyles = {
956
1005
  fontWeight: fontWeight.regular,
957
1006
  color: themeVars.textColor,
958
1007
  border: `1px solid ${themeVars.active}`,
959
- borderRadius: radius,
1008
+ borderRadius: border.radius6,
960
1009
  },
961
1010
  } as const;
@@ -1,8 +1,8 @@
1
1
  import {css, cx} from "@linaria/core";
2
2
  import {useState} from "react";
3
- import {IconButton} from "../Button/icon-button";
4
- import {CollapsibleContent, CollapsibleRoot, CollapsibleTrigger} from "../Collapsible";
5
- import {ColorPicker} from "../ColorPicker";
3
+ import {IconButton} from "../button/icon-button";
4
+ import {CollapsibleContent, CollapsibleRoot, CollapsibleTrigger} from "../collapsible";
5
+ import {ColorPicker} from "../color-picker";
6
6
  import {useThemeMode} from "../theme-provider";
7
7
  import {getIconColor, space} from "../design-system";
8
8
  import ColorCoding from "../icons/react/ColorCoding";
@@ -14,7 +14,7 @@ import {EmojiPickerSearch} from "./primitives/search";
14
14
  import {Tooltip} from "../tooltip";
15
15
 
16
16
  const colorPickerWrapperCss = css`
17
- padding-top: ${space.l}px;
17
+ padding-top: ${space.s12}px;
18
18
  `;
19
19
 
20
20
  const disableScrollCss = css`
@@ -61,10 +61,10 @@ export const EmojiPicker: React.FC<EmojiPickerProps> = ({
61
61
  className={css`
62
62
  position: absolute;
63
63
  top: 4px;
64
- right: ${space.l}px;
64
+ right: ${space.s12}px;
65
65
  `}
66
66
  style={{
67
- right: space.l + measureScrollbar(),
67
+ right: space.s12 + measureScrollbar(),
68
68
  }}
69
69
  >
70
70
  <EmojiPickerSkinTone />
@@ -86,7 +86,7 @@ export const IconEmojiPicker: React.FC<IconEmojiPickerProps> = ({
86
86
  onReset ? (
87
87
  <div
88
88
  className={css`
89
- padding-right: ${space.l}px;
89
+ padding-right: ${space.s12}px;
90
90
  `}
91
91
  >
92
92
  <Button Icon={EmojiDelete} size={":button-size/small"} onClick={onReset}>
@@ -2,7 +2,7 @@ import {Category, EmojiItem} from "@fibery/emoji-data";
2
2
  import {css} from "@linaria/core";
3
3
  import {memo} from "react";
4
4
  import {useInView} from "react-intersection-observer";
5
- import {IconButton} from "../../Button/icon-button";
5
+ import {IconButton} from "../../button/icon-button";
6
6
  import {space, textStyles, themeVars} from "../../design-system";
7
7
  import {Settings} from "../../icons/react";
8
8
  import {useEmojiDataStoreSelector} from "../stores/emoji-data-store";
@@ -18,13 +18,13 @@ const categoryLabelCss = css`
18
18
  ${textStyles.heading6}
19
19
  color: ${themeVars.accentTextColor};
20
20
  background-color: ${themeVars.actionMenuBg};
21
- padding: ${space.l}px ${space.s}px ${space.xs}px ${space.s}px;
21
+ padding: ${space.s12}px ${space.s6}px ${space.s4}px ${space.s6}px;
22
22
  position: sticky;
23
23
  top: 0;
24
24
 
25
25
  display: flex;
26
26
  align-items: center;
27
- gap: ${space.xs}px;
27
+ gap: ${space.s4}px;
28
28
 
29
29
  z-index: 1;
30
30
  `;
@@ -1,5 +1,5 @@
1
1
  import {FC} from "react";
2
- import {EmojiItem, EmojiSkin} from "@fibery/emoji-data";
2
+ import {EmojiItem, EmojiSkin, NativeEmoji} from "@fibery/emoji-data";
3
3
  import {css, cx} from "@linaria/core";
4
4
  import {themeVars} from "../../design-system";
5
5
  import {useEmojiDataStoreSelector} from "../stores/emoji-data-store";
@@ -22,11 +22,13 @@ const emojiInlineImgCss = css`
22
22
  height: 1em;
23
23
  vertical-align: -0.1em;
24
24
  object-fit: contain;
25
+ overflow: hidden;
25
26
  `;
26
27
  const emojiSizedImgCss = css`
27
28
  width: 100%;
28
29
  height: 100%;
29
30
  object-fit: contain;
31
+ overflow: hidden;
30
32
  `;
31
33
 
32
34
  // This is needed to keep text-selection working for image based emojis Details: https://the.fibery.io/SoftDev/bug/Improve-selection-text-with-emojis-8963
@@ -43,9 +45,25 @@ export type EmojiProps = {
43
45
  /** render emoji as native unicode if possible */
44
46
  native?: boolean;
45
47
  fallback?: "shortcode" | "hidden";
48
+ showTitle?: boolean;
46
49
  };
47
50
 
48
- export const Emoji: FC<EmojiProps> = ({emoji: idOrColons, size, version = 14, fallback = "hidden", skin, native}) => {
51
+ function getTitle(emoji: EmojiItem) {
52
+ if ((emoji as NativeEmoji).native) {
53
+ return emoji.colons;
54
+ }
55
+ return `:${emoji.name}:`;
56
+ }
57
+
58
+ export const Emoji: FC<EmojiProps> = ({
59
+ emoji: idOrColons,
60
+ size,
61
+ version = 14,
62
+ fallback = "hidden",
63
+ skin,
64
+ native,
65
+ showTitle = false,
66
+ }) => {
49
67
  const emoji = useEmojiDataStoreSelector((store) => store.get(idOrColons, {skin}));
50
68
 
51
69
  if (!emoji) {
@@ -85,7 +103,12 @@ export const Emoji: FC<EmojiProps> = ({emoji: idOrColons, size, version = 14, fa
85
103
  const style = size ? {fontSize: size, width: size, height: size} : {};
86
104
 
87
105
  return (
88
- <span style={style} className={cx(emojiWrapperCss, size && emojiWrapperSizedCss)} aria-label={emoji.name}>
106
+ <span
107
+ style={style}
108
+ title={showTitle ? getTitle(emoji) : undefined}
109
+ className={cx(emojiWrapperCss, size && emojiWrapperSizedCss)}
110
+ aria-label={emoji.name}
111
+ >
89
112
  {emojiNode}
90
113
  </span>
91
114
  );
@@ -4,7 +4,7 @@ import {space} from "../../design-system";
4
4
  const footerCss = css`
5
5
  position: relative;
6
6
  border-top: 1px solid var(--fibery-color-separatorColor);
7
- padding: ${space.m}px ${space.l}px;
7
+ padding: ${space.s8}px ${space.s12}px;
8
8
  min-height: 40px;
9
9
  `;
10
10
 
@@ -3,7 +3,7 @@ import {space} from "../../design-system";
3
3
  import {contentHorizontalPadding} from "./layout";
4
4
 
5
5
  const pickerHeader = css`
6
- padding: ${space.s}px ${contentHorizontalPadding}px;
6
+ padding: ${space.s6}px ${contentHorizontalPadding}px;
7
7
  position: relative;
8
8
  `;
9
9
  export const EmojiPickerHeader: React.FC<React.PropsWithChildren> = ({children}) => {
@@ -1,5 +1,5 @@
1
1
  import {space} from "../../design-system";
2
2
 
3
- export const emojiPadding = space.s;
3
+ export const emojiPadding = space.s6;
4
4
 
5
- export const contentHorizontalPadding = space.l;
5
+ export const contentHorizontalPadding = space.s12;
@@ -2,7 +2,7 @@ import {EmojiItem} from "@fibery/emoji-data";
2
2
  import {useComposedRefs} from "@fibery/react/src/use-composed-refs";
3
3
  import {css, cx} from "@linaria/core";
4
4
  import {startTransition, useId, useRef} from "react";
5
- import {IconButton} from "../../Button/icon-button";
5
+ import {IconButton} from "../../button/icon-button";
6
6
  import {border, space, textStyles, themeVars} from "../../design-system";
7
7
  import Close from "../../icons/react/Close";
8
8
  import Search from "../../icons/react/Search";
@@ -22,8 +22,8 @@ const searchCss = css`
22
22
 
23
23
  display: flex;
24
24
  align-items: center;
25
- padding-left: ${space.l}px;
26
- gap: ${space.xxs}px;
25
+ padding-left: ${space.s12}px;
26
+ gap: ${space.s2}px;
27
27
 
28
28
  /* For screenreaders only, via https://stackoverflow.com/a/19758620 */
29
29
  & .sr-only {
@@ -56,13 +56,13 @@ const searchInputCss = css`
56
56
  `;
57
57
 
58
58
  const searchIconCss = css`
59
- padding: ${space.xxs}px;
59
+ padding: ${space.s2}px;
60
60
  `;
61
61
 
62
62
  const extraActionSlotCss = css`
63
63
  background-color: var(--fibery-emoji-hover-color, ${themeVars.inputCopyBgColor});
64
- border-top-right-radius: ${space.s}px;
65
- border-bottom-right-radius: ${space.s}px;
64
+ border-top-right-radius: ${space.s6}px;
65
+ border-bottom-right-radius: ${space.s6}px;
66
66
  `;
67
67
 
68
68
  export type EmojiPickerSearchProps = {
@@ -5,7 +5,7 @@ import {textStyles, themeVars} from "../../design-system";
5
5
  import {Emoji} from "./emoji";
6
6
  import {useEmojiPickerCtx, useEmojiPickerI18N} from "./root";
7
7
  import {useEmojiSkin, useSetEmojiSkin} from "./skin-provider";
8
- import {IconButton} from "../../Button/icon-button";
8
+ import {IconButton} from "../../button/icon-button";
9
9
 
10
10
  const skinToneWrapperCss = css`
11
11
  display: flex;
@@ -1,16 +1,16 @@
1
1
  import {css} from "@linaria/core";
2
2
  import {layout, border, space, textStyles, themeVars} from "./design-system";
3
- import {Button} from "./Button/button";
3
+ import {Button} from "./button/button";
4
4
  import CloseIcon from "./icons/react/Close";
5
5
  import {useTheme} from "./theme-provider";
6
6
 
7
7
  const errorAlert = css`
8
8
  background-color: ${themeVars.errorBgColor};
9
- padding: ${space.m}px ${space.l}px;
9
+ padding: ${space.s8}px ${space.s12}px;
10
10
  min-height: ${layout.itemHeight}px;
11
11
  border-radius: ${border.radius6}px;
12
12
  display: flex;
13
- gap: ${space.s}px;
13
+ gap: ${space.s6}px;
14
14
  align-items: center;
15
15
  `;
16
16
 
@@ -31,7 +31,7 @@ export function ErrorAlert({
31
31
  onClose,
32
32
  }: {
33
33
  message: string;
34
- description?: string;
34
+ description?: React.ReactNode;
35
35
  closable?: boolean;
36
36
  onClose?: () => void;
37
37
  }): JSX.Element {
@@ -5,9 +5,9 @@ import {space, border, themeVars} from "./design-system";
5
5
 
6
6
  const loaderStyle = css`
7
7
  border-radius: ${border.radius6}px;
8
- padding-top: ${space.m}px;
9
- padding-bottom: ${space.m}px;
10
- padding-left: ${space.l}px;
8
+ padding-top: ${space.s8}px;
9
+ padding-bottom: ${space.s8}px;
10
+ padding-left: ${space.s12}px;
11
11
  padding-right: 0;
12
12
  box-sizing: border-box;
13
13
  border: none;