import { cx } from 'flairup'; import * as React from 'react'; import { ClassNames } from '../../DomUtils/classNames'; import { stylesheet } from '../../Stylesheet/stylesheet'; import { useClassNameConfig, useStyleConfig, useThemeConfig, } from '../../config/useConfig'; import useIsSearchMode from '../../hooks/useIsSearchMode'; import { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation'; import { useOnFocus } from '../../hooks/useOnFocus'; import { Theme } from '../../types/exposedTypes'; import { usePickerMainRef } from '../context/ElementRefContext'; import { PickerContextProvider, useReactionsModeState, } from '../context/PickerContext'; type Props = Readonly<{ children: React.ReactNode; }>; export const DEFAULT_LABEL_HEIGHT = 40; export default function PickerMain({ children }: Props) { return ( {children} ); } type RootProps = Readonly<{ className?: string; style?: React.CSSProperties; children: React.ReactNode; }>; function PickerRootElement({ children }: RootProps) { const [reactionsMode] = useReactionsModeState(); const theme = useThemeConfig(); const searchModeActive = useIsSearchMode(); const PickerMainRef = usePickerMainRef(); const className = useClassNameConfig(); const style = useStyleConfig(); useKeyboardNavigation(); useOnFocus(); const { width, height, ...styleProps } = style || {}; return ( ); } const DarkTheme = { '--epr-emoji-variation-picker-bg-color': 'var(--epr-dark-emoji-variation-picker-bg-color)', '--epr-hover-bg-color-reduced-opacity': 'var(--epr-dark-hover-bg-color-reduced-opacity)', '--epr-highlight-color': 'var(--epr-dark-highlight-color)', '--epr-text-color': 'var(--epr-dark-text-color)', '--epr-hover-bg-color': 'var(--epr-dark-hover-bg-color)', '--epr-focus-bg-color': 'var(--epr-dark-focus-bg-color)', '--epr-search-input-bg-color': 'var(--epr-dark-search-input-bg-color)', '--epr-category-label-bg-color': 'var(--epr-dark-category-label-bg-color)', '--epr-picker-border-color': 'var(--epr-dark-picker-border-color)', '--epr-bg-color': 'var(--epr-dark-bg-color)', '--epr-reactions-bg-color': 'var(--epr-dark-reactions-bg-color)', '--epr-search-input-bg-color-active': 'var(--epr-dark-search-input-bg-color-active)', '--epr-emoji-variation-indicator-color': 'var(--epr-dark-emoji-variation-indicator-color)', '--epr-category-icon-active-color': 'var(--epr-dark-category-icon-active-color)', '--epr-skin-tone-picker-menu-color': 'var(--epr-dark-skin-tone-picker-menu-color)', '--epr-skin-tone-outer-border-color': 'var(--epr-dark-skin-tone-outer-border-color)', '--epr-skin-tone-inner-border-color': 'var(--epr-dark-skin-tone-inner-border-color)', }; const styles = stylesheet.create({ main: { '.': ['epr-main', ClassNames.emojiPicker], position: 'relative', display: 'flex', flexDirection: 'column', borderWidth: '1px', borderStyle: 'solid', borderRadius: 'var(--epr-picker-border-radius)', borderColor: 'var(--epr-picker-border-color)', backgroundColor: 'var(--epr-bg-color)', overflow: 'hidden', transition: 'height 0.3s ease-in-out, background-color 0.1s ease-in-out', '*': { boxSizing: 'border-box', fontFamily: 'sans-serif', }, }, baseVariables: { '--': { '--epr-highlight-color': '#007aeb', '--epr-hover-bg-color': '#e5f0fa', '--epr-hover-bg-color-reduced-opacity': '#e5f0fa80', '--epr-focus-bg-color': '#e0f0ff', '--epr-text-color': '#858585', '--epr-search-input-bg-color': '#f6f6f6', '--epr-picker-border-color': '#e7e7e7', '--epr-bg-color': '#fff', '--epr-reactions-bg-color': '#ffffff90', '--epr-category-icon-active-color': '#6aa8de', '--epr-skin-tone-picker-menu-color': '#ffffff95', '--epr-skin-tone-outer-border-color': '#555555', '--epr-skin-tone-inner-border-color': 'var(--epr-bg-color)', '--epr-horizontal-padding': '10px', '--epr-picker-border-radius': '8px', /* Header */ '--epr-header-padding': '15px var(--epr-horizontal-padding)', /* Skin Tone Picker */ '--epr-active-skin-tone-indicator-border-color': 'var(--epr-highlight-color)', '--epr-active-skin-hover-color': 'var(--epr-hover-bg-color)', /* Search */ '--epr-search-input-bg-color-active': 'var(--epr-search-input-bg-color)', '--epr-search-input-padding': '0 30px', '--epr-search-input-border-radius': '8px', '--epr-search-input-height': '40px', '--epr-search-input-text-color': 'var(--epr-text-color)', '--epr-search-input-placeholder-color': 'var(--epr-text-color)', '--epr-search-bar-inner-padding': 'var(--epr-horizontal-padding)', '--epr-search-border-color': 'var(--epr-search-input-bg-color)', '--epr-search-border-color-active': 'var(--epr-highlight-color)', /* Category Navigation */ '--epr-category-navigation-button-size': '30px', /* Variation Picker */ '--epr-emoji-variation-picker-height': '45px', '--epr-emoji-variation-picker-bg-color': 'var(--epr-bg-color)', /* Preview */ '--epr-preview-height': '70px', '--epr-preview-text-size': '14px', '--epr-preview-text-padding': '0 var(--epr-horizontal-padding)', '--epr-preview-border-color': 'var(--epr-picker-border-color)', '--epr-preview-text-color': 'var(--epr-text-color)', /* Category */ '--epr-category-padding': '0 var(--epr-horizontal-padding)', /* Category Label */ '--epr-category-label-bg-color': '#ffffffe6', '--epr-category-label-text-color': 'var(--epr-text-color)', '--epr-category-label-padding': '0 var(--epr-horizontal-padding)', '--epr-category-label-height': `${DEFAULT_LABEL_HEIGHT}px`, /* Emoji */ '--epr-emoji-size': '30px', '--epr-emoji-padding': '5px', '--epr-emoji-fullsize': 'calc(var(--epr-emoji-size) + var(--epr-emoji-padding) * 2)', '--epr-emoji-hover-color': 'var(--epr-hover-bg-color)', '--epr-emoji-variation-indicator-color': 'var(--epr-picker-border-color)', '--epr-emoji-variation-indicator-color-hover': 'var(--epr-text-color)', /* Z-Index */ '--epr-header-overlay-z-index': '3', '--epr-emoji-variations-indictator-z-index': '1', '--epr-category-label-z-index': '2', '--epr-skin-variation-picker-z-index': '5', '--epr-preview-z-index': '6', /* Dark Theme Variables */ '--epr-dark': '#000', '--epr-dark-emoji-variation-picker-bg-color': 'var(--epr-dark)', '--epr-dark-highlight-color': '#c0c0c0', '--epr-dark-text-color': 'var(--epr-highlight-color)', '--epr-dark-hover-bg-color': '#363636f6', '--epr-dark-hover-bg-color-reduced-opacity': '#36363680', '--epr-dark-focus-bg-color': '#474747', '--epr-dark-search-input-bg-color': '#333333', '--epr-dark-category-label-bg-color': '#222222e6', '--epr-dark-picker-border-color': '#151617', '--epr-dark-bg-color': '#222222', '--epr-dark-reactions-bg-color': '#22222290', '--epr-dark-search-input-bg-color-active': 'var(--epr-dark)', '--epr-dark-emoji-variation-indicator-color': '#444', '--epr-dark-category-icon-active-color': '#3271b7', '--epr-dark-skin-tone-picker-menu-color': '#22222295', '--epr-dark-skin-tone-outer-border-color': 'var(--epr-dark-picker-border-color)', '--epr-dark-skin-tone-inner-border-color': '#00000000', }, }, autoThemeDark: { '.': ClassNames.autoTheme, '@media (prefers-color-scheme: dark)': { '--': DarkTheme, }, }, darkTheme: { '.': ClassNames.darkTheme, '--': DarkTheme, }, reactionsMenu: { '.': 'epr-reactions', height: '50px', display: 'inline-flex', backgroundColor: 'var(--epr-reactions-bg-color)', // @ts-ignore - backdropFilter is not recognized. backdropFilter: 'blur(8px)', '--': { '--epr-picker-border-radius': '50px', }, }, });