{
- console.log('ArrowNavigation keydown:', e.key, 'autoFocus:', autoFocus, 'disabled:', disabled);
+ console.log(
+ "ArrowNavigation keydown:",
+ e.key,
+ "autoFocus:",
+ autoFocus,
+ "disabled:",
+ disabled,
+ );
navigation.handleKeyDown(e);
}}
role={role || defaultRole}
@@ -122,7 +129,7 @@ export const ArrowNavigation: React.FC
= ({
export const useArrowNavigationContext = () => {
const context = useContext(ArrowNavigationContext);
if (!context) {
- throw new Error('useArrowNavigationContext must be used within an ArrowNavigation component');
+ throw new Error("useArrowNavigationContext must be used within an ArrowNavigation component");
}
return context;
};
@@ -132,7 +139,7 @@ export const useArrowNavigationContext = () => {
*/
export function withArrowNavigation(
Component: React.ComponentType
,
- options: Omit
+ options: Omit,
): React.FC {
return ({ children, ...props }) => (
diff --git a/packages/core/src/components/AutoScroll.tsx b/packages/core/src/components/AutoScroll.tsx
index 7a19e9a..4ba643d 100644
--- a/packages/core/src/components/AutoScroll.tsx
+++ b/packages/core/src/components/AutoScroll.tsx
@@ -17,11 +17,23 @@ interface AutoScrollProps extends React.ComponentProps {
const DURATIONS = {
slow: 40000,
medium: 20000,
- fast: 10000
+ fast: 10000,
};
const AutoScroll = forwardRef(
- ({ children, speed = "medium", hover = "slow", reverse = false, className, style, scrollGap, ...flex }, ref) => {
+ (
+ {
+ children,
+ speed = "medium",
+ hover = "slow",
+ reverse = false,
+ className,
+ style,
+ scrollGap,
+ ...flex
+ },
+ ref,
+ ) => {
const [isHovering, setIsHovering] = useState(false);
const wrapperRef = useRef(null);
const contentRef = useRef(null);
@@ -29,19 +41,19 @@ const AutoScroll = forwardRef(
const animationStateRef = useRef({
currentTime: null as number | null,
playbackRate: 1,
- playing: true
+ playing: true,
});
const [contentWidth, setContentWidth] = useState(0);
const previousReverseRef = useRef(reverse);
-
+
// Stable reference to children to prevent unnecessary re-renders
const childrenStable = useMemo(() => children, []);
-
+
// Measure the content width to calculate proper animation distance
useEffect(() => {
if (!contentRef.current) return;
-
- const observer = new ResizeObserver(entries => {
+
+ const observer = new ResizeObserver((entries) => {
for (const entry of entries) {
const newWidth = entry.contentRect.width;
if (newWidth !== contentWidth && newWidth > 0) {
@@ -49,103 +61,99 @@ const AutoScroll = forwardRef(
}
}
});
-
+
observer.observe(contentRef.current);
return () => observer.disconnect();
}, []);
-
+
// Save animation state before updates
const saveAnimationState = () => {
if (animationRef.current) {
const animation = animationRef.current;
const currentTime = animation.currentTime;
-
+
animationStateRef.current = {
- currentTime: typeof currentTime === 'number' ? currentTime : null,
+ currentTime: typeof currentTime === "number" ? currentTime : null,
playbackRate: animation.playbackRate,
- playing: animation.playState === 'running'
+ playing: animation.playState === "running",
};
}
};
-
+
// Restore animation state after updates
const restoreAnimationState = (animation: Animation) => {
const state = animationStateRef.current;
-
+
if (state.currentTime !== null) {
animation.currentTime = state.currentTime;
}
-
+
animation.updatePlaybackRate(state.playbackRate);
-
+
if (state.playing) {
animation.play();
} else {
animation.pause();
}
};
-
+
// Create or update animation
const setupAnimation = () => {
if (!wrapperRef.current || contentWidth <= 0) return;
-
+
const element = wrapperRef.current;
const duration = DURATIONS[speed];
const parentWidth = element.parentElement?.clientWidth || 0;
-
+
// Save current animation state if it exists
saveAnimationState();
-
+
// Cancel existing animation
if (animationRef.current) {
animationRef.current.cancel();
animationRef.current = null;
}
-
+
// Always animate, even if content is not wider than container
// If content is not wider than container, we'll use the content width as the animation distance
// This ensures there's always some movement
-
+
// Use the maximum of content width and parent width to ensure smooth animation
// This ensures that even with small content, we have enough distance to create a visible animation
const distance = Math.max(contentWidth, parentWidth);
-
+
// Check if reverse direction changed
const directionChanged = reverse !== previousReverseRef.current;
previousReverseRef.current = reverse;
-
+
// Set initial position to prevent jump
if (directionChanged) {
// Reset animation state when direction changes
animationStateRef.current.currentTime = null;
}
-
+
// Use pixel-based animations instead of percentage-based for more precise control
// For reverse direction (left-to-right), we need to move content in the opposite direction
- const keyframes = reverse ? [
- { transform: `translateX(${-distance}px)` },
- { transform: 'translateX(0)' }
- ] : [
- { transform: 'translateX(0)' },
- { transform: `translateX(${-distance}px)` }
- ];
-
+ const keyframes = reverse
+ ? [{ transform: `translateX(${-distance}px)` }, { transform: "translateX(0)" }]
+ : [{ transform: "translateX(0)" }, { transform: `translateX(${-distance}px)` }];
+
const animation = element.animate(keyframes, {
duration,
iterations: Infinity,
- easing: 'linear'
+ easing: "linear",
});
-
+
animationRef.current = animation;
-
+
// Restore previous animation state if available
restoreAnimationState(animation);
};
-
+
// Setup animation when parameters change
useEffect(() => {
setupAnimation();
-
+
return () => {
if (animationRef.current) {
animationRef.current.cancel();
@@ -153,12 +161,12 @@ const AutoScroll = forwardRef(
}
};
}, [speed, reverse, contentWidth]);
-
+
// Handle hover effects
useEffect(() => {
const animation = animationRef.current;
if (!animation) return;
-
+
if (isHovering) {
if (hover === "pause") {
animation.pause();
@@ -173,7 +181,7 @@ const AutoScroll = forwardRef(
}
}
}, [isHovering, hover]);
-
+
// Handle window resize events
useEffect(() => {
const handleResize = () => {
@@ -184,11 +192,11 @@ const AutoScroll = forwardRef(
}
}
};
-
- window.addEventListener('resize', handleResize);
- return () => window.removeEventListener('resize', handleResize);
+
+ window.addEventListener("resize", handleResize);
+ return () => window.removeEventListener("resize", handleResize);
}, [contentWidth]);
-
+
// Prevent animation from restarting when other components open/close
useEffect(() => {
const observer = new MutationObserver(() => {
@@ -201,19 +209,19 @@ const AutoScroll = forwardRef(
}
}
});
-
+
// Observe the entire document for changes that might affect layout
- observer.observe(document.body, {
- childList: true,
+ observer.observe(document.body, {
+ childList: true,
subtree: true,
attributes: true,
- attributeFilter: ['style', 'class']
+ attributeFilter: ["style", "class"],
});
-
+
return () => observer.disconnect();
}, [contentWidth]);
- const gapStyle = typeof scrollGap === 'number' ? `${scrollGap}px` : scrollGap;
+ const gapStyle = typeof scrollGap === "number" ? `${scrollGap}px` : scrollGap;
return (
@@ -224,18 +232,18 @@ const AutoScroll = forwardRef(
onMouseEnter={() => setIsHovering(true)}
onMouseLeave={() => setIsHovering(false)}
>
-
{children || childrenStable}
-
diff --git a/packages/core/src/components/Background.tsx b/packages/core/src/components/Background.tsx
index 0fa98e3..814283c 100644
--- a/packages/core/src/components/Background.tsx
+++ b/packages/core/src/components/Background.tsx
@@ -207,4 +207,4 @@ const Background = forwardRef(
);
Background.displayName = "Background";
-export { Background };
\ No newline at end of file
+export { Background };
diff --git a/packages/core/src/components/BlockQuote.tsx b/packages/core/src/components/BlockQuote.tsx
index 56fcd91..b725b79 100644
--- a/packages/core/src/components/BlockQuote.tsx
+++ b/packages/core/src/components/BlockQuote.tsx
@@ -30,8 +30,8 @@ const BlockQuote = forwardRef(
{children}
);
- }
+ },
);
BlockQuote.displayName = "BlockQuote";
-export { BlockQuote };
\ No newline at end of file
+export { BlockQuote };
diff --git a/packages/core/src/components/Carousel.tsx b/packages/core/src/components/Carousel.tsx
index a39f7fd..984e4d6 100644
--- a/packages/core/src/components/Carousel.tsx
+++ b/packages/core/src/components/Carousel.tsx
@@ -47,7 +47,7 @@ const Carousel: React.FC = ({
const preloadNextImage = (nextIndex: number) => {
if (nextIndex >= 0 && nextIndex < items.length) {
const item = items[nextIndex];
- if (typeof item.slide === 'string') {
+ if (typeof item.slide === "string") {
nextImageRef.current = new Image();
nextImageRef.current.src = item.slide;
}
@@ -113,12 +113,12 @@ const Carousel: React.FC = ({
}}
onTouchEnd={(e: React.TouchEvent) => {
if (touchStartXRef.current === null) return;
-
+
const touchEndX = e.changedTouches[0].clientX;
touchEndXRef.current = touchEndX;
-
+
const diffX = touchStartXRef.current - touchEndX;
-
+
// Detect swipe (more than 50px movement is considered a swipe)
if (Math.abs(diffX) > 50) {
if (diffX > 0) {
@@ -127,12 +127,12 @@ const Carousel: React.FC = ({
handlePrevClick();
}
}
-
+
touchStartXRef.current = null;
touchEndXRef.current = null;
}}
>
- {typeof items[activeIndex]?.slide === 'string' ? (
+ {typeof items[activeIndex]?.slide === "string" ? (
= ({
radius="l"
border="neutral-alpha-weak"
overflow="hidden"
- alt={items[activeIndex]?.alt || ''}
+ alt={items[activeIndex]?.alt || ""}
aspectRatio={aspectRatio}
src={items[activeIndex]?.slide as string}
style={{
- ...(items.length > 1 && {
- }),
+ ...(items.length > 1 && {}),
}}
/>
) : (
- 1 && {
- }),
+ ...(items.length > 1 && {}),
}}
>
{items[activeIndex]?.slide}
)}
-
+
{activeIndex > 0 ? (
-
+
{controls && (
<>
-
-
-
+
+
+
>
)}
) : (
-
+
)}
{activeIndex < items.length - 1 ? (
-
+
{controls && (
<>
-
-
-
+
+
+
>
)}
) : (
-
+
)}
@@ -221,7 +289,10 @@ const Carousel: React.FC = ({
= ({
minHeight={thumbnail.height}
maxHeight={thumbnail.height}
>
- {typeof item.slide === 'string' ? (
+ {typeof item.slide === "string" ? (
(({ cursor, hide, xl, l, m, s, xs, ...props }, ref) => {
- const elementRef = useRef(null);
- const [isTouchDevice, setIsTouchDevice] = useState(false);
- const { currentBreakpoint } = useLayout();
-
- // Combine refs
- const combinedRef = (node: HTMLDivElement) => {
- elementRef.current = node;
- if (typeof ref === 'function') {
- ref(node);
- } else if (ref) {
- ref.current = node;
- }
- };
- const appliedResponsiveStyles = useRef>(new Set());
- const baseStyleRef = useRef({});
-
- // Responsive styles logic (client-side only)
- const applyResponsiveStyles = useCallback(() => {
- if (!elementRef.current) return;
-
- const element = elementRef.current;
-
- // Update base styles when style prop changes
- if (props.style) {
- baseStyleRef.current = { ...props.style };
- }
-
- // Determine which responsive props to apply based on current breakpoint
- let currentResponsiveProps: any = null;
- if (currentBreakpoint === 'xl' && xl) {
- currentResponsiveProps = xl;
- } else if (currentBreakpoint === 'l' && l) {
- currentResponsiveProps = l;
- } else if (currentBreakpoint === 'm' && m) {
- currentResponsiveProps = m;
- } else if (currentBreakpoint === 's' && s) {
- currentResponsiveProps = s;
- } else if (currentBreakpoint === 'xs' && xs) {
- currentResponsiveProps = xs;
- }
-
- // Clear only responsive styles, not base styles
- appliedResponsiveStyles.current.forEach(key => {
- (element.style as any)[key] = '';
- });
- appliedResponsiveStyles.current.clear();
-
- // Reapply base styles
- if (baseStyleRef.current) {
- Object.entries(baseStyleRef.current).forEach(([key, value]) => {
- (element.style as any)[key] = value;
- });
- }
-
- // Apply new responsive styles if we have them for current breakpoint
- if (currentResponsiveProps) {
- if (currentResponsiveProps.style) {
- Object.entries(currentResponsiveProps.style).forEach(([key, value]) => {
- (element.style as any)[key] = value;
- appliedResponsiveStyles.current.add(key);
- });
- }
- if (currentResponsiveProps.aspectRatio) {
- element.style.aspectRatio = currentResponsiveProps.aspectRatio;
- appliedResponsiveStyles.current.add('aspect-ratio');
+const ClientFlex = forwardRef(
+ ({ cursor, hide, xl, l, m, s, xs, ...props }, ref) => {
+ const elementRef = useRef(null);
+ const [isTouchDevice, setIsTouchDevice] = useState(false);
+ const { currentBreakpoint } = useLayout();
+
+ // Combine refs
+ const combinedRef = (node: HTMLDivElement) => {
+ elementRef.current = node;
+ if (typeof ref === "function") {
+ ref(node);
+ } else if (ref) {
+ ref.current = node;
}
- }
- }, [xl, l, m, s, xs, props.style, currentBreakpoint]);
-
- useEffect(() => {
- applyResponsiveStyles();
- }, [applyResponsiveStyles]);
-
- // Detect touch device
- useEffect(() => {
- const checkTouchDevice = () => {
- const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
- const hasPointer = window.matchMedia('(pointer: fine)').matches;
- setIsTouchDevice(hasTouch && !hasPointer);
};
+ const appliedResponsiveStyles = useRef>(new Set());
+ const baseStyleRef = useRef({});
- checkTouchDevice();
-
- const mediaQuery = window.matchMedia('(pointer: fine)');
- const handlePointerChange = () => checkTouchDevice();
-
- mediaQuery.addEventListener('change', handlePointerChange);
-
- return () => {
- mediaQuery.removeEventListener('change', handlePointerChange);
- };
- }, []);
-
- // Determine if we should hide the default cursor
- const shouldHideCursor = typeof cursor === 'object' && cursor && !isTouchDevice;
-
- // Determine if we should apply the hide class based on current breakpoint
- const shouldApplyHideClass = () => {
- try {
- const { currentBreakpoint } = useLayout();
-
- // Logic matching the shouldHide function in Flex component
- if (currentBreakpoint === 'xl') {
- if (xl?.hide !== undefined) return xl.hide === true;
- return hide === true;
+ // Responsive styles logic (client-side only)
+ const applyResponsiveStyles = useCallback(() => {
+ if (!elementRef.current) return;
+
+ const element = elementRef.current;
+
+ // Update base styles when style prop changes
+ if (props.style) {
+ baseStyleRef.current = { ...props.style };
}
-
- if (currentBreakpoint === 'l') {
- if (l?.hide !== undefined) return l.hide === true;
- return hide === true;
+
+ // Determine which responsive props to apply based on current breakpoint
+ let currentResponsiveProps: any = null;
+ if (currentBreakpoint === "xl" && xl) {
+ currentResponsiveProps = xl;
+ } else if (currentBreakpoint === "l" && l) {
+ currentResponsiveProps = l;
+ } else if (currentBreakpoint === "m" && m) {
+ currentResponsiveProps = m;
+ } else if (currentBreakpoint === "s" && s) {
+ currentResponsiveProps = s;
+ } else if (currentBreakpoint === "xs" && xs) {
+ currentResponsiveProps = xs;
}
-
- if (currentBreakpoint === 'm') {
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
- if (xl?.hide !== undefined) return xl.hide === true;
- return hide === true;
+
+ // Clear only responsive styles, not base styles
+ appliedResponsiveStyles.current.forEach((key) => {
+ (element.style as any)[key] = "";
+ });
+ appliedResponsiveStyles.current.clear();
+
+ // Reapply base styles
+ if (baseStyleRef.current) {
+ Object.entries(baseStyleRef.current).forEach(([key, value]) => {
+ (element.style as any)[key] = value;
+ });
}
-
- if (currentBreakpoint === 's') {
- if (s?.hide !== undefined) return s.hide === true;
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
- if (xl?.hide !== undefined) return xl.hide === true;
- return hide === true;
+
+ // Apply new responsive styles if we have them for current breakpoint
+ if (currentResponsiveProps) {
+ if (currentResponsiveProps.style) {
+ Object.entries(currentResponsiveProps.style).forEach(([key, value]) => {
+ (element.style as any)[key] = value;
+ appliedResponsiveStyles.current.add(key);
+ });
+ }
+ if (currentResponsiveProps.aspectRatio) {
+ element.style.aspectRatio = currentResponsiveProps.aspectRatio;
+ appliedResponsiveStyles.current.add("aspect-ratio");
+ }
}
-
- if (currentBreakpoint === 'xs') {
- if (xs?.hide !== undefined) return xs.hide === true;
- if (s?.hide !== undefined) return s.hide === true;
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
- if (xl?.hide !== undefined) return xl.hide === true;
+ }, [xl, l, m, s, xs, props.style, currentBreakpoint]);
+
+ useEffect(() => {
+ applyResponsiveStyles();
+ }, [applyResponsiveStyles]);
+
+ // Detect touch device
+ useEffect(() => {
+ const checkTouchDevice = () => {
+ const hasTouch = "ontouchstart" in window || navigator.maxTouchPoints > 0;
+ const hasPointer = window.matchMedia("(pointer: fine)").matches;
+ setIsTouchDevice(hasTouch && !hasPointer);
+ };
+
+ checkTouchDevice();
+
+ const mediaQuery = window.matchMedia("(pointer: fine)");
+ const handlePointerChange = () => checkTouchDevice();
+
+ mediaQuery.addEventListener("change", handlePointerChange);
+
+ return () => {
+ mediaQuery.removeEventListener("change", handlePointerChange);
+ };
+ }, []);
+
+ // Determine if we should hide the default cursor
+ const shouldHideCursor = typeof cursor === "object" && cursor && !isTouchDevice;
+
+ // Determine if we should apply the hide class based on current breakpoint
+ const shouldApplyHideClass = () => {
+ try {
+ const { currentBreakpoint } = useLayout();
+
+ // Logic matching the shouldHide function in Flex component
+ if (currentBreakpoint === "xl") {
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "l") {
+ if (l?.hide !== undefined) return l.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "m") {
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "s") {
+ if (s?.hide !== undefined) return s.hide === true;
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "xs") {
+ if (xs?.hide !== undefined) return xs.hide === true;
+ if (s?.hide !== undefined) return s.hide === true;
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ return hide === true;
+ } catch {
return hide === true;
}
-
- return hide === true;
- } catch {
- return hide === true;
- }
- };
-
- // Apply hide class only if it should be hidden at current breakpoint
- const effectiveHide = shouldApplyHideClass();
-
- return (
- <>
-
- {typeof cursor === 'object' && cursor && !isTouchDevice && (
-
- )}
- >
- );
-});
+ };
+
+ // Apply hide class only if it should be hidden at current breakpoint
+ const effectiveHide = shouldApplyHideClass();
+
+ return (
+ <>
+
+ {typeof cursor === "object" && cursor && !isTouchDevice && (
+
+ )}
+ >
+ );
+ },
+);
ClientFlex.displayName = "ClientFlex";
-export { ClientFlex };
\ No newline at end of file
+export { ClientFlex };
diff --git a/packages/core/src/components/ClientGrid.tsx b/packages/core/src/components/ClientGrid.tsx
index f1faefd..bbfdae2 100644
--- a/packages/core/src/components/ClientGrid.tsx
+++ b/packages/core/src/components/ClientGrid.tsx
@@ -16,174 +16,176 @@ interface ClientGridProps extends GridProps, StyleProps, DisplayProps {
hide?: boolean;
}
-const ClientGrid = forwardRef(({ cursor, hide, xl, l, m, s, xs, ...props }, ref) => {
- const elementRef = useRef(null);
- const [isTouchDevice, setIsTouchDevice] = useState(false);
- const { currentBreakpoint } = useLayout();
-
- // Combine refs
- const combinedRef = (node: HTMLDivElement) => {
- elementRef.current = node;
- if (typeof ref === 'function') {
- ref(node);
- } else if (ref) {
- ref.current = node;
- }
- };
- const appliedResponsiveStyles = useRef>(new Set());
- const baseStyleRef = useRef({});
-
- // Responsive styles logic (client-side only)
- const applyResponsiveStyles = useCallback(() => {
- if (!elementRef.current) return;
-
- const element = elementRef.current;
-
- // Update base styles when style prop changes
- if (props.style) {
- baseStyleRef.current = { ...props.style };
- }
-
- // Determine which responsive props to apply based on current breakpoint
- let currentResponsiveProps: any = null;
- if (currentBreakpoint === 'xl' && xl) {
- currentResponsiveProps = xl;
- } else if (currentBreakpoint === 'l' && l) {
- currentResponsiveProps = l;
- } else if (currentBreakpoint === 'm' && m) {
- currentResponsiveProps = m;
- } else if (currentBreakpoint === 's' && s) {
- currentResponsiveProps = s;
- } else if (currentBreakpoint === 'xs' && xs) {
- currentResponsiveProps = xs;
- }
-
- // Clear only responsive styles, not base styles
- appliedResponsiveStyles.current.forEach(key => {
- (element.style as any)[key] = '';
- });
- appliedResponsiveStyles.current.clear();
-
- // Reapply base styles
- if (baseStyleRef.current) {
- Object.entries(baseStyleRef.current).forEach(([key, value]) => {
- (element.style as any)[key] = value;
- });
- }
-
- // Apply new responsive styles if we have them for current breakpoint
- if (currentResponsiveProps) {
- if (currentResponsiveProps.style) {
- Object.entries(currentResponsiveProps.style).forEach(([key, value]) => {
- (element.style as any)[key] = value;
- appliedResponsiveStyles.current.add(key);
- });
- }
- if (currentResponsiveProps.aspectRatio) {
- element.style.aspectRatio = currentResponsiveProps.aspectRatio;
- appliedResponsiveStyles.current.add('aspect-ratio');
+const ClientGrid = forwardRef(
+ ({ cursor, hide, xl, l, m, s, xs, ...props }, ref) => {
+ const elementRef = useRef(null);
+ const [isTouchDevice, setIsTouchDevice] = useState(false);
+ const { currentBreakpoint } = useLayout();
+
+ // Combine refs
+ const combinedRef = (node: HTMLDivElement) => {
+ elementRef.current = node;
+ if (typeof ref === "function") {
+ ref(node);
+ } else if (ref) {
+ ref.current = node;
}
- }
- }, [xl, l, m, s, xs, props.style, currentBreakpoint]);
-
- useEffect(() => {
- applyResponsiveStyles();
- }, [applyResponsiveStyles]);
-
- // Detect touch device
- useEffect(() => {
- const checkTouchDevice = () => {
- const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
- const hasPointer = window.matchMedia('(pointer: fine)').matches;
- setIsTouchDevice(hasTouch && !hasPointer);
};
+ const appliedResponsiveStyles = useRef>(new Set());
+ const baseStyleRef = useRef({});
- checkTouchDevice();
-
- const mediaQuery = window.matchMedia('(pointer: fine)');
- const handlePointerChange = () => checkTouchDevice();
-
- mediaQuery.addEventListener('change', handlePointerChange);
-
- return () => {
- mediaQuery.removeEventListener('change', handlePointerChange);
- };
- }, []);
-
- // Determine if we should hide the default cursor
- const shouldHideCursor = typeof cursor === 'object' && cursor && !isTouchDevice;
-
- // Determine if we should apply the hide class based on current breakpoint
- const shouldApplyHideClass = () => {
- try {
- const { currentBreakpoint } = useLayout();
-
- // Logic matching the shouldHide function in Grid component
- if (currentBreakpoint === 'xl') {
- if (xl?.hide !== undefined) return xl.hide === true;
- return hide === true;
+ // Responsive styles logic (client-side only)
+ const applyResponsiveStyles = useCallback(() => {
+ if (!elementRef.current) return;
+
+ const element = elementRef.current;
+
+ // Update base styles when style prop changes
+ if (props.style) {
+ baseStyleRef.current = { ...props.style };
}
-
- if (currentBreakpoint === 'l') {
- if (l?.hide !== undefined) return l.hide === true;
- return hide === true;
+
+ // Determine which responsive props to apply based on current breakpoint
+ let currentResponsiveProps: any = null;
+ if (currentBreakpoint === "xl" && xl) {
+ currentResponsiveProps = xl;
+ } else if (currentBreakpoint === "l" && l) {
+ currentResponsiveProps = l;
+ } else if (currentBreakpoint === "m" && m) {
+ currentResponsiveProps = m;
+ } else if (currentBreakpoint === "s" && s) {
+ currentResponsiveProps = s;
+ } else if (currentBreakpoint === "xs" && xs) {
+ currentResponsiveProps = xs;
}
-
- if (currentBreakpoint === 'm') {
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
- if (xl?.hide !== undefined) return xl.hide === true;
- return hide === true;
+
+ // Clear only responsive styles, not base styles
+ appliedResponsiveStyles.current.forEach((key) => {
+ (element.style as any)[key] = "";
+ });
+ appliedResponsiveStyles.current.clear();
+
+ // Reapply base styles
+ if (baseStyleRef.current) {
+ Object.entries(baseStyleRef.current).forEach(([key, value]) => {
+ (element.style as any)[key] = value;
+ });
}
-
- if (currentBreakpoint === 's') {
- if (s?.hide !== undefined) return s.hide === true;
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
- if (xl?.hide !== undefined) return xl.hide === true;
- return hide === true;
+
+ // Apply new responsive styles if we have them for current breakpoint
+ if (currentResponsiveProps) {
+ if (currentResponsiveProps.style) {
+ Object.entries(currentResponsiveProps.style).forEach(([key, value]) => {
+ (element.style as any)[key] = value;
+ appliedResponsiveStyles.current.add(key);
+ });
+ }
+ if (currentResponsiveProps.aspectRatio) {
+ element.style.aspectRatio = currentResponsiveProps.aspectRatio;
+ appliedResponsiveStyles.current.add("aspect-ratio");
+ }
}
-
- if (currentBreakpoint === 'xs') {
- if (xs?.hide !== undefined) return xs.hide === true;
- if (s?.hide !== undefined) return s.hide === true;
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
- if (xl?.hide !== undefined) return xl.hide === true;
+ }, [xl, l, m, s, xs, props.style, currentBreakpoint]);
+
+ useEffect(() => {
+ applyResponsiveStyles();
+ }, [applyResponsiveStyles]);
+
+ // Detect touch device
+ useEffect(() => {
+ const checkTouchDevice = () => {
+ const hasTouch = "ontouchstart" in window || navigator.maxTouchPoints > 0;
+ const hasPointer = window.matchMedia("(pointer: fine)").matches;
+ setIsTouchDevice(hasTouch && !hasPointer);
+ };
+
+ checkTouchDevice();
+
+ const mediaQuery = window.matchMedia("(pointer: fine)");
+ const handlePointerChange = () => checkTouchDevice();
+
+ mediaQuery.addEventListener("change", handlePointerChange);
+
+ return () => {
+ mediaQuery.removeEventListener("change", handlePointerChange);
+ };
+ }, []);
+
+ // Determine if we should hide the default cursor
+ const shouldHideCursor = typeof cursor === "object" && cursor && !isTouchDevice;
+
+ // Determine if we should apply the hide class based on current breakpoint
+ const shouldApplyHideClass = () => {
+ try {
+ const { currentBreakpoint } = useLayout();
+
+ // Logic matching the shouldHide function in Grid component
+ if (currentBreakpoint === "xl") {
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "l") {
+ if (l?.hide !== undefined) return l.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "m") {
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "s") {
+ if (s?.hide !== undefined) return s.hide === true;
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ if (currentBreakpoint === "xs") {
+ if (xs?.hide !== undefined) return xs.hide === true;
+ if (s?.hide !== undefined) return s.hide === true;
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ if (xl?.hide !== undefined) return xl.hide === true;
+ return hide === true;
+ }
+
+ return hide === true;
+ } catch {
return hide === true;
}
-
- return hide === true;
- } catch {
- return hide === true;
- }
- };
-
- // Apply hide class only if it should be hidden at current breakpoint
- const effectiveHide = shouldApplyHideClass();
-
- return (
- <>
-
- {typeof cursor === 'object' && cursor && !isTouchDevice && (
-
- )}
- >
- );
-});
+ };
+
+ // Apply hide class only if it should be hidden at current breakpoint
+ const effectiveHide = shouldApplyHideClass();
+
+ return (
+ <>
+
+ {typeof cursor === "object" && cursor && !isTouchDevice && (
+
+ )}
+ >
+ );
+ },
+);
ClientGrid.displayName = "ClientGrid";
-export { ClientGrid };
\ No newline at end of file
+export { ClientGrid };
diff --git a/packages/core/src/components/ContextMenu.tsx b/packages/core/src/components/ContextMenu.tsx
index 01942ea..9b698ab 100644
--- a/packages/core/src/components/ContextMenu.tsx
+++ b/packages/core/src/components/ContextMenu.tsx
@@ -59,39 +59,41 @@ const ContextMenu = forwardRef(
const containerRef = useRef(null);
const dropdownRef = useRef(null);
const previouslyFocusedElement = useRef(null);
-
+
// Control open state internally if not provided
const isControlled = isOpen !== undefined;
const isDropdownOpen = isControlled ? isOpen : internalIsOpen;
-
+
// Handle open state changes
- const handleOpenChange = useCallback((open: boolean) => {
- if (!isControlled) {
- setInternalIsOpen(open);
- }
- onOpenChange?.(open);
- }, [isControlled, onOpenChange]);
-
+ const handleOpenChange = useCallback(
+ (open: boolean) => {
+ if (!isControlled) {
+ setInternalIsOpen(open);
+ }
+ onOpenChange?.(open);
+ },
+ [isControlled, onOpenChange],
+ );
+
// Set browser state for portal rendering
useEffect(() => {
setIsBrowser(true);
}, []);
-
const handleContextMenu = useCallback(
(e: ReactMouseEvent) => {
e.preventDefault();
e.stopPropagation();
-
+
// Set the position to the mouse position
setContextPosition({ x: e.clientX, y: e.clientY });
-
+
// Open the dropdown
handleOpenChange(true);
},
[handleOpenChange],
);
-
+
// Handle click events for MacBook support (Control+click)
const handleClick = useCallback(
(e: ReactMouseEvent) => {
@@ -99,67 +101,71 @@ const ContextMenu = forwardRef(
if (e.ctrlKey || e.metaKey) {
e.preventDefault();
e.stopPropagation();
-
+
// Set the position to the mouse position
setContextPosition({ x: e.clientX, y: e.clientY });
-
+
// Open the dropdown
handleOpenChange(true);
}
},
[handleOpenChange],
);
-
+
// Close dropdown when clicking outside
useEffect(() => {
const handleClickOutside = (e: MouseEvent) => {
- if (isDropdownOpen && dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {
+ if (
+ isDropdownOpen &&
+ dropdownRef.current &&
+ !dropdownRef.current.contains(e.target as Node)
+ ) {
handleOpenChange(false);
}
};
-
- document.addEventListener('mousedown', handleClickOutside);
+
+ document.addEventListener("mousedown", handleClickOutside);
return () => {
- document.removeEventListener('mousedown', handleClickOutside);
+ document.removeEventListener("mousedown", handleClickOutside);
};
}, [isDropdownOpen, handleOpenChange]);
-
+
// Scroll locking and focus management
useEffect(() => {
if (isDropdownOpen) {
// Store the currently focused element before focusing the dropdown
previouslyFocusedElement.current = document.activeElement;
-
+
// Reset focus index when opening
setFocusedIndex(-1);
-
+
// Lock scroll
const originalStyle = window.getComputedStyle(document.body).overflow;
- document.body.style.overflow = 'hidden';
-
+ document.body.style.overflow = "hidden";
+
// Store current scroll position
const scrollX = window.scrollX;
const scrollY = window.scrollY;
-
+
// Focus the dropdown after a small delay to ensure it's rendered
setTimeout(() => {
if (dropdownRef.current) {
// Force focus on the dropdown container first
dropdownRef.current.focus();
-
+
// Find all option elements
const optionElements = Array.from(
- dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]')
+ dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]'),
) as HTMLElement[];
-
+
if (optionElements.length > 0) {
// Set focus index to first option
setFocusedIndex(0);
-
+
// Focus and highlight the first option
optionElements[0].focus({ preventScroll: true });
optionElements[0].classList.add("highlighted");
-
+
// Remove highlight from other options
for (let i = 1; i < optionElements.length; i++) {
optionElements[i].classList.remove("highlighted");
@@ -167,19 +173,19 @@ const ContextMenu = forwardRef(
} else {
// If no options, focus any focusable element
const focusableElements = dropdownRef.current.querySelectorAll(
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
);
-
+
if (focusableElements.length > 0) {
(focusableElements[0] as HTMLElement).focus({ preventScroll: true });
}
}
-
+
// Restore scroll position that might have been changed by focus
window.scrollTo(scrollX, scrollY);
}
}, 50); // Small delay to ensure DOM is ready
-
+
return () => {
// Unlock scroll when component unmounts or dropdown closes
document.body.style.overflow = originalStyle;
@@ -187,110 +193,115 @@ const ContextMenu = forwardRef(
} else if (!isDropdownOpen && previouslyFocusedElement.current) {
// Restore focus when closing
(previouslyFocusedElement.current as HTMLElement).focus();
-
+
// Ensure scroll is unlocked
- document.body.style.overflow = '';
+ document.body.style.overflow = "";
}
}, [isDropdownOpen]);
-
+
// Handle keyboard navigation
- const handleKeyDown = useCallback((e: KeyboardEvent) => {
- if (!isDropdownOpen) return;
-
- if (e.key === "Escape") {
- e.preventDefault();
- handleOpenChange(false);
- return;
- }
-
- // Handle tab key for focus trapping
- if (e.key === "Tab" && dropdownRef.current) {
- // Find all focusable elements in the dropdown
- const focusableElements = Array.from(
- dropdownRef.current.querySelectorAll(
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
- )
- ) as HTMLElement[];
-
- if (focusableElements.length === 0) return;
-
- // Get the first and last focusable elements
- const firstElement = focusableElements[0];
- const lastElement = focusableElements[focusableElements.length - 1];
-
- // Handle tab and shift+tab to cycle through focusable elements
- if (e.shiftKey) { // Shift+Tab
- if (document.activeElement === firstElement) {
- e.preventDefault();
- lastElement.focus();
- }
- } else { // Tab
- if (document.activeElement === lastElement) {
- e.preventDefault();
- firstElement.focus();
- }
+ const handleKeyDown = useCallback(
+ (e: KeyboardEvent) => {
+ if (!isDropdownOpen) return;
+
+ if (e.key === "Escape") {
+ e.preventDefault();
+ handleOpenChange(false);
+ return;
}
-
- return;
- }
-
- if (e.key === "ArrowDown" || e.key === "ArrowUp") {
- e.preventDefault();
-
- // Find all Option components in the dropdown
- const optionElements = dropdownRef.current
- ? Array.from(
- dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]')
- )
- : [];
-
- if (optionElements.length === 0) return;
-
- let newIndex = focusedIndex;
-
- if (e.key === "ArrowDown") {
- newIndex = focusedIndex < optionElements.length - 1 ? focusedIndex + 1 : 0;
- } else {
- newIndex = focusedIndex > 0 ? focusedIndex - 1 : optionElements.length - 1;
+
+ // Handle tab key for focus trapping
+ if (e.key === "Tab" && dropdownRef.current) {
+ // Find all focusable elements in the dropdown
+ const focusableElements = Array.from(
+ dropdownRef.current.querySelectorAll(
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
+ ),
+ ) as HTMLElement[];
+
+ if (focusableElements.length === 0) return;
+
+ // Get the first and last focusable elements
+ const firstElement = focusableElements[0];
+ const lastElement = focusableElements[focusableElements.length - 1];
+
+ // Handle tab and shift+tab to cycle through focusable elements
+ if (e.shiftKey) {
+ // Shift+Tab
+ if (document.activeElement === firstElement) {
+ e.preventDefault();
+ lastElement.focus();
+ }
+ } else {
+ // Tab
+ if (document.activeElement === lastElement) {
+ e.preventDefault();
+ firstElement.focus();
+ }
+ }
+
+ return;
}
-
- setFocusedIndex(newIndex);
-
- // Highlight the element visually
- optionElements.forEach((el, i) => {
- if (i === newIndex) {
- (el as HTMLElement).classList.add("highlighted");
- // Scroll into view if needed
- (el as HTMLElement).scrollIntoView({ block: "nearest" });
- // Focus the element
- (el as HTMLElement).focus();
+
+ if (e.key === "ArrowDown" || e.key === "ArrowUp") {
+ e.preventDefault();
+
+ // Find all Option components in the dropdown
+ const optionElements = dropdownRef.current
+ ? Array.from(
+ dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]'),
+ )
+ : [];
+
+ if (optionElements.length === 0) return;
+
+ let newIndex = focusedIndex;
+
+ if (e.key === "ArrowDown") {
+ newIndex = focusedIndex < optionElements.length - 1 ? focusedIndex + 1 : 0;
} else {
- (el as HTMLElement).classList.remove("highlighted");
+ newIndex = focusedIndex > 0 ? focusedIndex - 1 : optionElements.length - 1;
}
- });
- } else if (e.key === "Enter" || e.key === " ") {
- e.preventDefault();
-
- // Find all Option components
- const optionElements = dropdownRef.current
- ? Array.from(
- dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]')
- )
- : [];
-
- // Click the focused option
- if (focusedIndex >= 0 && focusedIndex < optionElements.length) {
- (optionElements[focusedIndex] as HTMLElement).click();
-
- if (closeAfterClick) {
- handleOpenChange(false);
+
+ setFocusedIndex(newIndex);
+
+ // Highlight the element visually
+ optionElements.forEach((el, i) => {
+ if (i === newIndex) {
+ (el as HTMLElement).classList.add("highlighted");
+ // Scroll into view if needed
+ (el as HTMLElement).scrollIntoView({ block: "nearest" });
+ // Focus the element
+ (el as HTMLElement).focus();
+ } else {
+ (el as HTMLElement).classList.remove("highlighted");
+ }
+ });
+ } else if (e.key === "Enter" || e.key === " ") {
+ e.preventDefault();
+
+ // Find all Option components
+ const optionElements = dropdownRef.current
+ ? Array.from(
+ dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]'),
+ )
+ : [];
+
+ // Click the focused option
+ if (focusedIndex >= 0 && focusedIndex < optionElements.length) {
+ (optionElements[focusedIndex] as HTMLElement).click();
+
+ if (closeAfterClick) {
+ handleOpenChange(false);
+ }
}
}
- }
- }, [isDropdownOpen, focusedIndex, handleOpenChange, closeAfterClick]);
+ },
+ [isDropdownOpen, focusedIndex, handleOpenChange, closeAfterClick],
+ );
return (
- (
style={style}
>
{children}
- {isDropdownOpen && isBrowser && createPortal(
- {
- dropdownRef.current = node;
- if (typeof ref === 'function') {
- ref(node);
- } else if (ref) {
- ref.current = node;
- }
- }}
- className={styles.fadeIn}
- style={{
- top: contextPosition.y,
- left: contextPosition.x,
- }}
- role="menu"
- onKeyDown={handleKeyDown}
- onClick={(e) => {
- const el = e.target as HTMLElement;
- const isSelectable =
- el.closest(".option") ||
- el.closest("[role='option']") ||
- el.closest("[data-value]");
-
- if (isSelectable && closeAfterClick) {
- setTimeout(() => {
- handleOpenChange(false);
- }, 50);
- }
- }}
- >
- {
- onSelect?.(value);
- if (closeAfterClick) {
- handleOpenChange(false);
+ {isDropdownOpen &&
+ isBrowser &&
+ createPortal(
+ {
+ dropdownRef.current = node;
+ if (typeof ref === "function") {
+ ref(node);
+ } else if (ref) {
+ ref.current = node;
+ }
+ }}
+ className={styles.fadeIn}
+ style={{
+ top: contextPosition.y,
+ left: contextPosition.x,
+ }}
+ role="menu"
+ onKeyDown={handleKeyDown}
+ onClick={(e) => {
+ const el = e.target as HTMLElement;
+ const isSelectable =
+ el.closest(".option") ||
+ el.closest("[role='option']") ||
+ el.closest("[data-value]");
+
+ if (isSelectable && closeAfterClick) {
+ setTimeout(() => {
+ handleOpenChange(false);
+ }, 50);
}
}}
- {...rest}
>
- {dropdown}
-
- ,
- document.body
- )}
+ {
+ onSelect?.(value);
+ if (closeAfterClick) {
+ handleOpenChange(false);
+ }
+ }}
+ {...rest}
+ >
+ {dropdown}
+
+ ,
+ document.body,
+ )}
);
},
diff --git a/packages/core/src/components/CountFx.tsx b/packages/core/src/components/CountFx.tsx
index 0c6aa66..878db71 100644
--- a/packages/core/src/components/CountFx.tsx
+++ b/packages/core/src/components/CountFx.tsx
@@ -46,9 +46,7 @@ const CountFx: React.FC = ({
case "ease-out":
return 1 - Math.pow(1 - progress, 3);
case "ease-in-out":
- return progress < 0.5
- ? 2 * progress * progress
- : 1 - Math.pow(-2 * progress + 2, 2) / 2;
+ return progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;
default:
return 1 - Math.pow(1 - progress, 3);
}
@@ -56,27 +54,27 @@ const CountFx: React.FC = ({
// Wheel animation: create digit wheels
const renderWheelDigits = (currentValue: number, targetValue: number) => {
- const currentStr = currentValue.toString().padStart(targetValue.toString().length, '0');
+ const currentStr = currentValue.toString().padStart(targetValue.toString().length, "0");
const targetStr = targetValue.toString();
const maxLength = Math.max(currentStr.length, targetStr.length);
-
+
return Array.from({ length: maxLength }, (_, index) => {
- const currentDigit = parseInt(currentStr[maxLength - 1 - index] || '0');
- const targetDigit = parseInt(targetStr[maxLength - 1 - index] || '0');
-
+ const currentDigit = parseInt(currentStr[maxLength - 1 - index] || "0");
+ const targetDigit = parseInt(targetStr[maxLength - 1 - index] || "0");
+
// Calculate progress for this specific digit
const digitDifference = targetDigit - currentDigit;
- const digitProgress = Math.abs(digitDifference) > 0 ?
- Math.min(Math.abs(digitDifference) / 10, 1) : 1; // Progress based on how close to target
-
+ const digitProgress =
+ Math.abs(digitDifference) > 0 ? Math.min(Math.abs(digitDifference) / 10, 1) : 1; // Progress based on how close to target
+
// Create wheel effect for this digit
const wheelDigits = [];
for (let i = 0; i <= 9; i++) {
const isActive = i === currentDigit;
-
+
// Calculate transition speed based on progress (slower as it approaches target)
- const transitionDuration = 0.1 + (digitProgress * 0.2); // 0.1s to 0.3s
-
+ const transitionDuration = 0.1 + digitProgress * 0.2; // 0.1s to 0.3s
+
// Calculate position for wheel effect
let position = 0;
if (isActive) {
@@ -86,7 +84,7 @@ const CountFx: React.FC = ({
} else {
position = 100; // Digits above current are below
}
-
+
wheelDigits.push(
= ({
bottom="0"
key={i}
style={{
- height: '1em',
- width: '100%',
+ height: "1em",
+ width: "100%",
transform: `translateY(${position * 2}%)`,
transition: `all ${transitionDuration}s ease-out`,
- pointerEvents: 'none',
+ pointerEvents: "none",
}}
>
{i}
-
+
,
);
}
-
+
return (
= ({
inline
key={index}
style={{
- height: '1em',
- width: '0.8em',
- marginLeft: '-0.125em',
- marginRight: '-0.125em',
- position: 'relative',
- isolation: 'isolate',
+ height: "1em",
+ width: "0.8em",
+ marginLeft: "-0.125em",
+ marginRight: "-0.125em",
+ position: "relative",
+ isolation: "isolate",
}}
>
{wheelDigits}
@@ -132,40 +130,40 @@ const CountFx: React.FC = ({
// Smooth animation: animate each digit independently from start to target
const renderSmoothDigits = (startValue: number, targetValue: number, progress: number) => {
- const startStr = startValue.toString().padStart(targetValue.toString().length, '0');
+ const startStr = startValue.toString().padStart(targetValue.toString().length, "0");
const targetStr = targetValue.toString();
const maxLength = Math.max(startStr.length, targetStr.length);
-
+
return Array.from({ length: maxLength }, (_, index) => {
- const startDigit = parseInt(startStr[maxLength - 1 - index] || '0');
- const targetDigit = parseInt(targetStr[maxLength - 1 - index] || '0');
-
+ const startDigit = parseInt(startStr[maxLength - 1 - index] || "0");
+ const targetDigit = parseInt(targetStr[maxLength - 1 - index] || "0");
+
// Calculate the shortest path between digits (handles wrapping around 0-9)
let digitDifference = targetDigit - startDigit;
if (Math.abs(digitDifference) > 5) {
// Take the shorter path around the wheel
digitDifference = digitDifference > 0 ? digitDifference - 10 : digitDifference + 10;
}
-
+
// Calculate the current digit position based on progress
- const currentDigitPosition = startDigit + (digitDifference * progress);
-
+ const currentDigitPosition = startDigit + digitDifference * progress;
+
// Create wheel effect for this digit
const wheelDigits = [];
for (let i = 0; i <= 9; i++) {
// Calculate the position of each digit in the wheel
let position = 0;
-
+
// Calculate the relative position of this digit to the current position
let relativePosition = i - currentDigitPosition;
-
+
// Handle wrapping around the wheel
if (relativePosition > 5) relativePosition -= 10;
if (relativePosition < -5) relativePosition += 10;
-
+
// Convert to percentage position
position = relativePosition * 200; // 200% for full wheel height
-
+
wheelDigits.push(
= ({
bottom="0"
key={i}
style={{
- height: '1em',
- width: '100%',
+ height: "1em",
+ width: "100%",
transform: `translateY(${position}%)`,
- transition: 'none', // No transition for smooth effect
- pointerEvents: 'none',
+ transition: "none", // No transition for smooth effect
+ pointerEvents: "none",
}}
>
{i}
-
+
,
);
}
-
+
return (
= ({
inline
key={index}
style={{
- height: '1em',
- width: '0.8em',
- marginLeft: '-0.125em',
- marginRight: '-0.125em',
- position: 'relative',
- isolation: 'isolate',
+ height: "1em",
+ width: "0.8em",
+ marginLeft: "-0.125em",
+ marginRight: "-0.125em",
+ position: "relative",
+ isolation: "isolate",
}}
>
{wheelDigits}
@@ -215,32 +213,32 @@ const CountFx: React.FC = ({
const startValue = previousValueRef.current;
const endValue = value;
const difference = endValue - startValue;
-
+
let startTime: number;
const animate = (timestamp: number) => {
if (!startTime) startTime = timestamp;
-
+
const elapsed = timestamp - startTime;
const progress = Math.min(elapsed / speed, 1);
const easedProgress = getEasing(progress);
-
+
if (effect === "wheel") {
// For wheel animation, we animate each digit independently
- const currentValue = Math.floor(startValue + (difference * easedProgress));
+ const currentValue = Math.floor(startValue + difference * easedProgress);
setDisplayValue(currentValue);
} else if (effect === "smooth") {
// For smooth animation, we track progress and animate digits independently
setAnimationProgress(easedProgress);
- const currentValue = Math.floor(startValue + (difference * easedProgress));
+ const currentValue = Math.floor(startValue + difference * easedProgress);
setDisplayValue(currentValue);
} else {
// Simple animation
- const currentValue = startValue + (difference * easedProgress);
+ const currentValue = startValue + difference * easedProgress;
const currentStepValue = Math.floor(currentValue);
setDisplayValue(currentStepValue);
}
-
+
if (progress < 1) {
animationRef.current = requestAnimationFrame(animate);
} else {
@@ -253,7 +251,7 @@ const CountFx: React.FC = ({
if (animationRef.current) {
cancelAnimationFrame(animationRef.current);
}
-
+
animationRef.current = requestAnimationFrame(animate);
return () => {
@@ -274,7 +272,10 @@ const CountFx: React.FC = ({
if (effect === "wheel") {
return (
-
+
{renderWheelDigits(displayValue, value)}
{children}
@@ -283,7 +284,10 @@ const CountFx: React.FC = ({
if (effect === "smooth") {
return (
-
+
{renderSmoothDigits(previousValueRef.current, value, animationProgress)}
{children}
@@ -299,4 +303,4 @@ const CountFx: React.FC = ({
};
CountFx.displayName = "CountFx";
-export { CountFx };
\ No newline at end of file
+export { CountFx };
diff --git a/packages/core/src/components/Cursor.tsx b/packages/core/src/components/Cursor.tsx
index 001d85e..5031ee4 100644
--- a/packages/core/src/components/Cursor.tsx
+++ b/packages/core/src/components/Cursor.tsx
@@ -18,24 +18,24 @@ export const Cursor: React.FC = ({ cursor, elementRef }) => {
useEffect(() => {
const checkTouchDevice = () => {
// Check for touch capability
- const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
+ const hasTouch = "ontouchstart" in window || navigator.maxTouchPoints > 0;
// Check for pointer capability (some devices have both mouse and touch)
- const hasPointer = window.matchMedia('(pointer: fine)').matches;
-
+ const hasPointer = window.matchMedia("(pointer: fine)").matches;
+
// Consider it a touch device if it has touch but no fine pointer (mouse)
setIsTouchDevice(hasTouch && !hasPointer);
};
checkTouchDevice();
-
+
// Listen for changes in pointer capability (e.g., when external mouse is connected)
- const mediaQuery = window.matchMedia('(pointer: fine)');
+ const mediaQuery = window.matchMedia("(pointer: fine)");
const handlePointerChange = () => checkTouchDevice();
-
- mediaQuery.addEventListener('change', handlePointerChange);
-
+
+ mediaQuery.addEventListener("change", handlePointerChange);
+
return () => {
- mediaQuery.removeEventListener('change', handlePointerChange);
+ mediaQuery.removeEventListener("change", handlePointerChange);
};
}, []);
@@ -50,7 +50,7 @@ export const Cursor: React.FC = ({ cursor, elementRef }) => {
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
}
-
+
// Schedule the update for the next animation frame
animationFrameId = requestAnimationFrame(() => {
setMousePosition({ x: e.clientX, y: e.clientY });
@@ -67,9 +67,9 @@ export const Cursor: React.FC = ({ cursor, elementRef }) => {
const element = elementRef.current;
if (element) {
- element.addEventListener('mouseenter', handleMouseEnter);
- element.addEventListener('mouseleave', handleMouseLeave);
- document.addEventListener('mousemove', handleMouseMove);
+ element.addEventListener("mouseenter", handleMouseEnter);
+ element.addEventListener("mouseleave", handleMouseLeave);
+ document.addEventListener("mousemove", handleMouseMove);
}
return () => {
@@ -77,10 +77,10 @@ export const Cursor: React.FC = ({ cursor, elementRef }) => {
cancelAnimationFrame(animationFrameId);
}
if (element) {
- element.removeEventListener('mouseenter', handleMouseEnter);
- element.removeEventListener('mouseleave', handleMouseLeave);
+ element.removeEventListener("mouseenter", handleMouseEnter);
+ element.removeEventListener("mouseleave", handleMouseLeave);
}
- document.removeEventListener('mousemove', handleMouseMove);
+ document.removeEventListener("mousemove", handleMouseMove);
};
}, [cursor, elementRef, isTouchDevice]);
@@ -88,22 +88,22 @@ export const Cursor: React.FC = ({ cursor, elementRef }) => {
if (isTouchDevice || !isHovering) return null;
return createPortal(
-
{cursor}
,
- document.body
+ document.body,
);
};
Cursor.displayName = "Cursor";
-export default Cursor;
\ No newline at end of file
+export default Cursor;
diff --git a/packages/core/src/components/DateInput.tsx b/packages/core/src/components/DateInput.tsx
index 187d08c..83ea272 100644
--- a/packages/core/src/components/DateInput.tsx
+++ b/packages/core/src/components/DateInput.tsx
@@ -94,10 +94,10 @@ export const DateInput: React.FC = ({
}
dropdown={
, "onChange"> {
@@ -78,45 +93,52 @@ const DatePicker = forwardRef(
const [isReady, setIsReady] = useState(false);
const [hoveredDate, setHoveredDate] = useState(null);
- const [currentMonth, setCurrentMonth] = useState(value ? value.getMonth() : today.getMonth());
- const [currentYear, setCurrentYear] = useState(value ? value.getFullYear() : today.getFullYear());
+ const [currentMonth, setCurrentMonth] = useState(
+ value ? value.getMonth() : today.getMonth(),
+ );
+ const [currentYear, setCurrentYear] = useState(
+ value ? value.getFullYear() : today.getFullYear(),
+ );
// Calculate the initial focused index based on the selected date
const calculateInitialFocusedIndex = useCallback(() => {
if (!selectedDate || isTimeSelector) return 0;
-
+
// Find the exact button that matches the selected date
- const container = document.querySelector('[data-role="dropdown-portal"]') ||
- document.querySelector('[data-dropdown-id]') ||
- document.activeElement?.closest('[data-role="dropdown-portal"]') ||
- document.activeElement?.closest('[data-role="dropdown-wrapper"]') ||
- document.body;
-
+ const container =
+ document.querySelector('[data-role="dropdown-portal"]') ||
+ document.querySelector("[data-dropdown-id]") ||
+ document.activeElement?.closest('[data-role="dropdown-portal"]') ||
+ document.activeElement?.closest('[data-role="dropdown-wrapper"]') ||
+ document.body;
+
if (container) {
- const enabledButtons = Array.from(container.querySelectorAll('button[data-value]:not([disabled])'));
- const selectedButtonIndex = enabledButtons.findIndex(button => {
- const buttonDate = new Date(button.getAttribute('data-value') || '');
+ const enabledButtons = Array.from(
+ container.querySelectorAll("button[data-value]:not([disabled])"),
+ );
+ const selectedButtonIndex = enabledButtons.findIndex((button) => {
+ const buttonDate = new Date(button.getAttribute("data-value") || "");
return buttonDate.getTime() === selectedDate.getTime();
});
-
+
if (selectedButtonIndex !== -1) {
return selectedButtonIndex;
}
}
-
+
// Fallback to day-based calculation
const selectedDay = selectedDate.getDate();
const firstDayOfWeek = new Date(currentYear, currentMonth, 1).getDay();
const offset = firstDayOfWeek;
const dayIndex = offset + selectedDay - 1;
-
+
return Math.max(0, dayIndex);
}, [selectedDate, isTimeSelector, currentMonth, currentYear]);
// Calculate the total number of days to display in the grid
const calculateTotalDays = () => {
const daysInMonth = new Date(currentYear, currentMonth + 1, 0).getDate();
-
+
// Since we're only selecting enabled buttons (current month days),
// the total is just the number of days in the current month
return daysInMonth;
@@ -138,7 +160,7 @@ const DatePicker = forwardRef(
useEffect(() => {
// Reset calendar sync to ensure proper re-sync
setIsCalendarSynced(false);
-
+
if (value) {
setCurrentMonth(value.getMonth());
setCurrentYear(value.getFullYear());
@@ -169,7 +191,7 @@ const DatePicker = forwardRef(
minutes: value.getMinutes(),
});
setIsPM(value.getHours() >= 12);
-
+
// Update current month/year to match the selected date
setCurrentMonth(value.getMonth());
setCurrentYear(value.getFullYear());
@@ -188,33 +210,38 @@ const DatePicker = forwardRef(
// Effect to ensure proper highlighting when component mounts or selected date changes
useEffect(() => {
if (selectedDate && !isTimeSelector && isReady) {
-
// Only highlight if the current month/year matches the selected date's month/year
- if (selectedDate.getMonth() === currentMonth && selectedDate.getFullYear() === currentYear) {
+ if (
+ selectedDate.getMonth() === currentMonth &&
+ selectedDate.getFullYear() === currentYear
+ ) {
// Small delay to ensure the DOM is ready
const timer = setTimeout(() => {
- const container = document.querySelector('[data-role="dropdown-portal"]') ||
- document.querySelector('[data-dropdown-id]') ||
- document.activeElement?.closest('[data-role="dropdown-portal"]') ||
- document.activeElement?.closest('[data-role="dropdown-wrapper"]') ||
- document.body; // Fallback for standalone DatePicker
+ const container =
+ document.querySelector('[data-role="dropdown-portal"]') ||
+ document.querySelector("[data-dropdown-id]") ||
+ document.activeElement?.closest('[data-role="dropdown-portal"]') ||
+ document.activeElement?.closest('[data-role="dropdown-wrapper"]') ||
+ document.body; // Fallback for standalone DatePicker
if (container) {
// Find the selected date button and focus it
- const enabledButtons = Array.from(container.querySelectorAll('button[data-value]:not([disabled])'));
-
+ const enabledButtons = Array.from(
+ container.querySelectorAll("button[data-value]:not([disabled])"),
+ );
+
// Find the button that matches the selected date
- const selectedButton = enabledButtons.find(button => {
- const buttonDate = new Date(button.getAttribute('data-value') || '');
+ const selectedButton = enabledButtons.find((button) => {
+ const buttonDate = new Date(button.getAttribute("data-value") || "");
return buttonDate.getTime() === selectedDate.getTime();
});
-
+
if (selectedButton) {
// Focus the button without scrolling
(selectedButton as HTMLElement).focus({ preventScroll: true });
}
}
}, 50);
-
+
return () => clearTimeout(timer);
}
}
@@ -289,26 +316,26 @@ const DatePicker = forwardRef(
const currentYearNum = new Date().getFullYear();
const minYear = minDate ? minDate.getFullYear() : currentYearNum - 10;
const maxYear = maxDate ? maxDate.getFullYear() : currentYearNum + 10;
-
+
const years = [];
for (let i = minYear; i <= maxYear; i++) {
years.push(i);
}
return years;
};
-
+
const isMonthDisabled = (monthIndex: number, year: number) => {
if (!minDate && !maxDate) return false;
-
+
const startOfMonth = new Date(year, monthIndex, 1);
const endOfMonth = new Date(year, monthIndex + 1, 0); // Last day of month
-
+
// If the entire month is before the minimum date
if (minDate && endOfMonth < minDate) return true;
-
+
// If the entire month is after the maximum date
if (maxDate && startOfMonth > maxDate) return true;
-
+
return false;
};
@@ -365,7 +392,15 @@ const DatePicker = forwardRef(
fillWidth
weight="default"
variant="tertiary"
- radius={firstDay === 1 ? undefined : i === 0 ? "left" : i === firstDay - 1 ? "right" : "none"}
+ radius={
+ firstDay === 1
+ ? undefined
+ : i === 0
+ ? "left"
+ : i === firstDay - 1
+ ? "right"
+ : "none"
+ }
size={size}
type="button"
disabled
@@ -380,23 +415,27 @@ const DatePicker = forwardRef(
for (let day = 1; day <= daysInMonth; day++) {
// Create date consistently - normalize to midnight in local timezone
const currentDate = new Date(currentYear, currentMonth, day);
- const normalizedCurrentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
-
- const isSelected = selectedDate ? (
- (selectedDate.getDate() === day &&
- selectedDate.getMonth() === currentMonth &&
- selectedDate.getFullYear() === currentYear) ||
- (value instanceof Date && value.getTime() === normalizedCurrentDate.getTime()) ||
- range?.startDate?.getTime() === normalizedCurrentDate.getTime() ||
- range?.endDate?.getTime() === normalizedCurrentDate.getTime()
- ) : false;
+ const normalizedCurrentDate = new Date(
+ currentDate.getFullYear(),
+ currentDate.getMonth(),
+ currentDate.getDate(),
+ );
+
+ const isSelected = selectedDate
+ ? (selectedDate.getDate() === day &&
+ selectedDate.getMonth() === currentMonth &&
+ selectedDate.getFullYear() === currentYear) ||
+ (value instanceof Date && value.getTime() === normalizedCurrentDate.getTime()) ||
+ range?.startDate?.getTime() === normalizedCurrentDate.getTime() ||
+ range?.endDate?.getTime() === normalizedCurrentDate.getTime()
+ : false;
// Check if this date is being hovered
- const isHovered = hoveredDate ? (
- hoveredDate.getDate() === day &&
- hoveredDate.getMonth() === currentMonth &&
- hoveredDate.getFullYear() === currentYear
- ) : false;
+ const isHovered = hoveredDate
+ ? hoveredDate.getDate() === day &&
+ hoveredDate.getMonth() === currentMonth &&
+ hoveredDate.getFullYear() === currentYear
+ : false;
const isFirstInRange =
range?.startDate && currentDate.getTime() === range.startDate.getTime();
@@ -411,31 +450,33 @@ const DatePicker = forwardRef(
// Find consecutive disabled days
let consecutiveDisabledStart = day;
let consecutiveDisabledEnd = day;
-
+
// Look backwards for start of consecutive disabled days
while (consecutiveDisabledStart > 1) {
const prevDate = new Date(currentYear, currentMonth, consecutiveDisabledStart - 1);
- const isPrevDisabled = (minDate && prevDate < minDate) || (maxDate && prevDate > maxDate);
+ const isPrevDisabled =
+ (minDate && prevDate < minDate) || (maxDate && prevDate > maxDate);
if (isPrevDisabled) {
consecutiveDisabledStart--;
} else {
break;
}
}
-
+
// Look forwards for end of consecutive disabled days
while (consecutiveDisabledEnd < daysInMonth) {
const nextDate = new Date(currentYear, currentMonth, consecutiveDisabledEnd + 1);
- const isNextDisabled = (minDate && nextDate < minDate) || (maxDate && nextDate > maxDate);
+ const isNextDisabled =
+ (minDate && nextDate < minDate) || (maxDate && nextDate > maxDate);
if (isNextDisabled) {
consecutiveDisabledEnd++;
} else {
break;
}
}
-
+
const totalConsecutiveDisabled = consecutiveDisabledEnd - consecutiveDisabledStart + 1;
-
+
if (totalConsecutiveDisabled === 1) {
disabledRadius = undefined;
} else if (day === consecutiveDisabledStart) {
@@ -505,7 +546,15 @@ const DatePicker = forwardRef(
fillWidth
weight="default"
variant="tertiary"
- radius={remainingDays === 1 ? undefined : i === 1 ? "left" : i === remainingDays ? "right" : "none"}
+ radius={
+ remainingDays === 1
+ ? undefined
+ : i === 1
+ ? "left"
+ : i === remainingDays
+ ? "right"
+ : "none"
+ }
size={size}
type="button"
disabled
@@ -524,7 +573,7 @@ const DatePicker = forwardRef(
onClick={(event: any) => {
event.preventDefault();
event.stopPropagation();
-
+
// Close any open nested dropdowns when clicking on the DatePicker background
if (isMonthOpen) {
setIsMonthOpen(false);
@@ -556,7 +605,7 @@ const DatePicker = forwardRef(
tabIndex={0}
onClick={() => handleTimeToggle(false)}
onKeyDown={(e) => {
- if (e.key === 'Enter' || e.key === ' ') {
+ if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
handleTimeToggle(false);
}
@@ -593,8 +642,8 @@ const DatePicker = forwardRef(
// Update global tracking for keyboard navigation
if (open) {
// Set this as the last opened dropdown
- (window as any).lastOpenedDropdown = 'month-dropdown';
- } else if ((window as any).lastOpenedDropdown === 'month-dropdown') {
+ (window as any).lastOpenedDropdown = "month-dropdown";
+ } else if ((window as any).lastOpenedDropdown === "month-dropdown") {
(window as any).lastOpenedDropdown = null;
}
}}
@@ -605,23 +654,27 @@ const DatePicker = forwardRef(
event.stopPropagation();
setIsMonthOpen(true);
// Update global tracking
- (window as any).lastOpenedDropdown = 'month-dropdown';
+ (window as any).lastOpenedDropdown = "month-dropdown";
}}
variant="secondary"
size="s"
>
{monthNames[currentMonth]}
-
+
}
dropdown={
- {
event.preventDefault();
event.stopPropagation();
- }}>
+ }}
+ >
{monthNames.map((month, index) => {
const monthDisabled = isMonthDisabled(index, currentYear);
return (
@@ -629,7 +682,11 @@ const DatePicker = forwardRef(
key={month}
value={index.toString()}
disabled={monthDisabled}
- label={{month}}
+ label={
+
+ {month}
+
+ }
selected={index === currentMonth}
onClick={(value) => {
if (!monthDisabled) {
@@ -646,7 +703,7 @@ const DatePicker = forwardRef(
}
data-dropdown-id="month-dropdown"
/>
-
+
(
// Update global tracking for keyboard navigation
if (open) {
// Set this as the last opened dropdown
- (window as any).lastOpenedDropdown = 'year-dropdown';
- } else if ((window as any).lastOpenedDropdown === 'year-dropdown') {
+ (window as any).lastOpenedDropdown = "year-dropdown";
+ } else if ((window as any).lastOpenedDropdown === "year-dropdown") {
(window as any).lastOpenedDropdown = null;
}
}}
@@ -674,18 +731,20 @@ const DatePicker = forwardRef(
event.stopPropagation();
setIsYearOpen(true);
// Update global tracking
- (window as any).lastOpenedDropdown = 'year-dropdown';
+ (window as any).lastOpenedDropdown = "year-dropdown";
}}
>
{currentYear.toString()}
-
+
}
dropdown={
- {
event.preventDefault();
event.stopPropagation();
@@ -693,15 +752,20 @@ const DatePicker = forwardRef(
>
{generateYearOptions().map((year) => {
// Check if all months in this year are disabled
- const allMonthsDisabled = Array.from({ length: 12 }, (_, i) => i)
- .every(month => isMonthDisabled(month, year));
-
+ const allMonthsDisabled = Array.from({ length: 12 }, (_, i) => i).every(
+ (month) => isMonthDisabled(month, year),
+ );
+
return (
}
+ label={
+
+ {year}
+
+ }
selected={year === currentYear}
onClick={(value) => {
if (!allMonthsDisabled) {
@@ -725,7 +789,7 @@ const DatePicker = forwardRef(
)}
- {nextMonth && (
+ {nextMonth && (
(
speed={250}
>
{isTimeSelector ? (
-
+
(
/>
+ ) : isMonthOpen || isYearOpen ? (
+
+ {dayNames.map((day) => (
+
+ {day}
+
+ ))}
+ {renderCalendarGrid()}
+
) : (
- isMonthOpen || isYearOpen ? (
-
- {dayNames.map((day) => (
-
- {day}
-
- ))}
- {renderCalendarGrid()}
-
- ) : (
- isCalendarSynced && (
- {
- // Find the actual button element at this index and click it
- // Try multiple selectors for different scenarios (dropdown vs standalone)
- const container = document.querySelector('[data-role="dropdown-portal"]') ||
- document.querySelector('[data-dropdown-id]') ||
- document.activeElement?.closest('[data-role="dropdown-portal"]') ||
- document.activeElement?.closest('[data-role="dropdown-wrapper"]') ||
- document.body; // Fallback for standalone DatePicker
- if (container) {
- const buttons = Array.from(container.querySelectorAll('button[data-value]:not([disabled])'));
- if (buttons[index]) {
- (buttons[index] as HTMLElement).click();
- }
+ isCalendarSynced && (
+ {
+ // Find the actual button element at this index and click it
+ // Try multiple selectors for different scenarios (dropdown vs standalone)
+ const container =
+ document.querySelector('[data-role="dropdown-portal"]') ||
+ document.querySelector("[data-dropdown-id]") ||
+ document.activeElement?.closest('[data-role="dropdown-portal"]') ||
+ document.activeElement?.closest('[data-role="dropdown-wrapper"]') ||
+ document.body; // Fallback for standalone DatePicker
+ if (container) {
+ const buttons = Array.from(
+ container.querySelectorAll("button[data-value]:not([disabled])"),
+ );
+ if (buttons[index]) {
+ (buttons[index] as HTMLElement).click();
}
- }}
- onFocusChange={(index) => {
- // Let React handle highlighting through props only
- // No DOM manipulation needed
- }}
- >
-
- {dayNames.map((day) => (
-
- {day}
-
- ))}
- {renderCalendarGrid()}
-
-
- )
+ }
+ }}
+ onFocusChange={(index) => {
+ // Let React handle highlighting through props only
+ // No DOM manipulation needed
+ }}
+ >
+
+ {dayNames.map((day) => (
+
+ {day}
+
+ ))}
+ {renderCalendarGrid()}
+
+
)
)}
diff --git a/packages/core/src/components/Dialog.tsx b/packages/core/src/components/Dialog.tsx
index 349cc7a..4bcfd4e 100644
--- a/packages/core/src/components/Dialog.tsx
+++ b/packages/core/src/components/Dialog.tsx
@@ -191,8 +191,9 @@ const Dialog: React.FC = forwardRef(
const handleClickOutside = (event: MouseEvent) => {
if (event.button !== 0) return;
- const isInsideDropdownPortal = (event.target as Element)?.closest('.dropdown-portal') !== null;
-
+ const isInsideDropdownPortal =
+ (event.target as Element)?.closest(".dropdown-portal") !== null;
+
if (isInsideDropdownPortal) {
return;
}
@@ -209,7 +210,7 @@ const Dialog: React.FC = forwardRef(
const timeoutId = setTimeout(() => {
document.addEventListener("mousedown", handleClickOutside, { capture: true });
}, 10);
-
+
return () => {
clearTimeout(timeoutId);
document.removeEventListener("mousedown", handleClickOutside, { capture: true });
diff --git a/packages/core/src/components/Dropdown.tsx b/packages/core/src/components/Dropdown.tsx
index 7eda082..c8f9c08 100644
--- a/packages/core/src/components/Dropdown.tsx
+++ b/packages/core/src/components/Dropdown.tsx
@@ -15,8 +15,10 @@ const Dropdown = forwardRef(
const handleSelect = (event: SyntheticEvent) => {
// Only handle clicks on elements that have a data-value attribute
const target = event.target as HTMLElement;
- const value = target.getAttribute("data-value") || target.closest('[data-value]')?.getAttribute("data-value");
-
+ const value =
+ target.getAttribute("data-value") ||
+ target.closest("[data-value]")?.getAttribute("data-value");
+
if (onSelect && value) {
onSelect(value);
}
diff --git a/packages/core/src/components/DropdownWrapper.tsx b/packages/core/src/components/DropdownWrapper.tsx
index 88ca103..cba1c6f 100644
--- a/packages/core/src/components/DropdownWrapper.tsx
+++ b/packages/core/src/components/DropdownWrapper.tsx
@@ -77,12 +77,12 @@ const DropdownWrapper = forwardRef(
dropdownId: propDropdownId,
disableTriggerClick = false,
},
- ref
+ ref,
) => {
const [internalIsOpen, setInternalIsOpen] = useState(false);
const [mounted, setMounted] = useState(false);
const [focusedIndex, setFocusedIndex] = useState(-1);
-
+
// Use provided dropdownId or generate a unique ID for this dropdown
const dropdownId = useRef(propDropdownId || `dropdown-${dropdownCounter++}`);
@@ -98,11 +98,11 @@ const DropdownWrapper = forwardRef(
if (!isControlled) {
setInternalIsOpen(newIsOpen);
}
-
+
if (newIsOpen) {
// Set this as the last opened dropdown using global variable
(window as any).lastOpenedDropdown = dropdownId.current;
-
+
// Don't automatically focus dropdown content - let natural tab order work
} else {
// Clear the last opened dropdown if this one is closing
@@ -110,7 +110,7 @@ const DropdownWrapper = forwardRef(
(window as any).lastOpenedDropdown = null;
}
}
-
+
onOpenChange?.(newIsOpen);
},
[onOpenChange, isControlled, isNested],
@@ -139,7 +139,7 @@ const DropdownWrapper = forwardRef(
apply({ availableWidth, availableHeight, elements }) {
// Get the width directly from the trigger element when needed
let width = "auto";
-
+
if (fillWidth && triggerRef.current) {
const triggerWidth = triggerRef.current.getBoundingClientRect().width;
width = `${Math.max(triggerWidth, 200)}px`;
@@ -147,7 +147,7 @@ const DropdownWrapper = forwardRef(
Object.assign(elements.floating.style, {
width: width,
- minWidth: minWidth ? `${minWidth}rem` : (fillWidth ? width : undefined),
+ minWidth: minWidth ? `${minWidth}rem` : fillWidth ? width : undefined,
maxWidth: maxWidth ? `${maxWidth}rem` : `${availableWidth}px`,
minHeight: `${Math.min(minHeight || 0)}px`,
maxHeight: `${availableHeight}px`,
@@ -195,7 +195,7 @@ const DropdownWrapper = forwardRef(
if (isOpen && mounted) {
// Store the currently focused element before focusing the dropdown
previouslyFocusedElement.current = document.activeElement;
-
+
// Store current scroll position
const scrollX = window.scrollX;
const scrollY = window.scrollY;
@@ -208,12 +208,12 @@ const DropdownWrapper = forwardRef(
setFocusedIndex(-1);
const focusableElements = dropdownRef.current.querySelectorAll(
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
);
if (focusableElements.length > 0) {
(focusableElements[0] as HTMLElement).focus({ preventScroll: true });
-
+
// Ensure scroll position is maintained
setTimeout(() => window.scrollTo(scrollX, scrollY), 0);
}
@@ -249,43 +249,48 @@ const DropdownWrapper = forwardRef(
const handleClickOutside = useCallback(
(event: MouseEvent) => {
const target = event.target as HTMLElement;
-
+
// Check if the click is inside the dropdown or the wrapper
const isClickInDropdown = dropdownRef.current && dropdownRef.current.contains(target);
const isClickInWrapper = wrapperRef.current && wrapperRef.current.contains(target);
-
+
// Check if the click is on a dropdown trigger (for nested dropdowns)
- const isClickOnDropdownTrigger = target.closest('.dropdown-trigger') !== null;
-
+ const isClickOnDropdownTrigger = target.closest(".dropdown-trigger") !== null;
+
// Check if the click is on the dropdown portal itself
- const isClickOnDropdownPortal = target.closest('.dropdown-portal') !== null;
-
+ const isClickOnDropdownPortal = target.closest(".dropdown-portal") !== null;
+
// Check if the click is on any dropdown-related element
- const isClickOnDropdownElement = target.closest('[data-role="dropdown-wrapper"]') !== null ||
- target.closest('[data-role="dropdown-portal"]') !== null ||
- target.closest('[data-is-dropdown="true"]') !== null;
+ const isClickOnDropdownElement =
+ target.closest('[data-role="dropdown-wrapper"]') !== null ||
+ target.closest('[data-role="dropdown-portal"]') !== null ||
+ target.closest('[data-is-dropdown="true"]') !== null;
// Only close if the click is outside both the dropdown and the wrapper
// and not on a nested dropdown trigger or dropdown portal
- if (!isClickInDropdown && !isClickInWrapper && !isClickOnDropdownTrigger &&
- !isClickOnDropdownPortal && !isClickOnDropdownElement) {
+ if (
+ !isClickInDropdown &&
+ !isClickInWrapper &&
+ !isClickOnDropdownTrigger &&
+ !isClickOnDropdownPortal &&
+ !isClickOnDropdownElement
+ ) {
handleOpenChange(false);
setFocusedIndex(-1);
} else {
// If click is inside dropdown but not on an option, try to close nested dropdowns
if (isClickInDropdown || isClickOnDropdownPortal) {
-
// Try to close all other dropdown portals
const allPortals = document.querySelectorAll('[data-role="dropdown-portal"]');
-
+
allPortals.forEach((portal, index) => {
if (portal !== dropdownRef.current) {
// Try to find the dropdown wrapper that contains this portal
const wrapper = portal.closest('[data-role="dropdown-wrapper"]');
if (wrapper) {
- const trigger = wrapper.querySelector('.dropdown-trigger');
+ const trigger = wrapper.querySelector(".dropdown-trigger");
if (trigger) {
- console.log('Clicking trigger to close portal dropdown');
+ console.log("Clicking trigger to close portal dropdown");
(trigger as HTMLElement).click();
}
}
@@ -300,8 +305,10 @@ const DropdownWrapper = forwardRef(
const handleFocusOut = useCallback(
(event: FocusEvent) => {
// Check if focus moved to the dropdown or stayed in the wrapper
- const isFocusInDropdown = dropdownRef.current && dropdownRef.current.contains(event.relatedTarget as Node);
- const isFocusInWrapper = wrapperRef.current && wrapperRef.current.contains(event.relatedTarget as Node);
+ const isFocusInDropdown =
+ dropdownRef.current && dropdownRef.current.contains(event.relatedTarget as Node);
+ const isFocusInWrapper =
+ wrapperRef.current && wrapperRef.current.contains(event.relatedTarget as Node);
// Only close if focus moved outside both the dropdown and the wrapper
if (!isFocusInDropdown && !isFocusInWrapper) {
@@ -320,9 +327,13 @@ const DropdownWrapper = forwardRef(
// Listen for close-nested-dropdowns events if this is a nested dropdown
const handleCloseNestedDropdowns = () => {
- console.log('Dropdown received close event:', { isNested, isOpen, wrapperRef: currentWrapperRef });
+ console.log("Dropdown received close event:", {
+ isNested,
+ isOpen,
+ wrapperRef: currentWrapperRef,
+ });
if (isNested && isOpen) {
- console.log('Nested dropdown received close event');
+ console.log("Nested dropdown received close event");
handleOpenChange(false);
setFocusedIndex(-1);
}
@@ -332,7 +343,10 @@ const DropdownWrapper = forwardRef(
return () => {
document.removeEventListener("click", handleClickOutside);
- currentWrapperRef?.removeEventListener("focusout", handleFocusOut as unknown as EventListener);
+ currentWrapperRef?.removeEventListener(
+ "focusout",
+ handleFocusOut as unknown as EventListener,
+ );
document.removeEventListener("close-nested-dropdowns", handleCloseNestedDropdowns);
};
}, [handleClickOutside, handleFocusOut, isNested, isOpen, handleOpenChange]);
@@ -340,12 +354,12 @@ const DropdownWrapper = forwardRef(
// Get options from the dropdown
const getOptions = useCallback(() => {
if (!dropdownRef.current) return [];
-
+
return Array.from(
- dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]')
+ dropdownRef.current.querySelectorAll('.option, [role="option"], [data-value]'),
) as HTMLElement[];
}, []);
-
+
// Determine the appropriate navigation layout
const determineNavigationLayout = useCallback((): NavigationLayout => {
// Use the prop if provided, otherwise default to column
@@ -353,12 +367,14 @@ const DropdownWrapper = forwardRef(
return propNavigationLayout;
}
// Default to column layout for most dropdowns
- return 'column';
+ return "column";
}, [propNavigationLayout]);
-
- const [navigationLayout, setNavigationLayout] = useState(propNavigationLayout || 'column');
+
+ const [navigationLayout, setNavigationLayout] = useState(
+ propNavigationLayout || "column",
+ );
const [optionsCount, setOptionsCount] = useState(propOptionsCount || 0);
-
+
// Update options count when dropdown opens or content changes
useEffect(() => {
if (isOpen) {
@@ -369,28 +385,28 @@ const DropdownWrapper = forwardRef(
const options = getOptions();
setOptionsCount(options.length);
}
-
+
// Try to determine the layout based on the dropdown content or props
setNavigationLayout(determineNavigationLayout());
}
}, [isOpen, getOptions, determineNavigationLayout, propOptionsCount]);
-
+
// Handle option selection
const handleOptionSelect = useCallback(
(index: number) => {
const options = getOptions();
if (index >= 0 && index < options.length) {
options[index].click();
-
+
if (closeAfterClick) {
handleOpenChange(false);
setFocusedIndex(-1);
}
}
},
- [getOptions, closeAfterClick, handleOpenChange]
+ [getOptions, closeAfterClick, handleOpenChange],
);
-
+
// Handle focus change
const handleFocusChange = useCallback(
(index: number) => {
@@ -398,12 +414,12 @@ const DropdownWrapper = forwardRef(
const options = getOptions();
if (index >= 0 && index < options.length) {
// Ensure the option is visible
- options[index].scrollIntoView({ block: 'nearest', behavior: 'smooth' });
+ options[index].scrollIntoView({ block: "nearest", behavior: "smooth" });
}
},
- [getOptions]
+ [getOptions],
);
-
+
// Handle keyboard navigation
const handleKeyDown = useCallback(
(e: KeyboardEvent) => {
@@ -427,8 +443,8 @@ const DropdownWrapper = forwardRef(
// Find all focusable elements in the dropdown
const focusableElements = Array.from(
dropdownRef.current.querySelectorAll(
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
- )
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
+ ),
) as HTMLElement[];
if (focusableElements.length === 0) return;
@@ -438,27 +454,29 @@ const DropdownWrapper = forwardRef(
const lastElement = focusableElements[focusableElements.length - 1];
// Handle tab and shift+tab to cycle through focusable elements
- if (e.shiftKey) { // Shift+Tab
+ if (e.shiftKey) {
+ // Shift+Tab
if (document.activeElement === firstElement) {
e.preventDefault();
lastElement.focus();
}
- } else { // Tab
+ } else {
+ // Tab
if (document.activeElement === lastElement) {
e.preventDefault();
firstElement.focus();
}
}
-
+
return;
}
-
+
// If handleArrowNavigation is false, forward keyboard events to the dropdown content
if (!handleArrowNavigation && dropdownRef.current) {
// Let the dropdown content handle arrow keys, enter, space, etc.
return;
}
-
+
// Arrow key navigation will be handled by ArrowNavigation component
// Enter/Space key selection will be handled by ArrowNavigation component
},
@@ -475,12 +493,16 @@ const DropdownWrapper = forwardRef(
}}
className={className}
ref={wrapperRef}
- onClick={disableTriggerClick ? undefined : (e) => {
- if (!isOpen) {
- handleOpenChange(true);
- return;
- }
- }}
+ onClick={
+ disableTriggerClick
+ ? undefined
+ : (e) => {
+ if (!isOpen) {
+ handleOpenChange(true);
+ return;
+ }
+ }
+ }
onKeyDown={handleKeyDown}
tabIndex={-1}
role="button"
@@ -492,14 +514,18 @@ const DropdownWrapper = forwardRef(
ref={triggerRef}
fillWidth={fillWidth}
fitWidth={!fillWidth}
- onClick={disableTriggerClick ? undefined : (e) => {
- // If already open, close on trigger click
- if (isOpen) {
- handleOpenChange(false);
- return;
- }
- handleOpenChange(true);
- }}
+ onClick={
+ disableTriggerClick
+ ? undefined
+ : (e) => {
+ // If already open, close on trigger click
+ if (isOpen) {
+ handleOpenChange(false);
+ return;
+ }
+ handleOpenChange(true);
+ }
+ }
onKeyDown={(e) => {
handleKeyDown(e);
}}
@@ -511,28 +537,121 @@ const DropdownWrapper = forwardRef(
>
{trigger}
- {isOpen && dropdown && isBrowser && createPortal(
- handleOpenChange(false)}
- autoFocus
- restoreFocus
- >
- {handleArrowNavigation ? (
-
+ {isOpen &&
+ dropdown &&
+ isBrowser &&
+ createPortal(
+ handleOpenChange(false)}
+ autoFocus
+ restoreFocus
+ >
+ {handleArrowNavigation ? (
+
+ {
+ // If handleArrowNavigation is false, let all keyboard events pass through
+ if (!handleArrowNavigation) {
+ return;
+ }
+
+ // Let FocusTrap handle Tab key
+ // Let ArrowNavigation handle arrow keys
+ if (
+ e.key !== "Tab" &&
+ e.key !== "ArrowUp" &&
+ e.key !== "ArrowDown" &&
+ e.key !== "ArrowLeft" &&
+ e.key !== "ArrowRight"
+ ) {
+ handleKeyDown(e);
+ }
+ }}
+ onMouseDown={(e) => {
+ // Don't stop propagation - let the document listener handle it
+ // Just prevent default to avoid any unwanted behavior
+ e.preventDefault();
+ }}
+ onPointerDown={(e) => {
+ // Also handle pointer events to ensure touch/pen interactions work correctly
+ e.preventDefault();
+ }}
+ onTouchStart={(e) => {
+ // Handle touch events as well
+ e.preventDefault();
+ }}
+ >
+ {
+ onSelect?.(value);
+ if (closeAfterClick) {
+ handleOpenChange(false);
+ setFocusedIndex(-1);
+ }
+ }}
+ >
+ {React.Children.map(dropdown, (child) => {
+ if (React.isValidElement(child)) {
+ // Only add onClick handler to elements that have data-value or are interactive
+ const childElement = child as React.ReactElement;
+ const hasDataValue =
+ childElement.props["data-value"] ||
+ childElement.props.value ||
+ childElement.type === "button" ||
+ childElement.props.role === "option";
+
+ if (hasDataValue) {
+ // Cast the child element to any to avoid TypeScript errors with unknown props
+ return React.cloneElement(childElement, {
+ onClick: (val: string) => {
+ onSelect?.(val);
+ if (closeAfterClick) {
+ handleOpenChange(false);
+ setFocusedIndex(-1);
+ }
+ },
+ });
+ }
+ // Return the child unchanged if it doesn't need an onClick handler
+ return child;
+ }
+ return child;
+ })}
+
+
+
+ ) : (
(
if (!handleArrowNavigation) {
return;
}
-
+
// Let FocusTrap handle Tab key
- // Let ArrowNavigation handle arrow keys
- if (e.key !== 'Tab' &&
- e.key !== 'ArrowUp' &&
- e.key !== 'ArrowDown' &&
- e.key !== 'ArrowLeft' &&
- e.key !== 'ArrowRight') {
+ if (e.key !== "Tab") {
handleKeyDown(e);
}
}}
@@ -590,96 +704,13 @@ const DropdownWrapper = forwardRef(
}
}}
>
- {React.Children.map(dropdown, (child) => {
- if (React.isValidElement(child)) {
- // Only add onClick handler to elements that have data-value or are interactive
- const childElement = child as React.ReactElement;
- const hasDataValue = childElement.props['data-value'] ||
- childElement.props.value ||
- childElement.type === 'button' ||
- childElement.props.role === 'option';
-
- if (hasDataValue) {
- // Cast the child element to any to avoid TypeScript errors with unknown props
- return React.cloneElement(childElement, {
- onClick: (val: string) => {
- onSelect?.(val);
- if (closeAfterClick) {
- handleOpenChange(false);
- setFocusedIndex(-1);
- }
- },
- });
- }
- // Return the child unchanged if it doesn't need an onClick handler
- return child;
- }
- return child;
- })}
+ {dropdown}
-
- ) : (
- {
- // If handleArrowNavigation is false, let all keyboard events pass through
- if (!handleArrowNavigation) {
- return;
- }
-
- // Let FocusTrap handle Tab key
- if (e.key !== 'Tab') {
- handleKeyDown(e);
- }
- }}
- onMouseDown={(e) => {
- // Don't stop propagation - let the document listener handle it
- // Just prevent default to avoid any unwanted behavior
- e.preventDefault();
- }}
- onPointerDown={(e) => {
- // Also handle pointer events to ensure touch/pen interactions work correctly
- e.preventDefault();
- }}
- onTouchStart={(e) => {
- // Handle touch events as well
- e.preventDefault();
- }}
- >
- {
- onSelect?.(value);
- if (closeAfterClick) {
- handleOpenChange(false);
- setFocusedIndex(-1);
- }
- }}
- >
- {dropdown}
-
-
- )}
-
- ,
- document.body
- )}
+ )}
+ ,
+ document.body,
+ )}
);
},
diff --git a/packages/core/src/components/EmojiPicker.tsx b/packages/core/src/components/EmojiPicker.tsx
index a2088e3..f994789 100644
--- a/packages/core/src/components/EmojiPicker.tsx
+++ b/packages/core/src/components/EmojiPicker.tsx
@@ -1,7 +1,19 @@
"use client";
import { useState, useCallback, useRef, useEffect, KeyboardEvent, useId } from "react";
-import { SegmentedControl, ButtonOption, IconButton, Grid, Scroller, Flex, Text, Input, Icon, Column, Row } from ".";
+import {
+ SegmentedControl,
+ ButtonOption,
+ IconButton,
+ Grid,
+ Scroller,
+ Flex,
+ Text,
+ Input,
+ Icon,
+ Column,
+ Row,
+} from ".";
import { useDebounce } from "../hooks/useDebounce";
type EmojiItem = {
@@ -14,66 +26,67 @@ type EmojiItem = {
type EmojiData = Record;
const fallbackEmojiData: EmojiData = {
- smileys: [
- { char: "๐", description: "grinning face" },
- { char: "๐", description: "grinning face with big eyes" },
- { char: "๐", description: "grinning face with smiling eyes" },
- { char: "๐", description: "beaming face with smiling eyes" },
- { char: "๐", description: "grinning squinting face" },
- { char: "๐
", description: "grinning face with sweat" },
- { char: "๐คฃ", description: "rolling on the floor laughing" },
- { char: "๐", description: "face with tears of joy" },
- ],
- animals: [
- { char: "๐ถ", description: "dog face" },
- { char: "๐ฑ", description: "cat face" },
- { char: "๐ญ", description: "mouse face" },
- { char: "๐ฆ", description: "fox face" },
- ],
- food: [
- { char: "๐", description: "red apple" },
- { char: "๐", description: "pear" },
- { char: "๐", description: "tangerine" },
- { char: "๐", description: "lemon" },
- ],
- activities: [
- { char: "โฝ", description: "soccer ball" },
- { char: "๐", description: "basketball" },
- { char: "๐", description: "american football" },
- { char: "โพ", description: "baseball" },
- ],
- travel: [
- { char: "๐", description: "car" },
- { char: "๐", description: "taxi" },
- { char: "๐", description: "sport utility vehicle" },
- { char: "๐", description: "bus" },
- ],
- objects: [
- { char: "๐ป", description: "laptop" },
- { char: "๐ฑ", description: "mobile phone" },
- { char: "๐ก", description: "light bulb" },
- { char: "๐", description: "magnifying glass" },
- ],
- symbols: [
- { char: "โค๏ธ", description: "red heart" },
- { char: "๐", description: "broken heart" },
- { char: "๐ฏ", description: "hundred points" },
- { char: "โจ", description: "sparkles" },
- ],
- flags: [
- { char: "๐", description: "chequered flag" },
- { char: "๐ฉ", description: "triangular flag" },
- { char: "๐", description: "crossed flags" },
- { char: "๐ด", description: "black flag" },
- ],
+ smileys: [
+ { char: "๐", description: "grinning face" },
+ { char: "๐", description: "grinning face with big eyes" },
+ { char: "๐", description: "grinning face with smiling eyes" },
+ { char: "๐", description: "beaming face with smiling eyes" },
+ { char: "๐", description: "grinning squinting face" },
+ { char: "๐
", description: "grinning face with sweat" },
+ { char: "๐คฃ", description: "rolling on the floor laughing" },
+ { char: "๐", description: "face with tears of joy" },
+ ],
+ animals: [
+ { char: "๐ถ", description: "dog face" },
+ { char: "๐ฑ", description: "cat face" },
+ { char: "๐ญ", description: "mouse face" },
+ { char: "๐ฆ", description: "fox face" },
+ ],
+ food: [
+ { char: "๐", description: "red apple" },
+ { char: "๐", description: "pear" },
+ { char: "๐", description: "tangerine" },
+ { char: "๐", description: "lemon" },
+ ],
+ activities: [
+ { char: "โฝ", description: "soccer ball" },
+ { char: "๐", description: "basketball" },
+ { char: "๐", description: "american football" },
+ { char: "โพ", description: "baseball" },
+ ],
+ travel: [
+ { char: "๐", description: "car" },
+ { char: "๐", description: "taxi" },
+ { char: "๐", description: "sport utility vehicle" },
+ { char: "๐", description: "bus" },
+ ],
+ objects: [
+ { char: "๐ป", description: "laptop" },
+ { char: "๐ฑ", description: "mobile phone" },
+ { char: "๐ก", description: "light bulb" },
+ { char: "๐", description: "magnifying glass" },
+ ],
+ symbols: [
+ { char: "โค๏ธ", description: "red heart" },
+ { char: "๐", description: "broken heart" },
+ { char: "๐ฏ", description: "hundred points" },
+ { char: "โจ", description: "sparkles" },
+ ],
+ flags: [
+ { char: "๐", description: "chequered flag" },
+ { char: "๐ฉ", description: "triangular flag" },
+ { char: "๐", description: "crossed flags" },
+ { char: "๐ด", description: "black flag" },
+ ],
};
-import generatedEmojiData from '../data/emoji-data.json';
+import generatedEmojiData from "../data/emoji-data.json";
import { StyleProps, gridSize } from "../";
-const emojiData: EmojiData = Object.keys(generatedEmojiData).length > 0
- ? generatedEmojiData as EmojiData
- : fallbackEmojiData;
+const emojiData: EmojiData =
+ Object.keys(generatedEmojiData).length > 0
+ ? (generatedEmojiData as EmojiData)
+ : fallbackEmojiData;
export interface EmojiPickerProps extends Omit, "onSelect"> {
onSelect: (emoji: string) => void;
@@ -84,7 +97,15 @@ export interface EmojiPickerProps extends Omit
style?: React.CSSProperties;
}
-const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8", style, ...flex }: EmojiPickerProps) => {
+const EmojiPicker = ({
+ onSelect,
+ onClose,
+ className,
+ background,
+ columns = "8",
+ style,
+ ...flex
+}: EmojiPickerProps) => {
const searchInputId = useId();
const [inputValue, setInputValue] = useState("");
const searchQuery = useDebounce(inputValue, 300);
@@ -94,25 +115,32 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
const getCategoryIcon = (category: string): string => {
switch (category) {
- case 'smileys': return 'smiley';
- case 'animals': return 'paw';
- case 'food': return 'food';
- case 'activities': return 'ball';
- case 'travel': return 'world';
- case 'objects': return 'gift';
- case 'symbols': return 'symbol';
- case 'flags': return 'flag';
- default: return 'smiley';
+ case "smileys":
+ return "smiley";
+ case "animals":
+ return "paw";
+ case "food":
+ return "food";
+ case "activities":
+ return "ball";
+ case "travel":
+ return "world";
+ case "objects":
+ return "gift";
+ case "symbols":
+ return "symbol";
+ case "flags":
+ return "flag";
+ default:
+ return "smiley";
}
};
-
+
const categoryButtons: ButtonOption[] = Object.keys(emojiData).map((category) => ({
value: category,
- children: (
-
- ),
+ children: ,
}));
-
+
const handleEmojiSelect = useCallback(
(emoji: string) => {
onSelect(emoji);
@@ -120,7 +148,7 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
onClose();
}
},
- [onSelect, onClose]
+ [onSelect, onClose],
);
const handleCategoryChange = useCallback((value: string) => {
@@ -132,32 +160,32 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
.flat()
.filter((emoji: EmojiItem) => emoji.description.includes(searchQuery.toLowerCase()))
: emojiData[activeCategory as keyof typeof emojiData] || [];
-
+
// Reset focused index when filtered emojis change
useEffect(() => {
setFocusedEmojiIndex(-1);
}, [filteredEmojis]);
-
+
// Handle keyboard navigation
const handleKeyDown = useCallback(
(e: KeyboardEvent) => {
if (filteredEmojis.length === 0) return;
-
+
// Use provided columns prop for grid navigation
const emojisPerRow = Number(columns) || 6;
-
+
let newIndex = focusedEmojiIndex;
-
+
switch (e.key) {
- case 'ArrowRight':
+ case "ArrowRight":
e.preventDefault();
newIndex = focusedEmojiIndex < filteredEmojis.length - 1 ? focusedEmojiIndex + 1 : 0;
break;
- case 'ArrowLeft':
+ case "ArrowLeft":
e.preventDefault();
newIndex = focusedEmojiIndex > 0 ? focusedEmojiIndex - 1 : filteredEmojis.length - 1;
break;
- case 'ArrowDown':
+ case "ArrowDown":
e.preventDefault();
newIndex = focusedEmojiIndex + emojisPerRow;
if (newIndex >= filteredEmojis.length) {
@@ -166,20 +194,20 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
if (newIndex >= filteredEmojis.length) newIndex = filteredEmojis.length - 1;
}
break;
- case 'ArrowUp':
+ case "ArrowUp":
e.preventDefault();
newIndex = focusedEmojiIndex - emojisPerRow;
if (newIndex < 0) {
// Wrap to the end of the appropriate column
const rowsCount = Math.ceil(filteredEmojis.length / emojisPerRow);
- newIndex = ((rowsCount - 1) * emojisPerRow) + (focusedEmojiIndex % emojisPerRow);
+ newIndex = (rowsCount - 1) * emojisPerRow + (focusedEmojiIndex % emojisPerRow);
if (newIndex >= filteredEmojis.length) {
newIndex = filteredEmojis.length - 1;
}
}
break;
- case 'Enter':
- case ' ':
+ case "Enter":
+ case " ":
if (focusedEmojiIndex >= 0 && focusedEmojiIndex < filteredEmojis.length) {
e.preventDefault();
handleEmojiSelect(filteredEmojis[focusedEmojiIndex].char);
@@ -188,10 +216,10 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
default:
return;
}
-
+
setFocusedEmojiIndex(newIndex);
},
- [filteredEmojis, focusedEmojiIndex, handleEmojiSelect, columns]
+ [filteredEmojis, focusedEmojiIndex, handleEmojiSelect, columns],
);
return (
@@ -216,48 +244,48 @@ const EmojiPicker = ({ onSelect, onClose, className, background, columns = "8",
{filteredEmojis.length > 0 ? (
-
- {filteredEmojis.map((emoji: EmojiItem, index: number) => {
- const isFocused = index === focusedEmojiIndex;
- return (
- handleEmojiSelect(emoji.char)}
- aria-label={emoji.description}
- title={emoji.description}
- style={{
- transform: isFocused ? 'scale(1.05)' : 'scale(1)',
- background: isFocused ? 'var(--neutral-alpha-weak)' : 'transparent',
- transition: 'transform 0.1s ease, outline 0.1s ease'
- }}
- onFocus={() => setFocusedEmojiIndex(index)}
- role="gridcell"
- ref={isFocused ? (el) => el?.focus() : undefined}
- >
- {emoji.char}
-
- );
- })}
-
+
+ {filteredEmojis.map((emoji: EmojiItem, index: number) => {
+ const isFocused = index === focusedEmojiIndex;
+ return (
+ handleEmojiSelect(emoji.char)}
+ aria-label={emoji.description}
+ title={emoji.description}
+ style={{
+ transform: isFocused ? "scale(1.05)" : "scale(1)",
+ background: isFocused ? "var(--neutral-alpha-weak)" : "transparent",
+ transition: "transform 0.1s ease, outline 0.1s ease",
+ }}
+ onFocus={() => setFocusedEmojiIndex(index)}
+ role="gridcell"
+ ref={isFocused ? (el) => el?.focus() : undefined}
+ >
+ {emoji.char}
+
+ );
+ })}
+
) : (
No results found
)}
-
+
{!searchQuery && (
, 'dropdown'> {
+export interface EmojiPickerDropdownProps
+ extends Omit, "dropdown"> {
onSelect: (emoji: string) => void;
background?: StyleProps["background"];
columns?: gridSize;
diff --git a/packages/core/src/components/Feedback.tsx b/packages/core/src/components/Feedback.tsx
index bcf7d56..4ba3e9f 100644
--- a/packages/core/src/components/Feedback.tsx
+++ b/packages/core/src/components/Feedback.tsx
@@ -92,7 +92,12 @@ const Feedback = forwardRef(
)}
{description && (
-
+
{description}
)}
diff --git a/packages/core/src/components/Flex.tsx b/packages/core/src/components/Flex.tsx
index 0e863db..55ba7c8 100644
--- a/packages/core/src/components/Flex.tsx
+++ b/packages/core/src/components/Flex.tsx
@@ -1,10 +1,23 @@
import { forwardRef } from "react";
-import { FlexProps, StyleProps, SpacingProps, SizeProps, CommonProps, DisplayProps } from "../interfaces";
+import {
+ FlexProps,
+ StyleProps,
+ SpacingProps,
+ SizeProps,
+ CommonProps,
+ DisplayProps,
+} from "../interfaces";
import { useLayout } from "../contexts";
import { ClientFlex } from "./ClientFlex";
import { ServerFlex } from "./ServerFlex";
-interface SmartFlexProps extends FlexProps, StyleProps, SpacingProps, SizeProps, CommonProps, DisplayProps {
+interface SmartFlexProps
+ extends FlexProps,
+ StyleProps,
+ SpacingProps,
+ SizeProps,
+ CommonProps,
+ DisplayProps {
xl?: any;
l?: any;
m?: any;
@@ -12,102 +25,127 @@ interface SmartFlexProps extends FlexProps, StyleProps, SpacingProps, SizeProps,
xs?: any;
}
-const Flex = forwardRef(({ cursor, xl, l, m, s, xs, style, hide, ...props }, ref) => {
- // Check if component should be hidden based on layout context
- const shouldHide = () => {
- if (!hide && !xl?.hide && !l?.hide && !m?.hide && !s?.hide && !xs?.hide) return false;
-
- try {
- const { isBreakpoint } = useLayout();
- // Get the current breakpoint from the layout context
- const currentBreakpoint = isBreakpoint('xs') ? 'xs' :
- isBreakpoint('s') ? 's' :
- isBreakpoint('m') ? 'm' :
- isBreakpoint('l') ? 'l' : 'xl';
-
- // Max-width CSS-like behavior: check from largest to smallest breakpoint
- // Only apply hiding when hide is explicitly true
-
- // Check xl breakpoint
- if (currentBreakpoint === 'xl') {
- // For xl, we only apply the default hide prop
- return hide === true;
- }
-
- // Check large breakpoint
- if (currentBreakpoint === 'l') {
- // If l.hide is explicitly set, use that value
- if (l?.hide !== undefined) return l.hide === true;
- // Otherwise fall back to default hide prop
- return hide === true;
- }
-
- // Check medium breakpoint
- if (currentBreakpoint === 'm') {
- // If m.hide is explicitly set, use that value
- if (m?.hide !== undefined) return m.hide === true;
- // Otherwise check if l.hide is set (cascading down)
- if (l?.hide !== undefined) return l.hide === true;
- // Finally fall back to default hide prop
- return hide === true;
- }
-
- // Check small breakpoint
- if (currentBreakpoint === 's') {
- // If s.hide is explicitly set, use that value
- if (s?.hide !== undefined) return s.hide === true;
- // Otherwise check if m.hide is set (cascading down)
- if (m?.hide !== undefined) return m.hide === true;
- // Otherwise check if l.hide is set (cascading down)
- if (l?.hide !== undefined) return l.hide === true;
- // Finally fall back to default hide prop
- return hide === true;
- }
-
- // Check xs breakpoint
- if (currentBreakpoint === 'xs') {
- // For xs, we cascade down from all larger breakpoints
- if (s?.hide !== undefined) return s.hide === true;
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
+const Flex = forwardRef(
+ ({ cursor, xl, l, m, s, xs, style, hide, ...props }, ref) => {
+ // Check if component should be hidden based on layout context
+ const shouldHide = () => {
+ if (!hide && !xl?.hide && !l?.hide && !m?.hide && !s?.hide && !xs?.hide) return false;
+
+ try {
+ const { isBreakpoint } = useLayout();
+ // Get the current breakpoint from the layout context
+ const currentBreakpoint = isBreakpoint("xs")
+ ? "xs"
+ : isBreakpoint("s")
+ ? "s"
+ : isBreakpoint("m")
+ ? "m"
+ : isBreakpoint("l")
+ ? "l"
+ : "xl";
+
+ // Max-width CSS-like behavior: check from largest to smallest breakpoint
+ // Only apply hiding when hide is explicitly true
+
+ // Check xl breakpoint
+ if (currentBreakpoint === "xl") {
+ // For xl, we only apply the default hide prop
+ return hide === true;
+ }
+
+ // Check large breakpoint
+ if (currentBreakpoint === "l") {
+ // If l.hide is explicitly set, use that value
+ if (l?.hide !== undefined) return l.hide === true;
+ // Otherwise fall back to default hide prop
+ return hide === true;
+ }
+
+ // Check medium breakpoint
+ if (currentBreakpoint === "m") {
+ // If m.hide is explicitly set, use that value
+ if (m?.hide !== undefined) return m.hide === true;
+ // Otherwise check if l.hide is set (cascading down)
+ if (l?.hide !== undefined) return l.hide === true;
+ // Finally fall back to default hide prop
+ return hide === true;
+ }
+
+ // Check small breakpoint
+ if (currentBreakpoint === "s") {
+ // If s.hide is explicitly set, use that value
+ if (s?.hide !== undefined) return s.hide === true;
+ // Otherwise check if m.hide is set (cascading down)
+ if (m?.hide !== undefined) return m.hide === true;
+ // Otherwise check if l.hide is set (cascading down)
+ if (l?.hide !== undefined) return l.hide === true;
+ // Finally fall back to default hide prop
+ return hide === true;
+ }
+
+ // Check xs breakpoint
+ if (currentBreakpoint === "xs") {
+ // For xs, we cascade down from all larger breakpoints
+ if (s?.hide !== undefined) return s.hide === true;
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ return hide === true;
+ }
+
+ // Default fallback
return hide === true;
+ } catch {
+ // If LayoutProvider is not available, fall back to CSS classes
+ return false;
}
-
- // Default fallback
- return hide === true;
- } catch {
- // If LayoutProvider is not available, fall back to CSS classes
+ };
+
+ // Check if we need client-side functionality
+ const needsClientSide = () => {
+ // Custom cursor requires client-side
+ if (typeof cursor === "object" && cursor) return true;
+
+ // Responsive props require client-side
+ if (xl || l || m || s || xs) return true;
+
+ // Dynamic styles require client-side
+ if (
+ style &&
+ typeof style === "object" &&
+ Object.keys(style as Record).length > 0
+ )
+ return true;
+
return false;
+ };
+
+ // If component should be hidden, don't render it
+ if (shouldHide()) {
+ return null;
}
- };
-
- // Check if we need client-side functionality
- const needsClientSide = () => {
- // Custom cursor requires client-side
- if (typeof cursor === 'object' && cursor) return true;
-
- // Responsive props require client-side
- if (xl || l || m || s || xs) return true;
-
- // Dynamic styles require client-side
- if (style && typeof style === 'object' && Object.keys(style as Record).length > 0) return true;
-
- return false;
- };
-
- // If component should be hidden, don't render it
- if (shouldHide()) {
- return null;
- }
-
- // Use client component if any client-side functionality is needed
- if (needsClientSide()) {
- return ;
- }
-
- // Use server component for static content
- return ;
-});
+
+ // Use client component if any client-side functionality is needed
+ if (needsClientSide()) {
+ return (
+
+ );
+ }
+
+ // Use server component for static content
+ return ;
+ },
+);
Flex.displayName = "Flex";
export { Flex };
diff --git a/packages/core/src/components/FlipFx.tsx b/packages/core/src/components/FlipFx.tsx
index caf095b..a62f239 100644
--- a/packages/core/src/components/FlipFx.tsx
+++ b/packages/core/src/components/FlipFx.tsx
@@ -80,12 +80,15 @@ const FlipFx = forwardRef((props, ref) => {
onFlip?.(!flippedState);
}, [disableClickFlip, autoFlipInterval, flippedState, onFlip]);
- const handleKeyDown = useCallback((event: React.KeyboardEvent) => {
- if (event.key === 'Enter' || event.key === ' ') {
- event.preventDefault();
- handleFlip();
- }
- }, [handleFlip]);
+ const handleKeyDown = useCallback(
+ (event: React.KeyboardEvent) => {
+ if (event.key === "Enter" || event.key === " ") {
+ event.preventDefault();
+ handleFlip();
+ }
+ },
+ [handleFlip],
+ );
return (
((props, ref) => {
{back}
@@ -151,4 +155,4 @@ const FlipFx = forwardRef((props, ref) => {
});
FlipFx.displayName = "FlipFx";
-export { FlipFx };
\ No newline at end of file
+export { FlipFx };
diff --git a/packages/core/src/components/FocusTrap.tsx b/packages/core/src/components/FocusTrap.tsx
index 4b7c789..1a13a99 100644
--- a/packages/core/src/components/FocusTrap.tsx
+++ b/packages/core/src/components/FocusTrap.tsx
@@ -30,12 +30,12 @@ const FocusTrap: React.FC = ({
const internalRef = useRef(null);
const containerRef = externalRef || internalRef;
const previouslyFocusedElement = useRef(null);
-
+
// Store the previously focused element when the trap becomes active
useEffect(() => {
if (active) {
previouslyFocusedElement.current = document.activeElement;
-
+
if (autoFocus) {
// Focus the specified initial element or the first focusable element
if (initialFocusRef && initialFocusRef.current) {
@@ -53,45 +53,52 @@ const FocusTrap: React.FC = ({
} else if (!active && restoreFocus && previouslyFocusedElement.current) {
// When deactivated, return focus to the specified element or the previously focused element
const elementToFocus = returnFocusRef?.current || previouslyFocusedElement.current;
- if (elementToFocus && typeof (elementToFocus as HTMLElement).focus === 'function') {
+ if (elementToFocus && typeof (elementToFocus as HTMLElement).focus === "function") {
(elementToFocus as HTMLElement).focus({ preventScroll: true });
}
}
}, [active, autoFocus, initialFocusRef, returnFocusRef, restoreFocus, containerRef]);
-
+
// Handle keyboard events for focus trapping
const handleKeyDown = (e: KeyboardEvent) => {
if (!active) return;
-
+
// Handle escape key
if (e.key === "Escape" && onEscape) {
e.preventDefault();
onEscape();
return;
}
-
+
// Don't handle arrow keys - let ArrowNavigation handle them
- if (e.key === "ArrowUp" || e.key === "ArrowDown" || e.key === "ArrowLeft" || e.key === "ArrowRight") {
+ if (
+ e.key === "ArrowUp" ||
+ e.key === "ArrowDown" ||
+ e.key === "ArrowLeft" ||
+ e.key === "ArrowRight"
+ ) {
return;
}
-
+
// Handle tab key for focus trapping
if (e.key === "Tab" && containerRef.current) {
const focusableElements = getFocusableElements(containerRef.current);
-
+
if (focusableElements.length === 0) return;
-
+
// Get the first and last focusable elements
const firstElement = focusableElements[0];
const lastElement = focusableElements[focusableElements.length - 1];
-
+
// Handle tab and shift+tab to cycle through focusable elements
- if (e.shiftKey) { // Shift+Tab
+ if (e.shiftKey) {
+ // Shift+Tab
if (document.activeElement === firstElement) {
e.preventDefault();
lastElement.focus({ preventScroll: true });
}
- } else { // Tab
+ } else {
+ // Tab
if (document.activeElement === lastElement) {
e.preventDefault();
firstElement.focus({ preventScroll: true });
@@ -99,16 +106,16 @@ const FocusTrap: React.FC = ({
}
}
};
-
+
// Helper function to get all focusable elements within a container
const getFocusableElements = (container: HTMLElement): HTMLElement[] => {
return Array.from(
container.querySelectorAll(
- 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
- )
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
+ ),
) as HTMLElement[];
};
-
+
return (
(({ cursor, xl, l, m, s, xs, style, hide, ...props }, ref) => {
- // Check if component should be hidden based on layout context
- const shouldHide = () => {
- if (!hide && !xl?.hide && !l?.hide && !m?.hide && !s?.hide && !xs?.hide) return false;
-
- try {
- const { isBreakpoint } = useLayout();
- // Get the current breakpoint from the layout context
- const currentBreakpoint = isBreakpoint('xs') ? 'xs' :
- isBreakpoint('s') ? 's' :
- isBreakpoint('m') ? 'm' :
- isBreakpoint('l') ? 'l' : 'xl';
-
- // Max-width CSS-like behavior: check from largest to smallest breakpoint
- // Only apply hiding when hide is explicitly true
-
- // Check xl breakpoint
- if (currentBreakpoint === 'xl') {
- // For xl, we only apply the default hide prop
- return hide === true;
- }
-
- // Check large breakpoint
- if (currentBreakpoint === 'l') {
- // If l.hide is explicitly set, use that value
- if (l?.hide !== undefined) return l.hide === true;
- // Otherwise fall back to default hide prop
- return hide === true;
- }
-
- // Check medium breakpoint
- if (currentBreakpoint === 'm') {
- // If m.hide is explicitly set, use that value
- if (m?.hide !== undefined) return m.hide === true;
- // Otherwise check if l.hide is set (cascading down)
- if (l?.hide !== undefined) return l.hide === true;
- // Finally fall back to default hide prop
- return hide === true;
- }
-
- // Check small breakpoint
- if (currentBreakpoint === 's') {
- // If s.hide is explicitly set, use that value
- if (s?.hide !== undefined) return s.hide === true;
- // Otherwise check if m.hide is set (cascading down)
- if (m?.hide !== undefined) return m.hide === true;
- // Otherwise check if l.hide is set (cascading down)
- if (l?.hide !== undefined) return l.hide === true;
- // Finally fall back to default hide prop
- return hide === true;
- }
-
- // Check xs breakpoint
- if (currentBreakpoint === 'xs') {
- // For xs, we cascade down from all larger breakpoints
- if (s?.hide !== undefined) return s.hide === true;
- if (m?.hide !== undefined) return m.hide === true;
- if (l?.hide !== undefined) return l.hide === true;
+const Grid = forwardRef(
+ ({ cursor, xl, l, m, s, xs, style, hide, ...props }, ref) => {
+ // Check if component should be hidden based on layout context
+ const shouldHide = () => {
+ if (!hide && !xl?.hide && !l?.hide && !m?.hide && !s?.hide && !xs?.hide) return false;
+
+ try {
+ const { isBreakpoint } = useLayout();
+ // Get the current breakpoint from the layout context
+ const currentBreakpoint = isBreakpoint("xs")
+ ? "xs"
+ : isBreakpoint("s")
+ ? "s"
+ : isBreakpoint("m")
+ ? "m"
+ : isBreakpoint("l")
+ ? "l"
+ : "xl";
+
+ // Max-width CSS-like behavior: check from largest to smallest breakpoint
+ // Only apply hiding when hide is explicitly true
+
+ // Check xl breakpoint
+ if (currentBreakpoint === "xl") {
+ // For xl, we only apply the default hide prop
+ return hide === true;
+ }
+
+ // Check large breakpoint
+ if (currentBreakpoint === "l") {
+ // If l.hide is explicitly set, use that value
+ if (l?.hide !== undefined) return l.hide === true;
+ // Otherwise fall back to default hide prop
+ return hide === true;
+ }
+
+ // Check medium breakpoint
+ if (currentBreakpoint === "m") {
+ // If m.hide is explicitly set, use that value
+ if (m?.hide !== undefined) return m.hide === true;
+ // Otherwise check if l.hide is set (cascading down)
+ if (l?.hide !== undefined) return l.hide === true;
+ // Finally fall back to default hide prop
+ return hide === true;
+ }
+
+ // Check small breakpoint
+ if (currentBreakpoint === "s") {
+ // If s.hide is explicitly set, use that value
+ if (s?.hide !== undefined) return s.hide === true;
+ // Otherwise check if m.hide is set (cascading down)
+ if (m?.hide !== undefined) return m.hide === true;
+ // Otherwise check if l.hide is set (cascading down)
+ if (l?.hide !== undefined) return l.hide === true;
+ // Finally fall back to default hide prop
+ return hide === true;
+ }
+
+ // Check xs breakpoint
+ if (currentBreakpoint === "xs") {
+ // For xs, we cascade down from all larger breakpoints
+ if (s?.hide !== undefined) return s.hide === true;
+ if (m?.hide !== undefined) return m.hide === true;
+ if (l?.hide !== undefined) return l.hide === true;
+ return hide === true;
+ }
+
+ // Default fallback
return hide === true;
+ } catch {
+ // If LayoutProvider is not available, fall back to CSS classes
+ return false;
}
-
- // Default fallback
- return hide === true;
- } catch {
- // If LayoutProvider is not available, fall back to CSS classes
+ };
+
+ // Check if we need client-side functionality
+ const needsClientSide = () => {
+ // Custom cursor requires client-side
+ if (typeof cursor === "object" && cursor) return true;
+
+ // Responsive props require client-side
+ if (xl || l || m || s || xs) return true;
+
+ // Dynamic styles require client-side
+ if (
+ style &&
+ typeof style === "object" &&
+ Object.keys(style as Record).length > 0
+ )
+ return true;
+
return false;
+ };
+
+ // If component should be hidden, don't render it
+ if (shouldHide()) {
+ return null;
}
- };
-
- // Check if we need client-side functionality
- const needsClientSide = () => {
- // Custom cursor requires client-side
- if (typeof cursor === 'object' && cursor) return true;
-
- // Responsive props require client-side
- if (xl || l || m || s || xs) return true;
-
- // Dynamic styles require client-side
- if (style && typeof style === 'object' && Object.keys(style as Record).length > 0) return true;
-
- return false;
- };
-
- // If component should be hidden, don't render it
- if (shouldHide()) {
- return null;
- }
-
- // Use client component if any client-side functionality is needed
- if (needsClientSide()) {
- return ;
- }
-
- // Use server component for static content
- return ;
-});
+
+ // Use client component if any client-side functionality is needed
+ if (needsClientSide()) {
+ return (
+
+ );
+ }
+
+ // Use server component for static content
+ return ;
+ },
+);
Grid.displayName = "Grid";
-export { Grid };
\ No newline at end of file
+export { Grid };
diff --git a/packages/core/src/components/HoloFx.tsx b/packages/core/src/components/HoloFx.tsx
index d2fba19..ab77dde 100644
--- a/packages/core/src/components/HoloFx.tsx
+++ b/packages/core/src/components/HoloFx.tsx
@@ -108,7 +108,7 @@ const HoloFx: React.FC = ({ children, shine, burn, texture, ...rest
{children}
= ({ children, shine, burn, texture, ...rest
{children}
= ({ children, shine, burn, texture, ...rest
{children}
(
({ as = "ul", className, children, style, ...props }, ref) => {
if (as === "ol") {
return (
-
+
{children}
);
}
return (
-
+
{children}
);
- }
+ },
);
List.displayName = "List";
-export { List };
\ No newline at end of file
+export { List };
diff --git a/packages/core/src/components/ListItem.tsx b/packages/core/src/components/ListItem.tsx
index 87acc52..4e50081 100644
--- a/packages/core/src/components/ListItem.tsx
+++ b/packages/core/src/components/ListItem.tsx
@@ -14,12 +14,20 @@ const ListItem = forwardRef(
const listItemClass = classNames(styles.listItem, className);
return (
-
+
{children}
);
- }
+ },
);
ListItem.displayName = "ListItem";
-export { ListItem };
\ No newline at end of file
+export { ListItem };
diff --git a/packages/core/src/components/Logo.tsx b/packages/core/src/components/Logo.tsx
index ab0d562..14d356e 100644
--- a/packages/core/src/components/Logo.tsx
+++ b/packages/core/src/components/Logo.tsx
@@ -24,7 +24,7 @@ interface LogoProps extends React.AnchorHTMLAttributes {
href?: string;
dark?: boolean;
light?: boolean;
- brand?: {copy?: boolean; url?: string}
+ brand?: { copy?: boolean; url?: string };
}
const Logo: React.FC = ({
@@ -75,56 +75,56 @@ const Logo: React.FC = ({
);
const { addToast } = useToast();
-
+
const copyIconToClipboard = async () => {
if (!icon) {
addToast({
variant: "danger",
- message: "No icon available to copy"
+ message: "No icon available to copy",
});
return;
}
-
+
try {
const response = await fetch(icon);
const svgText = await response.text();
await navigator.clipboard.writeText(svgText);
-
+
addToast({
variant: "success",
- message: "Icon copied to clipboard as SVG"
+ message: "Icon copied to clipboard as SVG",
});
} catch (error) {
addToast({
variant: "danger",
- message: "Failed to copy icon to clipboard"
+ message: "Failed to copy icon to clipboard",
});
console.error("Error copying icon:", error);
}
};
-
+
const copyWordmarkToClipboard = async () => {
if (!wordmark) {
addToast({
variant: "danger",
- message: "No wordmark available to copy"
+ message: "No wordmark available to copy",
});
return;
}
-
+
try {
const response = await fetch(wordmark);
const svgText = await response.text();
await navigator.clipboard.writeText(svgText);
-
+
addToast({
variant: "success",
- message: "Wordmark copied to clipboard as SVG"
+ message: "Wordmark copied to clipboard as SVG",
});
} catch (error) {
addToast({
variant: "danger",
- message: "Failed to copy wordmark to clipboard"
+ message: "Failed to copy wordmark to clipboard",
});
console.error("Error copying wordmark:", error);
}
@@ -135,17 +135,17 @@ const Logo: React.FC = ({
{brand?.copy && icon && (
- }
+ }
onClick={copyIconToClipboard}
/>
)}
{brand?.copy && wordmark && (
- }
onClick={copyWordmarkToClipboard}
/>
@@ -153,14 +153,14 @@ const Logo: React.FC = ({
{brand?.url && (
<>
-
+
- }
- href={brand.url}
- />
+ }
+ href={brand.url}
+ />
>
)}
@@ -174,7 +174,14 @@ const Logo: React.FC = ({
if (href) {
return (
= ({
};
return enableContext ? (
-
+
{renderLogo()}
- ) : renderLogo();
+ ) : (
+ renderLogo()
+ );
};
Logo.displayName = "Logo";
diff --git a/packages/core/src/components/MasonryGrid.module.scss b/packages/core/src/components/MasonryGrid.module.scss
new file mode 100644
index 0000000..0bdf765
--- /dev/null
+++ b/packages/core/src/components/MasonryGrid.module.scss
@@ -0,0 +1,199 @@
+@use "../styles/breakpoints.scss" as breakpoints;
+
+.columns-1 {
+ column-count: 1;
+}
+
+.columns-2 {
+ column-count: 2;
+}
+
+.columns-3 {
+ column-count: 3;
+}
+
+.columns-4 {
+ column-count: 4;
+}
+
+.columns-5 {
+ column-count: 5;
+}
+
+.columns-6 {
+ column-count: 6;
+}
+
+.columns-7 {
+ column-count: 7;
+}
+
+.columns-8 {
+ column-count: 8;
+}
+
+.columns-9 {
+ column-count: 9;
+}
+
+.columns-10 {
+ column-count: 10;
+}
+
+.columns-11 {
+ column-count: 11;
+}
+
+.columns-12 {
+ column-count: 12;
+}
+
+@include breakpoints.l {
+ .l-columns-1 {
+ column-count: 1;
+ }
+
+ .l-columns-2 {
+ column-count: 2;
+ }
+
+ .l-columns-3 {
+ column-count: 3;
+ }
+
+ .l-columns-4 {
+ column-count: 4;
+ }
+
+ .l-columns-5 {
+ column-count: 5;
+ }
+
+ .l-columns-6 {
+ column-count: 6;
+ }
+
+ .l-columns-7 {
+ column-count: 7;
+ }
+
+ .l-columns-8 {
+ column-count: 8;
+ }
+
+ .l-columns-9 {
+ column-count: 9;
+ }
+
+ .l-columns-10 {
+ column-count: 10;
+ }
+
+ .l-columns-11 {
+ column-count: 11;
+ }
+
+ .l-columns-12 {
+ column-count: 12;
+ }
+}
+
+@include breakpoints.m {
+ .m-columns-1 {
+ column-count: 1;
+ }
+
+ .m-columns-2 {
+ column-count: 2;
+ }
+
+ .m-columns-3 {
+ column-count: 3;
+ }
+
+ .m-columns-4 {
+ column-count: 4;
+ }
+
+ .m-columns-5 {
+ column-count: 5;
+ }
+
+ .m-columns-6 {
+ column-count: 6;
+ }
+
+ .m-columns-7 {
+ column-count: 7;
+ }
+
+ .m-columns-8 {
+ column-count: 8;
+ }
+
+ .m-columns-9 {
+ column-count: 9;
+ }
+
+ .m-columns-10 {
+ column-count: 10;
+ }
+
+ .m-columns-11 {
+ column-count: 11;
+ }
+
+ .m-columns-12 {
+ column-count: 12;
+ }
+}
+
+@include breakpoints.s {
+ .s-columns-1 {
+ column-count: 1;
+ }
+
+ .s-columns-2 {
+ column-count: 2;
+ }
+
+ .s-columns-3 {
+ column-count: 3;
+ }
+
+ .s-columns-4 {
+ column-count: 4;
+ }
+
+ .s-columns-5 {
+ column-count: 5;
+ }
+
+ .s-columns-6 {
+ column-count: 6;
+ }
+
+ .s-columns-7 {
+ column-count: 7;
+ }
+
+ .s-columns-8 {
+ column-count: 8;
+ }
+
+ .s-columns-9 {
+ column-count: 9;
+ }
+
+ .s-columns-10 {
+ column-count: 10;
+ }
+
+ .s-columns-11 {
+ column-count: 11;
+ }
+
+ .s-columns-12 {
+ column-count: 12;
+ }
+}
\ No newline at end of file
diff --git a/packages/core/src/components/MasonryGrid.tsx b/packages/core/src/components/MasonryGrid.tsx
new file mode 100644
index 0000000..50f326d
--- /dev/null
+++ b/packages/core/src/components/MasonryGrid.tsx
@@ -0,0 +1,92 @@
+import React, { forwardRef } from "react";
+import type { CSSProperties, ReactNode } from "react";
+import { SpacingToken } from "../types";
+import { Column } from "./Column";
+import classNames from "classnames";
+import styles from "./MasonryGrid.module.scss";
+import { Flex } from "./Flex";
+
+function parseToken(value: SpacingToken | "-1" | number | undefined, type: "width" | "height") {
+ if (value === undefined) return undefined;
+ if (typeof value === "number") return `${value}rem`;
+ if (
+ [
+ "0",
+ "1",
+ "2",
+ "4",
+ "8",
+ "12",
+ "16",
+ "20",
+ "24",
+ "32",
+ "40",
+ "48",
+ "56",
+ "64",
+ "80",
+ "104",
+ "128",
+ "160",
+ ].includes(value)
+ ) {
+ return `var(--static-space-${value})`;
+ }
+ if (["xs", "s", "m", "l", "xl"].includes(value)) {
+ return `var(--responsive-${type}-${value})`;
+ }
+ return undefined;
+}
+
+interface MasonryGridProps extends React.ComponentProps {
+ children: ReactNode;
+ gap?: SpacingToken | "-1" | undefined;
+ columns?: number;
+ style?: CSSProperties;
+ className?: string;
+}
+
+const MasonryGrid = forwardRef(
+ ({ children, gap = "8", columns = 3, style, className, l, m, s, ...flex }, ref) => {
+ const gapValue = parseToken(gap, "width") ?? "var(--static-space-8)";
+
+ const classes = classNames(
+ columns && styles[`columns-${columns}`],
+ l?.columns && styles[`l-columns-${l.columns}`],
+ m?.columns && styles[`m-columns-${m.columns}`],
+ s?.columns && styles[`s-columns-${s.columns}`],
+ className,
+ );
+
+ return (
+
+ {React.Children.map(children, (child, idx) => (
+
+ {child}
+
+ ))}
+
+ );
+ },
+);
+
+export { MasonryGrid };
+MasonryGrid.displayName = "MasonryGrid";
diff --git a/packages/core/src/components/Media.tsx b/packages/core/src/components/Media.tsx
index 9b51836..bdfc49b 100644
--- a/packages/core/src/components/Media.tsx
+++ b/packages/core/src/components/Media.tsx
@@ -187,7 +187,16 @@ const Media: React.FC = ({
)}
{caption && (
-
+
{caption}
)}
diff --git a/packages/core/src/components/OgCard.tsx b/packages/core/src/components/OgCard.tsx
index a39611b..d4157f8 100644
--- a/packages/core/src/components/OgCard.tsx
+++ b/packages/core/src/components/OgCard.tsx
@@ -63,7 +63,7 @@ const getFaviconUrl = (url: string | undefined, proxyFn?: (url: string) => strin
const domain = urlObj.hostname;
const faviconSourceUrl = `https://www.google.com/s2/favicons?domain=${domain}&sz=64`;
-
+
// Use the provided proxy function or return the favicon URL directly
return proxyFn ? proxyFn(faviconSourceUrl) : faviconSourceUrl;
} catch (error) {
@@ -85,39 +85,47 @@ const OgCard = ({
cardUrl,
...card
}: OgCardProps) => {
- const { ogData: fetchedOgData, loading } = useOgData(url || null, serviceConfig.fetchOgUrl, serviceConfig.proxyOgUrl);
+ const { ogData: fetchedOgData, loading } = useOgData(
+ url || null,
+ serviceConfig.fetchOgUrl,
+ serviceConfig.proxyOgUrl,
+ );
const data = providedOgData || fetchedOgData;
-
+
// Resolve content based on props
const resolvedTitle = useMemo(() => {
if (title === false) return null;
- if (typeof title === 'string') return title;
+ if (typeof title === "string") return title;
return data?.title;
}, [title, data?.title]);
const resolvedDescription = useMemo(() => {
if (description === false) return null;
- if (typeof description === 'string') return description;
+ if (typeof description === "string") return description;
return data?.description;
}, [description, data?.description]);
const resolvedFavicon = useMemo(() => {
if (favicon === false) return null;
- if (typeof favicon === 'string') return favicon;
- return data?.faviconUrl || (data?.url ? getFaviconUrl(data.url, serviceConfig.proxyFaviconUrl) : "");
+ if (typeof favicon === "string") return favicon;
+ return (
+ data?.faviconUrl || (data?.url ? getFaviconUrl(data.url, serviceConfig.proxyFaviconUrl) : "")
+ );
}, [favicon, data?.faviconUrl, data?.url, serviceConfig.proxyFaviconUrl]);
const resolvedImage = useMemo(() => {
if (image === false) return null;
- if (typeof image === 'string') return image;
- return data?.image ? (serviceConfig.proxyImageUrl
- ? serviceConfig.proxyImageUrl(data.image)
- : data.image) : "";
+ if (typeof image === "string") return image;
+ return data?.image
+ ? serviceConfig.proxyImageUrl
+ ? serviceConfig.proxyImageUrl(data.image)
+ : data.image
+ : "";
}, [image, data?.image, serviceConfig.proxyImageUrl]);
const resolvedUrl = useMemo(() => {
if (cardUrl === false) return null;
- if (typeof cardUrl === 'string') return cardUrl;
+ if (typeof cardUrl === "string") return cardUrl;
return data?.url;
}, [cardUrl, data?.url]);
@@ -155,7 +163,12 @@ const OgCard = ({
src={proxiedImageUrl}
/>
)}
-
+
{resolvedFavicon !== null && (
- {resolvedUrl && (
- loading ? (
+ {resolvedUrl &&
+ (loading ? (
) : (
{formatDisplayUrl(resolvedUrl)}
- )
- )}
+ ))}
)}
- {resolvedTitle !== null && (loading ? (
-
- ) : resolvedTitle && (
-
- {resolvedTitle}
-
- ))}
- {resolvedDescription !== null && (
- loading ? (
+ {resolvedTitle !== null &&
+ (loading ? (
+
+ ) : (
+ resolvedTitle && (
+
+ {resolvedTitle}
+
+ )
+ ))}
+ {resolvedDescription !== null &&
+ (loading ? (
) : resolvedDescription ? (
-
+
{resolvedDescription}
- ) : null
- )}
+ ) : null)}
diff --git a/packages/core/src/components/Option.tsx b/packages/core/src/components/Option.tsx
index 2155489..5776faa 100644
--- a/packages/core/src/components/Option.tsx
+++ b/packages/core/src/components/Option.tsx
@@ -47,38 +47,39 @@ const Option = forwardRef(
const [isHighlightedByClass, setIsHighlightedByClass] = useState(false);
// Use a more generic type that works with ElementType
const elementRef = useRef(null);
-
+
// Check for highlighted class applied by ArrowNavigation
useEffect(() => {
if (!elementRef.current) return;
-
+
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
- if (mutation.type === 'attributes' &&
- (mutation.attributeName === 'class' ||
- mutation.attributeName === 'data-highlighted')) {
+ if (
+ mutation.type === "attributes" &&
+ (mutation.attributeName === "class" || mutation.attributeName === "data-highlighted")
+ ) {
if (mutation.target instanceof HTMLElement) {
const element = mutation.target;
setIsHighlightedByClass(
- element.classList.contains('highlighted') ||
- element.getAttribute('data-highlighted') === 'true'
+ element.classList.contains("highlighted") ||
+ element.getAttribute("data-highlighted") === "true",
);
}
}
});
});
-
- observer.observe(elementRef.current, {
+
+ observer.observe(elementRef.current, {
attributes: true,
- attributeFilter: ['class', 'data-highlighted']
+ attributeFilter: ["class", "data-highlighted"],
});
-
+
// Initial check
setIsHighlightedByClass(
- elementRef.current.classList.contains('highlighted') ||
- elementRef.current.getAttribute('data-highlighted') === 'true'
+ elementRef.current.classList.contains("highlighted") ||
+ elementRef.current.getAttribute("data-highlighted") === "true",
);
-
+
return () => observer.disconnect();
}, []);
return (
@@ -86,7 +87,7 @@ const Option = forwardRef(
tabIndex={tabIndex}
ref={(el) => {
// Forward the ref
- if (typeof ref === 'function') {
+ if (typeof ref === "function") {
ref(el as HTMLDivElement);
} else if (ref) {
ref.current = el as HTMLDivElement;
diff --git a/packages/core/src/components/Particle.tsx b/packages/core/src/components/Particle.tsx
index ff8a97b..ce0cd2b 100644
--- a/packages/core/src/components/Particle.tsx
+++ b/packages/core/src/components/Particle.tsx
@@ -156,16 +156,7 @@ const Particle = React.forwardRef(
initialPositions.delete(particleEl);
});
};
- }, [
- color,
- size,
- speed,
- interactive,
- interactionRadius,
- opacity,
- density,
- containerRef,
- ]);
+ }, [color, size, speed, interactive, interactionRadius, opacity, density, containerRef]);
return (
(
);
Particle.displayName = "Particle";
-export { Particle };
\ No newline at end of file
+export { Particle };
diff --git a/packages/core/src/components/ProgressBar.tsx b/packages/core/src/components/ProgressBar.tsx
index 9468836..4689a51 100644
--- a/packages/core/src/components/ProgressBar.tsx
+++ b/packages/core/src/components/ProgressBar.tsx
@@ -27,20 +27,19 @@ const ProgressBar = forwardRef(
style,
...rest
},
- ref
+ ref,
) => {
- const percent = Math.max(
- 0,
- Math.min(100, ((value - min) / (max - min)) * 100)
- );
+ const percent = Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100));
return (
+ {...rest}
+ >
(
radius="full"
/>
- {label && %}
+ {label && (
+
+ %
+
+ )}
);
- }
+ },
);
ProgressBar.displayName = "ProgressBar";
diff --git a/packages/core/src/components/RevealFx.tsx b/packages/core/src/components/RevealFx.tsx
index e300e2c..3c7794d 100644
--- a/packages/core/src/components/RevealFx.tsx
+++ b/packages/core/src/components/RevealFx.tsx
@@ -39,7 +39,7 @@ const RevealFx = forwardRef(
if (typeof speed === "number") {
return speed;
}
-
+
switch (speed) {
case "fast":
return 1000;
diff --git a/packages/core/src/components/Select.tsx b/packages/core/src/components/Select.tsx
index e1998db..f8f7b45 100644
--- a/packages/core/src/components/Select.tsx
+++ b/packages/core/src/components/Select.tsx
@@ -57,9 +57,9 @@ const Select = forwardRef(
) => {
const [isFocused, setIsFocused] = useState(false);
const [isFilled, setIsFilled] = useState(false);
-
+
const [internalValue, setInternalValue] = useState(multiple ? [] : value);
-
+
useEffect(() => {
if (value !== undefined) {
setInternalValue(value);
@@ -81,10 +81,10 @@ const Select = forwardRef(
setIsFocused(true);
setIsDropdownOpen(true);
// Set highlighted index to first option or current selection
- const currentIndex = options.findIndex(option =>
- multiple
+ const currentIndex = options.findIndex((option) =>
+ multiple
? Array.isArray(currentValue) && currentValue.includes(option.value)
- : option.value === currentValue
+ : option.value === currentValue,
);
};
@@ -92,9 +92,9 @@ const Select = forwardRef(
// Don't close dropdown if focus is moving to an element within the select component
if (selectRef.current && !selectRef.current.contains(event.relatedTarget as Node)) {
// Only close if we're not moving to the dropdown or its children
- const isMovingToDropdown = event.relatedTarget &&
- (event.relatedTarget as Element).closest('[data-dropdown]');
-
+ const isMovingToDropdown =
+ event.relatedTarget && (event.relatedTarget as Element).closest("[data-dropdown]");
+
if (!isMovingToDropdown) {
setIsFocused(false);
setIsDropdownOpen(false);
@@ -106,7 +106,7 @@ const Select = forwardRef(
if (multiple) {
const currentValues = Array.isArray(currentValue) ? currentValue : [];
const newValues = currentValues.includes(value)
- ? currentValues.filter(v => v !== value)
+ ? currentValues.filter((v) => v !== value)
: [...currentValues, value];
setInternalValue(newValues);
onSelect?.(newValues);
@@ -130,14 +130,14 @@ const Select = forwardRef(
const currentValue = value !== undefined ? value : internalValue;
const selectedOption = options.find((opt) => opt.value === currentValue) || null;
-
+
// For multiple mode, get display text
const getDisplayText = () => {
if (multiple) {
const selectedValues = Array.isArray(currentValue) ? currentValue : [];
if (selectedValues.length === 0) return "";
if (selectedValues.length === 1) {
- const option = options.find(opt => opt.value === selectedValues[0]);
+ const option = options.find((opt) => opt.value === selectedValues[0]);
return String(option?.label || selectedValues[0]);
}
return `${selectedValues.length} options selected`;
@@ -150,11 +150,13 @@ const Select = forwardRef(
if (isDropdownOpen) {
// Reset skip flag when dropdown opens
skipNextFocusRef.current = false;
-
+
// If searchable is true, focus the search input
if (searchable) {
setTimeout(() => {
- const searchInput = selectRef.current?.querySelector(`#select-search-${searchInputId}`) as HTMLInputElement;
+ const searchInput = selectRef.current?.querySelector(
+ `#select-search-${searchInputId}`,
+ ) as HTMLInputElement;
if (searchInput) {
searchInput.focus();
}
@@ -165,7 +167,9 @@ const Select = forwardRef(
// Filter options based on search query
const filteredOptions = options.filter((option) =>
- searchable ? option.label?.toString().toLowerCase().includes(searchQuery.toLowerCase()) : true
+ searchable
+ ? option.label?.toString().toLowerCase().includes(searchQuery.toLowerCase())
+ : true,
);
return (
@@ -184,7 +188,7 @@ const Select = forwardRef(
closeAfterClick={false}
disableTriggerClick={true}
style={{
- ...style
+ ...style,
}}
trigger={
(
e.stopPropagation();
setIsDropdownOpen(false);
setSearchQuery("");
- const mainInput = selectRef.current?.querySelector("input:not([id^='select-search'])");
+ const mainInput = selectRef.current?.querySelector(
+ "input:not([id^='select-search'])",
+ );
if (mainInput instanceof HTMLInputElement) {
mainInput.focus();
}
@@ -252,7 +258,8 @@ const Select = forwardRef(
}}
onBlur={(e) => {
const relatedTarget = e.relatedTarget as Node;
- const isClickInDropdown = selectRef.current && selectRef.current.contains(relatedTarget);
+ const isClickInDropdown =
+ selectRef.current && selectRef.current.contains(relatedTarget);
if (!isClickInDropdown) {
handleBlur(e);
}
@@ -281,27 +288,28 @@ const Select = forwardRef(
handleSelect(option.value);
setIsDropdownOpen(false);
}}
- selected={multiple
- ? Array.isArray(currentValue) && currentValue.includes(option.value)
- : option.value === currentValue
+ selected={
+ multiple
+ ? Array.isArray(currentValue) && currentValue.includes(option.value)
+ : option.value === currentValue
}
tabIndex={-1}
- hasPrefix={multiple
- ? Array.isArray(currentValue) && currentValue.includes(option.value)
- ?
- : Array.isArray(currentValue) && currentValue.length > 0
- ?
- : undefined
- : undefined
+ hasPrefix={
+ multiple ? (
+ Array.isArray(currentValue) && currentValue.includes(option.value) ? (
+
+ ) : Array.isArray(currentValue) && currentValue.length > 0 ? (
+
+ ) : undefined
+ ) : undefined
}
/>
))}
- {searchQuery &&
- filteredOptions.length === 0 && (
-
- {emptyState}
-
- )}
+ {searchQuery && filteredOptions.length === 0 && (
+
+ {emptyState}
+
+ )}
diff --git a/packages/core/src/components/ServerFlex.tsx b/packages/core/src/components/ServerFlex.tsx
index 2cc8037..e035548 100644
--- a/packages/core/src/components/ServerFlex.tsx
+++ b/packages/core/src/components/ServerFlex.tsx
@@ -18,12 +18,12 @@ interface ComponentProps
StyleProps,
CommonProps,
DisplayProps {
- xl?: any;
- l?: any;
- m?: any;
- s?: any;
- xs?: any;
- }
+ xl?: any;
+ l?: any;
+ m?: any;
+ s?: any;
+ xs?: any;
+}
const ServerFlex = forwardRef(
(
@@ -120,7 +120,6 @@ const ServerFlex = forwardRef(
},
ref,
) => {
-
if (onBackground && onSolid) {
console.warn(
"You cannot use both 'onBackground' and 'onSolid' props simultaneously. Only one will be applied.",
@@ -202,7 +201,7 @@ const ServerFlex = forwardRef(
? "g-vertical--1"
: "g-horizontal--1"
: gap && `g-${gap}`,
- top ? `top-${top}` : (position === "sticky" ? "top-0" : undefined),
+ top ? `top-${top}` : position === "sticky" ? "top-0" : undefined,
right && `right-${right}`,
bottom && `bottom-${bottom}`,
left && `left-${left}`,
@@ -216,7 +215,8 @@ const ServerFlex = forwardRef(
!borderStyle &&
"border-solid",
border && !borderWidth && "border-1",
- (borderTop || borderRight || borderBottom || borderLeft || borderX || borderY) && "border-reset",
+ (borderTop || borderRight || borderBottom || borderLeft || borderX || borderY) &&
+ "border-reset",
borderTop && "border-top-1",
borderRight && "border-right-1",
borderBottom && "border-bottom-1",
@@ -292,7 +292,7 @@ const ServerFlex = forwardRef(
shadow && `shadow-${shadow}`,
zIndex && `z-index-${zIndex}`,
textType && `font-${textType}`,
- typeof cursor === 'string' && `cursor-${cursor}`,
+ typeof cursor === "string" && `cursor-${cursor}`,
dark && "dark-flex",
light && "light-flex",
colorClass,
@@ -345,7 +345,7 @@ const ServerFlex = forwardRef(
height: parseDimension(height, "height"),
aspectRatio: aspectRatio,
textAlign: align,
- cursor: typeof cursor === 'string' ? cursor : undefined,
+ cursor: typeof cursor === "string" ? cursor : undefined,
...style,
};
diff --git a/packages/core/src/components/ServerGrid.tsx b/packages/core/src/components/ServerGrid.tsx
index ef65797..85ad65f 100644
--- a/packages/core/src/components/ServerGrid.tsx
+++ b/packages/core/src/components/ServerGrid.tsx
@@ -18,12 +18,12 @@ interface ComponentProps
StyleProps,
CommonProps,
DisplayProps {
- xl?: any;
- l?: any;
- m?: any;
- s?: any;
- xs?: any;
- }
+ xl?: any;
+ l?: any;
+ m?: any;
+ s?: any;
+ xs?: any;
+}
const ServerGrid = forwardRef(
(
@@ -113,7 +113,6 @@ const ServerGrid = forwardRef(
},
ref,
) => {
-
const generateDynamicClass = (type: string, value: string | "-1" | undefined) => {
if (!value) return undefined;
@@ -244,7 +243,8 @@ const ServerGrid = forwardRef(
!borderStyle &&
"border-solid",
border && !borderWidth && `border-1`,
- (borderTop || borderRight || borderBottom || borderLeft || borderX || borderY) && "border-reset",
+ (borderTop || borderRight || borderBottom || borderLeft || borderX || borderY) &&
+ "border-reset",
borderTop && "border-top-1",
borderRight && "border-right-1",
borderBottom && "border-bottom-1",
@@ -267,7 +267,7 @@ const ServerGrid = forwardRef(
shadow && `shadow-${shadow}`,
zIndex && `z-index-${zIndex}`,
textType && `font-${textType}`,
- typeof cursor === 'string' && `cursor-${cursor}`,
+ typeof cursor === "string" && `cursor-${cursor}`,
dark && "dark-grid",
light && "light-grid",
className,
@@ -283,7 +283,7 @@ const ServerGrid = forwardRef(
aspectRatio: aspectRatio,
textAlign: align,
// Hide default cursor when using custom cursor
- cursor: typeof cursor === 'string' ? cursor : undefined,
+ cursor: typeof cursor === "string" ? cursor : undefined,
...style,
};
diff --git a/packages/core/src/components/StylePanel.tsx b/packages/core/src/components/StylePanel.tsx
index 5f98135..71249d9 100644
--- a/packages/core/src/components/StylePanel.tsx
+++ b/packages/core/src/components/StylePanel.tsx
@@ -2,7 +2,16 @@
import { forwardRef, useState, useEffect } from "react";
import { Flex, Text, SegmentedControl, IconButton, Scroller, Column, ThemeSwitcher } from ".";
-import { BorderStyle, NeutralColor, ScalingSize, SolidStyle, SolidType, SurfaceStyle, TransitionStyle, useStyle } from "../contexts/ThemeProvider";
+import {
+ BorderStyle,
+ NeutralColor,
+ ScalingSize,
+ SolidStyle,
+ SolidType,
+ SurfaceStyle,
+ TransitionStyle,
+ useStyle,
+} from "../contexts/ThemeProvider";
import { useDataTheme } from "../contexts/DataThemeProvider";
import styles from "./StylePanel.module.scss";
import classNames from "classnames";
@@ -25,7 +34,7 @@ const colorOptions = {
const StylePanel = forwardRef(({ ...rest }, ref) => {
const styleContext = useStyle();
const { mode: chartMode, setChartOptions } = useDataTheme();
-
+
const [mounted, setMounted] = useState(false);
const [borderValue, setBorderValue] = useState("playful");
const [brandValue, setBrandValue] = useState("blue");
@@ -37,17 +46,17 @@ const StylePanel = forwardRef(({ ...rest }, ref
const [scalingValue, setScalingValue] = useState("100");
const [chartModeValue, setChartModeValue] = useState("categorical");
const [transitionValue, setTransitionValue] = useState("all");
-
+
useEffect(() => {
- if (typeof window !== 'undefined') {
- const storedSolid = localStorage.getItem('data-solid');
- const storedSolidStyle = localStorage.getItem('data-solid-style');
-
+ if (typeof window !== "undefined") {
+ const storedSolid = localStorage.getItem("data-solid");
+ const storedSolidStyle = localStorage.getItem("data-solid-style");
+
if (storedSolid) setSolidValue(storedSolid as SolidType);
if (storedSolidStyle) setSolidStyleValue(storedSolidStyle as SolidStyle);
}
}, []);
-
+
useEffect(() => {
setMounted(true);
if (mounted) {
@@ -72,9 +81,16 @@ const StylePanel = forwardRef(({ ...rest }, ref
-
+
Theme
-
+
Shape
@@ -129,7 +145,10 @@ const StylePanel = forwardRef(({ ...rest }, ref
key={color}
center
tabIndex={0}
- className={classNames(styles.select, mounted && brandValue === color ? styles.selected : "")}
+ className={classNames(
+ styles.select,
+ mounted && brandValue === color ? styles.selected : "",
+ )}
onClick={() => {
styleContext.setStyle({ brand: color as Schemes });
setBrandValue(color as Schemes);
@@ -162,7 +181,10 @@ const StylePanel = forwardRef(({ ...rest }, ref
key={color}
center
tabIndex={0}
- className={classNames(styles.select, mounted && accentValue === color ? styles.selected : "")}
+ className={classNames(
+ styles.select,
+ mounted && accentValue === color ? styles.selected : "",
+ )}
onClick={() => {
styleContext.setStyle({ accent: color as Schemes });
setAccentValue(color as Schemes);
@@ -176,14 +198,7 @@ const StylePanel = forwardRef(({ ...rest }, ref
-
+
Neutral
@@ -194,7 +209,10 @@ const StylePanel = forwardRef(({ ...rest }, ref
key={color}
center
tabIndex={0}
- className={classNames(styles.select, mounted && neutralValue === color ? styles.selected : "")}
+ className={classNames(
+ styles.select,
+ mounted && neutralValue === color ? styles.selected : "",
+ )}
onClick={() => {
styleContext.setStyle({ neutral: color as NeutralColor });
setNeutralValue(color as NeutralColor);
@@ -285,20 +303,13 @@ const StylePanel = forwardRef(({ ...rest }, ref
onToggle={(value) => {
styleContext.setStyle({ solid: value as SolidType });
setSolidValue(value as SolidType);
- localStorage.setItem('data-solid', value);
+ localStorage.setItem("data-solid", value);
}}
selected={mounted ? solidValue : undefined}
defaultSelected="contrast"
/>
-
+
Effect
(({ ...rest }, ref
onToggle={(value) => {
styleContext.setStyle({ solidStyle: value as SolidStyle });
setSolidStyleValue(value as SolidStyle);
- localStorage.setItem('data-solid-style', value);
+ localStorage.setItem("data-solid-style", value);
}}
selected={mounted ? solidStyleValue : undefined}
defaultSelected="flat"
@@ -477,14 +488,7 @@ const StylePanel = forwardRef(({ ...rest }, ref
]}
/>
-
+
Transition
(({ ...rest }, ref
});
StylePanel.displayName = "StylePanel";
-export { StylePanel };
\ No newline at end of file
+export { StylePanel };
diff --git a/packages/core/src/components/ThemeSwitcher.tsx b/packages/core/src/components/ThemeSwitcher.tsx
index 35e6a43..2e8263f 100644
--- a/packages/core/src/components/ThemeSwitcher.tsx
+++ b/packages/core/src/components/ThemeSwitcher.tsx
@@ -7,7 +7,7 @@ import { useTheme } from "../contexts";
const ThemeSwitcher = forwardRef>((flex, ref) => {
const { theme, setTheme } = useTheme();
const [mounted, setMounted] = React.useState(false);
-
+
React.useEffect(() => {
setMounted(true);
}, []);
diff --git a/packages/core/src/components/Tooltip.tsx b/packages/core/src/components/Tooltip.tsx
index cc6d5cd..989893c 100644
--- a/packages/core/src/components/Tooltip.tsx
+++ b/packages/core/src/components/Tooltip.tsx
@@ -16,7 +16,7 @@ const Tooltip = forwardRef(
({ label, prefixIcon, suffixIcon, className, style, ...flex }, ref) => {
return (
({
// Helper function to get stored chart options from localStorage
function getStoredChartOptions() {
- if (typeof window === 'undefined') return {};
-
+ if (typeof window === "undefined") return {};
+
try {
- const dataVizMode = localStorage.getItem('data-viz-style');
-
+ const dataVizMode = localStorage.getItem("data-viz-style");
+
if (dataVizMode) {
return { mode: dataVizMode as ChartMode };
}
return {};
} catch (e) {
- console.error('Error reading stored chart options:', e);
+ console.error("Error reading stored chart options:", e);
return {};
}
}
@@ -71,7 +71,7 @@ export function DataThemeProvider({
...rest
}: DataThemeProviderProps) {
const camelToKebab = (str: string): string => {
- return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();
+ return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
};
// Initialize with defaults and provided props for server-side rendering
@@ -83,32 +83,32 @@ export function DataThemeProvider({
...(axis ? { axis } : {}),
...(tick ? { tick } : {}),
});
-
+
const [mounted, setMounted] = useState(false);
-
+
useEffect(() => {
const storedOptions = getStoredChartOptions();
-
+
if (Object.keys(storedOptions).length > 0) {
- setChartOptionsState(prev => ({
+ setChartOptionsState((prev) => ({
...prev,
...storedOptions,
}));
}
-
+
setMounted(true);
}, []);
const applyDataVizAttribute = (mode: ChartMode, saveToLocalStorage = false) => {
- if (typeof document !== 'undefined') {
- if (document.documentElement.hasAttribute('data-data-viz')) {
- document.documentElement.removeAttribute('data-data-viz');
+ if (typeof document !== "undefined") {
+ if (document.documentElement.hasAttribute("data-data-viz")) {
+ document.documentElement.removeAttribute("data-data-viz");
}
-
- document.documentElement.setAttribute('data-viz-style', mode);
-
+
+ document.documentElement.setAttribute("data-viz-style", mode);
+
if (saveToLocalStorage) {
- localStorage.setItem('data-viz-style', mode);
+ localStorage.setItem("data-viz-style", mode);
}
}
};
@@ -120,16 +120,16 @@ export function DataThemeProvider({
}, [chartOptions.mode, mounted]);
const handleSetChartOptions = (newOptions: Partial) => {
- setChartOptionsState(prevOptions => {
+ setChartOptionsState((prevOptions) => {
const updatedOptions = {
...prevOptions,
...newOptions,
};
-
- if (newOptions.mode && mounted && typeof window !== 'undefined') {
+
+ if (newOptions.mode && mounted && typeof window !== "undefined") {
applyDataVizAttribute(newOptions.mode, true);
}
-
+
return updatedOptions;
});
};
@@ -139,11 +139,7 @@ export function DataThemeProvider({
setChartOptions: handleSetChartOptions,
};
- return (
-
- {children}
-
- );
+ return {children};
}
export const useDataTheme = () => {
diff --git a/packages/core/src/contexts/IconProvider.tsx b/packages/core/src/contexts/IconProvider.tsx
index a5486b7..2d79234 100644
--- a/packages/core/src/contexts/IconProvider.tsx
+++ b/packages/core/src/contexts/IconProvider.tsx
@@ -17,7 +17,7 @@ export const IconProvider = ({
children: React.ReactNode;
}) => {
const mergedIcons = { ...defaultIcons };
-
+
if (icons) {
Object.entries(icons).forEach(([key, icon]) => {
if (icon !== undefined) {
@@ -26,11 +26,7 @@ export const IconProvider = ({
});
}
- return (
-
- {children}
-
- );
+ return {children};
};
export const useIcons = () => useContext(IconContext);
diff --git a/packages/core/src/contexts/LayoutProvider.tsx b/packages/core/src/contexts/LayoutProvider.tsx
index 425b7b3..04674ce 100644
--- a/packages/core/src/contexts/LayoutProvider.tsx
+++ b/packages/core/src/contexts/LayoutProvider.tsx
@@ -4,10 +4,10 @@ import React, { createContext, useContext, useEffect, useState, ReactNode } from
// Default breakpoints
export const DEFAULT_BREAKPOINTS = {
- xs: 480, // Extra small (mobile small)
- s: 768, // Small (mobile)
- m: 1024, // Medium (tablet)
- l: 1440, // Large (desktop)
+ xs: 480, // Extra small (mobile small)
+ s: 768, // Small (mobile)
+ m: 1024, // Medium (tablet)
+ l: 1440, // Large (desktop)
xl: Infinity, // Above all breakpoints
} as const;
@@ -30,9 +30,9 @@ interface LayoutProviderProps {
breakpoints?: Partial;
}
-const LayoutProvider: React.FC = ({
- children,
- breakpoints: customBreakpoints
+const LayoutProvider: React.FC = ({
+ children,
+ breakpoints: customBreakpoints,
}) => {
// Merge custom breakpoints with defaults
const breakpoints: Breakpoints = {
@@ -41,15 +41,15 @@ const LayoutProvider: React.FC = ({
};
const [width, setWidth] = useState(0);
- const [currentBreakpoint, setCurrentBreakpoint] = useState('l');
+ const [currentBreakpoint, setCurrentBreakpoint] = useState("l");
// Determine current breakpoint based on width
const getCurrentBreakpoint = (width: number): BreakpointKey => {
- if (width <= breakpoints.xs) return 'xs';
- if (width <= breakpoints.s) return 's';
- if (width <= breakpoints.m) return 'm';
- if (width <= breakpoints.l) return 'l';
- return 'xl';
+ if (width <= breakpoints.xs) return "xs";
+ if (width <= breakpoints.s) return "s";
+ if (width <= breakpoints.m) return "m";
+ if (width <= breakpoints.l) return "l";
+ return "xl";
};
// Check if current breakpoint matches the given key
@@ -79,10 +79,10 @@ const LayoutProvider: React.FC = ({
updateWidth();
// Add resize listener
- window.addEventListener('resize', updateWidth);
+ window.addEventListener("resize", updateWidth);
return () => {
- window.removeEventListener('resize', updateWidth);
+ window.removeEventListener("resize", updateWidth);
};
}, [breakpoints]);
@@ -95,19 +95,15 @@ const LayoutProvider: React.FC = ({
minWidth,
};
- return (
-
- {children}
-
- );
+ return {children};
};
export const useLayout = (): LayoutContextType => {
const context = useContext(LayoutContext);
if (!context) {
- throw new Error('useLayout must be used within a LayoutProvider');
+ throw new Error("useLayout must be used within a LayoutProvider");
}
return context;
};
-export { LayoutProvider };
\ No newline at end of file
+export { LayoutProvider };
diff --git a/packages/core/src/contexts/ThemeProvider.tsx b/packages/core/src/contexts/ThemeProvider.tsx
index d82cc6f..e6df76d 100644
--- a/packages/core/src/contexts/ThemeProvider.tsx
+++ b/packages/core/src/contexts/ThemeProvider.tsx
@@ -79,43 +79,55 @@ const ThemeProviderContext = createContext(initialThemeState
const StyleProviderContext = createContext(initialStyleState);
function getStoredStyleValues() {
- if (typeof window === 'undefined') return {};
-
+ if (typeof window === "undefined") return {};
+
try {
const storedStyle: Partial = {};
- const styleKeys = ['neutral', 'brand', 'accent', 'solid', 'solid-style', 'border', 'surface', 'transition', 'scaling'];
-
- styleKeys.forEach(key => {
+ const styleKeys = [
+ "neutral",
+ "brand",
+ "accent",
+ "solid",
+ "solid-style",
+ "border",
+ "surface",
+ "transition",
+ "scaling",
+ ];
+
+ styleKeys.forEach((key) => {
const kebabKey = key;
- const camelKey = kebabKey.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()) as keyof StyleOptions;
+ const camelKey = kebabKey.replace(/-([a-z])/g, (_, letter) =>
+ letter.toUpperCase(),
+ ) as keyof StyleOptions;
const value = localStorage.getItem(`data-${kebabKey}`);
-
+
if (value) {
- if (camelKey === 'border') {
+ if (camelKey === "border") {
storedStyle[camelKey] = value as BorderStyle;
- } else if (camelKey === 'solidStyle') {
+ } else if (camelKey === "solidStyle") {
storedStyle[camelKey] = value as SolidStyle;
- } else if (camelKey === 'transition') {
+ } else if (camelKey === "transition") {
storedStyle[camelKey] = value as TransitionStyle;
- } else if (camelKey === 'scaling') {
+ } else if (camelKey === "scaling") {
storedStyle[camelKey] = value as ScalingSize;
- } else if (camelKey === 'surface') {
+ } else if (camelKey === "surface") {
storedStyle[camelKey] = value as SurfaceStyle;
- } else if (camelKey === 'neutral') {
+ } else if (camelKey === "neutral") {
storedStyle.neutral = value as NeutralColor;
- } else if (camelKey === 'brand') {
+ } else if (camelKey === "brand") {
storedStyle.brand = value as Schemes;
- } else if (camelKey === 'accent') {
+ } else if (camelKey === "accent") {
storedStyle.accent = value as Schemes;
- } else if (camelKey === 'solid') {
+ } else if (camelKey === "solid") {
storedStyle.solid = value as SolidType;
}
}
});
-
+
return storedStyle;
} catch (e) {
- dev.error('Error reading stored style values:', e);
+ dev.error("Error reading stored style values:", e);
return {};
}
}
@@ -127,24 +139,24 @@ const getInitialTheme = (): Theme => {
if (savedTheme && (savedTheme === "light" || savedTheme === "dark")) {
return savedTheme;
}
-
+
const domTheme = document.documentElement.getAttribute("data-theme");
if (domTheme === "dark" || domTheme === "light") {
return "system";
}
-
+
return "system";
};
-const getInitialResolvedTheme = (): 'light' | 'dark' => {
+const getInitialResolvedTheme = (): "light" | "dark" => {
if (typeof window === "undefined") return "dark";
-
+
const domTheme = document.documentElement.getAttribute("data-theme");
- return (domTheme === "dark" || domTheme === "light") ? domTheme as 'light' | 'dark' : "dark";
+ return domTheme === "dark" || domTheme === "light" ? (domTheme as "light" | "dark") : "dark";
};
-export function ThemeProvider({
- children,
+export function ThemeProvider({
+ children,
theme: propTheme = "system",
neutral,
brand,
@@ -154,81 +166,89 @@ export function ThemeProvider({
border,
surface,
transition,
- scaling
+ scaling,
}: ThemeProviderProps) {
// If propTheme is light/dark, use it directly (forced mode)
// Otherwise, use the stored preference from localStorage/DOM
const initialThemeValue = propTheme !== "system" ? propTheme : getInitialTheme();
-
+
// For resolvedTheme, if propTheme is light/dark, use that directly
// Otherwise, get from DOM
const initialResolvedValue = propTheme !== "system" ? propTheme : getInitialResolvedTheme();
-
+
const [theme, setTheme] = useState(initialThemeValue);
- const [resolvedTheme, setResolvedTheme] = useState<'light' | 'dark'>(initialResolvedValue);
+ const [resolvedTheme, setResolvedTheme] = useState<"light" | "dark">(initialResolvedValue);
- const getResolvedTheme = useCallback((t: Theme): 'light' | 'dark' => {
- if (t === 'system') {
- return typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches
- ? 'dark'
- : 'light';
+ const getResolvedTheme = useCallback((t: Theme): "light" | "dark" => {
+ if (t === "system") {
+ return typeof window !== "undefined" &&
+ window.matchMedia("(prefers-color-scheme: dark)").matches
+ ? "dark"
+ : "light";
}
return t;
}, []);
useEffect(() => {
- if (typeof window === 'undefined') return;
-
+ if (typeof window === "undefined") return;
+
// Only listen for system theme changes if:
// 1. Current theme is 'system' AND
// 2. propTheme is 'system' (not forcing light/dark)
- if (theme === 'system' && propTheme === 'system') {
- const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
-
+ if (theme === "system" && propTheme === "system") {
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
+
const handleChange = () => {
- const newResolved = mediaQuery.matches ? 'dark' : 'light';
- document.documentElement.setAttribute('data-theme', newResolved);
+ const newResolved = mediaQuery.matches ? "dark" : "light";
+ document.documentElement.setAttribute("data-theme", newResolved);
setResolvedTheme(newResolved);
dev.log(`System theme changed to: ${newResolved}`);
};
-
- mediaQuery.addEventListener('change', handleChange);
- return () => mediaQuery.removeEventListener('change', handleChange);
+
+ mediaQuery.addEventListener("change", handleChange);
+ return () => mediaQuery.removeEventListener("change", handleChange);
}
}, [theme, propTheme]);
- const setThemeAndSave = useCallback((newTheme: Theme) => {
- try {
- // If propTheme is light/dark, we always use that for the DOM (forced mode)
- const isForced = propTheme !== 'system';
- const resolved = isForced ? propTheme : (newTheme === 'system'
- ? window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
- : newTheme);
-
- // Only update localStorage if not in forced mode
- if (!isForced) {
- if (newTheme === 'system') {
- localStorage.removeItem('data-theme');
- } else {
- localStorage.setItem('data-theme', newTheme);
+ const setThemeAndSave = useCallback(
+ (newTheme: Theme) => {
+ try {
+ // If propTheme is light/dark, we always use that for the DOM (forced mode)
+ const isForced = propTheme !== "system";
+ const resolved = isForced
+ ? propTheme
+ : newTheme === "system"
+ ? window.matchMedia("(prefers-color-scheme: dark)").matches
+ ? "dark"
+ : "light"
+ : newTheme;
+
+ // Only update localStorage if not in forced mode
+ if (!isForced) {
+ if (newTheme === "system") {
+ localStorage.removeItem("data-theme");
+ } else {
+ localStorage.setItem("data-theme", newTheme);
+ }
}
+
+ // Always update React state
+ setTheme(newTheme);
+ setResolvedTheme(resolved);
+
+ // Set the DOM attribute to the resolved theme
+ document.documentElement.setAttribute("data-theme", resolved);
+
+ dev.log(`Theme set to ${newTheme} (resolved: ${resolved})`);
+ } catch (e) {
+ dev.error("Error setting theme:", e);
}
-
- // Always update React state
- setTheme(newTheme);
- setResolvedTheme(resolved);
-
- // Set the DOM attribute to the resolved theme
- document.documentElement.setAttribute('data-theme', resolved);
-
- dev.log(`Theme set to ${newTheme} (resolved: ${resolved})`);
- } catch (e) {
- dev.error('Error setting theme:', e);
- }
- }, [propTheme]);
+ },
+ [propTheme],
+ );
+
+ const storedValues = typeof window !== "undefined" ? getStoredStyleValues() : {};
- const storedValues = typeof window !== 'undefined' ? getStoredStyleValues() : {};
-
const directProps: Partial = {};
if (neutral) directProps.neutral = neutral;
if (brand) directProps.brand = brand;
@@ -239,7 +259,7 @@ export function ThemeProvider({
if (surface) directProps.surface = surface;
if (transition) directProps.transition = transition;
if (scaling) directProps.scaling = scaling;
-
+
const [style, setStyleState] = useState({
...defaultStyleOptions,
...directProps,
@@ -248,41 +268,43 @@ export function ThemeProvider({
});
useEffect(() => {
- setStyleState(prevStyle => ({
+ setStyleState((prevStyle) => ({
...prevStyle,
- theme: theme
+ theme: theme,
}));
}, [theme]);
const themeValue = {
theme,
resolvedTheme,
- setTheme: setThemeAndSave
+ setTheme: setThemeAndSave,
};
-
+
const camelToKebab = (str: string): string => {
- return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();
+ return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
};
const styleValue: StyleProviderState = {
...style,
setStyle: (newStyle: Partial) => {
- setStyleState(prevStyle => ({
+ setStyleState((prevStyle) => ({
...prevStyle,
- ...newStyle
+ ...newStyle,
}));
-
+
Object.entries(newStyle).forEach(([key, value]) => {
- if (value && key !== 'setStyle') {
+ if (value && key !== "setStyle") {
const attrName = `data-${camelToKebab(key)}`;
-
- if (key === 'theme') {
- if (value === 'system') {
- localStorage.removeItem('data-theme');
- const resolvedValue = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
+
+ if (key === "theme") {
+ if (value === "system") {
+ localStorage.removeItem("data-theme");
+ const resolvedValue = window.matchMedia("(prefers-color-scheme: dark)").matches
+ ? "dark"
+ : "light";
document.documentElement.setAttribute(attrName, resolvedValue);
} else {
- localStorage.setItem('data-theme', value.toString());
+ localStorage.setItem("data-theme", value.toString());
document.documentElement.setAttribute(attrName, value.toString());
}
} else {
@@ -293,17 +315,19 @@ export function ThemeProvider({
});
},
};
-
+
useEffect(() => {
- if (typeof window !== 'undefined') {
+ if (typeof window !== "undefined") {
Object.entries(style).forEach(([key, value]) => {
- if (value && key !== 'setStyle') {
- if (key === 'theme') {
+ if (value && key !== "setStyle") {
+ if (key === "theme") {
// If propTheme is light/dark, always use that for the DOM (forced mode)
- if (propTheme !== 'system') {
+ if (propTheme !== "system") {
document.documentElement.setAttribute(`data-${camelToKebab(key)}`, propTheme);
- } else if (value === 'system') {
- const resolvedValue = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
+ } else if (value === "system") {
+ const resolvedValue = window.matchMedia("(prefers-color-scheme: dark)").matches
+ ? "dark"
+ : "light";
document.documentElement.setAttribute(`data-${camelToKebab(key)}`, resolvedValue);
} else {
document.documentElement.setAttribute(`data-${camelToKebab(key)}`, value.toString());
@@ -318,9 +342,7 @@ export function ThemeProvider({
return (
-
- {children}
-
+ {children}
);
}
diff --git a/packages/core/src/contexts/index.ts b/packages/core/src/contexts/index.ts
index 9218184..e8a4ccf 100644
--- a/packages/core/src/contexts/index.ts
+++ b/packages/core/src/contexts/index.ts
@@ -2,4 +2,4 @@ export * from "./IconProvider";
export * from "./ThemeProvider";
export * from "./ToastProvider";
export * from "./DataThemeProvider";
-export * from "./LayoutProvider";
\ No newline at end of file
+export * from "./LayoutProvider";
diff --git a/packages/core/src/data/emoji-data.json b/packages/core/src/data/emoji-data.json
index d0e8d94..e835d51 100644
--- a/packages/core/src/data/emoji-data.json
+++ b/packages/core/src/data/emoji-data.json
@@ -3,2048 +3,1339 @@
{
"char": "๐",
"description": "grinning face",
- "aliases": [
- "grinning"
- ],
- "tags": [
- "smile",
- "happy"
- ]
+ "aliases": ["grinning"],
+ "tags": ["smile", "happy"]
},
{
"char": "๐",
"description": "grinning face with big eyes",
- "aliases": [
- "smiley"
- ],
- "tags": [
- "happy",
- "joy",
- "haha"
- ]
+ "aliases": ["smiley"],
+ "tags": ["happy", "joy", "haha"]
},
{
"char": "๐",
"description": "grinning face with smiling eyes",
- "aliases": [
- "smile"
- ],
- "tags": [
- "happy",
- "joy",
- "laugh",
- "pleased"
- ]
+ "aliases": ["smile"],
+ "tags": ["happy", "joy", "laugh", "pleased"]
},
{
"char": "๐",
"description": "beaming face with smiling eyes",
- "aliases": [
- "grin"
- ],
+ "aliases": ["grin"],
"tags": []
},
{
"char": "๐",
"description": "grinning squinting face",
- "aliases": [
- "laughing",
- "satisfied"
- ],
- "tags": [
- "happy",
- "haha"
- ]
+ "aliases": ["laughing", "satisfied"],
+ "tags": ["happy", "haha"]
},
{
"char": "๐
",
"description": "grinning face with sweat",
- "aliases": [
- "sweat_smile"
- ],
- "tags": [
- "hot"
- ]
+ "aliases": ["sweat_smile"],
+ "tags": ["hot"]
},
{
"char": "๐คฃ",
"description": "rolling on the floor laughing",
- "aliases": [
- "rofl"
- ],
- "tags": [
- "lol",
- "laughing"
- ]
+ "aliases": ["rofl"],
+ "tags": ["lol", "laughing"]
},
{
"char": "๐",
"description": "face with tears of joy",
- "aliases": [
- "joy"
- ],
- "tags": [
- "tears"
- ]
+ "aliases": ["joy"],
+ "tags": ["tears"]
},
{
"char": "๐",
"description": "slightly smiling face",
- "aliases": [
- "slightly_smiling_face"
- ],
+ "aliases": ["slightly_smiling_face"],
"tags": []
},
{
"char": "๐",
"description": "upside-down face",
- "aliases": [
- "upside_down_face"
- ],
+ "aliases": ["upside_down_face"],
"tags": []
},
{
"char": "๐ซ ",
"description": "melting face",
- "aliases": [
- "melting_face"
- ],
- "tags": [
- "sarcasm",
- "dread"
- ]
+ "aliases": ["melting_face"],
+ "tags": ["sarcasm", "dread"]
},
{
"char": "๐",
"description": "winking face",
- "aliases": [
- "wink"
- ],
- "tags": [
- "flirt"
- ]
+ "aliases": ["wink"],
+ "tags": ["flirt"]
},
{
"char": "๐",
"description": "smiling face with smiling eyes",
- "aliases": [
- "blush"
- ],
- "tags": [
- "proud"
- ]
+ "aliases": ["blush"],
+ "tags": ["proud"]
},
{
"char": "๐",
"description": "smiling face with halo",
- "aliases": [
- "innocent"
- ],
- "tags": [
- "angel"
- ]
+ "aliases": ["innocent"],
+ "tags": ["angel"]
},
{
"char": "๐ฅฐ",
"description": "smiling face with hearts",
- "aliases": [
- "smiling_face_with_three_hearts"
- ],
- "tags": [
- "love"
- ]
+ "aliases": ["smiling_face_with_three_hearts"],
+ "tags": ["love"]
},
{
"char": "๐",
"description": "smiling face with heart-eyes",
- "aliases": [
- "heart_eyes"
- ],
- "tags": [
- "love",
- "crush"
- ]
+ "aliases": ["heart_eyes"],
+ "tags": ["love", "crush"]
},
{
"char": "๐",
"description": "face blowing a kiss",
- "aliases": [
- "kissing_heart"
- ],
- "tags": [
- "flirt"
- ]
+ "aliases": ["kissing_heart"],
+ "tags": ["flirt"]
},
{
"char": "๐",
"description": "kissing face",
- "aliases": [
- "kissing"
- ],
+ "aliases": ["kissing"],
"tags": []
},
{
"char": "โบ๏ธ",
"description": "smiling face",
- "aliases": [
- "relaxed"
- ],
- "tags": [
- "blush",
- "pleased"
- ]
+ "aliases": ["relaxed"],
+ "tags": ["blush", "pleased"]
},
{
"char": "๐",
"description": "kissing face with closed eyes",
- "aliases": [
- "kissing_closed_eyes"
- ],
+ "aliases": ["kissing_closed_eyes"],
"tags": []
},
{
"char": "๐",
"description": "kissing face with smiling eyes",
- "aliases": [
- "kissing_smiling_eyes"
- ],
+ "aliases": ["kissing_smiling_eyes"],
"tags": []
},
{
"char": "๐ฅฒ",
"description": "smiling face with tear",
- "aliases": [
- "smiling_face_with_tear"
- ],
+ "aliases": ["smiling_face_with_tear"],
"tags": []
},
{
"char": "๐",
"description": "face savoring food",
- "aliases": [
- "yum"
- ],
- "tags": [
- "tongue",
- "lick"
- ]
+ "aliases": ["yum"],
+ "tags": ["tongue", "lick"]
},
{
"char": "๐",
"description": "face with tongue",
- "aliases": [
- "stuck_out_tongue"
- ],
+ "aliases": ["stuck_out_tongue"],
"tags": []
},
{
"char": "๐",
"description": "winking face with tongue",
- "aliases": [
- "stuck_out_tongue_winking_eye"
- ],
- "tags": [
- "prank",
- "silly"
- ]
+ "aliases": ["stuck_out_tongue_winking_eye"],
+ "tags": ["prank", "silly"]
},
{
"char": "๐คช",
"description": "zany face",
- "aliases": [
- "zany_face"
- ],
- "tags": [
- "goofy",
- "wacky"
- ]
+ "aliases": ["zany_face"],
+ "tags": ["goofy", "wacky"]
},
{
"char": "๐",
"description": "squinting face with tongue",
- "aliases": [
- "stuck_out_tongue_closed_eyes"
- ],
- "tags": [
- "prank"
- ]
+ "aliases": ["stuck_out_tongue_closed_eyes"],
+ "tags": ["prank"]
},
{
"char": "๐ค",
"description": "money-mouth face",
- "aliases": [
- "money_mouth_face"
- ],
- "tags": [
- "rich"
- ]
+ "aliases": ["money_mouth_face"],
+ "tags": ["rich"]
},
{
"char": "๐ค",
"description": "smiling face with open hands",
- "aliases": [
- "hugs"
- ],
+ "aliases": ["hugs"],
"tags": []
},
{
"char": "๐คญ",
"description": "face with hand over mouth",
- "aliases": [
- "hand_over_mouth"
- ],
- "tags": [
- "quiet",
- "whoops"
- ]
+ "aliases": ["hand_over_mouth"],
+ "tags": ["quiet", "whoops"]
},
{
"char": "๐ซข",
"description": "face with open eyes and hand over mouth",
- "aliases": [
- "face_with_open_eyes_and_hand_over_mouth"
- ],
- "tags": [
- "gasp",
- "shock"
- ]
+ "aliases": ["face_with_open_eyes_and_hand_over_mouth"],
+ "tags": ["gasp", "shock"]
},
{
"char": "๐ซฃ",
"description": "face with peeking eye",
- "aliases": [
- "face_with_peeking_eye"
- ],
+ "aliases": ["face_with_peeking_eye"],
"tags": []
},
{
"char": "๐คซ",
"description": "shushing face",
- "aliases": [
- "shushing_face"
- ],
- "tags": [
- "silence",
- "quiet"
- ]
+ "aliases": ["shushing_face"],
+ "tags": ["silence", "quiet"]
},
{
"char": "๐ค",
"description": "thinking face",
- "aliases": [
- "thinking"
- ],
+ "aliases": ["thinking"],
"tags": []
},
{
"char": "๐ซก",
"description": "saluting face",
- "aliases": [
- "saluting_face"
- ],
- "tags": [
- "respect"
- ]
+ "aliases": ["saluting_face"],
+ "tags": ["respect"]
},
{
"char": "๐ค",
"description": "zipper-mouth face",
- "aliases": [
- "zipper_mouth_face"
- ],
- "tags": [
- "silence",
- "hush"
- ]
+ "aliases": ["zipper_mouth_face"],
+ "tags": ["silence", "hush"]
},
{
"char": "๐คจ",
"description": "face with raised eyebrow",
- "aliases": [
- "raised_eyebrow"
- ],
- "tags": [
- "suspicious"
- ]
+ "aliases": ["raised_eyebrow"],
+ "tags": ["suspicious"]
},
{
"char": "๐",
"description": "neutral face",
- "aliases": [
- "neutral_face"
- ],
- "tags": [
- "meh"
- ]
+ "aliases": ["neutral_face"],
+ "tags": ["meh"]
},
{
"char": "๐",
"description": "expressionless face",
- "aliases": [
- "expressionless"
- ],
+ "aliases": ["expressionless"],
"tags": []
},
{
"char": "๐ถ",
"description": "face without mouth",
- "aliases": [
- "no_mouth"
- ],
- "tags": [
- "mute",
- "silence"
- ]
+ "aliases": ["no_mouth"],
+ "tags": ["mute", "silence"]
},
{
"char": "๐ซฅ",
"description": "dotted line face",
- "aliases": [
- "dotted_line_face"
- ],
- "tags": [
- "invisible"
- ]
+ "aliases": ["dotted_line_face"],
+ "tags": ["invisible"]
},
{
"char": "๐ถโ๐ซ๏ธ",
"description": "face in clouds",
- "aliases": [
- "face_in_clouds"
- ],
+ "aliases": ["face_in_clouds"],
"tags": []
},
{
"char": "๐",
"description": "smirking face",
- "aliases": [
- "smirk"
- ],
- "tags": [
- "smug"
- ]
+ "aliases": ["smirk"],
+ "tags": ["smug"]
},
{
"char": "๐",
"description": "unamused face",
- "aliases": [
- "unamused"
- ],
- "tags": [
- "meh"
- ]
+ "aliases": ["unamused"],
+ "tags": ["meh"]
},
{
"char": "๐",
"description": "face with rolling eyes",
- "aliases": [
- "roll_eyes"
- ],
+ "aliases": ["roll_eyes"],
"tags": []
},
{
"char": "๐ฌ",
"description": "grimacing face",
- "aliases": [
- "grimacing"
- ],
+ "aliases": ["grimacing"],
"tags": []
},
{
"char": "๐ฎโ๐จ",
"description": "face exhaling",
- "aliases": [
- "face_exhaling"
- ],
+ "aliases": ["face_exhaling"],
"tags": []
},
{
"char": "๐คฅ",
"description": "lying face",
- "aliases": [
- "lying_face"
- ],
- "tags": [
- "liar"
- ]
+ "aliases": ["lying_face"],
+ "tags": ["liar"]
},
{
"char": "๐ซจ",
"description": "shaking face",
- "aliases": [
- "shaking_face"
- ],
- "tags": [
- "shock"
- ]
+ "aliases": ["shaking_face"],
+ "tags": ["shock"]
},
{
"char": "๐",
"description": "relieved face",
- "aliases": [
- "relieved"
- ],
- "tags": [
- "whew"
- ]
+ "aliases": ["relieved"],
+ "tags": ["whew"]
},
{
"char": "๐",
"description": "pensive face",
- "aliases": [
- "pensive"
- ],
+ "aliases": ["pensive"],
"tags": []
},
{
"char": "๐ช",
"description": "sleepy face",
- "aliases": [
- "sleepy"
- ],
- "tags": [
- "tired"
- ]
+ "aliases": ["sleepy"],
+ "tags": ["tired"]
},
{
"char": "๐คค",
"description": "drooling face",
- "aliases": [
- "drooling_face"
- ],
+ "aliases": ["drooling_face"],
"tags": []
},
{
"char": "๐ด",
"description": "sleeping face",
- "aliases": [
- "sleeping"
- ],
- "tags": [
- "zzz"
- ]
+ "aliases": ["sleeping"],
+ "tags": ["zzz"]
},
{
"char": "๐ท",
"description": "face with medical mask",
- "aliases": [
- "mask"
- ],
- "tags": [
- "sick",
- "ill"
- ]
+ "aliases": ["mask"],
+ "tags": ["sick", "ill"]
},
{
"char": "๐ค",
"description": "face with thermometer",
- "aliases": [
- "face_with_thermometer"
- ],
- "tags": [
- "sick"
- ]
+ "aliases": ["face_with_thermometer"],
+ "tags": ["sick"]
},
{
"char": "๐ค",
"description": "face with head-bandage",
- "aliases": [
- "face_with_head_bandage"
- ],
- "tags": [
- "hurt"
- ]
+ "aliases": ["face_with_head_bandage"],
+ "tags": ["hurt"]
},
{
"char": "๐คข",
"description": "nauseated face",
- "aliases": [
- "nauseated_face"
- ],
- "tags": [
- "sick",
- "barf",
- "disgusted"
- ]
+ "aliases": ["nauseated_face"],
+ "tags": ["sick", "barf", "disgusted"]
},
{
"char": "๐คฎ",
"description": "face vomiting",
- "aliases": [
- "vomiting_face"
- ],
- "tags": [
- "barf",
- "sick"
- ]
+ "aliases": ["vomiting_face"],
+ "tags": ["barf", "sick"]
},
{
"char": "๐คง",
"description": "sneezing face",
- "aliases": [
- "sneezing_face"
- ],
- "tags": [
- "achoo",
- "sick"
- ]
+ "aliases": ["sneezing_face"],
+ "tags": ["achoo", "sick"]
},
{
"char": "๐ฅต",
"description": "hot face",
- "aliases": [
- "hot_face"
- ],
- "tags": [
- "heat",
- "sweating"
- ]
+ "aliases": ["hot_face"],
+ "tags": ["heat", "sweating"]
},
{
"char": "๐ฅถ",
"description": "cold face",
- "aliases": [
- "cold_face"
- ],
- "tags": [
- "freezing",
- "ice"
- ]
+ "aliases": ["cold_face"],
+ "tags": ["freezing", "ice"]
},
{
"char": "๐ฅด",
"description": "woozy face",
- "aliases": [
- "woozy_face"
- ],
- "tags": [
- "groggy"
- ]
+ "aliases": ["woozy_face"],
+ "tags": ["groggy"]
},
{
"char": "๐ต",
"description": "face with crossed-out eyes",
- "aliases": [
- "dizzy_face"
- ],
+ "aliases": ["dizzy_face"],
"tags": []
},
{
"char": "๐ตโ๐ซ",
"description": "face with spiral eyes",
- "aliases": [
- "face_with_spiral_eyes"
- ],
+ "aliases": ["face_with_spiral_eyes"],
"tags": []
},
{
"char": "๐ค ",
"description": "cowboy hat face",
- "aliases": [
- "cowboy_hat_face"
- ],
+ "aliases": ["cowboy_hat_face"],
"tags": []
},
{
"char": "๐ฅณ",
"description": "partying face",
- "aliases": [
- "partying_face"
- ],
- "tags": [
- "celebration",
- "birthday"
- ]
+ "aliases": ["partying_face"],
+ "tags": ["celebration", "birthday"]
},
{
"char": "๐ฅธ",
"description": "disguised face",
- "aliases": [
- "disguised_face"
- ],
+ "aliases": ["disguised_face"],
"tags": []
},
{
"char": "๐",
"description": "smiling face with sunglasses",
- "aliases": [
- "sunglasses"
- ],
- "tags": [
- "cool"
- ]
+ "aliases": ["sunglasses"],
+ "tags": ["cool"]
},
{
"char": "๐ค",
"description": "nerd face",
- "aliases": [
- "nerd_face"
- ],
- "tags": [
- "geek",
- "glasses"
- ]
+ "aliases": ["nerd_face"],
+ "tags": ["geek", "glasses"]
},
{
"char": "๐ง",
"description": "face with monocle",
- "aliases": [
- "monocle_face"
- ],
+ "aliases": ["monocle_face"],
"tags": []
},
{
"char": "๐",
"description": "confused face",
- "aliases": [
- "confused"
- ],
+ "aliases": ["confused"],
"tags": []
},
{
"char": "๐ซค",
"description": "face with diagonal mouth",
- "aliases": [
- "face_with_diagonal_mouth"
- ],
- "tags": [
- "confused"
- ]
+ "aliases": ["face_with_diagonal_mouth"],
+ "tags": ["confused"]
},
{
"char": "๐",
"description": "worried face",
- "aliases": [
- "worried"
- ],
- "tags": [
- "nervous"
- ]
+ "aliases": ["worried"],
+ "tags": ["nervous"]
},
{
"char": "๐",
"description": "slightly frowning face",
- "aliases": [
- "slightly_frowning_face"
- ],
+ "aliases": ["slightly_frowning_face"],
"tags": []
},
{
"char": "โน๏ธ",
"description": "frowning face",
- "aliases": [
- "frowning_face"
- ],
+ "aliases": ["frowning_face"],
"tags": []
},
{
"char": "๐ฎ",
"description": "face with open mouth",
- "aliases": [
- "open_mouth"
- ],
- "tags": [
- "surprise",
- "impressed",
- "wow"
- ]
+ "aliases": ["open_mouth"],
+ "tags": ["surprise", "impressed", "wow"]
},
{
"char": "๐ฏ",
"description": "hushed face",
- "aliases": [
- "hushed"
- ],
- "tags": [
- "silence",
- "speechless"
- ]
+ "aliases": ["hushed"],
+ "tags": ["silence", "speechless"]
},
{
"char": "๐ฒ",
"description": "astonished face",
- "aliases": [
- "astonished"
- ],
- "tags": [
- "amazed",
- "gasp"
- ]
+ "aliases": ["astonished"],
+ "tags": ["amazed", "gasp"]
},
{
"char": "๐ณ",
"description": "flushed face",
- "aliases": [
- "flushed"
- ],
+ "aliases": ["flushed"],
"tags": []
},
{
"char": "๐ฅบ",
"description": "pleading face",
- "aliases": [
- "pleading_face"
- ],
- "tags": [
- "puppy",
- "eyes"
- ]
+ "aliases": ["pleading_face"],
+ "tags": ["puppy", "eyes"]
},
{
"char": "๐ฅน",
"description": "face holding back tears",
- "aliases": [
- "face_holding_back_tears"
- ],
- "tags": [
- "tears",
- "gratitude"
- ]
+ "aliases": ["face_holding_back_tears"],
+ "tags": ["tears", "gratitude"]
},
{
"char": "๐ฆ",
"description": "frowning face with open mouth",
- "aliases": [
- "frowning"
- ],
+ "aliases": ["frowning"],
"tags": []
},
{
"char": "๐ง",
"description": "anguished face",
- "aliases": [
- "anguished"
- ],
- "tags": [
- "stunned"
- ]
+ "aliases": ["anguished"],
+ "tags": ["stunned"]
},
{
"char": "๐จ",
"description": "fearful face",
- "aliases": [
- "fearful"
- ],
- "tags": [
- "scared",
- "shocked",
- "oops"
- ]
+ "aliases": ["fearful"],
+ "tags": ["scared", "shocked", "oops"]
},
{
"char": "๐ฐ",
"description": "anxious face with sweat",
- "aliases": [
- "cold_sweat"
- ],
- "tags": [
- "nervous"
- ]
+ "aliases": ["cold_sweat"],
+ "tags": ["nervous"]
},
{
"char": "๐ฅ",
"description": "sad but relieved face",
- "aliases": [
- "disappointed_relieved"
- ],
- "tags": [
- "phew",
- "sweat",
- "nervous"
- ]
+ "aliases": ["disappointed_relieved"],
+ "tags": ["phew", "sweat", "nervous"]
},
{
"char": "๐ข",
"description": "crying face",
- "aliases": [
- "cry"
- ],
- "tags": [
- "sad",
- "tear"
- ]
+ "aliases": ["cry"],
+ "tags": ["sad", "tear"]
},
{
"char": "๐ญ",
"description": "loudly crying face",
- "aliases": [
- "sob"
- ],
- "tags": [
- "sad",
- "cry",
- "bawling"
- ]
+ "aliases": ["sob"],
+ "tags": ["sad", "cry", "bawling"]
},
{
"char": "๐ฑ",
"description": "face screaming in fear",
- "aliases": [
- "scream"
- ],
- "tags": [
- "horror",
- "shocked"
- ]
+ "aliases": ["scream"],
+ "tags": ["horror", "shocked"]
},
{
"char": "๐",
"description": "confounded face",
- "aliases": [
- "confounded"
- ],
+ "aliases": ["confounded"],
"tags": []
},
{
"char": "๐ฃ",
"description": "persevering face",
- "aliases": [
- "persevere"
- ],
- "tags": [
- "struggling"
- ]
+ "aliases": ["persevere"],
+ "tags": ["struggling"]
},
{
"char": "๐",
"description": "disappointed face",
- "aliases": [
- "disappointed"
- ],
- "tags": [
- "sad"
- ]
+ "aliases": ["disappointed"],
+ "tags": ["sad"]
},
{
"char": "๐",
"description": "downcast face with sweat",
- "aliases": [
- "sweat"
- ],
+ "aliases": ["sweat"],
"tags": []
},
{
"char": "๐ฉ",
"description": "weary face",
- "aliases": [
- "weary"
- ],
- "tags": [
- "tired"
- ]
+ "aliases": ["weary"],
+ "tags": ["tired"]
},
{
"char": "๐ซ",
"description": "tired face",
- "aliases": [
- "tired_face"
- ],
- "tags": [
- "upset",
- "whine"
- ]
+ "aliases": ["tired_face"],
+ "tags": ["upset", "whine"]
},
{
"char": "๐ฅฑ",
"description": "yawning face",
- "aliases": [
- "yawning_face"
- ],
+ "aliases": ["yawning_face"],
"tags": []
},
{
"char": "๐ค",
"description": "face with steam from nose",
- "aliases": [
- "triumph"
- ],
- "tags": [
- "smug"
- ]
+ "aliases": ["triumph"],
+ "tags": ["smug"]
},
{
"char": "๐ก",
"description": "enraged face",
- "aliases": [
- "rage",
- "pout"
- ],
- "tags": [
- "angry"
- ]
+ "aliases": ["rage", "pout"],
+ "tags": ["angry"]
},
{
"char": "๐ ",
"description": "angry face",
- "aliases": [
- "angry"
- ],
- "tags": [
- "mad",
- "annoyed"
- ]
+ "aliases": ["angry"],
+ "tags": ["mad", "annoyed"]
},
{
"char": "๐คฌ",
"description": "face with symbols on mouth",
- "aliases": [
- "cursing_face"
- ],
- "tags": [
- "foul"
- ]
+ "aliases": ["cursing_face"],
+ "tags": ["foul"]
},
{
"char": "๐",
"description": "smiling face with horns",
- "aliases": [
- "smiling_imp"
- ],
- "tags": [
- "devil",
- "evil",
- "horns"
- ]
+ "aliases": ["smiling_imp"],
+ "tags": ["devil", "evil", "horns"]
},
{
"char": "๐ฟ",
"description": "angry face with horns",
- "aliases": [
- "imp"
- ],
- "tags": [
- "angry",
- "devil",
- "evil",
- "horns"
- ]
+ "aliases": ["imp"],
+ "tags": ["angry", "devil", "evil", "horns"]
},
{
"char": "๐คก",
"description": "clown face",
- "aliases": [
- "clown_face"
- ],
+ "aliases": ["clown_face"],
"tags": []
},
{
"char": "๐บ",
"description": "grinning cat",
- "aliases": [
- "smiley_cat"
- ],
+ "aliases": ["smiley_cat"],
"tags": []
},
{
"char": "๐ธ",
"description": "grinning cat with smiling eyes",
- "aliases": [
- "smile_cat"
- ],
+ "aliases": ["smile_cat"],
"tags": []
},
{
"char": "๐ป",
"description": "smiling cat with heart-eyes",
- "aliases": [
- "heart_eyes_cat"
- ],
+ "aliases": ["heart_eyes_cat"],
"tags": []
},
{
"char": "๐ผ",
"description": "cat with wry smile",
- "aliases": [
- "smirk_cat"
- ],
+ "aliases": ["smirk_cat"],
"tags": []
},
{
"char": "๐ฟ",
"description": "crying cat",
- "aliases": [
- "crying_cat_face"
- ],
- "tags": [
- "sad",
- "tear"
- ]
+ "aliases": ["crying_cat_face"],
+ "tags": ["sad", "tear"]
},
{
"char": "๐",
"description": "love letter",
- "aliases": [
- "love_letter"
- ],
- "tags": [
- "email",
- "envelope"
- ]
+ "aliases": ["love_letter"],
+ "tags": ["email", "envelope"]
},
{
"char": "๐",
"description": "heart with arrow",
- "aliases": [
- "cupid"
- ],
- "tags": [
- "love",
- "heart"
- ]
+ "aliases": ["cupid"],
+ "tags": ["love", "heart"]
},
{
"char": "๐",
"description": "heart with ribbon",
- "aliases": [
- "gift_heart"
- ],
- "tags": [
- "chocolates"
- ]
+ "aliases": ["gift_heart"],
+ "tags": ["chocolates"]
},
{
"char": "๐",
"description": "sparkling heart",
- "aliases": [
- "sparkling_heart"
- ],
+ "aliases": ["sparkling_heart"],
"tags": []
},
{
"char": "๐",
"description": "growing heart",
- "aliases": [
- "heartpulse"
- ],
+ "aliases": ["heartpulse"],
"tags": []
},
{
"char": "๐",
"description": "beating heart",
- "aliases": [
- "heartbeat"
- ],
+ "aliases": ["heartbeat"],
"tags": []
},
{
"char": "๐",
"description": "revolving hearts",
- "aliases": [
- "revolving_hearts"
- ],
+ "aliases": ["revolving_hearts"],
"tags": []
},
{
"char": "๐",
"description": "two hearts",
- "aliases": [
- "two_hearts"
- ],
+ "aliases": ["two_hearts"],
"tags": []
},
{
"char": "๐",
"description": "heart decoration",
- "aliases": [
- "heart_decoration"
- ],
+ "aliases": ["heart_decoration"],
"tags": []
},
{
"char": "โฃ๏ธ",
"description": "heart exclamation",
- "aliases": [
- "heavy_heart_exclamation"
- ],
+ "aliases": ["heavy_heart_exclamation"],
"tags": []
},
{
"char": "๐",
"description": "broken heart",
- "aliases": [
- "broken_heart"
- ],
+ "aliases": ["broken_heart"],
"tags": []
},
{
"char": "โค๏ธโ๐ฅ",
"description": "heart on fire",
- "aliases": [
- "heart_on_fire"
- ],
+ "aliases": ["heart_on_fire"],
"tags": []
},
{
"char": "โค๏ธโ๐ฉน",
"description": "mending heart",
- "aliases": [
- "mending_heart"
- ],
+ "aliases": ["mending_heart"],
"tags": []
},
{
"char": "โค๏ธ",
"description": "red heart",
- "aliases": [
- "heart"
- ],
- "tags": [
- "love"
- ]
+ "aliases": ["heart"],
+ "tags": ["love"]
},
{
"char": "๐ฉท",
"description": "pink heart",
- "aliases": [
- "pink_heart"
- ],
+ "aliases": ["pink_heart"],
"tags": []
},
{
"char": "๐งก",
"description": "orange heart",
- "aliases": [
- "orange_heart"
- ],
+ "aliases": ["orange_heart"],
"tags": []
},
{
"char": "๐",
"description": "yellow heart",
- "aliases": [
- "yellow_heart"
- ],
+ "aliases": ["yellow_heart"],
"tags": []
},
{
"char": "๐",
"description": "green heart",
- "aliases": [
- "green_heart"
- ],
+ "aliases": ["green_heart"],
"tags": []
},
{
"char": "๐",
"description": "blue heart",
- "aliases": [
- "blue_heart"
- ],
+ "aliases": ["blue_heart"],
"tags": []
},
{
"char": "๐ฉต",
"description": "light blue heart",
- "aliases": [
- "light_blue_heart"
- ],
+ "aliases": ["light_blue_heart"],
"tags": []
},
{
"char": "๐",
"description": "purple heart",
- "aliases": [
- "purple_heart"
- ],
+ "aliases": ["purple_heart"],
"tags": []
},
{
"char": "๐ค",
"description": "brown heart",
- "aliases": [
- "brown_heart"
- ],
+ "aliases": ["brown_heart"],
"tags": []
},
{
"char": "๐ค",
"description": "black heart",
- "aliases": [
- "black_heart"
- ],
+ "aliases": ["black_heart"],
"tags": []
},
{
"char": "๐ฉถ",
"description": "grey heart",
- "aliases": [
- "grey_heart"
- ],
+ "aliases": ["grey_heart"],
"tags": []
},
{
"char": "๐ค",
"description": "white heart",
- "aliases": [
- "white_heart"
- ],
+ "aliases": ["white_heart"],
"tags": []
},
{
"char": "๐ข",
"description": "anger symbol",
- "aliases": [
- "anger"
- ],
- "tags": [
- "angry"
- ]
+ "aliases": ["anger"],
+ "tags": ["angry"]
},
{
"char": "๐ค",
"description": "love-you gesture",
- "aliases": [
- "love_you_gesture"
- ],
+ "aliases": ["love_you_gesture"],
"tags": []
},
{
"char": "๐",
"description": "oncoming fist",
- "aliases": [
- "fist_oncoming",
- "facepunch",
- "punch"
- ],
- "tags": [
- "attack"
- ]
+ "aliases": ["fist_oncoming", "facepunch", "punch"],
+ "tags": ["attack"]
},
{
"char": "๐ซถ",
"description": "heart hands",
- "aliases": [
- "heart_hands"
- ],
- "tags": [
- "love"
- ]
+ "aliases": ["heart_hands"],
+ "tags": ["love"]
},
{
"char": "๐ซ",
"description": "anatomical heart",
- "aliases": [
- "anatomical_heart"
- ],
+ "aliases": ["anatomical_heart"],
"tags": []
},
{
"char": "๐ง",
"description": "person",
- "aliases": [
- "adult"
- ],
+ "aliases": ["adult"],
"tags": []
},
{
"char": "๐ฑ",
"description": "person: blond hair",
- "aliases": [
- "blond_haired_person"
- ],
+ "aliases": ["blond_haired_person"],
"tags": []
},
{
"char": "๐ง",
"description": "person: beard",
- "aliases": [
- "bearded_person"
- ],
+ "aliases": ["bearded_person"],
"tags": []
},
{
"char": "๐งโ๐ฆฐ",
"description": "person: red hair",
- "aliases": [
- "person_red_hair"
- ],
+ "aliases": ["person_red_hair"],
"tags": []
},
{
"char": "๐งโ๐ฆฑ",
"description": "person: curly hair",
- "aliases": [
- "person_curly_hair"
- ],
+ "aliases": ["person_curly_hair"],
"tags": []
},
{
"char": "๐งโ๐ฆณ",
"description": "person: white hair",
- "aliases": [
- "person_white_hair"
- ],
+ "aliases": ["person_white_hair"],
"tags": []
},
{
"char": "๐งโ๐ฆฒ",
"description": "person: bald",
- "aliases": [
- "person_bald"
- ],
+ "aliases": ["person_bald"],
"tags": []
},
{
"char": "๐ง",
"description": "older person",
- "aliases": [
- "older_adult"
- ],
+ "aliases": ["older_adult"],
"tags": []
},
{
"char": "๐",
"description": "person frowning",
- "aliases": [
- "frowning_person"
- ],
+ "aliases": ["frowning_person"],
"tags": []
},
{
"char": "๐",
"description": "person pouting",
- "aliases": [
- "pouting_face"
- ],
+ "aliases": ["pouting_face"],
"tags": []
},
{
"char": "๐
",
"description": "person gesturing NO",
- "aliases": [
- "no_good"
- ],
- "tags": [
- "stop",
- "halt",
- "denied"
- ]
+ "aliases": ["no_good"],
+ "tags": ["stop", "halt", "denied"]
},
{
"char": "๐",
"description": "person gesturing OK",
- "aliases": [
- "ok_person"
- ],
+ "aliases": ["ok_person"],
"tags": []
},
{
"char": "๐",
"description": "person tipping hand",
- "aliases": [
- "tipping_hand_person",
- "information_desk_person"
- ],
+ "aliases": ["tipping_hand_person", "information_desk_person"],
"tags": []
},
{
"char": "๐",
"description": "person raising hand",
- "aliases": [
- "raising_hand"
- ],
+ "aliases": ["raising_hand"],
"tags": []
},
{
"char": "๐ง",
"description": "deaf person",
- "aliases": [
- "deaf_person"
- ],
+ "aliases": ["deaf_person"],
"tags": []
},
{
"char": "๐",
"description": "person bowing",
- "aliases": [
- "bow"
- ],
- "tags": [
- "respect",
- "thanks"
- ]
+ "aliases": ["bow"],
+ "tags": ["respect", "thanks"]
},
{
"char": "๐คฆ",
"description": "person facepalming",
- "aliases": [
- "facepalm"
- ],
+ "aliases": ["facepalm"],
"tags": []
},
{
"char": "๐คฆโโ๏ธ",
"description": "man facepalming",
- "aliases": [
- "man_facepalming"
- ],
+ "aliases": ["man_facepalming"],
"tags": []
},
{
"char": "๐คฆโโ๏ธ",
"description": "woman facepalming",
- "aliases": [
- "woman_facepalming"
- ],
+ "aliases": ["woman_facepalming"],
"tags": []
},
{
"char": "๐คท",
"description": "person shrugging",
- "aliases": [
- "shrug"
- ],
+ "aliases": ["shrug"],
"tags": []
},
{
"char": "๐ซ
",
"description": "person with crown",
- "aliases": [
- "person_with_crown"
- ],
+ "aliases": ["person_with_crown"],
"tags": []
},
{
"char": "๐ณ",
"description": "person wearing turban",
- "aliases": [
- "person_with_turban"
- ],
+ "aliases": ["person_with_turban"],
"tags": []
},
{
"char": "๐ฒ",
"description": "person with skullcap",
- "aliases": [
- "man_with_gua_pi_mao"
- ],
+ "aliases": ["man_with_gua_pi_mao"],
"tags": []
},
{
"char": "๐คต",
"description": "person in tuxedo",
- "aliases": [
- "person_in_tuxedo"
- ],
- "tags": [
- "groom",
- "marriage",
- "wedding"
- ]
+ "aliases": ["person_in_tuxedo"],
+ "tags": ["groom", "marriage", "wedding"]
},
{
"char": "๐ฐ",
"description": "person with veil",
- "aliases": [
- "person_with_veil"
- ],
- "tags": [
- "marriage",
- "wedding"
- ]
+ "aliases": ["person_with_veil"],
+ "tags": ["marriage", "wedding"]
},
{
"char": "๐ซ",
"description": "pregnant person",
- "aliases": [
- "pregnant_person"
- ],
+ "aliases": ["pregnant_person"],
"tags": []
},
{
"char": "๐งโ๐ผ",
"description": "person feeding baby",
- "aliases": [
- "person_feeding_baby"
- ],
+ "aliases": ["person_feeding_baby"],
"tags": []
},
{
"char": "๐ง",
"description": "merperson",
- "aliases": [
- "merperson"
- ],
+ "aliases": ["merperson"],
"tags": []
},
{
"char": "๐",
"description": "person getting massage",
- "aliases": [
- "massage"
- ],
- "tags": [
- "spa"
- ]
+ "aliases": ["massage"],
+ "tags": ["spa"]
},
{
"char": "๐",
"description": "person getting haircut",
- "aliases": [
- "haircut"
- ],
- "tags": [
- "beauty"
- ]
+ "aliases": ["haircut"],
+ "tags": ["beauty"]
},
{
"char": "๐ถ",
"description": "person walking",
- "aliases": [
- "walking"
- ],
+ "aliases": ["walking"],
"tags": []
},
{
"char": "๐ง",
"description": "person standing",
- "aliases": [
- "standing_person"
- ],
+ "aliases": ["standing_person"],
"tags": []
},
{
"char": "๐ง",
"description": "person kneeling",
- "aliases": [
- "kneeling_person"
- ],
+ "aliases": ["kneeling_person"],
"tags": []
},
{
"char": "๐งโ๐ฆฏ",
"description": "person with white cane",
- "aliases": [
- "person_with_probing_cane"
- ],
+ "aliases": ["person_with_probing_cane"],
"tags": []
},
{
"char": "๐งโ๐ฆผ",
"description": "person in motorized wheelchair",
- "aliases": [
- "person_in_motorized_wheelchair"
- ],
+ "aliases": ["person_in_motorized_wheelchair"],
"tags": []
},
{
"char": "๐งโ๐ฆฝ",
"description": "person in manual wheelchair",
- "aliases": [
- "person_in_manual_wheelchair"
- ],
+ "aliases": ["person_in_manual_wheelchair"],
"tags": []
},
{
"char": "๐",
"description": "person running",
- "aliases": [
- "runner",
- "running"
- ],
- "tags": [
- "exercise",
- "workout",
- "marathon"
- ]
+ "aliases": ["runner", "running"],
+ "tags": ["exercise", "workout", "marathon"]
},
{
"char": "๐ด๏ธ",
"description": "person in suit levitating",
- "aliases": [
- "business_suit_levitating"
- ],
+ "aliases": ["business_suit_levitating"],
"tags": []
},
{
"char": "๐ง",
"description": "person in steamy room",
- "aliases": [
- "sauna_person"
- ],
- "tags": [
- "steamy"
- ]
+ "aliases": ["sauna_person"],
+ "tags": ["steamy"]
},
{
"char": "๐ง",
"description": "person climbing",
- "aliases": [
- "climbing"
- ],
- "tags": [
- "bouldering"
- ]
+ "aliases": ["climbing"],
+ "tags": ["bouldering"]
},
{
"char": "๐คบ",
"description": "person fencing",
- "aliases": [
- "person_fencing"
- ],
+ "aliases": ["person_fencing"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "person golfing",
- "aliases": [
- "golfing"
- ],
+ "aliases": ["golfing"],
"tags": []
},
{
"char": "๐",
"description": "person surfing",
- "aliases": [
- "surfer"
- ],
+ "aliases": ["surfer"],
"tags": []
},
{
"char": "๐ฃ",
"description": "person rowing boat",
- "aliases": [
- "rowboat"
- ],
+ "aliases": ["rowboat"],
"tags": []
},
{
"char": "๐",
"description": "person swimming",
- "aliases": [
- "swimmer"
- ],
+ "aliases": ["swimmer"],
"tags": []
},
{
"char": "โน๏ธ",
"description": "person bouncing ball",
- "aliases": [
- "bouncing_ball_person"
- ],
- "tags": [
- "basketball"
- ]
+ "aliases": ["bouncing_ball_person"],
+ "tags": ["basketball"]
},
{
"char": "๐๏ธ",
"description": "person lifting weights",
- "aliases": [
- "weight_lifting"
- ],
- "tags": [
- "gym",
- "workout"
- ]
+ "aliases": ["weight_lifting"],
+ "tags": ["gym", "workout"]
},
{
"char": "๐ด",
"description": "person biking",
- "aliases": [
- "bicyclist"
- ],
+ "aliases": ["bicyclist"],
"tags": []
},
{
"char": "๐ต",
"description": "person mountain biking",
- "aliases": [
- "mountain_bicyclist"
- ],
+ "aliases": ["mountain_bicyclist"],
"tags": []
},
{
"char": "๐คธ",
"description": "person cartwheeling",
- "aliases": [
- "cartwheeling"
- ],
+ "aliases": ["cartwheeling"],
"tags": []
},
{
"char": "๐คฝ",
"description": "person playing water polo",
- "aliases": [
- "water_polo"
- ],
+ "aliases": ["water_polo"],
"tags": []
},
{
"char": "๐คพ",
"description": "person playing handball",
- "aliases": [
- "handball_person"
- ],
+ "aliases": ["handball_person"],
"tags": []
},
{
"char": "๐คน",
"description": "person juggling",
- "aliases": [
- "juggling_person"
- ],
+ "aliases": ["juggling_person"],
"tags": []
},
{
"char": "๐ง",
"description": "person in lotus position",
- "aliases": [
- "lotus_position"
- ],
- "tags": [
- "meditation"
- ]
+ "aliases": ["lotus_position"],
+ "tags": ["meditation"]
},
{
"char": "๐",
"description": "person taking bath",
- "aliases": [
- "bath"
- ],
- "tags": [
- "shower"
- ]
+ "aliases": ["bath"],
+ "tags": ["shower"]
},
{
"char": "๐",
"description": "person in bed",
- "aliases": [
- "sleeping_bed"
- ],
+ "aliases": ["sleeping_bed"],
"tags": []
},
{
"char": "๐",
"description": "couple with heart",
- "aliases": [
- "couple_with_heart"
- ],
+ "aliases": ["couple_with_heart"],
"tags": []
},
{
"char": "๐ฉโโค๏ธโ๐จ",
"description": "couple with heart: woman, man",
- "aliases": [
- "couple_with_heart_woman_man"
- ],
+ "aliases": ["couple_with_heart_woman_man"],
"tags": []
},
{
"char": "๐จโโค๏ธโ๐จ",
"description": "couple with heart: man, man",
- "aliases": [
- "couple_with_heart_man_man"
- ],
+ "aliases": ["couple_with_heart_man_man"],
"tags": []
},
{
"char": "๐ฉโโค๏ธโ๐ฉ",
"description": "couple with heart: woman, woman",
- "aliases": [
- "couple_with_heart_woman_woman"
- ],
+ "aliases": ["couple_with_heart_woman_woman"],
"tags": []
},
{
"char": "๐ต",
"description": "monkey face",
- "aliases": [
- "monkey_face"
- ],
+ "aliases": ["monkey_face"],
"tags": []
},
{
"char": "๐ถ",
"description": "dog face",
- "aliases": [
- "dog"
- ],
- "tags": [
- "pet"
- ]
+ "aliases": ["dog"],
+ "tags": ["pet"]
},
{
"char": "๐ฆ",
"description": "fox",
- "aliases": [
- "fox_face"
- ],
+ "aliases": ["fox_face"],
"tags": []
},
{
"char": "๐ฑ",
"description": "cat face",
- "aliases": [
- "cat"
- ],
- "tags": [
- "pet"
- ]
+ "aliases": ["cat"],
+ "tags": ["pet"]
},
{
"char": "๐ฏ",
"description": "tiger face",
- "aliases": [
- "tiger"
- ],
+ "aliases": ["tiger"],
"tags": []
},
{
"char": "๐ด",
"description": "horse face",
- "aliases": [
- "horse"
- ],
+ "aliases": ["horse"],
"tags": []
},
{
"char": "๐ฎ",
"description": "cow face",
- "aliases": [
- "cow"
- ],
+ "aliases": ["cow"],
"tags": []
},
{
"char": "๐ท",
"description": "pig face",
- "aliases": [
- "pig"
- ],
+ "aliases": ["pig"],
"tags": []
},
{
"char": "๐ญ",
"description": "mouse face",
- "aliases": [
- "mouse"
- ],
+ "aliases": ["mouse"],
"tags": []
},
{
"char": "๐ฐ",
"description": "rabbit face",
- "aliases": [
- "rabbit"
- ],
- "tags": [
- "bunny"
- ]
+ "aliases": ["rabbit"],
+ "tags": ["bunny"]
},
{
"char": "๐ผ",
"description": "panda",
- "aliases": [
- "panda_face"
- ],
+ "aliases": ["panda_face"],
"tags": []
},
{
"char": "๐ฒ",
"description": "dragon face",
- "aliases": [
- "dragon_face"
- ],
+ "aliases": ["dragon_face"],
"tags": []
},
{
"char": "๐",
"description": "four leaf clover",
- "aliases": [
- "four_leaf_clover"
- ],
- "tags": [
- "luck"
- ]
+ "aliases": ["four_leaf_clover"],
+ "tags": ["luck"]
},
{
"char": "๐ฉ",
"description": "love hotel",
- "aliases": [
- "love_hotel"
- ],
+ "aliases": ["love_hotel"],
"tags": []
},
{
"char": "๐",
"description": "new moon face",
- "aliases": [
- "new_moon_with_face"
- ],
+ "aliases": ["new_moon_with_face"],
"tags": []
},
{
"char": "๐",
"description": "first quarter moon face",
- "aliases": [
- "first_quarter_moon_with_face"
- ],
+ "aliases": ["first_quarter_moon_with_face"],
"tags": []
},
{
"char": "๐",
"description": "last quarter moon face",
- "aliases": [
- "last_quarter_moon_with_face"
- ],
+ "aliases": ["last_quarter_moon_with_face"],
"tags": []
},
{
"char": "๐",
"description": "full moon face",
- "aliases": [
- "full_moon_with_face"
- ],
+ "aliases": ["full_moon_with_face"],
"tags": []
},
{
"char": "๐",
"description": "sun with face",
- "aliases": [
- "sun_with_face"
- ],
- "tags": [
- "summer"
- ]
+ "aliases": ["sun_with_face"],
+ "tags": ["summer"]
},
{
"char": "๐ฌ๏ธ",
"description": "wind face",
- "aliases": [
- "wind_face"
- ],
+ "aliases": ["wind_face"],
"tags": []
},
{
"char": "๐ฅ",
"description": "boxing glove",
- "aliases": [
- "boxing_glove"
- ],
+ "aliases": ["boxing_glove"],
"tags": []
},
{
"char": "โฅ๏ธ",
"description": "heart suit",
- "aliases": [
- "hearts"
- ],
+ "aliases": ["hearts"],
"tags": []
},
{
"char": "๐งค",
"description": "gloves",
- "aliases": [
- "gloves"
- ],
+ "aliases": ["gloves"],
"tags": []
},
{
"char": "๐ธ๐ฎ",
"description": "flag: Slovenia",
- "aliases": [
- "slovenia"
- ],
+ "aliases": ["slovenia"],
"tags": []
}
],
@@ -2052,109 +1343,79 @@
{
"char": "๐น",
"description": "hamster",
- "aliases": [
- "hamster"
- ],
- "tags": [
- "pet"
- ]
+ "aliases": ["hamster"],
+ "tags": ["pet"]
},
{
"char": "๐ฆ",
"description": "bird",
- "aliases": [
- "bird"
- ],
+ "aliases": ["bird"],
"tags": []
},
{
"char": "๐ฆโโฌ",
"description": "black bird",
- "aliases": [
- "black_bird"
- ],
+ "aliases": ["black_bird"],
"tags": []
},
{
"char": "๐",
"description": "fish",
- "aliases": [
- "fish"
- ],
+ "aliases": ["fish"],
"tags": []
},
{
"char": "๐ ",
"description": "tropical fish",
- "aliases": [
- "tropical_fish"
- ],
+ "aliases": ["tropical_fish"],
"tags": []
},
{
"char": "๐ก",
"description": "blowfish",
- "aliases": [
- "blowfish"
- ],
+ "aliases": ["blowfish"],
"tags": []
},
{
"char": "๐ชผ",
"description": "jellyfish",
- "aliases": [
- "jellyfish"
- ],
+ "aliases": ["jellyfish"],
"tags": []
},
{
"char": "๐",
"description": "bug",
- "aliases": [
- "bug"
- ],
+ "aliases": ["bug"],
"tags": []
},
{
"char": "๐",
"description": "lady beetle",
- "aliases": [
- "lady_beetle"
- ],
- "tags": [
- "bug"
- ]
+ "aliases": ["lady_beetle"],
+ "tags": ["bug"]
},
{
"char": "๐ฅ",
"description": "fish cake with swirl",
- "aliases": [
- "fish_cake"
- ],
+ "aliases": ["fish_cake"],
"tags": []
},
{
"char": "๐ฃ",
"description": "fishing pole",
- "aliases": [
- "fishing_pole_and_fish"
- ],
+ "aliases": ["fishing_pole_and_fish"],
"tags": []
},
{
"char": "๐บ",
"description": "trumpet",
- "aliases": [
- "trumpet"
- ],
+ "aliases": ["trumpet"],
"tags": []
},
{
"char": "๐งซ",
"description": "petri dish",
- "aliases": [
- "petri_dish"
- ],
+ "aliases": ["petri_dish"],
"tags": []
}
],
@@ -2162,370 +1423,231 @@
{
"char": "๐",
"description": "banana",
- "aliases": [
- "banana"
- ],
- "tags": [
- "fruit"
- ]
+ "aliases": ["banana"],
+ "tags": ["fruit"]
},
{
"char": "๐",
"description": "green apple",
- "aliases": [
- "green_apple"
- ],
- "tags": [
- "fruit"
- ]
+ "aliases": ["green_apple"],
+ "tags": ["fruit"]
},
{
"char": "๐",
"description": "cherries",
- "aliases": [
- "cherries"
- ],
- "tags": [
- "fruit"
- ]
+ "aliases": ["cherries"],
+ "tags": ["fruit"]
},
{
"char": "๐",
"description": "strawberry",
- "aliases": [
- "strawberry"
- ],
- "tags": [
- "fruit"
- ]
+ "aliases": ["strawberry"],
+ "tags": ["fruit"]
},
{
"char": "๐ฅ",
"description": "kiwi fruit",
- "aliases": [
- "kiwi_fruit"
- ],
+ "aliases": ["kiwi_fruit"],
"tags": []
},
{
"char": "๐ณ",
"description": "cooking",
- "aliases": [
- "fried_egg"
- ],
- "tags": [
- "breakfast"
- ]
+ "aliases": ["fried_egg"],
+ "tags": ["breakfast"]
},
{
"char": "๐ฅ",
"description": "shallow pan of food",
- "aliases": [
- "shallow_pan_of_food"
- ],
- "tags": [
- "paella",
- "curry"
- ]
+ "aliases": ["shallow_pan_of_food"],
+ "tags": ["paella", "curry"]
},
{
"char": "๐ฒ",
"description": "pot of food",
- "aliases": [
- "stew"
- ],
+ "aliases": ["stew"],
"tags": []
},
{
"char": "๐ฅซ",
"description": "canned food",
- "aliases": [
- "canned_food"
- ],
+ "aliases": ["canned_food"],
"tags": []
},
{
"char": "๐ต",
"description": "teacup without handle",
- "aliases": [
- "tea"
- ],
- "tags": [
- "green",
- "breakfast"
- ]
+ "aliases": ["tea"],
+ "tags": ["green", "breakfast"]
},
{
"char": "๐ธ",
"description": "cocktail glass",
- "aliases": [
- "cocktail"
- ],
- "tags": [
- "drink"
- ]
+ "aliases": ["cocktail"],
+ "tags": ["drink"]
},
{
"char": "๐น",
"description": "tropical drink",
- "aliases": [
- "tropical_drink"
- ],
- "tags": [
- "summer",
- "vacation"
- ]
+ "aliases": ["tropical_drink"],
+ "tags": ["summer", "vacation"]
},
{
"char": "๐บ",
"description": "beer mug",
- "aliases": [
- "beer"
- ],
- "tags": [
- "drink"
- ]
+ "aliases": ["beer"],
+ "tags": ["drink"]
},
{
"char": "๐ป",
"description": "clinking beer mugs",
- "aliases": [
- "beers"
- ],
- "tags": [
- "drinks"
- ]
+ "aliases": ["beers"],
+ "tags": ["drinks"]
},
{
"char": "๐ฝ๏ธ",
"description": "fork and knife with plate",
- "aliases": [
- "plate_with_cutlery"
- ],
- "tags": [
- "dining",
- "dinner"
- ]
+ "aliases": ["plate_with_cutlery"],
+ "tags": ["dining", "dinner"]
}
],
"activities": [
{
"char": "๐พ",
"description": "alien monster",
- "aliases": [
- "space_invader"
- ],
- "tags": [
- "game",
- "retro"
- ]
+ "aliases": ["space_invader"],
+ "tags": ["game", "retro"]
},
{
"char": "๐๏ธ",
"description": "hand with fingers splayed",
- "aliases": [
- "raised_hand_with_fingers_splayed"
- ],
+ "aliases": ["raised_hand_with_fingers_splayed"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man running",
- "aliases": [
- "running_man"
- ],
- "tags": [
- "exercise",
- "workout",
- "marathon"
- ]
+ "aliases": ["running_man"],
+ "tags": ["exercise", "workout", "marathon"]
},
{
"char": "๐โโ๏ธ",
"description": "woman running",
- "aliases": [
- "running_woman"
- ],
- "tags": [
- "exercise",
- "workout",
- "marathon"
- ]
+ "aliases": ["running_woman"],
+ "tags": ["exercise", "workout", "marathon"]
},
{
"char": "๐คฝโโ๏ธ",
"description": "man playing water polo",
- "aliases": [
- "man_playing_water_polo"
- ],
+ "aliases": ["man_playing_water_polo"],
"tags": []
},
{
"char": "๐คฝโโ๏ธ",
"description": "woman playing water polo",
- "aliases": [
- "woman_playing_water_polo"
- ],
+ "aliases": ["woman_playing_water_polo"],
"tags": []
},
{
"char": "๐คพโโ๏ธ",
"description": "man playing handball",
- "aliases": [
- "man_playing_handball"
- ],
+ "aliases": ["man_playing_handball"],
"tags": []
},
{
"char": "๐คพโโ๏ธ",
"description": "woman playing handball",
- "aliases": [
- "woman_playing_handball"
- ],
+ "aliases": ["woman_playing_handball"],
"tags": []
},
{
"char": "๐",
"description": "playground slide",
- "aliases": [
- "playground_slide"
- ],
+ "aliases": ["playground_slide"],
"tags": []
},
{
"char": "๐
",
"description": "sports medal",
- "aliases": [
- "medal_sports"
- ],
- "tags": [
- "gold",
- "winner"
- ]
+ "aliases": ["medal_sports"],
+ "tags": ["gold", "winner"]
},
{
"char": "โฝ",
"description": "soccer ball",
- "aliases": [
- "soccer"
- ],
- "tags": [
- "sports"
- ]
+ "aliases": ["soccer"],
+ "tags": ["sports"]
},
{
"char": "โพ",
"description": "baseball",
- "aliases": [
- "baseball"
- ],
- "tags": [
- "sports"
- ]
+ "aliases": ["baseball"],
+ "tags": ["sports"]
},
{
"char": "๐",
"description": "basketball",
- "aliases": [
- "basketball"
- ],
- "tags": [
- "sports"
- ]
+ "aliases": ["basketball"],
+ "tags": ["sports"]
},
{
"char": "๐",
"description": "american football",
- "aliases": [
- "football"
- ],
- "tags": [
- "sports"
- ]
+ "aliases": ["football"],
+ "tags": ["sports"]
},
{
"char": "๐พ",
"description": "tennis",
- "aliases": [
- "tennis"
- ],
- "tags": [
- "sports"
- ]
+ "aliases": ["tennis"],
+ "tags": ["sports"]
},
{
"char": "๐",
"description": "cricket game",
- "aliases": [
- "cricket_game"
- ],
+ "aliases": ["cricket_game"],
"tags": []
},
{
"char": "๐ฎ",
"description": "video game",
- "aliases": [
- "video_game"
- ],
- "tags": [
- "play",
- "controller",
- "console"
- ]
+ "aliases": ["video_game"],
+ "tags": ["play", "controller", "console"]
},
{
"char": "๐ฒ",
"description": "game die",
- "aliases": [
- "game_die"
- ],
- "tags": [
- "dice",
- "gambling"
- ]
+ "aliases": ["game_die"],
+ "tags": ["dice", "gambling"]
},
{
"char": "๐ด",
"description": "flower playing cards",
- "aliases": [
- "flower_playing_cards"
- ],
+ "aliases": ["flower_playing_cards"],
"tags": []
},
{
"char": "๐",
"description": "running shoe",
- "aliases": [
- "athletic_shoe"
- ],
- "tags": [
- "sneaker",
- "sport",
- "running"
- ]
+ "aliases": ["athletic_shoe"],
+ "tags": ["sneaker", "sport", "running"]
},
{
"char": "๐",
"description": "passport control",
- "aliases": [
- "passport_control"
- ],
+ "aliases": ["passport_control"],
"tags": []
},
{
"char": "โถ๏ธ",
"description": "play button",
- "aliases": [
- "arrow_forward"
- ],
+ "aliases": ["arrow_forward"],
"tags": []
},
{
"char": "โฏ๏ธ",
"description": "play or pause button",
- "aliases": [
- "play_or_pause_button"
- ],
+ "aliases": ["play_or_pause_button"],
"tags": []
}
],
@@ -2533,431 +1655,295 @@
{
"char": "๐
",
"description": "nail polish",
- "aliases": [
- "nail_care"
- ],
- "tags": [
- "beauty",
- "manicure"
- ]
+ "aliases": ["nail_care"],
+ "tags": ["beauty", "manicure"]
},
{
"char": "๐ง",
"description": "woman with headscarf",
- "aliases": [
- "woman_with_headscarf"
- ],
- "tags": [
- "hijab"
- ]
+ "aliases": ["woman_with_headscarf"],
+ "tags": ["hijab"]
},
{
"char": "๐คธโโ๏ธ",
"description": "man cartwheeling",
- "aliases": [
- "man_cartwheeling"
- ],
+ "aliases": ["man_cartwheeling"],
"tags": []
},
{
"char": "๐คธโโ๏ธ",
"description": "woman cartwheeling",
- "aliases": [
- "woman_cartwheeling"
- ],
+ "aliases": ["woman_cartwheeling"],
"tags": []
},
{
"char": "๐ฅ",
"description": "carrot",
- "aliases": [
- "carrot"
- ],
+ "aliases": ["carrot"],
"tags": []
},
{
"char": "๐บ๏ธ",
"description": "world map",
- "aliases": [
- "world_map"
- ],
- "tags": [
- "travel"
- ]
+ "aliases": ["world_map"],
+ "tags": ["travel"]
},
{
"char": "๐๏ธ",
"description": "classical building",
- "aliases": [
- "classical_building"
- ],
+ "aliases": ["classical_building"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "building construction",
- "aliases": [
- "building_construction"
- ],
+ "aliases": ["building_construction"],
"tags": []
},
{
"char": "๐ข",
"description": "office building",
- "aliases": [
- "office"
- ],
+ "aliases": ["office"],
"tags": []
},
{
"char": "๐ ",
"description": "carousel horse",
- "aliases": [
- "carousel_horse"
- ],
+ "aliases": ["carousel_horse"],
"tags": []
},
{
"char": "๐",
"description": "railway car",
- "aliases": [
- "railway_car"
- ],
+ "aliases": ["railway_car"],
"tags": []
},
{
"char": "๐",
"description": "tram car",
- "aliases": [
- "train"
- ],
+ "aliases": ["train"],
"tags": []
},
{
"char": "๐",
"description": "police car",
- "aliases": [
- "police_car"
- ],
+ "aliases": ["police_car"],
"tags": []
},
{
"char": "๐",
"description": "oncoming police car",
- "aliases": [
- "oncoming_police_car"
- ],
+ "aliases": ["oncoming_police_car"],
"tags": []
},
{
"char": "๐",
"description": "automobile",
- "aliases": [
- "car",
- "red_car"
- ],
+ "aliases": ["car", "red_car"],
"tags": []
},
{
"char": "๐",
"description": "sport utility vehicle",
- "aliases": [
- "blue_car"
- ],
+ "aliases": ["blue_car"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "racing car",
- "aliases": [
- "racing_car"
- ],
+ "aliases": ["racing_car"],
"tags": []
},
{
"char": "๐จ",
"description": "police car light",
- "aliases": [
- "rotating_light"
- ],
- "tags": [
- "911",
- "emergency"
- ]
+ "aliases": ["rotating_light"],
+ "tags": ["911", "emergency"]
},
{
"char": "โ",
"description": "anchor",
- "aliases": [
- "anchor"
- ],
- "tags": [
- "ship"
- ]
+ "aliases": ["anchor"],
+ "tags": ["ship"]
},
{
"char": "๐ค",
"description": "speedboat",
- "aliases": [
- "speedboat"
- ],
- "tags": [
- "ship"
- ]
+ "aliases": ["speedboat"],
+ "tags": ["ship"]
},
{
"char": "๐ณ๏ธ",
"description": "passenger ship",
- "aliases": [
- "passenger_ship"
- ],
- "tags": [
- "cruise"
- ]
+ "aliases": ["passenger_ship"],
+ "tags": ["cruise"]
},
{
"char": "๐ข",
"description": "ship",
- "aliases": [
- "ship"
- ],
+ "aliases": ["ship"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "airplane",
- "aliases": [
- "airplane"
- ],
- "tags": [
- "flight"
- ]
+ "aliases": ["airplane"],
+ "tags": ["flight"]
},
{
"char": "๐ฉ๏ธ",
"description": "small airplane",
- "aliases": [
- "small_airplane"
- ],
- "tags": [
- "flight"
- ]
+ "aliases": ["small_airplane"],
+ "tags": ["flight"]
},
{
"char": "๐ซ",
"description": "airplane departure",
- "aliases": [
- "flight_departure"
- ],
+ "aliases": ["flight_departure"],
"tags": []
},
{
"char": "๐ฌ",
"description": "airplane arrival",
- "aliases": [
- "flight_arrival"
- ],
+ "aliases": ["flight_arrival"],
"tags": []
},
{
"char": "๐",
"description": "rocket",
- "aliases": [
- "rocket"
- ],
- "tags": [
- "ship",
- "launch"
- ]
+ "aliases": ["rocket"],
+ "tags": ["ship", "launch"]
},
{
"char": "๐ช",
"description": "ringed planet",
- "aliases": [
- "ringed_planet"
- ],
+ "aliases": ["ringed_planet"],
"tags": []
},
{
"char": "๐",
"description": "carp streamer",
- "aliases": [
- "flags"
- ],
+ "aliases": ["flags"],
"tags": []
},
{
"char": "๐ฅ",
"description": "1st place medal",
- "aliases": [
- "1st_place_medal"
- ],
- "tags": [
- "gold"
- ]
+ "aliases": ["1st_place_medal"],
+ "tags": ["gold"]
},
{
"char": "๐ฅ",
"description": "2nd place medal",
- "aliases": [
- "2nd_place_medal"
- ],
- "tags": [
- "silver"
- ]
+ "aliases": ["2nd_place_medal"],
+ "tags": ["silver"]
},
{
"char": "๐ฅ",
"description": "3rd place medal",
- "aliases": [
- "3rd_place_medal"
- ],
- "tags": [
- "bronze"
- ]
+ "aliases": ["3rd_place_medal"],
+ "tags": ["bronze"]
},
{
"char": "๐งฃ",
"description": "scarf",
- "aliases": [
- "scarf"
- ],
+ "aliases": ["scarf"],
"tags": []
},
{
"char": "๐ณ",
"description": "credit card",
- "aliases": [
- "credit_card"
- ],
- "tags": [
- "subscription"
- ]
+ "aliases": ["credit_card"],
+ "tags": ["subscription"]
},
{
"char": "๐ฆ",
"description": "package",
- "aliases": [
- "package"
- ],
- "tags": [
- "shipping"
- ]
+ "aliases": ["package"],
+ "tags": ["shipping"]
},
{
"char": "๐๏ธ",
"description": "card index dividers",
- "aliases": [
- "card_index_dividers"
- ],
+ "aliases": ["card_index_dividers"],
"tags": []
},
{
"char": "๐",
"description": "card index",
- "aliases": [
- "card_index"
- ],
+ "aliases": ["card_index"],
"tags": []
},
{
"char": "๐",
"description": "pushpin",
- "aliases": [
- "pushpin"
- ],
- "tags": [
- "location"
- ]
+ "aliases": ["pushpin"],
+ "tags": ["location"]
},
{
"char": "๐",
"description": "round pushpin",
- "aliases": [
- "round_pushpin"
- ],
- "tags": [
- "location"
- ]
+ "aliases": ["round_pushpin"],
+ "tags": ["location"]
},
{
"char": "๐๏ธ",
"description": "card file box",
- "aliases": [
- "card_file_box"
- ],
+ "aliases": ["card_file_box"],
"tags": []
},
{
"char": "๐ช",
"description": "carpentry saw",
- "aliases": [
- "carpentry_saw"
- ],
+ "aliases": ["carpentry_saw"],
"tags": []
},
{
"char": "๐",
"description": "shopping cart",
- "aliases": [
- "shopping_cart"
- ],
+ "aliases": ["shopping_cart"],
"tags": []
},
{
"char": "๐ชง",
"description": "placard",
- "aliases": [
- "placard"
- ],
+ "aliases": ["placard"],
"tags": []
},
{
"char": "๐ชช",
"description": "identification card",
- "aliases": [
- "identification_card"
- ],
+ "aliases": ["identification_card"],
"tags": []
},
{
"char": "๐ฎ",
"description": "litter in bin sign",
- "aliases": [
- "put_litter_in_its_place"
- ],
+ "aliases": ["put_litter_in_its_place"],
"tags": []
},
{
"char": "๐",
"description": "place of worship",
- "aliases": [
- "place_of_worship"
- ],
+ "aliases": ["place_of_worship"],
"tags": []
},
{
"char": "๐ง๐ถ",
"description": "flag: Caribbean Netherlands",
- "aliases": [
- "caribbean_netherlands"
- ],
+ "aliases": ["caribbean_netherlands"],
"tags": []
},
{
"char": "๐ฒ๐ฌ",
"description": "flag: Madagascar",
- "aliases": [
- "madagascar"
- ],
+ "aliases": ["madagascar"],
"tags": []
},
{
"char": "๐ณ๐ฎ",
"description": "flag: Nicaragua",
- "aliases": [
- "nicaragua"
- ],
+ "aliases": ["nicaragua"],
"tags": []
}
],
@@ -2965,10387 +1951,7225 @@
{
"char": "๐คฉ",
"description": "star-struck",
- "aliases": [
- "star_struck"
- ],
- "tags": [
- "eyes"
- ]
+ "aliases": ["star_struck"],
+ "tags": ["eyes"]
},
{
"char": "๐คฏ",
"description": "exploding head",
- "aliases": [
- "exploding_head"
- ],
- "tags": [
- "mind",
- "blown"
- ]
+ "aliases": ["exploding_head"],
+ "tags": ["mind", "blown"]
},
{
"char": "๐",
"description": "skull",
- "aliases": [
- "skull"
- ],
- "tags": [
- "dead",
- "danger",
- "poison"
- ]
+ "aliases": ["skull"],
+ "tags": ["dead", "danger", "poison"]
},
{
"char": "โ ๏ธ",
"description": "skull and crossbones",
- "aliases": [
- "skull_and_crossbones"
- ],
- "tags": [
- "danger",
- "pirate"
- ]
+ "aliases": ["skull_and_crossbones"],
+ "tags": ["danger", "pirate"]
},
{
"char": "๐ฉ",
"description": "pile of poo",
- "aliases": [
- "hankey",
- "poop",
- "shit"
- ],
- "tags": [
- "crap"
- ]
+ "aliases": ["hankey", "poop", "shit"],
+ "tags": ["crap"]
},
{
"char": "๐น",
"description": "ogre",
- "aliases": [
- "japanese_ogre"
- ],
- "tags": [
- "monster"
- ]
+ "aliases": ["japanese_ogre"],
+ "tags": ["monster"]
},
{
"char": "๐บ",
"description": "goblin",
- "aliases": [
- "japanese_goblin"
- ],
+ "aliases": ["japanese_goblin"],
"tags": []
},
{
"char": "๐ป",
"description": "ghost",
- "aliases": [
- "ghost"
- ],
- "tags": [
- "halloween"
- ]
+ "aliases": ["ghost"],
+ "tags": ["halloween"]
},
{
"char": "๐ฝ",
"description": "alien",
- "aliases": [
- "alien"
- ],
- "tags": [
- "ufo"
- ]
+ "aliases": ["alien"],
+ "tags": ["ufo"]
},
{
"char": "๐ค",
"description": "robot",
- "aliases": [
- "robot"
- ],
+ "aliases": ["robot"],
"tags": []
},
{
"char": "๐น",
"description": "cat with tears of joy",
- "aliases": [
- "joy_cat"
- ],
+ "aliases": ["joy_cat"],
"tags": []
},
{
"char": "๐ฝ",
"description": "kissing cat",
- "aliases": [
- "kissing_cat"
- ],
+ "aliases": ["kissing_cat"],
"tags": []
},
{
"char": "๐",
"description": "weary cat",
- "aliases": [
- "scream_cat"
- ],
- "tags": [
- "horror"
- ]
+ "aliases": ["scream_cat"],
+ "tags": ["horror"]
},
{
"char": "๐พ",
"description": "pouting cat",
- "aliases": [
- "pouting_cat"
- ],
+ "aliases": ["pouting_cat"],
"tags": []
},
{
"char": "๐",
"description": "see-no-evil monkey",
- "aliases": [
- "see_no_evil"
- ],
- "tags": [
- "monkey",
- "blind",
- "ignore"
- ]
+ "aliases": ["see_no_evil"],
+ "tags": ["monkey", "blind", "ignore"]
},
{
"char": "๐",
"description": "hear-no-evil monkey",
- "aliases": [
- "hear_no_evil"
- ],
- "tags": [
- "monkey",
- "deaf"
- ]
+ "aliases": ["hear_no_evil"],
+ "tags": ["monkey", "deaf"]
},
{
"char": "๐",
"description": "speak-no-evil monkey",
- "aliases": [
- "speak_no_evil"
- ],
- "tags": [
- "monkey",
- "mute",
- "hush"
- ]
+ "aliases": ["speak_no_evil"],
+ "tags": ["monkey", "mute", "hush"]
},
{
"char": "๐",
"description": "kiss mark",
- "aliases": [
- "kiss"
- ],
- "tags": [
- "lipstick"
- ]
+ "aliases": ["kiss"],
+ "tags": ["lipstick"]
},
{
"char": "๐ฏ",
"description": "hundred points",
- "aliases": [
- "100"
- ],
- "tags": [
- "score",
- "perfect"
- ]
+ "aliases": ["100"],
+ "tags": ["score", "perfect"]
},
{
"char": "๐ฅ",
"description": "collision",
- "aliases": [
- "boom",
- "collision"
- ],
- "tags": [
- "explode"
- ]
+ "aliases": ["boom", "collision"],
+ "tags": ["explode"]
},
{
"char": "๐ซ",
"description": "dizzy",
- "aliases": [
- "dizzy"
- ],
- "tags": [
- "star"
- ]
+ "aliases": ["dizzy"],
+ "tags": ["star"]
},
{
"char": "๐ฆ",
"description": "sweat droplets",
- "aliases": [
- "sweat_drops"
- ],
- "tags": [
- "water",
- "workout"
- ]
+ "aliases": ["sweat_drops"],
+ "tags": ["water", "workout"]
},
{
"char": "๐จ",
"description": "dashing away",
- "aliases": [
- "dash"
- ],
- "tags": [
- "wind",
- "blow",
- "fast"
- ]
+ "aliases": ["dash"],
+ "tags": ["wind", "blow", "fast"]
},
{
"char": "๐ณ๏ธ",
"description": "hole",
- "aliases": [
- "hole"
- ],
+ "aliases": ["hole"],
"tags": []
},
{
"char": "๐ฌ",
"description": "speech balloon",
- "aliases": [
- "speech_balloon"
- ],
- "tags": [
- "comment"
- ]
+ "aliases": ["speech_balloon"],
+ "tags": ["comment"]
},
{
"char": "๐๏ธโ๐จ๏ธ",
"description": "eye in speech bubble",
- "aliases": [
- "eye_speech_bubble"
- ],
+ "aliases": ["eye_speech_bubble"],
"tags": []
},
{
"char": "๐จ๏ธ",
"description": "left speech bubble",
- "aliases": [
- "left_speech_bubble"
- ],
+ "aliases": ["left_speech_bubble"],
"tags": []
},
{
"char": "๐ฏ๏ธ",
"description": "right anger bubble",
- "aliases": [
- "right_anger_bubble"
- ],
+ "aliases": ["right_anger_bubble"],
"tags": []
},
{
"char": "๐ญ",
"description": "thought balloon",
- "aliases": [
- "thought_balloon"
- ],
- "tags": [
- "thinking"
- ]
+ "aliases": ["thought_balloon"],
+ "tags": ["thinking"]
},
{
"char": "๐ค",
"description": "ZZZ",
- "aliases": [
- "zzz"
- ],
- "tags": [
- "sleeping"
- ]
+ "aliases": ["zzz"],
+ "tags": ["sleeping"]
},
{
"char": "๐",
"description": "waving hand",
- "aliases": [
- "wave"
- ],
- "tags": [
- "goodbye"
- ]
+ "aliases": ["wave"],
+ "tags": ["goodbye"]
},
{
"char": "๐ค",
"description": "raised back of hand",
- "aliases": [
- "raised_back_of_hand"
- ],
+ "aliases": ["raised_back_of_hand"],
"tags": []
},
{
"char": "โ",
"description": "raised hand",
- "aliases": [
- "hand",
- "raised_hand"
- ],
- "tags": [
- "highfive",
- "stop"
- ]
+ "aliases": ["hand", "raised_hand"],
+ "tags": ["highfive", "stop"]
},
{
"char": "๐",
"description": "vulcan salute",
- "aliases": [
- "vulcan_salute"
- ],
- "tags": [
- "prosper",
- "spock"
- ]
+ "aliases": ["vulcan_salute"],
+ "tags": ["prosper", "spock"]
},
{
"char": "๐ซฑ",
"description": "rightwards hand",
- "aliases": [
- "rightwards_hand"
- ],
+ "aliases": ["rightwards_hand"],
"tags": []
},
{
"char": "๐ซฒ",
"description": "leftwards hand",
- "aliases": [
- "leftwards_hand"
- ],
+ "aliases": ["leftwards_hand"],
"tags": []
},
{
"char": "๐ซณ",
"description": "palm down hand",
- "aliases": [
- "palm_down_hand"
- ],
+ "aliases": ["palm_down_hand"],
"tags": []
},
{
"char": "๐ซด",
"description": "palm up hand",
- "aliases": [
- "palm_up_hand"
- ],
+ "aliases": ["palm_up_hand"],
"tags": []
},
{
"char": "๐ซท",
"description": "leftwards pushing hand",
- "aliases": [
- "leftwards_pushing_hand"
- ],
+ "aliases": ["leftwards_pushing_hand"],
"tags": []
},
{
"char": "๐ซธ",
"description": "rightwards pushing hand",
- "aliases": [
- "rightwards_pushing_hand"
- ],
+ "aliases": ["rightwards_pushing_hand"],
"tags": []
},
{
"char": "๐",
"description": "OK hand",
- "aliases": [
- "ok_hand"
- ],
+ "aliases": ["ok_hand"],
"tags": []
},
{
"char": "๐ค",
"description": "pinched fingers",
- "aliases": [
- "pinched_fingers"
- ],
+ "aliases": ["pinched_fingers"],
"tags": []
},
{
"char": "๐ค",
"description": "pinching hand",
- "aliases": [
- "pinching_hand"
- ],
+ "aliases": ["pinching_hand"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "victory hand",
- "aliases": [
- "v"
- ],
- "tags": [
- "victory",
- "peace"
- ]
+ "aliases": ["v"],
+ "tags": ["victory", "peace"]
},
{
"char": "๐ค",
"description": "crossed fingers",
- "aliases": [
- "crossed_fingers"
- ],
- "tags": [
- "luck",
- "hopeful"
- ]
+ "aliases": ["crossed_fingers"],
+ "tags": ["luck", "hopeful"]
},
{
"char": "๐ซฐ",
"description": "hand with index finger and thumb crossed",
- "aliases": [
- "hand_with_index_finger_and_thumb_crossed"
- ],
+ "aliases": ["hand_with_index_finger_and_thumb_crossed"],
"tags": []
},
{
"char": "๐ค",
"description": "call me hand",
- "aliases": [
- "call_me_hand"
- ],
+ "aliases": ["call_me_hand"],
"tags": []
},
{
"char": "๐",
"description": "backhand index pointing left",
- "aliases": [
- "point_left"
- ],
+ "aliases": ["point_left"],
"tags": []
},
{
"char": "๐",
"description": "backhand index pointing right",
- "aliases": [
- "point_right"
- ],
+ "aliases": ["point_right"],
"tags": []
},
{
"char": "๐",
"description": "backhand index pointing up",
- "aliases": [
- "point_up_2"
- ],
+ "aliases": ["point_up_2"],
"tags": []
},
{
"char": "๐",
"description": "middle finger",
- "aliases": [
- "middle_finger",
- "fu"
- ],
+ "aliases": ["middle_finger", "fu"],
"tags": []
},
{
"char": "๐",
"description": "backhand index pointing down",
- "aliases": [
- "point_down"
- ],
+ "aliases": ["point_down"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "index pointing up",
- "aliases": [
- "point_up"
- ],
+ "aliases": ["point_up"],
"tags": []
},
{
"char": "๐ซต",
"description": "index pointing at the viewer",
- "aliases": [
- "index_pointing_at_the_viewer"
- ],
+ "aliases": ["index_pointing_at_the_viewer"],
"tags": []
},
{
"char": "๐",
"description": "thumbs up",
- "aliases": [
- "+1",
- "thumbsup"
- ],
- "tags": [
- "approve",
- "ok"
- ]
+ "aliases": ["+1", "thumbsup"],
+ "tags": ["approve", "ok"]
},
{
"char": "๐",
"description": "thumbs down",
- "aliases": [
- "-1",
- "thumbsdown"
- ],
- "tags": [
- "disapprove",
- "bury"
- ]
+ "aliases": ["-1", "thumbsdown"],
+ "tags": ["disapprove", "bury"]
},
{
"char": "โ",
"description": "raised fist",
- "aliases": [
- "fist_raised",
- "fist"
- ],
- "tags": [
- "power"
- ]
+ "aliases": ["fist_raised", "fist"],
+ "tags": ["power"]
},
{
"char": "๐ค",
"description": "left-facing fist",
- "aliases": [
- "fist_left"
- ],
+ "aliases": ["fist_left"],
"tags": []
},
{
"char": "๐ค",
"description": "right-facing fist",
- "aliases": [
- "fist_right"
- ],
+ "aliases": ["fist_right"],
"tags": []
},
{
"char": "๐",
"description": "clapping hands",
- "aliases": [
- "clap"
- ],
- "tags": [
- "praise",
- "applause"
- ]
+ "aliases": ["clap"],
+ "tags": ["praise", "applause"]
},
{
"char": "๐",
"description": "raising hands",
- "aliases": [
- "raised_hands"
- ],
- "tags": [
- "hooray"
- ]
+ "aliases": ["raised_hands"],
+ "tags": ["hooray"]
},
{
"char": "๐",
"description": "open hands",
- "aliases": [
- "open_hands"
- ],
+ "aliases": ["open_hands"],
"tags": []
},
{
"char": "๐คฒ",
"description": "palms up together",
- "aliases": [
- "palms_up_together"
- ],
+ "aliases": ["palms_up_together"],
"tags": []
},
{
"char": "๐ค",
"description": "handshake",
- "aliases": [
- "handshake"
- ],
- "tags": [
- "deal"
- ]
+ "aliases": ["handshake"],
+ "tags": ["deal"]
},
{
"char": "๐",
"description": "folded hands",
- "aliases": [
- "pray"
- ],
- "tags": [
- "please",
- "hope",
- "wish"
- ]
+ "aliases": ["pray"],
+ "tags": ["please", "hope", "wish"]
},
{
"char": "โ๏ธ",
"description": "writing hand",
- "aliases": [
- "writing_hand"
- ],
+ "aliases": ["writing_hand"],
"tags": []
},
{
"char": "๐คณ",
"description": "selfie",
- "aliases": [
- "selfie"
- ],
+ "aliases": ["selfie"],
"tags": []
},
{
"char": "๐ช",
"description": "flexed biceps",
- "aliases": [
- "muscle"
- ],
- "tags": [
- "flex",
- "bicep",
- "strong",
- "workout"
- ]
+ "aliases": ["muscle"],
+ "tags": ["flex", "bicep", "strong", "workout"]
},
{
"char": "๐ฆพ",
"description": "mechanical arm",
- "aliases": [
- "mechanical_arm"
- ],
+ "aliases": ["mechanical_arm"],
"tags": []
},
{
"char": "๐ฆฟ",
"description": "mechanical leg",
- "aliases": [
- "mechanical_leg"
- ],
+ "aliases": ["mechanical_leg"],
"tags": []
},
{
"char": "๐ฆต",
"description": "leg",
- "aliases": [
- "leg"
- ],
+ "aliases": ["leg"],
"tags": []
},
{
"char": "๐ฆถ",
"description": "foot",
- "aliases": [
- "foot"
- ],
+ "aliases": ["foot"],
"tags": []
},
{
"char": "๐",
"description": "ear",
- "aliases": [
- "ear"
- ],
- "tags": [
- "hear",
- "sound",
- "listen"
- ]
+ "aliases": ["ear"],
+ "tags": ["hear", "sound", "listen"]
},
{
"char": "๐ฆป",
"description": "ear with hearing aid",
- "aliases": [
- "ear_with_hearing_aid"
- ],
+ "aliases": ["ear_with_hearing_aid"],
"tags": []
},
{
"char": "๐",
"description": "nose",
- "aliases": [
- "nose"
- ],
- "tags": [
- "smell"
- ]
+ "aliases": ["nose"],
+ "tags": ["smell"]
},
{
"char": "๐ง ",
"description": "brain",
- "aliases": [
- "brain"
- ],
+ "aliases": ["brain"],
"tags": []
},
{
"char": "๐ซ",
"description": "lungs",
- "aliases": [
- "lungs"
- ],
+ "aliases": ["lungs"],
"tags": []
},
{
"char": "๐ฆท",
"description": "tooth",
- "aliases": [
- "tooth"
- ],
+ "aliases": ["tooth"],
"tags": []
},
{
"char": "๐ฆด",
"description": "bone",
- "aliases": [
- "bone"
- ],
+ "aliases": ["bone"],
"tags": []
},
{
"char": "๐",
"description": "eyes",
- "aliases": [
- "eyes"
- ],
- "tags": [
- "look",
- "see",
- "watch"
- ]
+ "aliases": ["eyes"],
+ "tags": ["look", "see", "watch"]
},
{
"char": "๐๏ธ",
"description": "eye",
- "aliases": [
- "eye"
- ],
+ "aliases": ["eye"],
"tags": []
},
{
"char": "๐
",
"description": "tongue",
- "aliases": [
- "tongue"
- ],
- "tags": [
- "taste"
- ]
+ "aliases": ["tongue"],
+ "tags": ["taste"]
},
{
"char": "๐",
"description": "mouth",
- "aliases": [
- "lips"
- ],
- "tags": [
- "kiss"
- ]
+ "aliases": ["lips"],
+ "tags": ["kiss"]
},
{
"char": "๐ซฆ",
"description": "biting lip",
- "aliases": [
- "biting_lip"
- ],
+ "aliases": ["biting_lip"],
"tags": []
},
{
"char": "๐ถ",
"description": "baby",
- "aliases": [
- "baby"
- ],
- "tags": [
- "child",
- "newborn"
- ]
+ "aliases": ["baby"],
+ "tags": ["child", "newborn"]
},
{
"char": "๐ง",
"description": "child",
- "aliases": [
- "child"
- ],
+ "aliases": ["child"],
"tags": []
},
{
"char": "๐ฆ",
"description": "boy",
- "aliases": [
- "boy"
- ],
- "tags": [
- "child"
- ]
+ "aliases": ["boy"],
+ "tags": ["child"]
},
{
"char": "๐ง",
"description": "girl",
- "aliases": [
- "girl"
- ],
- "tags": [
- "child"
- ]
+ "aliases": ["girl"],
+ "tags": ["child"]
},
{
"char": "๐จ",
"description": "man",
- "aliases": [
- "man"
- ],
- "tags": [
- "mustache",
- "father",
- "dad"
- ]
+ "aliases": ["man"],
+ "tags": ["mustache", "father", "dad"]
},
{
"char": "๐งโโ๏ธ",
"description": "man: beard",
- "aliases": [
- "man_beard"
- ],
+ "aliases": ["man_beard"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman: beard",
- "aliases": [
- "woman_beard"
- ],
+ "aliases": ["woman_beard"],
"tags": []
},
{
"char": "๐จโ๐ฆฐ",
"description": "man: red hair",
- "aliases": [
- "red_haired_man"
- ],
+ "aliases": ["red_haired_man"],
"tags": []
},
{
"char": "๐จโ๐ฆฑ",
"description": "man: curly hair",
- "aliases": [
- "curly_haired_man"
- ],
+ "aliases": ["curly_haired_man"],
"tags": []
},
{
"char": "๐จโ๐ฆณ",
"description": "man: white hair",
- "aliases": [
- "white_haired_man"
- ],
+ "aliases": ["white_haired_man"],
"tags": []
},
{
"char": "๐จโ๐ฆฒ",
"description": "man: bald",
- "aliases": [
- "bald_man"
- ],
+ "aliases": ["bald_man"],
"tags": []
},
{
"char": "๐ฉ",
"description": "woman",
- "aliases": [
- "woman"
- ],
- "tags": [
- "girls"
- ]
+ "aliases": ["woman"],
+ "tags": ["girls"]
},
{
"char": "๐ฉโ๐ฆฐ",
"description": "woman: red hair",
- "aliases": [
- "red_haired_woman"
- ],
+ "aliases": ["red_haired_woman"],
"tags": []
},
{
"char": "๐ฉโ๐ฆฑ",
"description": "woman: curly hair",
- "aliases": [
- "curly_haired_woman"
- ],
+ "aliases": ["curly_haired_woman"],
"tags": []
},
{
"char": "๐ฉโ๐ฆณ",
"description": "woman: white hair",
- "aliases": [
- "white_haired_woman"
- ],
+ "aliases": ["white_haired_woman"],
"tags": []
},
{
"char": "๐ฉโ๐ฆฒ",
"description": "woman: bald",
- "aliases": [
- "bald_woman"
- ],
+ "aliases": ["bald_woman"],
"tags": []
},
{
"char": "๐ฑโโ๏ธ",
"description": "woman: blond hair",
- "aliases": [
- "blond_haired_woman",
- "blonde_woman"
- ],
+ "aliases": ["blond_haired_woman", "blonde_woman"],
"tags": []
},
{
"char": "๐ฑโโ๏ธ",
"description": "man: blond hair",
- "aliases": [
- "blond_haired_man"
- ],
+ "aliases": ["blond_haired_man"],
"tags": []
},
{
"char": "๐ด",
"description": "old man",
- "aliases": [
- "older_man"
- ],
+ "aliases": ["older_man"],
"tags": []
},
{
"char": "๐ต",
"description": "old woman",
- "aliases": [
- "older_woman"
- ],
+ "aliases": ["older_woman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man frowning",
- "aliases": [
- "frowning_man"
- ],
+ "aliases": ["frowning_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman frowning",
- "aliases": [
- "frowning_woman"
- ],
+ "aliases": ["frowning_woman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man pouting",
- "aliases": [
- "pouting_man"
- ],
+ "aliases": ["pouting_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman pouting",
- "aliases": [
- "pouting_woman"
- ],
+ "aliases": ["pouting_woman"],
"tags": []
},
{
"char": "๐
โโ๏ธ",
"description": "man gesturing NO",
- "aliases": [
- "no_good_man",
- "ng_man"
- ],
- "tags": [
- "stop",
- "halt",
- "denied"
- ]
+ "aliases": ["no_good_man", "ng_man"],
+ "tags": ["stop", "halt", "denied"]
},
{
"char": "๐
โโ๏ธ",
"description": "woman gesturing NO",
- "aliases": [
- "no_good_woman",
- "ng_woman"
- ],
- "tags": [
- "stop",
- "halt",
- "denied"
- ]
+ "aliases": ["no_good_woman", "ng_woman"],
+ "tags": ["stop", "halt", "denied"]
},
{
"char": "๐โโ๏ธ",
"description": "man gesturing OK",
- "aliases": [
- "ok_man"
- ],
+ "aliases": ["ok_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman gesturing OK",
- "aliases": [
- "ok_woman"
- ],
+ "aliases": ["ok_woman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man tipping hand",
- "aliases": [
- "tipping_hand_man",
- "sassy_man"
- ],
- "tags": [
- "information"
- ]
+ "aliases": ["tipping_hand_man", "sassy_man"],
+ "tags": ["information"]
},
{
"char": "๐โโ๏ธ",
"description": "woman tipping hand",
- "aliases": [
- "tipping_hand_woman",
- "sassy_woman"
- ],
- "tags": [
- "information"
- ]
+ "aliases": ["tipping_hand_woman", "sassy_woman"],
+ "tags": ["information"]
},
{
"char": "๐โโ๏ธ",
"description": "man raising hand",
- "aliases": [
- "raising_hand_man"
- ],
+ "aliases": ["raising_hand_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman raising hand",
- "aliases": [
- "raising_hand_woman"
- ],
+ "aliases": ["raising_hand_woman"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "deaf man",
- "aliases": [
- "deaf_man"
- ],
+ "aliases": ["deaf_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "deaf woman",
- "aliases": [
- "deaf_woman"
- ],
+ "aliases": ["deaf_woman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man bowing",
- "aliases": [
- "bowing_man"
- ],
- "tags": [
- "respect",
- "thanks"
- ]
+ "aliases": ["bowing_man"],
+ "tags": ["respect", "thanks"]
},
{
"char": "๐โโ๏ธ",
"description": "woman bowing",
- "aliases": [
- "bowing_woman"
- ],
- "tags": [
- "respect",
- "thanks"
- ]
+ "aliases": ["bowing_woman"],
+ "tags": ["respect", "thanks"]
},
{
"char": "๐คทโโ๏ธ",
"description": "man shrugging",
- "aliases": [
- "man_shrugging"
- ],
+ "aliases": ["man_shrugging"],
"tags": []
},
{
"char": "๐คทโโ๏ธ",
"description": "woman shrugging",
- "aliases": [
- "woman_shrugging"
- ],
+ "aliases": ["woman_shrugging"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "health worker",
- "aliases": [
- "health_worker"
- ],
+ "aliases": ["health_worker"],
"tags": []
},
{
"char": "๐จโโ๏ธ",
"description": "man health worker",
- "aliases": [
- "man_health_worker"
- ],
- "tags": [
- "doctor",
- "nurse"
- ]
+ "aliases": ["man_health_worker"],
+ "tags": ["doctor", "nurse"]
},
{
"char": "๐ฉโโ๏ธ",
"description": "woman health worker",
- "aliases": [
- "woman_health_worker"
- ],
- "tags": [
- "doctor",
- "nurse"
- ]
+ "aliases": ["woman_health_worker"],
+ "tags": ["doctor", "nurse"]
},
{
"char": "๐งโ๐",
"description": "student",
- "aliases": [
- "student"
- ],
+ "aliases": ["student"],
"tags": []
},
{
"char": "๐จโ๐",
"description": "man student",
- "aliases": [
- "man_student"
- ],
- "tags": [
- "graduation"
- ]
+ "aliases": ["man_student"],
+ "tags": ["graduation"]
},
{
"char": "๐ฉโ๐",
"description": "woman student",
- "aliases": [
- "woman_student"
- ],
- "tags": [
- "graduation"
- ]
+ "aliases": ["woman_student"],
+ "tags": ["graduation"]
},
{
"char": "๐งโ๐ซ",
"description": "teacher",
- "aliases": [
- "teacher"
- ],
+ "aliases": ["teacher"],
"tags": []
},
{
"char": "๐จโ๐ซ",
"description": "man teacher",
- "aliases": [
- "man_teacher"
- ],
- "tags": [
- "school",
- "professor"
- ]
+ "aliases": ["man_teacher"],
+ "tags": ["school", "professor"]
},
{
"char": "๐ฉโ๐ซ",
"description": "woman teacher",
- "aliases": [
- "woman_teacher"
- ],
- "tags": [
- "school",
- "professor"
- ]
+ "aliases": ["woman_teacher"],
+ "tags": ["school", "professor"]
},
{
"char": "๐งโโ๏ธ",
"description": "judge",
- "aliases": [
- "judge"
- ],
+ "aliases": ["judge"],
"tags": []
},
{
"char": "๐จโโ๏ธ",
"description": "man judge",
- "aliases": [
- "man_judge"
- ],
- "tags": [
- "justice"
- ]
+ "aliases": ["man_judge"],
+ "tags": ["justice"]
},
{
"char": "๐ฉโโ๏ธ",
"description": "woman judge",
- "aliases": [
- "woman_judge"
- ],
- "tags": [
- "justice"
- ]
+ "aliases": ["woman_judge"],
+ "tags": ["justice"]
},
{
"char": "๐งโ๐พ",
"description": "farmer",
- "aliases": [
- "farmer"
- ],
+ "aliases": ["farmer"],
"tags": []
},
{
"char": "๐จโ๐พ",
"description": "man farmer",
- "aliases": [
- "man_farmer"
- ],
+ "aliases": ["man_farmer"],
"tags": []
},
{
"char": "๐ฉโ๐พ",
"description": "woman farmer",
- "aliases": [
- "woman_farmer"
- ],
+ "aliases": ["woman_farmer"],
"tags": []
},
{
"char": "๐งโ๐ณ",
"description": "cook",
- "aliases": [
- "cook"
- ],
+ "aliases": ["cook"],
"tags": []
},
{
"char": "๐จโ๐ณ",
"description": "man cook",
- "aliases": [
- "man_cook"
- ],
- "tags": [
- "chef"
- ]
+ "aliases": ["man_cook"],
+ "tags": ["chef"]
},
{
"char": "๐ฉโ๐ณ",
"description": "woman cook",
- "aliases": [
- "woman_cook"
- ],
- "tags": [
- "chef"
- ]
+ "aliases": ["woman_cook"],
+ "tags": ["chef"]
},
{
"char": "๐งโ๐ง",
"description": "mechanic",
- "aliases": [
- "mechanic"
- ],
+ "aliases": ["mechanic"],
"tags": []
},
{
"char": "๐จโ๐ง",
"description": "man mechanic",
- "aliases": [
- "man_mechanic"
- ],
+ "aliases": ["man_mechanic"],
"tags": []
},
{
"char": "๐ฉโ๐ง",
"description": "woman mechanic",
- "aliases": [
- "woman_mechanic"
- ],
+ "aliases": ["woman_mechanic"],
"tags": []
},
{
"char": "๐งโ๐ญ",
"description": "factory worker",
- "aliases": [
- "factory_worker"
- ],
+ "aliases": ["factory_worker"],
"tags": []
},
{
"char": "๐จโ๐ญ",
"description": "man factory worker",
- "aliases": [
- "man_factory_worker"
- ],
+ "aliases": ["man_factory_worker"],
"tags": []
},
{
"char": "๐ฉโ๐ญ",
"description": "woman factory worker",
- "aliases": [
- "woman_factory_worker"
- ],
+ "aliases": ["woman_factory_worker"],
"tags": []
},
{
"char": "๐งโ๐ผ",
"description": "office worker",
- "aliases": [
- "office_worker"
- ],
+ "aliases": ["office_worker"],
"tags": []
},
{
"char": "๐จโ๐ผ",
"description": "man office worker",
- "aliases": [
- "man_office_worker"
- ],
- "tags": [
- "business"
- ]
+ "aliases": ["man_office_worker"],
+ "tags": ["business"]
},
{
"char": "๐ฉโ๐ผ",
"description": "woman office worker",
- "aliases": [
- "woman_office_worker"
- ],
- "tags": [
- "business"
- ]
+ "aliases": ["woman_office_worker"],
+ "tags": ["business"]
},
{
"char": "๐งโ๐ฌ",
"description": "scientist",
- "aliases": [
- "scientist"
- ],
+ "aliases": ["scientist"],
"tags": []
},
{
"char": "๐จโ๐ฌ",
"description": "man scientist",
- "aliases": [
- "man_scientist"
- ],
- "tags": [
- "research"
- ]
+ "aliases": ["man_scientist"],
+ "tags": ["research"]
},
{
"char": "๐ฉโ๐ฌ",
"description": "woman scientist",
- "aliases": [
- "woman_scientist"
- ],
- "tags": [
- "research"
- ]
+ "aliases": ["woman_scientist"],
+ "tags": ["research"]
},
{
"char": "๐งโ๐ป",
"description": "technologist",
- "aliases": [
- "technologist"
- ],
+ "aliases": ["technologist"],
"tags": []
},
{
"char": "๐จโ๐ป",
"description": "man technologist",
- "aliases": [
- "man_technologist"
- ],
- "tags": [
- "coder"
- ]
+ "aliases": ["man_technologist"],
+ "tags": ["coder"]
},
{
"char": "๐ฉโ๐ป",
"description": "woman technologist",
- "aliases": [
- "woman_technologist"
- ],
- "tags": [
- "coder"
- ]
+ "aliases": ["woman_technologist"],
+ "tags": ["coder"]
},
{
"char": "๐งโ๐ค",
"description": "singer",
- "aliases": [
- "singer"
- ],
+ "aliases": ["singer"],
"tags": []
},
{
"char": "๐จโ๐ค",
"description": "man singer",
- "aliases": [
- "man_singer"
- ],
- "tags": [
- "rockstar"
- ]
+ "aliases": ["man_singer"],
+ "tags": ["rockstar"]
},
{
"char": "๐ฉโ๐ค",
"description": "woman singer",
- "aliases": [
- "woman_singer"
- ],
- "tags": [
- "rockstar"
- ]
+ "aliases": ["woman_singer"],
+ "tags": ["rockstar"]
},
{
"char": "๐งโ๐จ",
"description": "artist",
- "aliases": [
- "artist"
- ],
+ "aliases": ["artist"],
"tags": []
},
{
"char": "๐จโ๐จ",
"description": "man artist",
- "aliases": [
- "man_artist"
- ],
- "tags": [
- "painter"
- ]
+ "aliases": ["man_artist"],
+ "tags": ["painter"]
},
{
"char": "๐ฉโ๐จ",
"description": "woman artist",
- "aliases": [
- "woman_artist"
- ],
- "tags": [
- "painter"
- ]
+ "aliases": ["woman_artist"],
+ "tags": ["painter"]
},
{
"char": "๐งโโ๏ธ",
"description": "pilot",
- "aliases": [
- "pilot"
- ],
+ "aliases": ["pilot"],
"tags": []
},
{
"char": "๐จโโ๏ธ",
"description": "man pilot",
- "aliases": [
- "man_pilot"
- ],
+ "aliases": ["man_pilot"],
"tags": []
},
{
"char": "๐ฉโโ๏ธ",
"description": "woman pilot",
- "aliases": [
- "woman_pilot"
- ],
+ "aliases": ["woman_pilot"],
"tags": []
},
{
"char": "๐งโ๐",
"description": "astronaut",
- "aliases": [
- "astronaut"
- ],
+ "aliases": ["astronaut"],
"tags": []
},
{
"char": "๐จโ๐",
"description": "man astronaut",
- "aliases": [
- "man_astronaut"
- ],
- "tags": [
- "space"
- ]
+ "aliases": ["man_astronaut"],
+ "tags": ["space"]
},
{
"char": "๐ฉโ๐",
"description": "woman astronaut",
- "aliases": [
- "woman_astronaut"
- ],
- "tags": [
- "space"
- ]
+ "aliases": ["woman_astronaut"],
+ "tags": ["space"]
},
{
"char": "๐งโ๐",
"description": "firefighter",
- "aliases": [
- "firefighter"
- ],
+ "aliases": ["firefighter"],
"tags": []
},
{
"char": "๐จโ๐",
"description": "man firefighter",
- "aliases": [
- "man_firefighter"
- ],
+ "aliases": ["man_firefighter"],
"tags": []
},
{
"char": "๐ฉโ๐",
"description": "woman firefighter",
- "aliases": [
- "woman_firefighter"
- ],
+ "aliases": ["woman_firefighter"],
"tags": []
},
{
"char": "๐ฎ",
"description": "police officer",
- "aliases": [
- "police_officer",
- "cop"
- ],
- "tags": [
- "law"
- ]
+ "aliases": ["police_officer", "cop"],
+ "tags": ["law"]
},
{
"char": "๐ฎโโ๏ธ",
"description": "man police officer",
- "aliases": [
- "policeman"
- ],
- "tags": [
- "law",
- "cop"
- ]
+ "aliases": ["policeman"],
+ "tags": ["law", "cop"]
},
{
"char": "๐ฎโโ๏ธ",
"description": "woman police officer",
- "aliases": [
- "policewoman"
- ],
- "tags": [
- "law",
- "cop"
- ]
+ "aliases": ["policewoman"],
+ "tags": ["law", "cop"]
},
{
"char": "๐ต๏ธ",
"description": "detective",
- "aliases": [
- "detective"
- ],
- "tags": [
- "sleuth"
- ]
+ "aliases": ["detective"],
+ "tags": ["sleuth"]
},
{
"char": "๐ต๏ธโโ๏ธ",
"description": "man detective",
- "aliases": [
- "male_detective"
- ],
- "tags": [
- "sleuth"
- ]
+ "aliases": ["male_detective"],
+ "tags": ["sleuth"]
},
{
"char": "๐ต๏ธโโ๏ธ",
"description": "woman detective",
- "aliases": [
- "female_detective"
- ],
- "tags": [
- "sleuth"
- ]
+ "aliases": ["female_detective"],
+ "tags": ["sleuth"]
},
{
"char": "๐",
"description": "guard",
- "aliases": [
- "guard"
- ],
+ "aliases": ["guard"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man guard",
- "aliases": [
- "guardsman"
- ],
+ "aliases": ["guardsman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman guard",
- "aliases": [
- "guardswoman"
- ],
+ "aliases": ["guardswoman"],
"tags": []
},
{
"char": "๐ฅท",
"description": "ninja",
- "aliases": [
- "ninja"
- ],
+ "aliases": ["ninja"],
"tags": []
},
{
"char": "๐ท",
"description": "construction worker",
- "aliases": [
- "construction_worker"
- ],
- "tags": [
- "helmet"
- ]
+ "aliases": ["construction_worker"],
+ "tags": ["helmet"]
},
{
"char": "๐ทโโ๏ธ",
"description": "man construction worker",
- "aliases": [
- "construction_worker_man"
- ],
- "tags": [
- "helmet"
- ]
+ "aliases": ["construction_worker_man"],
+ "tags": ["helmet"]
},
{
"char": "๐ทโโ๏ธ",
"description": "woman construction worker",
- "aliases": [
- "construction_worker_woman"
- ],
- "tags": [
- "helmet"
- ]
+ "aliases": ["construction_worker_woman"],
+ "tags": ["helmet"]
},
{
"char": "๐คด",
"description": "prince",
- "aliases": [
- "prince"
- ],
- "tags": [
- "crown",
- "royal"
- ]
+ "aliases": ["prince"],
+ "tags": ["crown", "royal"]
},
{
"char": "๐ธ",
"description": "princess",
- "aliases": [
- "princess"
- ],
- "tags": [
- "crown",
- "royal"
- ]
+ "aliases": ["princess"],
+ "tags": ["crown", "royal"]
},
{
"char": "๐ณโโ๏ธ",
"description": "man wearing turban",
- "aliases": [
- "man_with_turban"
- ],
+ "aliases": ["man_with_turban"],
"tags": []
},
{
"char": "๐ณโโ๏ธ",
"description": "woman wearing turban",
- "aliases": [
- "woman_with_turban"
- ],
+ "aliases": ["woman_with_turban"],
"tags": []
},
{
"char": "๐คตโโ๏ธ",
"description": "man in tuxedo",
- "aliases": [
- "man_in_tuxedo"
- ],
+ "aliases": ["man_in_tuxedo"],
"tags": []
},
{
"char": "๐คตโโ๏ธ",
"description": "woman in tuxedo",
- "aliases": [
- "woman_in_tuxedo"
- ],
+ "aliases": ["woman_in_tuxedo"],
"tags": []
},
{
"char": "๐ฐโโ๏ธ",
"description": "man with veil",
- "aliases": [
- "man_with_veil"
- ],
+ "aliases": ["man_with_veil"],
"tags": []
},
{
"char": "๐ฐโโ๏ธ",
"description": "woman with veil",
- "aliases": [
- "woman_with_veil",
- "bride_with_veil"
- ],
+ "aliases": ["woman_with_veil", "bride_with_veil"],
"tags": []
},
{
"char": "๐คฐ",
"description": "pregnant woman",
- "aliases": [
- "pregnant_woman"
- ],
+ "aliases": ["pregnant_woman"],
"tags": []
},
{
"char": "๐ซ",
"description": "pregnant man",
- "aliases": [
- "pregnant_man"
- ],
+ "aliases": ["pregnant_man"],
"tags": []
},
{
"char": "๐คฑ",
"description": "breast-feeding",
- "aliases": [
- "breast_feeding"
- ],
- "tags": [
- "nursing"
- ]
+ "aliases": ["breast_feeding"],
+ "tags": ["nursing"]
},
{
"char": "๐ฉโ๐ผ",
"description": "woman feeding baby",
- "aliases": [
- "woman_feeding_baby"
- ],
+ "aliases": ["woman_feeding_baby"],
"tags": []
},
{
"char": "๐จโ๐ผ",
"description": "man feeding baby",
- "aliases": [
- "man_feeding_baby"
- ],
+ "aliases": ["man_feeding_baby"],
"tags": []
},
{
"char": "๐ผ",
"description": "baby angel",
- "aliases": [
- "angel"
- ],
+ "aliases": ["angel"],
"tags": []
},
{
"char": "๐
",
"description": "Santa Claus",
- "aliases": [
- "santa"
- ],
- "tags": [
- "christmas"
- ]
+ "aliases": ["santa"],
+ "tags": ["christmas"]
},
{
"char": "๐คถ",
"description": "Mrs. Claus",
- "aliases": [
- "mrs_claus"
- ],
- "tags": [
- "santa"
- ]
+ "aliases": ["mrs_claus"],
+ "tags": ["santa"]
},
{
"char": "๐งโ๐",
"description": "mx claus",
- "aliases": [
- "mx_claus"
- ],
+ "aliases": ["mx_claus"],
"tags": []
},
{
"char": "๐ฆธ",
"description": "superhero",
- "aliases": [
- "superhero"
- ],
+ "aliases": ["superhero"],
"tags": []
},
{
"char": "๐ฆธโโ๏ธ",
"description": "man superhero",
- "aliases": [
- "superhero_man"
- ],
+ "aliases": ["superhero_man"],
"tags": []
},
{
"char": "๐ฆธโโ๏ธ",
"description": "woman superhero",
- "aliases": [
- "superhero_woman"
- ],
+ "aliases": ["superhero_woman"],
"tags": []
},
{
"char": "๐ฆน",
"description": "supervillain",
- "aliases": [
- "supervillain"
- ],
+ "aliases": ["supervillain"],
"tags": []
},
{
"char": "๐ฆนโโ๏ธ",
"description": "man supervillain",
- "aliases": [
- "supervillain_man"
- ],
+ "aliases": ["supervillain_man"],
"tags": []
},
{
"char": "๐ฆนโโ๏ธ",
"description": "woman supervillain",
- "aliases": [
- "supervillain_woman"
- ],
+ "aliases": ["supervillain_woman"],
"tags": []
},
{
"char": "๐ง",
"description": "mage",
- "aliases": [
- "mage"
- ],
- "tags": [
- "wizard"
- ]
+ "aliases": ["mage"],
+ "tags": ["wizard"]
},
{
"char": "๐งโโ๏ธ",
"description": "man mage",
- "aliases": [
- "mage_man"
- ],
- "tags": [
- "wizard"
- ]
+ "aliases": ["mage_man"],
+ "tags": ["wizard"]
},
{
"char": "๐งโโ๏ธ",
"description": "woman mage",
- "aliases": [
- "mage_woman"
- ],
- "tags": [
- "wizard"
- ]
+ "aliases": ["mage_woman"],
+ "tags": ["wizard"]
},
{
"char": "๐ง",
"description": "fairy",
- "aliases": [
- "fairy"
- ],
+ "aliases": ["fairy"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man fairy",
- "aliases": [
- "fairy_man"
- ],
+ "aliases": ["fairy_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman fairy",
- "aliases": [
- "fairy_woman"
- ],
+ "aliases": ["fairy_woman"],
"tags": []
},
{
"char": "๐ง",
"description": "vampire",
- "aliases": [
- "vampire"
- ],
+ "aliases": ["vampire"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man vampire",
- "aliases": [
- "vampire_man"
- ],
+ "aliases": ["vampire_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman vampire",
- "aliases": [
- "vampire_woman"
- ],
+ "aliases": ["vampire_woman"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "merman",
- "aliases": [
- "merman"
- ],
+ "aliases": ["merman"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "mermaid",
- "aliases": [
- "mermaid"
- ],
+ "aliases": ["mermaid"],
"tags": []
},
{
"char": "๐ง",
"description": "elf",
- "aliases": [
- "elf"
- ],
+ "aliases": ["elf"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man elf",
- "aliases": [
- "elf_man"
- ],
+ "aliases": ["elf_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman elf",
- "aliases": [
- "elf_woman"
- ],
+ "aliases": ["elf_woman"],
"tags": []
},
{
"char": "๐ง",
"description": "genie",
- "aliases": [
- "genie"
- ],
+ "aliases": ["genie"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man genie",
- "aliases": [
- "genie_man"
- ],
+ "aliases": ["genie_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman genie",
- "aliases": [
- "genie_woman"
- ],
+ "aliases": ["genie_woman"],
"tags": []
},
{
"char": "๐ง",
"description": "zombie",
- "aliases": [
- "zombie"
- ],
+ "aliases": ["zombie"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man zombie",
- "aliases": [
- "zombie_man"
- ],
+ "aliases": ["zombie_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman zombie",
- "aliases": [
- "zombie_woman"
- ],
+ "aliases": ["zombie_woman"],
"tags": []
},
{
"char": "๐ง",
"description": "troll",
- "aliases": [
- "troll"
- ],
+ "aliases": ["troll"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man getting massage",
- "aliases": [
- "massage_man"
- ],
- "tags": [
- "spa"
- ]
+ "aliases": ["massage_man"],
+ "tags": ["spa"]
},
{
"char": "๐โโ๏ธ",
"description": "woman getting massage",
- "aliases": [
- "massage_woman"
- ],
- "tags": [
- "spa"
- ]
+ "aliases": ["massage_woman"],
+ "tags": ["spa"]
},
{
"char": "๐โโ๏ธ",
"description": "man getting haircut",
- "aliases": [
- "haircut_man"
- ],
+ "aliases": ["haircut_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman getting haircut",
- "aliases": [
- "haircut_woman"
- ],
+ "aliases": ["haircut_woman"],
"tags": []
},
{
"char": "๐ถโโ๏ธ",
"description": "man walking",
- "aliases": [
- "walking_man"
- ],
+ "aliases": ["walking_man"],
"tags": []
},
{
"char": "๐ถโโ๏ธ",
"description": "woman walking",
- "aliases": [
- "walking_woman"
- ],
+ "aliases": ["walking_woman"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man standing",
- "aliases": [
- "standing_man"
- ],
+ "aliases": ["standing_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman standing",
- "aliases": [
- "standing_woman"
- ],
+ "aliases": ["standing_woman"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man kneeling",
- "aliases": [
- "kneeling_man"
- ],
+ "aliases": ["kneeling_man"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "woman kneeling",
- "aliases": [
- "kneeling_woman"
- ],
+ "aliases": ["kneeling_woman"],
"tags": []
},
{
"char": "๐จโ๐ฆฏ",
"description": "man with white cane",
- "aliases": [
- "man_with_probing_cane"
- ],
+ "aliases": ["man_with_probing_cane"],
"tags": []
},
{
"char": "๐ฉโ๐ฆฏ",
"description": "woman with white cane",
- "aliases": [
- "woman_with_probing_cane"
- ],
+ "aliases": ["woman_with_probing_cane"],
"tags": []
},
{
"char": "๐จโ๐ฆผ",
"description": "man in motorized wheelchair",
- "aliases": [
- "man_in_motorized_wheelchair"
- ],
+ "aliases": ["man_in_motorized_wheelchair"],
"tags": []
},
{
"char": "๐ฉโ๐ฆผ",
"description": "woman in motorized wheelchair",
- "aliases": [
- "woman_in_motorized_wheelchair"
- ],
+ "aliases": ["woman_in_motorized_wheelchair"],
"tags": []
},
{
"char": "๐จโ๐ฆฝ",
"description": "man in manual wheelchair",
- "aliases": [
- "man_in_manual_wheelchair"
- ],
+ "aliases": ["man_in_manual_wheelchair"],
"tags": []
},
{
"char": "๐ฉโ๐ฆฝ",
"description": "woman in manual wheelchair",
- "aliases": [
- "woman_in_manual_wheelchair"
- ],
+ "aliases": ["woman_in_manual_wheelchair"],
"tags": []
},
{
"char": "๐",
"description": "woman dancing",
- "aliases": [
- "woman_dancing",
- "dancer"
- ],
- "tags": [
- "dress"
- ]
+ "aliases": ["woman_dancing", "dancer"],
+ "tags": ["dress"]
},
{
"char": "๐บ",
"description": "man dancing",
- "aliases": [
- "man_dancing"
- ],
- "tags": [
- "dancer"
- ]
+ "aliases": ["man_dancing"],
+ "tags": ["dancer"]
},
{
"char": "๐ฏ",
"description": "people with bunny ears",
- "aliases": [
- "dancers"
- ],
- "tags": [
- "bunny"
- ]
+ "aliases": ["dancers"],
+ "tags": ["bunny"]
},
{
"char": "๐ฏโโ๏ธ",
"description": "men with bunny ears",
- "aliases": [
- "dancing_men"
- ],
- "tags": [
- "bunny"
- ]
+ "aliases": ["dancing_men"],
+ "tags": ["bunny"]
},
{
"char": "๐ฏโโ๏ธ",
"description": "women with bunny ears",
- "aliases": [
- "dancing_women"
- ],
- "tags": [
- "bunny"
- ]
+ "aliases": ["dancing_women"],
+ "tags": ["bunny"]
},
{
"char": "๐งโโ๏ธ",
"description": "man in steamy room",
- "aliases": [
- "sauna_man"
- ],
- "tags": [
- "steamy"
- ]
+ "aliases": ["sauna_man"],
+ "tags": ["steamy"]
},
{
"char": "๐งโโ๏ธ",
"description": "woman in steamy room",
- "aliases": [
- "sauna_woman"
- ],
- "tags": [
- "steamy"
- ]
+ "aliases": ["sauna_woman"],
+ "tags": ["steamy"]
},
{
"char": "๐งโโ๏ธ",
"description": "man climbing",
- "aliases": [
- "climbing_man"
- ],
- "tags": [
- "bouldering"
- ]
+ "aliases": ["climbing_man"],
+ "tags": ["bouldering"]
},
{
"char": "๐งโโ๏ธ",
"description": "woman climbing",
- "aliases": [
- "climbing_woman"
- ],
- "tags": [
- "bouldering"
- ]
+ "aliases": ["climbing_woman"],
+ "tags": ["bouldering"]
},
{
"char": "๐",
"description": "horse racing",
- "aliases": [
- "horse_racing"
- ],
+ "aliases": ["horse_racing"],
"tags": []
},
{
"char": "โท๏ธ",
"description": "skier",
- "aliases": [
- "skier"
- ],
+ "aliases": ["skier"],
"tags": []
},
{
"char": "๐",
"description": "snowboarder",
- "aliases": [
- "snowboarder"
- ],
+ "aliases": ["snowboarder"],
"tags": []
},
{
"char": "๐๏ธโโ๏ธ",
"description": "man golfing",
- "aliases": [
- "golfing_man"
- ],
+ "aliases": ["golfing_man"],
"tags": []
},
{
"char": "๐๏ธโโ๏ธ",
"description": "woman golfing",
- "aliases": [
- "golfing_woman"
- ],
+ "aliases": ["golfing_woman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man surfing",
- "aliases": [
- "surfing_man"
- ],
+ "aliases": ["surfing_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman surfing",
- "aliases": [
- "surfing_woman"
- ],
+ "aliases": ["surfing_woman"],
"tags": []
},
{
"char": "๐ฃโโ๏ธ",
"description": "man rowing boat",
- "aliases": [
- "rowing_man"
- ],
+ "aliases": ["rowing_man"],
"tags": []
},
{
"char": "๐ฃโโ๏ธ",
"description": "woman rowing boat",
- "aliases": [
- "rowing_woman"
- ],
+ "aliases": ["rowing_woman"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "man swimming",
- "aliases": [
- "swimming_man"
- ],
+ "aliases": ["swimming_man"],
"tags": []
},
{
"char": "๐โโ๏ธ",
"description": "woman swimming",
- "aliases": [
- "swimming_woman"
- ],
+ "aliases": ["swimming_woman"],
"tags": []
},
{
"char": "โน๏ธโโ๏ธ",
"description": "man bouncing ball",
- "aliases": [
- "bouncing_ball_man",
- "basketball_man"
- ],
+ "aliases": ["bouncing_ball_man", "basketball_man"],
"tags": []
},
{
"char": "โน๏ธโโ๏ธ",
"description": "woman bouncing ball",
- "aliases": [
- "bouncing_ball_woman",
- "basketball_woman"
- ],
+ "aliases": ["bouncing_ball_woman", "basketball_woman"],
"tags": []
},
{
"char": "๐๏ธโโ๏ธ",
"description": "man lifting weights",
- "aliases": [
- "weight_lifting_man"
- ],
- "tags": [
- "gym",
- "workout"
- ]
+ "aliases": ["weight_lifting_man"],
+ "tags": ["gym", "workout"]
},
{
"char": "๐๏ธโโ๏ธ",
"description": "woman lifting weights",
- "aliases": [
- "weight_lifting_woman"
- ],
- "tags": [
- "gym",
- "workout"
- ]
+ "aliases": ["weight_lifting_woman"],
+ "tags": ["gym", "workout"]
},
{
"char": "๐ดโโ๏ธ",
"description": "man biking",
- "aliases": [
- "biking_man"
- ],
+ "aliases": ["biking_man"],
"tags": []
},
{
"char": "๐ดโโ๏ธ",
"description": "woman biking",
- "aliases": [
- "biking_woman"
- ],
+ "aliases": ["biking_woman"],
"tags": []
},
{
"char": "๐ตโโ๏ธ",
"description": "man mountain biking",
- "aliases": [
- "mountain_biking_man"
- ],
+ "aliases": ["mountain_biking_man"],
"tags": []
},
{
"char": "๐ตโโ๏ธ",
"description": "woman mountain biking",
- "aliases": [
- "mountain_biking_woman"
- ],
+ "aliases": ["mountain_biking_woman"],
"tags": []
},
{
"char": "๐คผ",
"description": "people wrestling",
- "aliases": [
- "wrestling"
- ],
+ "aliases": ["wrestling"],
"tags": []
},
{
"char": "๐คผโโ๏ธ",
"description": "men wrestling",
- "aliases": [
- "men_wrestling"
- ],
+ "aliases": ["men_wrestling"],
"tags": []
},
{
"char": "๐คผโโ๏ธ",
"description": "women wrestling",
- "aliases": [
- "women_wrestling"
- ],
+ "aliases": ["women_wrestling"],
"tags": []
},
{
"char": "๐คนโโ๏ธ",
"description": "man juggling",
- "aliases": [
- "man_juggling"
- ],
+ "aliases": ["man_juggling"],
"tags": []
},
{
"char": "๐คนโโ๏ธ",
"description": "woman juggling",
- "aliases": [
- "woman_juggling"
- ],
+ "aliases": ["woman_juggling"],
"tags": []
},
{
"char": "๐งโโ๏ธ",
"description": "man in lotus position",
- "aliases": [
- "lotus_position_man"
- ],
- "tags": [
- "meditation"
- ]
+ "aliases": ["lotus_position_man"],
+ "tags": ["meditation"]
},
{
"char": "๐งโโ๏ธ",
"description": "woman in lotus position",
- "aliases": [
- "lotus_position_woman"
- ],
- "tags": [
- "meditation"
- ]
+ "aliases": ["lotus_position_woman"],
+ "tags": ["meditation"]
},
{
"char": "๐งโ๐คโ๐ง",
"description": "people holding hands",
- "aliases": [
- "people_holding_hands"
- ],
- "tags": [
- "couple",
- "date"
- ]
+ "aliases": ["people_holding_hands"],
+ "tags": ["couple", "date"]
},
{
"char": "๐ญ",
"description": "women holding hands",
- "aliases": [
- "two_women_holding_hands"
- ],
- "tags": [
- "couple",
- "date"
- ]
+ "aliases": ["two_women_holding_hands"],
+ "tags": ["couple", "date"]
},
{
"char": "๐ซ",
"description": "woman and man holding hands",
- "aliases": [
- "couple"
- ],
- "tags": [
- "date"
- ]
+ "aliases": ["couple"],
+ "tags": ["date"]
},
{
"char": "๐ฌ",
"description": "men holding hands",
- "aliases": [
- "two_men_holding_hands"
- ],
- "tags": [
- "couple",
- "date"
- ]
+ "aliases": ["two_men_holding_hands"],
+ "tags": ["couple", "date"]
},
{
"char": "๐",
"description": "kiss",
- "aliases": [
- "couplekiss"
- ],
+ "aliases": ["couplekiss"],
"tags": []
},
{
"char": "๐ช",
"description": "family",
- "aliases": [
- "family"
- ],
- "tags": [
- "home",
- "parents",
- "child"
- ]
+ "aliases": ["family"],
+ "tags": ["home", "parents", "child"]
},
{
"char": "๐จโ๐ฉโ๐ฆ",
"description": "family: man, woman, boy",
- "aliases": [
- "family_man_woman_boy"
- ],
+ "aliases": ["family_man_woman_boy"],
"tags": []
},
{
"char": "๐จโ๐ฉโ๐ง",
"description": "family: man, woman, girl",
- "aliases": [
- "family_man_woman_girl"
- ],
+ "aliases": ["family_man_woman_girl"],
"tags": []
},
{
"char": "๐จโ๐จโ๐ฆ",
"description": "family: man, man, boy",
- "aliases": [
- "family_man_man_boy"
- ],
+ "aliases": ["family_man_man_boy"],
"tags": []
},
{
"char": "๐จโ๐จโ๐ง",
"description": "family: man, man, girl",
- "aliases": [
- "family_man_man_girl"
- ],
+ "aliases": ["family_man_man_girl"],
"tags": []
},
{
"char": "๐ฉโ๐ฉโ๐ฆ",
"description": "family: woman, woman, boy",
- "aliases": [
- "family_woman_woman_boy"
- ],
+ "aliases": ["family_woman_woman_boy"],
"tags": []
},
{
"char": "๐ฉโ๐ฉโ๐ง",
"description": "family: woman, woman, girl",
- "aliases": [
- "family_woman_woman_girl"
- ],
+ "aliases": ["family_woman_woman_girl"],
"tags": []
},
{
"char": "๐จโ๐ฆ",
"description": "family: man, boy",
- "aliases": [
- "family_man_boy"
- ],
+ "aliases": ["family_man_boy"],
"tags": []
},
{
"char": "๐จโ๐ฆโ๐ฆ",
"description": "family: man, boy, boy",
- "aliases": [
- "family_man_boy_boy"
- ],
+ "aliases": ["family_man_boy_boy"],
"tags": []
},
{
"char": "๐จโ๐ง",
"description": "family: man, girl",
- "aliases": [
- "family_man_girl"
- ],
+ "aliases": ["family_man_girl"],
"tags": []
},
{
"char": "๐จโ๐งโ๐ฆ",
"description": "family: man, girl, boy",
- "aliases": [
- "family_man_girl_boy"
- ],
+ "aliases": ["family_man_girl_boy"],
"tags": []
},
{
"char": "๐จโ๐งโ๐ง",
"description": "family: man, girl, girl",
- "aliases": [
- "family_man_girl_girl"
- ],
+ "aliases": ["family_man_girl_girl"],
"tags": []
},
{
"char": "๐ฉโ๐ฆ",
"description": "family: woman, boy",
- "aliases": [
- "family_woman_boy"
- ],
+ "aliases": ["family_woman_boy"],
"tags": []
},
{
"char": "๐ฉโ๐ฆโ๐ฆ",
"description": "family: woman, boy, boy",
- "aliases": [
- "family_woman_boy_boy"
- ],
+ "aliases": ["family_woman_boy_boy"],
"tags": []
},
{
"char": "๐ฉโ๐ง",
"description": "family: woman, girl",
- "aliases": [
- "family_woman_girl"
- ],
+ "aliases": ["family_woman_girl"],
"tags": []
},
{
"char": "๐ฉโ๐งโ๐ฆ",
"description": "family: woman, girl, boy",
- "aliases": [
- "family_woman_girl_boy"
- ],
+ "aliases": ["family_woman_girl_boy"],
"tags": []
},
{
"char": "๐ฉโ๐งโ๐ง",
"description": "family: woman, girl, girl",
- "aliases": [
- "family_woman_girl_girl"
- ],
+ "aliases": ["family_woman_girl_girl"],
"tags": []
},
{
"char": "๐ฃ๏ธ",
"description": "speaking head",
- "aliases": [
- "speaking_head"
- ],
+ "aliases": ["speaking_head"],
"tags": []
},
{
"char": "๐ค",
"description": "bust in silhouette",
- "aliases": [
- "bust_in_silhouette"
- ],
- "tags": [
- "user"
- ]
+ "aliases": ["bust_in_silhouette"],
+ "tags": ["user"]
},
{
"char": "๐ฅ",
"description": "busts in silhouette",
- "aliases": [
- "busts_in_silhouette"
- ],
- "tags": [
- "users",
- "group",
- "team"
- ]
+ "aliases": ["busts_in_silhouette"],
+ "tags": ["users", "group", "team"]
},
{
"char": "๐ซ",
"description": "people hugging",
- "aliases": [
- "people_hugging"
- ],
+ "aliases": ["people_hugging"],
"tags": []
},
{
"char": "๐ฃ",
"description": "footprints",
- "aliases": [
- "footprints"
- ],
- "tags": [
- "feet",
- "tracks"
- ]
+ "aliases": ["footprints"],
+ "tags": ["feet", "tracks"]
},
{
"char": "๐",
"description": "monkey",
- "aliases": [
- "monkey"
- ],
+ "aliases": ["monkey"],
"tags": []
},
{
"char": "๐ฆ",
"description": "gorilla",
- "aliases": [
- "gorilla"
- ],
+ "aliases": ["gorilla"],
"tags": []
},
{
"char": "๐ฆง",
"description": "orangutan",
- "aliases": [
- "orangutan"
- ],
+ "aliases": ["orangutan"],
"tags": []
},
{
"char": "๐",
"description": "dog",
- "aliases": [
- "dog2"
- ],
+ "aliases": ["dog2"],
"tags": []
},
{
"char": "๐ฆฎ",
"description": "guide dog",
- "aliases": [
- "guide_dog"
- ],
+ "aliases": ["guide_dog"],
"tags": []
},
{
"char": "๐โ๐ฆบ",
"description": "service dog",
- "aliases": [
- "service_dog"
- ],
+ "aliases": ["service_dog"],
"tags": []
},
{
"char": "๐ฉ",
"description": "poodle",
- "aliases": [
- "poodle"
- ],
- "tags": [
- "dog"
- ]
+ "aliases": ["poodle"],
+ "tags": ["dog"]
},
{
"char": "๐บ",
"description": "wolf",
- "aliases": [
- "wolf"
- ],
+ "aliases": ["wolf"],
"tags": []
},
{
"char": "๐ฆ",
"description": "raccoon",
- "aliases": [
- "raccoon"
- ],
+ "aliases": ["raccoon"],
"tags": []
},
{
"char": "๐",
"description": "cat",
- "aliases": [
- "cat2"
- ],
+ "aliases": ["cat2"],
"tags": []
},
{
"char": "๐โโฌ",
"description": "black cat",
- "aliases": [
- "black_cat"
- ],
+ "aliases": ["black_cat"],
"tags": []
},
{
"char": "๐ฆ",
"description": "lion",
- "aliases": [
- "lion"
- ],
+ "aliases": ["lion"],
"tags": []
},
{
"char": "๐
",
"description": "tiger",
- "aliases": [
- "tiger2"
- ],
+ "aliases": ["tiger2"],
"tags": []
},
{
"char": "๐",
"description": "leopard",
- "aliases": [
- "leopard"
- ],
+ "aliases": ["leopard"],
"tags": []
},
{
"char": "๐ซ",
"description": "moose",
- "aliases": [
- "moose"
- ],
- "tags": [
- "canada"
- ]
+ "aliases": ["moose"],
+ "tags": ["canada"]
},
{
"char": "๐ซ",
"description": "donkey",
- "aliases": [
- "donkey"
- ],
- "tags": [
- "mule"
- ]
+ "aliases": ["donkey"],
+ "tags": ["mule"]
},
{
"char": "๐",
"description": "horse",
- "aliases": [
- "racehorse"
- ],
- "tags": [
- "speed"
- ]
+ "aliases": ["racehorse"],
+ "tags": ["speed"]
},
{
"char": "๐ฆ",
"description": "unicorn",
- "aliases": [
- "unicorn"
- ],
+ "aliases": ["unicorn"],
"tags": []
},
{
"char": "๐ฆ",
"description": "zebra",
- "aliases": [
- "zebra"
- ],
+ "aliases": ["zebra"],
"tags": []
},
{
"char": "๐ฆ",
"description": "deer",
- "aliases": [
- "deer"
- ],
+ "aliases": ["deer"],
"tags": []
},
{
"char": "๐ฆฌ",
"description": "bison",
- "aliases": [
- "bison"
- ],
+ "aliases": ["bison"],
"tags": []
},
{
"char": "๐",
"description": "ox",
- "aliases": [
- "ox"
- ],
+ "aliases": ["ox"],
"tags": []
},
{
"char": "๐",
"description": "water buffalo",
- "aliases": [
- "water_buffalo"
- ],
+ "aliases": ["water_buffalo"],
"tags": []
},
{
"char": "๐",
"description": "cow",
- "aliases": [
- "cow2"
- ],
+ "aliases": ["cow2"],
"tags": []
},
{
"char": "๐",
"description": "pig",
- "aliases": [
- "pig2"
- ],
+ "aliases": ["pig2"],
"tags": []
},
{
"char": "๐",
"description": "boar",
- "aliases": [
- "boar"
- ],
+ "aliases": ["boar"],
"tags": []
},
{
"char": "๐ฝ",
"description": "pig nose",
- "aliases": [
- "pig_nose"
- ],
+ "aliases": ["pig_nose"],
"tags": []
},
{
"char": "๐",
"description": "ram",
- "aliases": [
- "ram"
- ],
+ "aliases": ["ram"],
"tags": []
},
{
"char": "๐",
"description": "ewe",
- "aliases": [
- "sheep"
- ],
+ "aliases": ["sheep"],
"tags": []
},
{
"char": "๐",
"description": "goat",
- "aliases": [
- "goat"
- ],
+ "aliases": ["goat"],
"tags": []
},
{
"char": "๐ช",
"description": "camel",
- "aliases": [
- "dromedary_camel"
- ],
- "tags": [
- "desert"
- ]
+ "aliases": ["dromedary_camel"],
+ "tags": ["desert"]
},
{
"char": "๐ซ",
"description": "two-hump camel",
- "aliases": [
- "camel"
- ],
+ "aliases": ["camel"],
"tags": []
},
{
"char": "๐ฆ",
"description": "llama",
- "aliases": [
- "llama"
- ],
+ "aliases": ["llama"],
"tags": []
},
{
"char": "๐ฆ",
"description": "giraffe",
- "aliases": [
- "giraffe"
- ],
+ "aliases": ["giraffe"],
"tags": []
},
{
"char": "๐",
"description": "elephant",
- "aliases": [
- "elephant"
- ],
+ "aliases": ["elephant"],
"tags": []
},
{
"char": "๐ฆฃ",
"description": "mammoth",
- "aliases": [
- "mammoth"
- ],
+ "aliases": ["mammoth"],
"tags": []
},
{
"char": "๐ฆ",
"description": "rhinoceros",
- "aliases": [
- "rhinoceros"
- ],
+ "aliases": ["rhinoceros"],
"tags": []
},
{
"char": "๐ฆ",
"description": "hippopotamus",
- "aliases": [
- "hippopotamus"
- ],
+ "aliases": ["hippopotamus"],
"tags": []
},
{
"char": "๐",
"description": "mouse",
- "aliases": [
- "mouse2"
- ],
+ "aliases": ["mouse2"],
"tags": []
},
{
"char": "๐",
"description": "rat",
- "aliases": [
- "rat"
- ],
+ "aliases": ["rat"],
"tags": []
},
{
"char": "๐",
"description": "rabbit",
- "aliases": [
- "rabbit2"
- ],
+ "aliases": ["rabbit2"],
"tags": []
},
{
"char": "๐ฟ๏ธ",
"description": "chipmunk",
- "aliases": [
- "chipmunk"
- ],
+ "aliases": ["chipmunk"],
"tags": []
},
{
"char": "๐ฆซ",
"description": "beaver",
- "aliases": [
- "beaver"
- ],
+ "aliases": ["beaver"],
"tags": []
},
{
"char": "๐ฆ",
"description": "hedgehog",
- "aliases": [
- "hedgehog"
- ],
+ "aliases": ["hedgehog"],
"tags": []
},
{
"char": "๐ฆ",
"description": "bat",
- "aliases": [
- "bat"
- ],
+ "aliases": ["bat"],
"tags": []
},
{
"char": "๐ป",
"description": "bear",
- "aliases": [
- "bear"
- ],
+ "aliases": ["bear"],
"tags": []
},
{
"char": "๐ปโโ๏ธ",
"description": "polar bear",
- "aliases": [
- "polar_bear"
- ],
+ "aliases": ["polar_bear"],
"tags": []
},
{
"char": "๐จ",
"description": "koala",
- "aliases": [
- "koala"
- ],
+ "aliases": ["koala"],
"tags": []
},
{
"char": "๐ฆฅ",
"description": "sloth",
- "aliases": [
- "sloth"
- ],
+ "aliases": ["sloth"],
"tags": []
},
{
"char": "๐ฆฆ",
"description": "otter",
- "aliases": [
- "otter"
- ],
+ "aliases": ["otter"],
"tags": []
},
{
"char": "๐ฆจ",
"description": "skunk",
- "aliases": [
- "skunk"
- ],
+ "aliases": ["skunk"],
"tags": []
},
{
"char": "๐ฆ",
"description": "kangaroo",
- "aliases": [
- "kangaroo"
- ],
+ "aliases": ["kangaroo"],
"tags": []
},
{
"char": "๐ฆก",
"description": "badger",
- "aliases": [
- "badger"
- ],
+ "aliases": ["badger"],
"tags": []
},
{
"char": "๐พ",
"description": "paw prints",
- "aliases": [
- "feet",
- "paw_prints"
- ],
+ "aliases": ["feet", "paw_prints"],
"tags": []
},
{
"char": "๐ฆ",
"description": "turkey",
- "aliases": [
- "turkey"
- ],
- "tags": [
- "thanksgiving"
- ]
+ "aliases": ["turkey"],
+ "tags": ["thanksgiving"]
},
{
"char": "๐",
"description": "chicken",
- "aliases": [
- "chicken"
- ],
+ "aliases": ["chicken"],
"tags": []
},
{
"char": "๐",
"description": "rooster",
- "aliases": [
- "rooster"
- ],
+ "aliases": ["rooster"],
"tags": []
},
{
"char": "๐ฃ",
"description": "hatching chick",
- "aliases": [
- "hatching_chick"
- ],
+ "aliases": ["hatching_chick"],
"tags": []
},
{
"char": "๐ค",
"description": "baby chick",
- "aliases": [
- "baby_chick"
- ],
+ "aliases": ["baby_chick"],
"tags": []
},
{
"char": "๐ฅ",
"description": "front-facing baby chick",
- "aliases": [
- "hatched_chick"
- ],
+ "aliases": ["hatched_chick"],
"tags": []
},
{
"char": "๐ง",
"description": "penguin",
- "aliases": [
- "penguin"
- ],
+ "aliases": ["penguin"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "dove",
- "aliases": [
- "dove"
- ],
- "tags": [
- "peace"
- ]
+ "aliases": ["dove"],
+ "tags": ["peace"]
},
{
"char": "๐ฆ
",
"description": "eagle",
- "aliases": [
- "eagle"
- ],
+ "aliases": ["eagle"],
"tags": []
},
{
"char": "๐ฆ",
"description": "duck",
- "aliases": [
- "duck"
- ],
+ "aliases": ["duck"],
"tags": []
},
{
"char": "๐ฆข",
"description": "swan",
- "aliases": [
- "swan"
- ],
+ "aliases": ["swan"],
"tags": []
},
{
"char": "๐ฆ",
"description": "owl",
- "aliases": [
- "owl"
- ],
+ "aliases": ["owl"],
"tags": []
},
{
"char": "๐ฆค",
"description": "dodo",
- "aliases": [
- "dodo"
- ],
+ "aliases": ["dodo"],
"tags": []
},
{
"char": "๐ชถ",
"description": "feather",
- "aliases": [
- "feather"
- ],
+ "aliases": ["feather"],
"tags": []
},
{
"char": "๐ฆฉ",
"description": "flamingo",
- "aliases": [
- "flamingo"
- ],
+ "aliases": ["flamingo"],
"tags": []
},
{
"char": "๐ฆ",
"description": "peacock",
- "aliases": [
- "peacock"
- ],
+ "aliases": ["peacock"],
"tags": []
},
{
"char": "๐ฆ",
"description": "parrot",
- "aliases": [
- "parrot"
- ],
+ "aliases": ["parrot"],
"tags": []
},
{
"char": "๐ชฝ",
"description": "wing",
- "aliases": [
- "wing"
- ],
- "tags": [
- "fly"
- ]
+ "aliases": ["wing"],
+ "tags": ["fly"]
},
{
"char": "๐ชฟ",
"description": "goose",
- "aliases": [
- "goose"
- ],
- "tags": [
- "honk"
- ]
+ "aliases": ["goose"],
+ "tags": ["honk"]
},
{
"char": "๐ธ",
"description": "frog",
- "aliases": [
- "frog"
- ],
+ "aliases": ["frog"],
"tags": []
},
{
"char": "๐",
"description": "crocodile",
- "aliases": [
- "crocodile"
- ],
+ "aliases": ["crocodile"],
"tags": []
},
{
"char": "๐ข",
"description": "turtle",
- "aliases": [
- "turtle"
- ],
- "tags": [
- "slow"
- ]
+ "aliases": ["turtle"],
+ "tags": ["slow"]
},
{
"char": "๐ฆ",
"description": "lizard",
- "aliases": [
- "lizard"
- ],
+ "aliases": ["lizard"],
"tags": []
},
{
"char": "๐",
"description": "snake",
- "aliases": [
- "snake"
- ],
+ "aliases": ["snake"],
"tags": []
},
{
"char": "๐",
"description": "dragon",
- "aliases": [
- "dragon"
- ],
+ "aliases": ["dragon"],
"tags": []
},
{
"char": "๐ฆ",
"description": "sauropod",
- "aliases": [
- "sauropod"
- ],
- "tags": [
- "dinosaur"
- ]
+ "aliases": ["sauropod"],
+ "tags": ["dinosaur"]
},
{
"char": "๐ฆ",
"description": "T-Rex",
- "aliases": [
- "t-rex"
- ],
- "tags": [
- "dinosaur"
- ]
+ "aliases": ["t-rex"],
+ "tags": ["dinosaur"]
},
{
"char": "๐ณ",
"description": "spouting whale",
- "aliases": [
- "whale"
- ],
- "tags": [
- "sea"
- ]
+ "aliases": ["whale"],
+ "tags": ["sea"]
},
{
"char": "๐",
"description": "whale",
- "aliases": [
- "whale2"
- ],
+ "aliases": ["whale2"],
"tags": []
},
{
"char": "๐ฌ",
"description": "dolphin",
- "aliases": [
- "dolphin",
- "flipper"
- ],
+ "aliases": ["dolphin", "flipper"],
"tags": []
},
{
"char": "๐ฆญ",
"description": "seal",
- "aliases": [
- "seal"
- ],
+ "aliases": ["seal"],
"tags": []
},
{
"char": "๐ฆ",
"description": "shark",
- "aliases": [
- "shark"
- ],
+ "aliases": ["shark"],
"tags": []
},
{
"char": "๐",
"description": "octopus",
- "aliases": [
- "octopus"
- ],
+ "aliases": ["octopus"],
"tags": []
},
{
"char": "๐",
"description": "spiral shell",
- "aliases": [
- "shell"
- ],
- "tags": [
- "sea",
- "beach"
- ]
+ "aliases": ["shell"],
+ "tags": ["sea", "beach"]
},
{
"char": "๐ชธ",
"description": "coral",
- "aliases": [
- "coral"
- ],
+ "aliases": ["coral"],
"tags": []
},
{
"char": "๐",
"description": "snail",
- "aliases": [
- "snail"
- ],
- "tags": [
- "slow"
- ]
+ "aliases": ["snail"],
+ "tags": ["slow"]
},
{
"char": "๐ฆ",
"description": "butterfly",
- "aliases": [
- "butterfly"
- ],
+ "aliases": ["butterfly"],
"tags": []
},
{
"char": "๐",
"description": "ant",
- "aliases": [
- "ant"
- ],
+ "aliases": ["ant"],
"tags": []
},
{
"char": "๐",
"description": "honeybee",
- "aliases": [
- "bee",
- "honeybee"
- ],
+ "aliases": ["bee", "honeybee"],
"tags": []
},
{
"char": "๐ชฒ",
"description": "beetle",
- "aliases": [
- "beetle"
- ],
+ "aliases": ["beetle"],
"tags": []
},
{
"char": "๐ฆ",
"description": "cricket",
- "aliases": [
- "cricket"
- ],
+ "aliases": ["cricket"],
"tags": []
},
{
"char": "๐ชณ",
"description": "cockroach",
- "aliases": [
- "cockroach"
- ],
+ "aliases": ["cockroach"],
"tags": []
},
{
"char": "๐ท๏ธ",
"description": "spider",
- "aliases": [
- "spider"
- ],
+ "aliases": ["spider"],
"tags": []
},
{
"char": "๐ธ๏ธ",
"description": "spider web",
- "aliases": [
- "spider_web"
- ],
+ "aliases": ["spider_web"],
"tags": []
},
{
"char": "๐ฆ",
"description": "scorpion",
- "aliases": [
- "scorpion"
- ],
+ "aliases": ["scorpion"],
"tags": []
},
{
"char": "๐ฆ",
"description": "mosquito",
- "aliases": [
- "mosquito"
- ],
+ "aliases": ["mosquito"],
"tags": []
},
{
"char": "๐ชฐ",
"description": "fly",
- "aliases": [
- "fly"
- ],
+ "aliases": ["fly"],
"tags": []
},
{
"char": "๐ชฑ",
"description": "worm",
- "aliases": [
- "worm"
- ],
+ "aliases": ["worm"],
"tags": []
},
{
"char": "๐ฆ ",
"description": "microbe",
- "aliases": [
- "microbe"
- ],
- "tags": [
- "germ"
- ]
+ "aliases": ["microbe"],
+ "tags": ["germ"]
},
{
"char": "๐",
"description": "bouquet",
- "aliases": [
- "bouquet"
- ],
- "tags": [
- "flowers"
- ]
+ "aliases": ["bouquet"],
+ "tags": ["flowers"]
},
{
"char": "๐ธ",
"description": "cherry blossom",
- "aliases": [
- "cherry_blossom"
- ],
- "tags": [
- "flower",
- "spring"
- ]
+ "aliases": ["cherry_blossom"],
+ "tags": ["flower", "spring"]
},
{
"char": "๐ฎ",
"description": "white flower",
- "aliases": [
- "white_flower"
- ],
+ "aliases": ["white_flower"],
"tags": []
},
{
"char": "๐ชท",
"description": "lotus",
- "aliases": [
- "lotus"
- ],
+ "aliases": ["lotus"],
"tags": []
},
{
"char": "๐ต๏ธ",
"description": "rosette",
- "aliases": [
- "rosette"
- ],
+ "aliases": ["rosette"],
"tags": []
},
{
"char": "๐น",
"description": "rose",
- "aliases": [
- "rose"
- ],
- "tags": [
- "flower"
- ]
+ "aliases": ["rose"],
+ "tags": ["flower"]
},
{
"char": "๐ฅ",
"description": "wilted flower",
- "aliases": [
- "wilted_flower"
- ],
+ "aliases": ["wilted_flower"],
"tags": []
},
{
"char": "๐บ",
"description": "hibiscus",
- "aliases": [
- "hibiscus"
- ],
+ "aliases": ["hibiscus"],
"tags": []
},
{
"char": "๐ป",
"description": "sunflower",
- "aliases": [
- "sunflower"
- ],
+ "aliases": ["sunflower"],
"tags": []
},
{
"char": "๐ผ",
"description": "blossom",
- "aliases": [
- "blossom"
- ],
+ "aliases": ["blossom"],
"tags": []
},
{
"char": "๐ท",
"description": "tulip",
- "aliases": [
- "tulip"
- ],
- "tags": [
- "flower"
- ]
+ "aliases": ["tulip"],
+ "tags": ["flower"]
},
{
"char": "๐ชป",
"description": "hyacinth",
- "aliases": [
- "hyacinth"
- ],
+ "aliases": ["hyacinth"],
"tags": []
},
{
"char": "๐ฑ",
"description": "seedling",
- "aliases": [
- "seedling"
- ],
- "tags": [
- "plant"
- ]
+ "aliases": ["seedling"],
+ "tags": ["plant"]
},
{
"char": "๐ชด",
"description": "potted plant",
- "aliases": [
- "potted_plant"
- ],
+ "aliases": ["potted_plant"],
"tags": []
},
{
"char": "๐ฒ",
"description": "evergreen tree",
- "aliases": [
- "evergreen_tree"
- ],
- "tags": [
- "wood"
- ]
+ "aliases": ["evergreen_tree"],
+ "tags": ["wood"]
},
{
"char": "๐ณ",
"description": "deciduous tree",
- "aliases": [
- "deciduous_tree"
- ],
- "tags": [
- "wood"
- ]
+ "aliases": ["deciduous_tree"],
+ "tags": ["wood"]
},
{
"char": "๐ด",
"description": "palm tree",
- "aliases": [
- "palm_tree"
- ],
+ "aliases": ["palm_tree"],
"tags": []
},
{
"char": "๐ต",
"description": "cactus",
- "aliases": [
- "cactus"
- ],
+ "aliases": ["cactus"],
"tags": []
},
{
"char": "๐พ",
"description": "sheaf of rice",
- "aliases": [
- "ear_of_rice"
- ],
+ "aliases": ["ear_of_rice"],
"tags": []
},
{
"char": "๐ฟ",
"description": "herb",
- "aliases": [
- "herb"
- ],
+ "aliases": ["herb"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "shamrock",
- "aliases": [
- "shamrock"
- ],
+ "aliases": ["shamrock"],
"tags": []
},
{
"char": "๐",
"description": "maple leaf",
- "aliases": [
- "maple_leaf"
- ],
- "tags": [
- "canada"
- ]
+ "aliases": ["maple_leaf"],
+ "tags": ["canada"]
},
{
"char": "๐",
"description": "fallen leaf",
- "aliases": [
- "fallen_leaf"
- ],
- "tags": [
- "autumn"
- ]
+ "aliases": ["fallen_leaf"],
+ "tags": ["autumn"]
},
{
"char": "๐",
"description": "leaf fluttering in wind",
- "aliases": [
- "leaves"
- ],
- "tags": [
- "leaf"
- ]
+ "aliases": ["leaves"],
+ "tags": ["leaf"]
},
{
"char": "๐ชน",
"description": "empty nest",
- "aliases": [
- "empty_nest"
- ],
+ "aliases": ["empty_nest"],
"tags": []
},
{
"char": "๐ชบ",
"description": "nest with eggs",
- "aliases": [
- "nest_with_eggs"
- ],
+ "aliases": ["nest_with_eggs"],
"tags": []
},
{
"char": "๐",
"description": "mushroom",
- "aliases": [
- "mushroom"
- ],
- "tags": [
- "fungus"
- ]
+ "aliases": ["mushroom"],
+ "tags": ["fungus"]
},
{
"char": "๐",
"description": "grapes",
- "aliases": [
- "grapes"
- ],
+ "aliases": ["grapes"],
"tags": []
},
{
"char": "๐",
"description": "melon",
- "aliases": [
- "melon"
- ],
+ "aliases": ["melon"],
"tags": []
},
{
"char": "๐",
"description": "watermelon",
- "aliases": [
- "watermelon"
- ],
+ "aliases": ["watermelon"],
"tags": []
},
{
"char": "๐",
"description": "tangerine",
- "aliases": [
- "tangerine",
- "orange",
- "mandarin"
- ],
+ "aliases": ["tangerine", "orange", "mandarin"],
"tags": []
},
{
"char": "๐",
"description": "lemon",
- "aliases": [
- "lemon"
- ],
+ "aliases": ["lemon"],
"tags": []
},
{
"char": "๐",
"description": "pineapple",
- "aliases": [
- "pineapple"
- ],
+ "aliases": ["pineapple"],
"tags": []
},
{
"char": "๐ฅญ",
"description": "mango",
- "aliases": [
- "mango"
- ],
+ "aliases": ["mango"],
"tags": []
},
{
"char": "๐",
"description": "red apple",
- "aliases": [
- "apple"
- ],
+ "aliases": ["apple"],
"tags": []
},
{
"char": "๐",
"description": "pear",
- "aliases": [
- "pear"
- ],
+ "aliases": ["pear"],
"tags": []
},
{
"char": "๐",
"description": "peach",
- "aliases": [
- "peach"
- ],
+ "aliases": ["peach"],
"tags": []
},
{
"char": "๐ซ",
"description": "blueberries",
- "aliases": [
- "blueberries"
- ],
+ "aliases": ["blueberries"],
"tags": []
},
{
"char": "๐
",
"description": "tomato",
- "aliases": [
- "tomato"
- ],
+ "aliases": ["tomato"],
"tags": []
},
{
"char": "๐ซ",
"description": "olive",
- "aliases": [
- "olive"
- ],
+ "aliases": ["olive"],
"tags": []
},
{
"char": "๐ฅฅ",
"description": "coconut",
- "aliases": [
- "coconut"
- ],
+ "aliases": ["coconut"],
"tags": []
},
{
"char": "๐ฅ",
"description": "avocado",
- "aliases": [
- "avocado"
- ],
+ "aliases": ["avocado"],
"tags": []
},
{
"char": "๐",
"description": "eggplant",
- "aliases": [
- "eggplant"
- ],
- "tags": [
- "aubergine"
- ]
+ "aliases": ["eggplant"],
+ "tags": ["aubergine"]
},
{
"char": "๐ฅ",
"description": "potato",
- "aliases": [
- "potato"
- ],
+ "aliases": ["potato"],
"tags": []
},
{
"char": "๐ฝ",
"description": "ear of corn",
- "aliases": [
- "corn"
- ],
+ "aliases": ["corn"],
"tags": []
},
{
"char": "๐ถ๏ธ",
"description": "hot pepper",
- "aliases": [
- "hot_pepper"
- ],
- "tags": [
- "spicy"
- ]
+ "aliases": ["hot_pepper"],
+ "tags": ["spicy"]
},
{
"char": "๐ซ",
"description": "bell pepper",
- "aliases": [
- "bell_pepper"
- ],
+ "aliases": ["bell_pepper"],
"tags": []
},
{
"char": "๐ฅ",
"description": "cucumber",
- "aliases": [
- "cucumber"
- ],
+ "aliases": ["cucumber"],
"tags": []
},
{
"char": "๐ฅฌ",
"description": "leafy green",
- "aliases": [
- "leafy_green"
- ],
+ "aliases": ["leafy_green"],
"tags": []
},
{
"char": "๐ฅฆ",
"description": "broccoli",
- "aliases": [
- "broccoli"
- ],
+ "aliases": ["broccoli"],
"tags": []
},
{
"char": "๐ง",
"description": "garlic",
- "aliases": [
- "garlic"
- ],
+ "aliases": ["garlic"],
"tags": []
},
{
"char": "๐ง
",
"description": "onion",
- "aliases": [
- "onion"
- ],
+ "aliases": ["onion"],
"tags": []
},
{
"char": "๐ฅ",
"description": "peanuts",
- "aliases": [
- "peanuts"
- ],
+ "aliases": ["peanuts"],
"tags": []
},
{
"char": "๐ซ",
"description": "beans",
- "aliases": [
- "beans"
- ],
+ "aliases": ["beans"],
"tags": []
},
{
"char": "๐ฐ",
"description": "chestnut",
- "aliases": [
- "chestnut"
- ],
+ "aliases": ["chestnut"],
"tags": []
},
{
"char": "๐ซ",
"description": "ginger root",
- "aliases": [
- "ginger_root"
- ],
+ "aliases": ["ginger_root"],
"tags": []
},
{
"char": "๐ซ",
"description": "pea pod",
- "aliases": [
- "pea_pod"
- ],
+ "aliases": ["pea_pod"],
"tags": []
},
{
"char": "๐",
"description": "bread",
- "aliases": [
- "bread"
- ],
- "tags": [
- "toast"
- ]
+ "aliases": ["bread"],
+ "tags": ["toast"]
},
{
"char": "๐ฅ",
"description": "croissant",
- "aliases": [
- "croissant"
- ],
+ "aliases": ["croissant"],
"tags": []
},
{
"char": "๐ฅ",
"description": "baguette bread",
- "aliases": [
- "baguette_bread"
- ],
+ "aliases": ["baguette_bread"],
"tags": []
},
{
"char": "๐ซ",
"description": "flatbread",
- "aliases": [
- "flatbread"
- ],
+ "aliases": ["flatbread"],
"tags": []
},
{
"char": "๐ฅจ",
"description": "pretzel",
- "aliases": [
- "pretzel"
- ],
+ "aliases": ["pretzel"],
"tags": []
},
{
"char": "๐ฅฏ",
"description": "bagel",
- "aliases": [
- "bagel"
- ],
+ "aliases": ["bagel"],
"tags": []
},
{
"char": "๐ฅ",
"description": "pancakes",
- "aliases": [
- "pancakes"
- ],
+ "aliases": ["pancakes"],
"tags": []
},
{
"char": "๐ง",
"description": "waffle",
- "aliases": [
- "waffle"
- ],
+ "aliases": ["waffle"],
"tags": []
},
{
"char": "๐ง",
"description": "cheese wedge",
- "aliases": [
- "cheese"
- ],
+ "aliases": ["cheese"],
"tags": []
},
{
"char": "๐",
"description": "meat on bone",
- "aliases": [
- "meat_on_bone"
- ],
+ "aliases": ["meat_on_bone"],
"tags": []
},
{
"char": "๐",
"description": "poultry leg",
- "aliases": [
- "poultry_leg"
- ],
- "tags": [
- "meat",
- "chicken"
- ]
+ "aliases": ["poultry_leg"],
+ "tags": ["meat", "chicken"]
},
{
"char": "๐ฅฉ",
"description": "cut of meat",
- "aliases": [
- "cut_of_meat"
- ],
+ "aliases": ["cut_of_meat"],
"tags": []
},
{
"char": "๐ฅ",
"description": "bacon",
- "aliases": [
- "bacon"
- ],
+ "aliases": ["bacon"],
"tags": []
},
{
"char": "๐",
"description": "hamburger",
- "aliases": [
- "hamburger"
- ],
- "tags": [
- "burger"
- ]
+ "aliases": ["hamburger"],
+ "tags": ["burger"]
},
{
"char": "๐",
"description": "french fries",
- "aliases": [
- "fries"
- ],
+ "aliases": ["fries"],
"tags": []
},
{
"char": "๐",
"description": "pizza",
- "aliases": [
- "pizza"
- ],
+ "aliases": ["pizza"],
"tags": []
},
{
"char": "๐ญ",
"description": "hot dog",
- "aliases": [
- "hotdog"
- ],
+ "aliases": ["hotdog"],
"tags": []
},
{
"char": "๐ฅช",
"description": "sandwich",
- "aliases": [
- "sandwich"
- ],
+ "aliases": ["sandwich"],
"tags": []
},
{
"char": "๐ฎ",
"description": "taco",
- "aliases": [
- "taco"
- ],
+ "aliases": ["taco"],
"tags": []
},
{
"char": "๐ฏ",
"description": "burrito",
- "aliases": [
- "burrito"
- ],
+ "aliases": ["burrito"],
"tags": []
},
{
"char": "๐ซ",
"description": "tamale",
- "aliases": [
- "tamale"
- ],
+ "aliases": ["tamale"],
"tags": []
},
{
"char": "๐ฅ",
"description": "stuffed flatbread",
- "aliases": [
- "stuffed_flatbread"
- ],
+ "aliases": ["stuffed_flatbread"],
"tags": []
},
{
"char": "๐ง",
"description": "falafel",
- "aliases": [
- "falafel"
- ],
+ "aliases": ["falafel"],
"tags": []
},
{
"char": "๐ฅ",
"description": "egg",
- "aliases": [
- "egg"
- ],
+ "aliases": ["egg"],
"tags": []
},
{
"char": "๐ซ",
"description": "fondue",
- "aliases": [
- "fondue"
- ],
+ "aliases": ["fondue"],
"tags": []
},
{
"char": "๐ฅฃ",
"description": "bowl with spoon",
- "aliases": [
- "bowl_with_spoon"
- ],
+ "aliases": ["bowl_with_spoon"],
"tags": []
},
{
"char": "๐ฅ",
"description": "green salad",
- "aliases": [
- "green_salad"
- ],
+ "aliases": ["green_salad"],
"tags": []
},
{
"char": "๐ฟ",
"description": "popcorn",
- "aliases": [
- "popcorn"
- ],
+ "aliases": ["popcorn"],
"tags": []
},
{
"char": "๐ง",
"description": "butter",
- "aliases": [
- "butter"
- ],
+ "aliases": ["butter"],
"tags": []
},
{
"char": "๐ง",
"description": "salt",
- "aliases": [
- "salt"
- ],
+ "aliases": ["salt"],
"tags": []
},
{
"char": "๐ฑ",
"description": "bento box",
- "aliases": [
- "bento"
- ],
+ "aliases": ["bento"],
"tags": []
},
{
"char": "๐",
"description": "rice cracker",
- "aliases": [
- "rice_cracker"
- ],
+ "aliases": ["rice_cracker"],
"tags": []
},
{
"char": "๐",
"description": "rice ball",
- "aliases": [
- "rice_ball"
- ],
+ "aliases": ["rice_ball"],
"tags": []
},
{
"char": "๐",
"description": "cooked rice",
- "aliases": [
- "rice"
- ],
+ "aliases": ["rice"],
"tags": []
},
{
"char": "๐",
"description": "curry rice",
- "aliases": [
- "curry"
- ],
+ "aliases": ["curry"],
"tags": []
},
{
"char": "๐",
"description": "steaming bowl",
- "aliases": [
- "ramen"
- ],
- "tags": [
- "noodle"
- ]
+ "aliases": ["ramen"],
+ "tags": ["noodle"]
},
{
"char": "๐",
"description": "spaghetti",
- "aliases": [
- "spaghetti"
- ],
- "tags": [
- "pasta"
- ]
+ "aliases": ["spaghetti"],
+ "tags": ["pasta"]
},
{
"char": "๐ ",
"description": "roasted sweet potato",
- "aliases": [
- "sweet_potato"
- ],
+ "aliases": ["sweet_potato"],
"tags": []
},
{
"char": "๐ข",
"description": "oden",
- "aliases": [
- "oden"
- ],
+ "aliases": ["oden"],
"tags": []
},
{
"char": "๐ฃ",
"description": "sushi",
- "aliases": [
- "sushi"
- ],
+ "aliases": ["sushi"],
"tags": []
},
{
"char": "๐ค",
"description": "fried shrimp",
- "aliases": [
- "fried_shrimp"
- ],
- "tags": [
- "tempura"
- ]
+ "aliases": ["fried_shrimp"],
+ "tags": ["tempura"]
},
{
"char": "๐ฅฎ",
"description": "moon cake",
- "aliases": [
- "moon_cake"
- ],
+ "aliases": ["moon_cake"],
"tags": []
},
{
"char": "๐ก",
"description": "dango",
- "aliases": [
- "dango"
- ],
+ "aliases": ["dango"],
"tags": []
},
{
"char": "๐ฅ",
"description": "dumpling",
- "aliases": [
- "dumpling"
- ],
+ "aliases": ["dumpling"],
"tags": []
},
{
"char": "๐ฅ ",
"description": "fortune cookie",
- "aliases": [
- "fortune_cookie"
- ],
+ "aliases": ["fortune_cookie"],
"tags": []
},
{
"char": "๐ฅก",
"description": "takeout box",
- "aliases": [
- "takeout_box"
- ],
+ "aliases": ["takeout_box"],
"tags": []
},
{
"char": "๐ฆ",
"description": "crab",
- "aliases": [
- "crab"
- ],
+ "aliases": ["crab"],
"tags": []
},
{
"char": "๐ฆ",
"description": "lobster",
- "aliases": [
- "lobster"
- ],
+ "aliases": ["lobster"],
"tags": []
},
{
"char": "๐ฆ",
"description": "shrimp",
- "aliases": [
- "shrimp"
- ],
+ "aliases": ["shrimp"],
"tags": []
},
{
"char": "๐ฆ",
"description": "squid",
- "aliases": [
- "squid"
- ],
+ "aliases": ["squid"],
"tags": []
},
{
"char": "๐ฆช",
"description": "oyster",
- "aliases": [
- "oyster"
- ],
+ "aliases": ["oyster"],
"tags": []
},
{
"char": "๐ฆ",
"description": "soft ice cream",
- "aliases": [
- "icecream"
- ],
+ "aliases": ["icecream"],
"tags": []
},
{
"char": "๐ง",
"description": "shaved ice",
- "aliases": [
- "shaved_ice"
- ],
+ "aliases": ["shaved_ice"],
"tags": []
},
{
"char": "๐จ",
"description": "ice cream",
- "aliases": [
- "ice_cream"
- ],
+ "aliases": ["ice_cream"],
"tags": []
},
{
"char": "๐ฉ",
"description": "doughnut",
- "aliases": [
- "doughnut"
- ],
+ "aliases": ["doughnut"],
"tags": []
},
{
"char": "๐ช",
"description": "cookie",
- "aliases": [
- "cookie"
- ],
+ "aliases": ["cookie"],
"tags": []
},
{
"char": "๐",
"description": "birthday cake",
- "aliases": [
- "birthday"
- ],
- "tags": [
- "party"
- ]
+ "aliases": ["birthday"],
+ "tags": ["party"]
},
{
"char": "๐ฐ",
"description": "shortcake",
- "aliases": [
- "cake"
- ],
- "tags": [
- "dessert"
- ]
+ "aliases": ["cake"],
+ "tags": ["dessert"]
},
{
"char": "๐ง",
"description": "cupcake",
- "aliases": [
- "cupcake"
- ],
+ "aliases": ["cupcake"],
"tags": []
},
{
"char": "๐ฅง",
"description": "pie",
- "aliases": [
- "pie"
- ],
+ "aliases": ["pie"],
"tags": []
},
{
"char": "๐ซ",
"description": "chocolate bar",
- "aliases": [
- "chocolate_bar"
- ],
+ "aliases": ["chocolate_bar"],
"tags": []
},
{
"char": "๐ฌ",
"description": "candy",
- "aliases": [
- "candy"
- ],
- "tags": [
- "sweet"
- ]
+ "aliases": ["candy"],
+ "tags": ["sweet"]
},
{
"char": "๐ญ",
"description": "lollipop",
- "aliases": [
- "lollipop"
- ],
+ "aliases": ["lollipop"],
"tags": []
},
{
"char": "๐ฎ",
"description": "custard",
- "aliases": [
- "custard"
- ],
+ "aliases": ["custard"],
"tags": []
},
{
"char": "๐ฏ",
"description": "honey pot",
- "aliases": [
- "honey_pot"
- ],
+ "aliases": ["honey_pot"],
"tags": []
},
{
"char": "๐ผ",
"description": "baby bottle",
- "aliases": [
- "baby_bottle"
- ],
- "tags": [
- "milk"
- ]
+ "aliases": ["baby_bottle"],
+ "tags": ["milk"]
},
{
"char": "๐ฅ",
"description": "glass of milk",
- "aliases": [
- "milk_glass"
- ],
+ "aliases": ["milk_glass"],
"tags": []
},
{
"char": "โ",
"description": "hot beverage",
- "aliases": [
- "coffee"
- ],
- "tags": [
- "cafe",
- "espresso"
- ]
+ "aliases": ["coffee"],
+ "tags": ["cafe", "espresso"]
},
{
"char": "๐ซ",
"description": "teapot",
- "aliases": [
- "teapot"
- ],
+ "aliases": ["teapot"],
"tags": []
},
{
"char": "๐ถ",
"description": "sake",
- "aliases": [
- "sake"
- ],
+ "aliases": ["sake"],
"tags": []
},
{
"char": "๐พ",
"description": "bottle with popping cork",
- "aliases": [
- "champagne"
- ],
- "tags": [
- "bottle",
- "bubbly",
- "celebration"
- ]
+ "aliases": ["champagne"],
+ "tags": ["bottle", "bubbly", "celebration"]
},
{
"char": "๐ท",
"description": "wine glass",
- "aliases": [
- "wine_glass"
- ],
+ "aliases": ["wine_glass"],
"tags": []
},
{
"char": "๐ฅ",
"description": "clinking glasses",
- "aliases": [
- "clinking_glasses"
- ],
- "tags": [
- "cheers",
- "toast"
- ]
+ "aliases": ["clinking_glasses"],
+ "tags": ["cheers", "toast"]
},
{
"char": "๐ฅ",
"description": "tumbler glass",
- "aliases": [
- "tumbler_glass"
- ],
- "tags": [
- "whisky"
- ]
+ "aliases": ["tumbler_glass"],
+ "tags": ["whisky"]
},
{
"char": "๐ซ",
"description": "pouring liquid",
- "aliases": [
- "pouring_liquid"
- ],
+ "aliases": ["pouring_liquid"],
"tags": []
},
{
"char": "๐ฅค",
"description": "cup with straw",
- "aliases": [
- "cup_with_straw"
- ],
+ "aliases": ["cup_with_straw"],
"tags": []
},
{
"char": "๐ง",
"description": "bubble tea",
- "aliases": [
- "bubble_tea"
- ],
+ "aliases": ["bubble_tea"],
"tags": []
},
{
"char": "๐ง",
"description": "beverage box",
- "aliases": [
- "beverage_box"
- ],
+ "aliases": ["beverage_box"],
"tags": []
},
{
"char": "๐ง",
"description": "mate",
- "aliases": [
- "mate"
- ],
+ "aliases": ["mate"],
"tags": []
},
{
"char": "๐ง",
"description": "ice",
- "aliases": [
- "ice_cube"
- ],
+ "aliases": ["ice_cube"],
"tags": []
},
{
"char": "๐ฅข",
"description": "chopsticks",
- "aliases": [
- "chopsticks"
- ],
+ "aliases": ["chopsticks"],
"tags": []
},
{
"char": "๐ด",
"description": "fork and knife",
- "aliases": [
- "fork_and_knife"
- ],
- "tags": [
- "cutlery"
- ]
+ "aliases": ["fork_and_knife"],
+ "tags": ["cutlery"]
},
{
"char": "๐ฅ",
"description": "spoon",
- "aliases": [
- "spoon"
- ],
+ "aliases": ["spoon"],
"tags": []
},
{
"char": "๐ช",
"description": "kitchen knife",
- "aliases": [
- "hocho",
- "knife"
- ],
- "tags": [
- "cut",
- "chop"
- ]
+ "aliases": ["hocho", "knife"],
+ "tags": ["cut", "chop"]
},
{
"char": "๐ซ",
"description": "jar",
- "aliases": [
- "jar"
- ],
+ "aliases": ["jar"],
"tags": []
},
{
"char": "๐บ",
"description": "amphora",
- "aliases": [
- "amphora"
- ],
+ "aliases": ["amphora"],
"tags": []
},
{
"char": "๐พ",
"description": "map of Japan",
- "aliases": [
- "japan"
- ],
+ "aliases": ["japan"],
"tags": []
},
{
"char": "๐งญ",
"description": "compass",
- "aliases": [
- "compass"
- ],
+ "aliases": ["compass"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "snow-capped mountain",
- "aliases": [
- "mountain_snow"
- ],
+ "aliases": ["mountain_snow"],
"tags": []
},
{
"char": "โฐ๏ธ",
"description": "mountain",
- "aliases": [
- "mountain"
- ],
+ "aliases": ["mountain"],
"tags": []
},
{
"char": "๐",
"description": "volcano",
- "aliases": [
- "volcano"
- ],
+ "aliases": ["volcano"],
"tags": []
},
{
"char": "๐ป",
"description": "mount fuji",
- "aliases": [
- "mount_fuji"
- ],
+ "aliases": ["mount_fuji"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "camping",
- "aliases": [
- "camping"
- ],
+ "aliases": ["camping"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "beach with umbrella",
- "aliases": [
- "beach_umbrella"
- ],
+ "aliases": ["beach_umbrella"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "desert",
- "aliases": [
- "desert"
- ],
+ "aliases": ["desert"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "desert island",
- "aliases": [
- "desert_island"
- ],
+ "aliases": ["desert_island"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "stadium",
- "aliases": [
- "stadium"
- ],
+ "aliases": ["stadium"],
"tags": []
},
{
"char": "๐งฑ",
"description": "brick",
- "aliases": [
- "bricks"
- ],
+ "aliases": ["bricks"],
"tags": []
},
{
"char": "๐ชจ",
"description": "rock",
- "aliases": [
- "rock"
- ],
+ "aliases": ["rock"],
"tags": []
},
{
"char": "๐ชต",
"description": "wood",
- "aliases": [
- "wood"
- ],
+ "aliases": ["wood"],
"tags": []
},
{
"char": "๐",
"description": "hut",
- "aliases": [
- "hut"
- ],
+ "aliases": ["hut"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "houses",
- "aliases": [
- "houses"
- ],
+ "aliases": ["houses"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "derelict house",
- "aliases": [
- "derelict_house"
- ],
+ "aliases": ["derelict_house"],
"tags": []
},
{
"char": "๐ ",
"description": "house",
- "aliases": [
- "house"
- ],
+ "aliases": ["house"],
"tags": []
},
{
"char": "๐ก",
"description": "house with garden",
- "aliases": [
- "house_with_garden"
- ],
+ "aliases": ["house_with_garden"],
"tags": []
},
{
"char": "๐ฃ",
"description": "Japanese post office",
- "aliases": [
- "post_office"
- ],
+ "aliases": ["post_office"],
"tags": []
},
{
"char": "๐ค",
"description": "post office",
- "aliases": [
- "european_post_office"
- ],
+ "aliases": ["european_post_office"],
"tags": []
},
{
"char": "๐ฅ",
"description": "hospital",
- "aliases": [
- "hospital"
- ],
+ "aliases": ["hospital"],
"tags": []
},
{
"char": "๐ฆ",
"description": "bank",
- "aliases": [
- "bank"
- ],
+ "aliases": ["bank"],
"tags": []
},
{
"char": "๐จ",
"description": "hotel",
- "aliases": [
- "hotel"
- ],
+ "aliases": ["hotel"],
"tags": []
},
{
"char": "๐ช",
"description": "convenience store",
- "aliases": [
- "convenience_store"
- ],
+ "aliases": ["convenience_store"],
"tags": []
},
{
"char": "๐ซ",
"description": "school",
- "aliases": [
- "school"
- ],
+ "aliases": ["school"],
"tags": []
},
{
"char": "๐ฌ",
"description": "department store",
- "aliases": [
- "department_store"
- ],
+ "aliases": ["department_store"],
"tags": []
},
{
"char": "๐ญ",
"description": "factory",
- "aliases": [
- "factory"
- ],
+ "aliases": ["factory"],
"tags": []
},
{
"char": "๐ฏ",
"description": "Japanese castle",
- "aliases": [
- "japanese_castle"
- ],
+ "aliases": ["japanese_castle"],
"tags": []
},
{
"char": "๐ฐ",
"description": "castle",
- "aliases": [
- "european_castle"
- ],
+ "aliases": ["european_castle"],
"tags": []
},
{
"char": "๐",
"description": "wedding",
- "aliases": [
- "wedding"
- ],
- "tags": [
- "marriage"
- ]
+ "aliases": ["wedding"],
+ "tags": ["marriage"]
},
{
"char": "๐ผ",
"description": "Tokyo tower",
- "aliases": [
- "tokyo_tower"
- ],
+ "aliases": ["tokyo_tower"],
"tags": []
},
{
"char": "๐ฝ",
"description": "Statue of Liberty",
- "aliases": [
- "statue_of_liberty"
- ],
+ "aliases": ["statue_of_liberty"],
"tags": []
},
{
"char": "โช",
"description": "church",
- "aliases": [
- "church"
- ],
+ "aliases": ["church"],
"tags": []
},
{
"char": "๐",
"description": "mosque",
- "aliases": [
- "mosque"
- ],
+ "aliases": ["mosque"],
"tags": []
},
{
"char": "๐",
"description": "hindu temple",
- "aliases": [
- "hindu_temple"
- ],
+ "aliases": ["hindu_temple"],
"tags": []
},
{
"char": "๐",
"description": "synagogue",
- "aliases": [
- "synagogue"
- ],
+ "aliases": ["synagogue"],
"tags": []
},
{
"char": "โฉ๏ธ",
"description": "shinto shrine",
- "aliases": [
- "shinto_shrine"
- ],
+ "aliases": ["shinto_shrine"],
"tags": []
},
{
"char": "๐",
"description": "kaaba",
- "aliases": [
- "kaaba"
- ],
+ "aliases": ["kaaba"],
"tags": []
},
{
"char": "โฒ",
"description": "fountain",
- "aliases": [
- "fountain"
- ],
+ "aliases": ["fountain"],
"tags": []
},
{
"char": "โบ",
"description": "tent",
- "aliases": [
- "tent"
- ],
- "tags": [
- "camping"
- ]
+ "aliases": ["tent"],
+ "tags": ["camping"]
},
{
"char": "๐",
"description": "foggy",
- "aliases": [
- "foggy"
- ],
- "tags": [
- "karl"
- ]
+ "aliases": ["foggy"],
+ "tags": ["karl"]
},
{
"char": "๐",
"description": "night with stars",
- "aliases": [
- "night_with_stars"
- ],
+ "aliases": ["night_with_stars"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "cityscape",
- "aliases": [
- "cityscape"
- ],
- "tags": [
- "skyline"
- ]
+ "aliases": ["cityscape"],
+ "tags": ["skyline"]
},
{
"char": "๐",
"description": "sunrise over mountains",
- "aliases": [
- "sunrise_over_mountains"
- ],
+ "aliases": ["sunrise_over_mountains"],
"tags": []
},
{
"char": "๐
",
"description": "sunrise",
- "aliases": [
- "sunrise"
- ],
+ "aliases": ["sunrise"],
"tags": []
},
{
"char": "๐",
"description": "cityscape at dusk",
- "aliases": [
- "city_sunset"
- ],
+ "aliases": ["city_sunset"],
"tags": []
},
{
"char": "๐",
"description": "sunset",
- "aliases": [
- "city_sunrise"
- ],
+ "aliases": ["city_sunrise"],
"tags": []
},
{
"char": "๐",
"description": "bridge at night",
- "aliases": [
- "bridge_at_night"
- ],
+ "aliases": ["bridge_at_night"],
"tags": []
},
{
"char": "โจ๏ธ",
"description": "hot springs",
- "aliases": [
- "hotsprings"
- ],
+ "aliases": ["hotsprings"],
"tags": []
},
{
"char": "๐ก",
"description": "ferris wheel",
- "aliases": [
- "ferris_wheel"
- ],
+ "aliases": ["ferris_wheel"],
"tags": []
},
{
"char": "๐ข",
"description": "roller coaster",
- "aliases": [
- "roller_coaster"
- ],
+ "aliases": ["roller_coaster"],
"tags": []
},
{
"char": "๐",
"description": "barber pole",
- "aliases": [
- "barber"
- ],
+ "aliases": ["barber"],
"tags": []
},
{
"char": "๐ช",
"description": "circus tent",
- "aliases": [
- "circus_tent"
- ],
+ "aliases": ["circus_tent"],
"tags": []
},
{
"char": "๐",
"description": "locomotive",
- "aliases": [
- "steam_locomotive"
- ],
- "tags": [
- "train"
- ]
+ "aliases": ["steam_locomotive"],
+ "tags": ["train"]
},
{
"char": "๐",
"description": "high-speed train",
- "aliases": [
- "bullettrain_side"
- ],
- "tags": [
- "train"
- ]
+ "aliases": ["bullettrain_side"],
+ "tags": ["train"]
},
{
"char": "๐
",
"description": "bullet train",
- "aliases": [
- "bullettrain_front"
- ],
- "tags": [
- "train"
- ]
+ "aliases": ["bullettrain_front"],
+ "tags": ["train"]
},
{
"char": "๐",
"description": "train",
- "aliases": [
- "train2"
- ],
+ "aliases": ["train2"],
"tags": []
},
{
"char": "๐",
"description": "metro",
- "aliases": [
- "metro"
- ],
+ "aliases": ["metro"],
"tags": []
},
{
"char": "๐",
"description": "light rail",
- "aliases": [
- "light_rail"
- ],
+ "aliases": ["light_rail"],
"tags": []
},
{
"char": "๐",
"description": "station",
- "aliases": [
- "station"
- ],
+ "aliases": ["station"],
"tags": []
},
{
"char": "๐",
"description": "tram",
- "aliases": [
- "tram"
- ],
+ "aliases": ["tram"],
"tags": []
},
{
"char": "๐",
"description": "monorail",
- "aliases": [
- "monorail"
- ],
+ "aliases": ["monorail"],
"tags": []
},
{
"char": "๐",
"description": "mountain railway",
- "aliases": [
- "mountain_railway"
- ],
+ "aliases": ["mountain_railway"],
"tags": []
},
{
"char": "๐",
"description": "bus",
- "aliases": [
- "bus"
- ],
+ "aliases": ["bus"],
"tags": []
},
{
"char": "๐",
"description": "oncoming bus",
- "aliases": [
- "oncoming_bus"
- ],
+ "aliases": ["oncoming_bus"],
"tags": []
},
{
"char": "๐",
"description": "trolleybus",
- "aliases": [
- "trolleybus"
- ],
+ "aliases": ["trolleybus"],
"tags": []
},
{
"char": "๐",
"description": "minibus",
- "aliases": [
- "minibus"
- ],
+ "aliases": ["minibus"],
"tags": []
},
{
"char": "๐",
"description": "ambulance",
- "aliases": [
- "ambulance"
- ],
+ "aliases": ["ambulance"],
"tags": []
},
{
"char": "๐",
"description": "fire engine",
- "aliases": [
- "fire_engine"
- ],
+ "aliases": ["fire_engine"],
"tags": []
},
{
"char": "๐",
"description": "taxi",
- "aliases": [
- "taxi"
- ],
+ "aliases": ["taxi"],
"tags": []
},
{
"char": "๐",
"description": "oncoming taxi",
- "aliases": [
- "oncoming_taxi"
- ],
+ "aliases": ["oncoming_taxi"],
"tags": []
},
{
"char": "๐",
"description": "oncoming automobile",
- "aliases": [
- "oncoming_automobile"
- ],
+ "aliases": ["oncoming_automobile"],
"tags": []
},
{
"char": "๐ป",
"description": "pickup truck",
- "aliases": [
- "pickup_truck"
- ],
+ "aliases": ["pickup_truck"],
"tags": []
},
{
"char": "๐",
"description": "delivery truck",
- "aliases": [
- "truck"
- ],
+ "aliases": ["truck"],
"tags": []
},
{
"char": "๐",
"description": "articulated lorry",
- "aliases": [
- "articulated_lorry"
- ],
+ "aliases": ["articulated_lorry"],
"tags": []
},
{
"char": "๐",
"description": "tractor",
- "aliases": [
- "tractor"
- ],
+ "aliases": ["tractor"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "motorcycle",
- "aliases": [
- "motorcycle"
- ],
+ "aliases": ["motorcycle"],
"tags": []
},
{
"char": "๐ต",
"description": "motor scooter",
- "aliases": [
- "motor_scooter"
- ],
+ "aliases": ["motor_scooter"],
"tags": []
},
{
"char": "๐ฆฝ",
"description": "manual wheelchair",
- "aliases": [
- "manual_wheelchair"
- ],
+ "aliases": ["manual_wheelchair"],
"tags": []
},
{
"char": "๐ฆผ",
"description": "motorized wheelchair",
- "aliases": [
- "motorized_wheelchair"
- ],
+ "aliases": ["motorized_wheelchair"],
"tags": []
},
{
"char": "๐บ",
"description": "auto rickshaw",
- "aliases": [
- "auto_rickshaw"
- ],
+ "aliases": ["auto_rickshaw"],
"tags": []
},
{
"char": "๐ฒ",
"description": "bicycle",
- "aliases": [
- "bike"
- ],
- "tags": [
- "bicycle"
- ]
+ "aliases": ["bike"],
+ "tags": ["bicycle"]
},
{
"char": "๐ด",
"description": "kick scooter",
- "aliases": [
- "kick_scooter"
- ],
+ "aliases": ["kick_scooter"],
"tags": []
},
{
"char": "๐น",
"description": "skateboard",
- "aliases": [
- "skateboard"
- ],
+ "aliases": ["skateboard"],
"tags": []
},
{
"char": "๐ผ",
"description": "roller skate",
- "aliases": [
- "roller_skate"
- ],
+ "aliases": ["roller_skate"],
"tags": []
},
{
"char": "๐",
"description": "bus stop",
- "aliases": [
- "busstop"
- ],
+ "aliases": ["busstop"],
"tags": []
},
{
"char": "๐ฃ๏ธ",
"description": "motorway",
- "aliases": [
- "motorway"
- ],
+ "aliases": ["motorway"],
"tags": []
},
{
"char": "๐ค๏ธ",
"description": "railway track",
- "aliases": [
- "railway_track"
- ],
+ "aliases": ["railway_track"],
"tags": []
},
{
"char": "๐ข๏ธ",
"description": "oil drum",
- "aliases": [
- "oil_drum"
- ],
+ "aliases": ["oil_drum"],
"tags": []
},
{
"char": "โฝ",
"description": "fuel pump",
- "aliases": [
- "fuelpump"
- ],
+ "aliases": ["fuelpump"],
"tags": []
},
{
"char": "๐",
"description": "wheel",
- "aliases": [
- "wheel"
- ],
+ "aliases": ["wheel"],
"tags": []
},
{
"char": "๐ฅ",
"description": "horizontal traffic light",
- "aliases": [
- "traffic_light"
- ],
+ "aliases": ["traffic_light"],
"tags": []
},
{
"char": "๐ฆ",
"description": "vertical traffic light",
- "aliases": [
- "vertical_traffic_light"
- ],
- "tags": [
- "semaphore"
- ]
+ "aliases": ["vertical_traffic_light"],
+ "tags": ["semaphore"]
},
{
"char": "๐ง",
"description": "construction",
- "aliases": [
- "construction"
- ],
- "tags": [
- "wip"
- ]
+ "aliases": ["construction"],
+ "tags": ["wip"]
},
{
"char": "๐",
"description": "ring buoy",
- "aliases": [
- "ring_buoy"
- ],
- "tags": [
- "life preserver"
- ]
+ "aliases": ["ring_buoy"],
+ "tags": ["life preserver"]
},
{
"char": "โต",
"description": "sailboat",
- "aliases": [
- "boat",
- "sailboat"
- ],
+ "aliases": ["boat", "sailboat"],
"tags": []
},
{
"char": "๐ถ",
"description": "canoe",
- "aliases": [
- "canoe"
- ],
+ "aliases": ["canoe"],
"tags": []
},
{
"char": "โด๏ธ",
"description": "ferry",
- "aliases": [
- "ferry"
- ],
+ "aliases": ["ferry"],
"tags": []
},
{
"char": "๐ฅ๏ธ",
"description": "motor boat",
- "aliases": [
- "motor_boat"
- ],
+ "aliases": ["motor_boat"],
"tags": []
},
{
"char": "๐ช",
"description": "parachute",
- "aliases": [
- "parachute"
- ],
+ "aliases": ["parachute"],
"tags": []
},
{
"char": "๐บ",
"description": "seat",
- "aliases": [
- "seat"
- ],
+ "aliases": ["seat"],
"tags": []
},
{
"char": "๐",
"description": "helicopter",
- "aliases": [
- "helicopter"
- ],
+ "aliases": ["helicopter"],
"tags": []
},
{
"char": "๐",
"description": "suspension railway",
- "aliases": [
- "suspension_railway"
- ],
+ "aliases": ["suspension_railway"],
"tags": []
},
{
"char": "๐ ",
"description": "mountain cableway",
- "aliases": [
- "mountain_cableway"
- ],
+ "aliases": ["mountain_cableway"],
"tags": []
},
{
"char": "๐ก",
"description": "aerial tramway",
- "aliases": [
- "aerial_tramway"
- ],
+ "aliases": ["aerial_tramway"],
"tags": []
},
{
"char": "๐ฐ๏ธ",
"description": "satellite",
- "aliases": [
- "artificial_satellite"
- ],
- "tags": [
- "orbit",
- "space"
- ]
+ "aliases": ["artificial_satellite"],
+ "tags": ["orbit", "space"]
},
{
"char": "๐ธ",
"description": "flying saucer",
- "aliases": [
- "flying_saucer"
- ],
- "tags": [
- "ufo"
- ]
+ "aliases": ["flying_saucer"],
+ "tags": ["ufo"]
},
{
"char": "๐๏ธ",
"description": "bellhop bell",
- "aliases": [
- "bellhop_bell"
- ],
+ "aliases": ["bellhop_bell"],
"tags": []
},
{
"char": "๐งณ",
"description": "luggage",
- "aliases": [
- "luggage"
- ],
+ "aliases": ["luggage"],
"tags": []
},
{
"char": "โ",
"description": "hourglass done",
- "aliases": [
- "hourglass"
- ],
- "tags": [
- "time"
- ]
+ "aliases": ["hourglass"],
+ "tags": ["time"]
},
{
"char": "โณ",
"description": "hourglass not done",
- "aliases": [
- "hourglass_flowing_sand"
- ],
- "tags": [
- "time"
- ]
+ "aliases": ["hourglass_flowing_sand"],
+ "tags": ["time"]
},
{
"char": "โ",
"description": "watch",
- "aliases": [
- "watch"
- ],
- "tags": [
- "time"
- ]
+ "aliases": ["watch"],
+ "tags": ["time"]
},
{
"char": "โฐ",
"description": "alarm clock",
- "aliases": [
- "alarm_clock"
- ],
- "tags": [
- "morning"
- ]
+ "aliases": ["alarm_clock"],
+ "tags": ["morning"]
},
{
"char": "โฑ๏ธ",
"description": "stopwatch",
- "aliases": [
- "stopwatch"
- ],
+ "aliases": ["stopwatch"],
"tags": []
},
{
"char": "โฒ๏ธ",
"description": "timer clock",
- "aliases": [
- "timer_clock"
- ],
+ "aliases": ["timer_clock"],
"tags": []
},
{
"char": "๐ฐ๏ธ",
"description": "mantelpiece clock",
- "aliases": [
- "mantelpiece_clock"
- ],
+ "aliases": ["mantelpiece_clock"],
"tags": []
},
{
"char": "๐",
"description": "twelve oโclock",
- "aliases": [
- "clock12"
- ],
+ "aliases": ["clock12"],
"tags": []
},
{
"char": "๐ง",
"description": "twelve-thirty",
- "aliases": [
- "clock1230"
- ],
+ "aliases": ["clock1230"],
"tags": []
},
{
"char": "๐",
"description": "one oโclock",
- "aliases": [
- "clock1"
- ],
+ "aliases": ["clock1"],
"tags": []
},
{
"char": "๐",
"description": "one-thirty",
- "aliases": [
- "clock130"
- ],
+ "aliases": ["clock130"],
"tags": []
},
{
"char": "๐",
"description": "two oโclock",
- "aliases": [
- "clock2"
- ],
+ "aliases": ["clock2"],
"tags": []
},
{
"char": "๐",
"description": "two-thirty",
- "aliases": [
- "clock230"
- ],
+ "aliases": ["clock230"],
"tags": []
},
{
"char": "๐",
"description": "three oโclock",
- "aliases": [
- "clock3"
- ],
+ "aliases": ["clock3"],
"tags": []
},
{
"char": "๐",
"description": "three-thirty",
- "aliases": [
- "clock330"
- ],
+ "aliases": ["clock330"],
"tags": []
},
{
"char": "๐",
"description": "four oโclock",
- "aliases": [
- "clock4"
- ],
+ "aliases": ["clock4"],
"tags": []
},
{
"char": "๐",
"description": "four-thirty",
- "aliases": [
- "clock430"
- ],
+ "aliases": ["clock430"],
"tags": []
},
{
"char": "๐",
"description": "five oโclock",
- "aliases": [
- "clock5"
- ],
+ "aliases": ["clock5"],
"tags": []
},
{
"char": "๐ ",
"description": "five-thirty",
- "aliases": [
- "clock530"
- ],
+ "aliases": ["clock530"],
"tags": []
},
{
"char": "๐",
"description": "six oโclock",
- "aliases": [
- "clock6"
- ],
+ "aliases": ["clock6"],
"tags": []
},
{
"char": "๐ก",
"description": "six-thirty",
- "aliases": [
- "clock630"
- ],
+ "aliases": ["clock630"],
"tags": []
},
{
"char": "๐",
"description": "seven oโclock",
- "aliases": [
- "clock7"
- ],
+ "aliases": ["clock7"],
"tags": []
},
{
"char": "๐ข",
"description": "seven-thirty",
- "aliases": [
- "clock730"
- ],
+ "aliases": ["clock730"],
"tags": []
},
{
"char": "๐",
"description": "eight oโclock",
- "aliases": [
- "clock8"
- ],
+ "aliases": ["clock8"],
"tags": []
},
{
"char": "๐ฃ",
"description": "eight-thirty",
- "aliases": [
- "clock830"
- ],
+ "aliases": ["clock830"],
"tags": []
},
{
"char": "๐",
"description": "nine oโclock",
- "aliases": [
- "clock9"
- ],
+ "aliases": ["clock9"],
"tags": []
},
{
"char": "๐ค",
"description": "nine-thirty",
- "aliases": [
- "clock930"
- ],
+ "aliases": ["clock930"],
"tags": []
},
{
"char": "๐",
"description": "ten oโclock",
- "aliases": [
- "clock10"
- ],
+ "aliases": ["clock10"],
"tags": []
},
{
"char": "๐ฅ",
"description": "ten-thirty",
- "aliases": [
- "clock1030"
- ],
+ "aliases": ["clock1030"],
"tags": []
},
{
"char": "๐",
"description": "eleven oโclock",
- "aliases": [
- "clock11"
- ],
+ "aliases": ["clock11"],
"tags": []
},
{
"char": "๐ฆ",
"description": "eleven-thirty",
- "aliases": [
- "clock1130"
- ],
+ "aliases": ["clock1130"],
"tags": []
},
{
"char": "๐",
"description": "new moon",
- "aliases": [
- "new_moon"
- ],
+ "aliases": ["new_moon"],
"tags": []
},
{
"char": "๐",
"description": "waxing crescent moon",
- "aliases": [
- "waxing_crescent_moon"
- ],
+ "aliases": ["waxing_crescent_moon"],
"tags": []
},
{
"char": "๐",
"description": "first quarter moon",
- "aliases": [
- "first_quarter_moon"
- ],
+ "aliases": ["first_quarter_moon"],
"tags": []
},
{
"char": "๐",
"description": "waxing gibbous moon",
- "aliases": [
- "moon",
- "waxing_gibbous_moon"
- ],
+ "aliases": ["moon", "waxing_gibbous_moon"],
"tags": []
},
{
"char": "๐",
"description": "full moon",
- "aliases": [
- "full_moon"
- ],
+ "aliases": ["full_moon"],
"tags": []
},
{
"char": "๐",
"description": "waning gibbous moon",
- "aliases": [
- "waning_gibbous_moon"
- ],
+ "aliases": ["waning_gibbous_moon"],
"tags": []
},
{
"char": "๐",
"description": "last quarter moon",
- "aliases": [
- "last_quarter_moon"
- ],
+ "aliases": ["last_quarter_moon"],
"tags": []
},
{
"char": "๐",
"description": "waning crescent moon",
- "aliases": [
- "waning_crescent_moon"
- ],
+ "aliases": ["waning_crescent_moon"],
"tags": []
},
{
"char": "๐",
"description": "crescent moon",
- "aliases": [
- "crescent_moon"
- ],
- "tags": [
- "night"
- ]
+ "aliases": ["crescent_moon"],
+ "tags": ["night"]
},
{
"char": "๐ก๏ธ",
"description": "thermometer",
- "aliases": [
- "thermometer"
- ],
+ "aliases": ["thermometer"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "sun",
- "aliases": [
- "sunny"
- ],
- "tags": [
- "weather"
- ]
+ "aliases": ["sunny"],
+ "tags": ["weather"]
},
{
"char": "โญ",
"description": "star",
- "aliases": [
- "star"
- ],
+ "aliases": ["star"],
"tags": []
},
{
"char": "๐",
"description": "glowing star",
- "aliases": [
- "star2"
- ],
+ "aliases": ["star2"],
"tags": []
},
{
"char": "๐ ",
"description": "shooting star",
- "aliases": [
- "stars"
- ],
+ "aliases": ["stars"],
"tags": []
},
{
"char": "๐",
"description": "milky way",
- "aliases": [
- "milky_way"
- ],
+ "aliases": ["milky_way"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "cloud",
- "aliases": [
- "cloud"
- ],
+ "aliases": ["cloud"],
"tags": []
},
{
"char": "โ
",
"description": "sun behind cloud",
- "aliases": [
- "partly_sunny"
- ],
- "tags": [
- "weather",
- "cloud"
- ]
+ "aliases": ["partly_sunny"],
+ "tags": ["weather", "cloud"]
},
{
"char": "โ๏ธ",
"description": "cloud with lightning and rain",
- "aliases": [
- "cloud_with_lightning_and_rain"
- ],
+ "aliases": ["cloud_with_lightning_and_rain"],
"tags": []
},
{
"char": "๐ค๏ธ",
"description": "sun behind small cloud",
- "aliases": [
- "sun_behind_small_cloud"
- ],
+ "aliases": ["sun_behind_small_cloud"],
"tags": []
},
{
"char": "๐ฅ๏ธ",
"description": "sun behind large cloud",
- "aliases": [
- "sun_behind_large_cloud"
- ],
+ "aliases": ["sun_behind_large_cloud"],
"tags": []
},
{
"char": "๐ฆ๏ธ",
"description": "sun behind rain cloud",
- "aliases": [
- "sun_behind_rain_cloud"
- ],
+ "aliases": ["sun_behind_rain_cloud"],
"tags": []
},
{
"char": "๐ง๏ธ",
"description": "cloud with rain",
- "aliases": [
- "cloud_with_rain"
- ],
+ "aliases": ["cloud_with_rain"],
"tags": []
},
{
"char": "๐จ๏ธ",
"description": "cloud with snow",
- "aliases": [
- "cloud_with_snow"
- ],
+ "aliases": ["cloud_with_snow"],
"tags": []
},
{
"char": "๐ฉ๏ธ",
"description": "cloud with lightning",
- "aliases": [
- "cloud_with_lightning"
- ],
+ "aliases": ["cloud_with_lightning"],
"tags": []
},
{
"char": "๐ช๏ธ",
"description": "tornado",
- "aliases": [
- "tornado"
- ],
+ "aliases": ["tornado"],
"tags": []
},
{
"char": "๐ซ๏ธ",
"description": "fog",
- "aliases": [
- "fog"
- ],
+ "aliases": ["fog"],
"tags": []
},
{
"char": "๐",
"description": "cyclone",
- "aliases": [
- "cyclone"
- ],
- "tags": [
- "swirl"
- ]
+ "aliases": ["cyclone"],
+ "tags": ["swirl"]
},
{
"char": "๐",
"description": "rainbow",
- "aliases": [
- "rainbow"
- ],
+ "aliases": ["rainbow"],
"tags": []
},
{
"char": "๐",
"description": "closed umbrella",
- "aliases": [
- "closed_umbrella"
- ],
- "tags": [
- "weather",
- "rain"
- ]
+ "aliases": ["closed_umbrella"],
+ "tags": ["weather", "rain"]
},
{
"char": "โ๏ธ",
"description": "umbrella",
- "aliases": [
- "open_umbrella"
- ],
+ "aliases": ["open_umbrella"],
"tags": []
},
{
"char": "โ",
"description": "umbrella with rain drops",
- "aliases": [
- "umbrella"
- ],
- "tags": [
- "rain",
- "weather"
- ]
+ "aliases": ["umbrella"],
+ "tags": ["rain", "weather"]
},
{
"char": "โฑ๏ธ",
"description": "umbrella on ground",
- "aliases": [
- "parasol_on_ground"
- ],
- "tags": [
- "beach_umbrella"
- ]
+ "aliases": ["parasol_on_ground"],
+ "tags": ["beach_umbrella"]
},
{
"char": "โก",
"description": "high voltage",
- "aliases": [
- "zap"
- ],
- "tags": [
- "lightning",
- "thunder"
- ]
+ "aliases": ["zap"],
+ "tags": ["lightning", "thunder"]
},
{
"char": "โ๏ธ",
"description": "snowflake",
- "aliases": [
- "snowflake"
- ],
- "tags": [
- "winter",
- "cold",
- "weather"
- ]
+ "aliases": ["snowflake"],
+ "tags": ["winter", "cold", "weather"]
},
{
"char": "โ๏ธ",
"description": "snowman",
- "aliases": [
- "snowman_with_snow"
- ],
- "tags": [
- "winter",
- "christmas"
- ]
+ "aliases": ["snowman_with_snow"],
+ "tags": ["winter", "christmas"]
},
{
"char": "โ",
"description": "snowman without snow",
- "aliases": [
- "snowman"
- ],
- "tags": [
- "winter"
- ]
+ "aliases": ["snowman"],
+ "tags": ["winter"]
},
{
"char": "โ๏ธ",
"description": "comet",
- "aliases": [
- "comet"
- ],
+ "aliases": ["comet"],
"tags": []
},
{
"char": "๐ฅ",
"description": "fire",
- "aliases": [
- "fire"
- ],
- "tags": [
- "burn"
- ]
+ "aliases": ["fire"],
+ "tags": ["burn"]
},
{
"char": "๐ง",
"description": "droplet",
- "aliases": [
- "droplet"
- ],
- "tags": [
- "water"
- ]
+ "aliases": ["droplet"],
+ "tags": ["water"]
},
{
"char": "๐",
"description": "water wave",
- "aliases": [
- "ocean"
- ],
- "tags": [
- "sea"
- ]
+ "aliases": ["ocean"],
+ "tags": ["sea"]
},
{
"char": "๐",
"description": "jack-o-lantern",
- "aliases": [
- "jack_o_lantern"
- ],
- "tags": [
- "halloween"
- ]
+ "aliases": ["jack_o_lantern"],
+ "tags": ["halloween"]
},
{
"char": "๐",
"description": "Christmas tree",
- "aliases": [
- "christmas_tree"
- ],
+ "aliases": ["christmas_tree"],
"tags": []
},
{
"char": "๐",
"description": "fireworks",
- "aliases": [
- "fireworks"
- ],
- "tags": [
- "festival",
- "celebration"
- ]
+ "aliases": ["fireworks"],
+ "tags": ["festival", "celebration"]
},
{
"char": "๐",
"description": "sparkler",
- "aliases": [
- "sparkler"
- ],
+ "aliases": ["sparkler"],
"tags": []
},
{
"char": "๐งจ",
"description": "firecracker",
- "aliases": [
- "firecracker"
- ],
+ "aliases": ["firecracker"],
"tags": []
},
{
"char": "โจ",
"description": "sparkles",
- "aliases": [
- "sparkles"
- ],
- "tags": [
- "shiny"
- ]
+ "aliases": ["sparkles"],
+ "tags": ["shiny"]
},
{
"char": "๐",
"description": "balloon",
- "aliases": [
- "balloon"
- ],
- "tags": [
- "party",
- "birthday"
- ]
+ "aliases": ["balloon"],
+ "tags": ["party", "birthday"]
},
{
"char": "๐",
"description": "party popper",
- "aliases": [
- "tada"
- ],
- "tags": [
- "hooray",
- "party"
- ]
+ "aliases": ["tada"],
+ "tags": ["hooray", "party"]
},
{
"char": "๐",
"description": "confetti ball",
- "aliases": [
- "confetti_ball"
- ],
+ "aliases": ["confetti_ball"],
"tags": []
},
{
"char": "๐",
"description": "tanabata tree",
- "aliases": [
- "tanabata_tree"
- ],
+ "aliases": ["tanabata_tree"],
"tags": []
},
{
"char": "๐",
"description": "pine decoration",
- "aliases": [
- "bamboo"
- ],
+ "aliases": ["bamboo"],
"tags": []
},
{
"char": "๐",
"description": "Japanese dolls",
- "aliases": [
- "dolls"
- ],
+ "aliases": ["dolls"],
"tags": []
},
{
"char": "๐",
"description": "wind chime",
- "aliases": [
- "wind_chime"
- ],
+ "aliases": ["wind_chime"],
"tags": []
},
{
"char": "๐",
"description": "moon viewing ceremony",
- "aliases": [
- "rice_scene"
- ],
+ "aliases": ["rice_scene"],
"tags": []
},
{
"char": "๐งง",
"description": "red envelope",
- "aliases": [
- "red_envelope"
- ],
+ "aliases": ["red_envelope"],
"tags": []
},
{
"char": "๐",
"description": "ribbon",
- "aliases": [
- "ribbon"
- ],
+ "aliases": ["ribbon"],
"tags": []
},
{
"char": "๐",
"description": "wrapped gift",
- "aliases": [
- "gift"
- ],
- "tags": [
- "present",
- "birthday",
- "christmas"
- ]
+ "aliases": ["gift"],
+ "tags": ["present", "birthday", "christmas"]
},
{
"char": "๐๏ธ",
"description": "reminder ribbon",
- "aliases": [
- "reminder_ribbon"
- ],
+ "aliases": ["reminder_ribbon"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "admission tickets",
- "aliases": [
- "tickets"
- ],
+ "aliases": ["tickets"],
"tags": []
},
{
"char": "๐ซ",
"description": "ticket",
- "aliases": [
- "ticket"
- ],
+ "aliases": ["ticket"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "military medal",
- "aliases": [
- "medal_military"
- ],
+ "aliases": ["medal_military"],
"tags": []
},
{
"char": "๐",
"description": "trophy",
- "aliases": [
- "trophy"
- ],
- "tags": [
- "award",
- "contest",
- "winner"
- ]
+ "aliases": ["trophy"],
+ "tags": ["award", "contest", "winner"]
},
{
"char": "๐ฅ",
"description": "softball",
- "aliases": [
- "softball"
- ],
+ "aliases": ["softball"],
"tags": []
},
{
"char": "๐",
"description": "volleyball",
- "aliases": [
- "volleyball"
- ],
+ "aliases": ["volleyball"],
"tags": []
},
{
"char": "๐",
"description": "rugby football",
- "aliases": [
- "rugby_football"
- ],
+ "aliases": ["rugby_football"],
"tags": []
},
{
"char": "๐ฅ",
"description": "flying disc",
- "aliases": [
- "flying_disc"
- ],
+ "aliases": ["flying_disc"],
"tags": []
},
{
"char": "๐ณ",
"description": "bowling",
- "aliases": [
- "bowling"
- ],
+ "aliases": ["bowling"],
"tags": []
},
{
"char": "๐",
"description": "field hockey",
- "aliases": [
- "field_hockey"
- ],
+ "aliases": ["field_hockey"],
"tags": []
},
{
"char": "๐",
"description": "ice hockey",
- "aliases": [
- "ice_hockey"
- ],
+ "aliases": ["ice_hockey"],
"tags": []
},
{
"char": "๐ฅ",
"description": "lacrosse",
- "aliases": [
- "lacrosse"
- ],
+ "aliases": ["lacrosse"],
"tags": []
},
{
"char": "๐",
"description": "ping pong",
- "aliases": [
- "ping_pong"
- ],
+ "aliases": ["ping_pong"],
"tags": []
},
{
"char": "๐ธ",
"description": "badminton",
- "aliases": [
- "badminton"
- ],
+ "aliases": ["badminton"],
"tags": []
},
{
"char": "๐ฅ",
"description": "martial arts uniform",
- "aliases": [
- "martial_arts_uniform"
- ],
+ "aliases": ["martial_arts_uniform"],
"tags": []
},
{
"char": "๐ฅ
",
"description": "goal net",
- "aliases": [
- "goal_net"
- ],
+ "aliases": ["goal_net"],
"tags": []
},
{
"char": "โธ๏ธ",
"description": "ice skate",
- "aliases": [
- "ice_skate"
- ],
- "tags": [
- "skating"
- ]
+ "aliases": ["ice_skate"],
+ "tags": ["skating"]
},
{
"char": "๐คฟ",
"description": "diving mask",
- "aliases": [
- "diving_mask"
- ],
+ "aliases": ["diving_mask"],
"tags": []
},
{
"char": "๐ฝ",
"description": "running shirt",
- "aliases": [
- "running_shirt_with_sash"
- ],
- "tags": [
- "marathon"
- ]
+ "aliases": ["running_shirt_with_sash"],
+ "tags": ["marathon"]
},
{
"char": "๐ฟ",
"description": "skis",
- "aliases": [
- "ski"
- ],
+ "aliases": ["ski"],
"tags": []
},
{
"char": "๐ท",
"description": "sled",
- "aliases": [
- "sled"
- ],
+ "aliases": ["sled"],
"tags": []
},
{
"char": "๐ฅ",
"description": "curling stone",
- "aliases": [
- "curling_stone"
- ],
+ "aliases": ["curling_stone"],
"tags": []
},
{
"char": "๐ฏ",
"description": "bullseye",
- "aliases": [
- "dart"
- ],
- "tags": [
- "target"
- ]
+ "aliases": ["dart"],
+ "tags": ["target"]
},
{
"char": "๐ช",
"description": "yo-yo",
- "aliases": [
- "yo_yo"
- ],
+ "aliases": ["yo_yo"],
"tags": []
},
{
"char": "๐ช",
"description": "kite",
- "aliases": [
- "kite"
- ],
+ "aliases": ["kite"],
"tags": []
},
{
"char": "๐ซ",
"description": "water pistol",
- "aliases": [
- "gun"
- ],
- "tags": [
- "shoot",
- "weapon"
- ]
+ "aliases": ["gun"],
+ "tags": ["shoot", "weapon"]
},
{
"char": "๐ฑ",
"description": "pool 8 ball",
- "aliases": [
- "8ball"
- ],
- "tags": [
- "pool",
- "billiards"
- ]
+ "aliases": ["8ball"],
+ "tags": ["pool", "billiards"]
},
{
"char": "๐ฎ",
"description": "crystal ball",
- "aliases": [
- "crystal_ball"
- ],
- "tags": [
- "fortune"
- ]
+ "aliases": ["crystal_ball"],
+ "tags": ["fortune"]
},
{
"char": "๐ช",
"description": "magic wand",
- "aliases": [
- "magic_wand"
- ],
+ "aliases": ["magic_wand"],
"tags": []
},
{
"char": "๐น๏ธ",
"description": "joystick",
- "aliases": [
- "joystick"
- ],
+ "aliases": ["joystick"],
"tags": []
},
{
"char": "๐ฐ",
"description": "slot machine",
- "aliases": [
- "slot_machine"
- ],
+ "aliases": ["slot_machine"],
"tags": []
},
{
"char": "๐งฉ",
"description": "puzzle piece",
- "aliases": [
- "jigsaw"
- ],
+ "aliases": ["jigsaw"],
"tags": []
},
{
"char": "๐งธ",
"description": "teddy bear",
- "aliases": [
- "teddy_bear"
- ],
+ "aliases": ["teddy_bear"],
"tags": []
},
{
"char": "๐ช
",
"description": "piรฑata",
- "aliases": [
- "pinata"
- ],
+ "aliases": ["pinata"],
"tags": []
},
{
"char": "๐ชฉ",
"description": "mirror ball",
- "aliases": [
- "mirror_ball"
- ],
- "tags": [
- "disco",
- "party"
- ]
+ "aliases": ["mirror_ball"],
+ "tags": ["disco", "party"]
},
{
"char": "๐ช",
"description": "nesting dolls",
- "aliases": [
- "nesting_dolls"
- ],
+ "aliases": ["nesting_dolls"],
"tags": []
},
{
"char": "โ ๏ธ",
"description": "spade suit",
- "aliases": [
- "spades"
- ],
+ "aliases": ["spades"],
"tags": []
},
{
"char": "โฆ๏ธ",
"description": "diamond suit",
- "aliases": [
- "diamonds"
- ],
+ "aliases": ["diamonds"],
"tags": []
},
{
"char": "โฃ๏ธ",
"description": "club suit",
- "aliases": [
- "clubs"
- ],
+ "aliases": ["clubs"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "chess pawn",
- "aliases": [
- "chess_pawn"
- ],
+ "aliases": ["chess_pawn"],
"tags": []
},
{
"char": "๐",
"description": "joker",
- "aliases": [
- "black_joker"
- ],
+ "aliases": ["black_joker"],
"tags": []
},
{
"char": "๐",
"description": "mahjong red dragon",
- "aliases": [
- "mahjong"
- ],
+ "aliases": ["mahjong"],
"tags": []
},
{
"char": "๐ญ",
"description": "performing arts",
- "aliases": [
- "performing_arts"
- ],
- "tags": [
- "theater",
- "drama"
- ]
+ "aliases": ["performing_arts"],
+ "tags": ["theater", "drama"]
},
{
"char": "๐ผ๏ธ",
"description": "framed picture",
- "aliases": [
- "framed_picture"
- ],
+ "aliases": ["framed_picture"],
"tags": []
},
{
"char": "๐งต",
"description": "thread",
- "aliases": [
- "thread"
- ],
+ "aliases": ["thread"],
"tags": []
},
{
"char": "๐ชก",
"description": "sewing needle",
- "aliases": [
- "sewing_needle"
- ],
+ "aliases": ["sewing_needle"],
"tags": []
},
{
"char": "๐งถ",
"description": "yarn",
- "aliases": [
- "yarn"
- ],
+ "aliases": ["yarn"],
"tags": []
},
{
"char": "๐ชข",
"description": "knot",
- "aliases": [
- "knot"
- ],
+ "aliases": ["knot"],
"tags": []
},
{
"char": "๐",
"description": "glasses",
- "aliases": [
- "eyeglasses"
- ],
- "tags": [
- "glasses"
- ]
+ "aliases": ["eyeglasses"],
+ "tags": ["glasses"]
},
{
"char": "๐ถ๏ธ",
"description": "sunglasses",
- "aliases": [
- "dark_sunglasses"
- ],
+ "aliases": ["dark_sunglasses"],
"tags": []
},
{
"char": "๐ฅฝ",
"description": "goggles",
- "aliases": [
- "goggles"
- ],
+ "aliases": ["goggles"],
"tags": []
},
{
"char": "๐ฅผ",
"description": "lab coat",
- "aliases": [
- "lab_coat"
- ],
+ "aliases": ["lab_coat"],
"tags": []
},
{
"char": "๐ฆบ",
"description": "safety vest",
- "aliases": [
- "safety_vest"
- ],
+ "aliases": ["safety_vest"],
"tags": []
},
{
"char": "๐",
"description": "necktie",
- "aliases": [
- "necktie"
- ],
- "tags": [
- "shirt",
- "formal"
- ]
+ "aliases": ["necktie"],
+ "tags": ["shirt", "formal"]
},
{
"char": "๐",
"description": "t-shirt",
- "aliases": [
- "shirt",
- "tshirt"
- ],
+ "aliases": ["shirt", "tshirt"],
"tags": []
},
{
"char": "๐",
"description": "jeans",
- "aliases": [
- "jeans"
- ],
- "tags": [
- "pants"
- ]
+ "aliases": ["jeans"],
+ "tags": ["pants"]
},
{
"char": "๐งฅ",
"description": "coat",
- "aliases": [
- "coat"
- ],
+ "aliases": ["coat"],
"tags": []
},
{
"char": "๐งฆ",
"description": "socks",
- "aliases": [
- "socks"
- ],
+ "aliases": ["socks"],
"tags": []
},
{
"char": "๐",
"description": "dress",
- "aliases": [
- "dress"
- ],
+ "aliases": ["dress"],
"tags": []
},
{
"char": "๐",
"description": "kimono",
- "aliases": [
- "kimono"
- ],
+ "aliases": ["kimono"],
"tags": []
},
{
"char": "๐ฅป",
"description": "sari",
- "aliases": [
- "sari"
- ],
+ "aliases": ["sari"],
"tags": []
},
{
"char": "๐ฉฑ",
"description": "one-piece swimsuit",
- "aliases": [
- "one_piece_swimsuit"
- ],
+ "aliases": ["one_piece_swimsuit"],
"tags": []
},
{
"char": "๐ฉฒ",
"description": "briefs",
- "aliases": [
- "swim_brief"
- ],
+ "aliases": ["swim_brief"],
"tags": []
},
{
"char": "๐ฉณ",
"description": "shorts",
- "aliases": [
- "shorts"
- ],
+ "aliases": ["shorts"],
"tags": []
},
{
"char": "๐",
"description": "bikini",
- "aliases": [
- "bikini"
- ],
- "tags": [
- "beach"
- ]
+ "aliases": ["bikini"],
+ "tags": ["beach"]
},
{
"char": "๐",
"description": "womanโs clothes",
- "aliases": [
- "womans_clothes"
- ],
+ "aliases": ["womans_clothes"],
"tags": []
},
{
"char": "๐ชญ",
"description": "folding hand fan",
- "aliases": [
- "folding_hand_fan"
- ],
- "tags": [
- "sensu"
- ]
+ "aliases": ["folding_hand_fan"],
+ "tags": ["sensu"]
},
{
"char": "๐",
"description": "purse",
- "aliases": [
- "purse"
- ],
+ "aliases": ["purse"],
"tags": []
},
{
"char": "๐",
"description": "handbag",
- "aliases": [
- "handbag"
- ],
- "tags": [
- "bag"
- ]
+ "aliases": ["handbag"],
+ "tags": ["bag"]
},
{
"char": "๐",
"description": "clutch bag",
- "aliases": [
- "pouch"
- ],
- "tags": [
- "bag"
- ]
+ "aliases": ["pouch"],
+ "tags": ["bag"]
},
{
"char": "๐๏ธ",
"description": "shopping bags",
- "aliases": [
- "shopping"
- ],
- "tags": [
- "bags"
- ]
+ "aliases": ["shopping"],
+ "tags": ["bags"]
},
{
"char": "๐",
"description": "backpack",
- "aliases": [
- "school_satchel"
- ],
+ "aliases": ["school_satchel"],
"tags": []
},
{
"char": "๐ฉด",
"description": "thong sandal",
- "aliases": [
- "thong_sandal"
- ],
+ "aliases": ["thong_sandal"],
"tags": []
},
{
"char": "๐",
"description": "manโs shoe",
- "aliases": [
- "mans_shoe",
- "shoe"
- ],
+ "aliases": ["mans_shoe", "shoe"],
"tags": []
},
{
"char": "๐ฅพ",
"description": "hiking boot",
- "aliases": [
- "hiking_boot"
- ],
+ "aliases": ["hiking_boot"],
"tags": []
},
{
"char": "๐ฅฟ",
"description": "flat shoe",
- "aliases": [
- "flat_shoe"
- ],
+ "aliases": ["flat_shoe"],
"tags": []
},
{
"char": "๐ ",
"description": "high-heeled shoe",
- "aliases": [
- "high_heel"
- ],
- "tags": [
- "shoe"
- ]
+ "aliases": ["high_heel"],
+ "tags": ["shoe"]
},
{
"char": "๐ก",
"description": "womanโs sandal",
- "aliases": [
- "sandal"
- ],
- "tags": [
- "shoe"
- ]
+ "aliases": ["sandal"],
+ "tags": ["shoe"]
},
{
"char": "๐ฉฐ",
"description": "ballet shoes",
- "aliases": [
- "ballet_shoes"
- ],
+ "aliases": ["ballet_shoes"],
"tags": []
},
{
"char": "๐ข",
"description": "womanโs boot",
- "aliases": [
- "boot"
- ],
+ "aliases": ["boot"],
"tags": []
},
{
"char": "๐ชฎ",
"description": "hair pick",
- "aliases": [
- "hair_pick"
- ],
+ "aliases": ["hair_pick"],
"tags": []
},
{
"char": "๐",
"description": "crown",
- "aliases": [
- "crown"
- ],
- "tags": [
- "king",
- "queen",
- "royal"
- ]
+ "aliases": ["crown"],
+ "tags": ["king", "queen", "royal"]
},
{
"char": "๐",
"description": "womanโs hat",
- "aliases": [
- "womans_hat"
- ],
+ "aliases": ["womans_hat"],
"tags": []
},
{
"char": "๐ฉ",
"description": "top hat",
- "aliases": [
- "tophat"
- ],
- "tags": [
- "hat",
- "classy"
- ]
+ "aliases": ["tophat"],
+ "tags": ["hat", "classy"]
},
{
"char": "๐",
"description": "graduation cap",
- "aliases": [
- "mortar_board"
- ],
- "tags": [
- "education",
- "college",
- "university",
- "graduation"
- ]
+ "aliases": ["mortar_board"],
+ "tags": ["education", "college", "university", "graduation"]
},
{
"char": "๐งข",
"description": "billed cap",
- "aliases": [
- "billed_cap"
- ],
+ "aliases": ["billed_cap"],
"tags": []
},
{
"char": "๐ช",
"description": "military helmet",
- "aliases": [
- "military_helmet"
- ],
+ "aliases": ["military_helmet"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "rescue workerโs helmet",
- "aliases": [
- "rescue_worker_helmet"
- ],
+ "aliases": ["rescue_worker_helmet"],
"tags": []
},
{
"char": "๐ฟ",
"description": "prayer beads",
- "aliases": [
- "prayer_beads"
- ],
+ "aliases": ["prayer_beads"],
"tags": []
},
{
"char": "๐",
"description": "lipstick",
- "aliases": [
- "lipstick"
- ],
- "tags": [
- "makeup"
- ]
+ "aliases": ["lipstick"],
+ "tags": ["makeup"]
},
{
"char": "๐",
"description": "ring",
- "aliases": [
- "ring"
- ],
- "tags": [
- "wedding",
- "marriage",
- "engaged"
- ]
+ "aliases": ["ring"],
+ "tags": ["wedding", "marriage", "engaged"]
},
{
"char": "๐",
"description": "gem stone",
- "aliases": [
- "gem"
- ],
- "tags": [
- "diamond"
- ]
+ "aliases": ["gem"],
+ "tags": ["diamond"]
},
{
"char": "๐",
"description": "muted speaker",
- "aliases": [
- "mute"
- ],
- "tags": [
- "sound",
- "volume"
- ]
+ "aliases": ["mute"],
+ "tags": ["sound", "volume"]
},
{
"char": "๐",
"description": "speaker low volume",
- "aliases": [
- "speaker"
- ],
+ "aliases": ["speaker"],
"tags": []
},
{
"char": "๐",
"description": "speaker medium volume",
- "aliases": [
- "sound"
- ],
- "tags": [
- "volume"
- ]
+ "aliases": ["sound"],
+ "tags": ["volume"]
},
{
"char": "๐",
"description": "speaker high volume",
- "aliases": [
- "loud_sound"
- ],
- "tags": [
- "volume"
- ]
+ "aliases": ["loud_sound"],
+ "tags": ["volume"]
},
{
"char": "๐ข",
"description": "loudspeaker",
- "aliases": [
- "loudspeaker"
- ],
- "tags": [
- "announcement"
- ]
+ "aliases": ["loudspeaker"],
+ "tags": ["announcement"]
},
{
"char": "๐ฃ",
"description": "megaphone",
- "aliases": [
- "mega"
- ],
+ "aliases": ["mega"],
"tags": []
},
{
"char": "๐ฏ",
"description": "postal horn",
- "aliases": [
- "postal_horn"
- ],
+ "aliases": ["postal_horn"],
"tags": []
},
{
"char": "๐",
"description": "bell",
- "aliases": [
- "bell"
- ],
- "tags": [
- "sound",
- "notification"
- ]
+ "aliases": ["bell"],
+ "tags": ["sound", "notification"]
},
{
"char": "๐",
"description": "bell with slash",
- "aliases": [
- "no_bell"
- ],
- "tags": [
- "volume",
- "off"
- ]
+ "aliases": ["no_bell"],
+ "tags": ["volume", "off"]
},
{
"char": "๐ผ",
"description": "musical score",
- "aliases": [
- "musical_score"
- ],
+ "aliases": ["musical_score"],
"tags": []
},
{
"char": "๐ต",
"description": "musical note",
- "aliases": [
- "musical_note"
- ],
+ "aliases": ["musical_note"],
"tags": []
},
{
"char": "๐ถ",
"description": "musical notes",
- "aliases": [
- "notes"
- ],
- "tags": [
- "music"
- ]
+ "aliases": ["notes"],
+ "tags": ["music"]
},
{
"char": "๐๏ธ",
"description": "studio microphone",
- "aliases": [
- "studio_microphone"
- ],
- "tags": [
- "podcast"
- ]
+ "aliases": ["studio_microphone"],
+ "tags": ["podcast"]
},
{
"char": "๐๏ธ",
"description": "level slider",
- "aliases": [
- "level_slider"
- ],
+ "aliases": ["level_slider"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "control knobs",
- "aliases": [
- "control_knobs"
- ],
+ "aliases": ["control_knobs"],
"tags": []
},
{
"char": "๐ค",
"description": "microphone",
- "aliases": [
- "microphone"
- ],
- "tags": [
- "sing"
- ]
+ "aliases": ["microphone"],
+ "tags": ["sing"]
},
{
"char": "๐ง",
"description": "headphone",
- "aliases": [
- "headphones"
- ],
- "tags": [
- "music",
- "earphones"
- ]
+ "aliases": ["headphones"],
+ "tags": ["music", "earphones"]
},
{
"char": "๐ป",
"description": "radio",
- "aliases": [
- "radio"
- ],
- "tags": [
- "podcast"
- ]
+ "aliases": ["radio"],
+ "tags": ["podcast"]
},
{
"char": "๐ท",
"description": "saxophone",
- "aliases": [
- "saxophone"
- ],
+ "aliases": ["saxophone"],
"tags": []
},
{
"char": "๐ช",
"description": "accordion",
- "aliases": [
- "accordion"
- ],
+ "aliases": ["accordion"],
"tags": []
},
{
"char": "๐ธ",
"description": "guitar",
- "aliases": [
- "guitar"
- ],
- "tags": [
- "rock"
- ]
+ "aliases": ["guitar"],
+ "tags": ["rock"]
},
{
"char": "๐น",
"description": "musical keyboard",
- "aliases": [
- "musical_keyboard"
- ],
- "tags": [
- "piano"
- ]
+ "aliases": ["musical_keyboard"],
+ "tags": ["piano"]
},
{
"char": "๐ป",
"description": "violin",
- "aliases": [
- "violin"
- ],
+ "aliases": ["violin"],
"tags": []
},
{
"char": "๐ช",
"description": "banjo",
- "aliases": [
- "banjo"
- ],
+ "aliases": ["banjo"],
"tags": []
},
{
"char": "๐ฅ",
"description": "drum",
- "aliases": [
- "drum"
- ],
+ "aliases": ["drum"],
"tags": []
},
{
"char": "๐ช",
"description": "long drum",
- "aliases": [
- "long_drum"
- ],
+ "aliases": ["long_drum"],
"tags": []
},
{
"char": "๐ช",
"description": "maracas",
- "aliases": [
- "maracas"
- ],
- "tags": [
- "shaker"
- ]
+ "aliases": ["maracas"],
+ "tags": ["shaker"]
},
{
"char": "๐ช",
"description": "flute",
- "aliases": [
- "flute"
- ],
- "tags": [
- "recorder"
- ]
+ "aliases": ["flute"],
+ "tags": ["recorder"]
},
{
"char": "๐ฑ",
"description": "mobile phone",
- "aliases": [
- "iphone"
- ],
- "tags": [
- "smartphone",
- "mobile"
- ]
+ "aliases": ["iphone"],
+ "tags": ["smartphone", "mobile"]
},
{
"char": "โ๏ธ",
"description": "telephone",
- "aliases": [
- "phone",
- "telephone"
- ],
+ "aliases": ["phone", "telephone"],
"tags": []
},
{
"char": "๐",
"description": "telephone receiver",
- "aliases": [
- "telephone_receiver"
- ],
- "tags": [
- "phone",
- "call"
- ]
+ "aliases": ["telephone_receiver"],
+ "tags": ["phone", "call"]
},
{
"char": "๐",
"description": "pager",
- "aliases": [
- "pager"
- ],
+ "aliases": ["pager"],
"tags": []
},
{
"char": "๐ ",
"description": "fax machine",
- "aliases": [
- "fax"
- ],
+ "aliases": ["fax"],
"tags": []
},
{
"char": "๐",
"description": "battery",
- "aliases": [
- "battery"
- ],
- "tags": [
- "power"
- ]
+ "aliases": ["battery"],
+ "tags": ["power"]
},
{
"char": "๐ชซ",
"description": "low battery",
- "aliases": [
- "low_battery"
- ],
+ "aliases": ["low_battery"],
"tags": []
},
{
"char": "๐",
"description": "electric plug",
- "aliases": [
- "electric_plug"
- ],
+ "aliases": ["electric_plug"],
"tags": []
},
{
"char": "๐ป",
"description": "laptop",
- "aliases": [
- "computer"
- ],
- "tags": [
- "desktop",
- "screen"
- ]
+ "aliases": ["computer"],
+ "tags": ["desktop", "screen"]
},
{
"char": "๐ฅ๏ธ",
"description": "desktop computer",
- "aliases": [
- "desktop_computer"
- ],
+ "aliases": ["desktop_computer"],
"tags": []
},
{
"char": "๐จ๏ธ",
"description": "printer",
- "aliases": [
- "printer"
- ],
+ "aliases": ["printer"],
"tags": []
},
{
"char": "โจ๏ธ",
"description": "keyboard",
- "aliases": [
- "keyboard"
- ],
+ "aliases": ["keyboard"],
"tags": []
},
{
"char": "๐ฑ๏ธ",
"description": "computer mouse",
- "aliases": [
- "computer_mouse"
- ],
+ "aliases": ["computer_mouse"],
"tags": []
},
{
"char": "๐ฒ๏ธ",
"description": "trackball",
- "aliases": [
- "trackball"
- ],
+ "aliases": ["trackball"],
"tags": []
},
{
"char": "๐ฝ",
"description": "computer disk",
- "aliases": [
- "minidisc"
- ],
+ "aliases": ["minidisc"],
"tags": []
},
{
"char": "๐พ",
"description": "floppy disk",
- "aliases": [
- "floppy_disk"
- ],
- "tags": [
- "save"
- ]
+ "aliases": ["floppy_disk"],
+ "tags": ["save"]
},
{
"char": "๐ฟ",
"description": "optical disk",
- "aliases": [
- "cd"
- ],
+ "aliases": ["cd"],
"tags": []
},
{
"char": "๐",
"description": "dvd",
- "aliases": [
- "dvd"
- ],
+ "aliases": ["dvd"],
"tags": []
},
{
"char": "๐งฎ",
"description": "abacus",
- "aliases": [
- "abacus"
- ],
+ "aliases": ["abacus"],
"tags": []
},
{
"char": "๐ฅ",
"description": "movie camera",
- "aliases": [
- "movie_camera"
- ],
- "tags": [
- "film",
- "video"
- ]
+ "aliases": ["movie_camera"],
+ "tags": ["film", "video"]
},
{
"char": "๐๏ธ",
"description": "film frames",
- "aliases": [
- "film_strip"
- ],
+ "aliases": ["film_strip"],
"tags": []
},
{
"char": "๐ฝ๏ธ",
"description": "film projector",
- "aliases": [
- "film_projector"
- ],
+ "aliases": ["film_projector"],
"tags": []
},
{
"char": "๐ฌ",
"description": "clapper board",
- "aliases": [
- "clapper"
- ],
- "tags": [
- "film"
- ]
+ "aliases": ["clapper"],
+ "tags": ["film"]
},
{
"char": "๐บ",
"description": "television",
- "aliases": [
- "tv"
- ],
+ "aliases": ["tv"],
"tags": []
},
{
"char": "๐ท",
"description": "camera",
- "aliases": [
- "camera"
- ],
- "tags": [
- "photo"
- ]
+ "aliases": ["camera"],
+ "tags": ["photo"]
},
{
"char": "๐ธ",
"description": "camera with flash",
- "aliases": [
- "camera_flash"
- ],
- "tags": [
- "photo"
- ]
+ "aliases": ["camera_flash"],
+ "tags": ["photo"]
},
{
"char": "๐น",
"description": "video camera",
- "aliases": [
- "video_camera"
- ],
+ "aliases": ["video_camera"],
"tags": []
},
{
"char": "๐ผ",
"description": "videocassette",
- "aliases": [
- "vhs"
- ],
+ "aliases": ["vhs"],
"tags": []
},
{
"char": "๐",
"description": "magnifying glass tilted left",
- "aliases": [
- "mag"
- ],
- "tags": [
- "search",
- "zoom"
- ]
+ "aliases": ["mag"],
+ "tags": ["search", "zoom"]
},
{
"char": "๐",
"description": "magnifying glass tilted right",
- "aliases": [
- "mag_right"
- ],
+ "aliases": ["mag_right"],
"tags": []
},
{
"char": "๐ฏ๏ธ",
"description": "candle",
- "aliases": [
- "candle"
- ],
+ "aliases": ["candle"],
"tags": []
},
{
"char": "๐ก",
"description": "light bulb",
- "aliases": [
- "bulb"
- ],
- "tags": [
- "idea",
- "light"
- ]
+ "aliases": ["bulb"],
+ "tags": ["idea", "light"]
},
{
"char": "๐ฆ",
"description": "flashlight",
- "aliases": [
- "flashlight"
- ],
+ "aliases": ["flashlight"],
"tags": []
},
{
"char": "๐ฎ",
"description": "red paper lantern",
- "aliases": [
- "izakaya_lantern",
- "lantern"
- ],
+ "aliases": ["izakaya_lantern", "lantern"],
"tags": []
},
{
"char": "๐ช",
"description": "diya lamp",
- "aliases": [
- "diya_lamp"
- ],
+ "aliases": ["diya_lamp"],
"tags": []
},
{
"char": "๐",
"description": "notebook with decorative cover",
- "aliases": [
- "notebook_with_decorative_cover"
- ],
+ "aliases": ["notebook_with_decorative_cover"],
"tags": []
},
{
"char": "๐",
"description": "closed book",
- "aliases": [
- "closed_book"
- ],
+ "aliases": ["closed_book"],
"tags": []
},
{
"char": "๐",
"description": "open book",
- "aliases": [
- "book",
- "open_book"
- ],
+ "aliases": ["book", "open_book"],
"tags": []
},
{
"char": "๐",
"description": "green book",
- "aliases": [
- "green_book"
- ],
+ "aliases": ["green_book"],
"tags": []
},
{
"char": "๐",
"description": "blue book",
- "aliases": [
- "blue_book"
- ],
+ "aliases": ["blue_book"],
"tags": []
},
{
"char": "๐",
"description": "orange book",
- "aliases": [
- "orange_book"
- ],
+ "aliases": ["orange_book"],
"tags": []
},
{
"char": "๐",
"description": "books",
- "aliases": [
- "books"
- ],
- "tags": [
- "library"
- ]
+ "aliases": ["books"],
+ "tags": ["library"]
},
{
"char": "๐",
"description": "notebook",
- "aliases": [
- "notebook"
- ],
+ "aliases": ["notebook"],
"tags": []
},
{
"char": "๐",
"description": "ledger",
- "aliases": [
- "ledger"
- ],
+ "aliases": ["ledger"],
"tags": []
},
{
"char": "๐",
"description": "page with curl",
- "aliases": [
- "page_with_curl"
- ],
+ "aliases": ["page_with_curl"],
"tags": []
},
{
"char": "๐",
"description": "scroll",
- "aliases": [
- "scroll"
- ],
- "tags": [
- "document"
- ]
+ "aliases": ["scroll"],
+ "tags": ["document"]
},
{
"char": "๐",
"description": "page facing up",
- "aliases": [
- "page_facing_up"
- ],
- "tags": [
- "document"
- ]
+ "aliases": ["page_facing_up"],
+ "tags": ["document"]
},
{
"char": "๐ฐ",
"description": "newspaper",
- "aliases": [
- "newspaper"
- ],
- "tags": [
- "press"
- ]
+ "aliases": ["newspaper"],
+ "tags": ["press"]
},
{
"char": "๐๏ธ",
"description": "rolled-up newspaper",
- "aliases": [
- "newspaper_roll"
- ],
- "tags": [
- "press"
- ]
+ "aliases": ["newspaper_roll"],
+ "tags": ["press"]
},
{
"char": "๐",
"description": "bookmark tabs",
- "aliases": [
- "bookmark_tabs"
- ],
+ "aliases": ["bookmark_tabs"],
"tags": []
},
{
"char": "๐",
"description": "bookmark",
- "aliases": [
- "bookmark"
- ],
+ "aliases": ["bookmark"],
"tags": []
},
{
"char": "๐ท๏ธ",
"description": "label",
- "aliases": [
- "label"
- ],
- "tags": [
- "tag"
- ]
+ "aliases": ["label"],
+ "tags": ["tag"]
},
{
"char": "๐ฐ",
"description": "money bag",
- "aliases": [
- "moneybag"
- ],
- "tags": [
- "dollar",
- "cream"
- ]
+ "aliases": ["moneybag"],
+ "tags": ["dollar", "cream"]
},
{
"char": "๐ช",
"description": "coin",
- "aliases": [
- "coin"
- ],
+ "aliases": ["coin"],
"tags": []
},
{
"char": "๐ด",
"description": "yen banknote",
- "aliases": [
- "yen"
- ],
+ "aliases": ["yen"],
"tags": []
},
{
"char": "๐ต",
"description": "dollar banknote",
- "aliases": [
- "dollar"
- ],
- "tags": [
- "money"
- ]
+ "aliases": ["dollar"],
+ "tags": ["money"]
},
{
"char": "๐ถ",
"description": "euro banknote",
- "aliases": [
- "euro"
- ],
+ "aliases": ["euro"],
"tags": []
},
{
"char": "๐ท",
"description": "pound banknote",
- "aliases": [
- "pound"
- ],
+ "aliases": ["pound"],
"tags": []
},
{
"char": "๐ธ",
"description": "money with wings",
- "aliases": [
- "money_with_wings"
- ],
- "tags": [
- "dollar"
- ]
+ "aliases": ["money_with_wings"],
+ "tags": ["dollar"]
},
{
"char": "๐งพ",
"description": "receipt",
- "aliases": [
- "receipt"
- ],
+ "aliases": ["receipt"],
"tags": []
},
{
"char": "๐น",
"description": "chart increasing with yen",
- "aliases": [
- "chart"
- ],
+ "aliases": ["chart"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "envelope",
- "aliases": [
- "envelope"
- ],
- "tags": [
- "letter",
- "email"
- ]
+ "aliases": ["envelope"],
+ "tags": ["letter", "email"]
},
{
"char": "๐ง",
"description": "e-mail",
- "aliases": [
- "email",
- "e-mail"
- ],
+ "aliases": ["email", "e-mail"],
"tags": []
},
{
"char": "๐จ",
"description": "incoming envelope",
- "aliases": [
- "incoming_envelope"
- ],
+ "aliases": ["incoming_envelope"],
"tags": []
},
{
"char": "๐ค",
"description": "outbox tray",
- "aliases": [
- "outbox_tray"
- ],
+ "aliases": ["outbox_tray"],
"tags": []
},
{
"char": "๐ฅ",
"description": "inbox tray",
- "aliases": [
- "inbox_tray"
- ],
+ "aliases": ["inbox_tray"],
"tags": []
},
{
"char": "๐ฎ",
"description": "postbox",
- "aliases": [
- "postbox"
- ],
+ "aliases": ["postbox"],
"tags": []
},
{
"char": "๐ณ๏ธ",
"description": "ballot box with ballot",
- "aliases": [
- "ballot_box"
- ],
+ "aliases": ["ballot_box"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "pencil",
- "aliases": [
- "pencil2"
- ],
+ "aliases": ["pencil2"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "black nib",
- "aliases": [
- "black_nib"
- ],
+ "aliases": ["black_nib"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "fountain pen",
- "aliases": [
- "fountain_pen"
- ],
+ "aliases": ["fountain_pen"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "pen",
- "aliases": [
- "pen"
- ],
+ "aliases": ["pen"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "paintbrush",
- "aliases": [
- "paintbrush"
- ],
+ "aliases": ["paintbrush"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "crayon",
- "aliases": [
- "crayon"
- ],
+ "aliases": ["crayon"],
"tags": []
},
{
"char": "๐",
"description": "memo",
- "aliases": [
- "memo",
- "pencil"
- ],
- "tags": [
- "document",
- "note"
- ]
+ "aliases": ["memo", "pencil"],
+ "tags": ["document", "note"]
},
{
"char": "๐ผ",
"description": "briefcase",
- "aliases": [
- "briefcase"
- ],
- "tags": [
- "business"
- ]
+ "aliases": ["briefcase"],
+ "tags": ["business"]
},
{
"char": "๐",
"description": "file folder",
- "aliases": [
- "file_folder"
- ],
- "tags": [
- "directory"
- ]
+ "aliases": ["file_folder"],
+ "tags": ["directory"]
},
{
"char": "๐",
"description": "open file folder",
- "aliases": [
- "open_file_folder"
- ],
+ "aliases": ["open_file_folder"],
"tags": []
},
{
"char": "๐
",
"description": "calendar",
- "aliases": [
- "date"
- ],
- "tags": [
- "calendar",
- "schedule"
- ]
+ "aliases": ["date"],
+ "tags": ["calendar", "schedule"]
},
{
"char": "๐",
"description": "tear-off calendar",
- "aliases": [
- "calendar"
- ],
- "tags": [
- "schedule"
- ]
+ "aliases": ["calendar"],
+ "tags": ["schedule"]
},
{
"char": "๐๏ธ",
"description": "spiral notepad",
- "aliases": [
- "spiral_notepad"
- ],
+ "aliases": ["spiral_notepad"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "spiral calendar",
- "aliases": [
- "spiral_calendar"
- ],
+ "aliases": ["spiral_calendar"],
"tags": []
},
{
"char": "๐",
"description": "chart increasing",
- "aliases": [
- "chart_with_upwards_trend"
- ],
- "tags": [
- "graph",
- "metrics"
- ]
+ "aliases": ["chart_with_upwards_trend"],
+ "tags": ["graph", "metrics"]
},
{
"char": "๐",
"description": "chart decreasing",
- "aliases": [
- "chart_with_downwards_trend"
- ],
- "tags": [
- "graph",
- "metrics"
- ]
+ "aliases": ["chart_with_downwards_trend"],
+ "tags": ["graph", "metrics"]
},
{
"char": "๐",
"description": "bar chart",
- "aliases": [
- "bar_chart"
- ],
- "tags": [
- "stats",
- "metrics"
- ]
+ "aliases": ["bar_chart"],
+ "tags": ["stats", "metrics"]
},
{
"char": "๐",
"description": "clipboard",
- "aliases": [
- "clipboard"
- ],
+ "aliases": ["clipboard"],
"tags": []
},
{
"char": "๐",
"description": "paperclip",
- "aliases": [
- "paperclip"
- ],
+ "aliases": ["paperclip"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "linked paperclips",
- "aliases": [
- "paperclips"
- ],
+ "aliases": ["paperclips"],
"tags": []
},
{
"char": "๐",
"description": "straight ruler",
- "aliases": [
- "straight_ruler"
- ],
+ "aliases": ["straight_ruler"],
"tags": []
},
{
"char": "๐",
"description": "triangular ruler",
- "aliases": [
- "triangular_ruler"
- ],
+ "aliases": ["triangular_ruler"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "scissors",
- "aliases": [
- "scissors"
- ],
- "tags": [
- "cut"
- ]
+ "aliases": ["scissors"],
+ "tags": ["cut"]
},
{
"char": "๐๏ธ",
"description": "file cabinet",
- "aliases": [
- "file_cabinet"
- ],
+ "aliases": ["file_cabinet"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "wastebasket",
- "aliases": [
- "wastebasket"
- ],
- "tags": [
- "trash"
- ]
+ "aliases": ["wastebasket"],
+ "tags": ["trash"]
},
{
"char": "๐",
"description": "locked",
- "aliases": [
- "lock"
- ],
- "tags": [
- "security",
- "private"
- ]
+ "aliases": ["lock"],
+ "tags": ["security", "private"]
},
{
"char": "๐",
"description": "unlocked",
- "aliases": [
- "unlock"
- ],
- "tags": [
- "security"
- ]
+ "aliases": ["unlock"],
+ "tags": ["security"]
},
{
"char": "๐",
"description": "locked with pen",
- "aliases": [
- "lock_with_ink_pen"
- ],
+ "aliases": ["lock_with_ink_pen"],
"tags": []
},
{
"char": "๐",
"description": "locked with key",
- "aliases": [
- "closed_lock_with_key"
- ],
- "tags": [
- "security"
- ]
+ "aliases": ["closed_lock_with_key"],
+ "tags": ["security"]
},
{
"char": "๐",
"description": "key",
- "aliases": [
- "key"
- ],
- "tags": [
- "lock",
- "password"
- ]
+ "aliases": ["key"],
+ "tags": ["lock", "password"]
},
{
"char": "๐๏ธ",
"description": "old key",
- "aliases": [
- "old_key"
- ],
+ "aliases": ["old_key"],
"tags": []
},
{
"char": "๐จ",
"description": "hammer",
- "aliases": [
- "hammer"
- ],
- "tags": [
- "tool"
- ]
+ "aliases": ["hammer"],
+ "tags": ["tool"]
},
{
"char": "๐ช",
"description": "axe",
- "aliases": [
- "axe"
- ],
+ "aliases": ["axe"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "pick",
- "aliases": [
- "pick"
- ],
+ "aliases": ["pick"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "hammer and pick",
- "aliases": [
- "hammer_and_pick"
- ],
+ "aliases": ["hammer_and_pick"],
"tags": []
},
{
"char": "๐ ๏ธ",
"description": "hammer and wrench",
- "aliases": [
- "hammer_and_wrench"
- ],
+ "aliases": ["hammer_and_wrench"],
"tags": []
},
{
"char": "๐ก๏ธ",
"description": "dagger",
- "aliases": [
- "dagger"
- ],
+ "aliases": ["dagger"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "crossed swords",
- "aliases": [
- "crossed_swords"
- ],
+ "aliases": ["crossed_swords"],
"tags": []
},
{
"char": "๐ฃ",
"description": "bomb",
- "aliases": [
- "bomb"
- ],
- "tags": [
- "boom"
- ]
+ "aliases": ["bomb"],
+ "tags": ["boom"]
},
{
"char": "๐ช",
"description": "boomerang",
- "aliases": [
- "boomerang"
- ],
+ "aliases": ["boomerang"],
"tags": []
},
{
"char": "๐ก๏ธ",
"description": "shield",
- "aliases": [
- "shield"
- ],
+ "aliases": ["shield"],
"tags": []
},
{
"char": "๐ง",
"description": "wrench",
- "aliases": [
- "wrench"
- ],
- "tags": [
- "tool"
- ]
+ "aliases": ["wrench"],
+ "tags": ["tool"]
},
{
"char": "๐ช",
"description": "screwdriver",
- "aliases": [
- "screwdriver"
- ],
+ "aliases": ["screwdriver"],
"tags": []
},
{
"char": "๐ฉ",
"description": "nut and bolt",
- "aliases": [
- "nut_and_bolt"
- ],
+ "aliases": ["nut_and_bolt"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "gear",
- "aliases": [
- "gear"
- ],
+ "aliases": ["gear"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "clamp",
- "aliases": [
- "clamp"
- ],
+ "aliases": ["clamp"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "balance scale",
- "aliases": [
- "balance_scale"
- ],
+ "aliases": ["balance_scale"],
"tags": []
},
{
"char": "๐ฆฏ",
"description": "white cane",
- "aliases": [
- "probing_cane"
- ],
+ "aliases": ["probing_cane"],
"tags": []
},
{
"char": "๐",
"description": "link",
- "aliases": [
- "link"
- ],
+ "aliases": ["link"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "chains",
- "aliases": [
- "chains"
- ],
+ "aliases": ["chains"],
"tags": []
},
{
"char": "๐ช",
"description": "hook",
- "aliases": [
- "hook"
- ],
+ "aliases": ["hook"],
"tags": []
},
{
"char": "๐งฐ",
"description": "toolbox",
- "aliases": [
- "toolbox"
- ],
+ "aliases": ["toolbox"],
"tags": []
},
{
"char": "๐งฒ",
"description": "magnet",
- "aliases": [
- "magnet"
- ],
+ "aliases": ["magnet"],
"tags": []
},
{
"char": "๐ช",
"description": "ladder",
- "aliases": [
- "ladder"
- ],
+ "aliases": ["ladder"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "alembic",
- "aliases": [
- "alembic"
- ],
+ "aliases": ["alembic"],
"tags": []
},
{
"char": "๐งช",
"description": "test tube",
- "aliases": [
- "test_tube"
- ],
+ "aliases": ["test_tube"],
"tags": []
},
{
"char": "๐งฌ",
"description": "dna",
- "aliases": [
- "dna"
- ],
+ "aliases": ["dna"],
"tags": []
},
{
"char": "๐ฌ",
"description": "microscope",
- "aliases": [
- "microscope"
- ],
- "tags": [
- "science",
- "laboratory",
- "investigate"
- ]
+ "aliases": ["microscope"],
+ "tags": ["science", "laboratory", "investigate"]
},
{
"char": "๐ญ",
"description": "telescope",
- "aliases": [
- "telescope"
- ],
+ "aliases": ["telescope"],
"tags": []
},
{
"char": "๐",
"description": "syringe",
- "aliases": [
- "syringe"
- ],
- "tags": [
- "health",
- "hospital",
- "needle"
- ]
+ "aliases": ["syringe"],
+ "tags": ["health", "hospital", "needle"]
},
{
"char": "๐ฉธ",
"description": "drop of blood",
- "aliases": [
- "drop_of_blood"
- ],
+ "aliases": ["drop_of_blood"],
"tags": []
},
{
"char": "๐",
"description": "pill",
- "aliases": [
- "pill"
- ],
- "tags": [
- "health",
- "medicine"
- ]
+ "aliases": ["pill"],
+ "tags": ["health", "medicine"]
},
{
"char": "๐ฉน",
"description": "adhesive bandage",
- "aliases": [
- "adhesive_bandage"
- ],
+ "aliases": ["adhesive_bandage"],
"tags": []
},
{
"char": "๐ฉผ",
"description": "crutch",
- "aliases": [
- "crutch"
- ],
+ "aliases": ["crutch"],
"tags": []
},
{
"char": "๐ฉบ",
"description": "stethoscope",
- "aliases": [
- "stethoscope"
- ],
+ "aliases": ["stethoscope"],
"tags": []
},
{
"char": "๐ฉป",
"description": "x-ray",
- "aliases": [
- "x_ray"
- ],
+ "aliases": ["x_ray"],
"tags": []
},
{
"char": "๐ช",
"description": "door",
- "aliases": [
- "door"
- ],
+ "aliases": ["door"],
"tags": []
},
{
"char": "๐",
"description": "elevator",
- "aliases": [
- "elevator"
- ],
+ "aliases": ["elevator"],
"tags": []
},
{
"char": "๐ช",
"description": "mirror",
- "aliases": [
- "mirror"
- ],
+ "aliases": ["mirror"],
"tags": []
},
{
"char": "๐ช",
"description": "window",
- "aliases": [
- "window"
- ],
+ "aliases": ["window"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "bed",
- "aliases": [
- "bed"
- ],
+ "aliases": ["bed"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "couch and lamp",
- "aliases": [
- "couch_and_lamp"
- ],
+ "aliases": ["couch_and_lamp"],
"tags": []
},
{
"char": "๐ช",
"description": "chair",
- "aliases": [
- "chair"
- ],
+ "aliases": ["chair"],
"tags": []
},
{
"char": "๐ฝ",
"description": "toilet",
- "aliases": [
- "toilet"
- ],
- "tags": [
- "wc"
- ]
+ "aliases": ["toilet"],
+ "tags": ["wc"]
},
{
"char": "๐ช ",
"description": "plunger",
- "aliases": [
- "plunger"
- ],
+ "aliases": ["plunger"],
"tags": []
},
{
"char": "๐ฟ",
"description": "shower",
- "aliases": [
- "shower"
- ],
- "tags": [
- "bath"
- ]
+ "aliases": ["shower"],
+ "tags": ["bath"]
},
{
"char": "๐",
"description": "bathtub",
- "aliases": [
- "bathtub"
- ],
+ "aliases": ["bathtub"],
"tags": []
},
{
"char": "๐ชค",
"description": "mouse trap",
- "aliases": [
- "mouse_trap"
- ],
+ "aliases": ["mouse_trap"],
"tags": []
},
{
"char": "๐ช",
"description": "razor",
- "aliases": [
- "razor"
- ],
+ "aliases": ["razor"],
"tags": []
},
{
"char": "๐งด",
"description": "lotion bottle",
- "aliases": [
- "lotion_bottle"
- ],
+ "aliases": ["lotion_bottle"],
"tags": []
},
{
"char": "๐งท",
"description": "safety pin",
- "aliases": [
- "safety_pin"
- ],
+ "aliases": ["safety_pin"],
"tags": []
},
{
"char": "๐งน",
"description": "broom",
- "aliases": [
- "broom"
- ],
+ "aliases": ["broom"],
"tags": []
},
{
"char": "๐งบ",
"description": "basket",
- "aliases": [
- "basket"
- ],
+ "aliases": ["basket"],
"tags": []
},
{
"char": "๐งป",
"description": "roll of paper",
- "aliases": [
- "roll_of_paper"
- ],
- "tags": [
- "toilet"
- ]
+ "aliases": ["roll_of_paper"],
+ "tags": ["toilet"]
},
{
"char": "๐ชฃ",
"description": "bucket",
- "aliases": [
- "bucket"
- ],
+ "aliases": ["bucket"],
"tags": []
},
{
"char": "๐งผ",
"description": "soap",
- "aliases": [
- "soap"
- ],
+ "aliases": ["soap"],
"tags": []
},
{
"char": "๐ซง",
"description": "bubbles",
- "aliases": [
- "bubbles"
- ],
+ "aliases": ["bubbles"],
"tags": []
},
{
"char": "๐ชฅ",
"description": "toothbrush",
- "aliases": [
- "toothbrush"
- ],
+ "aliases": ["toothbrush"],
"tags": []
},
{
"char": "๐งฝ",
"description": "sponge",
- "aliases": [
- "sponge"
- ],
+ "aliases": ["sponge"],
"tags": []
},
{
"char": "๐งฏ",
"description": "fire extinguisher",
- "aliases": [
- "fire_extinguisher"
- ],
+ "aliases": ["fire_extinguisher"],
"tags": []
},
{
"char": "๐ฌ",
"description": "cigarette",
- "aliases": [
- "smoking"
- ],
- "tags": [
- "cigarette"
- ]
+ "aliases": ["smoking"],
+ "tags": ["cigarette"]
},
{
"char": "โฐ๏ธ",
"description": "coffin",
- "aliases": [
- "coffin"
- ],
- "tags": [
- "funeral"
- ]
+ "aliases": ["coffin"],
+ "tags": ["funeral"]
},
{
"char": "๐ชฆ",
"description": "headstone",
- "aliases": [
- "headstone"
- ],
+ "aliases": ["headstone"],
"tags": []
},
{
"char": "โฑ๏ธ",
"description": "funeral urn",
- "aliases": [
- "funeral_urn"
- ],
+ "aliases": ["funeral_urn"],
"tags": []
},
{
"char": "๐งฟ",
"description": "nazar amulet",
- "aliases": [
- "nazar_amulet"
- ],
+ "aliases": ["nazar_amulet"],
"tags": []
},
{
"char": "๐ชฌ",
"description": "hamsa",
- "aliases": [
- "hamsa"
- ],
+ "aliases": ["hamsa"],
"tags": []
},
{
"char": "๐ฟ",
"description": "moai",
- "aliases": [
- "moyai"
- ],
- "tags": [
- "stone"
- ]
+ "aliases": ["moyai"],
+ "tags": ["stone"]
},
{
"char": "๐ฐ",
"description": "potable water",
- "aliases": [
- "potable_water"
- ],
+ "aliases": ["potable_water"],
"tags": []
},
{
"char": "๐น",
"description": "menโs room",
- "aliases": [
- "mens"
- ],
+ "aliases": ["mens"],
"tags": []
},
{
"char": "๐บ",
"description": "womenโs room",
- "aliases": [
- "womens"
- ],
+ "aliases": ["womens"],
"tags": []
},
{
"char": "๐ป",
"description": "restroom",
- "aliases": [
- "restroom"
- ],
- "tags": [
- "toilet"
- ]
+ "aliases": ["restroom"],
+ "tags": ["toilet"]
},
{
"char": "๐พ",
"description": "water closet",
- "aliases": [
- "wc"
- ],
- "tags": [
- "toilet",
- "restroom"
- ]
+ "aliases": ["wc"],
+ "tags": ["toilet", "restroom"]
},
{
"char": "๐",
"description": "customs",
- "aliases": [
- "customs"
- ],
+ "aliases": ["customs"],
"tags": []
},
{
"char": "๐",
"description": "baggage claim",
- "aliases": [
- "baggage_claim"
- ],
- "tags": [
- "airport"
- ]
+ "aliases": ["baggage_claim"],
+ "tags": ["airport"]
},
{
"char": "๐
",
"description": "left luggage",
- "aliases": [
- "left_luggage"
- ],
+ "aliases": ["left_luggage"],
"tags": []
},
{
"char": "โ ๏ธ",
"description": "warning",
- "aliases": [
- "warning"
- ],
- "tags": [
- "wip"
- ]
+ "aliases": ["warning"],
+ "tags": ["wip"]
},
{
"char": "๐ธ",
"description": "children crossing",
- "aliases": [
- "children_crossing"
- ],
+ "aliases": ["children_crossing"],
"tags": []
},
{
"char": "โ",
"description": "no entry",
- "aliases": [
- "no_entry"
- ],
- "tags": [
- "limit"
- ]
+ "aliases": ["no_entry"],
+ "tags": ["limit"]
},
{
"char": "๐ณ",
"description": "no bicycles",
- "aliases": [
- "no_bicycles"
- ],
+ "aliases": ["no_bicycles"],
"tags": []
},
{
"char": "๐ญ",
"description": "no smoking",
- "aliases": [
- "no_smoking"
- ],
+ "aliases": ["no_smoking"],
"tags": []
},
{
"char": "๐ฏ",
"description": "no littering",
- "aliases": [
- "do_not_litter"
- ],
+ "aliases": ["do_not_litter"],
"tags": []
},
{
"char": "๐ฑ",
"description": "non-potable water",
- "aliases": [
- "non-potable_water"
- ],
+ "aliases": ["non-potable_water"],
"tags": []
},
{
"char": "๐ท",
"description": "no pedestrians",
- "aliases": [
- "no_pedestrians"
- ],
+ "aliases": ["no_pedestrians"],
"tags": []
},
{
"char": "๐ต",
"description": "no mobile phones",
- "aliases": [
- "no_mobile_phones"
- ],
+ "aliases": ["no_mobile_phones"],
"tags": []
},
{
"char": "๐",
"description": "no one under eighteen",
- "aliases": [
- "underage"
- ],
+ "aliases": ["underage"],
"tags": []
},
{
"char": "โข๏ธ",
"description": "radioactive",
- "aliases": [
- "radioactive"
- ],
+ "aliases": ["radioactive"],
"tags": []
},
{
"char": "โฃ๏ธ",
"description": "biohazard",
- "aliases": [
- "biohazard"
- ],
+ "aliases": ["biohazard"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "om",
- "aliases": [
- "om"
- ],
+ "aliases": ["om"],
"tags": []
},
{
"char": "โก๏ธ",
"description": "star of David",
- "aliases": [
- "star_of_david"
- ],
+ "aliases": ["star_of_david"],
"tags": []
},
{
"char": "โธ๏ธ",
"description": "wheel of dharma",
- "aliases": [
- "wheel_of_dharma"
- ],
+ "aliases": ["wheel_of_dharma"],
"tags": []
},
{
"char": "โฏ๏ธ",
"description": "yin yang",
- "aliases": [
- "yin_yang"
- ],
+ "aliases": ["yin_yang"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "latin cross",
- "aliases": [
- "latin_cross"
- ],
+ "aliases": ["latin_cross"],
"tags": []
},
{
"char": "โฆ๏ธ",
"description": "orthodox cross",
- "aliases": [
- "orthodox_cross"
- ],
+ "aliases": ["orthodox_cross"],
"tags": []
},
{
"char": "โช๏ธ",
"description": "star and crescent",
- "aliases": [
- "star_and_crescent"
- ],
+ "aliases": ["star_and_crescent"],
"tags": []
},
{
"char": "๐",
"description": "menorah",
- "aliases": [
- "menorah"
- ],
+ "aliases": ["menorah"],
"tags": []
},
{
"char": "๐ฏ",
"description": "dotted six-pointed star",
- "aliases": [
- "six_pointed_star"
- ],
+ "aliases": ["six_pointed_star"],
"tags": []
},
{
"char": "๐ชฏ",
"description": "khanda",
- "aliases": [
- "khanda"
- ],
+ "aliases": ["khanda"],
"tags": []
},
{
"char": "โ",
"description": "Aries",
- "aliases": [
- "aries"
- ],
+ "aliases": ["aries"],
"tags": []
},
{
"char": "โ",
"description": "Taurus",
- "aliases": [
- "taurus"
- ],
+ "aliases": ["taurus"],
"tags": []
},
{
"char": "โ",
"description": "Gemini",
- "aliases": [
- "gemini"
- ],
+ "aliases": ["gemini"],
"tags": []
},
{
"char": "โ",
"description": "Cancer",
- "aliases": [
- "cancer"
- ],
+ "aliases": ["cancer"],
"tags": []
},
{
"char": "โ",
"description": "Leo",
- "aliases": [
- "leo"
- ],
+ "aliases": ["leo"],
"tags": []
},
{
"char": "โ",
"description": "Virgo",
- "aliases": [
- "virgo"
- ],
+ "aliases": ["virgo"],
"tags": []
},
{
"char": "โ",
"description": "Libra",
- "aliases": [
- "libra"
- ],
+ "aliases": ["libra"],
"tags": []
},
{
"char": "โ",
"description": "Scorpio",
- "aliases": [
- "scorpius"
- ],
+ "aliases": ["scorpius"],
"tags": []
},
{
"char": "โ",
"description": "Sagittarius",
- "aliases": [
- "sagittarius"
- ],
+ "aliases": ["sagittarius"],
"tags": []
},
{
"char": "โ",
"description": "Capricorn",
- "aliases": [
- "capricorn"
- ],
+ "aliases": ["capricorn"],
"tags": []
},
{
"char": "โ",
"description": "Aquarius",
- "aliases": [
- "aquarius"
- ],
+ "aliases": ["aquarius"],
"tags": []
},
{
"char": "โ",
"description": "Pisces",
- "aliases": [
- "pisces"
- ],
+ "aliases": ["pisces"],
"tags": []
},
{
"char": "โ",
"description": "Ophiuchus",
- "aliases": [
- "ophiuchus"
- ],
+ "aliases": ["ophiuchus"],
"tags": []
},
{
"char": "๐",
"description": "repeat button",
- "aliases": [
- "repeat"
- ],
- "tags": [
- "loop"
- ]
+ "aliases": ["repeat"],
+ "tags": ["loop"]
},
{
"char": "๐",
"description": "repeat single button",
- "aliases": [
- "repeat_one"
- ],
+ "aliases": ["repeat_one"],
"tags": []
},
{
"char": "โฉ",
"description": "fast-forward button",
- "aliases": [
- "fast_forward"
- ],
+ "aliases": ["fast_forward"],
"tags": []
},
{
"char": "โญ๏ธ",
"description": "next track button",
- "aliases": [
- "next_track_button"
- ],
+ "aliases": ["next_track_button"],
"tags": []
},
{
"char": "โช",
"description": "fast reverse button",
- "aliases": [
- "rewind"
- ],
+ "aliases": ["rewind"],
"tags": []
},
{
"char": "โฎ๏ธ",
"description": "last track button",
- "aliases": [
- "previous_track_button"
- ],
+ "aliases": ["previous_track_button"],
"tags": []
},
{
"char": "โธ๏ธ",
"description": "pause button",
- "aliases": [
- "pause_button"
- ],
+ "aliases": ["pause_button"],
"tags": []
},
{
"char": "โน๏ธ",
"description": "stop button",
- "aliases": [
- "stop_button"
- ],
+ "aliases": ["stop_button"],
"tags": []
},
{
"char": "โบ๏ธ",
"description": "record button",
- "aliases": [
- "record_button"
- ],
+ "aliases": ["record_button"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "eject button",
- "aliases": [
- "eject_button"
- ],
+ "aliases": ["eject_button"],
"tags": []
},
{
"char": "๐ฆ",
"description": "cinema",
- "aliases": [
- "cinema"
- ],
- "tags": [
- "film",
- "movie"
- ]
+ "aliases": ["cinema"],
+ "tags": ["film", "movie"]
},
{
"char": "๐
",
"description": "dim button",
- "aliases": [
- "low_brightness"
- ],
+ "aliases": ["low_brightness"],
"tags": []
},
{
"char": "๐",
"description": "bright button",
- "aliases": [
- "high_brightness"
- ],
+ "aliases": ["high_brightness"],
"tags": []
},
{
"char": "๐",
"description": "wireless",
- "aliases": [
- "wireless"
- ],
- "tags": [
- "wifi"
- ]
+ "aliases": ["wireless"],
+ "tags": ["wifi"]
},
{
"char": "๐ณ",
"description": "vibration mode",
- "aliases": [
- "vibration_mode"
- ],
+ "aliases": ["vibration_mode"],
"tags": []
},
{
"char": "๐ด",
"description": "mobile phone off",
- "aliases": [
- "mobile_phone_off"
- ],
- "tags": [
- "mute",
- "off"
- ]
+ "aliases": ["mobile_phone_off"],
+ "tags": ["mute", "off"]
},
{
"char": "โ๏ธ",
"description": "multiply",
- "aliases": [
- "heavy_multiplication_x"
- ],
+ "aliases": ["heavy_multiplication_x"],
"tags": []
},
{
"char": "โพ๏ธ",
"description": "infinity",
- "aliases": [
- "infinity"
- ],
+ "aliases": ["infinity"],
"tags": []
},
{
"char": "โผ๏ธ",
"description": "double exclamation mark",
- "aliases": [
- "bangbang"
- ],
+ "aliases": ["bangbang"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "exclamation question mark",
- "aliases": [
- "interrobang"
- ],
+ "aliases": ["interrobang"],
"tags": []
},
{
"char": "โ",
"description": "red question mark",
- "aliases": [
- "question"
- ],
- "tags": [
- "confused"
- ]
+ "aliases": ["question"],
+ "tags": ["confused"]
},
{
"char": "โ",
"description": "white question mark",
- "aliases": [
- "grey_question"
- ],
+ "aliases": ["grey_question"],
"tags": []
},
{
"char": "โ",
"description": "white exclamation mark",
- "aliases": [
- "grey_exclamation"
- ],
+ "aliases": ["grey_exclamation"],
"tags": []
},
{
"char": "โ",
"description": "red exclamation mark",
- "aliases": [
- "exclamation",
- "heavy_exclamation_mark"
- ],
- "tags": [
- "bang"
- ]
+ "aliases": ["exclamation", "heavy_exclamation_mark"],
+ "tags": ["bang"]
},
{
"char": "ใฐ๏ธ",
"description": "wavy dash",
- "aliases": [
- "wavy_dash"
- ],
+ "aliases": ["wavy_dash"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "fleur-de-lis",
- "aliases": [
- "fleur_de_lis"
- ],
+ "aliases": ["fleur_de_lis"],
"tags": []
},
{
"char": "๐ฑ",
"description": "trident emblem",
- "aliases": [
- "trident"
- ],
+ "aliases": ["trident"],
"tags": []
},
{
"char": "๐",
"description": "name badge",
- "aliases": [
- "name_badge"
- ],
+ "aliases": ["name_badge"],
"tags": []
},
{
"char": "โญ",
"description": "hollow red circle",
- "aliases": [
- "o"
- ],
+ "aliases": ["o"],
"tags": []
},
{
"char": "โ
",
"description": "check mark button",
- "aliases": [
- "white_check_mark"
- ],
+ "aliases": ["white_check_mark"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "check box with check",
- "aliases": [
- "ballot_box_with_check"
- ],
+ "aliases": ["ballot_box_with_check"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "check mark",
- "aliases": [
- "heavy_check_mark"
- ],
+ "aliases": ["heavy_check_mark"],
"tags": []
},
{
"char": "โ",
"description": "cross mark",
- "aliases": [
- "x"
- ],
+ "aliases": ["x"],
"tags": []
},
{
"char": "โ",
"description": "cross mark button",
- "aliases": [
- "negative_squared_cross_mark"
- ],
+ "aliases": ["negative_squared_cross_mark"],
"tags": []
},
{
"char": "โฐ",
"description": "curly loop",
- "aliases": [
- "curly_loop"
- ],
+ "aliases": ["curly_loop"],
"tags": []
},
{
"char": "โฟ",
"description": "double curly loop",
- "aliases": [
- "loop"
- ],
+ "aliases": ["loop"],
"tags": []
},
{
"char": "โณ๏ธ",
"description": "eight-spoked asterisk",
- "aliases": [
- "eight_spoked_asterisk"
- ],
+ "aliases": ["eight_spoked_asterisk"],
"tags": []
},
{
"char": "โด๏ธ",
"description": "eight-pointed star",
- "aliases": [
- "eight_pointed_black_star"
- ],
+ "aliases": ["eight_pointed_black_star"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "sparkle",
- "aliases": [
- "sparkle"
- ],
+ "aliases": ["sparkle"],
"tags": []
},
{
"char": "ยฉ๏ธ",
"description": "copyright",
- "aliases": [
- "copyright"
- ],
+ "aliases": ["copyright"],
"tags": []
},
{
"char": "ยฎ๏ธ",
"description": "registered",
- "aliases": [
- "registered"
- ],
+ "aliases": ["registered"],
"tags": []
},
{
"char": "โข๏ธ",
"description": "trade mark",
- "aliases": [
- "tm"
- ],
- "tags": [
- "trademark"
- ]
+ "aliases": ["tm"],
+ "tags": ["trademark"]
},
{
"char": "#๏ธโฃ",
"description": "keycap: #",
- "aliases": [
- "hash"
- ],
- "tags": [
- "number"
- ]
+ "aliases": ["hash"],
+ "tags": ["number"]
},
{
"char": "*๏ธโฃ",
"description": "keycap: *",
- "aliases": [
- "asterisk"
- ],
+ "aliases": ["asterisk"],
"tags": []
},
{
"char": "0๏ธโฃ",
"description": "keycap: 0",
- "aliases": [
- "zero"
- ],
+ "aliases": ["zero"],
"tags": []
},
{
"char": "1๏ธโฃ",
"description": "keycap: 1",
- "aliases": [
- "one"
- ],
+ "aliases": ["one"],
"tags": []
},
{
"char": "2๏ธโฃ",
"description": "keycap: 2",
- "aliases": [
- "two"
- ],
+ "aliases": ["two"],
"tags": []
},
{
"char": "3๏ธโฃ",
"description": "keycap: 3",
- "aliases": [
- "three"
- ],
+ "aliases": ["three"],
"tags": []
},
{
"char": "4๏ธโฃ",
"description": "keycap: 4",
- "aliases": [
- "four"
- ],
+ "aliases": ["four"],
"tags": []
},
{
"char": "5๏ธโฃ",
"description": "keycap: 5",
- "aliases": [
- "five"
- ],
+ "aliases": ["five"],
"tags": []
},
{
"char": "6๏ธโฃ",
"description": "keycap: 6",
- "aliases": [
- "six"
- ],
+ "aliases": ["six"],
"tags": []
},
{
"char": "7๏ธโฃ",
"description": "keycap: 7",
- "aliases": [
- "seven"
- ],
+ "aliases": ["seven"],
"tags": []
},
{
"char": "8๏ธโฃ",
"description": "keycap: 8",
- "aliases": [
- "eight"
- ],
+ "aliases": ["eight"],
"tags": []
},
{
"char": "9๏ธโฃ",
"description": "keycap: 9",
- "aliases": [
- "nine"
- ],
+ "aliases": ["nine"],
"tags": []
},
{
"char": "๐",
"description": "keycap: 10",
- "aliases": [
- "keycap_ten"
- ],
+ "aliases": ["keycap_ten"],
"tags": []
},
{
"char": "๐ ",
"description": "input latin uppercase",
- "aliases": [
- "capital_abcd"
- ],
- "tags": [
- "letters"
- ]
+ "aliases": ["capital_abcd"],
+ "tags": ["letters"]
},
{
"char": "๐ก",
"description": "input latin lowercase",
- "aliases": [
- "abcd"
- ],
+ "aliases": ["abcd"],
"tags": []
},
{
"char": "๐ข",
"description": "input numbers",
- "aliases": [
- "1234"
- ],
- "tags": [
- "numbers"
- ]
+ "aliases": ["1234"],
+ "tags": ["numbers"]
},
{
"char": "๐ค",
"description": "input latin letters",
- "aliases": [
- "abc"
- ],
- "tags": [
- "alphabet"
- ]
+ "aliases": ["abc"],
+ "tags": ["alphabet"]
},
{
"char": "๐
ฐ๏ธ",
"description": "A button (blood type)",
- "aliases": [
- "a"
- ],
+ "aliases": ["a"],
"tags": []
},
{
"char": "๐",
"description": "AB button (blood type)",
- "aliases": [
- "ab"
- ],
+ "aliases": ["ab"],
"tags": []
},
{
"char": "๐
ฑ๏ธ",
"description": "B button (blood type)",
- "aliases": [
- "b"
- ],
+ "aliases": ["b"],
"tags": []
},
{
"char": "๐",
"description": "CL button",
- "aliases": [
- "cl"
- ],
+ "aliases": ["cl"],
"tags": []
},
{
"char": "๐",
"description": "COOL button",
- "aliases": [
- "cool"
- ],
+ "aliases": ["cool"],
"tags": []
},
{
"char": "๐",
"description": "FREE button",
- "aliases": [
- "free"
- ],
+ "aliases": ["free"],
"tags": []
},
{
"char": "โน๏ธ",
"description": "information",
- "aliases": [
- "information_source"
- ],
+ "aliases": ["information_source"],
"tags": []
},
{
"char": "๐",
"description": "ID button",
- "aliases": [
- "id"
- ],
+ "aliases": ["id"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "circled M",
- "aliases": [
- "m"
- ],
+ "aliases": ["m"],
"tags": []
},
{
"char": "๐",
"description": "NEW button",
- "aliases": [
- "new"
- ],
- "tags": [
- "fresh"
- ]
+ "aliases": ["new"],
+ "tags": ["fresh"]
},
{
"char": "๐",
"description": "NG button",
- "aliases": [
- "ng"
- ],
+ "aliases": ["ng"],
"tags": []
},
{
"char": "๐
พ๏ธ",
"description": "O button (blood type)",
- "aliases": [
- "o2"
- ],
+ "aliases": ["o2"],
"tags": []
},
{
"char": "๐",
"description": "OK button",
- "aliases": [
- "ok"
- ],
- "tags": [
- "yes"
- ]
+ "aliases": ["ok"],
+ "tags": ["yes"]
},
{
"char": "๐
ฟ๏ธ",
"description": "P button",
- "aliases": [
- "parking"
- ],
+ "aliases": ["parking"],
"tags": []
},
{
"char": "๐",
"description": "SOS button",
- "aliases": [
- "sos"
- ],
- "tags": [
- "help",
- "emergency"
- ]
+ "aliases": ["sos"],
+ "tags": ["help", "emergency"]
},
{
"char": "๐",
"description": "UP! button",
- "aliases": [
- "up"
- ],
+ "aliases": ["up"],
"tags": []
},
{
"char": "๐",
"description": "VS button",
- "aliases": [
- "vs"
- ],
+ "aliases": ["vs"],
"tags": []
},
{
"char": "๐",
"description": "Japanese โhereโ button",
- "aliases": [
- "koko"
- ],
+ "aliases": ["koko"],
"tags": []
},
{
"char": "๐๏ธ",
"description": "Japanese โservice chargeโ button",
- "aliases": [
- "sa"
- ],
+ "aliases": ["sa"],
"tags": []
},
{
"char": "๐ท๏ธ",
"description": "Japanese โmonthly amountโ button",
- "aliases": [
- "u6708"
- ],
+ "aliases": ["u6708"],
"tags": []
},
{
"char": "๐ถ",
"description": "Japanese โnot free of chargeโ button",
- "aliases": [
- "u6709"
- ],
+ "aliases": ["u6709"],
"tags": []
},
{
"char": "๐ฏ",
"description": "Japanese โreservedโ button",
- "aliases": [
- "u6307"
- ],
+ "aliases": ["u6307"],
"tags": []
},
{
"char": "๐",
"description": "Japanese โbargainโ button",
- "aliases": [
- "ideograph_advantage"
- ],
+ "aliases": ["ideograph_advantage"],
"tags": []
},
{
"char": "๐น",
"description": "Japanese โdiscountโ button",
- "aliases": [
- "u5272"
- ],
+ "aliases": ["u5272"],
"tags": []
},
{
"char": "๐",
"description": "Japanese โfree of chargeโ button",
- "aliases": [
- "u7121"
- ],
+ "aliases": ["u7121"],
"tags": []
},
{
"char": "๐ฒ",
"description": "Japanese โprohibitedโ button",
- "aliases": [
- "u7981"
- ],
+ "aliases": ["u7981"],
"tags": []
},
{
"char": "๐",
"description": "Japanese โacceptableโ button",
- "aliases": [
- "accept"
- ],
+ "aliases": ["accept"],
"tags": []
},
{
"char": "๐ธ",
"description": "Japanese โapplicationโ button",
- "aliases": [
- "u7533"
- ],
+ "aliases": ["u7533"],
"tags": []
},
{
"char": "๐ด",
"description": "Japanese โpassing gradeโ button",
- "aliases": [
- "u5408"
- ],
+ "aliases": ["u5408"],
"tags": []
},
{
"char": "๐ณ",
"description": "Japanese โvacancyโ button",
- "aliases": [
- "u7a7a"
- ],
+ "aliases": ["u7a7a"],
"tags": []
},
{
"char": "ใ๏ธ",
"description": "Japanese โcongratulationsโ button",
- "aliases": [
- "congratulations"
- ],
+ "aliases": ["congratulations"],
"tags": []
},
{
"char": "ใ๏ธ",
"description": "Japanese โsecretโ button",
- "aliases": [
- "secret"
- ],
+ "aliases": ["secret"],
"tags": []
},
{
"char": "๐บ",
"description": "Japanese โopen for businessโ button",
- "aliases": [
- "u55b6"
- ],
+ "aliases": ["u55b6"],
"tags": []
},
{
"char": "๐ต",
"description": "Japanese โno vacancyโ button",
- "aliases": [
- "u6e80"
- ],
+ "aliases": ["u6e80"],
"tags": []
},
{
"char": "๐ด",
"description": "red circle",
- "aliases": [
- "red_circle"
- ],
+ "aliases": ["red_circle"],
"tags": []
},
{
"char": "๐ ",
"description": "orange circle",
- "aliases": [
- "orange_circle"
- ],
+ "aliases": ["orange_circle"],
"tags": []
},
{
"char": "๐ก",
"description": "yellow circle",
- "aliases": [
- "yellow_circle"
- ],
+ "aliases": ["yellow_circle"],
"tags": []
},
{
"char": "๐ข",
"description": "green circle",
- "aliases": [
- "green_circle"
- ],
+ "aliases": ["green_circle"],
"tags": []
},
{
"char": "๐ต",
"description": "blue circle",
- "aliases": [
- "large_blue_circle"
- ],
+ "aliases": ["large_blue_circle"],
"tags": []
},
{
"char": "๐ฃ",
"description": "purple circle",
- "aliases": [
- "purple_circle"
- ],
+ "aliases": ["purple_circle"],
"tags": []
},
{
"char": "๐ค",
"description": "brown circle",
- "aliases": [
- "brown_circle"
- ],
+ "aliases": ["brown_circle"],
"tags": []
},
{
"char": "โซ",
"description": "black circle",
- "aliases": [
- "black_circle"
- ],
+ "aliases": ["black_circle"],
"tags": []
},
{
"char": "โช",
"description": "white circle",
- "aliases": [
- "white_circle"
- ],
+ "aliases": ["white_circle"],
"tags": []
},
{
"char": "๐ฅ",
"description": "red square",
- "aliases": [
- "red_square"
- ],
+ "aliases": ["red_square"],
"tags": []
},
{
"char": "๐ง",
"description": "orange square",
- "aliases": [
- "orange_square"
- ],
+ "aliases": ["orange_square"],
"tags": []
},
{
"char": "๐จ",
"description": "yellow square",
- "aliases": [
- "yellow_square"
- ],
+ "aliases": ["yellow_square"],
"tags": []
},
{
"char": "๐ฉ",
"description": "green square",
- "aliases": [
- "green_square"
- ],
+ "aliases": ["green_square"],
"tags": []
},
{
"char": "๐ฆ",
"description": "blue square",
- "aliases": [
- "blue_square"
- ],
+ "aliases": ["blue_square"],
"tags": []
},
{
"char": "๐ช",
"description": "purple square",
- "aliases": [
- "purple_square"
- ],
+ "aliases": ["purple_square"],
"tags": []
},
{
"char": "๐ซ",
"description": "brown square",
- "aliases": [
- "brown_square"
- ],
+ "aliases": ["brown_square"],
"tags": []
},
{
"char": "โฌ",
"description": "black large square",
- "aliases": [
- "black_large_square"
- ],
+ "aliases": ["black_large_square"],
"tags": []
},
{
"char": "โฌ",
"description": "white large square",
- "aliases": [
- "white_large_square"
- ],
+ "aliases": ["white_large_square"],
"tags": []
},
{
"char": "โผ๏ธ",
"description": "black medium square",
- "aliases": [
- "black_medium_square"
- ],
+ "aliases": ["black_medium_square"],
"tags": []
},
{
"char": "โป๏ธ",
"description": "white medium square",
- "aliases": [
- "white_medium_square"
- ],
+ "aliases": ["white_medium_square"],
"tags": []
},
{
"char": "โพ",
"description": "black medium-small square",
- "aliases": [
- "black_medium_small_square"
- ],
+ "aliases": ["black_medium_small_square"],
"tags": []
},
{
"char": "โฝ",
"description": "white medium-small square",
- "aliases": [
- "white_medium_small_square"
- ],
+ "aliases": ["white_medium_small_square"],
"tags": []
},
{
"char": "โช๏ธ",
"description": "black small square",
- "aliases": [
- "black_small_square"
- ],
+ "aliases": ["black_small_square"],
"tags": []
},
{
"char": "โซ๏ธ",
"description": "white small square",
- "aliases": [
- "white_small_square"
- ],
+ "aliases": ["white_small_square"],
"tags": []
},
{
"char": "๐ถ",
"description": "large orange diamond",
- "aliases": [
- "large_orange_diamond"
- ],
+ "aliases": ["large_orange_diamond"],
"tags": []
},
{
"char": "๐ท",
"description": "large blue diamond",
- "aliases": [
- "large_blue_diamond"
- ],
+ "aliases": ["large_blue_diamond"],
"tags": []
},
{
"char": "๐ธ",
"description": "small orange diamond",
- "aliases": [
- "small_orange_diamond"
- ],
+ "aliases": ["small_orange_diamond"],
"tags": []
},
{
"char": "๐น",
"description": "small blue diamond",
- "aliases": [
- "small_blue_diamond"
- ],
+ "aliases": ["small_blue_diamond"],
"tags": []
},
{
"char": "๐บ",
"description": "red triangle pointed up",
- "aliases": [
- "small_red_triangle"
- ],
+ "aliases": ["small_red_triangle"],
"tags": []
},
{
"char": "๐ป",
"description": "red triangle pointed down",
- "aliases": [
- "small_red_triangle_down"
- ],
+ "aliases": ["small_red_triangle_down"],
"tags": []
},
{
"char": "๐",
"description": "radio button",
- "aliases": [
- "radio_button"
- ],
+ "aliases": ["radio_button"],
"tags": []
},
{
"char": "๐ณ",
"description": "white square button",
- "aliases": [
- "white_square_button"
- ],
+ "aliases": ["white_square_button"],
"tags": []
},
{
"char": "๐ฒ",
"description": "black square button",
- "aliases": [
- "black_square_button"
- ],
+ "aliases": ["black_square_button"],
"tags": []
}
],
@@ -13353,467 +9177,331 @@
{
"char": "๐ค",
"description": "sign of the horns",
- "aliases": [
- "metal"
- ],
+ "aliases": ["metal"],
"tags": []
},
{
"char": "๐",
"description": "stop sign",
- "aliases": [
- "stop_sign"
- ],
+ "aliases": ["stop_sign"],
"tags": []
},
{
"char": "๐จ",
"description": "artist palette",
- "aliases": [
- "art"
- ],
- "tags": [
- "design",
- "paint"
- ]
+ "aliases": ["art"],
+ "tags": ["design", "paint"]
},
{
"char": "๐ฒ",
"description": "mobile phone with arrow",
- "aliases": [
- "calling"
- ],
- "tags": [
- "call",
- "incoming"
- ]
+ "aliases": ["calling"],
+ "tags": ["call", "incoming"]
},
{
"char": "๐ฉ",
"description": "envelope with arrow",
- "aliases": [
- "envelope_with_arrow"
- ],
+ "aliases": ["envelope_with_arrow"],
"tags": []
},
{
"char": "๐น",
"description": "bow and arrow",
- "aliases": [
- "bow_and_arrow"
- ],
- "tags": [
- "archery"
- ]
+ "aliases": ["bow_and_arrow"],
+ "tags": ["archery"]
},
{
"char": "๐ก",
"description": "satellite antenna",
- "aliases": [
- "satellite"
- ],
- "tags": [
- "signal"
- ]
+ "aliases": ["satellite"],
+ "tags": ["signal"]
},
{
"char": "๐ง",
"description": "ATM sign",
- "aliases": [
- "atm"
- ],
+ "aliases": ["atm"],
"tags": []
},
{
"char": "โฟ",
"description": "wheelchair symbol",
- "aliases": [
- "wheelchair"
- ],
- "tags": [
- "accessibility"
- ]
+ "aliases": ["wheelchair"],
+ "tags": ["accessibility"]
},
{
"char": "๐ผ",
"description": "baby symbol",
- "aliases": [
- "baby_symbol"
- ],
+ "aliases": ["baby_symbol"],
"tags": []
},
{
"char": "๐ซ",
"description": "prohibited",
- "aliases": [
- "no_entry_sign"
- ],
- "tags": [
- "block",
- "forbidden"
- ]
+ "aliases": ["no_entry_sign"],
+ "tags": ["block", "forbidden"]
},
{
"char": "โฌ๏ธ",
"description": "up arrow",
- "aliases": [
- "arrow_up"
- ],
+ "aliases": ["arrow_up"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "up-right arrow",
- "aliases": [
- "arrow_upper_right"
- ],
+ "aliases": ["arrow_upper_right"],
"tags": []
},
{
"char": "โก๏ธ",
"description": "right arrow",
- "aliases": [
- "arrow_right"
- ],
+ "aliases": ["arrow_right"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "down-right arrow",
- "aliases": [
- "arrow_lower_right"
- ],
+ "aliases": ["arrow_lower_right"],
"tags": []
},
{
"char": "โฌ๏ธ",
"description": "down arrow",
- "aliases": [
- "arrow_down"
- ],
+ "aliases": ["arrow_down"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "down-left arrow",
- "aliases": [
- "arrow_lower_left"
- ],
+ "aliases": ["arrow_lower_left"],
"tags": []
},
{
"char": "โฌ
๏ธ",
"description": "left arrow",
- "aliases": [
- "arrow_left"
- ],
+ "aliases": ["arrow_left"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "up-left arrow",
- "aliases": [
- "arrow_upper_left"
- ],
+ "aliases": ["arrow_upper_left"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "up-down arrow",
- "aliases": [
- "arrow_up_down"
- ],
+ "aliases": ["arrow_up_down"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "left-right arrow",
- "aliases": [
- "left_right_arrow"
- ],
+ "aliases": ["left_right_arrow"],
"tags": []
},
{
"char": "โฉ๏ธ",
"description": "right arrow curving left",
- "aliases": [
- "leftwards_arrow_with_hook"
- ],
- "tags": [
- "return"
- ]
+ "aliases": ["leftwards_arrow_with_hook"],
+ "tags": ["return"]
},
{
"char": "โช๏ธ",
"description": "left arrow curving right",
- "aliases": [
- "arrow_right_hook"
- ],
+ "aliases": ["arrow_right_hook"],
"tags": []
},
{
"char": "โคด๏ธ",
"description": "right arrow curving up",
- "aliases": [
- "arrow_heading_up"
- ],
+ "aliases": ["arrow_heading_up"],
"tags": []
},
{
"char": "โคต๏ธ",
"description": "right arrow curving down",
- "aliases": [
- "arrow_heading_down"
- ],
+ "aliases": ["arrow_heading_down"],
"tags": []
},
{
"char": "๐",
"description": "clockwise vertical arrows",
- "aliases": [
- "arrows_clockwise"
- ],
+ "aliases": ["arrows_clockwise"],
"tags": []
},
{
"char": "๐",
"description": "counterclockwise arrows button",
- "aliases": [
- "arrows_counterclockwise"
- ],
- "tags": [
- "sync"
- ]
+ "aliases": ["arrows_counterclockwise"],
+ "tags": ["sync"]
},
{
"char": "๐",
"description": "BACK arrow",
- "aliases": [
- "back"
- ],
+ "aliases": ["back"],
"tags": []
},
{
"char": "๐",
"description": "END arrow",
- "aliases": [
- "end"
- ],
+ "aliases": ["end"],
"tags": []
},
{
"char": "๐",
"description": "ON! arrow",
- "aliases": [
- "on"
- ],
+ "aliases": ["on"],
"tags": []
},
{
"char": "๐",
"description": "SOON arrow",
- "aliases": [
- "soon"
- ],
+ "aliases": ["soon"],
"tags": []
},
{
"char": "๐",
"description": "TOP arrow",
- "aliases": [
- "top"
- ],
+ "aliases": ["top"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "atom symbol",
- "aliases": [
- "atom_symbol"
- ],
+ "aliases": ["atom_symbol"],
"tags": []
},
{
"char": "โฎ๏ธ",
"description": "peace symbol",
- "aliases": [
- "peace_symbol"
- ],
+ "aliases": ["peace_symbol"],
"tags": []
},
{
"char": "๐",
"description": "shuffle tracks button",
- "aliases": [
- "twisted_rightwards_arrows"
- ],
- "tags": [
- "shuffle"
- ]
+ "aliases": ["twisted_rightwards_arrows"],
+ "tags": ["shuffle"]
},
{
"char": "โ๏ธ",
"description": "reverse button",
- "aliases": [
- "arrow_backward"
- ],
+ "aliases": ["arrow_backward"],
"tags": []
},
{
"char": "๐ผ",
"description": "upwards button",
- "aliases": [
- "arrow_up_small"
- ],
+ "aliases": ["arrow_up_small"],
"tags": []
},
{
"char": "โซ",
"description": "fast up button",
- "aliases": [
- "arrow_double_up"
- ],
+ "aliases": ["arrow_double_up"],
"tags": []
},
{
"char": "๐ฝ",
"description": "downwards button",
- "aliases": [
- "arrow_down_small"
- ],
+ "aliases": ["arrow_down_small"],
"tags": []
},
{
"char": "โฌ",
"description": "fast down button",
- "aliases": [
- "arrow_double_down"
- ],
+ "aliases": ["arrow_double_down"],
"tags": []
},
{
"char": "๐ถ",
"description": "antenna bars",
- "aliases": [
- "signal_strength"
- ],
- "tags": [
- "wifi"
- ]
+ "aliases": ["signal_strength"],
+ "tags": ["wifi"]
},
{
"char": "โ๏ธ",
"description": "female sign",
- "aliases": [
- "female_sign"
- ],
+ "aliases": ["female_sign"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "male sign",
- "aliases": [
- "male_sign"
- ],
+ "aliases": ["male_sign"],
"tags": []
},
{
"char": "โง๏ธ",
"description": "transgender symbol",
- "aliases": [
- "transgender_symbol"
- ],
+ "aliases": ["transgender_symbol"],
"tags": []
},
{
"char": "โ",
"description": "plus",
- "aliases": [
- "heavy_plus_sign"
- ],
+ "aliases": ["heavy_plus_sign"],
"tags": []
},
{
"char": "โ",
"description": "minus",
- "aliases": [
- "heavy_minus_sign"
- ],
+ "aliases": ["heavy_minus_sign"],
"tags": []
},
{
"char": "โ",
"description": "divide",
- "aliases": [
- "heavy_division_sign"
- ],
+ "aliases": ["heavy_division_sign"],
"tags": []
},
{
"char": "๐ฐ",
"description": "heavy equals sign",
- "aliases": [
- "heavy_equals_sign"
- ],
+ "aliases": ["heavy_equals_sign"],
"tags": []
},
{
"char": "๐ฑ",
"description": "currency exchange",
- "aliases": [
- "currency_exchange"
- ],
+ "aliases": ["currency_exchange"],
"tags": []
},
{
"char": "๐ฒ",
"description": "heavy dollar sign",
- "aliases": [
- "heavy_dollar_sign"
- ],
+ "aliases": ["heavy_dollar_sign"],
"tags": []
},
{
"char": "โ๏ธ",
"description": "medical symbol",
- "aliases": [
- "medical_symbol"
- ],
+ "aliases": ["medical_symbol"],
"tags": []
},
{
"char": "โป๏ธ",
"description": "recycling symbol",
- "aliases": [
- "recycle"
- ],
- "tags": [
- "environment",
- "green"
- ]
+ "aliases": ["recycle"],
+ "tags": ["environment", "green"]
},
{
"char": "๐ฐ",
"description": "Japanese symbol for beginner",
- "aliases": [
- "beginner"
- ],
+ "aliases": ["beginner"],
"tags": []
},
{
"char": "๐ฃ",
"description": "input symbols",
- "aliases": [
- "symbols"
- ],
+ "aliases": ["symbols"],
"tags": []
},
{
"char": "๐ ",
"description": "diamond with a dot",
- "aliases": [
- "diamond_shape_with_a_dot_inside"
- ],
+ "aliases": ["diamond_shape_with_a_dot_inside"],
"tags": []
}
],
@@ -13821,2242 +9509,1640 @@
{
"char": "๐",
"description": "globe showing Europe-Africa",
- "aliases": [
- "earth_africa"
- ],
- "tags": [
- "globe",
- "world",
- "international"
- ]
+ "aliases": ["earth_africa"],
+ "tags": ["globe", "world", "international"]
},
{
"char": "๐",
"description": "globe showing Americas",
- "aliases": [
- "earth_americas"
- ],
- "tags": [
- "globe",
- "world",
- "international"
- ]
+ "aliases": ["earth_americas"],
+ "tags": ["globe", "world", "international"]
},
{
"char": "๐",
"description": "globe showing Asia-Australia",
- "aliases": [
- "earth_asia"
- ],
- "tags": [
- "globe",
- "world",
- "international"
- ]
+ "aliases": ["earth_asia"],
+ "tags": ["globe", "world", "international"]
},
{
"char": "๐",
"description": "globe with meridians",
- "aliases": [
- "globe_with_meridians"
- ],
- "tags": [
- "world",
- "global",
- "international"
- ]
+ "aliases": ["globe_with_meridians"],
+ "tags": ["world", "global", "international"]
},
{
"char": "๐๏ธ",
"description": "national park",
- "aliases": [
- "national_park"
- ],
+ "aliases": ["national_park"],
"tags": []
},
{
"char": "โณ",
"description": "flag in hole",
- "aliases": [
- "golf"
- ],
+ "aliases": ["golf"],
"tags": []
},
{
"char": "๐ซ",
"description": "closed mailbox with raised flag",
- "aliases": [
- "mailbox"
- ],
+ "aliases": ["mailbox"],
"tags": []
},
{
"char": "๐ช",
"description": "closed mailbox with lowered flag",
- "aliases": [
- "mailbox_closed"
- ],
+ "aliases": ["mailbox_closed"],
"tags": []
},
{
"char": "๐ฌ",
"description": "open mailbox with raised flag",
- "aliases": [
- "mailbox_with_mail"
- ],
+ "aliases": ["mailbox_with_mail"],
"tags": []
},
{
"char": "๐ญ",
"description": "open mailbox with lowered flag",
- "aliases": [
- "mailbox_with_no_mail"
- ],
+ "aliases": ["mailbox_with_no_mail"],
"tags": []
},
{
"char": "ใฝ๏ธ",
"description": "part alternation mark",
- "aliases": [
- "part_alternation_mark"
- ],
+ "aliases": ["part_alternation_mark"],
"tags": []
},
{
"char": "๐",
"description": "chequered flag",
- "aliases": [
- "checkered_flag"
- ],
- "tags": [
- "milestone",
- "finish"
- ]
+ "aliases": ["checkered_flag"],
+ "tags": ["milestone", "finish"]
},
{
"char": "๐ฉ",
"description": "triangular flag",
- "aliases": [
- "triangular_flag_on_post"
- ],
+ "aliases": ["triangular_flag_on_post"],
"tags": []
},
{
"char": "๐",
"description": "crossed flags",
- "aliases": [
- "crossed_flags"
- ],
+ "aliases": ["crossed_flags"],
"tags": []
},
{
"char": "๐ด",
"description": "black flag",
- "aliases": [
- "black_flag"
- ],
+ "aliases": ["black_flag"],
"tags": []
},
{
"char": "๐ณ๏ธ",
"description": "white flag",
- "aliases": [
- "white_flag"
- ],
+ "aliases": ["white_flag"],
"tags": []
},
{
"char": "๐ณ๏ธโ๐",
"description": "rainbow flag",
- "aliases": [
- "rainbow_flag"
- ],
- "tags": [
- "pride"
- ]
+ "aliases": ["rainbow_flag"],
+ "tags": ["pride"]
},
{
"char": "๐ณ๏ธโโง๏ธ",
"description": "transgender flag",
- "aliases": [
- "transgender_flag"
- ],
+ "aliases": ["transgender_flag"],
"tags": []
},
{
"char": "๐ดโโ ๏ธ",
"description": "pirate flag",
- "aliases": [
- "pirate_flag"
- ],
+ "aliases": ["pirate_flag"],
"tags": []
},
{
"char": "๐ฆ๐จ",
"description": "flag: Ascension Island",
- "aliases": [
- "ascension_island"
- ],
+ "aliases": ["ascension_island"],
"tags": []
},
{
"char": "๐ฆ๐ฉ",
"description": "flag: Andorra",
- "aliases": [
- "andorra"
- ],
+ "aliases": ["andorra"],
"tags": []
},
{
"char": "๐ฆ๐ช",
"description": "flag: United Arab Emirates",
- "aliases": [
- "united_arab_emirates"
- ],
+ "aliases": ["united_arab_emirates"],
"tags": []
},
{
"char": "๐ฆ๐ซ",
"description": "flag: Afghanistan",
- "aliases": [
- "afghanistan"
- ],
+ "aliases": ["afghanistan"],
"tags": []
},
{
"char": "๐ฆ๐ฌ",
"description": "flag: Antigua & Barbuda",
- "aliases": [
- "antigua_barbuda"
- ],
+ "aliases": ["antigua_barbuda"],
"tags": []
},
{
"char": "๐ฆ๐ฎ",
"description": "flag: Anguilla",
- "aliases": [
- "anguilla"
- ],
+ "aliases": ["anguilla"],
"tags": []
},
{
"char": "๐ฆ๐ฑ",
"description": "flag: Albania",
- "aliases": [
- "albania"
- ],
+ "aliases": ["albania"],
"tags": []
},
{
"char": "๐ฆ๐ฒ",
"description": "flag: Armenia",
- "aliases": [
- "armenia"
- ],
+ "aliases": ["armenia"],
"tags": []
},
{
"char": "๐ฆ๐ด",
"description": "flag: Angola",
- "aliases": [
- "angola"
- ],
+ "aliases": ["angola"],
"tags": []
},
{
"char": "๐ฆ๐ถ",
"description": "flag: Antarctica",
- "aliases": [
- "antarctica"
- ],
+ "aliases": ["antarctica"],
"tags": []
},
{
"char": "๐ฆ๐ท",
"description": "flag: Argentina",
- "aliases": [
- "argentina"
- ],
+ "aliases": ["argentina"],
"tags": []
},
{
"char": "๐ฆ๐ธ",
"description": "flag: American Samoa",
- "aliases": [
- "american_samoa"
- ],
+ "aliases": ["american_samoa"],
"tags": []
},
{
"char": "๐ฆ๐น",
"description": "flag: Austria",
- "aliases": [
- "austria"
- ],
+ "aliases": ["austria"],
"tags": []
},
{
"char": "๐ฆ๐บ",
"description": "flag: Australia",
- "aliases": [
- "australia"
- ],
+ "aliases": ["australia"],
"tags": []
},
{
"char": "๐ฆ๐ผ",
"description": "flag: Aruba",
- "aliases": [
- "aruba"
- ],
+ "aliases": ["aruba"],
"tags": []
},
{
"char": "๐ฆ๐ฝ",
"description": "flag: ร
land Islands",
- "aliases": [
- "aland_islands"
- ],
+ "aliases": ["aland_islands"],
"tags": []
},
{
"char": "๐ฆ๐ฟ",
"description": "flag: Azerbaijan",
- "aliases": [
- "azerbaijan"
- ],
+ "aliases": ["azerbaijan"],
"tags": []
},
{
"char": "๐ง๐ฆ",
"description": "flag: Bosnia & Herzegovina",
- "aliases": [
- "bosnia_herzegovina"
- ],
+ "aliases": ["bosnia_herzegovina"],
"tags": []
},
{
"char": "๐ง๐ง",
"description": "flag: Barbados",
- "aliases": [
- "barbados"
- ],
+ "aliases": ["barbados"],
"tags": []
},
{
"char": "๐ง๐ฉ",
"description": "flag: Bangladesh",
- "aliases": [
- "bangladesh"
- ],
+ "aliases": ["bangladesh"],
"tags": []
},
{
"char": "๐ง๐ช",
"description": "flag: Belgium",
- "aliases": [
- "belgium"
- ],
+ "aliases": ["belgium"],
"tags": []
},
{
"char": "๐ง๐ซ",
"description": "flag: Burkina Faso",
- "aliases": [
- "burkina_faso"
- ],
+ "aliases": ["burkina_faso"],
"tags": []
},
{
"char": "๐ง๐ฌ",
"description": "flag: Bulgaria",
- "aliases": [
- "bulgaria"
- ],
+ "aliases": ["bulgaria"],
"tags": []
},
{
"char": "๐ง๐ญ",
"description": "flag: Bahrain",
- "aliases": [
- "bahrain"
- ],
+ "aliases": ["bahrain"],
"tags": []
},
{
"char": "๐ง๐ฎ",
"description": "flag: Burundi",
- "aliases": [
- "burundi"
- ],
+ "aliases": ["burundi"],
"tags": []
},
{
"char": "๐ง๐ฏ",
"description": "flag: Benin",
- "aliases": [
- "benin"
- ],
+ "aliases": ["benin"],
"tags": []
},
{
"char": "๐ง๐ฑ",
"description": "flag: St. Barthรฉlemy",
- "aliases": [
- "st_barthelemy"
- ],
+ "aliases": ["st_barthelemy"],
"tags": []
},
{
"char": "๐ง๐ฒ",
"description": "flag: Bermuda",
- "aliases": [
- "bermuda"
- ],
+ "aliases": ["bermuda"],
"tags": []
},
{
"char": "๐ง๐ณ",
"description": "flag: Brunei",
- "aliases": [
- "brunei"
- ],
+ "aliases": ["brunei"],
"tags": []
},
{
"char": "๐ง๐ด",
"description": "flag: Bolivia",
- "aliases": [
- "bolivia"
- ],
+ "aliases": ["bolivia"],
"tags": []
},
{
"char": "๐ง๐ท",
"description": "flag: Brazil",
- "aliases": [
- "brazil"
- ],
+ "aliases": ["brazil"],
"tags": []
},
{
"char": "๐ง๐ธ",
"description": "flag: Bahamas",
- "aliases": [
- "bahamas"
- ],
+ "aliases": ["bahamas"],
"tags": []
},
{
"char": "๐ง๐น",
"description": "flag: Bhutan",
- "aliases": [
- "bhutan"
- ],
+ "aliases": ["bhutan"],
"tags": []
},
{
"char": "๐ง๐ป",
"description": "flag: Bouvet Island",
- "aliases": [
- "bouvet_island"
- ],
+ "aliases": ["bouvet_island"],
"tags": []
},
{
"char": "๐ง๐ผ",
"description": "flag: Botswana",
- "aliases": [
- "botswana"
- ],
+ "aliases": ["botswana"],
"tags": []
},
{
"char": "๐ง๐พ",
"description": "flag: Belarus",
- "aliases": [
- "belarus"
- ],
+ "aliases": ["belarus"],
"tags": []
},
{
"char": "๐ง๐ฟ",
"description": "flag: Belize",
- "aliases": [
- "belize"
- ],
+ "aliases": ["belize"],
"tags": []
},
{
"char": "๐จ๐ฆ",
"description": "flag: Canada",
- "aliases": [
- "canada"
- ],
+ "aliases": ["canada"],
"tags": []
},
{
"char": "๐จ๐จ",
"description": "flag: Cocos (Keeling) Islands",
- "aliases": [
- "cocos_islands"
- ],
- "tags": [
- "keeling"
- ]
+ "aliases": ["cocos_islands"],
+ "tags": ["keeling"]
},
{
"char": "๐จ๐ฉ",
"description": "flag: Congo - Kinshasa",
- "aliases": [
- "congo_kinshasa"
- ],
+ "aliases": ["congo_kinshasa"],
"tags": []
},
{
"char": "๐จ๐ซ",
"description": "flag: Central African Republic",
- "aliases": [
- "central_african_republic"
- ],
+ "aliases": ["central_african_republic"],
"tags": []
},
{
"char": "๐จ๐ฌ",
"description": "flag: Congo - Brazzaville",
- "aliases": [
- "congo_brazzaville"
- ],
+ "aliases": ["congo_brazzaville"],
"tags": []
},
{
"char": "๐จ๐ญ",
"description": "flag: Switzerland",
- "aliases": [
- "switzerland"
- ],
+ "aliases": ["switzerland"],
"tags": []
},
{
"char": "๐จ๐ฎ",
"description": "flag: Cรดte dโIvoire",
- "aliases": [
- "cote_divoire"
- ],
- "tags": [
- "ivory"
- ]
+ "aliases": ["cote_divoire"],
+ "tags": ["ivory"]
},
{
"char": "๐จ๐ฐ",
"description": "flag: Cook Islands",
- "aliases": [
- "cook_islands"
- ],
+ "aliases": ["cook_islands"],
"tags": []
},
{
"char": "๐จ๐ฑ",
"description": "flag: Chile",
- "aliases": [
- "chile"
- ],
+ "aliases": ["chile"],
"tags": []
},
{
"char": "๐จ๐ฒ",
"description": "flag: Cameroon",
- "aliases": [
- "cameroon"
- ],
+ "aliases": ["cameroon"],
"tags": []
},
{
"char": "๐จ๐ณ",
"description": "flag: China",
- "aliases": [
- "cn"
- ],
- "tags": [
- "china"
- ]
+ "aliases": ["cn"],
+ "tags": ["china"]
},
{
"char": "๐จ๐ด",
"description": "flag: Colombia",
- "aliases": [
- "colombia"
- ],
+ "aliases": ["colombia"],
"tags": []
},
{
"char": "๐จ๐ต",
"description": "flag: Clipperton Island",
- "aliases": [
- "clipperton_island"
- ],
+ "aliases": ["clipperton_island"],
"tags": []
},
{
"char": "๐จ๐ท",
"description": "flag: Costa Rica",
- "aliases": [
- "costa_rica"
- ],
+ "aliases": ["costa_rica"],
"tags": []
},
{
"char": "๐จ๐บ",
"description": "flag: Cuba",
- "aliases": [
- "cuba"
- ],
+ "aliases": ["cuba"],
"tags": []
},
{
"char": "๐จ๐ป",
"description": "flag: Cape Verde",
- "aliases": [
- "cape_verde"
- ],
+ "aliases": ["cape_verde"],
"tags": []
},
{
"char": "๐จ๐ผ",
"description": "flag: Curaรงao",
- "aliases": [
- "curacao"
- ],
+ "aliases": ["curacao"],
"tags": []
},
{
"char": "๐จ๐ฝ",
"description": "flag: Christmas Island",
- "aliases": [
- "christmas_island"
- ],
+ "aliases": ["christmas_island"],
"tags": []
},
{
"char": "๐จ๐พ",
"description": "flag: Cyprus",
- "aliases": [
- "cyprus"
- ],
+ "aliases": ["cyprus"],
"tags": []
},
{
"char": "๐จ๐ฟ",
"description": "flag: Czechia",
- "aliases": [
- "czech_republic"
- ],
+ "aliases": ["czech_republic"],
"tags": []
},
{
"char": "๐ฉ๐ช",
"description": "flag: Germany",
- "aliases": [
- "de"
- ],
- "tags": [
- "flag",
- "germany"
- ]
+ "aliases": ["de"],
+ "tags": ["flag", "germany"]
},
{
"char": "๐ฉ๐ฌ",
"description": "flag: Diego Garcia",
- "aliases": [
- "diego_garcia"
- ],
+ "aliases": ["diego_garcia"],
"tags": []
},
{
"char": "๐ฉ๐ฏ",
"description": "flag: Djibouti",
- "aliases": [
- "djibouti"
- ],
+ "aliases": ["djibouti"],
"tags": []
},
{
"char": "๐ฉ๐ฐ",
"description": "flag: Denmark",
- "aliases": [
- "denmark"
- ],
+ "aliases": ["denmark"],
"tags": []
},
{
"char": "๐ฉ๐ฒ",
"description": "flag: Dominica",
- "aliases": [
- "dominica"
- ],
+ "aliases": ["dominica"],
"tags": []
},
{
"char": "๐ฉ๐ด",
"description": "flag: Dominican Republic",
- "aliases": [
- "dominican_republic"
- ],
+ "aliases": ["dominican_republic"],
"tags": []
},
{
"char": "๐ฉ๐ฟ",
"description": "flag: Algeria",
- "aliases": [
- "algeria"
- ],
+ "aliases": ["algeria"],
"tags": []
},
{
"char": "๐ช๐ฆ",
"description": "flag: Ceuta & Melilla",
- "aliases": [
- "ceuta_melilla"
- ],
+ "aliases": ["ceuta_melilla"],
"tags": []
},
{
"char": "๐ช๐จ",
"description": "flag: Ecuador",
- "aliases": [
- "ecuador"
- ],
+ "aliases": ["ecuador"],
"tags": []
},
{
"char": "๐ช๐ช",
"description": "flag: Estonia",
- "aliases": [
- "estonia"
- ],
+ "aliases": ["estonia"],
"tags": []
},
{
"char": "๐ช๐ฌ",
"description": "flag: Egypt",
- "aliases": [
- "egypt"
- ],
+ "aliases": ["egypt"],
"tags": []
},
{
"char": "๐ช๐ญ",
"description": "flag: Western Sahara",
- "aliases": [
- "western_sahara"
- ],
+ "aliases": ["western_sahara"],
"tags": []
},
{
"char": "๐ช๐ท",
"description": "flag: Eritrea",
- "aliases": [
- "eritrea"
- ],
+ "aliases": ["eritrea"],
"tags": []
},
{
"char": "๐ช๐ธ",
"description": "flag: Spain",
- "aliases": [
- "es"
- ],
- "tags": [
- "spain"
- ]
+ "aliases": ["es"],
+ "tags": ["spain"]
},
{
"char": "๐ช๐น",
"description": "flag: Ethiopia",
- "aliases": [
- "ethiopia"
- ],
+ "aliases": ["ethiopia"],
"tags": []
},
{
"char": "๐ช๐บ",
"description": "flag: European Union",
- "aliases": [
- "eu",
- "european_union"
- ],
+ "aliases": ["eu", "european_union"],
"tags": []
},
{
"char": "๐ซ๐ฎ",
"description": "flag: Finland",
- "aliases": [
- "finland"
- ],
+ "aliases": ["finland"],
"tags": []
},
{
"char": "๐ซ๐ฏ",
"description": "flag: Fiji",
- "aliases": [
- "fiji"
- ],
+ "aliases": ["fiji"],
"tags": []
},
{
"char": "๐ซ๐ฐ",
"description": "flag: Falkland Islands",
- "aliases": [
- "falkland_islands"
- ],
+ "aliases": ["falkland_islands"],
"tags": []
},
{
"char": "๐ซ๐ฒ",
"description": "flag: Micronesia",
- "aliases": [
- "micronesia"
- ],
+ "aliases": ["micronesia"],
"tags": []
},
{
"char": "๐ซ๐ด",
"description": "flag: Faroe Islands",
- "aliases": [
- "faroe_islands"
- ],
+ "aliases": ["faroe_islands"],
"tags": []
},
{
"char": "๐ซ๐ท",
"description": "flag: France",
- "aliases": [
- "fr"
- ],
- "tags": [
- "france",
- "french"
- ]
+ "aliases": ["fr"],
+ "tags": ["france", "french"]
},
{
"char": "๐ฌ๐ฆ",
"description": "flag: Gabon",
- "aliases": [
- "gabon"
- ],
+ "aliases": ["gabon"],
"tags": []
},
{
"char": "๐ฌ๐ง",
"description": "flag: United Kingdom",
- "aliases": [
- "gb",
- "uk"
- ],
- "tags": [
- "flag",
- "british"
- ]
+ "aliases": ["gb", "uk"],
+ "tags": ["flag", "british"]
},
{
"char": "๐ฌ๐ฉ",
"description": "flag: Grenada",
- "aliases": [
- "grenada"
- ],
+ "aliases": ["grenada"],
"tags": []
},
{
"char": "๐ฌ๐ช",
"description": "flag: Georgia",
- "aliases": [
- "georgia"
- ],
+ "aliases": ["georgia"],
"tags": []
},
{
"char": "๐ฌ๐ซ",
"description": "flag: French Guiana",
- "aliases": [
- "french_guiana"
- ],
+ "aliases": ["french_guiana"],
"tags": []
},
{
"char": "๐ฌ๐ฌ",
"description": "flag: Guernsey",
- "aliases": [
- "guernsey"
- ],
+ "aliases": ["guernsey"],
"tags": []
},
{
"char": "๐ฌ๐ญ",
"description": "flag: Ghana",
- "aliases": [
- "ghana"
- ],
+ "aliases": ["ghana"],
"tags": []
},
{
"char": "๐ฌ๐ฎ",
"description": "flag: Gibraltar",
- "aliases": [
- "gibraltar"
- ],
+ "aliases": ["gibraltar"],
"tags": []
},
{
"char": "๐ฌ๐ฑ",
"description": "flag: Greenland",
- "aliases": [
- "greenland"
- ],
+ "aliases": ["greenland"],
"tags": []
},
{
"char": "๐ฌ๐ฒ",
"description": "flag: Gambia",
- "aliases": [
- "gambia"
- ],
+ "aliases": ["gambia"],
"tags": []
},
{
"char": "๐ฌ๐ณ",
"description": "flag: Guinea",
- "aliases": [
- "guinea"
- ],
+ "aliases": ["guinea"],
"tags": []
},
{
"char": "๐ฌ๐ต",
"description": "flag: Guadeloupe",
- "aliases": [
- "guadeloupe"
- ],
+ "aliases": ["guadeloupe"],
"tags": []
},
{
"char": "๐ฌ๐ถ",
"description": "flag: Equatorial Guinea",
- "aliases": [
- "equatorial_guinea"
- ],
+ "aliases": ["equatorial_guinea"],
"tags": []
},
{
"char": "๐ฌ๐ท",
"description": "flag: Greece",
- "aliases": [
- "greece"
- ],
+ "aliases": ["greece"],
"tags": []
},
{
"char": "๐ฌ๐ธ",
"description": "flag: South Georgia & South Sandwich Islands",
- "aliases": [
- "south_georgia_south_sandwich_islands"
- ],
+ "aliases": ["south_georgia_south_sandwich_islands"],
"tags": []
},
{
"char": "๐ฌ๐น",
"description": "flag: Guatemala",
- "aliases": [
- "guatemala"
- ],
+ "aliases": ["guatemala"],
"tags": []
},
{
"char": "๐ฌ๐บ",
"description": "flag: Guam",
- "aliases": [
- "guam"
- ],
+ "aliases": ["guam"],
"tags": []
},
{
"char": "๐ฌ๐ผ",
"description": "flag: Guinea-Bissau",
- "aliases": [
- "guinea_bissau"
- ],
+ "aliases": ["guinea_bissau"],
"tags": []
},
{
"char": "๐ฌ๐พ",
"description": "flag: Guyana",
- "aliases": [
- "guyana"
- ],
+ "aliases": ["guyana"],
"tags": []
},
{
"char": "๐ญ๐ฐ",
"description": "flag: Hong Kong SAR China",
- "aliases": [
- "hong_kong"
- ],
+ "aliases": ["hong_kong"],
"tags": []
},
{
"char": "๐ญ๐ฒ",
"description": "flag: Heard & McDonald Islands",
- "aliases": [
- "heard_mcdonald_islands"
- ],
+ "aliases": ["heard_mcdonald_islands"],
"tags": []
},
{
"char": "๐ญ๐ณ",
"description": "flag: Honduras",
- "aliases": [
- "honduras"
- ],
+ "aliases": ["honduras"],
"tags": []
},
{
"char": "๐ญ๐ท",
"description": "flag: Croatia",
- "aliases": [
- "croatia"
- ],
+ "aliases": ["croatia"],
"tags": []
},
{
"char": "๐ญ๐น",
"description": "flag: Haiti",
- "aliases": [
- "haiti"
- ],
+ "aliases": ["haiti"],
"tags": []
},
{
"char": "๐ญ๐บ",
"description": "flag: Hungary",
- "aliases": [
- "hungary"
- ],
+ "aliases": ["hungary"],
"tags": []
},
{
"char": "๐ฎ๐จ",
"description": "flag: Canary Islands",
- "aliases": [
- "canary_islands"
- ],
+ "aliases": ["canary_islands"],
"tags": []
},
{
"char": "๐ฎ๐ฉ",
"description": "flag: Indonesia",
- "aliases": [
- "indonesia"
- ],
+ "aliases": ["indonesia"],
"tags": []
},
{
"char": "๐ฎ๐ช",
"description": "flag: Ireland",
- "aliases": [
- "ireland"
- ],
+ "aliases": ["ireland"],
"tags": []
},
{
"char": "๐ฎ๐ฑ",
"description": "flag: Israel",
- "aliases": [
- "israel"
- ],
+ "aliases": ["israel"],
"tags": []
},
{
"char": "๐ฎ๐ฒ",
"description": "flag: Isle of Man",
- "aliases": [
- "isle_of_man"
- ],
+ "aliases": ["isle_of_man"],
"tags": []
},
{
"char": "๐ฎ๐ณ",
"description": "flag: India",
- "aliases": [
- "india"
- ],
+ "aliases": ["india"],
"tags": []
},
{
"char": "๐ฎ๐ด",
"description": "flag: British Indian Ocean Territory",
- "aliases": [
- "british_indian_ocean_territory"
- ],
+ "aliases": ["british_indian_ocean_territory"],
"tags": []
},
{
"char": "๐ฎ๐ถ",
"description": "flag: Iraq",
- "aliases": [
- "iraq"
- ],
+ "aliases": ["iraq"],
"tags": []
},
{
"char": "๐ฎ๐ท",
"description": "flag: Iran",
- "aliases": [
- "iran"
- ],
+ "aliases": ["iran"],
"tags": []
},
{
"char": "๐ฎ๐ธ",
"description": "flag: Iceland",
- "aliases": [
- "iceland"
- ],
+ "aliases": ["iceland"],
"tags": []
},
{
"char": "๐ฎ๐น",
"description": "flag: Italy",
- "aliases": [
- "it"
- ],
- "tags": [
- "italy"
- ]
+ "aliases": ["it"],
+ "tags": ["italy"]
},
{
"char": "๐ฏ๐ช",
"description": "flag: Jersey",
- "aliases": [
- "jersey"
- ],
+ "aliases": ["jersey"],
"tags": []
},
{
"char": "๐ฏ๐ฒ",
"description": "flag: Jamaica",
- "aliases": [
- "jamaica"
- ],
+ "aliases": ["jamaica"],
"tags": []
},
{
"char": "๐ฏ๐ด",
"description": "flag: Jordan",
- "aliases": [
- "jordan"
- ],
+ "aliases": ["jordan"],
"tags": []
},
{
"char": "๐ฏ๐ต",
"description": "flag: Japan",
- "aliases": [
- "jp"
- ],
- "tags": [
- "japan"
- ]
+ "aliases": ["jp"],
+ "tags": ["japan"]
},
{
"char": "๐ฐ๐ช",
"description": "flag: Kenya",
- "aliases": [
- "kenya"
- ],
+ "aliases": ["kenya"],
"tags": []
},
{
"char": "๐ฐ๐ฌ",
"description": "flag: Kyrgyzstan",
- "aliases": [
- "kyrgyzstan"
- ],
+ "aliases": ["kyrgyzstan"],
"tags": []
},
{
"char": "๐ฐ๐ญ",
"description": "flag: Cambodia",
- "aliases": [
- "cambodia"
- ],
+ "aliases": ["cambodia"],
"tags": []
},
{
"char": "๐ฐ๐ฎ",
"description": "flag: Kiribati",
- "aliases": [
- "kiribati"
- ],
+ "aliases": ["kiribati"],
"tags": []
},
{
"char": "๐ฐ๐ฒ",
"description": "flag: Comoros",
- "aliases": [
- "comoros"
- ],
+ "aliases": ["comoros"],
"tags": []
},
{
"char": "๐ฐ๐ณ",
"description": "flag: St. Kitts & Nevis",
- "aliases": [
- "st_kitts_nevis"
- ],
+ "aliases": ["st_kitts_nevis"],
"tags": []
},
{
"char": "๐ฐ๐ต",
"description": "flag: North Korea",
- "aliases": [
- "north_korea"
- ],
+ "aliases": ["north_korea"],
"tags": []
},
{
"char": "๐ฐ๐ท",
"description": "flag: South Korea",
- "aliases": [
- "kr"
- ],
- "tags": [
- "korea"
- ]
+ "aliases": ["kr"],
+ "tags": ["korea"]
},
{
"char": "๐ฐ๐ผ",
"description": "flag: Kuwait",
- "aliases": [
- "kuwait"
- ],
+ "aliases": ["kuwait"],
"tags": []
},
{
"char": "๐ฐ๐พ",
"description": "flag: Cayman Islands",
- "aliases": [
- "cayman_islands"
- ],
+ "aliases": ["cayman_islands"],
"tags": []
},
{
"char": "๐ฐ๐ฟ",
"description": "flag: Kazakhstan",
- "aliases": [
- "kazakhstan"
- ],
+ "aliases": ["kazakhstan"],
"tags": []
},
{
"char": "๐ฑ๐ฆ",
"description": "flag: Laos",
- "aliases": [
- "laos"
- ],
+ "aliases": ["laos"],
"tags": []
},
{
"char": "๐ฑ๐ง",
"description": "flag: Lebanon",
- "aliases": [
- "lebanon"
- ],
+ "aliases": ["lebanon"],
"tags": []
},
{
"char": "๐ฑ๐จ",
"description": "flag: St. Lucia",
- "aliases": [
- "st_lucia"
- ],
+ "aliases": ["st_lucia"],
"tags": []
},
{
"char": "๐ฑ๐ฎ",
"description": "flag: Liechtenstein",
- "aliases": [
- "liechtenstein"
- ],
+ "aliases": ["liechtenstein"],
"tags": []
},
{
"char": "๐ฑ๐ฐ",
"description": "flag: Sri Lanka",
- "aliases": [
- "sri_lanka"
- ],
+ "aliases": ["sri_lanka"],
"tags": []
},
{
"char": "๐ฑ๐ท",
"description": "flag: Liberia",
- "aliases": [
- "liberia"
- ],
+ "aliases": ["liberia"],
"tags": []
},
{
"char": "๐ฑ๐ธ",
"description": "flag: Lesotho",
- "aliases": [
- "lesotho"
- ],
+ "aliases": ["lesotho"],
"tags": []
},
{
"char": "๐ฑ๐น",
"description": "flag: Lithuania",
- "aliases": [
- "lithuania"
- ],
+ "aliases": ["lithuania"],
"tags": []
},
{
"char": "๐ฑ๐บ",
"description": "flag: Luxembourg",
- "aliases": [
- "luxembourg"
- ],
+ "aliases": ["luxembourg"],
"tags": []
},
{
"char": "๐ฑ๐ป",
"description": "flag: Latvia",
- "aliases": [
- "latvia"
- ],
+ "aliases": ["latvia"],
"tags": []
},
{
"char": "๐ฑ๐พ",
"description": "flag: Libya",
- "aliases": [
- "libya"
- ],
+ "aliases": ["libya"],
"tags": []
},
{
"char": "๐ฒ๐ฆ",
"description": "flag: Morocco",
- "aliases": [
- "morocco"
- ],
+ "aliases": ["morocco"],
"tags": []
},
{
"char": "๐ฒ๐จ",
"description": "flag: Monaco",
- "aliases": [
- "monaco"
- ],
+ "aliases": ["monaco"],
"tags": []
},
{
"char": "๐ฒ๐ฉ",
"description": "flag: Moldova",
- "aliases": [
- "moldova"
- ],
+ "aliases": ["moldova"],
"tags": []
},
{
"char": "๐ฒ๐ช",
"description": "flag: Montenegro",
- "aliases": [
- "montenegro"
- ],
+ "aliases": ["montenegro"],
"tags": []
},
{
"char": "๐ฒ๐ซ",
"description": "flag: St. Martin",
- "aliases": [
- "st_martin"
- ],
+ "aliases": ["st_martin"],
"tags": []
},
{
"char": "๐ฒ๐ญ",
"description": "flag: Marshall Islands",
- "aliases": [
- "marshall_islands"
- ],
+ "aliases": ["marshall_islands"],
"tags": []
},
{
"char": "๐ฒ๐ฐ",
"description": "flag: North Macedonia",
- "aliases": [
- "macedonia"
- ],
+ "aliases": ["macedonia"],
"tags": []
},
{
"char": "๐ฒ๐ฑ",
"description": "flag: Mali",
- "aliases": [
- "mali"
- ],
+ "aliases": ["mali"],
"tags": []
},
{
"char": "๐ฒ๐ฒ",
"description": "flag: Myanmar (Burma)",
- "aliases": [
- "myanmar"
- ],
- "tags": [
- "burma"
- ]
+ "aliases": ["myanmar"],
+ "tags": ["burma"]
},
{
"char": "๐ฒ๐ณ",
"description": "flag: Mongolia",
- "aliases": [
- "mongolia"
- ],
+ "aliases": ["mongolia"],
"tags": []
},
{
"char": "๐ฒ๐ด",
"description": "flag: Macao SAR China",
- "aliases": [
- "macau"
- ],
+ "aliases": ["macau"],
"tags": []
},
{
"char": "๐ฒ๐ต",
"description": "flag: Northern Mariana Islands",
- "aliases": [
- "northern_mariana_islands"
- ],
+ "aliases": ["northern_mariana_islands"],
"tags": []
},
{
"char": "๐ฒ๐ถ",
"description": "flag: Martinique",
- "aliases": [
- "martinique"
- ],
+ "aliases": ["martinique"],
"tags": []
},
{
"char": "๐ฒ๐ท",
"description": "flag: Mauritania",
- "aliases": [
- "mauritania"
- ],
+ "aliases": ["mauritania"],
"tags": []
},
{
"char": "๐ฒ๐ธ",
"description": "flag: Montserrat",
- "aliases": [
- "montserrat"
- ],
+ "aliases": ["montserrat"],
"tags": []
},
{
"char": "๐ฒ๐น",
"description": "flag: Malta",
- "aliases": [
- "malta"
- ],
+ "aliases": ["malta"],
"tags": []
},
{
"char": "๐ฒ๐บ",
"description": "flag: Mauritius",
- "aliases": [
- "mauritius"
- ],
+ "aliases": ["mauritius"],
"tags": []
},
{
"char": "๐ฒ๐ป",
"description": "flag: Maldives",
- "aliases": [
- "maldives"
- ],
+ "aliases": ["maldives"],
"tags": []
},
{
"char": "๐ฒ๐ผ",
"description": "flag: Malawi",
- "aliases": [
- "malawi"
- ],
+ "aliases": ["malawi"],
"tags": []
},
{
"char": "๐ฒ๐ฝ",
"description": "flag: Mexico",
- "aliases": [
- "mexico"
- ],
+ "aliases": ["mexico"],
"tags": []
},
{
"char": "๐ฒ๐พ",
"description": "flag: Malaysia",
- "aliases": [
- "malaysia"
- ],
+ "aliases": ["malaysia"],
"tags": []
},
{
"char": "๐ฒ๐ฟ",
"description": "flag: Mozambique",
- "aliases": [
- "mozambique"
- ],
+ "aliases": ["mozambique"],
"tags": []
},
{
"char": "๐ณ๐ฆ",
"description": "flag: Namibia",
- "aliases": [
- "namibia"
- ],
+ "aliases": ["namibia"],
"tags": []
},
{
"char": "๐ณ๐จ",
"description": "flag: New Caledonia",
- "aliases": [
- "new_caledonia"
- ],
+ "aliases": ["new_caledonia"],
"tags": []
},
{
"char": "๐ณ๐ช",
"description": "flag: Niger",
- "aliases": [
- "niger"
- ],
+ "aliases": ["niger"],
"tags": []
},
{
"char": "๐ณ๐ซ",
"description": "flag: Norfolk Island",
- "aliases": [
- "norfolk_island"
- ],
+ "aliases": ["norfolk_island"],
"tags": []
},
{
"char": "๐ณ๐ฌ",
"description": "flag: Nigeria",
- "aliases": [
- "nigeria"
- ],
+ "aliases": ["nigeria"],
"tags": []
},
{
"char": "๐ณ๐ฑ",
"description": "flag: Netherlands",
- "aliases": [
- "netherlands"
- ],
+ "aliases": ["netherlands"],
"tags": []
},
{
"char": "๐ณ๐ด",
"description": "flag: Norway",
- "aliases": [
- "norway"
- ],
+ "aliases": ["norway"],
"tags": []
},
{
"char": "๐ณ๐ต",
"description": "flag: Nepal",
- "aliases": [
- "nepal"
- ],
+ "aliases": ["nepal"],
"tags": []
},
{
"char": "๐ณ๐ท",
"description": "flag: Nauru",
- "aliases": [
- "nauru"
- ],
+ "aliases": ["nauru"],
"tags": []
},
{
"char": "๐ณ๐บ",
"description": "flag: Niue",
- "aliases": [
- "niue"
- ],
+ "aliases": ["niue"],
"tags": []
},
{
"char": "๐ณ๐ฟ",
"description": "flag: New Zealand",
- "aliases": [
- "new_zealand"
- ],
+ "aliases": ["new_zealand"],
"tags": []
},
{
"char": "๐ด๐ฒ",
"description": "flag: Oman",
- "aliases": [
- "oman"
- ],
+ "aliases": ["oman"],
"tags": []
},
{
"char": "๐ต๐ฆ",
"description": "flag: Panama",
- "aliases": [
- "panama"
- ],
+ "aliases": ["panama"],
"tags": []
},
{
"char": "๐ต๐ช",
"description": "flag: Peru",
- "aliases": [
- "peru"
- ],
+ "aliases": ["peru"],
"tags": []
},
{
"char": "๐ต๐ซ",
"description": "flag: French Polynesia",
- "aliases": [
- "french_polynesia"
- ],
+ "aliases": ["french_polynesia"],
"tags": []
},
{
"char": "๐ต๐ฌ",
"description": "flag: Papua New Guinea",
- "aliases": [
- "papua_new_guinea"
- ],
+ "aliases": ["papua_new_guinea"],
"tags": []
},
{
"char": "๐ต๐ญ",
"description": "flag: Philippines",
- "aliases": [
- "philippines"
- ],
+ "aliases": ["philippines"],
"tags": []
},
{
"char": "๐ต๐ฐ",
"description": "flag: Pakistan",
- "aliases": [
- "pakistan"
- ],
+ "aliases": ["pakistan"],
"tags": []
},
{
"char": "๐ต๐ฑ",
"description": "flag: Poland",
- "aliases": [
- "poland"
- ],
+ "aliases": ["poland"],
"tags": []
},
{
"char": "๐ต๐ฒ",
"description": "flag: St. Pierre & Miquelon",
- "aliases": [
- "st_pierre_miquelon"
- ],
+ "aliases": ["st_pierre_miquelon"],
"tags": []
},
{
"char": "๐ต๐ณ",
"description": "flag: Pitcairn Islands",
- "aliases": [
- "pitcairn_islands"
- ],
+ "aliases": ["pitcairn_islands"],
"tags": []
},
{
"char": "๐ต๐ท",
"description": "flag: Puerto Rico",
- "aliases": [
- "puerto_rico"
- ],
+ "aliases": ["puerto_rico"],
"tags": []
},
{
"char": "๐ต๐ธ",
"description": "flag: Palestinian Territories",
- "aliases": [
- "palestinian_territories"
- ],
+ "aliases": ["palestinian_territories"],
"tags": []
},
{
"char": "๐ต๐น",
"description": "flag: Portugal",
- "aliases": [
- "portugal"
- ],
+ "aliases": ["portugal"],
"tags": []
},
{
"char": "๐ต๐ผ",
"description": "flag: Palau",
- "aliases": [
- "palau"
- ],
+ "aliases": ["palau"],
"tags": []
},
{
"char": "๐ต๐พ",
"description": "flag: Paraguay",
- "aliases": [
- "paraguay"
- ],
+ "aliases": ["paraguay"],
"tags": []
},
{
"char": "๐ถ๐ฆ",
"description": "flag: Qatar",
- "aliases": [
- "qatar"
- ],
+ "aliases": ["qatar"],
"tags": []
},
{
"char": "๐ท๐ช",
"description": "flag: Rรฉunion",
- "aliases": [
- "reunion"
- ],
+ "aliases": ["reunion"],
"tags": []
},
{
"char": "๐ท๐ด",
"description": "flag: Romania",
- "aliases": [
- "romania"
- ],
+ "aliases": ["romania"],
"tags": []
},
{
"char": "๐ท๐ธ",
"description": "flag: Serbia",
- "aliases": [
- "serbia"
- ],
+ "aliases": ["serbia"],
"tags": []
},
{
"char": "๐ท๐บ",
"description": "flag: Russia",
- "aliases": [
- "ru"
- ],
- "tags": [
- "russia"
- ]
+ "aliases": ["ru"],
+ "tags": ["russia"]
},
{
"char": "๐ท๐ผ",
"description": "flag: Rwanda",
- "aliases": [
- "rwanda"
- ],
+ "aliases": ["rwanda"],
"tags": []
},
{
"char": "๐ธ๐ฆ",
"description": "flag: Saudi Arabia",
- "aliases": [
- "saudi_arabia"
- ],
+ "aliases": ["saudi_arabia"],
"tags": []
},
{
"char": "๐ธ๐ง",
"description": "flag: Solomon Islands",
- "aliases": [
- "solomon_islands"
- ],
+ "aliases": ["solomon_islands"],
"tags": []
},
{
"char": "๐ธ๐จ",
"description": "flag: Seychelles",
- "aliases": [
- "seychelles"
- ],
+ "aliases": ["seychelles"],
"tags": []
},
{
"char": "๐ธ๐ฉ",
"description": "flag: Sudan",
- "aliases": [
- "sudan"
- ],
+ "aliases": ["sudan"],
"tags": []
},
{
"char": "๐ธ๐ช",
"description": "flag: Sweden",
- "aliases": [
- "sweden"
- ],
+ "aliases": ["sweden"],
"tags": []
},
{
"char": "๐ธ๐ฌ",
"description": "flag: Singapore",
- "aliases": [
- "singapore"
- ],
+ "aliases": ["singapore"],
"tags": []
},
{
"char": "๐ธ๐ญ",
"description": "flag: St. Helena",
- "aliases": [
- "st_helena"
- ],
+ "aliases": ["st_helena"],
"tags": []
},
{
"char": "๐ธ๐ฏ",
"description": "flag: Svalbard & Jan Mayen",
- "aliases": [
- "svalbard_jan_mayen"
- ],
+ "aliases": ["svalbard_jan_mayen"],
"tags": []
},
{
"char": "๐ธ๐ฐ",
"description": "flag: Slovakia",
- "aliases": [
- "slovakia"
- ],
+ "aliases": ["slovakia"],
"tags": []
},
{
"char": "๐ธ๐ฑ",
"description": "flag: Sierra Leone",
- "aliases": [
- "sierra_leone"
- ],
+ "aliases": ["sierra_leone"],
"tags": []
},
{
"char": "๐ธ๐ฒ",
"description": "flag: San Marino",
- "aliases": [
- "san_marino"
- ],
+ "aliases": ["san_marino"],
"tags": []
},
{
"char": "๐ธ๐ณ",
"description": "flag: Senegal",
- "aliases": [
- "senegal"
- ],
+ "aliases": ["senegal"],
"tags": []
},
{
"char": "๐ธ๐ด",
"description": "flag: Somalia",
- "aliases": [
- "somalia"
- ],
+ "aliases": ["somalia"],
"tags": []
},
{
"char": "๐ธ๐ท",
"description": "flag: Suriname",
- "aliases": [
- "suriname"
- ],
+ "aliases": ["suriname"],
"tags": []
},
{
"char": "๐ธ๐ธ",
"description": "flag: South Sudan",
- "aliases": [
- "south_sudan"
- ],
+ "aliases": ["south_sudan"],
"tags": []
},
{
"char": "๐ธ๐น",
"description": "flag: Sรฃo Tomรฉ & Prรญncipe",
- "aliases": [
- "sao_tome_principe"
- ],
+ "aliases": ["sao_tome_principe"],
"tags": []
},
{
"char": "๐ธ๐ป",
"description": "flag: El Salvador",
- "aliases": [
- "el_salvador"
- ],
+ "aliases": ["el_salvador"],
"tags": []
},
{
"char": "๐ธ๐ฝ",
"description": "flag: Sint Maarten",
- "aliases": [
- "sint_maarten"
- ],
+ "aliases": ["sint_maarten"],
"tags": []
},
{
"char": "๐ธ๐พ",
"description": "flag: Syria",
- "aliases": [
- "syria"
- ],
+ "aliases": ["syria"],
"tags": []
},
{
"char": "๐ธ๐ฟ",
"description": "flag: Eswatini",
- "aliases": [
- "swaziland"
- ],
+ "aliases": ["swaziland"],
"tags": []
},
{
"char": "๐น๐ฆ",
"description": "flag: Tristan da Cunha",
- "aliases": [
- "tristan_da_cunha"
- ],
+ "aliases": ["tristan_da_cunha"],
"tags": []
},
{
"char": "๐น๐จ",
"description": "flag: Turks & Caicos Islands",
- "aliases": [
- "turks_caicos_islands"
- ],
+ "aliases": ["turks_caicos_islands"],
"tags": []
},
{
"char": "๐น๐ฉ",
"description": "flag: Chad",
- "aliases": [
- "chad"
- ],
+ "aliases": ["chad"],
"tags": []
},
{
"char": "๐น๐ซ",
"description": "flag: French Southern Territories",
- "aliases": [
- "french_southern_territories"
- ],
+ "aliases": ["french_southern_territories"],
"tags": []
},
{
"char": "๐น๐ฌ",
"description": "flag: Togo",
- "aliases": [
- "togo"
- ],
+ "aliases": ["togo"],
"tags": []
},
{
"char": "๐น๐ญ",
"description": "flag: Thailand",
- "aliases": [
- "thailand"
- ],
+ "aliases": ["thailand"],
"tags": []
},
{
"char": "๐น๐ฏ",
"description": "flag: Tajikistan",
- "aliases": [
- "tajikistan"
- ],
+ "aliases": ["tajikistan"],
"tags": []
},
{
"char": "๐น๐ฐ",
"description": "flag: Tokelau",
- "aliases": [
- "tokelau"
- ],
+ "aliases": ["tokelau"],
"tags": []
},
{
"char": "๐น๐ฑ",
"description": "flag: Timor-Leste",
- "aliases": [
- "timor_leste"
- ],
+ "aliases": ["timor_leste"],
"tags": []
},
{
"char": "๐น๐ฒ",
"description": "flag: Turkmenistan",
- "aliases": [
- "turkmenistan"
- ],
+ "aliases": ["turkmenistan"],
"tags": []
},
{
"char": "๐น๐ณ",
"description": "flag: Tunisia",
- "aliases": [
- "tunisia"
- ],
+ "aliases": ["tunisia"],
"tags": []
},
{
"char": "๐น๐ด",
"description": "flag: Tonga",
- "aliases": [
- "tonga"
- ],
+ "aliases": ["tonga"],
"tags": []
},
{
"char": "๐น๐ท",
"description": "flag: Turkey",
- "aliases": [
- "tr"
- ],
- "tags": [
- "turkey"
- ]
+ "aliases": ["tr"],
+ "tags": ["turkey"]
},
{
"char": "๐น๐น",
"description": "flag: Trinidad & Tobago",
- "aliases": [
- "trinidad_tobago"
- ],
+ "aliases": ["trinidad_tobago"],
"tags": []
},
{
"char": "๐น๐ป",
"description": "flag: Tuvalu",
- "aliases": [
- "tuvalu"
- ],
+ "aliases": ["tuvalu"],
"tags": []
},
{
"char": "๐น๐ผ",
"description": "flag: Taiwan",
- "aliases": [
- "taiwan"
- ],
+ "aliases": ["taiwan"],
"tags": []
},
{
"char": "๐น๐ฟ",
"description": "flag: Tanzania",
- "aliases": [
- "tanzania"
- ],
+ "aliases": ["tanzania"],
"tags": []
},
{
"char": "๐บ๐ฆ",
"description": "flag: Ukraine",
- "aliases": [
- "ukraine"
- ],
+ "aliases": ["ukraine"],
"tags": []
},
{
"char": "๐บ๐ฌ",
"description": "flag: Uganda",
- "aliases": [
- "uganda"
- ],
+ "aliases": ["uganda"],
"tags": []
},
{
"char": "๐บ๐ฒ",
"description": "flag: U.S. Outlying Islands",
- "aliases": [
- "us_outlying_islands"
- ],
+ "aliases": ["us_outlying_islands"],
"tags": []
},
{
"char": "๐บ๐ณ",
"description": "flag: United Nations",
- "aliases": [
- "united_nations"
- ],
+ "aliases": ["united_nations"],
"tags": []
},
{
"char": "๐บ๐ธ",
"description": "flag: United States",
- "aliases": [
- "us"
- ],
- "tags": [
- "flag",
- "united",
- "america"
- ]
+ "aliases": ["us"],
+ "tags": ["flag", "united", "america"]
},
{
"char": "๐บ๐พ",
"description": "flag: Uruguay",
- "aliases": [
- "uruguay"
- ],
+ "aliases": ["uruguay"],
"tags": []
},
{
"char": "๐บ๐ฟ",
"description": "flag: Uzbekistan",
- "aliases": [
- "uzbekistan"
- ],
+ "aliases": ["uzbekistan"],
"tags": []
},
{
"char": "๐ป๐ฆ",
"description": "flag: Vatican City",
- "aliases": [
- "vatican_city"
- ],
+ "aliases": ["vatican_city"],
"tags": []
},
{
"char": "๐ป๐จ",
"description": "flag: St. Vincent & Grenadines",
- "aliases": [
- "st_vincent_grenadines"
- ],
+ "aliases": ["st_vincent_grenadines"],
"tags": []
},
{
"char": "๐ป๐ช",
"description": "flag: Venezuela",
- "aliases": [
- "venezuela"
- ],
+ "aliases": ["venezuela"],
"tags": []
},
{
"char": "๐ป๐ฌ",
"description": "flag: British Virgin Islands",
- "aliases": [
- "british_virgin_islands"
- ],
+ "aliases": ["british_virgin_islands"],
"tags": []
},
{
"char": "๐ป๐ฎ",
"description": "flag: U.S. Virgin Islands",
- "aliases": [
- "us_virgin_islands"
- ],
+ "aliases": ["us_virgin_islands"],
"tags": []
},
{
"char": "๐ป๐ณ",
"description": "flag: Vietnam",
- "aliases": [
- "vietnam"
- ],
+ "aliases": ["vietnam"],
"tags": []
},
{
"char": "๐ป๐บ",
"description": "flag: Vanuatu",
- "aliases": [
- "vanuatu"
- ],
+ "aliases": ["vanuatu"],
"tags": []
},
{
"char": "๐ผ๐ซ",
"description": "flag: Wallis & Futuna",
- "aliases": [
- "wallis_futuna"
- ],
+ "aliases": ["wallis_futuna"],
"tags": []
},
{
"char": "๐ผ๐ธ",
"description": "flag: Samoa",
- "aliases": [
- "samoa"
- ],
+ "aliases": ["samoa"],
"tags": []
},
{
"char": "๐ฝ๐ฐ",
"description": "flag: Kosovo",
- "aliases": [
- "kosovo"
- ],
+ "aliases": ["kosovo"],
"tags": []
},
{
"char": "๐พ๐ช",
"description": "flag: Yemen",
- "aliases": [
- "yemen"
- ],
+ "aliases": ["yemen"],
"tags": []
},
{
"char": "๐พ๐น",
"description": "flag: Mayotte",
- "aliases": [
- "mayotte"
- ],
+ "aliases": ["mayotte"],
"tags": []
},
{
"char": "๐ฟ๐ฆ",
"description": "flag: South Africa",
- "aliases": [
- "south_africa"
- ],
+ "aliases": ["south_africa"],
"tags": []
},
{
"char": "๐ฟ๐ฒ",
"description": "flag: Zambia",
- "aliases": [
- "zambia"
- ],
+ "aliases": ["zambia"],
"tags": []
},
{
"char": "๐ฟ๐ผ",
"description": "flag: Zimbabwe",
- "aliases": [
- "zimbabwe"
- ],
+ "aliases": ["zimbabwe"],
"tags": []
}
]
-}
\ No newline at end of file
+}
diff --git a/packages/core/src/hooks/index.ts b/packages/core/src/hooks/index.ts
index 880518a..e67aa81 100644
--- a/packages/core/src/hooks/index.ts
+++ b/packages/core/src/hooks/index.ts
@@ -1,3 +1,3 @@
export * from "./useHeadingLinks";
export * from "./useDebounce";
-export * from "./useFetchOg";
\ No newline at end of file
+export * from "./useFetchOg";
diff --git a/packages/core/src/hooks/useArrowNavigation.ts b/packages/core/src/hooks/useArrowNavigation.ts
index 1411e6e..3fd4803 100644
--- a/packages/core/src/hooks/useArrowNavigation.ts
+++ b/packages/core/src/hooks/useArrowNavigation.ts
@@ -1,6 +1,6 @@
-import { useState, useCallback, KeyboardEvent, RefObject, useEffect } from 'react';
+import { useState, useCallback, KeyboardEvent, RefObject, useEffect } from "react";
-export type NavigationLayout = 'row' | 'column' | 'grid';
+export type NavigationLayout = "row" | "column" | "grid";
export interface ArrowNavigationOptions {
layout: NavigationLayout;
@@ -32,145 +32,154 @@ export const useArrowNavigation = ({
disableHighlighting = false,
}: ArrowNavigationOptions) => {
const [focusedIndex, setFocusedIndex] = useState(initialFocusedIndex);
-
+
// Reset focused index when item count changes
useEffect(() => {
if (focusedIndex >= itemCount) {
setFocusedIndex(itemCount > 0 ? 0 : -1);
}
}, [itemCount, focusedIndex]);
-
+
// Auto-focus first item if enabled
useEffect(() => {
if (autoFocus && itemCount > 0 && focusedIndex === -1) {
setFocusedIndex(0);
}
}, [autoFocus, itemCount, focusedIndex]);
-
+
// Update focus when focusedIndex changes
useEffect(() => {
if (focusedIndex >= 0 && containerRef?.current) {
const items = Array.from(
- containerRef.current.querySelectorAll(itemSelector)
+ containerRef.current.querySelectorAll(itemSelector),
) as HTMLElement[];
-
+
if (items.length > focusedIndex) {
// Check if the item is disabled
- const isDisabled = items[focusedIndex].hasAttribute('disabled') ||
- items[focusedIndex].getAttribute('aria-disabled') === 'true';
-
+ const isDisabled =
+ items[focusedIndex].hasAttribute("disabled") ||
+ items[focusedIndex].getAttribute("aria-disabled") === "true";
+
if (!isDisabled) {
// Focus the element without scrolling
items[focusedIndex].focus({ preventScroll: true });
-
+
// Don't call scrollIntoView to avoid unwanted scrolling
// items[focusedIndex].scrollIntoView({ block: 'nearest', behavior: 'smooth' });
-
+
// Call the focus change callback
onFocusChange?.(focusedIndex);
}
}
}
}, [focusedIndex, containerRef, itemSelector, onFocusChange]);
-
+
// Helper function to find the next non-disabled item
- const findNextEnabledItem = useCallback((currentIndex: number, direction: 1 | -1): number => {
- if (!containerRef?.current) return currentIndex;
-
- const items = Array.from(
- containerRef.current.querySelectorAll(itemSelector)
- ) as HTMLElement[];
-
- let index = currentIndex;
- let loopCount = 0;
-
- // Prevent infinite loops by limiting to itemCount iterations
- while (loopCount < itemCount) {
- index += direction;
-
- // Handle wrapping
- if (index >= itemCount) {
- if (wrap) {
- index = 0;
- } else {
- return currentIndex; // Can't move further
+ const findNextEnabledItem = useCallback(
+ (currentIndex: number, direction: 1 | -1): number => {
+ if (!containerRef?.current) return currentIndex;
+
+ const items = Array.from(
+ containerRef.current.querySelectorAll(itemSelector),
+ ) as HTMLElement[];
+
+ let index = currentIndex;
+ let loopCount = 0;
+
+ // Prevent infinite loops by limiting to itemCount iterations
+ while (loopCount < itemCount) {
+ index += direction;
+
+ // Handle wrapping
+ if (index >= itemCount) {
+ if (wrap) {
+ index = 0;
+ } else {
+ return currentIndex; // Can't move further
+ }
+ } else if (index < 0) {
+ if (wrap) {
+ index = itemCount - 1;
+ } else {
+ return currentIndex; // Can't move further
+ }
}
- } else if (index < 0) {
- if (wrap) {
- index = itemCount - 1;
- } else {
- return currentIndex; // Can't move further
+
+ // Check if we've looped back to the start
+ if (index === currentIndex) {
+ return currentIndex;
}
- }
-
- // Check if we've looped back to the start
- if (index === currentIndex) {
- return currentIndex;
- }
-
- // Check if item is enabled
- if (index < items.length) {
- const isDisabled = items[index].hasAttribute('disabled') ||
- items[index].getAttribute('aria-disabled') === 'true';
- if (!isDisabled) {
- return index;
+
+ // Check if item is enabled
+ if (index < items.length) {
+ const isDisabled =
+ items[index].hasAttribute("disabled") ||
+ items[index].getAttribute("aria-disabled") === "true";
+ if (!isDisabled) {
+ return index;
+ }
}
+
+ loopCount++;
}
-
- loopCount++;
- }
-
- // If all items are disabled, return the original index
- return currentIndex;
- }, [containerRef, itemSelector, itemCount, wrap]);
+
+ // If all items are disabled, return the original index
+ return currentIndex;
+ },
+ [containerRef, itemSelector, itemCount, wrap],
+ );
// Helper function to find the next enabled item from a specific index
- const findEnabledItemFromIndex = useCallback((startIndex: number): number => {
- if (!containerRef?.current) return startIndex;
-
- const items = Array.from(
- containerRef.current.querySelectorAll(itemSelector)
- ) as HTMLElement[];
-
- // First check the start index itself
- if (startIndex < items.length) {
- const isDisabled = items[startIndex].hasAttribute('disabled') ||
- items[startIndex].getAttribute('aria-disabled') === 'true';
- if (!isDisabled) {
- return startIndex;
+ const findEnabledItemFromIndex = useCallback(
+ (startIndex: number): number => {
+ if (!containerRef?.current) return startIndex;
+
+ const items = Array.from(
+ containerRef.current.querySelectorAll(itemSelector),
+ ) as HTMLElement[];
+
+ // First check the start index itself
+ if (startIndex < items.length) {
+ const isDisabled =
+ items[startIndex].hasAttribute("disabled") ||
+ items[startIndex].getAttribute("aria-disabled") === "true";
+ if (!isDisabled) {
+ return startIndex;
+ }
}
- }
-
- // If start index is disabled, find the next enabled item
- return findNextEnabledItem(startIndex, 1);
- }, [containerRef, itemSelector, findNextEnabledItem]);
+
+ // If start index is disabled, find the next enabled item
+ return findNextEnabledItem(startIndex, 1);
+ },
+ [containerRef, itemSelector, findNextEnabledItem],
+ );
const handleKeyDown = useCallback(
(e: KeyboardEvent) => {
if (disabled || itemCount === 0) return;
-
+
let newIndex = focusedIndex;
-
+
switch (e.key) {
- case 'ArrowRight':
+ case "ArrowRight":
e.preventDefault();
- if (layout === 'row' || layout === 'grid') {
+ if (layout === "row" || layout === "grid") {
newIndex = findNextEnabledItem(focusedIndex, 1);
}
break;
-
- case 'ArrowLeft':
+
+ case "ArrowLeft":
e.preventDefault();
- if (layout === 'row' || layout === 'grid') {
+ if (layout === "row" || layout === "grid") {
newIndex = findNextEnabledItem(focusedIndex, -1);
}
break;
-
- case 'ArrowDown':
+
+ case "ArrowDown":
e.preventDefault();
- if (layout === 'column') {
+ if (layout === "column") {
newIndex = findNextEnabledItem(focusedIndex, 1);
- } else if (layout === 'grid') {
+ } else if (layout === "grid") {
// Move down by the number of columns
const nextIndex = focusedIndex + columns;
if (nextIndex < itemCount) {
@@ -182,12 +191,12 @@ export const useArrowNavigation = ({
}
}
break;
-
- case 'ArrowUp':
+
+ case "ArrowUp":
e.preventDefault();
- if (layout === 'column') {
+ if (layout === "column") {
newIndex = findNextEnabledItem(focusedIndex, -1);
- } else if (layout === 'grid') {
+ } else if (layout === "grid") {
// Move up by the number of columns
const nextIndex = focusedIndex - columns;
if (nextIndex >= 0) {
@@ -201,70 +210,73 @@ export const useArrowNavigation = ({
}
}
break;
-
- case 'Home':
+
+ case "Home":
e.preventDefault();
newIndex = 0;
break;
-
- case 'End':
+
+ case "End":
e.preventDefault();
newIndex = itemCount - 1;
break;
-
- case 'Enter':
- case ' ':
- console.log('ArrowNavigation: Enter/Space pressed, focusedIndex:', focusedIndex, 'itemCount:', itemCount);
+
+ case "Enter":
+ case " ":
+ console.log(
+ "ArrowNavigation: Enter/Space pressed, focusedIndex:",
+ focusedIndex,
+ "itemCount:",
+ itemCount,
+ );
if (focusedIndex >= 0 && focusedIndex < itemCount) {
e.preventDefault();
- console.log('ArrowNavigation: Calling onSelect with index:', focusedIndex);
+ console.log("ArrowNavigation: Calling onSelect with index:", focusedIndex);
onSelect?.(focusedIndex);
}
break;
-
+
default:
return;
}
-
+
if (newIndex !== focusedIndex) {
setFocusedIndex(newIndex);
}
},
- [layout, itemCount, focusedIndex, columns, wrap, onSelect, disabled]
+ [layout, itemCount, focusedIndex, columns, wrap, onSelect, disabled],
);
-
+
/**
* Apply highlighted state to elements
*/
const applyHighlightedState = useCallback(() => {
if (!containerRef?.current || disableHighlighting) return;
-
- const items = Array.from(
- containerRef.current.querySelectorAll(itemSelector)
- ) as HTMLElement[];
-
+
+ const items = Array.from(containerRef.current.querySelectorAll(itemSelector)) as HTMLElement[];
+
items.forEach((item, index) => {
// Check if the item is disabled
- const isDisabled = item.hasAttribute('disabled') ||
- item.getAttribute('aria-disabled') === 'true';
-
+ const isDisabled =
+ item.hasAttribute("disabled") || item.getAttribute("aria-disabled") === "true";
+
if (index === focusedIndex && !isDisabled) {
- item.setAttribute('data-highlighted', 'true');
- item.classList.add('highlighted');
- item.setAttribute('aria-selected', 'true');
+ item.setAttribute("data-highlighted", "true");
+ item.classList.add("highlighted");
+ item.setAttribute("aria-selected", "true");
} else {
- item.removeAttribute('data-highlighted');
- item.classList.remove('highlighted');
- item.setAttribute('aria-selected', 'false');
+ item.removeAttribute("data-highlighted");
+ item.classList.remove("highlighted");
+ item.setAttribute("aria-selected", "false");
}
});
}, [containerRef, itemSelector, focusedIndex, disableHighlighting]);
-
+
// Apply highlighted state when focusedIndex changes
useEffect(() => {
applyHighlightedState();
}, [focusedIndex, applyHighlightedState]);
-
+
return {
focusedIndex,
setFocusedIndex,
diff --git a/packages/core/src/hooks/useFetchOg.ts b/packages/core/src/hooks/useFetchOg.ts
index 75eb94c..eac724c 100644
--- a/packages/core/src/hooks/useFetchOg.ts
+++ b/packages/core/src/hooks/useFetchOg.ts
@@ -17,15 +17,15 @@ export function useOgData(url: string | null, customFetchUrl?: string, customPro
useEffect(() => {
const fetchOgData = async () => {
try {
- const fetchUrl = customFetchUrl
- ? `${customFetchUrl}?url=${encodeURIComponent(url!)}`
+ const fetchUrl = customFetchUrl
+ ? `${customFetchUrl}?url=${encodeURIComponent(url!)}`
: `/api/og/fetch?url=${encodeURIComponent(url!)}`;
-
+
const response = await fetch(fetchUrl);
-
+
// Check if response is JSON
- const contentType = response.headers.get('content-type');
- if (!contentType || !contentType.includes('application/json')) {
+ const contentType = response.headers.get("content-type");
+ if (!contentType || !contentType.includes("application/json")) {
throw new Error(`Expected JSON response, got ${contentType}`);
}
diff --git a/packages/core/src/icons.ts b/packages/core/src/icons.ts
index f811920..4a054f7 100644
--- a/packages/core/src/icons.ts
+++ b/packages/core/src/icons.ts
@@ -36,7 +36,15 @@ import {
HiOutlineArrowTurnDownLeft,
} from "react-icons/hi2";
-import { IoAtOutline, IoFastFoodOutline, IoFlagOutline, IoFootballOutline, IoGiftOutline, IoGlobeOutline, IoPawOutline } from "react-icons/io5";
+import {
+ IoAtOutline,
+ IoFastFoodOutline,
+ IoFlagOutline,
+ IoFootballOutline,
+ IoGiftOutline,
+ IoGlobeOutline,
+ IoPawOutline,
+} from "react-icons/io5";
import { LuTextCursorInput } from "react-icons/lu";
export const iconLibrary: Record = {
@@ -80,7 +88,7 @@ export const iconLibrary: Record = {
symbol: IoAtOutline,
flag: IoFlagOutline,
wordmark: LuTextCursorInput,
- enter: HiOutlineArrowTurnDownLeft
+ enter: HiOutlineArrowTurnDownLeft,
};
export type IconLibrary = typeof iconLibrary;
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index 0d6bc04..c8e8175 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -5,4 +5,4 @@ export * from "./icons";
export * from "./types";
export * from "./interfaces";
export * from "./utils";
-export * from "./hooks";
\ No newline at end of file
+export * from "./hooks";
diff --git a/packages/core/src/interfaces.ts b/packages/core/src/interfaces.ts
index abd814c..ccaf35d 100644
--- a/packages/core/src/interfaces.ts
+++ b/packages/core/src/interfaces.ts
@@ -51,22 +51,8 @@ export interface GridProps extends HTMLAttributes {
export interface FlexProps extends HTMLAttributes {
direction?: "row" | "column" | "row-reverse" | "column-reverse";
- horizontal?:
- | "start"
- | "center"
- | "end"
- | "between"
- | "around"
- | "even"
- | "stretch";
- vertical?:
- | "start"
- | "center"
- | "end"
- | "between"
- | "around"
- | "even"
- | "stretch";
+ horizontal?: "start" | "center" | "end" | "between" | "around" | "even" | "stretch";
+ vertical?: "start" | "center" | "end" | "between" | "around" | "even" | "stretch";
center?: boolean;
wrap?: boolean;
flex?: flex;
diff --git a/packages/core/src/modules/code/CodeBlock.tsx b/packages/core/src/modules/code/CodeBlock.tsx
index 2a0c830..d9174b5 100644
--- a/packages/core/src/modules/code/CodeBlock.tsx
+++ b/packages/core/src/modules/code/CodeBlock.tsx
@@ -4,11 +4,8 @@ import React, { useState, useEffect, useRef, ReactNode } from "react";
// We'll import CSS files dynamically on the client side
const loadCssFiles = async () => {
- if (typeof window !== 'undefined') {
- await Promise.all([
- import("./CodeHighlight.css"),
- import("./LineNumber.css")
- ]);
+ if (typeof window !== "undefined") {
+ await Promise.all([import("./CodeHighlight.css"), import("./LineNumber.css")]);
return true;
}
return false;
@@ -22,7 +19,7 @@ import Prism from "prismjs";
// We'll load these dynamically on the client side only
const loadPrismDependencies = async () => {
- if (typeof window !== 'undefined') {
+ if (typeof window !== "undefined") {
// Only import these on the client side
await Promise.all([
import("prismjs/plugins/line-highlight/prism-line-highlight"),
@@ -30,7 +27,7 @@ const loadPrismDependencies = async () => {
import("prismjs/components/prism-jsx"),
import("prismjs/components/prism-css"),
import("prismjs/components/prism-typescript"),
- import("prismjs/components/prism-tsx")
+ import("prismjs/components/prism-tsx"),
]);
return true;
}
@@ -93,17 +90,15 @@ const CodeBlock: React.FC = ({
language: "",
};
const { code, language } = codeInstance;
- const highlight = codeInstance.highlight !== undefined ? codeInstance.highlight : deprecatedHighlight;
+ const highlight =
+ codeInstance.highlight !== undefined ? codeInstance.highlight : deprecatedHighlight;
useEffect(() => {
const loadDependencies = async () => {
- await Promise.all([
- loadPrismDependencies(),
- loadCssFiles()
- ]);
+ await Promise.all([loadPrismDependencies(), loadCssFiles()]);
setDependenciesLoaded(true);
};
-
+
loadDependencies();
}, []);
@@ -310,7 +305,11 @@ const CodeBlock: React.FC = ({
)}
tabIndex={-1}
>
-
+
{typeof code === "string" ? code : code.content}
diff --git a/packages/core/src/modules/data/BarChart.tsx b/packages/core/src/modules/data/BarChart.tsx
index e383e0b..9db5e5b 100644
--- a/packages/core/src/modules/data/BarChart.tsx
+++ b/packages/core/src/modules/data/BarChart.tsx
@@ -52,10 +52,10 @@ const BarChart: React.FC = ({
"data-viz-style": dataVizStyle,
...flex
}) => {
- const {
- variant: themeVariant,
- mode,
- height,
+ const {
+ variant: themeVariant,
+ mode,
+ height,
tick: { fill: tickFill, fontSize: tickFontSize, line: tickLine },
axis: { stroke: axisLineStroke },
} = useDataTheme();
@@ -135,7 +135,14 @@ const BarChart: React.FC = ({
}, [data, selectedDateRange, xAxisKey]);
return (
-
+
= ({
/>
}
dropdown={
-
+
{presets.display && (
= ({
{loading ? (
+ ) : empty ? (
+
+ {emptyState}
+
) : (
- empty ? (
-
- {emptyState}
-
- ) : error && (
+ error && (
{errorState}
diff --git a/packages/core/src/modules/data/DataTooltip.tsx b/packages/core/src/modules/data/DataTooltip.tsx
index b9fe760..5398d88 100644
--- a/packages/core/src/modules/data/DataTooltip.tsx
+++ b/packages/core/src/modules/data/DataTooltip.tsx
@@ -64,12 +64,7 @@ const DataTooltip: React.FC = ({
{typeof entry.value === "number" ? (
-
+
) : (
entry.value
)}
diff --git a/packages/core/src/modules/data/LineBarChart.tsx b/packages/core/src/modules/data/LineBarChart.tsx
index 28196df..a96672d 100644
--- a/packages/core/src/modules/data/LineBarChart.tsx
+++ b/packages/core/src/modules/data/LineBarChart.tsx
@@ -54,12 +54,12 @@ const LineBarChart: React.FC = ({
"data-viz-style": dataVizStyle,
...flex
}) => {
- const {
- variant: themeVariant,
- mode,
- height,
+ const {
+ variant: themeVariant,
+ mode,
+ height,
tick: { fill: tickFill, fontSize: tickFontSize, line: tickLine },
- axis: { stroke: axisLineStroke }
+ axis: { stroke: axisLineStroke },
} = useDataTheme();
const variant = variantProp || themeVariant;
const legend = {
@@ -141,7 +141,14 @@ const LineBarChart: React.FC = ({
const chartId = React.useMemo(() => Math.random().toString(36).substring(2, 9), []);
return (
-
+
= ({
"data-viz-style": dataVizStyle,
...flex
}) => {
- const {
- variant: themeVariant,
- mode,
- height,
+ const {
+ variant: themeVariant,
+ mode,
+ height,
tick: { fill: tickFill, fontSize: tickFontSize, line: tickLine },
- axis: { stroke: axisLineStroke }
+ axis: { stroke: axisLineStroke },
} = useDataTheme();
const variant = variantProp || themeVariant;
const legend = {
@@ -141,7 +141,14 @@ const LineChart: React.FC = ({
};
return (
-
+
= ({
"data-viz-style": dataViz,
...flex
}) => {
- const {
- variant: themeVariant,
- mode,
- height
- } = useDataTheme();
+ const { variant: themeVariant, mode, height } = useDataTheme();
const variant = variantProp || themeVariant;
const legend = {
display: legendProp.display !== undefined ? legendProp.display : true,
diff --git a/packages/core/src/modules/data/Swatch.tsx b/packages/core/src/modules/data/Swatch.tsx
index 87ea060..4687c6d 100644
--- a/packages/core/src/modules/data/Swatch.tsx
+++ b/packages/core/src/modules/data/Swatch.tsx
@@ -12,7 +12,11 @@ export interface SwatchProps {
variant?: ChartVariant;
}
-export const Swatch: React.FC = ({ color, size = "m", variant = useDataTheme().variant }) => {
+export const Swatch: React.FC = ({
+ color,
+ size = "m",
+ variant = useDataTheme().variant,
+}) => {
const sizeMap: Record<
string,
{ minWidth: SpacingToken; minHeight: SpacingToken; radius: RadiusSize }
diff --git a/packages/core/src/modules/data/index.ts b/packages/core/src/modules/data/index.ts
index 5e29e04..47172fd 100644
--- a/packages/core/src/modules/data/index.ts
+++ b/packages/core/src/modules/data/index.ts
@@ -10,4 +10,4 @@ export * from "./ChartStatus";
export * from "./Gradient";
export * from "./DataTooltip";
export * from "./Legend";
-export * from "./Swatch";
\ No newline at end of file
+export * from "./Swatch";
diff --git a/packages/core/src/modules/navigation/HeadingLink.tsx b/packages/core/src/modules/navigation/HeadingLink.tsx
index 3693361..401007b 100644
--- a/packages/core/src/modules/navigation/HeadingLink.tsx
+++ b/packages/core/src/modules/navigation/HeadingLink.tsx
@@ -21,36 +21,33 @@ const variantMap = {
h6: "heading-strong-xs",
} as const;
-export const HeadingLink: React.FC = ({
- id,
- as,
- children,
- style,
- ...flex
-}) => {
+export const HeadingLink: React.FC = ({ id, as, children, style, ...flex }) => {
const { addToast } = useToast();
- const copyURL = useCallback((id: string) => {
- try {
- const url = `${window.location.origin}${window.location.pathname}#${id}`;
- navigator.clipboard.writeText(url).then(
- () => {
- addToast?.({
- variant: "success",
- message: "Link copied to clipboard.",
- });
- },
- () => {
- addToast?.({
- variant: "danger",
- message: "Failed to copy link.",
- });
- },
- );
- } catch (error) {
- console.error("Error copying to clipboard:", error);
- }
- }, [addToast]);
+ const copyURL = useCallback(
+ (id: string) => {
+ try {
+ const url = `${window.location.origin}${window.location.pathname}#${id}`;
+ navigator.clipboard.writeText(url).then(
+ () => {
+ addToast?.({
+ variant: "success",
+ message: "Link copied to clipboard.",
+ });
+ },
+ () => {
+ addToast?.({
+ variant: "danger",
+ message: "Failed to copy link.",
+ });
+ },
+ );
+ } catch (error) {
+ console.error("Error copying to clipboard:", error);
+ }
+ },
+ [addToast],
+ );
const variant = variantMap[as];
diff --git a/packages/core/src/modules/navigation/Kbar.tsx b/packages/core/src/modules/navigation/Kbar.tsx
index e83aa1f..bd7baf3 100644
--- a/packages/core/src/modules/navigation/Kbar.tsx
+++ b/packages/core/src/modules/navigation/Kbar.tsx
@@ -52,7 +52,12 @@ interface KbarContentProps {
placeholder?: string;
}
-export const KbarContent: React.FC = ({ isOpen, onClose, items, placeholder = "Search" }) => {
+export const KbarContent: React.FC = ({
+ isOpen,
+ onClose,
+ items,
+ placeholder = "Search",
+}) => {
const [searchQuery, setSearchQuery] = useState("");
const [highlightedIndex, setHighlightedIndex] = useState(null);
const containerRef = useRef(null);
@@ -109,10 +114,12 @@ export const KbarContent: React.FC = ({ isOpen, onClose, items
) : undefined,
hasSuffix:
item.shortcut && item.shortcut.length > 0 ? (
-
+
{item.shortcut.map((key, i) => (
- {key}
+
+ {key}
+
{i < item.shortcut.length - 1 && +}
))}
@@ -328,7 +335,15 @@ export const KbarContent: React.FC = ({ isOpen, onClose, items
autoComplete="off"
/>
-
+
{groupedItems.map((option, index) => {
if (option.isCustom) {
return {option.label};
@@ -359,17 +374,44 @@ export const KbarContent: React.FC = ({ isOpen, onClose, items
);
})}
{searchQuery && filteredItems.length === 0 && (
-
- No results found
+
+ No results found
)}
-
-
-
- Navigate
-
+
+
+
+
+
+
+
+
+
+
+
+
+ Navigate
+
+
+
+
+
+
Go to
diff --git a/packages/core/src/modules/seo/Meta.tsx b/packages/core/src/modules/seo/Meta.tsx
index cd82485..6b4125d 100644
--- a/packages/core/src/modules/seo/Meta.tsx
+++ b/packages/core/src/modules/seo/Meta.tsx
@@ -43,9 +43,9 @@ export function generateMetadata({
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
const ogImage = image
- ? image.startsWith('http')
+ ? image.startsWith("http")
? image
- : `${image.startsWith("/") ? '' : '/'}${image}`
+ : `${image.startsWith("/") ? "" : "/"}${image}`
: `/api/og/generate?title=${encodeURIComponent(title)}`;
const url = canonical || `${normalizedBaseURL}${normalizedPath}`;
diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts
index de63600..ed173ab 100644
--- a/packages/core/src/utils/index.ts
+++ b/packages/core/src/utils/index.ts
@@ -1 +1 @@
-export * from "./devLogger";
\ No newline at end of file
+export * from "./devLogger";
diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json
index 0fb2bbb..129f309 100644
--- a/packages/core/tsconfig.build.json
+++ b/packages/core/tsconfig.build.json
@@ -16,4 +16,4 @@
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.test.*", "**/*.stories.*"]
-}
\ No newline at end of file
+}