@cometchat/chat-uikit-react-native
Version:
Ready-to-use Chat UI Components for React Native
585 lines (539 loc) • 16.3 kB
text/typescript
import { anyObject } from "../../utils";
type modeType = 'light' | 'dark'
const modes = {
light: 'light',
dark: 'dark',
};
const opacity = {
accent50: {
[modes.light]: 0.04,
[modes.dark]: 0.04,
},
accent100: {
[modes.light]: 0.08,
[modes.dark]: 0.08,
},
accent200: {
[modes.light]: 0.15,
[modes.dark]: 0.14,
},
accent300: {
[modes.light]: 0.24,
[modes.dark]: 0.23,
},
accent400: {
[modes.light]: 0.33,
[modes.dark]: 0.34,
},
accent500: {
[modes.light]: 0.46,
[modes.dark]: 0.46,
},
accent600: {
[modes.light]: 0.58,
[modes.dark]: 0.58,
},
accent700: {
[modes.light]: 0.69,
[modes.dark]: 0.71,
},
accent800: {
[modes.light]: 0.82,
[modes.dark]: 0.84,
},
};
const getAccentOpacity = (colorCode: string, opacity: any) => {
if (colorCode.startsWith('#')) {
return hexToRGBA(colorCode, opacity);
}
return RGBToRGBA(colorCode, opacity);
};
const hexToRGBA = (hex: string, opacity: string) => {
const r = parseInt(hex.slice(1, 3), 16);
const g = parseInt(hex.slice(3, 5), 16);
const b = parseInt(hex.slice(5, 7), 16);
return 'rgba(' + +r + ',' + +g + ',' + +b + ',' + opacity + ')';
};
const RGBToRGBA = (rgb: any, opacity: string) => {
// Choose correct separator
let sep = rgb.indexOf(',') > -1 ? ',' : ' ';
// Turn "rgb(r,g,b)" into [r,g,b]
rgb = rgb.substr(4).split(')')[0].split(sep);
let r = (+rgb[0]).toString(16),
g = (+rgb[1]).toString(16),
b = (+rgb[2]).toString(16);
return 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')';
};
/**
* @class PaletteItem
* @param {String} light
* @param {String} dark
*/
class PaletteItem {
light: string
dark: string
constructor({ light = '', dark = '' }: anyObject) {
this.light = light;
this.dark = dark;
}
}
/**
*
* Palette is a class containing default color styles with diffrent slectors.
* This class returns JSON objects of color styles
* This class also contains the setter methods for these styles.
*
* @version 1.0.0
* @author CometChat
*
* @class Palette
* @param {String} mode
* @param {Object} backgroundColor
* @param {Object} primary
* @param {Object} primary40
* @param {Object} primary150
* @param {Object} primary500
* @param {Object} secondary
* @param {Object} tertiary
* @param {Object} error
* @param {Object} success
* @param {Object} accent
* @param {Object} accent50
* @param {Object} accent100
* @param {Object} accent200
* @param {Object} accent300
* @param {Object} accent400
* @param {Object} accent500
* @param {Object} accent600
* @param {Object} accent700
* @param {Object} accent800
* @param {Object} accent900
*/
class Palette {
mode: string
backgroundColor: PaletteItem
primary: PaletteItem
primary13: PaletteItem
primary40: PaletteItem
primary150: PaletteItem
primary500: PaletteItem
secondary: PaletteItem
tertiary: PaletteItem
error: PaletteItem
success: PaletteItem
accent: PaletteItem
accent50: PaletteItem
accent100: PaletteItem
accent200: PaletteItem
accent300: PaletteItem
accent400: PaletteItem
accent500: PaletteItem
accent600: PaletteItem
accent700: PaletteItem
accent800: PaletteItem
accent900: PaletteItem
constructor({
mode = modes.light,
backgroundColor = new PaletteItem({
[modes.light]: 'rgb(255,255,255)',
[modes.dark]: 'rgb(0,0,0)',
}),
primary = new PaletteItem({
[modes.light]: 'rgb(51, 153, 255)',
[modes.dark]: 'rgb(51, 153, 255)',
}),
primary13 = new PaletteItem({
[modes.light]: 'rgba(51, 153, 255, .13)',
[modes.dark]: 'rgba(51, 153, 255, .13)',
}),
primary40 = new PaletteItem({
[modes.light]: 'rgba(51, 153, 255, .04)',
[modes.dark]: 'rgba(51, 153, 255, .04)',
}),
primary150 = new PaletteItem({
[modes.light]: 'rgba(51, 153, 255, .15)',
[modes.dark]: 'rgba(51, 153, 255, .15)',
}),
primary500 = new PaletteItem({
[modes.light]: 'rgba(51, 153, 255, .5)',
[modes.dark]: 'rgba(51, 153, 255, .5)',
}),
secondary = new PaletteItem({
[modes.light]: 'rgba(248, 248, 248, 0.9)',
[modes.dark]: 'rgba(248, 248, 248, 0.9)',
}),
tertiary = new PaletteItem({
[modes.light]: 'rgb(255, 245, 0)',
[modes.dark]: 'rgb(255, 245, 0)',
}),
error = new PaletteItem({
[modes.light]: 'rgb(255, 59, 48)',
[modes.dark]: 'rgb(255, 59, 48)',
}),
success = new PaletteItem({
[modes.light]: 'rgb(0, 200, 111)',
[modes.dark]: 'rgb(0, 200, 111)',
}),
accent = new PaletteItem({
[modes.light]: 'rgb(20, 20, 20)',
[modes.dark]: 'rgb(255, 255, 255)',
}),
accent50 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.04)',
[modes.dark]: 'rgba(255, 255, 255, 0.04)',
}),
accent100 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.08)',
[modes.dark]: 'rgba(255, 255, 255, 0.08)',
}),
accent200 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.15)',
[modes.dark]: 'rgba(255, 255, 255, 0.14)',
}),
accent300 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.24)',
[modes.dark]: 'rgba(255, 255, 255, 0.23)',
}),
accent400 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.33)',
[modes.dark]: 'rgba(255, 255, 255, 0.34)',
}),
accent500 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.46)',
[modes.dark]: 'rgba(255, 255, 255, 0.46)',
}),
accent600 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.58)',
[modes.dark]: 'rgba(255, 255, 255, 0.58)',
}),
accent700 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.69)',
[modes.dark]: 'rgba(255, 255, 255, 0.71)',
}),
accent800 = new PaletteItem({
[modes.light]: 'rgba(20, 20, 20, 0.82)',
[modes.dark]: 'rgba(255, 255, 255, 0.84)',
}),
accent900 = new PaletteItem({
[modes.light]: 'rgb(20, 20, 20)',
[modes.dark]: 'rgb(255, 255, 255)',
}),
}) {
this.mode = mode;
this.backgroundColor = backgroundColor;
this.primary = primary;
this.primary13 = primary13;
this.primary40 = primary40;
this.primary150 = primary150;
this.primary500 = primary500;
this.secondary = secondary;
this.tertiary = tertiary;
this.error = error;
this.success = success;
this.accent = accent;
this.accent50 = accent50;
this.accent100 = accent100;
this.accent200 = accent200;
this.accent300 = accent300;
this.accent400 = accent400;
this.accent500 = accent500;
this.accent600 = accent600;
this.accent700 = accent700;
this.accent800 = accent800;
this.accent900 = accent900;
}
/**
* Getters
*/
getAccent = (mode?: modeType) => {
return this.accent[mode || this.mode as keyof PaletteItem];
};
getAccent50 = (mode?: modeType) => {
return this.accent50[mode || this.mode as keyof PaletteItem];
};
getAccent100 = (mode?: modeType) => {
return this.accent100[mode || this.mode as keyof PaletteItem];
};
getAccent200 = (mode?: modeType) => {
return this.accent200[mode || this.mode as keyof PaletteItem];
};
getAccent300 = (mode?: modeType) => {
return this.accent300[mode || this.mode as keyof PaletteItem];
};
getAccent400 = (mode?: modeType) => {
return this.accent400[mode || this.mode as keyof PaletteItem];
};
getAccent500 = (mode?: modeType) => {
return this.accent500[mode || this.mode as keyof PaletteItem];
};
getAccent600 = (mode?: modeType) => {
return this.accent600[mode || this.mode as keyof PaletteItem];
};
getAccent700 = (mode?: modeType) => {
return this.accent700[mode || this.mode as keyof PaletteItem];
};
getAccent800 = (mode?: modeType) => {
return this.accent800[mode || this.mode as keyof PaletteItem];
};
getAccent900 = (mode?: modeType) => {
return this.accent900[mode || this.mode as keyof PaletteItem];
};
getSuccess = (mode?: modeType) => {
return this.success[mode || this.mode as keyof PaletteItem];
};
getError = (mode?: modeType) => {
return this.error[mode || this.mode as keyof PaletteItem];
};
getPrimary = (mode?: modeType) => {
return this.primary[mode || this.mode as keyof PaletteItem];
};
getPrimary13 = (mode?: modeType) => {
return this.primary13[mode || this.mode as keyof PaletteItem];
};
getPrimary40 = (mode?: modeType) => {
return this.primary40[mode || this.mode as keyof PaletteItem];
}
getPrimary150 = (mode?: modeType) => {
return this.primary150[mode || this.mode as keyof PaletteItem];
}
getPrimary500 = (mode?: modeType) => {
return this.primary500[mode || this.mode as keyof PaletteItem];
}
getSecondary = (mode?: modeType) => {
return this.secondary[mode || this.mode as keyof PaletteItem];
};
getTertiary = (mode?: modeType) => {
return this.tertiary[mode || this.mode as keyof PaletteItem];
};
getBackgroundColor = (mode?: modeType) => {
return this.backgroundColor[mode || this.mode as keyof PaletteItem];
};
setMode(mode: string) {
this.mode = mode;
}
setBackground(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.backgroundColor = colorset;
}
}
setPrimary(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.primary = colorset;
}
}
setPrimary13(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.primary13 = colorset;
}
}
setPrimary40(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.primary40 = colorset;
}
}
setSecondary(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.secondary = colorset;
}
}
setTertiary(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.tertiary = colorset;
}
}
setPrimary150(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.primary150 = colorset;
}
}
setPrimary500(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.primary500 = colorset;
}
}
setError(colorset: PaletteItem) {
if (colorset && colorset[modes.light as keyof PaletteItem] && colorset[modes.dark as keyof PaletteItem]) {
this.error = colorset;
}
}
setAccent(colorset: { [x: string]: any; light: any; dark: any; }) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.setAccent900({
[modes.light]: colorset[modes.dark],
[modes.dark]: colorset[modes.light],
});
this.setAccent50({
[modes.light]: getAccentOpacity(
colorset[modes.light],
opacity.accent50[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset[modes.light],
opacity.accent50[modes.dark],
),
});
this.setAccent100({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent100[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent100[modes.dark],
),
});
this.setAccent200({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent200[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent200[modes.dark],
),
});
this.setAccent300({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent300[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent300[modes.dark],
),
});
this.setAccent400({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent400[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent400[modes.dark],
),
});
this.setAccent500({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent500[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent500[modes.dark],
),
});
this.setAccent600({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent600[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent600[modes.dark],
),
});
this.setAccent700({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent700[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent700[modes.dark],
),
});
this.setAccent800({
[modes.light]: getAccentOpacity(
colorset.light,
opacity.accent800[modes.light],
),
[modes.dark]: getAccentOpacity(
colorset.dark,
opacity.accent800[modes.dark],
),
});
}
}
setAccent50(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent50 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent100(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent100 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent200(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent200 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent300(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent300 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent400(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent400 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent500(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent500 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent600(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent600 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent700(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent700 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent800(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent800 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
setAccent900(colorset: any) {
if (colorset && colorset[modes.light] && colorset[modes.dark]) {
this.accent900 = new PaletteItem({
[modes.light]: colorset[modes.light],
[modes.dark]: colorset[modes.dark],
});
}
}
}
// Exports the mode and palette
export { modes, Palette };