@onnechat/ui 0.1.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.
@@ -0,0 +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"]}