[READ-ONLY] Mirror of https://github.com/flo-bit/ui-kit. 🦊 fox ui, svelte 5 and tailwind 4 flo-bit.dev/ui-kit/
svelte tailwindcss ui-components
0

Configure Feed

Select the types of activity you want to include in your feed.

hopefully improve emojipicker, improve box

Florian (Oct 26, 2025, 4:01 PM +0100) f919e9cb b609a15a

+56 -36
+6
.changeset/gold-stars-talk.md
··· 1 + --- 2 + '@foxui/social': patch 3 + '@foxui/core': patch 4 + --- 5 + 6 + hopefully improve emojipicker, improve box
+1 -1
packages/core/src/lib/components/box/Box.svelte
··· 14 14 <div 15 15 bind:this={ref} 16 16 class={cn( 17 - 'border-base-300/50 bg-base-300/20 backdrop-blur-2xl dark:border-base-800/50 dark:bg-base-900/30 text-base-900 dark:text-base-100 relative isolate w-full overflow-hidden rounded-2xl border p-4', 17 + 'border-base-300/50 bg-base-50/70 backdrop-blur-2xl dark:border-base-800/50 dark:bg-base-900/60 text-base-900 dark:text-base-100 relative isolate w-full overflow-hidden rounded-2xl border p-4', 18 18 className 19 19 )} 20 20 {...restProps}
+38 -22
packages/social/src/lib/components/emoji-picker/EmojiPicker.svelte
··· 1 + <script lang="ts" module> 2 + import { isEmojiSupported } from 'is-emoji-supported'; 3 + 4 + import Database from 'emoji-picker-element/database'; 5 + 6 + export let emojiDatabase: { 7 + db: Database | undefined; 8 + } = $state({ 9 + db: undefined 10 + }); 11 + 12 + export function loadEmojis() { 13 + if(emojiDatabase.db) return; 14 + 15 + import('emoji-picker-element').then(({ Database }) => { 16 + emojiDatabase.db = new Database(); 17 + 18 + // go through all groups and check if the emoji is supported (will be cached) 19 + // so that things appear faster when we select a group 20 + for (const group of allGroups) { 21 + emojiDatabase.db.getEmojiByGroup(group.id).then((emojis) => { 22 + for (const emoji of emojis) { 23 + isEmojiSupported(emoji.unicode); 24 + } 25 + }); 26 + } 27 + }); 28 + console.log('emojis loaded'); 29 + } 30 + </script> 31 + 1 32 <script lang="ts"> 2 33 import { cn, ScrollArea } from '@foxui/core'; 3 - import { isEmojiSupported } from 'is-emoji-supported'; 4 34 import { allGroups } from './emoji'; 5 - import Database from 'emoji-picker-element/database'; 6 35 import type { NativeEmoji } from 'emoji-picker-element/shared'; 7 36 import { fade } from 'svelte/transition'; 37 + import { onMount } from 'svelte'; 8 38 9 39 let currentGroup = $state(allGroups[0].id); 10 - let db: Database | undefined = $state(); 11 40 12 41 let { 13 42 onpicked, ··· 23 52 class?: string; 24 53 } = $props(); 25 54 26 - $effect(() => { 27 - if (db) return; 28 - import('emoji-picker-element').then(({ Database }) => { 29 - db = new Database(); 30 - 31 - // go through all groups and check if the emoji is supported (will be cached) 32 - // so that things appear faster when we select a group 33 - for (const group of allGroups) { 34 - db.getEmojiByGroup(group.id).then((emojis) => { 35 - for (const emoji of emojis) { 36 - isEmojiSupported(emoji.unicode); 37 - } 38 - }); 39 - } 40 - }); 41 - }); 55 + onMount(() => { 56 + loadEmojis(); 57 + }) 42 58 </script> 43 59 44 60 <div class={cn('flex flex-col', className)} style="height: {height}px; width: {width}px;"> ··· 46 62 class="grid w-full select-none space-y-0 px-2" 47 63 style="height: {height}px; grid-template-columns: repeat({columns}, minmax(0, 1fr));" 48 64 > 49 - {#await db?.getEmojiByGroup(currentGroup) then emojis} 65 + {#await emojiDatabase.db?.getEmojiByGroup(currentGroup) then emojis} 50 66 {#if emojis} 51 67 {#each emojis as emoji} 52 68 {#if isEmojiSupported(emoji.unicode)} ··· 70 86 <button 71 87 onclick={() => (currentGroup = group.id)} 72 88 class={cn( 73 - '[&>svg]:size-4.5 relative cursor-pointer [&>svg]:transition-all [&>svg]:duration-100 [&>svg]:hover:scale-105 py-2', 89 + '[&>svg]:size-4.5 relative cursor-pointer py-2 [&>svg]:transition-all [&>svg]:duration-100 [&>svg]:hover:scale-105', 74 90 group.id === currentGroup 75 91 ? 'text-accent-600 dark:text-accent-400' 76 92 : 'hover:text-accent-700 dark:hover:text-accent-300' 77 93 )} 78 - > 94 + > 79 95 {@html group.svg} 80 96 <span class="sr-only">{group.name}</span> 81 97
+2
packages/social/src/lib/components/emoji-picker/index.ts
··· 1 1 export { default as EmojiPicker } from './EmojiPicker.svelte'; 2 2 export { default as PopoverEmojiPicker } from './PopoverEmojiPicker.svelte'; 3 + 4 + export { loadEmojis } from './EmojiPicker.svelte';
+1 -1
apps/docs/src/routes/(main)/components/3d/model-picker/ModelPicker.md
··· 2 2 import Example from './Example.svelte'; 3 3 </script> 4 4 5 - # Depth 3D 5 + # Model Picker 6 6 7 7 ## Example 8 8
+1 -1
apps/docs/src/routes/(main)/components/3d/voxel-art/VoxelArt.md
··· 2 2 import Example from './Example.svelte'; 3 3 </script> 4 4 5 - # Depth 3D 5 + # Voxel Art 6 6 7 7 ## Example 8 8
+4 -3
apps/docs/src/routes/(main)/components/core/scroll-area/Example.svelte
··· 1 1 <script> 2 - import { ScrollArea } from '@foxui/all'; 2 + import { ScrollArea, Box } from '@foxui/all'; 3 3 4 4 let content = `Doggo ipsum puggorino shoob I am bekom fat. Clouds such treat big ol pupper vvv, porgo. Aqua 5 5 doggo ur givin me a spook corgo heckin good boys heck much ruin diet, ur givin me a spook doggo ··· 32 32 diet very jealous pupper, floofs shibe he made many woofs woofer, heckin good boys pupperino.`; 33 33 </script> 34 34 35 - <ScrollArea 36 - class="border-base-200 dark:border-base-800 text-base-900 dark:text-base-100 bg-base-100 dark:bg-base-900 h-52 w-96 max-w-full rounded-2xl border p-3" 35 + <Box class="p-0 w-128 max-w-full"> 36 + <ScrollArea class="h-52 px-4 py-2" 37 37 > 38 38 {content} 39 39 </ScrollArea> 40 + </Box>
+3 -6
apps/docs/src/routes/(main)/components/social/emoji-picker/EmojiPicker.md
··· 15 15 import { EmojiPicker } from '@foxui/social'; 16 16 </script> 17 17 18 - <EmojiPicker 19 - onpicked={(emoji) => console.log('selected emoji: ' + emoji.unicode)} /> 18 + <EmojiPicker onpicked={(emoji) => console.log('selected emoji: ' + emoji.unicode)} /> 20 19 21 - // or popover emoji picker 20 + <!-- or popover emoji picker --> 22 21 23 22 <PopoverEmojiPicker onpicked={(emoji) => console.log('selected emoji: ' + emoji.unicode)}> 24 23 {#snippet child({ props })} 25 - <Button size="iconLg" {...props}> 26 - Open Emoji Picker 27 - </Button> 24 + <Button size="iconLg" {...props}>Open Emoji Picker</Button> 28 25 {/snippet} 29 26 </PopoverEmojiPicker> 30 27 ```