diff options
| author | Murillo Pinheiro de Oliveira <[email protected]> | 2024-02-06 23:41:43 -0300 |
|---|---|---|
| committer | Murillo Pinheiro de Oliveira <[email protected]> | 2024-02-06 23:41:43 -0300 |
| commit | a02ea8e85d789d5acca9922b61222233bbc09ec6 (patch) | |
| tree | e89f53936e861bf50e8a7503c75723778570b538 /src/lib | |
| parent | 7e33d06f2952f64815d8c7669f0f057cde20d280 (diff) | |
| download | coinos-ui-a02ea8e85d789d5acca9922b61222233bbc09ec6.tar.gz coinos-ui-a02ea8e85d789d5acca9922b61222233bbc09ec6.zip | |
layout fixes
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/shadcn/components/ui/accordion/accordion-content.svelte | 22 | ||||
| -rw-r--r-- | src/lib/shadcn/components/ui/accordion/accordion-item.svelte | 11 | ||||
| -rw-r--r-- | src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte | 22 | ||||
| -rw-r--r-- | src/lib/shadcn/components/ui/accordion/index.js | 16 | ||||
| -rw-r--r-- | src/lib/shadcn/components/ui/separator/index.js | 6 | ||||
| -rw-r--r-- | src/lib/shadcn/components/ui/separator/separator.svelte | 19 | ||||
| -rw-r--r-- | src/lib/shadcn/utils.js | 48 | ||||
| -rw-r--r-- | src/lib/utils.js | 2 |
8 files changed, 145 insertions, 1 deletions
diff --git a/src/lib/shadcn/components/ui/accordion/accordion-content.svelte b/src/lib/shadcn/components/ui/accordion/accordion-content.svelte new file mode 100644 index 00000000..14328e88 --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/accordion-content.svelte @@ -0,0 +1,22 @@ +<script> + import { Accordion as AccordionPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + import { slide } from "svelte/transition"; + let className = undefined; + export let transition = slide; + export let transitionConfig = { + duration: 200, + }; + export { className as class }; +</script> + +<AccordionPrimitive.Content + class={cn("overflow-hidden text-sm transition-all", className)} + {transition} + {transitionConfig} + {...$$restProps} +> + <div class="pb-4 pt-0"> + <slot /> + </div> +</AccordionPrimitive.Content> diff --git a/src/lib/shadcn/components/ui/accordion/accordion-item.svelte b/src/lib/shadcn/components/ui/accordion/accordion-item.svelte new file mode 100644 index 00000000..b0887d7e --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/accordion-item.svelte @@ -0,0 +1,11 @@ +<script> + import { Accordion as AccordionPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let value; + export { className as class }; +</script> + +<AccordionPrimitive.Item {value} class={cn("border-b", className)} {...$$restProps}> + <slot /> +</AccordionPrimitive.Item> diff --git a/src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte b/src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte new file mode 100644 index 00000000..8acf4675 --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte @@ -0,0 +1,22 @@ +<script> + import { Accordion as AccordionPrimitive } from "bits-ui"; + import { ChevronDown } from "lucide-svelte"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let level = 3; + export { className as class }; +</script> + +<AccordionPrimitive.Header {level} class="flex"> + <AccordionPrimitive.Trigger + class={cn( + "flex flex-1 items-center justify-between py-2 font-medium transition-all [&[data-state=open]>svg]:rotate-180", + className + )} + {...$$restProps} + on:click + > + <slot /> + <ChevronDown class="h-4 w-4 transition-transform duration-200" /> + </AccordionPrimitive.Trigger> +</AccordionPrimitive.Header> diff --git a/src/lib/shadcn/components/ui/accordion/index.js b/src/lib/shadcn/components/ui/accordion/index.js new file mode 100644 index 00000000..d75ea273 --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/index.js @@ -0,0 +1,16 @@ +import { Accordion as AccordionPrimitive } from "bits-ui"; +import Content from "./accordion-content.svelte"; +import Item from "./accordion-item.svelte"; +import Trigger from "./accordion-trigger.svelte"; +const Root = AccordionPrimitive.Root; +export { + Root, + Content, + Item, + Trigger, + // + Root as Accordion, + Content as AccordionContent, + Item as AccordionItem, + Trigger as AccordionTrigger, +}; diff --git a/src/lib/shadcn/components/ui/separator/index.js b/src/lib/shadcn/components/ui/separator/index.js new file mode 100644 index 00000000..073c5c4c --- /dev/null +++ b/src/lib/shadcn/components/ui/separator/index.js @@ -0,0 +1,6 @@ +import Root from "./separator.svelte"; +export { + Root, + // + Root as Separator, +}; diff --git a/src/lib/shadcn/components/ui/separator/separator.svelte b/src/lib/shadcn/components/ui/separator/separator.svelte new file mode 100644 index 00000000..b07c93ea --- /dev/null +++ b/src/lib/shadcn/components/ui/separator/separator.svelte @@ -0,0 +1,19 @@ +<script> + import { Separator as SeparatorPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let orientation = "horizontal"; + export let decorative = undefined; + export { className as class }; +</script> + +<SeparatorPrimitive.Root + class={cn( + "shrink-0 bg-border", + orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", + className + )} + {orientation} + {decorative} + {...$$restProps} +/> diff --git a/src/lib/shadcn/utils.js b/src/lib/shadcn/utils.js new file mode 100644 index 00000000..08747b8f --- /dev/null +++ b/src/lib/shadcn/utils.js @@ -0,0 +1,48 @@ +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; +import { cubicOut } from "svelte/easing"; + +export function cn(...inputs) { + return twMerge(clsx(inputs)); +} + +export const flyAndScale = ( + node, + params = { y: -8, x: 0, start: 0.95, duration: 150 } +) => { + const style = getComputedStyle(node); + const transform = style.transform === "none" ? "" : style.transform; + + const scaleConversion = (valueA, scaleA, scaleB) => { + const [minA, maxA] = scaleA; + const [minB, maxB] = scaleB; + + const percentage = (valueA - minA) / (maxA - minA); + const valueB = percentage * (maxB - minB) + minB; + + return valueB; + }; + + const styleToString = (style) => { + return Object.keys(style).reduce((str, key) => { + if (style[key] === undefined) return str; + return str + `${key}:${style[key]};`; + }, ""); + }; + + return { + duration: params.duration ?? 200, + delay: 0, + css: (t) => { + const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); + const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); + const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); + + return styleToString({ + transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, + opacity: t + }); + }, + easing: cubicOut + }; +}; diff --git a/src/lib/utils.js b/src/lib/utils.js index 738413bf..434ca268 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -300,4 +300,4 @@ export let isLiquid = (text) => (text.startsWith("ert1q") && text.length === 43) || (text.startsWith("ex1q") && text.length === 42) || text.startsWith("el1qq") || - text.startsWith("lq1qq"); + text.startsWith("lq1qq");
\ No newline at end of file |
