Added accordion

This commit is contained in:
Lucas Oliveira 2025-09-18 17:18:41 -03:00
parent facbb76171
commit 5456ae396f
4 changed files with 280 additions and 129 deletions

View file

@ -0,0 +1,58 @@
"use client";
import * as AccordionPrimitive from "@radix-ui/react-accordion";
import { ChevronDown } from "lucide-react";
import * as React from "react";
import { cn } from "@/lib/utils";
const Accordion = AccordionPrimitive.Root;
const AccordionItem = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
>(({ className, ...props }, ref) => (
<AccordionPrimitive.Item
ref={ref}
className={cn("border rounded-md", className)}
{...props}
/>
));
AccordionItem.displayName = "AccordionItem";
const AccordionTrigger = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Trigger>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger
ref={ref}
className={cn(
"flex flex-1 items-center p-4 py-2.5 gap-2 font-medium !text-mmd text-muted-foreground transition-all [&[data-state=open]>svg]:rotate-180",
className,
)}
{...props}
>
<ChevronDown className="h-3.5 w-3.5 shrink-0 transition-transform duration-200" />
{children}
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
));
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
const AccordionContent = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Content
ref={ref}
className="overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
{...props}
>
<div className={cn("p-4 pt-2", className)}>{children}</div>
</AccordionPrimitive.Content>
));
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };

View file

@ -10,6 +10,7 @@
"dependencies": { "dependencies": {
"@microsoft/mgt-components": "^4.6.0", "@microsoft/mgt-components": "^4.6.0",
"@microsoft/mgt-msal2-provider": "^4.6.0", "@microsoft/mgt-msal2-provider": "^4.6.0",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-avatar": "^1.1.10", "@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-collapsible": "^1.1.11", "@radix-ui/react-collapsible": "^1.1.11",
@ -19,6 +20,7 @@
"@radix-ui/react-navigation-menu": "^1.2.13", "@radix-ui/react-navigation-menu": "^1.2.13",
"@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-popover": "^1.1.15",
"@radix-ui/react-select": "^2.2.5", "@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-switch": "^1.2.5",
@ -1215,6 +1217,37 @@
"integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@radix-ui/react-accordion": {
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz",
"integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==",
"license": "MIT",
"dependencies": {
"@radix-ui/primitive": "1.1.3",
"@radix-ui/react-collapsible": "1.1.12",
"@radix-ui/react-collection": "1.1.7",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
"@radix-ui/react-id": "1.1.1",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-controllable-state": "1.2.2"
},
"peerDependencies": {
"@types/react": "*",
"@types/react-dom": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"@types/react-dom": {
"optional": true
}
}
},
"node_modules/@radix-ui/react-arrow": { "node_modules/@radix-ui/react-arrow": {
"version": "1.1.7", "version": "1.1.7",
"resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz",
@ -1859,6 +1892,29 @@
} }
} }
}, },
"node_modules/@radix-ui/react-separator": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz",
"integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-primitive": "2.1.3"
},
"peerDependencies": {
"@types/react": "*",
"@types/react-dom": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"@types/react-dom": {
"optional": true
}
}
},
"node_modules/@radix-ui/react-slider": { "node_modules/@radix-ui/react-slider": {
"version": "1.3.6", "version": "1.3.6",
"resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz",

View file

@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"@microsoft/mgt-components": "^4.6.0", "@microsoft/mgt-components": "^4.6.0",
"@microsoft/mgt-msal2-provider": "^4.6.0", "@microsoft/mgt-msal2-provider": "^4.6.0",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-avatar": "^1.1.10", "@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-collapsible": "^1.1.11", "@radix-ui/react-collapsible": "^1.1.11",
@ -20,6 +21,7 @@
"@radix-ui/react-navigation-menu": "^1.2.13", "@radix-ui/react-navigation-menu": "^1.2.13",
"@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-popover": "^1.1.15",
"@radix-ui/react-select": "^2.2.5", "@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.5", "@radix-ui/react-switch": "^1.2.5",

View file

@ -17,132 +17,167 @@ const config = {
container: { container: {
center: true, center: true,
screens: { screens: {
"2xl": "1400px", '2xl': '1400px',
"3xl": "1500px", '3xl': '1500px'
}, }
}, },
extend: { extend: {
screens: { screens: {
xl: "1200px", xl: '1200px',
"2xl": "1400px", '2xl': '1400px',
"3xl": "1500px", '3xl': '1500px'
}, },
keyframes: { keyframes: {
overlayShow: { overlayShow: {
from: { opacity: 0 }, from: {
to: { opacity: 1 }, opacity: 0
},
to: {
opacity: 1
}
}, },
contentShow: { contentShow: {
from: { from: {
opacity: 0, opacity: 0,
transform: "translate(-50%, -50%) scale(0.95)", transform: 'translate(-50%, -50%) scale(0.95)',
clipPath: "inset(50% 0)", clipPath: 'inset(50% 0)'
}, },
to: { to: {
opacity: 1, opacity: 1,
transform: "translate(-50%, -50%) scale(1)", transform: 'translate(-50%, -50%) scale(1)',
clipPath: "inset(0% 0)", clipPath: 'inset(0% 0)'
}, }
}, },
wiggle: { wiggle: {
"0%, 100%": { transform: "scale(100%)" }, '0%, 100%': {
"50%": { transform: "scale(120%)" }, transform: 'scale(100%)'
}, },
'50%': {
transform: 'scale(120%)'
}
},
'accordion-down': {
from: {
height: '0'
},
to: {
height: 'var(--radix-accordion-content-height)'
}
},
'accordion-up': {
from: {
height: 'var(--radix-accordion-content-height)'
},
to: {
height: '0'
}
}
}, },
animation: { animation: {
overlayShow: "overlayShow 400ms cubic-bezier(0.16, 1, 0.3, 1)", overlayShow: 'overlayShow 400ms cubic-bezier(0.16, 1, 0.3, 1)',
contentShow: "contentShow 400ms cubic-bezier(0.16, 1, 0.3, 1)", contentShow: 'contentShow 400ms cubic-bezier(0.16, 1, 0.3, 1)',
wiggle: "wiggle 150ms ease-in-out 1", wiggle: 'wiggle 150ms ease-in-out 1',
'accordion-down': 'accordion-down 0.2s ease-out',
'accordion-up': 'accordion-up 0.2s ease-out'
}, },
colors: { colors: {
border: "hsl(var(--border))", border: 'hsl(var(--border))',
input: "hsl(var(--input))", input: 'hsl(var(--input))',
ring: "hsl(var(--ring))", ring: 'hsl(var(--ring))',
background: "hsl(var(--background))", background: 'hsl(var(--background))',
foreground: "hsl(var(--foreground))", foreground: 'hsl(var(--foreground))',
primary: { primary: {
DEFAULT: "hsl(var(--primary))", DEFAULT: 'hsl(var(--primary))',
foreground: "hsl(var(--primary-foreground))", foreground: 'hsl(var(--primary-foreground))',
hover: "hsl(var(--primary-hover))", hover: 'hsl(var(--primary-hover))'
}, },
secondary: { secondary: {
DEFAULT: "hsl(var(--secondary))", DEFAULT: 'hsl(var(--secondary))',
foreground: "hsl(var(--secondary-foreground))", foreground: 'hsl(var(--secondary-foreground))',
hover: "hsl(var(--secondary-hover))", hover: 'hsl(var(--secondary-hover))'
}, },
destructive: { destructive: {
DEFAULT: "hsl(var(--destructive))", DEFAULT: 'hsl(var(--destructive))',
foreground: "hsl(var(--destructive-foreground))", foreground: 'hsl(var(--destructive-foreground))'
}, },
muted: { muted: {
DEFAULT: "hsl(var(--muted))", DEFAULT: 'hsl(var(--muted))',
foreground: "hsl(var(--muted-foreground))", foreground: 'hsl(var(--muted-foreground))'
}, },
accent: { accent: {
DEFAULT: "hsl(var(--accent))", DEFAULT: 'hsl(var(--accent))',
foreground: "hsl(var(--accent-foreground))", foreground: 'hsl(var(--accent-foreground))'
}, },
"accent-emerald-foreground": { 'accent-emerald-foreground': {
DEFAULT: "hsl(var(--accent-emerald-foreground))", DEFAULT: 'hsl(var(--accent-emerald-foreground))'
}, },
"accent-pink-foreground": { 'accent-pink-foreground': {
DEFAULT: "hsl(var(--accent-pink-foreground))", DEFAULT: 'hsl(var(--accent-pink-foreground))'
}, },
popover: { popover: {
DEFAULT: "hsl(var(--popover))", DEFAULT: 'hsl(var(--popover))',
foreground: "hsl(var(--popover-foreground))", foreground: 'hsl(var(--popover-foreground))'
}, },
card: { card: {
DEFAULT: "hsl(var(--card))", DEFAULT: 'hsl(var(--card))',
foreground: "hsl(var(--card-foreground))", foreground: 'hsl(var(--card-foreground))'
}, },
"status-blue": "var(--status-blue)", 'status-blue': 'var(--status-blue)',
"status-green": "var(--status-green)", 'status-green': 'var(--status-green)',
"status-red": "var(--status-red)", 'status-red': 'var(--status-red)',
"status-yellow": "var(--status-yellow)", 'status-yellow': 'var(--status-yellow)',
"component-icon": "var(--component-icon)", 'component-icon': 'var(--component-icon)',
"flow-icon": "var(--flow-icon)", 'flow-icon': 'var(--flow-icon)',
"placeholder-foreground": "hsl(var(--placeholder-foreground))", 'placeholder-foreground': 'hsl(var(--placeholder-foreground))',
"datatype-blue": { 'datatype-blue': {
DEFAULT: "hsl(var(--datatype-blue))", DEFAULT: 'hsl(var(--datatype-blue))',
foreground: "hsl(var(--datatype-blue-foreground))", foreground: 'hsl(var(--datatype-blue-foreground))'
}, },
"datatype-yellow": { 'datatype-yellow': {
DEFAULT: "hsl(var(--datatype-yellow))", DEFAULT: 'hsl(var(--datatype-yellow))',
foreground: "hsl(var(--datatype-yellow-foreground))", foreground: 'hsl(var(--datatype-yellow-foreground))'
}, },
"datatype-red": { 'datatype-red': {
DEFAULT: "hsl(var(--datatype-red))", DEFAULT: 'hsl(var(--datatype-red))',
foreground: "hsl(var(--datatype-red-foreground))", foreground: 'hsl(var(--datatype-red-foreground))'
}, },
"datatype-emerald": { 'datatype-emerald': {
DEFAULT: "hsl(var(--datatype-emerald))", DEFAULT: 'hsl(var(--datatype-emerald))',
foreground: "hsl(var(--datatype-emerald-foreground))", foreground: 'hsl(var(--datatype-emerald-foreground))'
}, },
"datatype-violet": { 'datatype-violet': {
DEFAULT: "hsl(var(--datatype-violet))", DEFAULT: 'hsl(var(--datatype-violet))',
foreground: "hsl(var(--datatype-violet-foreground))", foreground: 'hsl(var(--datatype-violet-foreground))'
}, },
warning: { warning: {
DEFAULT: "hsl(var(--warning))", DEFAULT: 'hsl(var(--warning))',
foreground: "hsl(var(--warning-foreground))", foreground: 'hsl(var(--warning-foreground))'
}, }
}, },
borderRadius: { borderRadius: {
lg: "var(--radius)", lg: 'var(--radius)',
md: "calc(var(--radius) - 2px)", md: 'calc(var(--radius) - 2px)',
sm: "calc(var(--radius) - 4px)", sm: 'calc(var(--radius) - 4px)'
}, },
fontFamily: { fontFamily: {
sans: ["var(--font-sans)", ...fontFamily.sans], sans: [
mono: ["var(--font-mono)", ...fontFamily.mono], 'var(--font-sans)',
chivo: ["var(--font-chivo)", ...fontFamily.sans], ...fontFamily.sans
],
mono: [
'var(--font-mono)',
...fontFamily.mono
],
chivo: [
'var(--font-chivo)',
...fontFamily.sans
]
}, },
fontSize: { fontSize: {
xxs: "11px", xxs: '11px',
mmd: "13px", mmd: '13px'
}, }
}, }
}, },
plugins: [ plugins: [
tailwindcssAnimate, tailwindcssAnimate,