@oasisomniverse/angular 1.0.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/package.json +37 -0
- package/src/components/avatar/avatar-wallet.component.ts +49 -0
- package/src/components/avatar/edit-avatar.component.ts +28 -0
- package/src/components/avatar/search-avatar.component.ts +45 -0
- package/src/components/avatar/view-avatar.component.ts +49 -0
- package/src/components/avatar-connect/avatar-connect.component.ts +78 -0
- package/src/components/avatar-profile/avatar-profile.component.ts +146 -0
- package/src/components/coming-soon/coming-soon.component.ts +27 -0
- package/src/components/confirmation/confirmation.component.ts +38 -0
- package/src/components/contact/contact.component.ts +64 -0
- package/src/components/data-screen/add-data.component.ts +50 -0
- package/src/components/data-screen/cross-chain-management.component.ts +28 -0
- package/src/components/data-screen/load-data.component.ts +28 -0
- package/src/components/data-screen/manage-data.component.ts +50 -0
- package/src/components/data-screen/off-chain-management.component.ts +28 -0
- package/src/components/data-screen/search-data.component.ts +40 -0
- package/src/components/eggs/eggs.component.ts +76 -0
- package/src/components/eggs/manage-eggs.component.ts +50 -0
- package/src/components/eggs/search-eggs.component.ts +40 -0
- package/src/components/eggs/view-eggs.component.ts +49 -0
- package/src/components/forgot-password/forgot-password.component.ts +80 -0
- package/src/components/game/game.component.ts +58 -0
- package/src/components/game/search-profiles.component.ts +36 -0
- package/src/components/game/view-achievements.component.ts +48 -0
- package/src/components/game/view-leagues.component.ts +48 -0
- package/src/components/game/view-tournaments.component.ts +49 -0
- package/src/components/hyperdrive/hyperdrive.component.ts +81 -0
- package/src/components/karma/search-karma.component.ts +36 -0
- package/src/components/karma/view-avatar-karma.component.ts +51 -0
- package/src/components/karma/view-karma.component.ts +46 -0
- package/src/components/karma/vote-karma.component.ts +48 -0
- package/src/components/karma-panel/karma-panel.component.ts +87 -0
- package/src/components/karma-toast/karma-toast.component.ts +33 -0
- package/src/components/login/login.component.ts +95 -0
- package/src/components/map/add-2d-object-map.component.ts +42 -0
- package/src/components/map/add-3d-object-map.component.ts +43 -0
- package/src/components/map/add-quest-to-map.component.ts +42 -0
- package/src/components/map/download-our-world.component.ts +28 -0
- package/src/components/map/manage-map.component.ts +28 -0
- package/src/components/map/map.component.ts +70 -0
- package/src/components/map/plot-route-on-map.component.ts +42 -0
- package/src/components/map/search-map.component.ts +44 -0
- package/src/components/map/view-global-3d-map.component.ts +28 -0
- package/src/components/map/view-halons-on-map.component.ts +28 -0
- package/src/components/map/view-oapp-on-map.component.ts +28 -0
- package/src/components/map/view-quest-on-map.component.ts +28 -0
- package/src/components/menu-message/menu-message.component.ts +69 -0
- package/src/components/messages/message.component.ts +59 -0
- package/src/components/messaging/messaging.component.ts +89 -0
- package/src/components/mission/manage-mission.component.ts +43 -0
- package/src/components/mission/mission.component.ts +63 -0
- package/src/components/mission/search-mission.component.ts +36 -0
- package/src/components/mission/view-mission.component.ts +49 -0
- package/src/components/modal/modal.component.ts +28 -0
- package/src/components/navbar/navbar.component.ts +64 -0
- package/src/components/nft/contact-popup.component.ts +41 -0
- package/src/components/nft/manage-oasis-nft.component.ts +43 -0
- package/src/components/nft/nft.component.ts +70 -0
- package/src/components/nft/purchase-oasis-nft.component.ts +53 -0
- package/src/components/nft/purchase-oasis-virtual-land-nft.component.ts +28 -0
- package/src/components/nft/search-oasis-nft.component.ts +36 -0
- package/src/components/nft/solana.component.ts +28 -0
- package/src/components/nft/view-oasis-nft.component.ts +52 -0
- package/src/components/oapp/create-oapp.component.ts +43 -0
- package/src/components/oapp/deploy-oapp.component.ts +42 -0
- package/src/components/oapp/download-our-world.component.ts +28 -0
- package/src/components/oapp/edit-oapp.component.ts +41 -0
- package/src/components/oapp/install-oapp.component.ts +36 -0
- package/src/components/oapp/launch-oapp.component.ts +58 -0
- package/src/components/oapp/manage-oapp.component.ts +42 -0
- package/src/components/oapp/oapp.component.ts +70 -0
- package/src/components/oapp/search-oapp.component.ts +36 -0
- package/src/components/oasis-card/oasis-card.component.ts +30 -0
- package/src/components/onet/onet.component.ts +77 -0
- package/src/components/onode/onode.component.ts +73 -0
- package/src/components/provider/activity-pub.component.ts +44 -0
- package/src/components/provider/compare-provider-speeds.component.ts +48 -0
- package/src/components/provider/eosio.component.ts +44 -0
- package/src/components/provider/ethereum.component.ts +44 -0
- package/src/components/provider/holochain.component.ts +44 -0
- package/src/components/provider/ipfs.component.ts +44 -0
- package/src/components/provider/manage-auto-fail-over.component.ts +42 -0
- package/src/components/provider/manage-auto-replicaton.component.ts +42 -0
- package/src/components/provider/manage-load-balancing.component.ts +42 -0
- package/src/components/provider/manage-providers.component.ts +28 -0
- package/src/components/provider/mongo-db.component.ts +44 -0
- package/src/components/provider/neo4j.component.ts +44 -0
- package/src/components/provider/search-providers.component.ts +36 -0
- package/src/components/provider/seeds-provider.component.ts +42 -0
- package/src/components/provider/solid.component.ts +44 -0
- package/src/components/provider/sql-lite.component.ts +44 -0
- package/src/components/provider/three-fold.component.ts +44 -0
- package/src/components/provider/view-provider-stats.component.ts +61 -0
- package/src/components/provider/view-providers.component.ts +54 -0
- package/src/components/provider-dropdown/provider-dropdown.component.ts +64 -0
- package/src/components/providers/providers.component.ts +60 -0
- package/src/components/quest/manage-quest.component.ts +43 -0
- package/src/components/quest/quest.component.ts +65 -0
- package/src/components/quest/search-quest.component.ts +36 -0
- package/src/components/quest/view-quest.component.ts +49 -0
- package/src/components/reset-password/reset-password.component.ts +68 -0
- package/src/components/search-avatars/search-avatars.component.ts +80 -0
- package/src/components/seeds/accept-invite.component.ts +44 -0
- package/src/components/seeds/donate-seeds.component.ts +42 -0
- package/src/components/seeds/manage-seeds.component.ts +42 -0
- package/src/components/seeds/pay-with-seeds.component.ts +41 -0
- package/src/components/seeds/reward-seeds.component.ts +41 -0
- package/src/components/seeds/search-seeds.component.ts +36 -0
- package/src/components/seeds/seeds.component.ts +75 -0
- package/src/components/seeds/send-invite.component.ts +41 -0
- package/src/components/seeds/view-organizations.component.ts +55 -0
- package/src/components/seeds/view-seeds.component.ts +78 -0
- package/src/components/settings/settings.component.ts +96 -0
- package/src/components/signup/signup.component.ts +118 -0
- package/src/components/star-field/star-field.component.ts +44 -0
- package/src/components/verify-email/verify-email.component.ts +48 -0
- package/src/components/wallet/wallet.component.ts +83 -0
- package/src/index.ts +145 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Component, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-onode',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="nd-shell">
|
|
10
|
+
<div class="nd-header"><h2 class="nd-title">🖥️ ONODE</h2><p class="nd-sub">Your personal OASIS node. Store, validate, and relay data.</p></div>
|
|
11
|
+
<div class="nd-status-row">
|
|
12
|
+
<div class="nd-status-pill" [class.nd-status-pill--running]="running()">{{ running() ? '● Running' : '○ Stopped' }}</div>
|
|
13
|
+
<button class="nd-btn" [class.nd-btn--stop]="running()" (click)="running.set(!running())">{{ running() ? 'Stop Node' : 'Start Node' }}</button>
|
|
14
|
+
</div>
|
|
15
|
+
@if (running()) {
|
|
16
|
+
<div class="nd-metrics">
|
|
17
|
+
@for (m of metrics; track m.label) {
|
|
18
|
+
<div class="nd-metric"><div class="nd-metric-val">{{ m.value }}</div><div class="nd-metric-label">{{ m.label }}</div></div>
|
|
19
|
+
}
|
|
20
|
+
</div>
|
|
21
|
+
<div class="nd-logs-header">Node Logs</div>
|
|
22
|
+
<div class="nd-logs">
|
|
23
|
+
@for (l of logs; track l.time) {
|
|
24
|
+
<div class="nd-log nd-log--{{ l.level }}">
|
|
25
|
+
<span class="nd-log-time">{{ l.time }}</span>
|
|
26
|
+
<span class="nd-log-level">[{{ l.level.toUpperCase() }}]</span>
|
|
27
|
+
<span class="nd-log-msg">{{ l.message }}</span>
|
|
28
|
+
</div>
|
|
29
|
+
}
|
|
30
|
+
</div>
|
|
31
|
+
}
|
|
32
|
+
</div>
|
|
33
|
+
`,
|
|
34
|
+
styles: [`
|
|
35
|
+
.nd-shell{display:flex;flex-direction:column;gap:18px}
|
|
36
|
+
.nd-header{text-align:center}
|
|
37
|
+
.nd-title{font-family:'Orbitron',sans-serif;font-size:20px;color:#fff;margin:0 0 6px}
|
|
38
|
+
.nd-sub{font-size:13px;color:#7a9bbf;margin:0}
|
|
39
|
+
.nd-status-row{display:flex;align-items:center;gap:14px}
|
|
40
|
+
.nd-status-pill{flex:1;background:rgba(255,255,255,.04);border:1px solid rgba(255,80,80,.2);border-radius:8px;padding:10px 14px;font-family:'Orbitron',sans-serif;font-size:13px;color:#ff6b6b}
|
|
41
|
+
.nd-status-pill--running{border-color:rgba(72,220,130,.3);color:#48dc82}
|
|
42
|
+
.nd-btn{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:12px;font-weight:700;letter-spacing:.08em;padding:10px 20px;cursor:pointer}
|
|
43
|
+
.nd-btn--stop{background:rgba(255,80,80,.2);border:1px solid rgba(255,80,80,.35);color:#ff6b6b}
|
|
44
|
+
.nd-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
|
|
45
|
+
.nd-metric{background:rgba(255,255,255,.04);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:12px;text-align:center}
|
|
46
|
+
.nd-metric-val{font-family:'Share Tech Mono',monospace;font-size:16px;color:#00c8ff;font-weight:600}
|
|
47
|
+
.nd-metric-label{font-size:10px;color:#7a9bbf;margin-top:4px;text-transform:uppercase;letter-spacing:.06em}
|
|
48
|
+
.nd-logs-header{font-family:'Orbitron',sans-serif;font-size:12px;color:#7a9bbf;letter-spacing:.06em;text-transform:uppercase}
|
|
49
|
+
.nd-logs{background:#020a14;border:1px solid rgba(0,200,255,.1);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:5px;max-height:160px;overflow-y:auto;font-family:'Share Tech Mono',monospace}
|
|
50
|
+
.nd-log{display:flex;gap:10px;font-size:11px}
|
|
51
|
+
.nd-log-time{color:#4a6a88;flex-shrink:0}
|
|
52
|
+
.nd-log--info .nd-log-level{color:#00c8ff}
|
|
53
|
+
.nd-log--warn .nd-log-level{color:#ffb43c}
|
|
54
|
+
.nd-log--error .nd-log-level{color:#ff6b6b}
|
|
55
|
+
.nd-log-msg{color:#7a9bbf}
|
|
56
|
+
`]
|
|
57
|
+
})
|
|
58
|
+
export class OnodeComponent {
|
|
59
|
+
running = signal(false);
|
|
60
|
+
metrics = [
|
|
61
|
+
{ label: 'CPU', value: '18%' },
|
|
62
|
+
{ label: 'RAM', value: '2.1 GB' },
|
|
63
|
+
{ label: 'Storage', value: '47 GB' },
|
|
64
|
+
{ label: 'Blocks', value: '12,450' },
|
|
65
|
+
];
|
|
66
|
+
logs = [
|
|
67
|
+
{ time: '09:42:01', level: 'info', message: 'ONODE started. Connecting to ONET…' },
|
|
68
|
+
{ time: '09:42:02', level: 'info', message: 'Connected to 12 peers.' },
|
|
69
|
+
{ time: '09:42:05', level: 'info', message: 'Block #12450 validated.' },
|
|
70
|
+
{ time: '09:42:08', level: 'warn', message: 'Peer ONODE-77 latency high: 340ms.' },
|
|
71
|
+
{ time: '09:42:12', level: 'info', message: 'Data sync complete. 100% coverage.' },
|
|
72
|
+
];
|
|
73
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-activity-pub',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">🌐</div><h2 class="pi-title">ActivityPub</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">ActivityPub</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">activitypub.rocks</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">Federated social networking protocol for the decentralized web.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class ActivityPubComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-compare-provider-speeds',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="cps-shell">
|
|
10
|
+
<div class="cps-header"><span>⚡</span><h2 class="cps-title">Compare Provider Speeds</h2></div>
|
|
11
|
+
<div class="cps-list">
|
|
12
|
+
@for (p of providers(); track p.name) {
|
|
13
|
+
<div class="cps-row">
|
|
14
|
+
<div class="cps-name">{{ p.name }}</div>
|
|
15
|
+
<div class="cps-bar-wrap"><div class="cps-bar" [style.width.%]="p.speed"></div></div>
|
|
16
|
+
<div class="cps-ms">{{ p.ms }}ms</div>
|
|
17
|
+
</div>
|
|
18
|
+
}
|
|
19
|
+
</div>
|
|
20
|
+
<div class="cps-footer"><button class="cps-btn" (click)="close.emit()">Close</button></div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.cps-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.cps-header{display:flex;align-items:center;gap:10px}
|
|
26
|
+
.cps-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
27
|
+
.cps-list{display:flex;flex-direction:column;gap:10px}
|
|
28
|
+
.cps-row{display:flex;align-items:center;gap:12px}
|
|
29
|
+
.cps-name{width:120px;font-size:12px;color:#c8dff0;flex-shrink:0}
|
|
30
|
+
.cps-bar-wrap{flex:1;height:8px;background:rgba(255,255,255,.08);border-radius:999px;overflow:hidden}
|
|
31
|
+
.cps-bar{height:100%;background:linear-gradient(90deg,#00c8ff,#0080ff);border-radius:999px;transition:width .6s}
|
|
32
|
+
.cps-ms{width:50px;font-size:12px;color:#7a9bbf;text-align:right;flex-shrink:0}
|
|
33
|
+
.cps-footer{display:flex;justify-content:flex-end}
|
|
34
|
+
.cps-btn{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 22px;cursor:pointer}
|
|
35
|
+
`]
|
|
36
|
+
})
|
|
37
|
+
export class CompareProviderSpeedsComponent {
|
|
38
|
+
@Input() show = false;
|
|
39
|
+
@Output() close = new EventEmitter<void>();
|
|
40
|
+
providers = signal([
|
|
41
|
+
{ name: 'Holochain', speed: 95, ms: 12 },
|
|
42
|
+
{ name: 'IPFS', speed: 72, ms: 45 },
|
|
43
|
+
{ name: 'Ethereum', speed: 48, ms: 180 },
|
|
44
|
+
{ name: 'MongoDB', speed: 98, ms: 5 },
|
|
45
|
+
{ name: 'Neo4j', speed: 88, ms: 22 },
|
|
46
|
+
{ name: 'SQLite', speed: 100, ms: 1 },
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-eosio',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">🔵</div><h2 class="pi-title">EOSIO</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">EOSIO</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">eosio.org</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">High-performance blockchain platform for decentralized applications.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class EosioComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-ethereum',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">💎</div><h2 class="pi-title">Ethereum</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">Ethereum</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">ethereum.org</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">Decentralized smart contract platform for DeFi, NFTs and dApps.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class EthereumComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-holochain',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">🧬</div><h2 class="pi-title">Holochain</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">Holochain</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">holochain.org</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">Distributed peer-to-peer computing platform without global consensus.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class HolochainComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-ipfs',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">📁</div><h2 class="pi-title">IPFS</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">IPFS</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">ipfs.io</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">InterPlanetary File System — distributed, peer-to-peer hypermedia protocol.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class IpfsComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-manage-auto-fail-over',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="mf-shell">
|
|
10
|
+
<div class="mf-header"><span>🔄</span><h2 class="mf-title">Manage Auto Fail-Over</h2></div>
|
|
11
|
+
<div class="mf-body">
|
|
12
|
+
<div class="mf-field"><label class="mf-lbl">Primary Provider</label><input class="mf-inp" placeholder="Primary Provider..." /></div>
|
|
13
|
+
<div class="mf-field"><label class="mf-lbl">Fallback Provider 1</label><input class="mf-inp" placeholder="Fallback Provider 1..." /></div>
|
|
14
|
+
<div class="mf-field"><label class="mf-lbl">Fallback Provider 2</label><input class="mf-inp" placeholder="Fallback Provider 2..." /></div>
|
|
15
|
+
<div class="mf-field"><label class="mf-lbl">Fail-Over Threshold</label><input class="mf-inp" placeholder="Fail-Over Threshold..." /></div>
|
|
16
|
+
<div class="mf-field"><label class="mf-lbl">Retry Attempts</label><input class="mf-inp" placeholder="Retry Attempts..." /></div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="mf-footer">
|
|
19
|
+
<button class="mf-save" (click)="save()">Save</button>
|
|
20
|
+
<button class="mf-cancel" (click)="close.emit()">Cancel</button>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
`,
|
|
24
|
+
styles: [`
|
|
25
|
+
.mf-shell{display:flex;flex-direction:column;gap:18px;padding:20px}
|
|
26
|
+
.mf-header{display:flex;align-items:center;gap:10px}
|
|
27
|
+
.mf-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.mf-body{display:flex;flex-direction:column;gap:12px}
|
|
29
|
+
.mf-field{display:flex;flex-direction:column;gap:5px}
|
|
30
|
+
.mf-lbl{font-size:11px;font-weight:700;letter-spacing:.07em;color:#7a9bbf;text-transform:uppercase}
|
|
31
|
+
.mf-inp{background:rgba(255,255,255,.05);border:1px solid rgba(0,200,255,.25);border-radius:8px;color:#fff;font-size:13px;padding:10px 14px;outline:none}
|
|
32
|
+
.mf-inp:focus{border-color:rgba(0,200,255,.6)}
|
|
33
|
+
.mf-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
34
|
+
.mf-save{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:12px;font-weight:700;padding:10px 22px;cursor:pointer}
|
|
35
|
+
.mf-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:10px 18px;cursor:pointer}
|
|
36
|
+
`]
|
|
37
|
+
})
|
|
38
|
+
export class ManageAutoFailOverComponent {
|
|
39
|
+
@Input() show = false;
|
|
40
|
+
@Output() close = new EventEmitter<void>();
|
|
41
|
+
save() { this.close.emit(); }
|
|
42
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-manage-auto-replicaton',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="mf-shell">
|
|
10
|
+
<div class="mf-header"><span>📋</span><h2 class="mf-title">Manage Auto Replication</h2></div>
|
|
11
|
+
<div class="mf-body">
|
|
12
|
+
<div class="mf-field"><label class="mf-lbl">Source Provider</label><input class="mf-inp" placeholder="Source Provider..." /></div>
|
|
13
|
+
<div class="mf-field"><label class="mf-lbl">Target Providers</label><input class="mf-inp" placeholder="Target Providers..." /></div>
|
|
14
|
+
<div class="mf-field"><label class="mf-lbl">Replication Mode</label><input class="mf-inp" placeholder="Replication Mode..." /></div>
|
|
15
|
+
<div class="mf-field"><label class="mf-lbl">Schedule</label><input class="mf-inp" placeholder="Schedule..." /></div>
|
|
16
|
+
<div class="mf-field"><label class="mf-lbl">Max Copies</label><input class="mf-inp" placeholder="Max Copies..." /></div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="mf-footer">
|
|
19
|
+
<button class="mf-save" (click)="save()">Save</button>
|
|
20
|
+
<button class="mf-cancel" (click)="close.emit()">Cancel</button>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
`,
|
|
24
|
+
styles: [`
|
|
25
|
+
.mf-shell{display:flex;flex-direction:column;gap:18px;padding:20px}
|
|
26
|
+
.mf-header{display:flex;align-items:center;gap:10px}
|
|
27
|
+
.mf-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.mf-body{display:flex;flex-direction:column;gap:12px}
|
|
29
|
+
.mf-field{display:flex;flex-direction:column;gap:5px}
|
|
30
|
+
.mf-lbl{font-size:11px;font-weight:700;letter-spacing:.07em;color:#7a9bbf;text-transform:uppercase}
|
|
31
|
+
.mf-inp{background:rgba(255,255,255,.05);border:1px solid rgba(0,200,255,.25);border-radius:8px;color:#fff;font-size:13px;padding:10px 14px;outline:none}
|
|
32
|
+
.mf-inp:focus{border-color:rgba(0,200,255,.6)}
|
|
33
|
+
.mf-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
34
|
+
.mf-save{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:12px;font-weight:700;padding:10px 22px;cursor:pointer}
|
|
35
|
+
.mf-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:10px 18px;cursor:pointer}
|
|
36
|
+
`]
|
|
37
|
+
})
|
|
38
|
+
export class ManageAutoReplicatonComponent {
|
|
39
|
+
@Input() show = false;
|
|
40
|
+
@Output() close = new EventEmitter<void>();
|
|
41
|
+
save() { this.close.emit(); }
|
|
42
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-manage-load-balancing',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="mf-shell">
|
|
10
|
+
<div class="mf-header"><span>⚖️</span><h2 class="mf-title">Manage Load Balancing</h2></div>
|
|
11
|
+
<div class="mf-body">
|
|
12
|
+
<div class="mf-field"><label class="mf-lbl">Algorithm</label><input class="mf-inp" placeholder="Algorithm..." /></div>
|
|
13
|
+
<div class="mf-field"><label class="mf-lbl">Providers</label><input class="mf-inp" placeholder="Providers..." /></div>
|
|
14
|
+
<div class="mf-field"><label class="mf-lbl">Weight Distribution</label><input class="mf-inp" placeholder="Weight Distribution..." /></div>
|
|
15
|
+
<div class="mf-field"><label class="mf-lbl">Health Check Interval</label><input class="mf-inp" placeholder="Health Check Interval..." /></div>
|
|
16
|
+
<div class="mf-field"><label class="mf-lbl">Sticky Sessions</label><input class="mf-inp" placeholder="Sticky Sessions..." /></div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="mf-footer">
|
|
19
|
+
<button class="mf-save" (click)="save()">Save</button>
|
|
20
|
+
<button class="mf-cancel" (click)="close.emit()">Cancel</button>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
`,
|
|
24
|
+
styles: [`
|
|
25
|
+
.mf-shell{display:flex;flex-direction:column;gap:18px;padding:20px}
|
|
26
|
+
.mf-header{display:flex;align-items:center;gap:10px}
|
|
27
|
+
.mf-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.mf-body{display:flex;flex-direction:column;gap:12px}
|
|
29
|
+
.mf-field{display:flex;flex-direction:column;gap:5px}
|
|
30
|
+
.mf-lbl{font-size:11px;font-weight:700;letter-spacing:.07em;color:#7a9bbf;text-transform:uppercase}
|
|
31
|
+
.mf-inp{background:rgba(255,255,255,.05);border:1px solid rgba(0,200,255,.25);border-radius:8px;color:#fff;font-size:13px;padding:10px 14px;outline:none}
|
|
32
|
+
.mf-inp:focus{border-color:rgba(0,200,255,.6)}
|
|
33
|
+
.mf-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
34
|
+
.mf-save{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:12px;font-weight:700;padding:10px 22px;cursor:pointer}
|
|
35
|
+
.mf-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:10px 18px;cursor:pointer}
|
|
36
|
+
`]
|
|
37
|
+
})
|
|
38
|
+
export class ManageLoadBalancingComponent {
|
|
39
|
+
@Input() show = false;
|
|
40
|
+
@Output() close = new EventEmitter<void>();
|
|
41
|
+
save() { this.close.emit(); }
|
|
42
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-manage-providers',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="popup-shell">
|
|
10
|
+
<div class="popup-icon">⚙️</div>
|
|
11
|
+
<h2 class="popup-title">Manage Providers</h2>
|
|
12
|
+
<p class="popup-body">UI Coming Soon — access this feature via the OASIS API from the Developer menu.</p>
|
|
13
|
+
<button class="popup-btn" (click)="close.emit()">OK</button>
|
|
14
|
+
</div>
|
|
15
|
+
`,
|
|
16
|
+
styles: [`
|
|
17
|
+
.popup-shell{display:flex;flex-direction:column;align-items:center;gap:16px;padding:24px;text-align:center}
|
|
18
|
+
.popup-icon{font-size:48px}
|
|
19
|
+
.popup-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
20
|
+
.popup-body{font-size:13px;color:#a8bfd8;line-height:1.6;margin:0;max-width:380px}
|
|
21
|
+
.popup-btn{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:12px;font-weight:700;letter-spacing:.08em;padding:10px 28px;cursor:pointer;transition:opacity .2s}
|
|
22
|
+
.popup-btn:hover{opacity:.85}
|
|
23
|
+
`]
|
|
24
|
+
})
|
|
25
|
+
export class ManageProvidersComponent {
|
|
26
|
+
@Input() show = false;
|
|
27
|
+
@Output() close = new EventEmitter<void>();
|
|
28
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-mongo-db',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">🍃</div><h2 class="pi-title">MongoDB</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">MongoDB</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">mongodb.com</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">Document-oriented NoSQL database for modern applications.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class MongoDbComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
@Component({
|
|
5
|
+
selector: 'oasis-neo4j',
|
|
6
|
+
standalone: true,
|
|
7
|
+
imports: [CommonModule],
|
|
8
|
+
template: `
|
|
9
|
+
<div class="pi-shell">
|
|
10
|
+
<div class="pi-header"><div class="pi-icon">🔗</div><h2 class="pi-title">Neo4j</h2></div>
|
|
11
|
+
<div class="pi-body">
|
|
12
|
+
<div class="pi-row"><span class="pi-label">Provider</span><span class="pi-value">Neo4j</span></div>
|
|
13
|
+
<div class="pi-row"><span class="pi-label">Website</span><span class="pi-value">neo4j.com</span></div>
|
|
14
|
+
<div class="pi-row"><span class="pi-label">Status</span><span class="pi-badge pi-badge--active">Active</span></div>
|
|
15
|
+
<div class="pi-row"><span class="pi-label">Description</span><span class="pi-value" style="max-width:240px;text-align:right;font-size:12px;color:#a8bfd8">Native graph database for connected data and relationship-driven applications.</span></div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="pi-footer">
|
|
18
|
+
<button class="pi-btn-primary" (click)="connect()">Connect</button>
|
|
19
|
+
<button class="pi-btn-cancel" (click)="close.emit()">Cancel</button>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
`,
|
|
23
|
+
styles: [`
|
|
24
|
+
.pi-shell{display:flex;flex-direction:column;gap:16px;padding:20px}
|
|
25
|
+
.pi-header{display:flex;align-items:center;gap:12px}
|
|
26
|
+
.pi-icon{font-size:36px}
|
|
27
|
+
.pi-title{font-family:'Orbitron',sans-serif;font-size:18px;color:#fff;margin:0}
|
|
28
|
+
.pi-body{background:rgba(255,255,255,.03);border:1px solid rgba(0,200,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:10px}
|
|
29
|
+
.pi-row{display:flex;justify-content:space-between;align-items:center;font-size:13px}
|
|
30
|
+
.pi-label{color:#7a9bbf}
|
|
31
|
+
.pi-value{color:#c8dff0;font-weight:500}
|
|
32
|
+
.pi-badge{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;border-radius:999px;padding:2px 9px;border:1px solid currentColor}
|
|
33
|
+
.pi-badge--active{color:#00c864;border-color:rgba(0,200,100,.3)}
|
|
34
|
+
.pi-badge--inactive{color:#7a9bbf;border-color:rgba(122,155,191,.25)}
|
|
35
|
+
.pi-footer{display:flex;gap:10px;justify-content:flex-end}
|
|
36
|
+
.pi-btn-primary{background:linear-gradient(135deg,#00c8ff,#0080ff);border:none;border-radius:8px;color:#fff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
37
|
+
.pi-btn-cancel{background:transparent;border:1px solid rgba(0,200,255,.3);border-radius:8px;color:#00c8ff;font-family:'Orbitron',sans-serif;font-size:11px;font-weight:700;padding:9px 18px;cursor:pointer}
|
|
38
|
+
`]
|
|
39
|
+
})
|
|
40
|
+
export class Neo4jComponent {
|
|
41
|
+
@Input() show = false;
|
|
42
|
+
@Output() close = new EventEmitter<void>();
|
|
43
|
+
connect() { this.close.emit(); }
|
|
44
|
+
}
|