@insforge/nextjs 0.7.5 → 0.7.7

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.
package/dist/index.mjs CHANGED
@@ -6,7 +6,7 @@ if (typeof document !== 'undefined' && typeof window !== 'undefined') {
6
6
  if (!document.getElementById(styleId)) {
7
7
  const style = document.createElement('style');
8
8
  style.id = styleId;
9
- style.textContent = "/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n@import \"https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap\";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-content:\"\"}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-neutral-400:oklch(70.8% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-manrope:\"Manrope\",sans-serif}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.top-1\\/2{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[18px\\]{height:18px}.min-h-screen{min-height:100vh}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-\\[18px\\]{width:18px}.w-full{width:100%}.max-w-\\[400px\\]{max-width:400px}.min-w-40{min-width:calc(var(--spacing)*40)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-6{gap:calc(var(--spacing)*6)}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-\\[\\#D4D4D4\\]{border-color:#d4d4d4}.border-\\[\\#E0E0E0\\]{border-color:#e0e0e0}.border-\\[\\#E4E4E7\\]{border-color:#e4e4e7}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-200{border-color:var(--color-gray-200)}.border-neutral-400{border-color:var(--color-neutral-400)}.border-red-600{border-color:var(--color-red-600)}.border-transparent{border-color:#0000}.bg-\\[\\#FAFAFA\\]{background-color:#fafafa}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-green-500{background-color:var(--color-green-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.stroke-\\[3\\]{stroke-width:3px}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pl-3{padding-left:calc(var(--spacing)*3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-manrope{font-family:var(--font-manrope)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-8{--tw-leading:calc(var(--spacing)*8);line-height:calc(var(--spacing)*8)}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-\\[\\#09090B\\]{color:#09090b}.text-\\[\\#525252\\]{color:#525252}.text-\\[\\#737373\\]{color:#737373}.text-\\[\\#828282\\]{color:#828282}.text-\\[\\#A3A3A3\\]{color:#a3a3a3}.text-\\[\\#A6A6A6\\]{color:#a6a6a6}.text-black{color:var(--color-black)}.text-gray-500{color:var(--color-gray-500)}.text-gray-900{color:var(--color-gray-900)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.shadow-\\[0_1px_2px_0_rgba\\(0\\,0\\,0\\,0\\.10\\)\\]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\\:font-normal::placeholder{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.placeholder\\:text-\\[\\#A3A3A3\\]::placeholder{color:#a3a3a3}.before\\:h-px:before{content:var(--tw-content);height:1px}.before\\:flex-1:before{content:var(--tw-content);flex:1}.before\\:bg-\\[\\#E5E5E5\\]:before{content:var(--tw-content);background-color:#e5e5e5}.before\\:content-\\[\\'\\'\\]:before{--tw-content:\"\";content:var(--tw-content)}.after\\:h-px:after{content:var(--tw-content);height:1px}.after\\:flex-1:after{content:var(--tw-content);flex:1}.after\\:bg-\\[\\#E5E5E5\\]:after{content:var(--tw-content);background-color:#e5e5e5}.after\\:content-\\[\\'\\'\\]:after{--tw-content:\"\";content:var(--tw-content)}@media (hover:hover){.hover\\:border-\\[\\#9ca3af\\]:hover{border-color:#9ca3af}.hover\\:bg-\\[\\#f9fafb\\]:hover{background-color:#f9fafb}.hover\\:bg-black\\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-black\\/5:hover{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}}.focus\\:border-black:focus{border-color:var(--color-black)}.focus\\:shadow-\\[0_0_0_2px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-\\[\\#F5F5F5\\]:disabled{background-color:#f5f5f5}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-60:disabled{opacity:.6}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@keyframes spin{to{transform:rotate(360deg)}}";
9
+ style.textContent = "/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n@import \"https://fonts.googleapis.com/css2?family=Manrope:wght@200..800&display=swap\";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-content:\"\"}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-blue-50:oklch(97% .014 254.604);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-neutral-400:oklch(70.8% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-manrope:\"Manrope\",sans-serif}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.relative{position:relative}.top-1\\/2{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[18px\\]{height:18px}.min-h-screen{min-height:100vh}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-\\[18px\\]{width:18px}.w-full{width:100%}.max-w-\\[400px\\]{max-width:400px}.max-w-md{max-width:var(--container-md)}.min-w-40{min-width:calc(var(--spacing)*40)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-none{--tw-border-style:none;border-style:none}.border-\\[\\#D4D4D4\\]{border-color:#d4d4d4}.border-\\[\\#E0E0E0\\]{border-color:#e0e0e0}.border-\\[\\#E4E4E7\\]{border-color:#e4e4e7}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-700{border-color:var(--color-gray-700)}.border-neutral-400{border-color:var(--color-neutral-400)}.border-red-600{border-color:var(--color-red-600)}.border-transparent{border-color:#0000}.bg-\\[\\#059669\\]{background-color:#059669}.bg-\\[\\#FAFAFA\\]{background-color:#fafafa}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pl-3{padding-left:calc(var(--spacing)*3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-manrope{font-family:var(--font-manrope)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-8{--tw-leading:calc(var(--spacing)*8);line-height:calc(var(--spacing)*8)}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-\\[\\#09090B\\]{color:#09090b}.text-\\[\\#525252\\]{color:#525252}.text-\\[\\#737373\\]{color:#737373}.text-\\[\\#828282\\]{color:#828282}.text-\\[\\#A3A3A3\\]{color:#a3a3a3}.text-\\[\\#A6A6A6\\]{color:#a6a6a6}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-blue-900{color:var(--color-blue-900)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-900{color:var(--color-gray-900)}.text-purple-700{color:var(--color-purple-700)}.text-purple-900{color:var(--color-purple-900)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_1px_2px_0_rgba\\(0\\,0\\,0\\,0\\.10\\)\\]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\\:font-normal::placeholder{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.placeholder\\:text-\\[\\#A3A3A3\\]::placeholder{color:#a3a3a3}.before\\:h-px:before{content:var(--tw-content);height:1px}.before\\:flex-1:before{content:var(--tw-content);flex:1}.before\\:bg-\\[\\#E5E5E5\\]:before{content:var(--tw-content);background-color:#e5e5e5}.before\\:content-\\[\\'\\'\\]:before{--tw-content:\"\";content:var(--tw-content)}.after\\:h-px:after{content:var(--tw-content);height:1px}.after\\:flex-1:after{content:var(--tw-content);flex:1}.after\\:bg-\\[\\#E5E5E5\\]:after{content:var(--tw-content);background-color:#e5e5e5}.after\\:content-\\[\\'\\'\\]:after{--tw-content:\"\";content:var(--tw-content)}@media (hover:hover){.hover\\:border-\\[\\#9ca3af\\]:hover{border-color:#9ca3af}.hover\\:bg-\\[\\#f9fafb\\]:hover{background-color:#f9fafb}.hover\\:bg-black\\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-black\\/5:hover{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.hover\\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\\:bg-white\\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}}.focus\\:border-black:focus{border-color:var(--color-black)}.focus\\:shadow-\\[0_0_0_2px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-\\[\\#F5F5F5\\]:disabled{background-color:#f5f5f5}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-60:disabled{opacity:.6}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@keyframes spin{to{transform:rotate(360deg)}}";
10
10
  if (document.head) {
11
11
  document.head.appendChild(style);
12
12
  }
@@ -42,55 +42,24 @@ async function syncTokenToCookie(token) {
42
42
  function InsforgeProvider({
43
43
  children,
44
44
  baseUrl,
45
- frontendUrl,
46
- onAuthChange,
47
- useBuiltInAuth = true
45
+ onAuthChange
48
46
  }) {
49
47
  const [user, setUser] = useState(null);
50
- const [session, setSession] = useState(null);
51
48
  const [isLoaded, setIsLoaded] = useState(false);
52
49
  const refreshIntervalRef = useRef(null);
53
50
  const [insforge] = useState(() => createClient({ baseUrl }));
54
51
  const loadAuthState = useCallback(async () => {
55
52
  try {
56
53
  const sessionResult = insforge.auth.getCurrentSession();
57
- const session2 = sessionResult.data?.session;
58
- const token = session2?.accessToken || null;
54
+ const session = sessionResult.data?.session;
55
+ const token = session?.accessToken || null;
59
56
  if (!token) {
60
57
  setUser(null);
61
- setSession(null);
62
58
  if (onAuthChange) {
63
59
  onAuthChange(null);
64
60
  }
65
61
  setIsLoaded(true);
66
- return;
67
- }
68
- const cachedUserStr = localStorage.getItem("insforge-user-profile");
69
- if (cachedUserStr) {
70
- try {
71
- const cachedData = JSON.parse(cachedUserStr);
72
- if (cachedData.user) {
73
- const userData = {
74
- id: cachedData.user.id,
75
- email: cachedData.user.email,
76
- name: cachedData.profile?.nickname || "",
77
- avatarUrl: cachedData.profile?.avatar_url || ""
78
- };
79
- setUser(userData);
80
- setSession({
81
- userId: cachedData.user.id,
82
- token,
83
- expiresAt: "",
84
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
85
- });
86
- if (onAuthChange) {
87
- onAuthChange(userData);
88
- }
89
- setIsLoaded(true);
90
- }
91
- } catch (e) {
92
- console.warn("[InsforgeProvider] Failed to parse cached user data:", e);
93
- }
62
+ return { success: false, error: "no_session" };
94
63
  }
95
64
  try {
96
65
  await syncTokenToCookie(token);
@@ -105,44 +74,40 @@ function InsforgeProvider({
105
74
  avatarUrl: userResult.data.profile?.avatarUrl || ""
106
75
  };
107
76
  setUser(userData);
108
- setSession({
109
- userId: userResult.data.user.id,
110
- token,
111
- expiresAt: "",
112
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
113
- });
114
- localStorage.setItem("insforge-user-profile", JSON.stringify(userResult.data));
115
77
  if (onAuthChange) {
116
78
  onAuthChange(userData);
117
79
  }
80
+ setIsLoaded(true);
81
+ return { success: true };
118
82
  } else {
119
- localStorage.removeItem("insforge-auth-token");
120
- localStorage.removeItem("insforge-user-profile");
83
+ await insforge.auth.signOut();
121
84
  try {
122
85
  await fetch("/api/auth", { method: "DELETE" });
123
86
  } catch (error) {
124
87
  }
125
88
  setUser(null);
126
- setSession(null);
127
89
  if (onAuthChange) {
128
90
  onAuthChange(null);
129
91
  }
92
+ setIsLoaded(true);
93
+ return { success: false, error: "invalid_token" };
130
94
  }
131
95
  } catch (error) {
132
96
  console.error("[InsforgeProvider] Token validation failed:", error);
133
- localStorage.removeItem("insforge-auth-token");
134
- localStorage.removeItem("insforge-user-profile");
97
+ await insforge.auth.signOut();
135
98
  try {
136
99
  await fetch("/api/auth", { method: "DELETE" });
137
100
  } catch (error2) {
138
101
  }
139
102
  setUser(null);
140
- setSession(null);
141
103
  if (onAuthChange) {
142
104
  onAuthChange(null);
143
105
  }
144
- } finally {
145
106
  setIsLoaded(true);
107
+ return {
108
+ success: false,
109
+ error: error instanceof Error ? error.message : "authentication_failed"
110
+ };
146
111
  }
147
112
  }, [insforge, onAuthChange]);
148
113
  useEffect(() => {
@@ -163,15 +128,7 @@ function InsforgeProvider({
163
128
  name: userResult.data.profile?.nickname || "",
164
129
  avatarUrl: userResult.data.profile?.avatarUrl || ""
165
130
  };
166
- const sessionData = {
167
- userId: userResult.data.user.id,
168
- token: authToken,
169
- expiresAt: "",
170
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
171
- };
172
131
  setUser(userData);
173
- setSession(sessionData);
174
- localStorage.setItem("insforge-user-profile", JSON.stringify(userResult.data));
175
132
  if (onAuthChange) {
176
133
  onAuthChange(userData);
177
134
  }
@@ -187,12 +144,6 @@ function InsforgeProvider({
187
144
  avatarUrl: ""
188
145
  };
189
146
  setUser(userData);
190
- setSession({
191
- userId: fallbackUser.id || "",
192
- token: authToken,
193
- expiresAt: "",
194
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
195
- });
196
147
  if (onAuthChange) {
197
148
  onAuthChange(userData);
198
149
  }
@@ -240,14 +191,12 @@ function InsforgeProvider({
240
191
  );
241
192
  const signOut = useCallback(async () => {
242
193
  await insforge.auth.signOut();
243
- localStorage.removeItem("insforge-user-profile");
244
194
  await fetch("/api/auth", { method: "DELETE" }).catch(() => {
245
195
  });
246
196
  if (refreshIntervalRef.current) {
247
197
  clearInterval(refreshIntervalRef.current);
248
198
  }
249
199
  setUser(null);
250
- setSession(null);
251
200
  if (onAuthChange) {
252
201
  onAuthChange(null);
253
202
  }
@@ -275,7 +224,6 @@ function InsforgeProvider({
275
224
  value: {
276
225
  // Auth
277
226
  user,
278
- session,
279
227
  isLoaded,
280
228
  isSignedIn: !!user,
281
229
  setUser,
@@ -283,6 +231,7 @@ function InsforgeProvider({
283
231
  signUp,
284
232
  signOut,
285
233
  updateUser,
234
+ reloadAuth: loadAuthState,
286
235
  // Email verification (commented out - verification disabled for now)
287
236
  // sendVerificationCode,
288
237
  // verifySignUpCode,
@@ -314,12 +263,6 @@ function useUser() {
314
263
  return { user, isLoaded, updateUser, setUser };
315
264
  }
316
265
 
317
- // src/hooks/useSession.ts
318
- function useSession() {
319
- const { session, isLoaded } = useInsforge();
320
- return { session, isLoaded };
321
- }
322
-
323
266
  // src/components/SignIn.tsx
324
267
  import { useState as useState5 } from "react";
325
268
  import { createClient as createClient4 } from "@insforge/sdk";
@@ -411,13 +354,10 @@ function cn(...inputs) {
411
354
  // src/components/auth/AuthBranding.tsx
412
355
  import Link from "next/link";
413
356
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
414
- function AuthBranding({ text = "Secured by", href = "https://insforge.dev", className }) {
415
- return /* @__PURE__ */ jsxs("div", { className: cn(
416
- "bg-[#FAFAFA] px-2 py-4 flex flex-row justify-center items-center gap-1",
417
- className
418
- ), children: [
419
- /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-black font-manrope", children: text }),
420
- /* @__PURE__ */ jsx2(Link, { href, target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ jsxs("svg", { width: "83", height: "20", viewBox: "0 0 83 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
357
+ function AuthBranding() {
358
+ return /* @__PURE__ */ jsxs("div", { className: "bg-[#FAFAFA] px-2 py-4 flex flex-row justify-center items-center gap-1", children: [
359
+ /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-black font-manrope", children: "Secured by" }),
360
+ /* @__PURE__ */ jsx2(Link, { href: "https://insforge.dev", target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ jsxs("svg", { width: "83", height: "20", viewBox: "0 0 83 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
421
361
  /* @__PURE__ */ jsx2(
422
362
  "path",
423
363
  {
@@ -477,15 +417,23 @@ function AuthBranding({ text = "Secured by", href = "https://insforge.dev", clas
477
417
 
478
418
  // src/components/auth/AuthContainer.tsx
479
419
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
480
- function AuthContainer({
481
- children,
482
- style,
483
- className
484
- }) {
485
- return /* @__PURE__ */ jsx3("div", { className: cn("w-full max-w-[400px]", className), style, children: /* @__PURE__ */ jsxs2("div", { className: "w-full rounded-xl overflow-hidden shadow-lg", children: [
486
- /* @__PURE__ */ jsx3("div", { className: "bg-white p-6 flex flex-col justify-center items-stretch gap-6", children }),
487
- /* @__PURE__ */ jsx3(AuthBranding, {})
488
- ] }) });
420
+ function AuthContainer({ children, appearance = {} }) {
421
+ return /* @__PURE__ */ jsxs2(
422
+ "div",
423
+ {
424
+ className: cn(
425
+ "w-full max-w-[400px] rounded-xl overflow-hidden shadow-lg",
426
+ appearance.containerClassName
427
+ ),
428
+ children: [
429
+ /* @__PURE__ */ jsx3("div", { className: cn(
430
+ "bg-white p-6 flex flex-col justify-center items-stretch gap-6",
431
+ appearance.cardClassName
432
+ ), children }),
433
+ /* @__PURE__ */ jsx3(AuthBranding, {})
434
+ ]
435
+ }
436
+ );
489
437
  }
490
438
 
491
439
  // src/components/auth/AuthHeader.tsx
@@ -493,21 +441,19 @@ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
493
441
  function AuthHeader({
494
442
  title,
495
443
  subtitle,
496
- className,
497
- titleClassName,
498
- subtitleClassName
444
+ appearance = {}
499
445
  }) {
500
446
  return /* @__PURE__ */ jsxs3("div", { className: cn(
501
447
  "flex flex-col justify-start items-start gap-2",
502
- className
448
+ appearance.containerClassName
503
449
  ), children: [
504
450
  /* @__PURE__ */ jsx4("h1", { className: cn(
505
451
  "text-2xl font-semibold text-black leading-8",
506
- titleClassName
452
+ appearance.titleClassName
507
453
  ), children: title }),
508
454
  subtitle && /* @__PURE__ */ jsx4("p", { className: cn(
509
455
  "text-sm font-normal text-[#828282] leading-6",
510
- subtitleClassName
456
+ appearance.subtitleClassName
511
457
  ), children: subtitle })
512
458
  ] });
513
459
  }
@@ -537,14 +483,12 @@ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
537
483
  function AuthFormField({
538
484
  label,
539
485
  id,
540
- className = "",
541
- labelClassName,
542
- inputClassName,
486
+ appearance = {},
543
487
  ...props
544
488
  }) {
545
489
  return /* @__PURE__ */ jsxs5("div", { className: cn(
546
490
  "flex flex-col justify-center items-stretch gap-1",
547
- className
491
+ appearance.containerClassName
548
492
  ), children: [
549
493
  /* @__PURE__ */ jsx6(
550
494
  "label",
@@ -552,7 +496,7 @@ function AuthFormField({
552
496
  htmlFor: id,
553
497
  className: cn(
554
498
  "text-sm font-normal text-black leading-6",
555
- labelClassName
499
+ appearance.labelClassName
556
500
  ),
557
501
  children: label
558
502
  }
@@ -567,7 +511,7 @@ function AuthFormField({
567
511
  "text-sm font-normal leading-5",
568
512
  "placeholder:text-[#A3A3A3] placeholder:font-sm placeholder:font-normal",
569
513
  "focus:outline-none focus:border-black",
570
- inputClassName
514
+ appearance.inputClassName
571
515
  ),
572
516
  ...props
573
517
  }
@@ -582,6 +526,41 @@ import { Eye, EyeOff } from "lucide-react";
582
526
  // src/components/auth/AuthPasswordStrengthIndicator.tsx
583
527
  import { Check } from "lucide-react";
584
528
  import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
529
+ function AuthPasswordStrengthIndicator({
530
+ password,
531
+ config,
532
+ appearance = {}
533
+ }) {
534
+ const requirements = createRequirements(config);
535
+ return /* @__PURE__ */ jsx7(
536
+ "div",
537
+ {
538
+ className: cn("mt-3 flex flex-col gap-3", appearance.containerClassName),
539
+ children: requirements.map((req) => /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
540
+ /* @__PURE__ */ jsx7(
541
+ "div",
542
+ {
543
+ className: cn(
544
+ "flex items-center justify-center w-4 h-4 rounded-full border-2 transition-colors",
545
+ req.test(password) ? "bg-[#059669] border-transparent" : "border-neutral-400 bg-white"
546
+ ),
547
+ children: req.test(password) && /* @__PURE__ */ jsx7(Check, { className: "w-3 h-3 text-white" })
548
+ }
549
+ ),
550
+ /* @__PURE__ */ jsx7(
551
+ "span",
552
+ {
553
+ className: cn(
554
+ "text-sm font-normal leading-5 text-[#525252]",
555
+ appearance.requirementClassName
556
+ ),
557
+ children: req.label
558
+ }
559
+ )
560
+ ] }, req.label))
561
+ }
562
+ );
563
+ }
585
564
  function createRequirements(config) {
586
565
  const requirements = [];
587
566
  const minLength = config.passwordMinLength;
@@ -624,30 +603,6 @@ function validatePasswordStrength(password, config) {
624
603
  const requirements = createRequirements(config);
625
604
  return requirements.every((req) => req.test(password));
626
605
  }
627
- function AuthPasswordStrengthIndicator({
628
- password,
629
- config,
630
- className
631
- }) {
632
- const requirements = createRequirements(config);
633
- return /* @__PURE__ */ jsx7("div", { className: cn("flex flex-col gap-1 mt-2", className), children: requirements.map((requirement, index) => {
634
- const isValid = requirement.test(password);
635
- return /* @__PURE__ */ jsxs6("div", { className: "h-6 flex items-center gap-1", children: [
636
- /* @__PURE__ */ jsx7(
637
- "div",
638
- {
639
- className: cn(
640
- "w-5 h-5 rounded-full flex items-center justify-center transition-all duration-200",
641
- "border-2 flex-shrink-0",
642
- isValid ? "bg-green-500 border-transparent" : "bg-transparent border-neutral-400"
643
- ),
644
- children: isValid && /* @__PURE__ */ jsx7(Check, { className: "text-white stroke-[3]", size: 12 })
645
- }
646
- ),
647
- /* @__PURE__ */ jsx7("span", { className: "text-sm font-normal text-black leading-6", children: requirement.label })
648
- ] }, index);
649
- }) });
650
- }
651
606
 
652
607
  // src/components/auth/AuthPasswordField.tsx
653
608
  import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
@@ -658,9 +613,7 @@ function AuthPasswordField({
658
613
  emailAuthConfig,
659
614
  forgotPasswordLink,
660
615
  value,
661
- className = "",
662
- labelClassName,
663
- inputClassName,
616
+ appearance = {},
664
617
  onFocus,
665
618
  ...props
666
619
  }) {
@@ -677,7 +630,7 @@ function AuthPasswordField({
677
630
  {
678
631
  className: cn(
679
632
  "flex flex-col justify-center items-stretch gap-1",
680
- className
633
+ appearance.containerClassName
681
634
  ),
682
635
  children: [
683
636
  (label || forgotPasswordLink) && /* @__PURE__ */ jsxs7("div", { className: "flex justify-between items-center", children: [
@@ -687,7 +640,7 @@ function AuthPasswordField({
687
640
  htmlFor: id,
688
641
  className: cn(
689
642
  "text-sm font-normal text-black leading-6",
690
- labelClassName
643
+ appearance.labelClassName
691
644
  ),
692
645
  children: label
693
646
  }
@@ -713,7 +666,7 @@ function AuthPasswordField({
713
666
  "text-sm font-normal leading-5",
714
667
  "placeholder:text-[#A3A3A3] placeholder:font-sm placeholder:font-normal",
715
668
  "focus:outline-none focus:border-black",
716
- inputClassName
669
+ appearance.inputClassName
717
670
  ),
718
671
  value,
719
672
  onFocus: handleFocus,
@@ -751,7 +704,6 @@ function AuthSubmitButton({
751
704
  isLoading = false,
752
705
  confirmed = false,
753
706
  disabled = false,
754
- style,
755
707
  className
756
708
  }) {
757
709
  return /* @__PURE__ */ jsxs8(
@@ -767,7 +719,6 @@ function AuthSubmitButton({
767
719
  "disabled:opacity-50 disabled:cursor-not-allowed",
768
720
  className
769
721
  ),
770
- style,
771
722
  disabled: disabled || isLoading || confirmed,
772
723
  children: [
773
724
  isLoading && /* @__PURE__ */ jsx9(Loader2, { className: "w-5 h-5 animate-spin", size: 20 }),
@@ -791,10 +742,10 @@ function AuthDivider({ text = "or", className }) {
791
742
 
792
743
  // src/components/auth/AuthLink.tsx
793
744
  import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
794
- function AuthLink({ text, linkText, href, className, linkClassName }) {
745
+ function AuthLink({ text, linkText, href, appearance = {} }) {
795
746
  return /* @__PURE__ */ jsxs9("p", { className: cn(
796
747
  "text-center text-sm font-normal text-[#828282] leading-6",
797
- className
748
+ appearance.containerClassName
798
749
  ), children: [
799
750
  text,
800
751
  " ",
@@ -804,7 +755,7 @@ function AuthLink({ text, linkText, href, className, linkClassName }) {
804
755
  href,
805
756
  className: cn(
806
757
  "text-sm font-medium text-black leading-6",
807
- linkClassName
758
+ appearance.linkClassName
808
759
  ),
809
760
  children: linkText
810
761
  }
@@ -1018,7 +969,7 @@ function AuthOAuthProviders({
1018
969
  onClick,
1019
970
  disabled,
1020
971
  loading,
1021
- className
972
+ appearance = {}
1022
973
  }) {
1023
974
  if (!providers || providers.length === 0) {
1024
975
  return null;
@@ -1063,7 +1014,7 @@ function AuthOAuthProviders({
1063
1014
  return /* @__PURE__ */ jsx14("div", { className: cn(
1064
1015
  "grid gap-3 w-full",
1065
1016
  getGridClass(),
1066
- className
1017
+ appearance.containerClassName
1067
1018
  ), children: providers.map((provider, index) => /* @__PURE__ */ jsx14(
1068
1019
  AuthOAuthButton,
1069
1020
  {
@@ -1072,7 +1023,8 @@ function AuthOAuthProviders({
1072
1023
  disabled,
1073
1024
  loading: loading === provider,
1074
1025
  displayMode: getDisplayMode(),
1075
- style: getGridColumnStyle(index)
1026
+ style: getGridColumnStyle(index),
1027
+ className: appearance.buttonClassName
1076
1028
  },
1077
1029
  provider
1078
1030
  )) });
@@ -1089,8 +1041,7 @@ function AuthVerificationCodeInput({
1089
1041
  email,
1090
1042
  onChange,
1091
1043
  disabled = false,
1092
- className,
1093
- inputClassName
1044
+ appearance = {}
1094
1045
  }) {
1095
1046
  const inputRefs = useRef2([]);
1096
1047
  const handleChange = (index, digit) => {
@@ -1127,7 +1078,7 @@ function AuthVerificationCodeInput({
1127
1078
  };
1128
1079
  return /* @__PURE__ */ jsxs12("div", { className: cn(
1129
1080
  "flex flex-col justify-center items-center gap-6",
1130
- className
1081
+ appearance.containerClassName
1131
1082
  ), children: [
1132
1083
  /* @__PURE__ */ jsxs12("p", { className: "text-sm font-normal text-[#525252] leading-5", children: [
1133
1084
  "We've sent a verification code to your inbox at",
@@ -1155,7 +1106,7 @@ function AuthVerificationCodeInput({
1155
1106
  "transition-all duration-200 outline-none",
1156
1107
  "focus:border-black focus:shadow-[0_0_0_2px_rgba(0,0,0,0.1)]",
1157
1108
  "disabled:bg-[#F5F5F5] disabled:cursor-not-allowed disabled:opacity-60",
1158
- inputClassName
1109
+ appearance.inputClassName
1159
1110
  ),
1160
1111
  autoComplete: "one-time-code"
1161
1112
  },
@@ -1175,7 +1126,6 @@ function SignIn({
1175
1126
  emailPlaceholder = "example@email.com",
1176
1127
  passwordLabel = "Password",
1177
1128
  passwordPlaceholder = "\u2022\u2022\u2022\u2022\u2022\u2022",
1178
- forgotPasswordText = "Forget Password?",
1179
1129
  submitButtonText = "Sign In",
1180
1130
  loadingButtonText = "Signing in...",
1181
1131
  signUpText = "Don't have an account?",
@@ -1231,7 +1181,7 @@ function SignIn({
1231
1181
  setOauthLoading(null);
1232
1182
  }
1233
1183
  }
1234
- return /* @__PURE__ */ jsxs13(AuthContainer, { style: appearance.container, children: [
1184
+ return /* @__PURE__ */ jsxs13(AuthContainer, { appearance: { containerClassName: appearance.containerClassName }, children: [
1235
1185
  /* @__PURE__ */ jsx16(AuthHeader, { title, subtitle }),
1236
1186
  /* @__PURE__ */ jsx16(AuthErrorBanner, { error }),
1237
1187
  /* @__PURE__ */ jsxs13(
@@ -1279,7 +1229,7 @@ function SignIn({
1279
1229
  {
1280
1230
  isLoading: loading,
1281
1231
  disabled: loading || oauthLoading !== null,
1282
- style: appearance.button,
1232
+ className: appearance.buttonClassName,
1283
1233
  children: loading ? loadingButtonText : submitButtonText
1284
1234
  }
1285
1235
  )
@@ -1381,7 +1331,7 @@ function SignUp({
1381
1331
  setOauthLoading(null);
1382
1332
  }
1383
1333
  }
1384
- return /* @__PURE__ */ jsxs14(AuthContainer, { style: appearance.container, children: [
1334
+ return /* @__PURE__ */ jsxs14(AuthContainer, { appearance: { containerClassName: appearance.containerClassName }, children: [
1385
1335
  /* @__PURE__ */ jsx17(AuthHeader, { title, subtitle }),
1386
1336
  /* @__PURE__ */ jsx17(AuthErrorBanner, { error }),
1387
1337
  /* @__PURE__ */ jsxs14(
@@ -1431,7 +1381,7 @@ function SignUp({
1431
1381
  {
1432
1382
  isLoading: loading,
1433
1383
  disabled: loading || oauthLoading !== null,
1434
- style: appearance.button,
1384
+ className: appearance.buttonClassName,
1435
1385
  children: loading ? loadingButtonText : submitButtonText
1436
1386
  }
1437
1387
  )
@@ -1461,8 +1411,7 @@ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1461
1411
  function UserButton({
1462
1412
  afterSignOutUrl = "/",
1463
1413
  mode = "detailed",
1464
- appearance = {},
1465
- className
1414
+ appearance = {}
1466
1415
  }) {
1467
1416
  const { user, signOut } = useInsforge();
1468
1417
  const [isOpen, setIsOpen] = useState7(false);
@@ -1487,7 +1436,7 @@ function UserButton({
1487
1436
  }
1488
1437
  if (!user) return null;
1489
1438
  const initials = user.nickname ? user.nickname.charAt(0).toUpperCase() : user.email.split("@")[0].slice(0, 2).toUpperCase();
1490
- return /* @__PURE__ */ jsxs15("div", { className: cn("relative inline-block", className), ref: dropdownRef, children: [
1439
+ return /* @__PURE__ */ jsxs15("div", { className: cn("relative inline-block", appearance.containerClassName), ref: dropdownRef, children: [
1491
1440
  /* @__PURE__ */ jsxs15(
1492
1441
  "button",
1493
1442
  {
@@ -1502,7 +1451,6 @@ function UserButton({
1502
1451
  appearance.buttonClassName
1503
1452
  ),
1504
1453
  onClick: () => setIsOpen(!isOpen),
1505
- style: appearance.button,
1506
1454
  "aria-expanded": isOpen,
1507
1455
  "aria-haspopup": "true",
1508
1456
  children: [
@@ -1536,7 +1484,6 @@ function UserButton({
1536
1484
  "shadow-lg z-50 overflow-hidden p-1",
1537
1485
  appearance.dropdownClassName
1538
1486
  ),
1539
- style: appearance.dropdown,
1540
1487
  children: /* @__PURE__ */ jsxs15(
1541
1488
  "button",
1542
1489
  {
@@ -1603,6 +1550,69 @@ function Protect({
1603
1550
  }
1604
1551
  return /* @__PURE__ */ jsx21(Fragment5, { children });
1605
1552
  }
1553
+
1554
+ // src/components/InsforgeCallback.tsx
1555
+ import { useEffect as useEffect6, useRef as useRef4, Suspense } from "react";
1556
+ import { useRouter as useRouter2, useSearchParams } from "next/navigation";
1557
+ import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
1558
+ function CallbackContent({
1559
+ redirectTo,
1560
+ onSuccess,
1561
+ onError
1562
+ }) {
1563
+ const router = useRouter2();
1564
+ const searchParams = useSearchParams();
1565
+ const isProcessingRef = useRef4(false);
1566
+ const { reloadAuth } = useInsforge();
1567
+ useEffect6(() => {
1568
+ const processCallback = async () => {
1569
+ if (isProcessingRef.current) return;
1570
+ isProcessingRef.current = true;
1571
+ const error = searchParams.get("error");
1572
+ if (error) {
1573
+ if (onError) {
1574
+ onError(error);
1575
+ } else {
1576
+ router.push("/?error=" + encodeURIComponent(error));
1577
+ }
1578
+ return;
1579
+ }
1580
+ const result = await reloadAuth();
1581
+ if (!result.success) {
1582
+ const errorMsg = result.error || "authentication_failed";
1583
+ if (onError) {
1584
+ onError(errorMsg);
1585
+ } else {
1586
+ router.push("/?error=" + encodeURIComponent(errorMsg));
1587
+ }
1588
+ return;
1589
+ }
1590
+ window.history.replaceState({}, "", window.location.pathname);
1591
+ if (onSuccess) {
1592
+ onSuccess();
1593
+ }
1594
+ const destination = redirectTo || sessionStorage.getItem("auth_destination") || sessionStorage.getItem("oauth_final_destination") || "/";
1595
+ sessionStorage.removeItem("auth_destination");
1596
+ sessionStorage.removeItem("oauth_final_destination");
1597
+ router.push(destination);
1598
+ };
1599
+ processCallback();
1600
+ }, [searchParams, router, redirectTo, onSuccess, onError, reloadAuth]);
1601
+ return null;
1602
+ }
1603
+ function InsforgeCallback({
1604
+ loadingComponent,
1605
+ ...props
1606
+ }) {
1607
+ const defaultLoading = /* @__PURE__ */ jsx22("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ jsxs16("div", { className: "text-center", children: [
1608
+ /* @__PURE__ */ jsx22("h2", { className: "text-2xl font-semibold mb-4", children: "Completing authentication..." }),
1609
+ /* @__PURE__ */ jsx22("div", { className: "animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto" })
1610
+ ] }) });
1611
+ return /* @__PURE__ */ jsxs16(Suspense, { fallback: loadingComponent || defaultLoading, children: [
1612
+ /* @__PURE__ */ jsx22(CallbackContent, { ...props }),
1613
+ loadingComponent || defaultLoading
1614
+ ] });
1615
+ }
1606
1616
  export {
1607
1617
  AuthBranding,
1608
1618
  AuthContainer,
@@ -1617,6 +1627,7 @@ export {
1617
1627
  AuthPasswordStrengthIndicator,
1618
1628
  AuthSubmitButton,
1619
1629
  AuthVerificationCodeInput,
1630
+ InsforgeCallback,
1620
1631
  InsforgeProvider,
1621
1632
  OAUTH_PROVIDER_CONFIG,
1622
1633
  Protect,
@@ -1631,7 +1642,6 @@ export {
1631
1642
  isProviderSupported,
1632
1643
  useAuth,
1633
1644
  useInsforge,
1634
- useSession,
1635
1645
  useUser,
1636
1646
  validatePasswordStrength
1637
1647
  };