@kojinx/github 0.0.3 → 0.0.5

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.
@@ -1,4 +1,4 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, signal } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../services/github-auth.service";
@@ -6,6 +6,14 @@ export class GithubIntegrationCardComponent {
6
6
  constructor(githubAuth) {
7
7
  this.githubAuth = githubAuth;
8
8
  this.isConnected = false;
9
+ this.showModal = signal(false);
10
+ this.mapRepos = signal(true);
11
+ }
12
+ closeModal(event) {
13
+ this.showModal.set(false);
14
+ }
15
+ toggleMapRepos() {
16
+ this.mapRepos.update(v => !v);
9
17
  }
10
18
  link() {
11
19
  this.githubAuth.linkGithub();
@@ -15,34 +23,94 @@ export class GithubIntegrationCardComponent {
15
23
  }
16
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GithubIntegrationCardComponent, deps: [{ token: i1.GithubAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
17
25
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GithubIntegrationCardComponent, isStandalone: true, selector: "github-integration-card", inputs: { isConnected: "isConnected" }, ngImport: i0, template: `
18
- <div class="bg-black/30 border border-white/5 rounded-xl p-6 hover:border-white/10 transition-colors">
19
- <div class="flex items-start justify-between">
26
+ <!-- The Card -->
27
+ <div (click)="showModal.set(true)" class="group cursor-pointer relative p-6 rounded-xl bg-kojinx-panel border border-kojinx-border hover:border-white/30 transition-colors">
28
+ <div class="flex items-center justify-between">
20
29
  <div class="flex items-center gap-4">
21
- <div class="w-12 h-12 rounded-xl bg-[#24292e] flex items-center justify-center">
22
- <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
30
+ <div class="w-12 h-12 rounded-xl bg-white/10 flex items-center justify-center border border-white/20">
31
+ <svg class="w-7 h-7 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
23
32
  <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
24
33
  </svg>
25
34
  </div>
26
35
  <div>
27
- <h3 class="text-white font-medium">GitHub</h3>
28
- <p class="text-white/60 text-sm mt-1">Connect your repositories and manage PRs directly from Kojinx.</p>
36
+ <p class="text-base font-semibold text-white group-hover:text-gray-300 transition-colors">GitHub</p>
37
+ <p class="text-sm text-kojinx-text-muted mt-0.5">Log in to automatically pull profile data and projects.</p>
29
38
  </div>
30
39
  </div>
31
- @if (isConnected) {
32
- <div class="flex flex-col items-end gap-2">
33
- <span class="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-emerald-500/10 text-emerald-400 border border-emerald-500/20">
34
- <span class="w-1.5 h-1.5 rounded-full bg-emerald-400"></span>
40
+ <div class="pr-6">
41
+ @if (isConnected) {
42
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-green-500/10 border border-green-500/30 text-green-400 text-sm font-bold font-mono">
43
+ <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
44
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M5 13l4 4L19 7"/>
45
+ </svg>
35
46
  Connected
36
47
  </span>
37
- <button (click)="unlink()" class="text-xs text-red-400 hover:text-red-300 transition-colors">Disconnect</button>
38
- </div>
39
- } @else {
40
- <button (click)="link()" class="px-4 py-2 bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg text-sm text-white font-medium transition-all focus:outline-none focus:border-kojinx-purple">
41
- Connect
42
- </button>
43
- }
48
+ } @else {
49
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-white/5 border border-white/10 text-white text-sm font-bold font-mono group-hover:bg-white/10 transition-colors">
50
+ Connect
51
+ </span>
52
+ }
53
+ </div>
44
54
  </div>
45
55
  </div>
56
+
57
+ <!-- The Modal -->
58
+ @if (showModal()) {
59
+ <div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-fade-in" (click)="closeModal($event)">
60
+ <div class="bg-kojinx-panel border border-kojinx-border rounded-2xl w-full max-w-lg shadow-2xl overflow-hidden flex flex-col" (click)="$event.stopPropagation()">
61
+
62
+ <div class="p-6 border-b border-white/5 flex items-center justify-between">
63
+ <h2 class="text-xl font-bold text-white flex items-center gap-3">
64
+ <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
65
+ <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
66
+ </svg>
67
+ GitHub Integration
68
+ </h2>
69
+ <button (click)="showModal.set(false)" class="text-white/40 hover:text-white transition-colors p-1 rounded-lg hover:bg-white/5">
70
+ <svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
71
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
72
+ </svg>
73
+ </button>
74
+ </div>
75
+
76
+ <div class="p-6 space-y-6">
77
+
78
+ <div class="bg-kojinx-blue/10 border border-kojinx-blue/30 rounded-xl p-4 text-sm text-slate-300">
79
+ <p>Log in to automatically pull your profile data and projects.</p>
80
+ <p class="mt-2 text-kojinx-blue font-medium">Note: Kojinx only maps the repositories internally. It does not have access to read or modify your source code.</p>
81
+ </div>
82
+
83
+ <div class="flex items-center justify-between p-4 bg-black/20 border border-white/5 rounded-xl">
84
+ <div>
85
+ <p class="font-medium text-white">Repository Mapping</p>
86
+ <p class="text-xs text-kojinx-text-muted mt-1">Allow Kojinx to discover and map your repositories</p>
87
+ </div>
88
+ <label class="relative inline-flex items-center cursor-pointer">
89
+ <input type="checkbox" class="sr-only peer" [checked]="mapRepos()" (change)="toggleMapRepos()">
90
+ <div class="w-11 h-6 bg-black/40 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-slate-400 peer-checked:after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-kojinx-blue border border-white/10"></div>
91
+ </label>
92
+ </div>
93
+
94
+ </div>
95
+
96
+ <div class="p-6 border-t border-white/5 flex items-center justify-between bg-black/20">
97
+ @if (isConnected) {
98
+ <button (click)="unlink(); showModal.set(false)" class="px-4 py-2 rounded-lg text-sm font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 border border-red-500/20 transition-colors">
99
+ Disconnect GitHub
100
+ </button>
101
+ <button (click)="showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white/5 text-white hover:bg-white/10 border border-white/10 transition-colors ml-auto">
102
+ Done
103
+ </button>
104
+ } @else {
105
+ <button (click)="link(); showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white text-black hover:bg-gray-200 transition-colors ml-auto">
106
+ Connect GitHub
107
+ </button>
108
+ }
109
+ </div>
110
+
111
+ </div>
112
+ </div>
113
+ }
46
114
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
47
115
  }
48
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GithubIntegrationCardComponent, decorators: [{
@@ -52,37 +120,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
52
120
  standalone: true,
53
121
  imports: [CommonModule],
54
122
  template: `
55
- <div class="bg-black/30 border border-white/5 rounded-xl p-6 hover:border-white/10 transition-colors">
56
- <div class="flex items-start justify-between">
123
+ <!-- The Card -->
124
+ <div (click)="showModal.set(true)" class="group cursor-pointer relative p-6 rounded-xl bg-kojinx-panel border border-kojinx-border hover:border-white/30 transition-colors">
125
+ <div class="flex items-center justify-between">
57
126
  <div class="flex items-center gap-4">
58
- <div class="w-12 h-12 rounded-xl bg-[#24292e] flex items-center justify-center">
59
- <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
127
+ <div class="w-12 h-12 rounded-xl bg-white/10 flex items-center justify-center border border-white/20">
128
+ <svg class="w-7 h-7 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
60
129
  <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
61
130
  </svg>
62
131
  </div>
63
132
  <div>
64
- <h3 class="text-white font-medium">GitHub</h3>
65
- <p class="text-white/60 text-sm mt-1">Connect your repositories and manage PRs directly from Kojinx.</p>
133
+ <p class="text-base font-semibold text-white group-hover:text-gray-300 transition-colors">GitHub</p>
134
+ <p class="text-sm text-kojinx-text-muted mt-0.5">Log in to automatically pull profile data and projects.</p>
66
135
  </div>
67
136
  </div>
68
- @if (isConnected) {
69
- <div class="flex flex-col items-end gap-2">
70
- <span class="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-emerald-500/10 text-emerald-400 border border-emerald-500/20">
71
- <span class="w-1.5 h-1.5 rounded-full bg-emerald-400"></span>
137
+ <div class="pr-6">
138
+ @if (isConnected) {
139
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-green-500/10 border border-green-500/30 text-green-400 text-sm font-bold font-mono">
140
+ <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
141
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M5 13l4 4L19 7"/>
142
+ </svg>
72
143
  Connected
73
144
  </span>
74
- <button (click)="unlink()" class="text-xs text-red-400 hover:text-red-300 transition-colors">Disconnect</button>
75
- </div>
76
- } @else {
77
- <button (click)="link()" class="px-4 py-2 bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg text-sm text-white font-medium transition-all focus:outline-none focus:border-kojinx-purple">
78
- Connect
79
- </button>
80
- }
145
+ } @else {
146
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-white/5 border border-white/10 text-white text-sm font-bold font-mono group-hover:bg-white/10 transition-colors">
147
+ Connect
148
+ </span>
149
+ }
150
+ </div>
81
151
  </div>
82
152
  </div>
153
+
154
+ <!-- The Modal -->
155
+ @if (showModal()) {
156
+ <div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-fade-in" (click)="closeModal($event)">
157
+ <div class="bg-kojinx-panel border border-kojinx-border rounded-2xl w-full max-w-lg shadow-2xl overflow-hidden flex flex-col" (click)="$event.stopPropagation()">
158
+
159
+ <div class="p-6 border-b border-white/5 flex items-center justify-between">
160
+ <h2 class="text-xl font-bold text-white flex items-center gap-3">
161
+ <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
162
+ <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
163
+ </svg>
164
+ GitHub Integration
165
+ </h2>
166
+ <button (click)="showModal.set(false)" class="text-white/40 hover:text-white transition-colors p-1 rounded-lg hover:bg-white/5">
167
+ <svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
168
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
169
+ </svg>
170
+ </button>
171
+ </div>
172
+
173
+ <div class="p-6 space-y-6">
174
+
175
+ <div class="bg-kojinx-blue/10 border border-kojinx-blue/30 rounded-xl p-4 text-sm text-slate-300">
176
+ <p>Log in to automatically pull your profile data and projects.</p>
177
+ <p class="mt-2 text-kojinx-blue font-medium">Note: Kojinx only maps the repositories internally. It does not have access to read or modify your source code.</p>
178
+ </div>
179
+
180
+ <div class="flex items-center justify-between p-4 bg-black/20 border border-white/5 rounded-xl">
181
+ <div>
182
+ <p class="font-medium text-white">Repository Mapping</p>
183
+ <p class="text-xs text-kojinx-text-muted mt-1">Allow Kojinx to discover and map your repositories</p>
184
+ </div>
185
+ <label class="relative inline-flex items-center cursor-pointer">
186
+ <input type="checkbox" class="sr-only peer" [checked]="mapRepos()" (change)="toggleMapRepos()">
187
+ <div class="w-11 h-6 bg-black/40 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-slate-400 peer-checked:after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-kojinx-blue border border-white/10"></div>
188
+ </label>
189
+ </div>
190
+
191
+ </div>
192
+
193
+ <div class="p-6 border-t border-white/5 flex items-center justify-between bg-black/20">
194
+ @if (isConnected) {
195
+ <button (click)="unlink(); showModal.set(false)" class="px-4 py-2 rounded-lg text-sm font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 border border-red-500/20 transition-colors">
196
+ Disconnect GitHub
197
+ </button>
198
+ <button (click)="showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white/5 text-white hover:bg-white/10 border border-white/10 transition-colors ml-auto">
199
+ Done
200
+ </button>
201
+ } @else {
202
+ <button (click)="link(); showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white text-black hover:bg-gray-200 transition-colors ml-auto">
203
+ Connect GitHub
204
+ </button>
205
+ }
206
+ </div>
207
+
208
+ </div>
209
+ </div>
210
+ }
83
211
  `
84
212
  }]
85
213
  }], ctorParameters: () => [{ type: i1.GithubAuthService }], propDecorators: { isConnected: [{
86
214
  type: Input
87
215
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWludGVncmF0aW9uLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva29qaW54L2dpdGh1Yi9zcmMvbGliL2NvbXBvbmVudHMvZ2l0aHViLWludGVncmF0aW9uLWNhcmQvZ2l0aHViLWludGVncmF0aW9uLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBc0MvQyxNQUFNLE9BQU8sOEJBQThCO0lBRXpDLFlBQW9CLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRHhDLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBQ2MsQ0FBQztJQUVyRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0FWVSw4QkFBOEI7bUdBQTlCLDhCQUE4QiwySEEvQi9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCVCwyREE5QlMsWUFBWTs7NEZBZ0NYLDhCQUE4QjtrQkFuQzFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCVDtpQkFDRjtzRkFFVSxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdpdGh1YkF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2l0aHViLWF1dGguc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpdGh1Yi1pbnRlZ3JhdGlvbi1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImJnLWJsYWNrLzMwIGJvcmRlciBib3JkZXItd2hpdGUvNSByb3VuZGVkLXhsIHAtNiBob3Zlcjpib3JkZXItd2hpdGUvMTAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMiBoLTEyIHJvdW5kZWQteGwgYmctWyMyNDI5MmVdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwidy02IGgtNiB0ZXh0LXdoaXRlXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMkM2LjQ3NyAyIDIgNi40ODQgMiAxMi4wMTdjMCA0LjQyNSAyLjg2NSA4LjE4IDYuODM5IDkuNTA0LjUuMDkyLjY4Mi0uMjE3LjY4Mi0uNDgzIDAtLjIzNy0uMDA4LS44NjgtLjAxMy0xLjcwMy0yLjc4Mi42MDUtMy4zNjktMS4zNDMtMy4zNjktMS4zNDMtLjQ1NC0xLjE1OC0xLjExLTEuNDY2LTEuMTEtMS40NjYtLjkwOC0uNjIuMDY5LS42MDguMDY5LS42MDggMS4wMDMuMDcgMS41MzEgMS4wMzIgMS41MzEgMS4wMzIuODkyIDEuNTMgMi4zNDEgMS4wODggMi45MS44MzIuMDkyLS42NDcuMzUtMS4wODguNjM2LTEuMzM4LTIuMjItLjI1My00LjU1NS0xLjExMy00LjU1NS00Ljk1MSAwLTEuMDkzLjM5LTEuOTg4IDEuMDI5LTIuNjg4LS4xMDMtLjI1My0uNDQ2LTEuMjcyLjA5OC0yLjY1IDAgMCAuODQtLjI3IDIuNzUgMS4wMjZBOS41NjQgOS41NjQgMCAwMTEyIDYuODQ0Yy44NS4wMDQgMS43MDUuMTE1IDIuNTA0LjMzNyAxLjkwOS0xLjI5NiAyLjc0Ny0xLjAyNyAyLjc0Ny0xLjAyNy41NDYgMS4zNzkuMjAyIDIuMzk4LjEgMi42NTEuNjQuNyAxLjAyOCAxLjU5NSAxLjAyOCAyLjY4OCAwIDMuODQ4LTIuMzM5IDQuNjk1LTQuNTY2IDQuOTQzLjM1OS4zMDkuNjc4LjkyLjY3OCAxLjg1NSAwIDEuMzM4LS4wMTIgMi40MTktLjAxMiAyLjc0NyAwIC4yNjguMTguNTguNjg4LjQ4MkExMC4wMTkgMTAuMDE5IDAgMDAyMiAxMi4wMTdDMjIgNi40ODQgMTcuNTIyIDIgMTIgMnpcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXdoaXRlIGZvbnQtbWVkaXVtXCI+R2l0SHViPC9oMz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC13aGl0ZS82MCB0ZXh0LXNtIG10LTFcIj5Db25uZWN0IHlvdXIgcmVwb3NpdG9yaWVzIGFuZCBtYW5hZ2UgUFJzIGRpcmVjdGx5IGZyb20gS29qaW54LjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcHgtMi41IHB5LTEgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctZW1lcmFsZC01MDAvMTAgdGV4dC1lbWVyYWxkLTQwMCBib3JkZXIgYm9yZGVyLWVtZXJhbGQtNTAwLzIwXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsIGJnLWVtZXJhbGQtNDAwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICBDb25uZWN0ZWRcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInVubGluaygpXCIgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtcmVkLTQwMCBob3Zlcjp0ZXh0LXJlZC0zMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5EaXNjb25uZWN0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxpbmsoKVwiIGNsYXNzPVwicHgtNCBweS0yIGJnLXdoaXRlLzUgaG92ZXI6Ymctd2hpdGUvMTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLWxnIHRleHQtc20gdGV4dC13aGl0ZSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ym9yZGVyLWtvamlueC1wdXJwbGVcIj5cbiAgICAgICAgICAgIENvbm5lY3RcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgR2l0aHViSW50ZWdyYXRpb25DYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXNDb25uZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnaXRodWJBdXRoOiBHaXRodWJBdXRoU2VydmljZSkge31cbiAgXG4gIGxpbmsoKSB7XG4gICAgdGhpcy5naXRodWJBdXRoLmxpbmtHaXRodWIoKTtcbiAgfVxuXG4gIHVubGluaygpIHtcbiAgICB0aGlzLmdpdGh1YkF1dGgudW5saW5rR2l0aHViKCk7XG4gIH1cbn1cbiJdfQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWludGVncmF0aW9uLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva29qaW54L2dpdGh1Yi9zcmMvbGliL2NvbXBvbmVudHMvZ2l0aHViLWludGVncmF0aW9uLWNhcmQvZ2l0aHViLWludGVncmF0aW9uLWNhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQWtHL0MsTUFBTSxPQUFPLDhCQUE4QjtJQU16QyxZQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUx4QyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3QixjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLGFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbUIsQ0FBQztJQUVyRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqQyxDQUFDOytHQXRCVSw4QkFBOEI7bUdBQTlCLDhCQUE4QiwySEEzRi9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlGVCwyREExRlMsWUFBWTs7NEZBNEZYLDhCQUE4QjtrQkEvRjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlGVDtpQkFDRjtzRkFFVSxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgR2l0aHViQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9naXRodWItYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2l0aHViLWludGVncmF0aW9uLWNhcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tIFRoZSBDYXJkIC0tPlxuICAgIDxkaXYgKGNsaWNrKT1cInNob3dNb2RhbC5zZXQodHJ1ZSlcIiBjbGFzcz1cImdyb3VwIGN1cnNvci1wb2ludGVyIHJlbGF0aXZlIHAtNiByb3VuZGVkLXhsIGJnLWtvamlueC1wYW5lbCBib3JkZXIgYm9yZGVyLWtvamlueC1ib3JkZXIgaG92ZXI6Ym9yZGVyLXdoaXRlLzMwIHRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEyIGgtMTIgcm91bmRlZC14bCBiZy13aGl0ZS8xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIgYm9yZGVyLXdoaXRlLzIwXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwidy03IGgtNyB0ZXh0LXdoaXRlXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMkM2LjQ3NyAyIDIgNi40ODQgMiAxMi4wMTdjMCA0LjQyNSAyLjg2NSA4LjE4IDYuODM5IDkuNTA0LjUuMDkyLjY4Mi0uMjE3LjY4Mi0uNDgzIDAtLjIzNy0uMDA4LS44NjgtLjAxMy0xLjcwMy0yLjc4Mi42MDUtMy4zNjktMS4zNDMtMy4zNjktMS4zNDMtLjQ1NC0xLjE1OC0xLjExLTEuNDY2LTEuMTEtMS40NjYtLjkwOC0uNjIuMDY5LS42MDguMDY5LS42MDggMS4wMDMuMDcgMS41MzEgMS4wMzIgMS41MzEgMS4wMzIuODkyIDEuNTMgMi4zNDEgMS4wODggMi45MS44MzIuMDkyLS42NDcuMzUtMS4wODguNjM2LTEuMzM4LTIuMjItLjI1My00LjU1NS0xLjExMy00LjU1NS00Ljk1MSAwLTEuMDkzLjM5LTEuOTg4IDEuMDI5LTIuNjg4LS4xMDMtLjI1My0uNDQ2LTEuMjcyLjA5OC0yLjY1IDAgMCAuODQtLjI3IDIuNzUgMS4wMjZBOS41NjQgOS41NjQgMCAwMTEyIDYuODQ0Yy44NS4wMDQgMS43MDUuMTE1IDIuNTA0LjMzNyAxLjkwOS0xLjI5NiAyLjc0Ny0xLjAyNyAyLjc0Ny0xLjAyNy41NDYgMS4zNzkuMjAyIDIuMzk4LjEgMi42NTEuNjQuNyAxLjAyOCAxLjU5NSAxLjAyOCAyLjY4OCAwIDMuODQ4LTIuMzM5IDQuNjk1LTQuNTY2IDQuOTQzLjM1OS4zMDkuNjc4LjkyLjY3OCAxLjg1NSAwIDEuMzM4LS4wMTIgMi40MTktLjAxMiAyLjc0NyAwIC4yNjguMTguNTguNjg4LjQ4MkExMC4wMTkgMTAuMDE5IDAgMDAyMiAxMi4wMTdDMjIgNi40ODQgMTcuNTIyIDIgMTIgMnpcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUgZ3JvdXAtaG92ZXI6dGV4dC1ncmF5LTMwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPkdpdEh1YjwvcD5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWtvamlueC10ZXh0LW11dGVkIG10LTAuNVwiPkxvZyBpbiB0byBhdXRvbWF0aWNhbGx5IHB1bGwgcHJvZmlsZSBkYXRhIGFuZCBwcm9qZWN0cy48L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHItNlwiPlxuICAgICAgICAgIEBpZiAoaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcHgtNCBweS0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNTAwLzEwIGJvcmRlciBib3JkZXItZ3JlZW4tNTAwLzMwIHRleHQtZ3JlZW4tNDAwIHRleHQtc20gZm9udC1ib2xkIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjIuNVwiIGQ9XCJNNSAxM2w0IDRMMTkgN1wiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIENvbm5lY3RlZFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC00IHB5LTIgcm91bmRlZC1sZyBiZy13aGl0ZS81IGJvcmRlciBib3JkZXItd2hpdGUvMTAgdGV4dC13aGl0ZSB0ZXh0LXNtIGZvbnQtYm9sZCBmb250LW1vbm8gZ3JvdXAtaG92ZXI6Ymctd2hpdGUvMTAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgQ29ubmVjdFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGhlIE1vZGFsIC0tPlxuICAgIEBpZiAoc2hvd01vZGFsKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2svNjAgYmFja2Ryb3AtYmx1ci1zbSBhbmltYXRlLWZhZGUtaW5cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJiZy1rb2ppbngtcGFuZWwgYm9yZGVyIGJvcmRlci1rb2ppbngtYm9yZGVyIHJvdW5kZWQtMnhsIHctZnVsbCBtYXgtdy1sZyBzaGFkb3ctMnhsIG92ZXJmbG93LWhpZGRlbiBmbGV4IGZsZXgtY29sXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTYgYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3LTYgaC02IHRleHQtd2hpdGVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDJDNi40NzcgMiAyIDYuNDg0IDIgMTIuMDE3YzAgNC40MjUgMi44NjUgOC4xOCA2LjgzOSA5LjUwNC41LjA5Mi42ODItLjIxNy42ODItLjQ4MyAwLS4yMzctLjAwOC0uODY4LS4wMTMtMS43MDMtMi43ODIuNjA1LTMuMzY5LTEuMzQzLTMuMzY5LTEuMzQzLS40NTQtMS4xNTgtMS4xMS0xLjQ2Ni0xLjExLTEuNDY2LS45MDgtLjYyLjA2OS0uNjA4LjA2OS0uNjA4IDEuMDAzLjA3IDEuNTMxIDEuMDMyIDEuNTMxIDEuMDMyLjg5MiAxLjUzIDIuMzQxIDEuMDg4IDIuOTEuODMyLjA5Mi0uNjQ3LjM1LTEuMDg4LjYzNi0xLjMzOC0yLjIyLS4yNTMtNC41NTUtMS4xMTMtNC41NTUtNC45NTEgMC0xLjA5My4zOS0xLjk4OCAxLjAyOS0yLjY4OC0uMTAzLS4yNTMtLjQ0Ni0xLjI3Mi4wOTgtMi42NSAwIDAgLjg0LS4yNyAyLjc1IDEuMDI2QTkuNTY0IDkuNTY0IDAgMDExMiA2Ljg0NGMuODUuMDA0IDEuNzA1LjExNSAyLjUwNC4zMzcgMS45MDktMS4yOTYgMi43NDctMS4wMjcgMi43NDctMS4wMjcuNTQ2IDEuMzc5LjIwMiAyLjM5OC4xIDIuNjUxLjY0LjcgMS4wMjggMS41OTUgMS4wMjggMi42ODggMCAzLjg0OC0yLjMzOSA0LjY5NS00LjU2NiA0Ljk0My4zNTkuMzA5LjY3OC45Mi42NzggMS44NTUgMCAxLjMzOC0uMDEyIDIuNDE5LS4wMTIgMi43NDcgMCAuMjY4LjE4LjU4LjY4OC40ODJBMTAuMDE5IDEwLjAxOSAwIDAwMjIgMTIuMDE3QzIyIDYuNDg0IDE3LjUyMiAyIDEyIDJ6XCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICBHaXRIdWIgSW50ZWdyYXRpb25cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93TW9kYWwuc2V0KGZhbHNlKVwiIGNsYXNzPVwidGV4dC13aGl0ZS80MCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHAtMSByb3VuZGVkLWxnIGhvdmVyOmJnLXdoaXRlLzVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTYgc3BhY2UteS02XCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy1rb2ppbngtYmx1ZS8xMCBib3JkZXIgYm9yZGVyLWtvamlueC1ibHVlLzMwIHJvdW5kZWQteGwgcC00IHRleHQtc20gdGV4dC1zbGF0ZS0zMDBcIj5cbiAgICAgICAgICAgICAgPHA+TG9nIGluIHRvIGF1dG9tYXRpY2FsbHkgcHVsbCB5b3VyIHByb2ZpbGUgZGF0YSBhbmQgcHJvamVjdHMuPC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTIgdGV4dC1rb2ppbngtYmx1ZSBmb250LW1lZGl1bVwiPk5vdGU6IEtvamlueCBvbmx5IG1hcHMgdGhlIHJlcG9zaXRvcmllcyBpbnRlcm5hbGx5LiBJdCBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byByZWFkIG9yIG1vZGlmeSB5b3VyIHNvdXJjZSBjb2RlLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtNCBiZy1ibGFjay8yMCBib3JkZXIgYm9yZGVyLXdoaXRlLzUgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC13aGl0ZVwiPlJlcG9zaXRvcnkgTWFwcGluZzwvcD5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1rb2ppbngtdGV4dC1tdXRlZCBtdC0xXCI+QWxsb3cgS29qaW54IHRvIGRpc2NvdmVyIGFuZCBtYXAgeW91ciByZXBvc2l0b3JpZXM8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzci1vbmx5IHBlZXJcIiBbY2hlY2tlZF09XCJtYXBSZXBvcygpXCIgKGNoYW5nZSk9XCJ0b2dnbGVNYXBSZXBvcygpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTEgaC02IGJnLWJsYWNrLzQwIHBlZXItZm9jdXM6b3V0bGluZS1ub25lIHJvdW5kZWQtZnVsbCBwZWVyIHBlZXItY2hlY2tlZDphZnRlcjp0cmFuc2xhdGUteC1mdWxsIHBlZXItY2hlY2tlZDphZnRlcjpib3JkZXItd2hpdGUgYWZ0ZXI6Y29udGVudC1bJyddIGFmdGVyOmFic29sdXRlIGFmdGVyOnRvcC1bMnB4XSBhZnRlcjpsZWZ0LVsycHhdIGFmdGVyOmJnLXNsYXRlLTQwMCBwZWVyLWNoZWNrZWQ6YWZ0ZXI6Ymctd2hpdGUgYWZ0ZXI6cm91bmRlZC1mdWxsIGFmdGVyOmgtNSBhZnRlcjp3LTUgYWZ0ZXI6dHJhbnNpdGlvbi1hbGwgcGVlci1jaGVja2VkOmJnLWtvamlueC1ibHVlIGJvcmRlciBib3JkZXItd2hpdGUvMTBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC02IGJvcmRlci10IGJvcmRlci13aGl0ZS81IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ibGFjay8yMFwiPlxuICAgICAgICAgICAgQGlmIChpc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1bmxpbmsoKTsgc2hvd01vZGFsLnNldChmYWxzZSlcIiBjbGFzcz1cInB4LTQgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gYmctcmVkLTUwMC8xMCB0ZXh0LXJlZC00MDAgaG92ZXI6YmctcmVkLTUwMC8yMCBib3JkZXIgYm9yZGVyLXJlZC01MDAvMjAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgICAgICBEaXNjb25uZWN0IEdpdEh1YlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd01vZGFsLnNldChmYWxzZSlcIiBjbGFzcz1cInB4LTYgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gYmctd2hpdGUvNSB0ZXh0LXdoaXRlIGhvdmVyOmJnLXdoaXRlLzEwIGJvcmRlciBib3JkZXItd2hpdGUvMTAgdHJhbnNpdGlvbi1jb2xvcnMgbWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgIERvbmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibGluaygpOyBzaG93TW9kYWwuc2V0KGZhbHNlKVwiIGNsYXNzPVwicHgtNiBweS0yIHJvdW5kZWQtbGcgdGV4dC1zbSBmb250LW1lZGl1bSBiZy13aGl0ZSB0ZXh0LWJsYWNrIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzIG1sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICBDb25uZWN0IEdpdEh1YlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBHaXRodWJJbnRlZ3JhdGlvbkNhcmRDb21wb25lbnQge1xuICBASW5wdXQoKSBpc0Nvbm5lY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgcmVhZG9ubHkgc2hvd01vZGFsID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbWFwUmVwb3MgPSBzaWduYWwodHJ1ZSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnaXRodWJBdXRoOiBHaXRodWJBdXRoU2VydmljZSkge31cbiAgXG4gIGNsb3NlTW9kYWwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLnNob3dNb2RhbC5zZXQoZmFsc2UpO1xuICB9XG5cbiAgdG9nZ2xlTWFwUmVwb3MoKSB7XG4gICAgdGhpcy5tYXBSZXBvcy51cGRhdGUodiA9PiAhdik7XG4gIH1cblxuICBsaW5rKCkge1xuICAgIHRoaXMuZ2l0aHViQXV0aC5saW5rR2l0aHViKCk7XG4gIH1cblxuICB1bmxpbmsoKSB7XG4gICAgdGhpcy5naXRodWJBdXRoLnVubGlua0dpdGh1YigpO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Inject, Injectable, Input, Component } from '@angular/core';
2
+ import { InjectionToken, Inject, Injectable, Input, Component, signal } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
 
5
5
  const KOJINX_API_BASE_URL = new InjectionToken('KOJINX_API_BASE_URL');
@@ -117,6 +117,14 @@ class GithubIntegrationCardComponent {
117
117
  constructor(githubAuth) {
118
118
  this.githubAuth = githubAuth;
119
119
  this.isConnected = false;
120
+ this.showModal = signal(false);
121
+ this.mapRepos = signal(true);
122
+ }
123
+ closeModal(event) {
124
+ this.showModal.set(false);
125
+ }
126
+ toggleMapRepos() {
127
+ this.mapRepos.update(v => !v);
120
128
  }
121
129
  link() {
122
130
  this.githubAuth.linkGithub();
@@ -126,34 +134,94 @@ class GithubIntegrationCardComponent {
126
134
  }
127
135
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GithubIntegrationCardComponent, deps: [{ token: GithubAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
128
136
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GithubIntegrationCardComponent, isStandalone: true, selector: "github-integration-card", inputs: { isConnected: "isConnected" }, ngImport: i0, template: `
129
- <div class="bg-black/30 border border-white/5 rounded-xl p-6 hover:border-white/10 transition-colors">
130
- <div class="flex items-start justify-between">
137
+ <!-- The Card -->
138
+ <div (click)="showModal.set(true)" class="group cursor-pointer relative p-6 rounded-xl bg-kojinx-panel border border-kojinx-border hover:border-white/30 transition-colors">
139
+ <div class="flex items-center justify-between">
131
140
  <div class="flex items-center gap-4">
132
- <div class="w-12 h-12 rounded-xl bg-[#24292e] flex items-center justify-center">
133
- <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
141
+ <div class="w-12 h-12 rounded-xl bg-white/10 flex items-center justify-center border border-white/20">
142
+ <svg class="w-7 h-7 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
134
143
  <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
135
144
  </svg>
136
145
  </div>
137
146
  <div>
138
- <h3 class="text-white font-medium">GitHub</h3>
139
- <p class="text-white/60 text-sm mt-1">Connect your repositories and manage PRs directly from Kojinx.</p>
147
+ <p class="text-base font-semibold text-white group-hover:text-gray-300 transition-colors">GitHub</p>
148
+ <p class="text-sm text-kojinx-text-muted mt-0.5">Log in to automatically pull profile data and projects.</p>
140
149
  </div>
141
150
  </div>
142
- @if (isConnected) {
143
- <div class="flex flex-col items-end gap-2">
144
- <span class="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-emerald-500/10 text-emerald-400 border border-emerald-500/20">
145
- <span class="w-1.5 h-1.5 rounded-full bg-emerald-400"></span>
151
+ <div class="pr-6">
152
+ @if (isConnected) {
153
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-green-500/10 border border-green-500/30 text-green-400 text-sm font-bold font-mono">
154
+ <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
155
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M5 13l4 4L19 7"/>
156
+ </svg>
146
157
  Connected
147
158
  </span>
148
- <button (click)="unlink()" class="text-xs text-red-400 hover:text-red-300 transition-colors">Disconnect</button>
149
- </div>
150
- } @else {
151
- <button (click)="link()" class="px-4 py-2 bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg text-sm text-white font-medium transition-all focus:outline-none focus:border-kojinx-purple">
152
- Connect
153
- </button>
154
- }
159
+ } @else {
160
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-white/5 border border-white/10 text-white text-sm font-bold font-mono group-hover:bg-white/10 transition-colors">
161
+ Connect
162
+ </span>
163
+ }
164
+ </div>
155
165
  </div>
156
166
  </div>
167
+
168
+ <!-- The Modal -->
169
+ @if (showModal()) {
170
+ <div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-fade-in" (click)="closeModal($event)">
171
+ <div class="bg-kojinx-panel border border-kojinx-border rounded-2xl w-full max-w-lg shadow-2xl overflow-hidden flex flex-col" (click)="$event.stopPropagation()">
172
+
173
+ <div class="p-6 border-b border-white/5 flex items-center justify-between">
174
+ <h2 class="text-xl font-bold text-white flex items-center gap-3">
175
+ <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
176
+ <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
177
+ </svg>
178
+ GitHub Integration
179
+ </h2>
180
+ <button (click)="showModal.set(false)" class="text-white/40 hover:text-white transition-colors p-1 rounded-lg hover:bg-white/5">
181
+ <svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
182
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
183
+ </svg>
184
+ </button>
185
+ </div>
186
+
187
+ <div class="p-6 space-y-6">
188
+
189
+ <div class="bg-kojinx-blue/10 border border-kojinx-blue/30 rounded-xl p-4 text-sm text-slate-300">
190
+ <p>Log in to automatically pull your profile data and projects.</p>
191
+ <p class="mt-2 text-kojinx-blue font-medium">Note: Kojinx only maps the repositories internally. It does not have access to read or modify your source code.</p>
192
+ </div>
193
+
194
+ <div class="flex items-center justify-between p-4 bg-black/20 border border-white/5 rounded-xl">
195
+ <div>
196
+ <p class="font-medium text-white">Repository Mapping</p>
197
+ <p class="text-xs text-kojinx-text-muted mt-1">Allow Kojinx to discover and map your repositories</p>
198
+ </div>
199
+ <label class="relative inline-flex items-center cursor-pointer">
200
+ <input type="checkbox" class="sr-only peer" [checked]="mapRepos()" (change)="toggleMapRepos()">
201
+ <div class="w-11 h-6 bg-black/40 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-slate-400 peer-checked:after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-kojinx-blue border border-white/10"></div>
202
+ </label>
203
+ </div>
204
+
205
+ </div>
206
+
207
+ <div class="p-6 border-t border-white/5 flex items-center justify-between bg-black/20">
208
+ @if (isConnected) {
209
+ <button (click)="unlink(); showModal.set(false)" class="px-4 py-2 rounded-lg text-sm font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 border border-red-500/20 transition-colors">
210
+ Disconnect GitHub
211
+ </button>
212
+ <button (click)="showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white/5 text-white hover:bg-white/10 border border-white/10 transition-colors ml-auto">
213
+ Done
214
+ </button>
215
+ } @else {
216
+ <button (click)="link(); showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white text-black hover:bg-gray-200 transition-colors ml-auto">
217
+ Connect GitHub
218
+ </button>
219
+ }
220
+ </div>
221
+
222
+ </div>
223
+ </div>
224
+ }
157
225
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
158
226
  }
159
227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GithubIntegrationCardComponent, decorators: [{
@@ -163,34 +231,94 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
163
231
  standalone: true,
164
232
  imports: [CommonModule],
165
233
  template: `
166
- <div class="bg-black/30 border border-white/5 rounded-xl p-6 hover:border-white/10 transition-colors">
167
- <div class="flex items-start justify-between">
234
+ <!-- The Card -->
235
+ <div (click)="showModal.set(true)" class="group cursor-pointer relative p-6 rounded-xl bg-kojinx-panel border border-kojinx-border hover:border-white/30 transition-colors">
236
+ <div class="flex items-center justify-between">
168
237
  <div class="flex items-center gap-4">
169
- <div class="w-12 h-12 rounded-xl bg-[#24292e] flex items-center justify-center">
170
- <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
238
+ <div class="w-12 h-12 rounded-xl bg-white/10 flex items-center justify-center border border-white/20">
239
+ <svg class="w-7 h-7 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
171
240
  <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
172
241
  </svg>
173
242
  </div>
174
243
  <div>
175
- <h3 class="text-white font-medium">GitHub</h3>
176
- <p class="text-white/60 text-sm mt-1">Connect your repositories and manage PRs directly from Kojinx.</p>
244
+ <p class="text-base font-semibold text-white group-hover:text-gray-300 transition-colors">GitHub</p>
245
+ <p class="text-sm text-kojinx-text-muted mt-0.5">Log in to automatically pull profile data and projects.</p>
177
246
  </div>
178
247
  </div>
179
- @if (isConnected) {
180
- <div class="flex flex-col items-end gap-2">
181
- <span class="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-emerald-500/10 text-emerald-400 border border-emerald-500/20">
182
- <span class="w-1.5 h-1.5 rounded-full bg-emerald-400"></span>
248
+ <div class="pr-6">
249
+ @if (isConnected) {
250
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-green-500/10 border border-green-500/30 text-green-400 text-sm font-bold font-mono">
251
+ <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
252
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M5 13l4 4L19 7"/>
253
+ </svg>
183
254
  Connected
184
255
  </span>
185
- <button (click)="unlink()" class="text-xs text-red-400 hover:text-red-300 transition-colors">Disconnect</button>
186
- </div>
187
- } @else {
188
- <button (click)="link()" class="px-4 py-2 bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg text-sm text-white font-medium transition-all focus:outline-none focus:border-kojinx-purple">
189
- Connect
190
- </button>
191
- }
256
+ } @else {
257
+ <span class="inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-white/5 border border-white/10 text-white text-sm font-bold font-mono group-hover:bg-white/10 transition-colors">
258
+ Connect
259
+ </span>
260
+ }
261
+ </div>
192
262
  </div>
193
263
  </div>
264
+
265
+ <!-- The Modal -->
266
+ @if (showModal()) {
267
+ <div class="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-fade-in" (click)="closeModal($event)">
268
+ <div class="bg-kojinx-panel border border-kojinx-border rounded-2xl w-full max-w-lg shadow-2xl overflow-hidden flex flex-col" (click)="$event.stopPropagation()">
269
+
270
+ <div class="p-6 border-b border-white/5 flex items-center justify-between">
271
+ <h2 class="text-xl font-bold text-white flex items-center gap-3">
272
+ <svg class="w-6 h-6 text-white" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
273
+ <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
274
+ </svg>
275
+ GitHub Integration
276
+ </h2>
277
+ <button (click)="showModal.set(false)" class="text-white/40 hover:text-white transition-colors p-1 rounded-lg hover:bg-white/5">
278
+ <svg class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
279
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
280
+ </svg>
281
+ </button>
282
+ </div>
283
+
284
+ <div class="p-6 space-y-6">
285
+
286
+ <div class="bg-kojinx-blue/10 border border-kojinx-blue/30 rounded-xl p-4 text-sm text-slate-300">
287
+ <p>Log in to automatically pull your profile data and projects.</p>
288
+ <p class="mt-2 text-kojinx-blue font-medium">Note: Kojinx only maps the repositories internally. It does not have access to read or modify your source code.</p>
289
+ </div>
290
+
291
+ <div class="flex items-center justify-between p-4 bg-black/20 border border-white/5 rounded-xl">
292
+ <div>
293
+ <p class="font-medium text-white">Repository Mapping</p>
294
+ <p class="text-xs text-kojinx-text-muted mt-1">Allow Kojinx to discover and map your repositories</p>
295
+ </div>
296
+ <label class="relative inline-flex items-center cursor-pointer">
297
+ <input type="checkbox" class="sr-only peer" [checked]="mapRepos()" (change)="toggleMapRepos()">
298
+ <div class="w-11 h-6 bg-black/40 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-slate-400 peer-checked:after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-kojinx-blue border border-white/10"></div>
299
+ </label>
300
+ </div>
301
+
302
+ </div>
303
+
304
+ <div class="p-6 border-t border-white/5 flex items-center justify-between bg-black/20">
305
+ @if (isConnected) {
306
+ <button (click)="unlink(); showModal.set(false)" class="px-4 py-2 rounded-lg text-sm font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 border border-red-500/20 transition-colors">
307
+ Disconnect GitHub
308
+ </button>
309
+ <button (click)="showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white/5 text-white hover:bg-white/10 border border-white/10 transition-colors ml-auto">
310
+ Done
311
+ </button>
312
+ } @else {
313
+ <button (click)="link(); showModal.set(false)" class="px-6 py-2 rounded-lg text-sm font-medium bg-white text-black hover:bg-gray-200 transition-colors ml-auto">
314
+ Connect GitHub
315
+ </button>
316
+ }
317
+ </div>
318
+
319
+ </div>
320
+ </div>
321
+ }
194
322
  `
195
323
  }]
196
324
  }], ctorParameters: () => [{ type: GithubAuthService }], propDecorators: { isConnected: [{
@@ -1 +1 @@
1
- {"version":3,"file":"kojinx-github.mjs","sources":["../../../../projects/kojinx/github/src/lib/tokens.ts","../../../../projects/kojinx/github/src/lib/services/github-auth.service.ts","../../../../projects/kojinx/github/src/lib/components/github-login-button/github-login-button.component.ts","../../../../projects/kojinx/github/src/lib/components/github-integration-card/github-integration-card.component.ts","../../../../projects/kojinx/github/src/kojinx-github.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const KOJINX_API_BASE_URL = new InjectionToken<() => string>('KOJINX_API_BASE_URL');\nexport const KOJINX_AUTH_TOKEN = new InjectionToken<() => Promise<string | null>>('KOJINX_AUTH_TOKEN');\nexport const KOJINX_OPEN_EXTERNAL = new InjectionToken<(url: string) => Promise<void>>('KOJINX_OPEN_EXTERNAL');\nexport const KOJINX_AUTH_SUCCESS_CALLBACK = new InjectionToken<(token: string) => Promise<void>>('KOJINX_AUTH_SUCCESS_CALLBACK');\nexport const KOJINX_UNLINK_LOCAL_CALLBACK = new InjectionToken<() => Promise<void>>('KOJINX_UNLINK_LOCAL_CALLBACK');\n","import { Injectable, Inject, NgZone } from '@angular/core';\nimport { KOJINX_API_BASE_URL, KOJINX_AUTH_TOKEN, KOJINX_OPEN_EXTERNAL, KOJINX_AUTH_SUCCESS_CALLBACK, KOJINX_UNLINK_LOCAL_CALLBACK } from '../tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class GithubAuthService {\n constructor(\n private zone: NgZone,\n @Inject(KOJINX_API_BASE_URL) private getApiUrl: () => string,\n @Inject(KOJINX_AUTH_TOKEN) private getToken: () => Promise<string | null>,\n @Inject(KOJINX_OPEN_EXTERNAL) private openExternal: (url: string) => Promise<void>,\n @Inject(KOJINX_AUTH_SUCCESS_CALLBACK) private authSuccess: (token: string) => Promise<void>,\n @Inject(KOJINX_UNLINK_LOCAL_CALLBACK) private unlinkLocal: () => Promise<void>\n ) {\n this.setupTauriListener();\n }\n\n async linkGithub(): Promise<void> {\n const url = `${this.getApiUrl()}/api/auth/link-github`;\n const token = await this.getToken();\n const res = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` } });\n if (res.ok) {\n const data = await res.json();\n if (data.url) await this.openExternal(data.url);\n }\n }\n\n async unlinkGithub(): Promise<void> {\n const url = `${this.getApiUrl()}/api/auth/unlink-github`;\n const token = await this.getToken();\n const res = await fetch(url, { method: 'POST', headers: { 'Authorization': `Bearer ${token}` } });\n if (res.ok) {\n await this.unlinkLocal();\n }\n }\n\n initiateOAuth(): void {\n const url = `${this.getApiUrl()}/api/auth/github`;\n this.openExternal(url);\n }\n\n private async setupTauriListener(): Promise<void> {\n try {\n const { listen } = await import('@tauri-apps/api/event');\n await listen<{token: string}>('oauth-success', (event) => {\n this.zone.run(() => {\n this.authSuccess(event.payload.token);\n });\n });\n } catch(e) {}\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { GithubAuthService } from '../../services/github-auth.service';\n\n@Component({\n selector: 'github-login-button',\n standalone: true,\n template: `\n <button (click)=\"login()\" [disabled]=\"isLoading\" class=\"w-full flex justify-center items-center gap-3 bg-white/5 hover:bg-white/10 text-white font-medium py-3 px-4 rounded-xl transition-all border border-white/10 focus:outline-none focus:ring-2 focus:ring-white/20\">\n <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" clip-rule=\"evenodd\" />\n </svg>\n {{ text }}\n </button>\n `\n})\nexport class GithubLoginButtonComponent {\n @Input() text: string = 'Continue with GitHub';\n @Input() isLoading: boolean = false;\n constructor(private githubAuth: GithubAuthService) {}\n login() {\n this.githubAuth.initiateOAuth();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GithubAuthService } from '../../services/github-auth.service';\n\n@Component({\n selector: 'github-integration-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"bg-black/30 border border-white/5 rounded-xl p-6 hover:border-white/10 transition-colors\">\n <div class=\"flex items-start justify-between\">\n <div class=\"flex items-center gap-4\">\n <div class=\"w-12 h-12 rounded-xl bg-[#24292e] flex items-center justify-center\">\n <svg class=\"w-6 h-6 text-white\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div>\n <h3 class=\"text-white font-medium\">GitHub</h3>\n <p class=\"text-white/60 text-sm mt-1\">Connect your repositories and manage PRs directly from Kojinx.</p>\n </div>\n </div>\n @if (isConnected) {\n <div class=\"flex flex-col items-end gap-2\">\n <span class=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-emerald-500/10 text-emerald-400 border border-emerald-500/20\">\n <span class=\"w-1.5 h-1.5 rounded-full bg-emerald-400\"></span>\n Connected\n </span>\n <button (click)=\"unlink()\" class=\"text-xs text-red-400 hover:text-red-300 transition-colors\">Disconnect</button>\n </div>\n } @else {\n <button (click)=\"link()\" class=\"px-4 py-2 bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg text-sm text-white font-medium transition-all focus:outline-none focus:border-kojinx-purple\">\n Connect\n </button>\n }\n </div>\n </div>\n `\n})\nexport class GithubIntegrationCardComponent {\n @Input() isConnected: boolean = false;\n constructor(private githubAuth: GithubAuthService) {}\n \n link() {\n this.githubAuth.linkGithub();\n }\n\n unlink() {\n this.githubAuth.unlinkGithub();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GithubAuthService"],"mappings":";;;;MAEa,mBAAmB,GAAG,IAAI,cAAc,CAAe,qBAAqB;MAC5E,iBAAiB,GAAG,IAAI,cAAc,CAA+B,mBAAmB;MACxF,oBAAoB,GAAG,IAAI,cAAc,CAAiC,sBAAsB;MAChG,4BAA4B,GAAG,IAAI,cAAc,CAAmC,8BAA8B;MAClH,4BAA4B,GAAG,IAAI,cAAc,CAAsB,8BAA8B;;MCFrG,iBAAiB,CAAA;IAC5B,WAAA,CACU,IAAY,EACiB,SAAuB,EACzB,QAAsC,EACnC,YAA4C,EACpC,WAA6C,EAC7C,WAAgC,EAAA;QALtE,IAAA,CAAA,IAAI,GAAJ,IAAI;QACyB,IAAA,CAAA,SAAS,GAAT,SAAS;QACX,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACL,IAAA,CAAA,YAAY,GAAZ,YAAY;QACJ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,WAAW,GAAX,WAAW;QAEzD,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE,uBAAuB;AACtD,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;AACnC,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,CAAA,OAAA,EAAU,KAAK,EAAE,EAAE,EAAE,CAAC;AACjF,QAAA,IAAI,GAAG,CAAC,EAAE,EAAE;AACV,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;YAC7B,IAAI,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QACjD;IACF;AAEA,IAAA,MAAM,YAAY,GAAA;QAChB,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE,yBAAyB;AACxD,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;QACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,EAAE,CAAC;AACjG,QAAA,IAAI,GAAG,CAAC,EAAE,EAAE;AACT,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE;QAC3B;IACF;IAEA,aAAa,GAAA;QACX,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB;AACjD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;IACxB;AAEQ,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,IAAI;YACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,uBAAuB,CAAC;AACxD,YAAA,MAAM,MAAM,CAAkB,eAAe,EAAE,CAAC,KAAK,KAAI;AACvD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;oBACjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACvC,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;AAAE,QAAA,OAAM,CAAC,EAAE,EAAC;IACd;+GA7CW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAGlB,mBAAmB,EAAA,EAAA,EAAA,KAAA,EACnB,iBAAiB,aACjB,oBAAoB,EAAA,EAAA,EAAA,KAAA,EACpB,4BAA4B,EAAA,EAAA,EAAA,KAAA,EAC5B,4BAA4B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAP3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA,CAAA;;4FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAI7B,MAAM;2BAAC,mBAAmB;;0BAC1B,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,oBAAoB;;0BAC3B,MAAM;2BAAC,4BAA4B;;0BACnC,MAAM;2BAAC,4BAA4B;;;MCI3B,0BAA0B,CAAA;AAGrC,IAAA,WAAA,CAAoB,UAA6B,EAAA;QAA7B,IAAA,CAAA,UAAU,GAAV,UAAU;QAFrB,IAAA,CAAA,IAAI,GAAW,sBAAsB;QACrC,IAAA,CAAA,SAAS,GAAY,KAAK;IACiB;IACpD,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;IACjC;+GANW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT3B;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAEU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA;AACF,iBAAA;mFAEU,IAAI,EAAA,CAAA;sBAAZ;gBACQ,SAAS,EAAA,CAAA;sBAAjB;;;MCsBU,8BAA8B,CAAA;AAEzC,IAAA,WAAA,CAAoB,UAA6B,EAAA;QAA7B,IAAA,CAAA,UAAU,GAAV,UAAU;QADrB,IAAA,CAAA,WAAW,GAAY,KAAK;IACe;IAEpD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;IAC9B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;IAChC;+GAVW,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/B/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9BS,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgCX,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAnC1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA;AACF,iBAAA;mFAEU,WAAW,EAAA,CAAA;sBAAnB;;;ACxCH;;AAEG;;;;"}
1
+ {"version":3,"file":"kojinx-github.mjs","sources":["../../../../projects/kojinx/github/src/lib/tokens.ts","../../../../projects/kojinx/github/src/lib/services/github-auth.service.ts","../../../../projects/kojinx/github/src/lib/components/github-login-button/github-login-button.component.ts","../../../../projects/kojinx/github/src/lib/components/github-integration-card/github-integration-card.component.ts","../../../../projects/kojinx/github/src/kojinx-github.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const KOJINX_API_BASE_URL = new InjectionToken<() => string>('KOJINX_API_BASE_URL');\nexport const KOJINX_AUTH_TOKEN = new InjectionToken<() => Promise<string | null>>('KOJINX_AUTH_TOKEN');\nexport const KOJINX_OPEN_EXTERNAL = new InjectionToken<(url: string) => Promise<void>>('KOJINX_OPEN_EXTERNAL');\nexport const KOJINX_AUTH_SUCCESS_CALLBACK = new InjectionToken<(token: string) => Promise<void>>('KOJINX_AUTH_SUCCESS_CALLBACK');\nexport const KOJINX_UNLINK_LOCAL_CALLBACK = new InjectionToken<() => Promise<void>>('KOJINX_UNLINK_LOCAL_CALLBACK');\n","import { Injectable, Inject, NgZone } from '@angular/core';\nimport { KOJINX_API_BASE_URL, KOJINX_AUTH_TOKEN, KOJINX_OPEN_EXTERNAL, KOJINX_AUTH_SUCCESS_CALLBACK, KOJINX_UNLINK_LOCAL_CALLBACK } from '../tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class GithubAuthService {\n constructor(\n private zone: NgZone,\n @Inject(KOJINX_API_BASE_URL) private getApiUrl: () => string,\n @Inject(KOJINX_AUTH_TOKEN) private getToken: () => Promise<string | null>,\n @Inject(KOJINX_OPEN_EXTERNAL) private openExternal: (url: string) => Promise<void>,\n @Inject(KOJINX_AUTH_SUCCESS_CALLBACK) private authSuccess: (token: string) => Promise<void>,\n @Inject(KOJINX_UNLINK_LOCAL_CALLBACK) private unlinkLocal: () => Promise<void>\n ) {\n this.setupTauriListener();\n }\n\n async linkGithub(): Promise<void> {\n const url = `${this.getApiUrl()}/api/auth/link-github`;\n const token = await this.getToken();\n const res = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` } });\n if (res.ok) {\n const data = await res.json();\n if (data.url) await this.openExternal(data.url);\n }\n }\n\n async unlinkGithub(): Promise<void> {\n const url = `${this.getApiUrl()}/api/auth/unlink-github`;\n const token = await this.getToken();\n const res = await fetch(url, { method: 'POST', headers: { 'Authorization': `Bearer ${token}` } });\n if (res.ok) {\n await this.unlinkLocal();\n }\n }\n\n initiateOAuth(): void {\n const url = `${this.getApiUrl()}/api/auth/github`;\n this.openExternal(url);\n }\n\n private async setupTauriListener(): Promise<void> {\n try {\n const { listen } = await import('@tauri-apps/api/event');\n await listen<{token: string}>('oauth-success', (event) => {\n this.zone.run(() => {\n this.authSuccess(event.payload.token);\n });\n });\n } catch(e) {}\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { GithubAuthService } from '../../services/github-auth.service';\n\n@Component({\n selector: 'github-login-button',\n standalone: true,\n template: `\n <button (click)=\"login()\" [disabled]=\"isLoading\" class=\"w-full flex justify-center items-center gap-3 bg-white/5 hover:bg-white/10 text-white font-medium py-3 px-4 rounded-xl transition-all border border-white/10 focus:outline-none focus:ring-2 focus:ring-white/20\">\n <svg class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" clip-rule=\"evenodd\" />\n </svg>\n {{ text }}\n </button>\n `\n})\nexport class GithubLoginButtonComponent {\n @Input() text: string = 'Continue with GitHub';\n @Input() isLoading: boolean = false;\n constructor(private githubAuth: GithubAuthService) {}\n login() {\n this.githubAuth.initiateOAuth();\n }\n}\n","import { Component, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GithubAuthService } from '../../services/github-auth.service';\n\n@Component({\n selector: 'github-integration-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <!-- The Card -->\n <div (click)=\"showModal.set(true)\" class=\"group cursor-pointer relative p-6 rounded-xl bg-kojinx-panel border border-kojinx-border hover:border-white/30 transition-colors\">\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-4\">\n <div class=\"w-12 h-12 rounded-xl bg-white/10 flex items-center justify-center border border-white/20\">\n <svg class=\"w-7 h-7 text-white\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div>\n <p class=\"text-base font-semibold text-white group-hover:text-gray-300 transition-colors\">GitHub</p>\n <p class=\"text-sm text-kojinx-text-muted mt-0.5\">Log in to automatically pull profile data and projects.</p>\n </div>\n </div>\n <div class=\"pr-6\">\n @if (isConnected) {\n <span class=\"inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-green-500/10 border border-green-500/30 text-green-400 text-sm font-bold font-mono\">\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" d=\"M5 13l4 4L19 7\"/>\n </svg>\n Connected\n </span>\n } @else {\n <span class=\"inline-flex items-center gap-1.5 px-4 py-2 rounded-lg bg-white/5 border border-white/10 text-white text-sm font-bold font-mono group-hover:bg-white/10 transition-colors\">\n Connect\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- The Modal -->\n @if (showModal()) {\n <div class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm animate-fade-in\" (click)=\"closeModal($event)\">\n <div class=\"bg-kojinx-panel border border-kojinx-border rounded-2xl w-full max-w-lg shadow-2xl overflow-hidden flex flex-col\" (click)=\"$event.stopPropagation()\">\n \n <div class=\"p-6 border-b border-white/5 flex items-center justify-between\">\n <h2 class=\"text-xl font-bold text-white flex items-center gap-3\">\n <svg class=\"w-6 h-6 text-white\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\" clip-rule=\"evenodd\" />\n </svg>\n GitHub Integration\n </h2>\n <button (click)=\"showModal.set(false)\" class=\"text-white/40 hover:text-white transition-colors p-1 rounded-lg hover:bg-white/5\">\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <div class=\"p-6 space-y-6\">\n \n <div class=\"bg-kojinx-blue/10 border border-kojinx-blue/30 rounded-xl p-4 text-sm text-slate-300\">\n <p>Log in to automatically pull your profile data and projects.</p>\n <p class=\"mt-2 text-kojinx-blue font-medium\">Note: Kojinx only maps the repositories internally. It does not have access to read or modify your source code.</p>\n </div>\n\n <div class=\"flex items-center justify-between p-4 bg-black/20 border border-white/5 rounded-xl\">\n <div>\n <p class=\"font-medium text-white\">Repository Mapping</p>\n <p class=\"text-xs text-kojinx-text-muted mt-1\">Allow Kojinx to discover and map your repositories</p>\n </div>\n <label class=\"relative inline-flex items-center cursor-pointer\">\n <input type=\"checkbox\" class=\"sr-only peer\" [checked]=\"mapRepos()\" (change)=\"toggleMapRepos()\">\n <div class=\"w-11 h-6 bg-black/40 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-slate-400 peer-checked:after:bg-white after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-kojinx-blue border border-white/10\"></div>\n </label>\n </div>\n\n </div>\n\n <div class=\"p-6 border-t border-white/5 flex items-center justify-between bg-black/20\">\n @if (isConnected) {\n <button (click)=\"unlink(); showModal.set(false)\" class=\"px-4 py-2 rounded-lg text-sm font-medium bg-red-500/10 text-red-400 hover:bg-red-500/20 border border-red-500/20 transition-colors\">\n Disconnect GitHub\n </button>\n <button (click)=\"showModal.set(false)\" class=\"px-6 py-2 rounded-lg text-sm font-medium bg-white/5 text-white hover:bg-white/10 border border-white/10 transition-colors ml-auto\">\n Done\n </button>\n } @else {\n <button (click)=\"link(); showModal.set(false)\" class=\"px-6 py-2 rounded-lg text-sm font-medium bg-white text-black hover:bg-gray-200 transition-colors ml-auto\">\n Connect GitHub\n </button>\n }\n </div>\n\n </div>\n </div>\n }\n `\n})\nexport class GithubIntegrationCardComponent {\n @Input() isConnected: boolean = false;\n \n readonly showModal = signal(false);\n readonly mapRepos = signal(true);\n\n constructor(private githubAuth: GithubAuthService) {}\n \n closeModal(event: MouseEvent) {\n this.showModal.set(false);\n }\n\n toggleMapRepos() {\n this.mapRepos.update(v => !v);\n }\n\n link() {\n this.githubAuth.linkGithub();\n }\n\n unlink() {\n this.githubAuth.unlinkGithub();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GithubAuthService"],"mappings":"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"}
@@ -3,7 +3,11 @@ import * as i0 from "@angular/core";
3
3
  export declare class GithubIntegrationCardComponent {
4
4
  private githubAuth;
5
5
  isConnected: boolean;
6
+ readonly showModal: import("@angular/core").WritableSignal<boolean>;
7
+ readonly mapRepos: import("@angular/core").WritableSignal<boolean>;
6
8
  constructor(githubAuth: GithubAuthService);
9
+ closeModal(event: MouseEvent): void;
10
+ toggleMapRepos(): void;
7
11
  link(): void;
8
12
  unlink(): void;
9
13
  static ɵfac: i0.ɵɵFactoryDeclaration<GithubIntegrationCardComponent, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kojinx/github",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0"