@fibery/ui-kit 1.0.6 → 1.2.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 +5 -3
- package/src/Button.d.ts +3 -1
- package/src/Button.js +4 -6
- package/src/Pallete.ts +40 -16
- package/src/Select/components.tsx +5 -9
- package/src/Select/styles.ts +4 -4
- package/src/ThemeProvider.tsx +83 -53
- package/src/antd/styles.ts +3 -3
- package/src/create-inline-theme.ts +8 -1
- package/src/designSystem.ts +111 -169
- package/src/icons/ast/AppStoreOneColor.ts +1 -1
- package/src/icons/ast/Email.ts +8 -0
- package/src/icons/ast/SidebarFields.ts +8 -0
- package/src/icons/ast/SidebarFieldsOpened.ts +8 -0
- package/src/icons/ast/SlackIcon.ts +8 -0
- package/src/icons/ast/SlideMenu.ts +8 -0
- package/src/icons/ast/SlideMenuOpened.ts +8 -0
- package/src/icons/ast/index.tsx +6 -0
- package/src/icons/react/Email.tsx +12 -0
- package/src/icons/react/SidebarFields.tsx +12 -0
- package/src/icons/react/SidebarFieldsOpened.tsx +12 -0
- package/src/icons/react/SlackIcon.tsx +12 -0
- package/src/icons/react/SlideMenu.tsx +12 -0
- package/src/icons/react/SlideMenuOpened.tsx +12 -0
- package/src/icons/react/index.tsx +6 -0
- package/src/loading-sausage.tsx +5 -5
- package/src/theme-settings.ts +67 -3
- package/src/theme-styles.ts +18 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// This icon file is generated automatically.
|
|
2
|
+
|
|
3
|
+
import SlackIconSvg from '../ast/SlackIcon';
|
|
4
|
+
import { Icon } from '../Icon';
|
|
5
|
+
import { IconBaseProps } from '../types';
|
|
6
|
+
|
|
7
|
+
const SlackIcon = (
|
|
8
|
+
props: IconBaseProps,
|
|
9
|
+
): JSX.Element => <Icon {...props} icon={SlackIconSvg} />;
|
|
10
|
+
|
|
11
|
+
SlackIcon.displayName = 'SlackIcon';
|
|
12
|
+
export default SlackIcon;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// This icon file is generated automatically.
|
|
2
|
+
|
|
3
|
+
import SlideMenuSvg from '../ast/SlideMenu';
|
|
4
|
+
import { Icon } from '../Icon';
|
|
5
|
+
import { IconBaseProps } from '../types';
|
|
6
|
+
|
|
7
|
+
const SlideMenu = (
|
|
8
|
+
props: IconBaseProps,
|
|
9
|
+
): JSX.Element => <Icon {...props} icon={SlideMenuSvg} />;
|
|
10
|
+
|
|
11
|
+
SlideMenu.displayName = 'SlideMenu';
|
|
12
|
+
export default SlideMenu;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// This icon file is generated automatically.
|
|
2
|
+
|
|
3
|
+
import SlideMenuOpenedSvg from '../ast/SlideMenuOpened';
|
|
4
|
+
import { Icon } from '../Icon';
|
|
5
|
+
import { IconBaseProps } from '../types';
|
|
6
|
+
|
|
7
|
+
const SlideMenuOpened = (
|
|
8
|
+
props: IconBaseProps,
|
|
9
|
+
): JSX.Element => <Icon {...props} icon={SlideMenuOpenedSvg} />;
|
|
10
|
+
|
|
11
|
+
SlideMenuOpened.displayName = 'SlideMenuOpened';
|
|
12
|
+
export default SlideMenuOpened;
|
|
@@ -40,6 +40,7 @@ export { default as DoubleArrowLeft } from './DoubleArrowLeft';
|
|
|
40
40
|
export { default as DoubleArrowRight } from './DoubleArrowRight';
|
|
41
41
|
export { default as DragBlockHandle } from './DragBlockHandle';
|
|
42
42
|
export { default as DragHandle } from './DragHandle';
|
|
43
|
+
export { default as Email } from './Email';
|
|
43
44
|
export { default as ExtensionAssignments } from './ExtensionAssignments';
|
|
44
45
|
export { default as ExtensionAvatar } from './ExtensionAvatar';
|
|
45
46
|
export { default as ExtensionComments } from './ExtensionComments';
|
|
@@ -131,8 +132,13 @@ export { default as SelfReferenceOn } from './SelfReferenceOn';
|
|
|
131
132
|
export { default as Settings } from './Settings';
|
|
132
133
|
export { default as Share } from './Share';
|
|
133
134
|
export { default as Shared } from './Shared';
|
|
135
|
+
export { default as SidebarFieldsOpened } from './SidebarFieldsOpened';
|
|
136
|
+
export { default as SidebarFields } from './SidebarFields';
|
|
134
137
|
export { default as Sidebar } from './Sidebar';
|
|
138
|
+
export { default as SlackIcon } from './SlackIcon';
|
|
135
139
|
export { default as Slack } from './Slack';
|
|
140
|
+
export { default as SlideMenuOpened } from './SlideMenuOpened';
|
|
141
|
+
export { default as SlideMenu } from './SlideMenu';
|
|
136
142
|
export { default as SmartFolder } from './SmartFolder';
|
|
137
143
|
export { default as SortOnBottom } from './SortOnBottom';
|
|
138
144
|
export { default as SortOnTop } from './SortOnTop';
|
package/src/loading-sausage.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import {css} from "@linaria/core";
|
|
|
2
2
|
import {styled} from "@linaria/react";
|
|
3
3
|
import cn from "classnames";
|
|
4
4
|
import _ from "lodash";
|
|
5
|
-
import {
|
|
5
|
+
import {memo, useRef} from "react";
|
|
6
6
|
import {space, themeVars} from "./designSystem";
|
|
7
7
|
|
|
8
8
|
const getRandomWithSeed = _.memoize((seed: number) => {
|
|
@@ -101,7 +101,7 @@ const Container = styled.div<{height: number}>`
|
|
|
101
101
|
}
|
|
102
102
|
`;
|
|
103
103
|
|
|
104
|
-
type
|
|
104
|
+
export type LoadingSausageProps = {
|
|
105
105
|
minWidth?: number;
|
|
106
106
|
maxWidth?: number;
|
|
107
107
|
height?: number;
|
|
@@ -119,7 +119,7 @@ export const LoadingSausage = memo(function LoadingSausage({
|
|
|
119
119
|
inverted = false,
|
|
120
120
|
margins = true,
|
|
121
121
|
animateAppearance = false,
|
|
122
|
-
}:
|
|
122
|
+
}: LoadingSausageProps): JSX.Element {
|
|
123
123
|
const widthRef = useRef(getRandomInt(minWidth, maxWidth, index));
|
|
124
124
|
return (
|
|
125
125
|
<Container
|
|
@@ -139,8 +139,8 @@ type SausageListProps = {
|
|
|
139
139
|
amount?: number;
|
|
140
140
|
minAmount?: number;
|
|
141
141
|
maxAmount?: number;
|
|
142
|
-
WrapperComponent?: ({children}: {children: JSX.Element}) => JSX.Element;
|
|
143
|
-
} & Omit<
|
|
142
|
+
WrapperComponent?: ({children}: {children: JSX.Element}) => JSX.Element | null;
|
|
143
|
+
} & Omit<LoadingSausageProps, "index">;
|
|
144
144
|
export const LoadingSausageList = memo<SausageListProps>(function LoadingSausageList({
|
|
145
145
|
amount,
|
|
146
146
|
minAmount = 1,
|
package/src/theme-settings.ts
CHANGED
|
@@ -2,12 +2,15 @@ import {getMediaQueryList, subscribeOnChange as subscribeOnMediaQueryChange} fro
|
|
|
2
2
|
|
|
3
3
|
const listenersThemeMode = new Map();
|
|
4
4
|
const listenersThemePreference = new Map();
|
|
5
|
+
const listenersThemeMenuPreference = new Map();
|
|
5
6
|
|
|
6
7
|
const themePreferenceKey = "theme-preference";
|
|
8
|
+
const themeMenuPreferenceKey = "theme-menu-preference";
|
|
7
9
|
|
|
8
10
|
export type ThemePreference = "dark" | "light" | "auto";
|
|
11
|
+
export type ThemeMenuPreference = "dark" | "auto";
|
|
9
12
|
|
|
10
|
-
export type ThemeMode = "dark" | "light" | "
|
|
13
|
+
export type ThemeMode = "dark" | "light" | "light2";
|
|
11
14
|
|
|
12
15
|
export function getThemePreference(): ThemePreference {
|
|
13
16
|
try {
|
|
@@ -19,6 +22,18 @@ export function getThemePreference(): ThemePreference {
|
|
|
19
22
|
} else if (item === "light") {
|
|
20
23
|
return "light";
|
|
21
24
|
}
|
|
25
|
+
} catch (e) {
|
|
26
|
+
return "light";
|
|
27
|
+
}
|
|
28
|
+
return "light";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function getThemeMenuPreference(): ThemeMenuPreference {
|
|
32
|
+
try {
|
|
33
|
+
const item = localStorage.getItem(themeMenuPreferenceKey);
|
|
34
|
+
if (item === "dark") {
|
|
35
|
+
return "dark";
|
|
36
|
+
}
|
|
22
37
|
} catch (e) {
|
|
23
38
|
return "auto";
|
|
24
39
|
}
|
|
@@ -33,15 +48,42 @@ function getDarkMediaQuery() {
|
|
|
33
48
|
|
|
34
49
|
export function getThemeMode(): ThemeMode {
|
|
35
50
|
const preference = getThemePreference();
|
|
51
|
+
const menuPreference = getThemeMenuPreference();
|
|
36
52
|
|
|
37
53
|
if (preference === "auto") {
|
|
38
|
-
|
|
54
|
+
const matches = getDarkMediaQuery().matches;
|
|
55
|
+
if (matches) {
|
|
56
|
+
return "dark";
|
|
57
|
+
}
|
|
58
|
+
if (menuPreference === "dark") {
|
|
59
|
+
return "light2";
|
|
60
|
+
}
|
|
61
|
+
return "light";
|
|
39
62
|
} else if (preference === "dark") {
|
|
40
63
|
return "dark";
|
|
41
64
|
}
|
|
65
|
+
if (menuPreference === "dark") {
|
|
66
|
+
return "light2";
|
|
67
|
+
}
|
|
42
68
|
return "light";
|
|
43
69
|
}
|
|
44
70
|
|
|
71
|
+
export function setThemeMenuPreference(menuPreference: ThemeMenuPreference) {
|
|
72
|
+
try {
|
|
73
|
+
if (getThemeMenuPreference() !== menuPreference) {
|
|
74
|
+
localStorage.setItem(themeMenuPreferenceKey, menuPreference);
|
|
75
|
+
listenersThemeMode.forEach((cb) => {
|
|
76
|
+
cb(getThemeMode());
|
|
77
|
+
});
|
|
78
|
+
listenersThemeMenuPreference.forEach((cb) => {
|
|
79
|
+
cb(menuPreference);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
} catch (e) {
|
|
83
|
+
// skip error
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
45
87
|
export function setThemePreference(preference: ThemePreference) {
|
|
46
88
|
try {
|
|
47
89
|
if (getThemePreference() !== preference) {
|
|
@@ -58,6 +100,25 @@ export function setThemePreference(preference: ThemePreference) {
|
|
|
58
100
|
}
|
|
59
101
|
}
|
|
60
102
|
|
|
103
|
+
export function subscribeOnThemeMenuPreferenceChange(
|
|
104
|
+
cb: (themeMenuPreference: ThemeMenuPreference) => void
|
|
105
|
+
): () => void {
|
|
106
|
+
listenersThemeMenuPreference.set(cb, cb);
|
|
107
|
+
let currentPref = getThemeMenuPreference();
|
|
108
|
+
const storageListener = () => {
|
|
109
|
+
const newMenuPref = getThemeMenuPreference();
|
|
110
|
+
if (currentPref !== newMenuPref) {
|
|
111
|
+
currentPref = newMenuPref;
|
|
112
|
+
cb(newMenuPref);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
window.addEventListener("storage", storageListener);
|
|
116
|
+
return () => {
|
|
117
|
+
listenersThemeMenuPreference.delete(cb);
|
|
118
|
+
window.removeEventListener("storage", storageListener);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
61
122
|
export function subscribeOnThemePreferenceChange(cb: (themePreference: ThemePreference) => void): () => void {
|
|
62
123
|
listenersThemePreference.set(cb, cb);
|
|
63
124
|
let currentPref = getThemePreference();
|
|
@@ -78,11 +139,14 @@ export function subscribeOnThemePreferenceChange(cb: (themePreference: ThemePref
|
|
|
78
139
|
export function subscribeOnThemeModeChange(cb: (themeMode: ThemeMode) => void): () => void {
|
|
79
140
|
listenersThemeMode.set(cb, cb);
|
|
80
141
|
let currentPref = getThemePreference();
|
|
142
|
+
let currentMenuPref = getThemeMenuPreference();
|
|
81
143
|
const darkMediaQuery = getDarkMediaQuery();
|
|
82
144
|
const storageListener = () => {
|
|
83
145
|
const newPref = getThemePreference();
|
|
84
|
-
|
|
146
|
+
const newMenuPref = getThemeMenuPreference();
|
|
147
|
+
if (currentPref !== newPref || currentMenuPref !== newMenuPref) {
|
|
85
148
|
currentPref = newPref;
|
|
149
|
+
currentMenuPref = newMenuPref;
|
|
86
150
|
cb(getThemeMode());
|
|
87
151
|
}
|
|
88
152
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {css} from "@linaria/core";
|
|
2
|
+
import {createInlineTheme, getThemeColors, colors} from "./designSystem";
|
|
3
|
+
const lightTheme = getThemeColors(colors.brandColors.blue, "light");
|
|
4
|
+
const darkTheme = getThemeColors(colors.brandColors.blue, "dark");
|
|
5
|
+
const light2Theme = getThemeColors(colors.brandColors.blue, "light2");
|
|
6
|
+
export const themeStyles = css`
|
|
7
|
+
:global(html) {
|
|
8
|
+
&:root {
|
|
9
|
+
${createInlineTheme(lightTheme, [])}
|
|
10
|
+
}
|
|
11
|
+
&.dark-theme:root {
|
|
12
|
+
${createInlineTheme(darkTheme, [])}
|
|
13
|
+
}
|
|
14
|
+
&.light-theme-and-dark-menu:root {
|
|
15
|
+
${createInlineTheme(light2Theme, [])}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`;
|