summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/stickers/providers/emoji.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/lib/stickers/providers/emoji.ts')
-rw-r--r--apps/web/src/lib/stickers/providers/emoji.ts119
1 files changed, 0 insertions, 119 deletions
diff --git a/apps/web/src/lib/stickers/providers/emoji.ts b/apps/web/src/lib/stickers/providers/emoji.ts
deleted file mode 100644
index cc198236..00000000
--- a/apps/web/src/lib/stickers/providers/emoji.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import {
- POPULAR_COLLECTIONS,
- getIconSvgUrl,
- searchIcons,
-} from "@/lib/iconify-api";
-import { buildStickerId, parseStickerId } from "../sticker-id";
-import type {
- StickerItem,
- StickerProvider,
- StickerSearchResult,
-} from "../types";
-
-const EMOJI_PROVIDER_ID = "emoji";
-const DEFAULT_SEARCH_LIMIT = 100;
-
-const EMOJI_PREFIXES = POPULAR_COLLECTIONS.emoji.map(
- (collection) => collection.prefix,
-);
-
-const DEFAULT_EMOJI_BROWSE = [
- "noto:grinning-face",
- "noto:smiling-face-with-heart-eyes",
- "noto:fire",
- "noto:rocket",
- "noto:party-popper",
- "noto:clapping-hands",
- "noto:sparkles",
- "noto:red-heart",
- "noto:thumbs-up",
- "noto:eyes",
- "noto:thinking-face",
- "noto:hundred-points",
-];
-
-function getDisplayNameFromIconName({
- iconName,
-}: {
- iconName: string;
-}): string {
- const parts = iconName.split(":");
- const rawName = parts[parts.length - 1] ?? iconName;
- return rawName.replaceAll("-", " ").replaceAll("_", " ");
-}
-
-function toStickerItem({ iconName }: { iconName: string }): StickerItem {
- return {
- id: buildStickerId({
- providerId: EMOJI_PROVIDER_ID,
- providerValue: iconName,
- }),
- provider: EMOJI_PROVIDER_ID,
- name: getDisplayNameFromIconName({ iconName }),
- previewUrl: getIconSvgUrl(iconName, { width: 64, height: 64 }),
- metadata: { iconName },
- };
-}
-
-function computeHasMore({
- total,
- limit,
- start = 0,
-}: {
- total: number;
- limit: number;
- start?: number;
-}): boolean {
- return start + limit < total;
-}
-
-export const emojiProvider: StickerProvider = {
- id: EMOJI_PROVIDER_ID,
- async search({
- query,
- options,
- }: {
- query: string;
- options?: { limit?: number };
- }): Promise<StickerSearchResult> {
- const limit = options?.limit ?? DEFAULT_SEARCH_LIMIT;
- const searchResult = await searchIcons(query, limit, EMOJI_PREFIXES);
- return {
- items: searchResult.icons.map((iconName) => toStickerItem({ iconName })),
- total: searchResult.total,
- hasMore: computeHasMore({
- total: searchResult.total,
- limit: searchResult.limit,
- start: searchResult.start,
- }),
- };
- },
- async browse({
- options,
- }: {
- options?: { page?: number; limit?: number };
- }): Promise<StickerSearchResult> {
- const limit = options?.limit ?? DEFAULT_EMOJI_BROWSE.length;
- const items = DEFAULT_EMOJI_BROWSE.slice(0, limit).map((iconName) =>
- toStickerItem({ iconName }),
- );
- return {
- items,
- total: items.length,
- hasMore: false,
- };
- },
- resolveUrl({
- stickerId,
- options,
- }: {
- stickerId: string;
- options?: { width?: number; height?: number };
- }): string {
- const { providerValue } = parseStickerId({ stickerId });
- return getIconSvgUrl(providerValue, {
- width: options?.width,
- height: options?.height,
- });
- },
-};