···2525### 3. set theme variables in your app.css (changing `zinc` and `emerald` to your preferred colors, using find and replace).
26262727```css
2828-@source "../node_modules/@fuxui";
2828+@source "../node_modules/@foxui";
29293030@theme {
3131 --color-base-50: var(--color-zinc-50);
···11+MIT License Copyright (c) 2025 flo-bit
22+33+Permission is hereby granted, free of
44+charge, to any person obtaining a copy of this software and associated
55+documentation files (the "Software"), to deal in the Software without
66+restriction, including without limitation the rights to use, copy, modify, merge,
77+publish, distribute, sublicense, and/or sell copies of the Software, and to
88+permit persons to whom the Software is furnished to do so, subject to the
99+following conditions:
1010+1111+The above copyright notice and this permission notice
1212+(including the next paragraph) shall be included in all copies or substantial
1313+portions of the Software.
1414+1515+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
1616+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1717+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
1818+EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
1919+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2020+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2121+THE SOFTWARE.
+21
packages/all/README.md
···11+# 🦊 fox ui
22+33+svelte 5 + tailwind 4 ui kit, components from all sub packages
44+55+- [Core](https://www.npmjs.com/package/@foxui/core)
66+- [3D](https://www.npmjs.com/package/@foxui/3d)
77+- [Colors](https://www.npmjs.com/package/@foxui/colors)
88+- [Social](https://www.npmjs.com/package/@foxui/social)
99+- [Text](https://www.npmjs.com/package/@foxui/text)
1010+- [Time](https://www.npmjs.com/package/@foxui/time)
1111+- [Visual](https://www.npmjs.com/package/@foxui/visual)
1212+1313+> **This is a public alpha release. Expect bugs and breaking changes.**
1414+1515+[See all components here](https://flo-bit.dev/ui-kit)
1616+1717+For a guide on how to use this ui kit, see the [Quickstart Guide](https://flo-bit.dev/ui-kit/docs/quick-start).
1818+1919+Read more about [the philosophy/aim of this project here](https://flo-bit.dev/ui-kit/docs/philosophy).
2020+2121+For more information about development, contributing and the like, see the main [README](https://github.com/flo-bit/ui-kit/blob/main/README.md).
···11+import adapter from '@sveltejs/adapter-static';
22+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
33+44+/** @type {import('@sveltejs/kit').Config} */
55+const config = {
66+ // Consult https://svelte.dev/docs/kit/integrations
77+ // for more information about preprocessors
88+ preprocess: vitePreprocess(),
99+1010+ kit: {
1111+ // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
1212+ // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
1313+ // See https://svelte.dev/docs/kit/adapters for more information about adapters.
1414+ adapter: adapter()
1515+ }
1616+};
1717+1818+export default config;
+19
packages/all/tsconfig.json
···11+{
22+ "extends": "./.svelte-kit/tsconfig.json",
33+ "compilerOptions": {
44+ "allowJs": true,
55+ "checkJs": true,
66+ "esModuleInterop": true,
77+ "forceConsistentCasingInFileNames": true,
88+ "resolveJsonModule": true,
99+ "skipLibCheck": true,
1010+ "sourceMap": true,
1111+ "strict": true,
1212+ "moduleResolution": "bundler"
1313+ }
1414+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
1515+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
1616+ //
1717+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
1818+ // from the referenced tsconfig.json - TypeScript does not merge them in
1919+}
+7
packages/all/vite.config.ts
···11+import tailwindcss from '@tailwindcss/vite';
22+import { sveltekit } from '@sveltejs/kit/vite';
33+import { defineConfig } from 'vite';
44+55+export default defineConfig({
66+ plugins: [tailwindcss(), sveltekit()]
77+});
···11+export * from '@foxui/core';
22+export * from '@foxui/3d';
33+export * from '@foxui/colors';
44+export * from '@foxui/social';
55+export * from '@foxui/text';
66+export * from '@foxui/time';
77+export * from '@foxui/visual';
+7
packages/all/src/lib/types.d.ts
···11+export * from '@foxui/core';
22+export * from '@foxui/3d';
33+export * from '@foxui/colors';
44+export * from '@foxui/social';
55+export * from '@foxui/text';
66+export * from '@foxui/time';
77+export * from '@foxui/visual';
+7
packages/all/src/routes/+layout.svelte
···11+<script lang="ts">
22+ import '../app.css';
33+44+ let { children } = $props();
55+</script>
66+77+{@render children()}
···14141515Also add the `@tailwindcss/typography` and `@tailwindcss/forms` plugins.
16161717-## 2. Install fuchs
1717+## 2. Install all fox ui components by running:
18181919```bash
2020-npm install @foxui/core
2020+npm install @foxui/all
2121```
22222323## 3. Set theme variables in your `app.css`
···2525You can change the colors to your liking.
26262727```css
2828-@source "../node_modules/@fuxui";
2828+@source "../node_modules/@foxui";
29293030@theme {
3131 --color-base-50: var(--color-zinc-50);
···58585959```svelte
6060<script>
6161- import { Button } from '@foxui/core';
6161+ import { Button } from '@foxui/all';
6262</script>
63636464<Button>Click me</Button>
···68686969### Subpackages
70707171-Fox ui is split into multiple subpackages. Simply install a subpackage when you need it, or you can install all of them with:
7171+Fox UI is split into multiple subpackages to minimize both the bundle size as well as the amount of dependencies.
7272+Simply install a package when you need it, or you can install all of them with:
72737374```bash
7474-npm install @foxui/core @foxui/3d @foxui/colors @foxui/social @foxui/text @foxui/time @foxui/visual
7575+npm install @foxui/all
7576```
76777778### Dark mode
···11-<script lang="ts">
22- import AccordionExample from './Example.svelte';
33- import AccordionProps from './Props.svelte';
44-</script>
55-66-# Accordion
77-88-## Example
99-1010-<AccordionExample />
1111-1212-## Usage
1313-1414-```svelte
1515-<script lang="ts">
1616- import { Accordion, AccordionItem } from '@foxui/core';
1717-</script>
1818-1919-<Accordion type="single">
2020- <AccordionItem title="Is it accessible?">
2121- Yes. It adheres to the WAI-ARIA design pattern.
2222- </AccordionItem>
2323- <AccordionItem title="Are you sure?">
2424- I mean, I hope so? It's based on the bits-ui accordion component, so if not it's not my fault 😅
2525- </AccordionItem>
2626-</Accordion>
2727-```
2828-2929-## API Reference
3030-3131-<AccordionProps />
3232-3333-## Credits
3434-3535-This component is based on the [bits-ui accordion component](https://bits-ui.com/docs/components/accordion).
···11-<script lang="ts">
22- import { Accordion, AccordionItem } from '@foxui/core';
33-</script>
44-55-<Accordion type="single">
66- <AccordionItem title="Is it accessible?">
77- Yes. It adheres to the WAI-ARIA design pattern.
88- </AccordionItem>
99- <AccordionItem title="Are you sure?">
1010- I mean, I hope so? It's based on the <a
1111- href="https://bits-ui.com/docs/components/accordion"
1212- target="_blank">bits-ui accordion component</a
1313- >, so if not it's not my fault 😅
1414- </AccordionItem>
1515-</Accordion>
···11-<script>
22- import Api from '$lib/site-components/API.svelte';
33-</script>
44-55-<Api
66- props={{
77- title: 'Accordion',
88- props: {
99- children: {
1010- type: 'Snippet',
1111- description:
1212- 'The children content to render. Should be a list of AccordionItem components.',
1313- required: true
1414- },
1515- type: {
1616- type: { type: 'enum', definition: "'single' | 'multiple'" },
1717- description:
1818- "If set to 'multiple', the accordion will allow multiple items to be open at the same time. If set to single, the accordion will only allow a single item to be open.",
1919- required: true
2020- },
2121- value: {
2222- type: { type: 'union', definition: 'string | string[]' },
2323- description:
2424- 'The value of the accordion item that is currently open. If type is set to "multiple", this will be an array of strings. If type is set to "single", this will be a string.',
2525- bindable: true
2626- },
2727- onValueChange: {
2828- type: {
2929- type: 'function',
3030- definition: '(value: string) => void | (value: string[]) => void'
3131- },
3232- description: 'A function that is called when the value of the accordion item changes.'
3333- },
3434- disabled: {
3535- type: 'boolean',
3636- description: 'Whether the accordion is disabled.',
3737- default: 'false'
3838- },
3939- ref: {
4040- type: 'HTMLDivElement',
4141- description:
4242- 'The underlying DOM element being rendered. You can bind to this to get a reference to the element.',
4343- bindable: true
4444- }
4545- }
4646- }}
4747-/>
4848-4949-<Api
5050- props={{
5151- title: 'AccordionItem',
5252- props: {
5353- title: {
5454- type: 'string',
5555- description:
5656- 'The title of the accordion item, displayed both when the item is closed or open.',
5757- required: true
5858- },
5959- children: {
6060- type: 'Snippet',
6161- description:
6262- 'The children content to render. The content is displayed when the item is open.',
6363- required: true
6464- },
6565- value: {
6666- type: 'string',
6767- description:
6868- 'The value of the accordion item. This is used to identify when the item is open or closed. If not provided, a unique ID will be generated for this value.'
6969- },
7070- disabled: {
7171- type: 'boolean',
7272- description: 'Whether the accordion item is disabled.',
7373- default: 'false'
7474- },
7575- ref: {
7676- type: 'HTMLDivElement',
7777- description:
7878- 'The underlying DOM element being rendered. You can bind to this to get a reference to the element.',
7979- bindable: true
8080- }
8181- }
8282- }}
8383-/>
···11-<script>
22- import { Box } from '@foxui/core';
33-</script>
44-55-# Box
66-77-## Examples
88-99-<Box class="text-sm">This is a box, put your stuff here.</Box>
1010-1111-## Usage
1212-1313-```svelte
1414-<script>
1515- import { Box } from '@foxui/core';
1616-</script>
1717-1818-<Box class="text-sm">This is a box, put your stuff here.</Box>
1919-```
···11-<script>
22- import { ImageCard, toast} from '@foxui/core';
33-44- import nature1 from '$lib/assets/images/nature1.webp';
55- import nature2 from '$lib/assets/images/nature2.webp';
66- import nature3 from '$lib/assets/images/nature3.webp';
77-</script>
88-99-<h3>Full width</h3>
1010-1111-<ImageCard
1212- src={nature1}
1313- alt="Nature 1"
1414- title="Hello World"
1515- description="Just wanted to say hello to everyone on this beautiful planet, been traveling a lot lately and wanted to share some of the places I've been to."
1616- href="#"
1717- class="not-prose mb-16"
1818-/>
1919-2020-<h3>In a grid</h3>
2121-2222-<div class="not-prose grid w-full grid-cols-1 gap-6 sm:grid-cols-2 md:grid-cols-3">
2323- <ImageCard
2424- src={nature1}
2525- alt="Nature 1"
2626- title="Best places to visit"
2727- description="This is such a long description, that it will probably be cut off and truncated after the first two lines."
2828- href="#"
2929- />
3030- <ImageCard
3131- src={nature2}
3232- alt="Nature 2"
3333- title="This is a beautiful place"
3434- description="This card will show a toast when clicked"
3535- onclick={() => toast('Hello World')}
3636- />
3737- <ImageCard
3838- src={nature3}
3939- alt="Nature 3"
4040- title="Traveling is fun"
4141- description="But this card is not clickable"
4242- />
4343-</div>
···11-<script>
22- import { Box, ChatBubble, ImageContainer } from '@foxui/core';
33-44- import cute from '$lib/assets/images/cute.webp';
55-</script>
66-77-<Box class="not-prose flex flex-col gap-3">
88- <ChatBubble side="right">
99- <p>Hello there</p>
1010- </ChatBubble>
1111-1212- <ChatBubble>
1313- <p>General Kenobi</p>
1414- </ChatBubble>
1515-1616- <ChatBubble side="right">
1717- <p>This is a really long message that should wrap around the chat bubble and not overflow</p>
1818- </ChatBubble>
1919- <ChatBubble>
2020- <p>
2121- This is another really long message that should wrap around the chat bubble and not overflow
2222- </p>
2323- </ChatBubble>
2424-2525- <ChatBubble side="right">
2626- <p>This is me sending you an image</p>
2727-2828- <ImageContainer src={cute} alt="cute cat" containerClasses="-mx-1.5 rounded-xl" />
2929- </ChatBubble>
3030-</Box>
···11-<script>
22- import { NumberInput } from '@foxui/core';
33-</script>
44-55-# Number Input
66-77-## Example
88-99-<NumberInput />
1010-1111-## Usage
1212-1313-```svelte
1414-<script>
1515- import { NumberInput } from '@foxui/core';
1616-1717- let value = $state(0);
1818-</script>
1919-2020-<NumberInput min={0} max={100} bind:value />
2121-```
2222-2323-## Credits
2424-2525-- Adapted from an example of [number-flow](https://number-flow.barvian.me/)
···11-<script>
22- import { Box } from '@foxui/core';
33-</script>
44-55-# Prose
66-77-## Example
88-99-<Box>
1010- <h1>Prose</h1>
1111- <p>Prose is a component that renders html tags with automatic styles applied.</p>
1212- <p>It is useful for rendering markdown content.</p>
1313-1414- <p>This is a link: <a href="https://google.com">Google</a></p>
1515-</Box>
1616-1717-## Usage
1818-1919-```svelte
2020-<script>
2121- import Prose from '@foxui/core';
2222-</script>
2323-2424-<Prose>
2525- <h1>Prose</h1>
2626-2727- <p>Prose is a component</p>
2828-</Prose>
2929-```
···11-<script>
22- import { ScrollArea } from '@foxui/core';
33-44- let content = `Doggo ipsum puggorino shoob I am bekom fat. Clouds such treat big ol pupper vvv, porgo. Aqua
55- doggo ur givin me a spook corgo heckin good boys heck much ruin diet, ur givin me a spook doggo
66- such treat ur givin me a spook. What a nice floof extremely cuuuuuute waggy wags floofs dat
77- tungg tho puggorino, smol aqua doggo dat tungg tho h*ck, sub woofer long doggo snoot you are
88- doing me a frighten. Boofers heck porgo adorable doggo, many pats heckin good boys. Big ol blop
99- very good spot aqua doggo, dat tungg tho pats smol borking doggo with a long snoot for pats,
1010- long bois smol. Lotsa pats borkf stop it fren heckin pupperino woofer, such treat very hand that
1111- feed shibe doge fluffer. what a nice floof vvv you are doin me a concern. Ruff you are doing me
1212- the shock boofers borkf smol borking doggo with a long snoot for pats, fluffer stop it fren many
1313- pats, doing me a frighten mlem ur givin me a spook. Stop it fren smol wow such tempt blep long
1414- woofer boofers, lotsa pats shooberino doge. corgo maximum borkdrive shibe. Many pats shoob
1515- heckin good boys I am bekom fat woofer, sub woofer long woofer. Very taste wow boof you are
1616- doing me a frighten very good spot boofers, stop it fren mlem. Length boy lotsa pats wow very
1717- biscit, blop. Snoot doggo length boy blep, length boy doing me a frighten. Big ol smol very
1818- taste wow adorable doggo, extremely cuuuuuute. borking doggo boofers. Long woofer porgo dat
1919- tungg tho boofers, blop borkdrive, h*ck mlem. Doing me a frighten long doggo blep such treat,
2020- adorable doggo smol. Such treat smol long bois most angery pupper I have ever seen, big ol
2121- pupper. Tungg much ruin diet fluffer shooberino blep aqua doggo, very taste wow very good spot
2222- aqua doggo big ol pupper pupper, long doggo very taste wow borking doggo puggo. Much ruin diet
2323- corgo you are doing me a frighten doing me a frighten, pupperino. Tungg waggy wags porgo heckin
2424- angery woofer ruff smol borking doggo with a long snoot for pats I am bekom fat, noodle horse
2525- thicc porgo many pats very hand that feed shibe, boof stop it fren heckin good boys and girls
2626- length boy super chub. Blop long water shoob puggorino yapper borkf, long woofer blep. I am
2727- bekom fat aqua doggo heck blep doggorino most angery pupper I have ever seen, pupper shoob
2828- floofs. Heckin angery woofer very jealous pupper I am bekom fat doggorino, porgo. Aqua doggo
2929- length boy ruff long bois shooberino, dat tungg tho very taste wow pupper. Clouds many pats doge
3030- heckin snoot, maximum borkdrive wow such tempt you are doin me a concern. Corgo puggorino smol
3131- borking doggo with a long snoot for pats super chub, fat boi h*ck. Dat tungg tho shoob much ruin
3232- diet very jealous pupper, floofs shibe he made many woofs woofer, heckin good boys pupperino.`;
3333-</script>
3434-3535-<ScrollArea
3636- 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"
3737->
3838- {content}
3939-</ScrollArea>
···11-# Sidebar
22-33-## Example
44-55-For an example see the Sidebar at the side of this page.
66-77-## Usage
88-99-```svelte
1010-<script>
1111- import { Sidebar } from '@foxui/core';
1212-</script>
1313-1414-<Sidebar>
1515- <div>
1616- <div>Home</div>
1717- <div>Settings</div>
1818- <div>Profile</div>
1919- </div>
2020-</Sidebar>
2121-2222-<!-- to show mobile version add a popovertarget to a button -->
2323-<Button class="block lg:hidden" popovertarget="mobile-menu">
2424- Menu
2525-</Button>
2626-```
···11+<script lang="ts">
22+ import AccordionExample from './Example.svelte';
33+ import AccordionProps from './Props.svelte';
44+</script>
55+66+# Accordion
77+88+## Example
99+1010+<AccordionExample />
1111+1212+## Usage
1313+1414+```svelte
1515+<script lang="ts">
1616+ import { Accordion, AccordionItem } from '@foxui/core';
1717+</script>
1818+1919+<Accordion type="single">
2020+ <AccordionItem title="Is it accessible?">
2121+ Yes. It adheres to the WAI-ARIA design pattern.
2222+ </AccordionItem>
2323+ <AccordionItem title="Are you sure?">
2424+ I mean, I hope so? It's based on the bits-ui accordion component, so if not it's not my fault 😅
2525+ </AccordionItem>
2626+</Accordion>
2727+```
2828+2929+## API Reference
3030+3131+<AccordionProps />
3232+3333+## Credits
3434+3535+This component is based on the [bits-ui accordion component](https://bits-ui.com/docs/components/accordion).
···11+<script lang="ts">
22+ import { Accordion, AccordionItem } from '@foxui/core';
33+</script>
44+55+<Accordion type="single">
66+ <AccordionItem title="Is it accessible?">
77+ Yes. It adheres to the WAI-ARIA design pattern.
88+ </AccordionItem>
99+ <AccordionItem title="Are you sure?">
1010+ I mean, I hope so? It's based on the <a
1111+ href="https://bits-ui.com/docs/components/accordion"
1212+ target="_blank">bits-ui accordion component</a
1313+ >, so if not it's not my fault 😅
1414+ </AccordionItem>
1515+</Accordion>
···11+<script>
22+ import Api from '$lib/site-components/API.svelte';
33+</script>
44+55+<Api
66+ props={{
77+ title: 'Accordion',
88+ props: {
99+ children: {
1010+ type: 'Snippet',
1111+ description:
1212+ 'The children content to render. Should be a list of AccordionItem components.',
1313+ required: true
1414+ },
1515+ type: {
1616+ type: { type: 'enum', definition: "'single' | 'multiple'" },
1717+ description:
1818+ "If set to 'multiple', the accordion will allow multiple items to be open at the same time. If set to single, the accordion will only allow a single item to be open.",
1919+ required: true
2020+ },
2121+ value: {
2222+ type: { type: 'union', definition: 'string | string[]' },
2323+ description:
2424+ 'The value of the accordion item that is currently open. If type is set to "multiple", this will be an array of strings. If type is set to "single", this will be a string.',
2525+ bindable: true
2626+ },
2727+ onValueChange: {
2828+ type: {
2929+ type: 'function',
3030+ definition: '(value: string) => void | (value: string[]) => void'
3131+ },
3232+ description: 'A function that is called when the value of the accordion item changes.'
3333+ },
3434+ disabled: {
3535+ type: 'boolean',
3636+ description: 'Whether the accordion is disabled.',
3737+ default: 'false'
3838+ },
3939+ ref: {
4040+ type: 'HTMLDivElement',
4141+ description:
4242+ 'The underlying DOM element being rendered. You can bind to this to get a reference to the element.',
4343+ bindable: true
4444+ }
4545+ }
4646+ }}
4747+/>
4848+4949+<Api
5050+ props={{
5151+ title: 'AccordionItem',
5252+ props: {
5353+ title: {
5454+ type: 'string',
5555+ description:
5656+ 'The title of the accordion item, displayed both when the item is closed or open.',
5757+ required: true
5858+ },
5959+ children: {
6060+ type: 'Snippet',
6161+ description:
6262+ 'The children content to render. The content is displayed when the item is open.',
6363+ required: true
6464+ },
6565+ value: {
6666+ type: 'string',
6767+ description:
6868+ 'The value of the accordion item. This is used to identify when the item is open or closed. If not provided, a unique ID will be generated for this value.'
6969+ },
7070+ disabled: {
7171+ type: 'boolean',
7272+ description: 'Whether the accordion item is disabled.',
7373+ default: 'false'
7474+ },
7575+ ref: {
7676+ type: 'HTMLDivElement',
7777+ description:
7878+ 'The underlying DOM element being rendered. You can bind to this to get a reference to the element.',
7979+ bindable: true
8080+ }
8181+ }
8282+ }}
8383+/>
···11+<script>
22+ import { Box } from '@foxui/core';
33+</script>
44+55+# Box
66+77+## Examples
88+99+<Box class="text-sm">This is a box, put your stuff here.</Box>
1010+1111+## Usage
1212+1313+```svelte
1414+<script>
1515+ import { Box } from '@foxui/core';
1616+</script>
1717+1818+<Box class="text-sm">This is a box, put your stuff here.</Box>
1919+```
···11+<script>
22+ import { ImageCard, toast} from '@foxui/core';
33+44+ import nature1 from '$lib/assets/images/nature1.webp';
55+ import nature2 from '$lib/assets/images/nature2.webp';
66+ import nature3 from '$lib/assets/images/nature3.webp';
77+</script>
88+99+<h3>Full width</h3>
1010+1111+<ImageCard
1212+ src={nature1}
1313+ alt="Nature 1"
1414+ title="Hello World"
1515+ description="Just wanted to say hello to everyone on this beautiful planet, been traveling a lot lately and wanted to share some of the places I've been to."
1616+ href="#"
1717+ class="not-prose mb-16"
1818+/>
1919+2020+<h3>In a grid</h3>
2121+2222+<div class="not-prose grid w-full grid-cols-1 gap-6 sm:grid-cols-2 md:grid-cols-3">
2323+ <ImageCard
2424+ src={nature1}
2525+ alt="Nature 1"
2626+ title="Best places to visit"
2727+ description="This is such a long description, that it will probably be cut off and truncated after the first two lines."
2828+ href="#"
2929+ />
3030+ <ImageCard
3131+ src={nature2}
3232+ alt="Nature 2"
3333+ title="This is a beautiful place"
3434+ description="This card will show a toast when clicked"
3535+ onclick={() => toast('Hello World')}
3636+ />
3737+ <ImageCard
3838+ src={nature3}
3939+ alt="Nature 3"
4040+ title="Traveling is fun"
4141+ description="But this card is not clickable"
4242+ />
4343+</div>
···11+<script>
22+ import { Box, ChatBubble, ImageContainer } from '@foxui/core';
33+44+ import cute from '$lib/assets/images/cute.webp';
55+</script>
66+77+<Box class="not-prose flex flex-col gap-3">
88+ <ChatBubble side="right">
99+ <p>Hello there</p>
1010+ </ChatBubble>
1111+1212+ <ChatBubble>
1313+ <p>General Kenobi</p>
1414+ </ChatBubble>
1515+1616+ <ChatBubble side="right">
1717+ <p>This is a really long message that should wrap around the chat bubble and not overflow</p>
1818+ </ChatBubble>
1919+ <ChatBubble>
2020+ <p>
2121+ This is another really long message that should wrap around the chat bubble and not overflow
2222+ </p>
2323+ </ChatBubble>
2424+2525+ <ChatBubble side="right">
2626+ <p>This is me sending you an image</p>
2727+2828+ <ImageContainer src={cute} alt="cute cat" containerClasses="-mx-1.5 rounded-xl" />
2929+ </ChatBubble>
3030+</Box>
···11+<script>
22+ import { NumberInput } from '@foxui/core';
33+</script>
44+55+# Number Input
66+77+## Example
88+99+<NumberInput />
1010+1111+## Usage
1212+1313+```svelte
1414+<script>
1515+ import { NumberInput } from '@foxui/core';
1616+1717+ let value = $state(0);
1818+</script>
1919+2020+<NumberInput min={0} max={100} bind:value />
2121+```
2222+2323+## Credits
2424+2525+- Adapted from an example of [number-flow](https://number-flow.barvian.me/)
···11+<script>
22+ import { Box } from '@foxui/core';
33+</script>
44+55+# Prose
66+77+## Example
88+99+<Box>
1010+ <h1>Prose</h1>
1111+ <p>Prose is a component that renders html tags with automatic styles applied.</p>
1212+ <p>It is useful for rendering markdown content.</p>
1313+1414+ <p>This is a link: <a href="https://google.com">Google</a></p>
1515+</Box>
1616+1717+## Usage
1818+1919+```svelte
2020+<script>
2121+ import Prose from '@foxui/core';
2222+</script>
2323+2424+<Prose>
2525+ <h1>Prose</h1>
2626+2727+ <p>Prose is a component</p>
2828+</Prose>
2929+```
···11+<script>
22+ import { ScrollArea } from '@foxui/core';
33+44+ let content = `Doggo ipsum puggorino shoob I am bekom fat. Clouds such treat big ol pupper vvv, porgo. Aqua
55+ doggo ur givin me a spook corgo heckin good boys heck much ruin diet, ur givin me a spook doggo
66+ such treat ur givin me a spook. What a nice floof extremely cuuuuuute waggy wags floofs dat
77+ tungg tho puggorino, smol aqua doggo dat tungg tho h*ck, sub woofer long doggo snoot you are
88+ doing me a frighten. Boofers heck porgo adorable doggo, many pats heckin good boys. Big ol blop
99+ very good spot aqua doggo, dat tungg tho pats smol borking doggo with a long snoot for pats,
1010+ long bois smol. Lotsa pats borkf stop it fren heckin pupperino woofer, such treat very hand that
1111+ feed shibe doge fluffer. what a nice floof vvv you are doin me a concern. Ruff you are doing me
1212+ the shock boofers borkf smol borking doggo with a long snoot for pats, fluffer stop it fren many
1313+ pats, doing me a frighten mlem ur givin me a spook. Stop it fren smol wow such tempt blep long
1414+ woofer boofers, lotsa pats shooberino doge. corgo maximum borkdrive shibe. Many pats shoob
1515+ heckin good boys I am bekom fat woofer, sub woofer long woofer. Very taste wow boof you are
1616+ doing me a frighten very good spot boofers, stop it fren mlem. Length boy lotsa pats wow very
1717+ biscit, blop. Snoot doggo length boy blep, length boy doing me a frighten. Big ol smol very
1818+ taste wow adorable doggo, extremely cuuuuuute. borking doggo boofers. Long woofer porgo dat
1919+ tungg tho boofers, blop borkdrive, h*ck mlem. Doing me a frighten long doggo blep such treat,
2020+ adorable doggo smol. Such treat smol long bois most angery pupper I have ever seen, big ol
2121+ pupper. Tungg much ruin diet fluffer shooberino blep aqua doggo, very taste wow very good spot
2222+ aqua doggo big ol pupper pupper, long doggo very taste wow borking doggo puggo. Much ruin diet
2323+ corgo you are doing me a frighten doing me a frighten, pupperino. Tungg waggy wags porgo heckin
2424+ angery woofer ruff smol borking doggo with a long snoot for pats I am bekom fat, noodle horse
2525+ thicc porgo many pats very hand that feed shibe, boof stop it fren heckin good boys and girls
2626+ length boy super chub. Blop long water shoob puggorino yapper borkf, long woofer blep. I am
2727+ bekom fat aqua doggo heck blep doggorino most angery pupper I have ever seen, pupper shoob
2828+ floofs. Heckin angery woofer very jealous pupper I am bekom fat doggorino, porgo. Aqua doggo
2929+ length boy ruff long bois shooberino, dat tungg tho very taste wow pupper. Clouds many pats doge
3030+ heckin snoot, maximum borkdrive wow such tempt you are doin me a concern. Corgo puggorino smol
3131+ borking doggo with a long snoot for pats super chub, fat boi h*ck. Dat tungg tho shoob much ruin
3232+ diet very jealous pupper, floofs shibe he made many woofs woofer, heckin good boys pupperino.`;
3333+</script>
3434+3535+<ScrollArea
3636+ 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"
3737+>
3838+ {content}
3939+</ScrollArea>
···11+# Sidebar
22+33+## Example
44+55+For an example see the Sidebar at the side of this page.
66+77+## Usage
88+99+```svelte
1010+<script>
1111+ import { Sidebar } from '@foxui/core';
1212+</script>
1313+1414+<Sidebar>
1515+ <div>
1616+ <div>Home</div>
1717+ <div>Settings</div>
1818+ <div>Profile</div>
1919+ </div>
2020+</Sidebar>
2121+2222+<!-- to show mobile version add a popovertarget to a button -->
2323+<Button class="block lg:hidden" popovertarget="mobile-menu">
2424+ Menu
2525+</Button>
2626+```