astrogators-shared-ui 0.9.0 → 0.10.1
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.css +1 -1
- package/dist/index.js +285 -209
- package/dist/src/components/layout/NavBar.d.ts +48 -0
- package/dist/src/components/layout/index.d.ts +2 -0
- package/dist/src/index.d.ts +2 -2
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
:root{--color-primary:#1a73e8;--color-primary-hover:#1557b0;--color-primary-active:#0d3c78;--color-secondary:#34a853;--color-secondary-hover:#2d8e47;--color-secondary-active:#1f6631;--color-background:#0a0e27;--color-background-elevated:#131729;--color-background-hover:#1a1f3a;--color-surface:#1e2139;--color-border:#2a2f4a;--color-text-primary:#fff;--color-text-secondary:#a0a5c0;--color-text-disabled:#5a5f7a;--color-success:#34a853;--color-warning:#fbbc04;--color-error:#ea4335;--color-info:#4285f4;--tier-grey:#c0eeee;--tier-green:#47c43c;--tier-blue:#1d99ff;--tier-purple:#8b5cf6;--tier-gold:#fc3;--tier-gold-glow:#fc39;--tier-purple-glow:#8b5cf680;--tier-blue-glow:#1d99ff80;--sixdot-gradient-start:#60a5fa;--sixdot-gradient-mid:#a855f7;--sixdot-gradient-end:#f59e0b;--sixdot-border-opacity:.3;--font-primary:-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-heading:"Orbitron", var(--font-primary);--font-mono:"Fira Code", "Courier New", monospace;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.25;--line-height-normal:1.5;--line-height-relaxed:1.75;--spacing-xs:.25rem;--spacing-sm:.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--spacing-2xl:3rem;--spacing-3xl:4rem;--radius-sm:.25rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000004d;--shadow-md:0 4px 6px -1px #0006, 0 2px 4px -1px #0000004d;--shadow-lg:0 10px 15px -3px #00000080, 0 4px 6px -2px #0006;--shadow-xl:0 20px 25px -5px #0009, 0 10px 10px -5px #00000080;--z-base:0;--z-dropdown:100;--z-sticky:200;--z-modal:300;--z-toast:400;--z-tooltip:500;--chamfer-size:8px;--chamfer-size-lg:12px;--chamfer-size-sm:4px;--transition-fast:.15s ease-in-out;--transition-base:.2s ease-in-out;--transition-slow:.3s ease-in-out;--topbar-height:64px;--topbar-background:var(--color-background-elevated);--topbar-border:var(--color-border);--container-max-width:1280px;--container-padding:var(--spacing-md);--button-height:40px;--button-padding-x:var(--spacing-lg);--button-padding-y:var(--spacing-sm);--input-height:40px;--input-padding-x:var(--spacing-md);--input-padding-y:var(--spacing-sm);--input-border:var(--color-border);--input-background:var(--color-surface);--card-padding:var(--spacing-lg);--card-background:var(--color-surface);--card-border:var(--color-border)}*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html,body{height:100%}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{line-height:var(--line-height-normal);font-family:var(--font-primary);font-size:var(--font-size-base);color:var(--color-text-primary);background-color:var(--color-background)}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul,ol{list-style:none}a{color:inherit;text-decoration:none}#root{isolation:isolate;min-height:100%}.chamfered-box{--_chamfer:var(--chamfer-size);--_chamfer-br:var(--chamfer-size)}.chamfered-box-sm{--_chamfer:var(--chamfer-size-sm);--_chamfer-br:var(--chamfer-size-sm)}.chamfered-box-lg{--_chamfer:var(--chamfer-size-lg);--_chamfer-br:var(--chamfer-size-lg)}.chamfered-box-asymmetric{--_chamfer:12px;--_chamfer-br:24px}.chamfered-box,.chamfered-box-sm,.chamfered-box-lg,.chamfered-box-asymmetric{clip-path:polygon(var(--_chamfer) 0, calc(100% - var(--_chamfer)) 0, 100% var(--_chamfer), 100% calc(100% - var(--_chamfer-br)), calc(100% - var(--_chamfer-br)) 100%, var(--_chamfer) 100%, 0 calc(100% - var(--_chamfer)), 0 var(--_chamfer));position:relative}.chamfered-border{background:var(--color-surface);position:relative}.chamfered-border:before{content:"";background:linear-gradient(135deg, var(--color-primary), var(--color-secondary));-webkit-mask-composite:xor;clip-path:polygon(var(--chamfer-size) 0, calc(100% - var(--chamfer-size)) 0, 100% var(--chamfer-size), 100% calc(100% - var(--chamfer-size)), calc(100% - var(--chamfer-size)) 100%, var(--chamfer-size) 100%, 0 calc(100% - var(--chamfer-size)), 0 var(--chamfer-size));padding:2px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.chamfered-diagonal-border{--_chamfer-diag:calc(var(--_chamfer) * 1.41421);--_chamfer-diag-br:calc(var(--_chamfer-br) * 1.41421);z-index:5;pointer-events:none;background-color:currentColor;height:2px;transition:background-color .3s;position:absolute}.chamfered-diagonal-tl{top:-1px;left:calc(var(--_chamfer) - 1px);width:var(--_chamfer-diag);transform-origin:0;transform:rotate(135deg)}.chamfered-diagonal-tr{top:calc(var(--_chamfer) - 1px);width:var(--_chamfer-diag);transform-origin:100%;right:-1px;transform:rotate(45deg)}.chamfered-diagonal-bl{bottom:-1px;left:calc(var(--_chamfer) - 1px);width:var(--_chamfer-diag);transform-origin:0;transform:rotate(-135deg)}.chamfered-diagonal-br{bottom:calc(var(--_chamfer-br) - 1px);width:var(--_chamfer-diag-br);transform-origin:100%;right:-1px;transform:rotate(-45deg)}.gradient-primary{background:linear-gradient(135deg, var(--color-primary), var(--color-primary-active))}.gradient-secondary{background:linear-gradient(135deg, var(--color-secondary), var(--color-secondary-active))}.gradient-surface{background:linear-gradient(135deg, var(--color-surface), var(--color-background-elevated))}.glow-primary{box-shadow:0 0 20px #1a73e880}.glow-secondary{box-shadow:0 0 20px #34a85380}.glow-error{box-shadow:0 0 20px #ea433580}.glow-tier-gold{box-shadow:0 0 20px var(--tier-gold-glow)}.glow-tier-purple{box-shadow:0 0 20px var(--tier-purple-glow)}.glow-tier-blue{box-shadow:0 0 20px var(--tier-blue-glow)}.sixdot-border{position:relative}.sixdot-border:before{content:"";background:linear-gradient(45deg, var(--sixdot-gradient-start), var(--sixdot-gradient-mid), var(--sixdot-gradient-end));border-radius:inherit;opacity:var(--sixdot-border-opacity);z-index:-1;position:absolute;inset:-2px}.sixdot-glow{background:linear-gradient(135deg,#4338ca33,#7c3aed33)}.hover-scale{transition:transform var(--transition-base)}.hover-scale:hover{transform:scale(1.02)}.hover-brighten{transition:filter var(--transition-base)}.hover-brighten:hover{filter:brightness(1.1)}.hover-lift{transition:transform var(--transition-base)}.hover-lift:hover{transform:translateY(-2px)}.hover-glow{transition:box-shadow var(--transition-base)}.hover-glow:hover{box-shadow:0 0 20px #1a73e866}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-fade-in{animation:fadeIn var(--transition-base)}.animate-slide-up{animation:slideUp var(--transition-base)}.animate-slide-down{animation:slideDown var(--transition-base)}.animate-spin{animation:1s linear infinite spin}.flex{display:flex}.flex-col{flex-direction:column;display:flex}.flex-center{justify-content:center;align-items:center;display:flex}.flex-between{justify-content:space-between;align-items:center;display:flex}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-4{grid-template-columns:repeat(4,1fr)}.gap-sm{gap:var(--spacing-sm)}.gap-md{gap:var(--spacing-md)}.gap-lg{gap:var(--spacing-lg)}.gap-xl{gap:var(--spacing-xl)}.m-0{margin:0}.mt-sm{margin-top:var(--spacing-sm)}.mt-md{margin-top:var(--spacing-md)}.mt-lg{margin-top:var(--spacing-lg)}.mt-xl{margin-top:var(--spacing-xl)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-md{margin-bottom:var(--spacing-md)}.mb-lg{margin-bottom:var(--spacing-lg)}.mb-xl{margin-bottom:var(--spacing-xl)}.p-sm{padding:var(--spacing-sm)}.p-md{padding:var(--spacing-md)}.p-lg{padding:var(--spacing-lg)}.p-xl{padding:var(--spacing-xl)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-disabled{color:var(--color-text-disabled)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-surface{background-color:var(--color-surface)}.bg-elevated{background-color:var(--color-background-elevated)}.hidden{display:none}.block{display:block}.inline-block{display:inline-block}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.w-full{width:100%}.w-auto{width:auto}.h-full{height:100%}.h-auto{height:auto}.overflow-hidden{overflow:hidden}.overflow-auto{overflow:auto}.overflow-scroll{overflow:scroll}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-background)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-disabled)}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.bg-overlay{position:relative}.bg-overlay:before{content:"";background:var(--overlay-gradient,linear-gradient(135deg, #0f172ab3, #0f172a80));z-index:0;position:absolute;inset:0}.bg-overlay>*{z-index:1;position:relative}.backdrop-image{background-position:50%;background-repeat:no-repeat;background-size:cover;position:absolute;inset:0}._container_u3o0e_1{width:100%;margin-left:auto;margin-right:auto}._padding_u3o0e_7{padding-left:var(--container-padding);padding-right:var(--container-padding)}._maxWidth-sm_u3o0e_12{max-width:640px}._maxWidth-md_u3o0e_16{max-width:768px}._maxWidth-lg_u3o0e_20{max-width:1024px}._maxWidth-xl_u3o0e_24{max-width:var(--container-max-width)}._maxWidth-full_u3o0e_28{max-width:100%}@media (width<=768px){._padding_u3o0e_7{padding-left:var(--spacing-md);padding-right:var(--spacing-md)}}._topBar_10g3c_1{height:var(--topbar-height);background-color:var(--topbar-background);border-bottom:1px solid var(--topbar-border);z-index:var(--z-sticky);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:sticky;top:0;left:0;right:0}._content_10g3c_13{height:100%;max-width:var(--container-max-width);padding:0 var(--container-padding);justify-content:space-between;align-items:center;margin:0 auto;display:flex}._left_10g3c_23{align-items:center;gap:var(--spacing-xl);flex:1;display:flex}._right_10g3c_30{align-items:center;gap:var(--spacing-md);display:flex}._logo_10g3c_36{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-primary);font-family:var(--font-heading);align-items:center;display:flex}@media (width<=768px){._content_10g3c_13{padding:0 var(--spacing-md)}._left_10g3c_23{gap:var(--spacing-md)}._right_10g3c_30{gap:var(--spacing-sm)}}._footer_zjuj8_1{background-color:var(--color-background-elevated);border-top:1px solid var(--color-border);margin-top:auto}._content_zjuj8_7{max-width:var(--container-max-width);padding:var(--spacing-xl) var(--container-padding);margin:0 auto}._defaultContent_zjuj8_13{align-items:center;gap:var(--spacing-sm);text-align:center;flex-direction:column;display:flex}._copyright_zjuj8_21{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._disclaimer_zjuj8_26{font-size:var(--font-size-xs);color:var(--color-text-disabled)}@media (width<=768px){._content_zjuj8_7{padding:var(--spacing-lg) var(--spacing-md)}}._button_159ms_1{justify-content:center;align-items:center;gap:var(--spacing-sm);font-family:var(--font-primary);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);text-align:center;-webkit-user-select:none;user-select:none;border:2px solid #0000;display:inline-flex}._button_159ms_1:disabled{opacity:.5;cursor:not-allowed}._sm_159ms_22{height:32px;padding:0 var(--spacing-md);font-size:var(--font-size-sm)}._md_159ms_28{height:var(--button-height);padding:0 var(--button-padding-x);font-size:var(--font-size-base)}._lg_159ms_34{height:48px;padding:0 var(--spacing-xl);font-size:var(--font-size-lg)}._primary_159ms_41{background-color:var(--color-primary);color:var(--color-text-primary)}._primary_159ms_41:hover:not(:disabled){background-color:var(--color-primary-hover);box-shadow:var(--shadow-md)}._primary_159ms_41:active:not(:disabled){background-color:var(--color-primary-active)}._secondary_159ms_55{background-color:var(--color-secondary);color:var(--color-text-primary)}._secondary_159ms_55:hover:not(:disabled){background-color:var(--color-secondary-hover);box-shadow:var(--shadow-md)}._secondary_159ms_55:active:not(:disabled){background-color:var(--color-secondary-active)}._outline_159ms_69{border-color:var(--color-border);color:var(--color-text-primary);background-color:#0000}._outline_159ms_69:hover:not(:disabled){background-color:var(--color-background-hover);border-color:var(--color-primary)}._ghost_159ms_80{color:var(--color-text-primary);background-color:#0000}._ghost_159ms_80:hover:not(:disabled){background-color:var(--color-background-hover)}._danger_159ms_89{background-color:var(--color-error);color:var(--color-text-primary)}._danger_159ms_89:hover:not(:disabled){box-shadow:var(--shadow-md);background-color:#c33a2e}._fullWidth_159ms_100{width:100%}._loading_159ms_105{pointer-events:none;position:relative}._loadingSpinner_159ms_110{align-items:center;gap:var(--spacing-sm);display:flex}._spinner_159ms_116{border:2px solid #0000;border-top-color:currentColor;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite _spin_159ms_116}@keyframes _spin_159ms_116{to{transform:rotate(360deg)}}._loadingText_159ms_131{opacity:.7}._inputWrapper_15t4g_1{gap:var(--spacing-xs);flex-direction:column;display:flex}._fullWidth_15t4g_7{width:100%}._label_15t4g_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);align-items:center;gap:var(--spacing-xs);display:flex}._required_15t4g_20{color:var(--color-error)}._input_15t4g_1{height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);outline:none}._input_15t4g_1:hover{border-color:var(--color-text-disabled)}._input_15t4g_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._input_15t4g_1:disabled{opacity:.5;cursor:not-allowed}._input_15t4g_1::placeholder{color:var(--color-text-disabled)}._input_15t4g_1._error_15t4g_55{border-color:var(--color-error)}._input_15t4g_1._error_15t4g_55:focus{box-shadow:0 0 0 3px #ea43351a}._errorText_15t4g_63{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_15t4g_68{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._selectWrapper_ir4bq_1{gap:var(--spacing-xs);flex-direction:column;display:flex}._fullWidth_ir4bq_7{width:100%}._label_ir4bq_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);align-items:center;gap:var(--spacing-xs);display:flex}._required_ir4bq_20{color:var(--color-error)}._selectContainer_ir4bq_24{width:100%;display:inline-block;position:relative}._select_ir4bq_1{width:100%;height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);padding-right:calc(var(--input-padding-x) + 24px);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);cursor:pointer;appearance:none;outline:none}._select_ir4bq_1:hover{border-color:var(--color-text-disabled)}._select_ir4bq_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._select_ir4bq_1:disabled{opacity:.5;cursor:not-allowed}._select_ir4bq_1._error_ir4bq_63{border-color:var(--color-error)}._select_ir4bq_1._error_ir4bq_63:focus{box-shadow:0 0 0 3px #ea43351a}._arrow_ir4bq_71{right:var(--input-padding-x);pointer-events:none;font-size:var(--font-size-xs);color:var(--color-text-secondary);position:absolute;top:50%;transform:translateY(-50%)}._errorText_ir4bq_81{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_ir4bq_86{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._select_ir4bq_1 option{background-color:var(--color-surface);color:var(--color-text-primary)}._allyCodeDropdown_1m0tw_1{align-items:center;gap:.5rem;display:flex;position:relative}._select_1m0tw_8{min-width:200px}._manageButton_1m0tw_12{white-space:nowrap}._managePanel_1m0tw_16{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);z-index:1000;min-width:300px;margin-top:.5rem;padding:1rem;position:absolute;top:100%;right:0;box-shadow:0 4px 6px #0000001a}._managePanel_1m0tw_16 h4{color:var(--color-text-primary);margin:0 0 1rem;font-size:.875rem;font-weight:600}._addSection_1m0tw_37{border-bottom:1px solid var(--color-border);margin-bottom:1rem;padding-bottom:1rem}._addInputGroup_1m0tw_43{gap:.5rem;margin-bottom:.5rem;display:flex}._addInputGroup_1m0tw_43 input{letter-spacing:.05em;flex:1;font-family:monospace}._error_1m0tw_55{color:var(--color-error);margin-top:.25rem;font-size:.75rem}._success_1m0tw_61{color:var(--color-success);margin-top:.25rem;font-size:.75rem}._codesList_1m0tw_67{margin-bottom:1rem}._codeItem_1m0tw_71{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:.5rem 0;display:flex}._codeItem_1m0tw_71:last-of-type{border-bottom:none}._codeItem_1m0tw_71 span{color:var(--color-text-secondary);font-size:.875rem}._doneButton_1m0tw_88{width:100%}@media (width<=768px){._select_1m0tw_8{min-width:150px}._managePanel_1m0tw_16{left:0;right:auto}}._card_1maq7_1{background-color:var(--card-background);border-radius:var(--radius-lg);transition:transform var(--transition-base), box-shadow var(--transition-base)}._card_1maq7_1._chamfered_1maq7_8{border-radius:0}._default_1maq7_13{background-color:var(--card-background)}._elevated_1maq7_17{background-color:var(--card-background);box-shadow:var(--shadow-md)}._outline_1maq7_22{border:1px solid var(--card-edge-color,var(--card-border));background-color:#0000}._padding-none_1maq7_28{padding:0}._padding-sm_1maq7_32{padding:var(--spacing-sm)}._padding-md_1maq7_36{padding:var(--card-padding)}._padding-lg_1maq7_40{padding:var(--spacing-xl)}._hoverable_1maq7_45{cursor:pointer;will-change:transform;backface-visibility:hidden;transform:translateZ(0)}._hoverable_1maq7_45:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)translateZ(0)}._hoverable_1maq7_45:active{box-shadow:var(--shadow-md);transform:translateY(-1px)translateZ(0)}._card_1maq7_1[role=button]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}._badge_rk7t5_1{font-weight:var(--font-weight-medium);border-radius:var(--radius-full);white-space:nowrap;justify-content:center;align-items:center;display:inline-flex}._sm_rk7t5_11{font-size:var(--font-size-xs);padding:2px 8px}._md_rk7t5_16{font-size:var(--font-size-sm);padding:4px 12px}._lg_rk7t5_21{font-size:var(--font-size-base);padding:6px 16px}._default_rk7t5_27{background-color:var(--color-surface);color:var(--color-text-secondary)}._primary_rk7t5_32{background-color:var(--color-primary);color:var(--color-text-primary)}._secondary_rk7t5_37{background-color:var(--color-secondary);color:var(--color-text-primary)}._success_rk7t5_42{background-color:var(--color-success);color:var(--color-text-primary)}._warning_rk7t5_47{background-color:var(--color-warning);color:var(--color-background)}._error_rk7t5_52{background-color:var(--color-error);color:var(--color-text-primary)}._info_rk7t5_57{background-color:var(--color-info);color:var(--color-text-primary)}._overlay_1b3yt_1{z-index:var(--z-modal);padding:var(--spacing-md);animation:_fadeIn_1b3yt_1 var(--transition-base);background-color:#000000bf;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._modal_1b3yt_13{background-color:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);max-height:90vh;animation:_slideUp_1b3yt_1 var(--transition-base);flex-direction:column;display:flex;overflow:hidden}._sm_1b3yt_25{width:100%;max-width:400px}._md_1b3yt_30{width:100%;max-width:600px}._lg_1b3yt_35{width:100%;max-width:800px}._xl_1b3yt_40{width:100%;max-width:1200px}._header_1b3yt_45{padding:var(--spacing-lg);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;display:flex}._title_1b3yt_53{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}._closeButton_1b3yt_60{border-radius:var(--radius-md);width:32px;height:32px;color:var(--color-text-secondary);transition:all var(--transition-fast);font-size:var(--font-size-xl);justify-content:center;align-items:center;line-height:1;display:flex}._closeButton_1b3yt_60:hover{background-color:var(--color-background-hover);color:var(--color-text-primary)}._content_1b3yt_78{padding:var(--spacing-lg);flex:1;overflow-y:auto}@keyframes _fadeIn_1b3yt_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUp_1b3yt_1{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (width<=768px){._modal_1b3yt_13{max-height:95vh}._header_1b3yt_45,._content_1b3yt_78{padding:var(--spacing-md)}}._spinner_1uhnh_2{border:3px solid #ffffff1a;border-top-color:var(--color-primary);border-radius:50%;animation:.8s linear infinite _spin_1uhnh_2}._spinner_1uhnh_2._sm_1uhnh_9{border-width:2px;width:16px;height:16px}._spinner_1uhnh_2._md_1uhnh_15{border-width:3px;width:32px;height:32px}._spinner_1uhnh_2._lg_1uhnh_21{border-width:4px;width:48px;height:48px}@keyframes _spin_1uhnh_2{to{transform:rotate(360deg)}}._dots_1uhnh_34{gap:8px;display:inline-flex}._dots_1uhnh_34._sm_1uhnh_9{gap:4px}._dots_1uhnh_34._lg_1uhnh_21{gap:12px}._dot_1uhnh_34{background-color:var(--color-primary);border-radius:50%;animation:1.4s ease-in-out infinite both _bounce_1uhnh_1;display:inline-block}._dots_1uhnh_34._sm_1uhnh_9 ._dot_1uhnh_34{width:6px;height:6px}._dots_1uhnh_34._md_1uhnh_15 ._dot_1uhnh_34{width:10px;height:10px}._dots_1uhnh_34._lg_1uhnh_21 ._dot_1uhnh_34{width:14px;height:14px}._dot_1uhnh_34:first-child{animation-delay:-.32s}._dot_1uhnh_34:nth-child(2){animation-delay:-.16s}@keyframes _bounce_1uhnh_1{0%,80%,to{opacity:.5;transform:scale(0)}40%{opacity:1;transform:scale(1)}}._visuallyHidden_1uhnh_91{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
|
|
1
|
+
:root{--color-primary:#1a73e8;--color-primary-hover:#1557b0;--color-primary-active:#0d3c78;--color-secondary:#34a853;--color-secondary-hover:#2d8e47;--color-secondary-active:#1f6631;--color-background:#0a0e27;--color-background-elevated:#131729;--color-background-hover:#1a1f3a;--color-surface:#1e2139;--color-border:#2a2f4a;--color-text-primary:#fff;--color-text-secondary:#a0a5c0;--color-text-disabled:#5a5f7a;--color-success:#34a853;--color-warning:#fbbc04;--color-error:#ea4335;--color-info:#4285f4;--tier-grey:#c0eeee;--tier-green:#47c43c;--tier-blue:#1d99ff;--tier-purple:#8b5cf6;--tier-gold:#fc3;--tier-gold-glow:#fc39;--tier-purple-glow:#8b5cf680;--tier-blue-glow:#1d99ff80;--sixdot-gradient-start:#60a5fa;--sixdot-gradient-mid:#a855f7;--sixdot-gradient-end:#f59e0b;--sixdot-border-opacity:.3;--font-primary:-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-heading:"Orbitron", var(--font-primary);--font-mono:"Fira Code", "Courier New", monospace;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.25;--line-height-normal:1.5;--line-height-relaxed:1.75;--spacing-xs:.25rem;--spacing-sm:.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--spacing-2xl:3rem;--spacing-3xl:4rem;--radius-sm:.25rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000004d;--shadow-md:0 4px 6px -1px #0006, 0 2px 4px -1px #0000004d;--shadow-lg:0 10px 15px -3px #00000080, 0 4px 6px -2px #0006;--shadow-xl:0 20px 25px -5px #0009, 0 10px 10px -5px #00000080;--z-base:0;--z-dropdown:100;--z-sticky:200;--z-modal:300;--z-toast:400;--z-tooltip:500;--chamfer-size:8px;--chamfer-size-lg:12px;--chamfer-size-sm:4px;--transition-fast:.15s ease-in-out;--transition-base:.2s ease-in-out;--transition-slow:.3s ease-in-out;--topbar-height:64px;--topbar-background:var(--color-background-elevated);--topbar-border:var(--color-border);--container-max-width:1280px;--container-padding:var(--spacing-md);--button-height:40px;--button-padding-x:var(--spacing-lg);--button-padding-y:var(--spacing-sm);--input-height:40px;--input-padding-x:var(--spacing-md);--input-padding-y:var(--spacing-sm);--input-border:var(--color-border);--input-background:var(--color-surface);--card-padding:var(--spacing-lg);--card-background:var(--color-surface);--card-border:var(--color-border)}*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html,body{height:100%}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{line-height:var(--line-height-normal);font-family:var(--font-primary);font-size:var(--font-size-base);color:var(--color-text-primary);background-color:var(--color-background)}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul,ol{list-style:none}a{color:inherit;text-decoration:none}#root{isolation:isolate;min-height:100%}.chamfered-box{--_chamfer:var(--chamfer-size);--_chamfer-br:var(--chamfer-size)}.chamfered-box-sm{--_chamfer:var(--chamfer-size-sm);--_chamfer-br:var(--chamfer-size-sm)}.chamfered-box-lg{--_chamfer:var(--chamfer-size-lg);--_chamfer-br:var(--chamfer-size-lg)}.chamfered-box-asymmetric{--_chamfer:12px;--_chamfer-br:24px}.chamfered-box,.chamfered-box-sm,.chamfered-box-lg,.chamfered-box-asymmetric{clip-path:polygon(var(--_chamfer) 0, calc(100% - var(--_chamfer)) 0, 100% var(--_chamfer), 100% calc(100% - var(--_chamfer-br)), calc(100% - var(--_chamfer-br)) 100%, var(--_chamfer) 100%, 0 calc(100% - var(--_chamfer)), 0 var(--_chamfer));position:relative}.chamfered-border{background:var(--color-surface);position:relative}.chamfered-border:before{content:"";background:linear-gradient(135deg, var(--color-primary), var(--color-secondary));-webkit-mask-composite:xor;clip-path:polygon(var(--chamfer-size) 0, calc(100% - var(--chamfer-size)) 0, 100% var(--chamfer-size), 100% calc(100% - var(--chamfer-size)), calc(100% - var(--chamfer-size)) 100%, var(--chamfer-size) 100%, 0 calc(100% - var(--chamfer-size)), 0 var(--chamfer-size));padding:2px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.chamfered-diagonal-border{--_chamfer-diag:calc(var(--_chamfer) * 1.41421);--_chamfer-diag-br:calc(var(--_chamfer-br) * 1.41421);z-index:5;pointer-events:none;background-color:currentColor;height:2px;transition:background-color .3s;position:absolute}.chamfered-diagonal-tl{top:-1px;left:calc(var(--_chamfer) - 1px);width:var(--_chamfer-diag);transform-origin:0;transform:rotate(135deg)}.chamfered-diagonal-tr{top:calc(var(--_chamfer) - 1px);width:var(--_chamfer-diag);transform-origin:100%;right:-1px;transform:rotate(45deg)}.chamfered-diagonal-bl{bottom:-1px;left:calc(var(--_chamfer) - 1px);width:var(--_chamfer-diag);transform-origin:0;transform:rotate(-135deg)}.chamfered-diagonal-br{bottom:calc(var(--_chamfer-br) - 1px);width:var(--_chamfer-diag-br);transform-origin:100%;right:-1px;transform:rotate(-45deg)}.gradient-primary{background:linear-gradient(135deg, var(--color-primary), var(--color-primary-active))}.gradient-secondary{background:linear-gradient(135deg, var(--color-secondary), var(--color-secondary-active))}.gradient-surface{background:linear-gradient(135deg, var(--color-surface), var(--color-background-elevated))}.glow-primary{box-shadow:0 0 20px #1a73e880}.glow-secondary{box-shadow:0 0 20px #34a85380}.glow-error{box-shadow:0 0 20px #ea433580}.glow-tier-gold{box-shadow:0 0 20px var(--tier-gold-glow)}.glow-tier-purple{box-shadow:0 0 20px var(--tier-purple-glow)}.glow-tier-blue{box-shadow:0 0 20px var(--tier-blue-glow)}.sixdot-border{position:relative}.sixdot-border:before{content:"";background:linear-gradient(45deg, var(--sixdot-gradient-start), var(--sixdot-gradient-mid), var(--sixdot-gradient-end));border-radius:inherit;opacity:var(--sixdot-border-opacity);z-index:-1;position:absolute;inset:-2px}.sixdot-glow{background:linear-gradient(135deg,#4338ca33,#7c3aed33)}.hover-scale{transition:transform var(--transition-base)}.hover-scale:hover{transform:scale(1.02)}.hover-brighten{transition:filter var(--transition-base)}.hover-brighten:hover{filter:brightness(1.1)}.hover-lift{transition:transform var(--transition-base)}.hover-lift:hover{transform:translateY(-2px)}.hover-glow{transition:box-shadow var(--transition-base)}.hover-glow:hover{box-shadow:0 0 20px #1a73e866}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-fade-in{animation:fadeIn var(--transition-base)}.animate-slide-up{animation:slideUp var(--transition-base)}.animate-slide-down{animation:slideDown var(--transition-base)}.animate-spin{animation:1s linear infinite spin}.flex{display:flex}.flex-col{flex-direction:column;display:flex}.flex-center{justify-content:center;align-items:center;display:flex}.flex-between{justify-content:space-between;align-items:center;display:flex}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-4{grid-template-columns:repeat(4,1fr)}.gap-sm{gap:var(--spacing-sm)}.gap-md{gap:var(--spacing-md)}.gap-lg{gap:var(--spacing-lg)}.gap-xl{gap:var(--spacing-xl)}.m-0{margin:0}.mt-sm{margin-top:var(--spacing-sm)}.mt-md{margin-top:var(--spacing-md)}.mt-lg{margin-top:var(--spacing-lg)}.mt-xl{margin-top:var(--spacing-xl)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-md{margin-bottom:var(--spacing-md)}.mb-lg{margin-bottom:var(--spacing-lg)}.mb-xl{margin-bottom:var(--spacing-xl)}.p-sm{padding:var(--spacing-sm)}.p-md{padding:var(--spacing-md)}.p-lg{padding:var(--spacing-lg)}.p-xl{padding:var(--spacing-xl)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-base{font-size:var(--font-size-base)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-disabled{color:var(--color-text-disabled)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-surface{background-color:var(--color-surface)}.bg-elevated{background-color:var(--color-background-elevated)}.hidden{display:none}.block{display:block}.inline-block{display:inline-block}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.w-full{width:100%}.w-auto{width:auto}.h-full{height:100%}.h-auto{height:auto}.overflow-hidden{overflow:hidden}.overflow-auto{overflow:auto}.overflow-scroll{overflow:scroll}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-background)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-disabled)}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.bg-overlay{position:relative}.bg-overlay:before{content:"";background:var(--overlay-gradient,linear-gradient(135deg, #0f172ab3, #0f172a80));z-index:0;position:absolute;inset:0}.bg-overlay>*{z-index:1;position:relative}.backdrop-image{background-position:50%;background-repeat:no-repeat;background-size:cover;position:absolute;inset:0}._container_u3o0e_1{width:100%;margin-left:auto;margin-right:auto}._padding_u3o0e_7{padding-left:var(--container-padding);padding-right:var(--container-padding)}._maxWidth-sm_u3o0e_12{max-width:640px}._maxWidth-md_u3o0e_16{max-width:768px}._maxWidth-lg_u3o0e_20{max-width:1024px}._maxWidth-xl_u3o0e_24{max-width:var(--container-max-width)}._maxWidth-full_u3o0e_28{max-width:100%}@media (width<=768px){._padding_u3o0e_7{padding-left:var(--spacing-md);padding-right:var(--spacing-md)}}._topBar_10g3c_1{height:var(--topbar-height);background-color:var(--topbar-background);border-bottom:1px solid var(--topbar-border);z-index:var(--z-sticky);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:sticky;top:0;left:0;right:0}._content_10g3c_13{height:100%;max-width:var(--container-max-width);padding:0 var(--container-padding);justify-content:space-between;align-items:center;margin:0 auto;display:flex}._left_10g3c_23{align-items:center;gap:var(--spacing-xl);flex:1;display:flex}._right_10g3c_30{align-items:center;gap:var(--spacing-md);display:flex}._logo_10g3c_36{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-primary);font-family:var(--font-heading);align-items:center;display:flex}@media (width<=768px){._content_10g3c_13{padding:0 var(--spacing-md)}._left_10g3c_23{gap:var(--spacing-md)}._right_10g3c_30{gap:var(--spacing-sm)}}._button_159ms_1{justify-content:center;align-items:center;gap:var(--spacing-sm);font-family:var(--font-primary);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);text-align:center;-webkit-user-select:none;user-select:none;border:2px solid #0000;display:inline-flex}._button_159ms_1:disabled{opacity:.5;cursor:not-allowed}._sm_159ms_22{height:32px;padding:0 var(--spacing-md);font-size:var(--font-size-sm)}._md_159ms_28{height:var(--button-height);padding:0 var(--button-padding-x);font-size:var(--font-size-base)}._lg_159ms_34{height:48px;padding:0 var(--spacing-xl);font-size:var(--font-size-lg)}._primary_159ms_41{background-color:var(--color-primary);color:var(--color-text-primary)}._primary_159ms_41:hover:not(:disabled){background-color:var(--color-primary-hover);box-shadow:var(--shadow-md)}._primary_159ms_41:active:not(:disabled){background-color:var(--color-primary-active)}._secondary_159ms_55{background-color:var(--color-secondary);color:var(--color-text-primary)}._secondary_159ms_55:hover:not(:disabled){background-color:var(--color-secondary-hover);box-shadow:var(--shadow-md)}._secondary_159ms_55:active:not(:disabled){background-color:var(--color-secondary-active)}._outline_159ms_69{border-color:var(--color-border);color:var(--color-text-primary);background-color:#0000}._outline_159ms_69:hover:not(:disabled){background-color:var(--color-background-hover);border-color:var(--color-primary)}._ghost_159ms_80{color:var(--color-text-primary);background-color:#0000}._ghost_159ms_80:hover:not(:disabled){background-color:var(--color-background-hover)}._danger_159ms_89{background-color:var(--color-error);color:var(--color-text-primary)}._danger_159ms_89:hover:not(:disabled){box-shadow:var(--shadow-md);background-color:#c33a2e}._fullWidth_159ms_100{width:100%}._loading_159ms_105{pointer-events:none;position:relative}._loadingSpinner_159ms_110{align-items:center;gap:var(--spacing-sm);display:flex}._spinner_159ms_116{border:2px solid #0000;border-top-color:currentColor;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite _spin_159ms_116}@keyframes _spin_159ms_116{to{transform:rotate(360deg)}}._loadingText_159ms_131{opacity:.7}._selectWrapper_ir4bq_1{gap:var(--spacing-xs);flex-direction:column;display:flex}._fullWidth_ir4bq_7{width:100%}._label_ir4bq_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);align-items:center;gap:var(--spacing-xs);display:flex}._required_ir4bq_20{color:var(--color-error)}._selectContainer_ir4bq_24{width:100%;display:inline-block;position:relative}._select_ir4bq_1{width:100%;height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);padding-right:calc(var(--input-padding-x) + 24px);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);cursor:pointer;appearance:none;outline:none}._select_ir4bq_1:hover{border-color:var(--color-text-disabled)}._select_ir4bq_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._select_ir4bq_1:disabled{opacity:.5;cursor:not-allowed}._select_ir4bq_1._error_ir4bq_63{border-color:var(--color-error)}._select_ir4bq_1._error_ir4bq_63:focus{box-shadow:0 0 0 3px #ea43351a}._arrow_ir4bq_71{right:var(--input-padding-x);pointer-events:none;font-size:var(--font-size-xs);color:var(--color-text-secondary);position:absolute;top:50%;transform:translateY(-50%)}._errorText_ir4bq_81{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_ir4bq_86{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._select_ir4bq_1 option{background-color:var(--color-surface);color:var(--color-text-primary)}._inputWrapper_15t4g_1{gap:var(--spacing-xs);flex-direction:column;display:flex}._fullWidth_15t4g_7{width:100%}._label_15t4g_11{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);align-items:center;gap:var(--spacing-xs);display:flex}._required_15t4g_20{color:var(--color-error)}._input_15t4g_1{height:var(--input-height);padding:var(--input-padding-y) var(--input-padding-x);font-size:var(--font-size-base);font-family:var(--font-primary);color:var(--color-text-primary);background-color:var(--input-background);border:1px solid var(--input-border);border-radius:var(--radius-md);transition:all var(--transition-base);outline:none}._input_15t4g_1:hover{border-color:var(--color-text-disabled)}._input_15t4g_1:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #1a73e81a}._input_15t4g_1:disabled{opacity:.5;cursor:not-allowed}._input_15t4g_1::placeholder{color:var(--color-text-disabled)}._input_15t4g_1._error_15t4g_55{border-color:var(--color-error)}._input_15t4g_1._error_15t4g_55:focus{box-shadow:0 0 0 3px #ea43351a}._errorText_15t4g_63{font-size:var(--font-size-sm);color:var(--color-error)}._helperText_15t4g_68{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._allyCodeDropdown_1m0tw_1{align-items:center;gap:.5rem;display:flex;position:relative}._select_1m0tw_8{min-width:200px}._manageButton_1m0tw_12{white-space:nowrap}._managePanel_1m0tw_16{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);z-index:1000;min-width:300px;margin-top:.5rem;padding:1rem;position:absolute;top:100%;right:0;box-shadow:0 4px 6px #0000001a}._managePanel_1m0tw_16 h4{color:var(--color-text-primary);margin:0 0 1rem;font-size:.875rem;font-weight:600}._addSection_1m0tw_37{border-bottom:1px solid var(--color-border);margin-bottom:1rem;padding-bottom:1rem}._addInputGroup_1m0tw_43{gap:.5rem;margin-bottom:.5rem;display:flex}._addInputGroup_1m0tw_43 input{letter-spacing:.05em;flex:1;font-family:monospace}._error_1m0tw_55{color:var(--color-error);margin-top:.25rem;font-size:.75rem}._success_1m0tw_61{color:var(--color-success);margin-top:.25rem;font-size:.75rem}._codesList_1m0tw_67{margin-bottom:1rem}._codeItem_1m0tw_71{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:.5rem 0;display:flex}._codeItem_1m0tw_71:last-of-type{border-bottom:none}._codeItem_1m0tw_71 span{color:var(--color-text-secondary);font-size:.875rem}._doneButton_1m0tw_88{width:100%}@media (width<=768px){._select_1m0tw_8{min-width:150px}._managePanel_1m0tw_16{left:0;right:auto}}._logoLink_84pn2_3{color:inherit;text-decoration:none}._appNav_84pn2_9{align-items:center;gap:var(--spacing-lg,1.5rem);display:flex}._appName_84pn2_15{font-family:var(--font-heading);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--color-text-primary);white-space:nowrap;text-decoration:none}._appName_84pn2_15:hover{color:var(--color-primary)}._tabs_84pn2_29{align-items:center;gap:var(--spacing-lg,1.5rem);height:var(--topbar-height);display:flex}._tab_84pn2_29{height:100%;padding:0 var(--spacing-xs,.25rem);color:var(--color-text-secondary);font-size:var(--font-size-base);white-space:nowrap;border-bottom:2px solid #0000;align-items:center;text-decoration:none;transition:color .15s,border-color .15s;display:flex}._tab_84pn2_29:hover{color:var(--color-text-primary)}._tabActive_84pn2_56{color:var(--color-text-primary);border-bottom-color:var(--color-primary)}._extrasGroup_84pn2_64{align-items:center;gap:.4rem;display:flex}._authCluster_84pn2_70{align-items:center;gap:var(--spacing-sm);display:flex}._userLink_84pn2_76{color:var(--color-text-secondary);text-decoration:none}._userLink_84pn2_76:hover{color:var(--color-text-primary)}._footer_zjuj8_1{background-color:var(--color-background-elevated);border-top:1px solid var(--color-border);margin-top:auto}._content_zjuj8_7{max-width:var(--container-max-width);padding:var(--spacing-xl) var(--container-padding);margin:0 auto}._defaultContent_zjuj8_13{align-items:center;gap:var(--spacing-sm);text-align:center;flex-direction:column;display:flex}._copyright_zjuj8_21{font-size:var(--font-size-sm);color:var(--color-text-secondary)}._disclaimer_zjuj8_26{font-size:var(--font-size-xs);color:var(--color-text-disabled)}@media (width<=768px){._content_zjuj8_7{padding:var(--spacing-lg) var(--spacing-md)}}._card_nwtwa_1{background-color:var(--card-background);border-radius:var(--radius-lg);border:1px solid var(--card-edge-color,transparent);transition:transform var(--transition-base), box-shadow var(--transition-base)}._card_nwtwa_1._chamfered_nwtwa_15{border-radius:0}._default_nwtwa_20{background-color:var(--card-background)}._elevated_nwtwa_24{background-color:var(--card-background);box-shadow:var(--shadow-md)}._outline_nwtwa_29{border:1px solid var(--card-edge-color,var(--card-border));background-color:#0000}._padding-none_nwtwa_35{padding:0}._padding-sm_nwtwa_39{padding:var(--spacing-sm)}._padding-md_nwtwa_43{padding:var(--card-padding)}._padding-lg_nwtwa_47{padding:var(--spacing-xl)}._hoverable_nwtwa_52{cursor:pointer;will-change:transform;backface-visibility:hidden;transform:translateZ(0)}._hoverable_nwtwa_52:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)translateZ(0)}._hoverable_nwtwa_52:active{box-shadow:var(--shadow-md);transform:translateY(-1px)translateZ(0)}._card_nwtwa_1[role=button]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}._badge_rk7t5_1{font-weight:var(--font-weight-medium);border-radius:var(--radius-full);white-space:nowrap;justify-content:center;align-items:center;display:inline-flex}._sm_rk7t5_11{font-size:var(--font-size-xs);padding:2px 8px}._md_rk7t5_16{font-size:var(--font-size-sm);padding:4px 12px}._lg_rk7t5_21{font-size:var(--font-size-base);padding:6px 16px}._default_rk7t5_27{background-color:var(--color-surface);color:var(--color-text-secondary)}._primary_rk7t5_32{background-color:var(--color-primary);color:var(--color-text-primary)}._secondary_rk7t5_37{background-color:var(--color-secondary);color:var(--color-text-primary)}._success_rk7t5_42{background-color:var(--color-success);color:var(--color-text-primary)}._warning_rk7t5_47{background-color:var(--color-warning);color:var(--color-background)}._error_rk7t5_52{background-color:var(--color-error);color:var(--color-text-primary)}._info_rk7t5_57{background-color:var(--color-info);color:var(--color-text-primary)}._overlay_1b3yt_1{z-index:var(--z-modal);padding:var(--spacing-md);animation:_fadeIn_1b3yt_1 var(--transition-base);background-color:#000000bf;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._modal_1b3yt_13{background-color:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);max-height:90vh;animation:_slideUp_1b3yt_1 var(--transition-base);flex-direction:column;display:flex;overflow:hidden}._sm_1b3yt_25{width:100%;max-width:400px}._md_1b3yt_30{width:100%;max-width:600px}._lg_1b3yt_35{width:100%;max-width:800px}._xl_1b3yt_40{width:100%;max-width:1200px}._header_1b3yt_45{padding:var(--spacing-lg);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;display:flex}._title_1b3yt_53{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}._closeButton_1b3yt_60{border-radius:var(--radius-md);width:32px;height:32px;color:var(--color-text-secondary);transition:all var(--transition-fast);font-size:var(--font-size-xl);justify-content:center;align-items:center;line-height:1;display:flex}._closeButton_1b3yt_60:hover{background-color:var(--color-background-hover);color:var(--color-text-primary)}._content_1b3yt_78{padding:var(--spacing-lg);flex:1;overflow-y:auto}@keyframes _fadeIn_1b3yt_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUp_1b3yt_1{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (width<=768px){._modal_1b3yt_13{max-height:95vh}._header_1b3yt_45,._content_1b3yt_78{padding:var(--spacing-md)}}._spinner_1uhnh_2{border:3px solid #ffffff1a;border-top-color:var(--color-primary);border-radius:50%;animation:.8s linear infinite _spin_1uhnh_2}._spinner_1uhnh_2._sm_1uhnh_9{border-width:2px;width:16px;height:16px}._spinner_1uhnh_2._md_1uhnh_15{border-width:3px;width:32px;height:32px}._spinner_1uhnh_2._lg_1uhnh_21{border-width:4px;width:48px;height:48px}@keyframes _spin_1uhnh_2{to{transform:rotate(360deg)}}._dots_1uhnh_34{gap:8px;display:inline-flex}._dots_1uhnh_34._sm_1uhnh_9{gap:4px}._dots_1uhnh_34._lg_1uhnh_21{gap:12px}._dot_1uhnh_34{background-color:var(--color-primary);border-radius:50%;animation:1.4s ease-in-out infinite both _bounce_1uhnh_1;display:inline-block}._dots_1uhnh_34._sm_1uhnh_9 ._dot_1uhnh_34{width:6px;height:6px}._dots_1uhnh_34._md_1uhnh_15 ._dot_1uhnh_34{width:10px;height:10px}._dots_1uhnh_34._lg_1uhnh_21 ._dot_1uhnh_34{width:14px;height:14px}._dot_1uhnh_34:first-child{animation-delay:-.32s}._dot_1uhnh_34:nth-child(2){animation-delay:-.16s}@keyframes _bounce_1uhnh_1{0%,80%,to{opacity:.5;transform:scale(0)}40%{opacity:1;transform:scale(1)}}._visuallyHidden_1uhnh_91{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
|
|
2
2
|
/*$vite$:1*/
|
package/dist/index.js
CHANGED
|
@@ -34,31 +34,6 @@ var l = {
|
|
|
34
34
|
})]
|
|
35
35
|
})
|
|
36
36
|
}), p = {
|
|
37
|
-
footer: "_footer_zjuj8_1",
|
|
38
|
-
content: "_content_zjuj8_7",
|
|
39
|
-
defaultContent: "_defaultContent_zjuj8_13",
|
|
40
|
-
copyright: "_copyright_zjuj8_21",
|
|
41
|
-
disclaimer: "_disclaimer_zjuj8_26"
|
|
42
|
-
}, m = ({ children: e, className: t = "" }) => /* @__PURE__ */ s("footer", {
|
|
43
|
-
className: `${p.footer} ${t}`,
|
|
44
|
-
children: /* @__PURE__ */ s("div", {
|
|
45
|
-
className: p.content,
|
|
46
|
-
children: e || /* @__PURE__ */ c("div", {
|
|
47
|
-
className: p.defaultContent,
|
|
48
|
-
children: [/* @__PURE__ */ c("p", {
|
|
49
|
-
className: p.copyright,
|
|
50
|
-
children: [
|
|
51
|
-
"© ",
|
|
52
|
-
(/* @__PURE__ */ new Date()).getFullYear(),
|
|
53
|
-
" The Astrogator's Table. All rights reserved."
|
|
54
|
-
]
|
|
55
|
-
}), /* @__PURE__ */ s("p", {
|
|
56
|
-
className: p.disclaimer,
|
|
57
|
-
children: "Star Wars: Galaxy of Heroes is a trademark of Electronic Arts Inc."
|
|
58
|
-
})]
|
|
59
|
-
})
|
|
60
|
-
})
|
|
61
|
-
}), h = {
|
|
62
37
|
button: "_button_159ms_1",
|
|
63
38
|
sm: "_sm_159ms_22",
|
|
64
39
|
md: "_md_159ms_28",
|
|
@@ -74,58 +49,18 @@ var l = {
|
|
|
74
49
|
spinner: "_spinner_159ms_116",
|
|
75
50
|
spin: "_spin_159ms_116",
|
|
76
51
|
loadingText: "_loadingText_159ms_131"
|
|
77
|
-
},
|
|
78
|
-
className: `${
|
|
52
|
+
}, m = ({ children: e, variant: t = "primary", size: n = "md", fullWidth: r = !1, loading: i = !1, disabled: a = !1, className: o = "", ...l }) => /* @__PURE__ */ s("button", {
|
|
53
|
+
className: `${p.button} ${p[t]} ${p[n]} ${r ? p.fullWidth : ""} ${i ? p.loading : ""} ${o}`,
|
|
79
54
|
disabled: a || i,
|
|
80
55
|
...l,
|
|
81
56
|
children: i ? /* @__PURE__ */ c("span", {
|
|
82
|
-
className:
|
|
83
|
-
children: [/* @__PURE__ */ s("span", { className:
|
|
84
|
-
className:
|
|
57
|
+
className: p.loadingSpinner,
|
|
58
|
+
children: [/* @__PURE__ */ s("span", { className: p.spinner }), /* @__PURE__ */ s("span", {
|
|
59
|
+
className: p.loadingText,
|
|
85
60
|
children: e
|
|
86
61
|
})]
|
|
87
62
|
}) : e
|
|
88
|
-
}),
|
|
89
|
-
inputWrapper: "_inputWrapper_15t4g_1",
|
|
90
|
-
fullWidth: "_fullWidth_15t4g_7",
|
|
91
|
-
label: "_label_15t4g_11",
|
|
92
|
-
required: "_required_15t4g_20",
|
|
93
|
-
input: "_input_15t4g_1",
|
|
94
|
-
error: "_error_15t4g_55",
|
|
95
|
-
errorText: "_errorText_15t4g_63",
|
|
96
|
-
helperText: "_helperText_15t4g_68"
|
|
97
|
-
}, v = e.forwardRef(({ label: e, error: t, helperText: n, fullWidth: r = !1, className: i = "", id: a, ...o }, l) => {
|
|
98
|
-
let u = a || `input-${Math.random().toString(36).substr(2, 9)}`, d = !!t;
|
|
99
|
-
return /* @__PURE__ */ c("div", {
|
|
100
|
-
className: `${_.inputWrapper} ${r ? _.fullWidth : ""} ${i}`,
|
|
101
|
-
children: [
|
|
102
|
-
e && /* @__PURE__ */ c("label", {
|
|
103
|
-
htmlFor: u,
|
|
104
|
-
className: _.label,
|
|
105
|
-
children: [e, o.required && /* @__PURE__ */ s("span", {
|
|
106
|
-
className: _.required,
|
|
107
|
-
children: "*"
|
|
108
|
-
})]
|
|
109
|
-
}),
|
|
110
|
-
/* @__PURE__ */ s("input", {
|
|
111
|
-
ref: l,
|
|
112
|
-
id: u,
|
|
113
|
-
className: `${_.input} ${d ? _.error : ""}`,
|
|
114
|
-
...o
|
|
115
|
-
}),
|
|
116
|
-
t && /* @__PURE__ */ s("span", {
|
|
117
|
-
className: _.errorText,
|
|
118
|
-
children: t
|
|
119
|
-
}),
|
|
120
|
-
n && !t && /* @__PURE__ */ s("span", {
|
|
121
|
-
className: _.helperText,
|
|
122
|
-
children: n
|
|
123
|
-
})
|
|
124
|
-
]
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
v.displayName = "Input";
|
|
128
|
-
var y = {
|
|
63
|
+
}), h = {
|
|
129
64
|
selectWrapper: "_selectWrapper_ir4bq_1",
|
|
130
65
|
fullWidth: "_fullWidth_ir4bq_7",
|
|
131
66
|
label: "_label_ir4bq_11",
|
|
@@ -136,25 +71,25 @@ var y = {
|
|
|
136
71
|
arrow: "_arrow_ir4bq_71",
|
|
137
72
|
errorText: "_errorText_ir4bq_81",
|
|
138
73
|
helperText: "_helperText_ir4bq_86"
|
|
139
|
-
},
|
|
74
|
+
}, g = e.forwardRef(({ label: e, error: t, helperText: n, options: r, placeholder: i, fullWidth: a = !1, className: o = "", id: l, ...u }, d) => {
|
|
140
75
|
let f = l || `select-${Math.random().toString(36).substr(2, 9)}`, p = !!t;
|
|
141
76
|
return /* @__PURE__ */ c("div", {
|
|
142
|
-
className: `${
|
|
77
|
+
className: `${h.selectWrapper} ${a ? h.fullWidth : ""} ${o}`,
|
|
143
78
|
children: [
|
|
144
79
|
e && /* @__PURE__ */ c("label", {
|
|
145
80
|
htmlFor: f,
|
|
146
|
-
className:
|
|
81
|
+
className: h.label,
|
|
147
82
|
children: [e, u.required && /* @__PURE__ */ s("span", {
|
|
148
|
-
className:
|
|
83
|
+
className: h.required,
|
|
149
84
|
children: "*"
|
|
150
85
|
})]
|
|
151
86
|
}),
|
|
152
87
|
/* @__PURE__ */ c("div", {
|
|
153
|
-
className:
|
|
88
|
+
className: h.selectContainer,
|
|
154
89
|
children: [/* @__PURE__ */ c("select", {
|
|
155
90
|
ref: d,
|
|
156
91
|
id: f,
|
|
157
|
-
className: `${
|
|
92
|
+
className: `${h.select} ${p ? h.error : ""}`,
|
|
158
93
|
...u,
|
|
159
94
|
children: [
|
|
160
95
|
i && /* @__PURE__ */ s("option", {
|
|
@@ -170,53 +105,93 @@ var y = {
|
|
|
170
105
|
!r && u.children
|
|
171
106
|
]
|
|
172
107
|
}), /* @__PURE__ */ s("span", {
|
|
173
|
-
className:
|
|
108
|
+
className: h.arrow,
|
|
174
109
|
children: "▼"
|
|
175
110
|
})]
|
|
176
111
|
}),
|
|
177
112
|
t && /* @__PURE__ */ s("span", {
|
|
178
|
-
className:
|
|
113
|
+
className: h.errorText,
|
|
114
|
+
children: t
|
|
115
|
+
}),
|
|
116
|
+
n && !t && /* @__PURE__ */ s("span", {
|
|
117
|
+
className: h.helperText,
|
|
118
|
+
children: n
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
g.displayName = "Select";
|
|
124
|
+
var _ = {
|
|
125
|
+
inputWrapper: "_inputWrapper_15t4g_1",
|
|
126
|
+
fullWidth: "_fullWidth_15t4g_7",
|
|
127
|
+
label: "_label_15t4g_11",
|
|
128
|
+
required: "_required_15t4g_20",
|
|
129
|
+
input: "_input_15t4g_1",
|
|
130
|
+
error: "_error_15t4g_55",
|
|
131
|
+
errorText: "_errorText_15t4g_63",
|
|
132
|
+
helperText: "_helperText_15t4g_68"
|
|
133
|
+
}, v = e.forwardRef(({ label: e, error: t, helperText: n, fullWidth: r = !1, className: i = "", id: a, ...o }, l) => {
|
|
134
|
+
let u = a || `input-${Math.random().toString(36).substr(2, 9)}`, d = !!t;
|
|
135
|
+
return /* @__PURE__ */ c("div", {
|
|
136
|
+
className: `${_.inputWrapper} ${r ? _.fullWidth : ""} ${i}`,
|
|
137
|
+
children: [
|
|
138
|
+
e && /* @__PURE__ */ c("label", {
|
|
139
|
+
htmlFor: u,
|
|
140
|
+
className: _.label,
|
|
141
|
+
children: [e, o.required && /* @__PURE__ */ s("span", {
|
|
142
|
+
className: _.required,
|
|
143
|
+
children: "*"
|
|
144
|
+
})]
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ s("input", {
|
|
147
|
+
ref: l,
|
|
148
|
+
id: u,
|
|
149
|
+
className: `${_.input} ${d ? _.error : ""}`,
|
|
150
|
+
...o
|
|
151
|
+
}),
|
|
152
|
+
t && /* @__PURE__ */ s("span", {
|
|
153
|
+
className: _.errorText,
|
|
179
154
|
children: t
|
|
180
155
|
}),
|
|
181
156
|
n && !t && /* @__PURE__ */ s("span", {
|
|
182
|
-
className:
|
|
157
|
+
className: _.helperText,
|
|
183
158
|
children: n
|
|
184
159
|
})
|
|
185
160
|
]
|
|
186
161
|
});
|
|
187
162
|
});
|
|
188
|
-
|
|
163
|
+
v.displayName = "Input";
|
|
189
164
|
//#endregion
|
|
190
165
|
//#region src/services/auth.ts
|
|
191
|
-
var
|
|
192
|
-
localStorage.setItem(
|
|
193
|
-
},
|
|
194
|
-
localStorage.removeItem(
|
|
195
|
-
},
|
|
196
|
-
localStorage.setItem(
|
|
166
|
+
var y = "astrogators_access_token", b = "astrogators_refresh_token", x = () => localStorage.getItem(y), S = (e) => {
|
|
167
|
+
localStorage.setItem(y, e);
|
|
168
|
+
}, C = () => {
|
|
169
|
+
localStorage.removeItem(y);
|
|
170
|
+
}, w = () => localStorage.getItem(b), T = (e) => {
|
|
171
|
+
localStorage.setItem(b, e);
|
|
172
|
+
}, E = () => {
|
|
173
|
+
localStorage.removeItem(b);
|
|
174
|
+
}, D = (e, t) => {
|
|
175
|
+
S(e), T(t);
|
|
197
176
|
}, O = () => {
|
|
198
|
-
|
|
199
|
-
}, k = (e
|
|
200
|
-
|
|
201
|
-
},
|
|
202
|
-
|
|
203
|
-
}, ee = () => !!C(), j = "", M, N = null, P = (e) => {
|
|
204
|
-
j = e.baseURL, M = e.onUnauthorized;
|
|
205
|
-
}, F = () => N || (N = (async () => {
|
|
206
|
-
let e = E();
|
|
177
|
+
C(), E();
|
|
178
|
+
}, ee = () => !!x(), k = "", A, j = null, M = (e) => {
|
|
179
|
+
k = e.baseURL, A = e.onUnauthorized;
|
|
180
|
+
}, N = () => j || (j = (async () => {
|
|
181
|
+
let e = w();
|
|
207
182
|
if (!e) throw Error("No refresh token available");
|
|
208
|
-
let t = await fetch(`${
|
|
183
|
+
let t = await fetch(`${k}/api/v1/auth/refresh`, {
|
|
209
184
|
method: "POST",
|
|
210
185
|
headers: { "Content-Type": "application/json" },
|
|
211
186
|
body: JSON.stringify({ refresh_token: e })
|
|
212
187
|
});
|
|
213
|
-
if (!t.ok) throw
|
|
188
|
+
if (!t.ok) throw O(), A?.(), Error("Token refresh failed");
|
|
214
189
|
let n = await t.json();
|
|
215
|
-
return
|
|
190
|
+
return D(n.access_token, n.refresh_token), n.access_token;
|
|
216
191
|
})().finally(() => {
|
|
217
|
-
|
|
218
|
-
}),
|
|
219
|
-
let n =
|
|
192
|
+
j = null;
|
|
193
|
+
}), j), P = async (e, t = {}) => {
|
|
194
|
+
let n = x(), r = { ...t.headers };
|
|
220
195
|
n && (r.Authorization = `Bearer ${n}`);
|
|
221
196
|
let i = await fetch(e, {
|
|
222
197
|
...t,
|
|
@@ -224,17 +199,17 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
224
199
|
});
|
|
225
200
|
if (i.status !== 401 || !n) return i;
|
|
226
201
|
try {
|
|
227
|
-
return r.Authorization = `Bearer ${await
|
|
202
|
+
return r.Authorization = `Bearer ${await N()}`, await fetch(e, {
|
|
228
203
|
...t,
|
|
229
204
|
headers: r
|
|
230
205
|
});
|
|
231
206
|
} catch {
|
|
232
207
|
return i;
|
|
233
208
|
}
|
|
234
|
-
},
|
|
209
|
+
}, F = class {
|
|
235
210
|
baseURL;
|
|
236
211
|
constructor(e) {
|
|
237
|
-
this.baseURL = e.baseURL,
|
|
212
|
+
this.baseURL = e.baseURL, M({
|
|
238
213
|
baseURL: e.baseURL,
|
|
239
214
|
onUnauthorized: e.onUnauthorized
|
|
240
215
|
});
|
|
@@ -243,7 +218,7 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
243
218
|
let n = {
|
|
244
219
|
"Content-Type": "application/json",
|
|
245
220
|
...t.headers
|
|
246
|
-
}, r = await
|
|
221
|
+
}, r = await P(`${this.baseURL}${e}`, {
|
|
247
222
|
...t,
|
|
248
223
|
headers: n
|
|
249
224
|
});
|
|
@@ -293,55 +268,55 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
293
268
|
method: "DELETE"
|
|
294
269
|
});
|
|
295
270
|
}
|
|
296
|
-
},
|
|
297
|
-
|
|
298
|
-
},
|
|
271
|
+
}, I, te = (e) => {
|
|
272
|
+
I = new F(e);
|
|
273
|
+
}, L = "astrogators_ally_codes", R = "astrogators_selected_ally_code", z = () => {
|
|
299
274
|
try {
|
|
300
|
-
let e = localStorage.getItem(
|
|
275
|
+
let e = localStorage.getItem(L);
|
|
301
276
|
return e ? JSON.parse(e) : [];
|
|
302
277
|
} catch (e) {
|
|
303
278
|
return console.error("Failed to read ally codes from localStorage:", e), [];
|
|
304
279
|
}
|
|
305
|
-
},
|
|
280
|
+
}, ne = (e) => {
|
|
306
281
|
try {
|
|
307
|
-
let t =
|
|
282
|
+
let t = z();
|
|
308
283
|
if (t.some((t) => t.ally_code === e.ally_code)) return;
|
|
309
|
-
t.push(e), localStorage.setItem(
|
|
284
|
+
t.push(e), localStorage.setItem(L, JSON.stringify(t));
|
|
310
285
|
} catch (e) {
|
|
311
286
|
console.error("Failed to save ally code to localStorage:", e);
|
|
312
287
|
}
|
|
313
|
-
},
|
|
288
|
+
}, re = (e) => {
|
|
314
289
|
try {
|
|
315
|
-
let t =
|
|
316
|
-
localStorage.setItem(
|
|
290
|
+
let t = z().filter((t) => t.ally_code !== e);
|
|
291
|
+
localStorage.setItem(L, JSON.stringify(t));
|
|
317
292
|
} catch (e) {
|
|
318
293
|
console.error("Failed to remove ally code from localStorage:", e);
|
|
319
294
|
}
|
|
320
|
-
},
|
|
295
|
+
}, B = (e) => {
|
|
321
296
|
try {
|
|
322
|
-
let t =
|
|
297
|
+
let t = z().map((t) => t.ally_code === e ? {
|
|
323
298
|
...t,
|
|
324
299
|
last_used_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
325
300
|
} : t);
|
|
326
|
-
localStorage.setItem(
|
|
301
|
+
localStorage.setItem(L, JSON.stringify(t));
|
|
327
302
|
} catch (e) {
|
|
328
303
|
console.error("Failed to update ally code last used:", e);
|
|
329
304
|
}
|
|
330
|
-
},
|
|
331
|
-
e ? localStorage.setItem(
|
|
332
|
-
},
|
|
333
|
-
localStorage.removeItem(
|
|
334
|
-
},
|
|
305
|
+
}, ie = () => localStorage.getItem(R), V = (e) => {
|
|
306
|
+
e ? localStorage.setItem(R, e) : localStorage.removeItem(R);
|
|
307
|
+
}, H = () => {
|
|
308
|
+
localStorage.removeItem(L), localStorage.removeItem(R);
|
|
309
|
+
}, U = t(void 0), W = ({ children: e, apiBaseUrl: t }) => {
|
|
335
310
|
let [r, o] = a(null), [c, l] = a(!0), [u, d] = a(!0), [f, p] = a(!0), [m, h] = a([]), [g, _] = a(null), [v, y] = a(!1), [b, x] = a({
|
|
336
311
|
show: !1,
|
|
337
312
|
localStorageCodes: []
|
|
338
313
|
});
|
|
339
314
|
i(() => {
|
|
340
|
-
|
|
315
|
+
te({ baseURL: t });
|
|
341
316
|
}, [t]), i(() => {
|
|
342
317
|
(async () => {
|
|
343
318
|
try {
|
|
344
|
-
d((await
|
|
319
|
+
d((await I.get("/api/v1/config/features")).auth_enabled);
|
|
345
320
|
} catch (e) {
|
|
346
321
|
console.error("Failed to fetch features:", e), d(!0);
|
|
347
322
|
} finally {
|
|
@@ -355,9 +330,9 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
355
330
|
return;
|
|
356
331
|
}
|
|
357
332
|
try {
|
|
358
|
-
o(await
|
|
333
|
+
o(await I.get("/api/v1/users/me"));
|
|
359
334
|
} catch (e) {
|
|
360
|
-
console.error("Failed to fetch user:", e), o(null),
|
|
335
|
+
console.error("Failed to fetch user:", e), o(null), O();
|
|
361
336
|
} finally {
|
|
362
337
|
l(!1);
|
|
363
338
|
}
|
|
@@ -367,39 +342,39 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
367
342
|
}, [S]);
|
|
368
343
|
let C = async (e) => {
|
|
369
344
|
try {
|
|
370
|
-
let t = await
|
|
371
|
-
|
|
345
|
+
let t = await I.post("/api/v1/auth/login", e);
|
|
346
|
+
D(t.access_token, t.refresh_token), o(await I.get("/api/v1/users/me"));
|
|
372
347
|
} catch (e) {
|
|
373
348
|
throw console.error("Login failed:", e), e;
|
|
374
349
|
}
|
|
375
350
|
}, w = async (e) => {
|
|
376
351
|
try {
|
|
377
|
-
await
|
|
352
|
+
await I.post("/api/v1/auth/register", e);
|
|
378
353
|
} catch (e) {
|
|
379
354
|
throw console.error("Registration failed:", e), e;
|
|
380
355
|
}
|
|
381
356
|
}, T = () => {
|
|
382
|
-
|
|
357
|
+
O(), o(null), h([]), _(null), x({
|
|
383
358
|
show: !1,
|
|
384
359
|
localStorageCodes: []
|
|
385
360
|
});
|
|
386
361
|
}, E = async () => {
|
|
387
362
|
await S();
|
|
388
|
-
},
|
|
363
|
+
}, k = async (e) => {
|
|
389
364
|
try {
|
|
390
|
-
return (await
|
|
365
|
+
return (await I.post("/api/v1/auth/forgot-password", e)).message;
|
|
391
366
|
} catch (e) {
|
|
392
367
|
throw console.error("Forgot password failed:", e), e;
|
|
393
368
|
}
|
|
394
|
-
},
|
|
369
|
+
}, A = async (e) => {
|
|
395
370
|
try {
|
|
396
|
-
return (await
|
|
371
|
+
return (await I.post("/api/v1/auth/reset-password", e)).message;
|
|
397
372
|
} catch (e) {
|
|
398
373
|
throw console.error("Reset password failed:", e), e;
|
|
399
374
|
}
|
|
400
375
|
}, j = async (e) => {
|
|
401
376
|
try {
|
|
402
|
-
return (await
|
|
377
|
+
return (await I.post("/api/v1/auth/resend-verification", e)).message;
|
|
403
378
|
} catch (e) {
|
|
404
379
|
throw console.error("Resend verification failed:", e), e;
|
|
405
380
|
}
|
|
@@ -407,26 +382,26 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
407
382
|
y(!0);
|
|
408
383
|
try {
|
|
409
384
|
if (r) {
|
|
410
|
-
h((await
|
|
411
|
-
let e =
|
|
385
|
+
h((await I.get("/api/v1/users/me/ally-codes")).ally_codes);
|
|
386
|
+
let e = z();
|
|
412
387
|
e.length > 0 && x({
|
|
413
388
|
show: !0,
|
|
414
389
|
localStorageCodes: e.map((e) => e.ally_code)
|
|
415
390
|
});
|
|
416
|
-
} else h(
|
|
417
|
-
_(
|
|
391
|
+
} else h(z());
|
|
392
|
+
_(ie());
|
|
418
393
|
} catch (e) {
|
|
419
394
|
console.error("Failed to fetch ally codes:", e), h([]);
|
|
420
395
|
} finally {
|
|
421
396
|
y(!1);
|
|
422
397
|
}
|
|
423
398
|
}, [r]), N = n(async (e) => {
|
|
424
|
-
r && typeof e == "number" ? (await
|
|
399
|
+
r && typeof e == "number" ? (await I.put(`/api/v1/users/me/ally-codes/${e}/use`, {}), await M()) : !r && typeof e == "string" && (B(e), h(z()));
|
|
425
400
|
}, [r, M]), P = n((e) => {
|
|
426
|
-
if (_(e),
|
|
401
|
+
if (_(e), V(e), e && r) {
|
|
427
402
|
let t = m.find((t) => "ally_code" in t && t.ally_code === e);
|
|
428
403
|
t && "id" in t && N(t.id);
|
|
429
|
-
} else e && !r &&
|
|
404
|
+
} else e && !r && B(e);
|
|
430
405
|
}, [
|
|
431
406
|
r,
|
|
432
407
|
m,
|
|
@@ -434,50 +409,50 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
434
409
|
]), F = n(async (e) => {
|
|
435
410
|
if (!/^\d{9}$/.test(e)) throw Error("Ally code must be exactly 9 digits");
|
|
436
411
|
if (r) {
|
|
437
|
-
let t = await
|
|
412
|
+
let t = await I.post("/api/v1/users/me/ally-codes", { ally_code: e });
|
|
438
413
|
h((e) => [t, ...e]), m.length === 0 && P(e);
|
|
439
414
|
} else {
|
|
440
|
-
let t = await
|
|
415
|
+
let t = await I.get(`/api/v1/player-data/player/${e}`);
|
|
441
416
|
if (!t) throw Error("Invalid ally code - player not found");
|
|
442
|
-
|
|
417
|
+
ne({
|
|
443
418
|
ally_code: e,
|
|
444
419
|
player_name: t.data?.name ?? null,
|
|
445
420
|
last_used_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
446
|
-
}), h(
|
|
421
|
+
}), h(z()), m.length === 0 && P(e);
|
|
447
422
|
}
|
|
448
423
|
}, [
|
|
449
424
|
r,
|
|
450
425
|
m.length,
|
|
451
426
|
P
|
|
452
|
-
]),
|
|
453
|
-
r && typeof e == "number" ? (await
|
|
427
|
+
]), L = n(async (e) => {
|
|
428
|
+
r && typeof e == "number" ? (await I.delete(`/api/v1/users/me/ally-codes/${e}`), h((t) => t.filter((t) => "id" in t && t.id !== e))) : !r && typeof e == "string" && (re(e), h(z()), g === e && P(null));
|
|
454
429
|
}, [
|
|
455
430
|
r,
|
|
456
431
|
g,
|
|
457
432
|
P
|
|
458
|
-
]),
|
|
433
|
+
]), R = n(() => {
|
|
459
434
|
x({
|
|
460
435
|
show: !1,
|
|
461
436
|
localStorageCodes: []
|
|
462
437
|
});
|
|
463
|
-
}, []),
|
|
438
|
+
}, []), W = n(async () => {
|
|
464
439
|
if (!r) return;
|
|
465
|
-
let e =
|
|
440
|
+
let e = z();
|
|
466
441
|
for (let t of e) try {
|
|
467
442
|
await F(t.ally_code);
|
|
468
443
|
} catch (e) {
|
|
469
444
|
console.error(`Failed to migrate ally code ${t.ally_code}:`, e);
|
|
470
445
|
}
|
|
471
|
-
|
|
446
|
+
H(), R();
|
|
472
447
|
}, [
|
|
473
448
|
r,
|
|
474
449
|
F,
|
|
475
|
-
|
|
450
|
+
R
|
|
476
451
|
]);
|
|
477
452
|
i(() => {
|
|
478
453
|
M();
|
|
479
454
|
}, [M]);
|
|
480
|
-
let
|
|
455
|
+
let G = {
|
|
481
456
|
user: r,
|
|
482
457
|
isAuthenticated: !!r,
|
|
483
458
|
isLoading: c,
|
|
@@ -485,8 +460,8 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
485
460
|
register: w,
|
|
486
461
|
logout: T,
|
|
487
462
|
refreshUser: E,
|
|
488
|
-
forgotPassword:
|
|
489
|
-
resetPassword:
|
|
463
|
+
forgotPassword: k,
|
|
464
|
+
resetPassword: A,
|
|
490
465
|
resendVerification: j,
|
|
491
466
|
authEnabled: u,
|
|
492
467
|
isLoadingFeatures: f,
|
|
@@ -495,22 +470,22 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
495
470
|
isLoadingAllyCodes: v,
|
|
496
471
|
fetchAllyCodes: M,
|
|
497
472
|
addAllyCode: F,
|
|
498
|
-
removeAllyCode:
|
|
473
|
+
removeAllyCode: L,
|
|
499
474
|
selectAllyCode: P,
|
|
500
475
|
updateAllyCodeLastUsed: N,
|
|
501
476
|
migrationPrompt: b,
|
|
502
|
-
dismissMigrationPrompt:
|
|
503
|
-
migrateLocalStorageCodes:
|
|
477
|
+
dismissMigrationPrompt: R,
|
|
478
|
+
migrateLocalStorageCodes: W
|
|
504
479
|
};
|
|
505
|
-
return /* @__PURE__ */ s(
|
|
506
|
-
value:
|
|
480
|
+
return /* @__PURE__ */ s(U.Provider, {
|
|
481
|
+
value: G,
|
|
507
482
|
children: e
|
|
508
483
|
});
|
|
509
|
-
},
|
|
510
|
-
let e = r(
|
|
484
|
+
}, G = () => {
|
|
485
|
+
let e = r(U);
|
|
511
486
|
if (e === void 0) throw Error("useAuth must be used within an AuthProvider");
|
|
512
487
|
return e;
|
|
513
|
-
},
|
|
488
|
+
}, K = (e) => !e || e.length !== 9 ? e : `${e.slice(0, 3)}-${e.slice(3, 6)}-${e.slice(6, 9)}`, ae = (e) => e.replace(/-/g, ""), q = {
|
|
514
489
|
allyCodeDropdown: "_allyCodeDropdown_1m0tw_1",
|
|
515
490
|
select: "_select_1m0tw_8",
|
|
516
491
|
manageButton: "_manageButton_1m0tw_12",
|
|
@@ -523,9 +498,9 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
523
498
|
codeItem: "_codeItem_1m0tw_71",
|
|
524
499
|
doneButton: "_doneButton_1m0tw_88"
|
|
525
500
|
}, oe = ({ onAllyCodeSelected: e, className: t = "" }) => {
|
|
526
|
-
let { allyCodes: n, selectedAllyCode: r, selectAllyCode: i, removeAllyCode: o, addAllyCode: l, isLoadingAllyCodes: u } =
|
|
501
|
+
let { allyCodes: n, selectedAllyCode: r, selectAllyCode: i, removeAllyCode: o, addAllyCode: l, isLoadingAllyCodes: u } = G(), [d, f] = a(!1), [p, h] = a(""), [_, y] = a(""), [b, x] = a(""), [S, C] = a(!1), w = n.map((e) => ({
|
|
527
502
|
value: e.ally_code,
|
|
528
|
-
label: e.player_name ? `${e.player_name} (${
|
|
503
|
+
label: e.player_name ? `${e.player_name} (${K(e.ally_code)})` : K(e.ally_code)
|
|
529
504
|
})), T = (t) => {
|
|
530
505
|
let n = t.target.value || null;
|
|
531
506
|
i(n), e?.(n);
|
|
@@ -534,44 +509,44 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
534
509
|
t && await o("id" in t ? t.id : t.ally_code);
|
|
535
510
|
};
|
|
536
511
|
return n.length === 0 ? null : /* @__PURE__ */ c("div", {
|
|
537
|
-
className: `${
|
|
512
|
+
className: `${q.allyCodeDropdown} ${t}`,
|
|
538
513
|
children: [
|
|
539
|
-
/* @__PURE__ */ s(
|
|
514
|
+
/* @__PURE__ */ s(g, {
|
|
540
515
|
options: w,
|
|
541
516
|
value: r || "",
|
|
542
517
|
onChange: T,
|
|
543
518
|
placeholder: "Select ally code",
|
|
544
519
|
disabled: u,
|
|
545
|
-
className:
|
|
520
|
+
className: q.select
|
|
546
521
|
}),
|
|
547
522
|
d && /* @__PURE__ */ c("div", {
|
|
548
|
-
className:
|
|
523
|
+
className: q.managePanel,
|
|
549
524
|
children: [
|
|
550
525
|
/* @__PURE__ */ s("h4", { children: "Manage Ally Codes" }),
|
|
551
526
|
/* @__PURE__ */ c("div", {
|
|
552
|
-
className:
|
|
527
|
+
className: q.addSection,
|
|
553
528
|
children: [
|
|
554
529
|
/* @__PURE__ */ c("div", {
|
|
555
|
-
className:
|
|
530
|
+
className: q.addInputGroup,
|
|
556
531
|
children: [/* @__PURE__ */ s(v, {
|
|
557
532
|
type: "text",
|
|
558
533
|
placeholder: "9-digit ally code",
|
|
559
534
|
value: p,
|
|
560
|
-
onChange: (e) =>
|
|
535
|
+
onChange: (e) => h(e.target.value.replace(/\D/g, "").slice(0, 9)),
|
|
561
536
|
disabled: S
|
|
562
|
-
}), /* @__PURE__ */ s(
|
|
537
|
+
}), /* @__PURE__ */ s(m, {
|
|
563
538
|
variant: "primary",
|
|
564
539
|
size: "sm",
|
|
565
540
|
onClick: async () => {
|
|
566
|
-
if (
|
|
567
|
-
|
|
541
|
+
if (y(""), x(""), !/^\d{9}$/.test(p)) {
|
|
542
|
+
y("Ally code must be exactly 9 digits");
|
|
568
543
|
return;
|
|
569
544
|
}
|
|
570
545
|
C(!0);
|
|
571
546
|
try {
|
|
572
|
-
await l(p), x("Added successfully!"),
|
|
547
|
+
await l(p), x("Added successfully!"), h(""), setTimeout(() => x(""), 2e3);
|
|
573
548
|
} catch (e) {
|
|
574
|
-
|
|
549
|
+
y(e.message || "Failed to add ally code");
|
|
575
550
|
} finally {
|
|
576
551
|
C(!1);
|
|
577
552
|
}
|
|
@@ -581,21 +556,21 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
581
556
|
children: "Add"
|
|
582
557
|
})]
|
|
583
558
|
}),
|
|
584
|
-
|
|
585
|
-
className:
|
|
586
|
-
children:
|
|
559
|
+
_ && /* @__PURE__ */ s("div", {
|
|
560
|
+
className: q.error,
|
|
561
|
+
children: _
|
|
587
562
|
}),
|
|
588
|
-
|
|
589
|
-
className:
|
|
590
|
-
children:
|
|
563
|
+
b && /* @__PURE__ */ s("div", {
|
|
564
|
+
className: q.success,
|
|
565
|
+
children: b
|
|
591
566
|
})
|
|
592
567
|
]
|
|
593
568
|
}),
|
|
594
569
|
/* @__PURE__ */ s("div", {
|
|
595
|
-
className:
|
|
570
|
+
className: q.codesList,
|
|
596
571
|
children: n.map((e) => /* @__PURE__ */ c("div", {
|
|
597
|
-
className:
|
|
598
|
-
children: [/* @__PURE__ */ s("span", { children: e.player_name ? `${e.player_name} (${
|
|
572
|
+
className: q.codeItem,
|
|
573
|
+
children: [/* @__PURE__ */ s("span", { children: e.player_name ? `${e.player_name} (${K(e.ally_code)})` : K(e.ally_code) }), /* @__PURE__ */ s(m, {
|
|
599
574
|
variant: "ghost",
|
|
600
575
|
size: "sm",
|
|
601
576
|
onClick: () => E(e.ally_code),
|
|
@@ -603,36 +578,137 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
603
578
|
})]
|
|
604
579
|
}, e.ally_code))
|
|
605
580
|
}),
|
|
606
|
-
/* @__PURE__ */ s(
|
|
581
|
+
/* @__PURE__ */ s(m, {
|
|
607
582
|
variant: "secondary",
|
|
608
583
|
size: "sm",
|
|
609
584
|
onClick: () => f(!1),
|
|
610
|
-
className:
|
|
585
|
+
className: q.doneButton,
|
|
611
586
|
children: "Done"
|
|
612
587
|
})
|
|
613
588
|
]
|
|
614
589
|
}),
|
|
615
|
-
/* @__PURE__ */ s(
|
|
590
|
+
/* @__PURE__ */ s(m, {
|
|
616
591
|
variant: "ghost",
|
|
617
592
|
size: "sm",
|
|
618
593
|
onClick: () => f(!d),
|
|
619
|
-
className:
|
|
594
|
+
className: q.manageButton,
|
|
620
595
|
children: "Manage"
|
|
621
596
|
})
|
|
622
597
|
]
|
|
623
598
|
});
|
|
624
|
-
},
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
599
|
+
}, J = {
|
|
600
|
+
logoLink: "_logoLink_84pn2_3",
|
|
601
|
+
appNav: "_appNav_84pn2_9",
|
|
602
|
+
appName: "_appName_84pn2_15",
|
|
603
|
+
tabs: "_tabs_84pn2_29",
|
|
604
|
+
tab: "_tab_84pn2_29",
|
|
605
|
+
tabActive: "_tabActive_84pn2_56",
|
|
606
|
+
extrasGroup: "_extrasGroup_84pn2_64",
|
|
607
|
+
authCluster: "_authCluster_84pn2_70",
|
|
608
|
+
userLink: "_userLink_84pn2_76"
|
|
609
|
+
}, se = ({ hubUrl: t = "/", appName: n, appHref: r = "/", navItems: i, showAllyCode: a = !1, showAuth: l = !0, rightExtras: u, className: d }) => {
|
|
610
|
+
let { user: p, isAuthenticated: h, logout: g, authEnabled: _ } = G(), v = () => {
|
|
611
|
+
g(), window.location.href = t;
|
|
612
|
+
}, y = !!u || a, b = !!(i && i.length > 0), x = !!n || b, S = l ? h ? /* @__PURE__ */ c("div", {
|
|
613
|
+
className: J.authCluster,
|
|
614
|
+
children: [/* @__PURE__ */ s("a", {
|
|
615
|
+
href: "/profile",
|
|
616
|
+
className: J.userLink,
|
|
617
|
+
children: p?.username
|
|
618
|
+
}), /* @__PURE__ */ s(m, {
|
|
619
|
+
variant: "ghost",
|
|
620
|
+
size: "sm",
|
|
621
|
+
onClick: v,
|
|
622
|
+
children: "Logout"
|
|
623
|
+
})]
|
|
624
|
+
}) : _ ? /* @__PURE__ */ c("div", {
|
|
625
|
+
className: J.authCluster,
|
|
626
|
+
children: [/* @__PURE__ */ s("a", {
|
|
627
|
+
href: "/login",
|
|
628
|
+
children: /* @__PURE__ */ s(m, {
|
|
629
|
+
variant: "ghost",
|
|
630
|
+
size: "sm",
|
|
631
|
+
children: "Login"
|
|
632
|
+
})
|
|
633
|
+
}), /* @__PURE__ */ s("a", {
|
|
634
|
+
href: "/register",
|
|
635
|
+
children: /* @__PURE__ */ s(m, {
|
|
636
|
+
variant: "primary",
|
|
637
|
+
size: "sm",
|
|
638
|
+
children: "Sign Up"
|
|
639
|
+
})
|
|
640
|
+
})]
|
|
641
|
+
}) : null : null;
|
|
642
|
+
return /* @__PURE__ */ s(f, {
|
|
643
|
+
className: d,
|
|
644
|
+
logo: /* @__PURE__ */ s("a", {
|
|
645
|
+
href: t,
|
|
646
|
+
className: J.logoLink,
|
|
647
|
+
children: "The Astrogator's Table"
|
|
648
|
+
}),
|
|
649
|
+
leftContent: x ? /* @__PURE__ */ c("div", {
|
|
650
|
+
className: J.appNav,
|
|
651
|
+
children: [n && /* @__PURE__ */ s("a", {
|
|
652
|
+
href: r,
|
|
653
|
+
className: J.appName,
|
|
654
|
+
children: n
|
|
655
|
+
}), b && /* @__PURE__ */ s("nav", {
|
|
656
|
+
className: J.tabs,
|
|
657
|
+
children: i.map((t) => {
|
|
658
|
+
let n = `${J.tab} ${t.active ? J.tabActive : ""}`;
|
|
659
|
+
return t.render ? /* @__PURE__ */ s(e.Fragment, { children: t.render({
|
|
660
|
+
className: n,
|
|
661
|
+
children: t.label
|
|
662
|
+
}) }, t.href) : /* @__PURE__ */ s("a", {
|
|
663
|
+
href: t.href,
|
|
664
|
+
className: n,
|
|
665
|
+
children: t.label
|
|
666
|
+
}, t.href);
|
|
667
|
+
})
|
|
668
|
+
})]
|
|
669
|
+
}) : void 0,
|
|
670
|
+
rightContent: /* @__PURE__ */ c(o, { children: [y && /* @__PURE__ */ c("div", {
|
|
671
|
+
className: J.extrasGroup,
|
|
672
|
+
children: [u, a && /* @__PURE__ */ s(oe, {})]
|
|
673
|
+
}), S] })
|
|
674
|
+
});
|
|
675
|
+
}, Y = {
|
|
676
|
+
footer: "_footer_zjuj8_1",
|
|
677
|
+
content: "_content_zjuj8_7",
|
|
678
|
+
defaultContent: "_defaultContent_zjuj8_13",
|
|
679
|
+
copyright: "_copyright_zjuj8_21",
|
|
680
|
+
disclaimer: "_disclaimer_zjuj8_26"
|
|
681
|
+
}, ce = ({ children: e, className: t = "" }) => /* @__PURE__ */ s("footer", {
|
|
682
|
+
className: `${Y.footer} ${t}`,
|
|
683
|
+
children: /* @__PURE__ */ s("div", {
|
|
684
|
+
className: Y.content,
|
|
685
|
+
children: e || /* @__PURE__ */ c("div", {
|
|
686
|
+
className: Y.defaultContent,
|
|
687
|
+
children: [/* @__PURE__ */ c("p", {
|
|
688
|
+
className: Y.copyright,
|
|
689
|
+
children: [
|
|
690
|
+
"© ",
|
|
691
|
+
(/* @__PURE__ */ new Date()).getFullYear(),
|
|
692
|
+
" The Astrogator's Table. All rights reserved."
|
|
693
|
+
]
|
|
694
|
+
}), /* @__PURE__ */ s("p", {
|
|
695
|
+
className: Y.disclaimer,
|
|
696
|
+
children: "Star Wars: Galaxy of Heroes is a trademark of Electronic Arts Inc."
|
|
697
|
+
})]
|
|
698
|
+
})
|
|
699
|
+
})
|
|
700
|
+
}), X = {
|
|
701
|
+
card: "_card_nwtwa_1",
|
|
702
|
+
chamfered: "_chamfered_nwtwa_15",
|
|
703
|
+
default: "_default_nwtwa_20",
|
|
704
|
+
elevated: "_elevated_nwtwa_24",
|
|
705
|
+
outline: "_outline_nwtwa_29",
|
|
706
|
+
"padding-none": "_padding-none_nwtwa_35",
|
|
707
|
+
"padding-sm": "_padding-sm_nwtwa_39",
|
|
708
|
+
"padding-md": "_padding-md_nwtwa_43",
|
|
709
|
+
"padding-lg": "_padding-lg_nwtwa_47",
|
|
710
|
+
hoverable: "_hoverable_nwtwa_52"
|
|
711
|
+
}, le = ({ children: e, variant: t = "default", chamfered: n = !1, chamferSize: r = "md", padding: i = "md", hoverable: a = !1, showDiagonalBorders: l = !1, diagonalBorderColor: u, className: d = "", onClick: f, style: p }) => {
|
|
636
712
|
let m = n ? r === "asymmetric" ? "chamfered-box-asymmetric" : r === "sm" ? "chamfered-box-sm" : r === "lg" ? "chamfered-box-lg" : "chamfered-box" : "", h = l ? u : void 0, g = h ? { color: h } : void 0, _ = h ? {
|
|
637
713
|
...p,
|
|
638
714
|
"--card-edge-color": h
|
|
@@ -674,7 +750,7 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
674
750
|
warning: "_warning_rk7t5_47",
|
|
675
751
|
error: "_error_rk7t5_52",
|
|
676
752
|
info: "_info_rk7t5_57"
|
|
677
|
-
},
|
|
753
|
+
}, ue = ({ children: e, variant: t = "default", size: n = "md", className: r = "" }) => /* @__PURE__ */ s("span", {
|
|
678
754
|
className: `${Z.badge} ${Z[t]} ${Z[n]} ${r}`,
|
|
679
755
|
children: e
|
|
680
756
|
}), Q = {
|
|
@@ -690,7 +766,7 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
690
766
|
title: "_title_1b3yt_53",
|
|
691
767
|
closeButton: "_closeButton_1b3yt_60",
|
|
692
768
|
content: "_content_1b3yt_78"
|
|
693
|
-
},
|
|
769
|
+
}, de = ({ isOpen: e, onClose: t, title: n, children: r, size: a = "md", closeOnOverlayClick: o = !0, className: l = "" }) => (i(() => (e ? document.body.style.overflow = "hidden" : document.body.style.overflow = "unset", () => {
|
|
694
770
|
document.body.style.overflow = "unset";
|
|
695
771
|
}), [e]), i(() => {
|
|
696
772
|
let n = (n) => {
|
|
@@ -732,7 +808,7 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
732
808
|
dot: "_dot_1uhnh_34",
|
|
733
809
|
bounce: "_bounce_1uhnh_1",
|
|
734
810
|
visuallyHidden: "_visuallyHidden_1uhnh_91"
|
|
735
|
-
},
|
|
811
|
+
}, fe = ({ size: e = "md", variant: t = "spinner", className: n = "" }) => t === "dots" ? /* @__PURE__ */ c("div", {
|
|
736
812
|
className: `${$.dots} ${$[e]} ${n}`,
|
|
737
813
|
children: [
|
|
738
814
|
/* @__PURE__ */ s("span", { className: $.dot }),
|
|
@@ -748,4 +824,4 @@ var x = "astrogators_access_token", S = "astrogators_refresh_token", C = () => l
|
|
|
748
824
|
})
|
|
749
825
|
});
|
|
750
826
|
//#endregion
|
|
751
|
-
export { oe as AllyCodeDropdown,
|
|
827
|
+
export { oe as AllyCodeDropdown, F as ApiClient, W as AuthProvider, ue as Badge, m as Button, le as Card, u as Container, ce as Footer, v as Input, fe as Loader, de as Modal, se as NavBar, g as Select, f as TopBar, I as apiClient, P as authedFetch, H as clearAllyCodes, O as clearTokens, M as configureAuthRefresh, K as formatAllyCode, x as getAccessToken, z as getAllyCodesFromStorage, w as getRefreshToken, ie as getSelectedAllyCode, te as initializeApiClient, ee as isAuthenticated, N as refreshAccessToken, C as removeAccessToken, re as removeAllyCodeFromStorage, E as removeRefreshToken, ne as saveAllyCodeToStorage, S as setAccessToken, T as setRefreshToken, V as setSelectedAllyCode, D as setTokens, ae as unformatAllyCode, B as updateAllyCodeLastUsed, G as useAuth };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A single top-level section link in the NavBar tab strip.
|
|
4
|
+
*
|
|
5
|
+
* NavBar is intentionally router-agnostic: shared-ui takes no react-router
|
|
6
|
+
* dependency. The consumer decides whether a tab is `active` (e.g. from its own
|
|
7
|
+
* `useLocation`) and may supply `render` to inject a router `<Link>` for soft
|
|
8
|
+
* client-side navigation. Without `render`, the tab is a plain `<a href>`.
|
|
9
|
+
*/
|
|
10
|
+
export interface NavItem {
|
|
11
|
+
label: string;
|
|
12
|
+
href: string;
|
|
13
|
+
active?: boolean;
|
|
14
|
+
render?: (props: {
|
|
15
|
+
className: string;
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}) => React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
export interface NavBarProps {
|
|
20
|
+
/** Target for the ⟵ "The Astrogator's Table" logo — always the hub. Default '/'. */
|
|
21
|
+
hubUrl?: string;
|
|
22
|
+
/** This app's display name, e.g. "Mod Ledger". Omit on the hub (the logo is
|
|
23
|
+
* already the suite identity) for a logo-only left section. */
|
|
24
|
+
appName?: string;
|
|
25
|
+
/** Link target for the app name — the app's own root. Default '/'. */
|
|
26
|
+
appHref?: string;
|
|
27
|
+
/** Top-level section tabs. Omit (or empty) for apps with no sections. */
|
|
28
|
+
navItems?: NavItem[];
|
|
29
|
+
/** Render the shared AllyCodeDropdown in the right cluster. Default false. */
|
|
30
|
+
showAllyCode?: boolean;
|
|
31
|
+
/** Render the baked username/login/logout cluster. Default true. Set false for
|
|
32
|
+
* static pages (e.g. docs) that want no auth UI. */
|
|
33
|
+
showAuth?: boolean;
|
|
34
|
+
/** App-specific controls, rendered immediately left of the ally dropdown. */
|
|
35
|
+
rightExtras?: React.ReactNode;
|
|
36
|
+
className?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* NavBar — the opinionated, suite-wide top bar built on top of the dumb `TopBar`
|
|
40
|
+
* primitive. It bakes the blessed layout so every app's chrome is identical:
|
|
41
|
+
*
|
|
42
|
+
* [ logo → hub ] · [ appName ] [ section tabs ] ···· [ rightExtras ] [ ally ] [ auth cluster ]
|
|
43
|
+
*
|
|
44
|
+
* The username/profile/login/register/logout cluster is owned here (via useAuth);
|
|
45
|
+
* apps no longer hand-roll it. Auth links point at the hub origin as plain anchors
|
|
46
|
+
* because the auth UI lives in the hub and everything is served single-origin.
|
|
47
|
+
*/
|
|
48
|
+
export declare const NavBar: React.FC<NavBarProps>;
|
|
@@ -2,5 +2,7 @@ export { Container } from './Container';
|
|
|
2
2
|
export type { ContainerProps } from './Container';
|
|
3
3
|
export { TopBar } from './TopBar';
|
|
4
4
|
export type { TopBarProps } from './TopBar';
|
|
5
|
+
export { NavBar } from './NavBar';
|
|
6
|
+
export type { NavBarProps, NavItem } from './NavBar';
|
|
5
7
|
export { Footer } from './Footer';
|
|
6
8
|
export type { FooterProps } from './Footer';
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { Container, TopBar, Footer } from './components/layout';
|
|
2
|
-
export type { ContainerProps, TopBarProps, FooterProps } from './components/layout';
|
|
1
|
+
export { Container, TopBar, NavBar, Footer } from './components/layout';
|
|
2
|
+
export type { ContainerProps, TopBarProps, NavBarProps, NavItem, FooterProps } from './components/layout';
|
|
3
3
|
export { Button, Input, Select, AllyCodeDropdown } from './components/forms';
|
|
4
4
|
export type { ButtonProps, InputProps, SelectProps, SelectOption, AllyCodeDropdownProps } from './components/forms';
|
|
5
5
|
export { Card, Badge, Modal } from './components/display';
|