@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/README.md +394 -202
- package/dist/index.d.mts +69 -59
- package/dist/index.d.ts +69 -59
- package/dist/index.js +165 -155
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +164 -154
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
|
58
|
-
const token =
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
415
|
-
return /* @__PURE__ */ jsxs("div", { className:
|
|
416
|
-
"
|
|
417
|
-
|
|
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
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, {
|
|
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
|
-
|
|
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, {
|
|
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
|
-
|
|
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",
|
|
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
|
};
|