@dcl-regenesislabs/mobile-hub 1.0.2-23717828674.commit-8d84b10 → 1.0.2
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/assets/{basic-JkI4z_cB.js → basic-BHuY3yFK.js} +1 -1
- package/assets/{core-DM41dI09.js → core-B6lNkxYF.js} +4 -4
- package/assets/{features-BFwE10hs.js → features-B7XGYoAm.js} +1 -1
- package/assets/{fortmatic-DxcoaSjn.js → fortmatic-CvPfg2Ht.js} +1 -1
- package/assets/index-47xbhgOb.js +25 -0
- package/assets/{index-B7gYbncy.js → index-Bfg5uOQZ.js} +1 -1
- package/assets/{index-DLiZFsIi.js → index-Bm8hrbQ6.js} +1 -1
- package/assets/{index-DJehiP7F.js → index-BoYbIA9m.js} +3 -3
- package/assets/{index-BIFwOW28.css → index-C9XT7rH5.css} +1 -1
- package/assets/{index-0Zyr8vlL.js → index-Db7sy-a4.js} +1 -1
- package/assets/{w3m-modal-Cg30hkW2.js → w3m-modal-D0jVyMYr.js} +1 -1
- package/index.html +3 -3
- package/package.json +3 -3
- package/assets/index-C5knDh0m.js +0 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;line-height:1.5;font-weight:400;color-scheme:dark;color:#ffffffde;background-color:#1a1a1a;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden}body{margin:0}.navbar-container{position:fixed;top:16px;left:16px;right:16px;z-index:50;display:flex;justify-content:space-between;pointer-events:none}.navbar-bar{pointer-events:auto;display:flex;align-items:center;gap:8px;padding:4px;background:#1c1c20f2;border-radius:12px;box-shadow:0 4px 12px #0000004d}.navbar-user-bar{position:relative}.navbar-spacer{flex:1;min-width:16px}.navbar-button{display:flex;align-items:center;gap:8px;padding:10px 16px;border:none;border-radius:8px;background:transparent;color:#ffffffb3;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap}.navbar-button:hover{background:#ffffff1a;color:#ffffffe6}.navbar-button:active{background:#ffffff26}.navbar-button:disabled{opacity:.5;cursor:not-allowed}.navbar-button-icon{font-size:16px}.navbar-avatar-button{padding:4px;border:none;border-radius:8px;background:transparent;cursor:pointer;transition:all .2s ease}.navbar-avatar-button:hover{background:#ffffff1a}.navbar-avatar-button:active{background:#ffffff26}.navbar-avatar{width:32px;height:32px;border-radius:8px;object-fit:cover;display:block}.navbar-avatar-placeholder{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:12px;font-weight:600}.navbar-backdrop{position:fixed;inset:0;z-index:-1}.navbar-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:160px;background:#1c1c20f2;border-radius:12px;box-shadow:0 4px 12px #0000004d;overflow:hidden}.navbar-menu-address{padding:12px 16px;color:#ffffff80;font-size:12px;border-bottom:1px solid rgba(255,255,255,.1)}.navbar-menu-item{display:block;width:100%;padding:12px 16px;border:none;background:transparent;color:#ffffffb3;font-size:14px;text-align:left;cursor:pointer;transition:all .2s ease}.navbar-menu-item:hover{background:#ffffff1a;color:#ffffffe6}.navbar-menu-item:active{background:#ffffff26}.navbar-dev-badge{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#ffc10733;border:1px solid rgba(255,193,7,.5);border-radius:8px;color:#ffc107;font-size:12px;font-weight:600}.navbar-dev-address{color:#fff9;font-weight:400;font-family:monospace}.app-tabs{display:flex;gap:2px;padding:4px;background:#ffffff0d;border-radius:8px}.app-tab{padding:8px 16px;border:none;border-radius:6px;background:transparent;color:#ffffff80;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.app-tab:hover{color:#fffc;background:#ffffff0d}.app-tab-active{background:#00d9ff26;color:#00d9ff}.app-tab-active:hover{background:#00d9ff33;color:#00d9ff}._mapView_ojr5v_1{position:fixed;top:0;left:0;width:100vw;height:100vh;overflow:hidden;background-color:#1a1a1a}._controls_ojr5v_11{position:absolute;bottom:24px;right:24px;display:flex;flex-direction:column;gap:8px;z-index:10}._controlButton_ojr5v_21{width:40px;height:40px;border-radius:8px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;font-size:20px;font-weight:700;cursor:pointer;transition:background .2s;display:flex;align-items:center;justify-content:center}._controlButton_ojr5v_21:hover{background:#fff3}._controlButton_ojr5v_21:active{background:#ffffff4d}._coordinateDisplay_ojr5v_45{position:absolute;bottom:24px;left:88px;padding:8px 16px;background:#000000b3;border-radius:4px;color:#fff;font-family:SF Mono,Monaco,Consolas,monospace;font-size:14px;font-weight:500;z-index:10;-webkit-user-select:none;user-select:none}._sidebar_d9ig0_1{position:fixed;top:0;right:0;height:100vh;width:320px;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;transition:transform .3s ease;z-index:9999}._sidebarCollapsed_d9ig0_15{transform:translate(100%)}._toggleButton_d9ig0_19{position:absolute;left:-40px;top:50%;transform:translateY(-50%);width:40px;height:80px;background:#1c1c20f2;border:1px solid rgba(255,255,255,.1);border-right:none;border-radius:8px 0 0 8px;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px}._toggleButton_d9ig0_19:hover{background:#323237f2}._header_d9ig0_42{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._headerTitle_d9ig0_50{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._closeButton_d9ig0_57{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_d9ig0_57:hover{background:#ffffff26;color:#ffffffe6}._content_d9ig0_77{flex:1;overflow-y:auto;padding:16px}._footer_d9ig0_83{padding:16px;border-top:1px solid rgba(255,255,255,.1);display:flex;gap:8px}._button_d9ig0_90{flex:1;padding:10px 16px;border:none;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s}._buttonPrimary_d9ig0_101{background:#00d9ff;color:#000}._buttonPrimary_d9ig0_101:hover{background:#00c4e8}._buttonPrimary_d9ig0_101:disabled{background:#00d9ff4d;cursor:not-allowed}._buttonSecondary_d9ig0_115{background:#ffffff1a;color:#fff}._buttonSecondary_d9ig0_115:hover{background:#ffffff26}._buttonDanger_d9ig0_124{background:#ff6b6b33;color:#ff6b6b}._buttonDanger_d9ig0_124:hover{background:#ff6b6b4d}._groupCard_d9ig0_134{background:#ffffff0d;border-radius:8px;padding:12px;margin-bottom:12px;cursor:pointer;transition:background .2s}._groupCard_d9ig0_134:hover{background:#ffffff14}._groupCardHeader_d9ig0_147{display:flex;align-items:center;gap:10px;margin-bottom:8px}._groupColorDot_d9ig0_154{width:12px;height:12px;border-radius:50%;flex-shrink:0}._groupName_d9ig0_161{flex:1;font-size:14px;font-weight:500;color:#fff;margin:0}._groupMeta_d9ig0_169{font-size:12px;color:#ffffff80;margin-bottom:8px}._groupTags_d9ig0_175{display:flex;flex-wrap:wrap;gap:4px}._tag_d9ig0_181{background:#ffffff1a;color:#ffffffb3;padding:2px 8px;border-radius:12px;font-size:11px}._groupActions_d9ig0_189{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}._actionButton_d9ig0_197{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;background:#ffffff1a;color:#fff}._actionButton_d9ig0_197:hover{background:#ffffff26}._actionButtonBan_d9ig0_211{background:#f443;color:#f44}._actionButtonBan_d9ig0_211:hover{background:#ff44444d}._actionButtonUnban_d9ig0_220{background:#4caf5033;color:#4caf50}._actionButtonUnban_d9ig0_220:hover{background:#4caf504d}._groupCardBanned_d9ig0_230{border:1px solid rgba(255,68,68,.3);background:#ff44440d}._groupCardBanned_d9ig0_230:hover{background:#ff44441a}._bannedBadge_d9ig0_239{display:inline-block;margin-left:8px;padding:2px 6px;background:#f443;color:#f44;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase}._typeBadge_d9ig0_252{display:inline-block;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;flex-shrink:0}._typeBadgeScene_d9ig0_262{background:#6366f133;color:#818cf8}._typeBadgeWorld_d9ig0_267{background:#22c55e33;color:#4ade80}._form_d9ig0_273{display:flex;flex-direction:column;gap:16px}._formGroup_d9ig0_279{display:flex;flex-direction:column;gap:6px}._label_d9ig0_285{font-size:12px;font-weight:500;color:#ffffffb3}._input_d9ig0_291{padding:10px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;color:#fff;font-size:14px}._input_d9ig0_291:focus{outline:none;border-color:#00d9ff}._textarea_d9ig0_305{resize:vertical;min-height:80px}._colorPicker_d9ig0_310{display:flex;flex-wrap:wrap;gap:8px}._colorOption_d9ig0_316{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .2s}._colorOption_d9ig0_316:hover{transform:scale(1.1)}._colorOptionSelected_d9ig0_329{border-color:#fff}._colorOptionDisabled_d9ig0_333{opacity:.3;cursor:not-allowed}._colorOptionDisabled_d9ig0_333:hover{transform:none}._tagsInput_d9ig0_342{display:flex;flex-wrap:wrap;gap:6px;padding:8px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;min-height:40px}._tagInForm_d9ig0_353{display:flex;align-items:center;gap:4px;background:#00d9ff33;color:#00d9ff;padding:4px 8px;border-radius:12px;font-size:12px}._tagRemove_d9ig0_364{background:none;border:none;color:inherit;cursor:pointer;padding:0;font-size:14px;line-height:1}._tagInput_d9ig0_374{border:none;background:transparent;color:#fff;font-size:14px;flex:1;min-width:100px}._tagInput_d9ig0_374:focus{outline:none}._emptyState_d9ig0_388{text-align:center;padding:32px 16px;color:#ffffff80}._emptyStateIcon_d9ig0_394{font-size:48px;margin-bottom:16px;opacity:.5}._emptyStateText_d9ig0_400{font-size:14px;margin:0}._selectionInfo_d9ig0_406{background:#00d9ff1a;border:1px solid rgba(0,217,255,.3);border-radius:6px;padding:12px;margin-bottom:16px}._selectionInfoText_d9ig0_414{font-size:13px;color:#00d9ff;margin:0}._errorMessage_d9ig0_421{background:#ff6b6b1a;border:1px solid rgba(255,107,107,.3);border-radius:6px;padding:12px;color:#ff6b6b;font-size:13px;margin-bottom:16px}._buttonSecondary_d9ig0_115:disabled{opacity:.5;cursor:not-allowed}._searchInput_d9ig0_437{width:100%;padding:10px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;color:#fff;font-size:14px;margin-bottom:16px;box-sizing:border-box}._searchInput_d9ig0_437:focus{outline:none;border-color:#00d9ff}._searchInput_d9ig0_437::placeholder{color:#fff6}._sidebar_fxxme_1{position:fixed;top:0;right:0;height:100vh;width:320px;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;transition:transform .3s ease;z-index:9999}._sidebarCollapsed_fxxme_15{transform:translate(100%)}._header_fxxme_19{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._headerTitle_fxxme_27{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._closeButton_fxxme_34{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_fxxme_34:hover{background:#ffffff26;color:#ffffffe6}._content_fxxme_54{flex:1;overflow-y:auto;padding:16px}._banCard_fxxme_60{background:#ffffff0d;border-radius:8px;padding:12px;margin-bottom:12px;cursor:pointer;transition:background .2s}._banCard_fxxme_60:hover{background:#ffffff14}._banCardHeader_fxxme_73{display:flex;align-items:center;gap:10px;margin-bottom:8px}._banIcon_fxxme_80{width:12px;height:12px;border-radius:50%;background:#f44;flex-shrink:0}._banTitle_fxxme_88{flex:1;font-size:14px;font-weight:500;color:#fff;margin:0}._banType_fxxme_96{display:inline-block;padding:2px 6px;background:#ffffff1a;color:#ffffffb3;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase}._banMeta_fxxme_107{font-size:12px;color:#ffffff80;margin-bottom:4px}._banReason_fxxme_113{font-size:12px;color:#ffffff80;font-style:italic;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}._redeployWarning_fxxme_122{font-size:12px;color:orange;margin-top:8px;padding:6px 8px;background:#ffa5001a;border-radius:4px}._banActions_fxxme_131{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}._actionButton_fxxme_139{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;background:#ffffff1a;color:#fff;transition:background .2s}._actionButton_fxxme_139:hover{background:#ffffff26}._emptyState_fxxme_154{text-align:center;padding:32px 16px;color:#ffffff80}._emptyStateIcon_fxxme_160{font-size:48px;margin-bottom:16px;opacity:.5}._emptyStateText_fxxme_166{font-size:14px;margin:0}._loadingState_fxxme_171{text-align:center;padding:32px 16px;color:#ffffff80}._errorState_fxxme_177{background:#ff6b6b1a;border:1px solid rgba(255,107,107,.3);border-radius:6px;padding:12px;color:#ff6b6b;font-size:13px}._fabContainer_1ntje_1{position:absolute;bottom:24px;left:24px;display:flex;flex-direction:column;gap:12px;z-index:50}._fab_1ntje_1{width:48px;height:48px;border-radius:12px;border:none;background:#1c1c20f2;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000004d;transition:all .2s ease;position:relative}._fab_1ntje_1:hover{background:#323237f2;transform:scale(1.05)}._fab_1ntje_1:active{transform:scale(.95)}._fab_1ntje_1:disabled{background:#1c1c2099;color:#fff6;cursor:not-allowed;box-shadow:none}._fab_1ntje_1:disabled:hover{transform:none}._badge_1ntje_47{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#00d9ff;color:#1a1a1a;font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center}._badgeBanned_1ntje_64{background:#f44;color:#fff}._fabBanned_1ntje_69{border:1px solid rgba(255,68,68,.3)}._fabBanned_1ntje_69:hover{background:#f443}._fabSmall_1ntje_77{width:36px;height:36px;border-radius:8px}._fabInactive_1ntje_83{opacity:.5;background:#1c1c20b3}._fabInactive_1ntje_83:hover{opacity:.8}._container_1n3e6_1{display:flex;align-items:center;gap:12px;padding:16px 24px;background:#ffffff05;border-bottom:1px solid rgba(255,255,255,.1);flex-wrap:wrap}._label_1n3e6_11{font-size:13px;font-weight:500;color:#fff9;white-space:nowrap}._tags_1n3e6_18{display:flex;flex-wrap:wrap;gap:8px;flex:1}._tag_1n3e6_18{padding:6px 12px;border:1px solid rgba(255,255,255,.15);border-radius:16px;background:transparent;color:#ffffffb3;font-size:13px;cursor:pointer;transition:all .2s ease}._tag_1n3e6_18:hover{border-color:#ffffff4d;background:#ffffff0d}._tagSelected_1n3e6_41{border-color:#00d9ff;background:#00d9ff26;color:#00d9ff}._tagSelected_1n3e6_41:hover{border-color:#00d9ff;background:#00d9ff40}._tagSuggested_1n3e6_52{border-style:dashed}._tagSuggested_1n3e6_52._tagSelected_1n3e6_41{border-style:solid}._noTags_1n3e6_60{font-size:13px;color:#fff6;font-style:italic}._clearButton_1n3e6_66{padding:6px 12px;border:none;border-radius:4px;background:#ff6b6b26;color:#ff6b6b;font-size:12px;cursor:pointer;transition:background .2s ease;white-space:nowrap}._clearButton_1n3e6_66:hover{background:#ff6b6b40}._searchInput_1n3e6_83{padding:8px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;color:#fff;font-size:14px;min-width:180px}._searchInput_1n3e6_83:focus{outline:none;border-color:#00d9ff}._searchInput_1n3e6_83::placeholder{color:#fff6}._card_1hn5i_1{background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:16px;cursor:pointer;transition:all .2s ease}._card_1hn5i_1:hover{background:#ffffff0f;border-color:#ffffff26;transform:translateY(-2px)}._header_1hn5i_16{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}._colorDot_1hn5i_23{width:12px;height:12px;border-radius:50%;flex-shrink:0}._typeBadge_1hn5i_30{padding:4px 8px;border-radius:4px;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}._typeBadge_1hn5i_30[data-type=world]{background:#9370db33;color:#9370db}._typeBadge_1hn5i_30[data-type=scene]{background:#00d9ff33;color:#00d9ff}._typeBadge_1hn5i_30[data-type=group]{background:#ffa50033;color:orange}._name_1hn5i_54{margin:0 0 8px;font-size:16px;font-weight:600;color:#fffffff2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._description_1hn5i_64{margin:0 0 12px;font-size:13px;color:#fff9;line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}._meta_1hn5i_75{margin-bottom:12px;font-size:12px;color:#ffffff80}._worldName_1hn5i_81{font-family:monospace;background:#ffffff0d;padding:2px 6px;border-radius:4px}._parcels_1hn5i_88{display:flex;align-items:center;gap:6px}._parcelCount_1hn5i_94{color:#fff6}._tags_1hn5i_98{display:flex;flex-wrap:wrap;gap:6px}._tag_1hn5i_98{padding:4px 8px;background:#00d9ff1a;border-radius:12px;font-size:11px;color:#00d9ff}._banned_1hn5i_112{border-color:#ff44444d;background:#ff44440d}._banned_1hn5i_112:hover{border-color:#f446;background:#ff444414}._bannedBadge_1hn5i_122{padding:4px 8px;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#f443;color:#ff6b6b}._groupName_1hn5i_133{margin-bottom:8px;font-size:12px;color:#fff9}._groupLabel_1hn5i_139{color:#fff6}._container_15cky_1{flex:1;overflow-y:auto;padding:24px}._loading_15cky_7{padding:48px;text-align:center;font-size:14px;color:#ffffff80}._empty_15cky_14{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:64px 24px;text-align:center}._emptyIcon_15cky_23{font-size:48px;margin-bottom:16px;opacity:.5}._emptyTitle_15cky_29{font-size:18px;font-weight:500;color:#ffffffb3;margin-bottom:8px}._emptyText_15cky_36{font-size:14px;color:#fff6}._stats_15cky_41{display:flex;align-items:center;gap:16px;margin-bottom:16px;font-size:13px;color:#ffffff80}._stat_15cky_41{padding:2px 8px;background:#ffffff0d;border-radius:4px}._statBanned_15cky_56{padding:2px 8px;background:#ff444426;border-radius:4px;color:#ff6b6b}._grid_15cky_63{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}._page_ekuzr_1{position:fixed;inset:0;display:flex;flex-direction:column;background:#121216;padding-top:80px;overflow:hidden}._exportButton_ekuzr_11{padding:6px 12px;font-size:12px;font-weight:500;color:#fff;background:#6366f1;border:none;border-radius:4px;cursor:pointer;white-space:nowrap;transition:background .2s,opacity .2s;margin-left:auto}._exportButton_ekuzr_11:hover:not(:disabled){background:#5558e8}._exportButton_ekuzr_11:disabled{opacity:.6;cursor:not-allowed}._loading_ekuzr_34,._error_ekuzr_35{padding:48px;text-align:center;font-size:14px;color:#ffffff80}._error_ekuzr_35{color:#ff6b6b}._container_1ycct_1{position:relative}._tagsContainer_1ycct_5{display:flex;flex-wrap:wrap;gap:6px;padding:8px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;min-height:40px}._tag_1ycct_5{display:flex;align-items:center;gap:4px;background:#00d9ff33;color:#00d9ff;padding:4px 8px;border-radius:12px;font-size:12px}._tagRemove_1ycct_27{background:none;border:none;color:inherit;cursor:pointer;padding:0;font-size:14px;line-height:1;opacity:.7}._tagRemove_1ycct_27:hover{opacity:1}._input_1ycct_42{border:none;background:transparent;color:#fff;font-size:14px;flex:1;min-width:100px;outline:none}._input_1ycct_42::placeholder{color:#fff6}._suggestions_1ycct_56{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#26262a;border:1px solid rgba(255,255,255,.15);border-radius:6px;overflow:hidden;z-index:10;box-shadow:0 4px 12px #0000004d}._suggestion_1ycct_56{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 12px;border:none;background:transparent;color:#ffffffe6;font-size:13px;text-align:left;cursor:pointer;transition:background .15s ease}._suggestion_1ycct_56:hover{background:#ffffff1a}._suggestion_1ycct_56+._suggestion_1ycct_56{border-top:1px solid rgba(255,255,255,.05)}._suggestedBadge_1ycct_93{font-size:10px;padding:2px 6px;background:#00d9ff26;color:#00d9ff;border-radius:4px;text-transform:uppercase}._sidebar_2f8qp_1{position:fixed;top:0;right:0;width:320px;height:100vh;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;z-index:9999;animation:_slideIn_2f8qp_1 .2s ease-out}@keyframes _slideIn_2f8qp_1{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}._header_2f8qp_26{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._title_2f8qp_34{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._typeBadge_2f8qp_41{font-size:12px;padding:2px 8px;border-radius:4px;margin-left:8px;font-weight:500}._typeBadgeScene_2f8qp_49{background:#6366f133;color:#818cf8}._typeBadgeWorld_2f8qp_54{background:#22c55e33;color:#4ade80}._closeButton_2f8qp_59{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_2f8qp_59:hover{background:#ffffff26;color:#ffffffe6}._content_2f8qp_79{flex:1;overflow-y:auto;padding:16px}._loading_2f8qp_85,._error_2f8qp_86{padding:24px;text-align:center;color:#ffffff80;font-size:14px}._error_2f8qp_86{color:#ff6b6b}._thumbnailContainer_2f8qp_97{margin-bottom:16px;border-radius:8px;overflow:hidden;background:#ffffff0d}._thumbnail_2f8qp_97{width:100%;height:auto;display:block}._field_2f8qp_110{margin-bottom:16px}._label_2f8qp_114{display:block;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:#fff6;margin-bottom:4px}._value_2f8qp_124{font-size:14px;color:#ffffffe6}._valueSmall_2f8qp_129{font-size:13px;color:#ffffffb3;line-height:1.4}._parcelCount_2f8qp_135{margin-left:8px;color:#ffffff80;font-size:12px}._tags_2f8qp_141{display:flex;flex-wrap:wrap;gap:6px}._tag_2f8qp_141{padding:4px 8px;background:#ffffff1a;border-radius:4px;font-size:12px;color:#ffffffb3}._curationTag_2f8qp_155{padding:4px 8px;background:#00d9ff26;border-radius:4px;font-size:12px;color:#00d9ff}._groupBadge_2f8qp_163{display:inline-block;padding:6px 12px;border-radius:6px;font-size:13px;font-weight:500;color:#000c;border:none;cursor:pointer;transition:all .2s ease}._groupBadge_2f8qp_163:hover{filter:brightness(1.1);transform:translateY(-1px);box-shadow:0 2px 8px #0000004d}._groupBadge_2f8qp_163:active{transform:translateY(0)}._footer_2f8qp_185{padding:16px;border-top:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:8px}._banButton_2f8qp_193{width:100%;padding:12px 16px;border:none;border-radius:8px;background:#f44;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}._banButton_2f8qp_193:hover:not(:disabled){background:#f55}._banButton_2f8qp_193:active:not(:disabled){background:#e33}._banButton_2f8qp_193:disabled{opacity:.6;cursor:not-allowed}._banButton_2f8qp_193._banned_2f8qp_219{background:#ffffff1a;color:#ffffffb3;border:1px solid rgba(255,255,255,.2)}._banButton_2f8qp_193._banned_2f8qp_219:hover:not(:disabled){background:#ffffff26;color:#ffffffe6}._banInfo_2f8qp_230{margin-top:16px;padding:12px;background:#ff44441a;border:1px solid rgba(255,68,68,.2);border-radius:8px}._banInfoHeader_2f8qp_238{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#ff6b6b;margin-bottom:12px}._banInfo_2f8qp_230 ._field_2f8qp_110{margin-bottom:10px}._banInfo_2f8qp_230 ._field_2f8qp_110:last-child{margin-bottom:0}._redeployWarning_2f8qp_255{margin-top:16px;padding:12px;background:#ffa5001a;border:1px solid rgba(255,165,0,.2);border-radius:8px}._redeployWarningHeader_2f8qp_263{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:orange;margin-bottom:8px}._redeployWarningText_2f8qp_272{font-size:12px;color:#ffffffb3;line-height:1.4}._editTagsButton_2f8qp_279{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#00d9ff26;color:#00d9ff;font-size:10px;cursor:pointer;transition:background .2s ease}._editTagsButton_2f8qp_279:hover{background:#00d9ff40}._tagEditorContainer_2f8qp_295{display:flex;flex-direction:column;gap:8px}._tagEditorActions_2f8qp_301{display:flex;gap:8px;justify-content:flex-end}._tagEditorCancel_2f8qp_307,._tagEditorSave_2f8qp_308{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}._tagEditorCancel_2f8qp_307{background:#ffffff1a;color:#ffffffb3}._tagEditorCancel_2f8qp_307:hover:not(:disabled){background:#ffffff26}._tagEditorSave_2f8qp_308{background:#00d9ff;color:#000}._tagEditorSave_2f8qp_308:hover:not(:disabled){background:#00c4e8}._tagEditorCancel_2f8qp_307:disabled,._tagEditorSave_2f8qp_308:disabled{opacity:.5;cursor:not-allowed}._noTags_2f8qp_341{font-size:12px;color:#fff6;font-style:italic}._statusActive_2f8qp_347{color:#4ade80;font-weight:500}._statusBanned_2f8qp_352{color:#ff6b6b;font-weight:500}._banButtonSmall_2f8qp_358{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#ff444426;color:#ff6b6b;font-size:10px;cursor:pointer;transition:background .2s ease}._banButtonSmall_2f8qp_358:hover:not(:disabled){background:#ff444440}._banButtonSmall_2f8qp_358:disabled{opacity:.5;cursor:not-allowed}._unbanButton_2f8qp_379{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#4ade8026;color:#4ade80;font-size:10px;cursor:pointer;transition:background .2s ease}._unbanButton_2f8qp_379:hover:not(:disabled){background:#4ade8040}._unbanButton_2f8qp_379:disabled{opacity:.5;cursor:not-allowed}._removeGroupButton_2f8qp_400{width:100%;padding:10px 16px;border:1px solid rgba(255,255,255,.15);border-radius:8px;background:transparent;color:#fff9;font-size:13px;cursor:pointer;transition:all .2s ease}._removeGroupButton_2f8qp_400:hover{background:#ffffff0d;color:#fffc;border-color:#ffffff40}._groupSelector_2f8qp_419{display:flex;flex-direction:column;gap:4px}._groupOption_2f8qp_425{display:flex;align-items:center;gap:8px;padding:8px 12px;border:none;border-left:3px solid;border-radius:4px;background:#ffffff0d;color:#ffffffe6;font-size:13px;cursor:pointer;transition:all .2s ease;text-align:left}._groupOption_2f8qp_425:hover:not(:disabled){background:#ffffff1a}._groupOption_2f8qp_425:disabled{opacity:.5;cursor:not-allowed}._groupOptionColor_2f8qp_450{width:12px;height:12px;border-radius:3px;flex-shrink:0}._groupOptionCreate_2f8qp_457{display:flex;align-items:center;justify-content:center;padding:8px 12px;border:1px dashed rgba(0,217,255,.4);border-radius:4px;background:#00d9ff0d;color:#00d9ff;font-size:13px;cursor:pointer;transition:all .2s ease}._groupOptionCreate_2f8qp_457:hover:not(:disabled){background:#00d9ff1a;border-color:#00d9ff99}._groupOptionCreate_2f8qp_457:disabled{opacity:.5;cursor:not-allowed}._groupCreator_2f8qp_482{display:flex;flex-direction:column;gap:10px}._groupNameInput_2f8qp_488{width:100%;padding:8px 12px;border:1px solid rgba(255,255,255,.2);border-radius:4px;background:#ffffff0d;color:#ffffffe6;font-size:13px;outline:none;transition:border-color .2s ease}._groupNameInput_2f8qp_488:focus{border-color:#00d9ff80}._groupNameInput_2f8qp_488::placeholder{color:#fff6}._colorPicker_2f8qp_508{display:flex;flex-wrap:wrap;gap:6px}._colorOption_2f8qp_514{width:24px;height:24px;border:2px solid transparent;border-radius:4px;cursor:pointer;transition:all .2s ease}._colorOption_2f8qp_514:hover:not(:disabled){transform:scale(1.1)}._colorOptionSelected_2f8qp_527{border-color:#fff;box-shadow:0 0 0 2px #0000004d}._colorOption_2f8qp_514:disabled{opacity:.5;cursor:not-allowed}._groupCreatorActions_2f8qp_537{display:flex;gap:8px;justify-content:flex-end}._groupOptionCancel_2f8qp_543{padding:6px 12px;border:none;border-radius:4px;background:#ffffff1a;color:#fff9;font-size:12px;cursor:pointer;transition:all .2s ease;margin-top:4px}._groupOptionCancel_2f8qp_543:hover:not(:disabled){background:#ffffff26;color:#fffc}._groupOptionCancel_2f8qp_543:disabled{opacity:.5;cursor:not-allowed}._bannedSection_2f8qp_566{margin-top:8px;padding:12px;background:#ff444414;border:1px solid rgba(255,68,68,.15);border-radius:8px}._bannedHeader_2f8qp_574{display:flex;align-items:center;gap:8px}._bannedBadge_2f8qp_580{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:3px 8px;background:#ff444426;color:#ff6b6b;border-radius:4px}._unbanLink_2f8qp_591{font-size:11px;color:#ffffff80;background:none;border:none;cursor:pointer;padding:0;text-decoration:underline;transition:color .2s ease}._unbanLink_2f8qp_591:hover:not(:disabled){color:#fffc}._unbanLink_2f8qp_591:disabled{opacity:.5;cursor:not-allowed}._banDetails_2f8qp_611{margin-top:10px}._banReason_2f8qp_615{font-size:12px;color:#fff9;font-style:italic;margin-bottom:6px}._banMeta_2f8qp_622{font-size:11px;color:#fff6}._footerLink_2f8qp_628{background:none;border:none;padding:0;font-size:12px;color:#ffffff80;cursor:pointer;text-decoration:underline;transition:color .2s ease}._footerLink_2f8qp_628:hover{color:#fffc}._footerLinkDanger_2f8qp_643{background:none;border:none;padding:0;font-size:12px;color:#f449;cursor:pointer;text-decoration:underline;transition:color .2s ease}._footerLinkDanger_2f8qp_643:hover:not(:disabled){color:#ff6b6b}._footerLinkDanger_2f8qp_643:disabled{opacity:.5;cursor:not-allowed}._sidebar_d1npc_1{position:fixed;top:0;right:0;width:320px;height:100vh;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;z-index:9999;animation:_slideIn_d1npc_1 .2s ease-out}@keyframes _slideIn_d1npc_1{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}._header_d1npc_26{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._title_d1npc_34{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._closeButton_d1npc_41{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_d1npc_41:hover{background:#ffffff26;color:#ffffffe6}._content_d1npc_61{flex:1;overflow-y:auto;padding:16px}._thumbnailContainer_d1npc_67{margin-bottom:16px;border-radius:8px;overflow:hidden;background:#ffffff0d}._thumbnail_d1npc_67{width:100%;height:auto;display:block}._field_d1npc_80{margin-bottom:16px}._label_d1npc_84{display:block;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:#fff6;margin-bottom:4px}._value_d1npc_94{font-size:14px;color:#ffffffe6}._valueSmall_d1npc_99{font-size:13px;color:#ffffffb3;line-height:1.4;word-break:break-all}._tags_d1npc_106{display:flex;flex-wrap:wrap;gap:6px}._tag_d1npc_106{padding:4px 8px;background:#ffffff1a;border-radius:4px;font-size:12px;color:#ffffffb3}._statusActive_d1npc_120{display:inline-block;padding:4px 10px;background:#4caf5033;color:#4caf50;border-radius:4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}._statusBanned_d1npc_132{display:inline-block;padding:4px 10px;background:#f443;color:#f44;border-radius:4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}._redeployWarning_d1npc_144{margin-top:16px;padding:12px;background:#ffc10726;border:1px solid rgba(255,193,7,.3);border-radius:8px}._redeployWarningHeader_d1npc_152{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#ffc107;margin-bottom:8px}._redeployWarningText_d1npc_161{font-size:13px;color:#ffffffb3;line-height:1.4}._banInfo_d1npc_167{margin-top:16px;padding:12px;background:#ff44441a;border:1px solid rgba(255,68,68,.2);border-radius:8px}._banInfoHeader_d1npc_175{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#ff6b6b;margin-bottom:12px}._banInfo_d1npc_167 ._field_d1npc_80{margin-bottom:10px}._banInfo_d1npc_167 ._field_d1npc_80:last-child{margin-bottom:0}._footer_d1npc_192{padding:16px;border-top:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:8px}._banButton_d1npc_200{width:100%;padding:12px 16px;border:none;border-radius:8px;background:#f44;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}._banButton_d1npc_200:hover:not(:disabled){background:#f55}._banButton_d1npc_200:active:not(:disabled){background:#e33}._banButton_d1npc_200:disabled{opacity:.6;cursor:not-allowed}._banButton_d1npc_200._banned_d1npc_226{background:#ffffff1a;color:#ffffffb3;border:1px solid rgba(255,255,255,.2)}._banButton_d1npc_200._banned_d1npc_226:hover:not(:disabled){background:#ffffff26;color:#ffffffe6}._curationTag_d1npc_238{padding:4px 8px;background:#00d9ff26;border-radius:12px;font-size:12px;color:#00d9ff}._noTags_d1npc_246{font-size:12px;color:#fff6;font-style:italic}._editTagsButton_d1npc_252{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#00d9ff26;color:#00d9ff;font-size:10px;cursor:pointer;transition:background .2s ease}._editTagsButton_d1npc_252:hover{background:#00d9ff40}._tagEditorContainer_d1npc_268{display:flex;flex-direction:column;gap:8px}._tagEditorActions_d1npc_274{display:flex;gap:8px;justify-content:flex-end}._tagEditorCancel_d1npc_280,._tagEditorSave_d1npc_281{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}._tagEditorCancel_d1npc_280{background:#ffffff1a;color:#ffffffb3}._tagEditorCancel_d1npc_280:hover:not(:disabled){background:#ffffff26}._tagEditorSave_d1npc_281{background:#00d9ff;color:#000}._tagEditorSave_d1npc_281:hover:not(:disabled){background:#00c4e8}._tagEditorCancel_d1npc_280:disabled,._tagEditorSave_d1npc_281:disabled{opacity:.5;cursor:not-allowed}.worlds-page{position:fixed;inset:0;background:#1a1a1a;padding-top:80px;overflow-y:auto}.worlds-container{max-width:800px;margin:0 auto;padding:24px}.worlds-search-section{margin-bottom:32px}.worlds-search-section h2{color:#ffffffe6;font-size:20px;font-weight:600;margin-bottom:16px}.worlds-search-box{display:flex;gap:12px}.worlds-search-input{flex:1;padding:12px 16px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#ffffff0d;color:#ffffffe6;font-size:14px;outline:none;transition:all .2s ease}.worlds-search-input::placeholder{color:#fff6}.worlds-search-input:focus{border-color:#00d9ff80;background:#ffffff14}.worlds-search-input:disabled{opacity:.6;cursor:not-allowed}.worlds-search-button{padding:12px 24px;border:none;border-radius:8px;background:#00d9ff;color:#1a1a1a;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.worlds-search-button:hover:not(:disabled){background:#33e1ff}.worlds-search-button:active:not(:disabled){background:#00c4e8}.worlds-search-button:disabled{opacity:.5;cursor:not-allowed}.worlds-error{margin-top:16px;padding:12px 16px;background:#ff44441a;border:1px solid rgba(255,68,68,.3);border-radius:8px;color:#ff6b6b;font-size:14px}.worlds-list-section h3{color:#ffffffe6;font-size:16px;font-weight:600;margin-bottom:16px}.worlds-empty-state{color:#fff6;font-size:14px;text-align:center;padding:48px 24px;background:#ffffff05;border-radius:12px;border:1px dashed rgba(255,255,255,.1)}.worlds-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.world-card{padding:16px;background:#ff44441a;border:1px solid rgba(255,68,68,.2);border-radius:12px;cursor:pointer;transition:all .2s ease}.world-card:hover{background:#ff444426;border-color:#ff44444d;transform:translateY(-2px)}.world-card-name{color:#ffffffe6;font-size:14px;font-weight:500;margin-bottom:4px;word-break:break-all;font-family:monospace}.world-card-reason{color:#ffffff80;font-size:12px;margin-bottom:8px;font-style:italic}.world-card-date{color:#fff6;font-size:12px}.world-card-tagged{background:#00d9ff1a;border:1px solid rgba(0,217,255,.2)}.world-card-tagged:hover{background:#00d9ff26;border-color:#00d9ff4d}.world-card-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.world-card-tag{padding:2px 8px;background:#00d9ff33;border-radius:12px;color:#00d9ff;font-size:11px}.curation-page{height:100%;width:100%;display:flex;flex-direction:column;background:#121216}
|
|
1
|
+
:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;line-height:1.5;font-weight:400;color-scheme:dark;color:#ffffffde;background-color:#1a1a1a;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden}body{margin:0}.navbar-container{position:fixed;top:16px;left:16px;right:16px;z-index:50;display:flex;justify-content:space-between;pointer-events:none}.navbar-bar{pointer-events:auto;display:flex;align-items:center;gap:8px;padding:4px;background:#1c1c20f2;border-radius:12px;box-shadow:0 4px 12px #0000004d}.navbar-user-bar{position:relative}.navbar-spacer{flex:1;min-width:16px}.navbar-button{display:flex;align-items:center;gap:8px;padding:10px 16px;border:none;border-radius:8px;background:transparent;color:#ffffffb3;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap}.navbar-button:hover{background:#ffffff1a;color:#ffffffe6}.navbar-button:active{background:#ffffff26}.navbar-button:disabled{opacity:.5;cursor:not-allowed}.navbar-button-icon{font-size:16px}.navbar-avatar-button{padding:4px;border:none;border-radius:8px;background:transparent;cursor:pointer;transition:all .2s ease}.navbar-avatar-button:hover{background:#ffffff1a}.navbar-avatar-button:active{background:#ffffff26}.navbar-avatar{width:32px;height:32px;border-radius:8px;object-fit:cover;display:block}.navbar-avatar-placeholder{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:12px;font-weight:600}.navbar-backdrop{position:fixed;inset:0;z-index:-1}.navbar-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:160px;background:#1c1c20f2;border-radius:12px;box-shadow:0 4px 12px #0000004d;overflow:hidden}.navbar-menu-address{padding:12px 16px;color:#ffffff80;font-size:12px;border-bottom:1px solid rgba(255,255,255,.1)}.navbar-menu-item{display:block;width:100%;padding:12px 16px;border:none;background:transparent;color:#ffffffb3;font-size:14px;text-align:left;cursor:pointer;transition:all .2s ease}.navbar-menu-item:hover{background:#ffffff1a;color:#ffffffe6}.navbar-menu-item:active{background:#ffffff26}.navbar-dev-badge{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#ffc10733;border:1px solid rgba(255,193,7,.5);border-radius:8px;color:#ffc107;font-size:12px;font-weight:600}.navbar-dev-address{color:#fff9;font-weight:400;font-family:monospace}.app-tabs{display:flex;gap:2px;padding:4px;background:#ffffff0d;border-radius:8px}.app-tab{padding:8px 16px;border:none;border-radius:6px;background:transparent;color:#ffffff80;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.app-tab:hover{color:#fffc;background:#ffffff0d}.app-tab-active{background:#00d9ff26;color:#00d9ff}.app-tab-active:hover{background:#00d9ff33;color:#00d9ff}._mapView_ojr5v_1{position:fixed;top:0;left:0;width:100vw;height:100vh;overflow:hidden;background-color:#1a1a1a}._controls_ojr5v_11{position:absolute;bottom:24px;right:24px;display:flex;flex-direction:column;gap:8px;z-index:10}._controlButton_ojr5v_21{width:40px;height:40px;border-radius:8px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff;font-size:20px;font-weight:700;cursor:pointer;transition:background .2s;display:flex;align-items:center;justify-content:center}._controlButton_ojr5v_21:hover{background:#fff3}._controlButton_ojr5v_21:active{background:#ffffff4d}._coordinateDisplay_ojr5v_45{position:absolute;bottom:24px;left:88px;padding:8px 16px;background:#000000b3;border-radius:4px;color:#fff;font-family:SF Mono,Monaco,Consolas,monospace;font-size:14px;font-weight:500;z-index:10;-webkit-user-select:none;user-select:none}._sidebar_d9ig0_1{position:fixed;top:0;right:0;height:100vh;width:320px;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;transition:transform .3s ease;z-index:9999}._sidebarCollapsed_d9ig0_15{transform:translate(100%)}._toggleButton_d9ig0_19{position:absolute;left:-40px;top:50%;transform:translateY(-50%);width:40px;height:80px;background:#1c1c20f2;border:1px solid rgba(255,255,255,.1);border-right:none;border-radius:8px 0 0 8px;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px}._toggleButton_d9ig0_19:hover{background:#323237f2}._header_d9ig0_42{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._headerTitle_d9ig0_50{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._closeButton_d9ig0_57{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_d9ig0_57:hover{background:#ffffff26;color:#ffffffe6}._content_d9ig0_77{flex:1;overflow-y:auto;padding:16px}._footer_d9ig0_83{padding:16px;border-top:1px solid rgba(255,255,255,.1);display:flex;gap:8px}._button_d9ig0_90{flex:1;padding:10px 16px;border:none;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s}._buttonPrimary_d9ig0_101{background:#00d9ff;color:#000}._buttonPrimary_d9ig0_101:hover{background:#00c4e8}._buttonPrimary_d9ig0_101:disabled{background:#00d9ff4d;cursor:not-allowed}._buttonSecondary_d9ig0_115{background:#ffffff1a;color:#fff}._buttonSecondary_d9ig0_115:hover{background:#ffffff26}._buttonDanger_d9ig0_124{background:#ff6b6b33;color:#ff6b6b}._buttonDanger_d9ig0_124:hover{background:#ff6b6b4d}._groupCard_d9ig0_134{background:#ffffff0d;border-radius:8px;padding:12px;margin-bottom:12px;cursor:pointer;transition:background .2s}._groupCard_d9ig0_134:hover{background:#ffffff14}._groupCardHeader_d9ig0_147{display:flex;align-items:center;gap:10px;margin-bottom:8px}._groupColorDot_d9ig0_154{width:12px;height:12px;border-radius:50%;flex-shrink:0}._groupName_d9ig0_161{flex:1;font-size:14px;font-weight:500;color:#fff;margin:0}._groupMeta_d9ig0_169{font-size:12px;color:#ffffff80;margin-bottom:8px}._groupTags_d9ig0_175{display:flex;flex-wrap:wrap;gap:4px}._tag_d9ig0_181{background:#ffffff1a;color:#ffffffb3;padding:2px 8px;border-radius:12px;font-size:11px}._groupActions_d9ig0_189{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}._actionButton_d9ig0_197{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;background:#ffffff1a;color:#fff}._actionButton_d9ig0_197:hover{background:#ffffff26}._actionButtonBan_d9ig0_211{background:#f443;color:#f44}._actionButtonBan_d9ig0_211:hover{background:#ff44444d}._actionButtonUnban_d9ig0_220{background:#4caf5033;color:#4caf50}._actionButtonUnban_d9ig0_220:hover{background:#4caf504d}._groupCardBanned_d9ig0_230{border:1px solid rgba(255,68,68,.3);background:#ff44440d}._groupCardBanned_d9ig0_230:hover{background:#ff44441a}._bannedBadge_d9ig0_239{display:inline-block;margin-left:8px;padding:2px 6px;background:#f443;color:#f44;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase}._typeBadge_d9ig0_252{display:inline-block;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;flex-shrink:0}._typeBadgeScene_d9ig0_262{background:#6366f133;color:#818cf8}._typeBadgeWorld_d9ig0_267{background:#22c55e33;color:#4ade80}._form_d9ig0_273{display:flex;flex-direction:column;gap:16px}._formGroup_d9ig0_279{display:flex;flex-direction:column;gap:6px}._label_d9ig0_285{font-size:12px;font-weight:500;color:#ffffffb3}._input_d9ig0_291{padding:10px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;color:#fff;font-size:14px}._input_d9ig0_291:focus{outline:none;border-color:#00d9ff}._textarea_d9ig0_305{resize:vertical;min-height:80px}._colorPicker_d9ig0_310{display:flex;flex-wrap:wrap;gap:8px}._colorOption_d9ig0_316{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .2s}._colorOption_d9ig0_316:hover{transform:scale(1.1)}._colorOptionSelected_d9ig0_329{border-color:#fff}._colorOptionDisabled_d9ig0_333{opacity:.3;cursor:not-allowed}._colorOptionDisabled_d9ig0_333:hover{transform:none}._tagsInput_d9ig0_342{display:flex;flex-wrap:wrap;gap:6px;padding:8px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;min-height:40px}._tagInForm_d9ig0_353{display:flex;align-items:center;gap:4px;background:#00d9ff33;color:#00d9ff;padding:4px 8px;border-radius:12px;font-size:12px}._tagRemove_d9ig0_364{background:none;border:none;color:inherit;cursor:pointer;padding:0;font-size:14px;line-height:1}._tagInput_d9ig0_374{border:none;background:transparent;color:#fff;font-size:14px;flex:1;min-width:100px}._tagInput_d9ig0_374:focus{outline:none}._emptyState_d9ig0_388{text-align:center;padding:32px 16px;color:#ffffff80}._emptyStateIcon_d9ig0_394{font-size:48px;margin-bottom:16px;opacity:.5}._emptyStateText_d9ig0_400{font-size:14px;margin:0}._selectionInfo_d9ig0_406{background:#00d9ff1a;border:1px solid rgba(0,217,255,.3);border-radius:6px;padding:12px;margin-bottom:16px}._selectionInfoText_d9ig0_414{font-size:13px;color:#00d9ff;margin:0}._errorMessage_d9ig0_421{background:#ff6b6b1a;border:1px solid rgba(255,107,107,.3);border-radius:6px;padding:12px;color:#ff6b6b;font-size:13px;margin-bottom:16px}._buttonSecondary_d9ig0_115:disabled{opacity:.5;cursor:not-allowed}._searchInput_d9ig0_437{width:100%;padding:10px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;color:#fff;font-size:14px;margin-bottom:16px;box-sizing:border-box}._searchInput_d9ig0_437:focus{outline:none;border-color:#00d9ff}._searchInput_d9ig0_437::placeholder{color:#fff6}._sidebar_fxxme_1{position:fixed;top:0;right:0;height:100vh;width:320px;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;transition:transform .3s ease;z-index:9999}._sidebarCollapsed_fxxme_15{transform:translate(100%)}._header_fxxme_19{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._headerTitle_fxxme_27{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._closeButton_fxxme_34{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_fxxme_34:hover{background:#ffffff26;color:#ffffffe6}._content_fxxme_54{flex:1;overflow-y:auto;padding:16px}._banCard_fxxme_60{background:#ffffff0d;border-radius:8px;padding:12px;margin-bottom:12px;cursor:pointer;transition:background .2s}._banCard_fxxme_60:hover{background:#ffffff14}._banCardHeader_fxxme_73{display:flex;align-items:center;gap:10px;margin-bottom:8px}._banIcon_fxxme_80{width:12px;height:12px;border-radius:50%;background:#f44;flex-shrink:0}._banTitle_fxxme_88{flex:1;font-size:14px;font-weight:500;color:#fff;margin:0}._banType_fxxme_96{display:inline-block;padding:2px 6px;background:#ffffff1a;color:#ffffffb3;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase}._banMeta_fxxme_107{font-size:12px;color:#ffffff80;margin-bottom:4px}._banReason_fxxme_113{font-size:12px;color:#ffffff80;font-style:italic;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}._redeployWarning_fxxme_122{font-size:12px;color:orange;margin-top:8px;padding:6px 8px;background:#ffa5001a;border-radius:4px}._banActions_fxxme_131{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.1)}._actionButton_fxxme_139{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;background:#ffffff1a;color:#fff;transition:background .2s}._actionButton_fxxme_139:hover{background:#ffffff26}._emptyState_fxxme_154{text-align:center;padding:32px 16px;color:#ffffff80}._emptyStateIcon_fxxme_160{font-size:48px;margin-bottom:16px;opacity:.5}._emptyStateText_fxxme_166{font-size:14px;margin:0}._loadingState_fxxme_171{text-align:center;padding:32px 16px;color:#ffffff80}._errorState_fxxme_177{background:#ff6b6b1a;border:1px solid rgba(255,107,107,.3);border-radius:6px;padding:12px;color:#ff6b6b;font-size:13px}._fabContainer_1ntje_1{position:absolute;bottom:24px;left:24px;display:flex;flex-direction:column;gap:12px;z-index:50}._fab_1ntje_1{width:48px;height:48px;border-radius:12px;border:none;background:#1c1c20f2;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000004d;transition:all .2s ease;position:relative}._fab_1ntje_1:hover{background:#323237f2;transform:scale(1.05)}._fab_1ntje_1:active{transform:scale(.95)}._fab_1ntje_1:disabled{background:#1c1c2099;color:#fff6;cursor:not-allowed;box-shadow:none}._fab_1ntje_1:disabled:hover{transform:none}._badge_1ntje_47{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#00d9ff;color:#1a1a1a;font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center}._badgeBanned_1ntje_64{background:#f44;color:#fff}._fabBanned_1ntje_69{border:1px solid rgba(255,68,68,.3)}._fabBanned_1ntje_69:hover{background:#f443}._fabSmall_1ntje_77{width:36px;height:36px;border-radius:8px}._fabInactive_1ntje_83{opacity:.5;background:#1c1c20b3}._fabInactive_1ntje_83:hover{opacity:.8}._container_1n3e6_1{display:flex;align-items:center;gap:12px;padding:16px 24px;background:#ffffff05;border-bottom:1px solid rgba(255,255,255,.1);flex-wrap:wrap}._label_1n3e6_11{font-size:13px;font-weight:500;color:#fff9;white-space:nowrap}._tags_1n3e6_18{display:flex;flex-wrap:wrap;gap:8px;flex:1}._tag_1n3e6_18{padding:6px 12px;border:1px solid rgba(255,255,255,.15);border-radius:16px;background:transparent;color:#ffffffb3;font-size:13px;cursor:pointer;transition:all .2s ease}._tag_1n3e6_18:hover{border-color:#ffffff4d;background:#ffffff0d}._tagSelected_1n3e6_41{border-color:#00d9ff;background:#00d9ff26;color:#00d9ff}._tagSelected_1n3e6_41:hover{border-color:#00d9ff;background:#00d9ff40}._tagSuggested_1n3e6_52{border-style:dashed}._tagSuggested_1n3e6_52._tagSelected_1n3e6_41{border-style:solid}._noTags_1n3e6_60{font-size:13px;color:#fff6;font-style:italic}._clearButton_1n3e6_66{padding:6px 12px;border:none;border-radius:4px;background:#ff6b6b26;color:#ff6b6b;font-size:12px;cursor:pointer;transition:background .2s ease;white-space:nowrap}._clearButton_1n3e6_66:hover{background:#ff6b6b40}._searchInput_1n3e6_83{padding:8px 12px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;color:#fff;font-size:14px;min-width:180px}._searchInput_1n3e6_83:focus{outline:none;border-color:#00d9ff}._searchInput_1n3e6_83::placeholder{color:#fff6}._card_1hn5i_1{background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:16px;cursor:pointer;transition:all .2s ease}._card_1hn5i_1:hover{background:#ffffff0f;border-color:#ffffff26;transform:translateY(-2px)}._header_1hn5i_16{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}._colorDot_1hn5i_23{width:12px;height:12px;border-radius:50%;flex-shrink:0}._typeBadge_1hn5i_30{padding:4px 8px;border-radius:4px;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}._typeBadge_1hn5i_30[data-type=world]{background:#9370db33;color:#9370db}._typeBadge_1hn5i_30[data-type=scene]{background:#00d9ff33;color:#00d9ff}._typeBadge_1hn5i_30[data-type=group]{background:#ffa50033;color:orange}._name_1hn5i_54{margin:0 0 8px;font-size:16px;font-weight:600;color:#fffffff2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._description_1hn5i_64{margin:0 0 12px;font-size:13px;color:#fff9;line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}._meta_1hn5i_75{margin-bottom:12px;font-size:12px;color:#ffffff80}._worldName_1hn5i_81{font-family:monospace;background:#ffffff0d;padding:2px 6px;border-radius:4px}._parcels_1hn5i_88{display:flex;align-items:center;gap:6px}._parcelCount_1hn5i_94{color:#fff6}._tags_1hn5i_98{display:flex;flex-wrap:wrap;gap:6px}._tag_1hn5i_98{padding:4px 8px;background:#00d9ff1a;border-radius:12px;font-size:11px;color:#00d9ff}._banned_1hn5i_112{border-color:#ff44444d;background:#ff44440d}._banned_1hn5i_112:hover{border-color:#f446;background:#ff444414}._bannedBadge_1hn5i_122{padding:4px 8px;border-radius:4px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:#f443;color:#ff6b6b}._groupName_1hn5i_133{margin-bottom:8px;font-size:12px;color:#fff9}._groupLabel_1hn5i_139{color:#fff6}._container_15cky_1{flex:1;overflow-y:auto;padding:24px}._loading_15cky_7{padding:48px;text-align:center;font-size:14px;color:#ffffff80}._empty_15cky_14{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:64px 24px;text-align:center}._emptyIcon_15cky_23{font-size:48px;margin-bottom:16px;opacity:.5}._emptyTitle_15cky_29{font-size:18px;font-weight:500;color:#ffffffb3;margin-bottom:8px}._emptyText_15cky_36{font-size:14px;color:#fff6}._stats_15cky_41{display:flex;align-items:center;gap:16px;margin-bottom:16px;font-size:13px;color:#ffffff80}._stat_15cky_41{padding:2px 8px;background:#ffffff0d;border-radius:4px}._statBanned_15cky_56{padding:2px 8px;background:#ff444426;border-radius:4px;color:#ff6b6b}._grid_15cky_63{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}._page_ekuzr_1{position:fixed;inset:0;display:flex;flex-direction:column;background:#121216;padding-top:80px;overflow:hidden}._exportButton_ekuzr_11{padding:6px 12px;font-size:12px;font-weight:500;color:#fff;background:#6366f1;border:none;border-radius:4px;cursor:pointer;white-space:nowrap;transition:background .2s,opacity .2s;margin-left:auto}._exportButton_ekuzr_11:hover:not(:disabled){background:#5558e8}._exportButton_ekuzr_11:disabled{opacity:.6;cursor:not-allowed}._loading_ekuzr_34,._error_ekuzr_35{padding:48px;text-align:center;font-size:14px;color:#ffffff80}._error_ekuzr_35{color:#ff6b6b}._container_1ycct_1{position:relative}._tagsContainer_1ycct_5{display:flex;flex-wrap:wrap;gap:6px;padding:8px;border:1px solid rgba(255,255,255,.2);border-radius:6px;background:#ffffff0d;min-height:40px}._tag_1ycct_5{display:flex;align-items:center;gap:4px;background:#00d9ff33;color:#00d9ff;padding:4px 8px;border-radius:12px;font-size:12px}._tagRemove_1ycct_27{background:none;border:none;color:inherit;cursor:pointer;padding:0;font-size:14px;line-height:1;opacity:.7}._tagRemove_1ycct_27:hover{opacity:1}._input_1ycct_42{border:none;background:transparent;color:#fff;font-size:14px;flex:1;min-width:100px;outline:none}._input_1ycct_42::placeholder{color:#fff6}._suggestions_1ycct_56{position:absolute;top:100%;left:0;right:0;margin-top:4px;background:#26262a;border:1px solid rgba(255,255,255,.15);border-radius:6px;overflow:hidden;z-index:10;box-shadow:0 4px 12px #0000004d}._suggestion_1ycct_56{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 12px;border:none;background:transparent;color:#ffffffe6;font-size:13px;text-align:left;cursor:pointer;transition:background .15s ease}._suggestion_1ycct_56:hover{background:#ffffff1a}._suggestion_1ycct_56+._suggestion_1ycct_56{border-top:1px solid rgba(255,255,255,.05)}._suggestedBadge_1ycct_93{font-size:10px;padding:2px 6px;background:#00d9ff26;color:#00d9ff;border-radius:4px;text-transform:uppercase}._sidebar_2f8qp_1{position:fixed;top:0;right:0;width:320px;height:100vh;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;z-index:9999;animation:_slideIn_2f8qp_1 .2s ease-out}@keyframes _slideIn_2f8qp_1{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}._header_2f8qp_26{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._title_2f8qp_34{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._typeBadge_2f8qp_41{font-size:12px;padding:2px 8px;border-radius:4px;margin-left:8px;font-weight:500}._typeBadgeScene_2f8qp_49{background:#6366f133;color:#818cf8}._typeBadgeWorld_2f8qp_54{background:#22c55e33;color:#4ade80}._closeButton_2f8qp_59{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_2f8qp_59:hover{background:#ffffff26;color:#ffffffe6}._content_2f8qp_79{flex:1;overflow-y:auto;padding:16px}._loading_2f8qp_85,._error_2f8qp_86{padding:24px;text-align:center;color:#ffffff80;font-size:14px}._error_2f8qp_86{color:#ff6b6b}._thumbnailContainer_2f8qp_97{margin-bottom:16px;border-radius:8px;overflow:hidden;background:#ffffff0d}._thumbnail_2f8qp_97{width:100%;height:auto;display:block}._field_2f8qp_110{margin-bottom:16px}._label_2f8qp_114{display:block;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:#fff6;margin-bottom:4px}._value_2f8qp_124{font-size:14px;color:#ffffffe6}._valueSmall_2f8qp_129{font-size:13px;color:#ffffffb3;line-height:1.4}._parcelCount_2f8qp_135{margin-left:8px;color:#ffffff80;font-size:12px}._tags_2f8qp_141{display:flex;flex-wrap:wrap;gap:6px}._tag_2f8qp_141{padding:4px 8px;background:#ffffff1a;border-radius:4px;font-size:12px;color:#ffffffb3}._curationTag_2f8qp_155{padding:4px 8px;background:#00d9ff26;border-radius:4px;font-size:12px;color:#00d9ff}._groupBadge_2f8qp_163{display:inline-block;padding:6px 12px;border-radius:6px;font-size:13px;font-weight:500;color:#000c;border:none;cursor:pointer;transition:all .2s ease}._groupBadge_2f8qp_163:hover{filter:brightness(1.1);transform:translateY(-1px);box-shadow:0 2px 8px #0000004d}._groupBadge_2f8qp_163:active{transform:translateY(0)}._footer_2f8qp_185{padding:16px;border-top:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:8px}._banButton_2f8qp_193{width:100%;padding:12px 16px;border:none;border-radius:8px;background:#f44;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}._banButton_2f8qp_193:hover:not(:disabled){background:#f55}._banButton_2f8qp_193:active:not(:disabled){background:#e33}._banButton_2f8qp_193:disabled{opacity:.6;cursor:not-allowed}._banButton_2f8qp_193._banned_2f8qp_219{background:#ffffff1a;color:#ffffffb3;border:1px solid rgba(255,255,255,.2)}._banButton_2f8qp_193._banned_2f8qp_219:hover:not(:disabled){background:#ffffff26;color:#ffffffe6}._banInfo_2f8qp_230{margin-top:16px;padding:12px;background:#ff44441a;border:1px solid rgba(255,68,68,.2);border-radius:8px}._banInfoHeader_2f8qp_238{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#ff6b6b;margin-bottom:12px}._banInfo_2f8qp_230 ._field_2f8qp_110{margin-bottom:10px}._banInfo_2f8qp_230 ._field_2f8qp_110:last-child{margin-bottom:0}._redeployWarning_2f8qp_255{margin-top:16px;padding:12px;background:#ffa5001a;border:1px solid rgba(255,165,0,.2);border-radius:8px}._redeployWarningHeader_2f8qp_263{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:orange;margin-bottom:8px}._redeployWarningText_2f8qp_272{font-size:12px;color:#ffffffb3;line-height:1.4}._editTagsButton_2f8qp_279{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#00d9ff26;color:#00d9ff;font-size:10px;cursor:pointer;transition:background .2s ease}._editTagsButton_2f8qp_279:hover{background:#00d9ff40}._tagEditorContainer_2f8qp_295{display:flex;flex-direction:column;gap:8px}._tagEditorActions_2f8qp_301{display:flex;gap:8px;justify-content:flex-end}._tagEditorCancel_2f8qp_307,._tagEditorSave_2f8qp_308{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}._tagEditorCancel_2f8qp_307{background:#ffffff1a;color:#ffffffb3}._tagEditorCancel_2f8qp_307:hover:not(:disabled){background:#ffffff26}._tagEditorSave_2f8qp_308{background:#00d9ff;color:#000}._tagEditorSave_2f8qp_308:hover:not(:disabled){background:#00c4e8}._tagEditorCancel_2f8qp_307:disabled,._tagEditorSave_2f8qp_308:disabled{opacity:.5;cursor:not-allowed}._noTags_2f8qp_341{font-size:12px;color:#fff6;font-style:italic}._statusActive_2f8qp_347{color:#4ade80;font-weight:500}._statusBanned_2f8qp_352{color:#ff6b6b;font-weight:500}._banButtonSmall_2f8qp_358{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#ff444426;color:#ff6b6b;font-size:10px;cursor:pointer;transition:background .2s ease}._banButtonSmall_2f8qp_358:hover:not(:disabled){background:#ff444440}._banButtonSmall_2f8qp_358:disabled{opacity:.5;cursor:not-allowed}._unbanButton_2f8qp_379{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#4ade8026;color:#4ade80;font-size:10px;cursor:pointer;transition:background .2s ease}._unbanButton_2f8qp_379:hover:not(:disabled){background:#4ade8040}._unbanButton_2f8qp_379:disabled{opacity:.5;cursor:not-allowed}._removeGroupButton_2f8qp_400{width:100%;padding:10px 16px;border:1px solid rgba(255,255,255,.15);border-radius:8px;background:transparent;color:#fff9;font-size:13px;cursor:pointer;transition:all .2s ease}._removeGroupButton_2f8qp_400:hover{background:#ffffff0d;color:#fffc;border-color:#ffffff40}._groupSelector_2f8qp_419{display:flex;flex-direction:column;gap:4px}._groupOption_2f8qp_425{display:flex;align-items:center;gap:8px;padding:8px 12px;border:none;border-left:3px solid;border-radius:4px;background:#ffffff0d;color:#ffffffe6;font-size:13px;cursor:pointer;transition:all .2s ease;text-align:left}._groupOption_2f8qp_425:hover:not(:disabled){background:#ffffff1a}._groupOption_2f8qp_425:disabled{opacity:.5;cursor:not-allowed}._groupOptionColor_2f8qp_450{width:12px;height:12px;border-radius:3px;flex-shrink:0}._groupOptionCreate_2f8qp_457{display:flex;align-items:center;justify-content:center;padding:8px 12px;border:1px dashed rgba(0,217,255,.4);border-radius:4px;background:#00d9ff0d;color:#00d9ff;font-size:13px;cursor:pointer;transition:all .2s ease}._groupOptionCreate_2f8qp_457:hover:not(:disabled){background:#00d9ff1a;border-color:#00d9ff99}._groupOptionCreate_2f8qp_457:disabled{opacity:.5;cursor:not-allowed}._groupCreator_2f8qp_482{display:flex;flex-direction:column;gap:10px}._groupNameInput_2f8qp_488{width:100%;padding:8px 12px;border:1px solid rgba(255,255,255,.2);border-radius:4px;background:#ffffff0d;color:#ffffffe6;font-size:13px;outline:none;transition:border-color .2s ease}._groupNameInput_2f8qp_488:focus{border-color:#00d9ff80}._groupNameInput_2f8qp_488::placeholder{color:#fff6}._colorPicker_2f8qp_508{display:flex;flex-wrap:wrap;gap:6px}._colorOption_2f8qp_514{width:24px;height:24px;border:2px solid transparent;border-radius:4px;cursor:pointer;transition:all .2s ease}._colorOption_2f8qp_514:hover:not(:disabled){transform:scale(1.1)}._colorOptionSelected_2f8qp_527{border-color:#fff;box-shadow:0 0 0 2px #0000004d}._colorOption_2f8qp_514:disabled{opacity:.5;cursor:not-allowed}._groupCreatorActions_2f8qp_537{display:flex;gap:8px;justify-content:flex-end}._groupOptionCancel_2f8qp_543{padding:6px 12px;border:none;border-radius:4px;background:#ffffff1a;color:#fff9;font-size:12px;cursor:pointer;transition:all .2s ease;margin-top:4px}._groupOptionCancel_2f8qp_543:hover:not(:disabled){background:#ffffff26;color:#fffc}._groupOptionCancel_2f8qp_543:disabled{opacity:.5;cursor:not-allowed}._bannedSection_2f8qp_566{margin-top:8px;padding:12px;background:#ff444414;border:1px solid rgba(255,68,68,.15);border-radius:8px}._bannedHeader_2f8qp_574{display:flex;align-items:center;gap:8px}._bannedBadge_2f8qp_580{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;padding:3px 8px;background:#ff444426;color:#ff6b6b;border-radius:4px}._unbanLink_2f8qp_591{font-size:11px;color:#ffffff80;background:none;border:none;cursor:pointer;padding:0;text-decoration:underline;transition:color .2s ease}._unbanLink_2f8qp_591:hover:not(:disabled){color:#fffc}._unbanLink_2f8qp_591:disabled{opacity:.5;cursor:not-allowed}._banDetails_2f8qp_611{margin-top:10px}._banReason_2f8qp_615{font-size:12px;color:#fff9;font-style:italic;margin-bottom:6px}._banMeta_2f8qp_622{font-size:11px;color:#fff6}._footerLink_2f8qp_628{background:none;border:none;padding:0;font-size:12px;color:#ffffff80;cursor:pointer;text-decoration:underline;transition:color .2s ease}._footerLink_2f8qp_628:hover{color:#fffc}._footerLinkDanger_2f8qp_643{background:none;border:none;padding:0;font-size:12px;color:#f449;cursor:pointer;text-decoration:underline;transition:color .2s ease}._footerLinkDanger_2f8qp_643:hover:not(:disabled){color:#ff6b6b}._footerLinkDanger_2f8qp_643:disabled{opacity:.5;cursor:not-allowed}._sidebar_d1npc_1{position:fixed;top:0;right:0;width:320px;height:100vh;background:#1c1c20;border-left:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;z-index:9999;animation:_slideIn_d1npc_1 .2s ease-out}@keyframes _slideIn_d1npc_1{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}._header_d1npc_26{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid rgba(255,255,255,.1)}._title_d1npc_34{margin:0;font-size:16px;font-weight:600;color:#ffffffe6}._closeButton_d1npc_41{width:32px;height:32px;border:none;border-radius:8px;background:#ffffff1a;color:#ffffffb3;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}._closeButton_d1npc_41:hover{background:#ffffff26;color:#ffffffe6}._content_d1npc_61{flex:1;overflow-y:auto;padding:16px}._thumbnailContainer_d1npc_67{margin-bottom:16px;border-radius:8px;overflow:hidden;background:#ffffff0d}._thumbnail_d1npc_67{width:100%;height:auto;display:block}._field_d1npc_80{margin-bottom:16px}._label_d1npc_84{display:block;font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;color:#fff6;margin-bottom:4px}._value_d1npc_94{font-size:14px;color:#ffffffe6}._valueSmall_d1npc_99{font-size:13px;color:#ffffffb3;line-height:1.4;word-break:break-all}._tags_d1npc_106{display:flex;flex-wrap:wrap;gap:6px}._tag_d1npc_106{padding:4px 8px;background:#ffffff1a;border-radius:4px;font-size:12px;color:#ffffffb3}._statusActive_d1npc_120{display:inline-block;padding:4px 10px;background:#4caf5033;color:#4caf50;border-radius:4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}._statusBanned_d1npc_132{display:inline-block;padding:4px 10px;background:#f443;color:#f44;border-radius:4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}._redeployWarning_d1npc_144{margin-top:16px;padding:12px;background:#ffc10726;border:1px solid rgba(255,193,7,.3);border-radius:8px}._redeployWarningHeader_d1npc_152{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#ffc107;margin-bottom:8px}._redeployWarningText_d1npc_161{font-size:13px;color:#ffffffb3;line-height:1.4}._banInfo_d1npc_167{margin-top:16px;padding:12px;background:#ff44441a;border:1px solid rgba(255,68,68,.2);border-radius:8px}._banInfoHeader_d1npc_175{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#ff6b6b;margin-bottom:12px}._banInfo_d1npc_167 ._field_d1npc_80{margin-bottom:10px}._banInfo_d1npc_167 ._field_d1npc_80:last-child{margin-bottom:0}._footer_d1npc_192{padding:16px;border-top:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:8px}._banButton_d1npc_200{width:100%;padding:12px 16px;border:none;border-radius:8px;background:#f44;color:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}._banButton_d1npc_200:hover:not(:disabled){background:#f55}._banButton_d1npc_200:active:not(:disabled){background:#e33}._banButton_d1npc_200:disabled{opacity:.6;cursor:not-allowed}._banButton_d1npc_200._banned_d1npc_226{background:#ffffff1a;color:#ffffffb3;border:1px solid rgba(255,255,255,.2)}._banButton_d1npc_200._banned_d1npc_226:hover:not(:disabled){background:#ffffff26;color:#ffffffe6}._curationTag_d1npc_238{padding:4px 8px;background:#00d9ff26;border-radius:12px;font-size:12px;color:#00d9ff}._noTags_d1npc_246{font-size:12px;color:#fff6;font-style:italic}._editTagsButton_d1npc_252{margin-left:8px;padding:2px 8px;border:none;border-radius:4px;background:#00d9ff26;color:#00d9ff;font-size:10px;cursor:pointer;transition:background .2s ease}._editTagsButton_d1npc_252:hover{background:#00d9ff40}._tagEditorContainer_d1npc_268{display:flex;flex-direction:column;gap:8px}._tagEditorActions_d1npc_274{display:flex;gap:8px;justify-content:flex-end}._tagEditorCancel_d1npc_280,._tagEditorSave_d1npc_281{padding:6px 12px;border:none;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s ease}._tagEditorCancel_d1npc_280{background:#ffffff1a;color:#ffffffb3}._tagEditorCancel_d1npc_280:hover:not(:disabled){background:#ffffff26}._tagEditorSave_d1npc_281{background:#00d9ff;color:#000}._tagEditorSave_d1npc_281:hover:not(:disabled){background:#00c4e8}._tagEditorCancel_d1npc_280:disabled,._tagEditorSave_d1npc_281:disabled{opacity:.5;cursor:not-allowed}.worlds-page{position:fixed;inset:0;background:#1a1a1a;padding-top:80px;overflow-y:auto}.worlds-container{max-width:800px;margin:0 auto;padding:24px}.worlds-search-section{margin-bottom:32px}.worlds-search-section h2{color:#ffffffe6;font-size:20px;font-weight:600;margin-bottom:16px}.worlds-search-box{display:flex;gap:12px}.worlds-search-input{flex:1;padding:12px 16px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#ffffff0d;color:#ffffffe6;font-size:14px;outline:none;transition:all .2s ease}.worlds-search-input::placeholder{color:#fff6}.worlds-search-input:focus{border-color:#00d9ff80;background:#ffffff14}.worlds-search-input:disabled{opacity:.6;cursor:not-allowed}.worlds-search-button{padding:12px 24px;border:none;border-radius:8px;background:#00d9ff;color:#1a1a1a;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.worlds-search-button:hover:not(:disabled){background:#33e1ff}.worlds-search-button:active:not(:disabled){background:#00c4e8}.worlds-search-button:disabled{opacity:.5;cursor:not-allowed}.worlds-error{margin-top:16px;padding:12px 16px;background:#ff44441a;border:1px solid rgba(255,68,68,.3);border-radius:8px;color:#ff6b6b;font-size:14px}.worlds-list-section h3{color:#ffffffe6;font-size:16px;font-weight:600;margin-bottom:16px}.worlds-empty-state{color:#fff6;font-size:14px;text-align:center;padding:48px 24px;background:#ffffff05;border-radius:12px;border:1px dashed rgba(255,255,255,.1)}.worlds-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.world-card{padding:16px;background:#ff44441a;border:1px solid rgba(255,68,68,.2);border-radius:12px;cursor:pointer;transition:all .2s ease}.world-card:hover{background:#ff444426;border-color:#ff44444d;transform:translateY(-2px)}.world-card-name{color:#ffffffe6;font-size:14px;font-weight:500;margin-bottom:4px;word-break:break-all;font-family:monospace}.world-card-reason{color:#ffffff80;font-size:12px;margin-bottom:8px;font-style:italic}.world-card-date{color:#fff6;font-size:12px}.world-card-tagged{background:#00d9ff1a;border:1px solid rgba(0,217,255,.2)}.world-card-tagged:hover{background:#00d9ff26;border-color:#00d9ff4d}.world-card-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.world-card-tag{padding:2px 8px;background:#00d9ff33;border-radius:12px;color:#00d9ff;font-size:11px}.curation-page{height:100%;width:100%;display:flex;flex-direction:column;background:#121216}.versions-page{position:fixed;inset:0;background:#1a1a1a;padding-top:80px;overflow-y:auto}.versions-container{max-width:900px;margin:0 auto;padding:24px}.versions-header{margin-bottom:24px}.versions-header h1{color:#ffffffe6;font-size:24px;font-weight:600;margin-bottom:8px}.versions-header p{color:#fff9;font-size:14px;line-height:1.5}.versions-header code{background:#ffffff14;padding:2px 6px;border-radius:4px;font-size:12px;color:#00d9ff}.versions-header a{color:#00d9ff;text-decoration:none}.versions-header a:hover{text-decoration:underline}.versions-warning{margin-top:12px;padding:10px 14px;background:#ffc1071a;border:1px solid rgba(255,193,7,.25);border-radius:8px;color:#ffc107;font-size:13px}.versions-loading{color:#ffffff80;text-align:center;padding:48px 24px}.versions-error{margin-top:12px;padding:10px 14px;background:#ff44441a;border:1px solid rgba(255,68,68,.3);border-radius:8px;color:#ff6b6b;font-size:13px}.versions-link-button{background:none;border:none;color:#ff6b6b;cursor:pointer;text-decoration:underline;padding:0;margin-left:8px;font:inherit}.versions-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:20px}.version-card{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:20px}.version-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.version-card-header h2{color:#ffffffe6;font-size:18px;font-weight:600}.version-edit-button{background:#00d9ff1a;border:1px solid rgba(0,217,255,.25);border-radius:8px;padding:6px 10px;color:#00d9ff;font-size:16px;cursor:pointer;transition:all .15s ease}.version-edit-button:hover:not(:disabled){background:#00d9ff26}.version-edit-button:disabled{opacity:.4;cursor:not-allowed}.version-edit-actions{display:flex;gap:8px}.version-button-primary{padding:6px 14px;border:none;border-radius:6px;background:#00d9ff;color:#1a1a1a;font-size:13px;font-weight:500;cursor:pointer;transition:background .15s ease}.version-button-primary:hover:not(:disabled){background:#33e1ff}.version-button-primary:disabled{opacity:.4;cursor:not-allowed}.version-button-secondary{padding:6px 14px;border:1px solid rgba(255,255,255,.15);border-radius:6px;background:transparent;color:#fffc;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.version-button-secondary:hover:not(:disabled){background:#ffffff0d}.version-button-secondary:disabled{opacity:.4;cursor:not-allowed}.version-rows{display:flex;flex-direction:column;gap:12px}.version-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;background:#ffffff08;border-radius:8px}.version-row-labels{display:flex;flex-direction:column;gap:2px;min-width:0}.version-row-label{color:#ffffffd9;font-size:13px;font-weight:500}.version-row-hint{color:#ffffff73;font-size:11px}.version-row-value{color:#fffffff2;font-size:18px;font-weight:600;font-family:SF Mono,Menlo,Consolas,monospace;min-width:80px;text-align:right}.version-row-input{width:100px;padding:6px 10px;border:1px solid rgba(0,217,255,.3);border-radius:6px;background:#0003;color:#fffffff2;font-size:16px;font-family:SF Mono,Menlo,Consolas,monospace;text-align:right;outline:none}.version-row-input:focus{border-color:#00d9ff99;background:#0000004d}.version-validation-error{margin-top:10px;padding:8px 12px;background:#ff44441a;border:1px solid rgba(255,68,68,.25);border-radius:6px;color:#ff8080;font-size:12px}.godot-banner{background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:14px 18px;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap}.godot-banner-label{color:#ffffffb3;font-size:13px}.godot-banner-label a{color:#00d9ff;text-decoration:none;font-weight:500}.godot-banner-label a:hover{text-decoration:underline}.godot-banner-branches{display:flex;gap:10px;flex-wrap:wrap}.godot-branch-pill{display:inline-flex;align-items:baseline;gap:8px;padding:6px 12px;background:#00d9ff14;border:1px solid rgba(0,217,255,.18);border-radius:999px;font-size:13px}.godot-branch-name{color:#fff9;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px}.godot-branch-number strong{color:#00d9ff;font-family:SF Mono,Menlo,Consolas,monospace;font-size:14px;font-weight:600}.godot-branch-display{color:#ffffff73;font-size:11px}.godot-branch-error{color:#ff8080;font-size:12px}.godot-branch-loading{color:#fff6;font-size:12px}.versions-modal-backdrop{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000;padding:24px}.versions-modal{background:#222;border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:24px;width:100%;max-width:440px;box-shadow:0 16px 40px #0006}.versions-modal h3{color:#ffffffe6;font-size:18px;font-weight:600;margin-bottom:6px}.versions-modal p{color:#fff9;font-size:13px;margin-bottom:16px}.versions-diff{display:flex;flex-direction:column;gap:12px;margin-bottom:16px}.versions-diff-block{padding:12px;background:#ffffff08;border-radius:8px}.versions-diff-block h4{color:#fffc;font-size:13px;font-weight:600;margin-bottom:8px}.versions-diff-row{display:flex;align-items:center;justify-content:space-between;padding:4px 0;font-size:13px}.versions-diff-label{color:#fff9}.versions-diff-value{display:inline-flex;align-items:center;gap:8px;font-family:SF Mono,Menlo,Consolas,monospace}.versions-diff-from{color:#fff6}.versions-diff-arrow{color:#ffffff4d}.versions-diff-to{color:#ffffffd9}.versions-diff-row-changed .versions-diff-to{color:#00d9ff;font-weight:600}.versions-modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PhArrowCircleDown-BtlNV0TZ.js","assets/property-CnFDNXw5.js","assets/PhArrowClockwise-mOiWYLMV.js","assets/PhArrowDown-CkoOD89h.js","assets/PhArrowLeft-C0jlxVhM.js","assets/PhArrowRight-BI-V03Xf.js","assets/PhArrowSquareOut-DnQ7n_B4.js","assets/PhArrowsDownUp-PZosTqZG.js","assets/PhArrowsLeftRight-CYsRQ2qh.js","assets/PhArrowUp-izKvURUW.js","assets/PhArrowUpRight-Bn-JhHsY.js","assets/PhArrowsClockwise-Brtx2Re-.js","assets/PhBank-hhPAIPVb.js","assets/PhBrowser-BjzAmrHO.js","assets/PhCaretDown-ddSjwcwm.js","assets/PhCaretLeft-B7YLoNEF.js","assets/PhCaretRight-BY8D5MIg.js","assets/PhCaretUp-BG10nSut.js","assets/PhCheck-DrKd7pBC.js","assets/PhCircleHalf-Bk9C4DvT.js","assets/PhClock-Sj17weCB.js","assets/PhCompass-Df1ugFO-.js","assets/PhCopy-rgttky8E.js","assets/PhCreditCard-CZpdid2n.js","assets/PhCurrencyDollar-B6IKKjue.js","assets/PhDesktop-BuCDXYJj.js","assets/PhDeviceMobile-CnybhXY-.js","assets/PhDotsThree-CSAEcba1.js","assets/PhVault-B8m1usHw.js","assets/PhEnvelope-SmaNeXoQ.js","assets/PhFunnelSimple-DKx35ITq.js","assets/PhGlobe-q1mqj65V.js","assets/PhIdentificationCard-BeLXJpfZ.js","assets/PhImage-BYrKfN9k.js","assets/PhInfo-X33f06Ej.js","assets/PhLightbulb-DMZJsowR.js","assets/PhMagnifyingGlass-B6D0sWFL.js","assets/PhPaperPlaneRight-Dvo-nXr9.js","assets/PhPlus-CBvZvLax.js","assets/PhPower-D8-AcNM6.js","assets/PhPuzzlePiece-C-7mYqGO.js","assets/PhQrCode-uIXlI5ER.js","assets/PhQuestion-rUoqC2sC.js","assets/PhQuestionMark-W55Txvvb.js","assets/PhSealCheck-BeVLq9PH.js","assets/PhSignOut-Cq2PivQ6.js","assets/PhSpinner-CZMtAFdX.js","assets/PhTrash-BamrmMsN.js","assets/PhUser-A2fxqIV0.js","assets/PhWarning-CpkID9oi.js","assets/PhWarningCircle-Cm58gXb9.js","assets/PhX-C3b4cCEy.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{Q as it,U as rt,s as q,r as w,i as $,d as h,q as ot,w as d,K as p,V as at,e as x,j as Z}from"./core-
|
|
2
|
+
import{Q as it,U as rt,s as q,r as w,i as $,d as h,q as ot,w as d,K as p,V as at,e as x,j as Z}from"./core-B6lNkxYF.js";import{_ as c}from"./index-47xbhgOb.js";const W=".",E={getSpacingStyles(t,e){if(Array.isArray(t))return t[e]?`var(--apkt-spacing-${t[e]})`:void 0;if(typeof t=="string")return`var(--apkt-spacing-${t})`},getFormattedDate(t){return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(t)},formatCurrency(t=0,e={}){const i=Number(t);return isNaN(i)?"$0.00":new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2,...e}).format(i)},getHostName(t){try{return new URL(t).hostname}catch{return""}},getTruncateString({string:t,charsStart:e,charsEnd:i,truncate:o}){return t.length<=e+i?t:o==="end"?`${t.substring(0,e)}...`:o==="start"?`...${t.substring(t.length-i)}`:`${t.substring(0,Math.floor(e))}...${t.substring(t.length-Math.floor(i))}`},generateAvatarColors(t){const i=t.toLowerCase().replace(/^0x/iu,"").replace(/[^a-f0-9]/gu,"").substring(0,6).padEnd(6,"0"),o=this.hexToRgb(i),a=getComputedStyle(document.documentElement).getPropertyValue("--w3m-border-radius-master"),n=100-3*Number(a?.replace("px","")),l=`${n}% ${n}% at 65% 40%`,u=[];for(let v=0;v<5;v+=1){const S=this.tintColor(o,.15*v);u.push(`rgb(${S[0]}, ${S[1]}, ${S[2]})`)}return`
|
|
3
3
|
--local-color-1: ${u[0]};
|
|
4
4
|
--local-color-2: ${u[1]};
|
|
5
5
|
--local-color-3: ${u[2]};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{N as h,t as Pe,u as Ie,R as u,S as g,b as te,c as O,E as _,v as oe,x as ne,n as m,B as j,a as de,y as M,z as G,D as Fe,m as pe,F as Le,C as re,G as Ee,I as Ne,M as P,J as We,e as S,r as Z,i as k,d as c,j as Re,K as ae,h as ue,f as He,L as F,O as b,s as Oe,A as ee,T as je,P as Me}from"./core-DM41dI09.js";import{c as y,n as p,o as I,r as w,U as De}from"./index-0Zyr8vlL.js";import"./index-C5knDh0m.js";import"./index-DJehiP7F.js";const D={getGasPriceInEther(e,t){const o=t*e;return Number(o)/1e18},getGasPriceInUSD(e,t,o){const i=D.getGasPriceInEther(t,o);return h.bigNumber(e).times(i).toNumber()},getPriceImpact({sourceTokenAmount:e,sourceTokenPriceInUSD:t,toTokenPriceInUSD:o,toTokenAmount:i}){const a=h.bigNumber(e).times(t),n=h.bigNumber(i).times(o);return a.minus(n).div(a).times(100).toNumber()},getMaxSlippage(e,t){const o=h.bigNumber(e).div(100);return h.multiply(t,o).toNumber()},getProviderFee(e,t=.0085){return h.bigNumber(e).times(t).toString()},isInsufficientNetworkTokenForGas(e,t){const o=t||"0";return h.bigNumber(e).eq(0)?!0:h.bigNumber(h.bigNumber(o)).gt(e)},isInsufficientSourceTokenForSwap(e,t,o){const i=o?.find(n=>n.address===t)?.quantity?.numeric;return h.bigNumber(i||"0").lt(e)}},xe=15e4,Ve=6,T={initializing:!1,initialized:!1,loadingPrices:!1,loadingQuote:!1,loadingApprovalTransaction:!1,loadingBuildTransaction:!1,loadingTransaction:!1,switchingTokens:!1,fetchError:!1,approvalTransaction:void 0,swapTransaction:void 0,transactionError:void 0,sourceToken:void 0,sourceTokenAmount:"",sourceTokenPriceInUSD:0,toToken:void 0,toTokenAmount:"",toTokenPriceInUSD:0,networkPrice:"0",networkBalanceInUSD:"0",networkTokenSymbol:"",inputError:void 0,slippage:pe.CONVERT_SLIPPAGE_TOLERANCE,tokens:void 0,popularTokens:void 0,suggestedTokens:void 0,foundTokens:void 0,myTokensWithBalance:void 0,tokensPriceMap:{},gasFee:"0",gasPriceInUSD:0,priceImpact:void 0,maxSlippage:void 0,providerFee:void 0},r=Ie({...T}),ie={state:r,subscribe(e){return Ne(r,()=>e(r))},subscribeKey(e,t){return Ee(r,e,t)},getParams(){const e=m.state.activeChain,t=m.getAccountData(e)?.caipAddress??m.state.activeCaipAddress,o=de.getPlainAddress(t),i=Le(),a=re.getConnectorId(m.state.activeChain);if(!o)throw new Error("No address found to swap the tokens from.");const n=!r.toToken?.address||!r.toToken?.decimals,s=!r.sourceToken?.address||!r.sourceToken?.decimals||!h.bigNumber(r.sourceTokenAmount).gt(0),l=!r.sourceTokenAmount;return{networkAddress:i,fromAddress:o,fromCaipAddress:t,sourceTokenAddress:r.sourceToken?.address,toTokenAddress:r.toToken?.address,toTokenAmount:r.toTokenAmount,toTokenDecimals:r.toToken?.decimals,sourceTokenAmount:r.sourceTokenAmount,sourceTokenDecimals:r.sourceToken?.decimals,invalidToToken:n,invalidSourceToken:s,invalidSourceTokenAmount:l,availableToSwap:t&&!n&&!s&&!l,isAuthConnector:a===O.CONNECTOR_ID.AUTH}},async setSourceToken(e){if(!e){r.sourceToken=e,r.sourceTokenAmount="",r.sourceTokenPriceInUSD=0;return}r.sourceToken=e,await d.setTokenPrice(e.address,"sourceToken")},setSourceTokenAmount(e){r.sourceTokenAmount=e},async setToToken(e){if(!e){r.toToken=e,r.toTokenAmount="",r.toTokenPriceInUSD=0;return}r.toToken=e,await d.setTokenPrice(e.address,"toToken")},setToTokenAmount(e){r.toTokenAmount=e?h.toFixed(e,Ve):""},async setTokenPrice(e,t){let o=r.tokensPriceMap[e]||0;o||(r.loadingPrices=!0,o=await d.getAddressPrice(e)),t==="sourceToken"?r.sourceTokenPriceInUSD=o:t==="toToken"&&(r.toTokenPriceInUSD=o),r.loadingPrices&&(r.loadingPrices=!1),d.getParams().availableToSwap&&!r.switchingTokens&&d.swapTokens()},async switchTokens(){if(!(r.initializing||!r.initialized||r.switchingTokens)){r.switchingTokens=!0;try{const e=r.toToken?{...r.toToken}:void 0,t=r.sourceToken?{...r.sourceToken}:void 0,o=e&&r.toTokenAmount===""?"1":r.toTokenAmount;d.setSourceTokenAmount(o),d.setToTokenAmount(""),await d.setSourceToken(e),await d.setToToken(t),r.switchingTokens=!1,d.swapTokens()}catch(e){throw r.switchingTokens=!1,e}}},resetState(){r.myTokensWithBalance=T.myTokensWithBalance,r.tokensPriceMap=T.tokensPriceMap,r.initialized=T.initialized,r.initializing=T.initializing,r.switchingTokens=T.switchingTokens,r.sourceToken=T.sourceToken,r.sourceTokenAmount=T.sourceTokenAmount,r.sourceTokenPriceInUSD=T.sourceTokenPriceInUSD,r.toToken=T.toToken,r.toTokenAmount=T.toTokenAmount,r.toTokenPriceInUSD=T.toTokenPriceInUSD,r.networkPrice=T.networkPrice,r.networkTokenSymbol=T.networkTokenSymbol,r.networkBalanceInUSD=T.networkBalanceInUSD,r.inputError=T.inputError},resetValues(){const{networkAddress:e}=d.getParams(),t=r.tokens?.find(o=>o.address===e);d.setSourceToken(t),d.setToToken(void 0)},getApprovalLoadingState(){return r.loadingApprovalTransaction},clearError(){r.transactionError=void 0},async initializeState(){if(!r.initializing){if(r.initializing=!0,!r.initialized)try{await d.fetchTokens(),r.initialized=!0}catch{r.initialized=!1,g.showError("Failed to initialize swap"),u.goBack()}r.initializing=!1}},async fetchTokens(){const{networkAddress:e}=d.getParams();await d.getNetworkTokenPrice(),await d.getMyTokensWithBalance();const t=r.myTokensWithBalance?.find(o=>o.address===e);t&&(r.networkTokenSymbol=t.symbol,d.setSourceToken(t),d.setSourceTokenAmount("0"))},async getTokenList(){const e=m.state.activeCaipNetwork?.caipNetworkId;if(!(r.caipNetworkId===e&&r.tokens))try{r.tokensLoading=!0;const t=await M.getTokenList(e);r.tokens=t,r.caipNetworkId=e,r.popularTokens=t.sort((s,l)=>s.symbol<l.symbol?-1:s.symbol>l.symbol?1:0);const i=(e&&pe.SUGGESTED_TOKENS_BY_CHAIN?.[e]||[]).map(s=>t.find(l=>l.symbol===s)).filter(s=>!!s),n=(pe.SWAP_SUGGESTED_TOKENS||[]).map(s=>t.find(l=>l.symbol===s)).filter(s=>!!s).filter(s=>!i.some(l=>l.address===s.address));r.suggestedTokens=[...i,...n]}catch{r.tokens=[],r.popularTokens=[],r.suggestedTokens=[]}finally{r.tokensLoading=!1}},async getAddressPrice(e){const t=r.tokensPriceMap[e];if(t)return t;const i=(await j.fetchTokenPrice({addresses:[e]}))?.fungibles||[],n=[...r.tokens||[],...r.myTokensWithBalance||[]]?.find(f=>f.address===e)?.symbol,s=i.find(f=>f.symbol.toLowerCase()===n?.toLowerCase())?.price||0,l=parseFloat(s.toString());return r.tokensPriceMap[e]=l,l},async getNetworkTokenPrice(){const{networkAddress:e}=d.getParams(),o=(await j.fetchTokenPrice({addresses:[e]}).catch(()=>(g.showError("Failed to fetch network token price"),{fungibles:[]}))).fungibles?.[0],i=o?.price.toString()||"0";r.tokensPriceMap[e]=parseFloat(i),r.networkTokenSymbol=o?.symbol||"",r.networkPrice=i},async getMyTokensWithBalance(e){const t=await Fe.getMyTokensWithBalance(e),o=M.mapBalancesToSwapTokens(t);o&&(await d.getInitialGasPrice(),d.setBalances(o))},setBalances(e){const{networkAddress:t}=d.getParams(),o=m.state.activeCaipNetwork;if(!o)return;const i=e.find(a=>a.address===t);e.forEach(a=>{r.tokensPriceMap[a.address]=a.price||0}),r.myTokensWithBalance=e.filter(a=>a.address.startsWith(o.caipNetworkId)),r.networkBalanceInUSD=i?h.multiply(i.quantity.numeric,i.price).toString():"0"},async getInitialGasPrice(){const e=await M.fetchGasPrice();if(!e)return{gasPrice:null,gasPriceInUSD:null};switch(m.state?.activeCaipNetwork?.chainNamespace){case O.CHAIN.SOLANA:return r.gasFee=e.standard??"0",r.gasPriceInUSD=h.multiply(e.standard,r.networkPrice).div(1e9).toNumber(),{gasPrice:BigInt(r.gasFee),gasPriceInUSD:Number(r.gasPriceInUSD)};case O.CHAIN.EVM:default:const t=e.standard??"0",o=BigInt(t),i=BigInt(xe),a=D.getGasPriceInUSD(r.networkPrice,i,o);return r.gasFee=t,r.gasPriceInUSD=a,{gasPrice:o,gasPriceInUSD:a}}},async swapTokens(){const e=m.getAccountData()?.address,t=r.sourceToken,o=r.toToken,i=h.bigNumber(r.sourceTokenAmount).gt(0);if(i||d.setToTokenAmount(""),!o||!t||r.loadingPrices||!i||!e)return;r.loadingQuote=!0;const a=h.bigNumber(r.sourceTokenAmount).times(10**t.decimals).round(0);try{const n=await j.fetchSwapQuote({userAddress:e,from:t.address,to:o.address,gasPrice:r.gasFee,amount:a.toString()});r.loadingQuote=!1;const s=n?.quotes?.[0]?.toAmount;if(!s){G.open({displayMessage:"Incorrect amount",debugMessage:"Please enter a valid amount"},"error");return}const l=h.bigNumber(s).div(10**o.decimals).toString();d.setToTokenAmount(l),d.hasInsufficientToken(r.sourceTokenAmount,t.address)?r.inputError="Insufficient balance":(r.inputError=void 0,d.setTransactionDetails())}catch(n){const s=await M.handleSwapError(n);r.loadingQuote=!1,r.inputError=s||"Insufficient balance"}},async getTransaction(){const{fromCaipAddress:e,availableToSwap:t}=d.getParams(),o=r.sourceToken,i=r.toToken;if(!(!e||!t||!o||!i||r.loadingQuote))try{r.loadingBuildTransaction=!0;const a=await M.fetchSwapAllowance({userAddress:e,tokenAddress:o.address,sourceTokenAmount:r.sourceTokenAmount,sourceTokenDecimals:o.decimals});let n;return a?n=await d.createSwapTransaction():n=await d.createAllowanceTransaction(),r.loadingBuildTransaction=!1,r.fetchError=!1,n}catch{u.goBack(),g.showError("Failed to check allowance"),r.loadingBuildTransaction=!1,r.approvalTransaction=void 0,r.swapTransaction=void 0,r.fetchError=!0;return}},async createAllowanceTransaction(){const{fromCaipAddress:e,sourceTokenAddress:t,toTokenAddress:o}=d.getParams();if(!(!e||!o)){if(!t)throw new Error("createAllowanceTransaction - No source token address found.");try{const i=await j.generateApproveCalldata({from:t,to:o,userAddress:e}),a=de.getPlainAddress(i.tx.from);if(!a)throw new Error("SwapController:createAllowanceTransaction - address is required");const n={data:i.tx.data,to:a,gasPrice:BigInt(i.tx.eip155.gasPrice),value:BigInt(i.tx.value),toAmount:r.toTokenAmount};return r.swapTransaction=void 0,r.approvalTransaction={data:n.data,to:n.to,gasPrice:n.gasPrice,value:n.value,toAmount:n.toAmount},{data:n.data,to:n.to,gasPrice:n.gasPrice,value:n.value,toAmount:n.toAmount}}catch{u.goBack(),g.showError("Failed to create approval transaction"),r.approvalTransaction=void 0,r.swapTransaction=void 0,r.fetchError=!0;return}}},async createSwapTransaction(){const{networkAddress:e,fromCaipAddress:t,sourceTokenAmount:o}=d.getParams(),i=r.sourceToken,a=r.toToken;if(!t||!o||!i||!a)return;const n=te.parseUnits(o,i.decimals)?.toString();try{const s=await j.generateSwapCalldata({userAddress:t,from:i.address,to:a.address,amount:n,disableEstimate:!0}),l=i.address===e,f=BigInt(s.tx.eip155.gas),ye=BigInt(s.tx.eip155.gasPrice),ke=de.getPlainAddress(s.tx.to);if(!ke)throw new Error("SwapController:createSwapTransaction - address is required");const Te={data:s.tx.data,to:ke,gas:f,gasPrice:ye,value:BigInt(l?n??"0":"0"),toAmount:r.toTokenAmount};return r.gasPriceInUSD=D.getGasPriceInUSD(r.networkPrice,f,ye),r.approvalTransaction=void 0,r.swapTransaction=Te,Te}catch{u.goBack(),g.showError("Failed to create transaction"),r.approvalTransaction=void 0,r.swapTransaction=void 0,r.fetchError=!0;return}},onEmbeddedWalletApprovalSuccess(){g.showLoading("Approve limit increase in your wallet"),u.replace("SwapPreview")},async sendTransactionForApproval(e){const{fromAddress:t,isAuthConnector:o}=d.getParams();r.loadingApprovalTransaction=!0,o?u.pushTransactionStack({onSuccess:d.onEmbeddedWalletApprovalSuccess}):g.showLoading("Approve limit increase in your wallet");try{await te.sendTransaction({address:t,to:e.to,data:e.data,value:e.value,chainNamespace:O.CHAIN.EVM}),await d.swapTokens(),await d.getTransaction(),r.approvalTransaction=void 0,r.loadingApprovalTransaction=!1}catch(a){const n=a;r.transactionError=n?.displayMessage,r.loadingApprovalTransaction=!1,g.showError(n?.displayMessage||"Transaction error"),_.sendEvent({type:"track",event:"SWAP_APPROVAL_ERROR",properties:{message:n?.displayMessage||n?.message||"Unknown",network:m.state.activeCaipNetwork?.caipNetworkId||"",swapFromToken:d.state.sourceToken?.symbol||"",swapToToken:d.state.toToken?.symbol||"",swapFromAmount:d.state.sourceTokenAmount||"",swapToAmount:d.state.toTokenAmount||"",isSmartAccount:oe(O.CHAIN.EVM)===ne.ACCOUNT_TYPES.SMART_ACCOUNT}})}},async sendTransactionForSwap(e){if(!e)return;const{fromAddress:t,toTokenAmount:o,isAuthConnector:i}=d.getParams();r.loadingTransaction=!0;const a=`Swapping ${r.sourceToken?.symbol} to ${h.formatNumberToLocalString(o,3)} ${r.toToken?.symbol}`,n=`Swapped ${r.sourceToken?.symbol} to ${h.formatNumberToLocalString(o,3)} ${r.toToken?.symbol}`;i?u.pushTransactionStack({onSuccess(){u.replace("Account"),g.showLoading(a),ie.resetState()}}):g.showLoading("Confirm transaction in your wallet");try{const s=[r.sourceToken?.address,r.toToken?.address].join(","),l=await te.sendTransaction({address:t,to:e.to,data:e.data,value:e.value,chainNamespace:O.CHAIN.EVM});return r.loadingTransaction=!1,g.showSuccess(n),_.sendEvent({type:"track",event:"SWAP_SUCCESS",properties:{network:m.state.activeCaipNetwork?.caipNetworkId||"",swapFromToken:d.state.sourceToken?.symbol||"",swapToToken:d.state.toToken?.symbol||"",swapFromAmount:d.state.sourceTokenAmount||"",swapToAmount:d.state.toTokenAmount||"",isSmartAccount:oe(O.CHAIN.EVM)===ne.ACCOUNT_TYPES.SMART_ACCOUNT}}),ie.resetState(),i||u.replace("Account"),ie.getMyTokensWithBalance(s),l}catch(s){const l=s;r.transactionError=l?.displayMessage,r.loadingTransaction=!1,g.showError(l?.displayMessage||"Transaction error"),_.sendEvent({type:"track",event:"SWAP_ERROR",properties:{message:l?.displayMessage||l?.message||"Unknown",network:m.state.activeCaipNetwork?.caipNetworkId||"",swapFromToken:d.state.sourceToken?.symbol||"",swapToToken:d.state.toToken?.symbol||"",swapFromAmount:d.state.sourceTokenAmount||"",swapToAmount:d.state.toTokenAmount||"",isSmartAccount:oe(O.CHAIN.EVM)===ne.ACCOUNT_TYPES.SMART_ACCOUNT}});return}},hasInsufficientToken(e,t){return D.isInsufficientSourceTokenForSwap(e,t,r.myTokensWithBalance)},setTransactionDetails(){const{toTokenAddress:e,toTokenDecimals:t}=d.getParams();!e||!t||(r.gasPriceInUSD=D.getGasPriceInUSD(r.networkPrice,BigInt(r.gasFee),BigInt(xe)),r.priceImpact=D.getPriceImpact({sourceTokenAmount:r.sourceTokenAmount,sourceTokenPriceInUSD:r.sourceTokenPriceInUSD,toTokenPriceInUSD:r.toTokenPriceInUSD,toTokenAmount:r.toTokenAmount}),r.maxSlippage=D.getMaxSlippage(r.slippage,r.toTokenAmount),r.providerFee=D.getProviderFee(r.sourceTokenAmount))}},d=Pe(ie),A=Ie({message:"",open:!1,triggerRect:{width:0,height:0,top:0,left:0},variant:"shade"}),Ge={state:A,subscribe(e){return Ne(A,()=>e(A))},subscribeKey(e,t){return Ee(A,e,t)},showTooltip({message:e,triggerRect:t,variant:o}){A.open=!0,A.message=e,A.triggerRect=t,A.variant=o},hide(){A.open=!1,A.message="",A.triggerRect={width:0,height:0,top:0,left:0}}},V=Pe(Ge),_e={isUnsupportedChainView(){return u.state.view==="UnsupportedChain"||u.state.view==="SwitchNetwork"&&u.state.history.includes("UnsupportedChain")},async safeClose(){if(this.isUnsupportedChainView()){P.shake();return}if(await We.isSIWXCloseDisabled()){P.shake();return}(u.state.view==="DataCapture"||u.state.view==="DataCaptureOtpConfirm")&&te.disconnect(),P.close()}},Ke=S`
|
|
1
|
+
import{N as h,t as Pe,u as Ie,R as u,S as g,b as te,c as O,E as _,v as oe,x as ne,n as m,B as j,a as de,y as M,z as G,D as Fe,m as pe,F as Le,C as re,G as Ee,I as Ne,M as P,J as We,e as S,r as Z,i as k,d as c,j as Re,K as ae,h as ue,f as He,L as F,O as b,s as Oe,A as ee,T as je,P as Me}from"./core-B6lNkxYF.js";import{c as y,n as p,o as I,r as w,U as De}from"./index-Db7sy-a4.js";import"./index-47xbhgOb.js";import"./index-BoYbIA9m.js";const D={getGasPriceInEther(e,t){const o=t*e;return Number(o)/1e18},getGasPriceInUSD(e,t,o){const i=D.getGasPriceInEther(t,o);return h.bigNumber(e).times(i).toNumber()},getPriceImpact({sourceTokenAmount:e,sourceTokenPriceInUSD:t,toTokenPriceInUSD:o,toTokenAmount:i}){const a=h.bigNumber(e).times(t),n=h.bigNumber(i).times(o);return a.minus(n).div(a).times(100).toNumber()},getMaxSlippage(e,t){const o=h.bigNumber(e).div(100);return h.multiply(t,o).toNumber()},getProviderFee(e,t=.0085){return h.bigNumber(e).times(t).toString()},isInsufficientNetworkTokenForGas(e,t){const o=t||"0";return h.bigNumber(e).eq(0)?!0:h.bigNumber(h.bigNumber(o)).gt(e)},isInsufficientSourceTokenForSwap(e,t,o){const i=o?.find(n=>n.address===t)?.quantity?.numeric;return h.bigNumber(i||"0").lt(e)}},xe=15e4,Ve=6,T={initializing:!1,initialized:!1,loadingPrices:!1,loadingQuote:!1,loadingApprovalTransaction:!1,loadingBuildTransaction:!1,loadingTransaction:!1,switchingTokens:!1,fetchError:!1,approvalTransaction:void 0,swapTransaction:void 0,transactionError:void 0,sourceToken:void 0,sourceTokenAmount:"",sourceTokenPriceInUSD:0,toToken:void 0,toTokenAmount:"",toTokenPriceInUSD:0,networkPrice:"0",networkBalanceInUSD:"0",networkTokenSymbol:"",inputError:void 0,slippage:pe.CONVERT_SLIPPAGE_TOLERANCE,tokens:void 0,popularTokens:void 0,suggestedTokens:void 0,foundTokens:void 0,myTokensWithBalance:void 0,tokensPriceMap:{},gasFee:"0",gasPriceInUSD:0,priceImpact:void 0,maxSlippage:void 0,providerFee:void 0},r=Ie({...T}),ie={state:r,subscribe(e){return Ne(r,()=>e(r))},subscribeKey(e,t){return Ee(r,e,t)},getParams(){const e=m.state.activeChain,t=m.getAccountData(e)?.caipAddress??m.state.activeCaipAddress,o=de.getPlainAddress(t),i=Le(),a=re.getConnectorId(m.state.activeChain);if(!o)throw new Error("No address found to swap the tokens from.");const n=!r.toToken?.address||!r.toToken?.decimals,s=!r.sourceToken?.address||!r.sourceToken?.decimals||!h.bigNumber(r.sourceTokenAmount).gt(0),l=!r.sourceTokenAmount;return{networkAddress:i,fromAddress:o,fromCaipAddress:t,sourceTokenAddress:r.sourceToken?.address,toTokenAddress:r.toToken?.address,toTokenAmount:r.toTokenAmount,toTokenDecimals:r.toToken?.decimals,sourceTokenAmount:r.sourceTokenAmount,sourceTokenDecimals:r.sourceToken?.decimals,invalidToToken:n,invalidSourceToken:s,invalidSourceTokenAmount:l,availableToSwap:t&&!n&&!s&&!l,isAuthConnector:a===O.CONNECTOR_ID.AUTH}},async setSourceToken(e){if(!e){r.sourceToken=e,r.sourceTokenAmount="",r.sourceTokenPriceInUSD=0;return}r.sourceToken=e,await d.setTokenPrice(e.address,"sourceToken")},setSourceTokenAmount(e){r.sourceTokenAmount=e},async setToToken(e){if(!e){r.toToken=e,r.toTokenAmount="",r.toTokenPriceInUSD=0;return}r.toToken=e,await d.setTokenPrice(e.address,"toToken")},setToTokenAmount(e){r.toTokenAmount=e?h.toFixed(e,Ve):""},async setTokenPrice(e,t){let o=r.tokensPriceMap[e]||0;o||(r.loadingPrices=!0,o=await d.getAddressPrice(e)),t==="sourceToken"?r.sourceTokenPriceInUSD=o:t==="toToken"&&(r.toTokenPriceInUSD=o),r.loadingPrices&&(r.loadingPrices=!1),d.getParams().availableToSwap&&!r.switchingTokens&&d.swapTokens()},async switchTokens(){if(!(r.initializing||!r.initialized||r.switchingTokens)){r.switchingTokens=!0;try{const e=r.toToken?{...r.toToken}:void 0,t=r.sourceToken?{...r.sourceToken}:void 0,o=e&&r.toTokenAmount===""?"1":r.toTokenAmount;d.setSourceTokenAmount(o),d.setToTokenAmount(""),await d.setSourceToken(e),await d.setToToken(t),r.switchingTokens=!1,d.swapTokens()}catch(e){throw r.switchingTokens=!1,e}}},resetState(){r.myTokensWithBalance=T.myTokensWithBalance,r.tokensPriceMap=T.tokensPriceMap,r.initialized=T.initialized,r.initializing=T.initializing,r.switchingTokens=T.switchingTokens,r.sourceToken=T.sourceToken,r.sourceTokenAmount=T.sourceTokenAmount,r.sourceTokenPriceInUSD=T.sourceTokenPriceInUSD,r.toToken=T.toToken,r.toTokenAmount=T.toTokenAmount,r.toTokenPriceInUSD=T.toTokenPriceInUSD,r.networkPrice=T.networkPrice,r.networkTokenSymbol=T.networkTokenSymbol,r.networkBalanceInUSD=T.networkBalanceInUSD,r.inputError=T.inputError},resetValues(){const{networkAddress:e}=d.getParams(),t=r.tokens?.find(o=>o.address===e);d.setSourceToken(t),d.setToToken(void 0)},getApprovalLoadingState(){return r.loadingApprovalTransaction},clearError(){r.transactionError=void 0},async initializeState(){if(!r.initializing){if(r.initializing=!0,!r.initialized)try{await d.fetchTokens(),r.initialized=!0}catch{r.initialized=!1,g.showError("Failed to initialize swap"),u.goBack()}r.initializing=!1}},async fetchTokens(){const{networkAddress:e}=d.getParams();await d.getNetworkTokenPrice(),await d.getMyTokensWithBalance();const t=r.myTokensWithBalance?.find(o=>o.address===e);t&&(r.networkTokenSymbol=t.symbol,d.setSourceToken(t),d.setSourceTokenAmount("0"))},async getTokenList(){const e=m.state.activeCaipNetwork?.caipNetworkId;if(!(r.caipNetworkId===e&&r.tokens))try{r.tokensLoading=!0;const t=await M.getTokenList(e);r.tokens=t,r.caipNetworkId=e,r.popularTokens=t.sort((s,l)=>s.symbol<l.symbol?-1:s.symbol>l.symbol?1:0);const i=(e&&pe.SUGGESTED_TOKENS_BY_CHAIN?.[e]||[]).map(s=>t.find(l=>l.symbol===s)).filter(s=>!!s),n=(pe.SWAP_SUGGESTED_TOKENS||[]).map(s=>t.find(l=>l.symbol===s)).filter(s=>!!s).filter(s=>!i.some(l=>l.address===s.address));r.suggestedTokens=[...i,...n]}catch{r.tokens=[],r.popularTokens=[],r.suggestedTokens=[]}finally{r.tokensLoading=!1}},async getAddressPrice(e){const t=r.tokensPriceMap[e];if(t)return t;const i=(await j.fetchTokenPrice({addresses:[e]}))?.fungibles||[],n=[...r.tokens||[],...r.myTokensWithBalance||[]]?.find(f=>f.address===e)?.symbol,s=i.find(f=>f.symbol.toLowerCase()===n?.toLowerCase())?.price||0,l=parseFloat(s.toString());return r.tokensPriceMap[e]=l,l},async getNetworkTokenPrice(){const{networkAddress:e}=d.getParams(),o=(await j.fetchTokenPrice({addresses:[e]}).catch(()=>(g.showError("Failed to fetch network token price"),{fungibles:[]}))).fungibles?.[0],i=o?.price.toString()||"0";r.tokensPriceMap[e]=parseFloat(i),r.networkTokenSymbol=o?.symbol||"",r.networkPrice=i},async getMyTokensWithBalance(e){const t=await Fe.getMyTokensWithBalance(e),o=M.mapBalancesToSwapTokens(t);o&&(await d.getInitialGasPrice(),d.setBalances(o))},setBalances(e){const{networkAddress:t}=d.getParams(),o=m.state.activeCaipNetwork;if(!o)return;const i=e.find(a=>a.address===t);e.forEach(a=>{r.tokensPriceMap[a.address]=a.price||0}),r.myTokensWithBalance=e.filter(a=>a.address.startsWith(o.caipNetworkId)),r.networkBalanceInUSD=i?h.multiply(i.quantity.numeric,i.price).toString():"0"},async getInitialGasPrice(){const e=await M.fetchGasPrice();if(!e)return{gasPrice:null,gasPriceInUSD:null};switch(m.state?.activeCaipNetwork?.chainNamespace){case O.CHAIN.SOLANA:return r.gasFee=e.standard??"0",r.gasPriceInUSD=h.multiply(e.standard,r.networkPrice).div(1e9).toNumber(),{gasPrice:BigInt(r.gasFee),gasPriceInUSD:Number(r.gasPriceInUSD)};case O.CHAIN.EVM:default:const t=e.standard??"0",o=BigInt(t),i=BigInt(xe),a=D.getGasPriceInUSD(r.networkPrice,i,o);return r.gasFee=t,r.gasPriceInUSD=a,{gasPrice:o,gasPriceInUSD:a}}},async swapTokens(){const e=m.getAccountData()?.address,t=r.sourceToken,o=r.toToken,i=h.bigNumber(r.sourceTokenAmount).gt(0);if(i||d.setToTokenAmount(""),!o||!t||r.loadingPrices||!i||!e)return;r.loadingQuote=!0;const a=h.bigNumber(r.sourceTokenAmount).times(10**t.decimals).round(0);try{const n=await j.fetchSwapQuote({userAddress:e,from:t.address,to:o.address,gasPrice:r.gasFee,amount:a.toString()});r.loadingQuote=!1;const s=n?.quotes?.[0]?.toAmount;if(!s){G.open({displayMessage:"Incorrect amount",debugMessage:"Please enter a valid amount"},"error");return}const l=h.bigNumber(s).div(10**o.decimals).toString();d.setToTokenAmount(l),d.hasInsufficientToken(r.sourceTokenAmount,t.address)?r.inputError="Insufficient balance":(r.inputError=void 0,d.setTransactionDetails())}catch(n){const s=await M.handleSwapError(n);r.loadingQuote=!1,r.inputError=s||"Insufficient balance"}},async getTransaction(){const{fromCaipAddress:e,availableToSwap:t}=d.getParams(),o=r.sourceToken,i=r.toToken;if(!(!e||!t||!o||!i||r.loadingQuote))try{r.loadingBuildTransaction=!0;const a=await M.fetchSwapAllowance({userAddress:e,tokenAddress:o.address,sourceTokenAmount:r.sourceTokenAmount,sourceTokenDecimals:o.decimals});let n;return a?n=await d.createSwapTransaction():n=await d.createAllowanceTransaction(),r.loadingBuildTransaction=!1,r.fetchError=!1,n}catch{u.goBack(),g.showError("Failed to check allowance"),r.loadingBuildTransaction=!1,r.approvalTransaction=void 0,r.swapTransaction=void 0,r.fetchError=!0;return}},async createAllowanceTransaction(){const{fromCaipAddress:e,sourceTokenAddress:t,toTokenAddress:o}=d.getParams();if(!(!e||!o)){if(!t)throw new Error("createAllowanceTransaction - No source token address found.");try{const i=await j.generateApproveCalldata({from:t,to:o,userAddress:e}),a=de.getPlainAddress(i.tx.from);if(!a)throw new Error("SwapController:createAllowanceTransaction - address is required");const n={data:i.tx.data,to:a,gasPrice:BigInt(i.tx.eip155.gasPrice),value:BigInt(i.tx.value),toAmount:r.toTokenAmount};return r.swapTransaction=void 0,r.approvalTransaction={data:n.data,to:n.to,gasPrice:n.gasPrice,value:n.value,toAmount:n.toAmount},{data:n.data,to:n.to,gasPrice:n.gasPrice,value:n.value,toAmount:n.toAmount}}catch{u.goBack(),g.showError("Failed to create approval transaction"),r.approvalTransaction=void 0,r.swapTransaction=void 0,r.fetchError=!0;return}}},async createSwapTransaction(){const{networkAddress:e,fromCaipAddress:t,sourceTokenAmount:o}=d.getParams(),i=r.sourceToken,a=r.toToken;if(!t||!o||!i||!a)return;const n=te.parseUnits(o,i.decimals)?.toString();try{const s=await j.generateSwapCalldata({userAddress:t,from:i.address,to:a.address,amount:n,disableEstimate:!0}),l=i.address===e,f=BigInt(s.tx.eip155.gas),ye=BigInt(s.tx.eip155.gasPrice),ke=de.getPlainAddress(s.tx.to);if(!ke)throw new Error("SwapController:createSwapTransaction - address is required");const Te={data:s.tx.data,to:ke,gas:f,gasPrice:ye,value:BigInt(l?n??"0":"0"),toAmount:r.toTokenAmount};return r.gasPriceInUSD=D.getGasPriceInUSD(r.networkPrice,f,ye),r.approvalTransaction=void 0,r.swapTransaction=Te,Te}catch{u.goBack(),g.showError("Failed to create transaction"),r.approvalTransaction=void 0,r.swapTransaction=void 0,r.fetchError=!0;return}},onEmbeddedWalletApprovalSuccess(){g.showLoading("Approve limit increase in your wallet"),u.replace("SwapPreview")},async sendTransactionForApproval(e){const{fromAddress:t,isAuthConnector:o}=d.getParams();r.loadingApprovalTransaction=!0,o?u.pushTransactionStack({onSuccess:d.onEmbeddedWalletApprovalSuccess}):g.showLoading("Approve limit increase in your wallet");try{await te.sendTransaction({address:t,to:e.to,data:e.data,value:e.value,chainNamespace:O.CHAIN.EVM}),await d.swapTokens(),await d.getTransaction(),r.approvalTransaction=void 0,r.loadingApprovalTransaction=!1}catch(a){const n=a;r.transactionError=n?.displayMessage,r.loadingApprovalTransaction=!1,g.showError(n?.displayMessage||"Transaction error"),_.sendEvent({type:"track",event:"SWAP_APPROVAL_ERROR",properties:{message:n?.displayMessage||n?.message||"Unknown",network:m.state.activeCaipNetwork?.caipNetworkId||"",swapFromToken:d.state.sourceToken?.symbol||"",swapToToken:d.state.toToken?.symbol||"",swapFromAmount:d.state.sourceTokenAmount||"",swapToAmount:d.state.toTokenAmount||"",isSmartAccount:oe(O.CHAIN.EVM)===ne.ACCOUNT_TYPES.SMART_ACCOUNT}})}},async sendTransactionForSwap(e){if(!e)return;const{fromAddress:t,toTokenAmount:o,isAuthConnector:i}=d.getParams();r.loadingTransaction=!0;const a=`Swapping ${r.sourceToken?.symbol} to ${h.formatNumberToLocalString(o,3)} ${r.toToken?.symbol}`,n=`Swapped ${r.sourceToken?.symbol} to ${h.formatNumberToLocalString(o,3)} ${r.toToken?.symbol}`;i?u.pushTransactionStack({onSuccess(){u.replace("Account"),g.showLoading(a),ie.resetState()}}):g.showLoading("Confirm transaction in your wallet");try{const s=[r.sourceToken?.address,r.toToken?.address].join(","),l=await te.sendTransaction({address:t,to:e.to,data:e.data,value:e.value,chainNamespace:O.CHAIN.EVM});return r.loadingTransaction=!1,g.showSuccess(n),_.sendEvent({type:"track",event:"SWAP_SUCCESS",properties:{network:m.state.activeCaipNetwork?.caipNetworkId||"",swapFromToken:d.state.sourceToken?.symbol||"",swapToToken:d.state.toToken?.symbol||"",swapFromAmount:d.state.sourceTokenAmount||"",swapToAmount:d.state.toTokenAmount||"",isSmartAccount:oe(O.CHAIN.EVM)===ne.ACCOUNT_TYPES.SMART_ACCOUNT}}),ie.resetState(),i||u.replace("Account"),ie.getMyTokensWithBalance(s),l}catch(s){const l=s;r.transactionError=l?.displayMessage,r.loadingTransaction=!1,g.showError(l?.displayMessage||"Transaction error"),_.sendEvent({type:"track",event:"SWAP_ERROR",properties:{message:l?.displayMessage||l?.message||"Unknown",network:m.state.activeCaipNetwork?.caipNetworkId||"",swapFromToken:d.state.sourceToken?.symbol||"",swapToToken:d.state.toToken?.symbol||"",swapFromAmount:d.state.sourceTokenAmount||"",swapToAmount:d.state.toTokenAmount||"",isSmartAccount:oe(O.CHAIN.EVM)===ne.ACCOUNT_TYPES.SMART_ACCOUNT}});return}},hasInsufficientToken(e,t){return D.isInsufficientSourceTokenForSwap(e,t,r.myTokensWithBalance)},setTransactionDetails(){const{toTokenAddress:e,toTokenDecimals:t}=d.getParams();!e||!t||(r.gasPriceInUSD=D.getGasPriceInUSD(r.networkPrice,BigInt(r.gasFee),BigInt(xe)),r.priceImpact=D.getPriceImpact({sourceTokenAmount:r.sourceTokenAmount,sourceTokenPriceInUSD:r.sourceTokenPriceInUSD,toTokenPriceInUSD:r.toTokenPriceInUSD,toTokenAmount:r.toTokenAmount}),r.maxSlippage=D.getMaxSlippage(r.slippage,r.toTokenAmount),r.providerFee=D.getProviderFee(r.sourceTokenAmount))}},d=Pe(ie),A=Ie({message:"",open:!1,triggerRect:{width:0,height:0,top:0,left:0},variant:"shade"}),Ge={state:A,subscribe(e){return Ne(A,()=>e(A))},subscribeKey(e,t){return Ee(A,e,t)},showTooltip({message:e,triggerRect:t,variant:o}){A.open=!0,A.message=e,A.triggerRect=t,A.variant=o},hide(){A.open=!1,A.message="",A.triggerRect={width:0,height:0,top:0,left:0}}},V=Pe(Ge),_e={isUnsupportedChainView(){return u.state.view==="UnsupportedChain"||u.state.view==="SwitchNetwork"&&u.state.history.includes("UnsupportedChain")},async safeClose(){if(this.isUnsupportedChainView()){P.shake();return}if(await We.isSIWXCloseDisabled()){P.shake();return}(u.state.view==="DataCapture"||u.state.view==="DataCaptureOtpConfirm")&&te.disconnect(),P.close()}},Ke=S`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
border-radius: clamp(0px, ${({borderRadius:e})=>e[8]}, 44px);
|
package/index.html
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2/dcl-regenesislabs.png" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>DCL Regenesis Labs Mobile Hub</title>
|
|
8
|
-
<script type="module" crossorigin src="https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2
|
|
9
|
-
<link rel="stylesheet" crossorigin href="https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2
|
|
8
|
+
<script type="module" crossorigin src="https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2/assets/index-47xbhgOb.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2/assets/index-C9XT7rH5.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl-regenesislabs/mobile-hub",
|
|
3
|
-
"version": "1.0.2
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Mobile Hub",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -17,6 +17,6 @@
|
|
|
17
17
|
"type": "git",
|
|
18
18
|
"url": "git+https://github.com/decentraland/mobile-hub.git"
|
|
19
19
|
},
|
|
20
|
-
"homepage": "https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2
|
|
21
|
-
"commit": "
|
|
20
|
+
"homepage": "https://cdn.decentraland.org/@dcl-regenesislabs/mobile-hub/1.0.2",
|
|
21
|
+
"commit": "3bd774c0fb6c400409721f4e4b2e738eed58f922"
|
|
22
22
|
}
|