UNPKG

ivt

Version:

Ivt Components Library

1 lines 5.64 kB
{"version":3,"file":"GenericTabs-CqunvZEw.mjs","sources":["../../src/components/default/base/GenericTabs.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { ScrollArea, ScrollBar } from \"@/components/ui/scroll-area\";\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface TabConfig {\n\tvalue: string;\n\tlabel: string;\n\tpath?: string;\n\tmatch?: string;\n\tdisabled?: boolean;\n\tclassName?: string;\n}\n\nexport interface GenericTabsProps {\n\t/**\n\t * Array of tab configurations.\n\t */\n\ttabs: TabConfig[];\n\t/**\n\t * Disables all tabs if true.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Custom class name for the container.\n\t */\n\tclassName?: string;\n\t/**\n\t * Current path string used for matching active tab.\n\t * Pass browser URL or current router path here to enable auto-highlighting.\n\t * Makes the component compatible with any router (Next.js, React Router, etc).\n\t */\n\tcurrentPath?: string;\n\t/**\n\t * Callback handler for navigation.\n\t * Called with the tab's path when a tab is clicked.\n\t * Use this to trigger your router's navigation (e.g. router.push, navigate(), etc).\n\t */\n\tonNavigate?: (path: string) => void;\n\t/**\n\t * Optional override for active tab value.\n\t * If provided, the component acts as controlled for the active state display.\n\t */\n\tvalue?: string;\n\t/**\n\t * Custom class name for all tab triggers.\n\t */\n\ttriggerClassName?: string;\n\t/**\n\t * If true, sets the tab width to fit content on small screens (sm:min-w-fit),\n\t * overriding the default fixed width.\n\t */\n\twidthCurrent?: boolean;\n\t/**\n\t * Callback handler for value change.\n\t * Triggered when a tab is clicked.\n\t */\n\tonValueChange?: (value: string) => void;\n}\n\nexport const GenericTabs: React.FC<GenericTabsProps> = ({\n\ttabs,\n\tisLoading = false,\n\tclassName,\n\tcurrentPath = \"\",\n\tonNavigate,\n\tvalue: controlledValue,\n\tonValueChange,\n\ttriggerClassName,\n\twidthCurrent,\n}) => {\n\tconst activeTab =\n\t\tcontrolledValue ??\n\t\ttabs\n\t\t\t.filter((t) => {\n\t\t\t\tconst matchString = t.match ?? t.path;\n\t\t\t\treturn matchString && currentPath.includes(matchString);\n\t\t\t})\n\t\t\t.sort((a, b) => {\n\t\t\t\tconst lenA = (a.match ?? a.path ?? \"\").length;\n\t\t\t\tconst lenB = (b.match ?? b.path ?? \"\").length;\n\t\t\t\treturn lenB - lenA;\n\t\t\t})[0]?.value ??\n\t\ttabs[0]?.value;\n\n\tconst handleNavigate = (tab: TabConfig) => {\n\t\tif (tab.disabled || isLoading) return;\n\n\t\tif (onNavigate && tab.path) {\n\t\t\tonNavigate(tab.path);\n\t\t}\n\t};\n\n\treturn (\n\t\t<Tabs value={activeTab} onValueChange={onValueChange} className={className}>\n\t\t\t<ScrollArea className=\"w-full max-w-200 sm:max-w-200\">\n\t\t\t\t<TabsList className=\"flex h-full justify-start gap-2\">\n\t\t\t\t\t{tabs.map((tab) => (\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tkey={tab.value}\n\t\t\t\t\t\t\tvalue={tab.value}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-fit min-w-fit sm:min-w-[196px]\",\n\t\t\t\t\t\t\t\ttriggerClassName,\n\t\t\t\t\t\t\t\twidthCurrent && \"sm:min-w-fit px-6\",\n\t\t\t\t\t\t\t\ttab.className,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tdisabled={isLoading || tab.disabled}\n\t\t\t\t\t\t\tonClick={() => handleNavigate(tab)}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tab.label}\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t))}\n\t\t\t\t</TabsList>\n\t\t\t\t<ScrollBar orientation=\"horizontal\" />\n\t\t\t</ScrollArea>\n\t\t</Tabs>\n\t);\n};\n"],"names":["GenericTabs","tabs","isLoading","className","currentPath","onNavigate","value","controlledValue","onValueChange","triggerClassName","widthCurrent","activeTab","filter","t","matchString","match","path","includes","sort","a","b","lenA","length","lenB","handleNavigate","tab","disabled","React","Tabs","ScrollArea","TabsList","map","TabsTrigger","key","cn","onClick","type","label","ScrollBar","orientation"],"mappings":";;;;;AA8DO,MAAMA,WAAAA,GAA0C,CAAC,EACvDC,IAAI,EACJC,SAAAA,GAAY,KAAK,EACjBC,SAAS,EACTC,WAAAA,GAAc,EAAE,EAChBC,UAAU,EACVC,KAAAA,EAAOC,eAAe,EACtBC,aAAa,EACbC,gBAAgB,EAChBC,YAAY,EACZ,GAAA;AACA,IAAA,MAAMC,SAAAA,GACLJ,eAAAA,IACAN,IAAAA,CACEW,MAAM,CAAC,CAACC,CAAAA,GAAAA;AACR,QAAA,MAAMC,WAAAA,GAAcD,CAAAA,CAAEE,KAAK,IAAIF,EAAEG,IAAI;QACrC,OAAOF,WAAAA,IAAeV,WAAAA,CAAYa,QAAQ,CAACH,WAAAA,CAAAA;IAC5C,CAAA,CAAA,CACCI,IAAI,CAAC,CAACC,CAAAA,EAAGC,CAAAA,GAAAA;QACT,MAAMC,IAAAA,GAAO,CAACF,CAAAA,CAAEJ,KAAK,IAAII,CAAAA,CAAEH,IAAI,IAAI,EAAC,EAAGM,MAAM;QAC7C,MAAMC,IAAAA,GAAO,CAACH,CAAAA,CAAEL,KAAK,IAAIK,CAAAA,CAAEJ,IAAI,IAAI,EAAC,EAAGM,MAAM;AAC7C,QAAA,OAAOC,IAAAA,GAAOF,IAAAA;AACf,IAAA,CAAA,CAAE,CAAC,CAAA,CAAE,EAAEf,SACRL,IAAI,CAAC,EAAE,EAAEK,KAAAA;AAEV,IAAA,MAAMkB,iBAAiB,CAACC,GAAAA,GAAAA;QACvB,IAAIA,GAAAA,CAAIC,QAAQ,IAAIxB,SAAAA,EAAW;QAE/B,IAAIG,UAAAA,IAAcoB,GAAAA,CAAIT,IAAI,EAAE;AAC3BX,YAAAA,UAAAA,CAAWoB,IAAIT,IAAI,CAAA;AACpB,QAAA;AACD,IAAA,CAAA;AAEA,IAAA,qBACCW,cAAA,CAAA,aAAA,CAACC,IAAAA,EAAAA;QAAKtB,KAAAA,EAAOK,SAAAA;QAAWH,aAAAA,EAAeA,aAAAA;QAAeL,SAAAA,EAAWA;qBAChEwB,cAAA,CAAA,aAAA,CAACE,UAAAA,EAAAA;QAAW1B,SAAAA,EAAU;qBACrBwB,cAAA,CAAA,aAAA,CAACG,QAAAA,EAAAA;QAAS3B,SAAAA,EAAU;AAClBF,KAAAA,EAAAA,IAAAA,CAAK8B,GAAG,CAAC,CAACN,GAAAA,iBACVE,cAAA,CAAA,aAAA,CAACK,WAAAA,EAAAA;AACAC,YAAAA,GAAAA,EAAKR,IAAInB,KAAK;AACdA,YAAAA,KAAAA,EAAOmB,IAAInB,KAAK;AAChBH,YAAAA,SAAAA,EAAW+B,GACV,kCAAA,EACAzB,gBAAAA,EACAC,YAAAA,IAAgB,mBAAA,EAChBe,IAAItB,SAAS,CAAA;YAEduB,QAAAA,EAAUxB,SAAAA,IAAauB,IAAIC,QAAQ;AACnCS,YAAAA,OAAAA,EAAS,IAAMX,cAAAA,CAAeC,GAAAA,CAAAA;YAC9BW,IAAAA,EAAK;WAEJX,GAAAA,CAAIY,KAAK,mBAIbV,cAAA,CAAA,aAAA,CAACW,SAAAA,EAAAA;QAAUC,WAAAA,EAAY;;AAI3B;;;;"}