@oasisomniverse/js 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -0
- package/package.json +1 -1
- package/src/accept-invite.js +17 -0
- package/src/activity-pub.js +17 -0
- package/src/add-2d-object-map.js +17 -0
- package/src/add-3d-object-map.js +17 -0
- package/src/add-quest-to-map.js +17 -0
- package/src/compare-provider-speeds.js +17 -0
- package/src/contact-popup-nft.js +17 -0
- package/src/create-oapp.js +17 -0
- package/src/deploy-oapp.js +17 -0
- package/src/donate-seeds.js +17 -0
- package/src/download-our-world-map.js +17 -0
- package/src/download-our-world-oapp.js +17 -0
- package/src/edit-oapp.js +17 -0
- package/src/eosio.js +17 -0
- package/src/ethereum.js +17 -0
- package/src/game.js +22 -0
- package/src/holochain.js +17 -0
- package/src/hyperdrive.js +17 -0
- package/src/index.esm.js +143 -15
- package/src/index.js +147 -14
- package/src/install-oapp.js +17 -0
- package/src/ipfs.js +17 -0
- package/src/karma-panel.js +28 -0
- package/src/launch-oapp.js +28 -0
- package/src/manage-auto-fail-over.js +17 -0
- package/src/manage-auto-replicaton.js +17 -0
- package/src/manage-load-balancing.js +17 -0
- package/src/manage-map.js +17 -0
- package/src/manage-oapp.js +28 -0
- package/src/manage-providers.js +17 -0
- package/src/manage-quest.js +28 -0
- package/src/manage-seeds.js +26 -0
- package/src/map.js +17 -0
- package/src/menu-message.js +18 -0
- package/src/messaging.js +27 -0
- package/src/mission.js +17 -0
- package/src/mongo-db.js +17 -0
- package/src/neo4j.js +17 -0
- package/src/nft.js +17 -0
- package/src/oapp.js +17 -0
- package/src/onet.js +17 -0
- package/src/onode.js +17 -0
- package/src/pay-with-seeds.js +17 -0
- package/src/plot-route-on-map.js +17 -0
- package/src/providers.js +18 -0
- package/src/quest.js +17 -0
- package/src/reward-seeds.js +17 -0
- package/src/search-avatars.js +32 -0
- package/src/search-map.js +18 -0
- package/src/search-oapp.js +32 -0
- package/src/search-providers.js +17 -0
- package/src/search-quest.js +28 -0
- package/src/search-seeds.js +28 -0
- package/src/seeds-provider.js +17 -0
- package/src/send-invite.js +17 -0
- package/src/settings.js +18 -0
- package/src/solana.js +17 -0
- package/src/solid.js +17 -0
- package/src/sql-lite.js +17 -0
- package/src/three-fold.js +17 -0
- package/src/view-global-3d-map.js +17 -0
- package/src/view-halons-on-map.js +28 -0
- package/src/view-oapp-on-map.js +28 -0
- package/src/view-organizations.js +27 -0
- package/src/view-provider-stats.js +17 -0
- package/src/view-providers.js +17 -0
- package/src/view-quest-on-map.js +28 -0
- package/src/view-quest.js +26 -0
- package/src/view-seeds.js +27 -0
- package/src/wallet.js +28 -0
package/src/index.esm.js
CHANGED
|
@@ -1,15 +1,143 @@
|
|
|
1
|
-
// @oasisomniverse/js — ESM re-exports
|
|
2
|
-
// Each widget
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
1
|
+
// @oasisomniverse/js — ESM named re-exports
|
|
2
|
+
// Each widget class is exported by name for tree-shaking
|
|
3
|
+
|
|
4
|
+
export { OasisAvatarConnect } from './avatar-connect.js';
|
|
5
|
+
export { OasisAvatarWallet } from './avatar-wallet.js';
|
|
6
|
+
export { OasisComingSoon } from './coming-soon.js';
|
|
7
|
+
export { OasisConfirmation } from './confirmation.js';
|
|
8
|
+
export { OasisContact } from './contact.js';
|
|
9
|
+
export { OasisEggs } from './eggs.js';
|
|
10
|
+
export { OasisForgotPassword } from './forgot-password.js';
|
|
11
|
+
export { OasisGame } from './game.js';
|
|
12
|
+
export { OasisHyperDrive } from './hyperdrive.js';
|
|
13
|
+
export { OasisKarmaPanel } from './karma-panel.js';
|
|
14
|
+
export { OasisKarmaToast } from './karma-toast.js';
|
|
15
|
+
export { OasisLogin } from './login.js';
|
|
16
|
+
export { OasisMap } from './map.js';
|
|
17
|
+
export { OasisMenuMessage } from './menu-message.js';
|
|
18
|
+
export { OasisMessaging } from './messaging.js';
|
|
19
|
+
export { OasisMission } from './mission.js';
|
|
20
|
+
export { OasisNavBar } from './navbar.js';
|
|
21
|
+
export { OasisNFT } from './nft.js';
|
|
22
|
+
export { OasisOApp } from './oapp.js';
|
|
23
|
+
export { OasisOasisModal } from './oasis-modal.js';
|
|
24
|
+
export { OasisONET } from './onet.js';
|
|
25
|
+
export { OasisONODE } from './onode.js';
|
|
26
|
+
export { OasisProviderDropdown } from './provider-dropdown.js';
|
|
27
|
+
export { OasisProviders } from './providers.js';
|
|
28
|
+
export { OasisQuest } from './quest.js';
|
|
29
|
+
export { OasisResetPassword } from './reset-password.js';
|
|
30
|
+
export { OasisSearchAvatars } from './search-avatars.js';
|
|
31
|
+
export { OasisSeeds } from './seeds.js';
|
|
32
|
+
export { OasisSettings } from './settings.js';
|
|
33
|
+
export { OasisSignup } from './signup.js';
|
|
34
|
+
export { OasisStarField } from './star-field.js';
|
|
35
|
+
export { OasisVerifyEmail } from './verify-email.js';
|
|
36
|
+
export { OasisWallet } from './wallet.js';
|
|
37
|
+
|
|
38
|
+
// Avatar sub-components
|
|
39
|
+
export { OasisEditAvatar } from './edit-avatar.js';
|
|
40
|
+
export { OasisSearchAvatar } from './search-avatar.js';
|
|
41
|
+
export { OasisViewAvatar } from './view-avatar.js';
|
|
42
|
+
|
|
43
|
+
// Data Screen sub-components
|
|
44
|
+
export { OasisAddData } from './add-data.js';
|
|
45
|
+
export { OasisCrossChainManagement } from './cross-chain-management.js';
|
|
46
|
+
export { OasisLoadData } from './load-data.js';
|
|
47
|
+
export { OasisManageData } from './manage-data.js';
|
|
48
|
+
export { OasisOffChainManagement } from './off-chain-management.js';
|
|
49
|
+
export { OasisSearchData } from './search-data.js';
|
|
50
|
+
|
|
51
|
+
// Eggs sub-components
|
|
52
|
+
export { OasisManageEggs } from './manage-eggs.js';
|
|
53
|
+
export { OasisSearchEggs } from './search-eggs.js';
|
|
54
|
+
export { OasisViewEggs } from './view-eggs.js';
|
|
55
|
+
|
|
56
|
+
// Game sub-components
|
|
57
|
+
export { OasisSearchProfiles } from './search-profiles.js';
|
|
58
|
+
export { OasisViewAchievements } from './view-achievements.js';
|
|
59
|
+
export { OasisViewLeagues } from './view-leagues.js';
|
|
60
|
+
export { OasisViewTournaments } from './view-tournaments.js';
|
|
61
|
+
|
|
62
|
+
// Karma sub-components
|
|
63
|
+
export { OasisSearchKarma } from './search-karma.js';
|
|
64
|
+
export { OasisViewAvatarKarma } from './view-avatar-karma.js';
|
|
65
|
+
export { OasisViewKarma } from './view-karma.js';
|
|
66
|
+
export { OasisVoteKarma } from './vote-karma.js';
|
|
67
|
+
|
|
68
|
+
// Map sub-components
|
|
69
|
+
export { OasisAdd2dObjectMap } from './add-2d-object-map.js';
|
|
70
|
+
export { OasisAdd3dObjectMap } from './add-3d-object-map.js';
|
|
71
|
+
export { OasisAddQuestToMap } from './add-quest-to-map.js';
|
|
72
|
+
export { OasisDownloadOurWorldMap } from './download-our-world-map.js';
|
|
73
|
+
export { OasisManageMap } from './manage-map.js';
|
|
74
|
+
export { OasisPlotRouteOnMap } from './plot-route-on-map.js';
|
|
75
|
+
export { OasisSearchMap } from './search-map.js';
|
|
76
|
+
export { OasisViewGlobal3dMap } from './view-global-3d-map.js';
|
|
77
|
+
export { OasisViewHalonsOnMap } from './view-halons-on-map.js';
|
|
78
|
+
export { OasisViewOappOnMap } from './view-oapp-on-map.js';
|
|
79
|
+
export { OasisViewQuestOnMap } from './view-quest-on-map.js';
|
|
80
|
+
|
|
81
|
+
// Messages sub-components
|
|
82
|
+
export { OasisMessage } from './message.js';
|
|
83
|
+
|
|
84
|
+
// Mission sub-components
|
|
85
|
+
export { OasisManageMission } from './manage-mission.js';
|
|
86
|
+
export { OasisSearchMission } from './search-mission.js';
|
|
87
|
+
export { OasisViewMission } from './view-mission.js';
|
|
88
|
+
|
|
89
|
+
// NFT sub-components
|
|
90
|
+
export { OasisNftContactPopup } from './contact-popup-nft.js';
|
|
91
|
+
export { OasisManageOasisNft } from './manage-oasis-nft.js';
|
|
92
|
+
export { OasisPurchaseOasisNft } from './purchase-oasis-nft.js';
|
|
93
|
+
export { OasisPurchaseOasisVirtualLandNft } from './purchase-oasis-virtual-land-nft.js';
|
|
94
|
+
export { OasisSearchOasisNft } from './search-oasis-nft.js';
|
|
95
|
+
export { OasisSolana } from './solana.js';
|
|
96
|
+
export { OasisViewOasisNft } from './view-oasis-nft.js';
|
|
97
|
+
|
|
98
|
+
// OApp sub-components
|
|
99
|
+
export { OasisCreateOAPP } from './create-oapp.js';
|
|
100
|
+
export { OasisDeployOAPP } from './deploy-oapp.js';
|
|
101
|
+
export { OasisDownloadOurWorldOApp } from './download-our-world-oapp.js';
|
|
102
|
+
export { OasisEditOAPP } from './edit-oapp.js';
|
|
103
|
+
export { OasisInstallOAPP } from './install-oapp.js';
|
|
104
|
+
export { OasisLaunchOAPP } from './launch-oapp.js';
|
|
105
|
+
export { OasisManageOAPP } from './manage-oapp.js';
|
|
106
|
+
export { OasisSearchOAPP } from './search-oapp.js';
|
|
107
|
+
|
|
108
|
+
// Provider sub-components
|
|
109
|
+
export { OasisActivityPub } from './activity-pub.js';
|
|
110
|
+
export { OasisCompareProviderSpeeds } from './compare-provider-speeds.js';
|
|
111
|
+
export { OasisEosio } from './eosio.js';
|
|
112
|
+
export { OasisEthereum } from './ethereum.js';
|
|
113
|
+
export { OasisHolochain } from './holochain.js';
|
|
114
|
+
export { OasisIpfs } from './ipfs.js';
|
|
115
|
+
export { OasisManageAutoFailOver } from './manage-auto-fail-over.js';
|
|
116
|
+
export { OasisManageAutoReplicaton } from './manage-auto-replicaton.js';
|
|
117
|
+
export { OasisManageLoadBalancing } from './manage-load-balancing.js';
|
|
118
|
+
export { OasisManageProviders } from './manage-providers.js';
|
|
119
|
+
export { OasisMongoDb } from './mongo-db.js';
|
|
120
|
+
export { OasisNeo4j } from './neo4j.js';
|
|
121
|
+
export { OasisSearchProviders } from './search-providers.js';
|
|
122
|
+
export { OasisSeedsProvider } from './seeds-provider.js';
|
|
123
|
+
export { OasisSolid } from './solid.js';
|
|
124
|
+
export { OasisSqlLite } from './sql-lite.js';
|
|
125
|
+
export { OasisThreeFold } from './three-fold.js';
|
|
126
|
+
export { OasisViewProviders } from './view-providers.js';
|
|
127
|
+
export { OasisViewProviderStats } from './view-provider-stats.js';
|
|
128
|
+
|
|
129
|
+
// Quest sub-components
|
|
130
|
+
export { OasisManageQuest } from './manage-quest.js';
|
|
131
|
+
export { OasisSearchQuest } from './search-quest.js';
|
|
132
|
+
export { OasisViewQuest } from './view-quest.js';
|
|
133
|
+
|
|
134
|
+
// Seeds sub-components
|
|
135
|
+
export { OasisAcceptInvite } from './accept-invite.js';
|
|
136
|
+
export { OasisDonateSeeds } from './donate-seeds.js';
|
|
137
|
+
export { OasisManageSeeds } from './manage-seeds.js';
|
|
138
|
+
export { OasisPayWithSeeds } from './pay-with-seeds.js';
|
|
139
|
+
export { OasisRewardSeeds } from './reward-seeds.js';
|
|
140
|
+
export { OasisSearchSeeds } from './search-seeds.js';
|
|
141
|
+
export { OasisSendInvite } from './send-invite.js';
|
|
142
|
+
export { OasisViewOrganizations } from './view-organizations.js';
|
|
143
|
+
export { OasisViewSeeds } from './view-seeds.js';
|
package/src/index.js
CHANGED
|
@@ -1,15 +1,148 @@
|
|
|
1
1
|
// @oasisomniverse/js — OASIS Omniverse vanilla JS widgets
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import './
|
|
6
|
-
import './
|
|
7
|
-
import './
|
|
8
|
-
import './
|
|
9
|
-
import './
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import './
|
|
13
|
-
import './
|
|
14
|
-
import './
|
|
15
|
-
|
|
2
|
+
// Import this file to register all widgets on window.*
|
|
3
|
+
|
|
4
|
+
// ── Auth ─────────────────────────────────────────────────────────────────────
|
|
5
|
+
import './forgot-password.js';
|
|
6
|
+
import './login.js';
|
|
7
|
+
import './reset-password.js';
|
|
8
|
+
import './signup.js';
|
|
9
|
+
import './verify-email.js';
|
|
10
|
+
|
|
11
|
+
// ── Layout / navigation ───────────────────────────────────────────────────────
|
|
12
|
+
import './navbar.js';
|
|
13
|
+
import './oasis-modal.js';
|
|
14
|
+
import './star-field.js';
|
|
15
|
+
|
|
16
|
+
// ── Avatar ────────────────────────────────────────────────────────────────────
|
|
17
|
+
import './avatar-connect.js';
|
|
18
|
+
import './avatar-wallet.js';
|
|
19
|
+
import './edit-avatar.js';
|
|
20
|
+
import './search-avatar.js';
|
|
21
|
+
import './search-avatars.js';
|
|
22
|
+
import './view-avatar.js';
|
|
23
|
+
|
|
24
|
+
// ── Common popups ─────────────────────────────────────────────────────────────
|
|
25
|
+
import './coming-soon.js';
|
|
26
|
+
import './confirmation.js';
|
|
27
|
+
import './contact.js';
|
|
28
|
+
import './hyperdrive.js';
|
|
29
|
+
import './menu-message.js';
|
|
30
|
+
import './messaging.js';
|
|
31
|
+
import './onet.js';
|
|
32
|
+
import './onode.js';
|
|
33
|
+
import './provider-dropdown.js';
|
|
34
|
+
import './settings.js';
|
|
35
|
+
import './wallet.js';
|
|
36
|
+
|
|
37
|
+
// ── Data Screen ───────────────────────────────────────────────────────────────
|
|
38
|
+
import './add-data.js';
|
|
39
|
+
import './cross-chain-management.js';
|
|
40
|
+
import './load-data.js';
|
|
41
|
+
import './manage-data.js';
|
|
42
|
+
import './off-chain-management.js';
|
|
43
|
+
import './search-data.js';
|
|
44
|
+
|
|
45
|
+
// ── Eggs ──────────────────────────────────────────────────────────────────────
|
|
46
|
+
import './eggs.js';
|
|
47
|
+
import './manage-eggs.js';
|
|
48
|
+
import './search-eggs.js';
|
|
49
|
+
import './view-eggs.js';
|
|
50
|
+
|
|
51
|
+
// ── Game ──────────────────────────────────────────────────────────────────────
|
|
52
|
+
import './game.js';
|
|
53
|
+
import './search-profiles.js';
|
|
54
|
+
import './view-achievements.js';
|
|
55
|
+
import './view-leagues.js';
|
|
56
|
+
import './view-tournaments.js';
|
|
57
|
+
|
|
58
|
+
// ── Karma ─────────────────────────────────────────────────────────────────────
|
|
59
|
+
import './karma-panel.js';
|
|
60
|
+
import './karma-toast.js';
|
|
61
|
+
import './search-karma.js';
|
|
62
|
+
import './view-avatar-karma.js';
|
|
63
|
+
import './view-karma.js';
|
|
64
|
+
import './vote-karma.js';
|
|
65
|
+
|
|
66
|
+
// ── Map ───────────────────────────────────────────────────────────────────────
|
|
67
|
+
import './map.js';
|
|
68
|
+
import './add-2d-object-map.js';
|
|
69
|
+
import './add-3d-object-map.js';
|
|
70
|
+
import './add-quest-to-map.js';
|
|
71
|
+
import './download-our-world-map.js';
|
|
72
|
+
import './manage-map.js';
|
|
73
|
+
import './plot-route-on-map.js';
|
|
74
|
+
import './search-map.js';
|
|
75
|
+
import './view-global-3d-map.js';
|
|
76
|
+
import './view-halons-on-map.js';
|
|
77
|
+
import './view-oapp-on-map.js';
|
|
78
|
+
import './view-quest-on-map.js';
|
|
79
|
+
|
|
80
|
+
// ── Messages ──────────────────────────────────────────────────────────────────
|
|
81
|
+
import './message.js';
|
|
82
|
+
|
|
83
|
+
// ── Mission ───────────────────────────────────────────────────────────────────
|
|
84
|
+
import './mission.js';
|
|
85
|
+
import './manage-mission.js';
|
|
86
|
+
import './search-mission.js';
|
|
87
|
+
import './view-mission.js';
|
|
88
|
+
|
|
89
|
+
// ── NFT ───────────────────────────────────────────────────────────────────────
|
|
90
|
+
import './nft.js';
|
|
91
|
+
import './contact-popup-nft.js';
|
|
92
|
+
import './manage-oasis-nft.js';
|
|
93
|
+
import './purchase-oasis-nft.js';
|
|
94
|
+
import './purchase-oasis-virtual-land-nft.js';
|
|
95
|
+
import './search-oasis-nft.js';
|
|
96
|
+
import './solana.js';
|
|
97
|
+
import './view-oasis-nft.js';
|
|
98
|
+
|
|
99
|
+
// ── OApp ──────────────────────────────────────────────────────────────────────
|
|
100
|
+
import './oapp.js';
|
|
101
|
+
import './create-oapp.js';
|
|
102
|
+
import './deploy-oapp.js';
|
|
103
|
+
import './download-our-world-oapp.js';
|
|
104
|
+
import './edit-oapp.js';
|
|
105
|
+
import './install-oapp.js';
|
|
106
|
+
import './launch-oapp.js';
|
|
107
|
+
import './manage-oapp.js';
|
|
108
|
+
import './search-oapp.js';
|
|
109
|
+
|
|
110
|
+
// ── Providers ─────────────────────────────────────────────────────────────────
|
|
111
|
+
import './providers.js';
|
|
112
|
+
import './activity-pub.js';
|
|
113
|
+
import './compare-provider-speeds.js';
|
|
114
|
+
import './eosio.js';
|
|
115
|
+
import './ethereum.js';
|
|
116
|
+
import './holochain.js';
|
|
117
|
+
import './ipfs.js';
|
|
118
|
+
import './manage-auto-fail-over.js';
|
|
119
|
+
import './manage-auto-replicaton.js';
|
|
120
|
+
import './manage-load-balancing.js';
|
|
121
|
+
import './manage-providers.js';
|
|
122
|
+
import './mongo-db.js';
|
|
123
|
+
import './neo4j.js';
|
|
124
|
+
import './search-providers.js';
|
|
125
|
+
import './seeds-provider.js';
|
|
126
|
+
import './solid.js';
|
|
127
|
+
import './sql-lite.js';
|
|
128
|
+
import './three-fold.js';
|
|
129
|
+
import './view-providers.js';
|
|
130
|
+
import './view-provider-stats.js';
|
|
131
|
+
|
|
132
|
+
// ── Quest ─────────────────────────────────────────────────────────────────────
|
|
133
|
+
import './quest.js';
|
|
134
|
+
import './manage-quest.js';
|
|
135
|
+
import './search-quest.js';
|
|
136
|
+
import './view-quest.js';
|
|
137
|
+
|
|
138
|
+
// ── Seeds ─────────────────────────────────────────────────────────────────────
|
|
139
|
+
import './seeds.js';
|
|
140
|
+
import './accept-invite.js';
|
|
141
|
+
import './donate-seeds.js';
|
|
142
|
+
import './manage-seeds.js';
|
|
143
|
+
import './pay-with-seeds.js';
|
|
144
|
+
import './reward-seeds.js';
|
|
145
|
+
import './search-seeds.js';
|
|
146
|
+
import './send-invite.js';
|
|
147
|
+
import './view-organizations.js';
|
|
148
|
+
import './view-seeds.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisInstallOAPP {
|
|
2
|
+
constructor({ apiUrl = 'https://api.web4.oasisomniverse.one', onClose = null } = {}) { this._apiUrl = apiUrl; this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:600px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-search-row{display:flex;gap:8px;margin-bottom:16px}.oasis-input{flex:1;background:rgba(0,0,0,.3);border:1px solid rgba(0,200,255,.2);border-radius:8px;padding:10px 14px;color:#fff;font-size:13px;outline:none}.oasis-input:focus{border-color:#00c8ff}.oasis-btn-primary{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:8px;padding:10px 18px;font-size:13px;font-weight:600;cursor:pointer}.oasis-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}.oasis-card{background:rgba(0,200,255,.05);border:1px solid rgba(0,200,255,.15);border-radius:12px;padding:14px;cursor:pointer;transition:all .2s}.oasis-card:hover{border-color:#00c8ff;background:rgba(0,200,255,.1)}.oasis-card-title{font-family:'Orbitron',sans-serif;font-size:11px;color:#fff;margin-bottom:4px}.oasis-card-sub{font-size:10px;color:#7a9bbf}.oasis-cs{text-align:center;padding:24px}.oasis-cs p{color:#7a9bbf;font-size:13px}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Install OAPP</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-search-row"><input class="oasis-input" id="oasis-install-q" placeholder="Search OAPPs to install…"><button class="oasis-btn-primary" id="oasis-install-btn">Search</button></div><div class="oasis-grid" id="oasis-install-grid"><div class="oasis-card"><div class="oasis-card-title">🎮 Game Hub</div><div class="oasis-card-sub">Games & tournaments</div></div><div class="oasis-card"><div class="oasis-card-title">💬 Chat</div><div class="oasis-card-sub">Avatar messaging</div></div><div class="oasis-card"><div class="oasis-card-title">🌱 Seeds Wallet</div><div class="oasis-card-sub">SEEDS economy</div></div><div class="oasis-card"><div class="oasis-card-title">🗺️ Map Explorer</div><div class="oasis-card-sub">Our World AR</div></div></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisInstallOAPP = OasisInstallOAPP;
|
package/src/ipfs.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisIpfs {
|
|
2
|
+
constructor({ onClose = null } = {}) { this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:520px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:Orbitron,sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-cs{text-align:center;padding:32px 16px}.oasis-cs-icon{font-size:48px;margin-bottom:12px}.oasis-cs h3{font-family:Orbitron,sans-serif;font-size:15px;color:#00c8ff;margin:0 0 8px}.oasis-cs p{color:#7a9bbf;font-size:13px;margin:0 0 20px}.oasis-btn-primary{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:8px;padding:11px 20px;font-size:13px;font-weight:600;cursor:pointer;width:100%}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">IPFS Provider</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-cs"><div class="oasis-cs-icon">📦</div><h3>IPFS Provider</h3><p>InterPlanetary File System integration for permanent, censorship-resistant content addressing in the OASIS.</p><button class="oasis-btn-primary">Configure Provider</button></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisIpfs = OasisIpfs;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class OasisKarmaPanel {
|
|
2
|
+
constructor({ apiUrl = 'https://api.web4.oasisomniverse.one', onClose = null } = {}) { this._apiUrl = apiUrl; this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:500px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-stat-row{display:flex;gap:12px;margin-bottom:20px}.oasis-stat{flex:1;background:rgba(0,200,255,.05);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:14px;text-align:center}.oasis-stat-val{font-family:'Orbitron',sans-serif;font-size:20px;font-weight:700;color:#00c8ff}.oasis-stat-lbl{font-size:10px;color:#7a9bbf;margin-top:4px}.oasis-bar{background:rgba(255,255,255,.08);border-radius:999px;height:8px;margin:8px 0}.oasis-bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#0066cc,#00c8ff)}.oasis-cs{text-align:center;padding:32px 16px}.oasis-cs-icon{font-size:48px;margin-bottom:12px}.oasis-cs h3{font-family:'Orbitron',sans-serif;font-size:15px;color:#00c8ff;margin:0 0 8px}.oasis-cs p{color:#7a9bbf;font-size:13px;margin:0}.oasis-msg-error{background:rgba(255,80,80,.12);border:1px solid rgba(255,80,80,.3);color:#ff6b6b;border-radius:8px;padding:10px 14px;font-size:13px}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Karma Panel</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body" id="oasis-kp-body"><div class="oasis-cs"><div class="oasis-cs-icon">⏳</div><p>Loading karma…</p></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
this._load();
|
|
14
|
+
}
|
|
15
|
+
async _load() {
|
|
16
|
+
const body = this._overlay.querySelector('#oasis-kp-body');
|
|
17
|
+
try {
|
|
18
|
+
const r = await fetch(`${this._apiUrl}/api/karma`);
|
|
19
|
+
const d = await r.json();
|
|
20
|
+
const total = d.total || 0; const max = d.max || 1000;
|
|
21
|
+
const pct = Math.min(100, Math.round((total / max) * 100));
|
|
22
|
+
body.innerHTML = `<div class="oasis-stat-row"><div class="oasis-stat"><div class="oasis-stat-val">${total}</div><div class="oasis-stat-lbl">Total Karma</div></div><div class="oasis-stat"><div class="oasis-stat-val">${d.positive||0}</div><div class="oasis-stat-lbl">Positive</div></div><div class="oasis-stat"><div class="oasis-stat-val">${d.negative||0}</div><div class="oasis-stat-lbl">Negative</div></div></div><p style="font-size:11px;color:#7a9bbf;margin:0 0 6px">Progress (${pct}%)</p><div class="oasis-bar"><div class="oasis-bar-fill" style="width:${pct}%"></div></div>`;
|
|
23
|
+
} catch { body.innerHTML = '<div class="oasis-msg-error">Failed to load karma.</div>'; }
|
|
24
|
+
}
|
|
25
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
26
|
+
destroy() { this.close(); }
|
|
27
|
+
}
|
|
28
|
+
window.OasisKarmaPanel = OasisKarmaPanel;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class OasisLaunchOAPP {
|
|
2
|
+
constructor({ apiUrl = 'https://api.web4.oasisomniverse.one', onClose = null } = {}) { this._apiUrl = apiUrl; this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:600px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-table{width:100%;border-collapse:collapse;font-size:13px}.oasis-table th{text-align:left;padding:10px 12px;font-size:10px;font-weight:700;letter-spacing:.06em;color:#7a9bbf;text-transform:uppercase;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-table td{padding:10px 12px;color:#fff;border-bottom:1px solid rgba(255,255,255,.05)}.oasis-table tr:hover td{background:rgba(0,200,255,.04)}.oasis-btn-sm{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:6px;padding:5px 12px;font-size:11px;font-weight:600;cursor:pointer}.oasis-cs{text-align:center;padding:32px}.oasis-cs p{color:#7a9bbf;font-size:13px}.oasis-msg-error{background:rgba(255,80,80,.12);border:1px solid rgba(255,80,80,.3);color:#ff6b6b;border-radius:8px;padding:10px 14px;font-size:13px}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Launch OAPP</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body" id="oasis-launch-body"><div class="oasis-cs"><p>Loading installed OAPPs…</p></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
this._load();
|
|
14
|
+
}
|
|
15
|
+
async _load() {
|
|
16
|
+
const body = this._overlay.querySelector('#oasis-launch-body');
|
|
17
|
+
try {
|
|
18
|
+
const r = await fetch(`${this._apiUrl}/api/oapp/installed`);
|
|
19
|
+
const data = await r.json();
|
|
20
|
+
const oapps = Array.isArray(data) ? data : (data.result || []);
|
|
21
|
+
if (!oapps.length) { body.innerHTML = '<div class="oasis-cs"><p>No OAPPs installed. Install one first.</p></div>'; return; }
|
|
22
|
+
body.innerHTML = `<table class="oasis-table"><thead><tr><th>OAPP</th><th>Version</th><th>Action</th></tr></thead><tbody>${oapps.map(o=>`<tr><td>${o.name||'—'}</td><td>${o.version||'—'}</td><td><button class="oasis-btn-sm">▶ Launch</button></td></tr>`).join('')}</tbody></table>`;
|
|
23
|
+
} catch { body.innerHTML = '<div class="oasis-msg-error">Failed to load OAPPs.</div>'; }
|
|
24
|
+
}
|
|
25
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
26
|
+
destroy() { this.close(); }
|
|
27
|
+
}
|
|
28
|
+
window.OasisLaunchOAPP = OasisLaunchOAPP;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisManageAutoFailOver {
|
|
2
|
+
constructor({ onClose = null } = {}) { this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:520px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:Orbitron,sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-cs{text-align:center;padding:32px 16px}.oasis-cs-icon{font-size:48px;margin-bottom:12px}.oasis-cs h3{font-family:Orbitron,sans-serif;font-size:15px;color:#00c8ff;margin:0 0 8px}.oasis-cs p{color:#7a9bbf;font-size:13px;margin:0 0 20px}.oasis-btn-primary{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:8px;padding:11px 20px;font-size:13px;font-weight:600;cursor:pointer;width:100%}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Manage Auto Failover</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-cs"><div class="oasis-cs-icon">🔄</div><h3>Manage Auto Failover</h3><p>Configure automatic provider failover rules so the OASIS seamlessly switches providers on outage.</p><button class="oasis-btn-primary">Configure Provider</button></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisManageAutoFailOver = OasisManageAutoFailOver;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisManageAutoReplicaton {
|
|
2
|
+
constructor({ onClose = null } = {}) { this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:520px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:Orbitron,sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-cs{text-align:center;padding:32px 16px}.oasis-cs-icon{font-size:48px;margin-bottom:12px}.oasis-cs h3{font-family:Orbitron,sans-serif;font-size:15px;color:#00c8ff;margin:0 0 8px}.oasis-cs p{color:#7a9bbf;font-size:13px;margin:0 0 20px}.oasis-btn-primary{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:8px;padding:11px 20px;font-size:13px;font-weight:600;cursor:pointer;width:100%}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Manage Auto Replication</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-cs"><div class="oasis-cs-icon">🔁</div><h3>Manage Auto Replication</h3><p>Set up automatic data replication across multiple providers for redundancy and availability.</p><button class="oasis-btn-primary">Configure Provider</button></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisManageAutoReplicaton = OasisManageAutoReplicaton;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisManageLoadBalancing {
|
|
2
|
+
constructor({ onClose = null } = {}) { this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:520px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:Orbitron,sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-cs{text-align:center;padding:32px 16px}.oasis-cs-icon{font-size:48px;margin-bottom:12px}.oasis-cs h3{font-family:Orbitron,sans-serif;font-size:15px;color:#00c8ff;margin:0 0 8px}.oasis-cs p{color:#7a9bbf;font-size:13px;margin:0 0 20px}.oasis-btn-primary{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:8px;padding:11px 20px;font-size:13px;font-weight:600;cursor:pointer;width:100%}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Manage Load Balancing</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-cs"><div class="oasis-cs-icon">⚖️</div><h3>Manage Load Balancing</h3><p>Distribute requests across providers intelligently to maximise throughput and minimise latency.</p><button class="oasis-btn-primary">Configure Provider</button></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisManageLoadBalancing = OasisManageLoadBalancing;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisManageMap {
|
|
2
|
+
constructor({ onClose = null } = {}) { this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:640px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}.oasis-card{background:rgba(0,200,255,.05);border:1px solid rgba(0,200,255,.15);border-radius:12px;padding:16px;cursor:pointer;transition:all .2s}.oasis-card:hover{border-color:rgba(0,200,255,.4);background:rgba(0,200,255,.1)}.oasis-card-title{font-family:'Orbitron',sans-serif;font-size:12px;color:#fff;margin-bottom:4px}.oasis-card-sub{font-size:11px;color:#7a9bbf}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Manage Map</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-grid"><div class="oasis-card"><div class="oasis-card-title">🗑️ Remove Objects</div><div class="oasis-card-sub">Delete map items</div></div><div class="oasis-card"><div class="oasis-card-title">✏️ Edit Objects</div><div class="oasis-card-sub">Modify placed items</div></div><div class="oasis-card"><div class="oasis-card-title">🔒 Lock Region</div><div class="oasis-card-sub">Restrict access</div></div><div class="oasis-card"><div class="oasis-card-title">📊 Map Stats</div><div class="oasis-card-sub">Usage analytics</div></div></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisManageMap = OasisManageMap;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class OasisManageOAPP {
|
|
2
|
+
constructor({ apiUrl = 'https://api.web4.oasisomniverse.one', onClose = null } = {}) { this._apiUrl = apiUrl; this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:640px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-stat-row{display:flex;gap:12px;margin-bottom:20px}.oasis-stat{flex:1;background:rgba(0,200,255,.05);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:14px;text-align:center}.oasis-stat-val{font-family:'Orbitron',sans-serif;font-size:20px;font-weight:700;color:#00c8ff}.oasis-stat-lbl{font-size:10px;color:#7a9bbf;margin-top:4px}.oasis-table{width:100%;border-collapse:collapse;font-size:13px}.oasis-table th{text-align:left;padding:10px 12px;font-size:10px;font-weight:700;letter-spacing:.06em;color:#7a9bbf;text-transform:uppercase;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-table td{padding:10px 12px;color:#fff;border-bottom:1px solid rgba(255,255,255,.05)}.oasis-badge{display:inline-block;padding:3px 8px;border-radius:999px;font-size:10px;font-weight:700}.oasis-badge-green{background:rgba(0,200,100,.15);color:#00c864}.oasis-badge-yellow{background:rgba(255,200,0,.15);color:#ffc800}.oasis-cs{text-align:center;padding:32px}.oasis-cs p{color:#7a9bbf;font-size:13px}.oasis-msg-error{background:rgba(255,80,80,.12);border:1px solid rgba(255,80,80,.3);color:#ff6b6b;border-radius:8px;padding:10px 14px;font-size:13px}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Manage OAPPs</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body" id="oasis-moapp-body"><div class="oasis-cs"><p>Loading…</p></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
this._load();
|
|
14
|
+
}
|
|
15
|
+
async _load() {
|
|
16
|
+
const body = this._overlay.querySelector('#oasis-moapp-body');
|
|
17
|
+
try {
|
|
18
|
+
const r = await fetch(`${this._apiUrl}/api/oapp`);
|
|
19
|
+
const data = await r.json();
|
|
20
|
+
const oapps = Array.isArray(data) ? data : (data.result || []);
|
|
21
|
+
if (!oapps.length) { body.innerHTML = '<div class="oasis-cs"><p>No OAPPs found. Create one first.</p></div>'; return; }
|
|
22
|
+
body.innerHTML = `<div class="oasis-stat-row"><div class="oasis-stat"><div class="oasis-stat-val">${oapps.length}</div><div class="oasis-stat-lbl">Total OAPPs</div></div><div class="oasis-stat"><div class="oasis-stat-val">${oapps.filter(o=>o.status==='live').length}</div><div class="oasis-stat-lbl">Live</div></div></div><table class="oasis-table"><thead><tr><th>Name</th><th>Version</th><th>Status</th></tr></thead><tbody>${oapps.map(o=>`<tr><td>${o.name||'—'}</td><td>${o.version||'—'}</td><td><span class="oasis-badge ${o.status==='live'?'oasis-badge-green':'oasis-badge-yellow'}">${o.status||'draft'}</span></td></tr>`).join('')}</tbody></table>`;
|
|
23
|
+
} catch { body.innerHTML = '<div class="oasis-msg-error">Failed to load OAPPs.</div>'; }
|
|
24
|
+
}
|
|
25
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
26
|
+
destroy() { this.close(); }
|
|
27
|
+
}
|
|
28
|
+
window.OasisManageOAPP = OasisManageOAPP;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class OasisManageProviders {
|
|
2
|
+
constructor({ onClose = null } = {}) { this._onClose = onClose; this._overlay = null; this._injectStyles(); }
|
|
3
|
+
_injectStyles() { if (document.getElementById('oasis-popup-styles')) return; const s = document.createElement('style'); s.id = 'oasis-popup-styles'; s.textContent = `.oasis-popup-overlay{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s}.oasis-popup-overlay.is-open{opacity:1}.oasis-popup-modal{background:#0a1628;border:1px solid rgba(0,200,255,.2);border-radius:16px;box-shadow:0 24px 64px rgba(0,0,0,.6);width:90%;max-width:520px;max-height:90vh;overflow-y:auto;transform:translateY(16px);transition:transform .25s}.oasis-popup-overlay.is-open .oasis-popup-modal{transform:none}.oasis-popup-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid rgba(0,200,255,.1)}.oasis-popup-title{font-family:Orbitron,sans-serif;font-size:14px;font-weight:700;color:#00c8ff;letter-spacing:.08em}.oasis-popup-close{background:none;border:none;color:#7a9bbf;font-size:22px;cursor:pointer;padding:0;line-height:1}.oasis-popup-close:hover{color:#fff}.oasis-popup-body{padding:24px}.oasis-cs{text-align:center;padding:32px 16px}.oasis-cs-icon{font-size:48px;margin-bottom:12px}.oasis-cs h3{font-family:Orbitron,sans-serif;font-size:15px;color:#00c8ff;margin:0 0 8px}.oasis-cs p{color:#7a9bbf;font-size:13px;margin:0 0 20px}.oasis-btn-primary{background:linear-gradient(135deg,#0066cc,#00c8ff);color:#fff;border:none;border-radius:8px;padding:11px 20px;font-size:13px;font-weight:600;cursor:pointer;width:100%}`; document.head.appendChild(s); }
|
|
4
|
+
open() {
|
|
5
|
+
if (this._overlay) return;
|
|
6
|
+
this._overlay = document.createElement('div');
|
|
7
|
+
this._overlay.className = 'oasis-popup-overlay';
|
|
8
|
+
this._overlay.innerHTML = `<div class="oasis-popup-modal"><div class="oasis-popup-header"><span class="oasis-popup-title">Manage Providers</span><button class="oasis-popup-close">×</button></div><div class="oasis-popup-body"><div class="oasis-cs"><div class="oasis-cs-icon">🔧</div><h3>Manage Providers</h3><p>Add, remove, and configure the storage and compute providers connected to your OASIS instance.</p><button class="oasis-btn-primary">Configure Provider</button></div></div></div>`;
|
|
9
|
+
this._overlay.querySelector('.oasis-popup-close').addEventListener('click', () => this.close());
|
|
10
|
+
this._overlay.addEventListener('click', e => { if (e.target === this._overlay) this.close(); });
|
|
11
|
+
document.body.appendChild(this._overlay);
|
|
12
|
+
requestAnimationFrame(() => this._overlay.classList.add('is-open'));
|
|
13
|
+
}
|
|
14
|
+
close() { if (!this._overlay) return; const el = this._overlay; this._overlay = null; el.classList.remove('is-open'); el.addEventListener('transitionend', () => el.remove(), { once: true }); if (this._onClose) this._onClose(); }
|
|
15
|
+
destroy() { this.close(); }
|
|
16
|
+
}
|
|
17
|
+
window.OasisManageProviders = OasisManageProviders;
|