@anker-in/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans,Inter,system-ui,sans-serif);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--font-mono,Fira Code,monospace);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.\!visible{visibility:visible!important}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:var(--spacing-0,0)}.bottom-0{bottom:var(--spacing-0,0)}.left-0{left:var(--spacing-0,0)}.right-0{right:var(--spacing-0,0)}.top-0{top:var(--spacing-0,0)}.isolate{isolation:isolate}.z-10{z-index:10}.col-span-2{grid-column:span 2/span 2}.m-auto{margin:auto}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:var(--spacing-1,.25rem)}.mb-12{margin-bottom:var(--spacing-12,3rem)}.mb-2{margin-bottom:var(--spacing-2,.5rem)}.mb-3{margin-bottom:var(--spacing-3,.75rem)}.mb-4{margin-bottom:var(--spacing-4,1rem)}.mb-6{margin-bottom:var(--spacing-6,1.5rem)}.mb-8{margin-bottom:var(--spacing-8,2rem)}.mb-\[64px\]{margin-bottom:64px}.ml-1{margin-left:var(--spacing-1,.25rem)}.ml-\[12px\]{margin-left:12px}.ml-auto{margin-left:auto}.mr-1{margin-right:var(--spacing-1,.25rem)}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:var(--spacing-1,.25rem)}.mt-12{margin-top:var(--spacing-12,3rem)}.mt-2{margin-top:var(--spacing-2,.5rem)}.mt-6{margin-top:var(--spacing-6,1.5rem)}.mt-8{margin-top:var(--spacing-8,2rem)}.mt-\[40px\]{margin-top:40px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.aspect-\[356\/220\]{aspect-ratio:356/220}.h-1{height:var(--spacing-1,.25rem)}.h-10{height:var(--spacing-10,2.5rem)}.h-12{height:var(--spacing-12,3rem)}.h-16{height:var(--spacing-16,4rem)}.h-20{height:var(--spacing-20,5rem)}.h-24{height:var(--spacing-24,6rem)}.h-5{height:var(--spacing-5,1.25rem)}.h-6{height:var(--spacing-6,1.5rem)}.h-8{height:var(--spacing-8,2rem)}.h-\[200px\]{height:200px}.h-\[24px\]{height:24px}.h-\[32px\]{height:32px}.h-\[400px\]{height:400px}.h-\[72px\]{height:72px}.h-\[76px\]{height:76px}.h-\[794px\]{height:794px}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-10{width:var(--spacing-10,2.5rem)}.w-16{width:var(--spacing-16,4rem)}.w-20{width:var(--spacing-20,5rem)}.w-5{width:var(--spacing-5,1.25rem)}.w-6{width:var(--spacing-6,1.5rem)}.w-8{width:var(--spacing-8,2rem)}.w-\[24px\]{width:24px}.w-\[420px\]{width:420px}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-7xl{max-width:80rem}.max-w-\[1400px\]{max-width:1400px}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:var(--spacing-1,.25rem)}.gap-10{gap:var(--spacing-10,2.5rem)}.gap-2{gap:var(--spacing-2,.5rem)}.gap-3{gap:var(--spacing-3,.75rem)}.gap-4{gap:var(--spacing-4,1rem)}.gap-6{gap:var(--spacing-6,1.5rem)}.gap-8{gap:var(--spacing-8,2rem)}.gap-\[16px\]{gap:16px}.gap-\[8px\]{gap:8px}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(var(--spacing-2, .5rem)*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(var(--spacing-2, .5rem)*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(var(--spacing-3, .75rem)*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(var(--spacing-3, .75rem)*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(var(--spacing-4, 1rem)*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(var(--spacing-4, 1rem)*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(var(--spacing-6, 1.5rem)*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(var(--spacing-6, 1.5rem)*var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl,1rem)}.rounded-3xl{border-radius:1.5rem}.rounded-\[12px\]{border-radius:12px}.rounded-\[20px\]{border-radius:20px}.rounded-\[6px\]{border-radius:6px}.rounded-full{border-radius:var(--radius-full,9999px)}.rounded-lg{border-radius:var(--radius-lg,.5rem)}.rounded-b-none{border-bottom-right-radius:var(--radius-none,0);border-bottom-left-radius:var(--radius-none,0)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-\[\#2E8B57\]{--tw-border-opacity:1;border-color:rgb(46 139 87/var(--tw-border-opacity,1))}.border-\[\#3ADB67\]{--tw-border-opacity:1;border-color:rgb(58 219 103/var(--tw-border-opacity,1))}.border-\[\#E4E5E6\]{--tw-border-opacity:1;border-color:rgb(228 229 230/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-t-gray-900{--tw-border-opacity:1;border-top-color:rgb(17 24 39/var(--tw-border-opacity,1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#3ADB67\]{--tw-bg-opacity:1;background-color:rgb(58 219 103/var(--tw-bg-opacity,1))}.bg-\[\#F5F5F5\],.bg-\[\#f5f5f5\]{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-primary-100{background-color:var(--color-primary-100,#dbeafe)}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,244,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-gray-200{--tw-gradient-to:#e5e7eb var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:var(--spacing-4,1rem)}.p-6{padding:var(--spacing-6,1.5rem)}.p-8{padding:var(--spacing-8,2rem)}.p-\[24px\]{padding:24px}.px-3{padding-left:var(--spacing-3,.75rem);padding-right:var(--spacing-3,.75rem)}.px-4{padding-left:var(--spacing-4,1rem);padding-right:var(--spacing-4,1rem)}.px-6{padding-left:var(--spacing-6,1.5rem);padding-right:var(--spacing-6,1.5rem)}.px-8{padding-left:var(--spacing-8,2rem);padding-right:var(--spacing-8,2rem)}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[20px\]{padding-left:20px;padding-right:20px}.py-1{padding-top:var(--spacing-1,.25rem);padding-bottom:var(--spacing-1,.25rem)}.py-12{padding-top:var(--spacing-12,3rem);padding-bottom:var(--spacing-12,3rem)}.py-3{padding-top:var(--spacing-3,.75rem);padding-bottom:var(--spacing-3,.75rem)}.py-4{padding-top:var(--spacing-4,1rem);padding-bottom:var(--spacing-4,1rem)}.py-6{padding-top:var(--spacing-6,1.5rem);padding-bottom:var(--spacing-6,1.5rem)}.py-8{padding-top:var(--spacing-8,2rem);padding-bottom:var(--spacing-8,2rem)}.py-\[16px\]{padding-top:16px;padding-bottom:16px}.py-\[64px\]{padding-top:64px;padding-bottom:64px}.pb-4{padding-bottom:var(--spacing-4,1rem)}.pb-8{padding-bottom:var(--spacing-8,2rem)}.pb-\[4px\]{padding-bottom:4px}.pb-\[8px\]{padding-bottom:8px}.pl-8{padding-left:var(--spacing-8,2rem)}.pt-5{padding-top:var(--spacing-5,1.25rem)}.pt-\[12px\]{padding-top:12px}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[14px\]{font-size:14px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[40px\]{font-size:40px}.text-\[48px\]{font-size:48px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-\[1\.4\]{line-height:1.4}.leading-\[1\]{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.text-\[\#080A0F\]{--tw-text-opacity:1;color:rgb(8 10 15/var(--tw-text-opacity,1))}.text-\[\#1D1D1F\]{--tw-text-opacity:1;color:rgb(29 29 31/var(--tw-text-opacity,1))}.text-\[\#2E8B57\]{--tw-text-opacity:1;color:rgb(46 139 87/var(--tw-text-opacity,1))}.text-\[\#3ADB67\]{--tw-text-opacity:1;color:rgb(58 219 103/var(--tw-text-opacity,1))}.text-\[\#6D6D6F\]{--tw-text-opacity:1;color:rgb(109 109 111/var(--tw-text-opacity,1))}.text-\[\#767880\]{--tw-text-opacity:1;color:rgb(118 120 128/var(--tw-text-opacity,1))}.text-\[\#BDBDBD\]{--tw-text-opacity:1;color:rgb(189 189 189/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/90{color:hsla(0,0%,100%,.9)}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.opacity-50{opacity:.5}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.hover\:border-\[\#3ADB67\]:hover{--tw-border-opacity:1;border-color:rgb(58 219 103/var(--tw-border-opacity,1))}.hover\:bg-\[\#2FC257\]:hover{--tw-bg-opacity:1;background-color:rgb(47 194 87/var(--tw-bg-opacity,1))}.hover\:bg-\[\#3ADB67\]:hover{--tw-bg-opacity:1;background-color:rgb(58 219 103/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:bg-gray-900:hover{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.hover\:bg-opacity-5:hover{--tw-bg-opacity:0.05}.hover\:text-\[\#080A0F\]:hover{--tw-text-opacity:1;color:rgb(8 10 15/var(--tw-text-opacity,1))}.hover\:text-\[\#2E8B57\]:hover{--tw-text-opacity:1;color:rgb(46 139 87/var(--tw-text-opacity,1))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:border-\[\#2E8B57\]:focus{--tw-border-opacity:1;border-color:rgb(46 139 87/var(--tw-border-opacity,1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-\[\#3ADB67\]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(58 219 103/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:translate-y-0\.5{--tw-translate-y:0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:text-\[\#3ADB67\]{--tw-text-opacity:1;color:rgb(58 219 103/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:flex-row{flex-direction:row}}@media (min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
@@ -0,0 +1,126 @@
1
+ import React from 'react';
2
+
3
+ declare const defaultTheme: {
4
+ readonly colors: {
5
+ readonly primary: {
6
+ readonly 50: "#eff6ff";
7
+ readonly 100: "#dbeafe";
8
+ readonly 200: "#bfdbfe";
9
+ readonly 300: "#93c5fd";
10
+ readonly 400: "#60a5fa";
11
+ readonly 500: "#3b82f6";
12
+ readonly 600: "#2563eb";
13
+ readonly 700: "#1d4ed8";
14
+ readonly 800: "#1e40af";
15
+ readonly 900: "#1e3a8a";
16
+ readonly 950: "#172554";
17
+ };
18
+ readonly secondary: {
19
+ readonly 50: "#f8fafc";
20
+ readonly 100: "#f1f5f9";
21
+ readonly 200: "#e2e8f0";
22
+ readonly 300: "#cbd5e1";
23
+ readonly 400: "#94a3b8";
24
+ readonly 500: "#64748b";
25
+ readonly 600: "#475569";
26
+ readonly 700: "#334155";
27
+ readonly 800: "#1e293b";
28
+ readonly 900: "#0f172a";
29
+ readonly 950: "#020617";
30
+ };
31
+ readonly success: {
32
+ readonly 50: "#f0fdf4";
33
+ readonly 500: "#22c55e";
34
+ readonly 900: "#14532d";
35
+ };
36
+ readonly warning: {
37
+ readonly 50: "#fffbeb";
38
+ readonly 500: "#f59e0b";
39
+ readonly 900: "#78350f";
40
+ };
41
+ readonly error: {
42
+ readonly 50: "#fef2f2";
43
+ readonly 500: "#ef4444";
44
+ readonly 900: "#7f1d1d";
45
+ };
46
+ };
47
+ readonly fontFamily: {
48
+ readonly sans: readonly ["Inter", "system-ui", "sans-serif"];
49
+ readonly mono: readonly ["Fira Code", "monospace"];
50
+ };
51
+ readonly fontSize: {
52
+ readonly xs: readonly ["0.75rem", {
53
+ readonly lineHeight: "1rem";
54
+ }];
55
+ readonly sm: readonly ["0.875rem", {
56
+ readonly lineHeight: "1.25rem";
57
+ }];
58
+ readonly base: readonly ["1rem", {
59
+ readonly lineHeight: "1.5rem";
60
+ }];
61
+ readonly lg: readonly ["1.125rem", {
62
+ readonly lineHeight: "1.75rem";
63
+ }];
64
+ readonly xl: readonly ["1.25rem", {
65
+ readonly lineHeight: "1.75rem";
66
+ }];
67
+ readonly '2xl': readonly ["1.5rem", {
68
+ readonly lineHeight: "2rem";
69
+ }];
70
+ readonly '3xl': readonly ["1.875rem", {
71
+ readonly lineHeight: "2.25rem";
72
+ }];
73
+ readonly '4xl': readonly ["2.25rem", {
74
+ readonly lineHeight: "2.5rem";
75
+ }];
76
+ };
77
+ readonly spacing: {
78
+ readonly 0: "0";
79
+ readonly 1: "0.25rem";
80
+ readonly 2: "0.5rem";
81
+ readonly 3: "0.75rem";
82
+ readonly 4: "1rem";
83
+ readonly 5: "1.25rem";
84
+ readonly 6: "1.5rem";
85
+ readonly 8: "2rem";
86
+ readonly 10: "2.5rem";
87
+ readonly 12: "3rem";
88
+ readonly 16: "4rem";
89
+ readonly 20: "5rem";
90
+ readonly 24: "6rem";
91
+ };
92
+ readonly borderRadius: {
93
+ readonly none: "0";
94
+ readonly sm: "0.125rem";
95
+ readonly base: "0.25rem";
96
+ readonly md: "0.375rem";
97
+ readonly lg: "0.5rem";
98
+ readonly xl: "0.75rem";
99
+ readonly '2xl': "1rem";
100
+ readonly full: "9999px";
101
+ };
102
+ readonly boxShadow: {
103
+ readonly sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
104
+ readonly base: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)";
105
+ readonly md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
106
+ readonly lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
107
+ readonly xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)";
108
+ };
109
+ };
110
+ type Theme = typeof defaultTheme;
111
+ type DeepPartial<T> = T extends object ? {
112
+ [P in keyof T]?: DeepPartial<T[P]>;
113
+ } : T;
114
+ type ThemeConfig = DeepPartial<Theme>;
115
+
116
+ interface ThemeContextValue {
117
+ theme: Theme;
118
+ }
119
+ declare const useTheme: () => ThemeContextValue;
120
+ interface ThemeProviderProps {
121
+ theme?: ThemeConfig;
122
+ children: React.ReactNode;
123
+ }
124
+ declare const ThemeProvider: React.FC<ThemeProviderProps>;
125
+
126
+ export { ThemeProvider, useTheme };
@@ -0,0 +1,126 @@
1
+ import React from 'react';
2
+
3
+ declare const defaultTheme: {
4
+ readonly colors: {
5
+ readonly primary: {
6
+ readonly 50: "#eff6ff";
7
+ readonly 100: "#dbeafe";
8
+ readonly 200: "#bfdbfe";
9
+ readonly 300: "#93c5fd";
10
+ readonly 400: "#60a5fa";
11
+ readonly 500: "#3b82f6";
12
+ readonly 600: "#2563eb";
13
+ readonly 700: "#1d4ed8";
14
+ readonly 800: "#1e40af";
15
+ readonly 900: "#1e3a8a";
16
+ readonly 950: "#172554";
17
+ };
18
+ readonly secondary: {
19
+ readonly 50: "#f8fafc";
20
+ readonly 100: "#f1f5f9";
21
+ readonly 200: "#e2e8f0";
22
+ readonly 300: "#cbd5e1";
23
+ readonly 400: "#94a3b8";
24
+ readonly 500: "#64748b";
25
+ readonly 600: "#475569";
26
+ readonly 700: "#334155";
27
+ readonly 800: "#1e293b";
28
+ readonly 900: "#0f172a";
29
+ readonly 950: "#020617";
30
+ };
31
+ readonly success: {
32
+ readonly 50: "#f0fdf4";
33
+ readonly 500: "#22c55e";
34
+ readonly 900: "#14532d";
35
+ };
36
+ readonly warning: {
37
+ readonly 50: "#fffbeb";
38
+ readonly 500: "#f59e0b";
39
+ readonly 900: "#78350f";
40
+ };
41
+ readonly error: {
42
+ readonly 50: "#fef2f2";
43
+ readonly 500: "#ef4444";
44
+ readonly 900: "#7f1d1d";
45
+ };
46
+ };
47
+ readonly fontFamily: {
48
+ readonly sans: readonly ["Inter", "system-ui", "sans-serif"];
49
+ readonly mono: readonly ["Fira Code", "monospace"];
50
+ };
51
+ readonly fontSize: {
52
+ readonly xs: readonly ["0.75rem", {
53
+ readonly lineHeight: "1rem";
54
+ }];
55
+ readonly sm: readonly ["0.875rem", {
56
+ readonly lineHeight: "1.25rem";
57
+ }];
58
+ readonly base: readonly ["1rem", {
59
+ readonly lineHeight: "1.5rem";
60
+ }];
61
+ readonly lg: readonly ["1.125rem", {
62
+ readonly lineHeight: "1.75rem";
63
+ }];
64
+ readonly xl: readonly ["1.25rem", {
65
+ readonly lineHeight: "1.75rem";
66
+ }];
67
+ readonly '2xl': readonly ["1.5rem", {
68
+ readonly lineHeight: "2rem";
69
+ }];
70
+ readonly '3xl': readonly ["1.875rem", {
71
+ readonly lineHeight: "2.25rem";
72
+ }];
73
+ readonly '4xl': readonly ["2.25rem", {
74
+ readonly lineHeight: "2.5rem";
75
+ }];
76
+ };
77
+ readonly spacing: {
78
+ readonly 0: "0";
79
+ readonly 1: "0.25rem";
80
+ readonly 2: "0.5rem";
81
+ readonly 3: "0.75rem";
82
+ readonly 4: "1rem";
83
+ readonly 5: "1.25rem";
84
+ readonly 6: "1.5rem";
85
+ readonly 8: "2rem";
86
+ readonly 10: "2.5rem";
87
+ readonly 12: "3rem";
88
+ readonly 16: "4rem";
89
+ readonly 20: "5rem";
90
+ readonly 24: "6rem";
91
+ };
92
+ readonly borderRadius: {
93
+ readonly none: "0";
94
+ readonly sm: "0.125rem";
95
+ readonly base: "0.25rem";
96
+ readonly md: "0.375rem";
97
+ readonly lg: "0.5rem";
98
+ readonly xl: "0.75rem";
99
+ readonly '2xl': "1rem";
100
+ readonly full: "9999px";
101
+ };
102
+ readonly boxShadow: {
103
+ readonly sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
104
+ readonly base: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)";
105
+ readonly md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
106
+ readonly lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
107
+ readonly xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)";
108
+ };
109
+ };
110
+ type Theme = typeof defaultTheme;
111
+ type DeepPartial<T> = T extends object ? {
112
+ [P in keyof T]?: DeepPartial<T[P]>;
113
+ } : T;
114
+ type ThemeConfig = DeepPartial<Theme>;
115
+
116
+ interface ThemeContextValue {
117
+ theme: Theme;
118
+ }
119
+ declare const useTheme: () => ThemeContextValue;
120
+ interface ThemeProviderProps {
121
+ theme?: ThemeConfig;
122
+ children: React.ReactNode;
123
+ }
124
+ declare const ThemeProvider: React.FC<ThemeProviderProps>;
125
+
126
+ export { ThemeProvider, useTheme };
package/dist/theme.js ADDED
@@ -0,0 +1,147 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/theme-tokens/tokens.ts
7
+ var defaultTheme = {
8
+ colors: {
9
+ primary: {
10
+ 50: "#eff6ff",
11
+ 100: "#dbeafe",
12
+ 200: "#bfdbfe",
13
+ 300: "#93c5fd",
14
+ 400: "#60a5fa",
15
+ 500: "#3b82f6",
16
+ 600: "#2563eb",
17
+ 700: "#1d4ed8",
18
+ 800: "#1e40af",
19
+ 900: "#1e3a8a",
20
+ 950: "#172554"
21
+ },
22
+ secondary: {
23
+ 50: "#f8fafc",
24
+ 100: "#f1f5f9",
25
+ 200: "#e2e8f0",
26
+ 300: "#cbd5e1",
27
+ 400: "#94a3b8",
28
+ 500: "#64748b",
29
+ 600: "#475569",
30
+ 700: "#334155",
31
+ 800: "#1e293b",
32
+ 900: "#0f172a",
33
+ 950: "#020617"
34
+ },
35
+ success: {
36
+ 50: "#f0fdf4",
37
+ 500: "#22c55e",
38
+ 900: "#14532d"
39
+ },
40
+ warning: {
41
+ 50: "#fffbeb",
42
+ 500: "#f59e0b",
43
+ 900: "#78350f"
44
+ },
45
+ error: {
46
+ 50: "#fef2f2",
47
+ 500: "#ef4444",
48
+ 900: "#7f1d1d"
49
+ }
50
+ },
51
+ fontFamily: {
52
+ sans: ["Inter", "system-ui", "sans-serif"],
53
+ mono: ["Fira Code", "monospace"]
54
+ },
55
+ fontSize: {
56
+ xs: ["0.75rem", { lineHeight: "1rem" }],
57
+ sm: ["0.875rem", { lineHeight: "1.25rem" }],
58
+ base: ["1rem", { lineHeight: "1.5rem" }],
59
+ lg: ["1.125rem", { lineHeight: "1.75rem" }],
60
+ xl: ["1.25rem", { lineHeight: "1.75rem" }],
61
+ "2xl": ["1.5rem", { lineHeight: "2rem" }],
62
+ "3xl": ["1.875rem", { lineHeight: "2.25rem" }],
63
+ "4xl": ["2.25rem", { lineHeight: "2.5rem" }]
64
+ },
65
+ spacing: {
66
+ 0: "0",
67
+ 1: "0.25rem",
68
+ 2: "0.5rem",
69
+ 3: "0.75rem",
70
+ 4: "1rem",
71
+ 5: "1.25rem",
72
+ 6: "1.5rem",
73
+ 8: "2rem",
74
+ 10: "2.5rem",
75
+ 12: "3rem",
76
+ 16: "4rem",
77
+ 20: "5rem",
78
+ 24: "6rem"
79
+ },
80
+ borderRadius: {
81
+ none: "0",
82
+ sm: "0.125rem",
83
+ base: "0.25rem",
84
+ md: "0.375rem",
85
+ lg: "0.5rem",
86
+ xl: "0.75rem",
87
+ "2xl": "1rem",
88
+ full: "9999px"
89
+ },
90
+ boxShadow: {
91
+ sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
92
+ base: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
93
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
94
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
95
+ xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"
96
+ }
97
+ };
98
+ var ThemeContext = react.createContext({ theme: defaultTheme });
99
+ var useTheme = () => react.useContext(ThemeContext);
100
+ function deepMerge(target, source) {
101
+ const result = { ...target };
102
+ for (const key in source) {
103
+ if (source[key] instanceof Object && !Array.isArray(source[key]) && key in target) {
104
+ result[key] = deepMerge(target[key], source[key]);
105
+ } else if (source[key] !== void 0) {
106
+ result[key] = source[key];
107
+ }
108
+ }
109
+ return result;
110
+ }
111
+ var ThemeProvider = ({
112
+ theme: customTheme = {},
113
+ children
114
+ }) => {
115
+ const theme = react.useMemo(
116
+ () => deepMerge(defaultTheme, customTheme),
117
+ [customTheme]
118
+ );
119
+ react.useEffect(() => {
120
+ const root = document.documentElement;
121
+ Object.entries(theme.colors).forEach(([colorName, colorValues]) => {
122
+ if (typeof colorValues === "object") {
123
+ Object.entries(colorValues).forEach(([shade, value]) => {
124
+ root.style.setProperty(`--color-${colorName}-${shade}`, value);
125
+ });
126
+ } else {
127
+ root.style.setProperty(`--color-${colorName}`, colorValues);
128
+ }
129
+ });
130
+ Object.entries(theme.fontFamily).forEach(([name, value]) => {
131
+ const fontValue = Array.isArray(value) ? value.join(", ") : String(value);
132
+ root.style.setProperty(`--font-${name}`, fontValue);
133
+ });
134
+ Object.entries(theme.spacing).forEach(([key, value]) => {
135
+ root.style.setProperty(`--spacing-${key}`, value);
136
+ });
137
+ Object.entries(theme.borderRadius).forEach(([key, value]) => {
138
+ root.style.setProperty(`--radius-${key}`, value);
139
+ });
140
+ }, [theme]);
141
+ return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: { theme }, children });
142
+ };
143
+
144
+ exports.ThemeProvider = ThemeProvider;
145
+ exports.useTheme = useTheme;
146
+ //# sourceMappingURL=theme.js.map
147
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme-tokens/tokens.ts","../src/theme/ThemeProvider.tsx"],"names":["createContext","useContext","useMemo","useEffect","jsx"],"mappings":"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","file":"theme.js","sourcesContent":["export const defaultTheme = {\n colors: {\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n secondary: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n success: {\n 50: '#f0fdf4',\n 500: '#22c55e',\n 900: '#14532d',\n },\n warning: {\n 50: '#fffbeb',\n 500: '#f59e0b',\n 900: '#78350f',\n },\n error: {\n 50: '#fef2f2',\n 500: '#ef4444',\n 900: '#7f1d1d',\n },\n },\n fontFamily: {\n sans: ['Inter', 'system-ui', 'sans-serif'],\n mono: ['Fira Code', 'monospace'],\n },\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }] as const,\n sm: ['0.875rem', { lineHeight: '1.25rem' }] as const,\n base: ['1rem', { lineHeight: '1.5rem' }] as const,\n lg: ['1.125rem', { lineHeight: '1.75rem' }] as const,\n xl: ['1.25rem', { lineHeight: '1.75rem' }] as const,\n '2xl': ['1.5rem', { lineHeight: '2rem' }] as const,\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }] as const,\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }] as const,\n },\n spacing: {\n 0: '0',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n },\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n boxShadow: {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n base: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n },\n} as const\n\nexport type Theme = typeof defaultTheme\n\nexport type DeepPartial<T> = T extends object\n ? { [P in keyof T]?: DeepPartial<T[P]> }\n : T\n\nexport type ThemeConfig = DeepPartial<Theme>\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport { defaultTheme } from '../theme-tokens'\nimport type { Theme, ThemeConfig } from '../theme-tokens'\n\ninterface ThemeContextValue {\n theme: Theme\n}\n\nconst ThemeContext = createContext<ThemeContextValue>({ theme: defaultTheme })\n\nexport const useTheme = () => useContext(ThemeContext)\n\ninterface ThemeProviderProps {\n theme?: ThemeConfig\n children: React.ReactNode\n}\n\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target }\n for (const key in source) {\n if (\n source[key] instanceof Object &&\n !Array.isArray(source[key]) &&\n key in target\n ) {\n result[key] = deepMerge(target[key] as any, source[key] as any)\n } else if (source[key] !== undefined) {\n result[key] = source[key] as any\n }\n }\n return result\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme: customTheme = {},\n children,\n}) => {\n const theme = useMemo(\n () => deepMerge(defaultTheme, customTheme as any),\n [customTheme]\n )\n\n useEffect(() => {\n const root = document.documentElement\n\n // Inject color variables\n Object.entries(theme.colors).forEach(([colorName, colorValues]) => {\n if (typeof colorValues === 'object') {\n Object.entries(colorValues).forEach(([shade, value]) => {\n root.style.setProperty(`--color-${colorName}-${shade}`, value)\n })\n } else {\n root.style.setProperty(`--color-${colorName}`, colorValues as string)\n }\n })\n\n // Inject font variables\n Object.entries(theme.fontFamily).forEach(([name, value]) => {\n const fontValue = Array.isArray(value) ? value.join(', ') : String(value)\n root.style.setProperty(`--font-${name}`, fontValue)\n })\n\n // Inject spacing variables\n Object.entries(theme.spacing).forEach(([key, value]) => {\n root.style.setProperty(`--spacing-${key}`, value)\n })\n\n // Inject border radius variables\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n root.style.setProperty(`--radius-${key}`, value)\n })\n }, [theme])\n\n return (\n <ThemeContext.Provider value={{ theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n"]}
package/dist/theme.mjs ADDED
@@ -0,0 +1,144 @@
1
+ import { createContext, useContext, useMemo, useEffect } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // src/theme-tokens/tokens.ts
5
+ var defaultTheme = {
6
+ colors: {
7
+ primary: {
8
+ 50: "#eff6ff",
9
+ 100: "#dbeafe",
10
+ 200: "#bfdbfe",
11
+ 300: "#93c5fd",
12
+ 400: "#60a5fa",
13
+ 500: "#3b82f6",
14
+ 600: "#2563eb",
15
+ 700: "#1d4ed8",
16
+ 800: "#1e40af",
17
+ 900: "#1e3a8a",
18
+ 950: "#172554"
19
+ },
20
+ secondary: {
21
+ 50: "#f8fafc",
22
+ 100: "#f1f5f9",
23
+ 200: "#e2e8f0",
24
+ 300: "#cbd5e1",
25
+ 400: "#94a3b8",
26
+ 500: "#64748b",
27
+ 600: "#475569",
28
+ 700: "#334155",
29
+ 800: "#1e293b",
30
+ 900: "#0f172a",
31
+ 950: "#020617"
32
+ },
33
+ success: {
34
+ 50: "#f0fdf4",
35
+ 500: "#22c55e",
36
+ 900: "#14532d"
37
+ },
38
+ warning: {
39
+ 50: "#fffbeb",
40
+ 500: "#f59e0b",
41
+ 900: "#78350f"
42
+ },
43
+ error: {
44
+ 50: "#fef2f2",
45
+ 500: "#ef4444",
46
+ 900: "#7f1d1d"
47
+ }
48
+ },
49
+ fontFamily: {
50
+ sans: ["Inter", "system-ui", "sans-serif"],
51
+ mono: ["Fira Code", "monospace"]
52
+ },
53
+ fontSize: {
54
+ xs: ["0.75rem", { lineHeight: "1rem" }],
55
+ sm: ["0.875rem", { lineHeight: "1.25rem" }],
56
+ base: ["1rem", { lineHeight: "1.5rem" }],
57
+ lg: ["1.125rem", { lineHeight: "1.75rem" }],
58
+ xl: ["1.25rem", { lineHeight: "1.75rem" }],
59
+ "2xl": ["1.5rem", { lineHeight: "2rem" }],
60
+ "3xl": ["1.875rem", { lineHeight: "2.25rem" }],
61
+ "4xl": ["2.25rem", { lineHeight: "2.5rem" }]
62
+ },
63
+ spacing: {
64
+ 0: "0",
65
+ 1: "0.25rem",
66
+ 2: "0.5rem",
67
+ 3: "0.75rem",
68
+ 4: "1rem",
69
+ 5: "1.25rem",
70
+ 6: "1.5rem",
71
+ 8: "2rem",
72
+ 10: "2.5rem",
73
+ 12: "3rem",
74
+ 16: "4rem",
75
+ 20: "5rem",
76
+ 24: "6rem"
77
+ },
78
+ borderRadius: {
79
+ none: "0",
80
+ sm: "0.125rem",
81
+ base: "0.25rem",
82
+ md: "0.375rem",
83
+ lg: "0.5rem",
84
+ xl: "0.75rem",
85
+ "2xl": "1rem",
86
+ full: "9999px"
87
+ },
88
+ boxShadow: {
89
+ sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
90
+ base: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
91
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
92
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
93
+ xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"
94
+ }
95
+ };
96
+ var ThemeContext = createContext({ theme: defaultTheme });
97
+ var useTheme = () => useContext(ThemeContext);
98
+ function deepMerge(target, source) {
99
+ const result = { ...target };
100
+ for (const key in source) {
101
+ if (source[key] instanceof Object && !Array.isArray(source[key]) && key in target) {
102
+ result[key] = deepMerge(target[key], source[key]);
103
+ } else if (source[key] !== void 0) {
104
+ result[key] = source[key];
105
+ }
106
+ }
107
+ return result;
108
+ }
109
+ var ThemeProvider = ({
110
+ theme: customTheme = {},
111
+ children
112
+ }) => {
113
+ const theme = useMemo(
114
+ () => deepMerge(defaultTheme, customTheme),
115
+ [customTheme]
116
+ );
117
+ useEffect(() => {
118
+ const root = document.documentElement;
119
+ Object.entries(theme.colors).forEach(([colorName, colorValues]) => {
120
+ if (typeof colorValues === "object") {
121
+ Object.entries(colorValues).forEach(([shade, value]) => {
122
+ root.style.setProperty(`--color-${colorName}-${shade}`, value);
123
+ });
124
+ } else {
125
+ root.style.setProperty(`--color-${colorName}`, colorValues);
126
+ }
127
+ });
128
+ Object.entries(theme.fontFamily).forEach(([name, value]) => {
129
+ const fontValue = Array.isArray(value) ? value.join(", ") : String(value);
130
+ root.style.setProperty(`--font-${name}`, fontValue);
131
+ });
132
+ Object.entries(theme.spacing).forEach(([key, value]) => {
133
+ root.style.setProperty(`--spacing-${key}`, value);
134
+ });
135
+ Object.entries(theme.borderRadius).forEach(([key, value]) => {
136
+ root.style.setProperty(`--radius-${key}`, value);
137
+ });
138
+ }, [theme]);
139
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { theme }, children });
140
+ };
141
+
142
+ export { ThemeProvider, useTheme };
143
+ //# sourceMappingURL=theme.mjs.map
144
+ //# sourceMappingURL=theme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme-tokens/tokens.ts","../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"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","file":"theme.mjs","sourcesContent":["export const defaultTheme = {\n colors: {\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n secondary: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n success: {\n 50: '#f0fdf4',\n 500: '#22c55e',\n 900: '#14532d',\n },\n warning: {\n 50: '#fffbeb',\n 500: '#f59e0b',\n 900: '#78350f',\n },\n error: {\n 50: '#fef2f2',\n 500: '#ef4444',\n 900: '#7f1d1d',\n },\n },\n fontFamily: {\n sans: ['Inter', 'system-ui', 'sans-serif'],\n mono: ['Fira Code', 'monospace'],\n },\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }] as const,\n sm: ['0.875rem', { lineHeight: '1.25rem' }] as const,\n base: ['1rem', { lineHeight: '1.5rem' }] as const,\n lg: ['1.125rem', { lineHeight: '1.75rem' }] as const,\n xl: ['1.25rem', { lineHeight: '1.75rem' }] as const,\n '2xl': ['1.5rem', { lineHeight: '2rem' }] as const,\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }] as const,\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }] as const,\n },\n spacing: {\n 0: '0',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n },\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n boxShadow: {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n base: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n },\n} as const\n\nexport type Theme = typeof defaultTheme\n\nexport type DeepPartial<T> = T extends object\n ? { [P in keyof T]?: DeepPartial<T[P]> }\n : T\n\nexport type ThemeConfig = DeepPartial<Theme>\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport { defaultTheme } from '../theme-tokens'\nimport type { Theme, ThemeConfig } from '../theme-tokens'\n\ninterface ThemeContextValue {\n theme: Theme\n}\n\nconst ThemeContext = createContext<ThemeContextValue>({ theme: defaultTheme })\n\nexport const useTheme = () => useContext(ThemeContext)\n\ninterface ThemeProviderProps {\n theme?: ThemeConfig\n children: React.ReactNode\n}\n\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target }\n for (const key in source) {\n if (\n source[key] instanceof Object &&\n !Array.isArray(source[key]) &&\n key in target\n ) {\n result[key] = deepMerge(target[key] as any, source[key] as any)\n } else if (source[key] !== undefined) {\n result[key] = source[key] as any\n }\n }\n return result\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme: customTheme = {},\n children,\n}) => {\n const theme = useMemo(\n () => deepMerge(defaultTheme, customTheme as any),\n [customTheme]\n )\n\n useEffect(() => {\n const root = document.documentElement\n\n // Inject color variables\n Object.entries(theme.colors).forEach(([colorName, colorValues]) => {\n if (typeof colorValues === 'object') {\n Object.entries(colorValues).forEach(([shade, value]) => {\n root.style.setProperty(`--color-${colorName}-${shade}`, value)\n })\n } else {\n root.style.setProperty(`--color-${colorName}`, colorValues as string)\n }\n })\n\n // Inject font variables\n Object.entries(theme.fontFamily).forEach(([name, value]) => {\n const fontValue = Array.isArray(value) ? value.join(', ') : String(value)\n root.style.setProperty(`--font-${name}`, fontValue)\n })\n\n // Inject spacing variables\n Object.entries(theme.spacing).forEach(([key, value]) => {\n root.style.setProperty(`--spacing-${key}`, value)\n })\n\n // Inject border radius variables\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n root.style.setProperty(`--radius-${key}`, value)\n })\n }, [theme])\n\n return (\n <ThemeContext.Provider value={{ theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n"]}