@onnechat/ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/icon/sidebar-toggle.tsx","../src/components/icon/sidebar-toggled.tsx","../src/components/icon/custom-icons.tsx","../src/components/icon/variants.ts","../src/components/icon/brand/stripe.tsx","../src/components/icon/brand/index.tsx","../src/components/icon/nucleo-registry.ts","../src/components/icon/social/apple.tsx","../src/components/icon/social/discord.tsx","../src/components/icon/social/facebook.tsx","../src/components/icon/social/google.tsx","../src/components/icon/social/instagram.tsx","../src/components/icon/social/linkedin.tsx","../src/components/icon/social/messenger.tsx","../src/lib/cn.ts","../src/components/icon/social/whatsapp.tsx","../src/components/icon/social/x.tsx","../src/components/icon/social/youtube.tsx","../src/components/icon/social/index.tsx","../src/components/icon/index.tsx","../src/components/layouts/app-shell/announcement-banner.tsx","../src/hooks/use-is-client.ts","../src/components/ui/button/button.tsx","../src/hooks/use-haptics.tsx","../src/lib/slot.tsx","../src/components/ui/loader/loader.tsx","../src/components/layouts/app-shell/app-shell.tsx","../src/constants/animations.ts","../src/components/ui/sidebar/sidebar.tsx","../src/hooks/use-mobile.ts","../src/components/ui/input/input.tsx","../src/components/ui/separator/separator.tsx","../src/components/ui/sheet/sheet.tsx","../src/components/ui/skeleton/skeleton.tsx","../src/components/ui/tooltip/tooltip.tsx","../src/components/internal/accordion/accordion.tsx","../src/components/ui/accordion/accordion.tsx","../src/components/ui/action-group/action-group.tsx","../src/components/ui/dropdown-menu/dropdown-menu.tsx","../src/components/ui/drawer/drawer.tsx","../src/components/ui/dropdown-menu/keyboard-shortcut.tsx","../src/components/ui/alert/alert.tsx","../src/components/ui/badge/badge.tsx","../src/components/ui/brand-domain-input/index.tsx","../src/components/ui/breadcrumb/breadcrumb.tsx","../src/components/ui/card/card.tsx","../src/components/ui/chat-preview/index.tsx","../src/components/ui/chat-preview/chat.tsx","../src/components/ui/logo/onne/logo.tsx","../src/components/ui/logo/onnebook/logo.tsx","../src/components/ui/shimmer-text/shimmer-text.tsx","../src/components/ui/checkbox/checkbox.tsx","../src/components/ui/datatable/datatable.tsx","../src/hooks/use-data-table.ts","../src/components/ui/table/data-table.tsx","../src/components/ui/table/table.tsx","../src/components/ui/select/select.tsx","../src/components/ui/table/data-table-pagination.tsx","../src/components/ui/table/data-table-view-options.tsx","../src/components/ui/table/data-table-toolbar.tsx","../src/components/blocks/devices/safari.tsx","../src/components/blocks/devices/index.tsx","../src/components/ui/dialog/dialog.tsx","../src/components/internal/dialog/dialog.tsx","../src/components/ui/emoji-picker/emoji-picker.tsx","../src/components/ui/empty-state/empty-state.tsx","../src/components/ui/hover-card/hover-card.tsx","../src/components/ui/input-group/input-group.tsx","../src/components/ui/input-currency/index.tsx","../src/hooks/use-currency-input.ts","../src/hooks/use-element-size.ts","../src/components/ui/input-phone/index.tsx","../src/hooks/use-phone-input.ts","../src/components/ui/input-phone/masks.ts","../src/components/icon/flag.tsx","../src/components/icon/flag-registry.ts","../src/components/ui/input-time/input-time.tsx","../src/components/ui/input-time-picker/input-time-picker.tsx","../src/components/ui/input-time-unit/input-time-unit.tsx","../src/components/ui/kbd/kbd.tsx","../src/components/ui/language-switch/index.tsx","../src/components/blocks/marquee/marquee.tsx","../src/components/blocks/network-status/network-status.tsx","../src/components/ui/popover/popover.tsx","../src/components/ui/progress/progress.tsx","../src/components/ui/radio-group/radio-group.tsx","../src/components/ui/select-infinite-scroll/select-infinite-scroll.tsx","../src/hooks/use-infinite-custom-query.ts","../src/components/ui/select-multi/select-multi.tsx","../src/components/ui/table/data-table-column-header.tsx","../src/components/ui/tabs/tabs.tsx","../src/components/ui/text/cell.tsx","../src/components/ui/text/phone.tsx","../src/config/locales.ts","../src/components/ui/input-phone/dial-codes.ts","../src/components/ui/text/index.tsx","../src/components/ui/textarea/textarea.tsx","../src/components/ui/toast/toast.tsx","../src/config/themes.ts","../src/components/blocks/tracker/tracker.tsx","../src/components/blocks/video-player/video-player.tsx","../src/components/ui/avatar/avatar.tsx","../src/components/ui/calendar/calendar.tsx","../src/components/ui/chart/chart.tsx","../src/components/ui/collapsible/collapsible.tsx","../src/components/ui/command/command.tsx","../src/components/internal/image-upload/index.tsx","../src/components/ui/label/label.tsx","../src/components/ui/scroll-area/scroll-area.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\n\nimport { motion } from 'motion/react'\n\nexport function SidebarToggle(props: React.ComponentProps<typeof motion.svg>) {\n return (\n <motion.svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M5 14L5 6C5 5.44772 5.44772 5 6 5L8 5C8.55228 5 9 5.44772 9 6L9 14C9 14.5523 8.55228 15 8 15L6 15C5.44772 15 5 14.5523 5 14Z\"\n fill=\"currentColor\"\n />\n\n <rect\n x=\"2\"\n y=\"2\"\n rx=\"4\"\n width=\"16\"\n height=\"16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </motion.svg>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { motion } from 'motion/react'\n\nexport function SidebarToggled(props: React.ComponentProps<typeof motion.svg>) {\n return (\n <motion.svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M5 14L5 6C5 5.44772 5.44772 5 6 5L8 5C8.55228 5 9 5.44772 9 6L9 14C9 14.5523 8.55228 15 8 15L6 15C5.44772 15 5 14.5523 5 14Z\"\n fill=\"currentColor\"\n style={{ clipPath: 'polygon(0 0, 60% 0, 60% 100%, 0 100%)' }}\n />\n\n <rect\n x=\"2\"\n y=\"2\"\n width=\"16\"\n height=\"16\"\n rx=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </motion.svg>\n )\n}\n","import { SidebarToggle } from './sidebar-toggle'\nimport { SidebarToggled } from './sidebar-toggled'\n\nconst customIcons = {\n SidebarToggle,\n SidebarToggled,\n}\n\nexport default customIcons\n","import * as NucleoFill from 'nucleo-ui-fill-18'\nimport * as NucleoDuo from 'nucleo-ui-fill-duo-18'\n\nimport { BrandIcon } from './brand'\nimport customIcons from './custom-icons'\nimport { buildNucleoRegistry, type NucleoExportToName } from './nucleo-registry'\nimport { SocialIcon } from './social'\n\nexport const fillIcons = buildNucleoRegistry(NucleoFill, 'Fill18')\nexport const duoIcons = buildNucleoRegistry(NucleoDuo, 'FillDuo18')\n\nexport const iconVariants = {\n fill: fillIcons,\n duo: duoIcons,\n brand: BrandIcon,\n social: SocialIcon,\n custom: customIcons,\n} as const\n\nexport type IconVariant = keyof typeof iconVariants\n\ntype NucleoFillExports = keyof typeof NucleoFill\ntype NucleoDuoExports = keyof typeof NucleoDuo\n\nexport type FillIconName = NucleoExportToName<\n Extract<NucleoFillExports, `Icon${string}Fill18`>,\n 'Fill18'\n>\n\nexport type DuoIconName = NucleoExportToName<\n Extract<NucleoDuoExports, `Icon${string}FillDuo18`>,\n 'FillDuo18'\n>\n\nexport type BrandIconName = keyof typeof BrandIcon\nexport type SocialIconName = keyof typeof SocialIcon\nexport type CustomIconName = keyof typeof customIcons\n","import type { SVGProps } from 'react'\n\n/**\n * @description Stripe original colors\n * #635BFF\n */\n\ntype StripeProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Stripe = ({ original = false, ...props }: StripeProps) => (\n <svg {...props} viewBox=\"0 0 512 214\">\n <path\n className={original ? 'fill-[#635BFF]' : 'fill-current'}\n d=\"M512 110.08c0-36.409-17.636-65.138-51.342-65.138c-33.85 0-54.33 28.73-54.33 64.854c0 42.808 24.179 64.426 58.88 64.426c16.925 0 29.725-3.84 39.396-9.244v-28.445c-9.67 4.836-20.764 7.823-34.844 7.823c-13.796 0-26.027-4.836-27.591-21.618h69.547c0-1.85.284-9.245.284-12.658m-70.258-13.511c0-16.071 9.814-22.756 18.774-22.756c8.675 0 17.92 6.685 17.92 22.756zm-90.31-51.627c-13.939 0-22.899 6.542-27.876 11.094l-1.85-8.818h-31.288v165.83l35.555-7.537l.143-40.249c5.12 3.698 12.657 8.96 25.173 8.96c25.458 0 48.64-20.48 48.64-65.564c-.142-41.245-23.609-63.716-48.498-63.716m-8.534 97.991c-8.391 0-13.37-2.986-16.782-6.684l-.143-52.765c3.698-4.124 8.818-6.968 16.925-6.968c12.942 0 21.902 14.506 21.902 33.137c0 19.058-8.818 33.28-21.902 33.28M241.493 36.551l35.698-7.68V0l-35.698 7.538zm0 10.809h35.698v124.444h-35.698zm-38.257 10.524L200.96 47.36h-30.72v124.444h35.556V87.467c8.39-10.951 22.613-8.96 27.022-7.396V47.36c-4.551-1.707-21.191-4.836-29.582 10.524m-71.112-41.386l-34.702 7.395l-.142 113.92c0 21.05 15.787 36.551 36.836 36.551c11.662 0 20.195-2.133 24.888-4.693V140.8c-4.55 1.849-27.022 8.391-27.022-12.658V77.653h27.022V47.36h-27.022zM35.982 83.484c0-5.546 4.551-7.68 12.09-7.68c10.808 0 24.461 3.272 35.27 9.103V51.484c-11.804-4.693-23.466-6.542-35.27-6.542C19.2 44.942 0 60.018 0 85.192c0 39.252 54.044 32.995 54.044 49.92c0 6.541-5.688 8.675-13.653 8.675c-11.804 0-26.88-4.836-38.827-11.378v33.849c13.227 5.689 26.596 8.106 38.827 8.106c29.582 0 49.92-14.648 49.92-40.106c-.142-42.382-54.329-34.845-54.329-50.774\"\n />\n </svg>\n)\n\nexport { Stripe }\n","import type { SVGProps } from 'react'\n\nimport { Stripe } from './stripe'\n\nexport const BrandIcon = {\n Stripe,\n}\n\nexport type BrandIconProps = {\n original?: boolean\n} & SVGProps<SVGSVGElement>\n","import type { IconProps } from 'nucleo-ui-fill-18'\n\nimport type { ComponentType } from 'react'\n\ntype NucleoModule = Record<string, unknown>\n\nexport function buildNucleoRegistry(\n nucleoModule: NucleoModule,\n suffix: 'Fill18' | 'FillDuo18',\n): Record<string, ComponentType<IconProps>> {\n const registry: Record<string, ComponentType<IconProps>> = {}\n\n for (const exportName of Object.keys(nucleoModule)) {\n if (exportName === 'Icon' || !exportName.endsWith(suffix)) continue\n\n const name = exportName.slice(4, -suffix.length)\n const component = nucleoModule[exportName]\n\n if (typeof component === 'function') {\n registry[name] = component as ComponentType<IconProps>\n }\n }\n\n return registry\n}\n\nexport type NucleoExportToName<\n T extends string,\n TSuffix extends string,\n> = T extends `Icon${infer Name}${TSuffix}` ? Name : never\n","import type { SVGProps } from 'react'\n\n/**\n * @description Apple original colors\n *\n * Light: #000000\n * Dark: #ffffff\n */\n\ntype AppleProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Apple = ({ original = false, ...props }: AppleProps) => (\n <svg {...props} xmlSpace=\"preserve\" viewBox=\"0 0 814 1000\">\n <path\n d=\"M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z\"\n className={original ? 'fill-inverted' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Apple }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Discord original colors\n * #5865F2\n */\n\ntype DiscordProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Discord = ({ original = false, ...props }: DiscordProps) => (\n <svg {...props} viewBox=\"0 0 256 199\" preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M216.856 16.597A208.502 208.502 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046-19.692-2.961-39.203-2.961-58.533 0-1.832-4.4-4.55-9.933-6.846-14.046a207.809 207.809 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161.094 161.094 0 0 0 79.735 175.3a136.413 136.413 0 0 1-21.846-10.632 108.636 108.636 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a131.66 131.66 0 0 0 5.355 4.237 136.07 136.07 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848 21.142-6.58 42.646-16.637 64.815-33.213 5.316-56.288-9.08-105.09-38.056-148.36ZM85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2c12.867 0 23.236 11.804 23.015 26.2.02 14.375-10.148 26.18-23.015 26.18Zm85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2 0 14.375-10.148 26.18-23.015 26.18Z\"\n className={original ? 'fill-[#5865F2]' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Discord }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Facebook original colors\n * #1877F2\n */\n\ntype FacebookProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Facebook = ({ original = false, ...props }: FacebookProps) => (\n <svg {...props} viewBox=\"0 0 36 36\">\n <path\n className={original ? 'fill-[#1877F2]' : 'fill-current'}\n fillRule=\"evenodd\"\n d=\"M15 35.8C6.5 34.3 0 26.9 0 18 0 8.1 8.1 0 18 0s18 8.1 18 18c0 8.9-6.5 16.3-15 17.8l-1-.8h-4l-1 .8z M25 23l.8-5H21v-3.5c0-1.4.5-2.5 2.7-2.5H26V7.4c-1.3-.2-2.7-.4-4-.4-4.1 0-7 2.5-7 7v4h-4.5v5H15v12.7c1 .2 2 .3 3 .3s2-.1 3-.3V23h4z\"\n />\n </svg>\n)\n\nexport { Facebook }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Google original colors\n *\n * Path 1: #4285F4\n * Path 2: #34A853\n * Path 3: #FBBC05\n * Path 4: #EB4335\n *\n */\n\ntype GoogleProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Google = ({ original = false, ...props }: GoogleProps) => (\n <svg {...props} viewBox=\"0 0 256 262\" preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n className={original ? 'fill-[#4285F4]' : 'fill-current'}\n />\n <path\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n className={original ? 'fill-[#34A853]' : 'fill-current'}\n />\n <path\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782\"\n className={original ? 'fill-[#FBBC05]' : 'fill-current'}\n />\n <path\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n className={original ? 'fill-[#EB4335]' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Google }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Instagram original colors\n * #C13584\n */\n\ntype InstagramProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Instagram = ({ original = false, ...props }: InstagramProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n preserveAspectRatio=\"xMidYMid\"\n viewBox=\"0 0 256 256\"\n {...props}\n >\n {/* <circle cx=\"128\" cy=\"128\" r=\"130\" className=\"fill-white\" /> */}\n\n <path\n d=\"M128 23.064c34.177 0 38.225.13 51.722.745 12.48.57 19.258 2.655 23.769 4.408 5.974 2.322 10.238 5.096 14.717 9.575 4.48 4.479 7.253 8.743 9.575 14.717 1.753 4.511 3.838 11.289 4.408 23.768.615 13.498.745 17.546.745 51.723 0 34.178-.13 38.226-.745 51.723-.57 12.48-2.655 19.257-4.408 23.768-2.322 5.974-5.096 10.239-9.575 14.718-4.479 4.479-8.743 7.253-14.717 9.574-4.511 1.753-11.289 3.839-23.769 4.408-13.495.616-17.543.746-51.722.746-34.18 0-38.228-.13-51.723-.746-12.48-.57-19.257-2.655-23.768-4.408-5.974-2.321-10.239-5.095-14.718-9.574-4.479-4.48-7.253-8.744-9.574-14.718-1.753-4.51-3.839-11.288-4.408-23.768-.616-13.497-.746-17.545-.746-51.723 0-34.177.13-38.225.746-51.722.57-12.48 2.655-19.258 4.408-23.769 2.321-5.974 5.095-10.238 9.574-14.717 4.48-4.48 8.744-7.253 14.718-9.575 4.51-1.753 11.288-3.838 23.768-4.408 13.497-.615 17.545-.745 51.723-.745M128 0C93.237 0 88.878.147 75.226.77c-13.625.622-22.93 2.786-31.071 5.95-8.418 3.271-15.556 7.648-22.672 14.764C14.367 28.6 9.991 35.738 6.72 44.155 3.555 52.297 1.392 61.602.77 75.226.147 88.878 0 93.237 0 128c0 34.763.147 39.122.77 52.774.622 13.625 2.785 22.93 5.95 31.071 3.27 8.417 7.647 15.556 14.763 22.672 7.116 7.116 14.254 11.492 22.672 14.763 8.142 3.165 17.446 5.328 31.07 5.95 13.653.623 18.012.77 52.775.77s39.122-.147 52.774-.77c13.624-.622 22.929-2.785 31.07-5.95 8.418-3.27 15.556-7.647 22.672-14.763 7.116-7.116 11.493-14.254 14.764-22.672 3.164-8.142 5.328-17.446 5.95-31.07.623-13.653.77-18.012.77-52.775s-.147-39.122-.77-52.774c-.622-13.624-2.786-22.929-5.95-31.07-3.271-8.418-7.648-15.556-14.764-22.672C227.4 14.368 220.262 9.99 211.845 6.72c-8.142-3.164-17.447-5.328-31.071-5.95C167.122.147 162.763 0 128 0Zm0 62.27C91.698 62.27 62.27 91.7 62.27 128c0 36.302 29.428 65.73 65.73 65.73 36.301 0 65.73-29.428 65.73-65.73 0-36.301-29.429-65.73-65.73-65.73Zm0 108.397c-23.564 0-42.667-19.103-42.667-42.667S104.436 85.333 128 85.333s42.667 19.103 42.667 42.667-19.103 42.667-42.667 42.667Zm83.686-110.994c0 8.484-6.876 15.36-15.36 15.36-8.483 0-15.36-6.876-15.36-15.36 0-8.483 6.877-15.36 15.36-15.36 8.484 0 15.36 6.877 15.36 15.36Z\"\n className={original ? 'fill-[#C13584]' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Instagram }\n","import type { SVGProps } from 'react'\n\n/**\n * @description LinkedIn original colors\n * #0A66C2\n */\n\ntype LinkedInProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst LinkedIn = ({ original = false, ...props }: LinkedInProps) => (\n <svg {...props} preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 256 256\">\n <path\n className={original ? 'fill-[#0A66C2]' : 'fill-current'}\n d=\"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453\"\n />\n </svg>\n)\n\nexport { LinkedIn }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Messenger original colors\n * #0084ff\n */\n\ntype MessengerProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Messenger = ({ original = false, ...props }: MessengerProps) => (\n <svg\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n preserveAspectRatio=\"xMidYMid\"\n {...props}\n >\n <path\n className={original ? 'fill-[#0084ff]' : 'fill-current'}\n fillRule=\"evenodd\"\n d=\"M128 0C55.894 0 0 52.818 0 124.16c0 37.317 15.293 69.562 40.2 91.835 2.09 1.871 3.352 4.493 3.438 7.298l.697 22.77c.223 7.262 7.724 11.988 14.37 9.054L84.111 243.9a10.218 10.218 0 0 1 6.837-.501c11.675 3.21 24.1 4.92 37.052 4.92 72.106 0 128-52.818 128-124.16S200.106 0 128 0ZM51.137 160.47l37.6-59.653c5.98-9.49 18.788-11.853 27.762-5.123l29.905 22.43a7.68 7.68 0 0 0 9.252-.027l40.388-30.652c5.39-4.091 12.428 2.36 8.82 8.085l-37.6 59.654c-5.981 9.489-18.79 11.852-27.763 5.122l-29.906-22.43a7.68 7.68 0 0 0-9.25.027l-40.39 30.652c-5.39 4.09-12.427-2.36-8.818-8.085Z\"\n />\n\n <path\n className={original ? 'fill-white' : 'fill-transparent'}\n d=\"m51.137 160.47 37.6-59.653c5.98-9.49 18.788-11.853 27.762-5.123l29.905 22.43a7.68 7.68 0 0 0 9.252-.027l40.388-30.652c5.39-4.091 12.428 2.36 8.82 8.085l-37.6 59.654c-5.981 9.489-18.79 11.852-27.763 5.122l-29.906-22.43a7.68 7.68 0 0 0-9.25.027l-40.39 30.652c-5.39 4.09-12.427-2.36-8.818-8.085Z\"\n />\n </svg>\n)\n\nexport { Messenger }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import type { SVGProps } from 'react'\n\nimport { cn } from '@/lib/cn'\n\n/**\n * @description WhatsApp original colors\n *\n * Light: #00E676\n * Dark: #144d37\n */\n\ntype WhatsAppProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst WhatsApp = ({ original = false, ...props }: WhatsAppProps) => {\n const pathFill = !props.className?.includes('fill-') && 'fill-transparent'\n\n return (\n <svg {...props} viewBox=\"0 0 256 259\" preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"m67.663 221.823 4.185 2.093c17.44 10.463 36.971 15.346 56.503 15.346 61.385 0 111.609-50.224 111.609-111.609 0-29.297-11.859-57.897-32.785-78.824-20.927-20.927-48.83-32.785-78.824-32.785-61.385 0-111.61 50.224-110.912 112.307 0 20.926 6.278 41.156 16.741 58.594l2.79 4.186-11.16 41.156 41.853-10.464Z\"\n className={cn(original ? 'fill-[#00E676]' : pathFill)}\n />\n <path\n d=\"M219.033 37.668C195.316 13.254 162.531 0 129.048 0 57.898 0 .698 57.897 1.395 128.35c0 22.322 6.278 43.947 16.742 63.478L0 258.096l67.663-17.439c18.834 10.464 39.76 15.347 60.688 15.347 70.453 0 127.653-57.898 127.653-128.35 0-34.181-13.254-66.269-36.97-89.986ZM129.048 234.38c-18.834 0-37.668-4.882-53.712-14.648l-4.185-2.093-40.458 10.463 10.463-39.76-2.79-4.186C7.673 134.63 22.322 69.058 72.546 38.365c50.224-30.692 115.097-16.043 145.79 34.181 30.692 50.224 16.043 115.097-34.18 145.79-16.045 10.463-35.576 16.043-55.108 16.043Zm61.385-77.428-7.673-3.488s-11.16-4.883-18.136-8.371c-.698 0-1.395-.698-2.093-.698-2.093 0-3.488.698-4.883 1.396 0 0-.697.697-10.463 11.858-.698 1.395-2.093 2.093-3.488 2.093h-.698c-.697 0-2.092-.698-2.79-1.395l-3.488-1.395c-7.673-3.488-14.648-7.674-20.229-13.254-1.395-1.395-3.488-2.79-4.883-4.185-4.883-4.883-9.766-10.464-13.253-16.742l-.698-1.395c-.697-.698-.697-1.395-1.395-2.79 0-1.395 0-2.79.698-3.488 0 0 2.79-3.488 4.882-5.58 1.396-1.396 2.093-3.488 3.488-4.883 1.395-2.093 2.093-4.883 1.395-6.976-.697-3.488-9.068-22.322-11.16-26.507-1.396-2.093-2.79-2.79-4.883-3.488H83.01c-1.396 0-2.79.698-4.186.698l-.698.697c-1.395.698-2.79 2.093-4.185 2.79-1.395 1.396-2.093 2.79-3.488 4.186-4.883 6.278-7.673 13.951-7.673 21.624 0 5.58 1.395 11.161 3.488 16.044l.698 2.093c6.278 13.253 14.648 25.112 25.81 35.575l2.79 2.79c2.092 2.093 4.185 3.488 5.58 5.58 14.649 12.557 31.39 21.625 50.224 26.508 2.093.697 4.883.697 6.976 1.395h6.975c3.488 0 7.673-1.395 10.464-2.79 2.092-1.395 3.487-1.395 4.882-2.79l1.396-1.396c1.395-1.395 2.79-2.092 4.185-3.487 1.395-1.395 2.79-2.79 3.488-4.186 1.395-2.79 2.092-6.278 2.79-9.765v-4.883s-.698-.698-2.093-1.395Z\"\n className={original ? 'fill-white' : 'fill-current'}\n />\n </svg>\n )\n}\n\nexport { WhatsApp }\n","import type { SVGProps } from 'react'\n\n/**\n * @description X (formerly Twitter) original colors\n * #000000\n */\n\ntype XProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst XformerlyTwitter = ({ original = false, ...props }: XProps) => (\n <svg {...props} viewBox=\"0 0 1200 1227\" fill=\"none\">\n <path\n className={original ? 'fill-[#000000]' : 'fill-current'}\n d=\"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z\"\n />\n </svg>\n)\n\nexport { XformerlyTwitter }\n","import type { SVGProps } from 'react'\n\n/**\n * @description YouTube original colors\n * #FF0000\n */\n\ntype YouTubeProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst YouTube = ({ original = false, ...props }: YouTubeProps) => (\n <svg {...props} preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 256 180\">\n <path\n className={original ? 'fill-[#FF0000]' : 'fill-current'}\n fillRule=\"evenodd\"\n d=\"M250.346 28.075A32.18 32.18 0 0 0 227.69 5.418C207.824 0 127.87 0 127.87 0S47.912.164 28.046 5.582A32.18 32.18 0 0 0 5.39 28.24c-6.009 35.298-8.34 89.084.165 122.97a32.18 32.18 0 0 0 22.656 22.657c19.866 5.418 99.822 5.418 99.822 5.418s79.955 0 99.82-5.418a32.18 32.18 0 0 0 22.657-22.657c6.338-35.348 8.291-89.1-.164-123.134Z M102.421 128.06 L168.749 89.642 L102.421 51.224 Z\"\n />\n </svg>\n)\n\nexport { YouTube }\n","import type { SVGProps } from 'react'\n\nimport { Apple } from './apple'\nimport { Discord } from './discord'\nimport { Facebook } from './facebook'\nimport { Google } from './google'\nimport { Instagram } from './instagram'\nimport { LinkedIn } from './linkedin'\nimport { Messenger } from './messenger'\nimport { WhatsApp } from './whatsapp'\nimport { XformerlyTwitter } from './x'\nimport { YouTube } from './youtube'\n\nexport const SocialIcon = {\n Apple,\n Google,\n WhatsApp,\n Facebook,\n Instagram,\n Messenger,\n LinkedIn,\n X: XformerlyTwitter,\n YouTube,\n Discord,\n}\n\nexport type SocialIconProps = {\n original?: boolean\n} & SVGProps<SVGSVGElement>\n","import type { IconProps as NucleoIconProps } from 'nucleo-ui-fill-18'\n\nimport type { ComponentType } from 'react'\n\nimport type { BrandIconProps } from './brand'\nimport customIcons from './custom-icons'\nimport type { SocialIconProps } from './social'\nimport {\n type BrandIconName,\n type CustomIconName,\n type DuoIconName,\n type FillIconName,\n fillIcons,\n type IconVariant,\n iconVariants,\n type SocialIconName,\n} from './variants'\n\nexport type {\n BrandIconName,\n CustomIconName,\n DuoIconName,\n FillIconName,\n IconVariant,\n SocialIconName,\n} from './variants'\n\n/** @deprecated Use `FillIconName` or variant-specific names */\nexport type IconType = FillIconName | CustomIconName\n\n/** SVG props shared by all icon variants (excludes `name` and `variant`). */\nexport type IconSharedProps = Omit<NucleoIconProps, 'name' | 'variant'>\n\nexport type ThemeIcon =\n | FillIconName\n | CustomIconName\n | { variant: 'brand'; name: BrandIconName }\n\ntype FillVariantProps = {\n variant?: 'fill'\n name: FillIconName | CustomIconName\n} & NucleoIconProps\n\ntype DuoVariantProps = {\n variant: 'duo'\n name: DuoIconName\n} & NucleoIconProps\n\ntype BrandVariantProps = {\n variant: 'brand'\n name: BrandIconName\n} & BrandIconProps\n\ntype SocialVariantProps = {\n variant: 'social'\n name: SocialIconName\n} & SocialIconProps\n\ntype CustomVariantProps = {\n variant: 'custom'\n name: CustomIconName\n} & NucleoIconProps\n\nexport type IconProps =\n | FillVariantProps\n | DuoVariantProps\n | BrandVariantProps\n | SocialVariantProps\n | CustomVariantProps\n\nfunction resolveIconComponent(\n variant: IconVariant,\n name: string,\n): ComponentType<NucleoIconProps> | null {\n if (variant === 'fill') {\n return (\n fillIcons[name as FillIconName] ??\n customIcons[name as CustomIconName] ??\n null\n )\n }\n\n const registry = iconVariants[variant]\n const component = registry[name as keyof typeof registry]\n\n return (component as ComponentType<NucleoIconProps>) ?? null\n}\n\nexport function resolveThemeIcon(icon: ThemeIcon | IconType): IconProps {\n if (typeof icon === 'string') {\n return { name: icon }\n }\n\n return icon\n}\n\nexport const Icon = (props: IconProps) => {\n const { name, variant, ...rest } = props\n\n if (!name) return null\n const resolvedVariant: IconVariant =\n variant ?? (name in customIcons ? 'custom' : 'fill')\n\n const IconComponent = resolveIconComponent(resolvedVariant, name)\n if (!IconComponent) return null\n\n return <IconComponent suppressHydrationWarning {...rest} />\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsClient } from '@/hooks/use-is-client'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\n\nexport const ANNOUNCEMENT_TYPES = {\n CRITICAL: 'CRITICAL',\n ERROR: 'ERROR',\n INFO: 'INFO',\n MAINTENANCE: 'MAINTENANCE',\n NEW: 'NEW',\n SALE: 'SALE',\n SUCCESS: 'SUCCESS',\n UPDATE: 'UPDATE',\n WARNING: 'WARNING',\n} as const\n\nexport type AnnouncementType =\n (typeof ANNOUNCEMENT_TYPES)[keyof typeof ANNOUNCEMENT_TYPES]\n\nconst ANNOUNCEMENT_COLORS: Record<\n AnnouncementType,\n { background: string; foreground: string }\n> = {\n [ANNOUNCEMENT_TYPES.NEW]: {\n background: 'var(--color-info)',\n foreground: 'var(--color-info-foreground)',\n },\n [ANNOUNCEMENT_TYPES.SALE]: {\n background: 'var(--color-success)',\n foreground: 'var(--color-success-foreground)',\n },\n [ANNOUNCEMENT_TYPES.WARNING]: {\n background: 'var(--color-warning)',\n foreground: 'var(--color-warning-foreground)',\n },\n [ANNOUNCEMENT_TYPES.INFO]: {\n background: 'var(--color-info)',\n foreground: 'var(--color-info-foreground)',\n },\n [ANNOUNCEMENT_TYPES.SUCCESS]: {\n background: 'var(--color-success)',\n foreground: 'var(--color-success-foreground)',\n },\n [ANNOUNCEMENT_TYPES.ERROR]: {\n background: 'var(--color-destructive)',\n foreground: 'var(--color-destructive-foreground)',\n },\n [ANNOUNCEMENT_TYPES.CRITICAL]: {\n background: 'var(--color-destructive)',\n foreground: 'var(--color-destructive-foreground)',\n },\n [ANNOUNCEMENT_TYPES.MAINTENANCE]: {\n background: 'var(--color-warning)',\n foreground: 'var(--color-warning-foreground)',\n },\n [ANNOUNCEMENT_TYPES.UPDATE]: {\n background: 'var(--color-info)',\n foreground: 'var(--color-info-foreground)',\n },\n}\n\nfunction resolveAnnouncementType(type: string): AnnouncementType {\n if ((Object.values(ANNOUNCEMENT_TYPES) as string[]).includes(type)) {\n return type as AnnouncementType\n }\n\n return ANNOUNCEMENT_TYPES.NEW\n}\n\nconst ANNOUNCEMENT_BANNER_HEIGHT = 40\n\nfunction RoundedCornerTriangle({ className }: { className?: string }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('fill-(--banner)', className)}\n >\n <path d=\"M 0 -1 L 0 12 A 12 12, 0, 0, 1, 12 0 L 12 -1 Z\" />\n </svg>\n )\n}\n\nexport type AnnouncementBannerProps = {\n /** Banner message. The banner is not rendered when empty. */\n message?: string\n /** Semantic type; controls the color pair. Unknown values fall back to `NEW`. */\n type?: AnnouncementType | (string & NonNullable<unknown>)\n /** Chip label shown before the message on desktop. Defaults to the type itself — pass a translated label if needed. */\n typeLabel?: string\n /** Hides the close button when `false`. */\n dismissible?: boolean\n /** Called when the user dismisses the banner. */\n onDismiss?: () => void\n /** Optional `id` for the close button (e.g. an analytics id). */\n closeButtonId?: string\n className?: string\n}\n\n/**\n * Fixed top banner for product announcements. Sets the global\n * `--announcement-height` CSS variable (used by `AppShell` to offset the\n * viewport height) and auto-marquees messages that overflow the available\n * width.\n */\nexport function AnnouncementBanner({\n message = '',\n type = ANNOUNCEMENT_TYPES.NEW,\n typeLabel,\n dismissible = true,\n onDismiss,\n closeButtonId,\n className,\n}: AnnouncementBannerProps) {\n const mounted = useIsClient()\n\n const [hidden, setHidden] = React.useState(false)\n\n const announcementColors = ANNOUNCEMENT_COLORS[resolveAnnouncementType(type)]\n\n const hasAnnouncement = message.length > 0\n\n const announcementTypeLabel = typeLabel ?? type\n\n const messageContainerRef = React.useRef<HTMLDivElement>(null)\n const messageTextRef = React.useRef<HTMLSpanElement>(null)\n\n const [messageScroll, setMessageScroll] = React.useState({\n delta: 0,\n overflow: false,\n })\n\n const handleHide = () => {\n setHidden(true)\n onDismiss?.()\n }\n\n React.useLayoutEffect(() => {\n const container = messageContainerRef.current\n const text = messageTextRef.current\n\n if (!container || !text) return\n\n const update = () => {\n const available = container.clientWidth\n const full = text.scrollWidth\n\n const delta = Math.max(0, full - available)\n const overflow = delta > 1\n\n setMessageScroll((prev) =>\n prev.delta === delta && prev.overflow === overflow\n ? prev\n : { delta, overflow },\n )\n }\n\n update()\n\n const ro = new ResizeObserver(update)\n ro.observe(container)\n\n const parent = container.parentElement\n if (parent) {\n ro.observe(parent)\n }\n\n window.addEventListener('resize', update)\n\n return () => {\n ro.disconnect()\n window.removeEventListener('resize', update)\n }\n }, [message, hasAnnouncement])\n\n React.useEffect(() => {\n if (hidden || !hasAnnouncement) {\n document.documentElement.style.setProperty('--announcement-height', '0px')\n return\n }\n\n document.documentElement.style.setProperty(\n '--announcement-height',\n `${ANNOUNCEMENT_BANNER_HEIGHT}px`,\n )\n\n return () => {\n document.documentElement.style.setProperty('--announcement-height', '0px')\n }\n }, [hasAnnouncement, hidden])\n\n if (!mounted || hidden || !hasAnnouncement) return null\n\n return (\n <>\n <div className=\"h-10 shrink-0\" />\n\n <AnimatePresence mode=\"popLayout\">\n <motion.div\n data-slot=\"announcement-banner\"\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.3 }}\n className={cn(\n 'fixed top-0 left-0 right-0 z-50 flex min-h-0 w-full flex-col bg-(--banner) text-(--banner-foreground)',\n className,\n )}\n style={\n {\n '--banner': announcementColors.background,\n '--banner-foreground': announcementColors.foreground,\n } as React.CSSProperties\n }\n >\n <div className=\"flex h-10 min-w-0 items-center gap-2 px-2.5 sm:px-4\">\n <div className=\"flex min-w-0 flex-1 items-center justify-center\">\n <div\n className={cn(\n 'flex min-w-0 items-center gap-2',\n messageScroll.overflow\n ? 'w-full max-w-full justify-start'\n : 'w-auto max-w-full',\n )}\n >\n <div className=\"hidden lg:flex shrink-0 items-center justify-center transition duration-200 ease-out h-4 gap-1.5 uppercase rounded-[5px] px-1.25 text-[9px] leading-[11px] font-semibold tracking-[0.18px] bg-(--banner-foreground)/20 text-(--banner-foreground) pointer-events-none select-none\">\n {announcementTypeLabel}\n </div>\n\n <div\n ref={messageContainerRef}\n className={cn(\n 'min-w-0 overflow-hidden',\n messageScroll.overflow && 'min-w-0 flex-1',\n )}\n >\n <motion.span\n ref={messageTextRef}\n className=\"inline-block text-xs sm:text-sm whitespace-nowrap will-change-transform\"\n animate={\n messageScroll.overflow\n ? {\n x: [\n 0,\n 0,\n -messageScroll.delta,\n -messageScroll.delta,\n 0,\n 0,\n ],\n }\n : { x: 0 }\n }\n transition={\n messageScroll.overflow\n ? {\n duration: Math.max(12, messageScroll.delta / 8),\n repeat: Infinity,\n ease: 'easeInOut',\n times: [0, 0.12, 0.35, 0.5, 0.75, 1],\n }\n : { duration: 0 }\n }\n >\n {message}\n </motion.span>\n </div>\n </div>\n </div>\n\n {dismissible && (\n <div className=\"flex shrink-0\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n id={closeButtonId}\n onClick={handleHide}\n className=\"hover:bg-(--banner-foreground)/20! hover:text-(--banner-foreground)! max-h-8 max-w-8 shrink-0\"\n >\n <Icon name=\"Xmark\" />\n </Button>\n </div>\n )}\n </div>\n\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 hidden h-3 translate-y-full lg:block\">\n <RoundedCornerTriangle className=\"absolute left-0\" />\n <RoundedCornerTriangle className=\"absolute right-0 -scale-x-100\" />\n </div>\n </motion.div>\n </AnimatePresence>\n </>\n )\n}\n","import { useSyncExternalStore } from 'react'\n\n/**\n * True after client hydration; false on the server. Prefer over useEffect(() => setMounted(true)).\n *\n * @see https://react.dev/reference/react/useSyncExternalStore\n */\nconst subscribe = () => () => {}\n\nexport function useIsClient() {\n return useSyncExternalStore(\n subscribe,\n () => true,\n () => false,\n )\n}\n","'use client';\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { mergeProps } from '@base-ui/react/merge-props';\n\nimport * as React from 'react';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { useHaptics } from '@/hooks/use-haptics';\n\nimport { composeRefs } from '@/lib/slot';\n\nimport { Loader } from '../loader';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-medium transition-[transform,opacity,background-color,box-shadow,filter] duration-150 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer active:scale-[0.96] hover:brightness-95 select-none\",\n {\n variants: {\n variant: {\n default: 'bg-foreground text-background hover:bg-foreground/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n success:\n 'bg-success text-white hover:bg-success/90 focus-visible:ring-success/20 dark:focus-visible:ring-success/40 dark:bg-success/60',\n outline: 'bg-card',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-input text-foreground',\n ghost: 'hover:bg-card hover:text-muted-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n sm: 'h-8 gap-1.5 px-3 has-[>svg]:px-2.5! data-[loading=true]:w-8!',\n default: 'h-10 px-4 py-2 has-[>svg]:px-3! data-[loading=true]:w-10!',\n lg: 'h-10 px-5 px-6 has-[>svg]:px-4! data-[loading=true]:w-12!',\n 'icon-sm': 'size-8',\n icon: 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\ntype InternalVariantProps = VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n isLoading?: boolean;\n};\n\nexport type ButtonVariants = InternalVariantProps['variant'];\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & InternalVariantProps\n>(function Button(\n {\n variant,\n size = 'default',\n asChild = false,\n isLoading = false,\n disabled,\n className,\n children,\n ...props\n },\n forwardedRef,\n) {\n const { trigger } = useHaptics();\n\n const ref = React.useRef<HTMLElement>(null);\n\n const buttonWidth = React.useRef<number | null>(null);\n const buttonHeight = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n if (ref.current && !isLoading) {\n const bounds = ref.current.getBoundingClientRect();\n\n buttonWidth.current = bounds.width;\n buttonHeight.current = bounds.height;\n }\n }, [isLoading]);\n\n const isFullWidth = className?.includes('w-full');\n\n const buttonStyle: React.CSSProperties = {\n ...props.style,\n ...(isLoading && buttonWidth.current && !isFullWidth\n ? { minWidth: buttonWidth.current }\n : {}),\n ...(isLoading && buttonHeight.current\n ? { minHeight: buttonHeight.current }\n : {}),\n };\n\n const content = isLoading ? (\n <Loader variant=\"button\" />\n ) : (\n (children as React.ReactNode)\n );\n\n return (\n <ButtonPrimitive\n ref={composeRefs(ref, forwardedRef)}\n nativeButton={!asChild}\n render={\n asChild && React.isValidElement<Record<string, unknown>>(children)\n ? buttonProps =>\n React.cloneElement(\n children,\n mergeProps(\n buttonProps as React.ComponentPropsWithRef<'button'>,\n children.props as React.ComponentPropsWithRef<'button'>,\n ),\n isLoading ? (\n <Loader variant=\"button\" />\n ) : (\n (children.props.children as React.ReactNode)\n ),\n )\n : undefined\n }\n data-slot=\"button\"\n data-size={size}\n data-variant={variant}\n data-loading={isLoading}\n disabled={disabled || isLoading}\n className={buttonVariants({ variant, size, className })}\n {...props}\n style={buttonStyle}\n onClick={e => {\n trigger('click');\n props.onClick?.(e);\n }}\n >\n {asChild ? null : content}\n </ButtonPrimitive>\n );\n});\n\nexport { Button, buttonVariants };\n","'use client';\n\nimport { useWebHaptics } from 'web-haptics/react';\n\nexport const useHaptics = () => {\n const { trigger } = useWebHaptics();\n\n const triggerHaptics = (\n type: 'click' | 'success' | 'error' | 'warning' | 'info',\n ) => {\n switch (type) {\n case 'click':\n trigger([{ duration: 8 }], { intensity: 0.5 });\n break;\n case 'success':\n trigger([{ duration: 30 }, { delay: 60, duration: 40, intensity: 1 }]);\n break;\n case 'error':\n trigger(\n [\n { duration: 40 },\n { delay: 40, duration: 40 },\n { delay: 40, duration: 40 },\n ],\n { intensity: 0.9 },\n );\n break;\n case 'warning':\n trigger([\n { duration: 40, intensity: 0.8 },\n { delay: 100, duration: 40, intensity: 0.6 },\n ]);\n break;\n case 'info':\n trigger([\n { duration: 80, intensity: 0.8 },\n { delay: 80, duration: 50, intensity: 0.3 },\n ]);\n break;\n }\n };\n\n return { trigger: triggerHaptics };\n};\n","import * as React from 'react'\n\nimport { mergeProps } from '@base-ui/react/merge-props'\n\ntype AnyProps = Record<string, unknown>\n\nfunction composeRefs<T>(\n ...refs: Array<React.Ref<T> | null | undefined>\n): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref != null) {\n const mutableRef = ref as React.MutableRefObject<T | null>\n mutableRef.current = node\n }\n }\n }\n}\n\n/**\n * Merges its props into its single child element (Radix `Slot` replacement),\n * composing event handlers, `className`, `style` and refs.\n */\nconst Slot = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n function Slot({ children, ...slotProps }, forwardedRef) {\n if (!React.isValidElement(children)) return null\n\n const childProps = children.props as AnyProps\n const childRef = (children as unknown as { ref?: React.Ref<HTMLElement> })\n .ref\n\n return React.cloneElement(children, {\n ...mergeProps(slotProps as AnyProps, childProps),\n ref: composeRefs(forwardedRef, childRef),\n } as AnyProps)\n },\n)\n\nexport { composeRefs, Slot }\n","'use client';\n\nimport { cn } from '@/lib/cn';\n\nexport function Loader({\n text,\n variant = 'default',\n className,\n iconClassName,\n}: {\n text?: string;\n variant?: 'default' | 'screen' | 'center' | 'button' | 'clean';\n className?: string;\n iconClassName?: string;\n}) {\n const defaultClasses = cn(\n /**\n * Default inline layout: icon and text centered\n * side by side.\n */\n variant === 'default' && 'flex flex-col justify-center items-center gap-2',\n /**\n * Center the loader in the center of the screen\n * if the variant is 'center'.\n */\n variant === 'center' &&\n 'flex flex-col flex-1 justify-center items-center gap-4 min-h-dvh',\n /**\n * Center the loader in the center of the screen\n * if the variant is 'screen'.\n */\n variant === 'screen' &&\n 'flex flex-col flex-1 justify-center items-center gap-4 min-h-dvh min-w-dvw',\n /**\n * Add padding to the loader if the variant is 'clean'.\n */\n variant === 'clean' &&\n 'flex flex-col flex-1 justify-center items-center gap-4 p-24',\n /**\n * Add text color to the loader if the variant\n * is not 'button' to make it less visible.\n */\n variant !== 'button' && 'text-muted-foreground',\n );\n\n return (\n <div suppressHydrationWarning className={cn(defaultClasses, className)}>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n suppressHydrationWarning\n className={cn(\n 'animate-spin text-current shrink-0',\n variant === 'button' ? 'w-4 h-4' : 'w-5 h-5',\n iconClassName,\n )}\n >\n <path d=\"M12 2v4\" />\n <path d=\"m16.2 7.8 2.9-2.9\" />\n <path d=\"M18 12h4\" />\n <path d=\"m16.2 16.2 2.9 2.9\" />\n <path d=\"M12 18v4\" />\n <path d=\"m4.9 19.1 2.9-2.9\" />\n <path d=\"M2 12h4\" />\n <path d=\"m4.9 4.9 2.9 2.9\" />\n </svg>\n\n {text && <span className=\"text-current\">{text}</span>}\n </div>\n );\n}\n","'use client'\n\nimport Cookies from 'js-cookie'\n\nimport * as React from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { ANIMATION } from '@/constants/animations'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { Loader } from '@/components/ui/loader'\nimport { Sidebar, SIDEBAR_WIDTH, useSidebar } from '@/components/ui/sidebar'\nimport { Tooltip } from '@/components/ui/tooltip'\n\n/**\n * Application shell layout, composition-first. Encodes the structure of our\n * dashboards — inset resizable sidebar, glass sticky header, floating mobile\n * navbar, announcement-aware viewport — while leaving every region up to the\n * consumer:\n *\n * ```tsx\n * <AnnouncementBanner message=\"…\" type=\"NEW\" />\n *\n * <AppShell>\n * <AppShell.Sidebar>\n * <AppShell.SidebarHeader>…logo + actions…</AppShell.SidebarHeader>\n * <AppShell.SidebarSection>…workspace switcher…</AppShell.SidebarSection>\n * <AppShell.SidebarSection>\n * <AppShell.CommandButton>Pesquisar…</AppShell.CommandButton>\n * </AppShell.SidebarSection>\n * <AppShell.SidebarContent>\n * <AppShell.SidebarGroup title=\"Geral\">\n * <AppShell.SidebarItem icon=\"House6\" title=\"Visão Geral\" href=\"/\" active />\n * </AppShell.SidebarGroup>\n * </AppShell.SidebarContent>\n * <AppShell.SidebarFooter>…copyright + user…</AppShell.SidebarFooter>\n * </AppShell.Sidebar>\n *\n * <AppShell.Navbar>…mobile items…</AppShell.Navbar>\n *\n * <AppShell.Inset>\n * <AppShell.Header title={…} actions={…} user={…} logo={…} />\n * <MyPage />\n * </AppShell.Inset>\n * </AppShell>\n * ```\n */\nfunction AppShellRoot({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Provider>) {\n return (\n <Sidebar.Provider\n data-slot=\"app-shell\"\n className={cn(\n 'relative flex-1 min-h-[calc(100svh-var(--announcement-height,0px))] max-lg:bg-dashboard-background!',\n className,\n )}\n {...props}\n >\n {children}\n </Sidebar.Provider>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Sidebar\n * ---------------------------------------------------------------------- */\n\nconst MIN_SIDEBAR_WIDTH = 16 * 16 // 16rem\nconst MAX_SIDEBAR_WIDTH = 20 * 16 // 20rem\nconst COLLAPSE_THRESHOLD = MIN_SIDEBAR_WIDTH / 2 // 8rem — collapse only past half minimum\n\nconst SIDEBAR_WIDTH_COOKIE = 'sidebar-width'\nconst SIDEBAR_WIDTH_COOKIE_TTL_DAYS = 365\n\n/**\n * Inset sidebar with a drag-to-resize rail: click toggles, double click\n * resets to the default width, dragging resizes between 16–20rem and\n * collapses past the threshold. Width persists in the `sidebar-width` cookie\n * (read back by `Sidebar.Provider`).\n */\nfunction AppShellSidebar({\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar>) {\n const {\n toggleSidebar,\n setSidebarWidth,\n setOpen,\n open: isSidebarOpen,\n } = useSidebar()\n\n const [isDragging, setIsDragging] = React.useState(false)\n const railClickTimer = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n )\n\n const persistWidth = React.useCallback(\n (width: string) => {\n Cookies.set(SIDEBAR_WIDTH_COOKIE, width, {\n expires: SIDEBAR_WIDTH_COOKIE_TTL_DAYS,\n path: '/',\n })\n\n setSidebarWidth(width)\n },\n [setSidebarWidth],\n )\n\n const handleRailClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const wrapper = (e.currentTarget as HTMLElement).closest<HTMLElement>(\n '[data-slot=\"sidebar-wrapper\"]',\n )\n\n if (railClickTimer.current) {\n clearTimeout(railClickTimer.current)\n railClickTimer.current = null\n\n if (!wrapper) return\n\n wrapper.style.setProperty('--sidebar-width', SIDEBAR_WIDTH)\n persistWidth(SIDEBAR_WIDTH)\n\n return\n }\n\n railClickTimer.current = setTimeout(() => {\n railClickTimer.current = null\n toggleSidebar()\n }, 150)\n },\n [toggleSidebar, persistWidth],\n )\n\n const handleResizeMouseDown = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const wrapper = (e.currentTarget as HTMLElement).closest<HTMLElement>(\n '[data-slot=\"sidebar-wrapper\"]',\n )\n\n if (!wrapper) return\n\n const startX = e.clientX\n\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n const container = wrapper.querySelector<HTMLElement>(\n '[data-slot=\"sidebar-container\"]',\n )\n\n const gap = wrapper.querySelector<HTMLElement>(\n '[data-slot=\"sidebar-gap\"]',\n )\n\n const disableTransitions = () => {\n if (container) container.style.transition = 'none'\n if (gap) gap.style.transition = 'none'\n }\n\n const restoreTransitions = () => {\n if (container) container.style.transition = ''\n if (gap) gap.style.transition = ''\n }\n\n if (!isSidebarOpen) {\n let dragStarted = false\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = moveEvent.clientX - startX\n\n if (!dragStarted) {\n if (Math.abs(delta) < 4) return\n\n dragStarted = true\n setIsDragging(true)\n\n wrapper.style.setProperty(\n '--sidebar-width',\n `${MIN_SIDEBAR_WIDTH}px`,\n )\n setOpen(true)\n }\n\n const newWidth = Math.max(\n MIN_SIDEBAR_WIDTH,\n Math.min(MAX_SIDEBAR_WIDTH, MIN_SIDEBAR_WIDTH + delta),\n )\n\n wrapper.style.setProperty('--sidebar-width', `${newWidth}px`)\n }\n\n const handleMouseUp = (upEvent: MouseEvent) => {\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n if (!dragStarted) return\n\n setIsDragging(false)\n\n if (upEvent.clientX - startX < -10) {\n wrapper.style.setProperty(\n '--sidebar-width',\n `${MIN_SIDEBAR_WIDTH}px`,\n )\n\n setOpen(false)\n } else {\n const newWidth = wrapper.style\n .getPropertyValue('--sidebar-width')\n .trim()\n\n persistWidth(newWidth)\n }\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n\n return\n }\n\n setIsDragging(true)\n disableTransitions()\n\n const rawWidth = wrapper.style.getPropertyValue('--sidebar-width')\n const startWidth = rawWidth\n ? rawWidth.endsWith('rem')\n ? parseFloat(rawWidth) * 16\n : parseFloat(rawWidth)\n : MIN_SIDEBAR_WIDTH\n\n let pastCollapseThreshold = false\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = moveEvent.clientX - startX\n const rawWidth = startWidth + delta\n\n pastCollapseThreshold = rawWidth < COLLAPSE_THRESHOLD\n\n const newWidth = Math.max(\n MIN_SIDEBAR_WIDTH,\n Math.min(MAX_SIDEBAR_WIDTH, rawWidth),\n )\n wrapper.style.setProperty('--sidebar-width', `${newWidth}px`)\n }\n\n const handleMouseUp = () => {\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n setIsDragging(false)\n restoreTransitions()\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n if (pastCollapseThreshold) {\n toggleSidebar()\n return\n }\n\n const newWidth = wrapper.style\n .getPropertyValue('--sidebar-width')\n .trim()\n\n persistWidth(newWidth)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n },\n [toggleSidebar, persistWidth, isSidebarOpen, setOpen],\n )\n\n React.useEffect(() => {\n return () => {\n if (railClickTimer.current) {\n clearTimeout(railClickTimer.current)\n }\n }\n }, [])\n\n return (\n <Sidebar variant=\"inset\" {...props}>\n {children}\n\n <Sidebar.Rail\n onClick={handleRailClick}\n onMouseDown={handleResizeMouseDown}\n onFocus={(e) => e.currentTarget.blur()}\n className={cn(\n 'cursor-col-resize max-h-32 flex items-center justify-center top-1/2 translate-x-1 -translate-y-1/2 px-4 -right-full after:rounded-full after:w-1 after:-translate-x-1/2 after:transition-transform hover:after:translate-x-0 hover:after:bg-sidebar-border outline-none focus-visible:ring-ring focus-visible:ring-2 focus-visible:border-ring transition-transform bg-transparent!',\n !isSidebarOpen && 'translate-x-1!',\n isDragging && 'after:translate-x-0 after:bg-accent',\n )}\n />\n </Sidebar>\n )\n}\n\nfunction AppShellSidebarHeader({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Header>) {\n return (\n <Sidebar.Header\n data-slot=\"app-shell-sidebar-header\"\n className={cn(\n 'flex flex-row items-center justify-between border-none p-4 pb-2 -mt-0.5',\n className,\n )}\n {...props}\n >\n {children}\n </Sidebar.Header>\n )\n}\n\nfunction AppShellSidebarSection({\n className,\n children,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"app-shell-sidebar-section\"\n className={cn('shrink-0 px-4 py-2 empty:hidden', className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nfunction AppShellSidebarContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Content>) {\n return (\n <Sidebar.Content\n data-slot=\"app-shell-sidebar-content\"\n className={cn(\n 'flex-1 overflow-x-hidden overflow-y-auto scroll-fade-y px-4 py-2',\n className,\n )}\n {...props}\n >\n <Sidebar.Menu className=\"flex flex-col gap-4 overflow-visible\">\n {children}\n </Sidebar.Menu>\n </Sidebar.Content>\n )\n}\n\nfunction AppShellSidebarGroup({\n className,\n title,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Group> & {\n title?: string\n}) {\n return (\n <Sidebar.Group\n data-slot=\"app-shell-sidebar-group\"\n className={cn('p-0', className)}\n {...props}\n >\n {title && (\n <span className=\"text-xs text-muted-foreground/50 font-medium uppercase p-2\">\n {title}\n </span>\n )}\n\n <Sidebar.GroupContent className=\"flex flex-col gap-1\">\n {children}\n </Sidebar.GroupContent>\n </Sidebar.Group>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Sidebar item\n * ---------------------------------------------------------------------- */\n\nfunction itemAnimation({\n direction = 'up',\n px = 10,\n duration = ANIMATION.DURATION_FLOAT,\n delay = 0,\n reverse = false,\n}: {\n direction?: 'left' | 'right' | 'up' | 'down'\n px?: number\n duration?: number\n delay?: number\n reverse?: boolean\n} = {}) {\n const axis = direction === 'left' || direction === 'right' ? 'x' : 'y'\n\n const initial = { opacity: 0, [axis]: px * (!reverse ? -1 : 1) }\n const animate = { opacity: 1, [axis]: 0 }\n const exit = {\n opacity: 0,\n [axis]: px * (!reverse ? -1 : 1),\n ...(delay > 0 ? { transition: { duration } } : {}),\n }\n const transition = delay > 0 ? { duration, delay } : { duration }\n\n return { initial, animate, exit, transition }\n}\n\nconst DROPDOWN_CHILD_STAGGER_DELAY = 0.035\nconst MAX_DROPDOWN_CHILD_STAGGER_DELAY = 0.14\n\nexport type AppShellSidebarItemData = {\n title: string\n icon?: IconType | React.ReactNode\n href?: string\n onClick?: () => void\n /** Marks the item as the current route. The shell has no router — compute it in the app. */\n active?: boolean\n disabled?: boolean\n loading?: boolean\n /** \"Coming soon\" — disabled with a clock hint. */\n soon?: boolean\n /** External link — opens in a new tab with a hint icon. */\n external?: boolean\n items?: AppShellSidebarItemData[]\n}\n\ntype AppShellSidebarItemProps = AppShellSidebarItemData & {\n index?: number\n isDropdownChild?: boolean\n level?: number\n}\n\nfunction AppShellSidebarItem({\n index = 0,\n isDropdownChild = false,\n level = 0,\n ...item\n}: AppShellSidebarItemProps) {\n const { isMobile, toggleSidebar } = useSidebar()\n\n const [open, setOpen] = React.useState(false)\n\n const hasItems = !!item.items && item.items.length > 0\n const hasHref = !!item.href\n const hasLinkedChildren = hasItems && hasHref && !item.onClick\n\n const isLoading = item.loading || false\n const isSoon = item.soon || false\n const isExternal = item.external || false\n\n const isDisabled = isLoading || item.disabled || isSoon || false\n\n const useSplitDropdownLayout = hasLinkedChildren && !isLoading\n\n const isActive = !isDisabled && !isLoading && !!item.active\n\n const buttonClassName =\n 'relative z-10 group/menu-button hover:bg-sidebar-accent! data-[active=true]:bg-transparent data-[active=false]:hover:text-foreground/75 h-auto! p-2.5! text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] cursor-pointer'\n\n const itemStyle = {\n marginLeft: `${level * 16}px`,\n maxWidth: `calc(100% - ${level * 16}px)`,\n }\n\n const dropdownChildDelay = isDropdownChild\n ? Math.min(\n index * DROPDOWN_CHILD_STAGGER_DELAY,\n MAX_DROPDOWN_CHILD_STAGGER_DELAY,\n )\n : 0\n\n const handleNavigateClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault()\n return\n }\n\n if (isMobile) toggleSidebar()\n }\n\n const handleToggleItems = () => {\n if (!isDisabled && hasItems) {\n setOpen((open) => !open)\n }\n }\n\n const handleClick = () => {\n if (item.onClick) {\n item.onClick()\n if (isMobile) toggleSidebar()\n } else if (!isDisabled && hasItems) {\n handleToggleItems()\n }\n }\n\n const icon = (\n <div\n className={cn(\n 'flex items-center justify-center size-4 aspect-square',\n isActive ? 'text-primary' : 'text-muted-foreground',\n )}\n >\n {typeof item.icon === 'string' ? (\n <Icon name={item.icon as IconType} />\n ) : (\n item.icon\n )}\n </div>\n )\n\n const trailing = isLoading ? (\n <Loader\n variant=\"button\"\n iconClassName=\"size-4 min-w-4 min-h-4\"\n className=\"ml-auto mr-0.5 shrink-0 text-muted-foreground\"\n />\n ) : (\n <AnimatePresence mode=\"popLayout\">\n {[hasItems, isSoon, isExternal].some(Boolean) && (\n <motion.div\n key=\"trailing\"\n {...itemAnimation({ direction: 'right', reverse: true })}\n className={cn(\n 'flex items-center gap-2',\n !hasLinkedChildren && 'ml-auto',\n )}\n >\n {isSoon ? (\n <Icon name=\"Clock\" className=\"size-3 opacity-50\" />\n ) : isExternal ? (\n <Icon\n name=\"ShareUpRight\"\n className=\"size-3 opacity-50 group-hover/menu-button:opacity-100 group-hover/menu-button:text-link\"\n />\n ) : hasItems ? (\n <Icon\n data-open={open}\n name=\"ChevronDown\"\n className=\"size-3 transition-transform duration-300 data-[open=true]:rotate-180\"\n />\n ) : null}\n </motion.div>\n )}\n </AnimatePresence>\n )\n\n const isPlainLink = !hasItems && !item.onClick\n\n return (\n <motion.div\n {...itemAnimation({ direction: 'left', delay: dropdownChildDelay })}\n suppressHydrationWarning\n data-open={open}\n data-disabled={isDisabled}\n className=\"relative flex flex-col group/menu-item data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none\"\n >\n {useSplitDropdownLayout ? (\n <div\n className=\"relative z-10 flex w-full min-w-0 gap-1\"\n style={itemStyle}\n >\n <Sidebar.MenuButton\n asChild\n data-open={open}\n data-active={isActive}\n data-index={index}\n data-level={level}\n data-disabled={isDisabled}\n disabled={isDisabled}\n className={cn(buttonClassName, 'min-w-0 flex-1')}\n >\n <a\n href={item.href && !isDisabled ? item.href : '#'}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleNavigateClick}\n suppressHydrationWarning\n className=\"flex items-center gap-2\"\n >\n {icon}\n\n <span data-active={isActive} className=\"truncate text-sm\">\n {item.title}\n </span>\n </a>\n </Sidebar.MenuButton>\n\n <Sidebar.MenuButton\n type=\"button\"\n data-open={open}\n data-active={isActive}\n data-index={index}\n data-level={level}\n data-disabled={isDisabled}\n disabled={isDisabled}\n aria-expanded={open}\n aria-label={`${item.title} submenu`}\n onClick={handleToggleItems}\n className={cn(buttonClassName, 'w-10 shrink-0 justify-center p-2.5!')}\n >\n {trailing}\n </Sidebar.MenuButton>\n </div>\n ) : (\n <Sidebar.MenuButton\n asChild={isPlainLink}\n data-open={open}\n data-active={isActive}\n data-index={index}\n data-level={level}\n data-disabled={isDisabled}\n disabled={isDisabled}\n onClick={hasItems || item.onClick ? handleClick : undefined}\n className={buttonClassName}\n style={itemStyle}\n >\n {isPlainLink ? (\n <a\n href={item.href && !isDisabled ? item.href : '#'}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleNavigateClick}\n suppressHydrationWarning\n className=\"flex w-full min-w-0 items-center gap-2\"\n >\n {icon}\n\n <span\n data-active={isActive}\n className=\"text-sm min-w-0 truncate\"\n >\n {item.title}\n </span>\n\n {trailing}\n </a>\n ) : (\n <>\n {icon}\n\n <span data-active={isActive} className=\"text-sm\">\n {item.title}\n </span>\n\n {trailing}\n </>\n )}\n </Sidebar.MenuButton>\n )}\n\n <AnimatePresence initial={false}>\n {hasItems && open && (\n <motion.ul\n animate={{ height: 'auto', opacity: 1, padding: '0.25rem 0' }}\n initial={{ height: 0, opacity: 0, padding: 0 }}\n exit={{ height: 0, opacity: 0, padding: 0 }}\n transition={{\n duration: ANIMATION.DURATION_FLOAT,\n ease: 'easeInOut',\n }}\n data-open={open}\n className=\"w-full min-w-0 flex flex-col space-y-1 z-0 overflow-hidden\"\n >\n {item.items?.map((childItem, childIndex) => (\n <AppShellSidebarItem\n key={`${childItem.title}-${childIndex}`}\n {...childItem}\n index={childIndex}\n isDropdownChild\n level={level + 1}\n />\n ))}\n </motion.ul>\n )}\n </AnimatePresence>\n </motion.div>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Command palette button\n * ---------------------------------------------------------------------- */\n\nfunction AppShellCommandButton({\n className,\n children,\n ...props\n}: React.ComponentProps<'button'>) {\n return (\n <button\n type=\"button\"\n data-slot=\"app-shell-command-button\"\n className={cn(\n 'flex h-12 w-full min-w-0 cursor-pointer items-center rounded-xl border-2 border-sidebar-accent bg-transparent p-2.5 text-left text-sm text-muted-foreground outline-none transition-all hover:bg-sidebar-accent/30 focus-visible:border-transparent focus-visible:ring-[3px] focus-visible:ring-ring/50',\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none flex w-full items-center gap-2 opacity-50 truncate\">\n {children}\n </span>\n </button>\n )\n}\n\nfunction AppShellSidebarFooter({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Footer>) {\n return (\n <Sidebar.Footer\n data-slot=\"app-shell-sidebar-footer\"\n className={cn('p-4 pt-0', className)}\n {...props}\n >\n {children}\n </Sidebar.Footer>\n )\n}\n\nfunction AppShellCopyright({\n className,\n children,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n suppressHydrationWarning\n data-slot=\"app-shell-copyright\"\n className={cn('text-xs text-muted-foreground/50 p-2', className)}\n {...props}\n >\n {children}\n </span>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Header\n * ---------------------------------------------------------------------- */\n\nfunction AppShellHeader({\n className,\n logo,\n title,\n actions,\n user,\n sidebarToggleLabel = 'Toggle sidebar',\n mobileActionsClassName,\n ...props\n}: Omit<React.ComponentProps<'div'>, 'title'> & {\n /** Mobile-only logo slot (top-left). */\n logo?: React.ReactNode\n /** Page title area (both breakpoints). */\n title?: React.ReactNode\n /** Right-side actions (both breakpoints). */\n actions?: React.ReactNode\n /** Mobile-only user slot (top-right, e.g. avatar). */\n user?: React.ReactNode\n sidebarToggleLabel?: string\n mobileActionsClassName?: string\n}) {\n return (\n <div data-slot=\"app-shell-header\" className={cn('contents', className)} {...props}>\n <div className=\"lg:hidden flex items-center justify-between gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 glass-dashboard-header max-lg:sticky top-(--announcement-height,0px) z-50 transition-all max-lg:border-b max-lg:border-border/70\">\n <div className=\"flex min-w-0 flex-1 items-center gap-4\">\n {logo && <div className=\"shrink-0 active:scale-99\">{logo}</div>}\n\n <div className=\"flex min-h-7 min-w-0 flex-1 items-center overflow-hidden\">\n <div className=\"flex min-w-0 flex-1 items-center\">{title}</div>\n </div>\n </div>\n\n <div className={cn('flex gap-2 empty:hidden', mobileActionsClassName)}>\n {actions}\n </div>\n\n {user}\n </div>\n\n <div className=\"max-lg:hidden sticky top-(--announcement-height,0px) z-50 w-full flex min-w-0 items-center gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 border-b glass-dashboard-header border-border/70 transition-colors lg:rounded-t-2xl\">\n <Tooltip>\n <Tooltip.Trigger asChild>\n <Sidebar.Trigger\n size=\"icon\"\n variant=\"ghost\"\n className=\"max-lg:hidden shrink-0\"\n iconProps={{ className: '!size-4 text-foreground' }}\n />\n </Tooltip.Trigger>\n\n <Tooltip.Content side=\"bottom\">{sidebarToggleLabel}</Tooltip.Content>\n </Tooltip>\n\n <div className=\"flex min-h-7 min-w-0 flex-1 items-center overflow-hidden\">\n <div className=\"flex min-w-0 flex-1 items-center\">{title}</div>\n </div>\n\n <div className=\"relative z-1 grid grid-flow-col shrink-0 ml-auto gap-2 md:gap-4\">\n <div className=\"min-w-0 flex items-center gap-2 empty:hidden\">\n {actions}\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Mobile navbar\n * ---------------------------------------------------------------------- */\n\nfunction AppShellNavbar({\n className,\n children,\n ...props\n}: React.ComponentProps<'nav'>) {\n return (\n <nav\n data-slot=\"app-shell-navbar\"\n onContextMenu={(e) => e.preventDefault()}\n className={cn(\n 'fixed bottom-0 left-0 lg:hidden z-50 flex flex-col items-center justify-center w-full min-h-[100px] pointer-events-none transition-opacity duration-200',\n className,\n )}\n {...props}\n >\n <div className=\"absolute inset-0 translate-y-px bg-linear-to-t from-black/80 to-transparent pointer-events-none -z-10 backdrop-blur-sm mask-t-from-0 mask-b-to-100\" />\n\n <ul className=\"relative flex items-center justify-center gap-1.5 xs:gap-2 sm:gap-4 w-full h-full\">\n <div className=\"flex items-center justify-center gap-1 w-fit glass-dashboard-chrome border border-border/50 p-1 rounded-2xl overflow-hidden z-10 pointer-events-auto\">\n {children}\n </div>\n </ul>\n </nav>\n )\n}\n\nfunction AppShellNavbarItem({\n className,\n icon,\n active = false,\n href,\n children,\n ...props\n}: Omit<React.ComponentProps<'a'>, 'children'> & {\n icon?: IconType | React.ReactNode\n active?: boolean\n children?: React.ReactNode\n}) {\n const itemClassName = cn(\n 'size-full flex items-center justify-center p-4 rounded-xl transition-colors text-xs cursor-pointer',\n 'outline-none focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n active\n ? 'bg-primary/5 hover:bg-primary/25 dark:bg-primary/5 dark:hover:bg-primary/2'\n : 'bg-transparent hover:bg-accent/50',\n className,\n )\n\n const content =\n children ??\n (typeof icon === 'string' ? (\n <Icon\n name={icon as IconType}\n className={cn(\n 'size-5 shrink-0',\n active ? 'text-primary' : 'text-muted-foreground',\n )}\n />\n ) : (\n icon\n ))\n\n if (href) {\n return (\n <a href={href} className={itemClassName} {...props}>\n {content}\n </a>\n )\n }\n\n const { onClick } = props as { onClick?: React.MouseEventHandler<HTMLElement> }\n\n return (\n <button type=\"button\" className={itemClassName} onClick={onClick}>\n {content}\n </button>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Right (context) sidebar\n * ---------------------------------------------------------------------- */\n\nconst RIGHT_SIDEBAR_WIDTH = '20rem'\nconst RIGHT_SIDEBAR_KEYBOARD_SHORTCUT = ']'\n\nconst RIGHT_SIDEBAR_WIDTH_COOKIE = 'context-sidebar-width'\nconst RIGHT_SIDEBAR_STATE_COOKIE = 'context-sidebar-state'\n\nconst MIN_RIGHT_SIDEBAR_WIDTH = 16 * 16 // 16rem\nconst MAX_RIGHT_SIDEBAR_WIDTH = 20 * 16 // 20rem\nconst RIGHT_SIDEBAR_COLLAPSE_THRESHOLD = MIN_RIGHT_SIDEBAR_WIDTH / 2\n\ntype AppShellRightSidebarContextValue = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n toggleSidebar: () => void\n sidebarWidth: string\n setSidebarWidth: (width: string) => void\n}\n\nconst AppShellRightSidebarContext =\n React.createContext<AppShellRightSidebarContextValue | null>(null)\n\nfunction useAppShellRightSidebar() {\n const context = React.useContext(AppShellRightSidebarContext)\n\n if (!context) {\n throw new Error(\n 'useAppShellRightSidebar must be used within an AppShell.RightSidebarProvider.',\n )\n }\n\n return context\n}\n\n/**\n * State container for the right context sidebar. Wrap the `AppShell` with it\n * whenever a page renders `AppShell.RightSidebar`; open state and width\n * persist in cookies and `]` toggles it.\n */\nfunction AppShellRightSidebarProvider({\n children,\n defaultOpen = true,\n}: {\n children: React.ReactNode\n defaultOpen?: boolean\n}) {\n const [open, _setOpen] = React.useState(defaultOpen)\n const [sidebarWidth, setSidebarWidth] = React.useState(RIGHT_SIDEBAR_WIDTH)\n\n const setOpen = React.useCallback((value: boolean) => {\n _setOpen(value)\n Cookies.set(RIGHT_SIDEBAR_STATE_COOKIE, String(value), { path: '/' })\n }, [])\n\n const toggleSidebar = React.useCallback(() => {\n _setOpen((open) => {\n Cookies.set(RIGHT_SIDEBAR_STATE_COOKIE, String(!open), { path: '/' })\n return !open\n })\n }, [])\n\n React.useLayoutEffect(() => {\n const savedOpen = Cookies.get(RIGHT_SIDEBAR_STATE_COOKIE)\n if (savedOpen !== undefined) _setOpen(savedOpen === 'true')\n\n const savedWidth = Cookies.get(RIGHT_SIDEBAR_WIDTH_COOKIE)\n if (savedWidth) setSidebarWidth(savedWidth)\n }, [])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === RIGHT_SIDEBAR_KEYBOARD_SHORTCUT) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<AppShellRightSidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n toggleSidebar,\n sidebarWidth,\n setSidebarWidth,\n }),\n [state, open, setOpen, toggleSidebar, sidebarWidth],\n )\n\n return (\n <AppShellRightSidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"context-sidebar-wrapper\"\n style={\n {\n '--context-sidebar-width': sidebarWidth,\n } as React.CSSProperties\n }\n className=\"contents max-lg:[--context-sidebar-width:0px]\"\n >\n {children}\n </div>\n </AppShellRightSidebarContext.Provider>\n )\n}\n\nfunction AppShellRightSidebarTrigger({\n className,\n label = 'Toggle context sidebar',\n ...props\n}: React.ComponentProps<typeof Button> & {\n label?: string\n}) {\n const { toggleSidebar, state } = useAppShellRightSidebar()\n\n return (\n <Tooltip>\n <Tooltip.Trigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n type=\"button\"\n data-slot=\"context-sidebar-trigger\"\n className={cn('max-lg:hidden shrink-0', className)}\n onClick={toggleSidebar}\n {...props}\n >\n <Icon\n name={state === 'collapsed' ? 'SidebarToggled' : 'SidebarToggle'}\n className=\"!size-4 text-foreground scale-x-[-1]\"\n />\n\n <span className=\"sr-only\">{label}</span>\n </Button>\n </Tooltip.Trigger>\n\n <Tooltip.Content side=\"bottom\">{label}</Tooltip.Content>\n </Tooltip>\n )\n}\n\n/**\n * Fixed right context panel with drag-to-resize on its left edge, matching\n * the left sidebar behavior (click toggles, double click resets, drag past\n * the threshold collapses). Requires `AppShell.RightSidebarProvider`.\n */\nfunction AppShellRightSidebar({\n className,\n children,\n ...props\n}: React.ComponentProps<'aside'>) {\n const {\n state,\n open: isSidebarOpen,\n toggleSidebar,\n setOpen,\n setSidebarWidth,\n } = useAppShellRightSidebar()\n\n const [isDragging, setIsDragging] = React.useState(false)\n const railClickTimer = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n )\n\n const persistWidth = React.useCallback(\n (width: string) => {\n Cookies.set(RIGHT_SIDEBAR_WIDTH_COOKIE, width, { path: '/' })\n setSidebarWidth(width)\n },\n [setSidebarWidth],\n )\n\n const handleRailClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const wrapper = (e.currentTarget as HTMLElement).closest<HTMLElement>(\n '[data-slot=\"context-sidebar-wrapper\"]',\n )\n\n if (railClickTimer.current) {\n clearTimeout(railClickTimer.current)\n railClickTimer.current = null\n\n if (!wrapper) return\n\n wrapper.style.setProperty(\n '--context-sidebar-width',\n RIGHT_SIDEBAR_WIDTH,\n )\n persistWidth(RIGHT_SIDEBAR_WIDTH)\n\n return\n }\n\n railClickTimer.current = setTimeout(() => {\n railClickTimer.current = null\n toggleSidebar()\n }, 150)\n },\n [toggleSidebar, persistWidth],\n )\n\n const handleResizeMouseDown = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const wrapper = (e.currentTarget as HTMLElement).closest<HTMLElement>(\n '[data-slot=\"context-sidebar-wrapper\"]',\n )\n\n if (!wrapper) return\n\n const startX = e.clientX\n\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n if (!isSidebarOpen) {\n let dragStarted = false\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = startX - moveEvent.clientX\n\n if (!dragStarted) {\n if (Math.abs(delta) < 4) return\n\n dragStarted = true\n setIsDragging(true)\n\n wrapper.style.setProperty(\n '--context-sidebar-width',\n `${MIN_RIGHT_SIDEBAR_WIDTH}px`,\n )\n setOpen(true)\n }\n\n const newWidth = Math.max(\n MIN_RIGHT_SIDEBAR_WIDTH,\n Math.min(MAX_RIGHT_SIDEBAR_WIDTH, MIN_RIGHT_SIDEBAR_WIDTH + delta),\n )\n\n wrapper.style.setProperty('--context-sidebar-width', `${newWidth}px`)\n }\n\n const handleMouseUp = (upEvent: MouseEvent) => {\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n if (!dragStarted) return\n\n setIsDragging(false)\n\n if (startX - upEvent.clientX < -10) {\n wrapper.style.setProperty(\n '--context-sidebar-width',\n `${MIN_RIGHT_SIDEBAR_WIDTH}px`,\n )\n\n setOpen(false)\n } else {\n const newWidth = wrapper.style\n .getPropertyValue('--context-sidebar-width')\n .trim()\n\n persistWidth(newWidth)\n }\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n\n return\n }\n\n setIsDragging(true)\n\n const rawWidth = wrapper.style.getPropertyValue('--context-sidebar-width')\n const startWidth = rawWidth\n ? rawWidth.endsWith('rem')\n ? parseFloat(rawWidth) * 16\n : parseFloat(rawWidth)\n : MIN_RIGHT_SIDEBAR_WIDTH\n\n let pastCollapseThreshold = false\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = startX - moveEvent.clientX\n const rawWidth = startWidth + delta\n\n pastCollapseThreshold = rawWidth < RIGHT_SIDEBAR_COLLAPSE_THRESHOLD\n\n const newWidth = Math.max(\n MIN_RIGHT_SIDEBAR_WIDTH,\n Math.min(MAX_RIGHT_SIDEBAR_WIDTH, rawWidth),\n )\n wrapper.style.setProperty('--context-sidebar-width', `${newWidth}px`)\n }\n\n const handleMouseUp = () => {\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n setIsDragging(false)\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n if (pastCollapseThreshold) {\n toggleSidebar()\n return\n }\n\n const newWidth = wrapper.style\n .getPropertyValue('--context-sidebar-width')\n .trim()\n\n persistWidth(newWidth)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n },\n [toggleSidebar, persistWidth, isSidebarOpen, setOpen],\n )\n\n React.useEffect(() => {\n return () => {\n if (railClickTimer.current) {\n clearTimeout(railClickTimer.current)\n }\n }\n }, [])\n\n return (\n <aside\n data-side=\"right\"\n data-slot=\"sidebar\"\n data-variant=\"inset\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? 'offcanvas' : ''}\n className=\"group peer hidden text-sidebar-foreground lg:block\"\n {...props}\n >\n <div\n aria-hidden\n data-slot=\"context-sidebar-gap\"\n className={cn(\n 'relative shrink-0 bg-transparent transition-[width] duration-300',\n state === 'expanded' ? 'w-(--context-sidebar-width)' : 'w-0',\n )}\n />\n\n {/* Off-canvas collapses by animating the clipped width (never past the\n viewport edge) instead of a negative `right` offset — an off-screen\n fixed panel becomes real horizontal overflow whenever an ancestor\n has a transform (e.g. Storybook zoom). */}\n <div\n data-slot=\"context-sidebar-container\"\n className={cn(\n 'fixed z-10 hidden overflow-clip bg-sidebar transition-[width] duration-300 lg:flex',\n 'right-0 w-(--context-sidebar-width) group-data-[collapsible=offcanvas]:w-0',\n )}\n style={{\n top: 'var(--announcement-height, 0px)',\n height: 'calc(100dvh - var(--announcement-height, 0px))',\n }}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"relative flex h-full w-(--context-sidebar-width) shrink-0 min-w-0 flex-col\"\n >\n <Sidebar.Content\n className={cn('flex flex-col overflow-y-auto p-4', className)}\n >\n {children}\n </Sidebar.Content>\n </div>\n </div>\n\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={handleRailClick}\n onMouseDown={handleResizeMouseDown}\n onFocus={(e) => e.currentTarget.blur()}\n data-sidebar=\"rail\"\n data-slot=\"context-sidebar-rail\"\n aria-label=\"Resize sidebar\"\n className={cn(\n 'fixed inset-y-0 z-20 hidden w-4 sm:flex',\n 'right-(--context-sidebar-width) group-data-[collapsible=offcanvas]:right-0',\n 'cursor-col-resize max-h-32 items-center justify-center top-1/2 translate-x-1/2 -translate-y-1/2 px-4',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n 'after:absolute after:inset-y-0 after:right-1/2 after:w-1 after:translate-x-1/2 after:rounded-full after:transition-transform',\n 'hover:after:translate-x-0 hover:after:bg-sidebar-border',\n 'outline-none focus-visible:ring-ring focus-visible:ring-2 focus-visible:border-ring transition-[right,transform] duration-300 bg-transparent!',\n isDragging && 'after:translate-x-0 after:bg-sidebar-border',\n )}\n />\n </aside>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Inset / loading\n * ---------------------------------------------------------------------- */\n\nfunction AppShellInset({\n className,\n style,\n children,\n loading = false,\n spacing = 24,\n ...props\n}: React.ComponentProps<'div'> & {\n /**\n * Shows a blocking loading overlay while keeping the shell (sidebar,\n * navbar) interactive. Content stays mounted but hidden.\n */\n loading?: boolean\n /** Spacing scale unit for `--calculated-spacing` (bottom paddings, widget offsets). */\n spacing?: number\n}) {\n const rightSidebar = React.useContext(AppShellRightSidebarContext)\n\n return (\n <Sidebar.Inset\n data-slot=\"app-shell-inset\"\n style={\n {\n '--sidebar-spacing': spacing,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n loading && 'relative min-h-0 overflow-hidden',\n 'max-lg:bg-dashboard-background! bg-dashboard-background',\n '[--calculated-spacing:--spacing(var(--sidebar-spacing))]',\n // `isolate` keeps composited children (e.g. the glass header's\n // backdrop-filter) inside the rounded overflow clip on all engines.\n 'w-full min-w-0 lg:overflow-clip isolate',\n 'max-lg:pb-(--calculated-spacing)',\n rightSidebar?.state === 'expanded' &&\n 'lg:peer-data-[variant=inset]:mr-0',\n className,\n )}\n {...props}\n >\n {loading && <AppShellLoading />}\n\n <div\n aria-hidden={loading || undefined}\n className={cn(loading ? 'hidden' : 'contents')}\n >\n {children}\n </div>\n </Sidebar.Inset>\n )\n}\n\nfunction AppShellLoading({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"app-shell-loading\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n className={cn(\n 'absolute inset-0 z-50 flex flex-col items-center justify-center gap-4 bg-dashboard-background',\n className,\n )}\n {...props}\n >\n <Loader />\n </div>\n )\n}\n\nconst AppShell = Object.assign(AppShellRoot, {\n Sidebar: AppShellSidebar,\n SidebarHeader: AppShellSidebarHeader,\n SidebarSection: AppShellSidebarSection,\n SidebarContent: AppShellSidebarContent,\n SidebarGroup: AppShellSidebarGroup,\n SidebarItem: AppShellSidebarItem,\n SidebarFooter: AppShellSidebarFooter,\n CommandButton: AppShellCommandButton,\n Copyright: AppShellCopyright,\n Header: AppShellHeader,\n Navbar: AppShellNavbar,\n NavbarItem: AppShellNavbarItem,\n Inset: AppShellInset,\n Loading: AppShellLoading,\n RightSidebar: AppShellRightSidebar,\n RightSidebarProvider: AppShellRightSidebarProvider,\n RightSidebarTrigger: AppShellRightSidebarTrigger,\n})\n\nexport { AppShell, useAppShellRightSidebar }\n","export const ANIMATION_DURATION = 0.2;\nexport const ANIMATION_EASE = 'easeInOut';\n\nexport const animations = {\n config: {\n duration: ANIMATION_DURATION,\n ease: ANIMATION_EASE,\n },\n presets: {\n ENTER_POSITIVE_EXIT_NEGATIVE: {\n initial: {\n opacity: 0,\n y: 10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: -10,\n },\n },\n ENTER_NEGATIVE_EXIT_POSITIVE: {\n initial: {\n opacity: 0,\n y: -10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: 10,\n },\n },\n ENTER_NEGATIVE_EXIT_NEGATIVE: {\n initial: {\n opacity: 0,\n y: -10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: -10,\n },\n },\n ENTER_POSITIVE_EXIT_POSITIVE: {\n initial: {\n opacity: 0,\n y: 10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: 10,\n },\n },\n },\n};\n\nexport const ANIMATION = {\n DURATION: ANIMATION_DURATION * 1000,\n DURATION_FLOAT: ANIMATION_DURATION,\n};\n\n","'use client'\n\nimport Cookies from 'js-cookie'\n\nimport * as React from 'react'\n\nimport { Slot } from '@/lib/slot'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\n\nimport { Icon, type IconSharedProps } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Separator } from '@/components/ui/separator'\nimport { Sheet } from '@/components/ui/sheet'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { Tooltip } from '@/components/ui/tooltip'\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar-state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 365 * 86400\n\nconst SIDEBAR_WIDTH = '18rem'\nconst SIDEBAR_WIDTH_ICON = '3rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = '['\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n sidebarWidth: string\n setSidebarWidth: (width: string) => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n\n const [openMobile, setOpenMobile] = React.useState(false)\n const [_open, _setOpen] = React.useState(defaultOpen)\n const [sidebarWidth, setSidebarWidth] = React.useState(SIDEBAR_WIDTH)\n\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open],\n )\n\n const toggleSidebar = React.useCallback(\n () =>\n isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open),\n [isMobile, setOpen, setOpenMobile],\n )\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n React.useLayoutEffect(() => {\n const saved = Cookies.get(\"sidebar-width\")\n if (saved) setSidebarWidth(saved)\n }, [])\n\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n sidebarWidth,\n setSidebarWidth,\n }),\n [\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n sidebarWidth,\n ],\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': sidebarWidth,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n )\n}\n\nfunction SidebarRoot({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n}) {\n\n const { isMobile, state, openMobile, setOpenMobile, sidebarWidth } =\n useSidebar()\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <Sheet.Content\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className={cn(\n 'w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden border-none',\n className,\n )}\n style={\n {\n '--sidebar-width': sidebarWidth,\n } as React.CSSProperties\n }\n side={side}\n >\n <Sheet.Header className=\"sr-only\">\n <Sheet.Title>{'title'}</Sheet.Title>\n <Sheet.Description>{'description'}</Sheet.Description>\n </Sheet.Header>\n\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </Sheet.Content>\n </Sheet>\n )\n }\n\n return (\n <div\n data-side={side}\n data-state={state}\n data-slot=\"sidebar\"\n data-variant={variant}\n suppressHydrationWarning\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n className=\"group peer text-sidebar-foreground hidden lg:block\"\n >\n <div\n data-slot=\"sidebar-gap\"\n suppressHydrationWarning\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-300',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed z-10 hidden transition-[left,right,width] duration-300 lg:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:-left-(--sidebar-width)'\n : 'right-0 group-data-[collapsible=offcanvas]:-right-(--sidebar-width)',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n style={\n {\n top: 'var(--announcement-height, 0px)',\n width: 'var(--sidebar-width)',\n height: 'calc(100dvh - var(--announcement-height, 0px))',\n } as React.CSSProperties\n }\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\ntype SidebarTriggerIconProps = IconSharedProps\n\nfunction SidebarTrigger({\n className,\n onClick,\n isOutsideSidebar = false,\n iconProps,\n ...props\n}: React.ComponentProps<typeof Button> & {\n isOutsideSidebar?: boolean\n iconProps?: SidebarTriggerIconProps\n}) {\n const { toggleSidebar, state } = useSidebar()\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n toggleSidebar()\n }\n\n const IconComponent = (\n <Icon\n className=\"size-5\"\n name={state === 'collapsed' ? 'SidebarToggled' : 'SidebarToggle'}\n {...iconProps}\n />\n )\n\n return (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n data-slot=\"sidebar-trigger\"\n data-sidebar=\"trigger\"\n className={className}\n onClick={handleClick}\n {...props}\n >\n {IconComponent}\n\n <span className=\"sr-only\">\n {isOutsideSidebar ? 'Collapse sidebar' : 'Expand sidebar'}\n </span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n tabIndex={-1}\n onClick={toggleSidebar}\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label={'sidebar.toggle'}\n // title={'sidebar.toggle'}\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full min-h-full flex-1 flex-col transition-[margin] duration-300 lg:peer-data-[variant=inset]:m-2 lg:peer-data-[variant=inset]:ml-0 lg:peer-data-[variant=inset]:rounded-2xl lg:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('bg-background h-8 w-full shadow-none', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-lg px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-300 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-lg p-0 outline-hidden transition-transform cursor-pointer focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 lg:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-sidebar=\"menu\"\n data-slot=\"sidebar-menu\"\n suppressHydrationWarning\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-lg p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] cursor-pointer hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-popup-open:hover:bg-sidebar-accent data-popup-open:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof Tooltip.Content>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button'\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Tooltip.Content\n side=\"right\"\n align=\"center\"\n hidden={state !== 'collapsed' || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-lg p-0 outline-hidden transition-transform cursor-pointer focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 lg:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-popup-open:opacity-100 lg:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-lg px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean\n}) {\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-lg px-2', className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-lg\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n size?: 'sm' | 'md'\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-lg px-2 outline-hidden cursor-pointer focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst Sidebar = Object.assign(SidebarRoot, {\n Provider: SidebarProvider,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Group: SidebarGroup,\n GroupAction: SidebarGroupAction,\n GroupContent: SidebarGroupContent,\n GroupLabel: SidebarGroupLabel,\n Header: SidebarHeader,\n Input: SidebarInput,\n Inset: SidebarInset,\n Menu: SidebarMenu,\n MenuAction: SidebarMenuAction,\n MenuBadge: SidebarMenuBadge,\n MenuButton: SidebarMenuButton,\n MenuItem: SidebarMenuItem,\n MenuSkeleton: SidebarMenuSkeleton,\n MenuSub: SidebarMenuSub,\n MenuSubButton: SidebarMenuSubButton,\n MenuSubItem: SidebarMenuSubItem,\n Rail: SidebarRail,\n Separator: SidebarSeparator,\n Trigger: SidebarTrigger,\n})\n\nexport { Sidebar, SIDEBAR_WIDTH, useSidebar }\n","import * as React from 'react'\n\nfunction subscribeMatchMedia(query: string, onStoreChange: () => void) {\n const mql = window.matchMedia(query)\n mql.addEventListener('change', onStoreChange)\n return () => mql.removeEventListener('change', onStoreChange)\n}\n\n/**\n * Starts as `false` on server and first client paint so SSR + hydration match.\n * Subscribes to `matchMedia` via useSyncExternalStore (avoids Sidebar Sheet vs div mismatch).\n */\nexport function useIsMobile({ breakpoint = 1024 } = {}) {\n const query = `(max-width: ${breakpoint - 1}px)`\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => subscribeMatchMedia(query, onStoreChange),\n [query],\n ),\n () => window.matchMedia(query).matches,\n () => false,\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\ntype InputProps = React.ComponentProps<'input'>\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ type, className, ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n data-slot=\"input\"\n suppressHydrationWarning\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground/50 placeholder:pointer-events-none placeholder:select-none bg-input flex h-12 w-full min-w-0 rounded-xl border border-transparent px-3 py-2 transition-all outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium text-foreground',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:brightness-75',\n 'read-only:pointer-events-none read-only:cursor-not-allowed read-only:brightness-75',\n className,\n )}\n {...props}\n />\n )\n },\n)\nInput.displayName = 'Input'\n\nexport { Input }\nexport type { InputProps }\n","'use client'\n\nimport { Separator as SeparatorPrimitive } from '@base-ui/react/separator'\n\nimport { cn } from '@/lib/cn'\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"separator-root\"\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Dialog as SheetPrimitive } from '@base-ui/react/dialog'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nfunction SheetRoot({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n asChild,\n children,\n ...props\n}: SheetPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n if (asChild && React.isValidElement(children)) {\n return (\n <SheetPrimitive.Trigger\n data-slot=\"sheet-trigger\"\n nativeButton={\n typeof children.type === 'string' ? children.type === 'button' : true\n }\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <SheetPrimitive.Trigger\n data-slot=\"sheet-trigger\"\n className=\"cursor-pointer\"\n {...props}\n >\n {children}\n </SheetPrimitive.Trigger>\n )\n}\n\nfunction SheetClose({\n asChild,\n children,\n ...props\n}: SheetPrimitive.Close.Props & {\n asChild?: boolean\n}) {\n if (asChild && React.isValidElement(children)) {\n return (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n nativeButton={\n typeof children.type === 'string' ? children.type === 'button' : true\n }\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n className=\"cursor-pointer\"\n {...props}\n >\n {children}\n </SheetPrimitive.Close>\n )\n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 transition-opacity duration-300',\n 'data-starting-style:opacity-0 data-ending-style:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: 'top' | 'right' | 'bottom' | 'left'\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background fixed z-50 flex flex-col gap-4 shadow-lg transition-transform ease-in-out duration-500 data-ending-style:duration-300',\n side === 'right' &&\n 'data-starting-style:translate-x-full data-ending-style:translate-x-full inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',\n side === 'left' &&\n 'data-starting-style:-translate-x-full data-ending-style:-translate-x-full inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',\n side === 'top' &&\n 'data-starting-style:-translate-y-full data-ending-style:-translate-y-full inset-x-0 top-0 h-auto border-b',\n side === 'bottom' &&\n 'data-starting-style:translate-y-full data-ending-style:translate-y-full inset-x-0 bottom-0 h-auto border-t',\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity cursor-pointer hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <Icon name=\"Xmark\" className=\"size-4\" />\n <span className=\"sr-only\">{'close'}</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex flex-col gap-1.5 p-4', className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: SheetPrimitive.Title.Props) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nconst Sheet = Object.assign(SheetRoot, {\n Close: SheetClose,\n Content: SheetContent,\n Description: SheetDescription,\n Footer: SheetFooter,\n Header: SheetHeader,\n Title: SheetTitle,\n Trigger: SheetTrigger,\n})\nexport { Sheet }\n","import { cn } from '@/lib/cn'\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n suppressHydrationWarning\n className={cn('bg-skeleton animate-pulse rounded-2xl', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\ninterface TooltipContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n isMobile: boolean\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction useTooltipContext() {\n const context = React.useContext(TooltipContext)\n if (!context) {\n throw new Error('Tooltip components must be used within a Tooltip')\n }\n return context\n}\n\nfunction TooltipProvider({\n delay = 400,\n timeout = 300,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n timeout={timeout}\n {...props}\n />\n )\n}\n\nfunction TooltipRoot({ ...props }: TooltipPrimitive.Root.Props) {\n const isMobile = useIsMobile()\n const [open, setOpen] = React.useState(false)\n\n const contextValue = React.useMemo(\n () => ({ open, setOpen, isMobile }),\n [open, isMobile],\n )\n\n return (\n <TooltipContext.Provider value={contextValue}>\n <TooltipProvider>\n <TooltipPrimitive.Root\n data-slot=\"tooltip\"\n open={open}\n onOpenChange={setOpen}\n {...props}\n />\n </TooltipProvider>\n </TooltipContext.Provider>\n )\n}\n\nfunction TooltipTrigger({\n onClick,\n asChild,\n children,\n ...props\n}: TooltipPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n const { open, setOpen, isMobile } = useTooltipContext()\n\n const handleClick: TooltipPrimitive.Trigger.Props['onClick'] = (e) => {\n if (isMobile) {\n e.preventDefault()\n setOpen(!open)\n }\n\n onClick?.(e)\n }\n\n if (asChild && React.isValidElement(children)) {\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n onClick={handleClick}\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n onClick={handleClick}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\nfunction TooltipContent({\n className,\n side,\n align,\n sideOffset = 0,\n children,\n ...props\n}: Omit<TooltipPrimitive.Popup.Props, 'className'> &\n Pick<TooltipPrimitive.Positioner.Props, 'side' | 'align' | 'sideOffset'> & {\n className?: string\n }) {\n const classes = className?.split(' ') ?? []\n\n const contentBackground = classes.find((cls) => cls.startsWith('bg-'))?.replace('bg-', '')\n const contentForeground = classes.find((cls) => cls.startsWith('text-'))?.replace('text-', '')\n\n const shadowClass = classes.find((cls) => cls.startsWith('shadow-'))\n const borderClasses = classes.filter((cls) => cls.startsWith('border'))\n\n const shadowMap: Record<string, string> = {\n 'shadow-sm': 'drop-shadow(0 1px 1px rgb(0 0 0 / 0.05))',\n 'shadow': 'drop-shadow(0 1px 3px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 2px rgb(0 0 0 / 0.06))',\n 'shadow-md': 'drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06))',\n 'shadow-lg': 'drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1))',\n 'shadow-xl': 'drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08))',\n 'shadow-2xl': 'drop-shadow(0 25px 25px rgb(0 0 0 / 0.15))',\n }\n\n const borderColorClass = classes.find((cls) => cls.startsWith('border-') && cls !== 'border')\n const borderColor = borderColorClass?.replace('border-', '')\n\n const filters: string[] = []\n\n if (shadowClass && shadowMap[shadowClass]) {\n filters.push(shadowMap[shadowClass])\n }\n\n if (borderClasses.length > 0) {\n const color = borderColor\n ? `var(--${borderColor})`\n : 'var(--border)'\n filters.push(`drop-shadow(0 0 0 1px ${color})`)\n }\n\n const cleanedClassName = classes\n .filter((cls) =>\n !cls.startsWith('shadow-') &&\n !cls.startsWith('border')\n )\n .join(' ')\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n data-slot=\"tooltip-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n style={\n {\n '--content-background': contentBackground\n ? `var(--${contentBackground})`\n : 'var(--primary)',\n '--content-foreground': contentForeground\n ? `var(--${contentForeground})`\n : 'var(--primary-foreground)',\n ...(filters.length > 0 && { filter: filters.join(' ') }),\n } as React.CSSProperties\n }\n className={cn(\n 'bg-(--content-background) text-(--content-foreground) z-50 w-fit origin-(--transform-origin) rounded-lg px-3 py-2 text-sm text-balance',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n cleanedClassName,\n )}\n {...props}\n >\n {children}\n\n <TooltipPrimitive.Arrow className=\"flex data-[side=bottom]:top-[-6px] data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 data-[side=left]:right-[-10px] data-[side=left]:rotate-90 data-[side=right]:left-[-10px] data-[side=right]:-rotate-90\">\n <svg width=\"14\" height=\"7\" viewBox=\"0 0 14 7\" fill=\"none\">\n <path\n d=\"M0 7L6.29289 0.707107C6.68342 0.316583 7.31658 0.316583 7.70711 0.707107L14 7H0Z\"\n className=\"fill-(--content-background)\"\n />\n </svg>\n </TooltipPrimitive.Arrow>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nconst Tooltip = Object.assign(TooltipRoot, { Provider: TooltipProvider, Content: TooltipContent, Trigger: TooltipTrigger })\n\nexport { Tooltip }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\ntype AccordionProps = Omit<\n AccordionPrimitive.Root.Props,\n 'value' | 'defaultValue' | 'onValueChange' | 'multiple'\n> & {\n /** Radix-compatible API: 'single' keeps at most one item open. */\n type?: 'single' | 'multiple'\n /** Kept for Radix API compatibility; Base UI single accordions are always collapsible. */\n collapsible?: boolean\n value?: string | string[]\n defaultValue?: string | string[]\n /** Receives a `string` when `type=\"single\"` and a `string[]` when `type=\"multiple\"`. */\n onValueChange?: (value: string & string[]) => void\n}\n\nfunction Accordion({\n type = 'single',\n collapsible: _collapsible,\n value,\n defaultValue,\n onValueChange,\n ...props\n}: AccordionProps) {\n const toArray = (v: string | string[] | undefined) =>\n v === undefined ? undefined : Array.isArray(v) ? v : [v]\n\n const handleValueChange = onValueChange\n ? (next: unknown[]) => {\n if (type === 'multiple') {\n const handle = onValueChange as (value: string[]) => void\n handle(next as string[])\n } else {\n const handle = onValueChange as (value: string) => void\n handle((next[next.length - 1] as string) ?? '')\n }\n }\n : undefined\n\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n multiple={type === 'multiple'}\n value={toArray(value)}\n defaultValue={toArray(defaultValue)}\n onValueChange={handleValueChange}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b last:border-b-0', className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-start gap-4 rounded-md p-4 text-left text-sm font-medium transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none cursor-pointer disabled:opacity-50 [&[data-panel-open]>svg]:rotate-0',\n className,\n )}\n {...props}\n >\n {children}\n\n <Icon name=\"ChevronDown\" className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200 -rotate-90 ml-auto\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className=\"h-(--accordion-panel-height) data-starting-style:h-0 data-ending-style:h-0 transition-[height] duration-200 ease-out overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn('p-4', className)}>{children}</div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n Accordion as AccordionRootPrimitive,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@/components/internal/accordion'\n\nconst cardShell =\n 'flex h-fit w-full flex-col bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group'\n\nconst cardContentShell = cn(\n 'relative flex flex-1 flex-col gap-0 overflow-hidden',\n 'bg-muted [--card-content-radius:calc(var(--card-radius)-var(--card-padding))] [--card-content-padding:1rem] rounded-(--card-content-radius)',\n)\n\nfunction AccordionRoot({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionRootPrimitive>) {\n return (\n <div className={cn(cardShell, className)}>\n <AccordionRootPrimitive\n data-slot=\"accordion\"\n className={cardContentShell}\n {...props}\n />\n </div>\n )\n}\n\nfunction AccordionItemExtended({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionItem>) {\n return (\n <AccordionItem\n className={cn(\n 'rounded-none border-t-4 border-card first:border-t-0',\n 'not-data-open:last:rounded-b-lg',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AccordionTriggerExtended({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionTrigger>) {\n return (\n <AccordionTrigger\n className={cn(\n 'min-h-12 rounded-none border-0 bg-card/50 md:text-base hover:bg-card/75',\n 'first:rounded-t-lg last:not-data-panel-open:rounded-b-lg',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AccordionContentExtended({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionContent>) {\n return (\n <AccordionContent\n className={cn(\n 'border-t-4 border-card',\n className,\n )}\n {...props}\n />\n )\n}\n\nAccordionRoot.displayName = 'Accordion'\nAccordionItemExtended.displayName = 'Accordion.Item'\nAccordionTriggerExtended.displayName = 'Accordion.Trigger'\nAccordionContentExtended.displayName = 'Accordion.Content'\n\nconst Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItemExtended,\n Trigger: AccordionTriggerExtended,\n Content: AccordionContentExtended,\n})\n\nexport { Accordion }\n","import React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu } from '@/components/ui/dropdown-menu'\nimport type { ComponentVariant } from '@/types'\n\ntype ActionItem = {\n label: string\n icon?: IconType\n href?: string\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void\n disabled?: boolean\n className?: string\n variant?: ComponentVariant\n}\n\ntype ActionGroupAlign = 'start' | 'center' | 'end'\n\nexport function ActionGroup({\n items = [],\n disabled,\n children,\n className,\n align = 'end',\n}: {\n items?: ActionItem[][]\n disabled?: boolean\n className?: string\n children?: React.ReactNode\n align?: ActionGroupAlign\n}) {\n const itemsLength = items.flat().length\n const isDisabled = !!disabled || itemsLength === 0\n\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger\n asChild\n disabled={isDisabled}\n className={className}\n data-action-group-trigger\n onClick={(e) => e.stopPropagation()}\n >\n {children ?? (\n <Button\n variant=\"secondary\"\n disabled={isDisabled}\n className=\"relative min-h-8 min-w-8 max-h-8 max-w-8 p-0 shrink-0 disabled:opacity-50\"\n >\n <Icon className=\"h-4 w-4\" name=\"Dots\" />\n\n {isDisabled && (\n <div className=\"absolute top-0 right-0 bg-card rounded-full p-1\">\n <Icon className=\"size-2 shrink-0\" name=\"Lock\" />\n </div>\n )}\n </Button>\n )}\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Content\n align={align}\n className=\"min-w-36 w-(--anchor-width) bg-sidebar/50 rounded-2xl overflow-hidden\"\n >\n {items.map((group, groupIndex) => {\n const isLastGroup = groupIndex === items.length - 1\n\n return (\n <React.Fragment key={groupIndex}>\n <DropdownMenu.Group key={groupIndex} className=\"flex flex-col\">\n {group.map((item, itemIndex) => {\n const isFirst = groupIndex === 0 && itemIndex === 0\n const isLast = isLastGroup && itemIndex === group.length - 1\n\n return (\n <DropdownMenu.Item\n key={`${item.label}-${itemIndex}`}\n onClick={(e) => {\n e.stopPropagation()\n item.onClick?.(\n e as unknown as React.MouseEvent<HTMLButtonElement>,\n )\n }}\n data-variant={item.variant ?? 'default'}\n className={cn(\n 'text-muted-foreground',\n isFirst && 'rounded-t-xl',\n isLast && 'rounded-b-xl',\n item.disabled && 'opacity-50 cursor-not-allowed',\n 'flex items-center gap-2 w-full relative z-10 group/menu-button hover:bg-muted! data-[active=true]:bg-transparent data-[active=false]:hover:text-foreground/75 text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] outline-none cursor-pointer ring-0!',\n 'data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:text-destructive/80 data-[variant=destructive]:hover:bg-destructive/10! data-[variant=destructive]:hover:border-destructive/20',\n item.className,\n )}\n >\n <Icon\n name={item.icon ?? 'Dots'}\n className=\"size-4 text-current\"\n />\n\n {item.label}\n </DropdownMenu.Item>\n )\n })}\n </DropdownMenu.Group>\n\n {!isLastGroup && (\n <DropdownMenu.Separator className=\"max-lg:hidden\" />\n )}\n </React.Fragment>\n )\n })}\n </DropdownMenu.Content>\n </DropdownMenu>\n )\n}\n","'use client'\n\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu'\n\nimport * as React from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon } from '@/components/icon'\n\nimport { useHaptics } from '@/hooks/use-haptics'\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { ANIMATION } from '@/constants/animations'\n\nimport { Drawer } from '@/components/ui/drawer'\n\nimport { KeyboardShortcut } from './keyboard-shortcut'\n\ntype DropdownMenuContextValue = {\n isMobile: boolean\n open: boolean\n onOpenChange: (open: boolean) => void\n view: React.ReactNode | null\n setView: (view: React.ReactNode | null) => void\n}\n\nconst DropdownMenuContext =\n React.createContext<DropdownMenuContextValue | null>(null)\n\ntype DropdownMenuProps = Omit<MenuPrimitive.Root.Props, 'onOpenChange'> & {\n onOpenChange?: (open: boolean) => void\n}\n\nfunction DropdownMenuRoot({\n open,\n onOpenChange,\n defaultOpen,\n children,\n ...props\n}: DropdownMenuProps) {\n const isMobile = useIsMobile()\n\n const [drawerOpen, setDrawerOpen] = React.useState(defaultOpen ?? false)\n const [view, setView] = React.useState<React.ReactNode | null>(null)\n\n const internalOpen = open ?? drawerOpen\n\n const handleOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setDrawerOpen(isOpen)\n onOpenChange?.(isOpen)\n\n if (!isOpen) {\n setTimeout(() => setView(null), 200)\n }\n },\n [onOpenChange],\n )\n\n return (\n <DropdownMenuContext.Provider\n value={{ isMobile, open: internalOpen, onOpenChange: handleOpenChange, view, setView }}\n >\n <MenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n open={isMobile ? false : internalOpen}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </MenuPrimitive.Root>\n </DropdownMenuContext.Provider>\n )\n}\n\nfunction DropdownMenuPortal({\n children,\n ...props\n}: MenuPrimitive.Portal.Props) {\n return (\n <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props}>\n {children}\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuTrigger({\n className,\n asChild,\n children,\n ...props\n}: MenuPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n const { trigger } = useHaptics()\n\n if (asChild && React.isValidElement<{ className?: string }>(children)) {\n return (\n <MenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n nativeButton={true}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n render={(triggerProps) => {\n return React.cloneElement(children, {\n ...triggerProps,\n ...children.props,\n className: cn(className, children.props.className),\n })\n }}\n />\n )\n }\n\n return (\n <MenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n className={cn('cursor-pointer', className)}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n >\n {children}\n </MenuPrimitive.Trigger>\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n align = 'start',\n side = 'bottom',\n children,\n ...props\n}: MenuPrimitive.Positioner.Props & {\n sideOffset?: number\n}) {\n const { trigger } = useHaptics()\n\n const ctx = React.useContext(DropdownMenuContext)\n\n if (ctx?.isMobile) {\n return (\n <Drawer\n open={ctx.open}\n direction=\"bottom\"\n onOpenChange={ctx.onOpenChange}\n >\n <Drawer.Content title={'dropdownMenu.title'} showDivider>\n <div className=\"overflow-y-auto overflow-x-hidden p-2 pb-6\">\n <AnimatePresence mode=\"wait\">\n {ctx.view ? (\n <motion.div\n key=\"submenu\"\n initial={{ opacity: 0, transform: 'translateY(20px)' }}\n animate={{ opacity: 1, transform: 'translateY(0px)' }}\n exit={{ opacity: 0, transform: 'translateY(20px)' }}\n transition={{ duration: ANIMATION.DURATION_FLOAT }}\n >\n <button\n onClick={() => {\n trigger('click')\n ctx.setView(null)\n }}\n className=\"flex w-full items-center gap-2 rounded-sm p-4 text-sm font-medium hover:bg-accent text-muted-foreground\"\n >\n <Icon name=\"ChevronRight\" className=\"size-4 rotate-180\" />\n {'dropdownMenu.back'}\n </button>\n\n {ctx.view}\n </motion.div>\n ) : (\n <motion.div\n key=\"main\"\n initial={{ opacity: 0, transform: 'translateY(-20px)' }}\n animate={{ opacity: 1, transform: 'translateY(0px)' }}\n exit={{ opacity: 0, transform: 'translateY(-20px)' }}\n transition={{ duration: ANIMATION.DURATION_FLOAT }}\n >\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </Drawer.Content>\n </Drawer>\n )\n }\n\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n data-slot=\"dropdown-menu-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n {...props}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\n 'z-50! max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg glass-popover p-1 text-popover-foreground shadow-md outline-none',\n 'transition-[transform,scale,opacity,filter] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0 data-starting-style:blur-[2px]',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:blur-[2px] data-ending-style:duration-100 data-ending-style:ease-in',\n className,\n )}\n >\n {children}\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ children, ...props }: MenuPrimitive.Group.Props) {\n return (\n <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props}>\n {children}\n </MenuPrimitive.Group>\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n resetClassName = false,\n asChild,\n children,\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: 'default' | 'destructive'\n resetClassName?: boolean\n asChild?: boolean\n}) {\n const { trigger } = useHaptics()\n const ctx = React.useContext(DropdownMenuContext)\n\n const itemClassName = cn(\n !resetClassName &&\n \"relative flex items-center gap-2 rounded-sm p-4 lg:px-2 lg:py-2 text-sm font-medium outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:data-highlighted:bg-destructive/5 data-[variant=destructive]:data-highlighted:text-destructive dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive! cursor-pointer\",\n className,\n )\n\n if (ctx?.isMobile) {\n const { onClick, disabled } = props as {\n onClick?: React.MouseEventHandler\n disabled?: boolean\n }\n\n const mobileItemClassName = cn(\n !resetClassName &&\n \"relative flex items-center gap-2 rounded-sm p-4 lg:px-2 lg:py-2 text-sm font-medium outline-hidden select-none hover:bg-accent hover:text-accent-foreground active:bg-accent active:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:bg-destructive/5 data-[variant=destructive]:hover:text-destructive dark:data-[variant=destructive]:hover:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground cursor-pointer w-full text-left\",\n className,\n )\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children as React.ReactElement<React.HTMLAttributes<HTMLElement>>,\n {\n className: cn(\n mobileItemClassName,\n (children as React.ReactElement<{ className?: string }>).props\n .className,\n ),\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n trigger('click')\n\n const childOnClick = (\n children as React.ReactElement<React.HTMLAttributes<HTMLElement>>\n ).props.onClick\n\n childOnClick?.(e)\n ctx.onOpenChange(false)\n },\n },\n )\n }\n\n return (\n <button\n type=\"button\"\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n disabled={disabled}\n className={mobileItemClassName}\n onClick={(e) => {\n trigger('click')\n onClick?.(e)\n ctx.onOpenChange(false)\n }}\n >\n {children}\n </button>\n )\n }\n\n if (asChild && React.isValidElement(children)) {\n const isNativeButton = children.type === 'button'\n\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n nativeButton={isNativeButton}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n closeOnClick={true}\n render={(itemProps) => {\n return React.cloneElement(children, {\n ...itemProps,\n ...(children.props as { className?: string }),\n className: cn(\n itemClassName,\n 'flex items-center gap-3 w-full relative z-10 group/menu-button hover:bg-accent! data-[active=true]:bg-transparent p-2! text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] rounded-sm outline-none cursor-pointer ring-0!',\n (children.props as { className?: string }).className,\n ),\n } as React.ComponentProps<typeof MenuPrimitive.Item>)\n }}\n />\n )\n }\n\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={itemClassName}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n closeOnClick={true}\n >\n {children}\n </MenuPrimitive.Item>\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n onCheckedChange,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n onCheckedChange={onCheckedChange}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenuPrimitive.CheckboxItemIndicator>\n <Icon name=\"Check\" className=\"size-4\" />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n children,\n ...props\n}: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props}>\n {children}\n </MenuPrimitive.RadioGroup>\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm p-4 lg:py-2 lg:pr-2 lg:pl-8 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenuPrimitive.RadioItemIndicator>\n <Icon name=\"Check\" className=\"size-4\" />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n 'px-2 py-1 text-xs font-medium text-muted-foreground select-none data-inset:pl-8',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('my-2 lg:-mx-1 lg:my-1 h-[0.5px] bg-border/50', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<typeof KeyboardShortcut>) {\n return (\n <KeyboardShortcut\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nconst DropdownMenuSubContext = React.createContext<{\n content: React.ReactNode | null\n setContent: (content: React.ReactNode | null) => void\n} | null>(null)\n\nfunction DropdownMenuSub({\n children,\n ...props\n}: MenuPrimitive.SubmenuRoot.Props) {\n const ctx = React.useContext(DropdownMenuContext)\n const [content, setContent] = React.useState<React.ReactNode | null>(null)\n\n if (ctx?.isMobile) {\n return (\n <DropdownMenuSubContext.Provider value={{ content, setContent }}>\n {children as React.ReactNode}\n </DropdownMenuSubContext.Provider>\n )\n }\n\n return (\n <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props}>\n {children}\n </MenuPrimitive.SubmenuRoot>\n )\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n const { trigger } = useHaptics()\n\n const ctx = React.useContext(DropdownMenuContext)\n const subCtx = React.useContext(DropdownMenuSubContext)\n\n const triggerClassName = cn(\n 'flex items-center gap-3 w-full relative z-10 group/menu-button hover:bg-accent! data-[active=true]:bg-transparent p-2 text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] rounded-sm outline-none cursor-pointer ring-0!',\n className,\n )\n\n if (ctx?.isMobile) {\n return (\n <button\n type=\"button\"\n className={triggerClassName}\n onClick={() => {\n trigger('click')\n ctx.setView(subCtx?.content ?? null)\n }}\n >\n {children}\n <Icon name=\"ChevronRight\" className=\"ml-auto size-4\" />\n </button>\n )\n }\n\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={triggerClassName}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n >\n {children}\n <Icon name=\"ChevronRight\" className=\"ml-auto size-4\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n sideOffset = 0,\n alignOffset = -4,\n children,\n}: {\n className?: string\n sideOffset?: number\n alignOffset?: number\n children?: React.ReactNode\n}) {\n const ctx = React.useContext(DropdownMenuContext)\n const subCtx = React.useContext(DropdownMenuSubContext)\n\n React.useEffect(() => {\n if (ctx?.isMobile) {\n subCtx?.setContent(children ?? null)\n }\n }, [children, ctx?.isMobile, subCtx])\n\n if (ctx?.isMobile) {\n return null\n }\n\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n side=\"right\"\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className=\"z-50\"\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'z-50! min-w-32 origin-(--transform-origin) overflow-hidden rounded-lg glass-popover p-1 text-popover-foreground shadow-lg',\n 'transition-[transform,scale,opacity,filter] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0 data-starting-style:blur-[2px]',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:blur-[2px] data-ending-style:duration-100 data-ending-style:ease-in',\n className,\n )}\n >\n {children}\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuArrow({ className, ...props }: MenuPrimitive.Arrow.Props) {\n return (\n <MenuPrimitive.Arrow\n data-slot=\"dropdown-menu-arrow\"\n className={cn('fill-popover', className)}\n {...props}\n />\n )\n}\n\nconst DropdownMenu = Object.assign(DropdownMenuRoot, {\n Arrow: DropdownMenuArrow,\n CheckboxItem: DropdownMenuCheckboxItem,\n Content: DropdownMenuContent,\n Group: DropdownMenuGroup,\n Item: DropdownMenuItem,\n Label: DropdownMenuLabel,\n Portal: DropdownMenuPortal,\n RadioGroup: DropdownMenuRadioGroup,\n RadioItem: DropdownMenuRadioItem,\n Separator: DropdownMenuSeparator,\n Shortcut: DropdownMenuShortcut,\n Sub: DropdownMenuSub,\n SubContent: DropdownMenuSubContent,\n SubTrigger: DropdownMenuSubTrigger,\n Trigger: DropdownMenuTrigger,\n})\n\nexport { DropdownMenu }\n","'use client'\n\nimport { Drawer as DrawerPrimitive } from 'vaul'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\n/**\n * Move focus into the drawer panel when it opens so the trigger is not left\n * focused while Radix applies aria-hidden on page roots (avoids console warnings).\n */\nfunction focusFirstFocusableInDrawer(container: HTMLElement) {\n const el = container.querySelector<HTMLElement>(\n [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(','),\n )\n el?.focus()\n}\n\nfunction DrawerRoot({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return (\n <DrawerPrimitive.Trigger\n data-slot=\"drawer-trigger\"\n className=\"cursor-pointer\"\n {...props}\n />\n )\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return (\n <DrawerPrimitive.Close\n data-slot=\"drawer-close\"\n className=\"cursor-pointer\"\n {...props}\n />\n )\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n title = 'Title',\n showDivider = false,\n onOpenAutoFocus,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content> & {\n title?: string\n showDivider?: boolean\n}) {\n const handleOpenAutoFocus = React.useCallback(\n (event: Event) => {\n onOpenAutoFocus?.(\n event as Parameters<\n NonNullable<\n React.ComponentProps<\n typeof DrawerPrimitive.Content\n >['onOpenAutoFocus']\n >\n >[0],\n )\n if (event.defaultPrevented) return\n\n event.preventDefault()\n const root = event.currentTarget\n if (root instanceof HTMLElement) {\n focusFirstFocusableInDrawer(root)\n }\n },\n [onOpenAutoFocus],\n )\n\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n aria-describedby={undefined}\n onOpenAutoFocus={handleOpenAutoFocus}\n className={cn(\n 'group/drawer-content bg-background fixed z-50 flex h-auto flex-col ring-0 focus:ring-0',\n 'data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b',\n 'data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t',\n 'data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm',\n 'data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm',\n className,\n )}\n {...props}\n >\n <DrawerTitle className=\"sr-only\">{title}</DrawerTitle>\n\n {showDivider && (\n <div className=\"bg-ring/25 mx-auto mt-4 hidden h-2 w-1/5 shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n )}\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n 'flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nconst Drawer = Object.assign(DrawerRoot, {\n Close: DrawerClose,\n Content: DrawerContent,\n Description: DrawerDescription,\n Footer: DrawerFooter,\n Header: DrawerHeader,\n Overlay: DrawerOverlay,\n Portal: DrawerPortal,\n Title: DrawerTitle,\n Trigger: DrawerTrigger,\n})\nexport { Drawer }\n","import * as React from \"react\"\nimport { cn } from \"@/lib/cn\"\n\nexport const KeyboardShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nKeyboardShortcut.displayName = \"KeyboardShortcut\"\n","import * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nconst alertVariants = cva(\n 'relative w-fit rounded-2xl px-4 py-3 text-sm grid gap-y-0.5 has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] items-start [&>svg]:size-4 [&>svg]:translate-y-1 [&:has(>[data-slot=alert-title],[data-slot=alert-description])]:has-[>svg]:gap-x-2 [&:has(*[data-slot=alert-description]):not(:has(*[data-slot=alert-title]))]:[&>svg]:translate-y-0.5 [&:not(:has(*[data-slot=alert-title])):not(:has(*[data-slot=alert-description]))]:[&>svg]:translate-y-0 [&>svg]:text-current [&:not(:has([data-slot=alert-title]))]:*:data-[slot=alert-description]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-destructive/5 [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/70',\n warning:\n 'text-warning bg-warning/5 [&>svg]:text-current *:data-[slot=alert-description]:text-warning/70',\n info: 'text-info bg-info/5 [&>svg]:text-current *:data-[slot=alert-description]:text-info/70',\n success:\n 'text-success bg-success/5 [&>svg]:text-current *:data-[slot=alert-description]:text-success/70',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nfunction AlertRoot({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 text-base', className)}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst Alert = Object.assign(AlertRoot, { Title: AlertTitle, Description: AlertDescription })\nexport { Alert }\n","import * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2 py-0.5 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n warning:\n 'border-transparent bg-warning text-warning-foreground hover:bg-warning/80',\n success:\n 'border-transparent bg-success text-success-foreground hover:bg-success/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import React, { useEffect, useState } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Input } from '@/components/ui/input'\n\nexport const BrandDomainInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<'input'>\n>(function BrandDomainInput(props, ref) {\n const isMobile = useIsMobile()\n const [prefix, setPrefix] = useState('')\n\n useEffect(() => {\n setPrefix(isMobile ? '@' : `${'onne.chat'}/@`)\n }, [isMobile])\n\n return (\n <div className=\"flex w-full\">\n <div\n className={cn(\n 'flex items-center justify-center px-3 py-2 text-muted-foreground text-sm whitespace-nowrap select-none',\n 'bg-accent h-12 w-fit rounded-xl rounded-r-none',\n isMobile && 'aspect-square size-12',\n )}\n >\n {prefix}\n </div>\n\n <Input\n type=\"text\"\n ref={ref}\n {...props}\n className={cn('rounded-l-none!', props.className)}\n />\n </div>\n )\n})\n","\nimport { cn } from '@/lib/cn'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\n\ninterface BreadcrumbItem {\n label: string\n href?: string\n}\n\ninterface BreadcrumbProps {\n items: BreadcrumbItem[]\n className?: string\n hideBackButton?: boolean\n disableLinks?: boolean\n}\n\nexport function Breadcrumb({ items, className, hideBackButton, disableLinks }: BreadcrumbProps) {\n const penultimate = items.length > 1 ? items[items.length - 2] : null\n\n return (\n <div className={cn('flex items-center gap-3', className)}>\n {penultimate?.href && !hideBackButton && (\n <Button\n asChild\n size=\"icon-sm\"\n variant=\"secondary\"\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n >\n <a href={penultimate.href}>\n <Icon name=\"ArrowLeft\" className=\"size-4\" />\n </a>\n </Button>\n )}\n\n <nav aria-label=\"breadcrumb\" className=\"flex items-center gap-1 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n\n return (\n <span key={index} className=\"flex items-center gap-1\">\n {index > 0 && (\n <Icon\n name=\"ChevronRight\"\n className=\"size-3.5 text-muted-foreground\"\n />\n )}\n {item.href && !isLast && !disableLinks ? (\n <a\n href={item.href}\n className={cn(\n 'inline-flex items-center rounded-lg text-muted-foreground hover:text-foreground',\n 'outline-none focus-visible:outline-none focus-visible:ring-inset focus-visible:ring-[3px] focus-visible:ring-ring/50',\n )}\n >\n {item.label}\n </a>\n ) : (\n <span\n className={cn(\n isLast\n ? 'text-foreground font-medium'\n : 'text-muted-foreground',\n )}\n >\n {item.label}\n </span>\n )}\n </span>\n )\n })}\n </nav>\n </div>\n )\n}\n","'use client';\n\nimport React from 'react';\n\nimport { motion } from 'motion/react';\n\nimport { cn } from '@/lib/cn';\n\nfunction usePrefersReducedMotion() {\n const [reduced, setReduced] = React.useState(false);\n\n React.useEffect(() => {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n const sync = () => setReduced(mq.matches);\n sync();\n mq.addEventListener('change', sync);\n return () => mq.removeEventListener('change', sync);\n }, []);\n\n return reduced;\n}\n\ninterface CardSliderProps extends React.ComponentProps<'div'> {\n /** Zero-based index of the visible panel */\n index: number;\n /** Duration in ms (ignored when `prefers-reduced-motion: reduce`) */\n transitionDurationMs?: number;\n}\n\n/**\n * Horizontal slide between step panels inside a card (viewport + flex track).\n * Each direct child is one full-width step.\n */\nfunction CardSlider({\n index,\n className,\n children,\n transitionDurationMs = 300,\n ...props\n}: CardSliderProps) {\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const items = React.Children.toArray(children).filter(Boolean);\n const count = items.length;\n\n const safeIndex =\n count === 0 ? 0 : Math.max(0, Math.min(Math.floor(index), count - 1));\n\n const transformTransition = prefersReducedMotion\n ? 'none'\n : `transform ${transitionDurationMs}ms cubic-bezier(0.32, 0.72, 0, 1)`;\n\n const slideRefs = React.useRef<(HTMLDivElement | null)[]>([]);\n const [heights, setHeights] = React.useState<number[]>([]);\n\n React.useLayoutEffect(() => {\n slideRefs.current = slideRefs.current.slice(0, count);\n }, [count]);\n\n React.useLayoutEffect(() => {\n const elements = slideRefs.current\n .slice(0, count)\n .filter((el): el is HTMLDivElement => el !== null);\n if (elements.length === 0) return;\n\n const measure = () => {\n setHeights(prev => {\n const next: number[] = [];\n for (let i = 0; i < count; i++) {\n const el = slideRefs.current[i];\n if (!el) {\n next.push(0);\n continue;\n }\n // scrollHeight: full content height (grid row height would be max of all columns otherwise).\n const h = Math.max(\n el.scrollHeight,\n el.getBoundingClientRect().height,\n );\n next.push(h);\n }\n if (\n prev.length === next.length &&\n prev.every((v, i) => v === next[i])\n ) {\n return prev;\n }\n return next;\n });\n };\n\n measure();\n const ro = new ResizeObserver(measure);\n elements.forEach(el => ro.observe(el));\n return () => ro.disconnect();\n }, [count, safeIndex]);\n\n const activeHeight = heights[safeIndex] ?? 0;\n const durationSec = prefersReducedMotion ? 0 : transitionDurationMs / 1000;\n\n if (count === 0) return null;\n\n const slideShare = 100 / count;\n\n return (\n <div\n data-slot=\"card-slider\"\n className={cn(\n 'min-h-0 min-w-0 w-full max-w-full overflow-x-clip overflow-y-visible',\n className,\n )}\n {...props}\n >\n {/*\n Inactive columns are collapsed (h-0 + overflow hidden + min-h-0) so the grid row\n height is only the active step — not max(all steps), which forced wrong viewport\n height and inner scroll. Active step is never given the collapsed classes.\n */}\n <motion.div\n className=\"min-h-0 w-full overflow-x-clip overflow-y-visible\"\n initial={false}\n animate={\n activeHeight > 0 ? { height: activeHeight } : { height: 'auto' }\n }\n transition={{\n height: {\n duration: durationSec,\n ease: [0.32, 0.72, 0, 1],\n },\n }}\n >\n <div\n className=\"grid min-h-0 will-change-transform items-start\"\n style={{\n width: `${count * 100}%`,\n gridTemplateColumns: `repeat(${count}, minmax(0, 1fr))`,\n transform: `translateX(-${safeIndex * slideShare}%)`,\n transition: transformTransition,\n }}\n >\n {items.map((child, i) => (\n <div\n key={i}\n ref={el => {\n slideRefs.current[i] = el;\n }}\n className={cn(\n 'box-border min-h-0 min-w-0 max-w-full w-full',\n i !== safeIndex &&\n 'h-0 max-h-0 overflow-hidden border-0 p-0 pointer-events-none',\n )}\n aria-hidden={i !== safeIndex}\n >\n {child}\n </div>\n ))}\n </div>\n </motion.div>\n </div>\n );\n}\n\ninterface CardContextValue {\n hasContent: boolean;\n}\n\nconst CardContext = React.createContext<CardContextValue>({\n hasContent: false,\n});\n\ninterface CardProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardRoot({ className, children, ...props }: CardProps) {\n const hasContent = React.Children.toArray(children).some(\n child => React.isValidElement(child) && child.type === CardContent,\n );\n\n return (\n <CardContext.Provider value={{ hasContent }}>\n <div\n className={cn(\n 'flex flex-col bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group w-full h-fit',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </CardContext.Provider>\n );\n}\n\ninterface CardHeaderProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardHeader({ className, children, ...props }: CardHeaderProps) {\n const { hasContent } = React.useContext(CardContext);\n\n return (\n <div\n className={cn(\n 'p-4 flex items-center justify-start gap-3 min-h-14',\n hasContent && 'mb-1',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\ninterface CardContentProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardContent({ className, children, ...props }: CardContentProps) {\n return (\n <div\n className={cn(\n 'relative bg-muted flex flex-1 flex-col gap-4 [--card-content-radius:calc(var(--card-radius)-var(--card-padding))] [--card-content-padding:1rem] rounded-(--card-content-radius) p-(--card-content-padding) overflow-hidden',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\ninterface CardFooterProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardFooter({ className, children, ...props }: CardFooterProps) {\n const { hasContent } = React.useContext(CardContext);\n\n return (\n <div\n suppressHydrationWarning\n className={cn(\n 'p-4 flex items-center justify-start gap-3',\n hasContent && 'mt-1',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Content: CardContent,\n Footer: CardFooter,\n Slider: CardSlider,\n});\n\n/** Use these named exports from Server Components — `Card.Header` can be undefined across the RSC boundary. */\nexport { CardContent, CardFooter, CardHeader, CardSlider };\n","'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { Icon } from '@/components/icon'\nimport { SocialIcon } from '@/components/icon/social'\n\nimport { AssistantChat, AssistantChatTheme, type ChatMessage } from './chat'\n\nexport const ChatPreview = ({\n messages,\n className,\n}: {\n messages: ChatMessage[]\n className?: string\n}) => {\n const options = useMemo(\n () => [\n {\n label: 'WhatsApp',\n value: 'whatsapp' as const,\n icon: (props: { className?: string }) => (\n <SocialIcon.WhatsApp {...props} />\n ),\n },\n {\n label: 'Instagram',\n value: 'instagram' as const,\n disabled: true,\n icon: (props: { className?: string }) => (\n <SocialIcon.Instagram {...props} />\n ),\n },\n {\n label: 'Messenger',\n value: 'messenger' as const,\n disabled: true,\n icon: (props: { className?: string }) => (\n <SocialIcon.Messenger {...props} />\n ),\n },\n {\n label: 'Webchat',\n value: 'webchat' as const,\n disabled: true,\n icon: (props: { className?: string }) => (\n <Icon name=\"ChatBot\" {...props} />\n ),\n },\n ],\n [],\n )\n\n const internalMessages: ChatMessage[] = useMemo(() => messages, [messages])\n\n const [theme, setTheme] = useState<AssistantChatTheme>(\n options.filter((option) => !option.disabled)[0].value,\n )\n\n const [hasCompletedCycle, setHasCompletedCycle] = useState(false)\n\n const currentTheme =\n options.find(({ value }) => value === theme) ?? options[0]\n\n useEffect(() => {\n if (hasCompletedCycle) {\n return\n }\n\n const activeOptions = options.filter((option) => !option.disabled)\n\n const currentIndex = activeOptions.findIndex(({ value }) => value === theme)\n\n const nextIndex = (currentIndex + 1) % activeOptions.length\n const nextTheme = activeOptions[nextIndex].value\n\n const isCompletingCycle =\n nextIndex === 0 && currentIndex === activeOptions.length - 1\n\n if (isCompletingCycle) {\n setHasCompletedCycle(true)\n\n const timer = setTimeout(() => {\n setTheme(nextTheme)\n }, 5000)\n\n return () => clearTimeout(timer)\n }\n\n const timer = setTimeout(() => {\n setTheme(nextTheme)\n }, 5000)\n\n return () => clearTimeout(timer)\n }, [theme, options, hasCompletedCycle])\n\n return (\n <div className=\"flex flex-col gap-4 w-full max-lg:max-w-xl\">\n {/* <div className=\"flex items-center gap-1 justify-center lg:justify-end max-sm:w-full sm:overflow-x-visible max-sm:overflow-x-auto snap-mandatory no-scrollbar py-1\">\n {options.map(({ label, value, icon }) => {\n const isActive = theme === value\n const IconComponent = () => icon({ className: 'size-3.5 shrink-0' })\n\n return (\n <Button\n size={isActive ? 'icon' : 'sm'}\n key={value}\n onClick={() => {\n setHasCompletedCycle(false)\n setTheme(value as AssistantChatTheme)\n }}\n className={cn(\n 'group relative px-2.5 py-1.5 rounded-full border flex items-center justify-center gap-1.5 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] h-8 shrink-0 cursor-pointer transition-[transform,box-shadow] duration-500 ease-in-out transform',\n isActive\n ? 'bg-card hover:bg-accent/90 text-foreground border-transparent w-fit min-w-8 animate-in zoom-in-95 duration-300'\n : 'bg-card/50 text-foreground/25 hover:bg-accent/50 hover:text-foreground/50 border-border/40 w-8 aspect-square hover:border-border/60',\n )}\n >\n <IconComponent />\n\n {isActive && (\n <span className=\"leading-none select-none w-fit text-xs animate-in slide-in-from-left-2 fade-in-0 duration-300\">\n {label}\n </span>\n )}\n </Button>\n )\n })}\n </div> */}\n\n <div className=\"animate-in fade-in-0 duration-500 ease-in-out\">\n <AssistantChat\n theme={theme}\n messages={internalMessages}\n name={currentTheme.label}\n disabled={currentTheme?.disabled}\n icon={currentTheme.icon({ className: 'size-4 shrink-0' })}\n className={className}\n />\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { OnnebookLogo } from '@/components/ui/logo';\nimport { TextShimmer } from '@/components/ui/shimmer-text';\n\nexport type ChatMessage = {\n role: 'user' | 'assistant';\n content: string;\n};\n\nexport type AssistantChatTheme =\n | 'webchat'\n | 'whatsapp'\n | 'instagram'\n | 'messenger';\n\ntype ThemeStyles = {\n container: string;\n header: string;\n badge: string;\n avatarUser: string;\n avatarAssistant: string;\n bubble?: string;\n bubbleUser: string;\n bubbleAssistant: string;\n input: string;\n button: string;\n title: string;\n inputContainer: string;\n messagesArea?: string;\n};\n\nconst THEME_STYLES: Record<AssistantChatTheme, ThemeStyles> = {\n webchat: {\n container: 'bg-card text-card-foreground',\n header: 'bg-card',\n badge: 'bg-primary/5 text-primary',\n messagesArea: 'border-y-4 border-border/40',\n avatarUser: 'bg-border/30 text-muted-foreground max-md:hidden',\n avatarAssistant: 'bg-foreground/5 text-foreground/90 max-md:hidden',\n bubbleUser: 'bg-border/30 text-foreground/90',\n bubbleAssistant: 'bg-foreground/5 text-foreground/90',\n input: 'bg-border/40',\n button: '',\n title: 'text-foreground',\n inputContainer: 'bg-card',\n },\n whatsapp: {\n container: cn(\n 'bg-[#e5ddd5] text-black',\n 'dark:bg-[#0C0A0D] dark:text-white',\n ),\n header: cn('bg-[#075E54] text-white', 'dark:bg-[#161717] dark:text-white'),\n badge: cn('bg-white/5 text-white', 'dark:bg-white/5 dark:text-white'),\n messagesArea: 'px-2',\n avatarUser: cn(\n 'max-md:hidden',\n 'bg-[#dcf8c6] text-black',\n 'dark:bg-[#144d37] dark:text-white',\n ),\n avatarAssistant: cn(\n 'max-md:hidden',\n 'bg-white text-black',\n 'dark:bg-[#242626] dark:text-white',\n ),\n bubbleAssistant: cn(\n 'bg-[#dcf8c6] text-black',\n 'dark:bg-[#144d37] dark:text-white',\n ),\n bubbleUser: cn('bg-white text-black', 'dark:bg-[#242626] dark:text-white'),\n input: cn(\n 'bg-white text-black placeholder:text-[#6b7280]',\n 'dark:bg-[#242626] dark:text-white dark:placeholder:text-white/50',\n ),\n button: cn(\n 'hover:brightness-110',\n 'bg-[#25D366] text-white',\n 'dark:bg-[#21c063] dark:text-white',\n ),\n title: 'text-white',\n inputContainer: 'bg-transparent',\n },\n instagram: {\n container: cn('bg-white text-black', 'dark:bg-black dark:text-white'),\n header: cn('bg-border/40 text-black', 'dark:bg-black dark:text-white'),\n badge: cn('bg-black/5 text-black', 'dark:bg-[#161717] dark:text-white'),\n messagesArea: cn(\n '[--gap:16px] messenger-container',\n '[--gradient-start:#0070f6] [--gradient-end:#aa00ff]',\n '[--background:white]',\n 'dark:[--background:black]',\n ),\n avatarUser: 'hidden',\n avatarAssistant: 'hidden',\n bubble: cn('[--background:white]', 'dark:[--background:black]'),\n bubbleUser: 'messenger-bubble primary',\n bubbleAssistant: cn(\n '[--background-assistant:var(--border)]',\n 'dark:[--background-assistant:#303030]',\n 'messenger-bubble',\n ),\n input: cn(\n 'bg-zinc-200 text-black placeholder:text-black/50',\n 'dark:bg-[#262626] dark:text-white dark:text-white dark:placeholder:text-white/50',\n ),\n button: cn(\n 'bg-fuchsia-600 text-white',\n 'dark:bg-fuchsia-600 dark:text-white',\n ),\n title: 'text-foreground',\n inputContainer: 'bg-transparent',\n },\n messenger: {\n container: cn(\n 'relative',\n 'bg-white text-black',\n 'dark:bg-[#242526] dark:text-white',\n ),\n header: cn('bg-border/40 text-black', 'dark:bg-black dark:text-white'),\n badge: cn('bg-white/20 text-white', 'dark:bg-black dark:text-white'),\n messagesArea: cn(\n '[--gap:16px] messenger-container',\n '[--gradient-start:#0070f6] [--gradient-end:#aa00ff]',\n '[--background:white]',\n 'dark:[--background:#242526]',\n ),\n avatarUser: 'hidden',\n avatarAssistant: 'hidden',\n bubble: cn('[--background:white]', 'dark:[--background:#242526]'),\n bubbleUser: 'messenger-bubble primary',\n bubbleAssistant: cn(\n '[--background-assistant:var(--border)]',\n 'dark:[--background-assistant:#303030]',\n 'messenger-bubble',\n ),\n input: cn(\n 'bg-zinc-200 text-black placeholder:text-black/50',\n 'dark:bg-[#262626] dark:text-white dark:text-white dark:placeholder:text-white/50',\n ),\n button: cn('bg-[#0084FF] text-white', 'dark:bg-[#0084FF] dark:text-white'),\n title: 'text-foreground',\n inputContainer: 'bg-transparent',\n },\n};\n\nexport const AssistantChat = ({\n theme = 'webchat',\n // icon,\n name: _name,\n disabled = false,\n messages = [],\n className,\n}: {\n theme?: AssistantChatTheme;\n icon: React.ReactNode;\n name: string;\n disabled?: boolean;\n messages?: ChatMessage[];\n className?: string;\n}) => {\n \n const styles = THEME_STYLES[theme];\n\n const scrollRef = useRef<HTMLUListElement | null>(null);\n\n const [displayedMessages, setDisplayedMessages] = useState<ChatMessage[]>([]);\n const [currentMessages, setCurrentMessages] = useState<ChatMessage[]>([]);\n\n const [messagesKey, setMessagesKey] = useState<string>('');\n\n const [hasInitialized, setHasInitialized] = useState(false);\n\n const [isTyping, setIsTyping] = useState(false);\n\n // Animation bookkeeping lives in refs so the playback effect can depend\n // only on `currentMessages` without re-triggering itself mid-animation.\n const isAnimatingRef = useRef(false);\n const displayedCountRef = useRef(0);\n\n const [isAtBottom, setIsAtBottom] = useState(true);\n\n const handleScroll = () => {\n const container = scrollRef.current;\n if (!container) return;\n\n const isBottom =\n container.scrollHeight - container.scrollTop <=\n container.clientHeight + 10;\n\n setIsAtBottom(isBottom);\n };\n\n const [messageStates, setMessageStates] = useState<\n Record<number, 'typing' | 'completed'>\n >({});\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const newMessagesKey = JSON.stringify(messages);\n const messagesChanged = newMessagesKey !== messagesKey;\n\n if (messagesChanged || !hasInitialized) {\n setMessagesKey(newMessagesKey);\n setCurrentMessages(messages);\n\n setHasInitialized(true);\n\n setDisplayedMessages([]);\n setMessageStates({});\n\n displayedCountRef.current = 0;\n isAnimatingRef.current = false;\n setIsTyping(false);\n }\n }, [messages, messagesKey, hasInitialized]);\n\n useEffect(() => {\n if (\n currentMessages.length === 0 ||\n displayedCountRef.current >= currentMessages.length\n ) {\n return;\n }\n\n if (isAnimatingRef.current) {\n return;\n }\n\n isAnimatingRef.current = true;\n\n let isCancelled = false;\n const activeTimers = new Set<number>();\n\n const sleep = (ms: number) =>\n new Promise<void>(resolve => {\n const id = window.setTimeout(() => {\n activeTimers.delete(id);\n resolve();\n }, ms);\n activeTimers.add(id);\n });\n\n const play = async (index: number) => {\n if (isCancelled || index >= currentMessages.length) return;\n\n const current = currentMessages[index];\n\n if (current.role === 'assistant') {\n const newIndex = displayedCountRef.current;\n\n displayedCountRef.current += 1;\n setDisplayedMessages(prev => [...prev, current]);\n setMessageStates(prev => ({ ...prev, [newIndex]: 'typing' }));\n\n setIsTyping(true);\n\n await sleep(current.content.length * 50);\n\n if (isCancelled) return;\n\n setMessageStates(prev => ({\n ...prev,\n [newIndex]: 'completed',\n }));\n setIsTyping(false);\n\n return play(index + 1);\n }\n\n await sleep(150);\n\n if (isCancelled) return;\n\n displayedCountRef.current += 1;\n setDisplayedMessages(prev => [...prev, current]);\n\n await sleep(current.content.length * 30);\n\n if (isCancelled) return;\n return play(index + 1);\n };\n\n void play(displayedCountRef.current).finally(() => {\n isAnimatingRef.current = false;\n });\n\n const safetyTimeout = setTimeout(() => {\n if (!isCancelled) {\n isAnimatingRef.current = false;\n }\n }, 30000);\n\n return () => {\n isCancelled = true;\n isAnimatingRef.current = false;\n clearTimeout(safetyTimeout);\n\n activeTimers.forEach(id => clearTimeout(id));\n activeTimers.clear();\n };\n }, [currentMessages]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container || !isAtBottom) return;\n container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' });\n }, [displayedMessages.length, isTyping, isAtBottom]);\n\n return (\n <div\n className={cn(\n 'bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group w-full overflow-hidden',\n className,\n )}\n >\n <div\n ref={containerRef}\n className={cn(\n 'relative rounded-[calc(var(--card-radius)-var(--card-padding))] h-full flex flex-col bg-border/40 group w-full overflow-hidden transition-all duration-150 ease-in-out min-h-full',\n styles.container,\n )}\n >\n {theme === 'whatsapp' && (\n <div className=\"absolute inset-0 pointer-events-none select-none overflow-hidden\">\n <img\n src=\"/chat-themes/whatsapp-doodles.png\"\n alt=\"\"\n width={800}\n height={800}\n fetchPriority=\"high\"\n className=\"size-full object-cover opacity-[0.25] dark:opacity-[0.07]\"\n />\n </div>\n )}\n\n <header\n className={cn(\n 'flex items-center justify-between z-1 transition-all duration-100 p-4',\n styles.header,\n )}\n >\n <div className=\"flex items-center gap-2 w-full\">\n <OnnebookLogo\n variant=\"icon\"\n classNames={{ icon: { container: 'size-5' } }}\n />\n\n <p className={cn('text-sm font-medium', styles.title)}>\n {'headerTitle'}\n </p>\n </div>\n </header>\n\n <ul\n ref={scrollRef}\n tabIndex={-1}\n className={cn(\n 'flex flex-col flex-1 gap-4 overflow-y-auto overflow-x-hidden px-4 transition-all duration-100 min-h-110 sm:max-h-110 list-none m-0',\n !disabled && styles.messagesArea,\n )}\n onScroll={handleScroll}\n >\n {disabled ? (\n <div className=\"relative flex-1 items-center justify-center h-full\">\n <div className=\"flex flex-col gap-4 mask-b-from-50 opacity-15 dark:opacity-25\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div\n key={i}\n className={cn(\n 'flex items-start gap-2 w-full max-w-3/4 min-h-8 h-12 rounded-2xl',\n i % 2 === 0\n ? 'ml-auto flex-row-reverse bg-foreground/20 dark:bg-foreground/15 rounded-tr-sm'\n : 'justify-start bg-foreground/5 dark:bg-foreground/25 rounded-tl-sm',\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n minHeight: `${32 * i}px`,\n }}\n />\n ))}\n </div>\n\n <div className=\"text-base w-full text-center text-foreground absolute left-1/2 -translate-x-1/2 bottom-1/2 -translate-y-1/2\">\n <TextShimmer className=\"[--base-color:var(--color-muted-foreground)] [--base-gradient-color:var(--color-foreground)]\">\n {'comingSoon'}\n </TextShimmer>\n </div>\n </div>\n ) : (\n [\n ...(theme === 'messenger' || theme === 'instagram'\n ? [\n {\n role: 'space',\n content: ' ',\n },\n ]\n : []),\n ...displayedMessages,\n ...(theme === 'messenger' || theme === 'instagram'\n ? [\n {\n role: 'space',\n content: ' ',\n },\n ]\n : []),\n ].map((message, index) => {\n const isUser = message.role === 'user';\n const isAssistant = message.role === 'assistant';\n\n const isSpace = message.role === 'space';\n\n const previousMessage = displayedMessages[index - 1];\n const hasSameRoleAsPrevious =\n previousMessage && previousMessage.role === message.role;\n\n return (\n <li\n key={`${index}-${message.content}`}\n className={cn(\n 'flex flex-col rounded-2xl p-3 leading-relaxed whitespace-pre-wrap wrap-break-word max-w-3/4 transition-all duration-300 ease-out animate-in slide-in-from-bottom-2 fade-in-0 first:mt-3! last:mb-3! text-sm',\n hasSameRoleAsPrevious && '-mt-2!',\n isAssistant &&\n 'rounded-tr-xs ml-auto text-right text-pretty slide-in-from-right-2',\n isUser && 'rounded-tl-xs mr-auto slide-in-from-left-2',\n styles.bubble,\n isUser ? styles.bubbleUser : styles.bubbleAssistant,\n isSpace && 'hidden',\n )}\n style={{\n animationDuration: '400ms',\n animationFillMode: 'both',\n }}\n >\n <div\n className={cn(\n 'flex gap-1.5 mb-1',\n isAssistant && 'ml-auto',\n )}\n >\n <span className=\"text-xs opacity-50\">\n {isUser\n ? 'labels.yourCustomer'\n : 'labels.aiAgent'}\n </span>\n\n {isAssistant && (\n <OnnebookLogo\n variant=\"icon\"\n classNames={{\n icon: { container: 'size-4 mb-1 -scale-x-100' },\n }}\n />\n )}\n </div>\n\n {isAssistant && messageStates[index] === 'typing' ? (\n <div className=\"inline-flex items-center gap-1 py-1\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div\n key={i}\n className=\"size-2 rounded-full bg-current animate-bounce\"\n style={{\n animationDelay: `${i * 150}ms`,\n animationDuration: '1s',\n animationIterationCount: 'infinite',\n }}\n />\n ))}\n </div>\n ) : (\n <span className=\"animate-in fade-in-0 duration-300 text-sm text-pretty\">\n {message.content}\n </span>\n )}\n </li>\n );\n })\n )}\n </ul>\n </div>\n </div>\n );\n};\n","import { cn } from '@/lib/cn'\n\nexport const OnneLogo = ({\n variant = 'default',\n className,\n}: {\n variant?: 'default' | 'icon' | 'text'\n className?: string\n}) => {\n const hasIcon = variant !== 'text'\n const hasText = variant !== 'icon'\n\n const svgProps = {\n default: {\n width: '111',\n height: '38',\n viewBox: '0 0 111 38',\n },\n icon: {\n width: '40',\n height: '38',\n viewBox: '0 0 40 38',\n },\n text: {\n width: '60',\n height: '38',\n viewBox: '51 0 60 38',\n },\n }[variant]\n\n return (\n <svg\n width={svgProps.width}\n height={svgProps.height}\n viewBox={svgProps.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('text-foreground', className)}\n >\n {hasIcon && (\n <path\n d=\"M31.46 2.00098C28.1162 2.01981 24.7715 2.02966 21.4268 2.03223H9.71191V2.03125C9.38368 2.03074 8.81823 2.01652 8.34375 2.02832C7.91645 2.03896 7.38205 2.07054 6.85547 2.1875L6.63086 2.24316L6.62793 2.24414C4.02471 2.95962 2.18081 5.12713 2.02344 7.81445L2.0127 8.07617V8.07715C1.99988 8.84589 1.99806 9.42022 2.00586 9.76172H2.00488L2.00098 24.7061V24.7588C2.01533 25.3084 2.0417 25.8277 2.10449 26.1963C2.63717 29.3293 5.33784 31.2372 8.23926 31.4688C8.24481 31.9363 8.25056 32.4732 8.25488 33.0791C8.25842 33.6029 8.43082 34.271 8.77051 34.8125C8.94287 35.0873 9.32658 35.6004 10.0225 35.8574C10.8697 36.1702 11.6758 35.9314 12.2285 35.5303C12.5637 35.287 12.8619 34.9871 13.1025 34.6279C13.8424 33.5266 14.7717 32.6915 16.2549 31.6016L16.4111 31.4873C19.2403 31.493 22.0641 31.495 24.8828 31.4941C28.2691 31.5095 30.451 31.5065 31.3877 31.4824H31.3887C33.2229 31.4346 34.8524 30.7699 36.1738 29.5039L36.2119 29.4678L36.248 29.4287C37.2295 28.3828 37.8128 27.1179 37.9375 25.6895L37.9746 25.2041C37.9848 25.0421 37.9929 24.8799 37.999 24.7178L38 24.6797V24.6416C37.9982 19.1679 37.9981 13.6945 37.999 8.22168L37.9951 7.9873C37.9559 6.81968 37.6202 5.71836 36.9424 4.75293H36.9414C35.6412 2.8994 33.726 1.98737 31.46 2.00098Z\"\n stroke=\"url(#paint0_linear_28_6)\"\n strokeWidth=\"4\"\n />\n )}\n\n {hasText && (\n <path\n d=\"M58.592 26.812C57.44 26.812 56.416 26.628 55.52 26.26C54.624 25.892 53.856 25.364 53.216 24.676C52.592 23.972 52.112 23.116 51.776 22.108C51.44 21.1 51.272 19.948 51.272 18.652C51.272 16.78 51.592 15.236 52.232 14.02C52.872 12.788 53.752 11.868 54.872 11.26C55.992 10.652 57.264 10.348 58.688 10.348C59.792 10.348 60.792 10.532 61.688 10.9C62.584 11.252 63.344 11.78 63.968 12.484C64.608 13.172 65.104 14.036 65.456 15.076C65.808 16.1 65.984 17.276 65.984 18.604C65.984 19.932 65.808 21.108 65.456 22.132C65.12 23.14 64.632 23.996 63.992 24.7C63.352 25.388 62.576 25.916 61.664 26.284C60.768 26.636 59.744 26.812 58.592 26.812ZM58.664 24.364C59.576 24.364 60.336 24.148 60.944 23.716C61.568 23.268 62.04 22.628 62.36 21.796C62.696 20.964 62.864 19.948 62.864 18.748C62.864 17.516 62.696 16.46 62.36 15.58C62.024 14.7 61.536 14.036 60.896 13.588C60.272 13.124 59.504 12.892 58.592 12.892C57.728 12.892 56.976 13.116 56.336 13.564C55.712 13.996 55.232 14.644 54.896 15.508C54.56 16.356 54.392 17.396 54.392 18.628C54.392 19.556 54.488 20.38 54.68 21.1C54.872 21.804 55.144 22.396 55.496 22.876C55.864 23.356 56.312 23.724 56.84 23.98C57.384 24.236 57.992 24.364 58.664 24.364ZM68.954 26.5V18.844V13.948H71.474L71.402 17.788H71.834C72.058 16.844 72.354 16.068 72.722 15.46C73.106 14.852 73.594 14.396 74.186 14.092C74.778 13.788 75.466 13.636 76.25 13.636C77.674 13.636 78.754 14.14 79.49 15.148C80.242 16.156 80.618 17.716 80.618 19.828V26.5H77.57V20.14C77.57 18.78 77.362 17.788 76.946 17.164C76.546 16.524 75.946 16.204 75.146 16.204C74.474 16.204 73.906 16.42 73.442 16.852C72.978 17.268 72.618 17.828 72.362 18.532C72.122 19.22 71.994 19.98 71.978 20.812V26.5H68.954ZM83.8134 26.5V18.844V13.948H86.3334L86.2614 17.788H86.6934C86.9174 16.844 87.2134 16.068 87.5814 15.46C87.9654 14.852 88.4534 14.396 89.0454 14.092C89.6374 13.788 90.3254 13.636 91.1094 13.636C92.5334 13.636 93.6134 14.14 94.3494 15.148C95.1014 16.156 95.4774 17.716 95.4774 19.828V26.5H92.4294V20.14C92.4294 18.78 92.2214 17.788 91.8054 17.164C91.4054 16.524 90.8054 16.204 90.0054 16.204C89.3334 16.204 88.7654 16.42 88.3014 16.852C87.8374 17.268 87.4774 17.828 87.2214 18.532C86.9814 19.22 86.8534 19.98 86.8374 20.812V26.5H83.8134ZM104.337 26.812C103.329 26.812 102.425 26.668 101.625 26.38C100.841 26.092 100.177 25.676 99.6328 25.132C99.0888 24.572 98.6728 23.9 98.3848 23.116C98.0968 22.332 97.9528 21.444 97.9528 20.452C97.9528 19.46 98.0888 18.548 98.3608 17.716C98.6488 16.884 99.0568 16.164 99.5848 15.556C100.113 14.948 100.753 14.476 101.505 14.14C102.273 13.804 103.145 13.636 104.121 13.636C105.033 13.636 105.849 13.788 106.569 14.092C107.289 14.396 107.897 14.852 108.393 15.46C108.889 16.052 109.257 16.796 109.497 17.692C109.737 18.572 109.817 19.596 109.737 20.764L99.9208 20.836V19.084L107.985 19.012L106.929 19.996C107.025 19.084 106.953 18.34 106.713 17.764C106.473 17.172 106.129 16.74 105.681 16.468C105.233 16.18 104.721 16.036 104.145 16.036C103.489 16.036 102.913 16.212 102.417 16.564C101.921 16.9 101.537 17.396 101.265 18.052C101.009 18.692 100.881 19.476 100.881 20.404C100.881 21.796 101.185 22.836 101.793 23.524C102.417 24.212 103.265 24.556 104.337 24.556C104.817 24.556 105.217 24.5 105.537 24.388C105.873 24.26 106.153 24.1 106.377 23.908C106.601 23.7 106.777 23.468 106.905 23.212C107.049 22.956 107.161 22.684 107.241 22.396L109.881 22.996C109.753 23.588 109.545 24.116 109.257 24.58C108.969 25.044 108.593 25.444 108.129 25.78C107.681 26.116 107.145 26.372 106.521 26.548C105.897 26.724 105.169 26.812 104.337 26.812Z\"\n fill=\"currentColor\"\n />\n )}\n\n {hasIcon && (\n <defs>\n <linearGradient\n id=\"paint0_linear_28_6\"\n x1=\"10.0921\"\n y1=\"35.9948\"\n x2=\"33.8904\"\n y2=\"1.43723\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#7C40D1\" />\n <stop offset=\"0.25\" stopColor=\"#D25DBB\" />\n <stop offset=\"0.5\" stopColor=\"#F84F6A\" />\n <stop offset=\"0.745192\" stopColor=\"#FE6C3D\" />\n <stop offset=\"1\" stopColor=\"#FF9637\" />\n </linearGradient>\n </defs>\n )}\n </svg>\n )\n}\n","import { cn } from '@/lib/cn'\n\nconst Icon = ({\n classNames,\n}: {\n classNames?: {\n icon?: {\n container?: string\n path?: string\n }\n }\n}) => {\n return (\n <svg\n viewBox=\"0 0 374.96 486\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\n 'w-7 h-8 shrink-0 text-primary',\n classNames?.icon?.container,\n )}\n >\n <path\n fill=\"currentColor\"\n className={cn('text-primary-foreground', classNames?.icon?.path)}\n d=\"M112.16,18v74.81M262.81,18v74.81M18,167.61h338.96M243.97,251.77v58.44M130.99,251.77v58.44M55.66,55.4h263.64c20.8,0,37.66,16.75,37.66,37.4v261.82c0,20.66-16.86,37.4-37.66,37.4H117.36s-.02,0-.03,0l-99.27,75.91s-.07,0-.07-.03c.03-35.07,0-92.65,0-113.29V92.81c0-20.66,16.86-37.4,37.66-37.4Z\"\n />\n\n <path\n fill=\"currentColor\"\n className={cn('text-primary', classNames?.icon?.path)}\n d=\"M18,486c-3.95,0-7.93-1.3-11.27-3.96C2.37,478.57,0,473.18,0,467.61c.02-25.51.01-62.77,0-89.11v-23.87s0-261.82,0-261.82c0-30.55,24.97-55.4,55.66-55.4h38.45s.04-.02.04-.04v-18.89c0-9.78,7.61-18.13,17.38-18.46s18.62,7.84,18.62,17.99v19.36s.02.04.04.04h114.56s.04-.02.04-.04v-18.89c0-9.78,7.61-18.14,17.38-18.46,10.22-.34,18.62,7.84,18.62,17.99v19.36s.02.04.04.04h38.45c30.69,0,55.66,24.85,55.66,55.4v261.82c0,30.55-24.97,55.4-55.66,55.4H123.45s-.02,0-.03,0l-94.49,72.26c-3.2,2.45-7.06,3.7-10.94,3.7ZM36.04,185.61s-.04.02-.04.04v192.83c.01,15.44.02,34.62.01,52.99,0,.04.04.06.07.03l70.33-53.78c3.14-2.4,6.98-3.7,10.93-3.7h201.95c10.84,0,19.66-8.7,19.66-19.4v-168.97s-.02-.04-.04-.04H36.04ZM36.04,149.61h302.88s.04-.02.04-.04v-56.76c0-10.7-8.82-19.4-19.66-19.4h-38.45s-.04.02-.04.04v18.89c0,9.78-7.61,18.14-17.38,18.46s-18.62-7.84-18.62-17.99v-19.36s-.02-.04-.04-.04h-114.56s-.04.02-.04.04v18.89c0,9.78-7.61,18.13-17.38,18.46s-18.62-7.84-18.62-17.99v-19.36s-.02-.04-.04-.04h-38.45c-10.84,0-19.66,8.7-19.66,19.4v56.76s.02.04.04.04ZM243.36,328.2c-9.78-.33-17.38-8.68-17.38-18.46v-57.5c0-9.78,7.61-18.14,17.38-18.46,10.22-.34,18.62,7.84,18.62,17.99v58.44c0,10.15-8.39,18.33-18.62,17.99ZM130.37,328.2c-9.78-.33-17.38-8.68-17.38-18.46v-57.5c0-9.78,7.61-18.13,17.38-18.46s18.62,7.84,18.62,17.99v58.44c0,10.15-8.39,18.33-18.62,17.99Z\"\n />\n </svg>\n )\n}\n\nconst Text = ({ className, name }: { className?: string; name: string }) => (\n <span className={cn('text-xl text-title', className)}>{name}</span>\n)\n\nexport const OnnebookLogo = ({\n variant = 'default',\n classNames,\n className,\n style,\n}: {\n variant?: 'default' | 'icon' | 'text'\n name?: string\n className?: string\n classNames?: {\n icon?: {\n container?: string\n path?: string\n }\n text?: string\n }\n style?: React.CSSProperties\n}) => {\n const name = 'OnneBook'\n\n return (\n <div\n style={style}\n className={cn('relative flex items-center gap-2 w-fit', className)}\n >\n {variant === 'icon' ? (\n <Icon classNames={classNames} />\n ) : variant === 'text' ? (\n <Text className={classNames?.text} name={name} />\n ) : (\n <>\n <Icon classNames={classNames} />\n <Text className={classNames?.text} name={name} />\n </>\n )}\n </div>\n )\n}\n","'use client'\nimport React, { type JSX, useMemo } from 'react'\n\nimport { motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nexport type TextShimmerProps = {\n children: string\n as?: React.ElementType\n className?: string\n duration?: number\n spread?: number\n}\n\nfunction TextShimmerComponent({\n children,\n as: Component = 'p',\n className,\n duration = 2,\n spread = 2,\n}: TextShimmerProps) {\n const MotionComponent = motion.create(\n Component as keyof JSX.IntrinsicElements,\n )\n\n const dynamicSpread = useMemo(() => {\n return children.length * spread\n }, [children, spread])\n\n return (\n <MotionComponent\n className={cn(\n 'relative inline-block bg-size-[250%_100%,auto] bg-clip-text',\n 'text-transparent [--base-color:#a1a1aa] [--base-gradient-color:#000]',\n '[background-repeat:no-repeat,padding-box] [--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--base-gradient-color),#0000_calc(50%+var(--spread)))]',\n 'dark:[--base-color:#71717a] dark:[--base-gradient-color:#ffffff] dark:[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--base-gradient-color),#0000_calc(50%+var(--spread)))]',\n className,\n )}\n initial={{ backgroundPosition: '100% center' }}\n animate={{ backgroundPosition: '0% center' }}\n transition={{\n repeat: Infinity,\n duration,\n ease: 'linear',\n }}\n style={\n {\n '--spread': `${dynamicSpread}px`,\n backgroundImage: `var(--bg), linear-gradient(var(--base-color), var(--base-color))`,\n } as React.CSSProperties\n }\n >\n {children}\n </MotionComponent>\n )\n}\n\nexport const TextShimmer = React.memo(TextShimmerComponent)\n","'use client'\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { Icon } from \"@/components/icon\"\n\nimport { cn } from '@/lib/cn'\n\nexport type CheckboxProps = CheckboxPrimitive.Root.Props & {\n indeterminate?: boolean\n}\n\nfunction Checkbox({\n className,\n indeterminate,\n ...props\n}: CheckboxProps) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n indeterminate={indeterminate}\n className={cn(\n \"peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border-2 border-input transition-colors outline-none cursor-pointer group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none [&>svg]:size-3.5\"\n >\n <Icon name={indeterminate ? \"Minus\" : \"Check\"} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\nexport { Checkbox }","'use client'\n\nimport { useEffect, useMemo } from 'react'\n\nimport { ColumnDef } from '@tanstack/react-table'\n\nimport { cn } from '@/lib/cn'\n\nimport { useDataTable } from '@/hooks/use-data-table'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { DataTable } from '@/components/ui/table/data-table'\nimport { DataTableToolbar } from '@/components/ui/table/data-table-toolbar'\n\nexport const DATA_CUSTOM_TABLE_VARIANTS = ['default', 'inset'] as const\nexport const DEFAULT_DATA_CUSTOM_TABLE_VARIANT = 'default'\n\nexport type DataCustomTableVariant = (typeof DATA_CUSTOM_TABLE_VARIANTS)[number]\n\ninterface CursorPaginationMeta {\n hasNext?: boolean\n hasPrevious?: boolean\n limit?: number\n nextCursor?: string\n previousCursor?: string\n}\n\ntype DataCustomTableProps<T> = {\n isLoading: boolean\n data: T[]\n columns: ColumnDef<T>[]\n totalItems?: number\n variant?: DataCustomTableVariant\n pageSizeOptions?: number[]\n cursorMeta?: CursorPaginationMeta\n onPaginationChange?: (\n page: number,\n limit: number,\n cursor?: string | null,\n direction?: 'next' | 'previous',\n ) => void\n onRowSelectionChange?: (selectedRows: T[]) => void\n rowSelection?: Record<string, boolean>\n onRowSelectionStateChange?: (rowSelection: Record<string, boolean>) => void\n emptyMessage?: string\n showIndexCol?: boolean\n showCheckboxCol?: boolean\n showPagination?: boolean\n}\n\nexport function DataCustomTable<T>({\n isLoading = true,\n data,\n columns = [],\n totalItems,\n variant = DEFAULT_DATA_CUSTOM_TABLE_VARIANT,\n pageSizeOptions = [10, 20, 30, 40, 50, 100],\n cursorMeta,\n onPaginationChange,\n onRowSelectionChange,\n rowSelection,\n onRowSelectionStateChange,\n emptyMessage,\n showIndexCol = false,\n showCheckboxCol = false,\n showPagination = true,\n}: DataCustomTableProps<T>) {\n\n const idColumn: ColumnDef<T> = useMemo(\n () => ({\n id: 'index',\n header: '#',\n cell: (info) => info.row.index + 1,\n enableSorting: false,\n enableHiding: false,\n }),\n [],\n )\n\n const checkboxColumn: ColumnDef<T> = useMemo(\n () => ({\n id: 'select',\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={\n table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected()\n }\n onCheckedChange={(value) =>\n table.toggleAllPageRowsSelected(!!value)\n }\n aria-label={'selectAll'}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) =>\n row.toggleSelected(!!value)\n }\n aria-label={'selectRow'}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n }),\n [],\n )\n\n const tableColumns = useMemo(\n () => [\n ...(showCheckboxCol ? [checkboxColumn] : []),\n ...(showIndexCol ? [idColumn] : []),\n ...columns,\n ],\n [showCheckboxCol, showIndexCol, columns, checkboxColumn, idColumn],\n )\n\n const {\n table,\n goToNextPage,\n goToPreviousPage,\n hasNextPage,\n hasPreviousPage,\n } = useDataTable({\n data,\n columns: tableColumns,\n rowCount: totalItems ?? data.length,\n onPaginationChange: onPaginationChange\n ? (limit, cursor, direction) => {\n onPaginationChange(1, limit, cursor, direction)\n }\n : undefined,\n defaultPerPage: pageSizeOptions[0],\n hasNextPage: cursorMeta?.hasNext ?? false,\n hasPreviousPage: cursorMeta?.hasPrevious ?? false,\n nextCursor: cursorMeta?.nextCursor ?? null,\n previousCursor: cursorMeta?.previousCursor ?? null,\n rowSelection,\n onRowSelectionChange: onRowSelectionStateChange,\n })\n\n const rowSelectionState = table.getState().rowSelection\n\n const handleNavigate = (direction: 'next' | 'previous') => {\n if (direction === 'next') {\n goToNextPage()\n } else {\n goToPreviousPage()\n }\n }\n\n useEffect(() => {\n if (onRowSelectionChange) {\n const selectedRows = table\n .getFilteredSelectedRowModel()\n .rows.map((row) => row.original)\n\n onRowSelectionChange(selectedRows as T[])\n }\n }, [rowSelectionState, onRowSelectionChange, table])\n\n\n const disablePageSize = !isLoading && data.length <= pageSizeOptions[0]\n\n return (\n <div\n suppressHydrationWarning\n className={cn(\n 'space-y-6 w-full',\n isLoading && 'overflow-hidden',\n variant === 'inset' && 'bg-card border rounded-xl p-6',\n )}\n >\n <DataTable\n table={table}\n isLoading={isLoading}\n emptyMessage={emptyMessage}\n onNavigate={handleNavigate}\n showPagination={showPagination}\n disablePageSize={disablePageSize}\n cursorMeta={{\n ...cursorMeta,\n hasNext: hasNextPage,\n hasPrevious: hasPreviousPage,\n }}\n >\n <DataTableToolbar table={table} />\n </DataTable>\n </div>\n )\n}\n\nDataCustomTable.displayName = 'DataCustomTable'\n","import { useState } from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n type ColumnDef,\n type RowSelectionState,\n type Table,\n} from '@tanstack/react-table'\n\ninterface UseDataTableProps<TData> {\n data: TData[]\n columns: ColumnDef<TData>[]\n rowCount?: number\n onPaginationChange?: (limit: number, cursor: string | null, direction: 'next' | 'previous') => void\n defaultPerPage?: number\n hasNextPage?: boolean\n hasPreviousPage?: boolean\n nextCursor?: string | null\n previousCursor?: string | null\n rowSelection?: Record<string, boolean>\n onRowSelectionChange?: (rowSelection: Record<string, boolean>) => void\n}\n\nexport function useDataTable<TData>({\n data,\n columns,\n onPaginationChange,\n hasNextPage = false,\n hasPreviousPage = false,\n nextCursor: _nextCursor,\n previousCursor: _previousCursor,\n rowSelection,\n onRowSelectionChange,\n defaultPerPage = 10,\n}: UseDataTableProps<TData>) {\n const [innerRowSelection, setInnerRowSelection] = useState<RowSelectionState>({})\n\n const selection = rowSelection ?? innerRowSelection\n const isManual = !!onPaginationChange\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: isManual ? undefined : getPaginationRowModel(),\n onRowSelectionChange: (updaterOrValue) => {\n const next =\n typeof updaterOrValue === 'function'\n ? updaterOrValue(selection)\n : updaterOrValue\n\n if (onRowSelectionChange) {\n onRowSelectionChange(next)\n } else {\n setInnerRowSelection(next)\n }\n },\n state: {\n rowSelection: selection,\n },\n manualPagination: isManual,\n initialState: {\n pagination: { pageSize: defaultPerPage },\n },\n })\n\n const goToNextPage = () => {\n onPaginationChange?.(0, null, 'next')\n }\n\n const goToPreviousPage = () => {\n onPaginationChange?.(0, null, 'previous')\n }\n\n return {\n table: table as unknown as Table<Record<string, unknown>>,\n goToNextPage,\n goToPreviousPage,\n hasNextPage,\n hasPreviousPage,\n }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { flexRender, type Table as TableType } from '@tanstack/react-table'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Table } from './table'\nimport { DataTablePagination } from './data-table-pagination'\nimport { Skeleton } from '@/components/ui/skeleton'\n\ninterface CursorPaginationMeta {\n hasNext?: boolean\n hasPrevious?: boolean\n limit?: number\n}\n\ninterface DataTableProps<TData> extends React.HTMLAttributes<HTMLDivElement> {\n table: TableType<TData>\n children?: React.ReactNode\n emptyMessage?: string\n cursorMeta?: CursorPaginationMeta\n onNavigate?: (direction: 'next' | 'previous') => void\n showPagination?: boolean\n isLoading?: boolean\n disablePageSize?: boolean\n}\n\nexport function DataTable<TData>({\n table,\n children,\n className,\n cursorMeta,\n onNavigate,\n showPagination = true,\n isLoading,\n disablePageSize,\n emptyMessage,\n ...props\n}: DataTableProps<TData>) {\n const isMobile = useIsMobile()\n\n const scrollRef = React.useRef<HTMLDivElement>(null)\n const [showShadow, setShowShadow] = React.useState(false)\n\n const defaultEmptyMessage = emptyMessage || 'noResults'\n const rows = table.getRowModel().rows\n\n React.useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n\n const check = () => {\n const isScrollable = el.scrollWidth > el.clientWidth + 2\n const isAtEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 2\n setShowShadow(isScrollable && !isAtEnd)\n }\n\n check()\n el.addEventListener('scroll', check, { passive: true })\n const ro = new ResizeObserver(check)\n ro.observe(el)\n\n return () => {\n el.removeEventListener('scroll', check)\n ro.disconnect()\n }\n }, [])\n\n return (\n <div className={cn('space-y-4', className)} {...props}>\n {children}\n\n <div ref={scrollRef} className=\"rounded-2xl bg-card overflow-x-auto\">\n <Table>\n <Table.Header>\n {table.getHeaderGroups().map((headerGroup) => (\n <Table.Row\n key={headerGroup.id}\n className=\"border-border/25 bg-card!\"\n >\n {headerGroup.headers.map((header, index) => {\n const isLast = index === headerGroup.headers.length - 1\n const shouldSticky = isLast && isMobile && showShadow\n\n return (\n <Table.Head\n key={header.id}\n className={cn(\n 'max-w-xl text-nowrap whitespace-nowrap overflow-hidden text-ellipsis transition-colors',\n shouldSticky &&\n 'sticky right-0 bg-card z-20 shadow-[-10px_0_15px_-3px_rgba(0,0,0,0.1),-4px_0_6px_-2px_rgba(0,0,0,0.05)] border-l border-border/10 pr-4',\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </Table.Head>\n )\n })}\n </Table.Row>\n ))}\n </Table.Header>\n\n <Table.Body>\n {isLoading ? (\n Array.from({ length: 10 }).map((_, i) => (\n <Table.Row\n key={i}\n className=\"border-b border-border/50 transition-none odd:bg-accent/15 even:bg-accent/50\"\n >\n {Array.from({\n length: table.getAllColumns().length,\n }).map((_, j) => (\n <Table.Cell\n key={j}\n className=\"h-12 max-w-xl text-nowrap whitespace-nowrap overflow-hidden text-ellipsis\"\n >\n <Skeleton className=\"h-4 w-[80%] bg-accent\" />\n </Table.Cell>\n ))}\n </Table.Row>\n ))\n ) : (\n <AnimatePresence>\n {rows?.length ? (\n rows.map((row, rowIndex) => {\n const isLastRow = rowIndex === rows.length - 1\n\n return (\n <motion.tr\n key={row.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{\n duration: 0.2,\n delay: rowIndex * 0.05,\n ease: 'easeOut',\n }}\n data-state={row.getIsSelected() && 'selected'}\n className=\"group border-b border-border/50 transition-colors odd:bg-accent/15 even:bg-accent/50 hover:bg-accent data-[state=selected]:bg-card touch-callout-none transition-none\"\n onContextMenu={(e) => {\n const trigger = e.currentTarget.querySelector(\n '[data-action-group-trigger]',\n ) as HTMLElement | null\n\n if (trigger) {\n e.preventDefault()\n trigger.click()\n }\n }}\n onTouchStart={(e) => {\n const el = e.currentTarget\n\n const timer = window.setTimeout(() => {\n const trigger = el.querySelector(\n '[data-action-group-trigger]',\n ) as HTMLElement | null\n\n if (trigger) trigger.click()\n }, 500)\n\n ;(el as HTMLElement & { _longPressTimer?: number })._longPressTimer = timer\n }}\n onTouchEnd={(e) => {\n window.clearTimeout(\n (e.currentTarget as HTMLElement & { _longPressTimer?: number })._longPressTimer,\n )\n }}\n onTouchMove={(e) => {\n window.clearTimeout(\n (e.currentTarget as HTMLElement & { _longPressTimer?: number })._longPressTimer,\n )\n }}\n >\n {row.getVisibleCells().map((cell, cellIndex) => {\n const isLast =\n cellIndex === row.getVisibleCells().length - 1\n\n const shouldSticky = isLast && isMobile && showShadow\n\n return (\n <Table.Cell\n key={cell.id}\n className={cn(\n 'h-12 max-w-xl text-nowrap whitespace-nowrap overflow-hidden text-ellipsis',\n shouldSticky &&\n cn(\n 'sticky right-0 bg-card z-20 shadow-[-10px_0_15px_-3px_rgba(0,0,0,0.1),-4px_0_6px_-2px_rgba(0,0,0,0.05)] border-l border-border/10 pr-4',\n isLastRow && 'rounded-br-2xl',\n ),\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </Table.Cell>\n )\n })}\n </motion.tr>\n )\n })\n ) : (\n <Table.Row>\n <Table.Cell\n colSpan={table.getAllColumns().length}\n className=\"h-24 text-center text-card-foreground\"\n >\n {defaultEmptyMessage}\n </Table.Cell>\n </Table.Row>\n )}\n </AnimatePresence>\n )}\n </Table.Body>\n </Table>\n </div>\n\n {showPagination && (\n <DataTablePagination\n table={table}\n cursorMeta={cursorMeta}\n onNavigate={onNavigate}\n disablePageSize={disablePageSize}\n />\n )}\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nconst TableRoot = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement> & {\n containerClassName?: string\n }\n>(({ className, containerClassName, ...props }, ref) => (\n <div\n className={cn(\n 'relative w-full rounded-2xl bg-card overflow-x-auto',\n containerClassName,\n )}\n >\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n))\nTableRoot.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn('[&_tr]:border-border/25 [&_tr]:bg-card', className)}\n {...props}\n />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium last:[&>tr]:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b border-border/50 transition-colors odd:bg-accent/15 even:bg-accent/50 hover:bg-accent data-[state=selected]:bg-card',\n className,\n )}\n {...props}\n />\n))\nTableRow.displayName = 'TableRow'\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-12 max-w-xl px-4 text-left align-middle text-nowrap whitespace-nowrap overflow-hidden text-ellipsis font-medium text-muted-foreground transition-colors [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n))\nTableHead.displayName = 'TableHead'\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'h-12 max-w-xl px-4 align-middle text-nowrap whitespace-nowrap overflow-hidden text-ellipsis [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n))\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn('text-sm text-muted-foreground p-4 bg-muted/50 border-t border-border/50', className)}\n {...props}\n />\n))\nTableCaption.displayName = 'TableCaption'\n\nconst Table = Object.assign(TableRoot, { Header: TableHeader, Body: TableBody, Footer: TableFooter, Row: TableRow, Head: TableHead, Cell: TableCell, Caption: TableCaption })\n\nexport { Table }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Select as SelectPrimitive } from '@base-ui/react/select'\nimport { Separator as SeparatorPrimitive } from '@base-ui/react/separator'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { useHaptics } from '@/hooks/use-haptics'\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Drawer } from '@/components/ui/drawer'\n\n/** Same option list is rendered twice on mobile (hidden discovery items + drawer). Clone so each tree is independent. */\nfunction cloneSelectChildren(children: React.ReactNode, keySuffix: string) {\n return React.Children.map(children, (child, index) => {\n if (!React.isValidElement(child)) return child\n const baseKey = child.key != null ? String(child.key) : index\n return React.cloneElement(child, { key: `${baseKey}-${keySuffix}` })\n })\n}\n\n// Recursively extracts plain text from a React node tree (used for mobile label display)\nfunction extractText(node: React.ReactNode): string {\n if (typeof node === 'string') return node\n if (typeof node === 'number') return String(node)\n if (Array.isArray(node)) return node.map(extractText).join('').trim()\n if (React.isValidElement(node))\n return extractText((node.props as { children?: React.ReactNode }).children)\n return ''\n}\n\n// 'interactive' → visible button inside the mobile Drawer\n// 'desktop' → Base UI SelectPrimitive.Item (default)\n// 'discovery' → handles label registration without rendering to DOM\ntype SelectItemMode = 'interactive' | 'desktop' | 'discovery'\n\nconst SelectItemModeContext = React.createContext<SelectItemMode>('desktop')\n\ntype SelectContextValue = {\n isMobile: boolean\n open: boolean\n onOpenChange: (open: boolean) => void\n value: string\n onValueChange: (value: string) => void\n itemLabels: Record<string, { text: string; node: React.ReactNode }>\n registerLabel: (value: string, label: React.ReactNode) => void\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null)\n\nfunction SelectRoot({\n value: valueProp,\n defaultValue,\n onValueChange: onValueChangeProp,\n open: openProp,\n onOpenChange: onOpenChangeProp,\n defaultOpen,\n children,\n ...props\n}: Omit<\n SelectPrimitive.Root.Props<string>,\n 'value' | 'defaultValue' | 'onValueChange' | 'onOpenChange'\n> & {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n onOpenChange?: (open: boolean) => void\n children?: React.ReactNode\n}) {\n const isMobile = useIsMobile()\n\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? '')\n\n const valueFromParent =\n valueProp !== undefined && valueProp !== null && valueProp !== ''\n ? valueProp\n : undefined\n const value = valueFromParent ?? internalValue\n\n const [drawerOpen, setDrawerOpen] = React.useState(defaultOpen ?? false)\n const open = openProp ?? drawerOpen\n\n const [itemLabels, setItemLabels] = React.useState<\n Record<string, { text: string; node: React.ReactNode }>\n >({})\n const registerLabel = React.useCallback(\n (itemValue: string, label: React.ReactNode) => {\n const text = extractText(label)\n setItemLabels((prev) => {\n if (prev[itemValue]?.text === text) return prev\n return { ...prev, [itemValue]: { text, node: label } }\n })\n },\n [],\n )\n\n const handleOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setDrawerOpen(isOpen)\n onOpenChangeProp?.(isOpen)\n },\n [onOpenChangeProp],\n )\n\n const handleValueChange = React.useCallback(\n (val: string | null) => {\n setInternalValue(val ?? '')\n onValueChangeProp?.(val ?? '')\n if (isMobile) handleOpenChange(false)\n },\n [onValueChangeProp, isMobile, handleOpenChange],\n )\n\n return (\n <SelectContext.Provider\n value={{\n isMobile,\n open,\n onOpenChange: handleOpenChange,\n value,\n onValueChange: handleValueChange,\n itemLabels,\n registerLabel,\n }}\n >\n <div className=\"hidden\" aria-hidden=\"true\">\n <SelectItemModeContext.Provider value=\"discovery\">\n {children}\n </SelectItemModeContext.Provider>\n </div>\n\n <SelectPrimitive.Root\n open={isMobile ? false : open}\n onOpenChange={handleOpenChange}\n value={value}\n onValueChange={handleValueChange}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n )\n}\n\nfunction SelectGroup({ ...props }: SelectPrimitive.Group.Props) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n className,\n placeholder,\n children,\n ...props\n}: SelectPrimitive.Value.Props) {\n const ctx = React.useContext(SelectContext)\n\n const label = ctx && ctx.value ? ctx.itemLabels[ctx.value]?.node : undefined\n const content = children ?? label ?? placeholder\n\n if (ctx?.isMobile) {\n return (\n <span\n data-slot=\"select-value\"\n className={cn(!content && 'text-muted-foreground/50', className)}\n >\n {content as React.ReactNode}\n </span>\n )\n }\n\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn('empty:text-muted-foreground/50', className)}\n placeholder={placeholder}\n {...props}\n >\n {content}\n </SelectPrimitive.Value>\n )\n}\n\nconst SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n SelectPrimitive.Trigger.Props & {\n removeIcon?: boolean\n }\n>(function SelectTrigger(\n { className, children, removeIcon = false, ...props },\n ref,\n) {\n const mode = React.useContext(SelectItemModeContext)\n const { trigger } = useHaptics()\n\n if (mode === 'discovery') {\n return null\n }\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n suppressHydrationWarning\n data-slot=\"select-trigger\"\n className={cn(\n 'border-transparent text-foreground flex h-12 w-full items-center justify-between gap-2 rounded-xl bg-input px-4 py-2 transition-[color] disabled:cursor-not-allowed disabled:opacity-75 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 *:data-[slot=select-value]:min-w-max [&_svg]:pointer-events-none [&_svg]:shrink-0 outline-none aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-placeholder:text-muted-foreground/50',\n 'focus-visible:border-transparent focus-visible:aria-invalid:ring-destructive focus-visible:ring-ring/50 focus-visible:ring-[3px] cursor-pointer select-none',\n className,\n )}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n >\n {children}\n\n {!removeIcon && (\n <SelectPrimitive.Icon\n render={\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"text-muted-foreground/80 in-aria-invalid:text-destructive/80 shrink-0 ml-auto\"\n />\n }\n />\n )}\n </SelectPrimitive.Trigger>\n )\n})\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n side,\n align,\n sideOffset = 4,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<SelectPrimitive.Positioner.Props, 'side' | 'align' | 'sideOffset'> & {\n position?: 'popper' | 'item-aligned'\n }) {\n const ctx = React.useContext(SelectContext)\n const mode = React.useContext(SelectItemModeContext)\n\n if (mode === 'discovery') {\n return <>{children}</>\n }\n\n if (ctx?.isMobile) {\n return (\n <Drawer\n open={ctx.open}\n onOpenChange={ctx.onOpenChange}\n direction=\"bottom\"\n >\n <Drawer.Content title=\"Select\" showDivider>\n <SelectItemModeContext.Provider value=\"interactive\">\n <div className=\"overflow-y-auto p-2 pb-6\">\n {cloneSelectChildren(children, 'drawer')}\n </div>\n </SelectItemModeContext.Provider>\n </Drawer.Content>\n </Drawer>\n )\n }\n\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n data-slot=\"select-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignItemWithTrigger={position === 'item-aligned'}\n className=\"z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\n 'border-transparent glass-popover p-1 text-popover-foreground relative z-50 max-h-[min(24rem,var(--available-height))] min-w-32 overflow-hidden rounded-xl **:[[role=group]]:py-1 outline-none origin-(--transform-origin)',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n position === 'popper' && 'min-w-(--anchor-width)',\n className,\n )}\n {...props}\n >\n <SelectPrimitive.List\n data-slot=\"select-list\"\n className=\"scroll-fade-y max-h-[min(24rem,var(--available-height))] overflow-x-hidden overflow-y-auto p-1\"\n >\n {children}\n </SelectPrimitive.List>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\n 'px-2 pt-2 pb-1.5 text-xs font-medium uppercase text-muted-foreground/50 select-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n value,\n ...props\n}: SelectPrimitive.Item.Props) {\n const ctx = React.useContext(SelectContext)\n const mode = React.useContext(SelectItemModeContext)\n\n const { trigger } = useHaptics()\n\n React.useEffect(() => {\n if (ctx) {\n ctx.registerLabel(value as string, children)\n }\n }, [ctx, value, children])\n\n if (mode === 'discovery') {\n return null\n }\n\n if (mode === 'interactive') {\n const isSelected = ctx?.value === value\n return (\n <button\n type=\"button\"\n data-slot=\"select-item\"\n className={cn(\n 'relative flex w-full cursor-pointer items-center gap-4 p-4 lg:p-2.5 lg:pe-12 outline-hidden select-none rounded-lg',\n isSelected ? 'text-foreground' : 'text-muted-foreground',\n 'hover:bg-muted hover:text-foreground',\n className,\n )}\n onClick={() => {\n trigger('click')\n ctx?.onValueChange(value as string)\n }}\n >\n {isSelected && (\n <Icon\n name=\"Check\"\n strokeWidth={4}\n className=\"absolute inset-e-4 flex size-4 items-center justify-center\"\n />\n )}\n\n {children}\n </button>\n )\n }\n\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n 'data-highlighted:bg-muted data-highlighted:text-foreground relative flex w-full cursor-pointer items-center p-2.5 pe-8! outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 rounded-lg not-data-selected:text-muted-foreground data-selected:text-foreground',\n className,\n )}\n value={value}\n {...props}\n >\n <span className=\"absolute inset-e-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Icon name=\"Check\" size={16} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"select-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: SelectPrimitive.ScrollUpArrow.Props) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\n 'text-muted-foreground/80 flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <Icon name=\"ChevronUp\" size={16} />\n </SelectPrimitive.ScrollUpArrow>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: SelectPrimitive.ScrollDownArrow.Props) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\n 'text-muted-foreground/80 flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <Icon name=\"ChevronDown\" size={16} />\n </SelectPrimitive.ScrollDownArrow>\n )\n}\n\nconst Select = Object.assign(SelectRoot, {\n Content: SelectContent,\n Group: SelectGroup,\n Item: SelectItem,\n Label: SelectLabel,\n ScrollDownButton: SelectScrollDownButton,\n ScrollUpButton: SelectScrollUpButton,\n Separator: SelectSeparator,\n Trigger: SelectTrigger,\n Value: SelectValue,\n})\nexport { Select }\n","\nimport { Table } from '@tanstack/react-table'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\n\nimport { Select } from '@/components/ui/select'\n\ninterface CursorPaginationMeta {\n hasNext?: boolean\n hasPrevious?: boolean\n limit?: number\n}\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>\n pageSizeOptions?: number[]\n cursorMeta?: CursorPaginationMeta\n onNavigate?: (direction: 'next' | 'previous') => void\n disablePageSize?: boolean\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 30, 40, 50],\n cursorMeta,\n onNavigate,\n disablePageSize,\n}: DataTablePaginationProps<TData>) {\n\n const isCursorPagination = !!cursorMeta\n\n const hasNext = cursorMeta?.hasNext ?? table.getCanNextPage()\n const hasPrevious = cursorMeta?.hasPrevious ?? table.getCanPreviousPage()\n\n const hasRowsSelected = table.getFilteredSelectedRowModel().rows.length > 0\n\n const handlePrevious = () => {\n if (isCursorPagination && onNavigate) {\n onNavigate('previous')\n } else {\n table.previousPage()\n }\n }\n\n const handleNext = () => {\n if (isCursorPagination && onNavigate) {\n onNavigate('next')\n } else {\n table.nextPage()\n }\n }\n\n return (\n <div className=\"flex gap-4 sm:items-center sm:justify-between\">\n {hasRowsSelected && (\n <div className=\"hidden sm:block text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{' '}\n {table.getFilteredRowModel().rows.length} selected\n </div>\n )}\n\n <div className=\"flex items-center space-x-2 w-fit\">\n\n <p className=\"hidden sm:block text-sm text-muted-foreground text-nowrap\">\n Rows per page\n </p>\n\n <Select\n disabled={disablePageSize}\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => table.setPageSize(Number(value))}\n >\n <Select.Trigger className=\"h-10 min-w-[70px]\">\n <Select.Value placeholder={table.getState().pagination.pageSize} />\n </Select.Trigger>\n\n <Select.Content side=\"top\">\n {pageSizeOptions.map((pageSize) => (\n <Select.Item key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n\n <div className=\"flex flex-col gap-4 w-full sm:w-auto sm:flex-row sm:items-center sm:gap-6 lg:gap-8\">\n <div className=\"flex items-center justify-end space-x-2 w-full sm:w-auto\">\n <div className=\"space-x-2\">\n {!isCursorPagination && (\n <Button\n size=\"icon\"\n variant=\"outline\"\n disabled={!hasPrevious}\n onClick={() => table.setPageIndex(0)}\n >\n <span className=\"sr-only\">Go to first page</span>\n <Icon name=\"ChevronLeftToLine\" className=\"h-4 w-4\" />\n </Button>\n )}\n\n <Button\n size=\"icon\"\n variant=\"outline\"\n onClick={handlePrevious}\n disabled={!hasPrevious}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <Icon name=\"ChevronLeft\" className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"space-x-2\">\n <Button\n size=\"icon\"\n variant=\"outline\"\n onClick={handleNext}\n disabled={!hasNext}\n >\n <span className=\"sr-only\">Go to next page</span>\n <Icon name=\"ChevronRight\" className=\"h-4 w-4\" />\n </Button>\n\n {!isCursorPagination && (\n <Button\n size=\"icon\"\n variant=\"outline\"\n disabled={!hasNext}\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n >\n <span className=\"sr-only\">Go to last page</span>\n <Icon name=\"ChevronRightToLine\" className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { Table } from '@tanstack/react-table'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu } from '@/components/ui/dropdown-menu'\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>\n}\n\nexport function DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button variant=\"outline\" className=\"ml-auto hidden h-8 lg:flex\">\n <Icon name=\"Gear2\" className=\"mr-2 h-4 w-4\" />\n View\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" className=\"w-[150px]\">\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== 'undefined' && column.getCanHide(),\n )\n .map((column) => (\n <DropdownMenu.CheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenu.CheckboxItem>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n )\n}\n","'use client'\n\nimport { Table } from '@tanstack/react-table'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DataTableViewOptions } from './data-table-view-options'\n\ninterface DataTableToolbarProps<TData> {\n table: Table<TData>\n show?: {\n reset: boolean\n view: boolean\n }\n children?: React.ReactNode\n}\n\nexport function DataTableToolbar<TData>({\n table,\n show = {\n reset: true,\n view: false,\n },\n children,\n}: DataTableToolbarProps<TData>) {\n const isFiltered = table.getState().columnFilters.length > 0\n\n if ((!show.reset && !isFiltered) || !show.view) {\n return null\n }\n\n return (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-1 items-center space-x-2\">\n {children}\n\n {show.reset && isFiltered && (\n <Button\n variant=\"ghost\"\n onClick={() => table.resetColumnFilters()}\n className=\"h-8 px-2 lg:px-3\"\n >\n Reset\n <Icon name=\"Xmark\" className=\"ml-2 h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {show.view && <DataTableViewOptions table={table} />}\n </div>\n )\n}\n","import type { HTMLAttributes } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nfunction SafariDesktop({ url, children }: SafariProps) {\n return (\n <div id=\"safari-screen\" className=\"flex flex-col bg-card rounded-xl\">\n <div id=\"top-bar\" className=\"flex items-center gap-4 px-5 py-2.5 h-14\">\n <div className=\"flex items-center gap-6\">\n <div id=\"os-buttons\" className=\"flex gap-2\">\n {Array.from({ length: 3 }).map((_, index) => (\n <div\n key={index}\n className=\"size-3 rounded-full bg-muted-foreground/25\"\n />\n ))}\n </div>\n\n <Icon\n name=\"LayoutSidebar\"\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n\n <div id=\"page-controls\" className=\"flex items-center gap-2\">\n {['ChevronLeft', 'ChevronRight'].map((icon) => (\n <Icon\n key={icon}\n name={icon as IconType}\n className=\"size-6 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n </div>\n\n <div\n id=\"search-bar\"\n className=\"relative flex items-center justify-center gap-2 rounded-md bg-muted text-muted-foreground px-3 py-2 w-full h-full max-w-1/2 mx-auto\"\n >\n <Icon name=\"Lock\" className=\"size-4 fill-transparent!\" />\n\n <span className=\"text-sm select-none pointer-events-none\">\n {url.replace(/^https?:\\/\\//, '')}\n </span>\n\n <Icon\n name=\"ArrowRotateClockwise\"\n className=\"size-4 absolute right-3 fill-transparent!\"\n />\n </div>\n\n <div className=\"flex items-center gap-4\">\n {['Share', 'Plus', 'Copy'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n </div>\n\n <div\n id=\"content\"\n className=\"flex-1 rounded-xl rounded-t-none overflow-hidden border-t border-border\"\n >\n {children}\n </div>\n </div>\n )\n}\n\nfunction SafariIPad({ url, children }: SafariProps) {\n return (\n <div className=\"bg-card rounded-xl p-1\">\n <div className=\"bg-card min-h-[500px] relative overflow-hidden rounded-xl\">\n <div className=\"flex flex-col h-full\">\n <div\n id=\"top-bar\"\n className=\"flex items-center gap-3 px-4 py-2 h-12 bg-card\"\n >\n <div className=\"flex items-center gap-4\">\n <div id=\"page-controls\" className=\"flex items-center gap-1\">\n {['ChevronLeft', 'ChevronRight'].map((icon) => (\n <Icon\n key={icon}\n name={icon as IconType}\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n\n <Icon\n name=\"BookOpen\"\n className=\"size-4 text-muted-foreground fill-transparent!\"\n />\n </div>\n\n <div\n id=\"search-bar\"\n className=\"relative flex items-center justify-center gap-2 rounded-md bg-muted text-muted-foreground px-3 py-1.5 w-full h-full max-w-1/2 mx-auto\"\n >\n <Icon\n name=\"TextSizeChange\"\n className=\"size-4 absolute left-3 fill-transparent!\"\n />\n\n <Icon name=\"Lock\" className=\"size-3 fill-transparent!\" />\n\n <span className=\"text-xs select-none pointer-events-none\">\n {url.replace(/^https?:\\/\\//, '')}\n </span>\n\n <Icon\n name=\"ArrowRotateClockwise\"\n className=\"size-3 absolute right-3 fill-transparent!\"\n />\n </div>\n\n <div className=\"flex items-center gap-3\">\n {['Share', 'Plus', 'Copy'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-4 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n </div>\n\n <div className=\"flex-1 overflow-hidden\">{children}</div>\n </div>\n </div>\n\n <div className=\"absolute bottom-0 left-0 right-0 h-4 flex items-center justify-center\">\n <div className=\"w-32 h-1 bg-[#404040] rounded-full\"></div>\n </div>\n </div>\n )\n}\n\nfunction SafariIPhone({ url, children }: SafariProps) {\n return (\n <div className=\"bg-card rounded-3xl p-1 sm:max-w-[375px] min-h-[667px] max-h-[667px] mx-auto overflow-hidden\">\n <div className=\"relative min-h-full max-h-[calc(667px-.5rem)] rounded-3xl overflow-hidden\">\n <div className=\"flex flex-1 flex-col min-h-full\">\n <div className=\"flex flex-col flex-1 overflow-hidden min-h-full rounded-3xl\">\n {children}\n </div>\n\n <div\n id=\"bottom-bar\"\n className=\"flex flex-col items-center gap-2 p-3 pb-1 bg-card border-b border-border\"\n >\n <div\n id=\"search-bar\"\n className=\"relative flex items-center justify-center gap-1.5 rounded-md bg-muted text-muted-foreground px-2 py-2.5 w-full mx-auto h-10\"\n >\n <Icon\n name=\"TextAlignLeft\"\n className=\"size-4 absolute left-3 fill-transparent!\"\n />\n\n <span className=\"text-xs select-none pointer-events-none truncate\">\n {url.replace(/^https?:\\/\\//, '')}\n </span>\n\n <Icon\n name=\"ArrowRotateClockwise\"\n className=\"size-4 absolute right-3 fill-transparent!\"\n />\n\n {Array.from({ length: 2 }).map((_, index) => (\n <div\n key={index}\n className={cn(\n 'rounded-md bg-muted text-muted-foreground h-10 w-24',\n 'absolute',\n index === 0 ? 'left-[-30%]' : 'right-[-30%]',\n )}\n />\n ))}\n </div>\n\n <div className=\"flex items-center justify-between w-full px-5 py-2\">\n {['ChevronLeft', 'ChevronRight'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n ))}\n\n {['Share', 'BookOpen', 'Copy'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-4.5 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n\n <div className=\"h-2 flex items-center justify-center\">\n <div className=\"w-24 h-1 bg-border rounded-full\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport interface SafariProps extends HTMLAttributes<HTMLDivElement> {\n url: string\n children?: React.ReactNode\n}\n\nexport function Safari({ url, children }: SafariProps) {\n return (\n <div className=\"grid gap-4\">\n <div className=\"hidden xl:block\">\n <SafariDesktop url={url}>{children}</SafariDesktop>\n </div>\n\n <div className=\"hidden sm:block xl:hidden\">\n <SafariIPad url={url}>{children}</SafariIPad>\n </div>\n\n <div className=\"block sm:hidden\">\n <SafariIPhone url={url}>{children}</SafariIPhone>\n </div>\n </div>\n )\n}\n","import { Safari } from './safari'\n\nexport const Devices = {\n Safari,\n}\n","'use client'\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useState,\n} from 'react'\n\nimport { create } from 'zustand'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button, type ButtonVariants } from '@/components/ui/button'\nimport {\n Dialog as UiDialog,\n DialogContent as UiDialogContent,\n DialogDescription as UiDialogDescription,\n DialogFooter as UiDialogFooter,\n DialogHeader as UiDialogHeader,\n DialogTitle as UiDialogTitle,\n} from '@/components/internal/dialog'\n\nexport const useDialog = create<DialogStore>((set) => ({\n isOpen: false,\n open: () => set({ isOpen: true }),\n close: () => set({ isOpen: false }),\n toggle: () => set((state) => ({ isOpen: !state.isOpen })),\n}))\n\ninterface DialogStore {\n isOpen: boolean\n open: () => void\n close: () => void\n toggle: () => void\n}\n\ninterface DialogStackContextType {\n activeIndex: number\n register: (id: string, order?: number) => number\n unregister: (id: string) => void\n goTo: (index: number) => void\n next: () => void\n back: () => void\n total: number\n}\n\nconst DialogStackContext = createContext<DialogStackContextType | null>(null)\n\nexport const useDialogStack = () => {\n const context = useContext(DialogStackContext)\n\n if (!context) {\n throw new Error('useDialogStack must be used within a DialogStack')\n }\n\n return context\n}\n\nexport function DialogStack({\n children,\n defaultIndex = 0,\n onIndexChange,\n}: {\n children: React.ReactNode\n defaultIndex?: number\n onIndexChange?: (index: number) => void\n}) {\n const [activeIndex, setActiveIndex] = useState(defaultIndex)\n const [items, setItems] = useState<{ id: string; order: number | null }[]>([])\n\n const register = useCallback((id: string, order?: number) => {\n setItems((prev) => {\n if (prev.find((item) => item.id === id)) return prev\n const newItems = [...prev, { id, order: order ?? null }]\n return newItems\n })\n\n return order ?? 0\n }, [])\n\n const unregister = useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id))\n }, [])\n\n const goTo = useCallback(\n (index: number) => {\n setActiveIndex(index)\n onIndexChange?.(index)\n },\n [onIndexChange],\n )\n\n const next = useCallback(() => {\n setActiveIndex((prev) => {\n const nextIndex = prev + 1\n onIndexChange?.(nextIndex)\n return nextIndex\n })\n }, [onIndexChange])\n\n const back = useCallback(() => {\n setActiveIndex((prev) => {\n const prevIndex = Math.max(0, prev - 1)\n onIndexChange?.(prevIndex)\n return prevIndex\n })\n }, [onIndexChange])\n\n const value = useMemo(\n () => ({\n activeIndex,\n register,\n unregister,\n goTo,\n next,\n back,\n total: items.length,\n }),\n [activeIndex, register, unregister, goTo, next, back, items.length],\n )\n\n return (\n <DialogStackContext.Provider value={value}>\n {children}\n </DialogStackContext.Provider>\n )\n}\n\nfunction Dialog({\n title,\n description,\n actions: actionsProp,\n isOpen,\n onOpenChange,\n style,\n className,\n overlay = true,\n children,\n order,\n removeOverlay = false,\n notRelative = false,\n showDescription = false,\n classNames,\n hideMobileFooterClose = false,\n}: {\n title?: string | React.ReactNode\n description?: string\n actions?:\n | {\n className?: string\n variant?: ButtonVariants\n label: string\n onClick: () => void\n disabled?: boolean\n isLoading?: boolean\n }[]\n | null\n | undefined\n className?: string\n children: React.ReactNode\n isOpen?: boolean\n onOpenChange?: (open: boolean) => void\n style?: React.CSSProperties\n overlay?: boolean\n order?: number\n offset?: number\n removeOverlay?: boolean\n notRelative?: boolean\n showDescription?: boolean\n /** Mobile: do not prepend the default “Close” button next to `actions` (header X still closes). */\n hideMobileFooterClose?: boolean\n classNames?: {\n container?: string\n content?: string\n header?: string\n description?: string\n footer?: string\n }\n}) {\n const isMobile = useIsMobile()\n\n const globalDialog = useDialog()\n const stack = useContext(DialogStackContext)\n\n const id = useId()\n\n const scrollableContentRef = React.useRef<HTMLDivElement>(null)\n\n const [stackOrder, setStackOrder] = useState<number | null>(order ?? null)\n\n let isBehind = false\n let dialogOpen = isOpen !== undefined ? isOpen : globalDialog.isOpen\n\n let stackStyle: React.CSSProperties = {}\n\n const handleClose = () => {\n if (stack) {\n if (stack.activeIndex > 0) {\n if (onOpenChange) {\n onOpenChange(false)\n } else {\n stack.back()\n }\n\n return\n }\n }\n\n if (onOpenChange) {\n onOpenChange(false)\n } else {\n globalDialog.close()\n }\n }\n\n const finalStyle = { ...style, ...stackStyle }\n const closeLabel = 'close'\n\n const mobileCloseAction: {\n variant: 'default'\n label: string\n onClick: () => void\n className: string\n disabled?: boolean\n isLoading?: boolean\n } = {\n variant: 'default',\n label: closeLabel,\n onClick: handleClose,\n className: 'mr-auto',\n }\n\n const actions = (() => {\n if (!isMobile || hideMobileFooterClose) {\n if (actionsProp === null) return null\n return actionsProp ?? undefined\n }\n\n if (actionsProp === null || actionsProp === undefined) {\n return [mobileCloseAction]\n }\n\n if (actionsProp.length === 0) {\n return [mobileCloseAction]\n }\n\n if (actionsProp.some((a) => a.label === closeLabel)) {\n return actionsProp\n }\n\n return [mobileCloseAction, ...actionsProp]\n })()\n\n if (stack) {\n const targetOrder = order ?? stackOrder ?? 0\n\n if (targetOrder !== null) {\n dialogOpen = stack.activeIndex >= targetOrder\n\n const distanceFromActive = targetOrder - stack.activeIndex\n\n isBehind = distanceFromActive < 0\n\n if (distanceFromActive <= 0) {\n // Horizontal “carousel”: previous steps sit one panel width to the left\n // instead of scaling/grayscale stacking behind the active step.\n stackStyle = {\n top: '50%',\n left: '50%',\n transform: `translate(-50%, -50%) translateX(calc(${distanceFromActive} * 100%))`,\n zIndex: 50 + targetOrder,\n position: 'fixed',\n pointerEvents: distanceFromActive === 0 ? 'auto' : 'none',\n transition: 'transform 300ms cubic-bezier(0.32, 0.72, 0, 1)',\n }\n } else {\n dialogOpen = false\n }\n }\n }\n\n useEffect(() => {\n if (stack) {\n const assigned = stack.register(id, order)\n\n if (order === undefined) {\n setStackOrder(assigned)\n }\n\n return () => stack.unregister(id)\n }\n }, [stack?.register, stack?.unregister, id, order, stack])\n\n return (\n <UiDialog\n open={dialogOpen}\n onOpenChange={(open) => {\n if (!open) handleClose()\n }}\n >\n <UiDialogContent\n style={finalStyle}\n overlay={removeOverlay ? false : overlay}\n scrollableRef={scrollableContentRef}\n className={cn(\n 'p-0 gap-0 max-w-2xl! bg-card border-none outline-none max-h-dvh max-sm:px-1 sm:p-1 sm:rounded-2xl group w-full flex min-h-0 flex-col overflow-hidden flex-1',\n !(actions && actions.length > 0) && 'max-sm:pb-1',\n stack && 'will-change-transform',\n className,\n classNames?.container,\n )}\n >\n {(title || description) && (\n <UiDialogHeader\n className={cn(\n 'max-sm:px-4 max-sm:py-6 sm:p-4 rounded-t-xl shrink-0 gap-3 flex flex-row items-center justify-between',\n classNames?.header,\n )}\n >\n <div className=\"flex flex-col gap-1\">\n {title && <UiDialogTitle>{title}</UiDialogTitle>}\n\n {description && (\n <UiDialogDescription\n className={cn(!showDescription && 'sr-only')}\n >\n {description}\n </UiDialogDescription>\n )}\n </div>\n\n <Button\n variant=\"ghost\"\n onClick={handleClose}\n aria-label={'close'}\n className=\"ml-auto rounded-md p-1 bg-muted/50 hover:bg-muted hover:opacity-100 text-muted-foreground\"\n >\n <Icon name=\"Xmark\" className=\"size-4\" />\n </Button>\n </UiDialogHeader>\n )}\n\n <div\n ref={scrollableContentRef}\n {...(isBehind ? { inert: true } : {})}\n className={cn(\n 'p-4 w-full bg-muted text-card-foreground flex min-h-0 flex-col gap-4 rounded-xl overflow-y-auto overflow-x-hidden flex-1',\n isBehind && 'pointer-events-none select-none',\n isBehind && !stack && 'opacity-0',\n !stack && 'transition-opacity duration-300',\n !notRelative && 'relative',\n classNames?.content,\n )}\n >\n {children}\n </div>\n\n {actions && actions.length > 0 && (\n <UiDialogFooter\n className={cn('flex-row justify-end p-4 rounded-b-xl shrink-0', classNames?.footer)}\n >\n {actions.map((action) => (\n <Button\n key={action.label}\n onClick={action.onClick}\n variant={action.variant}\n disabled={action.disabled}\n className={action.className}\n isLoading={action.isLoading}\n >\n {action.label}\n </Button>\n ))}\n </UiDialogFooter>\n )}\n </UiDialogContent>\n </UiDialog>\n )\n}\n\nexport { Dialog }\n","'use client'\n\nimport * as React from 'react'\n\nimport { RemoveScroll } from 'react-remove-scroll'\n\nimport { Dialog as DialogPrimitive } from '@base-ui/react/dialog'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { ANIMATION } from '@/constants/animations'\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n // 'trap-focus' keeps focus containment without Base UI's body scroll lock —\n // scroll locking is handled by RemoveScroll in DialogOverlay.\n return <DialogPrimitive.Root data-slot=\"dialog\" modal=\"trap-focus\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return (\n <DialogPrimitive.Trigger\n data-slot=\"dialog-trigger\"\n className=\"cursor-pointer\"\n {...props}\n />\n )\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\n/** Backdrop scroll lock without `overflow: hidden` on body (avoids breaking sticky headers). */\nfunction DialogOverlay({\n className,\n contentRef,\n scrollableRef,\n ...props\n}: Omit<React.ComponentProps<'div'>, 'ref'> & {\n contentRef: React.RefObject<HTMLElement | null>\n /** Actual overflow container when content scroll lives inside the panel (not on `contentRef`). */\n scrollableRef?: React.RefObject<HTMLElement | null>\n}) {\n const shards = React.useMemo(\n () => (scrollableRef ? [contentRef, scrollableRef] : [contentRef]),\n [contentRef, scrollableRef],\n )\n\n return (\n <RemoveScroll allowPinchZoom removeScrollBar={false} shards={shards}>\n <div\n data-slot=\"dialog-overlay\"\n className={cn(\n 'animate-in fade-in-0 duration-200 fixed inset-0 z-50 bg-black/80',\n className,\n )}\n {...props}\n />\n </RemoveScroll>\n )\n}\n\nfunction DialogContent({\n className,\n children,\n closeButton = false,\n closeButtonClassName,\n title = 'Title',\n overlay = true,\n scrollableRef,\n ...props\n}: DialogPrimitive.Popup.Props & {\n closeButton?: boolean\n closeButtonClassName?: string\n title?: string\n overlay?: boolean\n scrollableRef?: React.RefObject<HTMLElement | null>\n}) {\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogPortal>\n {overlay && (\n <DialogOverlay contentRef={contentRef} scrollableRef={scrollableRef} />\n )}\n\n <DialogPrimitive.Popup\n ref={contentRef}\n data-slot=\"dialog-content\"\n aria-describedby={props['aria-describedby'] || ''}\n initialFocus={() => {\n // Don't move focus into the dialog and drop focus from the trigger,\n // matching the previous blur-on-open behavior.\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur()\n }\n return contentRef.current\n }}\n className={cn(\n 'bg-background fixed top-1/2 left-1/2 z-50 grid max-sm:h-dvh sm:max-h-[calc(100%-2rem)] w-full sm:max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 overflow-hidden sm:rounded-xl border p-6 shadow-lg',\n 'transition-[transform,scale,opacity] ease-out',\n 'data-starting-style:scale-98 data-starting-style:opacity-0',\n 'data-ending-style:scale-98 data-ending-style:opacity-0',\n `duration-${ANIMATION.DURATION}`,\n className,\n )}\n {...props}\n >\n <DialogTitle className=\"sr-only\">{title}</DialogTitle>\n\n {children}\n\n {closeButton && (\n <DialogPrimitive.Close\n className={cn(\n 'group focus-visible:border-ring focus-visible:ring-ring/50 absolute top-3 right-3 flex size-7 items-center justify-center rounded transition-[color,box-shadow] outline-none cursor-pointer focus-visible:ring-[3px] disabled:pointer-events-none',\n closeButtonClassName,\n )}\n >\n <Icon\n name=\"Xmark\"\n size={16}\n className=\"opacity-60 transition-opacity group-hover:opacity-100\"\n />\n <span className=\"sr-only\">{'close'}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn('flex flex-col gap-1', className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-3 xs:flex-row xs:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn('text-lg sm:text-xl leading-none', className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { EmojiPicker as EmojiPickerPrimitive } from 'frimousse'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nconst EmojiPickerContext = React.createContext<{\n rootRef: React.RefObject<HTMLDivElement | null>\n} | null>(null)\n\nfunction EmojiPickerRoot({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Root>) {\n const rootRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <EmojiPickerContext.Provider value={{ rootRef }}>\n <EmojiPickerPrimitive.Root\n ref={rootRef}\n data-slot=\"emoji-picker\"\n className={cn(\n 'isolate flex h-[368px] w-fit flex-col overflow-hidden rounded-xl bg-muted text-foreground [--card-content-padding:1rem]',\n className,\n )}\n {...props}\n />\n </EmojiPickerContext.Provider>\n )\n}\n\n/**\n * Emojibase groups in their canonical order — the order in which\n * `EmojiPicker.List` renders category sections. Used to map each category\n * button to the matching (index-aligned) section header for scrolling.\n */\nconst EMOJI_CATEGORIES: { label: string; icon: IconType }[] = [\n { label: 'Smileys & Emotion', icon: 'FaceSmile' },\n { label: 'People & Body', icon: 'HandWave' },\n { label: 'Animals & Nature', icon: 'Paw' },\n { label: 'Food & Drink', icon: 'Coffee' },\n { label: 'Travel & Places', icon: 'Globe' },\n { label: 'Activities', icon: 'Trophy' },\n { label: 'Objects', icon: 'Lightbulb' },\n { label: 'Symbols', icon: 'Heart' },\n { label: 'Flags', icon: 'Flag' },\n]\n\n/**\n * Opt-in category strip. Add it inside `EmojiPicker` (e.g. below `Search`) to\n * jump between category sections; it also highlights the section in view.\n */\nfunction EmojiPickerCategorySelector({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const ctx = React.useContext(EmojiPickerContext)\n const [activeIndex, setActiveIndex] = React.useState(0)\n\n const getParts = React.useCallback(() => {\n const root = ctx?.rootRef.current\n const viewport = root?.querySelector<HTMLElement>('[frimousse-viewport]')\n if (!viewport) return null\n\n // Real section wrappers only — the (aria-hidden) sizer nests its header\n // deeper, so a direct-child match excludes it.\n const sections = Array.from(\n viewport.querySelectorAll<HTMLElement>('[frimousse-category]'),\n ).filter((el) =>\n el.querySelector(':scope > [data-slot=\"emoji-picker-category-header\"]'),\n )\n\n return { viewport, sections }\n }, [ctx])\n\n React.useEffect(() => {\n const parts = getParts()\n if (!parts) return\n\n const { viewport } = parts\n\n const onScroll = () => {\n const current = getParts()\n if (!current) return\n\n const viewportTop = current.viewport.getBoundingClientRect().top\n\n let next = 0\n current.sections.forEach((section, index) => {\n if (section.getBoundingClientRect().top - viewportTop <= 8) next = index\n })\n\n setActiveIndex(next)\n }\n\n viewport.addEventListener('scroll', onScroll, { passive: true })\n onScroll()\n\n return () => viewport.removeEventListener('scroll', onScroll)\n }, [getParts])\n\n const scrollToCategory = (index: number) => {\n const parts = getParts()\n const target = parts?.sections[index]\n if (!parts || !target) return\n\n const delta =\n target.getBoundingClientRect().top -\n parts.viewport.getBoundingClientRect().top\n\n parts.viewport.scrollTo({\n top: parts.viewport.scrollTop + delta,\n behavior: 'smooth',\n })\n setActiveIndex(index)\n }\n\n return (\n <div\n data-slot=\"emoji-picker-category-selector\"\n className={cn(\n 'flex shrink-0 items-center gap-0.5 px-1.5 pt-1.5',\n className,\n )}\n {...props}\n >\n {EMOJI_CATEGORIES.map((category, index) => (\n <button\n key={category.label}\n type=\"button\"\n aria-label={category.label}\n title={category.label}\n data-active={activeIndex === index ? '' : undefined}\n onClick={() => scrollToCategory(index)}\n className=\"flex flex-1 cursor-pointer items-center justify-center rounded-lg p-1.5 text-muted-foreground/50 transition-colors hover:bg-accent hover:text-foreground data-active:bg-accent data-active:text-foreground\"\n >\n <Icon name={category.icon} className=\"size-4\" />\n </button>\n ))}\n </div>\n )\n}\n\nfunction EmojiPickerSearch({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Search>) {\n return (\n <div\n data-slot=\"emoji-picker-search-wrapper\"\n className=\"flex h-14 shrink-0 items-center gap-4 px-(--card-content-padding)\"\n >\n <Icon name=\"Magnifier\" className=\"size-4 shrink-0 opacity-50\" />\n\n <EmojiPickerPrimitive.Search\n data-slot=\"emoji-picker-search\"\n className={cn(\n 'flex h-10 w-full bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50',\n '[&::-webkit-search-cancel-button]:hidden',\n className,\n )}\n placeholder={'Search emoji...'}\n {...props}\n />\n </div>\n )\n}\n\nfunction EmojiPickerViewport({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Viewport>) {\n return (\n <EmojiPickerPrimitive.Viewport\n data-slot=\"emoji-picker-viewport\"\n className={cn('relative flex-1 outline-hidden', className)}\n {...props}\n />\n )\n}\n\nfunction EmojiPickerLoading({\n className,\n children = 'Loading...',\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Loading>) {\n return (\n <EmojiPickerPrimitive.Loading\n data-slot=\"emoji-picker-loading\"\n className={cn(\n 'absolute inset-0 flex items-center justify-center text-sm text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </EmojiPickerPrimitive.Loading>\n )\n}\n\nfunction EmojiPickerEmpty({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Empty>) {\n return (\n <EmojiPickerPrimitive.Empty\n data-slot=\"emoji-picker-empty\"\n className={cn(\n 'absolute inset-0 flex items-center justify-center text-sm text-muted-foreground',\n className,\n )}\n {...props}\n >\n {typeof children === 'function' ? children : children ?? 'No emoji found.'}\n </EmojiPickerPrimitive.Empty>\n )\n}\n\nfunction EmojiPickerList({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.List>) {\n return (\n <EmojiPickerPrimitive.List\n data-slot=\"emoji-picker-list\"\n className={cn('select-none pb-1.5', className)}\n components={{\n CategoryHeader: ({ category, ...props }) => (\n <div\n data-slot=\"emoji-picker-category-header\"\n className=\"bg-muted px-3 pt-3 pb-1.5 text-xs font-medium uppercase text-muted-foreground/50\"\n {...props}\n >\n {category.label}\n </div>\n ),\n Row: ({ children, ...props }) => (\n <div\n data-slot=\"emoji-picker-row\"\n className=\"scroll-my-1.5 px-1.5\"\n {...props}\n >\n {children}\n </div>\n ),\n Emoji: ({ emoji, ...props }) => (\n <button\n data-slot=\"emoji-picker-emoji\"\n className=\"flex size-8 cursor-pointer items-center justify-center rounded-lg text-lg transition-colors data-active:bg-accent data-active:text-accent-foreground\"\n {...props}\n >\n {emoji.emoji}\n </button>\n ),\n }}\n {...props}\n />\n )\n}\n\nfunction EmojiPickerSkinToneSelector({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.SkinToneSelector>) {\n return (\n <EmojiPickerPrimitive.SkinToneSelector\n data-slot=\"emoji-picker-skin-tone-selector\"\n className={cn(\n 'flex size-7 cursor-pointer items-center justify-center rounded-lg text-sm transition-colors hover:bg-accent',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction EmojiPickerFooter({\n className,\n children,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"emoji-picker-footer\"\n className={cn(\n 'flex shrink-0 items-center justify-between px-(--card-content-padding) py-2',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nfunction EmojiPickerActiveEmoji({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.ActiveEmoji> & { className?: string }) {\n return (\n <span\n data-slot=\"emoji-picker-active-emoji\"\n className={cn('min-w-0 truncate text-xs text-muted-foreground', className)}\n >\n <EmojiPickerPrimitive.ActiveEmoji\n {...(props as React.ComponentProps<typeof EmojiPickerPrimitive.ActiveEmoji>)}\n />\n </span>\n )\n}\n\nexport const EmojiPicker = Object.assign(EmojiPickerRoot, {\n Search: EmojiPickerSearch,\n CategorySelector: EmojiPickerCategorySelector,\n Viewport: EmojiPickerViewport,\n Loading: EmojiPickerLoading,\n Empty: EmojiPickerEmpty,\n List: EmojiPickerList,\n SkinToneSelector: EmojiPickerSkinToneSelector,\n Footer: EmojiPickerFooter,\n ActiveEmoji: EmojiPickerActiveEmoji,\n})\n","'use client'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { Card } from '@/components/ui/card'\n\nexport function EmptyState({\n icon = 'Archive',\n title,\n description,\n children,\n variant = 'default',\n className,\n}: {\n icon?: IconType\n title?: string\n description?: string\n children?: React.ReactNode\n variant?: 'default' | 'embedded' | 'flat'\n className?: string\n}) {\n\n return (\n <Card className={cn(\n ['embedded', 'flat'].includes(variant) && 'p-0',\n )}>\n <Card.Content\n className={cn(\n 'flex flex-col items-center justify-center gap-4 text-center',\n variant === 'flat' ? 'rounded-none bg-transparent p-0' : 'rounded-xl p-8',\n className,\n )}\n >\n {icon && (\n <Icon\n name={icon}\n className=\"size-8 text-muted-foreground\"\n />\n )}\n\n {(title || description) && (\n <div className=\"flex flex-col items-center justify-center gap-1 text-balance max-w-md\">\n {title && (\n <p className=\"text-foreground text-lg\">\n {title}\n </p>\n )}\n\n {description && (\n <p className=\"text-muted-foreground text-sm\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {children}\n </Card.Content>\n </Card>\n )\n}\n","'use client'\n\nimport { PreviewCard as PreviewCardPrimitive } from '@base-ui/react/preview-card'\n\nimport { cn } from '@/lib/cn'\n\nfunction HoverCardRoot({ ...props }: PreviewCardPrimitive.Root.Props) {\n return <PreviewCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({ ...props }: PreviewCardPrimitive.Trigger.Props) {\n return (\n <PreviewCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\ntype HoverCardContentProps = PreviewCardPrimitive.Popup.Props &\n Pick<\n PreviewCardPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n >\n\nfunction HoverCardContent({\n className,\n side = 'bottom',\n sideOffset = 4,\n align = 'center',\n alignOffset = 4,\n ...props\n}: HoverCardContentProps) {\n return (\n <PreviewCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <PreviewCardPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <PreviewCardPrimitive.Popup\n data-slot=\"hover-card-content\"\n className={cn(\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 origin-(--transform-origin) outline-hidden',\n className,\n )}\n {...props}\n />\n </PreviewCardPrimitive.Positioner>\n </PreviewCardPrimitive.Portal>\n )\n}\n\nconst HoverCard = Object.assign(HoverCardRoot, { Trigger: HoverCardTrigger, Content: HoverCardContent })\nexport { HoverCard }\n\nexport type { HoverCardContentProps }\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\ntype InputGroupProps = React.HTMLAttributes<HTMLDivElement>\n\nfunction InputGroupRoot({ className, ...props }: InputGroupProps) {\n return (\n <div\n data-slot=\"input-group\"\n className={cn(\n 'relative',\n '[&:has([data-align=\"inline-start\"])_[data-slot=\"input-group-control\"]]:pl-10',\n '[&:has([data-align=\"inline-end\"])_[data-slot=\"input-group-control\"]]:pr-10',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype InputGroupInputProps = React.ComponentProps<'input'>\n\nfunction InputGroupInput({ className, ...props }: InputGroupInputProps) {\n return (\n <input\n data-slot=\"input-group-control\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground/50 placeholder:pointer-events-none placeholder:select-none bg-input flex h-12 w-full min-w-0 rounded-xl border border-transparent px-3 py-2 transition-all outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium text-foreground',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:brightness-75',\n 'read-only:pointer-events-none read-only:cursor-not-allowed read-only:brightness-75',\n className,\n )}\n {...props}\n />\n )\n}\nInputGroupInput.displayName = 'InputGroupInput'\n\ntype InputGroupAddonProps = React.HTMLAttributes<HTMLDivElement> & {\n align?: 'inline-start' | 'inline-end'\n}\n\nfunction InputGroupAddon({\n align = 'inline-start',\n className,\n ...props\n}: InputGroupAddonProps) {\n return (\n <div\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(\n 'absolute inset-y-0 flex items-center justify-center pointer-events-none',\n align === 'inline-start' && 'left-0 w-10',\n align === 'inline-end' && 'right-0 w-10',\n className,\n )}\n {...props}\n />\n )\n}\nInputGroupAddon.displayName = 'InputGroupAddon'\n\ntype InputGroupTextProps = React.HTMLAttributes<HTMLSpanElement>\n\nfunction InputGroupText({ className, ...props }: InputGroupTextProps) {\n return (\n <span\n data-slot=\"input-group-text\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n}\nInputGroupText.displayName = 'InputGroupText'\n\nconst InputGroup = Object.assign(InputGroupRoot, { Input: InputGroupInput, Addon: InputGroupAddon, Text: InputGroupText })\nexport { InputGroup }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport type { Currency } from '@/hooks/use-currency-input'\nimport { useCurrencyInput } from '@/hooks/use-currency-input'\nimport { useElementSize } from '@/hooks/use-element-size'\n\nimport { Input } from '@/components/ui/input'\nimport { Select } from '@/components/ui/select'\n\nexport interface CurrencyInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'onChange'\n> {\n value?: number\n locale?: string\n allowZero?: boolean\n defaultCurrency?: string\n disableCurrencySelect?: boolean\n centsMode?: boolean\n onChange?: (value: number) => void\n onCurrencyChange?: (currency: Currency) => void\n align?: 'start' | 'center' | 'end'\n}\n\nconst CurrencyInput = React.forwardRef<HTMLInputElement, CurrencyInputProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n onCurrencyChange,\n locale,\n className,\n disabled,\n disableCurrencySelect = false,\n centsMode = true,\n placeholder,\n defaultCurrency,\n allowZero = true,\n align = 'start',\n ...inputProps\n } = props\n\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const { width: triggerWidth } = useElementSize(triggerRef)\n\n const {\n displayValue,\n selectedCurrency,\n currencies,\n inputRef,\n placeholder: defaultPlaceholder,\n handleCurrencyChange,\n handleAmountChange,\n handleFocus,\n handleBlur,\n } = useCurrencyInput({\n centsMode,\n value,\n onChange,\n onCurrencyChange,\n locale,\n defaultCurrency,\n allowZero,\n })\n\n return (\n <div className=\"flex w-full\">\n <Select\n value={selectedCurrency.code}\n onValueChange={handleCurrencyChange}\n disabled={disabled || disableCurrencySelect}\n >\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-r-none border-r-0 focus:z-10 bg-accent',\n disableCurrencySelect && '[&>svg]:hidden',\n className,\n )}\n >\n <Select.Value>\n <span className=\"text-sm font-mono\">\n {selectedCurrency.symbol}\n </span>\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-32\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {currencies.map((currency) => (\n <Select.Item key={currency.code} value={currency.code}>\n <span className=\"text-sm font-mono text-muted-foreground\">\n {currency.symbol}\n </span>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n <Input\n ref={(node) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node\n }}\n type=\"text\"\n inputMode=\"decimal\"\n onBlur={handleBlur}\n disabled={disabled}\n value={displayValue}\n onFocus={handleFocus}\n placeholder={placeholder ?? defaultPlaceholder}\n onChange={handleAmountChange}\n className={cn('rounded-l-none focus:z-10', className)}\n {...inputProps}\n />\n </div>\n )\n },\n)\n\nCurrencyInput.displayName = 'CurrencyInput'\n\nexport { CurrencyInput }\nexport type { Currency }\n","import { type ChangeEvent, useEffect, useMemo, useRef, useState } from 'react'\n\nexport type Currency = {\n code: string\n symbol: string\n}\n\nconst CURRENCY_LOCALE: Record<string, string> = {\n USD: 'en-US',\n EUR: 'de-DE',\n GBP: 'en-GB',\n BRL: 'pt-BR',\n JPY: 'ja-JP',\n CNY: 'zh-CN',\n KRW: 'ko-KR',\n INR: 'en-IN',\n RUB: 'ru-RU',\n CHF: 'de-CH',\n CAD: 'en-CA',\n AUD: 'en-AU',\n MXN: 'es-MX',\n ARS: 'es-AR',\n CLP: 'es-CL',\n COP: 'es-CO',\n PEN: 'es-PE',\n UYU: 'es-UY',\n}\n\nconst currencies: Currency[] = [\n { code: 'USD', symbol: '$' },\n { code: 'EUR', symbol: '€' },\n { code: 'GBP', symbol: '£' },\n { code: 'BRL', symbol: 'R$' },\n { code: 'JPY', symbol: '¥' },\n { code: 'CNY', symbol: '¥' },\n { code: 'KRW', symbol: '₩' },\n { code: 'INR', symbol: '₹' },\n { code: 'RUB', symbol: '₽' },\n { code: 'CHF', symbol: 'CHF' },\n { code: 'CAD', symbol: 'CA$' },\n { code: 'AUD', symbol: 'A$' },\n { code: 'MXN', symbol: 'MX$' },\n { code: 'ARS', symbol: 'AR$' },\n { code: 'CLP', symbol: 'CL$' },\n { code: 'COP', symbol: 'CO$' },\n { code: 'PEN', symbol: 'S/' },\n { code: 'UYU', symbol: '$U' },\n]\n\nconst DIGITS_ONLY = /[^\\d]/g\n\nconst formatAmount = (digits: string, currencyCode: string, centsMode: boolean): string => {\n if (!digits) return ''\n\n const locale = CURRENCY_LOCALE[currencyCode] ?? 'en-US'\n const decimalSep =\n locale.startsWith('pt') || locale.startsWith('de') || locale.startsWith('fr') ||\n locale.startsWith('es') || locale.startsWith('it')\n ? ','\n : '.'\n\n if (!centsMode) {\n const intNum = parseInt(digits, 10)\n if (isNaN(intNum)) return digits\n return `${intNum}${decimalSep}00`\n }\n\n const padded = digits.padStart(3, '0')\n const integerPart = padded.slice(0, -2)\n const decimalPart = padded.slice(-2)\n const intNum = parseInt(integerPart, 10)\n\n const formattedInt = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(intNum)\n\n return `${formattedInt}${decimalSep}${decimalPart}`\n}\n\nexport const useCurrencyInput = (props: Record<string, unknown>) => {\n const centsMode = (props.centsMode as boolean) ?? true\n const [rawDigits, setRawDigits] = useState('')\n const [currencyCode, setCurrencyCode] = useState('BRL')\n const inputRef = useRef<HTMLInputElement | null>(null)\n\n const selectedCurrency =\n currencies.find((c) => c.code === currencyCode) ?? currencies[0]\n\n const displayValue = useMemo(\n () => formatAmount(rawDigits, currencyCode, centsMode),\n [rawDigits, currencyCode, centsMode],\n )\n\n const decimalSep = useMemo(() => {\n const locale = CURRENCY_LOCALE[currencyCode] ?? 'en-US'\n return locale.startsWith('pt') || locale.startsWith('de') || locale.startsWith('fr') ||\n locale.startsWith('es') || locale.startsWith('it')\n ? ','\n : '.'\n }, [currencyCode])\n\n const handleCurrencyChange = (code: string) => {\n setCurrencyCode(code)\n }\n\n const handleAmountChange = (e: ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value\n\n if (!centsMode) {\n const cleaned = inputValue.replace(/[.,]\\d*$/, '').replace(DIGITS_ONLY, '')\n setRawDigits(cleaned)\n return\n }\n\n setRawDigits(inputValue.replace(DIGITS_ONLY, ''))\n }\n\n useEffect(() => {\n if (!centsMode && inputRef.current) {\n const pos = rawDigits.length\n inputRef.current.setSelectionRange(pos, pos)\n }\n }, [displayValue, centsMode, rawDigits.length])\n\n return {\n displayValue,\n selectedCurrency,\n currencies,\n inputRef,\n placeholder: `0${decimalSep}00`,\n handleCurrencyChange,\n handleAmountChange,\n handleFocus: () => {},\n handleBlur: () => {},\n }\n}\n","export function useElementSize(_ref: React.RefObject<HTMLElement | null>) {\n return { width: 0 }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useElementSize } from '@/hooks/use-element-size'\nimport type { Country } from '@/hooks/use-phone-input'\nimport { usePhoneInput } from '@/hooks/use-phone-input'\n\nimport { Input } from '@/components/ui/input'\nimport { FlagIcon } from '@/components/icon/flag'\nimport { Select } from '@/components/ui/select'\n\nexport interface PhoneInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'onChange'\n> {\n value?: string\n onChange?: (value: string) => void\n onCountryChange?: (country: Country) => void\n disableCountrySelect?: boolean\n locale?: string\n align?: 'start' | 'center' | 'end'\n}\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n onCountryChange,\n locale,\n className,\n disabled,\n placeholder,\n disableCountrySelect = false,\n align = 'start',\n ...inputProps\n } = props\n\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const { width: triggerWidth } = useElementSize(triggerRef)\n\n const {\n formattedPhoneNumber,\n selectedCountry,\n countries,\n handleCountryChange,\n handlePhoneNumberChange,\n placeholder: dynamicPlaceholder,\n } = usePhoneInput({\n value,\n onChange,\n onCountryChange,\n locale,\n })\n\n return (\n <div className=\"flex w-full\">\n <Select\n value={selectedCountry.code}\n onValueChange={handleCountryChange}\n disabled={disabled || disableCountrySelect}\n >\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-r-none border-r-0 focus:z-10 bg-accent select-none',\n disableCountrySelect && '[&>svg]:hidden',\n className,\n )}\n >\n <Select.Value>\n <FlagIcon\n code={selectedCountry.code}\n className=\"size-5 rounded-sm mb-0.5 pointer-events-none select-none\"\n />\n\n <span className=\"text-sm font-mono\">\n {selectedCountry.dialCode}\n </span>\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-max\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {countries.map((country) => (\n <Select.Item key={country.code} value={country.code}>\n <div className=\"flex items-center gap-2\">\n <FlagIcon\n code={country.code}\n className=\"size-5 rounded-sm pointer-events-none select-none\"\n />\n\n <span className=\"text-sm font-mono text-muted-foreground\">\n {country.dialCode}\n </span>\n\n <span className=\"text-sm mb-0.5\">{country.name}</span>\n </div>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n <Input\n ref={ref}\n type=\"tel\"\n value={formattedPhoneNumber}\n onChange={handlePhoneNumberChange}\n placeholder={placeholder || dynamicPlaceholder}\n className={cn('rounded-l-none focus:z-10', className)}\n disabled={disabled}\n {...inputProps}\n />\n </div>\n )\n },\n)\n\nPhoneInput.displayName = 'PhoneInput'\n\nexport { PhoneInput }\nexport type { Country }\n","import { useState } from 'react'\nimport {\n getCountries,\n getCountryCallingCode,\n parsePhoneNumberFromString,\n} from 'libphonenumber-js'\n\nimport { applyPhoneMask, getDefaultMask, getDisplayMask, phoneMasks } from '@/components/ui/input-phone/masks'\n\nexport interface Country {\n code: string\n name: string\n flag: string\n dialCode: string\n}\n\nfunction getCountryName(code: string, locale: string): string {\n try {\n const names = new Intl.DisplayNames([locale], { type: 'region' })\n return names.of(code) ?? code\n } catch {\n return code\n }\n}\n\nconst SUPPORTED_FLAGS = new Set([\n 'AF', 'AL', 'DZ', 'AD', 'AO', 'AG', 'AR', 'AM', 'AU', 'AT', 'AZ',\n 'BS', 'BH', 'BD', 'BB', 'BY', 'BE', 'BZ', 'BJ', 'BT', 'BO', 'BA',\n 'BW', 'BR', 'BN', 'BG', 'BF', 'BI', 'KH', 'CM', 'CA', 'CV', 'CF',\n 'TD', 'CL', 'CN', 'CO', 'KM', 'CG', 'CD', 'CR', 'CI', 'HR', 'CU',\n 'CY', 'CZ', 'DK', 'DJ', 'DM', 'DO', 'TL', 'EC', 'EG', 'SV', 'GQ',\n 'ER', 'EE', 'SZ', 'ET', 'FJ', 'FI', 'FR', 'GA', 'GM', 'GE', 'DE',\n 'GH', 'GR', 'GD', 'GT', 'GN', 'GW', 'GY', 'HT', 'HN', 'HK', 'HU',\n 'IS', 'IN', 'ID', 'IR', 'IQ', 'IE', 'IL', 'IT', 'JM', 'JP', 'JO',\n 'KZ', 'KE', 'KI', 'KP', 'KR', 'KW', 'KG', 'LA', 'LV', 'LB', 'LS',\n 'LR', 'LY', 'LI', 'LT', 'LU', 'MO', 'MG', 'MW', 'MY', 'MV', 'ML',\n 'MT', 'MH', 'MR', 'MU', 'MX', 'FM', 'MD', 'MC', 'MN', 'ME', 'MA',\n 'MZ', 'MM', 'NA', 'NR', 'NP', 'NL', 'NZ', 'NI', 'NE', 'NG', 'NO',\n 'OM', 'PK', 'PW', 'PS', 'PA', 'PG', 'PY', 'PE', 'PH', 'PL', 'PT',\n 'QA', 'RO', 'RU', 'RW', 'KN', 'LC', 'VC', 'WS', 'SM', 'ST', 'SA',\n 'SN', 'RS', 'SC', 'SL', 'SG', 'SK', 'SI', 'SB', 'SO', 'ZA', 'SS',\n 'ES', 'LK', 'SD', 'SR', 'SE', 'CH', 'SY', 'TW', 'TJ', 'TZ', 'TH',\n 'TG', 'TO', 'TT', 'TN', 'TR', 'TM', 'TV', 'UG', 'UA', 'AE', 'GB',\n 'US', 'UY', 'UZ', 'VU', 'VA', 'VE', 'VN', 'YE', 'ZM', 'ZW',\n])\n\nconst countries: Country[] = getCountries()\n .filter((code) => SUPPORTED_FLAGS.has(code))\n .map((code) => ({\n code,\n name: getCountryName(code, 'en'),\n flag: code,\n dialCode: `+${getCountryCallingCode(code)}`,\n }))\n\nexport const usePhoneInput = (props: Record<string, unknown>) => {\n const initialValue = (props.value as string) ?? ''\n\n const parsed = parsePhoneNumberFromString(initialValue)\n const initialCountryCode = parsed?.country ?? 'BR'\n const initialNationalNumber = parsed?.nationalNumber ?? ''\n\n const [phone, setPhone] = useState(initialNationalNumber)\n const [countryCode, setCountryCode] = useState<string>(initialCountryCode)\n\n const selectedCountry =\n countries.find((c) => c.code === countryCode) ?? countries[0]\n\n const maskConfig = phoneMasks[countryCode] ?? getDefaultMask()\n\n const formattedPhoneNumber = applyPhoneMask(phone, getDisplayMask(countryCode, phone.length))\n\n const handleCountryChange = (code: string) => {\n setCountryCode(code)\n setPhone('')\n }\n\n const handlePhoneNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/\\D/g, '')\n setPhone(raw.slice(0, maskConfig.maxLength))\n }\n\n return {\n formattedPhoneNumber,\n selectedCountry,\n countries,\n handleCountryChange,\n handlePhoneNumberChange,\n placeholder: maskConfig.placeholder,\n }\n}\n\nexport { getCountryName }\n","export interface PhoneMask {\n mask: string | ((digitCount: number) => string)\n placeholder: string\n maxLength: number\n}\n\nexport const phoneMasks: Record<string, PhoneMask> = {\n BR: {\n mask: (digitCount: number) => {\n return digitCount <= 10 ? '(##) ####-####' : '(##) #####-####'\n },\n placeholder: '(11) 98765-4321',\n maxLength: 11,\n },\n\n US: {\n mask: '(###) ###-####',\n placeholder: '(555) 123-4567',\n maxLength: 10,\n },\n CA: {\n mask: '(###) ###-####',\n placeholder: '(416) 123-4567',\n maxLength: 10,\n },\n\n ES: {\n mask: '### ## ## ##',\n placeholder: '612 34 56 78',\n maxLength: 9,\n },\n\n PT: {\n mask: '### ### ###',\n placeholder: '912 345 678',\n maxLength: 9,\n },\n\n AR: {\n mask: '## ####-####',\n placeholder: '11 1234-5678',\n maxLength: 10,\n },\n\n CL: {\n mask: '# #### ####',\n placeholder: '9 1234 5678',\n maxLength: 9,\n },\n\n MX: {\n mask: '### ### ####',\n placeholder: '555 123 4567',\n maxLength: 10,\n },\n\n CO: {\n mask: '### ### ####',\n placeholder: '300 123 4567',\n maxLength: 10,\n },\n\n PE: {\n mask: '### ### ###',\n placeholder: '987 654 321',\n maxLength: 9,\n },\n}\n\nexport const applyPhoneMask = (value: string, mask: string): string => {\n if (!value || !mask) return value\n\n const numbers = value.replace(/\\D/g, '')\n\n let maskedValue = ''\n let numberIndex = 0\n\n for (let i = 0; i < mask.length && numberIndex < numbers.length; i++) {\n if (mask[i] === '#') {\n maskedValue += numbers[numberIndex]\n numberIndex++\n } else {\n maskedValue += mask[i]\n }\n }\n\n return maskedValue\n}\n\nexport const getDisplayMask = (countryCode: string, digitCount: number): string => {\n const mask = phoneMasks[countryCode]?.mask ?? getDefaultMask().mask\n return typeof mask === 'function' ? mask(digitCount) : mask\n}\n\nexport const removePhoneMask = (value: string | null | undefined): string => {\n if (!value || typeof value !== 'string') return ''\n return value.replace(/\\D/g, '')\n}\n\nexport const isPhoneComplete = (\n value: string,\n countryCode: string,\n): boolean => {\n const mask = phoneMasks[countryCode]\n if (!mask) return value.length >= 7\n\n const numbersOnly = removePhoneMask(value)\n return numbersOnly.length >= mask.maxLength\n}\n\nexport const getDefaultMask = (): PhoneMask => ({\n mask: '###############',\n placeholder: '123456789',\n maxLength: 15,\n})\n","import type { IconProps } from 'nucleo-flags'\nimport * as nucleoFlags from 'nucleo-flags'\n\n\nimport { cn } from '@/lib/cn'\n\nimport { buildFlagRegistry } from './flag-registry'\n\nconst FLAGS = buildFlagRegistry(nucleoFlags as Record<string, unknown>)\n\nexport type FlagCountryCode = keyof typeof FLAGS\n\nexport function toFlagCountryCode(\n countryCode: string | null | undefined,\n): FlagCountryCode | null {\n const normalized = countryCode?.toUpperCase()\n\n return normalized && normalized in FLAGS\n ? (normalized as FlagCountryCode)\n : null\n}\n\nexport function getFlagIcon(countryCode: string | null | undefined) {\n const flag = toFlagCountryCode(countryCode)\n return flag ? FLAGS[flag] : null\n}\n\nexport type FlagIconProps = Omit<IconProps, 'children'> & {\n code: string | null | undefined\n}\n\nexport function FlagIcon({ code, className, ...props }: FlagIconProps) {\n const Icon = getFlagIcon(code)\n if (!Icon) return null\n\n return (\n <Icon\n aria-hidden={props.title ? undefined : true}\n focusable=\"false\"\n className={cn('shrink-0 select-none', className)}\n {...props}\n />\n )\n}\n","import type { IconProps } from 'nucleo-flags'\n\nimport type { ComponentType } from 'react'\n\ntype NucleoFlagsModule = Record<string, unknown>\n\nconst NAME_TO_ISO2: Record<string, string> = {\n Afghanistan: 'AF',\n Albania: 'AL',\n Algeria: 'DZ',\n Andorra: 'AD',\n Angola: 'AO',\n AntiguaBarbuda: 'AG',\n Argentina: 'AR',\n Armenia: 'AM',\n Australia: 'AU',\n Austria: 'AT',\n Azerbaijan: 'AZ',\n Bahamas: 'BS',\n Bahrain: 'BH',\n Bangladesh: 'BD',\n Barbados: 'BB',\n Belarus: 'BY',\n Belgium: 'BE',\n Belize: 'BZ',\n Benin: 'BJ',\n Bhutan: 'BT',\n Bolivia: 'BO',\n BosniaHerzegovina: 'BA',\n Botswana: 'BW',\n Brazil: 'BR',\n Brunei: 'BN',\n Bulgaria: 'BG',\n BurkinaFaso: 'BF',\n Burundi: 'BI',\n Cambodia: 'KH',\n Cameroon: 'CM',\n Canada: 'CA',\n CapeVerde: 'CV',\n CentralAfricanRepublic: 'CF',\n Chad: 'TD',\n Chile: 'CL',\n China: 'CN',\n Colombia: 'CO',\n Comoros: 'KM',\n RepublicCongo: 'CG',\n DemocraticRepublicCongo: 'CD',\n CostaRica: 'CR',\n IvoryCoast: 'CI',\n Croatia: 'HR',\n Cuba: 'CU',\n Cyprus: 'CY',\n Czechia: 'CZ',\n Denmark: 'DK',\n Djibouti: 'DJ',\n Dominica: 'DM',\n DominicanRepublic: 'DO',\n EastTimor: 'TL',\n Ecuador: 'EC',\n Egypt: 'EG',\n ElSalvador: 'SV',\n EquatorialGuinea: 'GQ',\n Eritrea: 'ER',\n Estonia: 'EE',\n Eswatini: 'SZ',\n Ethiopia: 'ET',\n Fiji: 'FJ',\n Finland: 'FI',\n France: 'FR',\n Gabon: 'GA',\n Gambia: 'GM',\n Georgia: 'GE',\n Germany: 'DE',\n Ghana: 'GH',\n Greece: 'GR',\n Grenada: 'GD',\n Guatemala: 'GT',\n Guinea: 'GN',\n GuineaBissau: 'GW',\n Guyana: 'GY',\n Haiti: 'HT',\n Honduras: 'HN',\n HongKong: 'HK',\n Hungary: 'HU',\n Iceland: 'IS',\n India: 'IN',\n Indonesia: 'ID',\n Iran: 'IR',\n Iraq: 'IQ',\n Ireland: 'IE',\n Israel: 'IL',\n Italy: 'IT',\n Jamaica: 'JM',\n Japan: 'JP',\n Jordan: 'JO',\n Kazakhstan: 'KZ',\n Kenya: 'KE',\n Kiribati: 'KI',\n NorthKorea: 'KP',\n SouthKorea: 'KR',\n Kuwait: 'KW',\n Kyrgyzstan: 'KG',\n Laos: 'LA',\n Latvia: 'LV',\n Lebanon: 'LB',\n Lesotho: 'LS',\n Liberia: 'LR',\n Libya: 'LY',\n Liechtenstein: 'LI',\n Lithuania: 'LT',\n Luxembourg: 'LU',\n Macau: 'MO',\n Madagascar: 'MG',\n Malawi: 'MW',\n Malaysia: 'MY',\n Maldives: 'MV',\n Mali: 'ML',\n Malta: 'MT',\n MarshallIslands: 'MH',\n Mauritania: 'MR',\n Mauritius: 'MU',\n Mexico: 'MX',\n Micronesia: 'FM',\n Moldova: 'MD',\n Monaco: 'MC',\n Mongolia: 'MN',\n Montenegro: 'ME',\n Morocco: 'MA',\n Mozanbique: 'MZ',\n Myanmar: 'MM',\n Namibia: 'NA',\n Nauru: 'NR',\n Nepal: 'NP',\n Netherlands: 'NL',\n NewZealand: 'NZ',\n Nicaragua: 'NI',\n Niger: 'NE',\n Nigeria: 'NG',\n Norway: 'NO',\n Oman: 'OM',\n Pakistan: 'PK',\n Palau: 'PW',\n Palestine: 'PS',\n Panama: 'PA',\n PapuaNewGuinea: 'PG',\n Paraguay: 'PY',\n Peru: 'PE',\n Philippines: 'PH',\n Poland: 'PL',\n Portugal: 'PT',\n Qatar: 'QA',\n Romania: 'RO',\n Russia: 'RU',\n Rwanda: 'RW',\n SaintKittsNevis: 'KN',\n SaintLucia: 'LC',\n SaintVincentGrenadines: 'VC',\n Samoa: 'WS',\n SanMarino: 'SM',\n SaoTomePrincipe: 'ST',\n SaudiArabia: 'SA',\n Senegal: 'SN',\n Serbia: 'RS',\n Seychelles: 'SC',\n SierraLeone: 'SL',\n Singapore: 'SG',\n Slovakia: 'SK',\n Slovenia: 'SI',\n SolomonIslands: 'SB',\n Somalia: 'SO',\n SouthAfrica: 'ZA',\n SouthSudan: 'SS',\n Spain: 'ES',\n SriLanka: 'LK',\n Sudan: 'SD',\n Suriname: 'SR',\n Sweden: 'SE',\n Switzerland: 'CH',\n Syria: 'SY',\n Taiwan: 'TW',\n Tajikistan: 'TJ',\n Tanzania: 'TZ',\n Thailand: 'TH',\n Togo: 'TG',\n Tonga: 'TO',\n TrinidadTobago: 'TT',\n Tunisia: 'TN',\n Turkey: 'TR',\n Turkmenistan: 'TM',\n Tuvalu: 'TV',\n Uganda: 'UG',\n Ukraine: 'UA',\n UnitedArabEmirates: 'AE',\n UnitedKingdom: 'GB',\n UnitedStates: 'US',\n Uruguay: 'UY',\n Uzbekistan: 'UZ',\n Vanuatu: 'VU',\n VaticanCity: 'VA',\n Venezuela: 'VE',\n Vietnam: 'VN',\n Yemen: 'YE',\n Zambia: 'ZM',\n Zimbabwe: 'ZW',\n}\n\nexport function buildFlagRegistry(\n nucleoFlagsModule: NucleoFlagsModule,\n): Record<string, ComponentType<IconProps>> {\n const registry: Record<string, ComponentType<IconProps>> = {}\n\n for (const exportName of Object.keys(nucleoFlagsModule)) {\n if (exportName === 'Icon' || !exportName.startsWith('Icon')) continue\n\n const name = exportName.slice(4)\n const component = nucleoFlagsModule[exportName]\n\n if (typeof component !== 'function') continue\n\n const iso2 = NAME_TO_ISO2[name]\n if (iso2) {\n registry[iso2] = component as ComponentType<IconProps>\n }\n }\n\n return registry\n}\n\nexport type NucleoFlagExportToName<\n T extends string,\n> = T extends `Icon${infer Name}` ? Name : never\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { Icon } from '@/components/icon';\nimport type { FillIconName, CustomIconName } from '@/components/icon';\nimport { useElementSize } from '@/hooks/use-element-size';\nimport { Select } from '@/components/ui/select';\n\nimport { Input } from '../input';\n\nexport type InputTimeType = 'date' | 'time' | 'datetime-local';\n\nconst INPUT_TIME_PLACEHOLDERS: Record<InputTimeType, string> = {\n date: 'YYYY-MM-DD',\n time: 'HH:MM',\n 'datetime-local': 'YYYY-MM-DD HH:MM',\n};\n\nconst INPUT_TIME_ICONS: Record<InputTimeType, FillIconName | CustomIconName> = {\n date: 'Calendar',\n time: 'Clock',\n 'datetime-local': 'CalendarClock',\n};\n\nconst INPUT_TIME_LABELS: Record<InputTimeType, string> = {\n date: 'Date',\n time: 'Time',\n 'datetime-local': 'Date & Time',\n};\n\nexport interface InputTimeProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n type?: InputTimeType;\n defaultType?: InputTimeType;\n onTypeChange?: (type: InputTimeType) => void;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n align?: 'start' | 'center' | 'end';\n}\n\nfunction InputTime({\n type: typeProp,\n defaultType = 'date',\n onTypeChange,\n className,\n placeholder,\n align = 'start',\n ...props\n}: InputTimeProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const { width: triggerWidth } = useElementSize(triggerRef);\n\n const [hasValue, setHasValue] = React.useState(\n !!(props.value ?? props.defaultValue),\n );\n\n const [internalType, setInternalType] = React.useState(defaultType);\n const type = typeProp ?? internalType;\n\n const iconName = INPUT_TIME_ICONS[type] ?? INPUT_TIME_ICONS.date;\n const resolvedPlaceholder =\n placeholder ?? INPUT_TIME_PLACEHOLDERS[type] ?? '';\n\n const handleTypeChange = (newType: string) => {\n setInternalType(newType as InputTimeType);\n onTypeChange?.(newType as InputTimeType);\n };\n\n const handleInputClick = () => {\n inputRef.current?.showPicker?.();\n };\n\n return (\n <div className=\"flex w-full\">\n <Input\n ref={inputRef}\n type={type}\n placeholder={resolvedPlaceholder}\n onClick={handleInputClick}\n className={cn(\n 'rounded-r-none focus:z-10 [-moz-appearance:textfield] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-inner-spin-button]:hidden [&::-webkit-outer-spin-button]:hidden pr-3',\n !hasValue && 'text-sm text-muted-foreground/50',\n className,\n )}\n onChange={(e) => {\n setHasValue(e.target.value !== '');\n props.onChange?.(e);\n }}\n {...props}\n />\n\n <div className=\"relative shrink-0\">\n <Select value={type} onValueChange={handleTypeChange} disabled={typeProp !== undefined}>\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-l-none border-l-0 focus:z-10 bg-accent',\n typeProp !== undefined && '[&>svg]:hidden',\n )}\n >\n <Select.Value>\n <Icon variant=\"fill\" name={iconName} className=\"size-4\" />\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-max\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {(Object.keys(INPUT_TIME_ICONS) as InputTimeType[]).map((t) => (\n <Select.Item key={t} value={t}>\n <div className=\"flex items-center gap-2\">\n <Icon variant=\"fill\" name={INPUT_TIME_ICONS[t]} className=\"size-4\" />\n <span className=\"text-sm\">{INPUT_TIME_LABELS[t]}</span>\n </div>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n {typeProp !== undefined && (\n <div\n className=\"absolute inset-0 cursor-pointer\"\n onClick={handleInputClick}\n />\n )}\n </div>\n </div>\n );\n}\n\nInputTime.displayName = 'InputTime';\n\nexport { InputTime };\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { Select } from '@/components/ui/select';\n\nexport interface InputTimePickerProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** The currently selected date. When `undefined`, both selects start empty. */\n date: Date | undefined;\n /**\n * Callback invoked with a new `Date` whenever the hour or minute changes.\n * Only the respective unit is mutated; seconds and milliseconds are preserved.\n */\n setDate: (date: Date | undefined) => void;\n /** When `true`, both hour and minute Selects are disabled. */\n disabled?: boolean;\n /** Placeholder shown in the hour Select when no value is picked. Defaults to `\"HH\"`. */\n hourPlaceholder?: string;\n /** Placeholder shown in the minute Select when no value is picked. Defaults to `\"MM\"`. */\n minutePlaceholder?: string;\n /** `aria-label` for the hour Select trigger. Defaults to `\"Hours\"`. */\n hourAriaLabel?: string;\n /** `aria-label` for the minute Select trigger. Defaults to `\"Minutes\"`. */\n minuteAriaLabel?: string;\n}\n\n/**\n * Controlled hour:minute picker composed of two {@link Select} dropdowns.\n *\n * Displays a single-row selector with hours (00–23) on the left,\n * a colon separator, and minutes (00–59) on the right.\n *\n * When {@link InputTimePickerProps.date} is `undefined`, both selects start empty with\n * English placeholders (`HH` / `MM`). Picking a value creates or mutates a `Date`\n * and passes it to {@link InputTimePickerProps.setDate}.\n *\n * @example\n * const [date, setDate] = useState<Date>();\n * <InputTimePicker date={date} setDate={setDate} />\n *\n * @example\n * <InputTimePicker\n * date={date}\n * setDate={setDate}\n * hourPlaceholder=\"Hora\"\n * minutePlaceholder=\"Minuto\"\n * hourAriaLabel=\"Horas\"\n * minuteAriaLabel=\"Minutos\"\n * />\n */\nconst InputTimePicker = React.forwardRef<HTMLDivElement, InputTimePickerProps>(\n (\n {\n date,\n setDate,\n disabled,\n className,\n hourPlaceholder = 'HH',\n minutePlaceholder = 'MM',\n hourAriaLabel = 'Hours',\n minuteAriaLabel = 'Minutes',\n ...props\n },\n ref,\n ) => {\n const hours = React.useMemo(() => {\n return Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n }, []);\n\n const minutes = React.useMemo(() => {\n return Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));\n }, []);\n\n const handleHourChange = (hour: string) => {\n const newDate = date ? new Date(date.getTime()) : new Date();\n newDate.setHours(parseInt(hour, 10));\n setDate(newDate);\n };\n\n const handleMinuteChange = (minute: string) => {\n const newDate = date ? new Date(date.getTime()) : new Date();\n newDate.setMinutes(parseInt(minute, 10));\n setDate(newDate);\n };\n\n const selectedHour = date ? String(date.getHours()).padStart(2, '0') : '';\n const selectedMinute = date\n ? String(date.getMinutes()).padStart(2, '0')\n : '';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex h-12 w-full items-center justify-between rounded-lg bg-input text-base ring-offset-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 md:text-sm min-w-24',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className,\n )}\n {...props}\n >\n <Select\n onValueChange={handleHourChange}\n value={selectedHour}\n disabled={disabled}\n >\n <Select.Trigger\n removeIcon\n aria-label={hourAriaLabel}\n className=\"h-auto w-fit border-none bg-transparent focus:ring-0 p-3\"\n >\n <Select.Value placeholder={hourPlaceholder} />\n </Select.Trigger>\n <Select.Content>\n {hours.map((hour) => (\n <Select.Item key={hour} value={hour}>\n {hour}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n <span className=\"w-full text-center text-muted-foreground\">:</span>\n\n <Select\n onValueChange={handleMinuteChange}\n value={selectedMinute}\n disabled={disabled}\n >\n <Select.Trigger\n removeIcon\n className=\"h-auto w-fit border-none bg-transparent focus:ring-0 p-3\"\n aria-label={minuteAriaLabel}\n >\n <Select.Value placeholder={minutePlaceholder} />\n </Select.Trigger>\n <Select.Content>\n {minutes.map((minute) => (\n <Select.Item key={minute} value={minute}>\n {minute}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n );\n },\n);\n\nInputTimePicker.displayName = 'InputTimePicker';\n\nexport { InputTimePicker };\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { useElementSize } from '@/hooks/use-element-size';\n\nimport { Input } from '@/components/ui/input';\nimport { Select } from '@/components/ui/select';\n\nexport type TimeUnit =\n | 'seconds'\n | 'minutes'\n | 'hours'\n | 'days'\n | 'weeks'\n | 'months'\n | 'years';\n\nexport interface TimeUnitLabel {\n /** Abbreviated label shown in the Select trigger. */\n short: string;\n /** Full label shown in the Select dropdown. */\n label: string;\n}\n\nexport interface TimeUnitOption {\n /** Unit identifier used in the Select value. */\n value: TimeUnit;\n /** Number of minutes in one unit of this type. */\n toMinutes: number;\n}\n\n/**\n * All supported time units with their minute-conversion factors.\n *\n * Months are approximated as 30 days and years as 365 days.\n */\nconst TIME_UNITS: TimeUnitOption[] = [\n { value: 'seconds', toMinutes: 1 / 60 },\n { value: 'minutes', toMinutes: 1 },\n { value: 'hours', toMinutes: 60 },\n { value: 'days', toMinutes: 60 * 24 },\n { value: 'weeks', toMinutes: 60 * 24 * 7 },\n { value: 'months', toMinutes: 60 * 24 * 30 },\n { value: 'years', toMinutes: 60 * 24 * 365 },\n];\n\n/** English default labels for each time unit. */\nconst DEFAULT_UNIT_LABELS: Record<TimeUnit, TimeUnitLabel> = {\n seconds: { short: 's', label: 'Seconds' },\n minutes: { short: 'm', label: 'Minutes' },\n hours: { short: 'h', label: 'Hours' },\n days: { short: 'd', label: 'Days' },\n weeks: { short: 'w', label: 'Weeks' },\n months: { short: 'mo', label: 'Months' },\n years: { short: 'y', label: 'Years' },\n};\n\nexport interface InputTimeUnitProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /** Current value in **minutes**. Drives the input display via unit conversion. */\n value?: number;\n /** Unit selected by default when the user has not manually picked one. */\n defaultUnit?: TimeUnit;\n /** When `true`, the unit Select is disabled — only the numeric input is editable. */\n disableUnitSelect?: boolean;\n /** Restrict which units appear in the dropdown. An empty or omitted array shows all units. */\n allowedUnits?: TimeUnit[];\n /**\n * Called with the total value in **minutes**.\n * Receives `undefined` when the input is empty or invalid.\n */\n onChange?: (valueInMinutes: number | undefined) => void;\n /** Called whenever the user picks a different unit. */\n onUnitChange?: (unit: TimeUnit) => void;\n /** Alignment of the unit dropdown relative to the trigger. */\n align?: 'start' | 'center' | 'end';\n /** Extra classes for the outermost wrapper div. */\n containerClassName?: string;\n /**\n * Override labels for specific time units. Merged with English defaults.\n * Only the units you provide will be overridden; the rest keep their defaults.\n *\n * @example\n * labels={{ hours: { short: 'hrs', label: 'Horas' } }}\n */\n labels?: Partial<Record<TimeUnit, Partial<TimeUnitLabel>>>;\n}\n\n/**\n * Numeric input paired with a time-unit Select.\n *\n * Accepts and emits values in **minutes**, converting the displayed number\n * based on the selected unit (seconds, minutes, hours, days, weeks, months, years).\n *\n * On the left, an {@link Input} for the numeric quantity (digits and decimal dots only).\n * On the right, a {@link Select} for the time unit, showing a short abbreviation\n * with English defaults (`s`, `m`, `h`, `d`, `w`, `mo`, `y`).\n *\n * When the user picks a different unit, the displayed value is re-computed\n * so the underlying minute value stays constant — only the representation changes.\n *\n * @example\n * // Basic usage: pick a duration\n * <InputTimeUnit\n * value={5}\n * onChange={(minutes) => console.log(minutes)}\n * />\n *\n * @example\n * // Restrict to hours and days only, with custom labels\n * <InputTimeUnit\n * allowedUnits={['hours', 'days']}\n * defaultUnit=\"hours\"\n * labels={{ hours: { short: 'hrs' }, days: { short: 'dias' } }}\n * />\n */\nconst InputTimeUnit = React.forwardRef<HTMLInputElement, InputTimeUnitProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n onUnitChange,\n className,\n containerClassName,\n disabled,\n disableUnitSelect = false,\n allowedUnits,\n placeholder,\n defaultUnit = 'minutes',\n align = 'start',\n labels,\n ...inputProps\n } = props;\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const { width: triggerWidth } = useElementSize(triggerRef);\n\n const [userPickedUnit, setUserPickedUnit] = React.useState(false);\n const [selectedUnit, setSelectedUnit] =\n React.useState<TimeUnit>(defaultUnit);\n\n const [inputValue, setInputValue] = React.useState<string>('');\n\n const availableUnits = React.useMemo(() => {\n if (!allowedUnits || allowedUnits.length === 0) {\n return TIME_UNITS;\n }\n\n return TIME_UNITS.filter((unit) => allowedUnits.includes(unit.value));\n }, [allowedUnits]);\n\n /** Resolved labels, merging user overrides with English defaults. */\n const resolvedLabels = React.useMemo(() => {\n const merged: Record<TimeUnit, TimeUnitLabel> = { ...DEFAULT_UNIT_LABELS };\n\n if (labels) {\n for (const unit of Object.keys(labels) as TimeUnit[]) {\n merged[unit] = {\n ...merged[unit],\n ...labels[unit],\n };\n }\n }\n\n return merged;\n }, [labels]);\n\n /** Resolves the selected unit to its {@link TimeUnitOption}, falling back to the first available. */\n const selectedUnitOption = React.useMemo(\n () =>\n availableUnits.find((u) => u.value === selectedUnit) ??\n availableUnits[0],\n [selectedUnit, availableUnits],\n );\n\n /**\n * Sanitizes the raw input (only digits, dots, and commas → dot),\n * then converts to minutes via the currently selected unit\n * and calls {@link InputTimeUnitProps.onChange}.\n */\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const rawValue = e.target.value\n .replace(/[^0-9.,]/g, '')\n .replace(',', '.');\n\n setInputValue(rawValue);\n\n if (rawValue === '' || rawValue === '.') {\n onChange?.(undefined);\n return;\n }\n\n const numericValue = parseFloat(rawValue);\n\n if (!isNaN(numericValue)) {\n const valueInMinutes = numericValue * selectedUnitOption.toMinutes;\n onChange?.(valueInMinutes);\n }\n };\n\n /**\n * Switches the selected unit, marks it as user-picked (to ignore future\n * `defaultUnit` changes), and re-computes the displayed value from the\n * current minute value so the actual amount stays the same.\n */\n const handleUnitChange = (newUnit: TimeUnit) => {\n setUserPickedUnit(true);\n setSelectedUnit(newUnit);\n\n onUnitChange?.(newUnit);\n\n if (value !== undefined && value !== null) {\n const newUnitOption = availableUnits.find((u) => u.value === newUnit);\n\n if (newUnitOption) {\n const displayValue = value / newUnitOption.toMinutes;\n\n setInputValue(\n Number.isInteger(displayValue)\n ? displayValue.toString()\n : displayValue.toFixed(2).replace(/\\.?0+$/, ''),\n );\n }\n }\n };\n\n /**\n * Syncs the selected unit to `defaultUnit` as long as the user\n * hasn't manually picked one.\n */\n React.useLayoutEffect(() => {\n if (!userPickedUnit) {\n setSelectedUnit(defaultUnit);\n }\n }, [defaultUnit, userPickedUnit]);\n\n /**\n * Converts the controlled `value` (in minutes) back to a display string\n * using the current unit's {@link TimeUnitOption.toMinutes} factor.\n */\n React.useEffect(() => {\n if (value === undefined || value === null) {\n setInputValue('');\n return;\n }\n\n const displayValue = value / selectedUnitOption.toMinutes;\n\n setInputValue(\n Number.isInteger(displayValue)\n ? displayValue.toString()\n : displayValue.toFixed(2).replace(/\\.?0+$/, ''),\n );\n }, [value, selectedUnitOption.toMinutes]);\n\n return (\n <div className={cn('flex w-full', containerClassName)}>\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n disabled={disabled}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n className={cn('rounded-r-none focus:z-10', className)}\n {...inputProps}\n />\n\n <Select\n value={selectedUnit}\n onValueChange={(value) => handleUnitChange(value as TimeUnit)}\n disabled={disabled || disableUnitSelect}\n >\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-l-none border-l-0 focus:z-10 bg-accent',\n disableUnitSelect && '[&_svg]:hidden',\n )}\n >\n <Select.Value>\n <span className=\"text-sm font-mono\">\n {resolvedLabels[selectedUnitOption.value].short}\n </span>\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-42\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {availableUnits.map((unit) => (\n <Select.Item key={unit.value} value={unit.value}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-mono\">\n {resolvedLabels[unit.value].short}\n </span>\n <span className=\"opacity-50\">\n {resolvedLabels[unit.value].label}\n </span>\n </div>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n );\n },\n);\n\nInputTimeUnit.displayName = 'InputTimeUnit';\n\nexport { TIME_UNITS, InputTimeUnit };\n","'use client'\n\nimport { Fragment, type ReactNode } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport type { IconType } from '@/components/icon'\nimport { Icon } from '@/components/icon'\n\nfunction isMac(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /Mac|iPhone|iPad/i.test(navigator.userAgent)\n )\n}\n\nexport type KbdKey =\n | 'ArrowUp'\n | 'ArrowDown'\n | 'ArrowLeft'\n | 'ArrowRight'\n | 'Enter'\n | 'Escape'\n | 'Tab'\n | 'Backspace'\n | 'Delete'\n | 'Space'\n | 'Mod'\n | 'Command'\n | 'Meta'\n | 'Super'\n | 'Control'\n | 'Ctrl'\n | 'Shift'\n | 'Alt'\n | 'Option'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | (string & NonNullable<unknown>)\n\nconst arrowIconMap: Record<string, IconType> = {\n arrowup: 'ArrowUp',\n arrowdown: 'ArrowDown',\n arrowleft: 'ArrowLeft',\n arrowright: 'ArrowRight',\n}\n\nconst modifierMacMap: Record<string, string> = {\n mod: '⌘',\n command: '⌘',\n meta: '⌘',\n super: '⌘',\n control: '⌃',\n ctrl: '⌃',\n shift: '⇧',\n alt: '⌥',\n option: '⌥',\n}\n\nconst modifierWinMap: Record<string, string> = {\n mod: 'Ctrl',\n command: 'Ctrl',\n meta: 'Meta',\n super: 'Win',\n control: 'Ctrl',\n ctrl: 'Ctrl',\n shift: 'Shift',\n alt: 'Alt',\n option: 'Alt',\n}\n\nfunction resolveKeyText(key: string): string | null {\n const lower = key.toLowerCase()\n\n if (lower in arrowIconMap) return null\n\n const modifierMap = isMac() ? modifierMacMap : modifierWinMap\n if (lower in modifierMap) return modifierMap[lower]\n\n if (lower === 'escape') return 'Esc'\n if (lower === 'backspace') return 'Back'\n if (lower === 'delete') return 'Del'\n if (lower === 'space') return 'Space'\n if (lower === 'tab') return 'Tab'\n if (lower === 'enter') return 'Enter'\n if (/^f\\d{1,2}$/.test(lower)) return key\n\n return key\n}\n\nfunction resolveKeyIcon(key: string): IconType | null {\n const lower = key.toLowerCase()\n return arrowIconMap[lower] ?? null\n}\n\ntype KbdInput = KbdKey | KbdInput[]\n\nfunction normalize(input: KbdKey | KbdKey[] | KbdKey[][]): KbdInput {\n if (typeof input === 'string') return input\n if (input.length === 0) return []\n if (typeof input[0] === 'string') return input as KbdKey[]\n return input as KbdInput[]\n}\n\nfunction SingleKey({ kbdKey }: { kbdKey: KbdKey }) {\n const icon = resolveKeyIcon(kbdKey)\n const text = resolveKeyText(kbdKey)\n return (\n <kbd className=\"inline-flex items-center justify-center gap-1 rounded-md border bg-muted/60 px-1.5 py-0.5 font-mono text-[0.8em] text-muted-foreground shadow-[0_1px_0_0_var(--color-border)]\">\n {icon ? <Icon name={icon} className=\"size-3\" /> : (text ?? kbdKey)}\n </kbd>\n )\n}\n\nfunction renderKeys(\n keys: KbdInput,\n separator: ReactNode,\n thenSeparator: ReactNode,\n): ReactNode {\n if (typeof keys === 'string') {\n return <SingleKey kbdKey={keys} />\n }\n\n if (keys.length === 0) return null\n\n const sep = typeof keys[0] === 'string' ? separator : thenSeparator\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n {keys.map((k, i) => (\n <Fragment key={i}>\n {i > 0 ? sep : null}\n {renderKeys(k, separator, thenSeparator)}\n </Fragment>\n ))}\n </span>\n )\n}\n\nexport type KbdProps = {\n keys: KbdKey | KbdKey[] | KbdKey[][]\n className?: string\n separator?: ReactNode\n thenSeparator?: ReactNode\n}\n\nexport function Kbd({\n keys,\n className,\n separator = '+',\n thenSeparator = 'then',\n}: KbdProps) {\n const groups = normalize(keys)\n\n if (Array.isArray(groups) && groups.length === 0) return null\n\n return (\n <span\n className={cn(\n 'pointer-events-none shrink-0 select-none inline-flex items-center gap-1',\n className,\n )}\n >\n {renderKeys(groups, separator, thenSeparator)}\n </span>\n )\n}\n","import React from 'react'\n\nexport const LanguageSwitch: React.FC = () => null\n","'use client';\nimport type { HTMLAttributes } from 'react';\n\nimport type { MarqueeProps as FastMarqueeProps } from 'react-fast-marquee';\nimport FastMarquee from 'react-fast-marquee';\n\nimport { cn } from '@/lib/cn';\n\nexport type MarqueeProps = HTMLAttributes<HTMLDivElement>;\nexport const Marquee = ({ className, ...props }: MarqueeProps) => (\n <div\n className={cn('relative w-full overflow-hidden', className)}\n {...props}\n />\n);\n\nexport type MarqueeContentProps = FastMarqueeProps;\nexport const MarqueeContent = ({\n loop = 0,\n autoFill = true,\n pauseOnHover = true,\n ...props\n}: MarqueeContentProps) => (\n <FastMarquee\n autoFill={autoFill}\n loop={loop}\n pauseOnHover={pauseOnHover}\n {...props}\n />\n);\n\nexport type MarqueeFadeProps = HTMLAttributes<HTMLDivElement> & {\n side: 'left' | 'right';\n};\nexport const MarqueeFade = ({\n className,\n side,\n ...props\n}: MarqueeFadeProps) => (\n <div\n className={cn(\n 'absolute top-0 bottom-0 z-10 h-full w-24 from-background to-transparent',\n side === 'left' ? 'left-0 bg-linear-to-r' : 'right-0 bg-linear-to-l',\n className,\n )}\n {...props}\n />\n);\n\nexport type MarqueeItemProps = HTMLAttributes<\n HTMLDivElement | HTMLAnchorElement\n> & {\n href?: string;\n};\n\nexport const MarqueeItem = ({\n href,\n className,\n ...props\n}: MarqueeItemProps) => {\n const commonClassName = cn('mx-2 shrink-0 object-contain', className);\n\n return href ? (\n <a\n href={href}\n className={commonClassName}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n />\n ) : (\n <div\n className={commonClassName}\n {...(props as React.HTMLAttributes<HTMLDivElement>)}\n />\n );\n};\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { Icon } from '@/components/icon'\n\nexport function NetworkStatus() {\n\n const [isOnline, setIsOnline] = useState(true)\n const [showBack, setShowBack] = useState(false)\n\n useEffect(() => {\n setIsOnline(navigator.onLine)\n\n const handleOffline = () => {\n setIsOnline(false)\n setShowBack(false)\n }\n\n const handleOnline = () => {\n setIsOnline(true)\n setShowBack(true)\n\n setTimeout(() => {\n setShowBack(false)\n }, 3000)\n }\n\n window.addEventListener('offline', handleOffline)\n window.addEventListener('online', handleOnline)\n\n return () => {\n window.removeEventListener('offline', handleOffline)\n window.removeEventListener('online', handleOnline)\n }\n }, [])\n\n const visible = !isOnline || showBack\n\n return (\n <AnimatePresence>\n {visible && (\n <motion.div\n key=\"network-status\"\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className=\"fixed top-0 left-0 right-0 z-50 flex justify-center pointer-events-none\"\n >\n <div\n className={\n isOnline\n ? 'flex items-center gap-2 px-4 py-2 text-xs font-medium rounded-b-xl bg-success/15 text-success border border-success/20 border-t-0 shadow-sm'\n : 'flex items-center gap-2 px-4 py-2 text-xs font-medium rounded-b-xl bg-destructive/10 text-destructive border border-destructive/20 border-t-0 shadow-sm'\n }\n >\n <Icon\n name={isOnline ? 'Wifi' : 'WifiOff'}\n className=\"size-3.5 shrink-0\"\n />\n <span>{isOnline ? 'back' : 'offline'}</span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { Popover as PopoverPrimitive } from '@base-ui/react/popover'\n\nimport { cn } from '@/lib/cn'\n\nconst PopoverAnchorContext = React.createContext<{\n anchor: HTMLElement | null\n setAnchor: (el: HTMLElement | null) => void\n} | null>(null)\n\nfunction PopoverRoot({ children, ...props }: PopoverPrimitive.Root.Props) {\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null)\n\n return (\n <PopoverAnchorContext.Provider value={{ anchor, setAnchor }}>\n <PopoverPrimitive.Root data-slot=\"popover\" {...props}>\n {children}\n </PopoverPrimitive.Root>\n </PopoverAnchorContext.Provider>\n )\n}\n\nfunction PopoverTrigger({\n asChild,\n children,\n ...props\n}: PopoverPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n if (asChild && React.isValidElement(children)) {\n return (\n <PopoverPrimitive.Trigger\n data-slot=\"popover-trigger\"\n nativeButton={\n typeof children.type === 'string' ? children.type === 'button' : true\n }\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <PopoverPrimitive.Trigger\n data-slot=\"popover-trigger\"\n className=\"cursor-pointer\"\n {...props}\n >\n {children}\n </PopoverPrimitive.Trigger>\n )\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n side,\n sideOffset = 4,\n alignOffset,\n showArrow = false,\n children,\n ...props\n}: PopoverPrimitive.Popup.Props &\n Pick<\n PopoverPrimitive.Positioner.Props,\n 'align' | 'side' | 'sideOffset' | 'alignOffset'\n > & {\n showArrow?: boolean\n }) {\n const anchorCtx = React.useContext(PopoverAnchorContext)\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n data-slot=\"popover-positioner\"\n align={align}\n side={side}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n anchor={anchorCtx?.anchor ?? undefined}\n className=\"z-50\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n 'bg-popover text-popover-foreground z-50 w-72 rounded-lg border p-4 shadow-md outline-hidden origin-(--transform-origin)',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n className,\n )}\n {...props}\n >\n {children}\n {showArrow && (\n <PopoverPrimitive.Arrow className=\"-my-px flex data-[side=bottom]:top-[-6px] data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 data-[side=left]:right-[-10px] data-[side=left]:rotate-90 data-[side=right]:left-[-10px] data-[side=right]:-rotate-90\">\n <svg width=\"14\" height=\"7\" viewBox=\"0 0 14 7\" fill=\"none\">\n <path\n d=\"M0 7L6.29289 0.707107C6.68342 0.316583 7.31658 0.316583 7.70711 0.707107L14 7H0Z\"\n className=\"fill-popover drop-shadow-[0_1px_0_var(--border)]\"\n />\n </svg>\n </PopoverPrimitive.Arrow>\n )}\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n children,\n ...props\n}: React.ComponentProps<'span'>) {\n const anchorCtx = React.useContext(PopoverAnchorContext)\n\n return (\n <span\n data-slot=\"popover-anchor\"\n ref={(el) => anchorCtx?.setAnchor(el)}\n {...props}\n >\n {children}\n </span>\n )\n}\n\nconst Popover = Object.assign(PopoverRoot, { Trigger: PopoverTrigger, Content: PopoverContent, Anchor: PopoverAnchor })\nexport { Popover }\n","'use client'\n\nimport { Progress as ProgressPrimitive } from '@base-ui/react/progress'\n\nimport { cn } from '@/lib/cn'\n\nfunction ProgressRoot({\n className,\n children,\n value,\n ...props\n}: ProgressPrimitive.Root.Props) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn('flex flex-wrap gap-3', className)}\n style={\n {\n '--progress-color': 'var(--primary)',\n } as React.CSSProperties\n }\n {...props}\n >\n {children}\n\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </ProgressPrimitive.Root>\n )\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n 'bg-card h-1 rounded-full relative flex w-full items-center overflow-x-hidden',\n className,\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n )\n}\n\nfunction ProgressIndicator({\n className,\n ...props\n}: ProgressPrimitive.Indicator.Props) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn('bg-(--progress-color) h-full transition-all', className)}\n {...props}\n />\n )\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n return (\n <ProgressPrimitive.Label\n className={cn('text-sm font-medium', className)}\n data-slot=\"progress-label\"\n {...props}\n />\n )\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n return (\n <ProgressPrimitive.Value\n className={cn(\n 'text-muted-foreground ml-auto text-sm tabular-nums',\n className,\n )}\n data-slot=\"progress-value\"\n {...props}\n />\n )\n}\n\nconst Progress = Object.assign(ProgressRoot, { Track: ProgressTrack, Indicator: ProgressIndicator, Label: ProgressLabel, Value: ProgressValue })\nexport { Progress }\n","'use client'\n\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio'\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group'\n\nimport { cn } from '@/lib/cn'\n\nfunction RadioGroupRoot({\n className,\n ...props\n}: RadioGroupPrimitive.Props) {\n return (\n <RadioGroupPrimitive\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: RadioPrimitive.Root.Props) {\n return (\n <RadioPrimitive.Root\n data-slot=\"radio-group-item\"\n className={cn(\n 'relative flex items-center justify-center border-input data-checked:bg-primary data-checked:text-primary-foreground data-checked:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] cursor-pointer data-disabled:cursor-not-allowed data-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <RadioPrimitive.Indicator className=\"flex items-center justify-center text-current data-unchecked:hidden\">\n <svg\n width=\"6\"\n height=\"6\"\n viewBox=\"0 0 6 6\"\n fill=\"currentcolor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n </RadioPrimitive.Indicator>\n </RadioPrimitive.Root>\n )\n}\n\nconst RadioGroup = Object.assign(RadioGroupRoot, { Item: RadioGroupItem })\nexport { RadioGroup }\n","'use client'\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { useInfiniteCustomQuery } from '@/hooks/use-infinite-custom-query'\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Loader } from '@/components/ui/loader'\n\nimport { Drawer } from '@/components/ui/drawer'\nimport { Input } from '@/components/ui/input'\nimport { Popover } from '@/components/ui/popover'\n\nexport interface SelectInfiniteScrollProps<T extends object> {\n search?: boolean\n\n value: string\n onValueChange: (value: string) => void\n /** Fires when the resolved selected item changes (including when cleared). */\n onSelectedItemChange?: (item: T | null) => void\n disabled?: boolean\n\n id?: string\n className?: string\n\n enabled?: boolean\n queryKey: (string | undefined)[]\n queryFn: (params: { pageParam?: unknown; search: string }) => Promise<T[]>\n options?: Record<string, unknown>\n\n getItemValue: (item: T) => string\n renderItem: (item: T, isSelected: boolean) => React.ReactNode\n renderSelectedValue?: (item: T) => React.ReactNode\n\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n contentTitle?: string\n}\n\nfunction SelectInfiniteScroll<T extends object>({\n value,\n onValueChange,\n onSelectedItemChange,\n disabled = false,\n search: searchProp = false,\n id,\n className,\n queryKey,\n queryFn,\n enabled = true,\n options,\n getItemValue,\n renderItem,\n renderSelectedValue,\n placeholder,\n searchPlaceholder = 'Search…',\n emptyText = 'No results found.',\n contentTitle,\n}: SelectInfiniteScrollProps<T>) {\n const isMobile = useIsMobile()\n\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n\n const [debouncedSearch, setDebouncedSearch] = useState('')\n const [selectedItem, setSelectedItem] = useState<T | null>(null)\n\n const scrollableRef = useRef<HTMLDivElement>(null)\n const searchInputRef = useRef<HTMLInputElement>(null)\n const onSelectedItemChangeRef = useRef(onSelectedItemChange)\n onSelectedItemChangeRef.current = onSelectedItemChange\n\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n isFetching,\n } = useInfiniteCustomQuery<T>({\n queryKey: debouncedSearch ? [...queryKey, debouncedSearch] : queryKey,\n queryFn: ({ pageParam }) => queryFn({ pageParam, search: debouncedSearch }),\n enabled,\n options,\n })\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = e.currentTarget\n\n if (\n scrollHeight - scrollTop - clientHeight < 100 &&\n hasNextPage &&\n !isFetchingNextPage\n ) {\n fetchNextPage()\n }\n }\n\n const handleSelect = useCallback(\n (item: T) => {\n onValueChange(getItemValue(item))\n setSelectedItem(item)\n setOpen(false)\n setSearch('')\n },\n [onValueChange, getItemValue],\n )\n\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next)\n if (!next) setSearch('')\n }, [])\n\n const isPlaceholder = !selectedItem\n\n const triggerClassName = cn(\n 'border-transparent text-foreground flex h-12 w-full items-center justify-between gap-2 rounded-xl bg-input px-4 py-2',\n 'transition-[color] disabled:cursor-not-allowed disabled:opacity-75',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px] cursor-pointer outline-none',\n isPlaceholder && 'text-muted-foreground/50',\n !isPlaceholder && 'pl-2',\n className,\n )\n\n const TriggerBody = (\n <>\n <span className=\"flex-1 min-w-0 truncate text-left flex items-center gap-2\">\n {selectedItem\n ? (renderSelectedValue?.(selectedItem) ?? getItemValue(selectedItem))\n : placeholder}\n </span>\n\n {isFetching && !open ? (\n <span className=\"size-4 border-2 border-muted-foreground/30 border-t-muted-foreground rounded-full animate-spin shrink-0\" />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"text-muted-foreground/80 shrink-0 ml-auto\"\n />\n )}\n </>\n )\n\n const DropdownContent = (\n <>\n {searchProp && (\n <div className=\"p-2 relative\">\n <Icon\n name=\"Magnifier\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none size-4 z-1\"\n />\n\n <Input\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"px-11 h-12 sm:h-10 text-sm\"\n autoComplete=\"off\"\n />\n\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch('')}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-2 hover:bg-muted rounded-lg\"\n >\n <Icon name=\"Xmark\" size={13} />\n </button>\n )}\n </div>\n )}\n\n <div\n ref={scrollableRef}\n onScroll={handleScroll}\n onWheel={(e) => e.stopPropagation()}\n className=\"scroll-fade-y overflow-y-auto max-h-64 p-1\"\n >\n {isLoading ? (\n <Loader className=\"flex items-center justify-center p-2 lg:p-4\" />\n ) : data.length === 0 ? (\n <p className=\"text-center text-muted-foreground text-sm py-6 px-2\">\n {emptyText}\n </p>\n ) : (\n <>\n {data.map((item) => {\n const itemValue = getItemValue(item)\n const isSelected = value === itemValue\n\n return (\n <button\n key={itemValue}\n type=\"button\"\n className={cn(\n 'relative flex w-full cursor-pointer items-center p-2.5 rounded-lg outline-none select-none',\n 'transition-colors',\n isSelected\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n onClick={() => handleSelect(item)}\n >\n {renderItem(item, isSelected)}\n </button>\n )\n })}\n\n {isFetchingNextPage && (\n <div className=\"py-2\">\n <Loader variant=\"clean\" />\n </div>\n )}\n </>\n )}\n </div>\n </>\n )\n\n useEffect(() => {\n if (!value) {\n setSelectedItem(null)\n return\n }\n\n if (selectedItem && getItemValue(selectedItem) === value) return\n\n const found = data.find((item) => getItemValue(item) === value)\n if (found) setSelectedItem(found)\n }, [value, data, selectedItem, getItemValue])\n\n useEffect(() => {\n onSelectedItemChangeRef.current?.(selectedItem)\n }, [selectedItem])\n\n useEffect(() => {\n if (open) {\n const timer = setTimeout(() => searchInputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedSearch(search), 300)\n return () => clearTimeout(timer)\n }, [search])\n\n if (isMobile) {\n return (\n <>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n onClick={() => !disabled && handleOpenChange(true)}\n className={triggerClassName}\n >\n {TriggerBody}\n </button>\n\n <Drawer open={open} onOpenChange={handleOpenChange} direction=\"bottom\">\n <Drawer.Content\n title={contentTitle ?? placeholder ?? 'Select'}\n showDivider\n >\n <div className=\"pb-6\">{DropdownContent}</div>\n </Drawer.Content>\n </Drawer>\n </>\n )\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild disabled={disabled}>\n <button id={id} type=\"button\" className={triggerClassName}>\n {TriggerBody}\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n className=\"p-0 rounded-xl border-transparent glass-popover text-popover-foreground shadow-md\"\n style={{ width: 'var(--anchor-width)' }}\n >\n {DropdownContent}\n </Popover.Content>\n </Popover>\n )\n}\n\nexport { SelectInfiniteScroll }\n","import { useInfiniteQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\n\nexport function useInfiniteCustomQuery<TData = unknown>({\n queryKey,\n queryFn,\n enabled = true,\n options,\n}: {\n queryKey: unknown[]\n queryFn: (params: { pageParam: unknown }) => Promise<TData[]>\n enabled?: boolean\n options?: Record<string, unknown>\n}) {\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n isFetching,\n } = useInfiniteQuery<TData[]>({\n queryKey,\n queryFn: ({ pageParam }) => queryFn({ pageParam }),\n initialPageParam: undefined,\n getNextPageParam: (lastPage) =>\n lastPage.length > 0 ? lastPage.length : undefined,\n enabled,\n ...options,\n })\n\n const flatData = useMemo(\n () => data?.pages.flat() ?? [],\n [data?.pages],\n )\n\n return {\n data: flatData,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n isFetching,\n }\n}\n","'use client'\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Loader } from '@/components/ui/loader'\n\nimport { Drawer } from '@/components/ui/drawer'\nimport { Input } from '@/components/ui/input'\nimport { Popover } from '@/components/ui/popover'\n\nexport interface SelectMultiProps<T extends object> {\n values: string[]\n onValuesChange: (values: string[]) => void\n options?: T[]\n isLoading?: boolean\n disabled?: boolean\n id?: string\n className?: string\n getItemValue: (item: T) => string\n renderItem: (item: T, isSelected: boolean) => React.ReactNode\n getBadgeLabel?: (item: T) => string\n filterFn?: (item: T, search: string) => boolean\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n contentTitle?: string\n}\n\nfunction SelectMulti<T extends object>({\n values,\n onValuesChange,\n options = [],\n isLoading = false,\n disabled = false,\n id,\n className,\n getItemValue,\n renderItem,\n getBadgeLabel,\n filterFn,\n placeholder = 'Select…',\n searchPlaceholder = 'Search…',\n emptyText = 'No results found.',\n contentTitle,\n}: SelectMultiProps<T>) {\n const isMobile = useIsMobile()\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next)\n if (!next) setSearch('')\n }, [])\n\n const toggle = useCallback(\n (itemValue: string) => {\n onValuesChange(\n values.includes(itemValue)\n ? values.filter((v) => v !== itemValue)\n : [...values, itemValue],\n )\n },\n [values, onValuesChange],\n )\n\n const filteredOptions = useMemo(() => {\n if (!search) return options\n const lower = search.toLowerCase()\n\n return options.filter((item) =>\n filterFn\n ? filterFn(item, lower)\n : getItemValue(item).toLowerCase().includes(lower),\n )\n }, [options, search, filterFn, getItemValue])\n\n const selectedItems = useMemo(\n () => options.filter((item) => values.includes(getItemValue(item))),\n [options, values, getItemValue],\n )\n\n useEffect(() => {\n if (open) {\n const timer = setTimeout(() => searchInputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n const hasValues = values.length > 0\n\n const triggerClassName = cn(\n 'border-transparent text-foreground flex min-h-12 w-full min-w-0 items-center justify-between gap-2 rounded-xl bg-input px-4 py-2',\n 'transition-[color] disabled:cursor-not-allowed disabled:opacity-75',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px] cursor-pointer outline-none',\n !hasValues ? 'text-muted-foreground/50' : 'pl-2 pr-4',\n className,\n )\n\n const MAX_BADGES = 2\n\n const TriggerBody = (\n <>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-start gap-2 text-left\">\n {hasValues ? (\n <>\n {selectedItems.slice(0, MAX_BADGES).map((item) => {\n const itemValue = getItemValue(item)\n const label = getBadgeLabel?.(item) ?? itemValue\n\n return (\n <span\n key={itemValue}\n className=\"inline-flex max-w-full min-w-0 items-start gap-1 rounded-md bg-muted px-2 py-1 text-sm font-medium text-foreground\"\n >\n <span className=\"min-w-0 flex-1 text-left leading-snug wrap-break-word\">\n {label}\n </span>\n\n <div\n role=\"button\"\n tabIndex={0}\n className=\"mt-0.5 shrink-0 hover:text-destructive transition-colors\"\n onClick={(e) => {\n e.stopPropagation()\n toggle(itemValue)\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation()\n toggle(itemValue)\n }\n }}\n >\n <Icon name=\"Xmark\" size={10} />\n </div>\n </span>\n )\n })}\n\n {selectedItems.length > MAX_BADGES && (\n <span className=\"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-xs font-medium text-muted-foreground\">\n +{selectedItems.length - MAX_BADGES}\n </span>\n )}\n </>\n ) : (\n <span>{placeholder}</span>\n )}\n </div>\n\n {isLoading ? (\n <span className=\"size-4 border-2 border-muted-foreground/30 border-t-muted-foreground rounded-full animate-spin shrink-0\" />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"text-muted-foreground/80 shrink-0 ml-auto\"\n />\n )}\n </>\n )\n\n const DropdownContent = (\n <>\n <div className=\"p-2\">\n <div className=\"relative\">\n <Icon\n name=\"Magnifier\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none size-4 z-1\"\n />\n\n <Input\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"px-11 h-12 sm:h-10 text-sm\"\n autoComplete=\"off\"\n />\n\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch('')}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-2 hover:bg-muted rounded-lg\"\n >\n <Icon name=\"Xmark\" size={13} />\n </button>\n )}\n </div>\n </div>\n\n <div\n onWheel={(e) => e.stopPropagation()}\n className=\"scroll-fade-y max-h-64 overflow-y-auto overflow-x-hidden p-1\"\n >\n {isLoading ? (\n <Loader className=\"flex items-center justify-center p-2 lg:p-4\" />\n ) : filteredOptions.length === 0 ? (\n <p className=\"px-2 py-6 text-center text-sm text-muted-foreground\">\n {emptyText}\n </p>\n ) : (\n filteredOptions.map((item) => {\n const itemValue = getItemValue(item)\n const isSelected = values.includes(itemValue)\n\n return (\n <button\n key={itemValue}\n type=\"button\"\n className={cn(\n 'relative flex w-full min-w-0 cursor-pointer items-start gap-3 rounded-lg p-2.5 text-left outline-none select-none',\n 'transition-colors',\n isSelected\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n onClick={() => toggle(itemValue)}\n >\n <span\n className={cn(\n 'mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-sm border-2 transition-colors',\n isSelected\n ? 'border-primary bg-primary'\n : 'border-muted-foreground/40',\n )}\n aria-hidden\n >\n {isSelected && (\n <Icon\n name=\"Check\"\n className=\"size-2.5 text-primary-foreground\"\n />\n )}\n </span>\n <span className=\"min-w-0 flex-1 text-left wrap-break-word\">\n {renderItem(item, isSelected)}\n </span>\n </button>\n )\n })\n )}\n </div>\n </>\n )\n\n if (isMobile) {\n return (\n <>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n className={triggerClassName}\n onClick={() => !disabled && handleOpenChange(true)}\n >\n {TriggerBody}\n </button>\n\n <Drawer open={open} onOpenChange={handleOpenChange} direction=\"bottom\">\n <Drawer.Content title={contentTitle ?? placeholder} showDivider>\n <div className=\"pb-6\">{DropdownContent}</div>\n </Drawer.Content>\n </Drawer>\n </>\n )\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild disabled={disabled}>\n <button id={id} type=\"button\" className={triggerClassName}>\n {TriggerBody}\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n className=\"min-w-0 overflow-x-hidden p-0 rounded-xl border-transparent glass-popover text-popover-foreground shadow-md\"\n style={{ width: 'var(--anchor-width)' }}\n >\n {DropdownContent}\n </Popover.Content>\n </Popover>\n )\n}\n\nexport { SelectMulti }\n","import { Column } from '@tanstack/react-table'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu } from '@/components/ui/dropdown-menu'\n\ninterface DataTableColumnHeaderProps<\n TData,\n TValue,\n> extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>\n title: string\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>\n }\n\n return (\n <div className={cn('flex items-center space-x-2', className)}>\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 data-popup-open:bg-accent\"\n >\n <span>{title}</span>\n {column.getIsSorted() === 'desc' ? (\n <Icon name=\"ArrowDown\" className=\"ml-2 h-4 w-4\" />\n ) : column.getIsSorted() === 'asc' ? (\n <Icon name=\"ArrowUp\" className=\"ml-2 h-4 w-4\" />\n ) : (\n <Icon name=\"SortArrows\" className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Item onClick={() => column.toggleSorting(false)}>\n <Icon\n name=\"ArrowUp\"\n className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\"\n />\n Asc\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => column.toggleSorting(true)}>\n <Icon\n name=\"ArrowDown\"\n className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\"\n />\n Desc\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item onClick={() => column.toggleVisibility(false)}>\n <Icon\n name=\"EyeSlash\"\n className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\"\n />\n Hide\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\n\nimport { cn } from '@/lib/cn';\n\nconst cardShell =\n 'flex flex-col bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group w-full h-fit';\n\nconst cardContentShell = cn(\n 'relative bg-muted flex flex-1 flex-col gap-2',\n '[--card-content-radius:calc(var(--card-radius)-var(--card-padding))] [--card-content-padding:1rem] rounded-(--card-content-radius) p-(--card-content-padding) overflow-hidden',\n);\n\ntype TabsRootProps = React.ComponentProps<typeof TabsPrimitive.Root>;\n\nfunction Tabs({ className, ...props }: TabsRootProps) {\n return (\n <TabsPrimitive.Root\n className={cn(cardShell, className)}\n {...props}\n />\n );\n}\n\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List>;\n\nfunction TabsList({ className, ...props }: TabsListProps) {\n return (\n <TabsPrimitive.List\n className={cn(\n 'relative flex items-center gap-0.5 p-4',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TabsTabProps = React.ComponentProps<typeof TabsPrimitive.Tab>;\n\nfunction TabsTrigger({ className, ...props }: TabsTabProps) {\n return (\n <TabsPrimitive.Tab\n className={cn(\n 'relative flex min-h-9 items-center justify-center rounded-lg px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors outline-none select-none data-selected:text-foreground data-selected:bg-card focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 data-active:text-foreground cursor-pointer hover:bg-muted hover:text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TabsPanelProps = React.ComponentProps<typeof TabsPrimitive.Panel>;\n\nfunction TabsContent({ className, ...props }: TabsPanelProps) {\n return (\n <TabsPrimitive.Panel\n className={cn(cardContentShell, className)}\n {...props}\n />\n );\n}\n\nTabs.List = TabsList;\nTabs.Trigger = TabsTrigger;\nTabs.Content = TabsContent;\n\nexport { Tabs };\n","\nimport { cn } from '@/lib/cn'\n\nexport interface CellProps extends React.HTMLAttributes<HTMLSpanElement> {\n wrap?: boolean\n emptyText?: string\n}\n\nexport const Cell = ({\n wrap = false,\n children,\n className,\n emptyText = 'Not defined',\n ...props\n}: CellProps) => {\n\n return (\n <span\n {...props}\n className={cn(\n wrap ? 'whitespace-normal' : 'text-nowrap whitespace-nowrap',\n !children && 'italic opacity-50',\n className,\n )}\n >\n {children || emptyText}\n </span>\n )\n}\n","import {\n type CountryCode,\n parsePhoneNumberFromString,\n type PhoneNumber,\n} from 'libphonenumber-js'\n\n\nimport {\n type AvailableLocales,\n DEFAULT_LOCALE_CONFIG,\n} from '@/config/locales'\n\nimport { cn } from '@/lib/cn'\n\nimport { getCountryName } from '@/hooks/use-phone-input'\n\nimport { FlagIcon } from '@/components/icon/flag'\nimport { Cell } from '@/components/ui/text/cell'\n\nimport { countryDialCodes } from '@/components/ui/input-phone/dial-codes'\nimport {\n applyPhoneMask,\n getDisplayMask,\n removePhoneMask,\n} from '@/components/ui/input-phone/masks'\n\nconst getPhoneDigitsForCountry = (\n parsed: PhoneNumber,\n cleanPhone: string,\n countryCode: string,\n): string => {\n const dial = countryDialCodes[countryCode]\n\n if (dial !== undefined) {\n const dialDigits = removePhoneMask(dial)\n\n if (dialDigits && cleanPhone.startsWith(dialDigits)) {\n return cleanPhone.substring(dialDigits.length)\n }\n }\n\n return removePhoneMask(parsed.nationalNumber)\n}\n\nconst resolveCountryAndDigits = (\n phone: string | null | undefined,\n): { countryCode: string; phoneDigits: string } => {\n const safePhone = typeof phone === 'string' ? phone : ''\n\n const cleanPhone = removePhoneMask(safePhone)\n const defaultRegion = DEFAULT_LOCALE_CONFIG.COUNTRY_CODE as CountryCode\n\n const fromParsed = (\n parsed: ReturnType<typeof parsePhoneNumberFromString>,\n ): { countryCode: string; phoneDigits: string } | null => {\n if (!parsed?.country) return null\n return {\n countryCode: parsed.country,\n phoneDigits: getPhoneDigitsForCountry(parsed, cleanPhone, parsed.country),\n }\n }\n\n const attempts: Array<ReturnType<typeof parsePhoneNumberFromString>> = [\n parsePhoneNumberFromString(safePhone),\n cleanPhone ? parsePhoneNumberFromString(`+${cleanPhone}`) : undefined,\n parsePhoneNumberFromString(safePhone, defaultRegion),\n ]\n\n for (const parsed of attempts) {\n const resolved = fromParsed(parsed)\n if (resolved) return resolved\n }\n\n const sortedCodes = Object.entries(countryDialCodes).sort(\n ([, dialA], [, dialB]) =>\n removePhoneMask(dialB).length - removePhoneMask(dialA).length,\n )\n\n for (const [countryCode, dialCode] of sortedCodes) {\n const dialDigits = removePhoneMask(dialCode)\n\n if (\n dialDigits &&\n cleanPhone.startsWith(dialDigits) &&\n cleanPhone.length > dialDigits.length\n ) {\n return {\n countryCode,\n phoneDigits: cleanPhone.substring(dialDigits.length),\n }\n }\n }\n\n return {\n countryCode: DEFAULT_LOCALE_CONFIG.COUNTRY_CODE,\n phoneDigits: cleanPhone,\n }\n}\n\nexport interface PhoneProps extends React.HTMLAttributes<HTMLSpanElement> {\n phone: string | null | undefined\n flag?: boolean\n}\n\nexport const Phone = ({ phone, flag = true, className }: PhoneProps) => {\n const { countryCode, phoneDigits } = resolveCountryAndDigits(phone)\n\n const locale = \"pt-BR\" as AvailableLocales\n const safePhone = typeof phone === 'string' ? phone : ''\n\n const formattedPhone = applyPhoneMask(\n phoneDigits,\n getDisplayMask(countryCode, phoneDigits.length),\n )\n\n const formatted = {\n phone: formattedPhone,\n country: {\n code: countryCode,\n name: getCountryName(countryCode, locale),\n },\n }\n\n return (\n <Cell\n title={safePhone ? formatted.phone : undefined}\n className={cn('min-w-32', className)}\n >\n {safePhone && flag ? (\n <div className=\"flex items-center gap-1.5 pr-2\">\n <FlagIcon code={countryCode} className=\"size-3.5 rounded-sm\" />\n <span>{formatted.phone}</span>\n </div>\n ) : (\n formatted.phone\n )}\n </Cell>\n )\n}\n","export type AvailableLocale = 'pt-BR' | 'en-US'\nexport type AvailableLocales = AvailableLocale\n\nexport const LOCALES: AvailableLocale[] = ['pt-BR', 'en-US']\n\nexport const DEFAULT_LOCALE_CONFIG = {\n COUNTRY_CODE: 'BR',\n} as const\n\nexport function flagPath(countryCode: string): string {\n return `/flags/${countryCode.toLowerCase()}.svg`\n}\n\nexport function getFlagByLocale(locale: string): string {\n const map: Record<string, string> = { 'pt-BR': 'BR', 'en-US': 'US' }\n return flagPath(map[locale] || 'BR')\n}\n\nexport function getLocaleLabel(locale: string): string {\n const map: Record<string, string> = { 'pt-BR': 'Português', 'en-US': 'English' }\n return map[locale] || locale\n}\n","export const countryDialCodes: Record<string, string> = {\n AR: '+54',\n BO: '+591',\n BR: '+55',\n BZ: '+501',\n CA: '+1',\n CL: '+56',\n CO: '+57',\n CR: '+506',\n CU: '+53',\n DO: '+1809',\n EC: '+593',\n ES: '+34',\n GT: '+502',\n GY: '+592',\n HN: '+504',\n HT: '+509',\n JM: '+1876',\n MX: '+52',\n NI: '+505',\n PA: '+507',\n PE: '+51',\n PT: '+351',\n PY: '+595',\n SR: '+597',\n TT: '+1868',\n US: '+1',\n UY: '+598',\n VE: '+58',\n}\n","import { Cell } from './cell'\nimport { Phone } from './phone'\n\nexport const Text = {\n Phone,\n Cell,\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'border-transparent placeholder:text-muted-foreground/50 focus-visible:border-transparent focus-visible:ring-ring/50 bg-input aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex min-h-19.5 w-full rounded-lg border px-3 py-2 transition-[color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n}\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","'use client'\n\nimport { useTheme } from 'next-themes'\n\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\n\nimport { themeIdToToastTheme } from '@/config/themes'\n\nimport { cn } from '@/lib/cn'\n\ntype AppToasterProps = Omit<ToasterProps, 'theme'> & {\n /** App theme id (`cream`, `onix`, …) or Sonner’s own `light` / `dark` / `system` */\n theme?: ToasterProps['theme'] | string\n}\n\nconst toasterCardStyle = {\n '--toast-border-width': '0px',\n '--toast-padding': '1.25rem',\n '--border-radius': '1rem',\n '--normal-bg': 'var(--card)',\n '--normal-text': 'var(--card-foreground)',\n '--normal-border': 'var(--border)',\n '--normal-bg-hover':\n 'color-mix(in oklab, var(--card-foreground) 6%, var(--card))',\n '--normal-border-hover': 'var(--border)',\n /* Same recipe as the Alert variants: text-{color} on a 5% tint, no border.\n Alerts use `bg-{color}/5` over the page; toasts float, so the 5% tint is\n pre-mixed with --background to stay opaque. */\n '--success-bg': 'color-mix(in oklab, var(--success) 5%, var(--background))',\n '--success-border': 'transparent',\n '--success-text': 'var(--success)',\n '--info-bg': 'color-mix(in oklab, var(--info) 5%, var(--background))',\n '--info-border': 'transparent',\n '--info-text': 'var(--info)',\n '--warning-bg': 'color-mix(in oklab, var(--warning) 5%, var(--background))',\n '--warning-border': 'transparent',\n '--warning-text': 'var(--warning)',\n '--error-bg': 'color-mix(in oklab, var(--destructive) 5%, var(--background))',\n '--error-border': 'transparent',\n '--error-text': 'var(--destructive)',\n} as React.CSSProperties\n\nconst Toaster = ({\n theme: themeProp,\n toastOptions,\n style,\n className,\n /** Colored like the Alert variants by default; pass `false` for neutral card toasts. */\n richColors = true,\n ...props\n}: AppToasterProps) => {\n const { theme: themeFromHook } = useTheme()\n const toastTheme = themeIdToToastTheme(themeProp ?? themeFromHook ?? 'system')\n\n return (\n <Sonner\n theme={toastTheme}\n richColors={richColors}\n className={cn('toaster group', className)}\n style={{ ...toasterCardStyle, ...style }}\n toastOptions={{\n ...toastOptions,\n classNames: {\n ...toastOptions?.classNames,\n toast: cn('shadow-sm!', toastOptions?.classNames?.toast),\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","export const THEMES = [\n { id: 'light' },\n { id: 'dark' },\n { id: 'system' },\n] as const\n\nexport const TOGGLEABLE_THEMES = [\n { id: 'light' },\n { id: 'dark' },\n] as const\n\nexport const LISTABLE_THEMES = [\n { id: 'light', icon: 'Sun', labelKey: 'theme.light' },\n { id: 'dark', icon: 'Moon', labelKey: 'theme.dark' },\n { id: 'system', icon: 'Monitor', labelKey: 'theme.system' },\n] as const\n\nexport function themeIdToToastTheme(themeId: string): 'light' | 'dark' | 'system' {\n return themeId as 'light' | 'dark' | 'system'\n}\n","import { twMerge } from 'tailwind-merge'\n\nimport { Tooltip } from '@/components/ui/tooltip'\n\ninterface TrackerBlockProps {\n key?: string | number\n color?: string\n tooltip?: string\n defaultBackgroundColor?: string\n disabledTooltip?: boolean\n}\n\nconst Block = ({\n color,\n tooltip,\n disabledTooltip,\n defaultBackgroundColor = 'var(--color-secondary)',\n}: TrackerBlockProps) => {\n return disabledTooltip ? (\n <div className=\"size-full overflow-hidden px-[0.5px] transition first:rounded-l-sm first:pl-0 last:rounded-r-sm last:pr-0 sm:px-px\">\n <div\n style={\n {\n '--color': color || defaultBackgroundColor,\n } as React.CSSProperties\n }\n className=\"size-full rounded-[1px] bg-(--color) hover:opacity-50\"\n />\n </div>\n ) : (\n <Tooltip>\n <Tooltip.Trigger asChild>\n <div\n role=\"button\"\n aria-label={tooltip}\n className=\"size-full overflow-hidden px-[0.5px] transition first:rounded-l-sm first:pl-0 last:rounded-r-sm last:pr-0 sm:px-px cursor-pointer\"\n >\n <div\n style={\n {\n '--color': color || defaultBackgroundColor,\n } as React.CSSProperties\n }\n className=\"size-full rounded-[1px] bg-(--color) hover:opacity-80 transition-opacity\"\n />\n </div>\n </Tooltip.Trigger>\n <Tooltip.Content className=\"bg-popover text-popover-foreground border border-border rounded-md px-3 py-1.5 text-sm shadow-md\">\n {tooltip}\n </Tooltip.Content>\n </Tooltip>\n )\n}\n\ninterface TrackerProps\n extends\n React.ComponentProps<'div'>,\n Pick<TrackerBlockProps, 'disabledTooltip'> {\n data: TrackerBlockProps[]\n defaultBackgroundColor?: string\n}\n\nconst Tracker = ({\n data = [],\n disabledTooltip = false,\n className,\n ref,\n ...props\n}: TrackerProps) => {\n return (\n <div\n ref={ref}\n className={twMerge('group flex h-10 w-full items-center', className)}\n {...props}\n >\n {data.map((props, index) => (\n <Block\n disabledTooltip={disabledTooltip}\n key={props.key ?? index}\n {...props}\n />\n ))}\n </div>\n )\n}\n\nexport { Tracker, type TrackerBlockProps }\n","'use client'\n\nimport {\n MediaControlBar,\n MediaController,\n MediaMuteButton,\n MediaPlayButton,\n MediaSeekBackwardButton,\n MediaSeekForwardButton,\n MediaTimeDisplay,\n MediaTimeRange,\n MediaVolumeRange,\n} from 'media-chrome/react'\n\nimport type { ComponentProps, CSSProperties } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nexport type VideoPlayerProps = ComponentProps<typeof MediaController>\n\nconst variables = {\n '--media-primary-color': 'var(--primary)',\n '--media-secondary-color': 'var(--background)',\n '--media-text-color': 'var(--foreground)',\n '--media-background-color': 'var(--background)',\n '--media-control-hover-background': 'var(--accent)',\n '--media-font-family': 'var(--font-sans)',\n '--media-live-button-icon-color': 'var(--muted-foreground)',\n '--media-live-button-indicator-color': 'var(--destructive)',\n '--media-range-track-background': 'var(--border)',\n} as CSSProperties\n\nexport const VideoPlayer = ({ style, ...props }: VideoPlayerProps) => (\n <MediaController\n style={{\n ...variables,\n ...style,\n }}\n {...props}\n />\n)\n\nexport type VideoPlayerControlBarProps = ComponentProps<typeof MediaControlBar>\n\nexport const VideoPlayerControlBar = (props: VideoPlayerControlBarProps) => (\n <MediaControlBar {...props} />\n)\n\nexport type VideoPlayerTimeRangeProps = ComponentProps<typeof MediaTimeRange>\n\nexport const VideoPlayerTimeRange = ({\n className,\n ...props\n}: VideoPlayerTimeRangeProps) => (\n <MediaTimeRange className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerTimeDisplayProps = ComponentProps<\n typeof MediaTimeDisplay\n>\n\nexport const VideoPlayerTimeDisplay = ({\n className,\n ...props\n}: VideoPlayerTimeDisplayProps) => (\n <MediaTimeDisplay className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerVolumeRangeProps = ComponentProps<\n typeof MediaVolumeRange\n>\n\nexport const VideoPlayerVolumeRange = ({\n className,\n ...props\n}: VideoPlayerVolumeRangeProps) => (\n <MediaVolumeRange className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerPlayButtonProps = ComponentProps<typeof MediaPlayButton>\n\nexport const VideoPlayerPlayButton = ({\n className,\n ...props\n}: VideoPlayerPlayButtonProps) => (\n <MediaPlayButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerSeekBackwardButtonProps = ComponentProps<\n typeof MediaSeekBackwardButton\n>\n\nexport const VideoPlayerSeekBackwardButton = ({\n className,\n ...props\n}: VideoPlayerSeekBackwardButtonProps) => (\n <MediaSeekBackwardButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerSeekForwardButtonProps = ComponentProps<\n typeof MediaSeekForwardButton\n>\n\nexport const VideoPlayerSeekForwardButton = ({\n className,\n ...props\n}: VideoPlayerSeekForwardButtonProps) => (\n <MediaSeekForwardButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerMuteButtonProps = ComponentProps<typeof MediaMuteButton>\n\nexport const VideoPlayerMuteButton = ({\n className,\n ...props\n}: VideoPlayerMuteButtonProps) => (\n <MediaMuteButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerContentProps = ComponentProps<'video'>\n\nexport const VideoPlayerContent = ({\n className,\n tabIndex = -1,\n ...props\n}: VideoPlayerContentProps) => (\n <video\n className={cn('mt-0 mb-0', className)}\n {...props}\n tabIndex={tabIndex}\n />\n)\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nconst MAX_IMAGE_CACHE = 500\nconst imageCache = new Set<string>()\n\nfunction cacheImage(src: string) {\n if (imageCache.size >= MAX_IMAGE_CACHE) {\n const first = imageCache.values().next().value\n if (first) imageCache.delete(first)\n }\n\n imageCache.add(src)\n}\n\ntype Status = 'loading' | 'loaded' | 'error'\n\ninterface AvatarCtx {\n status: Status\n onStatus: React.Dispatch<React.SetStateAction<Status>>\n}\n\nconst AvatarCtx = React.createContext<AvatarCtx>({\n status: 'loading',\n onStatus: () => {},\n})\n\nfunction AvatarRoot({ className, ...props }: React.ComponentProps<'span'>) {\n const [status, onStatus] = React.useState<Status>('loading')\n const ctx = React.useMemo(() => ({ status, onStatus }), [status])\n\n return (\n <AvatarCtx.Provider value={ctx}>\n <span\n data-slot=\"avatar\"\n className={cn(\n 'relative flex size-8 shrink-0 overflow-hidden rounded-lg',\n className,\n )}\n {...props}\n />\n </AvatarCtx.Provider>\n )\n}\n\nfunction AvatarImage({\n src,\n className,\n ...props\n}: React.ComponentProps<'img'>) {\n const { onStatus } = React.useContext(AvatarCtx)\n const srcStr = typeof src === 'string' && src.length > 0 ? src : undefined\n\n // Runs synchronously before the browser paints — if the src is already\n // cached, we set status to 'loaded' immediately so AvatarFallback never\n // renders on screen, eliminating all flicker on path changes.\n React.useLayoutEffect(() => {\n onStatus(!srcStr ? 'error' : imageCache.has(srcStr) ? 'loaded' : 'loading')\n }, [srcStr, onStatus])\n\n if (!srcStr) return null\n\n return (\n <img\n data-slot=\"avatar-image\"\n src={srcStr}\n alt=\"\"\n className={cn(\n 'absolute inset-0 size-full object-cover pointer-events-none select-none',\n className,\n )}\n onLoad={() => {\n cacheImage(srcStr)\n onStatus('loaded')\n }}\n onError={() => onStatus('error')}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n name,\n children,\n className,\n ...props\n}: React.ComponentProps<'span'> & { name?: string }) {\n const { status } = React.useContext(AvatarCtx)\n if (status === 'loaded') return null\n\n const initials =\n name && name.length > 0\n ? name\n .split(' ')\n .map((n) => n.charAt(0))\n .slice(0, 2)\n .join('')\n .toUpperCase()\n : '?'\n\n return (\n <span\n data-slot=\"avatar-fallback\"\n className={cn(\n 'absolute inset-0 flex size-full items-center justify-center bg-primary text-primary-foreground rounded-none select-none pointer-events-none',\n className,\n )}\n {...props}\n >\n {children ?? initials}\n </span>\n )\n}\n\nconst Avatar = Object.assign(AvatarRoot, { Image: AvatarImage, Fallback: AvatarFallback })\nexport { Avatar }\n","'use client'\n\nimport * as React from 'react'\n\nimport { DayPicker } from 'react-day-picker'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { buttonVariants } from '@/components/ui/button'\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n components: userComponents,\n ...props\n}: React.ComponentProps<typeof DayPicker>) {\n const defaultClassNames = {\n months: 'relative flex flex-col sm:flex-row gap-4',\n month: 'w-full',\n month_grid: 'w-full',\n month_caption:\n 'relative mx-10 mb-1 flex h-9 items-center justify-center z-20',\n caption_label: 'text-sm font-medium',\n nav: 'absolute top-0 flex w-full justify-between z-10',\n button_previous: cn(\n buttonVariants({ variant: 'ghost' }),\n 'size-8 text-muted-foreground/80 hover:text-foreground p-0',\n ),\n button_next: cn(\n buttonVariants({ variant: 'ghost' }),\n 'size-8 text-muted-foreground/80 hover:text-foreground p-0',\n ),\n weekday: 'size-8 p-0 text-xs font-medium text-muted-foreground/80',\n day_button:\n 'relative flex size-8 items-center justify-center whitespace-nowrap rounded-full p-0 text-foreground group-[[data-selected]:not(.range-middle)]:[transition-property:color,background-color,border-radius,box-shadow] group-[[data-selected]:not(.range-middle)]:duration-150 group-data-disabled:pointer-events-none focus-visible:z-10 hover:not-in-data-selected:bg-accent group-data-selected:bg-primary hover:not-in-data-selected:text-foreground group-data-selected:text-primary-foreground group-data-disabled:text-foreground/30 group-data-disabled:line-through group-data-outside:text-foreground/30 group-data-selected:group-data-outside:text-primary-foreground outline-none focus-visible:ring-ring/50 focus-visible:ring-[3px] group-[.range-start:not(.range-end)]:rounded-e-full group-[.range-end:not(.range-start)]:rounded-s-full group-[.range-middle]:rounded-none group-[.range-middle]:group-data-selected:bg-accent group-[.range-middle]:group-data-selected:text-foreground',\n day: 'group size-8 px-0 py-px text-sm relative before:absolute before:inset-y-px before:inset-x-0 [&.range-start:not(.range-end):before]:bg-linear-to-r before:from-transparent before:from-50% before:to-accent before:to-50% [&.range-end:not(.range-start):before]:bg-linear-to-l',\n range_start: 'range-start',\n range_end: 'range-end',\n range_middle: 'range-middle',\n today:\n '*:after:pointer-events-none *:after:absolute *:after:bottom-1 *:after:start-1/2 *:after:z-10 *:after:size-[3px] *:after:-translate-x-1/2 *:after:rounded-full *:after:bg-primary [&[data-selected]:not(.range-middle)>*]:after:bg-background [&[data-disabled]>*]:after:bg-foreground/30 *:after:transition-colors',\n outside:\n 'text-muted-foreground data-selected:bg-accent/50 data-selected:text-muted-foreground',\n hidden: 'invisible',\n week_number: 'size-8 p-0 text-xs font-medium text-muted-foreground/80',\n }\n\n const mergedClassNames: typeof defaultClassNames = Object.keys(\n defaultClassNames,\n ).reduce(\n (acc, key) => ({\n ...acc,\n [key]: classNames?.[key as keyof typeof classNames]\n ? cn(\n defaultClassNames[key as keyof typeof defaultClassNames],\n classNames[key as keyof typeof classNames],\n )\n : defaultClassNames[key as keyof typeof defaultClassNames],\n }),\n {} as typeof defaultClassNames,\n )\n\n const defaultComponents = {\n Chevron: (props: {\n className?: string\n size?: number\n disabled?: boolean\n orientation?: 'left' | 'right' | 'up' | 'down'\n }) => {\n if (props.orientation === 'left') {\n return <Icon name=\"ChevronLeft\" size={16} {...props} aria-hidden=\"true\" />\n }\n return <Icon name=\"ChevronRight\" size={16} {...props} aria-hidden=\"true\" />\n },\n }\n\n const mergedComponents = {\n ...defaultComponents,\n ...userComponents,\n }\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('w-fit bg-card rounded-lg p-3', className)}\n classNames={mergedClassNames}\n components={mergedComponents}\n {...props}\n />\n )\n}\n\nexport { Calendar }\n","'use client'\n\nimport type { DefaultLegendContentProps, TooltipContentProps } from 'recharts'\nimport * as RechartsPrimitive from 'recharts'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nfunction useChartContainerSize(ref: React.RefObject<HTMLElement | null>) {\n const [size, setSize] = React.useState<{ w: number; h: number } | null>(null)\n\n React.useLayoutEffect(() => {\n const el = ref.current\n if (!el) return\n\n const update = () => {\n const { width, height } = el.getBoundingClientRect()\n\n const w = Math.round(width)\n const h = Math.round(height)\n\n if (w > 0 && h > 0) {\n setSize((prev) => (prev?.w === w && prev?.h === h ? prev : { w, h }))\n }\n }\n\n update()\n\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n const ro = new ResizeObserver(() => {\n update()\n })\n\n ro.observe(el)\n\n return () => {\n ro.disconnect()\n }\n }, [ref])\n\n return size\n}\n\nconst THEMES = { light: '', dark: '.dark' } as const\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n}\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error('useChart must be used within a <Chart />')\n }\n\n return context\n}\n\nfunction ChartRoot({\n id,\n className,\n children,\n config,\n ...props\n}: React.ComponentProps<'div'> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >['children']\n}) {\n const uniqueId = React.useId()\n const chartId = `chart-${id || uniqueId.replace(/:/g, '')}`\n const containerRef = React.useRef<HTMLDivElement>(null)\n const size = useChartContainerSize(containerRef)\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n ref={containerRef}\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex min-h-48 min-w-0 flex-col justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {size ? (\n <RechartsPrimitive.ResponsiveContainer\n debounce={48}\n height={size.h}\n width={size.w}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n ) : (\n <div aria-hidden className=\"min-h-48 w-full shrink-0\" />\n )}\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color,\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n ${prefix} [data-chart=${id}] {\n ${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join('\\n')}\n }\n `,\n )\n .join('\\n'),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\n/** Recharts injects these when rendering tooltip content; callers may omit them. */\ntype TooltipInjectedProps =\n | 'active'\n | 'payload'\n | 'coordinate'\n | 'accessibilityLayer'\n | 'activeIndex'\n\ntype ChartTooltipContentProps = Omit<\n TooltipContentProps,\n TooltipInjectedProps\n> &\n Partial<Pick<TooltipContentProps, TooltipInjectedProps>> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n nameKey?: string\n labelKey?: string\n color?: string\n }\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: ChartTooltipContentProps) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey || item?.dataKey || item?.name || 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === 'string'\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn('font-medium', labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n <div\n className={cn(\n 'border-border/50 bg-background grid min-w-32 items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || 'value'}`\n\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color || item.payload.fill || item.color\n\n return (\n <div\n key={item.graphicalItemId}\n className={cn(\n '[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n 'shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)',\n {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent':\n indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n },\n )}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = 'bottom',\n nameKey,\n}: React.ComponentProps<'div'> &\n Pick<DefaultLegendContentProps, 'payload' | 'verticalAlign'> & {\n hideIcon?: boolean\n nameKey?: string\n }) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n 'flex items-center justify-center gap-4',\n verticalAlign === 'top' ? 'pb-3' : 'pt-3',\n className,\n )}\n >\n {payload\n .filter((item) => item.type !== 'none')\n .map((item) => {\n const key = `${nameKey || item.dataKey || 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={item.value}\n className={cn(\n '[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3',\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string,\n) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n 'payload' in payload &&\n typeof payload.payload === 'object' &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === 'string'\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config]\n}\n\nconst Chart = Object.assign(ChartRoot, {\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n Style: ChartStyle,\n Tooltip: ChartTooltip,\n TooltipContent: ChartTooltipContent,\n})\n\nexport { Chart }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nimport { ANIMATION } from '@/constants/animations'\n\nconst collapsibleRootVariants = cva('w-full', {\n variants: {\n variant: {\n row: '',\n card: 'rounded-lg bg-card',\n },\n },\n defaultVariants: {\n variant: 'card',\n },\n})\n\n/** Extra styles on top of {@link SettingsItem} for the collapsible trigger. */\nconst collapsibleTriggerSettingsOverlayVariants = cva(\n [\n 'group w-full outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring cursor-pointer',\n 'disabled:pointer-events-none disabled:opacity-50 disabled:grayscale',\n ],\n {\n variants: {\n variant: {\n row: '',\n card: 'hover:bg-muted/50 rounded-lg data-[state=open]:rounded-b-none',\n },\n },\n defaultVariants: {\n variant: 'card',\n },\n },\n)\n\nconst collapsibleContentVariants = cva('min-h-0', {\n variants: {\n variant: {\n row: '',\n card: 'border-t border-border/50 px-4 pb-4 pt-4',\n },\n },\n defaultVariants: {\n variant: 'card',\n },\n})\n\ntype CollapsibleAlign = 'center' | 'start' | null | undefined\n\ntype CollapsibleContextValue = VariantProps<typeof collapsibleRootVariants> & {\n align: CollapsibleAlign\n open: boolean\n setOpen: (next: boolean) => void\n contentId: string\n disabled: boolean\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null,\n)\n\nfunction useCollapsibleContext(component: string) {\n const ctx = React.useContext(CollapsibleContext)\n if (!ctx) {\n throw new Error(`${component} must be used within <Collapsible>`)\n }\n return ctx\n}\n\n/** Read open state from a parent {@link Collapsible} (e.g. custom chevron in the trigger action). */\nfunction useCollapsibleOpen() {\n return useCollapsibleContext('useCollapsibleOpen').open\n}\n\n/** Returns null when not inside {@link Collapsible}; use from {@link SettingsItem} with `collapsibleTrigger`. */\nfunction useOptionalCollapsibleContext() {\n return React.useContext(CollapsibleContext)\n}\n\nfunction CollapsibleRoot({\n className,\n variant = 'card',\n align = 'start',\n open: openProp,\n defaultOpen,\n onOpenChange,\n expandWhen,\n disabled = false,\n children,\n ...props\n}: React.ComponentProps<'div'> &\n VariantProps<typeof collapsibleRootVariants> & {\n align?: CollapsibleAlign\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n expandWhen?: boolean\n disabled?: boolean\n }) {\n const contentId = React.useId()\n const isControlled = openProp !== undefined\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n defaultOpen ?? false,\n )\n\n const open = isControlled\n ? Boolean(openProp)\n : Boolean(expandWhen) || uncontrolledOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (disabled) return\n if (!isControlled) {\n if (next) {\n setUncontrolledOpen(true)\n } else {\n setUncontrolledOpen(false)\n }\n }\n onOpenChange?.(next)\n },\n [disabled, isControlled, onOpenChange],\n )\n\n const contextValue = React.useMemo(\n () => ({\n variant,\n align,\n open,\n setOpen,\n contentId,\n disabled,\n }),\n [variant, align, open, setOpen, contentId, disabled],\n )\n\n return (\n <CollapsibleContext.Provider value={contextValue}>\n <div\n data-slot=\"collapsible\"\n data-state={open ? 'open' : 'closed'}\n className={cn(collapsibleRootVariants({ variant }), className)}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n )\n}\n\nexport function CollapsibleContent({\n className,\n children,\n}: {\n className?: string\n children?: React.ReactNode\n}) {\n const { variant, open, contentId } =\n useCollapsibleContext('CollapsibleContent')\n const contentRef = React.useRef<HTMLDivElement>(null)\n const [measuredHeight, setMeasuredHeight] = React.useState(0)\n\n React.useEffect(() => {\n const el = contentRef.current\n if (!el) return\n\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const h = entry.target.scrollHeight\n if (h > 0) setMeasuredHeight(h)\n }\n })\n ro.observe(el)\n\n const initialH = el.scrollHeight\n if (initialH > 0) setMeasuredHeight(initialH)\n\n return () => ro.disconnect()\n }, [])\n\n const height = open ? measuredHeight : 0\n\n const isCard = variant === 'card'\n\n return (\n <div\n id={contentId}\n role=\"region\"\n data-slot=\"collapsible-content\"\n style={{\n height,\n overflow: 'hidden',\n opacity: open ? 1 : 0,\n transition: `height ${ANIMATION.DURATION_FLOAT}s ease-in-out, opacity ${ANIMATION.DURATION_FLOAT / 2}s ease`,\n transitionDelay: open ? `0s, ${ANIMATION.DURATION_FLOAT / 2}s` : '0s, 0s',\n }}\n className={cn(className)}\n >\n <div\n ref={contentRef}\n className={cn(\n isCard && 'border-t border-border/50 px-4 pb-4 pt-4',\n )}\n >\n {children}\n </div>\n </div>\n )\n}\n\nconst Collapsible = Object.assign(CollapsibleRoot, { Content: CollapsibleContent })\n\nexport {\n Collapsible,\n collapsibleContentVariants,\n collapsibleRootVariants,\n collapsibleTriggerSettingsOverlayVariants,\n useCollapsibleOpen,\n useOptionalCollapsibleContext,\n}\n","'use client'\n\nimport { Command as CommandPrimitive } from 'cmdk'\n\nimport * as React from 'react'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n} from '@/components/internal/dialog'\n\nimport { Kbd } from '@/components/ui/kbd'\n\nfunction CommandRoot({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-xl bg-muted text-foreground [--card-content-padding:1rem]',\n '**:data-[slot=command-input-wrapper]:flex **:data-[slot=command-input-wrapper]:min-h-14 **:data-[slot=command-input-wrapper]:items-center',\n '**:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:uppercase **:[[cmdk-group-heading]]:text-muted-foreground/50',\n '**:[[cmdk-group]]:px-(--card-content-padding)! **:[[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0',\n '**:[[cmdk-input-wrapper]_svg]:h-5 **:[[cmdk-input-wrapper]_svg]:w-5 **:[[cmdk-input]]:h-12',\n '**:[[cmdk-item]]:gap-3 **:[[cmdk-item]]:px-3 **:[[cmdk-item]]:py-3 **:[[cmdk-item]]:rounded-lg **:[[cmdk-item]_svg]:h-5 **:[[cmdk-item]_svg]:w-5',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n commandClassName,\n closeButtonClassName,\n showCloseButton = true,\n filter,\n ...props\n}: Omit<React.ComponentProps<typeof Dialog>, 'children'> & {\n children?: React.ReactNode\n title?: string\n description?: string\n className?: string\n commandClassName?: string\n closeButtonClassName?: string\n showCloseButton?: boolean\n filter?: React.ComponentProps<typeof CommandPrimitive>['filter']\n}) {\n return (\n <Dialog {...props}>\n <DialogContent\n title={title}\n closeButton={showCloseButton}\n closeButtonClassName={cn(\n 'top-[calc(var(--card-padding)+1.75rem)] right-[calc(var(--card-padding)+0.75rem)] -translate-y-1/2',\n 'size-7 rounded-md p-1 bg-muted/50 hover:bg-muted hover:opacity-100 text-muted-foreground',\n closeButtonClassName,\n )}\n className={cn(\n 'overflow-hidden gap-0 border-0 bg-card p-(--card-padding) shadow-none',\n '[--card-radius:1rem] [--card-padding:0.25rem] lg:rounded-(--card-radius) lg:p-(--card-padding)',\n 'max-w-xl! border-none outline-none max-h-dvh max-sm:px-1 shadow-lg sm:rounded-2xl',\n className,\n )}\n >\n <DialogDescription className=\"sr-only\">{description}</DialogDescription>\n\n <Command\n filter={filter}\n className={cn(\n '[--card-content-radius:calc(var(--card-radius)-var(--card-padding))] sm:rounded-xl lg:rounded-(--card-content-radius)',\n commandClassName,\n )}\n >\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 min-h-14 items-center gap-4 px-(--card-content-padding)\"\n >\n <Icon name=\"Magnifier\" className=\"size-4 shrink-0 opacity-50\" />\n\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'flex h-10 w-full rounded-md bg-transparent py-3 pr-9 text-sm outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50',\n '[&_button]:size-8!',\n className,\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n 'max-lg:h-full lg:max-h-[500px] scroll-py-1 overflow-x-hidden overflow-y-auto',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-2 text-foreground **:[[cmdk-group-heading]]:py-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandFooter({\n className,\n navigateLabel = 'navigate',\n selectLabel = 'select',\n closeLabel = 'close',\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n navigateLabel?: string\n selectLabel?: string\n closeLabel?: string\n}) {\n return (\n <div\n data-slot=\"command-footer\"\n className={cn(\n 'hidden lg:flex shrink-0 items-center justify-between p-4 text-xs text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1.5\">\n <Kbd keys={['ArrowUp', 'ArrowDown']} />\n\n <span>{navigateLabel}</span>\n </span>\n\n <span className=\"flex items-center gap-1.5\">\n <Kbd keys={['Enter']} />\n\n <span>{selectLabel}</span>\n </span>\n </div>\n\n <span className=\"flex items-center gap-1.5\">\n <Kbd keys={['Escape']} />\n\n <span>{closeLabel}</span>\n </span>\n </>\n )}\n </div>\n )\n}\n\nconst Command = Object.assign(CommandRoot, {\n Dialog: CommandDialog,\n Empty: CommandEmpty,\n Footer: CommandFooter,\n Group: CommandGroup,\n Input: CommandInput,\n Item: CommandItem,\n List: CommandList,\n Separator: CommandSeparator,\n Shortcut: CommandShortcut,\n})\n\nexport { Command }\n","'use client'\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { toast } from 'sonner'\n\nimport { cn } from '@/lib/cn'\n\nimport { EmptyState } from '@/components/ui/empty-state'\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { Label } from '@/components/ui/label'\n\nconst ACCEPTED_TYPES = ['image/jpeg', 'image/png', 'image/webp']\n\nconst MAX_SIZE_MB = 5\nconst MAX_SIZE_BYTES = MAX_SIZE_MB * 1024 * 1024\n\nexport interface ImageUploadProps {\n value: File | string | null\n onChange: (file: File | null) => void\n label?: string\n disabled?: boolean\n className?: string\n previewClassName?: string\n id?: string\n}\n\nconst ImageUpload = ({\n value,\n onChange,\n label,\n disabled,\n className,\n previewClassName,\n id = 'image-upload',\n}: ImageUploadProps) => {\n\n const inputRef = useRef<HTMLInputElement>(null)\n const dragCounter = useRef(0)\n\n const [isDragging, setIsDragging] = useState(false)\n const [preview, setPreview] = useState<string | null>(null)\n\n useEffect(() => {\n if (!value) {\n setPreview(null)\n return\n }\n\n if (typeof value === 'string') {\n setPreview(value)\n return\n }\n\n const url = URL.createObjectURL(value)\n setPreview(url)\n return () => URL.revokeObjectURL(url)\n }, [value])\n\n const validate = useCallback(\n (file: File): boolean => {\n if (!ACCEPTED_TYPES.includes(file.type)) {\n toast.error('Invalid file type')\n return false\n }\n\n if (file.size > MAX_SIZE_BYTES) {\n toast.error('File is too large')\n return false\n }\n\n return true\n },\n [],\n )\n\n const handleFile = useCallback(\n (file: File | undefined | null) => {\n if (!file) return\n if (validate(file)) onChange(file)\n },\n [validate, onChange],\n )\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFile(e.target.files?.[0])\n e.target.value = ''\n }\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounter.current += 1\n if (!disabled) setIsDragging(true)\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounter.current -= 1\n if (dragCounter.current === 0) setIsDragging(false)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounter.current = 0\n setIsDragging(false)\n\n if (disabled) return\n handleFile(e.dataTransfer.files?.[0])\n }\n\n const handlePaste = useCallback(\n (e: ClipboardEvent) => {\n if (disabled) return\n\n const item = Array.from(e.clipboardData?.items ?? []).find((i) =>\n i.type.startsWith('image/'),\n )\n\n if (item) {\n handleFile(item.getAsFile())\n }\n },\n [disabled, handleFile],\n )\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation()\n onChange(null)\n if (inputRef.current) inputRef.current.value = ''\n }\n\n useEffect(() => {\n window.addEventListener('paste', handlePaste)\n return () => window.removeEventListener('paste', handlePaste)\n }, [handlePaste])\n\n return (\n <div className={cn('space-y-3', className)}>\n {label && <Label htmlFor={id}>{label}</Label>}\n\n <div\n id={id}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={'aria.dropzone'}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n inputRef.current?.click()\n }\n }}\n data-file={!!preview}\n className={cn(\n 'relative flex flex-col items-center justify-center gap-2 w-full rounded-xl border-3 border-dashed transition-colors cursor-pointer select-none',\n 'outline-none focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n isDragging\n ? 'border-(--success-drop) bg-(--success-drop)/5'\n : 'border-transparent bg-input',\n disabled && 'opacity-50 cursor-not-allowed pointer-events-none',\n preview ? 'p-0 overflow-hidden border-0' : 'min-h-48',\n previewClassName,\n )}\n style={\n {\n '--success-drop': 'var(--success)',\n '--success-drop-foreground': 'var(--success-foreground)',\n } as React.CSSProperties\n }\n >\n {preview ? (\n <div className=\"relative w-full\">\n <img\n src={preview}\n alt={'aria.preview'}\n className=\"size-full object-cover rounded-xl max-h-auto\"\n />\n\n {!disabled && (\n <Button\n size=\"icon\"\n type=\"button\"\n variant=\"destructive\"\n className=\"absolute top-2 right-2 size-6 rounded-full\"\n onClick={handleRemove}\n aria-label={'aria.remove'}\n >\n <Icon name=\"Xmark\" className=\"size-4\" />\n </Button>\n )}\n </div>\n ) : (\n <EmptyState\n variant=\"flat\"\n icon={isDragging ? 'Upload' : 'Image'}\n title={isDragging ? 'dropNow' : 'clickOrDrag'}\n description={'hint'}\n className={cn(\n 'bg-transparent p-6',\n isDragging ? '[--success-drop]' : '',\n )}\n />\n )}\n </div>\n\n <input\n type=\"file\"\n aria-hidden\n ref={inputRef}\n tabIndex={-1}\n className=\"sr-only\"\n disabled={disabled}\n onChange={handleInputChange}\n accept={ACCEPTED_TYPES.join(',')}\n />\n </div>\n )\n}\n\nImageUpload.displayName = 'ImageUpload'\n\nexport { ImageUpload }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nfunction Label({\n className,\n children,\n required,\n ...props\n}: React.ComponentProps<'label'> & {\n required?: boolean\n}) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n {required && <span className=\"text-destructive\">*</span>}\n </label>\n )\n}\n\nexport { Label }\n","import * as React from 'react'\n\nimport { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area'\n\nimport { cn } from '@/lib/cn'\n\nconst ScrollAreaRoot = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollAreaRoot.displayName = 'ScrollArea'\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Scrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' &&\n 'h-full w-2.5 border-l border-l-transparent p-px',\n orientation === 'horizontal' &&\n 'h-2.5 flex-col border-t border-t-transparent p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"relative flex-1 rounded-full bg-border hover:bg-muted-foreground transition-colors\" />\n </ScrollAreaPrimitive.Scrollbar>\n))\nScrollBar.displayName = 'ScrollBar'\n\nconst ScrollArea = Object.assign(ScrollAreaRoot, { ScrollBar })\nexport { ScrollArea }\n"],"mappings":"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M;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EA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","names":["motion","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","React","motion","mergeProps","React","Slot","jsx","jsxs","jsx","Button","mergeProps","jsx","jsxs","motion","Cookies","React","AnimatePresence","motion","React","cva","React","React","jsx","jsx","React","jsx","jsxs","jsx","React","jsx","jsxs","jsx","jsxs","open","cva","Fragment","jsx","jsxs","Cookies","handleMouseMove","handleMouseUp","rawWidth","open","AnimatePresence","motion","jsx","jsxs","jsx","Accordion","React","React","AnimatePresence","motion","React","jsx","jsxs","jsx","jsx","jsxs","AnimatePresence","motion","jsx","jsxs","React","cva","jsx","cva","cva","jsx","cva","React","useEffect","useState","jsx","jsxs","React","BrandDomainInput","useState","useEffect","jsx","jsxs","React","motion","jsx","React","motion","useEffect","useMemo","useState","useEffect","useRef","useState","jsx","jsxs","Fragment","jsx","jsxs","Icon","React","useMemo","motion","jsx","motion","useMemo","React","jsx","jsxs","useRef","useState","useEffect","jsx","useMemo","useState","useEffect","timer","jsx","useEffect","useMemo","useState","React","AnimatePresence","motion","React","jsx","React","SeparatorPrimitive","Fragment","jsx","jsxs","SelectTrigger","SeparatorPrimitive","jsx","jsxs","jsx","jsxs","_","AnimatePresence","motion","jsx","jsxs","jsx","jsxs","jsx","useMemo","table","useEffect","jsx","jsxs","React","createContext","useCallback","useContext","useEffect","useMemo","useState","React","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","createContext","useContext","useState","useCallback","useMemo","Dialog","React","useEffect","React","jsx","jsxs","props","jsx","jsxs","jsx","jsx","React","useEffect","useMemo","useRef","useState","intNum","jsx","jsxs","currencies","React","useState","useState","jsx","Icon","jsx","jsxs","countries","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","value","Fragment","jsx","jsxs","Fragment","jsx","useEffect","useState","AnimatePresence","motion","jsx","jsxs","useState","useEffect","AnimatePresence","motion","React","jsx","jsxs","jsx","jsxs","jsx","useCallback","useEffect","useRef","useState","useMemo","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useCallback","useMemo","useEffect","jsx","jsxs","jsx","cardShell","cardContentShell","jsx","parsePhoneNumberFromString","jsx","jsxs","parsePhoneNumberFromString","Text","jsx","jsx","twMerge","jsx","jsxs","twMerge","props","jsx","React","jsx","jsx","props","React","Fragment","jsx","jsxs","config","React","cva","jsx","cva","Fragment","jsx","jsxs","useCallback","useEffect","useRef","useState","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","useCallback","React","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/components/icon/sidebar-toggle.tsx","../src/components/icon/sidebar-toggled.tsx","../src/components/icon/custom-icons.tsx","../src/components/icon/variants.ts","../src/components/icon/brand/stripe.tsx","../src/components/icon/brand/index.tsx","../src/components/icon/nucleo-registry.ts","../src/components/icon/social/apple.tsx","../src/components/icon/social/discord.tsx","../src/components/icon/social/facebook.tsx","../src/components/icon/social/google.tsx","../src/components/icon/social/instagram.tsx","../src/components/icon/social/linkedin.tsx","../src/components/icon/social/messenger.tsx","../src/lib/cn.ts","../src/components/icon/social/whatsapp.tsx","../src/components/icon/social/x.tsx","../src/components/icon/social/youtube.tsx","../src/components/icon/social/index.tsx","../src/components/icon/index.tsx","../src/components/layouts/app-shell/announcement-banner.tsx","../src/hooks/use-is-client.ts","../src/components/ui/button/button.tsx","../src/hooks/use-haptics.tsx","../src/lib/slot.tsx","../src/components/ui/loader/loader.tsx","../src/components/layouts/app-shell/app-shell.tsx","../src/constants/animations.ts","../src/components/ui/sidebar/sidebar.tsx","../src/hooks/use-mobile.ts","../src/components/ui/input/input.tsx","../src/components/ui/separator/separator.tsx","../src/components/ui/sheet/sheet.tsx","../src/components/ui/skeleton/skeleton.tsx","../src/components/ui/tooltip/tooltip.tsx","../src/components/internal/accordion/accordion.tsx","../src/components/ui/accordion/accordion.tsx","../src/components/ui/action-group/action-group.tsx","../src/components/ui/dropdown-menu/dropdown-menu.tsx","../src/components/ui/drawer/drawer.tsx","../src/components/ui/dropdown-menu/keyboard-shortcut.tsx","../src/components/ui/alert/alert.tsx","../src/components/ui/badge/badge.tsx","../src/components/ui/brand-domain-input/index.tsx","../src/components/ui/breadcrumb/breadcrumb.tsx","../src/components/ui/button-group/button-group.tsx","../src/components/ui/card/card.tsx","../src/components/charts/core/background.tsx","../src/components/charts/core/brush.tsx","../src/components/charts/core/chart.tsx","../src/components/charts/core/dot.tsx","../src/components/charts/core/legend.tsx","../src/components/charts/core/tooltip.tsx","../src/components/charts/area-chart.tsx","../src/components/charts/bar-chart.tsx","../src/components/charts/line-chart.tsx","../src/components/charts/pie-chart.tsx","../src/components/charts/tracker-chart.tsx","../src/components/ui/chat-preview/index.tsx","../src/components/ui/chat-preview/chat.tsx","../src/components/ui/logo/onne/logo.tsx","../src/components/ui/logo/onnebook/logo.tsx","../src/components/ui/shimmer-text/shimmer-text.tsx","../src/components/ui/checkbox/checkbox.tsx","../src/components/ui/datatable/datatable.tsx","../src/hooks/use-data-table.ts","../src/components/ui/table/data-table.tsx","../src/components/ui/table/table.tsx","../src/components/ui/select/select.tsx","../src/components/ui/table/data-table-pagination.tsx","../src/components/ui/table/data-table-view-options.tsx","../src/components/ui/table/data-table-toolbar.tsx","../src/components/blocks/devices/safari.tsx","../src/components/blocks/devices/index.tsx","../src/components/ui/dialog/dialog.tsx","../src/components/internal/dialog/dialog.tsx","../src/components/ui/emoji-picker/emoji-picker.tsx","../src/components/ui/empty-state/empty-state.tsx","../src/components/ui/hover-card/hover-card.tsx","../src/components/ui/input-group/input-group.tsx","../src/components/ui/input-currency/index.tsx","../src/hooks/use-currency-input.ts","../src/hooks/use-element-size.ts","../src/components/ui/input-phone/index.tsx","../src/hooks/use-phone-input.ts","../src/components/ui/input-phone/masks.ts","../src/components/icon/flag.tsx","../src/components/icon/flag-registry.ts","../src/components/ui/input-time/input-time.tsx","../src/components/ui/input-time-picker/input-time-picker.tsx","../src/components/ui/input-time-unit/input-time-unit.tsx","../src/components/ui/kbd/kbd.tsx","../src/components/ui/language-switch/index.tsx","../src/components/blocks/marquee/marquee.tsx","../src/components/blocks/network-status/network-status.tsx","../src/components/ui/popover/popover.tsx","../src/components/ui/progress/progress.tsx","../src/components/ui/radio-group/radio-group.tsx","../src/components/ui/select-infinite-scroll/select-infinite-scroll.tsx","../src/hooks/use-infinite-custom-query.ts","../src/components/ui/select-multi/select-multi.tsx","../src/components/ui/slider/slider.tsx","../src/components/ui/table/data-table-column-header.tsx","../src/components/ui/tabs/tabs.tsx","../src/components/ui/text/cell.tsx","../src/components/ui/text/phone.tsx","../src/config/locales.ts","../src/components/ui/input-phone/dial-codes.ts","../src/components/ui/text/index.tsx","../src/components/ui/textarea/textarea.tsx","../src/components/ui/toast/toast.tsx","../src/config/themes.ts","../src/components/blocks/video-player/video-player.tsx","../src/components/ui/avatar/avatar.tsx","../src/components/ui/calendar/calendar.tsx","../src/components/ui/collapsible/collapsible.tsx","../src/components/ui/command/command.tsx","../src/components/internal/image-upload/index.tsx","../src/components/ui/label/label.tsx","../src/components/ui/scroll-area/scroll-area.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\n\nimport { motion } from 'motion/react'\n\nexport function SidebarToggle(props: React.ComponentProps<typeof motion.svg>) {\n return (\n <motion.svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M5 14L5 6C5 5.44772 5.44772 5 6 5L8 5C8.55228 5 9 5.44772 9 6L9 14C9 14.5523 8.55228 15 8 15L6 15C5.44772 15 5 14.5523 5 14Z\"\n fill=\"currentColor\"\n />\n\n <rect\n x=\"2\"\n y=\"2\"\n rx=\"4\"\n width=\"16\"\n height=\"16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </motion.svg>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { motion } from 'motion/react'\n\nexport function SidebarToggled(props: React.ComponentProps<typeof motion.svg>) {\n return (\n <motion.svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M5 14L5 6C5 5.44772 5.44772 5 6 5L8 5C8.55228 5 9 5.44772 9 6L9 14C9 14.5523 8.55228 15 8 15L6 15C5.44772 15 5 14.5523 5 14Z\"\n fill=\"currentColor\"\n style={{ clipPath: 'polygon(0 0, 60% 0, 60% 100%, 0 100%)' }}\n />\n\n <rect\n x=\"2\"\n y=\"2\"\n width=\"16\"\n height=\"16\"\n rx=\"4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </motion.svg>\n )\n}\n","import { SidebarToggle } from './sidebar-toggle'\nimport { SidebarToggled } from './sidebar-toggled'\n\nconst customIcons = {\n SidebarToggle,\n SidebarToggled,\n}\n\nexport default customIcons\n","import * as NucleoFill from 'nucleo-ui-fill-18'\nimport * as NucleoDuo from 'nucleo-ui-fill-duo-18'\n\nimport { BrandIcon } from './brand'\nimport customIcons from './custom-icons'\nimport { buildNucleoRegistry, type NucleoExportToName } from './nucleo-registry'\nimport { SocialIcon } from './social'\n\nexport const fillIcons = buildNucleoRegistry(NucleoFill, 'Fill18')\nexport const duoIcons = buildNucleoRegistry(NucleoDuo, 'FillDuo18')\n\nexport const iconVariants = {\n fill: fillIcons,\n duo: duoIcons,\n brand: BrandIcon,\n social: SocialIcon,\n custom: customIcons,\n} as const\n\nexport type IconVariant = keyof typeof iconVariants\n\ntype NucleoFillExports = keyof typeof NucleoFill\ntype NucleoDuoExports = keyof typeof NucleoDuo\n\nexport type FillIconName = NucleoExportToName<\n Extract<NucleoFillExports, `Icon${string}Fill18`>,\n 'Fill18'\n>\n\nexport type DuoIconName = NucleoExportToName<\n Extract<NucleoDuoExports, `Icon${string}FillDuo18`>,\n 'FillDuo18'\n>\n\nexport type BrandIconName = keyof typeof BrandIcon\nexport type SocialIconName = keyof typeof SocialIcon\nexport type CustomIconName = keyof typeof customIcons\n","import type { SVGProps } from 'react'\n\n/**\n * @description Stripe original colors\n * #635BFF\n */\n\ntype StripeProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Stripe = ({ original = false, ...props }: StripeProps) => (\n <svg {...props} viewBox=\"0 0 512 214\">\n <path\n className={original ? 'fill-[#635BFF]' : 'fill-current'}\n d=\"M512 110.08c0-36.409-17.636-65.138-51.342-65.138c-33.85 0-54.33 28.73-54.33 64.854c0 42.808 24.179 64.426 58.88 64.426c16.925 0 29.725-3.84 39.396-9.244v-28.445c-9.67 4.836-20.764 7.823-34.844 7.823c-13.796 0-26.027-4.836-27.591-21.618h69.547c0-1.85.284-9.245.284-12.658m-70.258-13.511c0-16.071 9.814-22.756 18.774-22.756c8.675 0 17.92 6.685 17.92 22.756zm-90.31-51.627c-13.939 0-22.899 6.542-27.876 11.094l-1.85-8.818h-31.288v165.83l35.555-7.537l.143-40.249c5.12 3.698 12.657 8.96 25.173 8.96c25.458 0 48.64-20.48 48.64-65.564c-.142-41.245-23.609-63.716-48.498-63.716m-8.534 97.991c-8.391 0-13.37-2.986-16.782-6.684l-.143-52.765c3.698-4.124 8.818-6.968 16.925-6.968c12.942 0 21.902 14.506 21.902 33.137c0 19.058-8.818 33.28-21.902 33.28M241.493 36.551l35.698-7.68V0l-35.698 7.538zm0 10.809h35.698v124.444h-35.698zm-38.257 10.524L200.96 47.36h-30.72v124.444h35.556V87.467c8.39-10.951 22.613-8.96 27.022-7.396V47.36c-4.551-1.707-21.191-4.836-29.582 10.524m-71.112-41.386l-34.702 7.395l-.142 113.92c0 21.05 15.787 36.551 36.836 36.551c11.662 0 20.195-2.133 24.888-4.693V140.8c-4.55 1.849-27.022 8.391-27.022-12.658V77.653h27.022V47.36h-27.022zM35.982 83.484c0-5.546 4.551-7.68 12.09-7.68c10.808 0 24.461 3.272 35.27 9.103V51.484c-11.804-4.693-23.466-6.542-35.27-6.542C19.2 44.942 0 60.018 0 85.192c0 39.252 54.044 32.995 54.044 49.92c0 6.541-5.688 8.675-13.653 8.675c-11.804 0-26.88-4.836-38.827-11.378v33.849c13.227 5.689 26.596 8.106 38.827 8.106c29.582 0 49.92-14.648 49.92-40.106c-.142-42.382-54.329-34.845-54.329-50.774\"\n />\n </svg>\n)\n\nexport { Stripe }\n","import type { SVGProps } from 'react'\n\nimport { Stripe } from './stripe'\n\nexport const BrandIcon = {\n Stripe,\n}\n\nexport type BrandIconProps = {\n original?: boolean\n} & SVGProps<SVGSVGElement>\n","import type { IconProps } from 'nucleo-ui-fill-18'\n\nimport type { ComponentType } from 'react'\n\ntype NucleoModule = Record<string, unknown>\n\nexport function buildNucleoRegistry(\n nucleoModule: NucleoModule,\n suffix: 'Fill18' | 'FillDuo18',\n): Record<string, ComponentType<IconProps>> {\n const registry: Record<string, ComponentType<IconProps>> = {}\n\n for (const exportName of Object.keys(nucleoModule)) {\n if (exportName === 'Icon' || !exportName.endsWith(suffix)) continue\n\n const name = exportName.slice(4, -suffix.length)\n const component = nucleoModule[exportName]\n\n if (typeof component === 'function') {\n registry[name] = component as ComponentType<IconProps>\n }\n }\n\n return registry\n}\n\nexport type NucleoExportToName<\n T extends string,\n TSuffix extends string,\n> = T extends `Icon${infer Name}${TSuffix}` ? Name : never\n","import type { SVGProps } from 'react'\n\n/**\n * @description Apple original colors\n *\n * Light: #000000\n * Dark: #ffffff\n */\n\ntype AppleProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Apple = ({ original = false, ...props }: AppleProps) => (\n <svg {...props} xmlSpace=\"preserve\" viewBox=\"0 0 814 1000\">\n <path\n d=\"M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z\"\n className={original ? 'fill-inverted' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Apple }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Discord original colors\n * #5865F2\n */\n\ntype DiscordProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Discord = ({ original = false, ...props }: DiscordProps) => (\n <svg {...props} viewBox=\"0 0 256 199\" preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M216.856 16.597A208.502 208.502 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046-19.692-2.961-39.203-2.961-58.533 0-1.832-4.4-4.55-9.933-6.846-14.046a207.809 207.809 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161.094 161.094 0 0 0 79.735 175.3a136.413 136.413 0 0 1-21.846-10.632 108.636 108.636 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a131.66 131.66 0 0 0 5.355 4.237 136.07 136.07 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848 21.142-6.58 42.646-16.637 64.815-33.213 5.316-56.288-9.08-105.09-38.056-148.36ZM85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2c12.867 0 23.236 11.804 23.015 26.2.02 14.375-10.148 26.18-23.015 26.18Zm85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2 0 14.375-10.148 26.18-23.015 26.18Z\"\n className={original ? 'fill-[#5865F2]' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Discord }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Facebook original colors\n * #1877F2\n */\n\ntype FacebookProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Facebook = ({ original = false, ...props }: FacebookProps) => (\n <svg {...props} viewBox=\"0 0 36 36\">\n <path\n className={original ? 'fill-[#1877F2]' : 'fill-current'}\n fillRule=\"evenodd\"\n d=\"M15 35.8C6.5 34.3 0 26.9 0 18 0 8.1 8.1 0 18 0s18 8.1 18 18c0 8.9-6.5 16.3-15 17.8l-1-.8h-4l-1 .8z M25 23l.8-5H21v-3.5c0-1.4.5-2.5 2.7-2.5H26V7.4c-1.3-.2-2.7-.4-4-.4-4.1 0-7 2.5-7 7v4h-4.5v5H15v12.7c1 .2 2 .3 3 .3s2-.1 3-.3V23h4z\"\n />\n </svg>\n)\n\nexport { Facebook }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Google original colors\n *\n * Path 1: #4285F4\n * Path 2: #34A853\n * Path 3: #FBBC05\n * Path 4: #EB4335\n *\n */\n\ntype GoogleProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Google = ({ original = false, ...props }: GoogleProps) => (\n <svg {...props} viewBox=\"0 0 256 262\" preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622 38.755 30.023 2.685.268c24.659-22.774 38.875-56.282 38.875-96.027\"\n className={original ? 'fill-[#4285F4]' : 'fill-current'}\n />\n <path\n d=\"M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055-34.523 0-63.824-22.773-74.269-54.25l-1.531.13-40.298 31.187-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1\"\n className={original ? 'fill-[#34A853]' : 'fill-current'}\n />\n <path\n d=\"M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82 0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602l42.356-32.782\"\n className={original ? 'fill-[#FBBC05]' : 'fill-current'}\n />\n <path\n d=\"M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0 79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251\"\n className={original ? 'fill-[#EB4335]' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Google }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Instagram original colors\n * #C13584\n */\n\ntype InstagramProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Instagram = ({ original = false, ...props }: InstagramProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n preserveAspectRatio=\"xMidYMid\"\n viewBox=\"0 0 256 256\"\n {...props}\n >\n {/* <circle cx=\"128\" cy=\"128\" r=\"130\" className=\"fill-white\" /> */}\n\n <path\n d=\"M128 23.064c34.177 0 38.225.13 51.722.745 12.48.57 19.258 2.655 23.769 4.408 5.974 2.322 10.238 5.096 14.717 9.575 4.48 4.479 7.253 8.743 9.575 14.717 1.753 4.511 3.838 11.289 4.408 23.768.615 13.498.745 17.546.745 51.723 0 34.178-.13 38.226-.745 51.723-.57 12.48-2.655 19.257-4.408 23.768-2.322 5.974-5.096 10.239-9.575 14.718-4.479 4.479-8.743 7.253-14.717 9.574-4.511 1.753-11.289 3.839-23.769 4.408-13.495.616-17.543.746-51.722.746-34.18 0-38.228-.13-51.723-.746-12.48-.57-19.257-2.655-23.768-4.408-5.974-2.321-10.239-5.095-14.718-9.574-4.479-4.48-7.253-8.744-9.574-14.718-1.753-4.51-3.839-11.288-4.408-23.768-.616-13.497-.746-17.545-.746-51.723 0-34.177.13-38.225.746-51.722.57-12.48 2.655-19.258 4.408-23.769 2.321-5.974 5.095-10.238 9.574-14.717 4.48-4.48 8.744-7.253 14.718-9.575 4.51-1.753 11.288-3.838 23.768-4.408 13.497-.615 17.545-.745 51.723-.745M128 0C93.237 0 88.878.147 75.226.77c-13.625.622-22.93 2.786-31.071 5.95-8.418 3.271-15.556 7.648-22.672 14.764C14.367 28.6 9.991 35.738 6.72 44.155 3.555 52.297 1.392 61.602.77 75.226.147 88.878 0 93.237 0 128c0 34.763.147 39.122.77 52.774.622 13.625 2.785 22.93 5.95 31.071 3.27 8.417 7.647 15.556 14.763 22.672 7.116 7.116 14.254 11.492 22.672 14.763 8.142 3.165 17.446 5.328 31.07 5.95 13.653.623 18.012.77 52.775.77s39.122-.147 52.774-.77c13.624-.622 22.929-2.785 31.07-5.95 8.418-3.27 15.556-7.647 22.672-14.763 7.116-7.116 11.493-14.254 14.764-22.672 3.164-8.142 5.328-17.446 5.95-31.07.623-13.653.77-18.012.77-52.775s-.147-39.122-.77-52.774c-.622-13.624-2.786-22.929-5.95-31.07-3.271-8.418-7.648-15.556-14.764-22.672C227.4 14.368 220.262 9.99 211.845 6.72c-8.142-3.164-17.447-5.328-31.071-5.95C167.122.147 162.763 0 128 0Zm0 62.27C91.698 62.27 62.27 91.7 62.27 128c0 36.302 29.428 65.73 65.73 65.73 36.301 0 65.73-29.428 65.73-65.73 0-36.301-29.429-65.73-65.73-65.73Zm0 108.397c-23.564 0-42.667-19.103-42.667-42.667S104.436 85.333 128 85.333s42.667 19.103 42.667 42.667-19.103 42.667-42.667 42.667Zm83.686-110.994c0 8.484-6.876 15.36-15.36 15.36-8.483 0-15.36-6.876-15.36-15.36 0-8.483 6.877-15.36 15.36-15.36 8.484 0 15.36 6.877 15.36 15.36Z\"\n className={original ? 'fill-[#C13584]' : 'fill-current'}\n />\n </svg>\n)\n\nexport { Instagram }\n","import type { SVGProps } from 'react'\n\n/**\n * @description LinkedIn original colors\n * #0A66C2\n */\n\ntype LinkedInProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst LinkedIn = ({ original = false, ...props }: LinkedInProps) => (\n <svg {...props} preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 256 256\">\n <path\n className={original ? 'fill-[#0A66C2]' : 'fill-current'}\n d=\"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453\"\n />\n </svg>\n)\n\nexport { LinkedIn }\n","import type { SVGProps } from 'react'\n\n/**\n * @description Messenger original colors\n * #0084ff\n */\n\ntype MessengerProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst Messenger = ({ original = false, ...props }: MessengerProps) => (\n <svg\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n preserveAspectRatio=\"xMidYMid\"\n {...props}\n >\n <path\n className={original ? 'fill-[#0084ff]' : 'fill-current'}\n fillRule=\"evenodd\"\n d=\"M128 0C55.894 0 0 52.818 0 124.16c0 37.317 15.293 69.562 40.2 91.835 2.09 1.871 3.352 4.493 3.438 7.298l.697 22.77c.223 7.262 7.724 11.988 14.37 9.054L84.111 243.9a10.218 10.218 0 0 1 6.837-.501c11.675 3.21 24.1 4.92 37.052 4.92 72.106 0 128-52.818 128-124.16S200.106 0 128 0ZM51.137 160.47l37.6-59.653c5.98-9.49 18.788-11.853 27.762-5.123l29.905 22.43a7.68 7.68 0 0 0 9.252-.027l40.388-30.652c5.39-4.091 12.428 2.36 8.82 8.085l-37.6 59.654c-5.981 9.489-18.79 11.852-27.763 5.122l-29.906-22.43a7.68 7.68 0 0 0-9.25.027l-40.39 30.652c-5.39 4.09-12.427-2.36-8.818-8.085Z\"\n />\n\n <path\n className={original ? 'fill-white' : 'fill-transparent'}\n d=\"m51.137 160.47 37.6-59.653c5.98-9.49 18.788-11.853 27.762-5.123l29.905 22.43a7.68 7.68 0 0 0 9.252-.027l40.388-30.652c5.39-4.091 12.428 2.36 8.82 8.085l-37.6 59.654c-5.981 9.489-18.79 11.852-27.763 5.122l-29.906-22.43a7.68 7.68 0 0 0-9.25.027l-40.39 30.652c-5.39 4.09-12.427-2.36-8.818-8.085Z\"\n />\n </svg>\n)\n\nexport { Messenger }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import type { SVGProps } from 'react'\n\nimport { cn } from '@/lib/cn'\n\n/**\n * @description WhatsApp original colors\n *\n * Light: #00E676\n * Dark: #144d37\n */\n\ntype WhatsAppProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst WhatsApp = ({ original = false, ...props }: WhatsAppProps) => {\n const pathFill = !props.className?.includes('fill-') && 'fill-transparent'\n\n return (\n <svg {...props} viewBox=\"0 0 256 259\" preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"m67.663 221.823 4.185 2.093c17.44 10.463 36.971 15.346 56.503 15.346 61.385 0 111.609-50.224 111.609-111.609 0-29.297-11.859-57.897-32.785-78.824-20.927-20.927-48.83-32.785-78.824-32.785-61.385 0-111.61 50.224-110.912 112.307 0 20.926 6.278 41.156 16.741 58.594l2.79 4.186-11.16 41.156 41.853-10.464Z\"\n className={cn(original ? 'fill-[#00E676]' : pathFill)}\n />\n <path\n d=\"M219.033 37.668C195.316 13.254 162.531 0 129.048 0 57.898 0 .698 57.897 1.395 128.35c0 22.322 6.278 43.947 16.742 63.478L0 258.096l67.663-17.439c18.834 10.464 39.76 15.347 60.688 15.347 70.453 0 127.653-57.898 127.653-128.35 0-34.181-13.254-66.269-36.97-89.986ZM129.048 234.38c-18.834 0-37.668-4.882-53.712-14.648l-4.185-2.093-40.458 10.463 10.463-39.76-2.79-4.186C7.673 134.63 22.322 69.058 72.546 38.365c50.224-30.692 115.097-16.043 145.79 34.181 30.692 50.224 16.043 115.097-34.18 145.79-16.045 10.463-35.576 16.043-55.108 16.043Zm61.385-77.428-7.673-3.488s-11.16-4.883-18.136-8.371c-.698 0-1.395-.698-2.093-.698-2.093 0-3.488.698-4.883 1.396 0 0-.697.697-10.463 11.858-.698 1.395-2.093 2.093-3.488 2.093h-.698c-.697 0-2.092-.698-2.79-1.395l-3.488-1.395c-7.673-3.488-14.648-7.674-20.229-13.254-1.395-1.395-3.488-2.79-4.883-4.185-4.883-4.883-9.766-10.464-13.253-16.742l-.698-1.395c-.697-.698-.697-1.395-1.395-2.79 0-1.395 0-2.79.698-3.488 0 0 2.79-3.488 4.882-5.58 1.396-1.396 2.093-3.488 3.488-4.883 1.395-2.093 2.093-4.883 1.395-6.976-.697-3.488-9.068-22.322-11.16-26.507-1.396-2.093-2.79-2.79-4.883-3.488H83.01c-1.396 0-2.79.698-4.186.698l-.698.697c-1.395.698-2.79 2.093-4.185 2.79-1.395 1.396-2.093 2.79-3.488 4.186-4.883 6.278-7.673 13.951-7.673 21.624 0 5.58 1.395 11.161 3.488 16.044l.698 2.093c6.278 13.253 14.648 25.112 25.81 35.575l2.79 2.79c2.092 2.093 4.185 3.488 5.58 5.58 14.649 12.557 31.39 21.625 50.224 26.508 2.093.697 4.883.697 6.976 1.395h6.975c3.488 0 7.673-1.395 10.464-2.79 2.092-1.395 3.487-1.395 4.882-2.79l1.396-1.396c1.395-1.395 2.79-2.092 4.185-3.487 1.395-1.395 2.79-2.79 3.488-4.186 1.395-2.79 2.092-6.278 2.79-9.765v-4.883s-.698-.698-2.093-1.395Z\"\n className={original ? 'fill-white' : 'fill-current'}\n />\n </svg>\n )\n}\n\nexport { WhatsApp }\n","import type { SVGProps } from 'react'\n\n/**\n * @description X (formerly Twitter) original colors\n * #000000\n */\n\ntype XProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst XformerlyTwitter = ({ original = false, ...props }: XProps) => (\n <svg {...props} viewBox=\"0 0 1200 1227\" fill=\"none\">\n <path\n className={original ? 'fill-[#000000]' : 'fill-current'}\n d=\"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z\"\n />\n </svg>\n)\n\nexport { XformerlyTwitter }\n","import type { SVGProps } from 'react'\n\n/**\n * @description YouTube original colors\n * #FF0000\n */\n\ntype YouTubeProps = SVGProps<SVGSVGElement> & {\n original?: boolean\n}\n\nconst YouTube = ({ original = false, ...props }: YouTubeProps) => (\n <svg {...props} preserveAspectRatio=\"xMidYMid\" viewBox=\"0 0 256 180\">\n <path\n className={original ? 'fill-[#FF0000]' : 'fill-current'}\n fillRule=\"evenodd\"\n d=\"M250.346 28.075A32.18 32.18 0 0 0 227.69 5.418C207.824 0 127.87 0 127.87 0S47.912.164 28.046 5.582A32.18 32.18 0 0 0 5.39 28.24c-6.009 35.298-8.34 89.084.165 122.97a32.18 32.18 0 0 0 22.656 22.657c19.866 5.418 99.822 5.418 99.822 5.418s79.955 0 99.82-5.418a32.18 32.18 0 0 0 22.657-22.657c6.338-35.348 8.291-89.1-.164-123.134Z M102.421 128.06 L168.749 89.642 L102.421 51.224 Z\"\n />\n </svg>\n)\n\nexport { YouTube }\n","import type { SVGProps } from 'react'\n\nimport { Apple } from './apple'\nimport { Discord } from './discord'\nimport { Facebook } from './facebook'\nimport { Google } from './google'\nimport { Instagram } from './instagram'\nimport { LinkedIn } from './linkedin'\nimport { Messenger } from './messenger'\nimport { WhatsApp } from './whatsapp'\nimport { XformerlyTwitter } from './x'\nimport { YouTube } from './youtube'\n\nexport const SocialIcon = {\n Apple,\n Google,\n WhatsApp,\n Facebook,\n Instagram,\n Messenger,\n LinkedIn,\n X: XformerlyTwitter,\n YouTube,\n Discord,\n}\n\nexport type SocialIconProps = {\n original?: boolean\n} & SVGProps<SVGSVGElement>\n","import type { IconProps as NucleoIconProps } from 'nucleo-ui-fill-18'\n\nimport type { ComponentType } from 'react'\n\nimport type { BrandIconProps } from './brand'\nimport customIcons from './custom-icons'\nimport type { SocialIconProps } from './social'\nimport {\n type BrandIconName,\n type CustomIconName,\n type DuoIconName,\n type FillIconName,\n fillIcons,\n type IconVariant,\n iconVariants,\n type SocialIconName,\n} from './variants'\n\nexport type {\n BrandIconName,\n CustomIconName,\n DuoIconName,\n FillIconName,\n IconVariant,\n SocialIconName,\n} from './variants'\n\n/** @deprecated Use `FillIconName` or variant-specific names */\nexport type IconType = FillIconName | CustomIconName\n\n/** SVG props shared by all icon variants (excludes `name` and `variant`). */\nexport type IconSharedProps = Omit<NucleoIconProps, 'name' | 'variant'>\n\nexport type ThemeIcon =\n | FillIconName\n | CustomIconName\n | { variant: 'brand'; name: BrandIconName }\n\ntype FillVariantProps = {\n variant?: 'fill'\n name: FillIconName | CustomIconName\n} & NucleoIconProps\n\ntype DuoVariantProps = {\n variant: 'duo'\n name: DuoIconName\n} & NucleoIconProps\n\ntype BrandVariantProps = {\n variant: 'brand'\n name: BrandIconName\n} & BrandIconProps\n\ntype SocialVariantProps = {\n variant: 'social'\n name: SocialIconName\n} & SocialIconProps\n\ntype CustomVariantProps = {\n variant: 'custom'\n name: CustomIconName\n} & NucleoIconProps\n\nexport type IconProps =\n | FillVariantProps\n | DuoVariantProps\n | BrandVariantProps\n | SocialVariantProps\n | CustomVariantProps\n\nfunction resolveIconComponent(\n variant: IconVariant,\n name: string,\n): ComponentType<NucleoIconProps> | null {\n if (variant === 'fill') {\n return (\n fillIcons[name as FillIconName] ??\n customIcons[name as CustomIconName] ??\n null\n )\n }\n\n const registry = iconVariants[variant]\n const component = registry[name as keyof typeof registry]\n\n return (component as ComponentType<NucleoIconProps>) ?? null\n}\n\nexport function resolveThemeIcon(icon: ThemeIcon | IconType): IconProps {\n if (typeof icon === 'string') {\n return { name: icon }\n }\n\n return icon\n}\n\nexport const Icon = (props: IconProps) => {\n const { name, variant, ...rest } = props\n\n if (!name) return null\n const resolvedVariant: IconVariant =\n variant ?? (name in customIcons ? 'custom' : 'fill')\n\n const IconComponent = resolveIconComponent(resolvedVariant, name)\n if (!IconComponent) return null\n\n return <IconComponent suppressHydrationWarning {...rest} />\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsClient } from '@/hooks/use-is-client'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\n\nexport const ANNOUNCEMENT_TYPES = {\n CRITICAL: 'CRITICAL',\n ERROR: 'ERROR',\n INFO: 'INFO',\n MAINTENANCE: 'MAINTENANCE',\n NEW: 'NEW',\n SALE: 'SALE',\n SUCCESS: 'SUCCESS',\n UPDATE: 'UPDATE',\n WARNING: 'WARNING',\n} as const\n\nexport type AnnouncementType =\n (typeof ANNOUNCEMENT_TYPES)[keyof typeof ANNOUNCEMENT_TYPES]\n\nconst ANNOUNCEMENT_COLORS: Record<\n AnnouncementType,\n { background: string; foreground: string }\n> = {\n [ANNOUNCEMENT_TYPES.NEW]: {\n background: 'var(--color-info)',\n foreground: 'var(--color-info-foreground)',\n },\n [ANNOUNCEMENT_TYPES.SALE]: {\n background: 'var(--color-success)',\n foreground: 'var(--color-success-foreground)',\n },\n [ANNOUNCEMENT_TYPES.WARNING]: {\n background: 'var(--color-warning)',\n foreground: 'var(--color-warning-foreground)',\n },\n [ANNOUNCEMENT_TYPES.INFO]: {\n background: 'var(--color-info)',\n foreground: 'var(--color-info-foreground)',\n },\n [ANNOUNCEMENT_TYPES.SUCCESS]: {\n background: 'var(--color-success)',\n foreground: 'var(--color-success-foreground)',\n },\n [ANNOUNCEMENT_TYPES.ERROR]: {\n background: 'var(--color-destructive)',\n foreground: 'var(--color-destructive-foreground)',\n },\n [ANNOUNCEMENT_TYPES.CRITICAL]: {\n background: 'var(--color-destructive)',\n foreground: 'var(--color-destructive-foreground)',\n },\n [ANNOUNCEMENT_TYPES.MAINTENANCE]: {\n background: 'var(--color-warning)',\n foreground: 'var(--color-warning-foreground)',\n },\n [ANNOUNCEMENT_TYPES.UPDATE]: {\n background: 'var(--color-info)',\n foreground: 'var(--color-info-foreground)',\n },\n}\n\nfunction resolveAnnouncementType(type: string): AnnouncementType {\n if ((Object.values(ANNOUNCEMENT_TYPES) as string[]).includes(type)) {\n return type as AnnouncementType\n }\n\n return ANNOUNCEMENT_TYPES.NEW\n}\n\nconst ANNOUNCEMENT_BANNER_HEIGHT = 40\n\nfunction RoundedCornerTriangle({ className }: { className?: string }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('fill-(--banner)', className)}\n >\n <path d=\"M 0 -1 L 0 12 A 12 12, 0, 0, 1, 12 0 L 12 -1 Z\" />\n </svg>\n )\n}\n\nexport type AnnouncementBannerProps = {\n /** Banner message. The banner is not rendered when empty. */\n message?: string\n /** Semantic type; controls the color pair. Unknown values fall back to `NEW`. */\n type?: AnnouncementType | (string & NonNullable<unknown>)\n /** Chip label shown before the message on desktop. Defaults to the type itself — pass a translated label if needed. */\n typeLabel?: string\n /** Hides the close button when `false`. */\n dismissible?: boolean\n /** Called when the user dismisses the banner. */\n onDismiss?: () => void\n /** Optional `id` for the close button (e.g. an analytics id). */\n closeButtonId?: string\n className?: string\n}\n\n/**\n * Fixed top banner for product announcements. Sets the global\n * `--announcement-height` CSS variable (used by `AppShell` to offset the\n * viewport height) and auto-marquees messages that overflow the available\n * width.\n */\nexport function AnnouncementBanner({\n message = '',\n type = ANNOUNCEMENT_TYPES.NEW,\n typeLabel,\n dismissible = true,\n onDismiss,\n closeButtonId,\n className,\n}: AnnouncementBannerProps) {\n const mounted = useIsClient()\n\n const [hidden, setHidden] = React.useState(false)\n\n const announcementColors = ANNOUNCEMENT_COLORS[resolveAnnouncementType(type)]\n\n const hasAnnouncement = message.length > 0\n\n const announcementTypeLabel = typeLabel ?? type\n\n const messageContainerRef = React.useRef<HTMLDivElement>(null)\n const messageTextRef = React.useRef<HTMLSpanElement>(null)\n\n const [messageScroll, setMessageScroll] = React.useState({\n delta: 0,\n overflow: false,\n })\n\n const handleHide = () => {\n setHidden(true)\n onDismiss?.()\n }\n\n React.useLayoutEffect(() => {\n const container = messageContainerRef.current\n const text = messageTextRef.current\n\n if (!container || !text) return\n\n const update = () => {\n const available = container.clientWidth\n const full = text.scrollWidth\n\n const delta = Math.max(0, full - available)\n const overflow = delta > 1\n\n setMessageScroll((prev) =>\n prev.delta === delta && prev.overflow === overflow\n ? prev\n : { delta, overflow },\n )\n }\n\n update()\n\n const ro = new ResizeObserver(update)\n ro.observe(container)\n\n const parent = container.parentElement\n if (parent) {\n ro.observe(parent)\n }\n\n window.addEventListener('resize', update)\n\n return () => {\n ro.disconnect()\n window.removeEventListener('resize', update)\n }\n }, [message, hasAnnouncement])\n\n React.useEffect(() => {\n if (hidden || !hasAnnouncement) {\n document.documentElement.style.setProperty('--announcement-height', '0px')\n return\n }\n\n document.documentElement.style.setProperty(\n '--announcement-height',\n `${ANNOUNCEMENT_BANNER_HEIGHT}px`,\n )\n\n return () => {\n document.documentElement.style.setProperty('--announcement-height', '0px')\n }\n }, [hasAnnouncement, hidden])\n\n if (!mounted || hidden || !hasAnnouncement) return null\n\n return (\n <>\n <div className=\"h-10 shrink-0\" />\n\n <AnimatePresence mode=\"popLayout\">\n <motion.div\n data-slot=\"announcement-banner\"\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.3 }}\n className={cn(\n 'fixed top-0 left-0 right-0 z-50 flex min-h-0 w-full flex-col bg-(--banner) text-(--banner-foreground)',\n className,\n )}\n style={\n {\n '--banner': announcementColors.background,\n '--banner-foreground': announcementColors.foreground,\n } as React.CSSProperties\n }\n >\n <div className=\"flex h-10 min-w-0 items-center gap-2 px-2.5 sm:px-4\">\n <div className=\"flex min-w-0 flex-1 items-center justify-center\">\n <div\n className={cn(\n 'flex min-w-0 items-center gap-2',\n messageScroll.overflow\n ? 'w-full max-w-full justify-start'\n : 'w-auto max-w-full',\n )}\n >\n <div className=\"hidden lg:flex shrink-0 items-center justify-center transition duration-200 ease-out h-4 gap-1.5 uppercase rounded-[5px] px-1.25 text-[9px] leading-[11px] font-semibold tracking-[0.18px] bg-(--banner-foreground)/20 text-(--banner-foreground) pointer-events-none select-none\">\n {announcementTypeLabel}\n </div>\n\n <div\n ref={messageContainerRef}\n className={cn(\n 'min-w-0 overflow-hidden',\n messageScroll.overflow && 'min-w-0 flex-1',\n )}\n >\n <motion.span\n ref={messageTextRef}\n className=\"inline-block text-xs sm:text-sm whitespace-nowrap will-change-transform\"\n animate={\n messageScroll.overflow\n ? {\n x: [\n 0,\n 0,\n -messageScroll.delta,\n -messageScroll.delta,\n 0,\n 0,\n ],\n }\n : { x: 0 }\n }\n transition={\n messageScroll.overflow\n ? {\n duration: Math.max(12, messageScroll.delta / 8),\n repeat: Infinity,\n ease: 'easeInOut',\n times: [0, 0.12, 0.35, 0.5, 0.75, 1],\n }\n : { duration: 0 }\n }\n >\n {message}\n </motion.span>\n </div>\n </div>\n </div>\n\n {dismissible && (\n <div className=\"flex shrink-0\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n id={closeButtonId}\n onClick={handleHide}\n className=\"hover:bg-(--banner-foreground)/20! hover:text-(--banner-foreground)! max-h-8 max-w-8 shrink-0\"\n >\n <Icon name=\"Xmark\" />\n </Button>\n </div>\n )}\n </div>\n\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 hidden h-3 translate-y-full lg:block\">\n <RoundedCornerTriangle className=\"absolute left-0\" />\n <RoundedCornerTriangle className=\"absolute right-0 -scale-x-100\" />\n </div>\n </motion.div>\n </AnimatePresence>\n </>\n )\n}\n","import { useSyncExternalStore } from 'react'\n\n/**\n * True after client hydration; false on the server. Prefer over useEffect(() => setMounted(true)).\n *\n * @see https://react.dev/reference/react/useSyncExternalStore\n */\nconst subscribe = () => () => {}\n\nexport function useIsClient() {\n return useSyncExternalStore(\n subscribe,\n () => true,\n () => false,\n )\n}\n","'use client';\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { mergeProps } from '@base-ui/react/merge-props';\n\nimport * as React from 'react';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { useHaptics } from '@/hooks/use-haptics';\n\nimport { composeRefs } from '@/lib/slot';\n\nimport { Loader } from '../loader';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-medium transition-[transform,opacity,background-color,box-shadow,filter] duration-150 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer active:scale-[0.96] hover:brightness-95 select-none\",\n {\n variants: {\n variant: {\n default: 'bg-foreground text-background hover:bg-foreground/90',\n destructive:\n 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n success:\n 'bg-success text-white hover:bg-success/90 focus-visible:ring-success/20 dark:focus-visible:ring-success/40 dark:bg-success/60',\n outline: 'bg-card',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-input text-foreground',\n ghost: 'hover:bg-card hover:text-muted-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n sm: 'h-8 gap-1.5 px-3 has-[>svg]:px-2.5! data-[loading=true]:w-8!',\n default: 'h-10 px-4 py-2 has-[>svg]:px-3! data-[loading=true]:w-10!',\n lg: 'h-10 px-5 px-6 has-[>svg]:px-4! data-[loading=true]:w-12!',\n 'icon-sm': 'size-8',\n icon: 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\ntype InternalVariantProps = VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n isLoading?: boolean;\n};\n\nexport type ButtonVariants = InternalVariantProps['variant'];\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & InternalVariantProps\n>(function Button(\n {\n variant,\n size = 'default',\n asChild = false,\n isLoading = false,\n disabled,\n className,\n children,\n ...props\n },\n forwardedRef,\n) {\n const { trigger } = useHaptics();\n\n const ref = React.useRef<HTMLElement>(null);\n\n const buttonWidth = React.useRef<number | null>(null);\n const buttonHeight = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n if (ref.current && !isLoading) {\n const bounds = ref.current.getBoundingClientRect();\n\n buttonWidth.current = bounds.width;\n buttonHeight.current = bounds.height;\n }\n }, [isLoading]);\n\n const isFullWidth = className?.includes('w-full');\n\n const buttonStyle: React.CSSProperties = {\n ...props.style,\n ...(isLoading && buttonWidth.current && !isFullWidth\n ? { minWidth: buttonWidth.current }\n : {}),\n ...(isLoading && buttonHeight.current\n ? { minHeight: buttonHeight.current }\n : {}),\n };\n\n const content = isLoading ? (\n <Loader variant=\"button\" />\n ) : (\n (children as React.ReactNode)\n );\n\n return (\n <ButtonPrimitive\n ref={composeRefs(ref, forwardedRef)}\n nativeButton={!asChild}\n render={\n asChild && React.isValidElement<Record<string, unknown>>(children)\n ? buttonProps =>\n React.cloneElement(\n children,\n mergeProps(\n buttonProps as React.ComponentPropsWithRef<'button'>,\n children.props as React.ComponentPropsWithRef<'button'>,\n ),\n isLoading ? (\n <Loader variant=\"button\" />\n ) : (\n (children.props.children as React.ReactNode)\n ),\n )\n : undefined\n }\n data-slot=\"button\"\n data-size={size}\n data-variant={variant}\n data-loading={isLoading}\n disabled={disabled || isLoading}\n className={buttonVariants({ variant, size, className })}\n {...props}\n style={buttonStyle}\n onClick={e => {\n trigger('click');\n props.onClick?.(e);\n }}\n >\n {asChild ? null : content}\n </ButtonPrimitive>\n );\n});\n\nexport { Button, buttonVariants };\n","'use client';\n\nimport { useWebHaptics } from 'web-haptics/react';\n\nexport const useHaptics = () => {\n const { trigger } = useWebHaptics();\n\n const triggerHaptics = (\n type: 'click' | 'success' | 'error' | 'warning' | 'info',\n ) => {\n switch (type) {\n case 'click':\n trigger([{ duration: 8 }], { intensity: 0.5 });\n break;\n case 'success':\n trigger([{ duration: 30 }, { delay: 60, duration: 40, intensity: 1 }]);\n break;\n case 'error':\n trigger(\n [\n { duration: 40 },\n { delay: 40, duration: 40 },\n { delay: 40, duration: 40 },\n ],\n { intensity: 0.9 },\n );\n break;\n case 'warning':\n trigger([\n { duration: 40, intensity: 0.8 },\n { delay: 100, duration: 40, intensity: 0.6 },\n ]);\n break;\n case 'info':\n trigger([\n { duration: 80, intensity: 0.8 },\n { delay: 80, duration: 50, intensity: 0.3 },\n ]);\n break;\n }\n };\n\n return { trigger: triggerHaptics };\n};\n","import * as React from 'react'\n\nimport { mergeProps } from '@base-ui/react/merge-props'\n\ntype AnyProps = Record<string, unknown>\n\nfunction composeRefs<T>(\n ...refs: Array<React.Ref<T> | null | undefined>\n): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref != null) {\n const mutableRef = ref as React.MutableRefObject<T | null>\n mutableRef.current = node\n }\n }\n }\n}\n\n/**\n * Merges its props into its single child element (Radix `Slot` replacement),\n * composing event handlers, `className`, `style` and refs.\n */\nconst Slot = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n function Slot({ children, ...slotProps }, forwardedRef) {\n if (!React.isValidElement(children)) return null\n\n const childProps = children.props as AnyProps\n const childRef = (children as unknown as { ref?: React.Ref<HTMLElement> })\n .ref\n\n return React.cloneElement(children, {\n ...mergeProps(slotProps as AnyProps, childProps),\n ref: composeRefs(forwardedRef, childRef),\n } as AnyProps)\n },\n)\n\nexport { composeRefs, Slot }\n","'use client';\n\nimport { cn } from '@/lib/cn';\n\nexport function Loader({\n text,\n variant = 'default',\n className,\n iconClassName,\n}: {\n text?: string;\n variant?: 'default' | 'screen' | 'center' | 'button' | 'clean';\n className?: string;\n iconClassName?: string;\n}) {\n const defaultClasses = cn(\n /**\n * Default inline layout: icon and text centered\n * side by side.\n */\n variant === 'default' && 'flex flex-col justify-center items-center gap-2',\n /**\n * Center the loader in the center of the screen\n * if the variant is 'center'.\n */\n variant === 'center' &&\n 'flex flex-col flex-1 justify-center items-center gap-4 min-h-dvh',\n /**\n * Center the loader in the center of the screen\n * if the variant is 'screen'.\n */\n variant === 'screen' &&\n 'flex flex-col flex-1 justify-center items-center gap-4 min-h-dvh min-w-dvw',\n /**\n * Add padding to the loader if the variant is 'clean'.\n */\n variant === 'clean' &&\n 'flex flex-col flex-1 justify-center items-center gap-4 p-24',\n /**\n * Add text color to the loader if the variant\n * is not 'button' to make it less visible.\n */\n variant !== 'button' && 'text-muted-foreground',\n );\n\n return (\n <div suppressHydrationWarning className={cn(defaultClasses, className)}>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n xmlns=\"http://www.w3.org/2000/svg\"\n suppressHydrationWarning\n className={cn(\n 'animate-spin text-current shrink-0',\n variant === 'button' ? 'w-4 h-4' : 'w-5 h-5',\n iconClassName,\n )}\n >\n <path d=\"M12 2v4\" />\n <path d=\"m16.2 7.8 2.9-2.9\" />\n <path d=\"M18 12h4\" />\n <path d=\"m16.2 16.2 2.9 2.9\" />\n <path d=\"M12 18v4\" />\n <path d=\"m4.9 19.1 2.9-2.9\" />\n <path d=\"M2 12h4\" />\n <path d=\"m4.9 4.9 2.9 2.9\" />\n </svg>\n\n {text && <span className=\"text-current\">{text}</span>}\n </div>\n );\n}\n","'use client'\n\nimport Cookies from 'js-cookie'\n\nimport * as React from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { ANIMATION } from '@/constants/animations'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { Loader } from '@/components/ui/loader'\nimport { Sidebar, SIDEBAR_WIDTH } from '@/components/ui/sidebar'\nimport { Tooltip } from '@/components/ui/tooltip'\n\n/**\n * Application shell layout, composition-first. Encodes the structure of our\n * dashboards — inset resizable sidebars, glass sticky header, floating mobile\n * navbar, announcement-aware viewport — while leaving every region up to the\n * consumer.\n *\n * Both sidebars share the exact same mechanics and API: a panel component, a\n * trigger and per-side state (cookies + keyboard shortcut) enabled by the\n * `leftSidebar`/`rightSidebar` props on the root. Each side is independent —\n * a product can enable only the left one, only the right one, or both:\n *\n * ```tsx\n * <AnnouncementBanner message=\"…\" type=\"NEW\" />\n *\n * <AppShell leftSidebar rightSidebar={{ defaultOpen: false }}>\n * <AppShell.LeftSidebar>\n * <AppShell.SidebarHeader>…logo + actions…</AppShell.SidebarHeader>\n * <AppShell.SidebarSection>…workspace switcher…</AppShell.SidebarSection>\n * <AppShell.SidebarContent>\n * <AppShell.SidebarGroup title=\"Geral\">\n * <AppShell.SidebarItem icon=\"House6\" title=\"Visão Geral\" href=\"/\" active />\n * </AppShell.SidebarGroup>\n * </AppShell.SidebarContent>\n * <AppShell.SidebarFooter>…copyright + user…</AppShell.SidebarFooter>\n * </AppShell.LeftSidebar>\n *\n * <AppShell.Navbar>…mobile items…</AppShell.Navbar>\n *\n * <AppShell.Inset>\n * <AppShell.Header title={…} actions={…} />\n * <MyPage />\n * </AppShell.Inset>\n *\n * <AppShell.RightSidebar>…</AppShell.RightSidebar>\n * </AppShell>\n * ```\n *\n * On mobile the sidebars are hidden entirely — navigation belongs to\n * `AppShell.Navbar`. `AppShell.Header` automatically renders one toggle per\n * enabled side (left before the title, right after the actions), so any\n * sidebar combination — none, left only, right only, both — gets exactly\n * the toggles that apply. `AppShell.LeftSidebarTrigger` and\n * `AppShell.RightSidebarTrigger` exist for custom placements (both accept a\n * custom `icon`), and `useLeftSidebarToggle`/`useRightSidebarToggle` expose\n * just the toggle function for fully custom elements.\n */\nfunction AppShellRoot({\n leftSidebar,\n rightSidebar,\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n /**\n * Enables the left sidebar state (`[` shortcut, cookie persistence, header\n * toggle). Pass `{ defaultOpen: false }` to start collapsed.\n */\n leftSidebar?: AppShellSidebarProp\n /**\n * Enables the right (context) sidebar state (`]` shortcut, cookie\n * persistence). Pass `{ defaultOpen: false }` to start collapsed.\n */\n rightSidebar?: AppShellSidebarProp\n}) {\n return (\n <OptionalSidebarProvider side=\"left\" config={leftSidebar}>\n <OptionalSidebarProvider side=\"right\" config={rightSidebar}>\n <div\n data-slot=\"app-shell\"\n className={cn(\n 'has-data-[variant=inset]:bg-sidebar flex w-full',\n 'relative flex-1 min-h-[calc(100svh-var(--announcement-height,0px))] max-lg:bg-dashboard-background!',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </OptionalSidebarProvider>\n </OptionalSidebarProvider>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Sidebars (left / right)\n *\n * A single implementation parameterized by side. Each side has its own\n * context/provider (open state + width, persisted in cookies, toggled by a\n * keyboard shortcut), an inset panel with a drag-to-resize rail (click\n * toggles, double click resets to the default width, dragging resizes\n * between 16–20rem and collapses past the threshold) and a trigger button.\n * ---------------------------------------------------------------------- */\n\nconst MIN_SIDEBAR_WIDTH = 16 * 16 // 16rem\nconst MAX_SIDEBAR_WIDTH = 20 * 16 // 20rem\nconst COLLAPSE_THRESHOLD = MIN_SIDEBAR_WIDTH / 2 // 8rem — collapse only past half minimum\n\nconst SIDEBAR_COOKIE_TTL_DAYS = 365\n\ntype AppShellSidebarSide = 'left' | 'right'\n\n// Cookies, CSS vars and data-slots are all prefixed by the side name, and\n// deliberately distinct from ui/sidebar's own `--sidebar-width`/`sidebar-*`\n// cookie names so a standalone `Sidebar` nested anywhere in the shell never\n// collides with the shell state.\nconst SIDEBAR_SIDE_CONFIG = {\n left: {\n defaultWidth: SIDEBAR_WIDTH,\n widthVar: '--left-sidebar-width',\n widthCookie: 'left-sidebar-width',\n stateCookie: 'left-sidebar-state',\n wrapperSlot: 'left-sidebar-wrapper',\n gapSlot: 'left-sidebar-gap',\n containerSlot: 'left-sidebar-container',\n keyboardShortcut: '[',\n },\n right: {\n defaultWidth: '20rem',\n widthVar: '--right-sidebar-width',\n widthCookie: 'right-sidebar-width',\n stateCookie: 'right-sidebar-state',\n wrapperSlot: 'right-sidebar-wrapper',\n gapSlot: 'right-sidebar-gap',\n containerSlot: 'right-sidebar-container',\n keyboardShortcut: ']',\n },\n} as const\n\ntype AppShellSidebarContextValue = {\n side: AppShellSidebarSide\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n toggleSidebar: () => void\n sidebarWidth: string\n setSidebarWidth: (width: string) => void\n}\n\nconst AppShellLeftSidebarContext =\n React.createContext<AppShellSidebarContextValue | null>(null)\n\nconst AppShellRightSidebarContext =\n React.createContext<AppShellSidebarContextValue | null>(null)\n\nfunction useAppShellLeftSidebar() {\n const context = React.useContext(AppShellLeftSidebarContext)\n\n if (!context) {\n throw new Error(\n 'useAppShellLeftSidebar must be used within an AppShell.LeftSidebarProvider.',\n )\n }\n\n return context\n}\n\nfunction useAppShellRightSidebar() {\n const context = React.useContext(AppShellRightSidebarContext)\n\n if (!context) {\n throw new Error(\n 'useAppShellRightSidebar must be used within an AppShell.RightSidebarProvider.',\n )\n }\n\n return context\n}\n\nfunction isEditableTarget(target: EventTarget | null) {\n return (\n target instanceof HTMLElement &&\n (target.isContentEditable ||\n target.closest('input, textarea, select') !== null)\n )\n}\n\nfunction SidebarSideProvider({\n side,\n defaultOpen = true,\n children,\n}: {\n side: AppShellSidebarSide\n defaultOpen?: boolean\n children: React.ReactNode\n}) {\n const config = SIDEBAR_SIDE_CONFIG[side]\n\n const [open, _setOpen] = React.useState(defaultOpen)\n const [sidebarWidth, setSidebarWidth] = React.useState<string>(\n config.defaultWidth,\n )\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n _setOpen(value)\n Cookies.set(config.stateCookie, String(value), {\n expires: SIDEBAR_COOKIE_TTL_DAYS,\n path: '/',\n })\n },\n [config.stateCookie],\n )\n\n const toggleSidebar = React.useCallback(() => {\n _setOpen((open) => {\n Cookies.set(config.stateCookie, String(!open), {\n expires: SIDEBAR_COOKIE_TTL_DAYS,\n path: '/',\n })\n return !open\n })\n }, [config.stateCookie])\n\n React.useLayoutEffect(() => {\n const savedOpen = Cookies.get(config.stateCookie)\n if (savedOpen !== undefined) _setOpen(savedOpen === 'true')\n\n const savedWidth = Cookies.get(config.widthCookie)\n if (savedWidth) setSidebarWidth(savedWidth)\n }, [config.stateCookie, config.widthCookie])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== config.keyboardShortcut) return\n if (isEditableTarget(event.target)) return\n\n event.preventDefault()\n toggleSidebar()\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar, config.keyboardShortcut])\n\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<AppShellSidebarContextValue>(\n () => ({\n side,\n state,\n open,\n setOpen,\n toggleSidebar,\n sidebarWidth,\n setSidebarWidth,\n }),\n [side, state, open, setOpen, toggleSidebar, sidebarWidth],\n )\n\n const Context =\n side === 'left' ? AppShellLeftSidebarContext : AppShellRightSidebarContext\n\n return (\n <Context.Provider value={contextValue}>\n <div\n data-slot={config.wrapperSlot}\n style={\n {\n [config.widthVar]: sidebarWidth,\n } as React.CSSProperties\n }\n className={cn(\n 'contents',\n side === 'left'\n ? 'max-lg:[--left-sidebar-width:0px]'\n : 'max-lg:[--right-sidebar-width:0px]',\n )}\n >\n {children}\n </div>\n </Context.Provider>\n )\n}\n\ntype AppShellSidebarProp = boolean | { defaultOpen?: boolean }\n\n/**\n * Mounts a side's state when the matching root prop enables it. Skips when an\n * ancestor already provides the side (the deprecated standalone providers),\n * so the two mechanisms never stack conflicting state.\n */\nfunction OptionalSidebarProvider({\n side,\n config,\n children,\n}: {\n side: AppShellSidebarSide\n config: AppShellSidebarProp | undefined\n children: React.ReactNode\n}) {\n const existing = React.useContext(\n side === 'left' ? AppShellLeftSidebarContext : AppShellRightSidebarContext,\n )\n\n if (!config || existing) return <>{children}</>\n\n return (\n <SidebarSideProvider\n side={side}\n defaultOpen={typeof config === 'object' ? config.defaultOpen : undefined}\n >\n {children}\n </SidebarSideProvider>\n )\n}\n\n/** @deprecated Enable the sidebar with the `leftSidebar` prop on `AppShell` instead. */\nfunction AppShellLeftSidebarProvider(props: {\n children: React.ReactNode\n defaultOpen?: boolean\n}) {\n return <SidebarSideProvider side=\"left\" {...props} />\n}\n\n/** @deprecated Enable the sidebar with the `rightSidebar` prop on `AppShell` instead. */\nfunction AppShellRightSidebarProvider(props: {\n children: React.ReactNode\n defaultOpen?: boolean\n}) {\n return <SidebarSideProvider side=\"right\" {...props} />\n}\n\nfunction SidebarSidePanel({\n side,\n className,\n children,\n ...props\n}: React.ComponentProps<'aside'> & {\n side: AppShellSidebarSide\n}) {\n const config = SIDEBAR_SIDE_CONFIG[side]\n\n const leftContext = React.useContext(AppShellLeftSidebarContext)\n const rightContext = React.useContext(AppShellRightSidebarContext)\n\n const context = side === 'left' ? leftContext : rightContext\n\n if (!context) {\n throw new Error(\n side === 'left'\n ? 'AppShell.LeftSidebar requires the `leftSidebar` prop on AppShell.'\n : 'AppShell.RightSidebar requires the `rightSidebar` prop on AppShell.',\n )\n }\n\n const {\n state,\n open: isSidebarOpen,\n toggleSidebar,\n setOpen,\n setSidebarWidth,\n } = context\n\n // Dragging toward the shell center collapses; away from it expands.\n const directionSign = side === 'left' ? 1 : -1\n\n const [isDragging, setIsDragging] = React.useState(false)\n const railClickTimer = React.useRef<ReturnType<typeof setTimeout> | null>(\n null,\n )\n\n const persistWidth = React.useCallback(\n (width: string) => {\n Cookies.set(config.widthCookie, width, {\n expires: SIDEBAR_COOKIE_TTL_DAYS,\n path: '/',\n })\n setSidebarWidth(width)\n },\n [config.widthCookie, setSidebarWidth],\n )\n\n const handleRailClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const wrapper = (e.currentTarget as HTMLElement).closest<HTMLElement>(\n `[data-slot=\"${config.wrapperSlot}\"]`,\n )\n\n if (railClickTimer.current) {\n clearTimeout(railClickTimer.current)\n railClickTimer.current = null\n\n if (!wrapper) return\n\n wrapper.style.setProperty(config.widthVar, config.defaultWidth)\n persistWidth(config.defaultWidth)\n\n return\n }\n\n railClickTimer.current = setTimeout(() => {\n railClickTimer.current = null\n toggleSidebar()\n }, 150)\n },\n [config, toggleSidebar, persistWidth],\n )\n\n const handleResizeMouseDown = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n const wrapper = (e.currentTarget as HTMLElement).closest<HTMLElement>(\n `[data-slot=\"${config.wrapperSlot}\"]`,\n )\n\n if (!wrapper) return\n\n const startX = e.clientX\n\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n const container = wrapper.querySelector<HTMLElement>(\n `[data-slot=\"${config.containerSlot}\"]`,\n )\n\n const gap = wrapper.querySelector<HTMLElement>(\n `[data-slot=\"${config.gapSlot}\"]`,\n )\n\n const disableTransitions = () => {\n if (container) container.style.transition = 'none'\n if (gap) gap.style.transition = 'none'\n }\n\n const restoreTransitions = () => {\n if (container) container.style.transition = ''\n if (gap) gap.style.transition = ''\n }\n\n if (!isSidebarOpen) {\n let dragStarted = false\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = (moveEvent.clientX - startX) * directionSign\n\n if (!dragStarted) {\n if (Math.abs(delta) < 4) return\n\n dragStarted = true\n setIsDragging(true)\n\n wrapper.style.setProperty(\n config.widthVar,\n `${MIN_SIDEBAR_WIDTH}px`,\n )\n setOpen(true)\n }\n\n const newWidth = Math.max(\n MIN_SIDEBAR_WIDTH,\n Math.min(MAX_SIDEBAR_WIDTH, MIN_SIDEBAR_WIDTH + delta),\n )\n\n wrapper.style.setProperty(config.widthVar, `${newWidth}px`)\n }\n\n const handleMouseUp = (upEvent: MouseEvent) => {\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n if (!dragStarted) return\n\n setIsDragging(false)\n\n if ((upEvent.clientX - startX) * directionSign < -10) {\n wrapper.style.setProperty(\n config.widthVar,\n `${MIN_SIDEBAR_WIDTH}px`,\n )\n\n setOpen(false)\n } else {\n const newWidth = wrapper.style\n .getPropertyValue(config.widthVar)\n .trim()\n\n persistWidth(newWidth)\n }\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n\n return\n }\n\n setIsDragging(true)\n disableTransitions()\n\n const rawWidth = wrapper.style.getPropertyValue(config.widthVar)\n const startWidth = rawWidth\n ? rawWidth.endsWith('rem')\n ? parseFloat(rawWidth) * 16\n : parseFloat(rawWidth)\n : MIN_SIDEBAR_WIDTH\n\n let pastCollapseThreshold = false\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = (moveEvent.clientX - startX) * directionSign\n const rawWidth = startWidth + delta\n\n pastCollapseThreshold = rawWidth < COLLAPSE_THRESHOLD\n\n const newWidth = Math.max(\n MIN_SIDEBAR_WIDTH,\n Math.min(MAX_SIDEBAR_WIDTH, rawWidth),\n )\n wrapper.style.setProperty(config.widthVar, `${newWidth}px`)\n }\n\n const handleMouseUp = () => {\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n\n setIsDragging(false)\n restoreTransitions()\n\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n\n if (pastCollapseThreshold) {\n toggleSidebar()\n return\n }\n\n const newWidth = wrapper.style.getPropertyValue(config.widthVar).trim()\n\n persistWidth(newWidth)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n },\n [config, directionSign, toggleSidebar, persistWidth, isSidebarOpen, setOpen],\n )\n\n React.useEffect(() => {\n return () => {\n if (railClickTimer.current) {\n clearTimeout(railClickTimer.current)\n }\n }\n }, [])\n\n return (\n <aside\n data-side={side}\n data-slot=\"sidebar\"\n data-variant=\"inset\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? 'offcanvas' : ''}\n className=\"group peer hidden text-sidebar-foreground lg:block\"\n {...props}\n >\n <div\n aria-hidden\n data-slot={config.gapSlot}\n className={cn(\n 'relative shrink-0 bg-transparent transition-[width] duration-300',\n state === 'expanded'\n ? side === 'left'\n ? 'w-(--left-sidebar-width)'\n : 'w-(--right-sidebar-width)'\n : 'w-0',\n )}\n />\n\n {/* Off-canvas collapses by animating the clipped width (never past the\n viewport edge) instead of a negative offset — an off-screen fixed\n panel becomes real horizontal overflow whenever an ancestor has a\n transform (e.g. Storybook zoom). The inner panel is anchored to the\n shell-center edge so it slides out instead of being cropped. */}\n <div\n data-slot={config.containerSlot}\n className={cn(\n 'fixed z-10 hidden overflow-clip bg-sidebar transition-[width] duration-300 lg:flex',\n side === 'left'\n ? 'left-0 w-(--left-sidebar-width) group-data-[collapsible=offcanvas]:w-0 justify-end'\n : 'right-0 w-(--right-sidebar-width) group-data-[collapsible=offcanvas]:w-0',\n )}\n style={{\n top: 'var(--announcement-height, 0px)',\n height: 'calc(100dvh - var(--announcement-height, 0px))',\n }}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'relative flex h-full shrink-0 min-w-0 flex-col',\n side === 'left'\n ? 'w-(--left-sidebar-width)'\n : 'w-(--right-sidebar-width)',\n className,\n )}\n >\n {children}\n </div>\n </div>\n\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={handleRailClick}\n onMouseDown={handleResizeMouseDown}\n onFocus={(e) => e.currentTarget.blur()}\n data-sidebar=\"rail\"\n data-slot={side === 'left' ? 'left-sidebar-rail' : 'right-sidebar-rail'}\n aria-label=\"Resize sidebar\"\n className={cn(\n 'fixed inset-y-0 z-20 hidden w-4 sm:flex',\n 'cursor-col-resize max-h-32 items-center justify-center top-1/2 -translate-y-1/2 px-4',\n 'group-data-[collapsible=offcanvas]:translate-x-0',\n 'after:absolute after:inset-y-0 after:w-1 after:rounded-full after:transition-transform',\n 'hover:after:translate-x-0 hover:after:bg-sidebar-border',\n 'outline-none focus-visible:ring-ring focus-visible:ring-2 focus-visible:border-ring bg-transparent!',\n side === 'left'\n ? 'left-(--left-sidebar-width) group-data-[collapsible=offcanvas]:left-0 -translate-x-1/2 after:left-1/2 after:-translate-x-1/2 transition-[left,transform] duration-300'\n : 'right-(--right-sidebar-width) group-data-[collapsible=offcanvas]:right-0 translate-x-1/2 after:right-1/2 after:translate-x-1/2 transition-[right,transform] duration-300',\n isDragging && 'after:translate-x-0 after:bg-sidebar-border',\n )}\n />\n </aside>\n )\n}\n\n/**\n * Fixed left (primary) panel with a drag-to-resize rail. Hidden on mobile —\n * navigation belongs to `AppShell.Navbar`. Requires the `leftSidebar` prop\n * on `AppShell`.\n */\nfunction AppShellLeftSidebar(props: React.ComponentProps<'aside'>) {\n return <SidebarSidePanel side=\"left\" {...props} />\n}\n\n/**\n * Fixed right (context) panel with a drag-to-resize rail. Hidden on mobile.\n * Requires the `rightSidebar` prop on `AppShell`.\n */\nfunction AppShellRightSidebar(props: React.ComponentProps<'aside'>) {\n return <SidebarSidePanel side=\"right\" {...props} />\n}\n\ntype SidebarTriggerIcon =\n | IconType\n | React.ReactNode\n | ((state: 'expanded' | 'collapsed') => React.ReactNode)\n\nfunction SidebarSideTrigger({\n side,\n label,\n icon,\n className,\n ...props\n}: React.ComponentProps<typeof Button> & {\n side: AppShellSidebarSide\n label: string\n icon?: SidebarTriggerIcon\n}) {\n const leftContext = React.useContext(AppShellLeftSidebarContext)\n const rightContext = React.useContext(AppShellRightSidebarContext)\n\n const context = side === 'left' ? leftContext : rightContext\n\n if (!context) {\n throw new Error(\n side === 'left'\n ? 'AppShell.LeftSidebarTrigger requires the `leftSidebar` prop on AppShell.'\n : 'AppShell.RightSidebarTrigger requires the `rightSidebar` prop on AppShell.',\n )\n }\n\n const { toggleSidebar, state } = context\n\n const resolvedIcon = typeof icon === 'function' ? icon(state) : icon\n\n return (\n <Tooltip>\n <Tooltip.Trigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n type=\"button\"\n data-slot={\n side === 'left' ? 'left-sidebar-trigger' : 'right-sidebar-trigger'\n }\n className={cn('max-lg:hidden shrink-0', className)}\n onClick={toggleSidebar}\n {...props}\n >\n {resolvedIcon === undefined ? (\n <Icon\n name={state === 'collapsed' ? 'SidebarToggled' : 'SidebarToggle'}\n className={cn(\n '!size-4 text-foreground',\n side === 'right' && 'scale-x-[-1]',\n )}\n />\n ) : typeof resolvedIcon === 'string' ? (\n <Icon\n name={resolvedIcon as IconType}\n className=\"!size-4 text-foreground\"\n />\n ) : (\n resolvedIcon\n )}\n\n <span className=\"sr-only\">{label}</span>\n </Button>\n </Tooltip.Trigger>\n\n <Tooltip.Content side=\"bottom\">{label}</Tooltip.Content>\n </Tooltip>\n )\n}\n\n/**\n * Toggle button of the left sidebar, for custom placements (the Header\n * already renders one automatically). Requires the `leftSidebar` prop on\n * `AppShell`. Pass `icon` to replace the default state-aware icon — an icon\n * name, any node, or a function of the sidebar state\n * (`(state) => ReactNode`).\n */\nfunction AppShellLeftSidebarTrigger({\n label = 'Toggle left sidebar',\n ...props\n}: React.ComponentProps<typeof Button> & {\n label?: string\n icon?: SidebarTriggerIcon\n}) {\n return <SidebarSideTrigger side=\"left\" label={label} {...props} />\n}\n\n/**\n * Toggle button of the right sidebar, for custom placements (the Header\n * already renders one automatically). Requires the `rightSidebar` prop on\n * `AppShell`. Pass `icon` to replace the default state-aware icon — an icon\n * name, any node, or a function of the sidebar state\n * (`(state) => ReactNode`).\n */\nfunction AppShellRightSidebarTrigger({\n label = 'Toggle right sidebar',\n ...props\n}: React.ComponentProps<typeof Button> & {\n label?: string\n icon?: SidebarTriggerIcon\n}) {\n return <SidebarSideTrigger side=\"right\" label={label} {...props} />\n}\n\n/**\n * Returns the toggle function of the left sidebar, to wire any custom\n * element to it. Requires the `leftSidebar` prop on `AppShell`.\n */\nfunction useLeftSidebarToggle() {\n const context = React.useContext(AppShellLeftSidebarContext)\n\n if (!context) {\n throw new Error(\n 'useLeftSidebarToggle requires the `leftSidebar` prop on AppShell.',\n )\n }\n\n return context.toggleSidebar\n}\n\n/**\n * Returns the toggle function of the right sidebar, to wire any custom\n * element to it. Requires the `rightSidebar` prop on `AppShell`.\n */\nfunction useRightSidebarToggle() {\n const context = React.useContext(AppShellRightSidebarContext)\n\n if (!context) {\n throw new Error(\n 'useRightSidebarToggle requires the `rightSidebar` prop on AppShell.',\n )\n }\n\n return context.toggleSidebar\n}\n\n/* -------------------------------------------------------------------------\n * Sidebar building blocks (work inside either side)\n * ---------------------------------------------------------------------- */\n\nfunction AppShellSidebarHeader({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Header>) {\n return (\n <Sidebar.Header\n data-slot=\"app-shell-sidebar-header\"\n className={cn(\n 'flex flex-row items-center justify-between border-none p-4 pb-2 -mt-0.5',\n className,\n )}\n {...props}\n >\n {children}\n </Sidebar.Header>\n )\n}\n\nfunction AppShellSidebarSection({\n className,\n children,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"app-shell-sidebar-section\"\n className={cn('shrink-0 px-4 py-2 empty:hidden', className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nfunction AppShellSidebarContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Content>) {\n return (\n <Sidebar.Content\n data-slot=\"app-shell-sidebar-content\"\n className={cn(\n 'flex-1 overflow-x-hidden overflow-y-auto scroll-fade-y px-4 py-2',\n className,\n )}\n {...props}\n >\n <Sidebar.Menu className=\"flex flex-col gap-4 overflow-visible\">\n {children}\n </Sidebar.Menu>\n </Sidebar.Content>\n )\n}\n\nfunction AppShellSidebarGroup({\n className,\n title,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Group> & {\n title?: string\n}) {\n return (\n <Sidebar.Group\n data-slot=\"app-shell-sidebar-group\"\n className={cn('p-0', className)}\n {...props}\n >\n {title && (\n <span className=\"text-xs text-muted-foreground/50 font-medium uppercase p-2\">\n {title}\n </span>\n )}\n\n <Sidebar.GroupContent className=\"flex flex-col gap-1\">\n {children}\n </Sidebar.GroupContent>\n </Sidebar.Group>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Sidebar item\n * ---------------------------------------------------------------------- */\n\nfunction itemAnimation({\n direction = 'up',\n px = 10,\n duration = ANIMATION.DURATION_FLOAT,\n delay = 0,\n reverse = false,\n}: {\n direction?: 'left' | 'right' | 'up' | 'down'\n px?: number\n duration?: number\n delay?: number\n reverse?: boolean\n} = {}) {\n const axis = direction === 'left' || direction === 'right' ? 'x' : 'y'\n\n const initial = { opacity: 0, [axis]: px * (!reverse ? -1 : 1) }\n const animate = { opacity: 1, [axis]: 0 }\n const exit = {\n opacity: 0,\n [axis]: px * (!reverse ? -1 : 1),\n ...(delay > 0 ? { transition: { duration } } : {}),\n }\n const transition = delay > 0 ? { duration, delay } : { duration }\n\n return { initial, animate, exit, transition }\n}\n\nconst DROPDOWN_CHILD_STAGGER_DELAY = 0.035\nconst MAX_DROPDOWN_CHILD_STAGGER_DELAY = 0.14\n\nexport type AppShellSidebarItemData = {\n title: string\n icon?: IconType | React.ReactNode\n href?: string\n onClick?: () => void\n /** Marks the item as the current route. The shell has no router — compute it in the app. */\n active?: boolean\n disabled?: boolean\n loading?: boolean\n /** \"Coming soon\" — disabled with a clock hint. */\n soon?: boolean\n /** External link — opens in a new tab with a hint icon. */\n external?: boolean\n items?: AppShellSidebarItemData[]\n}\n\ntype AppShellSidebarItemProps = AppShellSidebarItemData & {\n index?: number\n isDropdownChild?: boolean\n level?: number\n}\n\nfunction AppShellSidebarItem({\n index = 0,\n isDropdownChild = false,\n level = 0,\n ...item\n}: AppShellSidebarItemProps) {\n const [open, setOpen] = React.useState(false)\n\n const hasItems = !!item.items && item.items.length > 0\n const hasHref = !!item.href\n const hasLinkedChildren = hasItems && hasHref && !item.onClick\n\n const isLoading = item.loading || false\n const isSoon = item.soon || false\n const isExternal = item.external || false\n\n const isDisabled = isLoading || item.disabled || isSoon || false\n\n const useSplitDropdownLayout = hasLinkedChildren && !isLoading\n\n const isActive = !isDisabled && !isLoading && !!item.active\n\n const buttonClassName =\n 'relative z-10 group/menu-button hover:bg-sidebar-accent! data-[active=true]:bg-transparent data-[active=false]:hover:text-foreground/75 h-auto! p-2.5! text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] cursor-pointer'\n\n const itemStyle = {\n marginLeft: `${level * 16}px`,\n maxWidth: `calc(100% - ${level * 16}px)`,\n }\n\n const dropdownChildDelay = isDropdownChild\n ? Math.min(\n index * DROPDOWN_CHILD_STAGGER_DELAY,\n MAX_DROPDOWN_CHILD_STAGGER_DELAY,\n )\n : 0\n\n const handleNavigateClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (isDisabled) {\n event.preventDefault()\n }\n }\n\n const handleToggleItems = () => {\n if (!isDisabled && hasItems) {\n setOpen((open) => !open)\n }\n }\n\n const handleClick = () => {\n if (item.onClick) {\n item.onClick()\n } else if (!isDisabled && hasItems) {\n handleToggleItems()\n }\n }\n\n const icon = (\n <div\n className={cn(\n 'flex items-center justify-center size-4 aspect-square',\n isActive ? 'text-primary' : 'text-muted-foreground',\n )}\n >\n {typeof item.icon === 'string' ? (\n <Icon name={item.icon as IconType} />\n ) : (\n item.icon\n )}\n </div>\n )\n\n const trailing = isLoading ? (\n <Loader\n variant=\"button\"\n iconClassName=\"size-4 min-w-4 min-h-4\"\n className=\"ml-auto mr-0.5 shrink-0 text-muted-foreground\"\n />\n ) : (\n <AnimatePresence mode=\"popLayout\">\n {[hasItems, isSoon, isExternal].some(Boolean) && (\n <motion.div\n key=\"trailing\"\n {...itemAnimation({ direction: 'right', reverse: true })}\n className={cn(\n 'flex items-center gap-2',\n !hasLinkedChildren && 'ml-auto',\n )}\n >\n {isSoon ? (\n <Icon name=\"Clock\" className=\"size-3 opacity-50\" />\n ) : isExternal ? (\n <Icon\n name=\"ShareUpRight\"\n className=\"size-3 opacity-50 group-hover/menu-button:opacity-100 group-hover/menu-button:text-link\"\n />\n ) : hasItems ? (\n <Icon\n data-open={open}\n name=\"ChevronDown\"\n className=\"size-3 transition-transform duration-300 data-[open=true]:rotate-180\"\n />\n ) : null}\n </motion.div>\n )}\n </AnimatePresence>\n )\n\n const isPlainLink = !hasItems && !item.onClick\n\n return (\n <motion.div\n {...itemAnimation({ direction: 'left', delay: dropdownChildDelay })}\n suppressHydrationWarning\n data-open={open}\n data-disabled={isDisabled}\n className=\"relative flex flex-col group/menu-item data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none\"\n >\n {useSplitDropdownLayout ? (\n <div\n className=\"relative z-10 flex w-full min-w-0 gap-1\"\n style={itemStyle}\n >\n <Sidebar.MenuButton\n asChild\n data-open={open}\n data-active={isActive}\n data-index={index}\n data-level={level}\n data-disabled={isDisabled}\n disabled={isDisabled}\n className={cn(buttonClassName, 'min-w-0 flex-1')}\n >\n <a\n href={item.href && !isDisabled ? item.href : '#'}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleNavigateClick}\n suppressHydrationWarning\n className=\"flex items-center gap-2\"\n >\n {icon}\n\n <span data-active={isActive} className=\"truncate text-sm\">\n {item.title}\n </span>\n </a>\n </Sidebar.MenuButton>\n\n <Sidebar.MenuButton\n type=\"button\"\n data-open={open}\n data-active={isActive}\n data-index={index}\n data-level={level}\n data-disabled={isDisabled}\n disabled={isDisabled}\n aria-expanded={open}\n aria-label={`${item.title} submenu`}\n onClick={handleToggleItems}\n className={cn(buttonClassName, 'w-10 shrink-0 justify-center p-2.5!')}\n >\n {trailing}\n </Sidebar.MenuButton>\n </div>\n ) : (\n <Sidebar.MenuButton\n asChild={isPlainLink}\n data-open={open}\n data-active={isActive}\n data-index={index}\n data-level={level}\n data-disabled={isDisabled}\n disabled={isDisabled}\n onClick={hasItems || item.onClick ? handleClick : undefined}\n className={buttonClassName}\n style={itemStyle}\n >\n {isPlainLink ? (\n <a\n href={item.href && !isDisabled ? item.href : '#'}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleNavigateClick}\n suppressHydrationWarning\n className=\"flex w-full min-w-0 items-center gap-2\"\n >\n {icon}\n\n <span\n data-active={isActive}\n className=\"text-sm min-w-0 truncate\"\n >\n {item.title}\n </span>\n\n {trailing}\n </a>\n ) : (\n <>\n {icon}\n\n <span data-active={isActive} className=\"text-sm\">\n {item.title}\n </span>\n\n {trailing}\n </>\n )}\n </Sidebar.MenuButton>\n )}\n\n <AnimatePresence initial={false}>\n {hasItems && open && (\n <motion.ul\n animate={{ height: 'auto', opacity: 1, padding: '0.25rem 0' }}\n initial={{ height: 0, opacity: 0, padding: 0 }}\n exit={{ height: 0, opacity: 0, padding: 0 }}\n transition={{\n duration: ANIMATION.DURATION_FLOAT,\n ease: 'easeInOut',\n }}\n data-open={open}\n className=\"w-full min-w-0 flex flex-col space-y-1 z-0 overflow-hidden\"\n >\n {item.items?.map((childItem, childIndex) => (\n <AppShellSidebarItem\n key={`${childItem.title}-${childIndex}`}\n {...childItem}\n index={childIndex}\n isDropdownChild\n level={level + 1}\n />\n ))}\n </motion.ul>\n )}\n </AnimatePresence>\n </motion.div>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Command palette button\n * ---------------------------------------------------------------------- */\n\nfunction AppShellCommandButton({\n className,\n children,\n ...props\n}: React.ComponentProps<'button'>) {\n return (\n <button\n type=\"button\"\n data-slot=\"app-shell-command-button\"\n className={cn(\n 'flex h-12 w-full min-w-0 cursor-pointer items-center rounded-xl border-2 border-sidebar-accent bg-transparent p-2.5 text-left text-sm text-muted-foreground outline-none transition-all hover:bg-sidebar-accent/30 focus-visible:border-transparent focus-visible:ring-[3px] focus-visible:ring-ring/50',\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none flex w-full items-center gap-2 opacity-50 truncate\">\n {children}\n </span>\n </button>\n )\n}\n\nfunction AppShellSidebarFooter({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof Sidebar.Footer>) {\n return (\n <Sidebar.Footer\n data-slot=\"app-shell-sidebar-footer\"\n className={cn('p-4 pt-0', className)}\n {...props}\n >\n {children}\n </Sidebar.Footer>\n )\n}\n\nfunction AppShellCopyright({\n className,\n children,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n suppressHydrationWarning\n data-slot=\"app-shell-copyright\"\n className={cn('text-xs text-muted-foreground/50 p-2', className)}\n {...props}\n >\n {children}\n </span>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Header\n * ---------------------------------------------------------------------- */\n\nfunction AppShellHeader({\n className,\n logo,\n title,\n actions,\n user,\n leftSidebarToggleLabel = 'Toggle left sidebar',\n rightSidebarToggleLabel = 'Toggle right sidebar',\n mobileActionsClassName,\n ...props\n}: Omit<React.ComponentProps<'div'>, 'title'> & {\n /** Mobile-only logo slot (top-left). */\n logo?: React.ReactNode\n /** Page title area (both breakpoints). */\n title?: React.ReactNode\n /** Right-side actions (both breakpoints). */\n actions?: React.ReactNode\n /** Mobile-only user slot (top-right, e.g. avatar). */\n user?: React.ReactNode\n /** Tooltip label of the auto-rendered left sidebar toggle. */\n leftSidebarToggleLabel?: string\n /** Tooltip label of the auto-rendered right sidebar toggle. */\n rightSidebarToggleLabel?: string\n mobileActionsClassName?: string\n}) {\n // One toggle per enabled side — the `leftSidebar`/`rightSidebar` props on\n // AppShell are the signal, so any sidebar combination (none, left, right,\n // both) gets exactly the toggles that apply.\n const leftSidebar = React.useContext(AppShellLeftSidebarContext)\n const rightSidebar = React.useContext(AppShellRightSidebarContext)\n\n return (\n <div data-slot=\"app-shell-header\" className={cn('contents', className)} {...props}>\n <div className=\"lg:hidden flex items-center justify-between gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 glass-dashboard-header max-lg:sticky top-(--announcement-height,0px) z-50 transition-all max-lg:border-b max-lg:border-border/70\">\n <div className=\"flex min-w-0 flex-1 items-center gap-4\">\n {logo && <div className=\"shrink-0 active:scale-99\">{logo}</div>}\n\n <div className=\"flex min-h-7 min-w-0 flex-1 items-center overflow-hidden\">\n <div className=\"flex min-w-0 flex-1 items-center\">{title}</div>\n </div>\n </div>\n\n <div className={cn('flex gap-2 empty:hidden', mobileActionsClassName)}>\n {actions}\n </div>\n\n {user}\n </div>\n\n <div className=\"max-lg:hidden sticky top-(--announcement-height,0px) z-50 w-full flex min-w-0 items-center gap-2 md:gap-4 p-4 min-h-16 h-full max-h-16 border-b glass-dashboard-header border-border/70 transition-colors lg:rounded-t-2xl\">\n {leftSidebar && (\n <AppShellLeftSidebarTrigger label={leftSidebarToggleLabel} />\n )}\n\n <div className=\"flex min-h-7 min-w-0 flex-1 items-center overflow-hidden\">\n <div className=\"flex min-w-0 flex-1 items-center\">{title}</div>\n </div>\n\n <div className=\"relative z-1 grid grid-flow-col shrink-0 ml-auto gap-2 md:gap-4\">\n <div className=\"min-w-0 flex items-center gap-2 empty:hidden\">\n {actions}\n </div>\n </div>\n\n {rightSidebar && (\n <AppShellRightSidebarTrigger label={rightSidebarToggleLabel} />\n )}\n </div>\n </div>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Mobile navbar\n * ---------------------------------------------------------------------- */\n\nfunction AppShellNavbar({\n className,\n children,\n ...props\n}: React.ComponentProps<'nav'>) {\n return (\n <nav\n data-slot=\"app-shell-navbar\"\n onContextMenu={(e) => e.preventDefault()}\n className={cn(\n 'fixed bottom-0 left-0 lg:hidden z-50 flex flex-col items-center justify-center w-full min-h-[100px] pointer-events-none transition-opacity duration-200',\n className,\n )}\n {...props}\n >\n <div className=\"absolute inset-0 translate-y-px bg-linear-to-t from-black/80 to-transparent pointer-events-none -z-10 backdrop-blur-sm mask-t-from-0 mask-b-to-100\" />\n\n <ul className=\"relative flex items-center justify-center gap-1.5 xs:gap-2 sm:gap-4 w-full h-full\">\n <div className=\"flex items-center justify-center gap-1 w-fit glass-dashboard-chrome border border-border/50 p-1 rounded-2xl overflow-hidden z-10 pointer-events-auto\">\n {children}\n </div>\n </ul>\n </nav>\n )\n}\n\nfunction AppShellNavbarItem({\n className,\n icon,\n active = false,\n href,\n children,\n ...props\n}: Omit<React.ComponentProps<'a'>, 'children'> & {\n icon?: IconType | React.ReactNode\n active?: boolean\n children?: React.ReactNode\n}) {\n const itemClassName = cn(\n 'size-full flex items-center justify-center p-4 rounded-xl transition-colors text-xs cursor-pointer',\n 'outline-none focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n active\n ? 'bg-primary/5 hover:bg-primary/25 dark:bg-primary/5 dark:hover:bg-primary/2'\n : 'bg-transparent hover:bg-accent/50',\n className,\n )\n\n const content =\n children ??\n (typeof icon === 'string' ? (\n <Icon\n name={icon as IconType}\n className={cn(\n 'size-5 shrink-0',\n active ? 'text-primary' : 'text-muted-foreground',\n )}\n />\n ) : (\n icon\n ))\n\n if (href) {\n return (\n <a href={href} className={itemClassName} {...props}>\n {content}\n </a>\n )\n }\n\n const { onClick } = props as { onClick?: React.MouseEventHandler<HTMLElement> }\n\n return (\n <button type=\"button\" className={itemClassName} onClick={onClick}>\n {content}\n </button>\n )\n}\n\n/* -------------------------------------------------------------------------\n * Inset / loading\n * ---------------------------------------------------------------------- */\n\nfunction AppShellInset({\n className,\n style,\n children,\n loading = false,\n spacing = 24,\n ...props\n}: React.ComponentProps<'div'> & {\n /**\n * Shows a blocking loading overlay while keeping the shell (sidebar,\n * navbar) interactive. Content stays mounted but hidden.\n */\n loading?: boolean\n /** Spacing scale unit for `--calculated-spacing` (bottom paddings, widget offsets). */\n spacing?: number\n}) {\n const leftSidebar = React.useContext(AppShellLeftSidebarContext)\n const rightSidebar = React.useContext(AppShellRightSidebarContext)\n\n const hasSidebar = Boolean(leftSidebar || rightSidebar)\n\n return (\n <div\n data-slot=\"app-shell-inset\"\n style={\n {\n '--sidebar-spacing': spacing,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'relative flex w-full min-h-full flex-1 flex-col transition-[margin] duration-300',\n // The inset chrome (margins + rounding) only exists when at least one\n // sidebar provider frames the page; each margin collapses against the\n // side whose sidebar is expanded.\n hasSidebar && 'lg:m-2 lg:rounded-2xl',\n leftSidebar?.state === 'expanded' && 'lg:ml-0',\n rightSidebar?.state === 'expanded' && 'lg:mr-0',\n loading && 'min-h-0 overflow-hidden',\n 'max-lg:bg-dashboard-background! bg-dashboard-background',\n '[--calculated-spacing:--spacing(var(--sidebar-spacing))]',\n // `isolate` keeps composited children (e.g. the glass header's\n // backdrop-filter) inside the rounded overflow clip on all engines.\n 'w-full min-w-0 lg:overflow-clip isolate',\n 'max-lg:pb-(--calculated-spacing)',\n className,\n )}\n {...props}\n >\n {loading && <AppShellLoading />}\n\n <div\n aria-hidden={loading || undefined}\n className={cn(loading ? 'hidden' : 'contents')}\n >\n {children}\n </div>\n </div>\n )\n}\n\nfunction AppShellLoading({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"app-shell-loading\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n className={cn(\n 'absolute inset-0 z-50 flex flex-col items-center justify-center gap-4 bg-dashboard-background',\n className,\n )}\n {...props}\n >\n <Loader />\n </div>\n )\n}\n\nconst AppShell = Object.assign(AppShellRoot, {\n LeftSidebar: AppShellLeftSidebar,\n LeftSidebarProvider: AppShellLeftSidebarProvider,\n LeftSidebarTrigger: AppShellLeftSidebarTrigger,\n RightSidebar: AppShellRightSidebar,\n RightSidebarProvider: AppShellRightSidebarProvider,\n RightSidebarTrigger: AppShellRightSidebarTrigger,\n SidebarHeader: AppShellSidebarHeader,\n SidebarSection: AppShellSidebarSection,\n SidebarContent: AppShellSidebarContent,\n SidebarGroup: AppShellSidebarGroup,\n SidebarItem: AppShellSidebarItem,\n SidebarFooter: AppShellSidebarFooter,\n CommandButton: AppShellCommandButton,\n Copyright: AppShellCopyright,\n Header: AppShellHeader,\n Navbar: AppShellNavbar,\n NavbarItem: AppShellNavbarItem,\n Inset: AppShellInset,\n Loading: AppShellLoading,\n})\n\nexport {\n AppShell,\n useAppShellLeftSidebar,\n useAppShellRightSidebar,\n useLeftSidebarToggle,\n useRightSidebarToggle,\n}\n","export const ANIMATION_DURATION = 0.2;\nexport const ANIMATION_EASE = 'easeInOut';\n\nexport const animations = {\n config: {\n duration: ANIMATION_DURATION,\n ease: ANIMATION_EASE,\n },\n presets: {\n ENTER_POSITIVE_EXIT_NEGATIVE: {\n initial: {\n opacity: 0,\n y: 10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: -10,\n },\n },\n ENTER_NEGATIVE_EXIT_POSITIVE: {\n initial: {\n opacity: 0,\n y: -10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: 10,\n },\n },\n ENTER_NEGATIVE_EXIT_NEGATIVE: {\n initial: {\n opacity: 0,\n y: -10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: -10,\n },\n },\n ENTER_POSITIVE_EXIT_POSITIVE: {\n initial: {\n opacity: 0,\n y: 10,\n },\n animate: {\n opacity: 1,\n y: 0,\n },\n exit: {\n opacity: 0,\n y: 10,\n },\n },\n },\n};\n\nexport const ANIMATION = {\n DURATION: ANIMATION_DURATION * 1000,\n DURATION_FLOAT: ANIMATION_DURATION,\n};\n\n","'use client'\n\nimport Cookies from 'js-cookie'\n\nimport * as React from 'react'\n\nimport { Slot } from '@/lib/slot'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\n\nimport { Icon, type IconSharedProps } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Separator } from '@/components/ui/separator'\nimport { Sheet } from '@/components/ui/sheet'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { Tooltip } from '@/components/ui/tooltip'\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar-state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 365 * 86400\n\nconst SIDEBAR_WIDTH = '18rem'\nconst SIDEBAR_WIDTH_ICON = '3rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = '['\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n sidebarWidth: string\n setSidebarWidth: (width: string) => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n\n const [openMobile, setOpenMobile] = React.useState(false)\n const [_open, _setOpen] = React.useState(defaultOpen)\n const [sidebarWidth, setSidebarWidth] = React.useState(SIDEBAR_WIDTH)\n\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open],\n )\n\n const toggleSidebar = React.useCallback(\n () =>\n isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open),\n [isMobile, setOpen, setOpenMobile],\n )\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n React.useLayoutEffect(() => {\n const saved = Cookies.get(\"sidebar-width\")\n if (saved) setSidebarWidth(saved)\n }, [])\n\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n sidebarWidth,\n setSidebarWidth,\n }),\n [\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n sidebarWidth,\n ],\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': sidebarWidth,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n )\n}\n\nfunction SidebarRoot({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n}) {\n\n const { isMobile, state, openMobile, setOpenMobile, sidebarWidth } =\n useSidebar()\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <Sheet.Content\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className={cn(\n 'w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden border-none',\n className,\n )}\n style={\n {\n '--sidebar-width': sidebarWidth,\n } as React.CSSProperties\n }\n side={side}\n >\n <Sheet.Header className=\"sr-only\">\n <Sheet.Title>{'title'}</Sheet.Title>\n <Sheet.Description>{'description'}</Sheet.Description>\n </Sheet.Header>\n\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </Sheet.Content>\n </Sheet>\n )\n }\n\n return (\n <div\n data-side={side}\n data-state={state}\n data-slot=\"sidebar\"\n data-variant={variant}\n suppressHydrationWarning\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n className=\"group peer text-sidebar-foreground hidden lg:block\"\n >\n <div\n data-slot=\"sidebar-gap\"\n suppressHydrationWarning\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-300',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed z-10 hidden transition-[left,right,width] duration-300 lg:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:-left-(--sidebar-width)'\n : 'right-0 group-data-[collapsible=offcanvas]:-right-(--sidebar-width)',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n style={\n {\n top: 'var(--announcement-height, 0px)',\n width: 'var(--sidebar-width)',\n height: 'calc(100dvh - var(--announcement-height, 0px))',\n } as React.CSSProperties\n }\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\ntype SidebarTriggerIconProps = IconSharedProps\n\nfunction SidebarTrigger({\n className,\n onClick,\n isOutsideSidebar = false,\n iconProps,\n ...props\n}: React.ComponentProps<typeof Button> & {\n isOutsideSidebar?: boolean\n iconProps?: SidebarTriggerIconProps\n}) {\n const { toggleSidebar, state } = useSidebar()\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n toggleSidebar()\n }\n\n const IconComponent = (\n <Icon\n className=\"size-5\"\n name={state === 'collapsed' ? 'SidebarToggled' : 'SidebarToggle'}\n {...iconProps}\n />\n )\n\n return (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n data-slot=\"sidebar-trigger\"\n data-sidebar=\"trigger\"\n className={className}\n onClick={handleClick}\n {...props}\n >\n {IconComponent}\n\n <span className=\"sr-only\">\n {isOutsideSidebar ? 'Collapse sidebar' : 'Expand sidebar'}\n </span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n tabIndex={-1}\n onClick={toggleSidebar}\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label={'sidebar.toggle'}\n // title={'sidebar.toggle'}\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full min-h-full flex-1 flex-col transition-[margin] duration-300 lg:peer-data-[variant=inset]:m-2 lg:peer-data-[variant=inset]:ml-0 lg:peer-data-[variant=inset]:rounded-2xl lg:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('bg-background h-8 w-full shadow-none', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-lg px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-300 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-lg p-0 outline-hidden transition-transform cursor-pointer focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 lg:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-sidebar=\"menu\"\n data-slot=\"sidebar-menu\"\n suppressHydrationWarning\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-lg p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] cursor-pointer hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-popup-open:hover:bg-sidebar-accent data-popup-open:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof Tooltip.Content>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button'\n // Optional so menu buttons also work outside a SidebarProvider (e.g. inside\n // AppShell sidebars, which manage their own state). The tooltip only shows\n // in the provider-driven icon-collapsed mode, so no context means hidden.\n const context = React.useContext(SidebarContext)\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Tooltip.Content\n side=\"right\"\n align=\"center\"\n hidden={!context || context.state !== 'collapsed' || context.isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-lg p-0 outline-hidden transition-transform cursor-pointer focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 lg:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-popup-open:opacity-100 lg:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-lg px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean\n}) {\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n }, [])\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-lg px-2', className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-lg\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean\n size?: 'sm' | 'md'\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-lg px-2 outline-hidden cursor-pointer focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst Sidebar = Object.assign(SidebarRoot, {\n Provider: SidebarProvider,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Group: SidebarGroup,\n GroupAction: SidebarGroupAction,\n GroupContent: SidebarGroupContent,\n GroupLabel: SidebarGroupLabel,\n Header: SidebarHeader,\n Input: SidebarInput,\n Inset: SidebarInset,\n Menu: SidebarMenu,\n MenuAction: SidebarMenuAction,\n MenuBadge: SidebarMenuBadge,\n MenuButton: SidebarMenuButton,\n MenuItem: SidebarMenuItem,\n MenuSkeleton: SidebarMenuSkeleton,\n MenuSub: SidebarMenuSub,\n MenuSubButton: SidebarMenuSubButton,\n MenuSubItem: SidebarMenuSubItem,\n Rail: SidebarRail,\n Separator: SidebarSeparator,\n Trigger: SidebarTrigger,\n})\n\nexport { Sidebar, SIDEBAR_WIDTH, useSidebar }\n","import * as React from 'react'\n\nfunction subscribeMatchMedia(query: string, onStoreChange: () => void) {\n const mql = window.matchMedia(query)\n mql.addEventListener('change', onStoreChange)\n return () => mql.removeEventListener('change', onStoreChange)\n}\n\n/**\n * Starts as `false` on server and first client paint so SSR + hydration match.\n * Subscribes to `matchMedia` via useSyncExternalStore (avoids Sidebar Sheet vs div mismatch).\n */\nexport function useIsMobile({ breakpoint = 1024 } = {}) {\n const query = `(max-width: ${breakpoint - 1}px)`\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => subscribeMatchMedia(query, onStoreChange),\n [query],\n ),\n () => window.matchMedia(query).matches,\n () => false,\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\ntype InputProps = React.ComponentProps<'input'>\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ type, className, ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n data-slot=\"input\"\n suppressHydrationWarning\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground/50 placeholder:pointer-events-none placeholder:select-none bg-input flex h-10 w-full min-w-0 rounded-xl border border-transparent px-3 py-2 text-sm transition-all outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium text-foreground',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:brightness-75',\n 'read-only:pointer-events-none read-only:cursor-not-allowed read-only:brightness-75',\n className,\n )}\n {...props}\n />\n )\n },\n)\nInput.displayName = 'Input'\n\nexport { Input }\nexport type { InputProps }\n","'use client'\n\nimport { Separator as SeparatorPrimitive } from '@base-ui/react/separator'\n\nimport { cn } from '@/lib/cn'\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"separator-root\"\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Dialog as SheetPrimitive } from '@base-ui/react/dialog'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nfunction SheetRoot({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n asChild,\n children,\n ...props\n}: SheetPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n if (asChild && React.isValidElement(children)) {\n return (\n <SheetPrimitive.Trigger\n data-slot=\"sheet-trigger\"\n nativeButton={\n typeof children.type === 'string' ? children.type === 'button' : true\n }\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <SheetPrimitive.Trigger\n data-slot=\"sheet-trigger\"\n className=\"cursor-pointer\"\n {...props}\n >\n {children}\n </SheetPrimitive.Trigger>\n )\n}\n\nfunction SheetClose({\n asChild,\n children,\n ...props\n}: SheetPrimitive.Close.Props & {\n asChild?: boolean\n}) {\n if (asChild && React.isValidElement(children)) {\n return (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n nativeButton={\n typeof children.type === 'string' ? children.type === 'button' : true\n }\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n className=\"cursor-pointer\"\n {...props}\n >\n {children}\n </SheetPrimitive.Close>\n )\n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 transition-opacity duration-300',\n 'data-starting-style:opacity-0 data-ending-style:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: 'top' | 'right' | 'bottom' | 'left'\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background fixed z-50 flex flex-col gap-4 shadow-lg transition-transform ease-in-out duration-500 data-ending-style:duration-300',\n side === 'right' &&\n 'data-starting-style:translate-x-full data-ending-style:translate-x-full inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',\n side === 'left' &&\n 'data-starting-style:-translate-x-full data-ending-style:-translate-x-full inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',\n side === 'top' &&\n 'data-starting-style:-translate-y-full data-ending-style:-translate-y-full inset-x-0 top-0 h-auto border-b',\n side === 'bottom' &&\n 'data-starting-style:translate-y-full data-ending-style:translate-y-full inset-x-0 bottom-0 h-auto border-t',\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity cursor-pointer hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <Icon name=\"Xmark\" className=\"size-4\" />\n <span className=\"sr-only\">{'close'}</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex flex-col gap-1.5 p-4', className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: SheetPrimitive.Title.Props) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nconst Sheet = Object.assign(SheetRoot, {\n Close: SheetClose,\n Content: SheetContent,\n Description: SheetDescription,\n Footer: SheetFooter,\n Header: SheetHeader,\n Title: SheetTitle,\n Trigger: SheetTrigger,\n})\nexport { Sheet }\n","import { cn } from '@/lib/cn'\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"skeleton\"\n suppressHydrationWarning\n className={cn('bg-skeleton animate-pulse rounded-2xl', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\ninterface TooltipContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n isMobile: boolean\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nfunction useTooltipContext() {\n const context = React.useContext(TooltipContext)\n if (!context) {\n throw new Error('Tooltip components must be used within a Tooltip')\n }\n return context\n}\n\nfunction TooltipProvider({\n delay = 400,\n timeout = 300,\n ...props\n}: TooltipPrimitive.Provider.Props) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delay}\n timeout={timeout}\n {...props}\n />\n )\n}\n\nfunction TooltipRoot({ ...props }: TooltipPrimitive.Root.Props) {\n const isMobile = useIsMobile()\n const [open, setOpen] = React.useState(false)\n\n const contextValue = React.useMemo(\n () => ({ open, setOpen, isMobile }),\n [open, isMobile],\n )\n\n return (\n <TooltipContext.Provider value={contextValue}>\n <TooltipProvider>\n <TooltipPrimitive.Root\n data-slot=\"tooltip\"\n open={open}\n onOpenChange={setOpen}\n {...props}\n />\n </TooltipProvider>\n </TooltipContext.Provider>\n )\n}\n\nfunction TooltipTrigger({\n onClick,\n asChild,\n children,\n ...props\n}: TooltipPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n const { open, setOpen, isMobile } = useTooltipContext()\n\n const handleClick: TooltipPrimitive.Trigger.Props['onClick'] = (e) => {\n if (isMobile) {\n e.preventDefault()\n setOpen(!open)\n }\n\n onClick?.(e)\n }\n\n if (asChild && React.isValidElement(children)) {\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n onClick={handleClick}\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n onClick={handleClick}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\nfunction TooltipContent({\n className,\n side,\n align,\n sideOffset = 0,\n children,\n ...props\n}: Omit<TooltipPrimitive.Popup.Props, 'className'> &\n Pick<TooltipPrimitive.Positioner.Props, 'side' | 'align' | 'sideOffset'> & {\n className?: string\n }) {\n const classes = className?.split(' ') ?? []\n\n const contentBackground = classes.find((cls) => cls.startsWith('bg-'))?.replace('bg-', '')\n const contentForeground = classes.find((cls) => cls.startsWith('text-'))?.replace('text-', '')\n\n const shadowClass = classes.find((cls) => cls.startsWith('shadow-'))\n const borderClasses = classes.filter((cls) => cls.startsWith('border'))\n\n const shadowMap: Record<string, string> = {\n 'shadow-sm': 'drop-shadow(0 1px 1px rgb(0 0 0 / 0.05))',\n 'shadow': 'drop-shadow(0 1px 3px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 2px rgb(0 0 0 / 0.06))',\n 'shadow-md': 'drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06))',\n 'shadow-lg': 'drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1))',\n 'shadow-xl': 'drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08))',\n 'shadow-2xl': 'drop-shadow(0 25px 25px rgb(0 0 0 / 0.15))',\n }\n\n const borderColorClass = classes.find((cls) => cls.startsWith('border-') && cls !== 'border')\n const borderColor = borderColorClass?.replace('border-', '')\n\n const filters: string[] = []\n\n if (shadowClass && shadowMap[shadowClass]) {\n filters.push(shadowMap[shadowClass])\n }\n\n if (borderClasses.length > 0) {\n const color = borderColor\n ? `var(--${borderColor})`\n : 'var(--border)'\n filters.push(`drop-shadow(0 0 0 1px ${color})`)\n }\n\n const cleanedClassName = classes\n .filter((cls) =>\n !cls.startsWith('shadow-') &&\n !cls.startsWith('border')\n )\n .join(' ')\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n data-slot=\"tooltip-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n style={\n {\n '--content-background': contentBackground\n ? `var(--${contentBackground})`\n : 'var(--primary)',\n '--content-foreground': contentForeground\n ? `var(--${contentForeground})`\n : 'var(--primary-foreground)',\n ...(filters.length > 0 && { filter: filters.join(' ') }),\n } as React.CSSProperties\n }\n className={cn(\n 'bg-(--content-background) text-(--content-foreground) z-50 w-fit origin-(--transform-origin) rounded-lg px-3 py-2 text-sm text-balance',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n cleanedClassName,\n )}\n {...props}\n >\n {children}\n\n <TooltipPrimitive.Arrow className=\"flex data-[side=bottom]:top-[-6px] data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 data-[side=left]:right-[-10px] data-[side=left]:rotate-90 data-[side=right]:left-[-10px] data-[side=right]:-rotate-90\">\n <svg width=\"14\" height=\"7\" viewBox=\"0 0 14 7\" fill=\"none\">\n <path\n d=\"M0 7L6.29289 0.707107C6.68342 0.316583 7.31658 0.316583 7.70711 0.707107L14 7H0Z\"\n className=\"fill-(--content-background)\"\n />\n </svg>\n </TooltipPrimitive.Arrow>\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nconst Tooltip = Object.assign(TooltipRoot, { Provider: TooltipProvider, Content: TooltipContent, Trigger: TooltipTrigger })\n\nexport { Tooltip }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\ntype AccordionProps = Omit<\n AccordionPrimitive.Root.Props,\n 'value' | 'defaultValue' | 'onValueChange' | 'multiple'\n> & {\n /** Radix-compatible API: 'single' keeps at most one item open. */\n type?: 'single' | 'multiple'\n /** Kept for Radix API compatibility; Base UI single accordions are always collapsible. */\n collapsible?: boolean\n value?: string | string[]\n defaultValue?: string | string[]\n /** Receives a `string` when `type=\"single\"` and a `string[]` when `type=\"multiple\"`. */\n onValueChange?: (value: string & string[]) => void\n}\n\nfunction Accordion({\n type = 'single',\n collapsible: _collapsible,\n value,\n defaultValue,\n onValueChange,\n ...props\n}: AccordionProps) {\n const toArray = (v: string | string[] | undefined) =>\n v === undefined ? undefined : Array.isArray(v) ? v : [v]\n\n const handleValueChange = onValueChange\n ? (next: unknown[]) => {\n if (type === 'multiple') {\n const handle = onValueChange as (value: string[]) => void\n handle(next as string[])\n } else {\n const handle = onValueChange as (value: string) => void\n handle((next[next.length - 1] as string) ?? '')\n }\n }\n : undefined\n\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n multiple={type === 'multiple'}\n value={toArray(value)}\n defaultValue={toArray(defaultValue)}\n onValueChange={handleValueChange}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b last:border-b-0', className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-center justify-start gap-4 rounded-md p-4 text-left text-sm font-medium transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none cursor-pointer disabled:opacity-50 [&[data-panel-open]>svg]:rotate-0',\n className,\n )}\n {...props}\n >\n {children}\n\n <Icon name=\"ChevronDown\" className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200 -rotate-90 ml-auto\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className=\"h-(--accordion-panel-height) data-starting-style:h-0 data-ending-style:h-0 transition-[height] duration-200 ease-out overflow-hidden text-sm\"\n {...props}\n >\n <div className={cn('p-4', className)}>{children}</div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n Accordion as AccordionRootPrimitive,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@/components/internal/accordion'\n\nconst cardShell =\n 'flex h-fit w-full flex-col bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group'\n\nconst cardContentShell = cn(\n 'relative flex flex-1 flex-col gap-0 overflow-hidden',\n 'bg-muted [--card-content-radius:calc(var(--card-radius)-var(--card-padding))] [--card-content-padding:1rem] rounded-(--card-content-radius)',\n)\n\nfunction AccordionRoot({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionRootPrimitive>) {\n return (\n <div className={cn(cardShell, className)}>\n <AccordionRootPrimitive\n data-slot=\"accordion\"\n className={cardContentShell}\n {...props}\n />\n </div>\n )\n}\n\nfunction AccordionItemExtended({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionItem>) {\n return (\n <AccordionItem\n className={cn(\n 'rounded-none border-t-4 border-card first:border-t-0',\n 'not-data-open:last:rounded-b-lg',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AccordionTriggerExtended({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionTrigger>) {\n return (\n <AccordionTrigger\n className={cn(\n 'min-h-12 rounded-none border-0 bg-card/50 md:text-base hover:bg-card/75',\n 'first:rounded-t-lg last:not-data-panel-open:rounded-b-lg',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AccordionContentExtended({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionContent>) {\n return (\n <AccordionContent\n className={cn(\n 'border-t-4 border-card',\n className,\n )}\n {...props}\n />\n )\n}\n\nAccordionRoot.displayName = 'Accordion'\nAccordionItemExtended.displayName = 'Accordion.Item'\nAccordionTriggerExtended.displayName = 'Accordion.Trigger'\nAccordionContentExtended.displayName = 'Accordion.Content'\n\nconst Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItemExtended,\n Trigger: AccordionTriggerExtended,\n Content: AccordionContentExtended,\n})\n\nexport { Accordion }\n","import React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu } from '@/components/ui/dropdown-menu'\nimport type { ComponentVariant } from '@/types'\n\ntype ActionItem = {\n label: string\n icon?: IconType\n href?: string\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void\n disabled?: boolean\n className?: string\n variant?: ComponentVariant\n}\n\ntype ActionGroupAlign = 'start' | 'center' | 'end'\n\nexport function ActionGroup({\n items = [],\n disabled,\n children,\n className,\n align = 'end',\n}: {\n items?: ActionItem[][]\n disabled?: boolean\n className?: string\n children?: React.ReactNode\n align?: ActionGroupAlign\n}) {\n const itemsLength = items.flat().length\n const isDisabled = !!disabled || itemsLength === 0\n\n return (\n // `display: contents`: keeps Base UI's Menu internals (focus-guard/aria-owns\n // sentinels, mounted and unmounted as the menu opens and closes) from ever landing\n // as direct siblings of the trigger in whatever the caller renders ActionGroup into\n // (e.g. ButtonGroup), which would otherwise break `:first-child`/`:last-child`-based\n // styling there. The dropdown content itself is unaffected since it's portaled away.\n <div data-slot=\"action-group\" className=\"contents\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n asChild\n disabled={isDisabled}\n className={className}\n data-action-group-trigger\n onClick={(e) => e.stopPropagation()}\n >\n {children ?? (\n <Button\n variant=\"secondary\"\n disabled={isDisabled}\n className=\"relative min-h-8 min-w-8 max-h-8 max-w-8 p-0 shrink-0 disabled:opacity-50\"\n >\n <Icon className=\"h-4 w-4\" name=\"Dots\" />\n\n {isDisabled && (\n <div className=\"absolute top-0 right-0 bg-card rounded-full p-1\">\n <Icon className=\"size-2 shrink-0\" name=\"Lock\" />\n </div>\n )}\n </Button>\n )}\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Content\n align={align}\n className=\"min-w-36 w-(--anchor-width) bg-sidebar/50 rounded-2xl overflow-hidden\"\n >\n {items.map((group, groupIndex) => {\n const isLastGroup = groupIndex === items.length - 1\n\n return (\n <React.Fragment key={groupIndex}>\n <DropdownMenu.Group key={groupIndex} className=\"flex flex-col\">\n {group.map((item, itemIndex) => {\n const isFirst = groupIndex === 0 && itemIndex === 0\n const isLast = isLastGroup && itemIndex === group.length - 1\n\n return (\n <DropdownMenu.Item\n key={`${item.label}-${itemIndex}`}\n onClick={(e) => {\n e.stopPropagation()\n item.onClick?.(\n e as unknown as React.MouseEvent<HTMLButtonElement>,\n )\n }}\n data-variant={item.variant ?? 'default'}\n className={cn(\n 'text-muted-foreground',\n isFirst && 'rounded-t-xl',\n isLast && 'rounded-b-xl',\n item.disabled && 'opacity-50 cursor-not-allowed',\n 'flex items-center gap-2 w-full relative z-10 group/menu-button hover:bg-muted! data-[active=true]:bg-transparent data-[active=false]:hover:text-foreground/75 text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] outline-none cursor-pointer ring-0!',\n 'data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:text-destructive/80 data-[variant=destructive]:hover:bg-destructive/10! data-[variant=destructive]:hover:border-destructive/20',\n item.className,\n )}\n >\n <Icon\n name={item.icon ?? 'Dots'}\n className=\"size-4 text-current\"\n />\n\n {item.label}\n </DropdownMenu.Item>\n )\n })}\n </DropdownMenu.Group>\n\n {!isLastGroup && (\n <DropdownMenu.Separator className=\"max-lg:hidden\" />\n )}\n </React.Fragment>\n )\n })}\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )\n}\n","'use client'\n\nimport { Menu as MenuPrimitive } from '@base-ui/react/menu'\n\nimport * as React from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon } from '@/components/icon'\n\nimport { useHaptics } from '@/hooks/use-haptics'\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { ANIMATION } from '@/constants/animations'\n\nimport { Drawer } from '@/components/ui/drawer'\n\nimport { KeyboardShortcut } from './keyboard-shortcut'\n\ntype DropdownMenuContextValue = {\n isMobile: boolean\n open: boolean\n onOpenChange: (open: boolean) => void\n view: React.ReactNode | null\n setView: (view: React.ReactNode | null) => void\n}\n\nconst DropdownMenuContext =\n React.createContext<DropdownMenuContextValue | null>(null)\n\nconst MENU_ROUNDABLE_MARKER = Symbol('dropdown-menu-roundable')\n\ntype MenuRoundableComponent<P> = React.ComponentType<P> & {\n [MENU_ROUNDABLE_MARKER]?: true\n}\n\n// Lets custom row components (e.g. a slider or checkbox row embedded via\n// `DropdownMenu.Item resetClassName asChild`) opt into the same first/last\n// edge-rounding treatment built-in items get. The marked component receives\n// `data-menu-edge-first`/`data-menu-edge-last` props to apply itself.\nfunction markMenuRoundable<P>(\n Component: React.ComponentType<P>,\n): React.ComponentType<P> {\n const marked = Component as MenuRoundableComponent<P>\n marked[MENU_ROUNDABLE_MARKER] = true\n return Component\n}\n\nfunction isRoundableType(type: unknown) {\n return (\n type === DropdownMenuItem ||\n type === DropdownMenuCheckboxItem ||\n type === DropdownMenuRadioItem ||\n type === DropdownMenuSubTrigger ||\n (typeof type === 'function' &&\n (type as MenuRoundableComponent<unknown>)[MENU_ROUNDABLE_MARKER] ===\n true)\n )\n}\n\nfunction isContainerType(type: unknown) {\n return (\n type === DropdownMenuGroup ||\n type === DropdownMenuRadioGroup ||\n type === DropdownMenuSub\n )\n}\n\nfunction countRoundableItems(children: React.ReactNode): number {\n let count = 0\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return\n\n if (isRoundableType(child.type)) {\n count += 1\n } else if (isContainerType(child.type)) {\n count += countRoundableItems(\n (child.props as { children?: React.ReactNode }).children,\n )\n }\n })\n\n return count\n}\n\nfunction markEdgeItems(\n children: React.ReactNode,\n total: number,\n indexRef: { current: number },\n): React.ReactNode {\n return React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child\n\n if (isRoundableType(child.type)) {\n const index = indexRef.current\n indexRef.current += 1\n\n return React.cloneElement(child, {\n 'data-menu-edge-first': index === 0 || undefined,\n 'data-menu-edge-last': index === total - 1 || undefined,\n } as Record<string, unknown>)\n }\n\n if (isContainerType(child.type)) {\n return React.cloneElement(child, {\n children: markEdgeItems(\n (child.props as { children?: React.ReactNode }).children,\n total,\n indexRef,\n ),\n } as Record<string, unknown>)\n }\n\n return child\n })\n}\n\nfunction withRoundedEdges(children: React.ReactNode): React.ReactNode {\n const total = countRoundableItems(children)\n\n return markEdgeItems(children, total, { current: 0 })\n}\n\ntype DropdownMenuProps = Omit<MenuPrimitive.Root.Props, 'onOpenChange'> & {\n onOpenChange?: (open: boolean) => void\n}\n\nfunction DropdownMenuRoot({\n open,\n onOpenChange,\n defaultOpen,\n children,\n ...props\n}: DropdownMenuProps) {\n const isMobile = useIsMobile()\n\n const [drawerOpen, setDrawerOpen] = React.useState(defaultOpen ?? false)\n const [view, setView] = React.useState<React.ReactNode | null>(null)\n\n const internalOpen = open ?? drawerOpen\n\n const handleOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setDrawerOpen(isOpen)\n onOpenChange?.(isOpen)\n\n if (!isOpen) {\n setTimeout(() => setView(null), 200)\n }\n },\n [onOpenChange],\n )\n\n return (\n <DropdownMenuContext.Provider\n value={{ isMobile, open: internalOpen, onOpenChange: handleOpenChange, view, setView }}\n >\n <MenuPrimitive.Root\n data-slot=\"dropdown-menu\"\n open={isMobile ? false : internalOpen}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </MenuPrimitive.Root>\n </DropdownMenuContext.Provider>\n )\n}\n\nfunction DropdownMenuPortal({\n children,\n ...props\n}: MenuPrimitive.Portal.Props) {\n return (\n <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props}>\n {children}\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuTrigger({\n className,\n asChild,\n children,\n ...props\n}: MenuPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n const { trigger } = useHaptics()\n\n if (asChild && React.isValidElement<{ className?: string }>(children)) {\n return (\n <MenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n nativeButton={true}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n render={(triggerProps) => {\n return React.cloneElement(children, {\n ...triggerProps,\n ...children.props,\n className: cn(className, children.props.className),\n })\n }}\n />\n )\n }\n\n return (\n <MenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n className={cn('cursor-pointer', className)}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n >\n {children}\n </MenuPrimitive.Trigger>\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n align = 'start',\n side = 'bottom',\n rounded = true,\n children,\n ...props\n}: MenuPrimitive.Positioner.Props & {\n sideOffset?: number\n rounded?: boolean\n}) {\n const { trigger } = useHaptics()\n\n const ctx = React.useContext(DropdownMenuContext)\n\n if (ctx?.isMobile) {\n return (\n <Drawer\n open={ctx.open}\n direction=\"bottom\"\n onOpenChange={ctx.onOpenChange}\n >\n <Drawer.Content title={'dropdownMenu.title'} showDivider rounded={rounded}>\n <div className=\"overflow-y-auto overflow-x-hidden p-2 pb-6\">\n <AnimatePresence mode=\"wait\">\n {ctx.view ? (\n <motion.div\n key=\"submenu\"\n initial={{ opacity: 0, transform: 'translateY(20px)' }}\n animate={{ opacity: 1, transform: 'translateY(0px)' }}\n exit={{ opacity: 0, transform: 'translateY(20px)' }}\n transition={{ duration: ANIMATION.DURATION_FLOAT }}\n >\n <button\n onClick={() => {\n trigger('click')\n ctx.setView(null)\n }}\n className=\"flex w-full items-center gap-2 rounded-sm p-4 text-sm font-medium hover:bg-accent text-muted-foreground\"\n >\n <Icon name=\"ChevronRight\" className=\"size-4 rotate-180\" />\n {'dropdownMenu.back'}\n </button>\n\n {ctx.view}\n </motion.div>\n ) : (\n <motion.div\n key=\"main\"\n initial={{ opacity: 0, transform: 'translateY(-20px)' }}\n animate={{ opacity: 1, transform: 'translateY(0px)' }}\n exit={{ opacity: 0, transform: 'translateY(-20px)' }}\n transition={{ duration: ANIMATION.DURATION_FLOAT }}\n >\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </Drawer.Content>\n </Drawer>\n )\n }\n\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n data-slot=\"dropdown-menu-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n className=\"z-50\"\n {...props}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\n 'z-50! max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto glass-popover p-1 text-popover-foreground shadow-md outline-none',\n rounded && 'rounded-2xl',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n className,\n )}\n >\n {rounded ? withRoundedEdges(children) : children}\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ children, ...props }: MenuPrimitive.Group.Props) {\n return (\n <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props}>\n {children}\n </MenuPrimitive.Group>\n )\n}\n\nfunction DropdownMenuItem({\n className,\n variant = 'default',\n resetClassName = false,\n asChild,\n children,\n 'data-menu-edge-first': edgeFirst,\n 'data-menu-edge-last': edgeLast,\n ...props\n}: MenuPrimitive.Item.Props & {\n variant?: 'default' | 'destructive'\n resetClassName?: boolean\n asChild?: boolean\n 'data-menu-edge-first'?: boolean\n 'data-menu-edge-last'?: boolean\n}) {\n const { trigger } = useHaptics()\n const ctx = React.useContext(DropdownMenuContext)\n\n const itemClassName = cn(\n !resetClassName &&\n \"relative flex items-center gap-2 p-4 lg:px-2 lg:py-2 text-sm font-medium outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 data-[variant=destructive]:text-destructive data-[variant=destructive]:data-highlighted:bg-destructive/5 data-[variant=destructive]:data-highlighted:text-destructive dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive! cursor-pointer\",\n !resetClassName && (edgeFirst ? 'rounded-t-xl' : 'rounded-none'),\n !resetClassName && (edgeLast ? 'rounded-b-xl' : 'rounded-none'),\n className,\n )\n\n if (ctx?.isMobile) {\n const { onClick, disabled } = props as {\n onClick?: React.MouseEventHandler\n disabled?: boolean\n }\n\n const mobileItemClassName = cn(\n !resetClassName &&\n \"relative flex items-center gap-2 rounded-sm p-4 lg:px-2 lg:py-2 text-sm font-medium outline-hidden select-none hover:bg-accent hover:text-accent-foreground active:bg-accent active:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:bg-destructive/5 data-[variant=destructive]:hover:text-destructive dark:data-[variant=destructive]:hover:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground cursor-pointer w-full text-left\",\n className,\n )\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children as React.ReactElement<React.HTMLAttributes<HTMLElement>>,\n {\n className: cn(\n mobileItemClassName,\n (children as React.ReactElement<{ className?: string }>).props\n .className,\n ),\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n trigger('click')\n\n const childOnClick = (\n children as React.ReactElement<React.HTMLAttributes<HTMLElement>>\n ).props.onClick\n\n childOnClick?.(e)\n ctx.onOpenChange(false)\n },\n },\n )\n }\n\n return (\n <button\n type=\"button\"\n data-slot=\"dropdown-menu-item\"\n data-variant={variant}\n disabled={disabled}\n className={mobileItemClassName}\n onClick={(e) => {\n trigger('click')\n onClick?.(e)\n ctx.onOpenChange(false)\n }}\n >\n {children}\n </button>\n )\n }\n\n if (asChild && React.isValidElement(children)) {\n const isNativeButton = children.type === 'button'\n\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-variant={variant}\n nativeButton={isNativeButton}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n closeOnClick={true}\n render={(itemProps) => {\n return React.cloneElement(children, {\n ...itemProps,\n ...(children.props as { className?: string }),\n className: cn(\n itemClassName,\n 'flex items-center gap-3 w-full relative z-10 group/menu-button hover:bg-accent! data-[active=true]:bg-transparent p-2! text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] outline-none cursor-pointer ring-0!',\n edgeFirst && 'rounded-t-xl',\n edgeLast && 'rounded-b-xl',\n (children.props as { className?: string }).className,\n ),\n } as React.ComponentProps<typeof MenuPrimitive.Item>)\n }}\n />\n )\n }\n\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-variant={variant}\n className={itemClassName}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n closeOnClick={true}\n >\n {children}\n </MenuPrimitive.Item>\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n onCheckedChange,\n 'data-menu-edge-first': edgeFirst,\n 'data-menu-edge-last': edgeLast,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n 'data-menu-edge-first'?: boolean\n 'data-menu-edge-last'?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n edgeFirst ? 'rounded-t-xl' : 'rounded-none',\n edgeLast ? 'rounded-b-xl' : 'rounded-none',\n className,\n )}\n checked={checked}\n onCheckedChange={onCheckedChange}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenuPrimitive.CheckboxItemIndicator>\n <Icon name=\"Check\" className=\"size-4\" />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n children,\n ...props\n}: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props}>\n {children}\n </MenuPrimitive.RadioGroup>\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n 'data-menu-edge-first': edgeFirst,\n 'data-menu-edge-last': edgeLast,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n 'data-menu-edge-first'?: boolean\n 'data-menu-edge-last'?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 p-4 lg:py-2 lg:pr-2 lg:pl-8 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n edgeFirst ? 'rounded-t-xl' : 'rounded-none',\n edgeLast ? 'rounded-b-xl' : 'rounded-none',\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenuPrimitive.RadioItemIndicator>\n <Icon name=\"Check\" className=\"size-4\" />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n ...props\n}: MenuPrimitive.GroupLabel.Props) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n className={cn(\n 'px-2 pt-2 pb-1.5 text-xs font-medium uppercase text-muted-foreground/50 select-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('my-2 lg:-mx-1 lg:my-1 h-[0.5px] bg-border/50', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<typeof KeyboardShortcut>) {\n return (\n <KeyboardShortcut\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nconst DropdownMenuSubContext = React.createContext<{\n content: React.ReactNode | null\n setContent: (content: React.ReactNode | null) => void\n} | null>(null)\n\nfunction DropdownMenuSub({\n children,\n ...props\n}: MenuPrimitive.SubmenuRoot.Props) {\n const ctx = React.useContext(DropdownMenuContext)\n const [content, setContent] = React.useState<React.ReactNode | null>(null)\n\n if (ctx?.isMobile) {\n return (\n <DropdownMenuSubContext.Provider value={{ content, setContent }}>\n {children as React.ReactNode}\n </DropdownMenuSubContext.Provider>\n )\n }\n\n return (\n <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props}>\n {children}\n </MenuPrimitive.SubmenuRoot>\n )\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n children,\n 'data-menu-edge-first': edgeFirst,\n 'data-menu-edge-last': edgeLast,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n 'data-menu-edge-first'?: boolean\n 'data-menu-edge-last'?: boolean\n}) {\n const { trigger } = useHaptics()\n\n const ctx = React.useContext(DropdownMenuContext)\n const subCtx = React.useContext(DropdownMenuSubContext)\n\n const triggerClassName = cn(\n 'flex items-center gap-3 w-full relative z-10 group/menu-button hover:bg-accent! data-[active=true]:bg-transparent p-2 text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2.5 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-[transform,opacity] duration-200 active:scale-[99.35%] outline-none cursor-pointer ring-0!',\n edgeFirst ? 'rounded-t-xl' : 'rounded-none',\n edgeLast ? 'rounded-b-xl' : 'rounded-none',\n className,\n )\n\n if (ctx?.isMobile) {\n return (\n <button\n type=\"button\"\n className={triggerClassName}\n onClick={() => {\n trigger('click')\n ctx.setView(subCtx?.content ?? null)\n }}\n >\n {children}\n <Icon name=\"ChevronRight\" className=\"ml-auto size-4\" />\n </button>\n )\n }\n\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n className={triggerClassName}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n >\n {children}\n <Icon name=\"ChevronRight\" className=\"ml-auto size-4\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n sideOffset = 0,\n alignOffset = -4,\n rounded = true,\n children,\n}: {\n className?: string\n sideOffset?: number\n alignOffset?: number\n rounded?: boolean\n children?: React.ReactNode\n}) {\n const ctx = React.useContext(DropdownMenuContext)\n const subCtx = React.useContext(DropdownMenuSubContext)\n\n React.useEffect(() => {\n if (ctx?.isMobile) {\n subCtx?.setContent(children ?? null)\n }\n }, [children, ctx?.isMobile, subCtx])\n\n if (ctx?.isMobile) {\n return null\n }\n\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n side=\"right\"\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className=\"z-50\"\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'z-50! min-w-32 origin-(--transform-origin) overflow-hidden glass-popover p-1 text-popover-foreground shadow-lg',\n rounded && 'rounded-2xl',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n className,\n )}\n >\n {rounded ? withRoundedEdges(children) : children}\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuArrow({ className, ...props }: MenuPrimitive.Arrow.Props) {\n return (\n <MenuPrimitive.Arrow\n data-slot=\"dropdown-menu-arrow\"\n className={cn('fill-popover', className)}\n {...props}\n />\n )\n}\n\nconst DropdownMenu = Object.assign(DropdownMenuRoot, {\n Arrow: DropdownMenuArrow,\n CheckboxItem: DropdownMenuCheckboxItem,\n Content: DropdownMenuContent,\n Group: DropdownMenuGroup,\n Item: DropdownMenuItem,\n Label: DropdownMenuLabel,\n Portal: DropdownMenuPortal,\n RadioGroup: DropdownMenuRadioGroup,\n RadioItem: DropdownMenuRadioItem,\n Separator: DropdownMenuSeparator,\n Shortcut: DropdownMenuShortcut,\n Sub: DropdownMenuSub,\n SubContent: DropdownMenuSubContent,\n SubTrigger: DropdownMenuSubTrigger,\n Trigger: DropdownMenuTrigger,\n markRoundable: markMenuRoundable,\n})\n\nexport { DropdownMenu }\n","'use client'\n\nimport { Drawer as DrawerPrimitive } from 'vaul'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\n/**\n * Move focus into the drawer panel when it opens so the trigger is not left\n * focused while Radix applies aria-hidden on page roots (avoids console warnings).\n */\nfunction focusFirstFocusableInDrawer(container: HTMLElement) {\n const el = container.querySelector<HTMLElement>(\n [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(','),\n )\n el?.focus()\n}\n\nfunction DrawerRoot({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return (\n <DrawerPrimitive.Trigger\n data-slot=\"drawer-trigger\"\n className=\"cursor-pointer\"\n {...props}\n />\n )\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return (\n <DrawerPrimitive.Close\n data-slot=\"drawer-close\"\n className=\"cursor-pointer\"\n {...props}\n />\n )\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n title = 'Title',\n showDivider = false,\n rounded = true,\n onOpenAutoFocus,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content> & {\n title?: string\n showDivider?: boolean\n rounded?: boolean\n}) {\n const handleOpenAutoFocus = React.useCallback(\n (event: Event) => {\n onOpenAutoFocus?.(\n event as Parameters<\n NonNullable<\n React.ComponentProps<\n typeof DrawerPrimitive.Content\n >['onOpenAutoFocus']\n >\n >[0],\n )\n if (event.defaultPrevented) return\n\n event.preventDefault()\n const root = event.currentTarget\n if (root instanceof HTMLElement) {\n focusFirstFocusableInDrawer(root)\n }\n },\n [onOpenAutoFocus],\n )\n\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n aria-describedby={undefined}\n onOpenAutoFocus={handleOpenAutoFocus}\n className={cn(\n // vaul applies its drag/open transform directly to this element — it must\n // stay free of `overflow`/`border-radius` itself. Chromium can fail to\n // clip a rounded, overflow-hidden box to its curve while that same box is\n // being actively transformed (the exact bug that made the desktop\n // DropdownMenu popup flash square-cornered while animating with `filter`).\n // The visual rounding/clipping lives on the inner wrapper below instead,\n // which never carries a transform of its own.\n 'group/drawer-content fixed z-50 flex h-auto flex-col ring-0 focus:ring-0',\n 'data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh]',\n 'data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh]',\n 'data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:sm:max-w-sm',\n 'data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:sm:max-w-sm',\n )}\n {...props}\n >\n <div\n className={cn(\n 'bg-background flex h-full min-h-0 w-full flex-1 flex-col overflow-hidden',\n rounded &&\n 'group-data-[vaul-drawer-direction=top]/drawer-content:rounded-b-lg group-data-[vaul-drawer-direction=bottom]/drawer-content:rounded-t-lg',\n 'group-data-[vaul-drawer-direction=top]/drawer-content:border-b',\n 'group-data-[vaul-drawer-direction=bottom]/drawer-content:border-t',\n 'group-data-[vaul-drawer-direction=right]/drawer-content:border-l',\n 'group-data-[vaul-drawer-direction=left]/drawer-content:border-r',\n className,\n )}\n >\n <DrawerTitle className=\"sr-only\">{title}</DrawerTitle>\n\n {showDivider && (\n <div className=\"bg-ring/25 mx-auto mt-4 hidden h-2 w-1/5 shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n )}\n {children}\n </div>\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n 'flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nconst Drawer = Object.assign(DrawerRoot, {\n Close: DrawerClose,\n Content: DrawerContent,\n Description: DrawerDescription,\n Footer: DrawerFooter,\n Header: DrawerHeader,\n Overlay: DrawerOverlay,\n Portal: DrawerPortal,\n Title: DrawerTitle,\n Trigger: DrawerTrigger,\n})\nexport { Drawer }\n","import * as React from \"react\"\nimport { cn } from \"@/lib/cn\"\n\nexport const KeyboardShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nKeyboardShortcut.displayName = \"KeyboardShortcut\"\n","import * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nconst alertVariants = cva(\n 'relative w-fit rounded-2xl px-4 py-3 text-sm grid gap-y-0.5 has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] items-start [&>svg]:size-4 [&>svg]:translate-y-1 [&:has(>[data-slot=alert-title],[data-slot=alert-description])]:has-[>svg]:gap-x-2 [&:has(*[data-slot=alert-description]):not(:has(*[data-slot=alert-title]))]:[&>svg]:translate-y-0.5 [&:not(:has(*[data-slot=alert-title])):not(:has(*[data-slot=alert-description]))]:[&>svg]:translate-y-0 [&>svg]:text-current [&:not(:has([data-slot=alert-title]))]:*:data-[slot=alert-description]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-destructive/5 [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/70',\n warning:\n 'text-warning bg-warning/5 [&>svg]:text-current *:data-[slot=alert-description]:text-warning/70',\n info: 'text-info bg-info/5 [&>svg]:text-current *:data-[slot=alert-description]:text-info/70',\n success:\n 'text-success bg-success/5 [&>svg]:text-current *:data-[slot=alert-description]:text-success/70',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nfunction AlertRoot({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 text-base', className)}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst Alert = Object.assign(AlertRoot, { Title: AlertTitle, Description: AlertDescription })\nexport { Alert }\n","import * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2 py-0.5 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n warning:\n 'border-transparent bg-warning text-warning-foreground hover:bg-warning/80',\n success:\n 'border-transparent bg-success text-success-foreground hover:bg-success/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import React, { useEffect, useState } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Input } from '@/components/ui/input'\n\nexport const BrandDomainInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<'input'>\n>(function BrandDomainInput(props, ref) {\n const isMobile = useIsMobile()\n const [prefix, setPrefix] = useState('')\n\n useEffect(() => {\n setPrefix(isMobile ? '@' : `${'onne.chat'}/@`)\n }, [isMobile])\n\n return (\n <div className=\"flex w-full\">\n <div\n className={cn(\n 'flex items-center justify-center px-3 py-2 text-muted-foreground text-sm whitespace-nowrap select-none',\n 'bg-accent h-10 w-fit rounded-xl rounded-r-none',\n isMobile && 'aspect-square size-10',\n )}\n >\n {prefix}\n </div>\n\n <Input\n type=\"text\"\n ref={ref}\n {...props}\n className={cn('rounded-l-none!', props.className)}\n />\n </div>\n )\n})\n","\nimport { cn } from '@/lib/cn'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\n\ninterface BreadcrumbItem {\n label: string\n href?: string\n}\n\ninterface BreadcrumbProps {\n items: BreadcrumbItem[]\n className?: string\n hideBackButton?: boolean\n disableLinks?: boolean\n}\n\nexport function Breadcrumb({ items, className, hideBackButton, disableLinks }: BreadcrumbProps) {\n const penultimate = items.length > 1 ? items[items.length - 2] : null\n\n return (\n <div className={cn('flex items-center gap-3', className)}>\n {penultimate?.href && !hideBackButton && (\n <Button\n asChild\n size=\"icon-sm\"\n variant=\"secondary\"\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n >\n <a href={penultimate.href}>\n <Icon name=\"ArrowLeft\" className=\"size-4\" />\n </a>\n </Button>\n )}\n\n <nav aria-label=\"breadcrumb\" className=\"flex items-center gap-1 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n\n return (\n <span key={index} className=\"flex items-center gap-1\">\n {index > 0 && (\n <Icon\n name=\"ChevronRight\"\n className=\"size-3.5 text-muted-foreground\"\n />\n )}\n {item.href && !isLast && !disableLinks ? (\n <a\n href={item.href}\n className={cn(\n 'inline-flex items-center rounded-lg text-muted-foreground hover:text-foreground',\n 'outline-none focus-visible:outline-none focus-visible:ring-inset focus-visible:ring-[3px] focus-visible:ring-ring/50',\n )}\n >\n {item.label}\n </a>\n ) : (\n <span\n className={cn(\n isLast\n ? 'text-foreground font-medium'\n : 'text-muted-foreground',\n )}\n >\n {item.label}\n </span>\n )}\n </span>\n )\n })}\n </nav>\n </div>\n )\n}\n","import { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\nimport { Slot } from '@/lib/slot'\nimport { Separator } from '@/components/ui/separator'\n\n// The `_[data-slot=...-control]` descendant selectors reach into wrapper components\n// (InputGroup, ActionGroup) whose actual bordered element sits one level below the\n// direct `button-group` child — those wrappers render as `display: contents` so\n// library-internal elements (e.g. Base UI's focus-guard sentinels) never become\n// direct children of `button-group` and never confuse `:first-child`/`:last-child`.\n//\n// The edge selectors use `:nth-child(1 of S)`/`:nth-last-child(1 of S)` instead of\n// `:first-child`/`:last-child` because Base UI injects siblings next to popup\n// triggers placed directly inside the group: focus-guard spans around Menu/Popover\n// triggers while their popup is open, a hidden `span[aria-owns]` portal anchor at\n// the Content declaration site, and the always-present hidden native <select>\n// after the Select trigger. The `of` filter skips those, so a trigger keeps its\n// outer-edge rounding while its popup is open.\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 [&>[data-slot=input-group]]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))]:rounded-l-none [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))]:border-l-0 [&>*:not(:nth-last-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))]:rounded-r-none [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=input-group-control]]:rounded-l-none [&>*:not(:nth-last-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=input-group-control]]:rounded-r-none [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=dropdown-menu-trigger]]:rounded-l-none [&>*:not(:nth-last-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=dropdown-menu-trigger]]:rounded-r-none\",\n vertical:\n \"flex-col [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))]:rounded-t-none [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))]:border-t-0 [&>*:not(:nth-last-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))]:rounded-b-none [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=input-group-control]]:rounded-t-none [&>*:not(:nth-last-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=input-group-control]]:rounded-b-none [&>*:not(:nth-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=dropdown-menu-trigger]]:rounded-t-none [&>*:not(:nth-last-child(1_of_:not([data-base-ui-focus-guard],span[aria-owns],select[aria-hidden=true])))_[data-slot=dropdown-menu-trigger]]:rounded-b-none\",\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n },\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n className={cn(\n \"bg-accent flex items-center gap-2 rounded-xl px-4 text-sm text-muted-foreground font-medium [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className,\n )}\n {...props}\n />\n )\n}\n\ntype ButtonGroupSeparatorProps = React.ComponentProps<typeof Separator>\n\nfunction ButtonGroupSeparator({\n className,\n orientation = 'vertical',\n ...props\n}: ButtonGroupSeparatorProps) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n 'bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n","'use client';\n\nimport React from 'react';\n\nimport { motion } from 'motion/react';\n\nimport { cn } from '@/lib/cn';\n\nfunction usePrefersReducedMotion() {\n const [reduced, setReduced] = React.useState(false);\n\n React.useEffect(() => {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n const sync = () => setReduced(mq.matches);\n sync();\n mq.addEventListener('change', sync);\n return () => mq.removeEventListener('change', sync);\n }, []);\n\n return reduced;\n}\n\ninterface CardSliderProps extends React.ComponentProps<'div'> {\n /** Zero-based index of the visible panel */\n index: number;\n /** Duration in ms (ignored when `prefers-reduced-motion: reduce`) */\n transitionDurationMs?: number;\n}\n\n/**\n * Horizontal slide between step panels inside a card (viewport + flex track).\n * Each direct child is one full-width step.\n */\nfunction CardSlider({\n index,\n className,\n children,\n transitionDurationMs = 300,\n ...props\n}: CardSliderProps) {\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const items = React.Children.toArray(children).filter(Boolean);\n const count = items.length;\n\n const safeIndex =\n count === 0 ? 0 : Math.max(0, Math.min(Math.floor(index), count - 1));\n\n const transformTransition = prefersReducedMotion\n ? 'none'\n : `transform ${transitionDurationMs}ms cubic-bezier(0.32, 0.72, 0, 1)`;\n\n const slideRefs = React.useRef<(HTMLDivElement | null)[]>([]);\n const [heights, setHeights] = React.useState<number[]>([]);\n\n React.useLayoutEffect(() => {\n slideRefs.current = slideRefs.current.slice(0, count);\n }, [count]);\n\n React.useLayoutEffect(() => {\n const elements = slideRefs.current\n .slice(0, count)\n .filter((el): el is HTMLDivElement => el !== null);\n if (elements.length === 0) return;\n\n const measure = () => {\n setHeights(prev => {\n const next: number[] = [];\n for (let i = 0; i < count; i++) {\n const el = slideRefs.current[i];\n if (!el) {\n next.push(0);\n continue;\n }\n // scrollHeight: full content height (grid row height would be max of all columns otherwise).\n const h = Math.max(\n el.scrollHeight,\n el.getBoundingClientRect().height,\n );\n next.push(h);\n }\n if (\n prev.length === next.length &&\n prev.every((v, i) => v === next[i])\n ) {\n return prev;\n }\n return next;\n });\n };\n\n measure();\n const ro = new ResizeObserver(measure);\n elements.forEach(el => ro.observe(el));\n return () => ro.disconnect();\n }, [count, safeIndex]);\n\n const activeHeight = heights[safeIndex] ?? 0;\n const durationSec = prefersReducedMotion ? 0 : transitionDurationMs / 1000;\n\n if (count === 0) return null;\n\n const slideShare = 100 / count;\n\n return (\n <div\n data-slot=\"card-slider\"\n className={cn(\n 'min-h-0 min-w-0 w-full max-w-full overflow-x-clip overflow-y-visible',\n className,\n )}\n {...props}\n >\n {/*\n Inactive columns are collapsed (h-0 + overflow hidden + min-h-0) so the grid row\n height is only the active step — not max(all steps), which forced wrong viewport\n height and inner scroll. Active step is never given the collapsed classes.\n */}\n <motion.div\n className=\"min-h-0 w-full overflow-x-clip overflow-y-visible\"\n initial={false}\n animate={\n activeHeight > 0 ? { height: activeHeight } : { height: 'auto' }\n }\n transition={{\n height: {\n duration: durationSec,\n ease: [0.32, 0.72, 0, 1],\n },\n }}\n >\n <div\n className=\"grid min-h-0 will-change-transform items-start\"\n style={{\n width: `${count * 100}%`,\n gridTemplateColumns: `repeat(${count}, minmax(0, 1fr))`,\n transform: `translateX(-${safeIndex * slideShare}%)`,\n transition: transformTransition,\n }}\n >\n {items.map((child, i) => (\n <div\n key={i}\n ref={el => {\n slideRefs.current[i] = el;\n }}\n className={cn(\n 'box-border min-h-0 min-w-0 max-w-full w-full',\n i !== safeIndex &&\n 'h-0 max-h-0 overflow-hidden border-0 p-0 pointer-events-none',\n )}\n aria-hidden={i !== safeIndex}\n >\n {child}\n </div>\n ))}\n </div>\n </motion.div>\n </div>\n );\n}\n\ninterface CardContextValue {\n hasContent: boolean;\n}\n\nconst CardContext = React.createContext<CardContextValue>({\n hasContent: false,\n});\n\ninterface CardProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardRoot({ className, children, ...props }: CardProps) {\n const hasContent = React.Children.toArray(children).some(\n child => React.isValidElement(child) && child.type === CardContent,\n );\n\n return (\n <CardContext.Provider value={{ hasContent }}>\n <div\n className={cn(\n 'flex flex-col bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group w-full h-fit',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </CardContext.Provider>\n );\n}\n\ninterface CardHeaderProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardHeader({ className, children, ...props }: CardHeaderProps) {\n const { hasContent } = React.useContext(CardContext);\n\n return (\n <div\n className={cn(\n 'p-4 flex items-center justify-start gap-3 min-h-14',\n hasContent && 'mb-1',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\ninterface CardContentProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardContent({ className, children, ...props }: CardContentProps) {\n return (\n <div\n className={cn(\n 'relative bg-muted flex flex-1 flex-col gap-4 [--card-content-radius:calc(var(--card-radius)-var(--card-padding))] [--card-content-padding:1rem] rounded-(--card-content-radius) p-(--card-content-padding) overflow-hidden',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\ninterface CardFooterProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction CardFooter({ className, children, ...props }: CardFooterProps) {\n const { hasContent } = React.useContext(CardContext);\n\n return (\n <div\n suppressHydrationWarning\n className={cn(\n 'p-4 flex items-center justify-start gap-3',\n hasContent && 'mt-1',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Content: CardContent,\n Footer: CardFooter,\n Slider: CardSlider,\n});\n\n/** Use these named exports from Server Components — `Card.Header` can be undefined across the RSC boundary. */\nexport { CardContent, CardFooter, CardHeader, CardSlider };\n","'use client'\n\nimport { ZIndexLayer } from 'recharts'\n\nimport { useId } from 'react'\n\n// ── Background Variant Types ─────────────────────────────────────────────────\n// To add a new variant:\n// 1. Add its name to the BackgroundVariant union type below\n// 2. Create a pattern component with PatternProps\n// 3. Register it in PATTERN_MAP\n\nexport type BackgroundVariant =\n | 'dots'\n | 'grid'\n | 'cross-hatch'\n | 'diagonal-lines'\n | 'plus'\n | 'falling-triangles'\n | '4-pointed-star'\n | 'tiny-checkers'\n | 'overlapping-circles'\n | 'wiggle-lines'\n | 'bubbles'\n\n// ── Pattern Components ───────────────────────────────────────────────────────\n\ntype PatternProps = { id: string }\n\nconst DotsPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"20\"\n patternUnits=\"userSpaceOnUse\"\n >\n <circle\n className=\"text-border dark:text-border\"\n cx=\"2\"\n cy=\"2\"\n r=\"1\"\n fill=\"currentColor\"\n />\n </pattern>\n)\n\nconst GridPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"20\"\n patternUnits=\"userSpaceOnUse\"\n >\n <path\n className=\"text-border dark:text-border\"\n d=\"M 20 0 L 0 0 0 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n />\n </pattern>\n)\n\nconst CrossHatchPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"20\"\n patternUnits=\"userSpaceOnUse\"\n >\n <path\n className=\"text-border/60 dark:text-border/50\"\n d=\"M 0 0 L 20 20 M 20 0 L 0 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n />\n </pattern>\n)\n\nconst DiagonalLinesPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"6\"\n height=\"6\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"rotate(45)\"\n >\n <line\n className=\"text-border dark:text-border\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n />\n </pattern>\n)\n\nconst PlusPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"16\"\n height=\"16\"\n patternUnits=\"userSpaceOnUse\"\n >\n <path\n className=\"text-border dark:text-border\"\n d=\"M 8 4 L 8 12 M 4 8 L 12 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"0.5\"\n strokeLinecap=\"round\"\n />\n </pattern>\n)\n\nconst FallingTrianglesPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"18\"\n height=\"36\"\n patternUnits=\"userSpaceOnUse\"\n >\n <path\n className=\"text-border dark:text-border\"\n d=\"M2 6h12L8 18 2 6zm18 36h12l-6 12-6-12z\"\n transform=\"scale(0.5)\"\n fill=\"currentColor\"\n fillOpacity=\"0.4\"\n />\n </pattern>\n)\n\nconst FourPointedStarPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"16\"\n height=\"16\"\n patternUnits=\"userSpaceOnUse\"\n >\n <polygon\n className=\"text-border dark:text-border\"\n fillRule=\"evenodd\"\n points=\"5 3 8 4 5 5 4 8 3 5 0 4 3 3 4 0 5 3\"\n fill=\"currentColor\"\n fillOpacity=\"0.4\"\n />\n </pattern>\n)\n\nconst TinyCheckersPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"8\"\n height=\"8\"\n patternUnits=\"userSpaceOnUse\"\n >\n <path\n className=\"text-border dark:text-border\"\n fillRule=\"evenodd\"\n d=\"M0 0h4v4H0V0zm4 4h4v4H4V4z\"\n fill=\"currentColor\"\n fillOpacity=\"0.2\"\n />\n </pattern>\n)\n\nconst OverlappingCirclesPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"40\"\n height=\"40\"\n patternUnits=\"userSpaceOnUse\"\n >\n <path\n className=\"text-border dark:text-border\"\n fillRule=\"evenodd\"\n d=\"M25 25c0-2.762 2.238-5 5-5s5 2.238 5 5-2.238 5-5 5c0 2.762-2.238 5-5 5s-5-2.238-5-5 2.238-5 5-5zM5 5c0-2.762 2.238-5 5-5s5 2.238 5 5-2.238 5-5 5c0 2.762-2.238 5-5 5S0 12.762 0 10s2.238-5 5-5zm5 4c2.209 0 4-1.791 4-4s-1.791-4-4-4-4 1.791-4 4 1.791 4 4 4zm20 20c2.209 0 4-1.791 4-4s-1.791-4-4-4-4 1.791-4 4 1.791 4 4 4z\"\n fill=\"currentColor\"\n fillOpacity=\"0.4\"\n />\n </pattern>\n)\n\nconst WiggleLinesPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"52\"\n height=\"26\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"scale(0.6)\"\n >\n <path\n className=\"text-border dark:text-border\"\n d=\"M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4v2c-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z\"\n fill=\"currentColor\"\n fillOpacity=\"0.4\"\n />\n </pattern>\n)\n\nconst BubblesPattern = ({ id }: PatternProps) => (\n <pattern\n id={id}\n x=\"0\"\n y=\"0\"\n width=\"100\"\n height=\"100\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"scale(0.6667)\"\n >\n <path\n className=\"text-border dark:text-border\"\n d=\"M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z\"\n fill=\"currentColor\"\n fillOpacity=\"0.4\"\n fillRule=\"evenodd\"\n />\n </pattern>\n)\n\n// ── Pattern Registry ─────────────────────────────────────────────────────────\n// Map variant names to pattern components\n\nconst PATTERN_MAP: Record<BackgroundVariant, React.FC<PatternProps>> = {\n dots: DotsPattern,\n grid: GridPattern,\n plus: PlusPattern,\n bubbles: BubblesPattern,\n 'cross-hatch': CrossHatchPattern,\n 'diagonal-lines': DiagonalLinesPattern,\n 'falling-triangles': FallingTrianglesPattern,\n '4-pointed-star': FourPointedStarPattern,\n 'tiny-checkers': TinyCheckersPattern,\n 'overlapping-circles': OverlappingCirclesPattern,\n 'wiggle-lines': WiggleLinesPattern,\n}\n\n// ── Main Component ───────────────────────────────────────────────────────────\n// Usage: Place <ChartBackground variant=\"dots\" /> inside any Recharts chart component.\n// ZIndexLayer with zIndex={-1} ensures the background renders behind all chart content.\n\ninterface ChartBackgroundProps {\n variant: BackgroundVariant\n}\n\nexport function ChartBackground({ variant }: ChartBackgroundProps) {\n const baseId = useId().replace(/:/g, '')\n const patternId = `${baseId}-bg-${variant}`\n const maskId = `${baseId}-bg-edge-fade`\n const filterId = `${baseId}-bg-blur`\n const PatternComponent = PATTERN_MAP[variant]\n\n return (\n <ZIndexLayer zIndex={-1}>\n <defs>\n <PatternComponent id={patternId} />\n {/* Gaussian blur filter for soft edge fade */}\n <filter id={filterId}>\n <feGaussianBlur stdDeviation=\"25\" />\n </filter>\n {/* Mask: a slightly inset white rect with blur creates smooth transparent edges */}\n <mask id={maskId} maskUnits=\"userSpaceOnUse\">\n <rect\n x=\"8%\"\n y=\"20%\"\n width=\"85%\"\n height=\"60%\"\n fill=\"white\"\n filter={`url(#${filterId})`}\n />\n </mask>\n </defs>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${patternId})`}\n mask={`url(#${maskId})`}\n />\n </ZIndexLayer>\n )\n}\n","'use client'\n\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n Line,\n LineChart,\n ResponsiveContainer,\n} from 'recharts'\n\nimport { type ComponentProps, useCallback, useEffect } from 'react'\nimport * as React from 'react'\n\nimport type { MotionValue } from 'motion/react'\nimport {\n motion,\n useMotionValue,\n useMotionValueEvent,\n useSpring,\n useTransform,\n} from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n type ChartConfig,\n ChartStyle,\n getColorsCount,\n} from '@/components/charts/core/chart'\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\ntype ChartBrushVariant = 'line' | 'area' | 'bar'\ntype CurveType = ComponentProps<typeof Area>['type']\n\ninterface ChartBrushRange {\n startIndex: number\n endIndex: number\n}\n\ninterface ChartBrushProps {\n /** Full dataset – always rendered in the miniature chart */\n data: Record<string, unknown>[]\n /** Chart config with colour definitions */\n chartConfig: ChartConfig\n /** Data keys to plot (default: all keys from chartConfig) */\n dataKeys?: string[]\n /** X-axis data key – used for handle labels */\n xDataKey?: string\n /** Visual variant of the mini chart */\n variant?: ChartBrushVariant\n /** Pixel height of the brush */\n height?: number\n /** Extra className */\n className?: string\n /** Whether areas/bars should be stacked in the mini chart */\n stacked?: boolean\n /** Stroke variant for line / area strokes in the mini chart */\n strokeVariant?: 'solid' | 'dashed' | 'animated-dashed'\n /** Whether to connect null data points in line / area variants */\n connectNulls?: boolean\n /** Radius for bar corners in the bar variant */\n barRadius?: number\n\n // ── Controlled mode ──────────────────────────────────────────────────\n /** Controlled start index */\n startIndex?: number\n /** Controlled end index */\n endIndex?: number\n\n // ── Uncontrolled mode ────────────────────────────────────────────────\n /** Initial start index (uncontrolled) */\n defaultStartIndex?: number\n /** Initial end index (uncontrolled) */\n defaultEndIndex?: number\n\n /** Fired whenever the visible range changes */\n onChange?: (range: ChartBrushRange) => void\n /** Format the handle label from the xDataKey value */\n formatLabel?: (value: unknown, index: number) => string\n /** Curve type for line / area variants */\n curveType?: CurveType\n /** Minimum number of data points that must remain selected */\n minSpan?: number\n /** Whether to render labels on the handles */\n showLabels?: boolean\n /** Skip rendering own ChartStyle (when inside a ChartContainer that already provides CSS vars) */\n skipStyle?: boolean\n}\n\n// ─── Spring config ──────────────────────────────────────────────────────────\n\nconst SPRING_CONFIG = { stiffness: 300, damping: 35, mass: 0.8 }\n\n// ─── Pointer-capture drag hook ──────────────────────────────────────────────\n// Replaces raw addEventListener with the modern Pointer Events API.\n// setPointerCapture routes all pointer events to the originating element,\n// so we get mouse + touch + pen support with zero global listeners.\n\ntype DragType = 'left' | 'right' | 'middle'\n\ninterface DragState {\n type: DragType\n originX: number\n originRange: ChartBrushRange\n}\n\nfunction useBrushDrag({\n range,\n totalPoints,\n containerRef,\n commit,\n}: {\n range: ChartBrushRange\n totalPoints: number\n containerRef: React.RefObject<HTMLDivElement | null>\n commit: (next: ChartBrushRange, mode?: DragType) => void\n}) {\n const dragRef = React.useRef<DragState | null>(null)\n const [isDragging, setIsDragging] = React.useState(false)\n\n const toIndexDelta = useCallback(\n (px: number) => {\n if (!containerRef.current || totalPoints <= 1) return 0\n return Math.round(\n (px / containerRef.current.getBoundingClientRect().width) *\n (totalPoints - 1),\n )\n },\n [totalPoints, containerRef],\n )\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent, type: DragType) => {\n e.preventDefault()\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n dragRef.current = { type, originX: e.clientX, originRange: { ...range } }\n setIsDragging(true)\n },\n [range],\n )\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n const d = dragRef.current\n if (!d) return\n\n const delta = toIndexDelta(e.clientX - d.originX)\n const { type, originRange: o } = d\n\n if (type === 'left') {\n commit(\n { startIndex: o.startIndex + delta, endIndex: o.endIndex },\n 'left',\n )\n } else if (type === 'right') {\n commit(\n { startIndex: o.startIndex, endIndex: o.endIndex + delta },\n 'right',\n )\n } else {\n const span = o.endIndex - o.startIndex\n let s = o.startIndex + delta\n let e2 = s + span\n if (s < 0) {\n s = 0\n e2 = span\n }\n if (e2 > totalPoints - 1) {\n e2 = totalPoints - 1\n s = Math.max(0, e2 - span)\n }\n commit({ startIndex: s, endIndex: e2 }, 'middle')\n }\n },\n [toIndexDelta, totalPoints, commit],\n )\n\n const onPointerUp = useCallback((e: React.PointerEvent) => {\n (e.target as HTMLElement).releasePointerCapture(e.pointerId)\n dragRef.current = null\n setIsDragging(false)\n }, [])\n\n // Helper to bind all three pointer handlers for a given drag type\n const bind = useCallback(\n (type: DragType) => ({\n onPointerDown: (e: React.PointerEvent) => onPointerDown(e, type),\n onPointerMove,\n onPointerUp,\n }),\n [onPointerDown, onPointerMove, onPointerUp],\n )\n\n return { isDragging, bind }\n}\n\n// ─── ChartBrush ────────────────────────────────────────────────────────────\n\nfunction ChartBrush({\n data,\n chartConfig,\n dataKeys,\n xDataKey,\n variant = 'area',\n height = 56,\n className,\n stacked = false,\n strokeVariant = 'solid',\n connectNulls = false,\n barRadius,\n startIndex: controlledStart,\n endIndex: controlledEnd,\n defaultStartIndex = 0,\n defaultEndIndex,\n onChange,\n formatLabel,\n curveType = 'monotone',\n minSpan = 2,\n showLabels = true,\n skipStyle = false,\n}: ChartBrushProps) {\n const containerRef = React.useRef<HTMLDivElement>(null)\n const keys = React.useMemo(\n () => dataKeys ?? Object.keys(chartConfig),\n [dataKeys, chartConfig],\n )\n const totalPoints = data.length\n const chartId = React.useId().replace(/:/g, '')\n\n // ── Controlled vs uncontrolled ──────────────────────────────────────────\n\n const isControlled =\n controlledStart !== undefined && controlledEnd !== undefined\n\n const [internalRange, setInternalRange] = React.useState<ChartBrushRange>(\n () => ({\n startIndex: Math.max(0, Math.min(defaultStartIndex, totalPoints - 1)),\n endIndex: Math.max(\n 0,\n Math.min(defaultEndIndex ?? totalPoints - 1, totalPoints - 1),\n ),\n }),\n )\n\n // Track the last committed range to avoid duplicate updates when small\n // mouse movements don't produce index changes (e.g., at boundaries)\n const lastCommittedRef = React.useRef<ChartBrushRange>(internalRange)\n\n useEffect(() => {\n if (!isControlled) {\n setInternalRange((prev) => {\n const adjusted = {\n startIndex: Math.min(prev.startIndex, Math.max(0, totalPoints - 1)),\n endIndex: Math.min(prev.endIndex, Math.max(0, totalPoints - 1)),\n }\n lastCommittedRef.current = adjusted\n return adjusted\n })\n }\n }, [totalPoints, isControlled])\n\n // ── Clamping & committing ───────────────────────────────────────────────\n\n const clampRange = useCallback(\n (range: ChartBrushRange, mode?: DragType): ChartBrushRange => {\n let { startIndex, endIndex } = range\n const maxIndex = Math.max(0, totalPoints - 1)\n\n startIndex = Math.max(0, Math.min(startIndex, maxIndex))\n endIndex = Math.max(0, Math.min(endIndex, maxIndex))\n\n if (mode === 'left') {\n const maxStart = Math.max(0, endIndex - minSpan)\n startIndex = Math.min(startIndex, maxStart)\n return { startIndex, endIndex }\n }\n\n if (mode === 'right') {\n const minEnd = Math.min(maxIndex, startIndex + minSpan)\n endIndex = Math.max(endIndex, minEnd)\n return { startIndex, endIndex }\n }\n\n if (endIndex - startIndex < minSpan) {\n endIndex = Math.min(startIndex + minSpan, maxIndex)\n if (endIndex - startIndex < minSpan) {\n startIndex = Math.max(0, endIndex - minSpan)\n }\n }\n return { startIndex, endIndex }\n },\n [totalPoints, minSpan],\n )\n\n const commit = useCallback(\n (next: ChartBrushRange, mode?: DragType) => {\n const clamped = clampRange(next, mode)\n const last = lastCommittedRef.current\n\n // Only update if the range has actually changed — avoids unnecessary\n // re-renders when the brush is at a boundary and small mouse movements\n // don't produce index changes\n if (\n last.startIndex === clamped.startIndex &&\n last.endIndex === clamped.endIndex\n ) {\n return\n }\n\n lastCommittedRef.current = clamped\n setInternalRange(clamped)\n // Defer the parent callback — chart re-render happens at lower priority,\n // React can skip intermediate frames during fast drags\n React.startTransition(() => {\n onChange?.(clamped)\n })\n },\n [clampRange, onChange],\n )\n\n // ── Drag ────────────────────────────────────────────────────────────────\n\n const { isDragging, bind } = useBrushDrag({\n range: internalRange,\n totalPoints,\n containerRef,\n commit,\n })\n\n // Position always driven by internalRange (never lags behind controlled props)\n const range = internalRange\n\n // Sync internalRange with controlled props when not dragging\n useEffect(() => {\n if (isControlled && !isDragging) {\n const syncedRange = {\n startIndex: controlledStart,\n endIndex: controlledEnd,\n }\n\n setInternalRange(syncedRange)\n lastCommittedRef.current = syncedRange\n }\n }, [isControlled, controlledStart, controlledEnd, isDragging])\n\n // ── Computed positions (%) ──────────────────────────────────────────────\n\n const leftPct =\n totalPoints > 1 ? (range.startIndex / (totalPoints - 1)) * 100 : 0\n const rightPct =\n totalPoints > 1 ? (range.endIndex / (totalPoints - 1)) * 100 : 100\n\n // Drive all moving brush UI from the same springed edge values.\n const leftTarget = useMotionValue(leftPct)\n const rightTarget = useMotionValue(rightPct)\n if (leftTarget.get() !== leftPct) leftTarget.set(leftPct)\n if (rightTarget.get() !== rightPct) rightTarget.set(rightPct)\n\n const leftSpring = useSpring(leftTarget, SPRING_CONFIG)\n const rightSpring = useSpring(rightTarget, SPRING_CONFIG)\n const leftPosition = useTransform(leftSpring, (v) => `${v}%`)\n const rightPosition = useTransform(rightSpring, (v) => `${v}%`)\n const leftOverlayWidth = useTransform(leftSpring, (v) => `${v}%`)\n const rightOverlayWidth = useTransform(\n rightSpring,\n (v) => `${Math.max(0, 100 - v)}%`,\n )\n const selectedWidth = useMotionValue(`${Math.max(0, rightPct - leftPct)}%`)\n\n const updateSelectedWidth = useCallback(() => {\n selectedWidth.set(`${Math.max(0, rightSpring.get() - leftSpring.get())}%`)\n }, [leftSpring, rightSpring, selectedWidth])\n\n useMotionValueEvent(leftSpring, 'change', updateSelectedWidth)\n useMotionValueEvent(rightSpring, 'change', updateSelectedWidth)\n\n const getLabel = useCallback(\n (idx: number) => {\n if (!xDataKey) return String(idx)\n const v = data[idx]?.[xDataKey]\n return formatLabel ? formatLabel(v, idx) : String(v ?? idx)\n },\n [data, xDataKey, formatLabel],\n )\n\n // ── Render ──────────────────────────────────────────────────────────────\n\n if (totalPoints === 0) return null\n\n return (\n <div\n ref={containerRef}\n data-chart={skipStyle ? undefined : chartId}\n className={cn('group relative select-none', className)}\n style={{ height }}\n >\n {!skipStyle && <ChartStyle id={chartId} config={chartConfig} />}\n\n {/* Mini chart – always shows all data */}\n <div className=\"absolute inset-0 overflow-hidden rounded-md\">\n <MiniChart\n data={data}\n keys={keys}\n chartConfig={chartConfig}\n variant={variant}\n curveType={curveType}\n chartId={chartId}\n stacked={stacked}\n strokeVariant={\n strokeVariant === 'animated-dashed' ? 'dashed' : strokeVariant\n }\n connectNulls={connectNulls}\n barRadius={barRadius}\n />\n </div>\n\n {/* Dim overlay – left */}\n <motion.div\n className=\"bg-background/70 pointer-events-none absolute inset-y-0 left-0 rounded-l-md\"\n style={{ width: leftOverlayWidth }}\n />\n {/* Dim overlay – right */}\n <motion.div\n className=\"bg-background/70 pointer-events-none absolute inset-y-0 right-0 rounded-r-md\"\n style={{ width: rightOverlayWidth }}\n />\n\n {/* Selected region – draggable to pan */}\n <motion.div\n className=\"absolute inset-y-0 cursor-grab touch-none rounded-sm border active:cursor-grabbing\"\n style={{ left: leftPosition, width: selectedWidth }}\n {...bind('middle')}\n />\n\n {/* Left handle */}\n <BrushHandle\n side=\"left\"\n position={leftPosition}\n label={showLabels ? getLabel(range.startIndex) : undefined}\n bind={bind('left')}\n />\n\n {/* Right handle */}\n <BrushHandle\n side=\"right\"\n position={rightPosition}\n label={showLabels ? getLabel(range.endIndex) : undefined}\n bind={bind('right')}\n />\n </div>\n )\n}\n\n// ─── Brush Handle ───────────────────────────────────────────────────────────\n\nfunction BrushHandle({\n side,\n position,\n label,\n bind,\n}: {\n side: 'left' | 'right'\n position: MotionValue<string>\n label?: string\n bind: {\n onPointerDown: (e: React.PointerEvent) => void\n onPointerMove: (e: React.PointerEvent) => void\n onPointerUp: (e: React.PointerEvent) => void\n }\n}) {\n const isLeft = side === 'left'\n\n return (\n <motion.div className=\"absolute inset-y-0 z-10\" style={{ left: position }}>\n <div\n className={cn(\n \"group absolute inset-y-0 flex w-3 cursor-ew-resize touch-none items-center justify-center after:absolute after:inset-y-0 after:-left-4 after:w-11 after:content-['']\",\n isLeft ? '' : '-translate-x-full',\n )}\n {...bind}\n >\n <div\n className={cn(\n 'bg-muted-foreground group-hover:bg-foreground relative flex h-4 w-1.5 items-center justify-center rounded-md transition-colors',\n isLeft ? '-left-[5.5px]' : '-right-[5.5px]',\n )}\n >\n <div className=\"flex flex-col gap-[2px]\">\n <div className=\"bg-background/70 h-[2px] w-[2px] rounded-full\" />\n <div className=\"bg-background/70 h-[2px] w-[2px] rounded-full\" />\n <div className=\"bg-background/70 h-[2px] w-[2px] rounded-full\" />\n </div>\n </div>\n </div>\n\n {label && (\n <div\n className={cn(\n 'bg-foreground text-background pointer-events-none absolute -bottom-3 -translate-y-1/2 rounded-[3px] px-1 py-px text-[8px] leading-tight font-medium whitespace-nowrap opacity-0 group-hover:opacity-100',\n isLeft ? 'left-1.5' : 'right-1.5',\n )}\n >\n {label}\n </div>\n )}\n </motion.div>\n )\n}\n\n// ─── Mini Chart ─────────────────────────────────────────────────────────────\n\nfunction MiniChart({\n data,\n keys,\n chartConfig,\n variant,\n curveType,\n chartId,\n stacked,\n strokeVariant = 'solid',\n connectNulls = false,\n barRadius,\n}: {\n data: Record<string, unknown>[]\n keys: string[]\n chartConfig: ChartConfig\n variant: ChartBrushVariant\n curveType: CurveType\n chartId: string\n stacked: boolean\n strokeVariant?: 'solid' | 'dashed' | 'animated-dashed'\n connectNulls?: boolean\n barRadius?: number\n}) {\n const gradients = React.useMemo(\n () =>\n Object.entries(chartConfig)\n .filter(([key]) => keys.includes(key))\n .map(([dataKey, config]) => ({\n dataKey,\n colorsCount: getColorsCount(config),\n })),\n [chartConfig, keys],\n )\n\n const dashArray =\n strokeVariant === 'dashed' || strokeVariant === 'animated-dashed'\n ? '4 4'\n : undefined\n\n const defsContent = (\n <>\n {/* Vertical fade gradient for area fill mask */}\n {variant === 'area' && (\n <linearGradient\n id={`${chartId}-zm-vertical-fade`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity={0.15} />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={0} />\n </linearGradient>\n )}\n {gradients.map(({ dataKey, colorsCount }) => {\n const colorStops =\n colorsCount === 1 ? (\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n <stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n </>\n ) : (\n Array.from({ length: colorsCount }, (_, i) => (\n <stop\n key={i}\n offset={`${(i / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${i}, var(--color-${dataKey}-0))`}\n />\n ))\n )\n\n return (\n <React.Fragment key={dataKey}>\n {/* Vertical color gradient (stroke + bar fill) */}\n <linearGradient\n id={`${chartId}-zm-${dataKey}`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n {colorStops}\n </linearGradient>\n\n {/* Area fill: color gradient masked with vertical fade */}\n {variant === 'area' && (\n <>\n <mask id={`${chartId}-zm-fill-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-zm-vertical-fade)`}\n />\n </mask>\n <pattern\n id={`${chartId}-zm-fill-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-zm-${dataKey})`}\n mask={`url(#${chartId}-zm-fill-mask-${dataKey})`}\n />\n </pattern>\n </>\n )}\n </React.Fragment>\n )\n })}\n </>\n )\n\n if (variant === 'line') {\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart\n data={data}\n margin={{ top: 4, right: 0, bottom: 0, left: 0 }}\n >\n <defs>{defsContent}</defs>\n {keys.map((dk) => (\n <Line\n key={dk}\n type={curveType}\n dataKey={dk}\n stroke={`url(#${chartId}-zm-${dk})`}\n strokeWidth={1}\n strokeOpacity={0.5}\n strokeDasharray={dashArray}\n connectNulls={connectNulls}\n dot={false}\n activeDot={false}\n isAnimationActive={false}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n )\n }\n\n if (variant === 'bar') {\n const r = barRadius ?? 3\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart\n data={data}\n margin={{ top: 2, right: 0, bottom: 0, left: 0 }}\n barGap={2}\n barSize={14}\n >\n <defs>{defsContent}</defs>\n {keys.map((dk) => (\n <Bar\n key={dk}\n dataKey={dk}\n fill={`url(#${chartId}-zm-${dk})`}\n fillOpacity={0.35}\n stackId={stacked ? 'zm-stack' : undefined}\n isAnimationActive={false}\n radius={[r, r, r, r]}\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n )\n }\n\n // Default: area\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={data} margin={{ top: 4, right: 0, bottom: 0, left: 0 }}>\n <defs>{defsContent}</defs>\n {keys.map((dk) => (\n <Area\n key={dk}\n type={curveType}\n dataKey={dk}\n stroke={`url(#${chartId}-zm-${dk})`}\n fill={`url(#${chartId}-zm-fill-${dk})`}\n strokeWidth={1}\n strokeOpacity={0.5}\n strokeDasharray={dashArray}\n connectNulls={connectNulls}\n fillOpacity={1}\n stackId={stacked ? 'zm-stack' : undefined}\n dot={false}\n activeDot={false}\n isAnimationActive={false}\n />\n ))}\n </AreaChart>\n </ResponsiveContainer>\n )\n}\n\n// ─── useChartBrush Hook ──────────────────────────────────────────────────────\n\nfunction useChartBrush<TData extends Record<string, unknown>>({\n data,\n defaultStartIndex = 0,\n defaultEndIndex,\n}: {\n data: TData[]\n defaultStartIndex?: number\n defaultEndIndex?: number\n}) {\n const [range, setRange] = React.useState<ChartBrushRange>({\n startIndex: defaultStartIndex,\n endIndex: defaultEndIndex ?? Math.max(0, data.length - 1),\n })\n\n // Defer the range used for data slicing — the brush handles move at the\n\n // immediate `range` cadence while the expensive chart re-render uses the\n // deferred value. React can skip intermediate slices during fast drags.\n const deferredRange = React.useDeferredValue(range)\n\n useEffect(() => {\n setRange({\n startIndex: 0,\n endIndex: Math.max(0, data.length - 1),\n })\n }, [data.length])\n\n const visibleData = React.useMemo(\n () => data.slice(deferredRange.startIndex, deferredRange.endIndex + 1),\n [data, deferredRange.startIndex, deferredRange.endIndex],\n )\n\n return {\n range,\n visibleData,\n brushProps: {\n startIndex: range.startIndex,\n endIndex: range.endIndex,\n onChange: setRange,\n } satisfies Pick<ChartBrushProps, 'startIndex' | 'endIndex' | 'onChange'>,\n }\n}\n\nexport {\n ChartBrush,\n type ChartBrushProps,\n type ChartBrushRange,\n type ChartBrushVariant,\n useChartBrush,\n}\n","'use client'\n\nimport * as RechartsPrimitive from 'recharts'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Loader } from '@/components/ui/loader'\n\nfunction useChartContainerSize(ref: React.RefObject<HTMLElement | null>) {\n const [size, setSize] = React.useState<{ w: number; h: number } | null>(null)\n\n React.useLayoutEffect(() => {\n const el = ref.current\n if (!el) return\n\n const update = () => {\n const { width, height } = el.getBoundingClientRect()\n\n const w = Math.round(width)\n const h = Math.round(height)\n\n if (w > 0 && h > 0) {\n setSize((prev) => (prev?.w === w && prev?.h === h ? prev : { w, h }))\n }\n }\n\n update()\n\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n const ro = new ResizeObserver(() => {\n update()\n })\n\n ro.observe(el)\n\n return () => {\n ro.disconnect()\n }\n }, [ref])\n\n return size\n}\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const\n\ntype ThemeKey = keyof typeof THEMES\n\n// All Keys are optional at first\ntype ThemeColorsBase = {\n [K in ThemeKey]?: string[]\n}\n\n// Require at least one theme key\ntype AtLeastOneThemeColor = {\n [K in ThemeKey]: Required<Pick<ThemeColorsBase, K>> &\n Partial<Omit<ThemeColorsBase, K>>\n}[ThemeKey]\n\nconst VALID_THEME_KEYS = Object.keys(THEMES) as ThemeKey[]\n\n// Validation for chart config colors at runtime\nfunction validateChartConfigColors(config: ChartConfig): void {\n for (const [key, value] of Object.entries(config)) {\n if (value.colors) {\n const hasValidThemeKey = VALID_THEME_KEYS.some(\n (themeKey) => value.colors?.[themeKey] !== undefined,\n )\n\n if (!hasValidThemeKey) {\n throw new Error(\n `[Charts] Invalid chart config for \"${key}\": colors object must have at least one theme key (${VALID_THEME_KEYS.join(', ')}). Received empty object or invalid keys.`,\n )\n }\n }\n }\n}\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode\n icon?: React.ComponentType\n colors?: AtLeastOneThemeColor\n }\n>\n\ninterface ChartContextProps {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nexport function useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />')\n }\n\n return context\n}\n\ninterface ChartContainerProps\n extends\n Omit<React.ComponentProps<'div'>, 'children'>,\n Pick<\n React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>,\n | 'initialDimension'\n | 'aspect'\n | 'debounce'\n | 'minHeight'\n | 'minWidth'\n | 'maxHeight'\n | 'height'\n | 'width'\n | 'onResize'\n | 'children'\n > {\n config: ChartConfig\n innerResponsiveContainerStyle?: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >['style']\n /** Optional content rendered below the chart (e.g. ChartBrush) */\n footer?: React.ReactNode\n}\n\nfunction ChartContainer({\n id,\n config,\n initialDimension = { width: 320, height: 200 },\n className,\n children,\n footer,\n ...props\n}: Readonly<ChartContainerProps>) {\n const uniqueId = React.useId()\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, '')}`\n const containerRef = React.useRef<HTMLDivElement>(null)\n const size = useChartContainerSize(containerRef)\n\n // Validate chart config at runtime\n validateChartConfigColors(config)\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n ref={containerRef}\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n 'min-h-0 w-full flex-1',\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border relative flex flex-col justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n !footer && 'aspect-video',\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {size ? (\n <RechartsPrimitive.ResponsiveContainer\n className=\"min-h-0 w-full flex-1\"\n debounce={48}\n initialDimension={initialDimension}\n height={size.h}\n width={size.w}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n ) : (\n <div aria-hidden className=\"min-h-48 w-full shrink-0\" />\n )}\n {footer}\n </div>\n </ChartContext.Provider>\n )\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction LoadingIndicator({ isLoading }: { isLoading: boolean }) {\n // if (!isLoading) {\n return null\n // }\n\n return (\n <div className=\"pointer-events-none absolute inset-0 z-20 flex items-center justify-center\">\n <Loader variant=\"default\" />\n </div>\n )\n}\n\n// Distribute colors evenly across slots, extra slots go to last color(s)\n// Example: 2 colors for 4 slots → [red, red, pink, pink]\n// Example: 3 colors for 4 slots → [red, pink, blue, blue]\nfunction distributeColors(colorsArray: string[], maxCount: number): string[] {\n const availableCount = colorsArray.length\n if (availableCount >= maxCount) {\n return colorsArray.slice(0, maxCount)\n }\n\n const result: string[] = []\n const baseSlots = Math.floor(maxCount / availableCount)\n const extraSlots = maxCount % availableCount\n\n // First (availableCount - extraSlots) colors get baseSlots each\n // Last extraSlots colors get (baseSlots + 1) each\n for (let colorIdx = 0; colorIdx < availableCount; colorIdx++) {\n const isExtraColor = colorIdx >= availableCount - extraSlots\n const slotsForThisColor = baseSlots + (isExtraColor ? 1 : 0)\n for (let j = 0; j < slotsForThisColor; j++) {\n result.push(colorsArray[colorIdx])\n }\n }\n\n return result\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.colors,\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n const generateCssVars = (theme: keyof typeof THEMES) =>\n colorConfig\n .flatMap(([key, itemConfig]) => {\n const colorsArray = itemConfig.colors?.[theme]\n if (\n !colorsArray ||\n !Array.isArray(colorsArray) ||\n colorsArray.length === 0\n ) {\n return []\n }\n\n // Get max count across all themes for this key\n const maxCount = getColorsCount(itemConfig)\n\n // Distribute colors evenly across all required slots\n const distributedColors = distributeColors(colorsArray, maxCount)\n\n return distributedColors.map(\n (color, index) => ` --color-${key}-${index}: ${color};`,\n )\n })\n .filter(Boolean)\n .join('\\n')\n\n const css = Object.entries(THEMES)\n .map(\n ([theme, prefix]) =>\n `${prefix} [data-chart=${id}] {\\n${generateCssVars(theme as keyof typeof THEMES)}\\n}`,\n )\n .join('\\n')\n\n return <style dangerouslySetInnerHTML={{ __html: css }} />\n}\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string,\n) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n 'payload' in payload &&\n typeof payload.payload === 'object' &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === 'string'\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key]\n}\n\n// Format values to percent for expanded charts\nfunction axisValueToPercentFormatter(value: number) {\n return `${Math.round(value * 100).toFixed(0)}%`\n}\n\n// Get max colors count across all themes for a config entry\nfunction getColorsCount(config: ChartConfig[string]): number {\n if (!config.colors) return 1\n const counts = VALID_THEME_KEYS.map(\n (theme) => config.colors?.[theme]?.length ?? 0,\n )\n return Math.max(...counts, 1)\n}\n\n// Generate random loading data for skeleton/loading state\n// min/max represent percentage of the range (0-100), defaults to 20-80 for realistic look\nexport const getLoadingData = (\n points: number = 10,\n min: number = 0,\n max: number = 70,\n) => {\n const range = max - min\n return Array.from({ length: points }, () => ({\n loading: Math.floor(Math.random() * range) + min,\n }))\n}\n\nexport {\n axisValueToPercentFormatter,\n ChartContainer,\n ChartStyle,\n getColorsCount,\n LoadingIndicator,\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nexport type DotVariant = 'default' | 'border' | 'colored-border'\n\ntype ChartDotProps = {\n cx?: number\n cy?: number\n dataKey: string\n chartId: string\n className?: string\n fillOpacity?: number\n type?: DotVariant\n}\n\nconst ChartDot = React.memo(function ChartDot({\n cx,\n cy,\n dataKey,\n chartId,\n className,\n fillOpacity = 1,\n type = 'default',\n}: ChartDotProps) {\n const dotId = React.useId().replace(/:/g, '')\n const gradientUrl = `url(#${chartId}-colors-${String(dataKey)})`\n\n if (cx === undefined || cy === undefined) return null\n\n switch (type) {\n case 'border':\n return (\n <PrimaryBorderDot\n cx={cx}\n cy={cy}\n dotId={dotId}\n fillOpacity={fillOpacity}\n gradientUrl={gradientUrl}\n className={className}\n />\n )\n case 'colored-border':\n return (\n <ColoredBorderDot\n cx={cx}\n cy={cy}\n dotId={dotId}\n fillOpacity={fillOpacity}\n gradientUrl={gradientUrl}\n className={className}\n />\n )\n default:\n return (\n <DefaultDot\n cx={cx}\n cy={cy}\n dotId={dotId}\n fillOpacity={fillOpacity}\n gradientUrl={gradientUrl}\n className={className}\n />\n )\n }\n})\n\ntype DotVariantProps = {\n cx: number\n cy: number\n dotId: string\n fillOpacity: number\n gradientUrl: string\n className?: string\n}\n\nconst DefaultDot = React.memo(\n ({ cx, cy, dotId, fillOpacity, gradientUrl, className }: DotVariantProps) => {\n const r = 3\n return (\n <g className={className}>\n <defs>\n <clipPath id={`dot-clip-${dotId}`}>\n <circle cx={cx} cy={cy} r={r} />\n </clipPath>\n </defs>\n {/* Full-width gradient rectangle clipped to dot shape */}\n <rect\n x=\"0\"\n y={cy - r}\n width=\"100%\"\n height={r * 2}\n fill={gradientUrl}\n fillOpacity={fillOpacity}\n clipPath={`url(#dot-clip-${dotId})`}\n />\n </g>\n )\n },\n)\n\nDefaultDot.displayName = 'DefaultDot'\n\nconst PrimaryBorderDot = React.memo(\n ({ cx, cy, dotId, fillOpacity, gradientUrl, className }: DotVariantProps) => {\n const r = 6\n const strokeWidth = 5\n return (\n <g className={cn(className, 'text-background')}>\n <defs>\n <clipPath id={`dot-clip-${dotId}`}>\n <circle cx={cx} cy={cy} r={r} />\n </clipPath>\n </defs>\n {/* Background stroke (border) */}\n <circle cx={cx} cy={cy} r={r} fill=\"currentColor\" />\n {/* Inner gradient circle clipped */}\n <rect\n x=\"0\"\n y={cy - (r - strokeWidth / 2)}\n width=\"100%\"\n height={(r - strokeWidth / 2) * 2}\n fill={gradientUrl}\n fillOpacity={fillOpacity}\n clipPath={`url(#dot-clip-inner-${dotId})`}\n />\n <defs>\n <clipPath id={`dot-clip-inner-${dotId}`}>\n <circle cx={cx} cy={cy} r={r - strokeWidth / 2} />\n </clipPath>\n </defs>\n </g>\n )\n },\n)\n\nPrimaryBorderDot.displayName = 'PrimaryBorderDot'\n\nconst ColoredBorderDot = React.memo(\n ({ cx, cy, dotId, fillOpacity, gradientUrl, className }: DotVariantProps) => {\n const r = 3\n const strokeWidth = 1\n return (\n <g className={cn(className, 'text-background')}>\n <defs>\n <clipPath id={`dot-clip-${dotId}`}>\n <circle cx={cx} cy={cy} r={r + strokeWidth / 2} />\n </clipPath>\n </defs>\n {/* Gradient stroke (border) via clipped rect */}\n <rect\n x=\"0\"\n y={cy - r - strokeWidth / 2}\n width=\"100%\"\n height={(r + strokeWidth / 2) * 2}\n fill={gradientUrl}\n fillOpacity={fillOpacity}\n clipPath={`url(#dot-clip-${dotId})`}\n />\n {/* Inner solid fill */}\n <circle cx={cx} cy={cy} r={r - strokeWidth / 2} fill=\"currentColor\" />\n </g>\n )\n },\n)\n\nColoredBorderDot.displayName = 'ColoredBorderDot'\n\nexport { ChartDot }\n","import * as RechartsPrimitive from 'recharts'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n getColorsCount,\n getPayloadConfigFromPayload,\n useChart,\n} from '@/components/charts/core/chart'\n\ntype ChartLegendVariant =\n | 'square'\n | 'circle'\n | 'circle-outline'\n | 'rounded-square'\n | 'rounded-square-outline'\n | 'vertical-bar'\n | 'horizontal-bar'\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n nameKey,\n payload,\n verticalAlign,\n align = 'right',\n selected,\n onSelectChange,\n isClickable,\n variant = 'rounded-square',\n}: React.ComponentProps<'div'> & {\n hideIcon?: boolean\n nameKey?: string\n selected?: string | null\n isClickable?: boolean\n onSelectChange?: (selected: string | null) => void\n variant?: ChartLegendVariant\n} & RechartsPrimitive.DefaultLegendContentProps) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n 'flex items-center gap-4 select-none',\n align === 'left' && 'justify-start',\n align === 'center' && 'justify-center',\n align === 'right' && 'justify-end',\n verticalAlign === 'top' ? 'pb-4' : 'pt-4',\n className,\n )}\n >\n {payload\n .filter((item) => item.type !== 'none')\n .map((item) => {\n // For pie charts, item.value contains the sector name (e.g., \"chrome\")\n // For radial charts, the name is in item.payload[nameKey]\n // For other charts, item.dataKey contains the series name (e.g., \"desktop\")\n const payloadName =\n nameKey && item.payload\n ? (item.payload as Record<string, unknown>)[nameKey]\n : undefined\n const key = `${payloadName ?? item.value ?? item.dataKey ?? 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const isSelected = selected === null || selected === key\n\n // Get colors count for this item to determine gradient vs solid\n const colorsCount = itemConfig ? getColorsCount(itemConfig) : 1\n\n const legendItemClassName = cn(\n '[&>svg]:text-muted-foreground flex items-center gap-1.5 transition-opacity [&>svg]:h-3 [&>svg]:w-3',\n !isSelected && 'opacity-30',\n isClickable && 'cursor-pointer',\n )\n\n const legendItemContent = (\n <>\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <LegendIndicator\n variant={variant}\n dataKey={key}\n colorsCount={colorsCount}\n />\n )}\n {itemConfig?.label}\n </>\n )\n\n if (isClickable) {\n return (\n <button\n key={key}\n type=\"button\"\n className={cn(\n legendItemClassName,\n 'border-0 bg-transparent p-0 text-inherit',\n )}\n onClick={() => onSelectChange?.(selected === key ? null : key)}\n >\n {legendItemContent}\n </button>\n )\n }\n\n return (\n <div key={key} className={legendItemClassName}>\n {legendItemContent}\n </div>\n )\n })}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Legend indicator — each variant gets its own branch so future variants\n// can diverge freely in markup & style.\n// ---------------------------------------------------------------------------\n\nfunction LegendIndicator({\n variant,\n dataKey,\n colorsCount,\n}: {\n variant: ChartLegendVariant\n dataKey: string\n colorsCount: number\n}) {\n const fillStyle = getLegendFillStyle(dataKey, colorsCount)\n const outlineStyle = getLegendOutlineStyle(dataKey, colorsCount)\n\n switch (variant) {\n case 'square':\n return <div className=\"h-2 w-2 shrink-0\" style={fillStyle} />\n\n case 'circle':\n return <div className=\"h-2 w-2 shrink-0 rounded-full\" style={fillStyle} />\n\n case 'circle-outline':\n return (\n <div\n className=\"h-2.5 w-2.5 shrink-0 rounded-full p-[1.5px]\"\n style={outlineStyle}\n />\n )\n\n case 'vertical-bar':\n return (\n <div className=\"h-3 w-1 shrink-0 rounded-[2px]\" style={fillStyle} />\n )\n\n case 'horizontal-bar':\n return (\n <div className=\"h-1 w-3 shrink-0 rounded-[2px]\" style={fillStyle} />\n )\n\n case 'rounded-square-outline':\n return (\n <div\n className=\"h-2.5 w-2.5 shrink-0 rounded-[3px] p-[1.5px]\"\n style={outlineStyle}\n />\n )\n\n case 'rounded-square':\n default:\n return (\n <div className=\"h-2 w-2 shrink-0 rounded-[2px]\" style={fillStyle} />\n )\n }\n}\n\n// ---------------------------------------------------------------------------\n// Style helpers\n// ---------------------------------------------------------------------------\n\n/** Solid fill / gradient background for filled variants. */\nfunction getLegendFillStyle(\n dataKey: string,\n colorsCount: number,\n): React.CSSProperties {\n if (colorsCount <= 1) {\n return { backgroundColor: `var(--color-${dataKey}-0)` }\n }\n\n const stops = Array.from({ length: colorsCount }, (_, i) => {\n const offset = (i / (colorsCount - 1)) * 100\n return `var(--color-${dataKey}-${i}) ${offset}%`\n }).join(', ')\n\n return { background: `linear-gradient(to right, ${stops})` }\n}\n\n/**\n * Outline style for stroke variants.\n * Uses background + mask-composite to punch out the center, leaving only the\n * \"border\" visible. Works with both solid colors and gradients, and respects\n * border-radius — unlike plain `border-color`.\n */\nfunction getLegendOutlineStyle(\n dataKey: string,\n colorsCount: number,\n): React.CSSProperties {\n const maskStyle: React.CSSProperties = {\n WebkitMask:\n 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMaskComposite: 'xor',\n mask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n maskComposite: 'exclude',\n }\n\n if (colorsCount <= 1) {\n return {\n backgroundColor: `var(--color-${dataKey}-0)`,\n ...maskStyle,\n }\n }\n\n const stops = Array.from({ length: colorsCount }, (_, i) => {\n const offset = (i / (colorsCount - 1)) * 100\n return `var(--color-${dataKey}-${i}) ${offset}%`\n }).join(', ')\n\n return {\n background: `linear-gradient(to right, ${stops})`,\n ...maskStyle,\n }\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nexport { ChartLegend, ChartLegendContent, type ChartLegendVariant }\n","import * as RechartsPrimitive from 'recharts'\nimport type {\n NameType,\n ValueType,\n} from 'recharts/types/component/DefaultTooltipContent'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n getColorsCount,\n getPayloadConfigFromPayload,\n useChart,\n} from '@/components/charts/core/chart'\n\ntype TooltipRoundness = 'sm' | 'md' | 'lg' | 'xl'\ntype TooltipVariant = 'default' | 'frosted-glass'\n\nconst roundnessMap: Record<TooltipRoundness, string> = {\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n}\n\nconst variantMap: Record<TooltipVariant, string> = {\n default: 'bg-background',\n 'frosted-glass': 'bg-background/70 backdrop-blur-sm',\n}\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n nameKey,\n labelKey,\n selected,\n roundness = 'lg',\n variant = 'default',\n valueFormatter,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n nameKey?: string\n labelKey?: string\n selected?: string | null\n roundness?: TooltipRoundness\n variant?: TooltipVariant\n valueFormatter?: (value: unknown) => React.ReactNode\n } & Omit<\n RechartsPrimitive.DefaultTooltipContentProps<ValueType, NameType>,\n 'accessibilityLayer'\n >) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === 'string'\n ? (config[label]?.label ?? label)\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn('font-medium', labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n <div\n className={cn(\n 'border-border/50 grid min-w-36 items-start gap-2 border px-3 py-2 text-xs shadow-xl',\n roundnessMap[roundness],\n variantMap[variant],\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n // For pie charts, item.name contains the sector name (e.g., \"chrome\")\n // For radial charts, the name is in item.payload[nameKey]\n // For other charts, item.name or item.dataKey contains the series name\n const payloadName =\n nameKey && item.payload\n ? (item.payload as Record<string, unknown>)[nameKey]\n : undefined\n const key = `${payloadName ?? item.name ?? item.dataKey ?? 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n // Get colors count for this item to determine gradient vs solid\n const colorsCount = itemConfig ? getColorsCount(itemConfig) : 1\n\n return (\n <div\n key={index}\n className={cn(\n '[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n indicator === 'dot' && 'items-center',\n selected != null && selected !== item.dataKey && 'opacity-30',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('shrink-0 rounded-[2px]', {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent!':\n indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={getIndicatorColorStyle(key, colorsCount)}\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between gap-4 leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground text-[11px]\">\n {itemConfig?.label ?? item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {valueFormatter\n ? valueFormatter(item.value)\n : typeof item.value === 'number'\n ? item.value.toLocaleString()\n : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction getIndicatorColorStyle(\n dataKey: string,\n colorsCount: number,\n): React.CSSProperties {\n if (colorsCount <= 1) {\n return { background: `var(--color-${dataKey}-0)` }\n }\n\n // Multiple colors: create linear gradient with evenly distributed stops\n const stops = Array.from({ length: colorsCount }, (_, index) => {\n const offset = (index / (colorsCount - 1)) * 100\n return `var(--color-${dataKey}-${index}) ${offset}%`\n }).join(', ')\n\n return { background: `linear-gradient(to right, ${stops})` }\n}\n\nconst ChartTooltip = ({\n animationDuration = 200,\n ...props\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip>) => (\n <RechartsPrimitive.Tooltip animationDuration={animationDuration} {...props} />\n)\n\nexport { ChartTooltip, ChartTooltipContent }\nexport type { TooltipRoundness, TooltipVariant }\n","'use client'\n\nimport {\n Area,\n AreaChart as RechartsAreaChart,\n CartesianGrid,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n type ComponentProps,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport { motion } from 'motion/react'\n\nimport {\n type BackgroundVariant,\n ChartBackground,\n} from '@/components/charts/core/background'\nimport {\n axisValueToPercentFormatter,\n type ChartConfig,\n ChartContainer,\n getColorsCount,\n getLoadingData,\n LoadingIndicator,\n} from '@/components/charts/core/chart'\nimport { ChartDot, DotVariant } from '@/components/charts/core/dot'\nimport {\n ChartBrush,\n type ChartBrushRange,\n useChartBrush,\n} from '@/components/charts/core/brush'\nimport {\n ChartLegend,\n ChartLegendContent,\n type ChartLegendVariant,\n} from '@/components/charts/core/legend'\nimport {\n ChartTooltip,\n ChartTooltipContent,\n type TooltipRoundness,\n type TooltipVariant,\n} from '@/components/charts/core/tooltip'\n\n// Constants\nconst STROKE_WIDTH = 0.8\nconst LOADING_AREA_DATA_KEY = 'loading'\nconst LOADING_ANIMATION_DURATION = 2000 // in milliseconds\n\ntype ChartProps = ComponentProps<typeof RechartsAreaChart>\ntype XAxisProps = ComponentProps<typeof XAxis>\ntype YAxisProps = ComponentProps<typeof YAxis>\ntype AreaType = ComponentProps<typeof Area>['type']\ntype AreaVariant =\n | 'gradient'\n | 'gradient-reverse'\n | 'solid'\n | 'dotted'\n | 'lines'\n | 'hatched'\ntype StrokeVariant = 'solid' | 'dashed' | 'animated-dashed'\ntype StackType = 'default' | 'expanded' | 'stacked'\n\n// Validating Tyes to make sure user have provided valid data according to chartConfig\ntype ValidateConfigKeys<TData, TConfig> = {\n [K in keyof TConfig]: K extends keyof TData ? ChartConfig[string] : never\n}\n\ntype BaseAreaChartProps<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = {\n chartConfig: TConfig & ValidateConfigKeys<TData, TConfig>\n data: TData[]\n xDataKey?: keyof TData & string\n yDataKey?: keyof TData & string\n className?: string\n chartProps?: ChartProps\n xAxisProps?: XAxisProps\n yAxisProps?: YAxisProps\n defaultSelectedDataKey?: string | null\n curveType?: AreaType\n strokeWidth?: number\n areaVariant?: AreaVariant\n strokeVariant?: StrokeVariant\n stackType?: StackType\n dotVariant?: DotVariant\n activeDotVariant?: DotVariant\n legendVariant?: ChartLegendVariant\n connectNulls?: boolean\n tickGap?: number\n // Hide Stuffs\n hideTooltip?: boolean\n hideCartesianGrid?: boolean\n hideLegend?: boolean\n hideCursorLine?: boolean\n // Tooltip\n tooltipRoundness?: TooltipRoundness\n tooltipVariant?: TooltipVariant\n tooltipDefaultIndex?: number\n tooltipAnimationDuration?: number\n tooltipContentProps?: Omit<\n ComponentProps<typeof ChartTooltipContent>,\n 'selected' | 'roundness' | 'variant'\n >\n isLoading?: boolean\n loadingPoints?: number\n // Brush\n showBrush?: boolean\n brushHeight?: number\n brushFormatLabel?: (value: unknown, index: number) => string\n onBrushChange?: (range: ChartBrushRange) => void\n // Background\n backgroundVariant?: BackgroundVariant\n}\n\ntype AreaChartClickable = {\n isClickable: true\n onSelectionChange?: (selectedDataKey: string | null) => void\n}\n\ntype AreaChartNotClickable = {\n isClickable?: false\n onSelectionChange?: never\n}\n\ntype AreaChartProps<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = BaseAreaChartProps<TData, TConfig> &\n (AreaChartClickable | AreaChartNotClickable)\n\nexport function AreaChart<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n>({\n chartConfig,\n data,\n xDataKey,\n yDataKey,\n className,\n chartProps,\n xAxisProps,\n yAxisProps,\n defaultSelectedDataKey = null,\n curveType = 'linear',\n strokeWidth = STROKE_WIDTH,\n areaVariant = 'gradient',\n strokeVariant = 'dashed',\n stackType = 'default',\n dotVariant,\n activeDotVariant,\n legendVariant,\n connectNulls = false,\n tickGap = 8,\n hideTooltip = false,\n hideCartesianGrid = false,\n hideLegend = false,\n hideCursorLine = false,\n tooltipRoundness,\n tooltipVariant,\n tooltipDefaultIndex,\n tooltipAnimationDuration,\n tooltipContentProps,\n isClickable = false,\n isLoading = false,\n loadingPoints,\n showBrush = false,\n brushHeight,\n brushFormatLabel,\n onBrushChange,\n onSelectionChange,\n backgroundVariant,\n}: AreaChartProps<TData, TConfig>) {\n const [selectedDataKey, setSelectedDataKey] = useState<string | null>(\n defaultSelectedDataKey,\n )\n const { loadingData, onShimmerExit } = useLoadingData(\n isLoading,\n loadingPoints,\n )\n const chartId = useId().replace(/:/g, '') // Remove colons for valid CSS selectors\n\n // ── Zoom state ──────────────────────────────────────────────────────────\n const { visibleData, brushProps } = useChartBrush({ data })\n const displayData = showBrush && !isLoading ? visibleData : data\n\n // Wrapper function to update state and call parent callback\n // Only call callback when isClickable is true\n const handleSelectionChange = useCallback(\n (newSelectedDataKey: string | null) => {\n setSelectedDataKey(newSelectedDataKey)\n if (isClickable && onSelectionChange) {\n onSelectionChange(newSelectedDataKey)\n }\n },\n [onSelectionChange, isClickable],\n )\n\n const isExpanded = stackType === 'expanded'\n const isStacked = stackType === 'stacked' || stackType === 'expanded'\n\n return (\n <ChartContainer\n className={className}\n config={chartConfig}\n footer={\n showBrush &&\n !isLoading && (\n <ChartBrush\n data={data}\n chartConfig={chartConfig}\n xDataKey={xDataKey}\n variant=\"area\"\n curveType={curveType}\n strokeVariant={strokeVariant}\n connectNulls={connectNulls}\n height={brushHeight}\n formatLabel={brushFormatLabel}\n stacked={isStacked}\n skipStyle\n className=\"mt-1\"\n {...brushProps}\n onChange={(range) => {\n brushProps.onChange(range)\n onBrushChange?.(range)\n }}\n />\n )\n }\n >\n <LoadingIndicator isLoading={isLoading} />\n <RechartsAreaChart\n id=\"charts-area-chart\"\n accessibilityLayer\n stackOffset={isExpanded ? 'expand' : undefined}\n data={isLoading ? loadingData : displayData}\n {...chartProps}\n >\n {backgroundVariant && <ChartBackground variant={backgroundVariant} />}\n <ReferenceLine color=\"white\" />\n {!hideCartesianGrid && !backgroundVariant && (\n <CartesianGrid vertical={false} strokeDasharray=\"3 3\" />\n )}\n {!hideLegend && (\n <ChartLegend\n verticalAlign=\"top\"\n align=\"right\"\n content={\n <ChartLegendContent\n selected={selectedDataKey}\n onSelectChange={handleSelectionChange}\n isClickable={isClickable}\n variant={legendVariant}\n />\n }\n />\n )}\n {xDataKey && !isLoading && (\n <XAxis\n dataKey={xDataKey}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={tickGap}\n {...xAxisProps}\n />\n )}\n {yDataKey && !isLoading && (\n <YAxis\n dataKey={yDataKey}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={tickGap}\n width=\"auto\"\n tickFormatter={\n stackType === 'expanded'\n ? axisValueToPercentFormatter\n : yAxisProps?.tickFormatter\n }\n {...yAxisProps}\n />\n )}\n {!hideTooltip && !isLoading && (\n <ChartTooltip\n animationDuration={tooltipAnimationDuration}\n defaultIndex={tooltipDefaultIndex}\n cursor={\n hideCursorLine\n ? false\n : {\n strokeDasharray:\n strokeVariant === 'dashed' ||\n strokeVariant === 'animated-dashed'\n ? '3 3'\n : undefined,\n strokeWidth,\n }\n }\n content={\n <ChartTooltipContent\n selected={selectedDataKey}\n roundness={tooltipRoundness}\n variant={tooltipVariant}\n {...tooltipContentProps}\n />\n }\n />\n )}\n {!isLoading &&\n Object.keys(chartConfig).map((dataKey) => {\n const _opacity = getOpacity(isClickable, selectedDataKey, dataKey)\n const isSelected = selectedDataKey === dataKey\n const hasSelection = selectedDataKey !== null\n\n // Get fill pattern based on variant and selection state\n const fillPattern = getFillPattern(\n areaVariant,\n isClickable,\n hasSelection,\n isSelected,\n dataKey,\n chartId,\n )\n\n const dot = dotVariant ? (\n <ChartDot\n fillOpacity={_opacity.dot}\n type={dotVariant}\n dataKey={dataKey}\n chartId={chartId}\n />\n ) : (\n false\n )\n const activeDot = activeDotVariant ? (\n <ChartDot\n fillOpacity={_opacity.dot}\n type={activeDotVariant}\n dataKey={dataKey}\n chartId={chartId}\n />\n ) : (\n false\n )\n\n return (\n <Area\n type={curveType}\n key={dataKey}\n dataKey={dataKey}\n connectNulls={connectNulls}\n fillOpacity={_opacity.fill}\n strokeOpacity={_opacity.stroke}\n fill={fillPattern}\n stroke={`url(#${chartId}-colors-${dataKey})`}\n stackId={isStacked ? 'stacked' : undefined}\n dot={dot}\n activeDot={activeDot}\n strokeWidth={strokeWidth}\n strokeDasharray={\n strokeVariant === 'dashed'\n ? '3 3'\n : strokeVariant === 'animated-dashed'\n ? '3 3'\n : undefined\n }\n style={isClickable ? { cursor: 'pointer' } : undefined}\n onClick={() => {\n if (!isClickable) return\n // Toggle: if already selected, unselect; otherwise select\n handleSelectionChange(\n selectedDataKey === dataKey ? null : dataKey,\n )\n }}\n >\n {strokeVariant === 'animated-dashed' && !hasSelection && (\n <AnimatedDashedStyle />\n )}\n </Area>\n )\n })}\n {/* ======== LOADING AREA ======== */}\n {isLoading && (\n <Area\n type={curveType}\n dataKey={LOADING_AREA_DATA_KEY}\n fillOpacity={0.05}\n min={0}\n max={100}\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeOpacity={0.5}\n isAnimationActive={false}\n legendType=\"none\"\n tooltipType=\"none\"\n activeDot={false}\n dot={false}\n strokeWidth={strokeWidth}\n style={{ mask: `url(#${chartId}-loading-mask)` }}\n />\n )}\n {/* ======== CHART STYLES ======== */}\n <defs>\n {isLoading && (\n <LoadingAreaPatternStyle\n chartId={chartId}\n onShimmerExit={onShimmerExit}\n />\n )}\n {/* Shared horizontal color gradient - always rendered for stroke and all variants */}\n <HorizontalColorGradientStyle\n chartConfig={chartConfig}\n chartId={chartId}\n isExpanded={isExpanded}\n />\n {/* Variant-specific styles */}\n {areaVariant === 'gradient' && (\n <LinearGradientStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {areaVariant === 'gradient-reverse' && (\n <ReverseGradientStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {areaVariant === 'lines' && (\n <LinesPatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {areaVariant === 'solid' && (\n <SolidPatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {areaVariant === 'dotted' && (\n <DottedPatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {areaVariant === 'hatched' && (\n <HatchedPatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n <UnselectedDiagonalPatternStyle\n chartConfig={chartConfig}\n chartId={chartId}\n selectedDataKey={selectedDataKey}\n isClickable={isClickable}\n />\n </defs>\n </RechartsAreaChart>\n </ChartContainer>\n )\n}\n\n// Returns opacity object for both fill and stroke, same values for both\nconst getOpacity = (\n isClickable: boolean,\n selectedDataKey: string | null,\n dataKey: string,\n) => {\n if (!isClickable || selectedDataKey === null) {\n return { fill: 0.8, stroke: 0.8, dot: 1 }\n }\n return selectedDataKey === dataKey\n ? { fill: 0.8, stroke: 0.8, dot: 1 }\n : { fill: 0.2, stroke: 0.3, dot: 0.3 }\n}\n\n// Returns the appropriate fill pattern based on variant and selection state\nconst getFillPattern = (\n variant: AreaVariant,\n isClickable: boolean,\n hasSelection: boolean,\n isSelected: boolean,\n dataKey: string,\n chartId: string,\n): string => {\n // If clickable and there's a selection but this item is not selected, use unselected diagonal pattern\n if (isClickable && hasSelection && !isSelected) {\n return `url(#${chartId}-unselected-${dataKey})`\n }\n\n // Otherwise, use the variant-specific pattern\n switch (variant) {\n case 'gradient':\n return `url(#${chartId}-gradient-${dataKey})`\n case 'gradient-reverse':\n return `url(#${chartId}-gradient-reverse-${dataKey})`\n case 'solid':\n return `url(#${chartId}-solid-${dataKey})`\n case 'dotted':\n return `url(#${chartId}-dotted-${dataKey})`\n case 'lines':\n return `url(#${chartId}-lines-${dataKey})`\n case 'hatched':\n return `url(#${chartId}-hatched-pattern-${dataKey})`\n default:\n return `url(#${chartId}-${dataKey})`\n }\n}\n\n// Animated dashed-stroke style for the area chart\nconst AnimatedDashedStyle = () => {\n return (\n <>\n <animate\n attributeName=\"stroke-dasharray\"\n values=\"3 3; 0 3; 3 3\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n keyTimes=\"0;0.5;1\"\n />\n <animate\n attributeName=\"stroke-dashoffset\"\n values=\"0; -6\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n keyTimes=\"0;1\"\n />\n </>\n )\n}\n\n// Shared horizontal color gradient (left to right) - used by all variants and stroke\n// This is ALWAYS rendered so colors are available for any variant\nconst HorizontalColorGradientStyle = ({\n chartConfig,\n chartId,\n isExpanded = false,\n}: {\n chartConfig: ChartConfig\n chartId: string\n isExpanded?: boolean\n}) => {\n return (\n <>\n {Object.entries(chartConfig).map(([dataKey, config]) => {\n const colorsCount = getColorsCount(config)\n\n return (\n <linearGradient\n key={`${chartId}-colors-${dataKey}`}\n id={`${chartId}-colors-${dataKey}`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n gradientUnits={isExpanded ? 'userSpaceOnUse' : 'objectBoundingBox'}\n >\n {colorsCount === 1 ? (\n // Single color: same color at start and end\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n <stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n </>\n ) : (\n // Multiple colors: distribute evenly\n // Fallback to first color if index doesn't exist in current theme\n Array.from({ length: colorsCount }, (_, index) => (\n <stop\n key={index}\n offset={`${(index / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n />\n ))\n )}\n </linearGradient>\n )\n })}\n </>\n )\n}\n\n// Linear gradient variant - adds vertical fade mask on top of the shared color gradient\nconst LinearGradientStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Vertical fade gradient for mask */}\n <linearGradient\n id={`${chartId}-vertical-fade`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity={0.1} />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={0} />\n </linearGradient>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-gradient-group-${dataKey}`}>\n {/* Mask for vertical fade (top visible, bottom transparent) */}\n <mask id={`${chartId}-gradient-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-vertical-fade)`}\n />\n </mask>\n\n {/* Pattern combining shared color gradient + vertical mask */}\n <pattern\n id={`${chartId}-gradient-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-gradient-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Reverse gradient for the area chart - vertical fade (top transparent, bottom visible)\nconst ReverseGradientStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Vertical reverse fade gradient for mask */}\n <linearGradient\n id={`${chartId}-vertical-fade-reverse`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity={0} />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={0.1} />\n </linearGradient>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-gradient-reverse-group-${dataKey}`}>\n {/* Mask for reverse vertical fade */}\n <mask id={`${chartId}-gradient-reverse-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-vertical-fade-reverse)`}\n />\n </mask>\n\n {/* Pattern: horizontal gradient + reverse vertical mask */}\n <pattern\n id={`${chartId}-gradient-reverse-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-gradient-reverse-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Lines pattern for the area chart - diagonal lines with gradient\nconst LinesPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Shared diagonal lines pattern for mask */}\n <pattern\n id={`${chartId}-lines-mask-pattern`}\n patternUnits=\"userSpaceOnUse\"\n width=\"5\"\n height=\"5\"\n patternTransform=\"rotate(45)\"\n >\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"5\" stroke=\"white\" strokeWidth=\"1\" />\n </pattern>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-lines-group-${dataKey}`}>\n {/* Mask using diagonal lines */}\n <mask id={`${chartId}-lines-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-lines-mask-pattern)`}\n fillOpacity=\"0.3\"\n />\n </mask>\n\n {/* Pattern: gradient fill masked by diagonal lines */}\n <pattern\n id={`${chartId}-lines-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-lines-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Solid pattern for the area chart - uniform opacity with gradient\nconst SolidPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Uniform opacity mask for solid fill */}\n <linearGradient\n id={`${chartId}-solid-mask-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity={0.1} />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={0.1} />\n </linearGradient>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-solid-group-${dataKey}`}>\n {/* Mask for uniform opacity */}\n <mask id={`${chartId}-solid-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-solid-mask-gradient)`}\n />\n </mask>\n\n {/* Pattern: gradient fill with uniform opacity mask */}\n <pattern\n id={`${chartId}-solid-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-solid-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Dotted pattern for the area chart - dots with gradient\nconst DottedPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Shared dots pattern for mask */}\n <pattern\n id={`${chartId}-dotted-mask-pattern`}\n x=\"0\"\n y=\"0\"\n width=\"6\"\n height=\"6\"\n patternUnits=\"userSpaceOnUse\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"0.5\" fill=\"white\" />\n </pattern>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-dotted-group-${dataKey}`}>\n {/* Mask using dots pattern */}\n <mask id={`${chartId}-dotted-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-dotted-mask-pattern)`}\n fillOpacity=\"0.5\"\n />\n </mask>\n\n {/* Pattern: gradient fill masked by dots */}\n <pattern\n id={`${chartId}-dotted-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-dotted-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Diagonal lines pattern for non-selected areas\nconst UnselectedDiagonalPatternStyle = ({\n chartConfig,\n chartId,\n selectedDataKey,\n isClickable,\n}: {\n chartConfig: ChartConfig\n chartId: string\n selectedDataKey: string | null\n isClickable: boolean\n}) => {\n if (!isClickable || selectedDataKey === null) return null\n\n return (\n <>\n {/* Shared diagonal lines pattern for mask (white lines) */}\n <pattern\n id={`${chartId}-unselected-lines-mask-pattern`}\n patternUnits=\"userSpaceOnUse\"\n width=\"5\"\n height=\"5\"\n patternTransform=\"rotate(45)\"\n >\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"5\" stroke=\"white\" strokeWidth=\"1\" />\n </pattern>\n\n {Object.keys(chartConfig).map((dataKey) => {\n const isSelected = selectedDataKey === dataKey\n if (isSelected) return null\n\n return (\n <g key={`${chartId}-unselected-group-${dataKey}`}>\n {/* Mask using diagonal lines pattern */}\n <mask id={`${chartId}-unselected-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-unselected-lines-mask-pattern)`}\n fillOpacity=\"0.3\"\n />\n </mask>\n\n {/* Pattern: gradient fill masked by diagonal lines */}\n <pattern\n id={`${chartId}-unselected-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-unselected-mask-${dataKey})`}\n />\n </pattern>\n </g>\n )\n })}\n </>\n )\n}\n\n// Hatched pattern with striped gradient effect\nconst HatchedPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Shared hatched stripes mask pattern */}\n <linearGradient\n id={`${chartId}-hatched-stripe-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={0.2} />\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={1} />\n </linearGradient>\n <pattern\n id={`${chartId}-hatched-mask-pattern`}\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"10\"\n patternUnits=\"userSpaceOnUse\"\n overflow=\"visible\"\n patternTransform=\"rotate(20)\"\n >\n <rect\n width=\"20\"\n height=\"10\"\n fill={`url(#${chartId}-hatched-stripe-gradient)`}\n />\n </pattern>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-hatched-group-${dataKey}`}>\n {/* Mask using hatched stripes */}\n <mask id={`${chartId}-hatched-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-hatched-mask-pattern)`}\n fillOpacity=\"0.2\"\n />\n </mask>\n\n {/* Pattern: gradient fill masked by hatched stripes */}\n <pattern\n id={`${chartId}-hatched-pattern-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-hatched-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Generate gradient stops with smooth easing for loading animation\nconst generateEasedGradientStops = (\n steps: number = 17,\n minOpacity: number = 0.05,\n maxOpacity: number = 0.9,\n) => {\n return Array.from({ length: steps }, (_, i) => {\n const t = i / (steps - 1) // 0 to 1\n // Sine-based bell curve easing: peaks at center (t=0.5), smooth falloff at edges\n const eased = Math.sin(t * Math.PI) ** 2\n const opacity = minOpacity + eased * (maxOpacity - minOpacity)\n return {\n offset: `${(t * 100).toFixed(0)}%`,\n opacity: Number(opacity.toFixed(3)),\n }\n })\n}\n\n/**\n * Hook to manage loading data with pixel-perfect shimmer synchronization.\n *\n * Uses motion.dev's onAnimationComplete callback to ensure chart data\n * is only regenerated when the shimmer has completely exited the visible area.\n * This eliminates timing drift issues from setTimeout/setInterval.\n *\n * The shimmer pattern has 200-300% width so that when the visible shimmer\n * exits the chart container (at the 100% point), we can safely swap data\n * while the invisible portion continues animating.\n */\nfunction useLoadingData(isLoading: boolean, loadingPoints: number = 14) {\n const [loadingDataKey, setLoadingDataKey] = useState(false)\n\n // Callback fired by motion.dev when shimmer exits visible area\n const onShimmerExit = useCallback(() => {\n if (isLoading) {\n setLoadingDataKey((prev) => !prev)\n }\n }, [isLoading])\n\n const loadingData = useMemo(\n () => getLoadingData(loadingPoints),\n // loadingDataKey toggle triggers re-computation when shimmer exits\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [loadingPoints, loadingDataKey],\n )\n\n return { loadingData, onShimmerExit }\n}\n\n/**\n * Loading area pattern with animated skeleton effect using motion.dev\n *\n * Key design for pixel-perfect sync:\n * - Visible chart area is normalized to 0-1 in objectBoundingBox units\n * - Shimmer gradient has width=1 (same as visible area)\n * - Pattern width is 3x (300%) to provide buffer on both sides\n * - Animation: x goes from -1 (off-screen left) to 2 (off-screen right)\n * - At x=-1: shimmer is completely outside left edge\n * - At x=0: shimmer starts entering from left\n * - At x=1: shimmer has fully exited right edge\n * - At x=2: shimmer is in the right buffer zone\n * - onShimmerExit fires when x crosses 1 (shimmer fully exited visible area)\n * - Data swaps happen while shimmer is outside visible area (x >= 1)\n * - Loop continues infinitely\n */\nconst LoadingAreaPatternStyle = ({\n chartId,\n onShimmerExit,\n}: {\n chartId: string\n onShimmerExit: () => void\n}) => {\n const gradientStops = generateEasedGradientStops()\n\n // Pattern width needs to accommodate: 1 (left buffer) + 1 (visible) + 1 (right buffer) = 3\n const patternWidth = 3\n\n // Animation goes from -1 (left of visible) to 2 (right of visible)\n // Total travel distance = 3, matching pattern width\n const startX = -1\n const endX = 2\n\n // Track last x value to detect threshold crossing\n const lastXRef = useRef(startX)\n\n return (\n <>\n {/* Gradient for smooth fade: edges dim, middle bright for sweep effect */}\n <linearGradient\n id={`${chartId}-loading-mask-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n {gradientStops.map(({ offset, opacity }) => (\n <stop\n key={offset}\n offset={offset}\n stopColor=\"white\"\n stopOpacity={opacity}\n />\n ))}\n </linearGradient>\n <pattern\n id={`${chartId}-loading-mask-pattern`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n patternTransform=\"rotate(25)\"\n width={patternWidth}\n height=\"1\"\n x=\"0\"\n y=\"0\"\n >\n {/* Use motion.rect with keyframe animation for precise timing */}\n <motion.rect\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-loading-mask-gradient)`}\n initial={{ attrX: startX }}\n animate={{ attrX: endX }}\n transition={{\n duration: LOADING_ANIMATION_DURATION / 1000,\n ease: 'linear',\n repeat: Infinity,\n repeatType: 'loop',\n }}\n // Use onUpdate to fire callback at precise exit point\n onUpdate={(latest) => {\n const xValue =\n typeof latest.attrX === 'number' ? latest.attrX : startX\n const lastX = lastXRef.current\n\n // Fire when crossing the exit threshold (x >= 1 means shimmer fully exited right)\n if (xValue >= 1 && lastX < 1) {\n onShimmerExit()\n }\n\n // Update tracked value\n lastXRef.current = xValue\n }}\n />\n </pattern>\n {/* Masking */}\n <mask id={`${chartId}-loading-mask`} maskUnits=\"userSpaceOnUse\">\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-loading-mask-pattern)`}\n />\n </mask>\n </>\n )\n}\n","'use client'\n\nimport {\n Bar,\n BarChart as RechartsBarChart,\n CartesianGrid,\n Rectangle,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\nimport { RectRadius } from 'recharts/types/shape/Rectangle'\n\nimport {\n type ComponentProps,\n type KeyboardEvent,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport { motion } from 'motion/react'\n\nimport {\n type BackgroundVariant,\n ChartBackground,\n} from '@/components/charts/core/background'\nimport {\n type ChartConfig,\n ChartContainer,\n getColorsCount,\n getLoadingData,\n LoadingIndicator,\n} from '@/components/charts/core/chart'\nimport {\n ChartBrush,\n type ChartBrushRange,\n useChartBrush,\n} from '@/components/charts/core/brush'\nimport {\n ChartLegend,\n ChartLegendContent,\n type ChartLegendVariant,\n} from '@/components/charts/core/legend'\nimport {\n ChartTooltip,\n ChartTooltipContent,\n type TooltipRoundness,\n type TooltipVariant,\n} from '@/components/charts/core/tooltip'\n\n// Constants\nconst DEFAULT_BAR_RADIUS = 2\nconst LOADING_BAR_DATA_KEY = 'loading'\nconst LOADING_ANIMATION_DURATION = 2000 // in milliseconds\n\ntype ChartProps = ComponentProps<typeof RechartsBarChart>\ntype XAxisProps = ComponentProps<typeof XAxis>\ntype YAxisProps = ComponentProps<typeof YAxis>\ntype BarVariant =\n | 'default'\n | 'hatched'\n | 'duotone'\n | 'duotone-reverse'\n | 'gradient'\n | 'stripped'\ntype StackType = 'default' | 'stacked' | 'percent'\ntype BarLayout = 'vertical' | 'horizontal'\ntype TooltipCursorProps = {\n x?: number\n y?: number\n width?: number\n height?: number\n}\n\n// Validating Types to make sure user have provided valid data according to chartConfig\ntype ValidateConfigKeys<TData, TConfig> = {\n [K in keyof TConfig]: K extends keyof TData ? ChartConfig[string] : never\n}\n\n// Extract only keys from TData where the value is a number (not string, boolean, etc.)\ntype NumericDataKeys<T> = {\n [K in keyof T]: T[K] extends number ? K : never\n}[keyof T]\n\ntype BarChartProps<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = {\n chartConfig: TConfig & ValidateConfigKeys<TData, TConfig>\n data: TData[]\n xDataKey?: keyof TData & string\n yDataKey?: keyof TData & string\n className?: string\n chartProps?: ChartProps\n xAxisProps?: XAxisProps\n yAxisProps?: YAxisProps\n defaultSelectedDataKey?: string | null\n barVariant?: BarVariant\n stackType?: StackType\n layout?: BarLayout\n barRadius?: number\n barGap?: number\n barCategoryGap?: number\n tickGap?: number\n legendVariant?: ChartLegendVariant\n // Hide Stuffs\n hideTooltip?: boolean\n hideCartesianGrid?: boolean\n hideLegend?: boolean\n // Tooltip\n tooltipRoundness?: TooltipRoundness\n tooltipVariant?: TooltipVariant\n tooltipDefaultIndex?: number\n tooltipAnimationDuration?: number\n tooltipCursorStrokeWidth?: number\n tooltipContentProps?: Omit<\n ComponentProps<typeof ChartTooltipContent>,\n 'selected' | 'roundness' | 'variant'\n >\n // Interactive Stuffs\n enableHoverHighlight?: boolean\n isLoading?: boolean\n loadingBars?: number\n // Glow Effects\n glowingBars?: NumericDataKeys<TData>[]\n // Brush\n showBrush?: boolean\n brushHeight?: number\n brushFormatLabel?: (value: unknown, index: number) => string\n onBrushChange?: (range: ChartBrushRange) => void\n // Background\n backgroundVariant?: BackgroundVariant\n // Buffer Bar - renders last data point bars as hatched/lines style\n enableBufferBar?: boolean\n}\n\ntype BarChartClickable = {\n isClickable: true\n onSelectionChange?: (selectedDataKey: string | null) => void\n}\n\ntype BarChartNotClickable = {\n isClickable?: false\n onSelectionChange?: never\n}\n\ntype BarChartPropsWithCallback<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = BarChartProps<TData, TConfig> &\n (BarChartClickable | BarChartNotClickable)\n\nexport function BarChart<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n>({\n chartConfig,\n data,\n xDataKey,\n yDataKey,\n className,\n chartProps,\n xAxisProps,\n yAxisProps,\n defaultSelectedDataKey = null,\n barVariant = 'default',\n stackType = 'default',\n layout = 'vertical',\n barRadius = DEFAULT_BAR_RADIUS,\n barGap,\n barCategoryGap,\n tickGap = 8,\n legendVariant,\n hideTooltip = false,\n hideCartesianGrid = false,\n hideLegend = false,\n tooltipRoundness,\n tooltipVariant,\n tooltipDefaultIndex,\n tooltipAnimationDuration,\n tooltipCursorStrokeWidth = 1,\n tooltipContentProps,\n isClickable = false,\n enableHoverHighlight = false,\n isLoading = false,\n loadingBars,\n glowingBars = [],\n showBrush = false,\n brushHeight,\n brushFormatLabel,\n onBrushChange,\n onSelectionChange,\n backgroundVariant,\n enableBufferBar = false,\n}: BarChartPropsWithCallback<TData, TConfig>) {\n const [selectedDataKey, setSelectedDataKey] = useState<string | null>(\n defaultSelectedDataKey,\n )\n const [isMouseInChart, setIsMouseInChart] = useState(false)\n const { loadingData, onShimmerExit } = useLoadingData(isLoading, loadingBars)\n const chartId = useId().replace(/:/g, '') // Remove colons for valid CSS selectors\n\n // ── Zoom state ──────────────────────────────────────────────────────────\n const { visibleData, brushProps } = useChartBrush({ data })\n const displayData = showBrush && !isLoading ? visibleData : data\n\n // Wrapper function to update state and call parent callback\n const handleSelectionChange = useCallback(\n (newSelectedDataKey: string | null) => {\n setSelectedDataKey(newSelectedDataKey)\n if (isClickable && onSelectionChange) {\n onSelectionChange(newSelectedDataKey)\n }\n },\n [onSelectionChange, isClickable],\n )\n\n const isStacked = stackType === 'stacked' || stackType === 'percent'\n const isHorizontal = layout === 'horizontal'\n\n return (\n <ChartContainer\n className={className}\n config={chartConfig}\n footer={\n showBrush &&\n !isLoading && (\n <ChartBrush\n data={data}\n chartConfig={chartConfig}\n xDataKey={xDataKey}\n variant=\"bar\"\n barRadius={barRadius}\n height={brushHeight}\n formatLabel={brushFormatLabel}\n stacked={isStacked}\n skipStyle\n className=\"mt-1\"\n {...brushProps}\n onChange={(range) => {\n brushProps.onChange(range)\n onBrushChange?.(range)\n }}\n />\n )\n }\n >\n <LoadingIndicator isLoading={isLoading} />\n <RechartsBarChart\n id=\"charts-bar-chart\"\n accessibilityLayer\n layout={isHorizontal ? 'vertical' : 'horizontal'}\n data={isLoading ? loadingData : displayData}\n barGap={barGap}\n barCategoryGap={barCategoryGap}\n stackOffset={stackType === 'percent' ? 'expand' : undefined}\n onMouseEnter={() => setIsMouseInChart(true)}\n onMouseLeave={() => setIsMouseInChart(false)}\n {...chartProps}\n >\n {backgroundVariant && <ChartBackground variant={backgroundVariant} />}\n <ReferenceLine color=\"white\" />\n {!hideCartesianGrid && !backgroundVariant && (\n <CartesianGrid\n vertical={isHorizontal}\n horizontal={!isHorizontal}\n strokeDasharray=\"3 3\"\n />\n )}\n {!hideLegend && (\n <ChartLegend\n verticalAlign=\"top\"\n align=\"right\"\n content={\n <ChartLegendContent\n selected={selectedDataKey}\n onSelectChange={handleSelectionChange}\n isClickable={isClickable}\n variant={legendVariant}\n />\n }\n />\n )}\n {xDataKey && !isLoading && (\n <XAxis\n dataKey={isHorizontal ? undefined : xDataKey}\n type={isHorizontal ? 'number' : 'category'}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={tickGap}\n {...xAxisProps}\n />\n )}\n {(isHorizontal ? xDataKey : yDataKey) && !isLoading && (\n <YAxis\n dataKey={isHorizontal ? xDataKey : yDataKey}\n type={isHorizontal ? 'category' : 'number'}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={tickGap}\n width=\"auto\"\n {...yAxisProps}\n />\n )}\n {!hideTooltip && !isLoading && (\n <ChartTooltip\n animationDuration={tooltipAnimationDuration}\n cursor={\n <BarHoverCursor\n isHorizontal={isHorizontal}\n strokeWidth={tooltipCursorStrokeWidth}\n />\n }\n defaultIndex={tooltipDefaultIndex}\n content={\n <ChartTooltipContent\n selected={selectedDataKey}\n roundness={tooltipRoundness}\n variant={tooltipVariant}\n {...tooltipContentProps}\n />\n }\n />\n )}\n {!isLoading &&\n Object.keys(chartConfig).map((dataKey) => {\n const isGlowing = glowingBars.includes(\n dataKey as NumericDataKeys<TData>,\n )\n const filter = isGlowing\n ? `url(#${chartId}-bar-glow-${dataKey})`\n : undefined\n\n // Shared props for both shape and activeBar\n const customBarProps = {\n chartId,\n dataKey,\n barVariant,\n barRadius,\n filter,\n isClickable,\n enableHoverHighlight,\n isMouseInChart,\n selectedDataKey,\n enableBufferBar,\n dataLength: displayData.length,\n isHorizontal,\n xAxisReversed: xAxisProps?.reversed,\n yAxisReversed: yAxisProps?.reversed,\n onClick: () => {\n if (!isClickable) return\n handleSelectionChange(\n selectedDataKey === dataKey ? null : dataKey,\n )\n },\n }\n\n return (\n <Bar\n key={dataKey}\n dataKey={dataKey}\n stackId={isStacked ? 'stacked' : undefined}\n fill={`url(#${chartId}-colors-${dataKey})`}\n radius={barRadius}\n style={\n isClickable || enableHoverHighlight\n ? { cursor: 'pointer' }\n : undefined\n }\n shape={(props: unknown) => (\n <CustomBar\n {...(props as BarShapeProps)}\n {...customBarProps}\n />\n )}\n activeBar={(props: unknown) => (\n <CustomBar\n {...(props as BarShapeProps)}\n {...customBarProps}\n />\n )}\n />\n )\n })}\n {/* ======== LOADING BAR ======== */}\n {isLoading && (\n <Bar\n dataKey={LOADING_BAR_DATA_KEY}\n fill=\"currentColor\"\n fillOpacity={0.15}\n radius={barRadius}\n isAnimationActive={false}\n legendType=\"none\"\n style={{ mask: `url(#${chartId}-loading-mask)` }}\n />\n )}\n {/* ======== CHART STYLES ======== */}\n <defs>\n {isLoading && (\n <LoadingBarPatternStyle\n chartId={chartId}\n onShimmerExit={onShimmerExit}\n />\n )}\n {/* Shared vertical color gradient - always rendered for fill */}\n <VerticalColorGradientStyle\n chartConfig={chartConfig}\n chartId={chartId}\n />\n {/* Variant-specific styles */}\n {barVariant === 'hatched' && (\n <HatchedPatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {barVariant === 'duotone' && (\n <DuotonePatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {barVariant === 'duotone-reverse' && (\n <DuotoneReversePatternStyle\n chartConfig={chartConfig}\n chartId={chartId}\n />\n )}\n {barVariant === 'gradient' && (\n <GradientPatternStyle\n chartConfig={chartConfig}\n chartId={chartId}\n isHorizontal={isHorizontal}\n gradientVector={getBarGradientVector({\n isHorizontal,\n xAxisReversed: xAxisProps?.reversed,\n yAxisReversed: yAxisProps?.reversed,\n })}\n />\n )}\n {barVariant === 'stripped' && (\n <StrippedPatternStyle chartConfig={chartConfig} chartId={chartId} />\n )}\n {/* Buffer bar hatched pattern - always rendered when enableBufferBar */}\n {enableBufferBar && (\n <BufferHatchedPatternStyle\n chartConfig={chartConfig}\n chartId={chartId}\n />\n )}\n {/* Glow filter for glowing bars */}\n {glowingBars.length > 0 && (\n <GlowFilterStyle\n chartId={chartId}\n glowingBars={glowingBars as string[]}\n />\n )}\n </defs>\n </RechartsBarChart>\n </ChartContainer>\n )\n}\n\nfunction BarHoverCursor({\n isHorizontal,\n strokeWidth,\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n}: TooltipCursorProps & { isHorizontal: boolean; strokeWidth: number }) {\n if (width <= 0 || height <= 0) {\n return null\n }\n\n if (isHorizontal) {\n const cy = y + height / 2\n\n return (\n <line\n className=\"recharts-tooltip-cursor stroke-border\"\n x1={x}\n x2={x + width}\n y1={cy}\n y2={cy}\n strokeWidth={strokeWidth}\n pointerEvents=\"none\"\n />\n )\n }\n\n const cx = x + width / 2\n\n return (\n <line\n className=\"recharts-tooltip-cursor stroke-border\"\n x1={cx}\n x2={cx}\n y1={y}\n y2={y + height}\n strokeWidth={strokeWidth}\n pointerEvents=\"none\"\n />\n )\n}\n\n// Types for custom bar shape\ntype BarShapeProps = {\n x?: number\n y?: number\n width?: number\n height?: number\n fill?: string\n fillOpacity?: number\n dataKey?: string\n index?: number\n [key: string]: unknown\n}\n\ntype CustomBarProps = {\n chartId: string\n dataKey: string\n barVariant: BarVariant\n barRadius: number\n filter?: string\n isClickable?: boolean\n enableHoverHighlight?: boolean\n isMouseInChart?: boolean\n selectedDataKey?: string | null\n isActive?: boolean\n enableBufferBar?: boolean\n dataLength?: number\n isHorizontal?: boolean\n xAxisReversed?: boolean\n yAxisReversed?: boolean\n onClick?: () => void\n} & BarShapeProps\n\nconst BAR_AXIS_GAP = 3\n\nfunction getBarShape({\n x,\n y,\n width,\n height,\n barRadius,\n barVariant,\n isHorizontal,\n xAxisReversed,\n yAxisReversed,\n}: {\n x: number\n y: number\n width: number\n height: number\n barRadius: number\n barVariant: BarVariant\n isHorizontal?: boolean\n xAxisReversed?: boolean\n yAxisReversed?: boolean\n}) {\n const isStripped = barVariant === 'stripped'\n\n if (isHorizontal) {\n const barX = xAxisReversed ? x : x + BAR_AXIS_GAP\n const barWidth = Math.max(0, width - BAR_AXIS_GAP)\n const radius: RectRadius = isStripped\n ? [0, barRadius, barRadius, 0]\n : barRadius\n\n return { x: barX, y, width: barWidth, height, radius }\n }\n\n const barY = yAxisReversed ? y + BAR_AXIS_GAP : y\n const barHeight = Math.max(0, height - BAR_AXIS_GAP)\n const radius: RectRadius = isStripped\n ? [barRadius, barRadius, 0, 0]\n : barRadius\n\n return { x, y: barY, width, height: barHeight, radius }\n}\n\n// Custom bar shape component for different variants\nconst CustomBar = (props: CustomBarProps) => {\n const {\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n chartId,\n dataKey,\n barVariant,\n barRadius,\n filter,\n isClickable,\n enableHoverHighlight,\n isMouseInChart,\n selectedDataKey,\n isActive,\n enableBufferBar,\n dataLength = 0,\n isHorizontal,\n xAxisReversed,\n yAxisReversed,\n onClick,\n } = props\n\n const index = typeof props.index === 'number' ? props.index : -1\n const isLastBar =\n enableBufferBar && dataLength > 0 && index === dataLength - 1\n const isStripped = barVariant === 'stripped'\n\n const barShape = getBarShape({\n x,\n y,\n width,\n height,\n barRadius,\n barVariant,\n isHorizontal,\n xAxisReversed,\n yAxisReversed,\n })\n\n const getFill = () => {\n // Buffer bar: last bar always uses hatched pattern\n if (isLastBar) {\n return `url(#${chartId}-buffer-hatched-${dataKey})`\n }\n\n switch (barVariant) {\n case 'hatched':\n return `url(#${chartId}-hatched-${dataKey})`\n case 'duotone':\n return `url(#${chartId}-duotone-${dataKey})`\n case 'duotone-reverse':\n return `url(#${chartId}-duotone-reverse-${dataKey})`\n case 'gradient':\n return `url(#${chartId}-gradient-${dataKey})`\n case 'stripped':\n return `url(#${chartId}-stripped-${dataKey})`\n default:\n return `url(#${chartId}-colors-${dataKey})`\n }\n }\n\n const fillOpacity = getBarOpacity({\n isClickable,\n selectedDataKey,\n dataKey,\n enableHoverHighlight,\n isMouseInChart,\n isActive,\n })\n const cursorStyle =\n isClickable || enableHoverHighlight ? { cursor: 'pointer' } : undefined\n\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) => {\n if (!isClickable || !onClick) return\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n onClick()\n }\n }\n\n return (\n <g\n style={cursorStyle}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={isClickable ? onClick : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n >\n {/* Transparent rectangle for full column hit area */}\n <Rectangle {...props} fill=\"transparent\" />\n {/* Visible bar with animated opacity */}\n <Rectangle\n x={barShape.x}\n y={barShape.y}\n width={barShape.width}\n opacity={fillOpacity}\n height={barShape.height}\n radius={barShape.radius}\n fill={getFill()}\n filter={filter}\n stroke={isLastBar ? `url(#${chartId}-colors-${dataKey})` : undefined}\n strokeWidth={isLastBar ? 1 : undefined}\n />\n {/* Top border strip for stripped variant */}\n {isStripped && !isHorizontal && (\n <Rectangle\n x={x}\n y={y - 4}\n width={width}\n height={2}\n radius={1}\n fill={`url(#${chartId}-colors-${dataKey})`}\n />\n )}\n </g>\n )\n}\n\n// Shared vertical color gradient (top to bottom) - used for bar fill\nconst VerticalColorGradientStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {Object.entries(chartConfig).map(([dataKey, config]) => {\n const colorsCount = getColorsCount(config)\n\n return (\n <linearGradient\n key={`${chartId}-colors-${dataKey}`}\n id={`${chartId}-colors-${dataKey}`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n {colorsCount === 1 ? (\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n <stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n </>\n ) : (\n Array.from({ length: colorsCount }, (_, index) => (\n <stop\n key={index}\n offset={`${(index / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n />\n ))\n )}\n </linearGradient>\n )\n })}\n </>\n )\n}\n\n// Hatched pattern style for bars - uses mask to preserve gradient colors\nconst HatchedPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Shared hatched stripes mask pattern */}\n <pattern\n id={`${chartId}-hatched-mask-pattern`}\n x=\"0\"\n y=\"0\"\n width=\"5\"\n height=\"5\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"rotate(-45)\"\n >\n <rect width=\"5\" height=\"5\" fill=\"white\" fillOpacity={0.3} />\n <rect width=\"1.5\" height=\"5\" fill=\"white\" fillOpacity={1} />\n </pattern>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-hatched-group-${dataKey}`}>\n {/* Mask using hatched stripes */}\n <mask id={`${chartId}-hatched-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-hatched-mask-pattern)`}\n />\n </mask>\n\n {/* Pattern: gradient fill masked by hatched stripes */}\n <pattern\n id={`${chartId}-hatched-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-hatched-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Buffer hatched pattern style - diagonal lines only (no background fill), used for the last bar when enableBufferBar is true\nconst BufferHatchedPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Shared buffer hatched stripes mask pattern - lines only, no background */}\n <pattern\n id={`${chartId}-buffer-hatched-mask-pattern`}\n x=\"0\"\n y=\"0\"\n width=\"5\"\n height=\"5\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"rotate(-45)\"\n >\n <rect width=\"5\" height=\"5\" fill=\"black\" fillOpacity={0} />\n <rect width=\"1\" height=\"5\" fill=\"white\" fillOpacity={1} />\n </pattern>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-buffer-hatched-group-${dataKey}`}>\n {/* Mask using buffer hatched stripes */}\n <mask id={`${chartId}-buffer-hatched-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-buffer-hatched-mask-pattern)`}\n />\n </mask>\n\n {/* Pattern: gradient fill masked by buffer hatched stripes - lines only */}\n <pattern\n id={`${chartId}-buffer-hatched-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-buffer-hatched-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Duotone pattern style for bars (half opacity, half full) - uses objectBoundingBox for per-bar effect\nconst DuotonePatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {Object.entries(chartConfig).map(([dataKey, config]) => {\n const colorsCount = getColorsCount(config)\n\n return (\n <g key={`${chartId}-duotone-group-${dataKey}`}>\n {/* Duotone mask gradient - applies to each bar's bounding box */}\n <linearGradient\n id={`${chartId}-duotone-mask-gradient-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={0.4} />\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={1} />\n </linearGradient>\n\n {/* Color gradient for this dataKey - applies to each bar's bounding box */}\n <linearGradient\n id={`${chartId}-duotone-colors-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n {colorsCount === 1 ? (\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n <stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n </>\n ) : (\n Array.from({ length: colorsCount }, (_, index) => (\n <stop\n key={index}\n offset={`${(index / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n />\n ))\n )}\n </linearGradient>\n\n {/* Mask for duotone effect */}\n <mask\n id={`${chartId}-duotone-mask-${dataKey}`}\n maskContentUnits=\"objectBoundingBox\"\n >\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-duotone-mask-gradient-${dataKey})`}\n />\n </mask>\n\n {/* Pattern: gradient fill with duotone mask */}\n <pattern\n id={`${chartId}-duotone-${dataKey}`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n width=\"1\"\n height=\"1\"\n >\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-duotone-colors-${dataKey})`}\n mask={`url(#${chartId}-duotone-mask-${dataKey})`}\n />\n </pattern>\n </g>\n )\n })}\n </>\n )\n}\n\n// Duotone reverse pattern style for bars (full opacity first, then half) - uses objectBoundingBox for per-bar effect\nconst DuotoneReversePatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {Object.entries(chartConfig).map(([dataKey, config]) => {\n const colorsCount = getColorsCount(config)\n\n return (\n <g key={`${chartId}-duotone-reverse-group-${dataKey}`}>\n {/* Duotone reverse mask gradient - applies to each bar's bounding box */}\n <linearGradient\n id={`${chartId}-duotone-reverse-mask-gradient-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={1} />\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={0.4} />\n </linearGradient>\n\n {/* Color gradient for this dataKey - applies to each bar's bounding box */}\n <linearGradient\n id={`${chartId}-duotone-reverse-colors-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n {colorsCount === 1 ? (\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n <stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n </>\n ) : (\n Array.from({ length: colorsCount }, (_, index) => (\n <stop\n key={index}\n offset={`${(index / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n />\n ))\n )}\n </linearGradient>\n\n {/* Mask for duotone reverse effect */}\n <mask\n id={`${chartId}-duotone-reverse-mask-${dataKey}`}\n maskContentUnits=\"objectBoundingBox\"\n >\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-duotone-reverse-mask-gradient-${dataKey})`}\n />\n </mask>\n\n {/* Pattern: gradient fill with duotone reverse mask */}\n <pattern\n id={`${chartId}-duotone-reverse-${dataKey}`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n width=\"1\"\n height=\"1\"\n >\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-duotone-reverse-colors-${dataKey})`}\n mask={`url(#${chartId}-duotone-reverse-mask-${dataKey})`}\n />\n </pattern>\n </g>\n )\n })}\n </>\n )\n}\n\ntype GradientVector = {\n x1: string\n y1: string\n x2: string\n y2: string\n}\n\n// Minimum opacity at the axis side — never fully transparent (matches duotone fade)\nconst GRADIENT_AXIS_MIN_OPACITY = 0.4\n\nfunction getBarGradientVector({\n isHorizontal,\n xAxisReversed,\n yAxisReversed,\n}: {\n isHorizontal: boolean\n xAxisReversed?: boolean\n yAxisReversed?: boolean\n}): GradientVector {\n if (isHorizontal) {\n // Tip follows the value axis: right by default, left when reversed.\n return xAxisReversed\n ? { x1: '0', y1: '0', x2: '1', y2: '0' }\n : { x1: '1', y1: '0', x2: '0', y2: '0' }\n }\n\n // Tip follows the value axis: top by default, bottom when reversed.\n return yAxisReversed\n ? { x1: '0', y1: '1', x2: '0', y2: '0' }\n : { x1: '0', y1: '0', x2: '0', y2: '1' }\n}\n\n// Gradient pattern style for bars - fade from bar tip toward the axis\nconst GradientPatternStyle = ({\n chartConfig,\n chartId,\n isHorizontal,\n gradientVector,\n}: {\n chartConfig: ChartConfig\n chartId: string\n isHorizontal: boolean\n gradientVector: GradientVector\n}) => {\n const maskStops = (\n <>\n <stop offset=\"20%\" stopColor=\"white\" stopOpacity={1} />\n <stop\n offset=\"90%\"\n stopColor=\"white\"\n stopOpacity={GRADIENT_AXIS_MIN_OPACITY}\n />\n </>\n )\n\n if (!isHorizontal) {\n return (\n <>\n <linearGradient\n id={`${chartId}-gradient-mask-gradient`}\n {...gradientVector}\n >\n {maskStops}\n </linearGradient>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-gradient-group-${dataKey}`}>\n <mask id={`${chartId}-gradient-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-gradient-mask-gradient)`}\n />\n </mask>\n\n <pattern\n id={`${chartId}-gradient-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-gradient-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n }\n\n return (\n <>\n <linearGradient\n id={`${chartId}-gradient-mask-gradient`}\n gradientUnits=\"objectBoundingBox\"\n {...gradientVector}\n >\n {maskStops}\n </linearGradient>\n\n {Object.entries(chartConfig).map(([dataKey, config]) => {\n const colorsCount = getColorsCount(config)\n const barColorFill =\n colorsCount === 1\n ? `var(--color-${dataKey}-0)`\n : `url(#${chartId}-gradient-bar-colors-${dataKey})`\n\n return (\n <g key={`${chartId}-gradient-group-${dataKey}`}>\n {colorsCount > 1 && (\n <linearGradient\n id={`${chartId}-gradient-bar-colors-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n {...gradientVector}\n >\n {Array.from({ length: colorsCount }, (_, index) => (\n <stop\n key={index}\n offset={`${(index / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n />\n ))}\n </linearGradient>\n )}\n\n <mask\n id={`${chartId}-gradient-mask-${dataKey}`}\n maskContentUnits=\"objectBoundingBox\"\n >\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-gradient-mask-gradient)`}\n />\n </mask>\n\n <pattern\n id={`${chartId}-gradient-${dataKey}`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n width=\"1\"\n height=\"1\"\n >\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={barColorFill}\n mask={`url(#${chartId}-gradient-mask-${dataKey})`}\n />\n </pattern>\n </g>\n )\n })}\n </>\n )\n}\n\n// Stripped pattern style for bars (low opacity body with full opacity top) - uses mask to preserve gradient colors\nconst StrippedPatternStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {/* Shared stripped fade gradient for mask */}\n <linearGradient\n id={`${chartId}-stripped-mask-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity={0.2} />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={0.2} />\n </linearGradient>\n\n {Object.keys(chartConfig).map((dataKey) => (\n <g key={`${chartId}-stripped-group-${dataKey}`}>\n {/* Mask for stripped fade */}\n <mask id={`${chartId}-stripped-mask-${dataKey}`}>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-stripped-mask-gradient)`}\n />\n </mask>\n\n {/* Pattern: gradient fill with stripped fade mask */}\n <pattern\n id={`${chartId}-stripped-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"100%\"\n height=\"100%\"\n >\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-colors-${dataKey})`}\n mask={`url(#${chartId}-stripped-mask-${dataKey})`}\n />\n </pattern>\n </g>\n ))}\n </>\n )\n}\n\n// Glow filter style for glowing bars\nconst GlowFilterStyle = ({\n chartId,\n glowingBars,\n}: {\n chartId: string\n glowingBars: string[]\n}) => {\n return (\n <>\n {glowingBars.map((dataKey) => (\n <filter\n key={`${chartId}-bar-glow-${dataKey}`}\n id={`${chartId}-bar-glow-${dataKey}`}\n x=\"-100%\"\n y=\"-100%\"\n width=\"300%\"\n height=\"300%\"\n >\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n type=\"matrix\"\n values=\"1 0 0 0 0\n 0 1 0 0 0\n 0 0 1 0 0\n 0 0 0 0.5 0\"\n result=\"glow\"\n />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n ))}\n </>\n )\n}\n\n// Generate gradient stops with smooth easing for loading animation\nconst generateEasedGradientStops = (\n steps: number = 17,\n minOpacity: number = 0.05,\n maxOpacity: number = 0.9,\n) => {\n return Array.from({ length: steps }, (_, i) => {\n const t = i / (steps - 1)\n const eased = Math.sin(t * Math.PI) ** 2\n const opacity = minOpacity + eased * (maxOpacity - minOpacity)\n return {\n offset: `${(t * 100).toFixed(0)}%`,\n opacity: Number(opacity.toFixed(3)),\n }\n })\n}\n\n/**\n * Hook to manage loading data with pixel-perfect shimmer synchronization.\n */\nfunction useLoadingData(isLoading: boolean, loadingBars: number = 12) {\n const [loadingDataKey, setLoadingDataKey] = useState(false)\n\n const onShimmerExit = useCallback(() => {\n if (isLoading) {\n setLoadingDataKey((prev) => !prev)\n }\n }, [isLoading])\n\n const loadingData = useMemo(\n () => getLoadingData(loadingBars, 20, 80),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [loadingBars, loadingDataKey],\n )\n\n return { loadingData, onShimmerExit }\n}\n\n/**\n * Loading bar pattern with animated skeleton effect\n */\nconst LoadingBarPatternStyle = ({\n chartId,\n onShimmerExit,\n}: {\n chartId: string\n onShimmerExit: () => void\n}) => {\n const gradientStops = generateEasedGradientStops()\n const patternWidth = 3\n const startX = -1\n const endX = 2\n const lastXRef = useRef(startX)\n\n return (\n <>\n <linearGradient\n id={`${chartId}-loading-mask-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n {gradientStops.map(({ offset, opacity }) => (\n <stop\n key={offset}\n offset={offset}\n stopColor=\"white\"\n stopOpacity={opacity}\n />\n ))}\n </linearGradient>\n <pattern\n id={`${chartId}-loading-mask-pattern`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n patternTransform=\"rotate(25)\"\n width={patternWidth}\n height=\"1\"\n x=\"0\"\n y=\"0\"\n >\n <motion.rect\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-loading-mask-gradient)`}\n initial={{ attrX: startX }}\n animate={{ attrX: endX }}\n transition={{\n duration: LOADING_ANIMATION_DURATION / 1000,\n ease: 'linear',\n repeat: Infinity,\n repeatType: 'loop',\n }}\n onUpdate={(latest) => {\n const xValue =\n typeof latest.attrX === 'number' ? latest.attrX : startX\n const lastX = lastXRef.current\n if (xValue >= 1 && lastX < 1) {\n onShimmerExit()\n }\n lastXRef.current = xValue\n }}\n />\n </pattern>\n <mask id={`${chartId}-loading-mask`} maskUnits=\"userSpaceOnUse\">\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-loading-mask-pattern)`}\n />\n </mask>\n </>\n )\n}\n\n/**\n * Calculate bar opacity based on click selection and hover highlight state\n */\nconst getBarOpacity = ({\n isClickable,\n selectedDataKey,\n dataKey,\n enableHoverHighlight,\n isMouseInChart,\n isActive,\n}: {\n isClickable?: boolean\n selectedDataKey?: string | null\n dataKey: string\n enableHoverHighlight?: boolean\n isMouseInChart?: boolean\n isActive?: boolean\n}) => {\n // Check if this dataKey is selected (for click selection)\n const isSelectedDataKey =\n selectedDataKey === null || selectedDataKey === dataKey\n\n // Base opacity from click selection\n const clickOpacity =\n isClickable && selectedDataKey !== null ? (isSelectedDataKey ? 1 : 0.3) : 1\n\n // If hover highlight is enabled and mouse is in chart\n if (enableHoverHighlight && isMouseInChart) {\n // Combine: if this bar is active/hovered, show full opacity (respecting click selection)\n // If not hovered, dim it further\n return isActive ? clickOpacity : clickOpacity * 0.3\n }\n\n return clickOpacity\n}\n","'use client'\n\nimport {\n CartesianGrid,\n Curve,\n type CurveProps,\n Line,\n LineChart as RechartsLineChart,\n ReferenceLine,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n type ComponentProps,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport { motion } from 'motion/react'\n\nimport {\n type BackgroundVariant,\n ChartBackground,\n} from '@/components/charts/core/background'\nimport {\n type ChartConfig,\n ChartContainer,\n getColorsCount,\n getLoadingData,\n LoadingIndicator,\n} from '@/components/charts/core/chart'\nimport { ChartDot, DotVariant } from '@/components/charts/core/dot'\nimport {\n ChartBrush,\n type ChartBrushRange,\n useChartBrush,\n} from '@/components/charts/core/brush'\nimport {\n ChartLegend,\n ChartLegendContent,\n type ChartLegendVariant,\n} from '@/components/charts/core/legend'\nimport {\n ChartTooltip,\n ChartTooltipContent,\n type TooltipRoundness,\n type TooltipVariant,\n} from '@/components/charts/core/tooltip'\n\n// Constants\nconst STROKE_WIDTH = 1\nconst LOADING_LINE_DATA_KEY = 'loading'\nconst LOADING_ANIMATION_DURATION = 2000 // in milliseconds\n\ntype ChartProps = ComponentProps<typeof RechartsLineChart>\ntype XAxisProps = ComponentProps<typeof XAxis>\ntype YAxisProps = ComponentProps<typeof YAxis>\ntype LineType = ComponentProps<typeof Line>['type']\ntype StrokeVariant = 'solid' | 'dashed' | 'animated-dashed'\n\n// Validating Types to make sure user have provided valid data according to chartConfig\ntype ValidateConfigKeys<TData, TConfig> = {\n [K in keyof TConfig]: K extends keyof TData ? ChartConfig[string] : never\n}\n\n// Extract only keys from TData where the value is a number (not string, boolean, etc.)\ntype NumericDataKeys<T> = {\n [K in keyof T]: T[K] extends number ? K : never\n}[keyof T]\n\ntype LineChartProps<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = {\n chartConfig: TConfig & ValidateConfigKeys<TData, TConfig>\n data: TData[]\n xDataKey?: keyof TData & string\n yDataKey?: keyof TData & string\n className?: string\n chartProps?: ChartProps\n xAxisProps?: XAxisProps\n yAxisProps?: YAxisProps\n defaultSelectedDataKey?: string | null\n curveType?: LineType\n strokeWidth?: number\n strokeVariant?: StrokeVariant\n dotVariant?: DotVariant\n activeDotVariant?: DotVariant\n legendVariant?: ChartLegendVariant\n connectNulls?: boolean\n tickGap?: number\n // Hide Stuffs\n hideTooltip?: boolean\n hideCartesianGrid?: boolean\n hideLegend?: boolean\n hideCursorLine?: boolean\n // Tooltip\n tooltipRoundness?: TooltipRoundness\n tooltipVariant?: TooltipVariant\n tooltipDefaultIndex?: number\n tooltipAnimationDuration?: number\n tooltipContentProps?: Omit<\n ComponentProps<typeof ChartTooltipContent>,\n 'selected' | 'roundness' | 'variant'\n >\n // Interactive Stuffs\n isLoading?: boolean\n loadingPoints?: number\n // Glow Effect\n glowingLines?: NumericDataKeys<TData>[]\n // Brush\n showBrush?: boolean\n brushHeight?: number\n brushFormatLabel?: (value: unknown, index: number) => string\n onBrushChange?: (range: ChartBrushRange) => void\n // Background\n backgroundVariant?: BackgroundVariant\n // Buffer Line - renders last segment as dashed/dotted\n enableBufferLine?: boolean\n}\n\ntype LineChartClickable = {\n isClickable: true\n onSelectionChange?: (selectedDataKey: string | null) => void\n}\n\ntype LineChartNotClickable = {\n isClickable?: false\n onSelectionChange?: never\n}\n\ntype LineChartPropsWithCallback<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = LineChartProps<TData, TConfig> &\n (LineChartClickable | LineChartNotClickable)\n\nexport function LineChart<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n>({\n chartConfig,\n data,\n xDataKey,\n yDataKey,\n className,\n chartProps,\n xAxisProps,\n yAxisProps,\n defaultSelectedDataKey = null,\n curveType = 'linear',\n strokeWidth = STROKE_WIDTH,\n strokeVariant = 'solid',\n dotVariant,\n activeDotVariant,\n legendVariant,\n connectNulls = false,\n tickGap = 8,\n hideTooltip = false,\n hideCartesianGrid = false,\n hideLegend = false,\n hideCursorLine = false,\n tooltipRoundness,\n tooltipVariant,\n tooltipDefaultIndex,\n tooltipAnimationDuration,\n tooltipContentProps,\n isClickable = false,\n isLoading = false,\n loadingPoints,\n glowingLines = [],\n showBrush = false,\n brushHeight,\n brushFormatLabel,\n onBrushChange,\n onSelectionChange,\n backgroundVariant,\n enableBufferLine = false,\n}: LineChartPropsWithCallback<TData, TConfig>) {\n const [selectedDataKey, setSelectedDataKey] = useState<string | null>(\n defaultSelectedDataKey,\n )\n const { loadingData, onShimmerExit } = useLoadingData(\n isLoading,\n loadingPoints,\n )\n const chartId = useId().replace(/:/g, '') // Remove colons for valid CSS selectors\n\n // ── Zoom state ──────────────────────────────────────────────────────────\n const { visibleData, brushProps } = useChartBrush({ data })\n const displayData = showBrush && !isLoading ? visibleData : data\n\n // Wrapper function to update state and call parent callback\n const handleSelectionChange = useCallback(\n (newSelectedDataKey: string | null) => {\n setSelectedDataKey(newSelectedDataKey)\n if (isClickable && onSelectionChange) {\n onSelectionChange(newSelectedDataKey)\n }\n },\n [onSelectionChange, isClickable],\n )\n\n return (\n <ChartContainer\n className={className}\n config={chartConfig}\n footer={\n showBrush &&\n !isLoading && (\n <ChartBrush\n data={data}\n chartConfig={chartConfig}\n xDataKey={xDataKey}\n variant=\"line\"\n curveType={curveType}\n strokeVariant={strokeVariant}\n connectNulls={connectNulls}\n height={brushHeight}\n formatLabel={brushFormatLabel}\n skipStyle\n className=\"mt-1\"\n {...brushProps}\n onChange={(range) => {\n brushProps.onChange(range)\n onBrushChange?.(range)\n }}\n />\n )\n }\n >\n <LoadingIndicator isLoading={isLoading} />\n <RechartsLineChart\n id=\"charts-line-chart\"\n accessibilityLayer\n data={isLoading ? loadingData : displayData}\n {...chartProps}\n >\n {backgroundVariant && <ChartBackground variant={backgroundVariant} />}\n <ReferenceLine color=\"white\" />\n {!hideCartesianGrid && !backgroundVariant && (\n <CartesianGrid vertical={false} strokeDasharray=\"3 3\" />\n )}\n {!hideLegend && (\n <ChartLegend\n verticalAlign=\"top\"\n align=\"right\"\n content={\n <ChartLegendContent\n selected={selectedDataKey}\n onSelectChange={handleSelectionChange}\n isClickable={isClickable}\n variant={legendVariant}\n />\n }\n />\n )}\n {xDataKey && !isLoading && (\n <XAxis\n dataKey={xDataKey}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={tickGap}\n {...xAxisProps}\n />\n )}\n {yDataKey && !isLoading && (\n <YAxis\n dataKey={yDataKey}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={tickGap}\n width=\"auto\"\n tickFormatter={yAxisProps?.tickFormatter}\n {...yAxisProps}\n />\n )}\n {!hideTooltip && !isLoading && (\n <ChartTooltip\n animationDuration={tooltipAnimationDuration}\n defaultIndex={tooltipDefaultIndex}\n cursor={\n hideCursorLine\n ? false\n : {\n strokeDasharray:\n strokeVariant === 'dashed' ||\n strokeVariant === 'animated-dashed'\n ? '3 3'\n : undefined,\n strokeWidth,\n }\n }\n content={\n <ChartTooltipContent\n selected={selectedDataKey}\n roundness={tooltipRoundness}\n variant={tooltipVariant}\n {...tooltipContentProps}\n />\n }\n />\n )}\n {!isLoading &&\n Object.keys(chartConfig).map((dataKey) => {\n const _opacity = getOpacity(isClickable, selectedDataKey, dataKey)\n const hasSelection = selectedDataKey !== null\n const isGlowing = glowingLines.includes(\n dataKey as NumericDataKeys<TData>,\n )\n const filter = isGlowing\n ? `url(#${chartId}-line-glow-${dataKey})`\n : undefined\n\n const dot = dotVariant ? (\n <ChartDot\n fillOpacity={_opacity.dot}\n type={dotVariant}\n dataKey={dataKey}\n chartId={chartId}\n />\n ) : (\n false\n )\n const activeDot = activeDotVariant ? (\n <ChartDot\n fillOpacity={_opacity.dot}\n type={activeDotVariant}\n dataKey={dataKey}\n chartId={chartId}\n />\n ) : (\n false\n )\n\n return (\n <g key={dataKey}>\n {/* Transparent hit area for easier clicking */}\n {isClickable && (\n <Line\n type={curveType}\n dataKey={dataKey}\n connectNulls={connectNulls}\n stroke=\"transparent\"\n strokeWidth={15}\n dot={false}\n activeDot={false}\n legendType=\"none\"\n tooltipType=\"none\"\n style={{ cursor: 'pointer' }}\n onClick={() => {\n handleSelectionChange(\n selectedDataKey === dataKey ? null : dataKey,\n )\n }}\n />\n )}\n {/* Visible line */}\n <Line\n type={curveType}\n dataKey={dataKey}\n connectNulls={connectNulls}\n strokeOpacity={_opacity.stroke}\n stroke={`url(#${chartId}-colors-${dataKey})`}\n filter={filter}\n dot={dot}\n activeDot={activeDot}\n strokeWidth={strokeWidth}\n strokeDasharray={getStrokeDasharray(\n enableBufferLine,\n strokeVariant,\n )}\n shape={enableBufferLine ? bufferLineShape : undefined}\n style={isClickable ? { cursor: 'pointer' } : undefined}\n onClick={() => {\n if (!isClickable) return\n\n // Toggle: if already selected, unselect; otherwise select\n setSelectedDataKey(\n selectedDataKey === dataKey ? null : dataKey,\n )\n }}\n >\n {strokeVariant === 'animated-dashed' && !hasSelection && (\n <AnimatedDashedStyle />\n )}\n </Line>\n </g>\n )\n })}\n {/* ======== LOADING LINE ======== */}\n {isLoading && (\n <Line\n type={curveType}\n dataKey={LOADING_LINE_DATA_KEY}\n min={0}\n max={100}\n stroke=\"currentColor\"\n strokeOpacity={0.5}\n isAnimationActive={false}\n legendType=\"none\"\n tooltipType=\"none\"\n activeDot={false}\n dot={false}\n strokeWidth={strokeWidth}\n style={{ mask: `url(#${chartId}-loading-mask)` }}\n />\n )}\n {/* ======== CHART STYLES ======== */}\n <defs>\n {isLoading && (\n <LoadingLinePatternStyle\n chartId={chartId}\n onShimmerExit={onShimmerExit}\n />\n )}\n {/* Shared horizontal color gradient - always rendered for stroke */}\n <HorizontalColorGradientStyle\n chartConfig={chartConfig}\n chartId={chartId}\n />\n {/* Glow filter for glowing lines */}\n {glowingLines.length > 0 && (\n <GlowFilterStyle\n chartId={chartId}\n glowingLines={glowingLines as string[]}\n />\n )}\n </defs>\n </RechartsLineChart>\n </ChartContainer>\n )\n}\n\n// Buffer line shape - renders the last segment as dashed while the rest stays solid.\n// Renders a single <Curve> and uses a ref callback to measure the actual SVG path\n// length via getTotalLength() + getPointAtLength(), then sets stroke-dasharray\n// imperatively. Works correctly with any curve type (linear, natural, monotone, etc.).\ntype CurvePoint = NonNullable<NonNullable<CurveProps['points']>[number]>\ntype DrawableCurvePoint = CurvePoint & { x: number; y: number }\n\nconst isDrawableCurvePoint = (\n point: CurvePoint,\n): point is DrawableCurvePoint => {\n return typeof point.x === 'number' && typeof point.y === 'number'\n}\n\nconst BUFFER_DASH_SIZE = 4\nconst BUFFER_GAP_SIZE = 3\n\n/**\n * Binary-search the path to find the length at which path.x ≈ targetX.\n * Uses the browser's native getPointAtLength for exact curve measurement.\n */\nconst findLengthAtX = (\n path: SVGPathElement,\n totalLength: number,\n targetX: number,\n): number => {\n let lo = 0\n let hi = totalLength\n // ~0.5px precision is more than enough for a dasharray split\n while (hi - lo > 0.5) {\n const mid = (lo + hi) / 2\n const pt = path.getPointAtLength(mid)\n if (pt.x < targetX) lo = mid\n else hi = mid\n }\n return (lo + hi) / 2\n}\n\nconst bufferLineShape = (props: CurveProps) => {\n const { points, ...rest } = props\n\n if (!points || points.length < 2) {\n return <Curve {...props} />\n }\n\n const drawablePoints = points.filter(isDrawableCurvePoint)\n\n if (drawablePoints.length < 2) {\n return <Curve {...props} />\n }\n\n // x coordinate of the second-to-last point — where solid meets dashed\n const splitX = drawablePoints[drawablePoints.length - 2].x\n\n // Ref callback runs synchronously during React commit (before browser paint),\n // so there's no visible flash of an un-dashed line.\n const gRef = (g: SVGGElement | null) => {\n if (!g) return\n const path = g.querySelector('path')\n if (!path) return\n\n const totalLength = path.getTotalLength()\n const solidLength = findLengthAtX(path, totalLength, splitX)\n const lastSegmentLength = totalLength - solidLength\n\n // Build dasharray: solid run, then repeating dash-gap for the buffer segment\n const reps =\n Math.ceil(lastSegmentLength / (BUFFER_DASH_SIZE + BUFFER_GAP_SIZE)) + 1\n const dashedPart = Array.from(\n { length: reps },\n () => `${BUFFER_DASH_SIZE} ${BUFFER_GAP_SIZE}`,\n ).join(' ')\n\n path.setAttribute('stroke-dasharray', `${solidLength} 0 ${dashedPart}`)\n }\n\n return (\n <g ref={gRef}>\n <Curve {...rest} points={drawablePoints} />\n </g>\n )\n}\n\n// Returns opacity object for stroke and dot\nconst getOpacity = (\n isClickable: boolean,\n selectedDataKey: string | null,\n dataKey: string,\n) => {\n if (!isClickable || selectedDataKey === null) {\n return { stroke: 1, dot: 1 }\n }\n return selectedDataKey === dataKey\n ? { stroke: 1, dot: 1 }\n : { stroke: 0.3, dot: 0.3 }\n}\n\nconst getStrokeDasharray = (\n enableBufferLine: boolean,\n strokeVariant: StrokeVariant,\n) => {\n if (enableBufferLine) {\n return undefined\n }\n\n if (strokeVariant === 'dashed' || strokeVariant === 'animated-dashed') {\n return '5 5'\n }\n\n return undefined\n}\n\n// Animated dashed-stroke style for the line chart\nconst AnimatedDashedStyle = () => {\n return (\n <>\n <animate\n attributeName=\"stroke-dasharray\"\n values=\"5 5; 0 5; 5 5\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n keyTimes=\"0;0.5;1\"\n />\n <animate\n attributeName=\"stroke-dashoffset\"\n values=\"0; -10\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n keyTimes=\"0;1\"\n />\n </>\n )\n}\n\n// Shared horizontal color gradient (left to right) - used for stroke\nconst HorizontalColorGradientStyle = ({\n chartConfig,\n chartId,\n}: {\n chartConfig: ChartConfig\n chartId: string\n}) => {\n return (\n <>\n {Object.entries(chartConfig).map(([dataKey, config]) => {\n const colorsCount = getColorsCount(config)\n\n return (\n <linearGradient\n key={`${chartId}-colors-${dataKey}`}\n id={`${chartId}-colors-${dataKey}`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n {colorsCount === 1 ? (\n // Single color: same color at start and end\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} />\n <stop offset=\"100%\" stopColor={`var(--color-${dataKey}-0)`} />\n </>\n ) : (\n // Multiple colors: distribute evenly\n // Fallback to first color if index doesn't exist in current theme\n Array.from({ length: colorsCount }, (_, index) => (\n <stop\n key={index}\n offset={`${(index / (colorsCount - 1)) * 100}%`}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n />\n ))\n )}\n </linearGradient>\n )\n })}\n </>\n )\n}\n\n// Glow filter style for glowing lines - smooth outer glow\nconst GlowFilterStyle = ({\n chartId,\n glowingLines,\n}: {\n chartId: string\n glowingLines: string[]\n}) => {\n return (\n <>\n {glowingLines.map((dataKey) => (\n <filter\n key={`${chartId}-line-glow-${dataKey}`}\n id={`${chartId}-line-glow-${dataKey}`}\n x=\"-50%\"\n y=\"-50%\"\n width=\"200%\"\n height=\"200%\"\n >\n {/* Smooth outer glow with increased intensity */}\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"10\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n type=\"matrix\"\n values=\"1 0 0 0 0\n 0 1 0 0 0\n 0 0 1 0 0\n 0 0 0 2 0\"\n result=\"glow\"\n />\n {/* Place original line on top of glow */}\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n ))}\n </>\n )\n}\n\n// Generate gradient stops with smooth easing for loading animation\nconst generateEasedGradientStops = (\n steps: number = 17,\n minOpacity: number = 0.05,\n maxOpacity: number = 0.9,\n) => {\n return Array.from({ length: steps }, (_, i) => {\n const t = i / (steps - 1) // 0 to 1\n // Sine-based bell curve easing: peaks at center (t=0.5), smooth falloff at edges\n const eased = Math.sin(t * Math.PI) ** 2\n const opacity = minOpacity + eased * (maxOpacity - minOpacity)\n return {\n offset: `${(t * 100).toFixed(0)}%`,\n opacity: Number(opacity.toFixed(3)),\n }\n })\n}\n\n/**\n * Hook to manage loading data with pixel-perfect shimmer synchronization.\n *\n * Uses motion.dev's onAnimationComplete callback to ensure chart data\n * is only regenerated when the shimmer has completely exited the visible area.\n * This eliminates timing drift issues from setTimeout/setInterval.\n *\n * The shimmer pattern has 200-300% width so that when the visible shimmer\n * exits the chart container (at the 100% point), we can safely swap data\n * while the invisible portion continues animating.\n */\nfunction useLoadingData(isLoading: boolean, loadingPoints: number = 14) {\n const [loadingDataKey, setLoadingDataKey] = useState(false)\n\n // Callback fired by motion.dev when shimmer exits visible area\n const onShimmerExit = useCallback(() => {\n if (isLoading) {\n setLoadingDataKey((prev) => !prev)\n }\n }, [isLoading])\n\n const loadingData = useMemo(\n () => getLoadingData(loadingPoints),\n // loadingDataKey toggle triggers re-computation when shimmer exits\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [loadingPoints, loadingDataKey],\n )\n\n return { loadingData, onShimmerExit }\n}\n\n/**\n * Loading line pattern with animated skeleton effect using motion.dev\n *\n * Key design for pixel-perfect sync:\n * - Visible chart area is normalized to 0-1 in objectBoundingBox units\n * - Shimmer gradient has width=1 (same as visible area)\n * - Pattern width is 3x (300%) to provide buffer on both sides\n * - Animation: x goes from -1 (off-screen left) to 2 (off-screen right)\n * - At x=-1: shimmer is completely outside left edge\n * - At x=0: shimmer starts entering from left\n * - At x=1: shimmer has fully exited right edge\n * - At x=2: shimmer is in the right buffer zone\n * - onShimmerExit fires when x crosses 1 (shimmer fully exited visible area)\n * - Data swaps happen while shimmer is outside visible area (x >= 1)\n * - Loop continues infinitely\n */\nconst LoadingLinePatternStyle = ({\n chartId,\n onShimmerExit,\n}: {\n chartId: string\n onShimmerExit: () => void\n}) => {\n const gradientStops = generateEasedGradientStops()\n\n // Pattern width needs to accommodate: 1 (left buffer) + 1 (visible) + 1 (right buffer) = 3\n const patternWidth = 3\n\n // Animation goes from -1 (left of visible) to 2 (right of visible)\n // Total travel distance = 3, matching pattern width\n const startX = -1\n const endX = 2\n\n // Track last x value to detect threshold crossing\n const lastXRef = useRef(startX)\n\n return (\n <>\n {/* Gradient for smooth fade: edges dim, middle bright for sweep effect */}\n <linearGradient\n id={`${chartId}-loading-mask-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n {gradientStops.map(({ offset, opacity }) => (\n <stop\n key={offset}\n offset={offset}\n stopColor=\"white\"\n stopOpacity={opacity}\n />\n ))}\n </linearGradient>\n <pattern\n id={`${chartId}-loading-mask-pattern`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n patternTransform=\"rotate(25)\"\n width={patternWidth}\n height=\"1\"\n x=\"0\"\n y=\"0\"\n >\n {/* Use motion.rect with keyframe animation for precise timing */}\n <motion.rect\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-loading-mask-gradient)`}\n initial={{ attrX: startX }}\n animate={{ attrX: endX }}\n transition={{\n duration: LOADING_ANIMATION_DURATION / 1000,\n ease: 'linear',\n repeat: Infinity,\n repeatType: 'loop',\n }}\n // Use onUpdate to fire callback at precise exit point\n onUpdate={(latest) => {\n const xValue =\n typeof latest.attrX === 'number' ? latest.attrX : startX\n const lastX = lastXRef.current\n\n // Fire when crossing the exit threshold (x >= 1 means shimmer fully exited right)\n if (xValue >= 1 && lastX < 1) {\n onShimmerExit()\n }\n\n // Update tracked value\n lastXRef.current = xValue\n }}\n />\n </pattern>\n {/* Masking */}\n <mask id={`${chartId}-loading-mask`} maskUnits=\"userSpaceOnUse\">\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-loading-mask-pattern)`}\n />\n </mask>\n </>\n )\n}\n","'use client'\n\nimport {\n Cell,\n Pie,\n PieChart as RechartsPieChart,\n} from 'recharts'\n\nimport {\n type ComponentProps,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport { motion } from 'motion/react'\n\nimport {\n type ChartConfig,\n ChartContainer,\n getLoadingData,\n LoadingIndicator,\n} from '@/components/charts/core/chart'\nimport {\n ChartLegend,\n ChartLegendContent,\n type ChartLegendVariant,\n} from '@/components/charts/core/legend'\nimport {\n ChartTooltip,\n ChartTooltipContent,\n type TooltipRoundness,\n type TooltipVariant,\n} from '@/components/charts/core/tooltip'\n\n// Constants\nconst DONUT_INNER_RADIUS = '62%'\nconst DEFAULT_PADDING_ANGLE = 2\nconst DEFAULT_CORNER_RADIUS = 4\nconst LOADING_PIE_DATA_KEY = 'loading'\nconst LOADING_ANIMATION_DURATION = 2000 // in milliseconds\n// Reserved space so the bottom-centered legend never overlaps the circle\nconst LEGEND_MARGIN = 36\n\ntype ChartProps = ComponentProps<typeof RechartsPieChart>\ntype PieProps = ComponentProps<typeof Pie>\ntype PieVariant = 'default' | 'donut'\n\ntype BasePieChartProps<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = {\n /**\n * Keyed by the category values found in `data[nameKey]` — each slice reads\n * its label and colors from the matching entry.\n */\n chartConfig: TConfig\n data: TData[]\n /** Numeric field of each row that sizes the slice. */\n dataKey: keyof TData & string\n /** Categorical field of each row that names the slice (and its config key). */\n nameKey: keyof TData & string\n className?: string\n chartProps?: Omit<ChartProps, 'data'>\n pieProps?: Omit<\n PieProps,\n 'data' | 'dataKey' | 'nameKey' | 'children' | 'ref'\n >\n defaultSelectedDataKey?: string | null\n pieVariant?: PieVariant\n paddingAngle?: number\n cornerRadius?: number\n legendVariant?: ChartLegendVariant\n /** Center content, rendered only on the `donut` variant. */\n centerLabel?: React.ReactNode\n centerValue?: React.ReactNode\n // Hide Stuffs\n hideTooltip?: boolean\n hideLegend?: boolean\n // Tooltip\n tooltipRoundness?: TooltipRoundness\n tooltipVariant?: TooltipVariant\n tooltipAnimationDuration?: number\n tooltipContentProps?: Omit<\n ComponentProps<typeof ChartTooltipContent>,\n 'selected' | 'roundness' | 'variant'\n >\n isLoading?: boolean\n loadingSlices?: number\n}\n\ntype PieChartClickable = {\n isClickable: true\n onSelectionChange?: (selectedDataKey: string | null) => void\n}\n\ntype PieChartNotClickable = {\n isClickable?: false\n onSelectionChange?: never\n}\n\ntype PieChartProps<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n> = BasePieChartProps<TData, TConfig> &\n (PieChartClickable | PieChartNotClickable)\n\nexport function PieChart<\n TData extends Record<string, unknown>,\n TConfig extends Record<string, ChartConfig[string]>,\n>({\n chartConfig,\n data,\n dataKey,\n nameKey,\n className,\n chartProps,\n pieProps,\n defaultSelectedDataKey = null,\n pieVariant = 'default',\n paddingAngle = DEFAULT_PADDING_ANGLE,\n cornerRadius = DEFAULT_CORNER_RADIUS,\n legendVariant,\n centerLabel,\n centerValue,\n hideTooltip = false,\n hideLegend = false,\n tooltipRoundness,\n tooltipVariant,\n tooltipAnimationDuration,\n tooltipContentProps,\n isClickable = false,\n isLoading = false,\n loadingSlices,\n onSelectionChange,\n}: PieChartProps<TData, TConfig>) {\n const [selectedDataKey, setSelectedDataKey] = useState<string | null>(\n defaultSelectedDataKey,\n )\n const { loadingData, onShimmerExit } = useLoadingData(\n isLoading,\n loadingSlices,\n )\n const chartId = useId().replace(/:/g, '') // Remove colons for valid CSS selectors\n\n // Wrapper function to update state and call parent callback\n // Only call callback when isClickable is true\n const handleSelectionChange = useCallback(\n (newSelectedDataKey: string | null) => {\n setSelectedDataKey(newSelectedDataKey)\n if (isClickable && onSelectionChange) {\n onSelectionChange(newSelectedDataKey)\n }\n },\n [onSelectionChange, isClickable],\n )\n\n const isDonut = pieVariant === 'donut'\n const hasCenterContent =\n isDonut &&\n !isLoading &&\n (centerLabel !== undefined || centerValue !== undefined)\n const showLegend = !hideLegend && !isLoading\n\n return (\n <ChartContainer className={className} config={chartConfig}>\n <LoadingIndicator isLoading={isLoading} />\n <RechartsPieChart\n id=\"charts-pie-chart\"\n accessibilityLayer\n // Reserve room for the bottom-centered legend so the circle never\n // renders underneath it (the recharts legend wrapper is absolute).\n margin={showLegend ? { bottom: LEGEND_MARGIN } : undefined}\n {...chartProps}\n >\n {!hideTooltip && !isLoading && (\n <ChartTooltip\n cursor={false}\n animationDuration={tooltipAnimationDuration}\n content={\n <ChartTooltipContent\n nameKey={nameKey}\n hideLabel\n selected={selectedDataKey}\n roundness={tooltipRoundness}\n variant={tooltipVariant}\n {...tooltipContentProps}\n />\n }\n />\n )}\n\n {showLegend && (\n <ChartLegend\n verticalAlign=\"bottom\"\n align=\"center\"\n content={\n <ChartLegendContent\n nameKey={nameKey}\n verticalAlign=\"bottom\"\n align=\"center\"\n selected={selectedDataKey}\n onSelectChange={handleSelectionChange}\n isClickable={isClickable}\n variant={legendVariant}\n />\n }\n />\n )}\n\n {!isLoading && (\n <Pie\n data={data}\n dataKey={dataKey}\n nameKey={nameKey}\n innerRadius={isDonut ? DONUT_INNER_RADIUS : 0}\n paddingAngle={paddingAngle}\n cornerRadius={cornerRadius}\n strokeWidth={0}\n {...pieProps}\n >\n {data.map((entry, index) => {\n const sliceKey = String(entry[nameKey])\n const isSelected =\n selectedDataKey === null || selectedDataKey === sliceKey\n\n return (\n <Cell\n key={`${sliceKey}-${index}`}\n fill={`var(--color-${sliceKey}-0)`}\n opacity={isSelected ? 1 : 0.3}\n className=\"transition-opacity\"\n />\n )\n })}\n </Pie>\n )}\n\n {/* ======== LOADING PIE ======== */}\n {isLoading && (\n <Pie\n data={loadingData}\n dataKey={LOADING_PIE_DATA_KEY}\n innerRadius={isDonut ? DONUT_INNER_RADIUS : 0}\n paddingAngle={paddingAngle}\n cornerRadius={cornerRadius}\n fill=\"currentColor\"\n fillOpacity={0.08}\n stroke=\"none\"\n isAnimationActive={false}\n legendType=\"none\"\n tooltipType=\"none\"\n style={{ mask: `url(#${chartId}-loading-mask)` }}\n />\n )}\n\n {hasCenterContent && (\n <foreignObject\n x=\"35%\"\n y=\"35%\"\n width=\"30%\"\n height=\"30%\"\n className=\"pointer-events-none\"\n >\n <div className=\"flex h-full w-full flex-col items-center justify-center text-center\">\n {centerValue !== undefined && (\n <span className=\"text-foreground text-2xl font-semibold leading-tight\">\n {centerValue}\n </span>\n )}\n {centerLabel !== undefined && (\n <span className=\"text-muted-foreground text-xs\">\n {centerLabel}\n </span>\n )}\n </div>\n </foreignObject>\n )}\n\n {/* ======== CHART STYLES ======== */}\n <defs>\n {isLoading && (\n <LoadingPiePatternStyle\n chartId={chartId}\n onShimmerExit={onShimmerExit}\n />\n )}\n </defs>\n </RechartsPieChart>\n </ChartContainer>\n )\n}\n\n// Generate gradient stops with smooth easing for loading animation\nconst generateEasedGradientStops = (\n steps: number = 17,\n minOpacity: number = 0.05,\n maxOpacity: number = 0.9,\n) => {\n return Array.from({ length: steps }, (_, i) => {\n const t = i / (steps - 1) // 0 to 1\n // Sine-based bell curve easing: peaks at center (t=0.5), smooth falloff at edges\n const eased = Math.sin(t * Math.PI) ** 2\n const opacity = minOpacity + eased * (maxOpacity - minOpacity)\n return {\n offset: `${(t * 100).toFixed(0)}%`,\n opacity: Number(opacity.toFixed(3)),\n }\n })\n}\n\nconst LoadingPiePatternStyle = ({\n chartId,\n onShimmerExit,\n}: {\n chartId: string\n onShimmerExit: () => void\n}) => {\n const gradientStops = generateEasedGradientStops()\n\n // Pattern width needs to accommodate: 1 (left buffer) + 1 (visible) + 1 (right buffer) = 3\n const patternWidth = 3\n\n // Animation goes from -1 (left of visible) to 2 (right of visible)\n // Total travel distance = 3, matching pattern width\n const startX = -1\n const endX = 2\n\n // Track last x value to detect threshold crossing\n const lastXRef = useRef(startX)\n\n return (\n <>\n {/* Gradient for smooth fade: edges dim, middle bright for sweep effect */}\n <linearGradient\n id={`${chartId}-loading-mask-gradient`}\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n {gradientStops.map(({ offset, opacity }) => (\n <stop\n key={offset}\n offset={offset}\n stopColor=\"white\"\n stopOpacity={opacity}\n />\n ))}\n </linearGradient>\n <pattern\n id={`${chartId}-loading-mask-pattern`}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n patternTransform=\"rotate(25)\"\n width={patternWidth}\n height=\"1\"\n x=\"0\"\n y=\"0\"\n >\n {/* Use motion.rect with keyframe animation for precise timing */}\n <motion.rect\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${chartId}-loading-mask-gradient)`}\n initial={{ attrX: startX }}\n animate={{ attrX: endX }}\n transition={{\n duration: LOADING_ANIMATION_DURATION / 1000,\n ease: 'linear',\n repeat: Infinity,\n repeatType: 'loop',\n }}\n // Use onUpdate to fire callback at precise exit point\n onUpdate={(latest) => {\n const xValue =\n typeof latest.attrX === 'number' ? latest.attrX : startX\n const lastX = lastXRef.current\n\n // Fire when crossing the exit threshold (x >= 1 means shimmer fully exited right)\n if (xValue >= 1 && lastX < 1) {\n onShimmerExit()\n }\n\n // Update tracked value\n lastXRef.current = xValue\n }}\n />\n </pattern>\n {/* Masking */}\n <mask id={`${chartId}-loading-mask`} maskUnits=\"userSpaceOnUse\">\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${chartId}-loading-mask-pattern)`}\n />\n </mask>\n </>\n )\n}\n\n/**\n * Hook to manage loading data with pixel-perfect shimmer synchronization.\n *\n * Uses motion.dev's onUpdate callback to ensure slice data is only\n * regenerated when the shimmer has completely exited the visible area.\n */\nfunction useLoadingData(isLoading: boolean, loadingSlices: number = 5) {\n const [loadingDataKey, setLoadingDataKey] = useState(false)\n\n // Callback fired by motion.dev when shimmer exits visible area\n const onShimmerExit = useCallback(() => {\n if (isLoading) {\n setLoadingDataKey((prev) => !prev)\n }\n }, [isLoading])\n\n const loadingData = useMemo(\n () => getLoadingData(loadingSlices, 20, 80),\n // loadingDataKey toggle triggers re-computation when shimmer exits\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [loadingSlices, loadingDataKey],\n )\n\n return { loadingData, onShimmerExit }\n}\n","'use client'\n\nimport { twMerge } from 'tailwind-merge'\n\nimport { motion } from 'motion/react'\n\nimport { Tooltip } from '@/components/ui/tooltip'\n\n// Constants\nconst LOADING_ANIMATION_DURATION = 2000 // in milliseconds\nconst DEFAULT_LOADING_BLOCKS = 30\n\ninterface TrackerChartBlockProps {\n key?: string | number\n color?: string\n tooltip?: string\n defaultBackgroundColor?: string\n disabledTooltip?: boolean\n}\n\nconst Block = ({\n color,\n tooltip,\n disabledTooltip,\n defaultBackgroundColor = 'var(--color-secondary)',\n}: TrackerChartBlockProps) => {\n return disabledTooltip ? (\n <div className=\"size-full overflow-hidden px-[0.5px] transition first:rounded-l-sm first:pl-0 last:rounded-r-sm last:pr-0 sm:px-px\">\n <div\n style={\n {\n '--color': color || defaultBackgroundColor,\n } as React.CSSProperties\n }\n className=\"size-full rounded-[1px] bg-(--color) hover:opacity-50\"\n />\n </div>\n ) : (\n <Tooltip>\n <Tooltip.Trigger asChild>\n <div\n role=\"button\"\n aria-label={tooltip}\n className=\"size-full overflow-hidden px-[0.5px] transition first:rounded-l-sm first:pl-0 last:rounded-r-sm last:pr-0 sm:px-px cursor-pointer\"\n >\n <div\n style={\n {\n '--color': color || defaultBackgroundColor,\n } as React.CSSProperties\n }\n className=\"size-full rounded-[1px] bg-(--color) hover:opacity-80 transition-opacity\"\n />\n </div>\n </Tooltip.Trigger>\n <Tooltip.Content className=\"bg-popover text-popover-foreground border border-border rounded-md px-3 py-1.5 text-sm shadow-md\">\n {tooltip}\n </Tooltip.Content>\n </Tooltip>\n )\n}\n\ninterface TrackerChartProps\n extends\n React.ComponentProps<'div'>,\n Pick<TrackerChartBlockProps, 'disabledTooltip'> {\n data: TrackerChartBlockProps[]\n defaultBackgroundColor?: string\n isLoading?: boolean\n loadingBlocks?: number\n}\n\nconst TrackerChart = ({\n data = [],\n disabledTooltip = false,\n isLoading = false,\n loadingBlocks = DEFAULT_LOADING_BLOCKS,\n className,\n ref,\n ...props\n}: TrackerChartProps) => {\n return (\n <div\n ref={ref}\n className={twMerge('group flex h-10 w-full items-center', className)}\n {...props}\n >\n {isLoading ? (\n <TrackerChartLoading blocks={loadingBlocks} />\n ) : (\n data.map((props, index) => (\n <Block\n disabledTooltip={disabledTooltip}\n key={props.key ?? index}\n {...props}\n />\n ))\n )}\n </div>\n )\n}\n\n// Generate gradient stops with smooth easing for loading animation\nconst generateEasedGradientStops = (\n steps: number = 17,\n minOpacity: number = 0.05,\n maxOpacity: number = 0.9,\n) => {\n return Array.from({ length: steps }, (_, i) => {\n const t = i / (steps - 1) // 0 to 1\n // Sine-based bell curve easing: peaks at center (t=0.5), smooth falloff at edges\n const eased = Math.sin(t * Math.PI) ** 2\n const opacity = minOpacity + eased * (maxOpacity - minOpacity)\n return {\n offset: `${(t * 100).toFixed(0)}%`,\n opacity: Number(opacity.toFixed(3)),\n }\n })\n}\n\n/**\n * HTML/CSS port of the SVG shimmer the other charts use: the bell-curve\n * gradient occupies the middle third of a 300%-wide mask image, and animating\n * `mask-position` from 100% to 0% sweeps it across the visible area\n * left-to-right on the same 2s loop.\n */\nconst buildShimmerMaskImage = () => {\n const bellStops = generateEasedGradientStops()\n .map(({ offset, opacity }) => {\n // Map the bell's 0–100% onto the middle third (33.333%–66.667%)\n const position = (100 / 3 + parseFloat(offset) / 3).toFixed(2)\n return `rgba(0, 0, 0, ${opacity}) ${position}%`\n })\n .join(', ')\n\n return `linear-gradient(to right, transparent 0%, transparent 33.33%, ${bellStops}, transparent 66.67%, transparent 100%)`\n}\n\nconst SHIMMER_MASK_IMAGE = buildShimmerMaskImage()\n\nconst TrackerChartLoading = ({ blocks }: { blocks: number }) => {\n return (\n <motion.div\n aria-hidden\n className=\"flex size-full items-center\"\n style={{\n maskImage: SHIMMER_MASK_IMAGE,\n maskSize: '300% 100%',\n maskRepeat: 'no-repeat',\n }}\n initial={{ maskPosition: '100% 0%' }}\n animate={{ maskPosition: '0% 0%' }}\n transition={{\n duration: LOADING_ANIMATION_DURATION / 1000,\n ease: 'linear',\n repeat: Infinity,\n repeatType: 'loop',\n }}\n >\n {Array.from({ length: blocks }).map((_, index) => (\n <div\n key={index}\n className=\"size-full overflow-hidden px-[0.5px] first:rounded-l-sm first:pl-0 last:rounded-r-sm last:pr-0 sm:px-px\"\n >\n <div className=\"size-full rounded-[1px] bg-current opacity-30\" />\n </div>\n ))}\n </motion.div>\n )\n}\n\nexport { TrackerChart, type TrackerChartBlockProps }\n","'use client'\n\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { Icon } from '@/components/icon'\nimport { SocialIcon } from '@/components/icon/social'\n\nimport { AssistantChat, AssistantChatTheme, type ChatMessage } from './chat'\n\nexport const ChatPreview = ({\n messages,\n className,\n}: {\n messages: ChatMessage[]\n className?: string\n}) => {\n const options = useMemo(\n () => [\n {\n label: 'WhatsApp',\n value: 'whatsapp' as const,\n icon: (props: { className?: string }) => (\n <SocialIcon.WhatsApp {...props} />\n ),\n },\n {\n label: 'Instagram',\n value: 'instagram' as const,\n disabled: true,\n icon: (props: { className?: string }) => (\n <SocialIcon.Instagram {...props} />\n ),\n },\n {\n label: 'Messenger',\n value: 'messenger' as const,\n disabled: true,\n icon: (props: { className?: string }) => (\n <SocialIcon.Messenger {...props} />\n ),\n },\n {\n label: 'Webchat',\n value: 'webchat' as const,\n disabled: true,\n icon: (props: { className?: string }) => (\n <Icon name=\"ChatBot\" {...props} />\n ),\n },\n ],\n [],\n )\n\n const internalMessages: ChatMessage[] = useMemo(() => messages, [messages])\n\n const [theme, setTheme] = useState<AssistantChatTheme>(\n options.filter((option) => !option.disabled)[0].value,\n )\n\n const [hasCompletedCycle, setHasCompletedCycle] = useState(false)\n\n const currentTheme =\n options.find(({ value }) => value === theme) ?? options[0]\n\n useEffect(() => {\n if (hasCompletedCycle) {\n return\n }\n\n const activeOptions = options.filter((option) => !option.disabled)\n\n const currentIndex = activeOptions.findIndex(({ value }) => value === theme)\n\n const nextIndex = (currentIndex + 1) % activeOptions.length\n const nextTheme = activeOptions[nextIndex].value\n\n const isCompletingCycle =\n nextIndex === 0 && currentIndex === activeOptions.length - 1\n\n if (isCompletingCycle) {\n setHasCompletedCycle(true)\n\n const timer = setTimeout(() => {\n setTheme(nextTheme)\n }, 5000)\n\n return () => clearTimeout(timer)\n }\n\n const timer = setTimeout(() => {\n setTheme(nextTheme)\n }, 5000)\n\n return () => clearTimeout(timer)\n }, [theme, options, hasCompletedCycle])\n\n return (\n <div className=\"flex flex-col gap-4 w-full max-lg:max-w-xl\">\n {/* <div className=\"flex items-center gap-1 justify-center lg:justify-end max-sm:w-full sm:overflow-x-visible max-sm:overflow-x-auto snap-mandatory no-scrollbar py-1\">\n {options.map(({ label, value, icon }) => {\n const isActive = theme === value\n const IconComponent = () => icon({ className: 'size-3.5 shrink-0' })\n\n return (\n <Button\n size={isActive ? 'icon' : 'sm'}\n key={value}\n onClick={() => {\n setHasCompletedCycle(false)\n setTheme(value as AssistantChatTheme)\n }}\n className={cn(\n 'group relative px-2.5 py-1.5 rounded-full border flex items-center justify-center gap-1.5 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] h-8 shrink-0 cursor-pointer transition-[transform,box-shadow] duration-500 ease-in-out transform',\n isActive\n ? 'bg-card hover:bg-accent/90 text-foreground border-transparent w-fit min-w-8 animate-in zoom-in-95 duration-300'\n : 'bg-card/50 text-foreground/25 hover:bg-accent/50 hover:text-foreground/50 border-border/40 w-8 aspect-square hover:border-border/60',\n )}\n >\n <IconComponent />\n\n {isActive && (\n <span className=\"leading-none select-none w-fit text-xs animate-in slide-in-from-left-2 fade-in-0 duration-300\">\n {label}\n </span>\n )}\n </Button>\n )\n })}\n </div> */}\n\n <div className=\"animate-in fade-in-0 duration-500 ease-in-out\">\n <AssistantChat\n theme={theme}\n messages={internalMessages}\n name={currentTheme.label}\n disabled={currentTheme?.disabled}\n icon={currentTheme.icon({ className: 'size-4 shrink-0' })}\n className={className}\n />\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { OnnebookLogo } from '@/components/ui/logo';\nimport { TextShimmer } from '@/components/ui/shimmer-text';\n\nexport type ChatMessage = {\n role: 'user' | 'assistant';\n content: string;\n};\n\nexport type AssistantChatTheme =\n | 'webchat'\n | 'whatsapp'\n | 'instagram'\n | 'messenger';\n\ntype ThemeStyles = {\n container: string;\n header: string;\n badge: string;\n avatarUser: string;\n avatarAssistant: string;\n bubble?: string;\n bubbleUser: string;\n bubbleAssistant: string;\n input: string;\n button: string;\n title: string;\n inputContainer: string;\n messagesArea?: string;\n};\n\nconst THEME_STYLES: Record<AssistantChatTheme, ThemeStyles> = {\n webchat: {\n container: 'bg-card text-card-foreground',\n header: 'bg-card',\n badge: 'bg-primary/5 text-primary',\n messagesArea: 'border-y-4 border-border/40',\n avatarUser: 'bg-border/30 text-muted-foreground max-md:hidden',\n avatarAssistant: 'bg-foreground/5 text-foreground/90 max-md:hidden',\n bubbleUser: 'bg-border/30 text-foreground/90',\n bubbleAssistant: 'bg-foreground/5 text-foreground/90',\n input: 'bg-border/40',\n button: '',\n title: 'text-foreground',\n inputContainer: 'bg-card',\n },\n whatsapp: {\n container: cn(\n 'bg-[#e5ddd5] text-black',\n 'dark:bg-[#0C0A0D] dark:text-white',\n ),\n header: cn('bg-[#075E54] text-white', 'dark:bg-[#161717] dark:text-white'),\n badge: cn('bg-white/5 text-white', 'dark:bg-white/5 dark:text-white'),\n messagesArea: 'px-2',\n avatarUser: cn(\n 'max-md:hidden',\n 'bg-[#dcf8c6] text-black',\n 'dark:bg-[#144d37] dark:text-white',\n ),\n avatarAssistant: cn(\n 'max-md:hidden',\n 'bg-white text-black',\n 'dark:bg-[#242626] dark:text-white',\n ),\n bubbleAssistant: cn(\n 'bg-[#dcf8c6] text-black',\n 'dark:bg-[#144d37] dark:text-white',\n ),\n bubbleUser: cn('bg-white text-black', 'dark:bg-[#242626] dark:text-white'),\n input: cn(\n 'bg-white text-black placeholder:text-[#6b7280]',\n 'dark:bg-[#242626] dark:text-white dark:placeholder:text-white/50',\n ),\n button: cn(\n 'hover:brightness-110',\n 'bg-[#25D366] text-white',\n 'dark:bg-[#21c063] dark:text-white',\n ),\n title: 'text-white',\n inputContainer: 'bg-transparent',\n },\n instagram: {\n container: cn('bg-white text-black', 'dark:bg-black dark:text-white'),\n header: cn('bg-border/40 text-black', 'dark:bg-black dark:text-white'),\n badge: cn('bg-black/5 text-black', 'dark:bg-[#161717] dark:text-white'),\n messagesArea: cn(\n '[--gap:16px] messenger-container',\n '[--gradient-start:#0070f6] [--gradient-end:#aa00ff]',\n '[--background:white]',\n 'dark:[--background:black]',\n ),\n avatarUser: 'hidden',\n avatarAssistant: 'hidden',\n bubble: cn('[--background:white]', 'dark:[--background:black]'),\n bubbleUser: 'messenger-bubble primary',\n bubbleAssistant: cn(\n '[--background-assistant:var(--border)]',\n 'dark:[--background-assistant:#303030]',\n 'messenger-bubble',\n ),\n input: cn(\n 'bg-zinc-200 text-black placeholder:text-black/50',\n 'dark:bg-[#262626] dark:text-white dark:text-white dark:placeholder:text-white/50',\n ),\n button: cn(\n 'bg-fuchsia-600 text-white',\n 'dark:bg-fuchsia-600 dark:text-white',\n ),\n title: 'text-foreground',\n inputContainer: 'bg-transparent',\n },\n messenger: {\n container: cn(\n 'relative',\n 'bg-white text-black',\n 'dark:bg-[#242526] dark:text-white',\n ),\n header: cn('bg-border/40 text-black', 'dark:bg-black dark:text-white'),\n badge: cn('bg-white/20 text-white', 'dark:bg-black dark:text-white'),\n messagesArea: cn(\n '[--gap:16px] messenger-container',\n '[--gradient-start:#0070f6] [--gradient-end:#aa00ff]',\n '[--background:white]',\n 'dark:[--background:#242526]',\n ),\n avatarUser: 'hidden',\n avatarAssistant: 'hidden',\n bubble: cn('[--background:white]', 'dark:[--background:#242526]'),\n bubbleUser: 'messenger-bubble primary',\n bubbleAssistant: cn(\n '[--background-assistant:var(--border)]',\n 'dark:[--background-assistant:#303030]',\n 'messenger-bubble',\n ),\n input: cn(\n 'bg-zinc-200 text-black placeholder:text-black/50',\n 'dark:bg-[#262626] dark:text-white dark:text-white dark:placeholder:text-white/50',\n ),\n button: cn('bg-[#0084FF] text-white', 'dark:bg-[#0084FF] dark:text-white'),\n title: 'text-foreground',\n inputContainer: 'bg-transparent',\n },\n};\n\nexport const AssistantChat = ({\n theme = 'webchat',\n // icon,\n name: _name,\n disabled = false,\n messages = [],\n className,\n}: {\n theme?: AssistantChatTheme;\n icon: React.ReactNode;\n name: string;\n disabled?: boolean;\n messages?: ChatMessage[];\n className?: string;\n}) => {\n \n const styles = THEME_STYLES[theme];\n\n const scrollRef = useRef<HTMLUListElement | null>(null);\n\n const [displayedMessages, setDisplayedMessages] = useState<ChatMessage[]>([]);\n const [currentMessages, setCurrentMessages] = useState<ChatMessage[]>([]);\n\n const [messagesKey, setMessagesKey] = useState<string>('');\n\n const [hasInitialized, setHasInitialized] = useState(false);\n\n const [isTyping, setIsTyping] = useState(false);\n\n // Animation bookkeeping lives in refs so the playback effect can depend\n // only on `currentMessages` without re-triggering itself mid-animation.\n const isAnimatingRef = useRef(false);\n const displayedCountRef = useRef(0);\n\n const [isAtBottom, setIsAtBottom] = useState(true);\n\n const handleScroll = () => {\n const container = scrollRef.current;\n if (!container) return;\n\n const isBottom =\n container.scrollHeight - container.scrollTop <=\n container.clientHeight + 10;\n\n setIsAtBottom(isBottom);\n };\n\n const [messageStates, setMessageStates] = useState<\n Record<number, 'typing' | 'completed'>\n >({});\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const newMessagesKey = JSON.stringify(messages);\n const messagesChanged = newMessagesKey !== messagesKey;\n\n if (messagesChanged || !hasInitialized) {\n setMessagesKey(newMessagesKey);\n setCurrentMessages(messages);\n\n setHasInitialized(true);\n\n setDisplayedMessages([]);\n setMessageStates({});\n\n displayedCountRef.current = 0;\n isAnimatingRef.current = false;\n setIsTyping(false);\n }\n }, [messages, messagesKey, hasInitialized]);\n\n useEffect(() => {\n if (\n currentMessages.length === 0 ||\n displayedCountRef.current >= currentMessages.length\n ) {\n return;\n }\n\n if (isAnimatingRef.current) {\n return;\n }\n\n isAnimatingRef.current = true;\n\n let isCancelled = false;\n const activeTimers = new Set<number>();\n\n const sleep = (ms: number) =>\n new Promise<void>(resolve => {\n const id = window.setTimeout(() => {\n activeTimers.delete(id);\n resolve();\n }, ms);\n activeTimers.add(id);\n });\n\n const play = async (index: number) => {\n if (isCancelled || index >= currentMessages.length) return;\n\n const current = currentMessages[index];\n\n if (current.role === 'assistant') {\n const newIndex = displayedCountRef.current;\n\n displayedCountRef.current += 1;\n setDisplayedMessages(prev => [...prev, current]);\n setMessageStates(prev => ({ ...prev, [newIndex]: 'typing' }));\n\n setIsTyping(true);\n\n await sleep(current.content.length * 50);\n\n if (isCancelled) return;\n\n setMessageStates(prev => ({\n ...prev,\n [newIndex]: 'completed',\n }));\n setIsTyping(false);\n\n return play(index + 1);\n }\n\n await sleep(150);\n\n if (isCancelled) return;\n\n displayedCountRef.current += 1;\n setDisplayedMessages(prev => [...prev, current]);\n\n await sleep(current.content.length * 30);\n\n if (isCancelled) return;\n return play(index + 1);\n };\n\n void play(displayedCountRef.current).finally(() => {\n isAnimatingRef.current = false;\n });\n\n const safetyTimeout = setTimeout(() => {\n if (!isCancelled) {\n isAnimatingRef.current = false;\n }\n }, 30000);\n\n return () => {\n isCancelled = true;\n isAnimatingRef.current = false;\n clearTimeout(safetyTimeout);\n\n activeTimers.forEach(id => clearTimeout(id));\n activeTimers.clear();\n };\n }, [currentMessages]);\n\n useEffect(() => {\n const container = scrollRef.current;\n if (!container || !isAtBottom) return;\n container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' });\n }, [displayedMessages.length, isTyping, isAtBottom]);\n\n return (\n <div\n className={cn(\n 'bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group w-full overflow-hidden',\n className,\n )}\n >\n <div\n ref={containerRef}\n className={cn(\n 'relative rounded-[calc(var(--card-radius)-var(--card-padding))] h-full flex flex-col bg-border/40 group w-full overflow-hidden transition-all duration-150 ease-in-out min-h-full',\n styles.container,\n )}\n >\n {theme === 'whatsapp' && (\n <div className=\"absolute inset-0 pointer-events-none select-none overflow-hidden\">\n <img\n src=\"/chat-themes/whatsapp-doodles.png\"\n alt=\"\"\n width={800}\n height={800}\n fetchPriority=\"high\"\n className=\"size-full object-cover opacity-[0.25] dark:opacity-[0.07]\"\n />\n </div>\n )}\n\n <header\n className={cn(\n 'flex items-center justify-between z-1 transition-all duration-100 p-4',\n styles.header,\n )}\n >\n <div className=\"flex items-center gap-2 w-full\">\n <OnnebookLogo\n variant=\"icon\"\n classNames={{ icon: { container: 'size-5' } }}\n />\n\n <p className={cn('text-sm font-medium', styles.title)}>\n {'headerTitle'}\n </p>\n </div>\n </header>\n\n <ul\n ref={scrollRef}\n tabIndex={-1}\n className={cn(\n 'flex flex-col flex-1 gap-4 overflow-y-auto overflow-x-hidden px-4 transition-all duration-100 min-h-110 sm:max-h-110 list-none m-0',\n !disabled && styles.messagesArea,\n )}\n onScroll={handleScroll}\n >\n {disabled ? (\n <div className=\"relative flex-1 items-center justify-center h-full\">\n <div className=\"flex flex-col gap-4 mask-b-from-50 opacity-15 dark:opacity-25\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div\n key={i}\n className={cn(\n 'flex items-start gap-2 w-full max-w-3/4 min-h-8 h-12 rounded-2xl',\n i % 2 === 0\n ? 'ml-auto flex-row-reverse bg-foreground/20 dark:bg-foreground/15 rounded-tr-sm'\n : 'justify-start bg-foreground/5 dark:bg-foreground/25 rounded-tl-sm',\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n minHeight: `${32 * i}px`,\n }}\n />\n ))}\n </div>\n\n <div className=\"text-base w-full text-center text-foreground absolute left-1/2 -translate-x-1/2 bottom-1/2 -translate-y-1/2\">\n <TextShimmer className=\"[--base-color:var(--color-muted-foreground)] [--base-gradient-color:var(--color-foreground)]\">\n {'comingSoon'}\n </TextShimmer>\n </div>\n </div>\n ) : (\n [\n ...(theme === 'messenger' || theme === 'instagram'\n ? [\n {\n role: 'space',\n content: ' ',\n },\n ]\n : []),\n ...displayedMessages,\n ...(theme === 'messenger' || theme === 'instagram'\n ? [\n {\n role: 'space',\n content: ' ',\n },\n ]\n : []),\n ].map((message, index) => {\n const isUser = message.role === 'user';\n const isAssistant = message.role === 'assistant';\n\n const isSpace = message.role === 'space';\n\n const previousMessage = displayedMessages[index - 1];\n const hasSameRoleAsPrevious =\n previousMessage && previousMessage.role === message.role;\n\n return (\n <li\n key={`${index}-${message.content}`}\n className={cn(\n 'flex flex-col rounded-2xl p-3 leading-relaxed whitespace-pre-wrap wrap-break-word max-w-3/4 transition-all duration-300 ease-out animate-in slide-in-from-bottom-2 fade-in-0 first:mt-3! last:mb-3! text-sm',\n hasSameRoleAsPrevious && '-mt-2!',\n isAssistant &&\n 'rounded-tr-xs ml-auto text-right text-pretty slide-in-from-right-2',\n isUser && 'rounded-tl-xs mr-auto slide-in-from-left-2',\n styles.bubble,\n isUser ? styles.bubbleUser : styles.bubbleAssistant,\n isSpace && 'hidden',\n )}\n style={{\n animationDuration: '400ms',\n animationFillMode: 'both',\n }}\n >\n <div\n className={cn(\n 'flex gap-1.5 mb-1',\n isAssistant && 'ml-auto',\n )}\n >\n <span className=\"text-xs opacity-50\">\n {isUser\n ? 'labels.yourCustomer'\n : 'labels.aiAgent'}\n </span>\n\n {isAssistant && (\n <OnnebookLogo\n variant=\"icon\"\n classNames={{\n icon: { container: 'size-4 mb-1 -scale-x-100' },\n }}\n />\n )}\n </div>\n\n {isAssistant && messageStates[index] === 'typing' ? (\n <div className=\"inline-flex items-center gap-1 py-1\">\n {Array.from({ length: 3 }).map((_, i) => (\n <div\n key={i}\n className=\"size-2 rounded-full bg-current animate-bounce\"\n style={{\n animationDelay: `${i * 150}ms`,\n animationDuration: '1s',\n animationIterationCount: 'infinite',\n }}\n />\n ))}\n </div>\n ) : (\n <span className=\"animate-in fade-in-0 duration-300 text-sm text-pretty\">\n {message.content}\n </span>\n )}\n </li>\n );\n })\n )}\n </ul>\n </div>\n </div>\n );\n};\n","import { cn } from '@/lib/cn'\n\nexport const OnneLogo = ({\n variant = 'default',\n className,\n}: {\n variant?: 'default' | 'icon' | 'text'\n className?: string\n}) => {\n const hasIcon = variant !== 'text'\n const hasText = variant !== 'icon'\n\n const svgProps = {\n default: {\n width: '111',\n height: '38',\n viewBox: '0 0 111 38',\n },\n icon: {\n width: '40',\n height: '38',\n viewBox: '0 0 40 38',\n },\n text: {\n width: '60',\n height: '38',\n viewBox: '51 0 60 38',\n },\n }[variant]\n\n return (\n <svg\n width={svgProps.width}\n height={svgProps.height}\n viewBox={svgProps.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('text-foreground', className)}\n >\n {hasIcon && (\n <path\n d=\"M31.46 2.00098C28.1162 2.01981 24.7715 2.02966 21.4268 2.03223H9.71191V2.03125C9.38368 2.03074 8.81823 2.01652 8.34375 2.02832C7.91645 2.03896 7.38205 2.07054 6.85547 2.1875L6.63086 2.24316L6.62793 2.24414C4.02471 2.95962 2.18081 5.12713 2.02344 7.81445L2.0127 8.07617V8.07715C1.99988 8.84589 1.99806 9.42022 2.00586 9.76172H2.00488L2.00098 24.7061V24.7588C2.01533 25.3084 2.0417 25.8277 2.10449 26.1963C2.63717 29.3293 5.33784 31.2372 8.23926 31.4688C8.24481 31.9363 8.25056 32.4732 8.25488 33.0791C8.25842 33.6029 8.43082 34.271 8.77051 34.8125C8.94287 35.0873 9.32658 35.6004 10.0225 35.8574C10.8697 36.1702 11.6758 35.9314 12.2285 35.5303C12.5637 35.287 12.8619 34.9871 13.1025 34.6279C13.8424 33.5266 14.7717 32.6915 16.2549 31.6016L16.4111 31.4873C19.2403 31.493 22.0641 31.495 24.8828 31.4941C28.2691 31.5095 30.451 31.5065 31.3877 31.4824H31.3887C33.2229 31.4346 34.8524 30.7699 36.1738 29.5039L36.2119 29.4678L36.248 29.4287C37.2295 28.3828 37.8128 27.1179 37.9375 25.6895L37.9746 25.2041C37.9848 25.0421 37.9929 24.8799 37.999 24.7178L38 24.6797V24.6416C37.9982 19.1679 37.9981 13.6945 37.999 8.22168L37.9951 7.9873C37.9559 6.81968 37.6202 5.71836 36.9424 4.75293H36.9414C35.6412 2.8994 33.726 1.98737 31.46 2.00098Z\"\n stroke=\"url(#paint0_linear_28_6)\"\n strokeWidth=\"4\"\n />\n )}\n\n {hasText && (\n <path\n d=\"M58.592 26.812C57.44 26.812 56.416 26.628 55.52 26.26C54.624 25.892 53.856 25.364 53.216 24.676C52.592 23.972 52.112 23.116 51.776 22.108C51.44 21.1 51.272 19.948 51.272 18.652C51.272 16.78 51.592 15.236 52.232 14.02C52.872 12.788 53.752 11.868 54.872 11.26C55.992 10.652 57.264 10.348 58.688 10.348C59.792 10.348 60.792 10.532 61.688 10.9C62.584 11.252 63.344 11.78 63.968 12.484C64.608 13.172 65.104 14.036 65.456 15.076C65.808 16.1 65.984 17.276 65.984 18.604C65.984 19.932 65.808 21.108 65.456 22.132C65.12 23.14 64.632 23.996 63.992 24.7C63.352 25.388 62.576 25.916 61.664 26.284C60.768 26.636 59.744 26.812 58.592 26.812ZM58.664 24.364C59.576 24.364 60.336 24.148 60.944 23.716C61.568 23.268 62.04 22.628 62.36 21.796C62.696 20.964 62.864 19.948 62.864 18.748C62.864 17.516 62.696 16.46 62.36 15.58C62.024 14.7 61.536 14.036 60.896 13.588C60.272 13.124 59.504 12.892 58.592 12.892C57.728 12.892 56.976 13.116 56.336 13.564C55.712 13.996 55.232 14.644 54.896 15.508C54.56 16.356 54.392 17.396 54.392 18.628C54.392 19.556 54.488 20.38 54.68 21.1C54.872 21.804 55.144 22.396 55.496 22.876C55.864 23.356 56.312 23.724 56.84 23.98C57.384 24.236 57.992 24.364 58.664 24.364ZM68.954 26.5V18.844V13.948H71.474L71.402 17.788H71.834C72.058 16.844 72.354 16.068 72.722 15.46C73.106 14.852 73.594 14.396 74.186 14.092C74.778 13.788 75.466 13.636 76.25 13.636C77.674 13.636 78.754 14.14 79.49 15.148C80.242 16.156 80.618 17.716 80.618 19.828V26.5H77.57V20.14C77.57 18.78 77.362 17.788 76.946 17.164C76.546 16.524 75.946 16.204 75.146 16.204C74.474 16.204 73.906 16.42 73.442 16.852C72.978 17.268 72.618 17.828 72.362 18.532C72.122 19.22 71.994 19.98 71.978 20.812V26.5H68.954ZM83.8134 26.5V18.844V13.948H86.3334L86.2614 17.788H86.6934C86.9174 16.844 87.2134 16.068 87.5814 15.46C87.9654 14.852 88.4534 14.396 89.0454 14.092C89.6374 13.788 90.3254 13.636 91.1094 13.636C92.5334 13.636 93.6134 14.14 94.3494 15.148C95.1014 16.156 95.4774 17.716 95.4774 19.828V26.5H92.4294V20.14C92.4294 18.78 92.2214 17.788 91.8054 17.164C91.4054 16.524 90.8054 16.204 90.0054 16.204C89.3334 16.204 88.7654 16.42 88.3014 16.852C87.8374 17.268 87.4774 17.828 87.2214 18.532C86.9814 19.22 86.8534 19.98 86.8374 20.812V26.5H83.8134ZM104.337 26.812C103.329 26.812 102.425 26.668 101.625 26.38C100.841 26.092 100.177 25.676 99.6328 25.132C99.0888 24.572 98.6728 23.9 98.3848 23.116C98.0968 22.332 97.9528 21.444 97.9528 20.452C97.9528 19.46 98.0888 18.548 98.3608 17.716C98.6488 16.884 99.0568 16.164 99.5848 15.556C100.113 14.948 100.753 14.476 101.505 14.14C102.273 13.804 103.145 13.636 104.121 13.636C105.033 13.636 105.849 13.788 106.569 14.092C107.289 14.396 107.897 14.852 108.393 15.46C108.889 16.052 109.257 16.796 109.497 17.692C109.737 18.572 109.817 19.596 109.737 20.764L99.9208 20.836V19.084L107.985 19.012L106.929 19.996C107.025 19.084 106.953 18.34 106.713 17.764C106.473 17.172 106.129 16.74 105.681 16.468C105.233 16.18 104.721 16.036 104.145 16.036C103.489 16.036 102.913 16.212 102.417 16.564C101.921 16.9 101.537 17.396 101.265 18.052C101.009 18.692 100.881 19.476 100.881 20.404C100.881 21.796 101.185 22.836 101.793 23.524C102.417 24.212 103.265 24.556 104.337 24.556C104.817 24.556 105.217 24.5 105.537 24.388C105.873 24.26 106.153 24.1 106.377 23.908C106.601 23.7 106.777 23.468 106.905 23.212C107.049 22.956 107.161 22.684 107.241 22.396L109.881 22.996C109.753 23.588 109.545 24.116 109.257 24.58C108.969 25.044 108.593 25.444 108.129 25.78C107.681 26.116 107.145 26.372 106.521 26.548C105.897 26.724 105.169 26.812 104.337 26.812Z\"\n fill=\"currentColor\"\n />\n )}\n\n {hasIcon && (\n <defs>\n <linearGradient\n id=\"paint0_linear_28_6\"\n x1=\"10.0921\"\n y1=\"35.9948\"\n x2=\"33.8904\"\n y2=\"1.43723\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#7C40D1\" />\n <stop offset=\"0.25\" stopColor=\"#D25DBB\" />\n <stop offset=\"0.5\" stopColor=\"#F84F6A\" />\n <stop offset=\"0.745192\" stopColor=\"#FE6C3D\" />\n <stop offset=\"1\" stopColor=\"#FF9637\" />\n </linearGradient>\n </defs>\n )}\n </svg>\n )\n}\n","import { cn } from '@/lib/cn'\n\nconst Icon = ({\n classNames,\n}: {\n classNames?: {\n icon?: {\n container?: string\n path?: string\n }\n }\n}) => {\n return (\n <svg\n viewBox=\"0 0 374.96 486\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\n 'w-7 h-8 shrink-0 text-primary',\n classNames?.icon?.container,\n )}\n >\n <path\n fill=\"currentColor\"\n className={cn('text-primary-foreground', classNames?.icon?.path)}\n d=\"M112.16,18v74.81M262.81,18v74.81M18,167.61h338.96M243.97,251.77v58.44M130.99,251.77v58.44M55.66,55.4h263.64c20.8,0,37.66,16.75,37.66,37.4v261.82c0,20.66-16.86,37.4-37.66,37.4H117.36s-.02,0-.03,0l-99.27,75.91s-.07,0-.07-.03c.03-35.07,0-92.65,0-113.29V92.81c0-20.66,16.86-37.4,37.66-37.4Z\"\n />\n\n <path\n fill=\"currentColor\"\n className={cn('text-primary', classNames?.icon?.path)}\n d=\"M18,486c-3.95,0-7.93-1.3-11.27-3.96C2.37,478.57,0,473.18,0,467.61c.02-25.51.01-62.77,0-89.11v-23.87s0-261.82,0-261.82c0-30.55,24.97-55.4,55.66-55.4h38.45s.04-.02.04-.04v-18.89c0-9.78,7.61-18.13,17.38-18.46s18.62,7.84,18.62,17.99v19.36s.02.04.04.04h114.56s.04-.02.04-.04v-18.89c0-9.78,7.61-18.14,17.38-18.46,10.22-.34,18.62,7.84,18.62,17.99v19.36s.02.04.04.04h38.45c30.69,0,55.66,24.85,55.66,55.4v261.82c0,30.55-24.97,55.4-55.66,55.4H123.45s-.02,0-.03,0l-94.49,72.26c-3.2,2.45-7.06,3.7-10.94,3.7ZM36.04,185.61s-.04.02-.04.04v192.83c.01,15.44.02,34.62.01,52.99,0,.04.04.06.07.03l70.33-53.78c3.14-2.4,6.98-3.7,10.93-3.7h201.95c10.84,0,19.66-8.7,19.66-19.4v-168.97s-.02-.04-.04-.04H36.04ZM36.04,149.61h302.88s.04-.02.04-.04v-56.76c0-10.7-8.82-19.4-19.66-19.4h-38.45s-.04.02-.04.04v18.89c0,9.78-7.61,18.14-17.38,18.46s-18.62-7.84-18.62-17.99v-19.36s-.02-.04-.04-.04h-114.56s-.04.02-.04.04v18.89c0,9.78-7.61,18.13-17.38,18.46s-18.62-7.84-18.62-17.99v-19.36s-.02-.04-.04-.04h-38.45c-10.84,0-19.66,8.7-19.66,19.4v56.76s.02.04.04.04ZM243.36,328.2c-9.78-.33-17.38-8.68-17.38-18.46v-57.5c0-9.78,7.61-18.14,17.38-18.46,10.22-.34,18.62,7.84,18.62,17.99v58.44c0,10.15-8.39,18.33-18.62,17.99ZM130.37,328.2c-9.78-.33-17.38-8.68-17.38-18.46v-57.5c0-9.78,7.61-18.13,17.38-18.46s18.62,7.84,18.62,17.99v58.44c0,10.15-8.39,18.33-18.62,17.99Z\"\n />\n </svg>\n )\n}\n\nconst Text = ({ className, name }: { className?: string; name: string }) => (\n <span className={cn('text-xl text-title', className)}>{name}</span>\n)\n\nexport const OnnebookLogo = ({\n variant = 'default',\n classNames,\n className,\n style,\n}: {\n variant?: 'default' | 'icon' | 'text'\n name?: string\n className?: string\n classNames?: {\n icon?: {\n container?: string\n path?: string\n }\n text?: string\n }\n style?: React.CSSProperties\n}) => {\n const name = 'OnneBook'\n\n return (\n <div\n style={style}\n className={cn('relative flex items-center gap-2 w-fit', className)}\n >\n {variant === 'icon' ? (\n <Icon classNames={classNames} />\n ) : variant === 'text' ? (\n <Text className={classNames?.text} name={name} />\n ) : (\n <>\n <Icon classNames={classNames} />\n <Text className={classNames?.text} name={name} />\n </>\n )}\n </div>\n )\n}\n","'use client'\nimport React, { type JSX, useMemo } from 'react'\n\nimport { motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nexport type TextShimmerProps = {\n children: string\n as?: React.ElementType\n className?: string\n duration?: number\n spread?: number\n}\n\nfunction TextShimmerComponent({\n children,\n as: Component = 'p',\n className,\n duration = 2,\n spread = 2,\n}: TextShimmerProps) {\n const MotionComponent = motion.create(\n Component as keyof JSX.IntrinsicElements,\n )\n\n const dynamicSpread = useMemo(() => {\n return children.length * spread\n }, [children, spread])\n\n return (\n <MotionComponent\n className={cn(\n 'relative inline-block bg-size-[250%_100%,auto] bg-clip-text',\n 'text-transparent [--base-color:#a1a1aa] [--base-gradient-color:#000]',\n '[background-repeat:no-repeat,padding-box] [--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--base-gradient-color),#0000_calc(50%+var(--spread)))]',\n 'dark:[--base-color:#71717a] dark:[--base-gradient-color:#ffffff] dark:[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--base-gradient-color),#0000_calc(50%+var(--spread)))]',\n className,\n )}\n initial={{ backgroundPosition: '100% center' }}\n animate={{ backgroundPosition: '0% center' }}\n transition={{\n repeat: Infinity,\n duration,\n ease: 'linear',\n }}\n style={\n {\n '--spread': `${dynamicSpread}px`,\n backgroundImage: `var(--bg), linear-gradient(var(--base-color), var(--base-color))`,\n } as React.CSSProperties\n }\n >\n {children}\n </MotionComponent>\n )\n}\n\nexport const TextShimmer = React.memo(TextShimmerComponent)\n","'use client'\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { Icon } from \"@/components/icon\"\n\nimport { cn } from '@/lib/cn'\n\nexport type CheckboxProps = CheckboxPrimitive.Root.Props & {\n indeterminate?: boolean\n}\n\nfunction Checkbox({\n className,\n indeterminate,\n ...props\n}: CheckboxProps) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n indeterminate={indeterminate}\n className={cn(\n \"peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border-2 border-input transition-colors outline-none cursor-pointer group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none [&>svg]:size-3.5\"\n >\n <Icon name={indeterminate ? \"Minus\" : \"Check\"} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\nexport { Checkbox }","'use client'\n\nimport { useEffect, useMemo } from 'react'\n\nimport { ColumnDef } from '@tanstack/react-table'\n\nimport { cn } from '@/lib/cn'\n\nimport { useDataTable } from '@/hooks/use-data-table'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { DataTable } from '@/components/ui/table/data-table'\nimport { DataTableToolbar } from '@/components/ui/table/data-table-toolbar'\n\nexport const DATA_CUSTOM_TABLE_VARIANTS = ['default', 'inset'] as const\nexport const DEFAULT_DATA_CUSTOM_TABLE_VARIANT = 'default'\n\nexport type DataCustomTableVariant = (typeof DATA_CUSTOM_TABLE_VARIANTS)[number]\n\ninterface CursorPaginationMeta {\n hasNext?: boolean\n hasPrevious?: boolean\n limit?: number\n nextCursor?: string\n previousCursor?: string\n}\n\ntype DataCustomTableProps<T> = {\n isLoading: boolean\n data: T[]\n columns: ColumnDef<T>[]\n totalItems?: number\n variant?: DataCustomTableVariant\n pageSizeOptions?: number[]\n cursorMeta?: CursorPaginationMeta\n onPaginationChange?: (\n page: number,\n limit: number,\n cursor?: string | null,\n direction?: 'next' | 'previous',\n ) => void\n onRowSelectionChange?: (selectedRows: T[]) => void\n rowSelection?: Record<string, boolean>\n onRowSelectionStateChange?: (rowSelection: Record<string, boolean>) => void\n emptyMessage?: string\n showIndexCol?: boolean\n showCheckboxCol?: boolean\n showPagination?: boolean\n}\n\nexport function DataCustomTable<T>({\n isLoading = true,\n data,\n columns = [],\n totalItems,\n variant = DEFAULT_DATA_CUSTOM_TABLE_VARIANT,\n pageSizeOptions = [10, 20, 30, 40, 50, 100],\n cursorMeta,\n onPaginationChange,\n onRowSelectionChange,\n rowSelection,\n onRowSelectionStateChange,\n emptyMessage,\n showIndexCol = false,\n showCheckboxCol = false,\n showPagination = true,\n}: DataCustomTableProps<T>) {\n\n const idColumn: ColumnDef<T> = useMemo(\n () => ({\n id: 'index',\n header: '#',\n cell: (info) => info.row.index + 1,\n enableSorting: false,\n enableHiding: false,\n }),\n [],\n )\n\n const checkboxColumn: ColumnDef<T> = useMemo(\n () => ({\n id: 'select',\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={\n table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected()\n }\n onCheckedChange={(value) =>\n table.toggleAllPageRowsSelected(!!value)\n }\n aria-label={'selectAll'}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) =>\n row.toggleSelected(!!value)\n }\n aria-label={'selectRow'}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n }),\n [],\n )\n\n const tableColumns = useMemo(\n () => [\n ...(showCheckboxCol ? [checkboxColumn] : []),\n ...(showIndexCol ? [idColumn] : []),\n ...columns,\n ],\n [showCheckboxCol, showIndexCol, columns, checkboxColumn, idColumn],\n )\n\n const {\n table,\n goToNextPage,\n goToPreviousPage,\n hasNextPage,\n hasPreviousPage,\n } = useDataTable({\n data,\n columns: tableColumns,\n rowCount: totalItems ?? data.length,\n onPaginationChange: onPaginationChange\n ? (limit, cursor, direction) => {\n onPaginationChange(1, limit, cursor, direction)\n }\n : undefined,\n defaultPerPage: pageSizeOptions[0],\n hasNextPage: cursorMeta?.hasNext ?? false,\n hasPreviousPage: cursorMeta?.hasPrevious ?? false,\n nextCursor: cursorMeta?.nextCursor ?? null,\n previousCursor: cursorMeta?.previousCursor ?? null,\n rowSelection,\n onRowSelectionChange: onRowSelectionStateChange,\n })\n\n const rowSelectionState = table.getState().rowSelection\n\n const handleNavigate = (direction: 'next' | 'previous') => {\n if (direction === 'next') {\n goToNextPage()\n } else {\n goToPreviousPage()\n }\n }\n\n useEffect(() => {\n if (onRowSelectionChange) {\n const selectedRows = table\n .getFilteredSelectedRowModel()\n .rows.map((row) => row.original)\n\n onRowSelectionChange(selectedRows as T[])\n }\n }, [rowSelectionState, onRowSelectionChange, table])\n\n\n const disablePageSize = !isLoading && data.length <= pageSizeOptions[0]\n\n return (\n <div\n suppressHydrationWarning\n className={cn(\n 'space-y-6 w-full',\n isLoading && 'overflow-hidden',\n variant === 'inset' && 'bg-card border rounded-xl p-6',\n )}\n >\n <DataTable\n table={table}\n isLoading={isLoading}\n emptyMessage={emptyMessage}\n onNavigate={handleNavigate}\n showPagination={showPagination}\n disablePageSize={disablePageSize}\n cursorMeta={{\n ...cursorMeta,\n hasNext: hasNextPage,\n hasPrevious: hasPreviousPage,\n }}\n >\n <DataTableToolbar table={table} />\n </DataTable>\n </div>\n )\n}\n\nDataCustomTable.displayName = 'DataCustomTable'\n","import { useState } from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getPaginationRowModel,\n type ColumnDef,\n type RowSelectionState,\n type Table,\n} from '@tanstack/react-table'\n\ninterface UseDataTableProps<TData> {\n data: TData[]\n columns: ColumnDef<TData>[]\n rowCount?: number\n onPaginationChange?: (limit: number, cursor: string | null, direction: 'next' | 'previous') => void\n defaultPerPage?: number\n hasNextPage?: boolean\n hasPreviousPage?: boolean\n nextCursor?: string | null\n previousCursor?: string | null\n rowSelection?: Record<string, boolean>\n onRowSelectionChange?: (rowSelection: Record<string, boolean>) => void\n}\n\nexport function useDataTable<TData>({\n data,\n columns,\n onPaginationChange,\n hasNextPage = false,\n hasPreviousPage = false,\n nextCursor: _nextCursor,\n previousCursor: _previousCursor,\n rowSelection,\n onRowSelectionChange,\n defaultPerPage = 10,\n}: UseDataTableProps<TData>) {\n const [innerRowSelection, setInnerRowSelection] = useState<RowSelectionState>({})\n\n const selection = rowSelection ?? innerRowSelection\n const isManual = !!onPaginationChange\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: isManual ? undefined : getPaginationRowModel(),\n onRowSelectionChange: (updaterOrValue) => {\n const next =\n typeof updaterOrValue === 'function'\n ? updaterOrValue(selection)\n : updaterOrValue\n\n if (onRowSelectionChange) {\n onRowSelectionChange(next)\n } else {\n setInnerRowSelection(next)\n }\n },\n state: {\n rowSelection: selection,\n },\n manualPagination: isManual,\n initialState: {\n pagination: { pageSize: defaultPerPage },\n },\n })\n\n const goToNextPage = () => {\n onPaginationChange?.(0, null, 'next')\n }\n\n const goToPreviousPage = () => {\n onPaginationChange?.(0, null, 'previous')\n }\n\n return {\n table: table as unknown as Table<Record<string, unknown>>,\n goToNextPage,\n goToPreviousPage,\n hasNextPage,\n hasPreviousPage,\n }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { flexRender, type Table as TableType } from '@tanstack/react-table'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Table } from './table'\nimport { DataTablePagination } from './data-table-pagination'\nimport { Skeleton } from '@/components/ui/skeleton'\n\ninterface CursorPaginationMeta {\n hasNext?: boolean\n hasPrevious?: boolean\n limit?: number\n}\n\ninterface DataTableProps<TData> extends React.HTMLAttributes<HTMLDivElement> {\n table: TableType<TData>\n children?: React.ReactNode\n emptyMessage?: string\n cursorMeta?: CursorPaginationMeta\n onNavigate?: (direction: 'next' | 'previous') => void\n showPagination?: boolean\n isLoading?: boolean\n disablePageSize?: boolean\n}\n\nexport function DataTable<TData>({\n table,\n children,\n className,\n cursorMeta,\n onNavigate,\n showPagination = true,\n isLoading,\n disablePageSize,\n emptyMessage,\n ...props\n}: DataTableProps<TData>) {\n const isMobile = useIsMobile()\n\n const scrollRef = React.useRef<HTMLDivElement>(null)\n const [showShadow, setShowShadow] = React.useState(false)\n\n const defaultEmptyMessage = emptyMessage || 'noResults'\n const rows = table.getRowModel().rows\n\n React.useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n\n const check = () => {\n const isScrollable = el.scrollWidth > el.clientWidth + 2\n const isAtEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 2\n setShowShadow(isScrollable && !isAtEnd)\n }\n\n check()\n el.addEventListener('scroll', check, { passive: true })\n const ro = new ResizeObserver(check)\n ro.observe(el)\n\n return () => {\n el.removeEventListener('scroll', check)\n ro.disconnect()\n }\n }, [])\n\n return (\n <div className={cn('space-y-4', className)} {...props}>\n {children}\n\n <div ref={scrollRef} className=\"rounded-2xl bg-card overflow-x-auto\">\n <Table>\n <Table.Header>\n {table.getHeaderGroups().map((headerGroup) => (\n <Table.Row\n key={headerGroup.id}\n className=\"border-border/25 bg-card!\"\n >\n {headerGroup.headers.map((header, index) => {\n const isLast = index === headerGroup.headers.length - 1\n const shouldSticky = isLast && isMobile && showShadow\n\n return (\n <Table.Head\n key={header.id}\n className={cn(\n 'max-w-xl text-nowrap whitespace-nowrap overflow-hidden text-ellipsis transition-colors',\n shouldSticky &&\n 'sticky right-0 bg-card z-20 shadow-[-10px_0_15px_-3px_rgba(0,0,0,0.1),-4px_0_6px_-2px_rgba(0,0,0,0.05)] border-l border-border/10 pr-4',\n )}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </Table.Head>\n )\n })}\n </Table.Row>\n ))}\n </Table.Header>\n\n <Table.Body>\n {isLoading ? (\n Array.from({ length: 10 }).map((_, i) => (\n <Table.Row\n key={i}\n className=\"border-b border-border/50 transition-none odd:bg-accent/15 even:bg-accent/50\"\n >\n {Array.from({\n length: table.getAllColumns().length,\n }).map((_, j) => (\n <Table.Cell\n key={j}\n className=\"h-12 max-w-xl text-nowrap whitespace-nowrap overflow-hidden text-ellipsis\"\n >\n <Skeleton className=\"h-4 w-[80%] bg-accent\" />\n </Table.Cell>\n ))}\n </Table.Row>\n ))\n ) : (\n <AnimatePresence>\n {rows?.length ? (\n rows.map((row, rowIndex) => {\n const isLastRow = rowIndex === rows.length - 1\n\n return (\n <motion.tr\n key={row.id}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{\n duration: 0.2,\n delay: rowIndex * 0.05,\n ease: 'easeOut',\n }}\n data-state={row.getIsSelected() && 'selected'}\n className=\"group border-b border-border/50 transition-colors odd:bg-accent/15 even:bg-accent/50 hover:bg-accent data-[state=selected]:bg-card touch-callout-none transition-none\"\n onContextMenu={(e) => {\n const trigger = e.currentTarget.querySelector(\n '[data-action-group-trigger]',\n ) as HTMLElement | null\n\n if (trigger) {\n e.preventDefault()\n trigger.click()\n }\n }}\n onTouchStart={(e) => {\n const el = e.currentTarget\n\n const timer = window.setTimeout(() => {\n const trigger = el.querySelector(\n '[data-action-group-trigger]',\n ) as HTMLElement | null\n\n if (trigger) trigger.click()\n }, 500)\n\n ;(el as HTMLElement & { _longPressTimer?: number })._longPressTimer = timer\n }}\n onTouchEnd={(e) => {\n window.clearTimeout(\n (e.currentTarget as HTMLElement & { _longPressTimer?: number })._longPressTimer,\n )\n }}\n onTouchMove={(e) => {\n window.clearTimeout(\n (e.currentTarget as HTMLElement & { _longPressTimer?: number })._longPressTimer,\n )\n }}\n >\n {row.getVisibleCells().map((cell, cellIndex) => {\n const isLast =\n cellIndex === row.getVisibleCells().length - 1\n\n const shouldSticky = isLast && isMobile && showShadow\n\n return (\n <Table.Cell\n key={cell.id}\n className={cn(\n 'h-12 max-w-xl text-nowrap whitespace-nowrap overflow-hidden text-ellipsis',\n shouldSticky &&\n cn(\n 'sticky right-0 bg-card z-20 shadow-[-10px_0_15px_-3px_rgba(0,0,0,0.1),-4px_0_6px_-2px_rgba(0,0,0,0.05)] border-l border-border/10 pr-4',\n isLastRow && 'rounded-br-2xl',\n ),\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </Table.Cell>\n )\n })}\n </motion.tr>\n )\n })\n ) : (\n <Table.Row>\n <Table.Cell\n colSpan={table.getAllColumns().length}\n className=\"h-24 text-center text-card-foreground\"\n >\n {defaultEmptyMessage}\n </Table.Cell>\n </Table.Row>\n )}\n </AnimatePresence>\n )}\n </Table.Body>\n </Table>\n </div>\n\n {showPagination && (\n <DataTablePagination\n table={table}\n cursorMeta={cursorMeta}\n onNavigate={onNavigate}\n disablePageSize={disablePageSize}\n />\n )}\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nconst TableRoot = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement> & {\n containerClassName?: string\n }\n>(({ className, containerClassName, ...props }, ref) => (\n <div\n className={cn(\n 'relative w-full rounded-2xl bg-card overflow-x-auto',\n containerClassName,\n )}\n >\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n))\nTableRoot.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn('[&_tr]:border-border/25 [&_tr]:bg-card', className)}\n {...props}\n />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium last:[&>tr]:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b border-border/50 transition-colors odd:bg-accent/15 even:bg-accent/50 hover:bg-accent data-[state=selected]:bg-card',\n className,\n )}\n {...props}\n />\n))\nTableRow.displayName = 'TableRow'\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-12 max-w-xl px-4 text-left align-middle text-nowrap whitespace-nowrap overflow-hidden text-ellipsis font-medium text-muted-foreground transition-colors [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n))\nTableHead.displayName = 'TableHead'\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'h-12 max-w-xl px-4 align-middle text-nowrap whitespace-nowrap overflow-hidden text-ellipsis [&:has([role=checkbox])]:pr-0 *:[[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n))\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn('text-sm text-muted-foreground p-4 bg-muted/50 border-t border-border/50', className)}\n {...props}\n />\n))\nTableCaption.displayName = 'TableCaption'\n\nconst Table = Object.assign(TableRoot, { Header: TableHeader, Body: TableBody, Footer: TableFooter, Row: TableRow, Head: TableHead, Cell: TableCell, Caption: TableCaption })\n\nexport { Table }\n","'use client'\n\nimport * as React from 'react'\n\nimport { Select as SelectPrimitive } from '@base-ui/react/select'\nimport { Separator as SeparatorPrimitive } from '@base-ui/react/separator'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { useHaptics } from '@/hooks/use-haptics'\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Drawer } from '@/components/ui/drawer'\n\n/** Same option list is rendered twice on mobile (hidden discovery items + drawer). Clone so each tree is independent. */\nfunction cloneSelectChildren(children: React.ReactNode, keySuffix: string) {\n return React.Children.map(children, (child, index) => {\n if (!React.isValidElement(child)) return child\n const baseKey = child.key != null ? String(child.key) : index\n return React.cloneElement(child, { key: `${baseKey}-${keySuffix}` })\n })\n}\n\n// Recursively extracts plain text from a React node tree (used for mobile label display)\nfunction extractText(node: React.ReactNode): string {\n if (typeof node === 'string') return node\n if (typeof node === 'number') return String(node)\n if (Array.isArray(node)) return node.map(extractText).join('').trim()\n if (React.isValidElement(node))\n return extractText((node.props as { children?: React.ReactNode }).children)\n return ''\n}\n\n// 'interactive' → visible button inside the mobile Drawer\n// 'desktop' → Base UI SelectPrimitive.Item (default)\n// 'discovery' → handles label registration without rendering to DOM\ntype SelectItemMode = 'interactive' | 'desktop' | 'discovery'\n\nconst SelectItemModeContext = React.createContext<SelectItemMode>('desktop')\n\ntype SelectContextValue = {\n isMobile: boolean\n open: boolean\n onOpenChange: (open: boolean) => void\n value: string\n onValueChange: (value: string) => void\n itemLabels: Record<string, { text: string; node: React.ReactNode }>\n registerLabel: (value: string, label: React.ReactNode) => void\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null)\n\nfunction SelectRoot({\n value: valueProp,\n defaultValue,\n onValueChange: onValueChangeProp,\n open: openProp,\n onOpenChange: onOpenChangeProp,\n defaultOpen,\n children,\n ...props\n}: Omit<\n SelectPrimitive.Root.Props<string>,\n 'value' | 'defaultValue' | 'onValueChange' | 'onOpenChange'\n> & {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n onOpenChange?: (open: boolean) => void\n children?: React.ReactNode\n}) {\n const isMobile = useIsMobile()\n\n const [internalValue, setInternalValue] = React.useState(defaultValue ?? '')\n\n const valueFromParent =\n valueProp !== undefined && valueProp !== null && valueProp !== ''\n ? valueProp\n : undefined\n const value = valueFromParent ?? internalValue\n\n const [drawerOpen, setDrawerOpen] = React.useState(defaultOpen ?? false)\n const open = openProp ?? drawerOpen\n\n const [itemLabels, setItemLabels] = React.useState<\n Record<string, { text: string; node: React.ReactNode }>\n >({})\n const registerLabel = React.useCallback(\n (itemValue: string, label: React.ReactNode) => {\n const text = extractText(label)\n setItemLabels((prev) => {\n if (prev[itemValue]?.text === text) return prev\n return { ...prev, [itemValue]: { text, node: label } }\n })\n },\n [],\n )\n\n const handleOpenChange = React.useCallback(\n (isOpen: boolean) => {\n setDrawerOpen(isOpen)\n onOpenChangeProp?.(isOpen)\n },\n [onOpenChangeProp],\n )\n\n const handleValueChange = React.useCallback(\n (val: string | null) => {\n setInternalValue(val ?? '')\n onValueChangeProp?.(val ?? '')\n if (isMobile) handleOpenChange(false)\n },\n [onValueChangeProp, isMobile, handleOpenChange],\n )\n\n return (\n <SelectContext.Provider\n value={{\n isMobile,\n open,\n onOpenChange: handleOpenChange,\n value,\n onValueChange: handleValueChange,\n itemLabels,\n registerLabel,\n }}\n >\n <div className=\"hidden\" aria-hidden=\"true\">\n <SelectItemModeContext.Provider value=\"discovery\">\n {children}\n </SelectItemModeContext.Provider>\n </div>\n\n <SelectPrimitive.Root\n open={isMobile ? false : open}\n onOpenChange={handleOpenChange}\n value={value}\n onValueChange={handleValueChange}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n )\n}\n\nfunction SelectGroup({ ...props }: SelectPrimitive.Group.Props) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n className,\n placeholder,\n children,\n ...props\n}: SelectPrimitive.Value.Props) {\n const ctx = React.useContext(SelectContext)\n\n const label = ctx && ctx.value ? ctx.itemLabels[ctx.value]?.node : undefined\n const content = children ?? label ?? placeholder\n\n if (ctx?.isMobile) {\n return (\n <span\n data-slot=\"select-value\"\n className={cn(!content && 'text-muted-foreground/50', className)}\n >\n {content as React.ReactNode}\n </span>\n )\n }\n\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn('empty:text-muted-foreground/50', className)}\n placeholder={placeholder}\n {...props}\n >\n {content}\n </SelectPrimitive.Value>\n )\n}\n\nconst SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n SelectPrimitive.Trigger.Props & {\n removeIcon?: boolean\n }\n>(function SelectTrigger(\n { className, children, removeIcon = false, ...props },\n ref,\n) {\n const mode = React.useContext(SelectItemModeContext)\n const { trigger } = useHaptics()\n\n if (mode === 'discovery') {\n return null\n }\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n suppressHydrationWarning\n data-slot=\"select-trigger\"\n className={cn(\n 'border-transparent text-foreground flex h-10 w-full items-center justify-between gap-2 rounded-xl bg-input px-4 py-2 text-sm transition-[color] disabled:cursor-not-allowed disabled:opacity-75 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 *:data-[slot=select-value]:min-w-max [&_svg]:pointer-events-none [&_svg]:shrink-0 outline-none aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-placeholder:text-muted-foreground/50',\n 'focus-visible:border-transparent focus-visible:aria-invalid:ring-destructive focus-visible:ring-ring/50 focus-visible:ring-[3px] cursor-pointer select-none',\n className,\n )}\n {...props}\n onClick={(e) => {\n trigger('click')\n props.onClick?.(e)\n }}\n >\n {children}\n\n {!removeIcon && (\n <SelectPrimitive.Icon\n render={\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"text-muted-foreground/80 in-aria-invalid:text-destructive/80 shrink-0 ml-auto\"\n />\n }\n />\n )}\n </SelectPrimitive.Trigger>\n )\n})\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n side,\n align,\n sideOffset = 4,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<SelectPrimitive.Positioner.Props, 'side' | 'align' | 'sideOffset'> & {\n position?: 'popper' | 'item-aligned'\n }) {\n const ctx = React.useContext(SelectContext)\n const mode = React.useContext(SelectItemModeContext)\n\n if (mode === 'discovery') {\n return <>{children}</>\n }\n\n if (ctx?.isMobile) {\n return (\n <Drawer\n open={ctx.open}\n onOpenChange={ctx.onOpenChange}\n direction=\"bottom\"\n >\n <Drawer.Content title=\"Select\" showDivider>\n <SelectItemModeContext.Provider value=\"interactive\">\n <div className=\"overflow-y-auto p-2 pb-6\">\n {cloneSelectChildren(children, 'drawer')}\n </div>\n </SelectItemModeContext.Provider>\n </Drawer.Content>\n </Drawer>\n )\n }\n\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n data-slot=\"select-positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignItemWithTrigger={position === 'item-aligned'}\n className=\"z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n className={cn(\n 'border-transparent glass-popover p-1 text-popover-foreground relative z-50 max-h-[min(24rem,var(--available-height))] min-w-32 overflow-hidden rounded-xl **:[[role=group]]:py-1 outline-none origin-(--transform-origin)',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n position === 'popper' && 'min-w-(--anchor-width)',\n className,\n )}\n {...props}\n >\n <SelectPrimitive.List\n data-slot=\"select-list\"\n className=\"scroll-fade-y max-h-[min(24rem,var(--available-height))] overflow-x-hidden overflow-y-auto p-1\"\n >\n {children}\n </SelectPrimitive.List>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn(\n 'px-2 pt-2 pb-1.5 text-xs font-medium uppercase text-muted-foreground/50 select-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n value,\n ...props\n}: SelectPrimitive.Item.Props) {\n const ctx = React.useContext(SelectContext)\n const mode = React.useContext(SelectItemModeContext)\n\n const { trigger } = useHaptics()\n\n React.useEffect(() => {\n if (ctx) {\n ctx.registerLabel(value as string, children)\n }\n }, [ctx, value, children])\n\n if (mode === 'discovery') {\n return null\n }\n\n if (mode === 'interactive') {\n const isSelected = ctx?.value === value\n return (\n <button\n type=\"button\"\n data-slot=\"select-item\"\n className={cn(\n 'relative flex w-full cursor-pointer items-center gap-4 p-4 lg:p-2.5 lg:pe-12 outline-hidden select-none rounded-lg',\n isSelected ? 'text-foreground' : 'text-muted-foreground',\n 'hover:bg-muted hover:text-foreground',\n className,\n )}\n onClick={() => {\n trigger('click')\n ctx?.onValueChange(value as string)\n }}\n >\n {isSelected && (\n <Icon\n name=\"Check\"\n strokeWidth={4}\n className=\"absolute inset-e-4 flex size-4 items-center justify-center\"\n />\n )}\n\n {children}\n </button>\n )\n }\n\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n 'data-highlighted:bg-muted data-highlighted:text-foreground relative flex w-full cursor-pointer items-center p-2.5 pe-8! outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 rounded-lg not-data-selected:text-muted-foreground data-selected:text-foreground',\n className,\n )}\n value={value}\n {...props}\n >\n <span className=\"absolute inset-e-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Icon name=\"Check\" size={16} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SeparatorPrimitive.Props) {\n return (\n <SeparatorPrimitive\n data-slot=\"select-separator\"\n className={cn('bg-border -mx-1 my-1 h-px', className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: SelectPrimitive.ScrollUpArrow.Props) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\n 'text-muted-foreground/80 flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <Icon name=\"ChevronUp\" size={16} />\n </SelectPrimitive.ScrollUpArrow>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: SelectPrimitive.ScrollDownArrow.Props) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\n 'text-muted-foreground/80 flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <Icon name=\"ChevronDown\" size={16} />\n </SelectPrimitive.ScrollDownArrow>\n )\n}\n\nconst Select = Object.assign(SelectRoot, {\n Content: SelectContent,\n Group: SelectGroup,\n Item: SelectItem,\n Label: SelectLabel,\n ScrollDownButton: SelectScrollDownButton,\n ScrollUpButton: SelectScrollUpButton,\n Separator: SelectSeparator,\n Trigger: SelectTrigger,\n Value: SelectValue,\n})\nexport { Select }\n","\nimport { Table } from '@tanstack/react-table'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\n\nimport { Select } from '@/components/ui/select'\n\ninterface CursorPaginationMeta {\n hasNext?: boolean\n hasPrevious?: boolean\n limit?: number\n}\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>\n pageSizeOptions?: number[]\n cursorMeta?: CursorPaginationMeta\n onNavigate?: (direction: 'next' | 'previous') => void\n disablePageSize?: boolean\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 30, 40, 50],\n cursorMeta,\n onNavigate,\n disablePageSize,\n}: DataTablePaginationProps<TData>) {\n\n const isCursorPagination = !!cursorMeta\n\n const hasNext = cursorMeta?.hasNext ?? table.getCanNextPage()\n const hasPrevious = cursorMeta?.hasPrevious ?? table.getCanPreviousPage()\n\n const hasRowsSelected = table.getFilteredSelectedRowModel().rows.length > 0\n\n const handlePrevious = () => {\n if (isCursorPagination && onNavigate) {\n onNavigate('previous')\n } else {\n table.previousPage()\n }\n }\n\n const handleNext = () => {\n if (isCursorPagination && onNavigate) {\n onNavigate('next')\n } else {\n table.nextPage()\n }\n }\n\n return (\n <div className=\"flex gap-4 sm:items-center sm:justify-between\">\n {hasRowsSelected && (\n <div className=\"hidden sm:block text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{' '}\n {table.getFilteredRowModel().rows.length} selected\n </div>\n )}\n\n <div className=\"flex items-center space-x-2 w-fit\">\n\n <p className=\"hidden sm:block text-sm text-muted-foreground text-nowrap\">\n Rows per page\n </p>\n\n <Select\n disabled={disablePageSize}\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => table.setPageSize(Number(value))}\n >\n <Select.Trigger className=\"h-10 min-w-[70px]\">\n <Select.Value placeholder={table.getState().pagination.pageSize} />\n </Select.Trigger>\n\n <Select.Content side=\"top\">\n {pageSizeOptions.map((pageSize) => (\n <Select.Item key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n\n <div className=\"flex flex-col gap-4 w-full sm:w-auto sm:flex-row sm:items-center sm:gap-6 lg:gap-8\">\n <div className=\"flex items-center justify-end space-x-2 w-full sm:w-auto\">\n <div className=\"space-x-2\">\n {!isCursorPagination && (\n <Button\n size=\"icon\"\n variant=\"outline\"\n disabled={!hasPrevious}\n onClick={() => table.setPageIndex(0)}\n >\n <span className=\"sr-only\">Go to first page</span>\n <Icon name=\"ChevronLeftToLine\" className=\"h-4 w-4\" />\n </Button>\n )}\n\n <Button\n size=\"icon\"\n variant=\"outline\"\n onClick={handlePrevious}\n disabled={!hasPrevious}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <Icon name=\"ChevronLeft\" className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"space-x-2\">\n <Button\n size=\"icon\"\n variant=\"outline\"\n onClick={handleNext}\n disabled={!hasNext}\n >\n <span className=\"sr-only\">Go to next page</span>\n <Icon name=\"ChevronRight\" className=\"h-4 w-4\" />\n </Button>\n\n {!isCursorPagination && (\n <Button\n size=\"icon\"\n variant=\"outline\"\n disabled={!hasNext}\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n >\n <span className=\"sr-only\">Go to last page</span>\n <Icon name=\"ChevronRightToLine\" className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { Table } from '@tanstack/react-table'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu } from '@/components/ui/dropdown-menu'\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>\n}\n\nexport function DataTableViewOptions<TData>({\n table,\n}: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button variant=\"outline\" className=\"ml-auto hidden h-8 lg:flex\">\n <Icon name=\"Gear2\" className=\"mr-2 h-4 w-4\" />\n View\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" className=\"w-[150px]\">\n {table\n .getAllColumns()\n .filter(\n (column) =>\n typeof column.accessorFn !== 'undefined' && column.getCanHide(),\n )\n .map((column) => (\n <DropdownMenu.CheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenu.CheckboxItem>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n )\n}\n","'use client'\n\nimport { Table } from '@tanstack/react-table'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DataTableViewOptions } from './data-table-view-options'\n\ninterface DataTableToolbarProps<TData> {\n table: Table<TData>\n show?: {\n reset: boolean\n view: boolean\n }\n children?: React.ReactNode\n}\n\nexport function DataTableToolbar<TData>({\n table,\n show = {\n reset: true,\n view: false,\n },\n children,\n}: DataTableToolbarProps<TData>) {\n const isFiltered = table.getState().columnFilters.length > 0\n\n if ((!show.reset && !isFiltered) || !show.view) {\n return null\n }\n\n return (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-1 items-center space-x-2\">\n {children}\n\n {show.reset && isFiltered && (\n <Button\n variant=\"ghost\"\n onClick={() => table.resetColumnFilters()}\n className=\"h-8 px-2 lg:px-3\"\n >\n Reset\n <Icon name=\"Xmark\" className=\"ml-2 h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {show.view && <DataTableViewOptions table={table} />}\n </div>\n )\n}\n","import type { HTMLAttributes } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nfunction SafariDesktop({ url, children }: SafariProps) {\n return (\n <div id=\"safari-screen\" className=\"flex flex-col bg-card rounded-xl\">\n <div id=\"top-bar\" className=\"flex items-center gap-4 px-5 py-2.5 h-14\">\n <div className=\"flex items-center gap-6\">\n <div id=\"os-buttons\" className=\"flex gap-2\">\n {Array.from({ length: 3 }).map((_, index) => (\n <div\n key={index}\n className=\"size-3 rounded-full bg-muted-foreground/25\"\n />\n ))}\n </div>\n\n <Icon\n name=\"LayoutSidebar\"\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n\n <div id=\"page-controls\" className=\"flex items-center gap-2\">\n {['ChevronLeft', 'ChevronRight'].map((icon) => (\n <Icon\n key={icon}\n name={icon as IconType}\n className=\"size-6 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n </div>\n\n <div\n id=\"search-bar\"\n className=\"relative flex items-center justify-center gap-2 rounded-md bg-muted text-muted-foreground px-3 py-2 w-full h-full max-w-1/2 mx-auto\"\n >\n <Icon name=\"Lock\" className=\"size-4 fill-transparent!\" />\n\n <span className=\"text-sm select-none pointer-events-none\">\n {url.replace(/^https?:\\/\\//, '')}\n </span>\n\n <Icon\n name=\"ArrowRotateClockwise\"\n className=\"size-4 absolute right-3 fill-transparent!\"\n />\n </div>\n\n <div className=\"flex items-center gap-4\">\n {['Share', 'Plus', 'Copy'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n </div>\n\n <div\n id=\"content\"\n className=\"flex-1 rounded-xl rounded-t-none overflow-hidden border-t border-border\"\n >\n {children}\n </div>\n </div>\n )\n}\n\nfunction SafariIPad({ url, children }: SafariProps) {\n return (\n <div className=\"bg-card rounded-xl p-1\">\n <div className=\"bg-card min-h-[500px] relative overflow-hidden rounded-xl\">\n <div className=\"flex flex-col h-full\">\n <div\n id=\"top-bar\"\n className=\"flex items-center gap-3 px-4 py-2 h-12 bg-card\"\n >\n <div className=\"flex items-center gap-4\">\n <div id=\"page-controls\" className=\"flex items-center gap-1\">\n {['ChevronLeft', 'ChevronRight'].map((icon) => (\n <Icon\n key={icon}\n name={icon as IconType}\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n\n <Icon\n name=\"BookOpen\"\n className=\"size-4 text-muted-foreground fill-transparent!\"\n />\n </div>\n\n <div\n id=\"search-bar\"\n className=\"relative flex items-center justify-center gap-2 rounded-md bg-muted text-muted-foreground px-3 py-1.5 w-full h-full max-w-1/2 mx-auto\"\n >\n <Icon\n name=\"TextSizeChange\"\n className=\"size-4 absolute left-3 fill-transparent!\"\n />\n\n <Icon name=\"Lock\" className=\"size-3 fill-transparent!\" />\n\n <span className=\"text-xs select-none pointer-events-none\">\n {url.replace(/^https?:\\/\\//, '')}\n </span>\n\n <Icon\n name=\"ArrowRotateClockwise\"\n className=\"size-3 absolute right-3 fill-transparent!\"\n />\n </div>\n\n <div className=\"flex items-center gap-3\">\n {['Share', 'Plus', 'Copy'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-4 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n </div>\n\n <div className=\"flex-1 overflow-hidden\">{children}</div>\n </div>\n </div>\n\n <div className=\"absolute bottom-0 left-0 right-0 h-4 flex items-center justify-center\">\n <div className=\"w-32 h-1 bg-[#404040] rounded-full\"></div>\n </div>\n </div>\n )\n}\n\nfunction SafariIPhone({ url, children }: SafariProps) {\n return (\n <div className=\"bg-card rounded-3xl p-1 sm:max-w-[375px] min-h-[667px] max-h-[667px] mx-auto overflow-hidden\">\n <div className=\"relative min-h-full max-h-[calc(667px-.5rem)] rounded-3xl overflow-hidden\">\n <div className=\"flex flex-1 flex-col min-h-full\">\n <div className=\"flex flex-col flex-1 overflow-hidden min-h-full rounded-3xl\">\n {children}\n </div>\n\n <div\n id=\"bottom-bar\"\n className=\"flex flex-col items-center gap-2 p-3 pb-1 bg-card border-b border-border\"\n >\n <div\n id=\"search-bar\"\n className=\"relative flex items-center justify-center gap-1.5 rounded-md bg-muted text-muted-foreground px-2 py-2.5 w-full mx-auto h-10\"\n >\n <Icon\n name=\"TextAlignLeft\"\n className=\"size-4 absolute left-3 fill-transparent!\"\n />\n\n <span className=\"text-xs select-none pointer-events-none truncate\">\n {url.replace(/^https?:\\/\\//, '')}\n </span>\n\n <Icon\n name=\"ArrowRotateClockwise\"\n className=\"size-4 absolute right-3 fill-transparent!\"\n />\n\n {Array.from({ length: 2 }).map((_, index) => (\n <div\n key={index}\n className={cn(\n 'rounded-md bg-muted text-muted-foreground h-10 w-24',\n 'absolute',\n index === 0 ? 'left-[-30%]' : 'right-[-30%]',\n )}\n />\n ))}\n </div>\n\n <div className=\"flex items-center justify-between w-full px-5 py-2\">\n {['ChevronLeft', 'ChevronRight'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-5 text-muted-foreground fill-transparent!\"\n />\n ))}\n\n {['Share', 'BookOpen', 'Copy'].map((item) => (\n <Icon\n key={item}\n name={item as IconType}\n className=\"size-4.5 text-muted-foreground fill-transparent!\"\n />\n ))}\n </div>\n\n <div className=\"h-2 flex items-center justify-center\">\n <div className=\"w-24 h-1 bg-border rounded-full\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport interface SafariProps extends HTMLAttributes<HTMLDivElement> {\n url: string\n children?: React.ReactNode\n}\n\nexport function Safari({ url, children }: SafariProps) {\n return (\n <div className=\"grid gap-4\">\n <div className=\"hidden xl:block\">\n <SafariDesktop url={url}>{children}</SafariDesktop>\n </div>\n\n <div className=\"hidden sm:block xl:hidden\">\n <SafariIPad url={url}>{children}</SafariIPad>\n </div>\n\n <div className=\"block sm:hidden\">\n <SafariIPhone url={url}>{children}</SafariIPhone>\n </div>\n </div>\n )\n}\n","import { Safari } from './safari'\n\nexport const Devices = {\n Safari,\n}\n","'use client'\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useState,\n} from 'react'\n\nimport { create } from 'zustand'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button, type ButtonVariants } from '@/components/ui/button'\nimport {\n Dialog as UiDialog,\n DialogContent as UiDialogContent,\n DialogDescription as UiDialogDescription,\n DialogFooter as UiDialogFooter,\n DialogHeader as UiDialogHeader,\n DialogTitle as UiDialogTitle,\n} from '@/components/internal/dialog'\n\nexport const useDialog = create<DialogStore>((set) => ({\n isOpen: false,\n open: () => set({ isOpen: true }),\n close: () => set({ isOpen: false }),\n toggle: () => set((state) => ({ isOpen: !state.isOpen })),\n}))\n\ninterface DialogStore {\n isOpen: boolean\n open: () => void\n close: () => void\n toggle: () => void\n}\n\ninterface DialogStackContextType {\n activeIndex: number\n register: (id: string, order?: number) => number\n unregister: (id: string) => void\n goTo: (index: number) => void\n next: () => void\n back: () => void\n total: number\n}\n\nconst DialogStackContext = createContext<DialogStackContextType | null>(null)\n\nexport const useDialogStack = () => {\n const context = useContext(DialogStackContext)\n\n if (!context) {\n throw new Error('useDialogStack must be used within a DialogStack')\n }\n\n return context\n}\n\nexport function DialogStack({\n children,\n defaultIndex = 0,\n onIndexChange,\n}: {\n children: React.ReactNode\n defaultIndex?: number\n onIndexChange?: (index: number) => void\n}) {\n const [activeIndex, setActiveIndex] = useState(defaultIndex)\n const [items, setItems] = useState<{ id: string; order: number | null }[]>([])\n\n const register = useCallback((id: string, order?: number) => {\n setItems((prev) => {\n if (prev.find((item) => item.id === id)) return prev\n const newItems = [...prev, { id, order: order ?? null }]\n return newItems\n })\n\n return order ?? 0\n }, [])\n\n const unregister = useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id))\n }, [])\n\n const goTo = useCallback(\n (index: number) => {\n setActiveIndex(index)\n onIndexChange?.(index)\n },\n [onIndexChange],\n )\n\n const next = useCallback(() => {\n setActiveIndex((prev) => {\n const nextIndex = prev + 1\n onIndexChange?.(nextIndex)\n return nextIndex\n })\n }, [onIndexChange])\n\n const back = useCallback(() => {\n setActiveIndex((prev) => {\n const prevIndex = Math.max(0, prev - 1)\n onIndexChange?.(prevIndex)\n return prevIndex\n })\n }, [onIndexChange])\n\n const value = useMemo(\n () => ({\n activeIndex,\n register,\n unregister,\n goTo,\n next,\n back,\n total: items.length,\n }),\n [activeIndex, register, unregister, goTo, next, back, items.length],\n )\n\n return (\n <DialogStackContext.Provider value={value}>\n {children}\n </DialogStackContext.Provider>\n )\n}\n\nfunction Dialog({\n title,\n description,\n actions: actionsProp,\n isOpen,\n onOpenChange,\n style,\n className,\n overlay = true,\n children,\n order,\n removeOverlay = false,\n notRelative = false,\n showDescription = false,\n classNames,\n hideMobileFooterClose = false,\n}: {\n title?: string | React.ReactNode\n description?: string\n actions?:\n | {\n className?: string\n variant?: ButtonVariants\n label: string\n onClick: () => void\n disabled?: boolean\n isLoading?: boolean\n }[]\n | null\n | undefined\n className?: string\n children: React.ReactNode\n isOpen?: boolean\n onOpenChange?: (open: boolean) => void\n style?: React.CSSProperties\n overlay?: boolean\n order?: number\n offset?: number\n removeOverlay?: boolean\n notRelative?: boolean\n showDescription?: boolean\n /** Mobile: do not prepend the default “Close” button next to `actions` (header X still closes). */\n hideMobileFooterClose?: boolean\n classNames?: {\n container?: string\n content?: string\n header?: string\n description?: string\n footer?: string\n }\n}) {\n const isMobile = useIsMobile()\n\n const globalDialog = useDialog()\n const stack = useContext(DialogStackContext)\n\n const id = useId()\n\n const scrollableContentRef = React.useRef<HTMLDivElement>(null)\n\n const [stackOrder, setStackOrder] = useState<number | null>(order ?? null)\n\n let isBehind = false\n let dialogOpen = isOpen !== undefined ? isOpen : globalDialog.isOpen\n\n let stackStyle: React.CSSProperties = {}\n\n const handleClose = () => {\n if (stack) {\n if (stack.activeIndex > 0) {\n if (onOpenChange) {\n onOpenChange(false)\n } else {\n stack.back()\n }\n\n return\n }\n }\n\n if (onOpenChange) {\n onOpenChange(false)\n } else {\n globalDialog.close()\n }\n }\n\n const finalStyle = { ...style, ...stackStyle }\n const closeLabel = 'close'\n\n const mobileCloseAction: {\n variant: 'default'\n label: string\n onClick: () => void\n className: string\n disabled?: boolean\n isLoading?: boolean\n } = {\n variant: 'default',\n label: closeLabel,\n onClick: handleClose,\n className: 'mr-auto',\n }\n\n const actions = (() => {\n if (!isMobile || hideMobileFooterClose) {\n if (actionsProp === null) return null\n return actionsProp ?? undefined\n }\n\n if (actionsProp === null || actionsProp === undefined) {\n return [mobileCloseAction]\n }\n\n if (actionsProp.length === 0) {\n return [mobileCloseAction]\n }\n\n if (actionsProp.some((a) => a.label === closeLabel)) {\n return actionsProp\n }\n\n return [mobileCloseAction, ...actionsProp]\n })()\n\n if (stack) {\n const targetOrder = order ?? stackOrder ?? 0\n\n if (targetOrder !== null) {\n dialogOpen = stack.activeIndex >= targetOrder\n\n const distanceFromActive = targetOrder - stack.activeIndex\n\n isBehind = distanceFromActive < 0\n\n if (distanceFromActive <= 0) {\n // Horizontal “carousel”: previous steps sit one panel width to the left\n // instead of scaling/grayscale stacking behind the active step.\n stackStyle = {\n top: '50%',\n left: '50%',\n transform: `translate(-50%, -50%) translateX(calc(${distanceFromActive} * 100%))`,\n zIndex: 50 + targetOrder,\n position: 'fixed',\n pointerEvents: distanceFromActive === 0 ? 'auto' : 'none',\n transition: 'transform 300ms cubic-bezier(0.32, 0.72, 0, 1)',\n }\n } else {\n dialogOpen = false\n }\n }\n }\n\n useEffect(() => {\n if (stack) {\n const assigned = stack.register(id, order)\n\n if (order === undefined) {\n setStackOrder(assigned)\n }\n\n return () => stack.unregister(id)\n }\n }, [stack?.register, stack?.unregister, id, order, stack])\n\n return (\n <UiDialog\n open={dialogOpen}\n onOpenChange={(open) => {\n if (!open) handleClose()\n }}\n >\n <UiDialogContent\n style={finalStyle}\n overlay={removeOverlay ? false : overlay}\n scrollableRef={scrollableContentRef}\n className={cn(\n 'p-0 gap-0 max-w-2xl! bg-card border-none outline-none max-h-dvh max-sm:px-1 sm:p-1 sm:rounded-2xl group w-full flex min-h-0 flex-col overflow-hidden flex-1',\n !(actions && actions.length > 0) && 'max-sm:pb-1',\n stack && 'will-change-transform',\n className,\n classNames?.container,\n )}\n >\n {(title || description) && (\n <UiDialogHeader\n className={cn(\n 'max-sm:px-4 max-sm:py-6 sm:p-4 rounded-t-xl shrink-0 gap-3 flex flex-row items-center justify-between',\n classNames?.header,\n )}\n >\n <div className=\"flex flex-col gap-1\">\n {title && <UiDialogTitle>{title}</UiDialogTitle>}\n\n {description && (\n <UiDialogDescription\n className={cn(!showDescription && 'sr-only')}\n >\n {description}\n </UiDialogDescription>\n )}\n </div>\n\n <Button\n variant=\"ghost\"\n onClick={handleClose}\n aria-label={'close'}\n className=\"ml-auto rounded-md p-1 bg-muted/50 hover:bg-muted hover:opacity-100 text-muted-foreground\"\n >\n <Icon name=\"Xmark\" className=\"size-4\" />\n </Button>\n </UiDialogHeader>\n )}\n\n <div\n ref={scrollableContentRef}\n {...(isBehind ? { inert: true } : {})}\n className={cn(\n 'p-4 w-full bg-muted text-card-foreground flex min-h-0 flex-col gap-4 rounded-xl overflow-y-auto overflow-x-hidden flex-1',\n isBehind && 'pointer-events-none select-none',\n isBehind && !stack && 'opacity-0',\n !stack && 'transition-opacity duration-300',\n !notRelative && 'relative',\n classNames?.content,\n )}\n >\n {children}\n </div>\n\n {actions && actions.length > 0 && (\n <UiDialogFooter\n className={cn('flex-row justify-end p-4 rounded-b-xl shrink-0', classNames?.footer)}\n >\n {actions.map((action) => (\n <Button\n key={action.label}\n onClick={action.onClick}\n variant={action.variant}\n disabled={action.disabled}\n className={action.className}\n isLoading={action.isLoading}\n >\n {action.label}\n </Button>\n ))}\n </UiDialogFooter>\n )}\n </UiDialogContent>\n </UiDialog>\n )\n}\n\nexport { Dialog }\n","'use client'\n\nimport * as React from 'react'\n\nimport { RemoveScroll } from 'react-remove-scroll'\n\nimport { Dialog as DialogPrimitive } from '@base-ui/react/dialog'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { ANIMATION } from '@/constants/animations'\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n // 'trap-focus' keeps focus containment without Base UI's body scroll lock —\n // scroll locking is handled by RemoveScroll in DialogOverlay.\n return <DialogPrimitive.Root data-slot=\"dialog\" modal=\"trap-focus\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return (\n <DialogPrimitive.Trigger\n data-slot=\"dialog-trigger\"\n className=\"cursor-pointer\"\n {...props}\n />\n )\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\n/** Backdrop scroll lock without `overflow: hidden` on body (avoids breaking sticky headers). */\nfunction DialogOverlay({\n className,\n contentRef,\n scrollableRef,\n ...props\n}: Omit<React.ComponentProps<'div'>, 'ref'> & {\n contentRef: React.RefObject<HTMLElement | null>\n /** Actual overflow container when content scroll lives inside the panel (not on `contentRef`). */\n scrollableRef?: React.RefObject<HTMLElement | null>\n}) {\n const shards = React.useMemo(\n () => (scrollableRef ? [contentRef, scrollableRef] : [contentRef]),\n [contentRef, scrollableRef],\n )\n\n return (\n <RemoveScroll allowPinchZoom removeScrollBar={false} shards={shards}>\n <div\n data-slot=\"dialog-overlay\"\n className={cn(\n 'animate-in fade-in-0 duration-200 fixed inset-0 z-50 bg-black/80',\n className,\n )}\n {...props}\n />\n </RemoveScroll>\n )\n}\n\nfunction DialogContent({\n className,\n children,\n closeButton = false,\n closeButtonClassName,\n title = 'Title',\n overlay = true,\n scrollableRef,\n ...props\n}: DialogPrimitive.Popup.Props & {\n closeButton?: boolean\n closeButtonClassName?: string\n title?: string\n overlay?: boolean\n scrollableRef?: React.RefObject<HTMLElement | null>\n}) {\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogPortal>\n {overlay && (\n <DialogOverlay contentRef={contentRef} scrollableRef={scrollableRef} />\n )}\n\n <DialogPrimitive.Popup\n ref={contentRef}\n data-slot=\"dialog-content\"\n aria-describedby={props['aria-describedby'] || ''}\n initialFocus={() => {\n // Don't move focus into the dialog and drop focus from the trigger,\n // matching the previous blur-on-open behavior.\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur()\n }\n return contentRef.current\n }}\n className={cn(\n 'bg-background fixed top-1/2 left-1/2 z-50 grid max-sm:h-dvh sm:max-h-[calc(100%-2rem)] w-full sm:max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 overflow-hidden sm:rounded-xl border p-6 shadow-lg',\n 'transition-[transform,scale,opacity] ease-out',\n 'data-starting-style:scale-98 data-starting-style:opacity-0',\n 'data-ending-style:scale-98 data-ending-style:opacity-0',\n `duration-${ANIMATION.DURATION}`,\n className,\n )}\n {...props}\n >\n <DialogTitle className=\"sr-only\">{title}</DialogTitle>\n\n {children}\n\n {closeButton && (\n <DialogPrimitive.Close\n className={cn(\n 'group focus-visible:border-ring focus-visible:ring-ring/50 absolute top-3 right-3 flex size-7 items-center justify-center rounded transition-[color,box-shadow] outline-none cursor-pointer focus-visible:ring-[3px] disabled:pointer-events-none',\n closeButtonClassName,\n )}\n >\n <Icon\n name=\"Xmark\"\n size={16}\n className=\"opacity-60 transition-opacity group-hover:opacity-100\"\n />\n <span className=\"sr-only\">{'close'}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn('flex flex-col gap-1', className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-3 xs:flex-row xs:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn('text-lg sm:text-xl leading-none', className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { EmojiPicker as EmojiPickerPrimitive } from 'frimousse'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nconst EmojiPickerContext = React.createContext<{\n rootRef: React.RefObject<HTMLDivElement | null>\n} | null>(null)\n\nfunction EmojiPickerRoot({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Root>) {\n const rootRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <EmojiPickerContext.Provider value={{ rootRef }}>\n <EmojiPickerPrimitive.Root\n ref={rootRef}\n data-slot=\"emoji-picker\"\n className={cn(\n 'isolate flex h-[368px] w-fit flex-col overflow-hidden rounded-xl bg-muted text-foreground [--card-content-padding:1rem]',\n className,\n )}\n {...props}\n />\n </EmojiPickerContext.Provider>\n )\n}\n\n/**\n * Emojibase groups in their canonical order — the order in which\n * `EmojiPicker.List` renders category sections. Used to map each category\n * button to the matching (index-aligned) section header for scrolling.\n */\nconst EMOJI_CATEGORIES: { label: string; icon: IconType }[] = [\n { label: 'Smileys & Emotion', icon: 'FaceSmile' },\n { label: 'People & Body', icon: 'HandWave' },\n { label: 'Animals & Nature', icon: 'Paw' },\n { label: 'Food & Drink', icon: 'Coffee' },\n { label: 'Travel & Places', icon: 'Globe' },\n { label: 'Activities', icon: 'Trophy' },\n { label: 'Objects', icon: 'Lightbulb' },\n { label: 'Symbols', icon: 'Heart' },\n { label: 'Flags', icon: 'Flag' },\n]\n\n/**\n * Opt-in category strip. Add it inside `EmojiPicker` (e.g. below `Search`) to\n * jump between category sections; it also highlights the section in view.\n */\nfunction EmojiPickerCategorySelector({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n const ctx = React.useContext(EmojiPickerContext)\n const [activeIndex, setActiveIndex] = React.useState(0)\n\n const getParts = React.useCallback(() => {\n const root = ctx?.rootRef.current\n const viewport = root?.querySelector<HTMLElement>('[frimousse-viewport]')\n if (!viewport) return null\n\n // Real section wrappers only — the (aria-hidden) sizer nests its header\n // deeper, so a direct-child match excludes it.\n const sections = Array.from(\n viewport.querySelectorAll<HTMLElement>('[frimousse-category]'),\n ).filter((el) =>\n el.querySelector(':scope > [data-slot=\"emoji-picker-category-header\"]'),\n )\n\n return { viewport, sections }\n }, [ctx])\n\n React.useEffect(() => {\n const parts = getParts()\n if (!parts) return\n\n const { viewport } = parts\n\n const onScroll = () => {\n const current = getParts()\n if (!current) return\n\n const viewportTop = current.viewport.getBoundingClientRect().top\n\n let next = 0\n current.sections.forEach((section, index) => {\n if (section.getBoundingClientRect().top - viewportTop <= 8) next = index\n })\n\n setActiveIndex(next)\n }\n\n viewport.addEventListener('scroll', onScroll, { passive: true })\n onScroll()\n\n return () => viewport.removeEventListener('scroll', onScroll)\n }, [getParts])\n\n const scrollToCategory = (index: number) => {\n const parts = getParts()\n const target = parts?.sections[index]\n if (!parts || !target) return\n\n const delta =\n target.getBoundingClientRect().top -\n parts.viewport.getBoundingClientRect().top\n\n parts.viewport.scrollTo({\n top: parts.viewport.scrollTop + delta,\n behavior: 'smooth',\n })\n setActiveIndex(index)\n }\n\n return (\n <div\n data-slot=\"emoji-picker-category-selector\"\n className={cn(\n 'flex shrink-0 items-center gap-0.5 px-1.5 pt-1.5',\n className,\n )}\n {...props}\n >\n {EMOJI_CATEGORIES.map((category, index) => (\n <button\n key={category.label}\n type=\"button\"\n aria-label={category.label}\n title={category.label}\n data-active={activeIndex === index ? '' : undefined}\n onClick={() => scrollToCategory(index)}\n className=\"flex flex-1 cursor-pointer items-center justify-center rounded-lg p-1.5 text-muted-foreground/50 transition-colors hover:bg-accent hover:text-foreground data-active:bg-accent data-active:text-foreground\"\n >\n <Icon name={category.icon} className=\"size-4\" />\n </button>\n ))}\n </div>\n )\n}\n\nfunction EmojiPickerSearch({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Search>) {\n return (\n <div\n data-slot=\"emoji-picker-search-wrapper\"\n className=\"flex h-14 shrink-0 items-center gap-4 px-(--card-content-padding)\"\n >\n <Icon name=\"Magnifier\" className=\"size-4 shrink-0 opacity-50\" />\n\n <EmojiPickerPrimitive.Search\n data-slot=\"emoji-picker-search\"\n className={cn(\n 'flex h-10 w-full bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50',\n '[&::-webkit-search-cancel-button]:hidden',\n className,\n )}\n placeholder={'Search emoji...'}\n {...props}\n />\n </div>\n )\n}\n\nfunction EmojiPickerViewport({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Viewport>) {\n return (\n <EmojiPickerPrimitive.Viewport\n data-slot=\"emoji-picker-viewport\"\n className={cn('relative flex-1 outline-hidden', className)}\n {...props}\n />\n )\n}\n\nfunction EmojiPickerLoading({\n className,\n children = 'Loading...',\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Loading>) {\n return (\n <EmojiPickerPrimitive.Loading\n data-slot=\"emoji-picker-loading\"\n className={cn(\n 'absolute inset-0 flex items-center justify-center text-sm text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </EmojiPickerPrimitive.Loading>\n )\n}\n\nfunction EmojiPickerEmpty({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.Empty>) {\n return (\n <EmojiPickerPrimitive.Empty\n data-slot=\"emoji-picker-empty\"\n className={cn(\n 'absolute inset-0 flex items-center justify-center text-sm text-muted-foreground',\n className,\n )}\n {...props}\n >\n {typeof children === 'function' ? children : children ?? 'No emoji found.'}\n </EmojiPickerPrimitive.Empty>\n )\n}\n\nfunction EmojiPickerList({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.List>) {\n return (\n <EmojiPickerPrimitive.List\n data-slot=\"emoji-picker-list\"\n className={cn('select-none pb-1.5', className)}\n components={{\n CategoryHeader: ({ category, ...props }) => (\n <div\n data-slot=\"emoji-picker-category-header\"\n className=\"bg-muted px-3 pt-3 pb-1.5 text-xs font-medium uppercase text-muted-foreground/50\"\n {...props}\n >\n {category.label}\n </div>\n ),\n Row: ({ children, ...props }) => (\n <div\n data-slot=\"emoji-picker-row\"\n className=\"scroll-my-1.5 px-1.5\"\n {...props}\n >\n {children}\n </div>\n ),\n Emoji: ({ emoji, ...props }) => (\n <button\n data-slot=\"emoji-picker-emoji\"\n className=\"flex size-8 cursor-pointer items-center justify-center rounded-lg text-lg transition-colors data-active:bg-accent data-active:text-accent-foreground\"\n {...props}\n >\n {emoji.emoji}\n </button>\n ),\n }}\n {...props}\n />\n )\n}\n\nfunction EmojiPickerSkinToneSelector({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.SkinToneSelector>) {\n return (\n <EmojiPickerPrimitive.SkinToneSelector\n data-slot=\"emoji-picker-skin-tone-selector\"\n className={cn(\n 'flex size-7 cursor-pointer items-center justify-center rounded-lg text-sm transition-colors hover:bg-accent',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction EmojiPickerFooter({\n className,\n children,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"emoji-picker-footer\"\n className={cn(\n 'flex shrink-0 items-center justify-between px-(--card-content-padding) py-2',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nfunction EmojiPickerActiveEmoji({\n className,\n ...props\n}: React.ComponentProps<typeof EmojiPickerPrimitive.ActiveEmoji> & { className?: string }) {\n return (\n <span\n data-slot=\"emoji-picker-active-emoji\"\n className={cn('min-w-0 truncate text-xs text-muted-foreground', className)}\n >\n <EmojiPickerPrimitive.ActiveEmoji\n {...(props as React.ComponentProps<typeof EmojiPickerPrimitive.ActiveEmoji>)}\n />\n </span>\n )\n}\n\nexport const EmojiPicker = Object.assign(EmojiPickerRoot, {\n Search: EmojiPickerSearch,\n CategorySelector: EmojiPickerCategorySelector,\n Viewport: EmojiPickerViewport,\n Loading: EmojiPickerLoading,\n Empty: EmojiPickerEmpty,\n List: EmojiPickerList,\n SkinToneSelector: EmojiPickerSkinToneSelector,\n Footer: EmojiPickerFooter,\n ActiveEmoji: EmojiPickerActiveEmoji,\n})\n","'use client'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon, type IconType } from '@/components/icon'\n\nimport { Card } from '@/components/ui/card'\n\nexport function EmptyState({\n icon = 'Archive',\n title,\n description,\n children,\n variant = 'default',\n className,\n}: {\n icon?: IconType\n title?: string\n description?: string\n children?: React.ReactNode\n variant?: 'default' | 'embedded' | 'flat'\n className?: string\n}) {\n\n return (\n <Card className={cn(\n ['embedded', 'flat'].includes(variant) && 'p-0',\n )}>\n <Card.Content\n className={cn(\n 'flex flex-col items-center justify-center gap-4 text-center',\n variant === 'flat' ? 'rounded-none bg-transparent p-0' : 'rounded-xl p-8',\n className,\n )}\n >\n {icon && (\n <Icon\n name={icon}\n className=\"size-8 text-muted-foreground\"\n />\n )}\n\n {(title || description) && (\n <div className=\"flex flex-col items-center justify-center gap-1 text-balance max-w-md\">\n {title && (\n <p className=\"text-foreground text-lg\">\n {title}\n </p>\n )}\n\n {description && (\n <p className=\"text-muted-foreground text-sm\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {children}\n </Card.Content>\n </Card>\n )\n}\n","'use client'\n\nimport { PreviewCard as PreviewCardPrimitive } from '@base-ui/react/preview-card'\n\nimport { cn } from '@/lib/cn'\n\nfunction HoverCardRoot({ ...props }: PreviewCardPrimitive.Root.Props) {\n return <PreviewCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({ ...props }: PreviewCardPrimitive.Trigger.Props) {\n return (\n <PreviewCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\ntype HoverCardContentProps = PreviewCardPrimitive.Popup.Props &\n Pick<\n PreviewCardPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n >\n\nfunction HoverCardContent({\n className,\n side = 'bottom',\n sideOffset = 4,\n align = 'center',\n alignOffset = 4,\n ...props\n}: HoverCardContentProps) {\n return (\n <PreviewCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <PreviewCardPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <PreviewCardPrimitive.Popup\n data-slot=\"hover-card-content\"\n className={cn(\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 origin-(--transform-origin) outline-hidden',\n className,\n )}\n {...props}\n />\n </PreviewCardPrimitive.Positioner>\n </PreviewCardPrimitive.Portal>\n )\n}\n\nconst HoverCard = Object.assign(HoverCardRoot, { Trigger: HoverCardTrigger, Content: HoverCardContent })\nexport { HoverCard }\n\nexport type { HoverCardContentProps }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\ntype InputGroupProps = React.HTMLAttributes<HTMLDivElement>\n\nfunction InputGroupRoot({ className, ...props }: InputGroupProps) {\n return (\n <div\n data-slot=\"input-group\"\n className={cn(\n 'relative',\n '[&:has([data-align=\"inline-start\"])_[data-slot=\"input-group-control\"]]:pl-10',\n '[&:has([data-align=\"inline-end\"])_[data-slot=\"input-group-control\"]]:pr-10',\n '[&:has([data-align=\"inline-start\"][data-variant=\"filled\"])_[data-slot=\"input-group-control\"]]:pl-12',\n '[&:has([data-align=\"inline-end\"][data-variant=\"filled\"])_[data-slot=\"input-group-control\"]]:pr-12',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype InputGroupInputProps = React.ComponentProps<'input'>\n\nfunction InputGroupInput({ className, ...props }: InputGroupInputProps) {\n return (\n <input\n data-slot=\"input-group-control\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground/50 placeholder:pointer-events-none placeholder:select-none bg-input flex h-10 w-full min-w-0 rounded-xl border border-transparent px-3 py-2 text-sm transition-all outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium text-foreground',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:brightness-75',\n 'read-only:pointer-events-none read-only:cursor-not-allowed read-only:brightness-75',\n className,\n )}\n {...props}\n />\n )\n}\nInputGroupInput.displayName = 'InputGroupInput'\n\nconst inputGroupAddonVariants = cva(\n 'absolute inset-y-0 flex items-center justify-center pointer-events-none',\n {\n variants: {\n align: {\n 'inline-start': 'left-0 w-10',\n 'inline-end': 'right-0 w-10',\n },\n variant: {\n default: '',\n filled: 'bg-accent',\n },\n },\n compoundVariants: [\n { align: 'inline-start', variant: 'filled', className: 'rounded-l-xl' },\n { align: 'inline-end', variant: 'filled', className: 'rounded-r-xl' },\n ],\n defaultVariants: {\n align: 'inline-start',\n variant: 'default',\n },\n },\n)\n\ntype InputGroupAddonProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof inputGroupAddonVariants>\n\nfunction InputGroupAddon({\n align = 'inline-start',\n variant = 'default',\n className,\n ...props\n}: InputGroupAddonProps) {\n return (\n <div\n data-slot=\"input-group-addon\"\n data-align={align}\n data-variant={variant}\n className={cn(inputGroupAddonVariants({ align, variant }), className)}\n {...props}\n />\n )\n}\nInputGroupAddon.displayName = 'InputGroupAddon'\n\ntype InputGroupTextProps = React.HTMLAttributes<HTMLSpanElement>\n\nfunction InputGroupText({ className, ...props }: InputGroupTextProps) {\n return (\n <span\n data-slot=\"input-group-text\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n}\nInputGroupText.displayName = 'InputGroupText'\n\nconst InputGroup = Object.assign(InputGroupRoot, { Input: InputGroupInput, Addon: InputGroupAddon, Text: InputGroupText })\nexport { InputGroup }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport type { Currency } from '@/hooks/use-currency-input'\nimport { useCurrencyInput } from '@/hooks/use-currency-input'\nimport { useElementSize } from '@/hooks/use-element-size'\n\nimport { Input } from '@/components/ui/input'\nimport { Select } from '@/components/ui/select'\n\nexport interface CurrencyInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'onChange'\n> {\n value?: number\n locale?: string\n allowZero?: boolean\n defaultCurrency?: string\n disableCurrencySelect?: boolean\n centsMode?: boolean\n onChange?: (value: number) => void\n onCurrencyChange?: (currency: Currency) => void\n align?: 'start' | 'center' | 'end'\n}\n\nconst CurrencyInput = React.forwardRef<HTMLInputElement, CurrencyInputProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n onCurrencyChange,\n locale,\n className,\n disabled,\n disableCurrencySelect = false,\n centsMode = true,\n placeholder,\n defaultCurrency,\n allowZero = true,\n align = 'start',\n ...inputProps\n } = props\n\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const { width: triggerWidth } = useElementSize(triggerRef)\n\n const {\n displayValue,\n selectedCurrency,\n currencies,\n inputRef,\n placeholder: defaultPlaceholder,\n handleCurrencyChange,\n handleAmountChange,\n handleFocus,\n handleBlur,\n } = useCurrencyInput({\n centsMode,\n value,\n onChange,\n onCurrencyChange,\n locale,\n defaultCurrency,\n allowZero,\n })\n\n return (\n <div className=\"flex w-full\">\n <Select\n value={selectedCurrency.code}\n onValueChange={handleCurrencyChange}\n disabled={disabled || disableCurrencySelect}\n >\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-r-none border-r-0 focus:z-10 bg-accent',\n disableCurrencySelect && '[&>svg]:hidden',\n className,\n )}\n >\n <Select.Value>\n <span className=\"text-sm font-mono\">\n {selectedCurrency.symbol}\n </span>\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-32\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {currencies.map((currency) => (\n <Select.Item key={currency.code} value={currency.code}>\n <span className=\"text-sm font-mono text-muted-foreground\">\n {currency.symbol}\n </span>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n <Input\n ref={(node) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node\n }}\n type=\"text\"\n inputMode=\"decimal\"\n onBlur={handleBlur}\n disabled={disabled}\n value={displayValue}\n onFocus={handleFocus}\n placeholder={placeholder ?? defaultPlaceholder}\n onChange={handleAmountChange}\n className={cn('rounded-l-none focus:z-10', className)}\n {...inputProps}\n />\n </div>\n )\n },\n)\n\nCurrencyInput.displayName = 'CurrencyInput'\n\nexport { CurrencyInput }\nexport type { Currency }\n","import { type ChangeEvent, useEffect, useMemo, useRef, useState } from 'react'\n\nexport type Currency = {\n code: string\n symbol: string\n}\n\nconst CURRENCY_LOCALE: Record<string, string> = {\n USD: 'en-US',\n EUR: 'de-DE',\n GBP: 'en-GB',\n BRL: 'pt-BR',\n JPY: 'ja-JP',\n CNY: 'zh-CN',\n KRW: 'ko-KR',\n INR: 'en-IN',\n RUB: 'ru-RU',\n CHF: 'de-CH',\n CAD: 'en-CA',\n AUD: 'en-AU',\n MXN: 'es-MX',\n ARS: 'es-AR',\n CLP: 'es-CL',\n COP: 'es-CO',\n PEN: 'es-PE',\n UYU: 'es-UY',\n}\n\nconst currencies: Currency[] = [\n { code: 'USD', symbol: '$' },\n { code: 'EUR', symbol: '€' },\n { code: 'GBP', symbol: '£' },\n { code: 'BRL', symbol: 'R$' },\n { code: 'JPY', symbol: '¥' },\n { code: 'CNY', symbol: '¥' },\n { code: 'KRW', symbol: '₩' },\n { code: 'INR', symbol: '₹' },\n { code: 'RUB', symbol: '₽' },\n { code: 'CHF', symbol: 'CHF' },\n { code: 'CAD', symbol: 'CA$' },\n { code: 'AUD', symbol: 'A$' },\n { code: 'MXN', symbol: 'MX$' },\n { code: 'ARS', symbol: 'AR$' },\n { code: 'CLP', symbol: 'CL$' },\n { code: 'COP', symbol: 'CO$' },\n { code: 'PEN', symbol: 'S/' },\n { code: 'UYU', symbol: '$U' },\n]\n\nconst DIGITS_ONLY = /[^\\d]/g\n\nconst formatAmount = (digits: string, currencyCode: string, centsMode: boolean): string => {\n if (!digits) return ''\n\n const locale = CURRENCY_LOCALE[currencyCode] ?? 'en-US'\n const decimalSep =\n locale.startsWith('pt') || locale.startsWith('de') || locale.startsWith('fr') ||\n locale.startsWith('es') || locale.startsWith('it')\n ? ','\n : '.'\n\n if (!centsMode) {\n const intNum = parseInt(digits, 10)\n if (isNaN(intNum)) return digits\n return `${intNum}${decimalSep}00`\n }\n\n const padded = digits.padStart(3, '0')\n const integerPart = padded.slice(0, -2)\n const decimalPart = padded.slice(-2)\n const intNum = parseInt(integerPart, 10)\n\n const formattedInt = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(intNum)\n\n return `${formattedInt}${decimalSep}${decimalPart}`\n}\n\nexport const useCurrencyInput = (props: Record<string, unknown>) => {\n const centsMode = (props.centsMode as boolean) ?? true\n const [rawDigits, setRawDigits] = useState('')\n const [currencyCode, setCurrencyCode] = useState('BRL')\n const inputRef = useRef<HTMLInputElement | null>(null)\n\n const selectedCurrency =\n currencies.find((c) => c.code === currencyCode) ?? currencies[0]\n\n const displayValue = useMemo(\n () => formatAmount(rawDigits, currencyCode, centsMode),\n [rawDigits, currencyCode, centsMode],\n )\n\n const decimalSep = useMemo(() => {\n const locale = CURRENCY_LOCALE[currencyCode] ?? 'en-US'\n return locale.startsWith('pt') || locale.startsWith('de') || locale.startsWith('fr') ||\n locale.startsWith('es') || locale.startsWith('it')\n ? ','\n : '.'\n }, [currencyCode])\n\n const handleCurrencyChange = (code: string) => {\n setCurrencyCode(code)\n }\n\n const handleAmountChange = (e: ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value\n\n if (!centsMode) {\n const cleaned = inputValue.replace(/[.,]\\d*$/, '').replace(DIGITS_ONLY, '')\n setRawDigits(cleaned)\n return\n }\n\n setRawDigits(inputValue.replace(DIGITS_ONLY, ''))\n }\n\n useEffect(() => {\n if (!centsMode && inputRef.current) {\n const pos = rawDigits.length\n inputRef.current.setSelectionRange(pos, pos)\n }\n }, [displayValue, centsMode, rawDigits.length])\n\n return {\n displayValue,\n selectedCurrency,\n currencies,\n inputRef,\n placeholder: `0${decimalSep}00`,\n handleCurrencyChange,\n handleAmountChange,\n handleFocus: () => {},\n handleBlur: () => {},\n }\n}\n","export function useElementSize(_ref: React.RefObject<HTMLElement | null>) {\n return { width: 0 }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport { useElementSize } from '@/hooks/use-element-size'\nimport type { Country } from '@/hooks/use-phone-input'\nimport { usePhoneInput } from '@/hooks/use-phone-input'\n\nimport { Input } from '@/components/ui/input'\nimport { FlagIcon } from '@/components/icon/flag'\nimport { Select } from '@/components/ui/select'\n\nexport interface PhoneInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'onChange'\n> {\n value?: string\n onChange?: (value: string) => void\n onCountryChange?: (country: Country) => void\n disableCountrySelect?: boolean\n locale?: string\n align?: 'start' | 'center' | 'end'\n}\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n onCountryChange,\n locale,\n className,\n disabled,\n placeholder,\n disableCountrySelect = false,\n align = 'start',\n ...inputProps\n } = props\n\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const { width: triggerWidth } = useElementSize(triggerRef)\n\n const {\n formattedPhoneNumber,\n selectedCountry,\n countries,\n handleCountryChange,\n handlePhoneNumberChange,\n placeholder: dynamicPlaceholder,\n } = usePhoneInput({\n value,\n onChange,\n onCountryChange,\n locale,\n })\n\n return (\n <div className=\"flex w-full\">\n <Select\n value={selectedCountry.code}\n onValueChange={handleCountryChange}\n disabled={disabled || disableCountrySelect}\n >\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-r-none border-r-0 focus:z-10 bg-accent select-none',\n disableCountrySelect && '[&>svg]:hidden',\n className,\n )}\n >\n <Select.Value>\n <FlagIcon\n code={selectedCountry.code}\n className=\"size-5 rounded-sm mb-0.5 pointer-events-none select-none\"\n />\n\n <span className=\"text-sm font-mono\">\n {selectedCountry.dialCode}\n </span>\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-max\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {countries.map((country) => (\n <Select.Item key={country.code} value={country.code}>\n <div className=\"flex items-center gap-2\">\n <FlagIcon\n code={country.code}\n className=\"size-5 rounded-sm pointer-events-none select-none\"\n />\n\n <span className=\"text-sm font-mono text-muted-foreground\">\n {country.dialCode}\n </span>\n\n <span className=\"text-sm mb-0.5\">{country.name}</span>\n </div>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n <Input\n ref={ref}\n type=\"tel\"\n value={formattedPhoneNumber}\n onChange={handlePhoneNumberChange}\n placeholder={placeholder || dynamicPlaceholder}\n className={cn('rounded-l-none focus:z-10', className)}\n disabled={disabled}\n {...inputProps}\n />\n </div>\n )\n },\n)\n\nPhoneInput.displayName = 'PhoneInput'\n\nexport { PhoneInput }\nexport type { Country }\n","import { useState } from 'react'\nimport {\n getCountries,\n getCountryCallingCode,\n parsePhoneNumberFromString,\n} from 'libphonenumber-js'\n\nimport { applyPhoneMask, getDefaultMask, getDisplayMask, phoneMasks } from '@/components/ui/input-phone/masks'\n\nexport interface Country {\n code: string\n name: string\n flag: string\n dialCode: string\n}\n\nfunction getCountryName(code: string, locale: string): string {\n try {\n const names = new Intl.DisplayNames([locale], { type: 'region' })\n return names.of(code) ?? code\n } catch {\n return code\n }\n}\n\nconst SUPPORTED_FLAGS = new Set([\n 'AF', 'AL', 'DZ', 'AD', 'AO', 'AG', 'AR', 'AM', 'AU', 'AT', 'AZ',\n 'BS', 'BH', 'BD', 'BB', 'BY', 'BE', 'BZ', 'BJ', 'BT', 'BO', 'BA',\n 'BW', 'BR', 'BN', 'BG', 'BF', 'BI', 'KH', 'CM', 'CA', 'CV', 'CF',\n 'TD', 'CL', 'CN', 'CO', 'KM', 'CG', 'CD', 'CR', 'CI', 'HR', 'CU',\n 'CY', 'CZ', 'DK', 'DJ', 'DM', 'DO', 'TL', 'EC', 'EG', 'SV', 'GQ',\n 'ER', 'EE', 'SZ', 'ET', 'FJ', 'FI', 'FR', 'GA', 'GM', 'GE', 'DE',\n 'GH', 'GR', 'GD', 'GT', 'GN', 'GW', 'GY', 'HT', 'HN', 'HK', 'HU',\n 'IS', 'IN', 'ID', 'IR', 'IQ', 'IE', 'IL', 'IT', 'JM', 'JP', 'JO',\n 'KZ', 'KE', 'KI', 'KP', 'KR', 'KW', 'KG', 'LA', 'LV', 'LB', 'LS',\n 'LR', 'LY', 'LI', 'LT', 'LU', 'MO', 'MG', 'MW', 'MY', 'MV', 'ML',\n 'MT', 'MH', 'MR', 'MU', 'MX', 'FM', 'MD', 'MC', 'MN', 'ME', 'MA',\n 'MZ', 'MM', 'NA', 'NR', 'NP', 'NL', 'NZ', 'NI', 'NE', 'NG', 'NO',\n 'OM', 'PK', 'PW', 'PS', 'PA', 'PG', 'PY', 'PE', 'PH', 'PL', 'PT',\n 'QA', 'RO', 'RU', 'RW', 'KN', 'LC', 'VC', 'WS', 'SM', 'ST', 'SA',\n 'SN', 'RS', 'SC', 'SL', 'SG', 'SK', 'SI', 'SB', 'SO', 'ZA', 'SS',\n 'ES', 'LK', 'SD', 'SR', 'SE', 'CH', 'SY', 'TW', 'TJ', 'TZ', 'TH',\n 'TG', 'TO', 'TT', 'TN', 'TR', 'TM', 'TV', 'UG', 'UA', 'AE', 'GB',\n 'US', 'UY', 'UZ', 'VU', 'VA', 'VE', 'VN', 'YE', 'ZM', 'ZW',\n])\n\nconst countries: Country[] = getCountries()\n .filter((code) => SUPPORTED_FLAGS.has(code))\n .map((code) => ({\n code,\n name: getCountryName(code, 'en'),\n flag: code,\n dialCode: `+${getCountryCallingCode(code)}`,\n }))\n\nexport const usePhoneInput = (props: Record<string, unknown>) => {\n const initialValue = (props.value as string) ?? ''\n\n const parsed = parsePhoneNumberFromString(initialValue)\n const initialCountryCode = parsed?.country ?? 'BR'\n const initialNationalNumber = parsed?.nationalNumber ?? ''\n\n const [phone, setPhone] = useState(initialNationalNumber)\n const [countryCode, setCountryCode] = useState<string>(initialCountryCode)\n\n const selectedCountry =\n countries.find((c) => c.code === countryCode) ?? countries[0]\n\n const maskConfig = phoneMasks[countryCode] ?? getDefaultMask()\n\n const formattedPhoneNumber = applyPhoneMask(phone, getDisplayMask(countryCode, phone.length))\n\n const handleCountryChange = (code: string) => {\n setCountryCode(code)\n setPhone('')\n }\n\n const handlePhoneNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value.replace(/\\D/g, '')\n setPhone(raw.slice(0, maskConfig.maxLength))\n }\n\n return {\n formattedPhoneNumber,\n selectedCountry,\n countries,\n handleCountryChange,\n handlePhoneNumberChange,\n placeholder: maskConfig.placeholder,\n }\n}\n\nexport { getCountryName }\n","export interface PhoneMask {\n mask: string | ((digitCount: number) => string)\n placeholder: string\n maxLength: number\n}\n\nexport const phoneMasks: Record<string, PhoneMask> = {\n BR: {\n mask: (digitCount: number) => {\n return digitCount <= 10 ? '(##) ####-####' : '(##) #####-####'\n },\n placeholder: '(11) 98765-4321',\n maxLength: 11,\n },\n\n US: {\n mask: '(###) ###-####',\n placeholder: '(555) 123-4567',\n maxLength: 10,\n },\n CA: {\n mask: '(###) ###-####',\n placeholder: '(416) 123-4567',\n maxLength: 10,\n },\n\n ES: {\n mask: '### ## ## ##',\n placeholder: '612 34 56 78',\n maxLength: 9,\n },\n\n PT: {\n mask: '### ### ###',\n placeholder: '912 345 678',\n maxLength: 9,\n },\n\n AR: {\n mask: '## ####-####',\n placeholder: '11 1234-5678',\n maxLength: 10,\n },\n\n CL: {\n mask: '# #### ####',\n placeholder: '9 1234 5678',\n maxLength: 9,\n },\n\n MX: {\n mask: '### ### ####',\n placeholder: '555 123 4567',\n maxLength: 10,\n },\n\n CO: {\n mask: '### ### ####',\n placeholder: '300 123 4567',\n maxLength: 10,\n },\n\n PE: {\n mask: '### ### ###',\n placeholder: '987 654 321',\n maxLength: 9,\n },\n}\n\nexport const applyPhoneMask = (value: string, mask: string): string => {\n if (!value || !mask) return value\n\n const numbers = value.replace(/\\D/g, '')\n\n let maskedValue = ''\n let numberIndex = 0\n\n for (let i = 0; i < mask.length && numberIndex < numbers.length; i++) {\n if (mask[i] === '#') {\n maskedValue += numbers[numberIndex]\n numberIndex++\n } else {\n maskedValue += mask[i]\n }\n }\n\n return maskedValue\n}\n\nexport const getDisplayMask = (countryCode: string, digitCount: number): string => {\n const mask = phoneMasks[countryCode]?.mask ?? getDefaultMask().mask\n return typeof mask === 'function' ? mask(digitCount) : mask\n}\n\nexport const removePhoneMask = (value: string | null | undefined): string => {\n if (!value || typeof value !== 'string') return ''\n return value.replace(/\\D/g, '')\n}\n\nexport const isPhoneComplete = (\n value: string,\n countryCode: string,\n): boolean => {\n const mask = phoneMasks[countryCode]\n if (!mask) return value.length >= 7\n\n const numbersOnly = removePhoneMask(value)\n return numbersOnly.length >= mask.maxLength\n}\n\nexport const getDefaultMask = (): PhoneMask => ({\n mask: '###############',\n placeholder: '123456789',\n maxLength: 15,\n})\n","import type { IconProps } from 'nucleo-flags'\nimport * as nucleoFlags from 'nucleo-flags'\n\n\nimport { cn } from '@/lib/cn'\n\nimport { buildFlagRegistry } from './flag-registry'\n\nconst FLAGS = buildFlagRegistry(nucleoFlags as Record<string, unknown>)\n\nexport type FlagCountryCode = keyof typeof FLAGS\n\nexport function toFlagCountryCode(\n countryCode: string | null | undefined,\n): FlagCountryCode | null {\n const normalized = countryCode?.toUpperCase()\n\n return normalized && normalized in FLAGS\n ? (normalized as FlagCountryCode)\n : null\n}\n\nexport function getFlagIcon(countryCode: string | null | undefined) {\n const flag = toFlagCountryCode(countryCode)\n return flag ? FLAGS[flag] : null\n}\n\nexport type FlagIconProps = Omit<IconProps, 'children'> & {\n code: string | null | undefined\n}\n\nexport function FlagIcon({ code, className, ...props }: FlagIconProps) {\n const Icon = getFlagIcon(code)\n if (!Icon) return null\n\n return (\n <Icon\n aria-hidden={props.title ? undefined : true}\n focusable=\"false\"\n className={cn('shrink-0 select-none', className)}\n {...props}\n />\n )\n}\n","import type { IconProps } from 'nucleo-flags'\n\nimport type { ComponentType } from 'react'\n\ntype NucleoFlagsModule = Record<string, unknown>\n\nconst NAME_TO_ISO2: Record<string, string> = {\n Afghanistan: 'AF',\n Albania: 'AL',\n Algeria: 'DZ',\n Andorra: 'AD',\n Angola: 'AO',\n AntiguaBarbuda: 'AG',\n Argentina: 'AR',\n Armenia: 'AM',\n Australia: 'AU',\n Austria: 'AT',\n Azerbaijan: 'AZ',\n Bahamas: 'BS',\n Bahrain: 'BH',\n Bangladesh: 'BD',\n Barbados: 'BB',\n Belarus: 'BY',\n Belgium: 'BE',\n Belize: 'BZ',\n Benin: 'BJ',\n Bhutan: 'BT',\n Bolivia: 'BO',\n BosniaHerzegovina: 'BA',\n Botswana: 'BW',\n Brazil: 'BR',\n Brunei: 'BN',\n Bulgaria: 'BG',\n BurkinaFaso: 'BF',\n Burundi: 'BI',\n Cambodia: 'KH',\n Cameroon: 'CM',\n Canada: 'CA',\n CapeVerde: 'CV',\n CentralAfricanRepublic: 'CF',\n Chad: 'TD',\n Chile: 'CL',\n China: 'CN',\n Colombia: 'CO',\n Comoros: 'KM',\n RepublicCongo: 'CG',\n DemocraticRepublicCongo: 'CD',\n CostaRica: 'CR',\n IvoryCoast: 'CI',\n Croatia: 'HR',\n Cuba: 'CU',\n Cyprus: 'CY',\n Czechia: 'CZ',\n Denmark: 'DK',\n Djibouti: 'DJ',\n Dominica: 'DM',\n DominicanRepublic: 'DO',\n EastTimor: 'TL',\n Ecuador: 'EC',\n Egypt: 'EG',\n ElSalvador: 'SV',\n EquatorialGuinea: 'GQ',\n Eritrea: 'ER',\n Estonia: 'EE',\n Eswatini: 'SZ',\n Ethiopia: 'ET',\n Fiji: 'FJ',\n Finland: 'FI',\n France: 'FR',\n Gabon: 'GA',\n Gambia: 'GM',\n Georgia: 'GE',\n Germany: 'DE',\n Ghana: 'GH',\n Greece: 'GR',\n Grenada: 'GD',\n Guatemala: 'GT',\n Guinea: 'GN',\n GuineaBissau: 'GW',\n Guyana: 'GY',\n Haiti: 'HT',\n Honduras: 'HN',\n HongKong: 'HK',\n Hungary: 'HU',\n Iceland: 'IS',\n India: 'IN',\n Indonesia: 'ID',\n Iran: 'IR',\n Iraq: 'IQ',\n Ireland: 'IE',\n Israel: 'IL',\n Italy: 'IT',\n Jamaica: 'JM',\n Japan: 'JP',\n Jordan: 'JO',\n Kazakhstan: 'KZ',\n Kenya: 'KE',\n Kiribati: 'KI',\n NorthKorea: 'KP',\n SouthKorea: 'KR',\n Kuwait: 'KW',\n Kyrgyzstan: 'KG',\n Laos: 'LA',\n Latvia: 'LV',\n Lebanon: 'LB',\n Lesotho: 'LS',\n Liberia: 'LR',\n Libya: 'LY',\n Liechtenstein: 'LI',\n Lithuania: 'LT',\n Luxembourg: 'LU',\n Macau: 'MO',\n Madagascar: 'MG',\n Malawi: 'MW',\n Malaysia: 'MY',\n Maldives: 'MV',\n Mali: 'ML',\n Malta: 'MT',\n MarshallIslands: 'MH',\n Mauritania: 'MR',\n Mauritius: 'MU',\n Mexico: 'MX',\n Micronesia: 'FM',\n Moldova: 'MD',\n Monaco: 'MC',\n Mongolia: 'MN',\n Montenegro: 'ME',\n Morocco: 'MA',\n Mozanbique: 'MZ',\n Myanmar: 'MM',\n Namibia: 'NA',\n Nauru: 'NR',\n Nepal: 'NP',\n Netherlands: 'NL',\n NewZealand: 'NZ',\n Nicaragua: 'NI',\n Niger: 'NE',\n Nigeria: 'NG',\n Norway: 'NO',\n Oman: 'OM',\n Pakistan: 'PK',\n Palau: 'PW',\n Palestine: 'PS',\n Panama: 'PA',\n PapuaNewGuinea: 'PG',\n Paraguay: 'PY',\n Peru: 'PE',\n Philippines: 'PH',\n Poland: 'PL',\n Portugal: 'PT',\n Qatar: 'QA',\n Romania: 'RO',\n Russia: 'RU',\n Rwanda: 'RW',\n SaintKittsNevis: 'KN',\n SaintLucia: 'LC',\n SaintVincentGrenadines: 'VC',\n Samoa: 'WS',\n SanMarino: 'SM',\n SaoTomePrincipe: 'ST',\n SaudiArabia: 'SA',\n Senegal: 'SN',\n Serbia: 'RS',\n Seychelles: 'SC',\n SierraLeone: 'SL',\n Singapore: 'SG',\n Slovakia: 'SK',\n Slovenia: 'SI',\n SolomonIslands: 'SB',\n Somalia: 'SO',\n SouthAfrica: 'ZA',\n SouthSudan: 'SS',\n Spain: 'ES',\n SriLanka: 'LK',\n Sudan: 'SD',\n Suriname: 'SR',\n Sweden: 'SE',\n Switzerland: 'CH',\n Syria: 'SY',\n Taiwan: 'TW',\n Tajikistan: 'TJ',\n Tanzania: 'TZ',\n Thailand: 'TH',\n Togo: 'TG',\n Tonga: 'TO',\n TrinidadTobago: 'TT',\n Tunisia: 'TN',\n Turkey: 'TR',\n Turkmenistan: 'TM',\n Tuvalu: 'TV',\n Uganda: 'UG',\n Ukraine: 'UA',\n UnitedArabEmirates: 'AE',\n UnitedKingdom: 'GB',\n UnitedStates: 'US',\n Uruguay: 'UY',\n Uzbekistan: 'UZ',\n Vanuatu: 'VU',\n VaticanCity: 'VA',\n Venezuela: 'VE',\n Vietnam: 'VN',\n Yemen: 'YE',\n Zambia: 'ZM',\n Zimbabwe: 'ZW',\n}\n\nexport function buildFlagRegistry(\n nucleoFlagsModule: NucleoFlagsModule,\n): Record<string, ComponentType<IconProps>> {\n const registry: Record<string, ComponentType<IconProps>> = {}\n\n for (const exportName of Object.keys(nucleoFlagsModule)) {\n if (exportName === 'Icon' || !exportName.startsWith('Icon')) continue\n\n const name = exportName.slice(4)\n const component = nucleoFlagsModule[exportName]\n\n if (typeof component !== 'function') continue\n\n const iso2 = NAME_TO_ISO2[name]\n if (iso2) {\n registry[iso2] = component as ComponentType<IconProps>\n }\n }\n\n return registry\n}\n\nexport type NucleoFlagExportToName<\n T extends string,\n> = T extends `Icon${infer Name}` ? Name : never\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { Icon } from '@/components/icon';\nimport type { FillIconName, CustomIconName } from '@/components/icon';\nimport { useElementSize } from '@/hooks/use-element-size';\nimport { Select } from '@/components/ui/select';\n\nimport { Input } from '../input';\n\nexport type InputTimeType = 'date' | 'time' | 'datetime-local';\n\nconst INPUT_TIME_PLACEHOLDERS: Record<InputTimeType, string> = {\n date: 'YYYY-MM-DD',\n time: 'HH:MM',\n 'datetime-local': 'YYYY-MM-DD HH:MM',\n};\n\nconst INPUT_TIME_ICONS: Record<InputTimeType, FillIconName | CustomIconName> = {\n date: 'Calendar',\n time: 'Clock',\n 'datetime-local': 'CalendarClock',\n};\n\nconst INPUT_TIME_LABELS: Record<InputTimeType, string> = {\n date: 'Date',\n time: 'Time',\n 'datetime-local': 'Date & Time',\n};\n\nexport interface InputTimeProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n type?: InputTimeType;\n defaultType?: InputTimeType;\n onTypeChange?: (type: InputTimeType) => void;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n align?: 'start' | 'center' | 'end';\n}\n\nfunction InputTime({\n type: typeProp,\n defaultType = 'date',\n onTypeChange,\n className,\n placeholder,\n align = 'start',\n ...props\n}: InputTimeProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const { width: triggerWidth } = useElementSize(triggerRef);\n\n const [hasValue, setHasValue] = React.useState(\n !!(props.value ?? props.defaultValue),\n );\n\n const [internalType, setInternalType] = React.useState(defaultType);\n const type = typeProp ?? internalType;\n\n const iconName = INPUT_TIME_ICONS[type] ?? INPUT_TIME_ICONS.date;\n const resolvedPlaceholder =\n placeholder ?? INPUT_TIME_PLACEHOLDERS[type] ?? '';\n\n const handleTypeChange = (newType: string) => {\n setInternalType(newType as InputTimeType);\n onTypeChange?.(newType as InputTimeType);\n };\n\n const handleInputClick = () => {\n inputRef.current?.showPicker?.();\n };\n\n return (\n <div className=\"flex w-full\">\n <Input\n ref={inputRef}\n type={type}\n placeholder={resolvedPlaceholder}\n onClick={handleInputClick}\n className={cn(\n 'rounded-r-none focus:z-10 [-moz-appearance:textfield] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-inner-spin-button]:hidden [&::-webkit-outer-spin-button]:hidden pr-3',\n !hasValue && 'text-sm text-muted-foreground/50',\n className,\n )}\n onChange={(e) => {\n setHasValue(e.target.value !== '');\n props.onChange?.(e);\n }}\n {...props}\n />\n\n <div className=\"relative shrink-0\">\n <Select value={type} onValueChange={handleTypeChange} disabled={typeProp !== undefined}>\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-l-none border-l-0 focus:z-10 bg-accent',\n typeProp !== undefined && '[&>svg]:hidden',\n )}\n >\n <Select.Value>\n <Icon variant=\"fill\" name={iconName} className=\"size-4\" />\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-max\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {(Object.keys(INPUT_TIME_ICONS) as InputTimeType[]).map((t) => (\n <Select.Item key={t} value={t}>\n <div className=\"flex items-center gap-2\">\n <Icon variant=\"fill\" name={INPUT_TIME_ICONS[t]} className=\"size-4\" />\n <span className=\"text-sm\">{INPUT_TIME_LABELS[t]}</span>\n </div>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n {typeProp !== undefined && (\n <div\n className=\"absolute inset-0 cursor-pointer\"\n onClick={handleInputClick}\n />\n )}\n </div>\n </div>\n );\n}\n\nInputTime.displayName = 'InputTime';\n\nexport { InputTime };\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { Select } from '@/components/ui/select';\n\nexport interface InputTimePickerProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** The currently selected date. When `undefined`, both selects start empty. */\n date: Date | undefined;\n /**\n * Callback invoked with a new `Date` whenever the hour or minute changes.\n * Only the respective unit is mutated; seconds and milliseconds are preserved.\n */\n setDate: (date: Date | undefined) => void;\n /** When `true`, both hour and minute Selects are disabled. */\n disabled?: boolean;\n /** Placeholder shown in the hour Select when no value is picked. Defaults to `\"HH\"`. */\n hourPlaceholder?: string;\n /** Placeholder shown in the minute Select when no value is picked. Defaults to `\"MM\"`. */\n minutePlaceholder?: string;\n /** `aria-label` for the hour Select trigger. Defaults to `\"Hours\"`. */\n hourAriaLabel?: string;\n /** `aria-label` for the minute Select trigger. Defaults to `\"Minutes\"`. */\n minuteAriaLabel?: string;\n}\n\n/**\n * Controlled hour:minute picker composed of two {@link Select} dropdowns.\n *\n * Displays a single-row selector with hours (00–23) on the left,\n * a colon separator, and minutes (00–59) on the right.\n *\n * When {@link InputTimePickerProps.date} is `undefined`, both selects start empty with\n * English placeholders (`HH` / `MM`). Picking a value creates or mutates a `Date`\n * and passes it to {@link InputTimePickerProps.setDate}.\n *\n * @example\n * const [date, setDate] = useState<Date>();\n * <InputTimePicker date={date} setDate={setDate} />\n *\n * @example\n * <InputTimePicker\n * date={date}\n * setDate={setDate}\n * hourPlaceholder=\"Hora\"\n * minutePlaceholder=\"Minuto\"\n * hourAriaLabel=\"Horas\"\n * minuteAriaLabel=\"Minutos\"\n * />\n */\nconst InputTimePicker = React.forwardRef<HTMLDivElement, InputTimePickerProps>(\n (\n {\n date,\n setDate,\n disabled,\n className,\n hourPlaceholder = 'HH',\n minutePlaceholder = 'MM',\n hourAriaLabel = 'Hours',\n minuteAriaLabel = 'Minutes',\n ...props\n },\n ref,\n ) => {\n const hours = React.useMemo(() => {\n return Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n }, []);\n\n const minutes = React.useMemo(() => {\n return Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));\n }, []);\n\n const handleHourChange = (hour: string) => {\n const newDate = date ? new Date(date.getTime()) : new Date();\n newDate.setHours(parseInt(hour, 10));\n setDate(newDate);\n };\n\n const handleMinuteChange = (minute: string) => {\n const newDate = date ? new Date(date.getTime()) : new Date();\n newDate.setMinutes(parseInt(minute, 10));\n setDate(newDate);\n };\n\n const selectedHour = date ? String(date.getHours()).padStart(2, '0') : '';\n const selectedMinute = date\n ? String(date.getMinutes()).padStart(2, '0')\n : '';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-lg bg-input text-sm ring-offset-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 min-w-24',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className,\n )}\n {...props}\n >\n <Select\n onValueChange={handleHourChange}\n value={selectedHour}\n disabled={disabled}\n >\n <Select.Trigger\n removeIcon\n aria-label={hourAriaLabel}\n className=\"h-auto w-fit border-none bg-transparent focus:ring-0 p-3\"\n >\n <Select.Value placeholder={hourPlaceholder} />\n </Select.Trigger>\n <Select.Content>\n {hours.map((hour) => (\n <Select.Item key={hour} value={hour}>\n {hour}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n\n <span className=\"w-full text-center text-muted-foreground\">:</span>\n\n <Select\n onValueChange={handleMinuteChange}\n value={selectedMinute}\n disabled={disabled}\n >\n <Select.Trigger\n removeIcon\n className=\"h-auto w-fit border-none bg-transparent focus:ring-0 p-3\"\n aria-label={minuteAriaLabel}\n >\n <Select.Value placeholder={minutePlaceholder} />\n </Select.Trigger>\n <Select.Content>\n {minutes.map((minute) => (\n <Select.Item key={minute} value={minute}>\n {minute}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n );\n },\n);\n\nInputTimePicker.displayName = 'InputTimePicker';\n\nexport { InputTimePicker };\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/cn';\n\nimport { useElementSize } from '@/hooks/use-element-size';\n\nimport { Input } from '@/components/ui/input';\nimport { Select } from '@/components/ui/select';\n\nexport type TimeUnit =\n | 'seconds'\n | 'minutes'\n | 'hours'\n | 'days'\n | 'weeks'\n | 'months'\n | 'years';\n\nexport interface TimeUnitLabel {\n /** Abbreviated label shown in the Select trigger. */\n short: string;\n /** Full label shown in the Select dropdown. */\n label: string;\n}\n\nexport interface TimeUnitOption {\n /** Unit identifier used in the Select value. */\n value: TimeUnit;\n /** Number of minutes in one unit of this type. */\n toMinutes: number;\n}\n\n/**\n * All supported time units with their minute-conversion factors.\n *\n * Months are approximated as 30 days and years as 365 days.\n */\nconst TIME_UNITS: TimeUnitOption[] = [\n { value: 'seconds', toMinutes: 1 / 60 },\n { value: 'minutes', toMinutes: 1 },\n { value: 'hours', toMinutes: 60 },\n { value: 'days', toMinutes: 60 * 24 },\n { value: 'weeks', toMinutes: 60 * 24 * 7 },\n { value: 'months', toMinutes: 60 * 24 * 30 },\n { value: 'years', toMinutes: 60 * 24 * 365 },\n];\n\n/** English default labels for each time unit. */\nconst DEFAULT_UNIT_LABELS: Record<TimeUnit, TimeUnitLabel> = {\n seconds: { short: 's', label: 'Seconds' },\n minutes: { short: 'm', label: 'Minutes' },\n hours: { short: 'h', label: 'Hours' },\n days: { short: 'd', label: 'Days' },\n weeks: { short: 'w', label: 'Weeks' },\n months: { short: 'mo', label: 'Months' },\n years: { short: 'y', label: 'Years' },\n};\n\nexport interface InputTimeUnitProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /** Current value in **minutes**. Drives the input display via unit conversion. */\n value?: number;\n /** Unit selected by default when the user has not manually picked one. */\n defaultUnit?: TimeUnit;\n /** When `true`, the unit Select is disabled — only the numeric input is editable. */\n disableUnitSelect?: boolean;\n /** Restrict which units appear in the dropdown. An empty or omitted array shows all units. */\n allowedUnits?: TimeUnit[];\n /**\n * Called with the total value in **minutes**.\n * Receives `undefined` when the input is empty or invalid.\n */\n onChange?: (valueInMinutes: number | undefined) => void;\n /** Called whenever the user picks a different unit. */\n onUnitChange?: (unit: TimeUnit) => void;\n /** Alignment of the unit dropdown relative to the trigger. */\n align?: 'start' | 'center' | 'end';\n /** Extra classes for the outermost wrapper div. */\n containerClassName?: string;\n /**\n * Override labels for specific time units. Merged with English defaults.\n * Only the units you provide will be overridden; the rest keep their defaults.\n *\n * @example\n * labels={{ hours: { short: 'hrs', label: 'Horas' } }}\n */\n labels?: Partial<Record<TimeUnit, Partial<TimeUnitLabel>>>;\n}\n\n/**\n * Numeric input paired with a time-unit Select.\n *\n * Accepts and emits values in **minutes**, converting the displayed number\n * based on the selected unit (seconds, minutes, hours, days, weeks, months, years).\n *\n * On the left, an {@link Input} for the numeric quantity (digits and decimal dots only).\n * On the right, a {@link Select} for the time unit, showing a short abbreviation\n * with English defaults (`s`, `m`, `h`, `d`, `w`, `mo`, `y`).\n *\n * When the user picks a different unit, the displayed value is re-computed\n * so the underlying minute value stays constant — only the representation changes.\n *\n * @example\n * // Basic usage: pick a duration\n * <InputTimeUnit\n * value={5}\n * onChange={(minutes) => console.log(minutes)}\n * />\n *\n * @example\n * // Restrict to hours and days only, with custom labels\n * <InputTimeUnit\n * allowedUnits={['hours', 'days']}\n * defaultUnit=\"hours\"\n * labels={{ hours: { short: 'hrs' }, days: { short: 'dias' } }}\n * />\n */\nconst InputTimeUnit = React.forwardRef<HTMLInputElement, InputTimeUnitProps>(\n (props, ref) => {\n const {\n value,\n onChange,\n onUnitChange,\n className,\n containerClassName,\n disabled,\n disableUnitSelect = false,\n allowedUnits,\n placeholder,\n defaultUnit = 'minutes',\n align = 'start',\n labels,\n ...inputProps\n } = props;\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const { width: triggerWidth } = useElementSize(triggerRef);\n\n const [userPickedUnit, setUserPickedUnit] = React.useState(false);\n const [selectedUnit, setSelectedUnit] =\n React.useState<TimeUnit>(defaultUnit);\n\n const [inputValue, setInputValue] = React.useState<string>('');\n\n const availableUnits = React.useMemo(() => {\n if (!allowedUnits || allowedUnits.length === 0) {\n return TIME_UNITS;\n }\n\n return TIME_UNITS.filter((unit) => allowedUnits.includes(unit.value));\n }, [allowedUnits]);\n\n /** Resolved labels, merging user overrides with English defaults. */\n const resolvedLabels = React.useMemo(() => {\n const merged: Record<TimeUnit, TimeUnitLabel> = { ...DEFAULT_UNIT_LABELS };\n\n if (labels) {\n for (const unit of Object.keys(labels) as TimeUnit[]) {\n merged[unit] = {\n ...merged[unit],\n ...labels[unit],\n };\n }\n }\n\n return merged;\n }, [labels]);\n\n /** Resolves the selected unit to its {@link TimeUnitOption}, falling back to the first available. */\n const selectedUnitOption = React.useMemo(\n () =>\n availableUnits.find((u) => u.value === selectedUnit) ??\n availableUnits[0],\n [selectedUnit, availableUnits],\n );\n\n /**\n * Sanitizes the raw input (only digits, dots, and commas → dot),\n * then converts to minutes via the currently selected unit\n * and calls {@link InputTimeUnitProps.onChange}.\n */\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const rawValue = e.target.value\n .replace(/[^0-9.,]/g, '')\n .replace(',', '.');\n\n setInputValue(rawValue);\n\n if (rawValue === '' || rawValue === '.') {\n onChange?.(undefined);\n return;\n }\n\n const numericValue = parseFloat(rawValue);\n\n if (!isNaN(numericValue)) {\n const valueInMinutes = numericValue * selectedUnitOption.toMinutes;\n onChange?.(valueInMinutes);\n }\n };\n\n /**\n * Switches the selected unit, marks it as user-picked (to ignore future\n * `defaultUnit` changes), and re-computes the displayed value from the\n * current minute value so the actual amount stays the same.\n */\n const handleUnitChange = (newUnit: TimeUnit) => {\n setUserPickedUnit(true);\n setSelectedUnit(newUnit);\n\n onUnitChange?.(newUnit);\n\n if (value !== undefined && value !== null) {\n const newUnitOption = availableUnits.find((u) => u.value === newUnit);\n\n if (newUnitOption) {\n const displayValue = value / newUnitOption.toMinutes;\n\n setInputValue(\n Number.isInteger(displayValue)\n ? displayValue.toString()\n : displayValue.toFixed(2).replace(/\\.?0+$/, ''),\n );\n }\n }\n };\n\n /**\n * Syncs the selected unit to `defaultUnit` as long as the user\n * hasn't manually picked one.\n */\n React.useLayoutEffect(() => {\n if (!userPickedUnit) {\n setSelectedUnit(defaultUnit);\n }\n }, [defaultUnit, userPickedUnit]);\n\n /**\n * Converts the controlled `value` (in minutes) back to a display string\n * using the current unit's {@link TimeUnitOption.toMinutes} factor.\n */\n React.useEffect(() => {\n if (value === undefined || value === null) {\n setInputValue('');\n return;\n }\n\n const displayValue = value / selectedUnitOption.toMinutes;\n\n setInputValue(\n Number.isInteger(displayValue)\n ? displayValue.toString()\n : displayValue.toFixed(2).replace(/\\.?0+$/, ''),\n );\n }, [value, selectedUnitOption.toMinutes]);\n\n return (\n <div className={cn('flex w-full', containerClassName)}>\n <Input\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n disabled={disabled}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n className={cn('rounded-r-none focus:z-10', className)}\n {...inputProps}\n />\n\n <Select\n value={selectedUnit}\n onValueChange={(value) => handleUnitChange(value as TimeUnit)}\n disabled={disabled || disableUnitSelect}\n >\n <Select.Trigger\n ref={triggerRef}\n className={cn(\n 'w-fit! rounded-l-none border-l-0 focus:z-10 bg-accent',\n disableUnitSelect && '[&_svg]:hidden',\n )}\n >\n <Select.Value>\n <span className=\"text-sm font-mono\">\n {resolvedLabels[selectedUnitOption.value].short}\n </span>\n </Select.Value>\n </Select.Trigger>\n\n <Select.Content\n align={align}\n className=\"min-w-42\"\n style={triggerWidth > 0 ? { width: triggerWidth } : {}}\n >\n {availableUnits.map((unit) => (\n <Select.Item key={unit.value} value={unit.value}>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-mono\">\n {resolvedLabels[unit.value].short}\n </span>\n <span className=\"opacity-50\">\n {resolvedLabels[unit.value].label}\n </span>\n </div>\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n );\n },\n);\n\nInputTimeUnit.displayName = 'InputTimeUnit';\n\nexport { TIME_UNITS, InputTimeUnit };\n","'use client'\n\nimport { Fragment, type ReactNode } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nimport type { IconType } from '@/components/icon'\nimport { Icon } from '@/components/icon'\n\nfunction isMac(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n /Mac|iPhone|iPad/i.test(navigator.userAgent)\n )\n}\n\nexport type KbdKey =\n | 'ArrowUp'\n | 'ArrowDown'\n | 'ArrowLeft'\n | 'ArrowRight'\n | 'Enter'\n | 'Escape'\n | 'Tab'\n | 'Backspace'\n | 'Delete'\n | 'Space'\n | 'Mod'\n | 'Command'\n | 'Meta'\n | 'Super'\n | 'Control'\n | 'Ctrl'\n | 'Shift'\n | 'Alt'\n | 'Option'\n | 'F1'\n | 'F2'\n | 'F3'\n | 'F4'\n | 'F5'\n | 'F6'\n | 'F7'\n | 'F8'\n | 'F9'\n | 'F10'\n | 'F11'\n | 'F12'\n | (string & NonNullable<unknown>)\n\nconst arrowIconMap: Record<string, IconType> = {\n arrowup: 'ArrowUp',\n arrowdown: 'ArrowDown',\n arrowleft: 'ArrowLeft',\n arrowright: 'ArrowRight',\n}\n\nconst modifierMacMap: Record<string, string> = {\n mod: '⌘',\n command: '⌘',\n meta: '⌘',\n super: '⌘',\n control: '⌃',\n ctrl: '⌃',\n shift: '⇧',\n alt: '⌥',\n option: '⌥',\n}\n\nconst modifierWinMap: Record<string, string> = {\n mod: 'Ctrl',\n command: 'Ctrl',\n meta: 'Meta',\n super: 'Win',\n control: 'Ctrl',\n ctrl: 'Ctrl',\n shift: 'Shift',\n alt: 'Alt',\n option: 'Alt',\n}\n\nfunction resolveKeyText(key: string): string | null {\n const lower = key.toLowerCase()\n\n if (lower in arrowIconMap) return null\n\n const modifierMap = isMac() ? modifierMacMap : modifierWinMap\n if (lower in modifierMap) return modifierMap[lower]\n\n if (lower === 'escape') return 'Esc'\n if (lower === 'backspace') return 'Back'\n if (lower === 'delete') return 'Del'\n if (lower === 'space') return 'Space'\n if (lower === 'tab') return 'Tab'\n if (lower === 'enter') return 'Enter'\n if (/^f\\d{1,2}$/.test(lower)) return key\n\n return key\n}\n\nfunction resolveKeyIcon(key: string): IconType | null {\n const lower = key.toLowerCase()\n return arrowIconMap[lower] ?? null\n}\n\ntype KbdInput = KbdKey | KbdInput[]\n\nfunction normalize(input: KbdKey | KbdKey[] | KbdKey[][]): KbdInput {\n if (typeof input === 'string') return input\n if (input.length === 0) return []\n if (typeof input[0] === 'string') return input as KbdKey[]\n return input as KbdInput[]\n}\n\nfunction SingleKey({ kbdKey }: { kbdKey: KbdKey }) {\n const icon = resolveKeyIcon(kbdKey)\n const text = resolveKeyText(kbdKey)\n return (\n <kbd className=\"inline-flex items-center justify-center gap-1 rounded-md border bg-muted/60 px-1.5 py-0.5 font-mono text-[0.8em] text-muted-foreground shadow-[0_1px_0_0_var(--color-border)]\">\n {icon ? <Icon name={icon} className=\"size-3\" /> : (text ?? kbdKey)}\n </kbd>\n )\n}\n\nfunction renderKeys(\n keys: KbdInput,\n separator: ReactNode,\n thenSeparator: ReactNode,\n): ReactNode {\n if (typeof keys === 'string') {\n return <SingleKey kbdKey={keys} />\n }\n\n if (keys.length === 0) return null\n\n const sep = typeof keys[0] === 'string' ? separator : thenSeparator\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n {keys.map((k, i) => (\n <Fragment key={i}>\n {i > 0 ? sep : null}\n {renderKeys(k, separator, thenSeparator)}\n </Fragment>\n ))}\n </span>\n )\n}\n\nexport type KbdProps = {\n keys: KbdKey | KbdKey[] | KbdKey[][]\n className?: string\n separator?: ReactNode\n thenSeparator?: ReactNode\n}\n\nexport function Kbd({\n keys,\n className,\n separator = '+',\n thenSeparator = 'then',\n}: KbdProps) {\n const groups = normalize(keys)\n\n if (Array.isArray(groups) && groups.length === 0) return null\n\n return (\n <span\n className={cn(\n 'pointer-events-none shrink-0 select-none inline-flex items-center gap-1',\n className,\n )}\n >\n {renderKeys(groups, separator, thenSeparator)}\n </span>\n )\n}\n","import React from 'react'\n\nexport const LanguageSwitch: React.FC = () => null\n","'use client';\nimport type { HTMLAttributes } from 'react';\n\nimport type { MarqueeProps as FastMarqueeProps } from 'react-fast-marquee';\nimport FastMarquee from 'react-fast-marquee';\n\nimport { cn } from '@/lib/cn';\n\nexport type MarqueeProps = HTMLAttributes<HTMLDivElement>;\nexport const Marquee = ({ className, ...props }: MarqueeProps) => (\n <div\n className={cn('relative w-full overflow-hidden', className)}\n {...props}\n />\n);\n\nexport type MarqueeContentProps = FastMarqueeProps;\nexport const MarqueeContent = ({\n loop = 0,\n autoFill = true,\n pauseOnHover = true,\n ...props\n}: MarqueeContentProps) => (\n <FastMarquee\n autoFill={autoFill}\n loop={loop}\n pauseOnHover={pauseOnHover}\n {...props}\n />\n);\n\nexport type MarqueeFadeProps = HTMLAttributes<HTMLDivElement> & {\n side: 'left' | 'right';\n};\nexport const MarqueeFade = ({\n className,\n side,\n ...props\n}: MarqueeFadeProps) => (\n <div\n className={cn(\n 'absolute top-0 bottom-0 z-10 h-full w-24 from-background to-transparent',\n side === 'left' ? 'left-0 bg-linear-to-r' : 'right-0 bg-linear-to-l',\n className,\n )}\n {...props}\n />\n);\n\nexport type MarqueeItemProps = HTMLAttributes<\n HTMLDivElement | HTMLAnchorElement\n> & {\n href?: string;\n};\n\nexport const MarqueeItem = ({\n href,\n className,\n ...props\n}: MarqueeItemProps) => {\n const commonClassName = cn('mx-2 shrink-0 object-contain', className);\n\n return href ? (\n <a\n href={href}\n className={commonClassName}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n />\n ) : (\n <div\n className={commonClassName}\n {...(props as React.HTMLAttributes<HTMLDivElement>)}\n />\n );\n};\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { AnimatePresence, motion } from 'motion/react'\n\nimport { Icon } from '@/components/icon'\n\nexport function NetworkStatus() {\n\n const [isOnline, setIsOnline] = useState(true)\n const [showBack, setShowBack] = useState(false)\n\n useEffect(() => {\n setIsOnline(navigator.onLine)\n\n const handleOffline = () => {\n setIsOnline(false)\n setShowBack(false)\n }\n\n const handleOnline = () => {\n setIsOnline(true)\n setShowBack(true)\n\n setTimeout(() => {\n setShowBack(false)\n }, 3000)\n }\n\n window.addEventListener('offline', handleOffline)\n window.addEventListener('online', handleOnline)\n\n return () => {\n window.removeEventListener('offline', handleOffline)\n window.removeEventListener('online', handleOnline)\n }\n }, [])\n\n const visible = !isOnline || showBack\n\n return (\n <AnimatePresence>\n {visible && (\n <motion.div\n key=\"network-status\"\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className=\"fixed top-0 left-0 right-0 z-50 flex justify-center pointer-events-none\"\n >\n <div\n className={\n isOnline\n ? 'flex items-center gap-2 px-4 py-2 text-xs font-medium rounded-b-xl bg-success/15 text-success border border-success/20 border-t-0 shadow-sm'\n : 'flex items-center gap-2 px-4 py-2 text-xs font-medium rounded-b-xl bg-destructive/10 text-destructive border border-destructive/20 border-t-0 shadow-sm'\n }\n >\n <Icon\n name={isOnline ? 'Wifi' : 'WifiOff'}\n className=\"size-3.5 shrink-0\"\n />\n <span>{isOnline ? 'back' : 'offline'}</span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { Popover as PopoverPrimitive } from '@base-ui/react/popover'\n\nimport { cn } from '@/lib/cn'\n\nconst PopoverAnchorContext = React.createContext<{\n anchor: HTMLElement | null\n setAnchor: (el: HTMLElement | null) => void\n} | null>(null)\n\nfunction PopoverRoot({ children, ...props }: PopoverPrimitive.Root.Props) {\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null)\n\n return (\n <PopoverAnchorContext.Provider value={{ anchor, setAnchor }}>\n <PopoverPrimitive.Root data-slot=\"popover\" {...props}>\n {children}\n </PopoverPrimitive.Root>\n </PopoverAnchorContext.Provider>\n )\n}\n\nfunction PopoverTrigger({\n asChild,\n children,\n ...props\n}: PopoverPrimitive.Trigger.Props & {\n asChild?: boolean\n}) {\n if (asChild && React.isValidElement(children)) {\n return (\n <PopoverPrimitive.Trigger\n data-slot=\"popover-trigger\"\n nativeButton={\n typeof children.type === 'string' ? children.type === 'button' : true\n }\n render={children as React.ReactElement<Record<string, unknown>>}\n {...props}\n />\n )\n }\n\n return (\n <PopoverPrimitive.Trigger\n data-slot=\"popover-trigger\"\n className=\"cursor-pointer\"\n {...props}\n >\n {children}\n </PopoverPrimitive.Trigger>\n )\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n side,\n sideOffset = 4,\n alignOffset,\n showArrow = false,\n children,\n ...props\n}: PopoverPrimitive.Popup.Props &\n Pick<\n PopoverPrimitive.Positioner.Props,\n 'align' | 'side' | 'sideOffset' | 'alignOffset'\n > & {\n showArrow?: boolean\n }) {\n const anchorCtx = React.useContext(PopoverAnchorContext)\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n data-slot=\"popover-positioner\"\n align={align}\n side={side}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n anchor={anchorCtx?.anchor ?? undefined}\n className=\"z-50\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n 'bg-popover text-popover-foreground z-50 w-72 rounded-lg border p-4 shadow-md outline-hidden origin-(--transform-origin)',\n 'transition-[transform,scale,opacity] duration-150 ease-out',\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:scale-95 data-ending-style:opacity-0 data-ending-style:duration-100 data-ending-style:ease-in',\n className,\n )}\n {...props}\n >\n {children}\n {showArrow && (\n <PopoverPrimitive.Arrow className=\"-my-px flex data-[side=bottom]:top-[-6px] data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 data-[side=left]:right-[-10px] data-[side=left]:rotate-90 data-[side=right]:left-[-10px] data-[side=right]:-rotate-90\">\n <svg width=\"14\" height=\"7\" viewBox=\"0 0 14 7\" fill=\"none\">\n <path\n d=\"M0 7L6.29289 0.707107C6.68342 0.316583 7.31658 0.316583 7.70711 0.707107L14 7H0Z\"\n className=\"fill-popover drop-shadow-[0_1px_0_var(--border)]\"\n />\n </svg>\n </PopoverPrimitive.Arrow>\n )}\n </PopoverPrimitive.Popup>\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n children,\n ...props\n}: React.ComponentProps<'span'>) {\n const anchorCtx = React.useContext(PopoverAnchorContext)\n\n return (\n <span\n data-slot=\"popover-anchor\"\n ref={(el) => anchorCtx?.setAnchor(el)}\n {...props}\n >\n {children}\n </span>\n )\n}\n\nconst Popover = Object.assign(PopoverRoot, { Trigger: PopoverTrigger, Content: PopoverContent, Anchor: PopoverAnchor })\nexport { Popover }\n","'use client'\n\nimport { Progress as ProgressPrimitive } from '@base-ui/react/progress'\n\nimport { cn } from '@/lib/cn'\n\nfunction ProgressRoot({\n className,\n children,\n value,\n ...props\n}: ProgressPrimitive.Root.Props) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn('flex flex-wrap gap-3', className)}\n style={\n {\n '--progress-color': 'var(--primary)',\n } as React.CSSProperties\n }\n {...props}\n >\n {children}\n\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </ProgressPrimitive.Root>\n )\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n 'bg-card h-1 rounded-full relative flex w-full items-center overflow-x-hidden',\n className,\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n )\n}\n\nfunction ProgressIndicator({\n className,\n ...props\n}: ProgressPrimitive.Indicator.Props) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn('bg-(--progress-color) h-full transition-all', className)}\n {...props}\n />\n )\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n return (\n <ProgressPrimitive.Label\n className={cn('text-sm font-medium', className)}\n data-slot=\"progress-label\"\n {...props}\n />\n )\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n return (\n <ProgressPrimitive.Value\n className={cn(\n 'text-muted-foreground ml-auto text-sm tabular-nums',\n className,\n )}\n data-slot=\"progress-value\"\n {...props}\n />\n )\n}\n\nconst Progress = Object.assign(ProgressRoot, { Track: ProgressTrack, Indicator: ProgressIndicator, Label: ProgressLabel, Value: ProgressValue })\nexport { Progress }\n","'use client'\n\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio'\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group'\n\nimport { cn } from '@/lib/cn'\n\nfunction RadioGroupRoot({\n className,\n ...props\n}: RadioGroupPrimitive.Props) {\n return (\n <RadioGroupPrimitive\n data-slot=\"radio-group\"\n className={cn('grid gap-3', className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: RadioPrimitive.Root.Props) {\n return (\n <RadioPrimitive.Root\n data-slot=\"radio-group-item\"\n className={cn(\n 'relative flex items-center justify-center border-input data-checked:bg-primary data-checked:text-primary-foreground data-checked:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] cursor-pointer data-disabled:cursor-not-allowed data-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <RadioPrimitive.Indicator className=\"flex items-center justify-center text-current data-unchecked:hidden\">\n <svg\n width=\"6\"\n height=\"6\"\n viewBox=\"0 0 6 6\"\n fill=\"currentcolor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"3\" cy=\"3\" r=\"3\" />\n </svg>\n </RadioPrimitive.Indicator>\n </RadioPrimitive.Root>\n )\n}\n\nconst RadioGroup = Object.assign(RadioGroupRoot, { Item: RadioGroupItem })\nexport { RadioGroup }\n","'use client'\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { useInfiniteCustomQuery } from '@/hooks/use-infinite-custom-query'\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Loader } from '@/components/ui/loader'\n\nimport { Drawer } from '@/components/ui/drawer'\nimport { Input } from '@/components/ui/input'\nimport { Popover } from '@/components/ui/popover'\n\nexport interface SelectInfiniteScrollProps<T extends object> {\n search?: boolean\n\n value: string\n onValueChange: (value: string) => void\n /** Fires when the resolved selected item changes (including when cleared). */\n onSelectedItemChange?: (item: T | null) => void\n disabled?: boolean\n\n id?: string\n className?: string\n\n enabled?: boolean\n queryKey: (string | undefined)[]\n queryFn: (params: { pageParam?: unknown; search: string }) => Promise<T[]>\n options?: Record<string, unknown>\n\n getItemValue: (item: T) => string\n renderItem: (item: T, isSelected: boolean) => React.ReactNode\n renderSelectedValue?: (item: T) => React.ReactNode\n\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n contentTitle?: string\n}\n\nfunction SelectInfiniteScroll<T extends object>({\n value,\n onValueChange,\n onSelectedItemChange,\n disabled = false,\n search: searchProp = false,\n id,\n className,\n queryKey,\n queryFn,\n enabled = true,\n options,\n getItemValue,\n renderItem,\n renderSelectedValue,\n placeholder,\n searchPlaceholder = 'Search…',\n emptyText = 'No results found.',\n contentTitle,\n}: SelectInfiniteScrollProps<T>) {\n const isMobile = useIsMobile()\n\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n\n const [debouncedSearch, setDebouncedSearch] = useState('')\n const [selectedItem, setSelectedItem] = useState<T | null>(null)\n\n const scrollableRef = useRef<HTMLDivElement>(null)\n const searchInputRef = useRef<HTMLInputElement>(null)\n const onSelectedItemChangeRef = useRef(onSelectedItemChange)\n onSelectedItemChangeRef.current = onSelectedItemChange\n\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n isFetching,\n } = useInfiniteCustomQuery<T>({\n queryKey: debouncedSearch ? [...queryKey, debouncedSearch] : queryKey,\n queryFn: ({ pageParam }) => queryFn({ pageParam, search: debouncedSearch }),\n enabled,\n options,\n })\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = e.currentTarget\n\n if (\n scrollHeight - scrollTop - clientHeight < 100 &&\n hasNextPage &&\n !isFetchingNextPage\n ) {\n fetchNextPage()\n }\n }\n\n const handleSelect = useCallback(\n (item: T) => {\n onValueChange(getItemValue(item))\n setSelectedItem(item)\n setOpen(false)\n setSearch('')\n },\n [onValueChange, getItemValue],\n )\n\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next)\n if (!next) setSearch('')\n }, [])\n\n const isPlaceholder = !selectedItem\n\n const triggerClassName = cn(\n 'border-transparent text-foreground flex h-10 w-full items-center justify-between gap-2 rounded-xl bg-input px-4 py-2 text-sm',\n 'transition-[color] disabled:cursor-not-allowed disabled:opacity-75',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px] cursor-pointer outline-none',\n isPlaceholder && 'text-muted-foreground/50',\n !isPlaceholder && 'pl-2',\n className,\n )\n\n const TriggerBody = (\n <>\n <span className=\"flex-1 min-w-0 truncate text-left flex items-center gap-2\">\n {selectedItem\n ? (renderSelectedValue?.(selectedItem) ?? getItemValue(selectedItem))\n : placeholder}\n </span>\n\n {isFetching && !open ? (\n <span className=\"size-4 border-2 border-muted-foreground/30 border-t-muted-foreground rounded-full animate-spin shrink-0\" />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"text-muted-foreground/80 shrink-0 ml-auto\"\n />\n )}\n </>\n )\n\n const DropdownContent = (\n <>\n {searchProp && (\n <div className=\"p-2 relative\">\n <Icon\n name=\"Magnifier\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none size-4 z-1\"\n />\n\n <Input\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"px-11 h-12 sm:h-10 text-sm\"\n autoComplete=\"off\"\n />\n\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch('')}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-2 hover:bg-muted rounded-lg\"\n >\n <Icon name=\"Xmark\" size={13} />\n </button>\n )}\n </div>\n )}\n\n <div\n ref={scrollableRef}\n onScroll={handleScroll}\n onWheel={(e) => e.stopPropagation()}\n className=\"scroll-fade-y overflow-y-auto max-h-64 p-1\"\n >\n {isLoading ? (\n <Loader className=\"flex items-center justify-center p-2 lg:p-4\" />\n ) : data.length === 0 ? (\n <p className=\"text-center text-muted-foreground text-sm py-6 px-2\">\n {emptyText}\n </p>\n ) : (\n <>\n {data.map((item) => {\n const itemValue = getItemValue(item)\n const isSelected = value === itemValue\n\n return (\n <button\n key={itemValue}\n type=\"button\"\n className={cn(\n 'relative flex w-full cursor-pointer items-center p-2.5 rounded-lg outline-none select-none',\n 'transition-colors',\n isSelected\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n onClick={() => handleSelect(item)}\n >\n {renderItem(item, isSelected)}\n </button>\n )\n })}\n\n {isFetchingNextPage && (\n <div className=\"py-2\">\n <Loader variant=\"clean\" />\n </div>\n )}\n </>\n )}\n </div>\n </>\n )\n\n useEffect(() => {\n if (!value) {\n setSelectedItem(null)\n return\n }\n\n if (selectedItem && getItemValue(selectedItem) === value) return\n\n const found = data.find((item) => getItemValue(item) === value)\n if (found) setSelectedItem(found)\n }, [value, data, selectedItem, getItemValue])\n\n useEffect(() => {\n onSelectedItemChangeRef.current?.(selectedItem)\n }, [selectedItem])\n\n useEffect(() => {\n if (open) {\n const timer = setTimeout(() => searchInputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedSearch(search), 300)\n return () => clearTimeout(timer)\n }, [search])\n\n if (isMobile) {\n return (\n <>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n onClick={() => !disabled && handleOpenChange(true)}\n className={triggerClassName}\n >\n {TriggerBody}\n </button>\n\n <Drawer open={open} onOpenChange={handleOpenChange} direction=\"bottom\">\n <Drawer.Content\n title={contentTitle ?? placeholder ?? 'Select'}\n showDivider\n >\n <div className=\"pb-6\">{DropdownContent}</div>\n </Drawer.Content>\n </Drawer>\n </>\n )\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild disabled={disabled}>\n <button id={id} type=\"button\" className={triggerClassName}>\n {TriggerBody}\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n className=\"p-0 rounded-xl border-transparent glass-popover text-popover-foreground shadow-md\"\n style={{ width: 'var(--anchor-width)' }}\n >\n {DropdownContent}\n </Popover.Content>\n </Popover>\n )\n}\n\nexport { SelectInfiniteScroll }\n","import { useInfiniteQuery } from '@tanstack/react-query'\nimport { useMemo } from 'react'\n\nexport function useInfiniteCustomQuery<TData = unknown>({\n queryKey,\n queryFn,\n enabled = true,\n options,\n}: {\n queryKey: unknown[]\n queryFn: (params: { pageParam: unknown }) => Promise<TData[]>\n enabled?: boolean\n options?: Record<string, unknown>\n}) {\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n isFetching,\n } = useInfiniteQuery<TData[]>({\n queryKey,\n queryFn: ({ pageParam }) => queryFn({ pageParam }),\n initialPageParam: undefined,\n getNextPageParam: (lastPage) =>\n lastPage.length > 0 ? lastPage.length : undefined,\n enabled,\n ...options,\n })\n\n const flatData = useMemo(\n () => data?.pages.flat() ?? [],\n [data?.pages],\n )\n\n return {\n data: flatData,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n isFetching,\n }\n}\n","'use client'\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { useIsMobile } from '@/hooks/use-mobile'\n\nimport { Loader } from '@/components/ui/loader'\n\nimport { Drawer } from '@/components/ui/drawer'\nimport { Input } from '@/components/ui/input'\nimport { Popover } from '@/components/ui/popover'\n\nexport interface SelectMultiProps<T extends object> {\n values: string[]\n onValuesChange: (values: string[]) => void\n options?: T[]\n isLoading?: boolean\n disabled?: boolean\n id?: string\n className?: string\n getItemValue: (item: T) => string\n renderItem: (item: T, isSelected: boolean) => React.ReactNode\n getBadgeLabel?: (item: T) => string\n filterFn?: (item: T, search: string) => boolean\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n contentTitle?: string\n}\n\nfunction SelectMulti<T extends object>({\n values,\n onValuesChange,\n options = [],\n isLoading = false,\n disabled = false,\n id,\n className,\n getItemValue,\n renderItem,\n getBadgeLabel,\n filterFn,\n placeholder = 'Select…',\n searchPlaceholder = 'Search…',\n emptyText = 'No results found.',\n contentTitle,\n}: SelectMultiProps<T>) {\n const isMobile = useIsMobile()\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next)\n if (!next) setSearch('')\n }, [])\n\n const toggle = useCallback(\n (itemValue: string) => {\n onValuesChange(\n values.includes(itemValue)\n ? values.filter((v) => v !== itemValue)\n : [...values, itemValue],\n )\n },\n [values, onValuesChange],\n )\n\n const filteredOptions = useMemo(() => {\n if (!search) return options\n const lower = search.toLowerCase()\n\n return options.filter((item) =>\n filterFn\n ? filterFn(item, lower)\n : getItemValue(item).toLowerCase().includes(lower),\n )\n }, [options, search, filterFn, getItemValue])\n\n const selectedItems = useMemo(\n () => options.filter((item) => values.includes(getItemValue(item))),\n [options, values, getItemValue],\n )\n\n useEffect(() => {\n if (open) {\n const timer = setTimeout(() => searchInputRef.current?.focus(), 50)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n const hasValues = values.length > 0\n\n const triggerClassName = cn(\n 'border-transparent text-foreground flex min-h-10 w-full min-w-0 items-center justify-between gap-2 rounded-xl bg-input px-4 py-2 text-sm',\n 'transition-[color] disabled:cursor-not-allowed disabled:opacity-75',\n 'focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px] cursor-pointer outline-none',\n !hasValues ? 'text-muted-foreground/50' : 'pl-2 pr-4',\n className,\n )\n\n const MAX_BADGES = 2\n\n const TriggerBody = (\n <>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-start gap-2 text-left\">\n {hasValues ? (\n <>\n {selectedItems.slice(0, MAX_BADGES).map((item) => {\n const itemValue = getItemValue(item)\n const label = getBadgeLabel?.(item) ?? itemValue\n\n return (\n <span\n key={itemValue}\n className=\"inline-flex max-w-full min-w-0 items-start gap-1 rounded-md bg-muted px-2 py-1 text-sm font-medium text-foreground\"\n >\n <span className=\"min-w-0 flex-1 text-left leading-snug wrap-break-word\">\n {label}\n </span>\n\n <div\n role=\"button\"\n tabIndex={0}\n className=\"mt-0.5 shrink-0 hover:text-destructive transition-colors\"\n onClick={(e) => {\n e.stopPropagation()\n toggle(itemValue)\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation()\n toggle(itemValue)\n }\n }}\n >\n <Icon name=\"Xmark\" size={10} />\n </div>\n </span>\n )\n })}\n\n {selectedItems.length > MAX_BADGES && (\n <span className=\"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-xs font-medium text-muted-foreground\">\n +{selectedItems.length - MAX_BADGES}\n </span>\n )}\n </>\n ) : (\n <span>{placeholder}</span>\n )}\n </div>\n\n {isLoading ? (\n <span className=\"size-4 border-2 border-muted-foreground/30 border-t-muted-foreground rounded-full animate-spin shrink-0\" />\n ) : (\n <Icon\n name=\"ChevronDown\"\n size={16}\n className=\"text-muted-foreground/80 shrink-0 ml-auto\"\n />\n )}\n </>\n )\n\n const DropdownContent = (\n <>\n <div className=\"p-2\">\n <div className=\"relative\">\n <Icon\n name=\"Magnifier\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none size-4 z-1\"\n />\n\n <Input\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"px-11 h-12 sm:h-10 text-sm\"\n autoComplete=\"off\"\n />\n\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch('')}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-2 hover:bg-muted rounded-lg\"\n >\n <Icon name=\"Xmark\" size={13} />\n </button>\n )}\n </div>\n </div>\n\n <div\n onWheel={(e) => e.stopPropagation()}\n className=\"scroll-fade-y max-h-64 overflow-y-auto overflow-x-hidden p-1\"\n >\n {isLoading ? (\n <Loader className=\"flex items-center justify-center p-2 lg:p-4\" />\n ) : filteredOptions.length === 0 ? (\n <p className=\"px-2 py-6 text-center text-sm text-muted-foreground\">\n {emptyText}\n </p>\n ) : (\n filteredOptions.map((item) => {\n const itemValue = getItemValue(item)\n const isSelected = values.includes(itemValue)\n\n return (\n <button\n key={itemValue}\n type=\"button\"\n className={cn(\n 'relative flex w-full min-w-0 cursor-pointer items-start gap-3 rounded-lg p-2.5 text-left outline-none select-none',\n 'transition-colors',\n isSelected\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n onClick={() => toggle(itemValue)}\n >\n <span\n className={cn(\n 'mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-sm border-2 transition-colors',\n isSelected\n ? 'border-primary bg-primary'\n : 'border-muted-foreground/40',\n )}\n aria-hidden\n >\n {isSelected && (\n <Icon\n name=\"Check\"\n className=\"size-2.5 text-primary-foreground\"\n />\n )}\n </span>\n <span className=\"min-w-0 flex-1 text-left wrap-break-word\">\n {renderItem(item, isSelected)}\n </span>\n </button>\n )\n })\n )}\n </div>\n </>\n )\n\n if (isMobile) {\n return (\n <>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n className={triggerClassName}\n onClick={() => !disabled && handleOpenChange(true)}\n >\n {TriggerBody}\n </button>\n\n <Drawer open={open} onOpenChange={handleOpenChange} direction=\"bottom\">\n <Drawer.Content title={contentTitle ?? placeholder} showDivider>\n <div className=\"pb-6\">{DropdownContent}</div>\n </Drawer.Content>\n </Drawer>\n </>\n )\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <Popover.Trigger asChild disabled={disabled}>\n <button id={id} type=\"button\" className={triggerClassName}>\n {TriggerBody}\n </button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n sideOffset={4}\n className=\"min-w-0 overflow-x-hidden p-0 rounded-xl border-transparent glass-popover text-popover-foreground shadow-md\"\n style={{ width: 'var(--anchor-width)' }}\n >\n {DropdownContent}\n </Popover.Content>\n </Popover>\n )\n}\n\nexport { SelectMulti }\n","'use client'\n\nimport { Slider as SliderPrimitive } from '@base-ui/react/slider'\n\nimport { cn } from '@/lib/cn'\n\nfunction SliderRoot({\n className,\n children,\n ...props\n}: SliderPrimitive.Root.Props) {\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n className={cn('relative flex w-full items-center', className)}\n {...props}\n >\n <SliderPrimitive.Control\n data-slot=\"slider-control\"\n className=\"relative flex w-full items-center py-2 cursor-pointer\"\n >\n <SliderTrack>\n <SliderIndicator />\n </SliderTrack>\n {children ?? <SliderThumb />}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n )\n}\n\nfunction SliderTrack({ className, ...props }: SliderPrimitive.Track.Props) {\n return (\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n 'relative h-1 w-full grow overflow-hidden rounded-full bg-border',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SliderIndicator({\n className,\n ...props\n}: SliderPrimitive.Indicator.Props) {\n return (\n <SliderPrimitive.Indicator\n data-slot=\"slider-indicator\"\n className={cn('absolute h-full bg-primary', className)}\n {...props}\n />\n )\n}\n\nfunction SliderThumb({ className, ...props }: SliderPrimitive.Thumb.Props) {\n return (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n className={cn(\n 'block size-4 rounded-full border-2 border-primary bg-primary-foreground shadow outline-none transition-colors focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst Slider = Object.assign(SliderRoot, {\n Control: SliderPrimitive.Control,\n Track: SliderTrack,\n Indicator: SliderIndicator,\n Thumb: SliderThumb,\n})\n\nexport { Slider }\n","import { Column } from '@tanstack/react-table'\n\nimport { cn } from '@/lib/cn'\n\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu } from '@/components/ui/dropdown-menu'\n\ninterface DataTableColumnHeaderProps<\n TData,\n TValue,\n> extends React.HTMLAttributes<HTMLDivElement> {\n column: Column<TData, TValue>\n title: string\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>\n }\n\n return (\n <div className={cn('flex items-center space-x-2', className)}>\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 data-popup-open:bg-accent\"\n >\n <span>{title}</span>\n {column.getIsSorted() === 'desc' ? (\n <Icon name=\"ArrowDown\" className=\"ml-2 h-4 w-4\" />\n ) : column.getIsSorted() === 'asc' ? (\n <Icon name=\"ArrowUp\" className=\"ml-2 h-4 w-4\" />\n ) : (\n <Icon name=\"SortArrows\" className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Item onClick={() => column.toggleSorting(false)}>\n <Icon\n name=\"ArrowUp\"\n className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\"\n />\n Asc\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => column.toggleSorting(true)}>\n <Icon\n name=\"ArrowDown\"\n className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\"\n />\n Desc\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item onClick={() => column.toggleVisibility(false)}>\n <Icon\n name=\"EyeSlash\"\n className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\"\n />\n Hide\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n </div>\n )\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\n\nimport { cn } from '@/lib/cn';\n\nconst cardShell =\n 'flex flex-col bg-card [--card-radius:1rem] [--card-padding:0.25rem] p-(--card-padding) rounded-(--card-radius) group w-full h-fit';\n\nconst cardContentShell = cn(\n 'relative bg-muted flex flex-1 flex-col gap-2',\n '[--card-content-radius:calc(var(--card-radius)-var(--card-padding))] [--card-content-padding:1rem] rounded-(--card-content-radius) p-(--card-content-padding) overflow-hidden',\n);\n\ntype TabsRootProps = React.ComponentProps<typeof TabsPrimitive.Root>;\n\nfunction Tabs({ className, ...props }: TabsRootProps) {\n return (\n <TabsPrimitive.Root\n className={cn(cardShell, className)}\n {...props}\n />\n );\n}\n\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List>;\n\nfunction TabsList({ className, ...props }: TabsListProps) {\n return (\n <TabsPrimitive.List\n className={cn(\n 'relative flex items-center gap-0.5 p-4',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TabsTabProps = React.ComponentProps<typeof TabsPrimitive.Tab>;\n\nfunction TabsTrigger({ className, ...props }: TabsTabProps) {\n return (\n <TabsPrimitive.Tab\n className={cn(\n 'relative flex min-h-9 items-center justify-center rounded-lg px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors outline-none select-none data-selected:text-foreground data-selected:bg-card focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 data-active:text-foreground cursor-pointer hover:bg-muted hover:text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype TabsPanelProps = React.ComponentProps<typeof TabsPrimitive.Panel>;\n\nfunction TabsContent({ className, ...props }: TabsPanelProps) {\n return (\n <TabsPrimitive.Panel\n className={cn(cardContentShell, className)}\n {...props}\n />\n );\n}\n\nTabs.List = TabsList;\nTabs.Trigger = TabsTrigger;\nTabs.Content = TabsContent;\n\nexport { Tabs };\n","\nimport { cn } from '@/lib/cn'\n\nexport interface CellProps extends React.HTMLAttributes<HTMLSpanElement> {\n wrap?: boolean\n emptyText?: string\n}\n\nexport const Cell = ({\n wrap = false,\n children,\n className,\n emptyText = 'Not defined',\n ...props\n}: CellProps) => {\n\n return (\n <span\n {...props}\n className={cn(\n wrap ? 'whitespace-normal' : 'text-nowrap whitespace-nowrap',\n !children && 'italic opacity-50',\n className,\n )}\n >\n {children || emptyText}\n </span>\n )\n}\n","import {\n type CountryCode,\n parsePhoneNumberFromString,\n type PhoneNumber,\n} from 'libphonenumber-js'\n\n\nimport {\n type AvailableLocales,\n DEFAULT_LOCALE_CONFIG,\n} from '@/config/locales'\n\nimport { cn } from '@/lib/cn'\n\nimport { getCountryName } from '@/hooks/use-phone-input'\n\nimport { FlagIcon } from '@/components/icon/flag'\nimport { Cell } from '@/components/ui/text/cell'\n\nimport { countryDialCodes } from '@/components/ui/input-phone/dial-codes'\nimport {\n applyPhoneMask,\n getDisplayMask,\n removePhoneMask,\n} from '@/components/ui/input-phone/masks'\n\nconst getPhoneDigitsForCountry = (\n parsed: PhoneNumber,\n cleanPhone: string,\n countryCode: string,\n): string => {\n const dial = countryDialCodes[countryCode]\n\n if (dial !== undefined) {\n const dialDigits = removePhoneMask(dial)\n\n if (dialDigits && cleanPhone.startsWith(dialDigits)) {\n return cleanPhone.substring(dialDigits.length)\n }\n }\n\n return removePhoneMask(parsed.nationalNumber)\n}\n\nconst resolveCountryAndDigits = (\n phone: string | null | undefined,\n): { countryCode: string; phoneDigits: string } => {\n const safePhone = typeof phone === 'string' ? phone : ''\n\n const cleanPhone = removePhoneMask(safePhone)\n const defaultRegion = DEFAULT_LOCALE_CONFIG.COUNTRY_CODE as CountryCode\n\n const fromParsed = (\n parsed: ReturnType<typeof parsePhoneNumberFromString>,\n ): { countryCode: string; phoneDigits: string } | null => {\n if (!parsed?.country) return null\n return {\n countryCode: parsed.country,\n phoneDigits: getPhoneDigitsForCountry(parsed, cleanPhone, parsed.country),\n }\n }\n\n const attempts: Array<ReturnType<typeof parsePhoneNumberFromString>> = [\n parsePhoneNumberFromString(safePhone),\n cleanPhone ? parsePhoneNumberFromString(`+${cleanPhone}`) : undefined,\n parsePhoneNumberFromString(safePhone, defaultRegion),\n ]\n\n for (const parsed of attempts) {\n const resolved = fromParsed(parsed)\n if (resolved) return resolved\n }\n\n const sortedCodes = Object.entries(countryDialCodes).sort(\n ([, dialA], [, dialB]) =>\n removePhoneMask(dialB).length - removePhoneMask(dialA).length,\n )\n\n for (const [countryCode, dialCode] of sortedCodes) {\n const dialDigits = removePhoneMask(dialCode)\n\n if (\n dialDigits &&\n cleanPhone.startsWith(dialDigits) &&\n cleanPhone.length > dialDigits.length\n ) {\n return {\n countryCode,\n phoneDigits: cleanPhone.substring(dialDigits.length),\n }\n }\n }\n\n return {\n countryCode: DEFAULT_LOCALE_CONFIG.COUNTRY_CODE,\n phoneDigits: cleanPhone,\n }\n}\n\nexport interface PhoneProps extends React.HTMLAttributes<HTMLSpanElement> {\n phone: string | null | undefined\n flag?: boolean\n}\n\nexport const Phone = ({ phone, flag = true, className }: PhoneProps) => {\n const { countryCode, phoneDigits } = resolveCountryAndDigits(phone)\n\n const locale = \"pt-BR\" as AvailableLocales\n const safePhone = typeof phone === 'string' ? phone : ''\n\n const formattedPhone = applyPhoneMask(\n phoneDigits,\n getDisplayMask(countryCode, phoneDigits.length),\n )\n\n const formatted = {\n phone: formattedPhone,\n country: {\n code: countryCode,\n name: getCountryName(countryCode, locale),\n },\n }\n\n return (\n <Cell\n title={safePhone ? formatted.phone : undefined}\n className={cn('min-w-32', className)}\n >\n {safePhone && flag ? (\n <div className=\"flex items-center gap-1.5 pr-2\">\n <FlagIcon code={countryCode} className=\"size-3.5 rounded-sm\" />\n <span>{formatted.phone}</span>\n </div>\n ) : (\n formatted.phone\n )}\n </Cell>\n )\n}\n","export type AvailableLocale = 'pt-BR' | 'en-US'\nexport type AvailableLocales = AvailableLocale\n\nexport const LOCALES: AvailableLocale[] = ['pt-BR', 'en-US']\n\nexport const DEFAULT_LOCALE_CONFIG = {\n COUNTRY_CODE: 'BR',\n} as const\n\nexport function flagPath(countryCode: string): string {\n return `/flags/${countryCode.toLowerCase()}.svg`\n}\n\nexport function getFlagByLocale(locale: string): string {\n const map: Record<string, string> = { 'pt-BR': 'BR', 'en-US': 'US' }\n return flagPath(map[locale] || 'BR')\n}\n\nexport function getLocaleLabel(locale: string): string {\n const map: Record<string, string> = { 'pt-BR': 'Português', 'en-US': 'English' }\n return map[locale] || locale\n}\n","export const countryDialCodes: Record<string, string> = {\n AR: '+54',\n BO: '+591',\n BR: '+55',\n BZ: '+501',\n CA: '+1',\n CL: '+56',\n CO: '+57',\n CR: '+506',\n CU: '+53',\n DO: '+1809',\n EC: '+593',\n ES: '+34',\n GT: '+502',\n GY: '+592',\n HN: '+504',\n HT: '+509',\n JM: '+1876',\n MX: '+52',\n NI: '+505',\n PA: '+507',\n PE: '+51',\n PT: '+351',\n PY: '+595',\n SR: '+597',\n TT: '+1868',\n US: '+1',\n UY: '+598',\n VE: '+58',\n}\n","import { Cell } from './cell'\nimport { Phone } from './phone'\n\nexport const Text = {\n Phone,\n Cell,\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'border-transparent placeholder:text-muted-foreground/50 focus-visible:border-transparent focus-visible:ring-ring/50 bg-input aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex min-h-19.5 w-full rounded-lg border px-3 py-2 transition-[color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n}\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","'use client'\n\nimport { useTheme } from 'next-themes'\n\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\n\nimport { themeIdToToastTheme } from '@/config/themes'\n\nimport { cn } from '@/lib/cn'\n\ntype AppToasterProps = Omit<ToasterProps, 'theme'> & {\n /** App theme id (`cream`, `onix`, …) or Sonner’s own `light` / `dark` / `system` */\n theme?: ToasterProps['theme'] | string\n}\n\nconst toasterCardStyle = {\n '--toast-border-width': '0px',\n '--toast-padding': '1.25rem',\n '--border-radius': '1rem',\n '--normal-bg': 'var(--card)',\n '--normal-text': 'var(--card-foreground)',\n '--normal-border': 'var(--border)',\n '--normal-bg-hover':\n 'color-mix(in oklab, var(--card-foreground) 6%, var(--card))',\n '--normal-border-hover': 'var(--border)',\n /* Same recipe as the Alert variants: text-{color} on a 5% tint, no border.\n Alerts use `bg-{color}/5` over the page; toasts float, so the 5% tint is\n pre-mixed with --background to stay opaque. */\n '--success-bg': 'color-mix(in oklab, var(--success) 5%, var(--background))',\n '--success-border': 'transparent',\n '--success-text': 'var(--success)',\n '--info-bg': 'color-mix(in oklab, var(--info) 5%, var(--background))',\n '--info-border': 'transparent',\n '--info-text': 'var(--info)',\n '--warning-bg': 'color-mix(in oklab, var(--warning) 5%, var(--background))',\n '--warning-border': 'transparent',\n '--warning-text': 'var(--warning)',\n '--error-bg': 'color-mix(in oklab, var(--destructive) 5%, var(--background))',\n '--error-border': 'transparent',\n '--error-text': 'var(--destructive)',\n} as React.CSSProperties\n\nconst Toaster = ({\n theme: themeProp,\n toastOptions,\n style,\n className,\n /** Colored like the Alert variants by default; pass `false` for neutral card toasts. */\n richColors = true,\n ...props\n}: AppToasterProps) => {\n const { theme: themeFromHook } = useTheme()\n const toastTheme = themeIdToToastTheme(themeProp ?? themeFromHook ?? 'system')\n\n return (\n <Sonner\n theme={toastTheme}\n richColors={richColors}\n className={cn('toaster group', className)}\n style={{ ...toasterCardStyle, ...style }}\n toastOptions={{\n ...toastOptions,\n classNames: {\n ...toastOptions?.classNames,\n toast: cn('shadow-sm!', toastOptions?.classNames?.toast),\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","export const THEMES = [\n { id: 'light' },\n { id: 'dark' },\n { id: 'system' },\n] as const\n\nexport const TOGGLEABLE_THEMES = [\n { id: 'light' },\n { id: 'dark' },\n] as const\n\nexport const LISTABLE_THEMES = [\n { id: 'light', icon: 'Sun', labelKey: 'theme.light' },\n { id: 'dark', icon: 'Moon', labelKey: 'theme.dark' },\n { id: 'system', icon: 'Monitor', labelKey: 'theme.system' },\n] as const\n\nexport function themeIdToToastTheme(themeId: string): 'light' | 'dark' | 'system' {\n return themeId as 'light' | 'dark' | 'system'\n}\n","'use client'\n\nimport {\n MediaControlBar,\n MediaController,\n MediaMuteButton,\n MediaPlayButton,\n MediaSeekBackwardButton,\n MediaSeekForwardButton,\n MediaTimeDisplay,\n MediaTimeRange,\n MediaVolumeRange,\n} from 'media-chrome/react'\n\nimport type { ComponentProps, CSSProperties } from 'react'\n\nimport { cn } from '@/lib/cn'\n\nexport type VideoPlayerProps = ComponentProps<typeof MediaController>\n\nconst variables = {\n '--media-primary-color': 'var(--primary)',\n '--media-secondary-color': 'var(--background)',\n '--media-text-color': 'var(--foreground)',\n '--media-background-color': 'var(--background)',\n '--media-control-hover-background': 'var(--accent)',\n '--media-font-family': 'var(--font-sans)',\n '--media-live-button-icon-color': 'var(--muted-foreground)',\n '--media-live-button-indicator-color': 'var(--destructive)',\n '--media-range-track-background': 'var(--border)',\n} as CSSProperties\n\nexport const VideoPlayer = ({ style, ...props }: VideoPlayerProps) => (\n <MediaController\n style={{\n ...variables,\n ...style,\n }}\n {...props}\n />\n)\n\nexport type VideoPlayerControlBarProps = ComponentProps<typeof MediaControlBar>\n\nexport const VideoPlayerControlBar = (props: VideoPlayerControlBarProps) => (\n <MediaControlBar {...props} />\n)\n\nexport type VideoPlayerTimeRangeProps = ComponentProps<typeof MediaTimeRange>\n\nexport const VideoPlayerTimeRange = ({\n className,\n ...props\n}: VideoPlayerTimeRangeProps) => (\n <MediaTimeRange className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerTimeDisplayProps = ComponentProps<\n typeof MediaTimeDisplay\n>\n\nexport const VideoPlayerTimeDisplay = ({\n className,\n ...props\n}: VideoPlayerTimeDisplayProps) => (\n <MediaTimeDisplay className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerVolumeRangeProps = ComponentProps<\n typeof MediaVolumeRange\n>\n\nexport const VideoPlayerVolumeRange = ({\n className,\n ...props\n}: VideoPlayerVolumeRangeProps) => (\n <MediaVolumeRange className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerPlayButtonProps = ComponentProps<typeof MediaPlayButton>\n\nexport const VideoPlayerPlayButton = ({\n className,\n ...props\n}: VideoPlayerPlayButtonProps) => (\n <MediaPlayButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerSeekBackwardButtonProps = ComponentProps<\n typeof MediaSeekBackwardButton\n>\n\nexport const VideoPlayerSeekBackwardButton = ({\n className,\n ...props\n}: VideoPlayerSeekBackwardButtonProps) => (\n <MediaSeekBackwardButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerSeekForwardButtonProps = ComponentProps<\n typeof MediaSeekForwardButton\n>\n\nexport const VideoPlayerSeekForwardButton = ({\n className,\n ...props\n}: VideoPlayerSeekForwardButtonProps) => (\n <MediaSeekForwardButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerMuteButtonProps = ComponentProps<typeof MediaMuteButton>\n\nexport const VideoPlayerMuteButton = ({\n className,\n ...props\n}: VideoPlayerMuteButtonProps) => (\n <MediaMuteButton className={cn('p-2.5', className)} {...props} />\n)\n\nexport type VideoPlayerContentProps = ComponentProps<'video'>\n\nexport const VideoPlayerContent = ({\n className,\n tabIndex = -1,\n ...props\n}: VideoPlayerContentProps) => (\n <video\n className={cn('mt-0 mb-0', className)}\n {...props}\n tabIndex={tabIndex}\n />\n)\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nconst MAX_IMAGE_CACHE = 500\nconst imageCache = new Set<string>()\n\nfunction cacheImage(src: string) {\n if (imageCache.size >= MAX_IMAGE_CACHE) {\n const first = imageCache.values().next().value\n if (first) imageCache.delete(first)\n }\n\n imageCache.add(src)\n}\n\ntype Status = 'loading' | 'loaded' | 'error'\n\ninterface AvatarCtx {\n status: Status\n onStatus: React.Dispatch<React.SetStateAction<Status>>\n}\n\nconst AvatarCtx = React.createContext<AvatarCtx>({\n status: 'loading',\n onStatus: () => {},\n})\n\nfunction AvatarRoot({ className, ...props }: React.ComponentProps<'span'>) {\n const [status, onStatus] = React.useState<Status>('loading')\n const ctx = React.useMemo(() => ({ status, onStatus }), [status])\n\n return (\n <AvatarCtx.Provider value={ctx}>\n <span\n data-slot=\"avatar\"\n className={cn(\n 'relative flex size-8 shrink-0 overflow-hidden rounded-lg',\n className,\n )}\n {...props}\n />\n </AvatarCtx.Provider>\n )\n}\n\nfunction AvatarImage({\n src,\n className,\n ...props\n}: React.ComponentProps<'img'>) {\n const { onStatus } = React.useContext(AvatarCtx)\n const srcStr = typeof src === 'string' && src.length > 0 ? src : undefined\n\n // Runs synchronously before the browser paints — if the src is already\n // cached, we set status to 'loaded' immediately so AvatarFallback never\n // renders on screen, eliminating all flicker on path changes.\n React.useLayoutEffect(() => {\n onStatus(!srcStr ? 'error' : imageCache.has(srcStr) ? 'loaded' : 'loading')\n }, [srcStr, onStatus])\n\n if (!srcStr) return null\n\n return (\n <img\n data-slot=\"avatar-image\"\n src={srcStr}\n alt=\"\"\n className={cn(\n 'absolute inset-0 size-full object-cover pointer-events-none select-none',\n className,\n )}\n onLoad={() => {\n cacheImage(srcStr)\n onStatus('loaded')\n }}\n onError={() => onStatus('error')}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n name,\n children,\n className,\n ...props\n}: React.ComponentProps<'span'> & { name?: string }) {\n const { status } = React.useContext(AvatarCtx)\n if (status === 'loaded') return null\n\n const initials =\n name && name.length > 0\n ? name\n .split(' ')\n .map((n) => n.charAt(0))\n .slice(0, 2)\n .join('')\n .toUpperCase()\n : '?'\n\n return (\n <span\n data-slot=\"avatar-fallback\"\n className={cn(\n 'absolute inset-0 flex size-full items-center justify-center bg-primary text-primary-foreground rounded-none select-none pointer-events-none',\n className,\n )}\n {...props}\n >\n {children ?? initials}\n </span>\n )\n}\n\nconst Avatar = Object.assign(AvatarRoot, { Image: AvatarImage, Fallback: AvatarFallback })\nexport { Avatar }\n","'use client'\n\nimport * as React from 'react'\n\nimport { DayPicker } from 'react-day-picker'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport { buttonVariants } from '@/components/ui/button'\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n components: userComponents,\n ...props\n}: React.ComponentProps<typeof DayPicker>) {\n const defaultClassNames = {\n months: 'relative flex flex-col sm:flex-row gap-4',\n month: 'w-full',\n month_grid: 'w-full',\n month_caption:\n 'relative mx-10 mb-1 flex h-9 items-center justify-center z-20',\n caption_label: 'text-sm font-medium',\n nav: 'absolute top-0 flex w-full justify-between z-10',\n button_previous: cn(\n buttonVariants({ variant: 'ghost' }),\n 'size-8 text-muted-foreground/80 hover:text-foreground p-0',\n ),\n button_next: cn(\n buttonVariants({ variant: 'ghost' }),\n 'size-8 text-muted-foreground/80 hover:text-foreground p-0',\n ),\n weekday: 'size-8 p-0 text-xs font-medium text-muted-foreground/80',\n day_button:\n 'relative flex size-8 items-center justify-center whitespace-nowrap rounded-full p-0 text-foreground group-[[data-selected]:not(.range-middle)]:[transition-property:color,background-color,border-radius,box-shadow] group-[[data-selected]:not(.range-middle)]:duration-150 group-data-disabled:pointer-events-none focus-visible:z-10 hover:not-in-data-selected:bg-accent group-data-selected:bg-primary hover:not-in-data-selected:text-foreground group-data-selected:text-primary-foreground group-data-disabled:text-foreground/30 group-data-disabled:line-through group-data-outside:text-foreground/30 group-data-selected:group-data-outside:text-primary-foreground outline-none focus-visible:ring-ring/50 focus-visible:ring-[3px] group-[.range-start:not(.range-end)]:rounded-e-full group-[.range-end:not(.range-start)]:rounded-s-full group-[.range-middle]:rounded-none group-[.range-middle]:group-data-selected:bg-accent group-[.range-middle]:group-data-selected:text-foreground',\n day: 'group size-8 px-0 py-px text-sm relative before:absolute before:inset-y-px before:inset-x-0 [&.range-start:not(.range-end):before]:bg-linear-to-r before:from-transparent before:from-50% before:to-accent before:to-50% [&.range-end:not(.range-start):before]:bg-linear-to-l',\n range_start: 'range-start',\n range_end: 'range-end',\n range_middle: 'range-middle',\n today:\n '*:after:pointer-events-none *:after:absolute *:after:bottom-1 *:after:start-1/2 *:after:z-10 *:after:size-[3px] *:after:-translate-x-1/2 *:after:rounded-full *:after:bg-primary [&[data-selected]:not(.range-middle)>*]:after:bg-background [&[data-disabled]>*]:after:bg-foreground/30 *:after:transition-colors',\n outside:\n 'text-muted-foreground data-selected:bg-accent/50 data-selected:text-muted-foreground',\n hidden: 'invisible',\n week_number: 'size-8 p-0 text-xs font-medium text-muted-foreground/80',\n }\n\n const mergedClassNames: typeof defaultClassNames = Object.keys(\n defaultClassNames,\n ).reduce(\n (acc, key) => ({\n ...acc,\n [key]: classNames?.[key as keyof typeof classNames]\n ? cn(\n defaultClassNames[key as keyof typeof defaultClassNames],\n classNames[key as keyof typeof classNames],\n )\n : defaultClassNames[key as keyof typeof defaultClassNames],\n }),\n {} as typeof defaultClassNames,\n )\n\n const defaultComponents = {\n Chevron: (props: {\n className?: string\n size?: number\n disabled?: boolean\n orientation?: 'left' | 'right' | 'up' | 'down'\n }) => {\n if (props.orientation === 'left') {\n return <Icon name=\"ChevronLeft\" size={16} {...props} aria-hidden=\"true\" />\n }\n return <Icon name=\"ChevronRight\" size={16} {...props} aria-hidden=\"true\" />\n },\n }\n\n const mergedComponents = {\n ...defaultComponents,\n ...userComponents,\n }\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('w-fit bg-card rounded-lg p-3', className)}\n classNames={mergedClassNames}\n components={mergedComponents}\n {...props}\n />\n )\n}\n\nexport { Calendar }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/cn'\n\nimport { ANIMATION } from '@/constants/animations'\n\nconst collapsibleRootVariants = cva('w-full', {\n variants: {\n variant: {\n row: '',\n card: 'rounded-lg bg-card',\n },\n },\n defaultVariants: {\n variant: 'card',\n },\n})\n\n/** Extra styles on top of {@link SettingsItem} for the collapsible trigger. */\nconst collapsibleTriggerSettingsOverlayVariants = cva(\n [\n 'group w-full outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring cursor-pointer',\n 'disabled:pointer-events-none disabled:opacity-50 disabled:grayscale',\n ],\n {\n variants: {\n variant: {\n row: '',\n card: 'hover:bg-muted/50 rounded-lg data-[state=open]:rounded-b-none',\n },\n },\n defaultVariants: {\n variant: 'card',\n },\n },\n)\n\nconst collapsibleContentVariants = cva('min-h-0', {\n variants: {\n variant: {\n row: '',\n card: 'border-t border-border/50 px-4 pb-4 pt-4',\n },\n },\n defaultVariants: {\n variant: 'card',\n },\n})\n\ntype CollapsibleAlign = 'center' | 'start' | null | undefined\n\ntype CollapsibleContextValue = VariantProps<typeof collapsibleRootVariants> & {\n align: CollapsibleAlign\n open: boolean\n setOpen: (next: boolean) => void\n contentId: string\n disabled: boolean\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null,\n)\n\nfunction useCollapsibleContext(component: string) {\n const ctx = React.useContext(CollapsibleContext)\n if (!ctx) {\n throw new Error(`${component} must be used within <Collapsible>`)\n }\n return ctx\n}\n\n/** Read open state from a parent {@link Collapsible} (e.g. custom chevron in the trigger action). */\nfunction useCollapsibleOpen() {\n return useCollapsibleContext('useCollapsibleOpen').open\n}\n\n/** Returns null when not inside {@link Collapsible}; use from {@link SettingsItem} with `collapsibleTrigger`. */\nfunction useOptionalCollapsibleContext() {\n return React.useContext(CollapsibleContext)\n}\n\nfunction CollapsibleRoot({\n className,\n variant = 'card',\n align = 'start',\n open: openProp,\n defaultOpen,\n onOpenChange,\n expandWhen,\n disabled = false,\n children,\n ...props\n}: React.ComponentProps<'div'> &\n VariantProps<typeof collapsibleRootVariants> & {\n align?: CollapsibleAlign\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n expandWhen?: boolean\n disabled?: boolean\n }) {\n const contentId = React.useId()\n const isControlled = openProp !== undefined\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n defaultOpen ?? false,\n )\n\n const open = isControlled\n ? Boolean(openProp)\n : Boolean(expandWhen) || uncontrolledOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (disabled) return\n if (!isControlled) {\n if (next) {\n setUncontrolledOpen(true)\n } else {\n setUncontrolledOpen(false)\n }\n }\n onOpenChange?.(next)\n },\n [disabled, isControlled, onOpenChange],\n )\n\n const contextValue = React.useMemo(\n () => ({\n variant,\n align,\n open,\n setOpen,\n contentId,\n disabled,\n }),\n [variant, align, open, setOpen, contentId, disabled],\n )\n\n return (\n <CollapsibleContext.Provider value={contextValue}>\n <div\n data-slot=\"collapsible\"\n data-state={open ? 'open' : 'closed'}\n className={cn(collapsibleRootVariants({ variant }), className)}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n )\n}\n\nexport function CollapsibleContent({\n className,\n children,\n}: {\n className?: string\n children?: React.ReactNode\n}) {\n const { variant, open, contentId } =\n useCollapsibleContext('CollapsibleContent')\n const contentRef = React.useRef<HTMLDivElement>(null)\n const [measuredHeight, setMeasuredHeight] = React.useState(0)\n\n React.useEffect(() => {\n const el = contentRef.current\n if (!el) return\n\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const h = entry.target.scrollHeight\n if (h > 0) setMeasuredHeight(h)\n }\n })\n ro.observe(el)\n\n const initialH = el.scrollHeight\n if (initialH > 0) setMeasuredHeight(initialH)\n\n return () => ro.disconnect()\n }, [])\n\n const height = open ? measuredHeight : 0\n\n const isCard = variant === 'card'\n\n return (\n <div\n id={contentId}\n role=\"region\"\n data-slot=\"collapsible-content\"\n style={{\n height,\n overflow: 'hidden',\n opacity: open ? 1 : 0,\n transition: `height ${ANIMATION.DURATION_FLOAT}s ease-in-out, opacity ${ANIMATION.DURATION_FLOAT / 2}s ease`,\n transitionDelay: open ? `0s, ${ANIMATION.DURATION_FLOAT / 2}s` : '0s, 0s',\n }}\n className={cn(className)}\n >\n <div\n ref={contentRef}\n className={cn(\n isCard && 'border-t border-border/50 px-4 pb-4 pt-4',\n )}\n >\n {children}\n </div>\n </div>\n )\n}\n\nconst Collapsible = Object.assign(CollapsibleRoot, { Content: CollapsibleContent })\n\nexport {\n Collapsible,\n collapsibleContentVariants,\n collapsibleRootVariants,\n collapsibleTriggerSettingsOverlayVariants,\n useCollapsibleOpen,\n useOptionalCollapsibleContext,\n}\n","'use client'\n\nimport { Command as CommandPrimitive } from 'cmdk'\n\nimport * as React from 'react'\n\nimport { Icon } from '@/components/icon'\n\nimport { cn } from '@/lib/cn'\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n} from '@/components/internal/dialog'\n\nimport { Kbd } from '@/components/ui/kbd'\n\nfunction CommandRoot({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-xl bg-muted text-foreground [--card-content-padding:1rem]',\n '**:data-[slot=command-input-wrapper]:flex **:data-[slot=command-input-wrapper]:min-h-14 **:data-[slot=command-input-wrapper]:items-center',\n '**:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:uppercase **:[[cmdk-group-heading]]:text-muted-foreground/50',\n '**:[[cmdk-group]]:px-(--card-content-padding)! **:[[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0',\n '**:[[cmdk-input-wrapper]_svg]:h-5 **:[[cmdk-input-wrapper]_svg]:w-5 **:[[cmdk-input]]:h-10',\n '**:[[cmdk-item]]:gap-3 **:[[cmdk-item]]:px-3 **:[[cmdk-item]]:py-3 **:[[cmdk-item]]:rounded-lg **:[[cmdk-item]_svg]:h-5 **:[[cmdk-item]_svg]:w-5',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n commandClassName,\n closeButtonClassName,\n showCloseButton = true,\n filter,\n ...props\n}: Omit<React.ComponentProps<typeof Dialog>, 'children'> & {\n children?: React.ReactNode\n title?: string\n description?: string\n className?: string\n commandClassName?: string\n closeButtonClassName?: string\n showCloseButton?: boolean\n filter?: React.ComponentProps<typeof CommandPrimitive>['filter']\n}) {\n return (\n <Dialog {...props}>\n <DialogContent\n title={title}\n closeButton={showCloseButton}\n closeButtonClassName={cn(\n 'top-[calc(var(--card-padding)+1.75rem)] right-[calc(var(--card-padding)+0.75rem)] -translate-y-1/2',\n 'size-7 rounded-md p-1 bg-muted/50 hover:bg-muted hover:opacity-100 text-muted-foreground',\n closeButtonClassName,\n )}\n className={cn(\n 'overflow-hidden gap-0 border-0 bg-card p-(--card-padding) shadow-none',\n '[--card-radius:1rem] [--card-padding:0.25rem] lg:rounded-(--card-radius) lg:p-(--card-padding)',\n 'max-w-xl! border-none outline-none max-h-dvh max-sm:px-1 shadow-lg sm:rounded-2xl',\n className,\n )}\n >\n <DialogDescription className=\"sr-only\">{description}</DialogDescription>\n\n <Command\n filter={filter}\n className={cn(\n '[--card-content-radius:calc(var(--card-radius)-var(--card-padding))] sm:rounded-xl lg:rounded-(--card-content-radius)',\n commandClassName,\n )}\n >\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 min-h-14 items-center gap-4 px-(--card-content-padding)\"\n >\n <Icon name=\"Magnifier\" className=\"size-4 shrink-0 opacity-50\" />\n\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'flex h-10 w-full rounded-md bg-transparent py-3 pr-9 text-sm outline-hidden placeholder:text-muted-foreground/50 disabled:cursor-not-allowed disabled:opacity-50',\n '[&_button]:size-8!',\n className,\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n 'max-lg:h-full lg:max-h-[500px] scroll-py-1 overflow-x-hidden overflow-y-auto',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-2 text-foreground **:[[cmdk-group-heading]]:py-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandFooter({\n className,\n navigateLabel = 'navigate',\n selectLabel = 'select',\n closeLabel = 'close',\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n navigateLabel?: string\n selectLabel?: string\n closeLabel?: string\n}) {\n return (\n <div\n data-slot=\"command-footer\"\n className={cn(\n 'hidden lg:flex shrink-0 items-center justify-between p-4 text-xs text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1.5\">\n <Kbd keys={['ArrowUp', 'ArrowDown']} />\n\n <span>{navigateLabel}</span>\n </span>\n\n <span className=\"flex items-center gap-1.5\">\n <Kbd keys={['Enter']} />\n\n <span>{selectLabel}</span>\n </span>\n </div>\n\n <span className=\"flex items-center gap-1.5\">\n <Kbd keys={['Escape']} />\n\n <span>{closeLabel}</span>\n </span>\n </>\n )}\n </div>\n )\n}\n\nconst Command = Object.assign(CommandRoot, {\n Dialog: CommandDialog,\n Empty: CommandEmpty,\n Footer: CommandFooter,\n Group: CommandGroup,\n Input: CommandInput,\n Item: CommandItem,\n List: CommandList,\n Separator: CommandSeparator,\n Shortcut: CommandShortcut,\n})\n\nexport { Command }\n","'use client'\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { toast } from 'sonner'\n\nimport { cn } from '@/lib/cn'\n\nimport { EmptyState } from '@/components/ui/empty-state'\nimport { Icon } from '@/components/icon'\n\nimport { Button } from '@/components/ui/button'\nimport { Label } from '@/components/ui/label'\n\nconst ACCEPTED_TYPES = ['image/jpeg', 'image/png', 'image/webp']\n\nconst MAX_SIZE_MB = 5\nconst MAX_SIZE_BYTES = MAX_SIZE_MB * 1024 * 1024\n\nexport interface ImageUploadProps {\n value: File | string | null\n onChange: (file: File | null) => void\n label?: string\n disabled?: boolean\n className?: string\n previewClassName?: string\n id?: string\n}\n\nconst ImageUpload = ({\n value,\n onChange,\n label,\n disabled,\n className,\n previewClassName,\n id = 'image-upload',\n}: ImageUploadProps) => {\n\n const inputRef = useRef<HTMLInputElement>(null)\n const dragCounter = useRef(0)\n\n const [isDragging, setIsDragging] = useState(false)\n const [preview, setPreview] = useState<string | null>(null)\n\n useEffect(() => {\n if (!value) {\n setPreview(null)\n return\n }\n\n if (typeof value === 'string') {\n setPreview(value)\n return\n }\n\n const url = URL.createObjectURL(value)\n setPreview(url)\n return () => URL.revokeObjectURL(url)\n }, [value])\n\n const validate = useCallback(\n (file: File): boolean => {\n if (!ACCEPTED_TYPES.includes(file.type)) {\n toast.error('Invalid file type')\n return false\n }\n\n if (file.size > MAX_SIZE_BYTES) {\n toast.error('File is too large')\n return false\n }\n\n return true\n },\n [],\n )\n\n const handleFile = useCallback(\n (file: File | undefined | null) => {\n if (!file) return\n if (validate(file)) onChange(file)\n },\n [validate, onChange],\n )\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFile(e.target.files?.[0])\n e.target.value = ''\n }\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounter.current += 1\n if (!disabled) setIsDragging(true)\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounter.current -= 1\n if (dragCounter.current === 0) setIsDragging(false)\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounter.current = 0\n setIsDragging(false)\n\n if (disabled) return\n handleFile(e.dataTransfer.files?.[0])\n }\n\n const handlePaste = useCallback(\n (e: ClipboardEvent) => {\n if (disabled) return\n\n const item = Array.from(e.clipboardData?.items ?? []).find((i) =>\n i.type.startsWith('image/'),\n )\n\n if (item) {\n handleFile(item.getAsFile())\n }\n },\n [disabled, handleFile],\n )\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation()\n onChange(null)\n if (inputRef.current) inputRef.current.value = ''\n }\n\n useEffect(() => {\n window.addEventListener('paste', handlePaste)\n return () => window.removeEventListener('paste', handlePaste)\n }, [handlePaste])\n\n return (\n <div className={cn('space-y-3', className)}>\n {label && <Label htmlFor={id}>{label}</Label>}\n\n <div\n id={id}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={'aria.dropzone'}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n inputRef.current?.click()\n }\n }}\n data-file={!!preview}\n className={cn(\n 'relative flex flex-col items-center justify-center gap-2 w-full rounded-xl border-3 border-dashed transition-colors cursor-pointer select-none',\n 'outline-none focus-visible:border-transparent focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n isDragging\n ? 'border-(--success-drop) bg-(--success-drop)/5'\n : 'border-transparent bg-input',\n disabled && 'opacity-50 cursor-not-allowed pointer-events-none',\n preview ? 'p-0 overflow-hidden border-0' : 'min-h-48',\n previewClassName,\n )}\n style={\n {\n '--success-drop': 'var(--success)',\n '--success-drop-foreground': 'var(--success-foreground)',\n } as React.CSSProperties\n }\n >\n {preview ? (\n <div className=\"relative w-full\">\n <img\n src={preview}\n alt={'aria.preview'}\n className=\"size-full object-cover rounded-xl max-h-auto\"\n />\n\n {!disabled && (\n <Button\n size=\"icon\"\n type=\"button\"\n variant=\"destructive\"\n className=\"absolute top-2 right-2 size-6 rounded-full\"\n onClick={handleRemove}\n aria-label={'aria.remove'}\n >\n <Icon name=\"Xmark\" className=\"size-4\" />\n </Button>\n )}\n </div>\n ) : (\n <EmptyState\n variant=\"flat\"\n icon={isDragging ? 'Upload' : 'Image'}\n title={isDragging ? 'dropNow' : 'clickOrDrag'}\n description={'hint'}\n className={cn(\n 'bg-transparent p-6',\n isDragging ? '[--success-drop]' : '',\n )}\n />\n )}\n </div>\n\n <input\n type=\"file\"\n aria-hidden\n ref={inputRef}\n tabIndex={-1}\n className=\"sr-only\"\n disabled={disabled}\n onChange={handleInputChange}\n accept={ACCEPTED_TYPES.join(',')}\n />\n </div>\n )\n}\n\nImageUpload.displayName = 'ImageUpload'\n\nexport { ImageUpload }\n","'use client'\n\nimport * as React from 'react'\n\nimport { cn } from '@/lib/cn'\n\nfunction Label({\n className,\n children,\n required,\n ...props\n}: React.ComponentProps<'label'> & {\n required?: boolean\n}) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n {required && <span className=\"text-destructive\">*</span>}\n </label>\n )\n}\n\nexport { Label }\n","import * as React from 'react'\n\nimport { ScrollArea as ScrollAreaPrimitive } from '@base-ui/react/scroll-area'\n\nimport { cn } from '@/lib/cn'\n\nconst ScrollAreaRoot = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollAreaRoot.displayName = 'ScrollArea'\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Scrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Scrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' &&\n 'h-full w-2.5 border-l border-l-transparent p-px',\n orientation === 'horizontal' &&\n 'h-2.5 flex-col border-t border-t-transparent p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.Thumb className=\"relative flex-1 rounded-full bg-border hover:bg-muted-foreground transition-colors\" />\n </ScrollAreaPrimitive.Scrollbar>\n))\nScrollBar.displayName = 'ScrollBar'\n\nconst ScrollArea = Object.assign(ScrollAreaRoot, { ScrollBar })\nexport { ScrollArea }\n"],"mappings":"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AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC5D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;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","names":["motion","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","React","motion","mergeProps","React","Slot","jsx","jsxs","jsx","Button","mergeProps","jsx","jsxs","motion","Cookies","React","AnimatePresence","motion","React","cva","React","React","jsx","jsx","React","jsx","jsxs","jsx","React","jsx","jsxs","jsx","jsxs","open","cva","Fragment","jsx","jsxs","Cookies","open","handleMouseMove","handleMouseUp","rawWidth","AnimatePresence","motion","jsx","jsxs","jsx","Accordion","React","React","AnimatePresence","motion","React","jsx","jsxs","jsx","jsx","jsxs","AnimatePresence","motion","jsx","jsxs","React","cva","jsx","cva","cva","jsx","cva","React","useEffect","useState","jsx","jsxs","React","BrandDomainInput","useState","useEffect","jsx","jsxs","cva","jsx","cva","React","motion","jsx","React","motion","jsx","jsxs","ResponsiveContainer","useCallback","useEffect","React","motion","React","jsx","jsxs","config","Fragment","jsx","jsxs","useCallback","useEffect","range","motion","ResponsiveContainer","React","jsx","jsxs","ChartDot","RechartsPrimitive","Fragment","jsx","jsxs","RechartsPrimitive","React","Fragment","jsx","jsxs","Area","useCallback","useId","useMemo","useRef","useState","motion","Fragment","jsx","jsxs","AreaChart","useState","useId","useCallback","Area","useMemo","useRef","motion","Bar","CartesianGrid","ReferenceLine","XAxis","YAxis","useCallback","useId","useMemo","useRef","useState","motion","Fragment","jsx","jsxs","LOADING_ANIMATION_DURATION","BarChart","useState","useLoadingData","useId","useCallback","ReferenceLine","CartesianGrid","XAxis","YAxis","Bar","HatchedPatternStyle","radius","generateEasedGradientStops","useMemo","useRef","motion","CartesianGrid","Line","ReferenceLine","XAxis","YAxis","useCallback","useId","useMemo","useRef","useState","motion","Fragment","jsx","jsxs","STROKE_WIDTH","LOADING_ANIMATION_DURATION","LineChart","useState","useLoadingData","useId","useCallback","ReferenceLine","CartesianGrid","XAxis","YAxis","getOpacity","Line","AnimatedDashedStyle","HorizontalColorGradientStyle","GlowFilterStyle","generateEasedGradientStops","useMemo","useRef","motion","useCallback","useId","useMemo","useRef","useState","motion","Fragment","jsx","jsxs","LOADING_ANIMATION_DURATION","useState","useLoadingData","useId","useCallback","generateEasedGradientStops","useRef","motion","useMemo","twMerge","motion","jsx","jsxs","LOADING_ANIMATION_DURATION","twMerge","props","generateEasedGradientStops","motion","useEffect","useMemo","useState","useEffect","useRef","useState","jsx","jsxs","Fragment","jsx","jsxs","Icon","React","useMemo","motion","jsx","motion","useMemo","React","jsx","jsxs","useRef","useState","useEffect","jsx","useMemo","useState","useEffect","timer","jsx","useEffect","useMemo","useState","React","AnimatePresence","motion","React","jsx","React","SeparatorPrimitive","Fragment","jsx","jsxs","SelectTrigger","SeparatorPrimitive","jsx","jsxs","jsx","jsxs","_","AnimatePresence","motion","jsx","jsxs","jsx","jsxs","jsx","useMemo","table","useEffect","jsx","jsxs","React","createContext","useCallback","useContext","useEffect","useId","useMemo","useState","React","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","createContext","useContext","useState","useCallback","useMemo","Dialog","useId","React","useEffect","React","jsx","jsxs","props","jsx","jsxs","jsx","cva","jsx","cva","React","useEffect","useMemo","useRef","useState","intNum","jsx","jsxs","currencies","React","useState","useState","jsx","Icon","jsx","jsxs","countries","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","value","Fragment","jsx","jsxs","Fragment","jsx","useEffect","useState","AnimatePresence","motion","jsx","jsxs","useState","useEffect","AnimatePresence","motion","React","jsx","jsxs","jsx","jsxs","jsx","useCallback","useEffect","useRef","useState","useMemo","Fragment","jsx","jsxs","useState","useRef","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useCallback","useMemo","useEffect","jsx","jsxs","jsx","jsxs","jsx","cardShell","cardContentShell","jsx","Cell","parsePhoneNumberFromString","jsx","jsxs","parsePhoneNumberFromString","Cell","Text","Cell","jsx","jsx","jsx","React","jsx","jsx","props","React","cva","jsx","cva","Fragment","jsx","jsxs","useCallback","useEffect","useRef","useState","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","useCallback","React","jsx","jsxs"]}