@fabio.caffarello/react-design-system 2.0.1 → 2.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,64 @@
1
+ "use strict";var re=Object.defineProperty,se=Object.defineProperties;var ie=Object.getOwnPropertyDescriptors;var H=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;var R=(r,a,s)=>a in r?re(r,a,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[a]=s,u=(r,a)=>{for(var s in a||(a={}))U.call(a,s)&&R(r,s,a[s]);if(H)for(var s of H(a))_.call(a,s)&&R(r,s,a[s]);return r},v=(r,a)=>se(r,ie(a));var b=(r,a)=>{var s={};for(var t in r)U.call(r,t)&&a.indexOf(t)<0&&(s[t]=r[t]);if(r!=null&&H)for(var t of H(r))a.indexOf(t)<0&&_.call(r,t)&&(s[t]=r[t]);return s};var K=(r,a,s)=>R(r,typeof a!="symbol"?a+"":a,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),D=require("react"),I=require("lucide-react"),ne=require("clsx"),le=require("tailwind-merge"),oe=require("class-variance-authority");class C{static create(a){const t={none:{px:0,tailwind:"rounded-none",description:"No border radius"},sm:{px:2,tailwind:"rounded-sm",description:"Small radius (2px) for subtle rounding"},md:{px:6,tailwind:"rounded-md",description:"Medium radius (6px) for buttons and inputs"},lg:{px:8,tailwind:"rounded-lg",description:"Large radius (8px) for cards and containers"},xl:{px:12,tailwind:"rounded-xl",description:"Extra large radius (12px) for prominent elements"},"2xl":{px:16,tailwind:"rounded-2xl",description:"2X large radius (16px) for large containers"},"3xl":{px:24,tailwind:"rounded-3xl",description:"3X large radius (24px) for very large containers"},full:{px:9999,tailwind:"rounded-full",description:"Full radius for circular elements"}}[a];return{value:t.px,rem:`${t.px/16}rem`,px:`${t.px}px`,tailwind:t.tailwind,description:t.description}}}const ce={none:C.create("none"),sm:C.create("sm"),md:C.create("md"),lg:C.create("lg"),xl:C.create("xl"),"2xl":C.create("2xl"),"3xl":C.create("3xl"),full:C.create("full")};function $(r){return ce[r].tailwind}class y{static create(a){const s=a*this.BASE_UNIT,t=s/16;return{value:s,rem:`${t}rem`,px:`${s}px`,tailwind:this.getTailwindClass(a)}}static getTailwindClass(a){return{0:"0",.5:"0.5",1:"1",1.5:"1.5",2:"2",2.5:"2.5",3:"3",3.5:"3.5",4:"4",5:"5",6:"6",8:"8",10:"10",12:"12",16:"16",20:"20",24:"24",32:"32",40:"40",48:"48",64:"64",80:"80",96:"96"}[a]||String(a)}}K(y,"BASE_UNIT",4);const de={none:y.create(0),"0.5":y.create(.5),xs:y.create(1),"1.5":y.create(1.5),sm:y.create(2),"2.5":y.create(2.5),md:y.create(3),"3.5":y.create(3.5),base:y.create(4),lg:y.create(6),xl:y.create(8),"2xl":y.create(10),"3xl":y.create(12),"4xl":y.create(16),"5xl":y.create(20),"6xl":y.create(24)};function l(r,a="p"){const t=de[r].tailwind;return`${{p:"p",m:"m",px:"px",mx:"mx",py:"py",my:"my",pt:"pt",mt:"mt",pr:"pr",mr:"mr",pb:"pb",mb:"mb",pl:"pl",ml:"ml",gap:"gap","gap-x":"gap-x","gap-y":"gap-y","space-x":"space-x","space-y":"space-y"}[a]}-${t}`}class w{static createFontSize(a){const t={"2xs":{px:10,tailwind:"text-2xs"},xs:{px:12,tailwind:"text-xs"},sm:{px:14,tailwind:"text-sm"},base:{px:16,tailwind:"text-base"},lg:{px:18,tailwind:"text-lg"},xl:{px:20,tailwind:"text-xl"},"2xl":{px:24,tailwind:"text-2xl"},"3xl":{px:30,tailwind:"text-3xl"},"4xl":{px:36,tailwind:"text-4xl"},"5xl":{px:48,tailwind:"text-5xl"},"6xl":{px:60,tailwind:"text-6xl"}}[a];return{value:t.px,rem:`${t.px/16}rem`,px:`${t.px}px`,tailwind:t.tailwind}}static createLineHeight(a){const t={none:{value:1,tailwind:"leading-none"},tight:{value:1.25,tailwind:"leading-tight"},snug:{value:1.375,tailwind:"leading-snug"},normal:{value:1.5,tailwind:"leading-normal"},relaxed:{value:1.625,tailwind:"leading-relaxed"},loose:{value:2,tailwind:"leading-loose"}}[a];return{value:t.value,tailwind:t.tailwind}}static createFontWeight(a){const t={light:{value:300,tailwind:"font-light"},normal:{value:400,tailwind:"font-normal"},medium:{value:500,tailwind:"font-medium"},semibold:{value:600,tailwind:"font-semibold"},bold:{value:700,tailwind:"font-bold"}}[a];return{value:t.value,tailwind:t.tailwind}}static create(a,s="normal",t="normal"){return{fontSize:this.createFontSize(a),lineHeight:this.createLineHeight(s),fontWeight:this.createFontWeight(t)}}}w.createFontWeight("light"),w.createFontWeight("normal"),w.createFontWeight("medium"),w.createFontWeight("semibold"),w.createFontWeight("bold");const V={h1:w.create("4xl","tight","bold"),h2:w.create("3xl","tight","bold"),h3:w.create("2xl","snug","semibold"),h4:w.create("xl","snug","semibold"),h5:w.create("lg","normal","medium"),h6:w.create("base","normal","medium"),body:w.create("base","relaxed","normal"),bodySmall:w.create("sm","relaxed","normal"),bodyLarge:w.create("lg","relaxed","normal"),label:w.create("sm","normal","medium"),caption:w.create("xs","normal","normal"),button:w.create("base","normal","medium")};function A(r){const a=V[r];return`${a.fontSize.tailwind} ${a.lineHeight.tailwind} ${a.fontWeight.tailwind}`}function F(r){return V[r].fontSize.tailwind}function O(r){return V[r].fontWeight.tailwind}function d(...r){return le.twMerge(ne.clsx(r))}const q=(r,a)=>{const s=oe.cva(r,a);return(t=>{const i=s(t);return d(i)})},fe=q(d("inline-flex","items-center","font-medium",$("full"),l("xs","gap")),{variants:{variant:{default:d("bg-surface-muted","text-fg-primary","border","border-line-default"),outlined:d("bg-transparent","text-fg-primary","border","border-line-default"),filled:d("bg-surface-brand-strong","text-fg-inverse","border","border-transparent")},size:{sm:d(l("xs","px"),l("xs","py"),F("caption")),md:d(l("sm","px"),l("xs","py"),F("bodySmall")),lg:d(l("md","px"),l("sm","py"),F("body"))},selected:{true:d("bg-surface-brand-strong","text-fg-inverse","border","border-line-brand"),false:""},disabled:{true:"opacity-50 cursor-not-allowed",false:""}},compoundVariants:[{selected:!0,variant:"default",class:""},{selected:!0,variant:"outlined",class:""},{selected:!0,variant:"filled",class:""}],defaultVariants:{variant:"default",size:"md",selected:!1,disabled:!1}}),G=D.forwardRef(function(j,h){var S=j,{children:a,variant:s="default",size:t="md",onRemove:i,selected:o=!1,disabled:c=!1,className:f="","aria-label":m,onClick:p,tabIndex:x}=S,g=b(S,["children","variant","size","onRemove","selected","disabled","className","aria-label","onClick","tabIndex"]);const B=(()=>{if(m)return m;if(typeof a=="string")return a;if(typeof a=="object"&&a!==null&&"props"in a){const N=a.props;if(N!=null&&N.children&&typeof N.children=="string")return N.children}})(),P=p!==void 0,ae=P&&!c,te=N=>{c||(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),p==null||p())};return n.jsxs("div",v(u({ref:h,className:d(fe({variant:s,size:t,selected:o,disabled:c}),i&&l("xs","pr"),f),"aria-disabled":c},g),{children:[P?n.jsx("button",{type:"button",onClick:c?void 0:p,onKeyDown:te,disabled:c,"aria-pressed":o?!0:void 0,"aria-label":m||B,tabIndex:x!==void 0?x:ae?0:void 0,className:d("flex-1","bg-transparent","border-0",l("none","p"),"text-inherit","text-left","cursor-pointer","focus:outline-none","focus:ring-2","focus:ring-line-focus","focus:ring-offset-2",$("full")),children:a}):n.jsx("span",{children:a}),i&&!c&&n.jsx("button",{type:"button",onClick:N=>{N.stopPropagation(),i()},className:d(l("xs","ml"),"hover:bg-tint-hover",$("full"),l("xs","p"),"transition-colors","focus:outline-none","focus:ring-2","focus:ring-line-focus","focus:ring-offset-1"),"aria-label":`Remove ${B||"chip"}`,children:n.jsx(I.X,{className:"h-3 w-3","aria-hidden":"true"})})]}))});G.displayName="Chip";function pe(i){var o=i,{message:r,id:a,className:s=""}=o,t=b(o,["message","id","className"]);const c=[l("xs","mt"),F("bodySmall"),"text-fg-error","flex","items-center",l("xs","gap")],f=d(...c,s);return n.jsxs("div",v(u({role:"alert",id:a,className:f,"aria-live":"polite"},t),{children:[n.jsx(I.AlertCircle,{className:"h-4 w-4 shrink-0","aria-hidden":"true"}),n.jsx("span",{children:r})]}))}function ue(t){var i=t,{variant:r="info",className:a}=i,s=b(i,["variant","className"]);const o={warning:d("bg-warning-bg","text-warning-dark","border-warning"),error:d("bg-error-bg","text-error-dark","border-error"),info:d("bg-info-bg","text-info-dark","border-info")};return n.jsx("div",u({role:"alert",className:d("border",l("base","px"),l("sm","py"),$("lg"),o[r],a)},s))}function e(r,a,s){const t=me(r),i=xe(r);return{hex:r,rgb:t,hsl:i,cssVar:`var(--color-${a}-${s})`,tailwind:`${a}-${s}`}}function me(r){const a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);return a?`${parseInt(a[1],16)}, ${parseInt(a[2],16)}, ${parseInt(a[3],16)}`:"0, 0, 0"}function xe(r){const a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);if(!a)return"0, 0%, 0%";const s=parseInt(a[1],16)/255,t=parseInt(a[2],16)/255,i=parseInt(a[3],16)/255,o=Math.max(s,t,i),c=Math.min(s,t,i);let f=0,m=0;const p=(o+c)/2;if(o!==c){const x=o-c;switch(m=p>.5?x/(2-o-c):x/(o+c),o){case s:f=((t-i)/x+(t<i?6:0))/6;break;case t:f=((i-s)/x+2)/6;break;case i:f=((s-t)/x+4)/6;break}}return`${Math.round(f*360)}, ${Math.round(m*100)}%, ${Math.round(p*100)}%`}e("#eef2ff","indigo",50),e("#e0e7ff","indigo",100),e("#c7d2fe","indigo",200),e("#a5b4fc","indigo",300),e("#818cf8","indigo",400),e("#6366f1","indigo",500),e("#4f46e5","indigo",600),e("#4338ca","indigo",700),e("#3730a3","indigo",800),e("#312e81","indigo",900),e("#1e1b4b","indigo",950);e("#f5f3ff","violet",50),e("#ede9fe","violet",100),e("#ddd6fe","violet",200),e("#c4b5fd","violet",300),e("#a78bfa","violet",400),e("#8b5cf6","violet",500),e("#7c3aed","violet",600),e("#6d28d9","violet",700),e("#5b21b6","violet",800),e("#4c1d95","violet",900),e("#2e1065","violet",950);e("#ecfeff","cyan",50),e("#cffafe","cyan",100),e("#a5f3fc","cyan",200),e("#67e8f9","cyan",300),e("#22d3ee","cyan",400),e("#06b6d4","cyan",500),e("#0891b2","cyan",600),e("#0e7490","cyan",700),e("#155e75","cyan",800),e("#164e63","cyan",900),e("#083344","cyan",950);e("#f8fafc","slate",50),e("#f1f5f9","slate",100),e("#e2e8f0","slate",200),e("#cbd5e1","slate",300),e("#94a3b8","slate",400),e("#64748b","slate",500),e("#475569","slate",600),e("#334155","slate",700),e("#1e293b","slate",800),e("#0f172a","slate",900),e("#020617","slate",950);e("#f9fafb","gray",50),e("#f3f4f6","gray",100),e("#e5e7eb","gray",200),e("#d1d5db","gray",300),e("#9ca3af","gray",400),e("#6b7280","gray",500),e("#4b5563","gray",600),e("#374151","gray",700),e("#1f2937","gray",800),e("#111827","gray",900),e("#030712","gray",950);e("#ecfdf5","emerald",50),e("#d1fae5","emerald",100),e("#a7f3d0","emerald",200),e("#6ee7b7","emerald",300),e("#34d399","emerald",400),e("#10b981","emerald",500),e("#059669","emerald",600),e("#047857","emerald",700),e("#065f46","emerald",800),e("#064e3b","emerald",900),e("#022c22","emerald",950);e("#f0fdf4","green",50),e("#dcfce7","green",100),e("#bbf7d0","green",200),e("#86efac","green",300),e("#4ade80","green",400),e("#22c55e","green",500),e("#16a34a","green",600),e("#15803d","green",700),e("#166534","green",800),e("#14532d","green",900),e("#052e16","green",950);e("#fffbeb","amber",50),e("#fef3c7","amber",100),e("#fde68a","amber",200),e("#fcd34d","amber",300),e("#fbbf24","amber",400),e("#f59e0b","amber",500),e("#d97706","amber",600),e("#b45309","amber",700),e("#92400e","amber",800),e("#78350f","amber",900),e("#451a03","amber",950);e("#fefce8","yellow",50),e("#fef9c3","yellow",100),e("#fef08a","yellow",200),e("#fde047","yellow",300),e("#facc15","yellow",400),e("#eab308","yellow",500),e("#ca8a04","yellow",600),e("#a16207","yellow",700),e("#854d0e","yellow",800),e("#713f12","yellow",900),e("#422006","yellow",950);e("#fff7ed","orange",50),e("#ffedd5","orange",100),e("#fed7aa","orange",200),e("#fdba74","orange",300),e("#fb923c","orange",400),e("#f97316","orange",500),e("#ea580c","orange",600),e("#c2410c","orange",700),e("#9a3412","orange",800),e("#7c2d12","orange",900),e("#431407","orange",950);e("#fff1f2","rose",50),e("#ffe4e6","rose",100),e("#fecdd3","rose",200),e("#fda4af","rose",300),e("#fb7185","rose",400),e("#f43f5e","rose",500),e("#e11d48","rose",600),e("#be123c","rose",700),e("#9f1239","rose",800),e("#881337","rose",900),e("#4c0519","rose",950);e("#fef2f2","red",50),e("#fee2e2","red",100),e("#fecaca","red",200),e("#fca5a5","red",300),e("#f87171","red",400),e("#ef4444","red",500),e("#dc2626","red",600),e("#b91c1c","red",700),e("#991b1b","red",800),e("#7f1d1d","red",900),e("#450a0a","red",950);e("#f0f9ff","sky",50),e("#e0f2fe","sky",100),e("#bae6fd","sky",200),e("#7dd3fc","sky",300),e("#38bdf8","sky",400),e("#0ea5e9","sky",500),e("#0284c7","sky",600),e("#0369a1","sky",700),e("#075985","sky",800),e("#0c4a6e","sky",900),e("#082f49","sky",950);e("#eff6ff","blue",50),e("#dbeafe","blue",100),e("#bfdbfe","blue",200),e("#93c5fd","blue",300),e("#60a5fa","blue",400),e("#3b82f6","blue",500),e("#2563eb","blue",600),e("#1d4ed8","blue",700),e("#1e40af","blue",800),e("#1e3a8a","blue",900),e("#172554","blue",950);e("#fdf4ff","fuchsia",50),e("#fae8ff","fuchsia",100),e("#f5d0fe","fuchsia",200),e("#f0abfc","fuchsia",300),e("#e879f9","fuchsia",400),e("#d946ef","fuchsia",500),e("#c026d3","fuchsia",600),e("#a21caf","fuchsia",700),e("#86198f","fuchsia",800),e("#701a75","fuchsia",900),e("#4a044e","fuchsia",950);e("#fdf2f8","pink",50),e("#fce7f3","pink",100),e("#fbcfe8","pink",200),e("#f9a8d4","pink",300),e("#f472b6","pink",400),e("#ec4899","pink",500),e("#db2777","pink",600),e("#be185d","pink",700),e("#9d174d","pink",800),e("#831843","pink",900),e("#500724","pink",950);e("#faf5ff","purple",50),e("#f3e8ff","purple",100),e("#e9d5ff","purple",200),e("#d8b4fe","purple",300),e("#c084fc","purple",400),e("#a855f7","purple",500),e("#9333ea","purple",600),e("#7e22ce","purple",700),e("#6b21a8","purple",800),e("#581c87","purple",900),e("#3b0764","purple",950);e("#f0fdfa","teal",50),e("#ccfbf1","teal",100),e("#99f6e4","teal",200),e("#5eead4","teal",300),e("#2dd4bf","teal",400),e("#14b8a6","teal",500),e("#0d9488","teal",600),e("#0f766e","teal",700),e("#115e59","teal",800),e("#134e4a","teal",900),e("#042f2e","teal",950);e("#f7fee7","lime",50),e("#ecfccb","lime",100),e("#d9f99d","lime",200),e("#bef264","lime",300),e("#a3e635","lime",400),e("#84cc16","lime",500),e("#65a30d","lime",600),e("#4d7c0f","lime",700),e("#3f6212","lime",800),e("#365314","lime",900),e("#1a2e05","lime",950);class L{static create(a){return{none:{value:"none",tailwind:"shadow-none",description:"No shadow"},sm:{value:"0 1px 2px 0 rgb(0 0 0 / 0.05)",tailwind:"shadow-sm",description:"Small shadow for subtle elevation"},md:{value:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",tailwind:"shadow-md",description:"Medium shadow for cards and elevated elements"},lg:{value:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",tailwind:"shadow-lg",description:"Large shadow for modals and dropdowns"},xl:{value:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",tailwind:"shadow-xl",description:"Extra large shadow for prominent modals"},"2xl":{value:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",tailwind:"shadow-2xl",description:"2X large shadow for maximum elevation"},inner:{value:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",tailwind:"shadow-inner",description:"Inner shadow for inset elements"}}[a]}}L.create("none"),L.create("sm"),L.create("md"),L.create("lg"),L.create("xl"),L.create("2xl"),L.create("inner");class T{static createWidth(a){const t={none:{px:0,tailwind:"border-0"},thin:{px:1,tailwind:"border"},base:{px:1,tailwind:"border"},medium:{px:2,tailwind:"border-2"},thick:{px:4,tailwind:"border-4"}}[a];return{value:t.px,px:`${t.px}px`,tailwind:t.tailwind}}static create(a,s="solid"){return{width:this.createWidth(a),style:s,description:`${a} ${s} border`}}}T.create("none"),T.create("thin"),T.create("base"),T.create("medium"),T.create("thick"),T.create("thin","dashed"),T.create("base","dashed"),T.create("thin","dotted"),T.create("base","dotted");class E{static create(a){const t={sm:{minWidth:640,tailwind:"sm"},md:{minWidth:768,tailwind:"md"},lg:{minWidth:1024,tailwind:"lg"},xl:{minWidth:1280,tailwind:"xl"},"2xl":{minWidth:1536,tailwind:"2xl"}}[a];return{name:a,minWidth:t.minWidth,px:`${t.minWidth}px`,rem:`${t.minWidth/16}rem`,tailwind:t.tailwind}}}E.create("sm"),E.create("md"),E.create("lg"),E.create("xl"),E.create("2xl");class z{static create(a,s="ease-in-out"){const t={fast:{value:"150ms",ms:150,tailwind:"duration-150"},base:{value:"200ms",ms:200,tailwind:"duration-200"},slow:{value:"300ms",ms:300,tailwind:"duration-300"},slower:{value:"500ms",ms:500,tailwind:"duration-500"}},i={"ease-in":{value:"cubic-bezier(0.4, 0, 1, 1)",tailwind:"ease-in",description:"Slow start, fast end"},"ease-out":{value:"cubic-bezier(0, 0, 0.2, 1)",tailwind:"ease-out",description:"Fast start, slow end"},"ease-in-out":{value:"cubic-bezier(0.4, 0, 0.2, 1)",tailwind:"ease-in-out",description:"Slow start and end, fast middle"},spring:{value:"cubic-bezier(0.68, -0.55, 0.265, 1.55)",tailwind:"ease-[cubic-bezier(0.68,-0.55,0.265,1.55)]",description:"Spring-like bounce effect"}};return{duration:t[a],easing:i[s]}}static createTransition(a,s="base",t="ease-in-out"){const i=this.create(s,t),o=Array.isArray(a)?a.join(", "):a,c=[i.duration.tailwind,i.easing.tailwind].join(" ");return{property:o,duration:i.duration.value,timingFunction:i.easing.value,tailwind:c}}}z.create("fast"),z.create("base"),z.create("slow"),z.create("slower"),z.createTransition(["color","background-color","border-color"],"base"),z.createTransition("opacity","fast"),z.createTransition("transform","base"),z.createTransition("all","base");class M{static create(a){return{base:{value:0,tailwind:"z-0",description:"Base layer for normal content"},dropdown:{value:1e3,tailwind:"z-[1000]",description:"Dropdown menus and select options"},sticky:{value:1020,tailwind:"z-[1020]",description:"Sticky headers and navigation"},fixed:{value:1030,tailwind:"z-[1030]",description:"Fixed position elements"},"modal-backdrop":{value:1040,tailwind:"z-[1040]",description:"Modal backdrop/overlay"},modal:{value:1050,tailwind:"z-[1050]",description:"Modal dialogs and drawers"},popover:{value:1060,tailwind:"z-[1060]",description:"Popovers and tooltips"},tooltip:{value:1070,tailwind:"z-[1070]",description:"Tooltips (highest priority)"},toast:{value:1080,tailwind:"z-[1080]",description:"Toast notifications (highest priority)"}}[a]}}M.create("base"),M.create("dropdown"),M.create("sticky"),M.create("fixed"),M.create("modal-backdrop"),M.create("modal"),M.create("popover"),M.create("tooltip"),M.create("toast");class k{static create(a){const s=a/100,t={0:"Fully transparent",5:"Very light overlay",10:"Light overlay",20:"Subtle overlay",25:"Quarter opacity",30:"Light background",40:"Semi-transparent",50:"Half opacity",60:"Semi-opaque",70:"Mostly opaque",75:"Three-quarter opacity",80:"High opacity",90:"Very high opacity",95:"Nearly opaque",100:"Fully opaque"};return{value:a,decimal:s,tailwind:{0:"opacity-0",5:"opacity-5",10:"opacity-10",20:"opacity-20",25:"opacity-25",30:"opacity-30",40:"opacity-40",50:"opacity-50",60:"opacity-60",70:"opacity-70",75:"opacity-75",80:"opacity-80",90:"opacity-90",95:"opacity-95",100:"opacity-100"}[a],description:t[a]}}}k.create(0),k.create(5),k.create(10),k.create(20),k.create(25),k.create(30),k.create(40),k.create(50),k.create(60),k.create(70),k.create(75),k.create(80),k.create(90),k.create(95),k.create(100);const ge=q("w-full",{variants:{size:{sm:"h-1",md:"h-2",lg:"h-3"},variant:{primary:"bg-surface-muted",secondary:"bg-surface-muted",success:"bg-success-bg-emphasis",error:"bg-error-bg-emphasis",warning:"bg-warning-bg-emphasis",info:"bg-info-bg-emphasis"}},defaultVariants:{size:"md",variant:"primary"}}),X=q("transition-all",{variants:{variant:{primary:"bg-surface-brand",secondary:"bg-surface-secondary",success:"bg-success",error:"bg-error",warning:"bg-warning",info:"bg-info"}},defaultVariants:{variant:"primary"}}),Y=D.forwardRef(function(g,x){var h=g,{value:a,max:s=100,variant:t="primary",size:i="md",showLabel:o=!1,label:c,"aria-label":f,className:m=""}=h,p=b(h,["value","max","variant","size","showLabel","label","aria-label","className"]);const j=a===void 0,S=j?void 0:Math.min(Math.max(a/s*100,0),100),W=f||(j?"Loading in progress":`Progress: ${S==null?void 0:S.toFixed(0)}%`);return n.jsxs("div",v(u({ref:x,className:d("w-full",m)},p),{children:[o&&(c||!j)&&n.jsxs("div",{className:d("flex","items-center","justify-between",l("xs","mb")),children:[c&&n.jsx("span",{className:d(F("bodySmall"),O("label"),"text-fg-primary"),children:c}),!j&&S!==void 0&&n.jsxs("span",{className:d(F("bodySmall"),"text-fg-secondary"),children:[S.toFixed(0),"%"]})]}),n.jsx("div",{role:"progressbar","aria-valuemin":j?void 0:0,"aria-valuemax":j?void 0:s,"aria-valuenow":j?void 0:a,"aria-label":W,"aria-busy":j,className:d("relative","w-full","overflow-hidden",ge({size:i,variant:t}),$("full")),children:j?n.jsx("div",{className:d("absolute","top-0","left-0","bottom-0",X({variant:t}),$("full"),"motion-reduce:animate-none"),style:{width:"30%",animation:"progress-indeterminate 1.5s ease-in-out infinite"}}):n.jsx("div",{className:d("h-full",X({variant:t}),$("full"),"transition-all","duration-300","ease-out"),style:{width:`${S}%`},"aria-hidden":"true"})})]}))});Y.displayName="Progress";function be(f){var m=f,{variant:r="text",width:a,height:s,lines:t=1,className:i="","aria-label":o}=m,c=b(m,["variant","width","height","lines","className","aria-label"]);const p=["motion-safe:animate-pulse","bg-surface-muted",$("sm")],x={text:"h-4",card:"h-32",list:"h-12",circle:$("full")},g=d(...p,x[r],i),h={};a&&(h.width=a),s&&(h.height=s);const j=o||`Loading ${r} content`;return r==="text"&&t>1?n.jsx("div",v(u({className:l("sm","space-y"),role:"status","aria-busy":"true","aria-label":j},c),{children:Array.from({length:t}).map((S,W)=>n.jsx("div",{className:g,style:W===t-1?{width:"75%"}:h,"aria-hidden":"true"},W))})):n.jsx("div",u({className:g,style:h,role:"status","aria-busy":"true","aria-label":j},c))}const he=q("motion-safe:animate-spin",{variants:{size:{sm:"h-4 w-4",md:"h-5 w-5",lg:"h-8 w-8"},variant:{primary:"text-fg-brand",secondary:"text-fg-brand-secondary",neutral:"text-fg-secondary"}},defaultVariants:{size:"md",variant:"primary"}}),Q=D.memo(function(c){var f=c,{size:a="md",variant:s="primary",label:t,className:i=""}=f,o=b(f,["size","variant","label","className"]);return n.jsxs("div",v(u({className:d("inline-flex","items-center",i),role:"status","aria-label":t||"Loading","aria-live":"polite"},o),{children:[n.jsx(I.Loader2,{className:d(he({size:a,variant:s})),"aria-hidden":"true"}),t&&n.jsx("span",{className:d(l("sm","ml"),F("bodySmall"),"text-fg-secondary","sr-only"),children:t})]}))});Q.displayName="Spinner";const ye={primary:{light:"text-indigo-400",DEFAULT:"text-fg-brand",dark:"text-indigo-600",contrast:"text-fg-inverse"},secondary:{light:"text-pink-300",DEFAULT:"text-fg-brand-secondary",dark:"text-pink-600",contrast:"text-fg-inverse"},success:{light:"text-green-300",DEFAULT:"text-fg-success",dark:"text-success-dark",contrast:"text-fg-inverse"},warning:{light:"text-yellow-300",DEFAULT:"text-fg-warning",dark:"text-warning-dark",contrast:"text-fg-inverse"},error:{light:"text-red-300",DEFAULT:"text-fg-error",dark:"text-error-dark",contrast:"text-fg-inverse"},info:{light:"text-blue-300",DEFAULT:"text-fg-info",dark:"text-info-dark",contrast:"text-fg-inverse"},neutral:{light:"text-fg-tertiary",DEFAULT:"text-fg-secondary",dark:"text-fg-primary",contrast:"text-fg-inverse"}};function we(p,m){var x=p,{variant:r="paragraph",bold:a,italic:s,className:t,as:i,colorRole:o="neutral",colorShade:c="dark"}=x,f=b(x,["variant","bold","italic","className","as","colorRole","colorShade"]);const g=[];let h;if(i)h=i;else switch(r){case"heading":h="h2";break;case"list":h="li";break;default:h="p";break}return r==="heading"?g.push(A("h2")):r==="body"||r==="paragraph"?g.push(A("body")):r==="bodySmall"?g.push(A("bodySmall")):r==="bodyLarge"?g.push(A("bodyLarge")):r==="caption"?g.push(A("caption")):r==="label"?g.push(A("label")):g.push(A("body")),a&&g.push("font-bold"),s&&g.push("italic"),g.push(ye[o][c]),n.jsx(h,u({ref:m,className:d(...g,t)},f))}const ve=D.forwardRef(we),ke={sm:"max-w-screen-sm",md:"max-w-screen-md",lg:"max-w-screen-lg",xl:"max-w-screen-xl","2xl":"max-w-screen-2xl",full:"max-w-full"},Z=D.forwardRef((m,f)=>{var p=m,{className:r,maxWidth:a="lg",paddingX:s="base",paddingY:t="base",center:i=!0,children:o}=p,c=b(p,["className","maxWidth","paddingX","paddingY","center","children"]);return n.jsx("div",v(u({ref:f,className:d("w-full",ke[a],l(s,"px"),l(t,"py"),i&&"mx-auto",r)},c),{children:o}))});Z.displayName="Container";const J=D.forwardRef((m,f)=>{var p=m,{className:r,spacing:a="base",align:s="stretch",justify:t="start",direction:i="column",children:o}=p,c=b(p,["className","spacing","align","justify","direction","children"]);const x=i==="column"?l(a,"gap-y"):l(a,"gap-x"),g={start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"},h={start:"justify-start",center:"justify-center",end:"justify-end",between:"justify-between",around:"justify-around",evenly:"justify-evenly"};return n.jsx("div",v(u({ref:f,className:d("flex",i==="column"?"flex-col":"flex-row",x,g[s],h[t],r)},c),{children:o}))});J.displayName="Stack";const ee=D.forwardRef(function({option:a,isHighlighted:s,onSelect:t},i){const o=()=>{a.disabled||t(a)};return n.jsxs("div",{ref:i,role:"option","aria-selected":s,"aria-disabled":a.disabled,onClick:o,className:`
2
+ flex
3
+ items-center
4
+ ${l("sm","gap")}
5
+ ${l("sm","px")}
6
+ ${l("sm","py")}
7
+ text-sm
8
+ cursor-pointer
9
+ transition-colors
10
+ ${s?"bg-surface-active":""}
11
+ ${a.disabled?"opacity-50 cursor-not-allowed":"hover:bg-surface-hover"}
12
+ `,children:[a.icon&&n.jsx("span",{className:"flex-shrink-0",children:a.icon}),n.jsx("span",{className:"flex-1",children:a.label})]})});ee.displayName="AutocompleteOption";function je(i){var o=i,{items:r,separator:a="/",className:s=""}=o,t=b(o,["items","separator","className"]);const c=["flex","items-center",l("sm","space-x"),F("bodySmall")],f=d(...c,s);return n.jsx("nav",v(u({"aria-label":"Breadcrumb",className:f},t),{children:n.jsx("ol",{className:d("flex","items-center",l("sm","space-x")),children:r.map((m,p)=>{const x=p===r.length-1;return n.jsxs("li",{className:"flex items-center",children:[p>0&&n.jsx("span",{className:d(l("sm","mx"),"text-fg-tertiary"),"aria-hidden":"true",children:a}),x?n.jsx("span",{className:d("text-fg-primary",O("label")),"aria-current":"page",children:m.label}):m.href?n.jsx("a",{href:m.href,className:d("inline-flex","items-center",l("xs","px"),l("xs","pt"),"border-b-2","border-transparent",F("bodySmall"),O("label"),"transition-colors","text-fg-secondary","hover:border-line-emphasis","hover:text-fg-primary"),children:m.label}):n.jsx("span",{className:"text-fg-secondary",children:m.label})]},p)})})}))}function Ne(t){var i=t,{children:r,className:a=""}=i,s=b(i,["children","className"]);return n.jsx("div",v(u({className:`flex flex-col ${l("1.5","space-y")} ${l("lg","p")} ${l("base","pb")} ${a}`},s),{children:r}))}function $e(t){var i=t,{children:r,className:a=""}=i,s=b(i,["children","className"]);return n.jsx("div",v(u({className:`flex flex-col-reverse sm:flex-row sm:justify-end sm:${l("sm","space-x")} ${l("lg","p")} ${l("base","pt")} ${a}`},s),{children:r}))}function Se(t){var i=t,{children:r,className:a=""}=i,s=b(i,["children","className"]);return n.jsx("div",v(u({className:`
13
+ ${l("lg","p")}
14
+ border-b
15
+ border-line-default
16
+ ${a}
17
+ `},s),{children:r}))}function Te(t){var i=t,{children:r,className:a=""}=i,s=b(i,["children","className"]);return n.jsx("div",v(u({className:`
18
+ ${l("lg","p")}
19
+ border-t
20
+ border-line-default
21
+ flex
22
+ justify-end
23
+ ${l("sm","gap")}
24
+ ${a}
25
+ `},s),{children:r}))}function Me({children:r,className:a}){return n.jsx("div",{className:d("flex-shrink-0 flex items-center",l("sm","gap"),a),children:r})}function Fe({children:r,className:a}){return n.jsx("nav",{className:d("flex-1 flex items-center justify-center",l("base","gap"),"hidden md:flex",a),"aria-label":"Main navigation",children:r})}function Ce(s){var t=s,{className:r=""}=t,a=b(t,["className"]);return n.jsx("div",u({role:"separator",className:`
26
+ h-px
27
+ bg-line-default
28
+ ${l("sm","my")}
29
+ ${r}
30
+ `},a))}function ze(t){var i=t,{orientation:r="horizontal",className:a=""}=i,s=b(i,["orientation","className"]);return r==="vertical"?n.jsx("div",u({className:d("w-px","h-6","bg-line-default","mx-auto",a),role:"separator","aria-orientation":"vertical"},s)):n.jsx("div",u({className:d("w-full","h-px","bg-line-default",l("sm","my"),"flex-shrink-0",a),role:"separator","aria-orientation":"horizontal",style:{willChange:"auto",transform:"none"}},s))}function Ae(i){var o=i,{column:r,row:a,className:s=""}=o,t=b(o,["column","row","className"]);const c=r.key in a?a[r.key]:void 0;return n.jsx("td",v(u({className:`${l("lg","px")} ${l("base","py")} whitespace-nowrap text-sm text-fg-primary ${r.hiddenOnMobile?"hidden md:table-cell":""} ${s}`},t),{children:r.render?r.render(c,a):String(c!=null?c:"")}))}function Le({items:r,orientation:a="vertical",className:s=""}){return a==="horizontal"?n.jsx("div",{className:`flex items-start ${s}`,children:r.map((t,i)=>{const o=t.status||(i===0?"active":i<r.findIndex(f=>f.status==="active")?"completed":"default"),c=i===r.length-1;return n.jsx("div",{className:"flex items-start flex-1",children:n.jsxs("div",{className:"flex flex-col items-center flex-1",children:[n.jsx("div",v(u({},o==="default"?{"data-marker":"pending"}:{}),{className:`
31
+ flex
32
+ items-center
33
+ justify-center
34
+ w-10
35
+ h-10
36
+ ${$("full")}
37
+ border-2
38
+ ${o==="completed"?"bg-success border-success text-fg-inverse":o==="active"?"bg-surface-brand-strong border-line-brand text-fg-inverse":o==="error"?"bg-error border-error text-fg-inverse":"bg-surface-base border-line-emphasis text-fg-quaternary"}
39
+ `,children:t.icon||(o==="completed"?n.jsx(I.CheckCircle2,{className:"h-4 w-4"}):i+1)})),!c&&n.jsx("div",{className:`
40
+ w-full
41
+ h-0.5
42
+ ${l("sm","mt")}
43
+ ${o==="completed"?"bg-success":"bg-line-emphasis"}
44
+ `}),n.jsxs("div",{className:`${l("base","mt")} text-center ${l("base","px")}`,children:[t.timestamp&&n.jsx("p",{className:`text-xs text-fg-tertiary ${l("xs","mb")}`,children:t.timestamp}),n.jsx("h3",{className:"text-sm font-semibold text-fg-primary",children:t.title}),t.description&&n.jsx("p",{className:`text-xs text-fg-secondary ${l("xs","mt")}`,children:t.description}),t.content&&n.jsx("div",{className:l("sm","mt"),children:t.content})]})]})},t.id)})}):n.jsx("div",{className:`${l("none","space-y")} ${s}`,children:r.map((t,i)=>{const o=t.status||(i===0?"active":i<r.findIndex(f=>f.status==="active")?"completed":"default"),c=i===r.length-1;return n.jsxs("div",{className:`flex items-start ${l("base","gap")}`,children:[n.jsxs("div",{className:"flex flex-col items-center",children:[n.jsx("div",v(u({},o==="default"?{"data-marker":"pending"}:{}),{className:`
45
+ flex
46
+ items-center
47
+ justify-center
48
+ w-10
49
+ h-10
50
+ ${$("full")}
51
+ border-2
52
+ ${o==="completed"?"bg-success border-success text-fg-inverse":o==="active"?"bg-surface-brand-strong border-line-brand text-fg-inverse":o==="error"?"bg-error border-error text-fg-inverse":"bg-surface-base border-line-emphasis text-fg-quaternary"}
53
+ `,children:t.icon||(o==="completed"?n.jsx(I.CheckCircle2,{className:"h-4 w-4"}):i+1)})),!c&&n.jsx("div",{className:`
54
+ w-0.5
55
+ flex-1
56
+ min-h-16
57
+ ${l("sm","mt")}
58
+ ${o==="completed"?"bg-success":"bg-line-emphasis"}
59
+ `})]}),n.jsxs("div",{className:`flex-1 ${l("xl","pb")}`,children:[t.timestamp&&n.jsx("p",{className:`text-xs text-fg-tertiary ${l("xs","mb")}`,children:t.timestamp}),n.jsx("h3",{className:`
60
+ text-base
61
+ font-semibold
62
+ ${o==="active"?"text-fg-brand-emphasis":"text-fg-primary"}
63
+ `,children:t.title}),t.description&&n.jsx("p",{className:`text-sm text-fg-secondary ${l("xs","mt")}`,children:t.description}),t.content&&n.jsx("div",{className:l("md","mt"),children:t.content})]})]},t.id)})})}exports.AutocompleteOption=ee;exports.Breadcrumb=je;exports.Chip=G;exports.Container=Z;exports.DialogFooter=$e;exports.DialogHeader=Ne;exports.DrawerFooter=Te;exports.DrawerHeader=Se;exports.ErrorMessage=pe;exports.HeaderActions=Me;exports.HeaderNavigation=Fe;exports.Info=ue;exports.MenuSeparator=Ce;exports.NavbarSeparator=ze;exports.Progress=Y;exports.Skeleton=be;exports.Spinner=Q;exports.Stack=J;exports.TableCell=Ae;exports.Text=ve;exports.Timeline=Le;
64
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/ui/tokens/radius.ts","../../src/ui/tokens/spacing.ts","../../src/ui/tokens/typography.ts","../../src/ui/utils/cn.ts","../../src/ui/utils/cva.ts","../../src/ui/primitives/Chip/Chip.tsx","../../src/ui/primitives/ErrorMessage/ErrorMessage.tsx","../../src/ui/primitives/Info/Info.tsx","../../src/ui/tokens/colors/primitives.ts","../../src/ui/tokens/shadows.ts","../../src/ui/tokens/borders.ts","../../src/ui/tokens/breakpoints.ts","../../src/ui/tokens/animations.ts","../../src/ui/tokens/z-index.ts","../../src/ui/tokens/opacity.ts","../../src/ui/primitives/Progress/Progress.tsx","../../src/ui/primitives/Skeleton/Skeleton.tsx","../../src/ui/primitives/Spinner/Spinner.tsx","../../src/ui/primitives/Text/Text.tsx","../../src/ui/layouts/Container/Container.tsx","../../src/ui/layouts/Stack/Stack.tsx","../../src/ui/components/Autocomplete/AutocompleteOption.tsx","../../src/ui/components/Breadcrumb/Breadcrumb.tsx","../../src/ui/components/Dialog/DialogHeader.tsx","../../src/ui/components/Dialog/DialogFooter.tsx","../../src/ui/components/Drawer/DrawerHeader.tsx","../../src/ui/components/Drawer/DrawerFooter.tsx","../../src/ui/components/Header/components/HeaderActions.tsx","../../src/ui/components/Header/components/HeaderNavigation.tsx","../../src/ui/components/Menu/MenuSeparator.tsx","../../src/ui/components/SideNavbar/components/Navbar/NavbarSeparator.tsx","../../src/ui/components/Table/TableCell.tsx","../../src/ui/components/Timeline/Timeline.tsx"],"sourcesContent":["/**\n * Border Radius Tokens\n *\n * Centralized border radius system for consistent rounded corners.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type RadiusSize =\n | \"none\"\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"full\";\n\nexport interface RadiusToken {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n description: string;\n}\n\n/**\n * Radius Token Factory\n * Creates radius tokens with consistent values\n */\nexport class RadiusTokenFactory {\n /**\n * Create a radius token\n */\n static create(size: RadiusSize): RadiusToken {\n const radiusMap: Record<\n RadiusSize,\n { px: number; tailwind: string; description: string }\n > = {\n none: {\n px: 0,\n tailwind: \"rounded-none\",\n description: \"No border radius\",\n },\n sm: {\n px: 2,\n tailwind: \"rounded-sm\",\n description: \"Small radius (2px) for subtle rounding\",\n },\n md: {\n px: 6,\n tailwind: \"rounded-md\",\n description: \"Medium radius (6px) for buttons and inputs\",\n },\n lg: {\n px: 8,\n tailwind: \"rounded-lg\",\n description: \"Large radius (8px) for cards and containers\",\n },\n xl: {\n px: 12,\n tailwind: \"rounded-xl\",\n description: \"Extra large radius (12px) for prominent elements\",\n },\n \"2xl\": {\n px: 16,\n tailwind: \"rounded-2xl\",\n description: \"2X large radius (16px) for large containers\",\n },\n \"3xl\": {\n px: 24,\n tailwind: \"rounded-3xl\",\n description: \"3X large radius (24px) for very large containers\",\n },\n full: {\n px: 9999,\n tailwind: \"rounded-full\",\n description: \"Full radius for circular elements\",\n },\n };\n\n const config = radiusMap[size];\n return {\n value: config.px,\n rem: `${config.px / 16}rem`,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n description: config.description,\n };\n }\n}\n\n/**\n * Pre-defined radius tokens\n */\nexport const RADIUS_TOKENS = {\n none: RadiusTokenFactory.create(\"none\"),\n sm: RadiusTokenFactory.create(\"sm\"),\n md: RadiusTokenFactory.create(\"md\"),\n lg: RadiusTokenFactory.create(\"lg\"),\n xl: RadiusTokenFactory.create(\"xl\"),\n \"2xl\": RadiusTokenFactory.create(\"2xl\"),\n \"3xl\": RadiusTokenFactory.create(\"3xl\"),\n full: RadiusTokenFactory.create(\"full\"),\n} as const;\n\n/**\n * Helper function to get radius token\n */\nexport function getRadius(size: keyof typeof RADIUS_TOKENS): RadiusToken {\n return RADIUS_TOKENS[size];\n}\n\n/**\n * Helper function to get radius as Tailwind class\n */\nexport function getRadiusClass(size: keyof typeof RADIUS_TOKENS): string {\n return RADIUS_TOKENS[size].tailwind;\n}\n","/**\n * Spacing Tokens\n *\n * Centralized spacing scale based on 4px base unit.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type SpacingScale =\n | 0\n | 0.5\n | 1\n | 1.5\n | 2\n | 2.5\n | 3\n | 3.5\n | 4\n | 5\n | 6\n | 8\n | 10\n | 12\n | 16\n | 20\n | 24\n | 32\n | 40\n | 48\n | 64\n | 80\n | 96;\n\nexport interface SpacingToken {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n}\n\n/**\n * Spacing Token Factory\n * Creates spacing tokens with consistent naming and values\n */\nexport class SpacingTokenFactory {\n private static readonly BASE_UNIT = 4; // 4px base\n\n /**\n * Create a spacing token from scale value\n */\n static create(scale: SpacingScale): SpacingToken {\n const px = scale * this.BASE_UNIT;\n const rem = px / 16; // 16px = 1rem\n\n return {\n value: px,\n rem: `${rem}rem`,\n px: `${px}px`,\n tailwind: this.getTailwindClass(scale),\n };\n }\n\n /**\n * Get Tailwind class for spacing value\n */\n private static getTailwindClass(scale: SpacingScale): string {\n const tailwindMap: Record<SpacingScale, string> = {\n 0: \"0\",\n 0.5: \"0.5\", // 2px — half-step, used by fine UI (badges, switches, separators)\n 1: \"1\", // 4px\n 1.5: \"1.5\", // 6px — half-step\n 2: \"2\", // 8px\n 2.5: \"2.5\", // 10px — half-step\n 3: \"3\", // 12px\n 3.5: \"3.5\", // 14px — half-step\n 4: \"4\", // 16px\n 5: \"5\", // 20px\n 6: \"6\", // 24px\n 8: \"8\", // 32px\n 10: \"10\", // 40px\n 12: \"12\", // 48px\n 16: \"16\", // 64px\n 20: \"20\", // 80px\n 24: \"24\", // 96px\n 32: \"32\", // 128px\n 40: \"40\", // 160px\n 48: \"48\", // 192px\n 64: \"64\", // 256px\n 80: \"80\", // 320px\n 96: \"96\", // 384px\n };\n\n return tailwindMap[scale] || String(scale);\n }\n}\n\n/**\n * Pre-defined spacing tokens\n */\nexport const SPACING_TOKENS = {\n // Micro spacing (0-14px)\n none: SpacingTokenFactory.create(0),\n \"0.5\": SpacingTokenFactory.create(0.5), // 2px (half-step)\n xs: SpacingTokenFactory.create(1), // 4px\n \"1.5\": SpacingTokenFactory.create(1.5), // 6px (half-step)\n sm: SpacingTokenFactory.create(2), // 8px\n \"2.5\": SpacingTokenFactory.create(2.5), // 10px (half-step)\n md: SpacingTokenFactory.create(3), // 12px\n \"3.5\": SpacingTokenFactory.create(3.5), // 14px (half-step)\n\n // Standard spacing (16-32px)\n base: SpacingTokenFactory.create(4), // 16px\n lg: SpacingTokenFactory.create(6), // 24px\n xl: SpacingTokenFactory.create(8), // 32px\n\n // Large spacing (40-64px)\n \"2xl\": SpacingTokenFactory.create(10), // 40px\n \"3xl\": SpacingTokenFactory.create(12), // 48px\n \"4xl\": SpacingTokenFactory.create(16), // 64px\n\n // Extra large spacing (80px+)\n \"5xl\": SpacingTokenFactory.create(20), // 80px\n \"6xl\": SpacingTokenFactory.create(24), // 96px\n} as const;\n\n/**\n * Helper function to get spacing value\n */\nexport function getSpacing(scale: keyof typeof SPACING_TOKENS): SpacingToken {\n return SPACING_TOKENS[scale];\n}\n\n/**\n * Helper function to get spacing as Tailwind class\n */\nexport function getSpacingClass(\n scale: keyof typeof SPACING_TOKENS,\n direction:\n | \"p\"\n | \"m\"\n | \"px\"\n | \"mx\"\n | \"py\"\n | \"my\"\n | \"pt\"\n | \"mt\"\n | \"pr\"\n | \"mr\"\n | \"pb\"\n | \"mb\"\n | \"pl\"\n | \"ml\"\n | \"gap\"\n | \"gap-x\"\n | \"gap-y\"\n | \"space-x\"\n | \"space-y\" = \"p\",\n): string {\n const token = SPACING_TOKENS[scale];\n const value = token.tailwind;\n\n const prefixMap: Record<string, string> = {\n p: \"p\",\n m: \"m\",\n px: \"px\",\n mx: \"mx\",\n py: \"py\",\n my: \"my\",\n pt: \"pt\",\n mt: \"mt\",\n pr: \"pr\",\n mr: \"mr\",\n pb: \"pb\",\n mb: \"mb\",\n pl: \"pl\",\n ml: \"ml\",\n gap: \"gap\",\n \"gap-x\": \"gap-x\",\n \"gap-y\": \"gap-y\",\n \"space-x\": \"space-x\",\n \"space-y\": \"space-y\",\n };\n\n return `${prefixMap[direction]}-${value}`;\n}\n","/**\n * Typography Tokens\n *\n * Centralized typography system with font families, sizes, weights, and line heights.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type FontFamily = \"sans\" | \"serif\" | \"mono\";\nexport type FontWeight = \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\";\nexport type FontSize =\n | \"2xs\"\n | \"xs\"\n | \"sm\"\n | \"base\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"5xl\"\n | \"6xl\";\nexport type LineHeight =\n | \"none\"\n | \"tight\"\n | \"snug\"\n | \"normal\"\n | \"relaxed\"\n | \"loose\";\n\nexport interface TypographyToken {\n fontSize: {\n value: number;\n rem: string;\n px: string;\n tailwind: string;\n };\n lineHeight: {\n value: number;\n tailwind: string;\n };\n fontWeight: {\n value: number;\n tailwind: string;\n };\n}\n\nexport interface FontFamilyToken {\n name: string;\n stack: string;\n tailwind: string;\n}\n\nexport interface FontWeightToken {\n value: number;\n tailwind: string;\n}\n\n/**\n * Typography Token Factory\n * Creates typography tokens with consistent values\n */\nexport class TypographyTokenFactory {\n /**\n * Create font size token\n */\n static createFontSize(size: FontSize): TypographyToken[\"fontSize\"] {\n const sizeMap: Record<FontSize, { px: number; tailwind: string }> = {\n \"2xs\": { px: 10, tailwind: \"text-2xs\" }, // micro-text (badge counters, mini chips)\n xs: { px: 12, tailwind: \"text-xs\" },\n sm: { px: 14, tailwind: \"text-sm\" },\n base: { px: 16, tailwind: \"text-base\" },\n lg: { px: 18, tailwind: \"text-lg\" },\n xl: { px: 20, tailwind: \"text-xl\" },\n \"2xl\": { px: 24, tailwind: \"text-2xl\" },\n \"3xl\": { px: 30, tailwind: \"text-3xl\" },\n \"4xl\": { px: 36, tailwind: \"text-4xl\" },\n \"5xl\": { px: 48, tailwind: \"text-5xl\" },\n \"6xl\": { px: 60, tailwind: \"text-6xl\" },\n };\n\n const config = sizeMap[size];\n return {\n value: config.px,\n rem: `${config.px / 16}rem`,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create line height token\n */\n static createLineHeight(height: LineHeight): TypographyToken[\"lineHeight\"] {\n const heightMap: Record<LineHeight, { value: number; tailwind: string }> = {\n none: { value: 1, tailwind: \"leading-none\" },\n tight: { value: 1.25, tailwind: \"leading-tight\" },\n snug: { value: 1.375, tailwind: \"leading-snug\" },\n normal: { value: 1.5, tailwind: \"leading-normal\" },\n relaxed: { value: 1.625, tailwind: \"leading-relaxed\" },\n loose: { value: 2, tailwind: \"leading-loose\" },\n };\n\n const config = heightMap[height];\n return {\n value: config.value,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create font weight token\n */\n static createFontWeight(weight: FontWeight): FontWeightToken {\n const weightMap: Record<FontWeight, { value: number; tailwind: string }> = {\n light: { value: 300, tailwind: \"font-light\" },\n normal: { value: 400, tailwind: \"font-normal\" },\n medium: { value: 500, tailwind: \"font-medium\" },\n semibold: { value: 600, tailwind: \"font-semibold\" },\n bold: { value: 700, tailwind: \"font-bold\" },\n };\n\n const config = weightMap[weight];\n return {\n value: config.value,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create complete typography token\n */\n static create(\n size: FontSize,\n lineHeight: LineHeight = \"normal\",\n weight: FontWeight = \"normal\",\n ): TypographyToken {\n return {\n fontSize: this.createFontSize(size),\n lineHeight: this.createLineHeight(lineHeight),\n fontWeight: this.createFontWeight(weight),\n };\n }\n}\n\n/**\n * Font family tokens\n */\nexport const FONT_FAMILY_TOKENS: Record<FontFamily, FontFamilyToken> = {\n sans: {\n name: \"sans\",\n stack:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif',\n tailwind: \"font-sans\",\n },\n serif: {\n name: \"serif\",\n stack: 'ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif',\n tailwind: \"font-serif\",\n },\n mono: {\n name: \"mono\",\n stack:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n tailwind: \"font-mono\",\n },\n} as const;\n\n/**\n * Font weight tokens\n */\nexport const FONT_WEIGHT_TOKENS: Record<FontWeight, FontWeightToken> = {\n light: TypographyTokenFactory.createFontWeight(\"light\"),\n normal: TypographyTokenFactory.createFontWeight(\"normal\"),\n medium: TypographyTokenFactory.createFontWeight(\"medium\"),\n semibold: TypographyTokenFactory.createFontWeight(\"semibold\"),\n bold: TypographyTokenFactory.createFontWeight(\"bold\"),\n} as const;\n\n/**\n * Pre-defined typography tokens for common use cases\n */\nexport const TYPOGRAPHY_TOKENS = {\n // Headings\n h1: TypographyTokenFactory.create(\"4xl\", \"tight\", \"bold\"),\n h2: TypographyTokenFactory.create(\"3xl\", \"tight\", \"bold\"),\n h3: TypographyTokenFactory.create(\"2xl\", \"snug\", \"semibold\"),\n h4: TypographyTokenFactory.create(\"xl\", \"snug\", \"semibold\"),\n h5: TypographyTokenFactory.create(\"lg\", \"normal\", \"medium\"),\n h6: TypographyTokenFactory.create(\"base\", \"normal\", \"medium\"),\n\n // Body text\n body: TypographyTokenFactory.create(\"base\", \"relaxed\", \"normal\"),\n bodySmall: TypographyTokenFactory.create(\"sm\", \"relaxed\", \"normal\"),\n bodyLarge: TypographyTokenFactory.create(\"lg\", \"relaxed\", \"normal\"),\n\n // UI elements\n label: TypographyTokenFactory.create(\"sm\", \"normal\", \"medium\"),\n caption: TypographyTokenFactory.create(\"xs\", \"normal\", \"normal\"),\n button: TypographyTokenFactory.create(\"base\", \"normal\", \"medium\"),\n} as const;\n\n/**\n * Helper function to get typography token\n */\nexport function getTypography(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): TypographyToken {\n return TYPOGRAPHY_TOKENS[variant];\n}\n\n/**\n * Helper function to get typography classes as string\n */\nexport function getTypographyClasses(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n const token = TYPOGRAPHY_TOKENS[variant];\n return `${token.fontSize.tailwind} ${token.lineHeight.tailwind} ${token.fontWeight.tailwind}`;\n}\n\n/**\n * Helper function to get only font size class\n */\nexport function getTypographySize(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].fontSize.tailwind;\n}\n\n/**\n * Helper function to get font size class directly from FontSize\n * This is a convenience function for when you just need a size, not a full typography variant\n */\nexport function getTypographySizeFromFontSize(size: FontSize): string {\n return TypographyTokenFactory.createFontSize(size).tailwind;\n}\n\n/**\n * Helper function to get only font weight class\n */\nexport function getTypographyWeight(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].fontWeight.tailwind;\n}\n\n/**\n * Helper function to get font weight class directly from FontWeight\n * This is a convenience function for when you just need a weight, not a full typography variant\n */\nexport function getTypographyWeightFromFontWeight(weight: FontWeight): string {\n return TypographyTokenFactory.createFontWeight(weight).tailwind;\n}\n\n/**\n * Helper function to get only line height class\n */\nexport function getTypographyLineHeight(\n variant: keyof typeof TYPOGRAPHY_TOKENS,\n): string {\n return TYPOGRAPHY_TOKENS[variant].lineHeight.tailwind;\n}\n","/**\n * CN Utility - ClassName Merge\n *\n * Utility function for merging classNames with Tailwind conflict resolution.\n * Combines clsx for conditional classes and tailwind-merge for conflict resolution.\n *\n * @example\n * ```tsx\n * cn('base-class', condition && 'conditional-class', className)\n * cn(['class1', 'class2'], { 'class3': true })\n * ```\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges classNames and resolves Tailwind class conflicts.\n *\n * Uses clsx for conditional class handling and tailwind-merge\n * to intelligently merge Tailwind classes, resolving conflicts\n * (e.g., 'p-2' and 'p-4' -> 'p-4').\n *\n * @param inputs - Class values to merge (strings, arrays, objects)\n * @returns Merged className string with conflicts resolved\n *\n * @example\n * ```tsx\n * // Basic usage\n * cn('base-class', 'another-class') // 'base-class another-class'\n *\n * // Conditional classes\n * cn('base', isActive && 'active', className)\n *\n * // Arrays and objects\n * cn(['class1', 'class2'], { 'class3': true, 'class4': false })\n *\n * // Tailwind conflict resolution\n * cn('p-2', 'p-4') // 'p-4' (p-2 is overridden)\n * cn('text-red-500', 'text-blue-500') // 'text-blue-500'\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * CVA Utility - Class Variance Authority\n *\n * Type-safe utility for creating component variants with compound variants support.\n * Based on class-variance-authority but integrated with our design system.\n *\n * @example\n * ```tsx\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: { primary: 'bg-blue-500', secondary: 'bg-gray-500' },\n * size: { sm: 'text-sm', md: 'text-base' }\n * },\n * defaultVariants: { variant: 'primary', size: 'md' }\n * })\n * ```\n */\n\nimport { type VariantProps, cva as cvaLib } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport { cn } from \"./cn\";\n\n/**\n * Re-export VariantProps for type inference\n */\nexport type { VariantProps };\n\n/**\n * Creates a type-safe variant function with compound variants support.\n *\n * Integrates with our cn() utility for proper Tailwind conflict resolution.\n * This is a thin wrapper around class-variance-authority's cva function\n * that ensures cn() is used for final class merging.\n *\n * @param base - Base classes that always apply\n * @param config - Variant configuration with variants, compoundVariants, and defaultVariants\n * @returns Function that returns className based on variant props\n *\n * @example\n * ```tsx\n * // Simple variants\n * const buttonVariants = cva('base-class', {\n * variants: {\n * variant: {\n * primary: 'bg-blue-500 text-white',\n * secondary: 'bg-gray-500 text-white'\n * },\n * size: {\n * sm: 'px-2 py-1 text-sm',\n * md: 'px-4 py-2 text-base'\n * }\n * },\n * defaultVariants: {\n * variant: 'primary',\n * size: 'md'\n * }\n * });\n *\n * // Usage\n * buttonVariants({ variant: 'primary', size: 'sm' })\n *\n * // Compound variants\n * const badgeVariants = cva('base', {\n * variants: {\n * variant: { success: '', error: '' },\n * style: { solid: '', outline: '' }\n * },\n * compoundVariants: [\n * { variant: 'success', style: 'solid', class: 'bg-green-500' },\n * { variant: 'error', style: 'outline', class: 'border-red-500' }\n * ]\n * });\n * ```\n */\nexport const cva = <T extends Record<string, Record<string, ClassValue>>>(\n base?: ClassValue,\n config?: Parameters<typeof cvaLib<T>>[1],\n) => {\n const variantFn = cvaLib(base, config);\n\n // Wrap to ensure cn() is used for final merge\n return ((props?: Parameters<typeof variantFn>[0]) => {\n const variantClasses = variantFn(props);\n return cn(variantClasses);\n }) as typeof variantFn;\n};\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { X } from \"lucide-react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type ChipVariant = \"default\" | \"outlined\" | \"filled\";\nexport type ChipSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ChipProps {\n children: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n onRemove?: () => void;\n selected?: boolean;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n onClick?: () => void;\n tabIndex?: number;\n}\n\n/**\n * Chip Component\n *\n * A chip/tag component for displaying labels, filters, or selected items.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Chip>Tag</Chip>\n * <Chip onRemove={() => console.log('removed')}>Removable</Chip>\n * ```\n */\n// Chip variants using CVA\nconst chipVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"font-medium\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"gap\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"bg-surface-muted\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n outlined: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n filled: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-transparent\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n lg: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n },\n selected: {\n true: cn(\n \"bg-surface-brand-strong\",\n \"text-fg-inverse\",\n \"border\",\n \"border-line-brand\",\n ),\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n selected: true,\n variant: \"default\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"outlined\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"filled\",\n class: \"\", // Override variant when selected\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(\n {\n children,\n variant = \"default\",\n size = \"md\",\n onRemove,\n selected = false,\n disabled = false,\n className = \"\",\n \"aria-label\": ariaLabel,\n onClick,\n tabIndex,\n ...props\n },\n ref,\n) {\n // Generate accessible label\n const getAccessibleLabel = (): string | undefined => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // For non-string children, try to extract text content\n if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n return undefined;\n };\n\n const accessibleLabel = getAccessibleLabel();\n\n // Architecture:\n // The label is a real `<button>` whenever the chip is meant to be\n // activated (`onClick` provided). The X is a sibling `<button>` when\n // `onRemove` is provided. The outer `<div>` is NEVER interactive —\n // no `role`, no `tabIndex`, no event handlers. This unifies what\n // used to be three structural variants:\n // - `onClick` only → outer `role=\"button\"` [old]\n // - `onClick` + `onRemove` (no selected) → label-button [PR68]\n // - `selected` → outer `role=\"option\"` [old, axe-flagged]\n // into one consistent shape: label is the actor, outer is the chip\n // chrome (visual frame).\n //\n // Why this matters for a11y:\n // - `role=\"option\"` outside `role=\"listbox\"` violates `aria-required-\n // parent`. The old `selected` path failed axe in every standalone\n // chip. Moving the action to a native `<button>` with\n // `aria-pressed={selected}` (toggle button pattern) communicates\n // state correctly without requiring a listbox parent.\n // - The interactive outer + inner X button produced nested-interactive\n // whenever the consumer combined `selected` (or `onClick`) with\n // `onRemove`. Outer non-interactive + sibling buttons fixes both\n // cases at once.\n //\n // `selected` with no `onClick` is decorative only — the chip CANNOT\n // toggle, so it gets no `aria-pressed` (which would lie) and no role.\n // The visual `selected` styling (chipVariants.selected) applies, but\n // AT users read it as static text. Consumers who want the state\n // communicated must also pass `onClick` to make it a real toggle.\n const useLabelButton = onClick !== undefined;\n const interactive = useLabelButton && !disabled;\n\n // Keyboard handler for the label-button. Native `<button>` activates on\n // Enter/Space in real browsers, but JSDOM does NOT simulate Enter → click,\n // so this preserves the previous test-friendly behavior AND adds explicit\n // `preventDefault` (the original outer-as-button needed it; on a native\n // button this is mostly belt-and-suspenders but harmless).\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n onRemove && getSpacingClass(\"xs\", \"pr\"),\n className,\n )}\n aria-disabled={disabled}\n {...props}\n >\n {useLabelButton ? (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-pressed={selected ? true : undefined}\n aria-label={ariaLabel || accessibleLabel}\n tabIndex={\n tabIndex !== undefined ? tabIndex : interactive ? 0 : undefined\n }\n className={cn(\n \"flex-1\",\n \"bg-transparent\",\n \"border-0\",\n getSpacingClass(\"none\", \"p\"),\n \"text-inherit\",\n \"text-left\",\n \"cursor-pointer\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"full\"),\n )}\n >\n {children}\n </button>\n ) : (\n <span>{children}</span>\n )}\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className={cn(\n getSpacingClass(\"xs\", \"ml\"),\n \"hover:bg-tint-hover\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"p\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-1\",\n )}\n aria-label={`Remove ${accessibleLabel || \"chip\"}`}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n});\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\n","import type { HTMLAttributes } from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface ErrorMessageProps extends HTMLAttributes<HTMLDivElement> {\n message: string;\n id?: string;\n}\n\n/**\n * ErrorMessage Component\n *\n * A component for displaying validation error messages.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <ErrorMessage message=\"This field is required\" id=\"email-error\" />\n * ```\n */\nexport default function ErrorMessage({\n message,\n id,\n className = \"\",\n ...props\n}: ErrorMessageProps) {\n const baseClasses = [\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-error\",\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <div role=\"alert\" id={id} className={classes} aria-live=\"polite\" {...props}>\n <AlertCircle className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </div>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface InfoProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"info\" | \"warning\" | \"error\";\n}\n\nexport default function Info({\n variant = \"info\",\n className,\n ...props\n}: InfoProps) {\n const variantClasses = {\n warning: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n error: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n info: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n };\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"border\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getRadiusClass(\"lg\"),\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n );\n}\n","/**\n * AIppin Design System - Primitive Color Tokens\n *\n * Complete color palettes with all shades (50-950).\n * These match the CSS variables defined in primitives/colors.css\n *\n * @brand AIppin\n * @version 1.0.0\n */\n\nimport type {\n ColorPalette,\n ColorToken,\n ColorScale,\n PrimitiveColorName,\n PrimitiveColors,\n} from \"./types\";\n\n/**\n * Helper to create a color token\n */\nfunction createToken(\n hex: string,\n colorName: string,\n scale: ColorScale,\n): ColorToken {\n const rgb = hexToRgb(hex);\n const hsl = hexToHsl(hex);\n return {\n hex,\n rgb,\n hsl,\n cssVar: `var(--color-${colorName}-${scale})`,\n tailwind: `${colorName}-${scale}`,\n };\n}\n\n/**\n * Convert hex to RGB string\n */\nfunction hexToRgb(hex: string): string {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result) return \"0, 0, 0\";\n return `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}`;\n}\n\n/**\n * Convert hex to HSL string\n */\nfunction hexToHsl(hex: string): string {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result) return \"0, 0%, 0%\";\n\n const r = parseInt(result[1], 16) / 255;\n const g = parseInt(result[2], 16) / 255;\n const b = parseInt(result[3], 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n return `${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(l * 100)}%`;\n}\n\n/**\n * Indigo - Primary Brand Color\n */\nexport const INDIGO: ColorPalette = {\n 50: createToken(\"#eef2ff\", \"indigo\", 50),\n 100: createToken(\"#e0e7ff\", \"indigo\", 100),\n 200: createToken(\"#c7d2fe\", \"indigo\", 200),\n 300: createToken(\"#a5b4fc\", \"indigo\", 300),\n 400: createToken(\"#818cf8\", \"indigo\", 400),\n 500: createToken(\"#6366f1\", \"indigo\", 500),\n 600: createToken(\"#4f46e5\", \"indigo\", 600),\n 700: createToken(\"#4338ca\", \"indigo\", 700),\n 800: createToken(\"#3730a3\", \"indigo\", 800),\n 900: createToken(\"#312e81\", \"indigo\", 900),\n 950: createToken(\"#1e1b4b\", \"indigo\", 950),\n};\n\n/**\n * Violet - Secondary Brand Color\n */\nexport const VIOLET: ColorPalette = {\n 50: createToken(\"#f5f3ff\", \"violet\", 50),\n 100: createToken(\"#ede9fe\", \"violet\", 100),\n 200: createToken(\"#ddd6fe\", \"violet\", 200),\n 300: createToken(\"#c4b5fd\", \"violet\", 300),\n 400: createToken(\"#a78bfa\", \"violet\", 400),\n 500: createToken(\"#8b5cf6\", \"violet\", 500),\n 600: createToken(\"#7c3aed\", \"violet\", 600),\n 700: createToken(\"#6d28d9\", \"violet\", 700),\n 800: createToken(\"#5b21b6\", \"violet\", 800),\n 900: createToken(\"#4c1d95\", \"violet\", 900),\n 950: createToken(\"#2e1065\", \"violet\", 950),\n};\n\n/**\n * Cyan - Accent Color\n */\nexport const CYAN: ColorPalette = {\n 50: createToken(\"#ecfeff\", \"cyan\", 50),\n 100: createToken(\"#cffafe\", \"cyan\", 100),\n 200: createToken(\"#a5f3fc\", \"cyan\", 200),\n 300: createToken(\"#67e8f9\", \"cyan\", 300),\n 400: createToken(\"#22d3ee\", \"cyan\", 400),\n 500: createToken(\"#06b6d4\", \"cyan\", 500),\n 600: createToken(\"#0891b2\", \"cyan\", 600),\n 700: createToken(\"#0e7490\", \"cyan\", 700),\n 800: createToken(\"#155e75\", \"cyan\", 800),\n 900: createToken(\"#164e63\", \"cyan\", 900),\n 950: createToken(\"#083344\", \"cyan\", 950),\n};\n\n/**\n * Slate - Neutral Color\n */\nexport const SLATE: ColorPalette = {\n 50: createToken(\"#f8fafc\", \"slate\", 50),\n 100: createToken(\"#f1f5f9\", \"slate\", 100),\n 200: createToken(\"#e2e8f0\", \"slate\", 200),\n 300: createToken(\"#cbd5e1\", \"slate\", 300),\n 400: createToken(\"#94a3b8\", \"slate\", 400),\n 500: createToken(\"#64748b\", \"slate\", 500),\n 600: createToken(\"#475569\", \"slate\", 600),\n 700: createToken(\"#334155\", \"slate\", 700),\n 800: createToken(\"#1e293b\", \"slate\", 800),\n 900: createToken(\"#0f172a\", \"slate\", 900),\n 950: createToken(\"#020617\", \"slate\", 950),\n};\n\n/**\n * Gray - Alternative Neutral\n */\nexport const GRAY: ColorPalette = {\n 50: createToken(\"#f9fafb\", \"gray\", 50),\n 100: createToken(\"#f3f4f6\", \"gray\", 100),\n 200: createToken(\"#e5e7eb\", \"gray\", 200),\n 300: createToken(\"#d1d5db\", \"gray\", 300),\n 400: createToken(\"#9ca3af\", \"gray\", 400),\n 500: createToken(\"#6b7280\", \"gray\", 500),\n 600: createToken(\"#4b5563\", \"gray\", 600),\n 700: createToken(\"#374151\", \"gray\", 700),\n 800: createToken(\"#1f2937\", \"gray\", 800),\n 900: createToken(\"#111827\", \"gray\", 900),\n 950: createToken(\"#030712\", \"gray\", 950),\n};\n\n/**\n * Emerald - Success Color\n */\nexport const EMERALD: ColorPalette = {\n 50: createToken(\"#ecfdf5\", \"emerald\", 50),\n 100: createToken(\"#d1fae5\", \"emerald\", 100),\n 200: createToken(\"#a7f3d0\", \"emerald\", 200),\n 300: createToken(\"#6ee7b7\", \"emerald\", 300),\n 400: createToken(\"#34d399\", \"emerald\", 400),\n 500: createToken(\"#10b981\", \"emerald\", 500),\n 600: createToken(\"#059669\", \"emerald\", 600),\n 700: createToken(\"#047857\", \"emerald\", 700),\n 800: createToken(\"#065f46\", \"emerald\", 800),\n 900: createToken(\"#064e3b\", \"emerald\", 900),\n 950: createToken(\"#022c22\", \"emerald\", 950),\n};\n\n/**\n * Green - Alternative Success\n */\nexport const GREEN: ColorPalette = {\n 50: createToken(\"#f0fdf4\", \"green\", 50),\n 100: createToken(\"#dcfce7\", \"green\", 100),\n 200: createToken(\"#bbf7d0\", \"green\", 200),\n 300: createToken(\"#86efac\", \"green\", 300),\n 400: createToken(\"#4ade80\", \"green\", 400),\n 500: createToken(\"#22c55e\", \"green\", 500),\n 600: createToken(\"#16a34a\", \"green\", 600),\n 700: createToken(\"#15803d\", \"green\", 700),\n 800: createToken(\"#166534\", \"green\", 800),\n 900: createToken(\"#14532d\", \"green\", 900),\n 950: createToken(\"#052e16\", \"green\", 950),\n};\n\n/**\n * Amber - Warning Color\n */\nexport const AMBER: ColorPalette = {\n 50: createToken(\"#fffbeb\", \"amber\", 50),\n 100: createToken(\"#fef3c7\", \"amber\", 100),\n 200: createToken(\"#fde68a\", \"amber\", 200),\n 300: createToken(\"#fcd34d\", \"amber\", 300),\n 400: createToken(\"#fbbf24\", \"amber\", 400),\n 500: createToken(\"#f59e0b\", \"amber\", 500),\n 600: createToken(\"#d97706\", \"amber\", 600),\n 700: createToken(\"#b45309\", \"amber\", 700),\n 800: createToken(\"#92400e\", \"amber\", 800),\n 900: createToken(\"#78350f\", \"amber\", 900),\n 950: createToken(\"#451a03\", \"amber\", 950),\n};\n\n/**\n * Yellow - Alternative Warning\n */\nexport const YELLOW: ColorPalette = {\n 50: createToken(\"#fefce8\", \"yellow\", 50),\n 100: createToken(\"#fef9c3\", \"yellow\", 100),\n 200: createToken(\"#fef08a\", \"yellow\", 200),\n 300: createToken(\"#fde047\", \"yellow\", 300),\n 400: createToken(\"#facc15\", \"yellow\", 400),\n 500: createToken(\"#eab308\", \"yellow\", 500),\n 600: createToken(\"#ca8a04\", \"yellow\", 600),\n 700: createToken(\"#a16207\", \"yellow\", 700),\n 800: createToken(\"#854d0e\", \"yellow\", 800),\n 900: createToken(\"#713f12\", \"yellow\", 900),\n 950: createToken(\"#422006\", \"yellow\", 950),\n};\n\n/**\n * Orange - Energetic Accent\n */\nexport const ORANGE: ColorPalette = {\n 50: createToken(\"#fff7ed\", \"orange\", 50),\n 100: createToken(\"#ffedd5\", \"orange\", 100),\n 200: createToken(\"#fed7aa\", \"orange\", 200),\n 300: createToken(\"#fdba74\", \"orange\", 300),\n 400: createToken(\"#fb923c\", \"orange\", 400),\n 500: createToken(\"#f97316\", \"orange\", 500),\n 600: createToken(\"#ea580c\", \"orange\", 600),\n 700: createToken(\"#c2410c\", \"orange\", 700),\n 800: createToken(\"#9a3412\", \"orange\", 800),\n 900: createToken(\"#7c2d12\", \"orange\", 900),\n 950: createToken(\"#431407\", \"orange\", 950),\n};\n\n/**\n * Rose - Error Color\n */\nexport const ROSE: ColorPalette = {\n 50: createToken(\"#fff1f2\", \"rose\", 50),\n 100: createToken(\"#ffe4e6\", \"rose\", 100),\n 200: createToken(\"#fecdd3\", \"rose\", 200),\n 300: createToken(\"#fda4af\", \"rose\", 300),\n 400: createToken(\"#fb7185\", \"rose\", 400),\n 500: createToken(\"#f43f5e\", \"rose\", 500),\n 600: createToken(\"#e11d48\", \"rose\", 600),\n 700: createToken(\"#be123c\", \"rose\", 700),\n 800: createToken(\"#9f1239\", \"rose\", 800),\n 900: createToken(\"#881337\", \"rose\", 900),\n 950: createToken(\"#4c0519\", \"rose\", 950),\n};\n\n/**\n * Red - Alternative Error\n */\nexport const RED: ColorPalette = {\n 50: createToken(\"#fef2f2\", \"red\", 50),\n 100: createToken(\"#fee2e2\", \"red\", 100),\n 200: createToken(\"#fecaca\", \"red\", 200),\n 300: createToken(\"#fca5a5\", \"red\", 300),\n 400: createToken(\"#f87171\", \"red\", 400),\n 500: createToken(\"#ef4444\", \"red\", 500),\n 600: createToken(\"#dc2626\", \"red\", 600),\n 700: createToken(\"#b91c1c\", \"red\", 700),\n 800: createToken(\"#991b1b\", \"red\", 800),\n 900: createToken(\"#7f1d1d\", \"red\", 900),\n 950: createToken(\"#450a0a\", \"red\", 950),\n};\n\n/**\n * Sky - Info Color\n */\nexport const SKY: ColorPalette = {\n 50: createToken(\"#f0f9ff\", \"sky\", 50),\n 100: createToken(\"#e0f2fe\", \"sky\", 100),\n 200: createToken(\"#bae6fd\", \"sky\", 200),\n 300: createToken(\"#7dd3fc\", \"sky\", 300),\n 400: createToken(\"#38bdf8\", \"sky\", 400),\n 500: createToken(\"#0ea5e9\", \"sky\", 500),\n 600: createToken(\"#0284c7\", \"sky\", 600),\n 700: createToken(\"#0369a1\", \"sky\", 700),\n 800: createToken(\"#075985\", \"sky\", 800),\n 900: createToken(\"#0c4a6e\", \"sky\", 900),\n 950: createToken(\"#082f49\", \"sky\", 950),\n};\n\n/**\n * Blue - Alternative Info\n */\nexport const BLUE: ColorPalette = {\n 50: createToken(\"#eff6ff\", \"blue\", 50),\n 100: createToken(\"#dbeafe\", \"blue\", 100),\n 200: createToken(\"#bfdbfe\", \"blue\", 200),\n 300: createToken(\"#93c5fd\", \"blue\", 300),\n 400: createToken(\"#60a5fa\", \"blue\", 400),\n 500: createToken(\"#3b82f6\", \"blue\", 500),\n 600: createToken(\"#2563eb\", \"blue\", 600),\n 700: createToken(\"#1d4ed8\", \"blue\", 700),\n 800: createToken(\"#1e40af\", \"blue\", 800),\n 900: createToken(\"#1e3a8a\", \"blue\", 900),\n 950: createToken(\"#172554\", \"blue\", 950),\n};\n\n/**\n * Fuchsia - Creative Accent\n */\nexport const FUCHSIA: ColorPalette = {\n 50: createToken(\"#fdf4ff\", \"fuchsia\", 50),\n 100: createToken(\"#fae8ff\", \"fuchsia\", 100),\n 200: createToken(\"#f5d0fe\", \"fuchsia\", 200),\n 300: createToken(\"#f0abfc\", \"fuchsia\", 300),\n 400: createToken(\"#e879f9\", \"fuchsia\", 400),\n 500: createToken(\"#d946ef\", \"fuchsia\", 500),\n 600: createToken(\"#c026d3\", \"fuchsia\", 600),\n 700: createToken(\"#a21caf\", \"fuchsia\", 700),\n 800: createToken(\"#86198f\", \"fuchsia\", 800),\n 900: createToken(\"#701a75\", \"fuchsia\", 900),\n 950: createToken(\"#4a044e\", \"fuchsia\", 950),\n};\n\n/**\n * Pink - Soft Accent\n */\nexport const PINK: ColorPalette = {\n 50: createToken(\"#fdf2f8\", \"pink\", 50),\n 100: createToken(\"#fce7f3\", \"pink\", 100),\n 200: createToken(\"#fbcfe8\", \"pink\", 200),\n 300: createToken(\"#f9a8d4\", \"pink\", 300),\n 400: createToken(\"#f472b6\", \"pink\", 400),\n 500: createToken(\"#ec4899\", \"pink\", 500),\n 600: createToken(\"#db2777\", \"pink\", 600),\n 700: createToken(\"#be185d\", \"pink\", 700),\n 800: createToken(\"#9d174d\", \"pink\", 800),\n 900: createToken(\"#831843\", \"pink\", 900),\n 950: createToken(\"#500724\", \"pink\", 950),\n};\n\n/**\n * Purple - Deep Accent\n */\nexport const PURPLE: ColorPalette = {\n 50: createToken(\"#faf5ff\", \"purple\", 50),\n 100: createToken(\"#f3e8ff\", \"purple\", 100),\n 200: createToken(\"#e9d5ff\", \"purple\", 200),\n 300: createToken(\"#d8b4fe\", \"purple\", 300),\n 400: createToken(\"#c084fc\", \"purple\", 400),\n 500: createToken(\"#a855f7\", \"purple\", 500),\n 600: createToken(\"#9333ea\", \"purple\", 600),\n 700: createToken(\"#7e22ce\", \"purple\", 700),\n 800: createToken(\"#6b21a8\", \"purple\", 800),\n 900: createToken(\"#581c87\", \"purple\", 900),\n 950: createToken(\"#3b0764\", \"purple\", 950),\n};\n\n/**\n * Teal - Fresh Accent\n */\nexport const TEAL: ColorPalette = {\n 50: createToken(\"#f0fdfa\", \"teal\", 50),\n 100: createToken(\"#ccfbf1\", \"teal\", 100),\n 200: createToken(\"#99f6e4\", \"teal\", 200),\n 300: createToken(\"#5eead4\", \"teal\", 300),\n 400: createToken(\"#2dd4bf\", \"teal\", 400),\n 500: createToken(\"#14b8a6\", \"teal\", 500),\n 600: createToken(\"#0d9488\", \"teal\", 600),\n 700: createToken(\"#0f766e\", \"teal\", 700),\n 800: createToken(\"#115e59\", \"teal\", 800),\n 900: createToken(\"#134e4a\", \"teal\", 900),\n 950: createToken(\"#042f2e\", \"teal\", 950),\n};\n\n/**\n * Lime - Vibrant Success\n */\nexport const LIME: ColorPalette = {\n 50: createToken(\"#f7fee7\", \"lime\", 50),\n 100: createToken(\"#ecfccb\", \"lime\", 100),\n 200: createToken(\"#d9f99d\", \"lime\", 200),\n 300: createToken(\"#bef264\", \"lime\", 300),\n 400: createToken(\"#a3e635\", \"lime\", 400),\n 500: createToken(\"#84cc16\", \"lime\", 500),\n 600: createToken(\"#65a30d\", \"lime\", 600),\n 700: createToken(\"#4d7c0f\", \"lime\", 700),\n 800: createToken(\"#3f6212\", \"lime\", 800),\n 900: createToken(\"#365314\", \"lime\", 900),\n 950: createToken(\"#1a2e05\", \"lime\", 950),\n};\n\n/**\n * All primitive colors combined\n */\nexport const PRIMITIVE_COLORS: PrimitiveColors = {\n indigo: INDIGO,\n violet: VIOLET,\n cyan: CYAN,\n slate: SLATE,\n gray: GRAY,\n emerald: EMERALD,\n green: GREEN,\n amber: AMBER,\n yellow: YELLOW,\n orange: ORANGE,\n rose: ROSE,\n red: RED,\n sky: SKY,\n blue: BLUE,\n fuchsia: FUCHSIA,\n pink: PINK,\n purple: PURPLE,\n teal: TEAL,\n lime: LIME,\n};\n\n/**\n * Get a primitive color by name and scale\n */\nexport function getPrimitiveColor(\n name: PrimitiveColorName,\n scale: ColorScale,\n): ColorToken {\n return PRIMITIVE_COLORS[name][scale];\n}\n\n/**\n * Get all scales for a primitive color\n */\nexport function getPrimitiveColorPalette(\n name: PrimitiveColorName,\n): ColorPalette {\n return PRIMITIVE_COLORS[name];\n}\n","/**\n * Shadow Tokens\n *\n * Centralized shadow system for consistent elevation and depth.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type ShadowSize = \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"inner\";\n\nexport interface ShadowToken {\n value: string;\n tailwind: string;\n description: string;\n}\n\n/**\n * Shadow Token Factory\n * Creates shadow tokens with consistent values\n */\nexport class ShadowTokenFactory {\n /**\n * Create a shadow token\n */\n static create(size: ShadowSize): ShadowToken {\n const shadowMap: Record<\n ShadowSize,\n { value: string; tailwind: string; description: string }\n > = {\n none: {\n value: \"none\",\n tailwind: \"shadow-none\",\n description: \"No shadow\",\n },\n sm: {\n value: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n tailwind: \"shadow-sm\",\n description: \"Small shadow for subtle elevation\",\n },\n md: {\n value: \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-md\",\n description: \"Medium shadow for cards and elevated elements\",\n },\n lg: {\n value:\n \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-lg\",\n description: \"Large shadow for modals and dropdowns\",\n },\n xl: {\n value:\n \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-xl\",\n description: \"Extra large shadow for prominent modals\",\n },\n \"2xl\": {\n value:\n \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n tailwind: \"shadow-2xl\",\n description: \"2X large shadow for maximum elevation\",\n },\n inner: {\n value: \"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)\",\n tailwind: \"shadow-inner\",\n description: \"Inner shadow for inset elements\",\n },\n };\n\n return shadowMap[size];\n }\n}\n\n/**\n * Pre-defined shadow tokens\n */\nexport const SHADOW_TOKENS = {\n none: ShadowTokenFactory.create(\"none\"),\n sm: ShadowTokenFactory.create(\"sm\"),\n md: ShadowTokenFactory.create(\"md\"),\n lg: ShadowTokenFactory.create(\"lg\"),\n xl: ShadowTokenFactory.create(\"xl\"),\n \"2xl\": ShadowTokenFactory.create(\"2xl\"),\n inner: ShadowTokenFactory.create(\"inner\"),\n} as const;\n\n/**\n * Helper function to get shadow token\n */\nexport function getShadow(size: keyof typeof SHADOW_TOKENS): ShadowToken {\n return SHADOW_TOKENS[size];\n}\n\n/**\n * Helper function to get shadow as Tailwind class\n */\nexport function getShadowClass(size: keyof typeof SHADOW_TOKENS): string {\n return SHADOW_TOKENS[size].tailwind;\n}\n","/**\n * Border Tokens\n *\n * Centralized border system for consistent borders and dividers.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type BorderWidth = \"none\" | \"thin\" | \"base\" | \"medium\" | \"thick\";\nexport type BorderStyle = \"solid\" | \"dashed\" | \"dotted\";\n\nexport interface BorderToken {\n width: {\n value: number;\n px: string;\n tailwind: string;\n };\n style: BorderStyle;\n description: string;\n}\n\n/**\n * Border Token Factory\n * Creates border tokens with consistent values\n */\nexport class BorderTokenFactory {\n /**\n * Create a border width token\n */\n static createWidth(width: BorderWidth): BorderToken[\"width\"] {\n const widthMap: Record<BorderWidth, { px: number; tailwind: string }> = {\n none: {\n px: 0,\n tailwind: \"border-0\",\n },\n thin: {\n px: 1,\n tailwind: \"border\",\n },\n base: {\n px: 1,\n tailwind: \"border\",\n },\n medium: {\n px: 2,\n tailwind: \"border-2\",\n },\n thick: {\n px: 4,\n tailwind: \"border-4\",\n },\n };\n\n const config = widthMap[width];\n return {\n value: config.px,\n px: `${config.px}px`,\n tailwind: config.tailwind,\n };\n }\n\n /**\n * Create a complete border token\n */\n static create(width: BorderWidth, style: BorderStyle = \"solid\"): BorderToken {\n return {\n width: this.createWidth(width),\n style,\n description: `${width} ${style} border`,\n };\n }\n}\n\n/**\n * Pre-defined border tokens\n */\nexport const BORDER_TOKENS = {\n none: BorderTokenFactory.create(\"none\"),\n thin: BorderTokenFactory.create(\"thin\"),\n base: BorderTokenFactory.create(\"base\"),\n medium: BorderTokenFactory.create(\"medium\"),\n thick: BorderTokenFactory.create(\"thick\"),\n // Dashed variants\n thinDashed: BorderTokenFactory.create(\"thin\", \"dashed\"),\n baseDashed: BorderTokenFactory.create(\"base\", \"dashed\"),\n // Dotted variants\n thinDotted: BorderTokenFactory.create(\"thin\", \"dotted\"),\n baseDotted: BorderTokenFactory.create(\"base\", \"dotted\"),\n} as const;\n\n/**\n * Helper function to get border token\n */\nexport function getBorder(size: keyof typeof BORDER_TOKENS): BorderToken {\n return BORDER_TOKENS[size];\n}\n\n/**\n * Helper function to get border width as Tailwind class\n */\nexport function getBorderWidthClass(width: BorderWidth): string {\n return BorderTokenFactory.createWidth(width).tailwind;\n}\n\n/**\n * Helper function to get border style as Tailwind class\n */\nexport function getBorderStyleClass(style: BorderStyle): string {\n const styleMap: Record<BorderStyle, string> = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n };\n return styleMap[style];\n}\n\n/**\n * Helper function to get complete border classes\n */\nexport function getBorderClasses(\n width: BorderWidth,\n style: BorderStyle = \"solid\",\n): string {\n return `${getBorderWidthClass(width)} ${getBorderStyleClass(style)}`;\n}\n","/**\n * Breakpoint Tokens\n *\n * Responsive breakpoints for consistent media queries.\n * Uses Factory Pattern for type-safe breakpoint creation.\n */\n\nexport type BreakpointName = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nexport interface BreakpointToken {\n name: BreakpointName;\n minWidth: number;\n px: string;\n rem: string;\n tailwind: string;\n}\n\n/**\n * Breakpoint Token Factory\n * Creates breakpoint tokens with consistent values\n */\nexport class BreakpointTokenFactory {\n /**\n * Create breakpoint token\n */\n static create(name: BreakpointName): BreakpointToken {\n const breakpointMap: Record<\n BreakpointName,\n { minWidth: number; tailwind: string }\n > = {\n sm: { minWidth: 640, tailwind: \"sm\" },\n md: { minWidth: 768, tailwind: \"md\" },\n lg: { minWidth: 1024, tailwind: \"lg\" },\n xl: { minWidth: 1280, tailwind: \"xl\" },\n \"2xl\": { minWidth: 1536, tailwind: \"2xl\" },\n };\n\n const config = breakpointMap[name];\n return {\n name,\n minWidth: config.minWidth,\n px: `${config.minWidth}px`,\n rem: `${config.minWidth / 16}rem`,\n tailwind: config.tailwind,\n };\n }\n}\n\n/**\n * Pre-defined breakpoint tokens\n */\nexport const BREAKPOINT_TOKENS: Record<BreakpointName, BreakpointToken> = {\n sm: BreakpointTokenFactory.create(\"sm\"),\n md: BreakpointTokenFactory.create(\"md\"),\n lg: BreakpointTokenFactory.create(\"lg\"),\n xl: BreakpointTokenFactory.create(\"xl\"),\n \"2xl\": BreakpointTokenFactory.create(\"2xl\"),\n} as const;\n\n/**\n * Helper function to get breakpoint token\n */\nexport function getBreakpoint(name: BreakpointName): BreakpointToken {\n return BREAKPOINT_TOKENS[name];\n}\n\n/**\n * Helper function to create media query string\n */\nexport function getMediaQuery(\n name: BreakpointName,\n direction: \"min\" | \"max\" = \"min\",\n): string {\n const breakpoint = BREAKPOINT_TOKENS[name];\n const operator = direction === \"min\" ? \"min-width\" : \"max-width\";\n return `@media (${operator}: ${breakpoint.px})`;\n}\n","/**\n * Animation Tokens\n *\n * Centralized animation and transition system for consistent timing and easing.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type AnimationDuration = \"fast\" | \"base\" | \"slow\" | \"slower\";\nexport type EasingFunction = \"ease-in\" | \"ease-out\" | \"ease-in-out\" | \"spring\";\n\nexport interface AnimationToken {\n duration: {\n value: string;\n ms: number;\n tailwind: string;\n };\n easing: {\n value: string;\n tailwind: string;\n description: string;\n };\n}\n\nexport interface TransitionToken {\n property: string;\n duration: string;\n timingFunction: string;\n tailwind: string;\n}\n\n/**\n * Animation Token Factory\n * Creates animation tokens with consistent timing and easing\n */\nexport class AnimationTokenFactory {\n /**\n * Create an animation token\n */\n static create(\n duration: AnimationDuration,\n easing: EasingFunction = \"ease-in-out\",\n ): AnimationToken {\n const durationMap: Record<\n AnimationDuration,\n { value: string; ms: number; tailwind: string }\n > = {\n fast: {\n value: \"150ms\",\n ms: 150,\n tailwind: \"duration-150\",\n },\n base: {\n value: \"200ms\",\n ms: 200,\n tailwind: \"duration-200\",\n },\n slow: {\n value: \"300ms\",\n ms: 300,\n tailwind: \"duration-300\",\n },\n slower: {\n value: \"500ms\",\n ms: 500,\n tailwind: \"duration-500\",\n },\n };\n\n const easingMap: Record<\n EasingFunction,\n { value: string; tailwind: string; description: string }\n > = {\n \"ease-in\": {\n value: \"cubic-bezier(0.4, 0, 1, 1)\",\n tailwind: \"ease-in\",\n description: \"Slow start, fast end\",\n },\n \"ease-out\": {\n value: \"cubic-bezier(0, 0, 0.2, 1)\",\n tailwind: \"ease-out\",\n description: \"Fast start, slow end\",\n },\n \"ease-in-out\": {\n value: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n tailwind: \"ease-in-out\",\n description: \"Slow start and end, fast middle\",\n },\n spring: {\n value: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n tailwind: \"ease-[cubic-bezier(0.68,-0.55,0.265,1.55)]\",\n description: \"Spring-like bounce effect\",\n },\n };\n\n return {\n duration: durationMap[duration],\n easing: easingMap[easing],\n };\n }\n\n /**\n * Create a transition token\n */\n static createTransition(\n property: string | string[],\n duration: AnimationDuration = \"base\",\n easing: EasingFunction = \"ease-in-out\",\n ): TransitionToken {\n const durationToken = this.create(duration, easing);\n const properties = Array.isArray(property) ? property.join(\", \") : property;\n const tailwindClasses = [\n durationToken.duration.tailwind,\n durationToken.easing.tailwind,\n ].join(\" \");\n\n return {\n property: properties,\n duration: durationToken.duration.value,\n timingFunction: durationToken.easing.value,\n tailwind: tailwindClasses,\n };\n }\n}\n\n/**\n * Pre-defined animation tokens\n */\nexport const ANIMATION_TOKENS = {\n fast: AnimationTokenFactory.create(\"fast\"),\n base: AnimationTokenFactory.create(\"base\"),\n slow: AnimationTokenFactory.create(\"slow\"),\n slower: AnimationTokenFactory.create(\"slower\"),\n\n // Common transitions\n colors: AnimationTokenFactory.createTransition(\n [\"color\", \"background-color\", \"border-color\"],\n \"base\",\n ),\n opacity: AnimationTokenFactory.createTransition(\"opacity\", \"fast\"),\n transform: AnimationTokenFactory.createTransition(\"transform\", \"base\"),\n all: AnimationTokenFactory.createTransition(\"all\", \"base\"),\n} as const;\n\n/**\n * Helper function to get animation token\n */\nexport function getAnimation(\n duration: AnimationDuration,\n easing?: EasingFunction,\n): AnimationToken {\n return AnimationTokenFactory.create(duration, easing);\n}\n\n/**\n * Helper function to get animation classes\n */\nexport function getAnimationClass(\n duration: AnimationDuration,\n easing: EasingFunction = \"ease-in-out\",\n): string {\n const token = AnimationTokenFactory.create(duration, easing);\n return `${token.duration.tailwind} ${token.easing.tailwind}`;\n}\n\n/**\n * Helper function to get transition classes\n */\nexport function getTransitionClass(\n property: string | string[],\n duration: AnimationDuration = \"base\",\n easing: EasingFunction = \"ease-in-out\",\n): string {\n const transition = AnimationTokenFactory.createTransition(\n property,\n duration,\n easing,\n );\n return transition.tailwind;\n}\n","/**\n * Z-Index Tokens\n *\n * Centralized z-index system for consistent layering.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type ZIndexLayer =\n | \"base\"\n | \"dropdown\"\n | \"sticky\"\n | \"fixed\"\n | \"modal-backdrop\"\n | \"modal\"\n | \"popover\"\n | \"tooltip\"\n | \"toast\";\n\nexport interface ZIndexToken {\n value: number;\n tailwind: string;\n description: string;\n}\n\n/**\n * Z-Index Token Factory\n * Creates z-index tokens with consistent layering\n */\nexport class ZIndexTokenFactory {\n /**\n * Create a z-index token\n */\n static create(layer: ZIndexLayer): ZIndexToken {\n const layerMap: Record<\n ZIndexLayer,\n { value: number; tailwind: string; description: string }\n > = {\n base: {\n value: 0,\n tailwind: \"z-0\",\n description: \"Base layer for normal content\",\n },\n dropdown: {\n value: 1000,\n tailwind: \"z-[1000]\",\n description: \"Dropdown menus and select options\",\n },\n sticky: {\n value: 1020,\n tailwind: \"z-[1020]\",\n description: \"Sticky headers and navigation\",\n },\n fixed: {\n value: 1030,\n tailwind: \"z-[1030]\",\n description: \"Fixed position elements\",\n },\n \"modal-backdrop\": {\n value: 1040,\n tailwind: \"z-[1040]\",\n description: \"Modal backdrop/overlay\",\n },\n modal: {\n value: 1050,\n tailwind: \"z-[1050]\",\n description: \"Modal dialogs and drawers\",\n },\n popover: {\n value: 1060,\n tailwind: \"z-[1060]\",\n description: \"Popovers and tooltips\",\n },\n tooltip: {\n value: 1070,\n tailwind: \"z-[1070]\",\n description: \"Tooltips (highest priority)\",\n },\n toast: {\n value: 1080,\n tailwind: \"z-[1080]\",\n description: \"Toast notifications (highest priority)\",\n },\n };\n\n return layerMap[layer];\n }\n}\n\n/**\n * Pre-defined z-index tokens\n */\nexport const Z_INDEX_TOKENS = {\n base: ZIndexTokenFactory.create(\"base\"),\n dropdown: ZIndexTokenFactory.create(\"dropdown\"),\n sticky: ZIndexTokenFactory.create(\"sticky\"),\n fixed: ZIndexTokenFactory.create(\"fixed\"),\n \"modal-backdrop\": ZIndexTokenFactory.create(\"modal-backdrop\"),\n modal: ZIndexTokenFactory.create(\"modal\"),\n popover: ZIndexTokenFactory.create(\"popover\"),\n tooltip: ZIndexTokenFactory.create(\"tooltip\"),\n toast: ZIndexTokenFactory.create(\"toast\"),\n} as const;\n\n/**\n * Helper function to get z-index token\n */\nexport function getZIndex(layer: ZIndexLayer): ZIndexToken {\n return ZIndexTokenFactory.create(layer);\n}\n\n/**\n * Helper function to get z-index as Tailwind class\n */\nexport function getZIndexClass(layer: ZIndexLayer): string {\n return ZIndexTokenFactory.create(layer).tailwind;\n}\n","/**\n * Opacity Tokens\n *\n * Centralized opacity system for consistent transparency values.\n * Uses Factory Pattern for type-safe token creation.\n */\n\nexport type OpacityValue =\n | 0\n | 5\n | 10\n | 20\n | 25\n | 30\n | 40\n | 50\n | 60\n | 70\n | 75\n | 80\n | 90\n | 95\n | 100;\n\nexport interface OpacityToken {\n value: OpacityValue;\n decimal: number;\n tailwind: string;\n description: string;\n}\n\n/**\n * Opacity Token Factory\n * Creates opacity tokens with consistent values\n */\nexport class OpacityTokenFactory {\n /**\n * Create an opacity token\n */\n static create(value: OpacityValue): OpacityToken {\n const decimal = value / 100;\n\n const descriptionMap: Record<OpacityValue, string> = {\n 0: \"Fully transparent\",\n 5: \"Very light overlay\",\n 10: \"Light overlay\",\n 20: \"Subtle overlay\",\n 25: \"Quarter opacity\",\n 30: \"Light background\",\n 40: \"Semi-transparent\",\n 50: \"Half opacity\",\n 60: \"Semi-opaque\",\n 70: \"Mostly opaque\",\n 75: \"Three-quarter opacity\",\n 80: \"High opacity\",\n 90: \"Very high opacity\",\n 95: \"Nearly opaque\",\n 100: \"Fully opaque\",\n };\n\n // Map to Tailwind classes\n const tailwindMap: Record<OpacityValue, string> = {\n 0: \"opacity-0\",\n 5: \"opacity-5\",\n 10: \"opacity-10\",\n 20: \"opacity-20\",\n 25: \"opacity-25\",\n 30: \"opacity-30\",\n 40: \"opacity-40\",\n 50: \"opacity-50\",\n 60: \"opacity-60\",\n 70: \"opacity-70\",\n 75: \"opacity-75\",\n 80: \"opacity-80\",\n 90: \"opacity-90\",\n 95: \"opacity-95\",\n 100: \"opacity-100\",\n };\n\n return {\n value,\n decimal,\n tailwind: tailwindMap[value],\n description: descriptionMap[value],\n };\n }\n}\n\n/**\n * Pre-defined opacity tokens\n */\nexport const OPACITY_TOKENS = {\n transparent: OpacityTokenFactory.create(0),\n \"5\": OpacityTokenFactory.create(5),\n \"10\": OpacityTokenFactory.create(10),\n \"20\": OpacityTokenFactory.create(20),\n \"25\": OpacityTokenFactory.create(25),\n \"30\": OpacityTokenFactory.create(30),\n \"40\": OpacityTokenFactory.create(40),\n \"50\": OpacityTokenFactory.create(50),\n \"60\": OpacityTokenFactory.create(60),\n \"70\": OpacityTokenFactory.create(70),\n \"75\": OpacityTokenFactory.create(75),\n \"80\": OpacityTokenFactory.create(80),\n \"90\": OpacityTokenFactory.create(90),\n \"95\": OpacityTokenFactory.create(95),\n opaque: OpacityTokenFactory.create(100),\n} as const;\n\n/**\n * Helper function to get opacity token\n */\nexport function getOpacity(value: OpacityValue): OpacityToken {\n return OpacityTokenFactory.create(value);\n}\n\n/**\n * Helper function to get opacity as Tailwind class\n */\nexport function getOpacityClass(value: OpacityValue): string {\n return OpacityTokenFactory.create(value).tailwind;\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { getRadiusClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport \"./Progress.css\";\n\nexport type ProgressVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number; // 0-100, undefined for indeterminate\n max?: number; // Default 100\n variant?: ProgressVariant;\n size?: ProgressSize;\n showLabel?: boolean;\n label?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Progress Component\n *\n * A progress bar component for displaying progress or loading states.\n * Supports both determinate (with value) and indeterminate (without value) modes.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <Progress value={75} variant=\"primary\" />\n *\n * // Indeterminate progress\n * <Progress variant=\"primary\" />\n *\n * // With label\n * <Progress value={50} showLabel label=\"Uploading...\" />\n * ```\n */\n// Progress variants using CVA\nconst progressTrackVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n variant: {\n primary: \"bg-surface-muted\",\n secondary: \"bg-surface-muted\",\n success: \"bg-success-bg-emphasis\",\n error: \"bg-error-bg-emphasis\",\n warning: \"bg-warning-bg-emphasis\",\n info: \"bg-info-bg-emphasis\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst progressBarVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n primary: \"bg-surface-brand\",\n secondary: \"bg-surface-secondary\",\n success: \"bg-success\",\n error: \"bg-error\",\n warning: \"bg-warning\",\n info: \"bg-info\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n});\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate\n ? undefined\n : Math.min(Math.max((value / max) * 100, 0), 100);\n\n const defaultAriaLabel =\n ariaLabel ||\n (isIndeterminate\n ? \"Loading in progress\"\n : `Progress: ${percentage?.toFixed(0)}%`);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {showLabel && (label || !isIndeterminate) && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </span>\n )}\n {!isIndeterminate && percentage !== undefined && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n )}\n >\n {percentage.toFixed(0)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : max}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-label={defaultAriaLabel}\n aria-busy={isIndeterminate}\n className={cn(\n \"relative\",\n \"w-full\",\n \"overflow-hidden\",\n progressTrackVariants({ size, variant }),\n getRadiusClass(\"full\"),\n )}\n >\n {isIndeterminate ? (\n <div\n className={cn(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"motion-reduce:animate-none\",\n )}\n style={{\n width: \"30%\",\n animation: \"progress-indeterminate 1.5s ease-in-out infinite\",\n }}\n />\n ) : (\n <div\n className={cn(\n \"h-full\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"transition-all\",\n \"duration-300\",\n \"ease-out\",\n )}\n style={{\n width: `${percentage}%`,\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\nexport default Progress;\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"card\" | \"list\" | \"circle\";\n width?: string;\n height?: string;\n lines?: number;\n}\n\n/**\n * Skeleton Component\n *\n * A skeleton loader component for displaying loading states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Skeleton variant=\"card\" />\n * <Skeleton variant=\"text\" lines={3} />\n * ```\n */\nexport default function Skeleton({\n variant = \"text\",\n width,\n height,\n lines = 1,\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: SkeletonProps) {\n const baseClasses = [\n \"motion-safe:animate-pulse\",\n \"bg-surface-muted\",\n getRadiusClass(\"sm\"),\n ];\n\n const variantClasses: Record<\n NonNullable<SkeletonProps[\"variant\"]>,\n string\n > = {\n text: \"h-4\",\n card: \"h-32\",\n list: \"h-12\",\n circle: getRadiusClass(\"full\"),\n };\n\n const classes = cn(...baseClasses, variantClasses[variant], className);\n\n const style: React.CSSProperties = {};\n if (width) style.width = width;\n if (height) style.height = height;\n\n const defaultAriaLabel = ariaLabel || `Loading ${variant} content`;\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n className={getSpacingClass(\"sm\", \"space-y\")}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={classes}\n style={index === lines - 1 ? { width: \"75%\" } : style}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={classes}\n style={style}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\nexport type SpinnerVariant = \"primary\" | \"secondary\" | \"neutral\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: SpinnerSize;\n variant?: SpinnerVariant;\n label?: string;\n}\n\n/**\n * Spinner Component\n *\n * A loading spinner component for indicating loading states.\n * Follows Atomic Design principles as an Atom component.\n * Uses Strategy Pattern for different size/variant combinations.\n *\n * @example\n * ```tsx\n * <Spinner size=\"md\" variant=\"primary\" label=\"Loading...\" />\n * ```\n */\n// Spinner variants using CVA\nconst spinnerVariants = cva(\"motion-safe:animate-spin\", {\n variants: {\n size: {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-8 w-8\",\n },\n variant: {\n primary: \"text-fg-brand\",\n secondary: \"text-fg-brand-secondary\",\n neutral: \"text-fg-secondary\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst Spinner = memo(function Spinner({\n size = \"md\",\n variant = \"primary\",\n label,\n className = \"\",\n ...props\n}: SpinnerProps) {\n return (\n <div\n className={cn(\"inline-flex\", \"items-center\", className)}\n role=\"status\"\n aria-label={label || \"Loading\"}\n aria-live=\"polite\"\n {...props}\n >\n <Loader2\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n {label && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"ml\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n \"sr-only\",\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n});\n\nSpinner.displayName = \"Spinner\";\n\nexport default Spinner;\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n HTMLAttributes,\n JSX,\n} from \"react\";\nimport { forwardRef } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ntype TextColorRole =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\ntype TextColorShade = \"light\" | \"DEFAULT\" | \"dark\" | \"contrast\";\n\n// Lookup table: literal Tailwind classes so v4 can detect them at build.\n// Brand/feedback DEFAULT cells use semantic tokens; light/dark cells stay\n// primitive (no semantic equivalent for shade variants). Neutral cells\n// use the Phase 7 semantic suggestions (text-fg-{primary,secondary,...}).\nconst TEXT_COLOR_CLASSES: Record<\n TextColorRole,\n Record<TextColorShade, string>\n> = {\n primary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-indigo-400\",\n DEFAULT: \"text-fg-brand\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-indigo-600\",\n contrast: \"text-fg-inverse\",\n },\n secondary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-pink-300\",\n DEFAULT: \"text-fg-brand-secondary\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-pink-600\",\n contrast: \"text-fg-inverse\",\n },\n success: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-green-300\",\n DEFAULT: \"text-fg-success\",\n dark: \"text-success-dark\",\n contrast: \"text-fg-inverse\",\n },\n warning: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-yellow-300\",\n DEFAULT: \"text-fg-warning\",\n dark: \"text-warning-dark\",\n contrast: \"text-fg-inverse\",\n },\n error: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-red-300\",\n DEFAULT: \"text-fg-error\",\n dark: \"text-error-dark\",\n contrast: \"text-fg-inverse\",\n },\n info: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-blue-300\",\n DEFAULT: \"text-fg-info\",\n dark: \"text-info-dark\",\n contrast: \"text-fg-inverse\",\n },\n neutral: {\n light: \"text-fg-tertiary\",\n DEFAULT: \"text-fg-secondary\",\n dark: \"text-fg-primary\",\n contrast: \"text-fg-inverse\",\n },\n};\n\nexport interface TextProps<\n T extends ElementType,\n> extends HTMLAttributes<JSX.IntrinsicElements> {\n variant?:\n | \"heading\"\n | \"list\"\n | \"paragraph\"\n | \"body\"\n | \"bodySmall\"\n | \"bodyLarge\"\n | \"caption\"\n | \"label\";\n as?: T;\n bold?: boolean;\n italic?: boolean;\n colorRole?: TextColorRole;\n colorShade?: TextColorShade;\n}\n\ntype ReturnProps<P extends ElementType> = TextProps<P> &\n Omit<ComponentPropsWithoutRef<P>, keyof TextProps<P>>;\n\nfunction TextComponent<T extends ElementType = \"p\">(\n {\n variant = \"paragraph\",\n bold,\n italic,\n className,\n as,\n colorRole = \"neutral\",\n colorShade = \"dark\",\n ...rest\n }: ReturnProps<T>,\n ref: React.Ref<unknown>,\n) {\n const classNames: string[] = [];\n let Tag: ElementType;\n\n if (as) {\n Tag = as;\n } else {\n switch (variant) {\n case \"heading\":\n Tag = \"h2\";\n break;\n case \"list\":\n Tag = \"li\";\n break;\n case \"paragraph\":\n default:\n Tag = \"p\";\n break;\n }\n }\n\n // Apply typography tokens based on variant\n if (variant === \"heading\") {\n classNames.push(getTypographyClasses(\"h2\"));\n } else if (variant === \"body\" || variant === \"paragraph\") {\n classNames.push(getTypographyClasses(\"body\"));\n } else if (variant === \"bodySmall\") {\n classNames.push(getTypographyClasses(\"bodySmall\"));\n } else if (variant === \"bodyLarge\") {\n classNames.push(getTypographyClasses(\"bodyLarge\"));\n } else if (variant === \"caption\") {\n classNames.push(getTypographyClasses(\"caption\"));\n } else if (variant === \"label\") {\n classNames.push(getTypographyClasses(\"label\"));\n } else {\n // Default to body for list and other variants\n classNames.push(getTypographyClasses(\"body\"));\n }\n\n // Override font weight if bold is specified\n if (bold) {\n classNames.push(\"font-bold\");\n }\n\n if (italic) {\n classNames.push(\"italic\");\n }\n\n // Apply color via lookup table. Tailwind v4 needs literal class names\n // at build time, so role/shade resolve to a fixed entry in\n // TEXT_COLOR_CLASSES rather than constructing `text-${...}` dynamically.\n classNames.push(TEXT_COLOR_CLASSES[colorRole][colorShade]);\n\n return <Tag ref={ref} className={cn(...classNames, className)} {...rest} />;\n}\n\n// Use forwardRef with proper typing for polymorphic component\nconst Text = forwardRef(TextComponent) as <T extends ElementType = \"p\">(\n props: ReturnProps<T> & { ref?: React.Ref<HTMLElement> },\n) => JSX.Element;\n\nexport default Text;\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Maximum width of the container\n * @default 'lg'\n */\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n /**\n * Horizontal padding\n * @default 'base'\n */\n paddingX?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Vertical padding\n * @default 'base'\n */\n paddingY?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\";\n /**\n * Center the container content\n * @default true\n */\n center?: boolean;\n}\n\nconst maxWidthClasses = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for constraining content width and providing consistent padding\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"lg\" paddingX=\"base\">\n * <h1>Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n (\n {\n className,\n maxWidth = \"lg\",\n paddingX = \"base\",\n paddingY = \"base\",\n center = true,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n maxWidthClasses[maxWidth],\n getSpacingClass(paddingX, \"px\"),\n getSpacingClass(paddingY, \"py\"),\n center && \"mx-auto\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Spacing between children\n * @default 'base'\n */\n spacing?: \"xs\" | \"sm\" | \"md\" | \"base\" | \"lg\" | \"xl\" | \"2xl\";\n /**\n * Alignment of children\n * @default 'stretch'\n */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /**\n * Justification of children\n * @default 'start'\n */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n /**\n * Direction of stack\n * @default 'column'\n */\n direction?: \"row\" | \"column\";\n}\n\n/**\n * Stack component for vertical or horizontal layout with consistent spacing\n *\n * @example\n * ```tsx\n * <Stack spacing=\"md\" align=\"center\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * </Stack>\n * ```\n */\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n className,\n spacing = \"base\",\n align = \"stretch\",\n justify = \"start\",\n direction = \"column\",\n children,\n ...props\n },\n ref,\n ) => {\n const spacingClass =\n direction === \"column\"\n ? getSpacingClass(spacing, \"gap-y\")\n : getSpacingClass(spacing, \"gap-x\");\n\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n };\n\n const justifyClasses = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n direction === \"column\" ? \"flex-col\" : \"flex-row\",\n spacingClass,\n alignClasses[align],\n justifyClasses[justify],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nStack.displayName = \"Stack\";\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface AutocompleteOptionType {\n value: string;\n label: string;\n disabled?: boolean;\n icon?: ReactNode;\n group?: string;\n}\n\nexport interface AutocompleteOptionProps {\n option: AutocompleteOptionType;\n isHighlighted: boolean;\n onSelect: (option: AutocompleteOptionType) => void;\n}\n\n/**\n * AutocompleteOption Component\n *\n * A single option in the autocomplete list.\n */\nconst AutocompleteOption = forwardRef<HTMLDivElement, AutocompleteOptionProps>(\n function AutocompleteOption({ option, isHighlighted, onSelect }, ref) {\n const handleClick = () => {\n if (!option.disabled) {\n onSelect(option);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={isHighlighted}\n aria-disabled={option.disabled}\n onClick={handleClick}\n className={`\n flex\n items-center\n ${getSpacingClass(\"sm\", \"gap\")}\n ${getSpacingClass(\"sm\", \"px\")}\n ${getSpacingClass(\"sm\", \"py\")}\n text-sm\n cursor-pointer\n transition-colors\n ${isHighlighted ? \"bg-surface-active\" : \"\"}\n ${option.disabled ? \"opacity-50 cursor-not-allowed\" : \"hover:bg-surface-hover\"}\n `}\n >\n {option.icon && <span className=\"flex-shrink-0\">{option.icon}</span>}\n <span className=\"flex-1\">{option.label}</span>\n </div>\n );\n },\n);\n\nAutocompleteOption.displayName = \"AutocompleteOption\";\n\nexport default AutocompleteOption;\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\nimport {\n getSpacingClass,\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface Props extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: string;\n}\n\n/**\n * Breadcrumb Component\n *\n * A breadcrumb navigation component for hierarchical navigation.\n * Follows Atomic Design principles as a Molecule component.\n *\n * @example\n * ```tsx\n * <Breadcrumb\n * items={[\n * { label: \"Home\", href: \"/\" },\n * { label: \"Epics\", href: \"/epics\" },\n * { label: \"Epic Details\" }\n * ]}\n * />\n * ```\n */\nexport default function Breadcrumb({\n items,\n separator = \"/\",\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n \"flex\",\n \"items-center\",\n getSpacingClass(\"sm\", \"space-x\"),\n getTypographySize(\"bodySmall\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <nav aria-label=\"Breadcrumb\" className={classes} {...props}>\n <ol\n className={cn(\"flex\", \"items-center\", getSpacingClass(\"sm\", \"space-x\"))}\n >\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={index} className=\"flex items-center\">\n {index > 0 && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"mx\"),\n \"text-fg-tertiary\",\n )}\n aria-hidden=\"true\"\n >\n {separator}\n </span>\n )}\n {isLast ? (\n <span\n className={cn(\n \"text-fg-primary\",\n getTypographyWeight(\"label\"),\n )}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n className={cn(\n \"inline-flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"pt\"),\n \"border-b-2\",\n \"border-transparent\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"transition-colors\",\n \"text-fg-secondary\",\n \"hover:border-line-emphasis\",\n \"hover:text-fg-primary\",\n )}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-fg-secondary\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DialogHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogHeader({\n children,\n className = \"\",\n ...props\n}: DialogHeaderProps) {\n return (\n <div\n className={`flex flex-col ${getSpacingClass(\"1.5\", \"space-y\")} ${getSpacingClass(\"lg\", \"p\")} ${getSpacingClass(\"base\", \"pb\")} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes, type ReactNode } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function DialogFooter({\n children,\n className = \"\",\n ...props\n}: DialogFooterProps) {\n return (\n <div\n className={`flex flex-col-reverse sm:flex-row sm:justify-end sm:${getSpacingClass(\"sm\", \"space-x\")} ${getSpacingClass(\"lg\", \"p\")} ${getSpacingClass(\"base\", \"pt\")} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerHeader Component\n *\n * Header section for drawer content.\n *\n * @example\n * ```tsx\n * <DrawerHeader>\n * <h2>Drawer Title</h2>\n * </DrawerHeader>\n * ```\n */\nexport default function DrawerHeader({\n children,\n className = \"\",\n ...props\n}: DrawerHeaderProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-b\n border-line-default\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport interface DrawerFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\n/**\n * DrawerFooter Component\n *\n * Footer section for drawer content, typically contains action buttons.\n *\n * @example\n * ```tsx\n * <DrawerFooter>\n * <Button>Save</Button>\n * <Button variant=\"outline\">Cancel</Button>\n * </DrawerFooter>\n * ```\n */\nexport default function DrawerFooter({\n children,\n className = \"\",\n ...props\n}: DrawerFooterProps) {\n return (\n <div\n className={`\n ${getSpacingClass(\"lg\", \"p\")}\n border-t\n border-line-default\n flex\n justify-end\n ${getSpacingClass(\"sm\", \"gap\")}\n ${className}\n `}\n {...props}\n >\n {children}\n </div>\n );\n}\n","/**\n * HeaderActions Component\n *\n * Actions slot component for Header (typically buttons, user menu, etc.).\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderActionsProps {\n /**\n * Actions content (typically Button components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderActions Component\n *\n * Actions slot for Header. Typically contains Button components or user menu.\n *\n * @example\n * ```tsx\n * <Header.Actions>\n * <Button variant=\"outline\">Sign In</Button>\n * <Button variant=\"primary\">Sign Up</Button>\n * </Header.Actions>\n * ```\n */\nexport function HeaderActions({ children, className }: HeaderActionsProps) {\n return (\n <div\n className={cn(\n \"flex-shrink-0 flex items-center\",\n getSpacingClass(\"sm\", \"gap\"),\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","/**\n * HeaderNavigation Component\n *\n * Navigation slot component for Header.\n *\n * @see EPIC-002: Header Component (Molecule)\n * @see RFC-003: Header Composition Pattern (APPROVED)\n */\n\n\"use client\";\n\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { getSpacingClass } from \"../../../tokens/spacing\";\n\nexport interface HeaderNavigationProps {\n /**\n * Navigation content (typically NavLink components)\n */\n children: ReactNode;\n\n /**\n * Additional CSS classes\n */\n className?: string;\n}\n\n/**\n * HeaderNavigation Component\n *\n * Navigation slot for Header. Typically contains NavLink components.\n *\n * @example\n * ```tsx\n * <Header.Navigation>\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\">About</NavLink>\n * </Header.Navigation>\n * ```\n */\nexport function HeaderNavigation({\n children,\n className,\n}: HeaderNavigationProps) {\n return (\n <nav\n className={cn(\n \"flex-1 flex items-center justify-center\",\n getSpacingClass(\"base\", \"gap\"),\n \"hidden md:flex\", // Hidden on mobile, visible on desktop\n className,\n )}\n aria-label=\"Main navigation\"\n >\n {children}\n </nav>\n );\n}\n","\"use client\";\n\nimport { type HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\n\nexport type MenuSeparatorProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * MenuSeparator Component\n *\n * A visual separator for menu items.\n *\n * @example\n * ```tsx\n * <MenuSeparator />\n * ```\n */\nexport default function MenuSeparator({\n className = \"\",\n ...props\n}: MenuSeparatorProps) {\n return (\n <div\n role=\"separator\"\n className={`\n h-px\n bg-line-default\n ${getSpacingClass(\"sm\", \"my\")}\n ${className}\n `}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../../utils\";\nimport { getSpacingClass } from \"../../../../tokens/spacing\";\nimport type { NavbarSeparatorProps } from \"../../types\";\n\n/**\n * Separator for the Navbar subcomponent\n *\n * Creates visual separation between groups of navigation items.\n *\n * @example\n * ```tsx\n * <SideNavbar.Navbar>\n * <SideNavbar.Navbar.Item icon={<Home />} label=\"Home\" />\n * <SideNavbar.Navbar.Separator />\n * <SideNavbar.Navbar.Item icon={<Settings />} label=\"Settings\" />\n * </SideNavbar.Navbar>\n * ```\n */\nexport default function NavbarSeparator({\n orientation = \"horizontal\",\n className = \"\",\n ...props\n}: NavbarSeparatorProps) {\n if (orientation === \"vertical\") {\n return (\n <div\n className={cn(\"w-px\", \"h-6\", \"bg-line-default\", \"mx-auto\", className)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...props}\n />\n );\n }\n\n return (\n <div\n className={cn(\n \"w-full\",\n \"h-px\",\n \"bg-line-default\",\n getSpacingClass(\"sm\", \"my\"), // my-2 (8px) para consistência com gap-2 usado em outros lugares\n \"flex-shrink-0\", // Prevenir que separator encolha\n className,\n )}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n style={{\n // Garantir que separator não seja afetado por transformações\n willChange: \"auto\",\n transform: \"none\",\n }}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport type { TableColumn } from \"./TableTypes\";\n\nexport interface TableCellProps<\n T = unknown,\n> extends HTMLAttributes<HTMLTableCellElement> {\n column: TableColumn<T>;\n row: T;\n}\n\n/**\n * TableCell Component\n *\n * Renders a table cell (td) for a column.\n * Uses column.render if available, otherwise renders the raw value.\n * Must be used within a Table component.\n */\nexport default function TableCell<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({ column, row, className = \"\", ...props }: TableCellProps<T>) {\n const value = column.key in row ? row[column.key as keyof T] : undefined;\n\n return (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")} whitespace-nowrap text-sm text-fg-primary ${\n column.hiddenOnMobile ? \"hidden md:table-cell\" : \"\"\n } ${className}`}\n {...props}\n >\n {column.render ? column.render(value, row) : String(value ?? \"\")}\n </td>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\nexport type TimelineOrientation = \"horizontal\" | \"vertical\";\n\nexport interface TimelineItem {\n id: string;\n title: string;\n description?: string;\n content?: ReactNode;\n timestamp?: string;\n icon?: ReactNode;\n status?: \"default\" | \"active\" | \"completed\" | \"error\";\n}\n\nexport interface TimelineProps {\n items: TimelineItem[];\n orientation?: TimelineOrientation;\n className?: string;\n}\n\n/**\n * Timeline Component\n *\n * A timeline component for displaying events in chronological order.\n * Supports horizontal and vertical orientations.\n * Follows Atomic Design principles as an Organism component.\n *\n * @example\n * ```tsx\n * <Timeline\n * items={[\n * { id: '1', title: 'Event 1', description: 'Description 1', timestamp: '2024-01-01' },\n * { id: '2', title: 'Event 2', description: 'Description 2', timestamp: '2024-01-02' },\n * ]}\n * />\n * ```\n */\nexport default function Timeline({\n items,\n orientation = \"vertical\",\n className = \"\",\n}: TimelineProps) {\n if (orientation === \"horizontal\") {\n return (\n <div className={`flex items-start ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div key={item.id} className=\"flex items-start flex-1\">\n <div className=\"flex flex-col items-center flex-1\">\n {/* Icon/Indicator */}\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\"\n ? { \"data-marker\": \"pending\" }\n : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n\n {/* Connector Line */}\n {!isLast && (\n <div\n className={`\n w-full\n h-0.5\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n\n {/* Content */}\n <div\n className={`${getSpacingClass(\"base\", \"mt\")} text-center ${getSpacingClass(\"base\", \"px\")}`}\n >\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3 className=\"text-sm font-semibold text-fg-primary\">\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-xs text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"sm\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Vertical orientation\n return (\n <div className={`${getSpacingClass(\"none\", \"space-y\")} ${className}`}>\n {items.map((item, index) => {\n const status =\n item.status ||\n (index === 0\n ? \"active\"\n : index < items.findIndex((i) => i.status === \"active\")\n ? \"completed\"\n : \"default\");\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={`flex items-start ${getSpacingClass(\"base\", \"gap\")}`}\n >\n {/* Timeline Line & Icon */}\n <div className=\"flex flex-col items-center\">\n <div\n // data-marker=\"pending\" — see .claude/rules/colors.md\n // \"fg-quaternary: AA-by-construction exception\".\n {...(status === \"default\" ? { \"data-marker\": \"pending\" } : {})}\n className={`\n flex\n items-center\n justify-center\n w-10\n h-10\n ${getRadiusClass(\"full\")}\n border-2\n ${\n status === \"completed\"\n ? \"bg-success border-success text-fg-inverse\"\n : status === \"active\"\n ? \"bg-surface-brand-strong border-line-brand text-fg-inverse\"\n : status === \"error\"\n ? \"bg-error border-error text-fg-inverse\"\n : \"bg-surface-base border-line-emphasis text-fg-quaternary\"\n }\n `}\n >\n {item.icon ||\n (status === \"completed\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n index + 1\n ))}\n </div>\n {!isLast && (\n <div\n className={`\n w-0.5\n flex-1\n min-h-16\n ${getSpacingClass(\"sm\", \"mt\")}\n ${status === \"completed\" ? \"bg-success\" : \"bg-line-emphasis\"}\n `}\n />\n )}\n </div>\n\n {/* Content */}\n <div className={`flex-1 ${getSpacingClass(\"xl\", \"pb\")}`}>\n {item.timestamp && (\n <p\n className={`text-xs text-fg-tertiary ${getSpacingClass(\"xs\", \"mb\")}`}\n >\n {item.timestamp}\n </p>\n )}\n <h3\n className={`\n text-base\n font-semibold\n ${status === \"active\" ? \"text-fg-brand-emphasis\" : \"text-fg-primary\"}\n `}\n >\n {item.title}\n </h3>\n {item.description && (\n <p\n className={`text-sm text-fg-secondary ${getSpacingClass(\"xs\", \"mt\")}`}\n >\n {item.description}\n </p>\n )}\n {item.content && (\n <div className={getSpacingClass(\"md\", \"mt\")}>\n {item.content}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["RadiusTokenFactory","size","config","RADIUS_TOKENS","getRadiusClass","SpacingTokenFactory","scale","px","rem","__publicField","SPACING_TOKENS","getSpacingClass","direction","value","TypographyTokenFactory","height","weight","lineHeight","TYPOGRAPHY_TOKENS","getTypographyClasses","variant","token","getTypographySize","getTypographyWeight","cn","inputs","twMerge","clsx","cva","base","variantFn","cvaLib","props","variantClasses","chipVariants","Chip","forwardRef","_a","ref","_b","children","onRemove","selected","disabled","className","ariaLabel","onClick","tabIndex","__objRest","accessibleLabel","childProps","useLabelButton","interactive","handleKeyDown","e","jsxs","__spreadProps","__spreadValues","jsx","X","ErrorMessage","message","id","baseClasses","classes","AlertCircle","Info","createToken","hex","colorName","rgb","hexToRgb","hsl","hexToHsl","result","r","g","b","max","min","h","s","l","d","ShadowTokenFactory","BorderTokenFactory","width","style","BreakpointTokenFactory","name","AnimationTokenFactory","duration","easing","durationMap","easingMap","property","durationToken","properties","tailwindClasses","ZIndexTokenFactory","layer","OpacityTokenFactory","decimal","descriptionMap","progressTrackVariants","progressBarVariants","Progress","showLabel","label","isIndeterminate","percentage","defaultAriaLabel","Skeleton","lines","_","index","spinnerVariants","Spinner","memo","Loader2","TEXT_COLOR_CLASSES","TextComponent","bold","italic","as","colorRole","colorShade","rest","classNames","Tag","Text","maxWidthClasses","Container","React","maxWidth","paddingX","paddingY","center","Stack","spacing","align","justify","spacingClass","alignClasses","justifyClasses","AutocompleteOption","option","isHighlighted","onSelect","handleClick","Breadcrumb","items","separator","item","isLast","DialogHeader","DialogFooter","DrawerHeader","DrawerFooter","HeaderActions","HeaderNavigation","MenuSeparator","NavbarSeparator","orientation","TableCell","column","row","Timeline","status","i","CheckCircle2"],"mappings":"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"}