@jariahh/angular 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,489 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Inject, Injectable, makeEnvironmentProviders, EventEmitter, signal, ViewChild, Output, Input, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { fetchEmbedToken, buildEmbedUrl, getParentOrigin, createTokenRefresher, isHulyMessage, parseHulyMessage, EmbedMessageTypes } from '@jariahh/core';
4
+ import { Subject } from 'rxjs';
5
+ import { CommonModule } from '@angular/common';
6
+
7
+ const HULY_EMBED_CONFIG = new InjectionToken('HulyEmbedConfig');
8
+
9
+ class HulyEmbedService {
10
+ config;
11
+ allowedOrigins;
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.allowedOrigins = config.allowedOrigins ?? [new URL(config.hulyUrl).origin];
15
+ }
16
+ fetchToken(component) {
17
+ return fetchEmbedToken(this.config.tokenEndpoint, component);
18
+ }
19
+ buildUrl(component, token, options) {
20
+ return buildEmbedUrl({
21
+ hulyUrl: this.config.hulyUrl,
22
+ component,
23
+ token,
24
+ project: options?.project ?? this.config.defaultProject,
25
+ issue: options?.issue,
26
+ externalUser: options?.externalUser,
27
+ parentOrigin: getParentOrigin(),
28
+ });
29
+ }
30
+ createRefresher(component, initialExpiresIn, onToken, onError) {
31
+ return createTokenRefresher(this.config.tokenEndpoint, component, this.config.tokenRefreshBuffer ?? 60, initialExpiresIn, onToken, onError);
32
+ }
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyEmbedService, deps: [{ token: HULY_EMBED_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
34
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyEmbedService });
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyEmbedService, decorators: [{
37
+ type: Injectable
38
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
39
+ type: Inject,
40
+ args: [HULY_EMBED_CONFIG]
41
+ }] }] });
42
+
43
+ class HulyMessageService {
44
+ embedService;
45
+ ngZone;
46
+ subject = new Subject();
47
+ listener;
48
+ messages$ = this.subject.asObservable();
49
+ constructor(embedService, ngZone) {
50
+ this.embedService = embedService;
51
+ this.ngZone = ngZone;
52
+ this.listener = (event) => {
53
+ if (!isHulyMessage(event, this.embedService.allowedOrigins)) {
54
+ return;
55
+ }
56
+ const message = parseHulyMessage(event);
57
+ if (message === null) {
58
+ return;
59
+ }
60
+ this.ngZone.run(() => {
61
+ this.subject.next(message);
62
+ });
63
+ };
64
+ this.ngZone.runOutsideAngular(() => {
65
+ window.addEventListener('message', this.listener);
66
+ });
67
+ }
68
+ ngOnDestroy() {
69
+ window.removeEventListener('message', this.listener);
70
+ this.subject.complete();
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyMessageService, deps: [{ token: HulyEmbedService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
73
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyMessageService });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyMessageService, decorators: [{
76
+ type: Injectable
77
+ }], ctorParameters: () => [{ type: HulyEmbedService }, { type: i0.NgZone }] });
78
+
79
+ function provideHulyEmbed(config) {
80
+ return makeEnvironmentProviders([
81
+ { provide: HULY_EMBED_CONFIG, useValue: config },
82
+ HulyEmbedService,
83
+ HulyMessageService,
84
+ ]);
85
+ }
86
+
87
+ class HulyEmbedComponent {
88
+ embedService;
89
+ messageService;
90
+ component;
91
+ project;
92
+ issueId;
93
+ externalUser;
94
+ ready = new EventEmitter();
95
+ issueCreated = new EventEmitter();
96
+ issueCancelled = new EventEmitter();
97
+ issueSelected = new EventEmitter();
98
+ resized = new EventEmitter();
99
+ embedError = new EventEmitter();
100
+ iframeRef;
101
+ embedUrl = signal(null);
102
+ loading = signal(true);
103
+ errorMessage = signal(null);
104
+ iframeHeight = signal(400);
105
+ subscription;
106
+ destroyRefresher;
107
+ constructor(embedService, messageService) {
108
+ this.embedService = embedService;
109
+ this.messageService = messageService;
110
+ }
111
+ ngOnInit() {
112
+ this.subscription = this.messageService.messages$.subscribe((message) => {
113
+ switch (message.type) {
114
+ case EmbedMessageTypes.Ready:
115
+ this.loading.set(false);
116
+ this.ready.emit();
117
+ break;
118
+ case EmbedMessageTypes.IssueCreated:
119
+ if ('cancelled' in message && message.cancelled) {
120
+ this.issueCancelled.emit(message);
121
+ }
122
+ else {
123
+ this.issueCreated.emit(message);
124
+ }
125
+ break;
126
+ case EmbedMessageTypes.IssueSelected:
127
+ this.issueSelected.emit(message);
128
+ break;
129
+ case EmbedMessageTypes.Resize:
130
+ this.iframeHeight.set(message.height);
131
+ this.resized.emit(message);
132
+ break;
133
+ case EmbedMessageTypes.Error:
134
+ this.errorMessage.set(message.reason);
135
+ this.loading.set(false);
136
+ this.embedError.emit(message);
137
+ break;
138
+ }
139
+ });
140
+ this.loadEmbed();
141
+ }
142
+ ngOnDestroy() {
143
+ this.subscription?.unsubscribe();
144
+ this.destroyRefresher?.();
145
+ }
146
+ async loadEmbed() {
147
+ try {
148
+ this.loading.set(true);
149
+ this.errorMessage.set(null);
150
+ const tokenResponse = await this.embedService.fetchToken(this.component);
151
+ const url = this.embedService.buildUrl(this.component, tokenResponse.token, {
152
+ project: this.project,
153
+ issue: this.issueId,
154
+ externalUser: this.externalUser,
155
+ });
156
+ this.embedUrl.set(url);
157
+ this.destroyRefresher?.();
158
+ this.destroyRefresher = this.embedService.createRefresher(this.component, tokenResponse.expiresIn, (response) => {
159
+ const newUrl = this.embedService.buildUrl(this.component, response.token, {
160
+ project: this.project,
161
+ issue: this.issueId,
162
+ externalUser: this.externalUser,
163
+ });
164
+ this.loading.set(true);
165
+ this.embedUrl.set(newUrl);
166
+ }, (error) => {
167
+ this.errorMessage.set(error.message);
168
+ this.loading.set(false);
169
+ });
170
+ }
171
+ catch (err) {
172
+ const message = err instanceof Error ? err.message : 'Failed to load embed';
173
+ this.errorMessage.set(message);
174
+ this.loading.set(false);
175
+ }
176
+ }
177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyEmbedComponent, deps: [{ token: HulyEmbedService }, { token: HulyMessageService }], target: i0.ɵɵFactoryTarget.Component });
178
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: HulyEmbedComponent, isStandalone: true, selector: "huly-embed", inputs: { component: "component", project: "project", issueId: "issueId", externalUser: "externalUser" }, outputs: { ready: "ready", issueCreated: "issueCreated", issueCancelled: "issueCancelled", issueSelected: "issueSelected", resized: "resized", embedError: "embedError" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["embedIframe"], descendants: true }], ngImport: i0, template: `
179
+ @if (loading()) {
180
+ <div class="huly-embed-loading">
181
+ <ng-content select="[loading]"></ng-content>
182
+ </div>
183
+ }
184
+ @if (errorMessage()) {
185
+ <div class="huly-embed-error">
186
+ <ng-content select="[error]"></ng-content>
187
+ </div>
188
+ }
189
+ @if (embedUrl()) {
190
+ <iframe
191
+ #embedIframe
192
+ [src]="embedUrl()"
193
+ [style.height.px]="iframeHeight()"
194
+ [style.display]="loading() ? 'none' : 'block'"
195
+ style="width: 100%; border: none;"
196
+ allow="clipboard-write"
197
+ ></iframe>
198
+ }
199
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyEmbedComponent, decorators: [{
202
+ type: Component,
203
+ args: [{
204
+ selector: 'huly-embed',
205
+ standalone: true,
206
+ imports: [CommonModule],
207
+ changeDetection: ChangeDetectionStrategy.OnPush,
208
+ template: `
209
+ @if (loading()) {
210
+ <div class="huly-embed-loading">
211
+ <ng-content select="[loading]"></ng-content>
212
+ </div>
213
+ }
214
+ @if (errorMessage()) {
215
+ <div class="huly-embed-error">
216
+ <ng-content select="[error]"></ng-content>
217
+ </div>
218
+ }
219
+ @if (embedUrl()) {
220
+ <iframe
221
+ #embedIframe
222
+ [src]="embedUrl()"
223
+ [style.height.px]="iframeHeight()"
224
+ [style.display]="loading() ? 'none' : 'block'"
225
+ style="width: 100%; border: none;"
226
+ allow="clipboard-write"
227
+ ></iframe>
228
+ }
229
+ `,
230
+ }]
231
+ }], ctorParameters: () => [{ type: HulyEmbedService }, { type: HulyMessageService }], propDecorators: { component: [{
232
+ type: Input,
233
+ args: [{ required: true }]
234
+ }], project: [{
235
+ type: Input
236
+ }], issueId: [{
237
+ type: Input
238
+ }], externalUser: [{
239
+ type: Input
240
+ }], ready: [{
241
+ type: Output
242
+ }], issueCreated: [{
243
+ type: Output
244
+ }], issueCancelled: [{
245
+ type: Output
246
+ }], issueSelected: [{
247
+ type: Output
248
+ }], resized: [{
249
+ type: Output
250
+ }], embedError: [{
251
+ type: Output
252
+ }], iframeRef: [{
253
+ type: ViewChild,
254
+ args: ['embedIframe']
255
+ }] } });
256
+
257
+ class HulyCreateIssueComponent {
258
+ project;
259
+ externalUser;
260
+ issueCreated = new EventEmitter();
261
+ issueCancelled = new EventEmitter();
262
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyCreateIssueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
263
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HulyCreateIssueComponent, isStandalone: true, selector: "huly-create-issue", inputs: { project: "project", externalUser: "externalUser" }, outputs: { issueCreated: "issueCreated", issueCancelled: "issueCancelled" }, ngImport: i0, template: `
264
+ <huly-embed
265
+ component="create-issue"
266
+ [project]="project"
267
+ [externalUser]="externalUser"
268
+ (issueCreated)="issueCreated.emit($event)"
269
+ (issueCancelled)="issueCancelled.emit($event)"
270
+ >
271
+ <ng-content select="[loading]" loading></ng-content>
272
+ <ng-content select="[error]" error></ng-content>
273
+ </huly-embed>
274
+ `, isInline: true, dependencies: [{ kind: "component", type: HulyEmbedComponent, selector: "huly-embed", inputs: ["component", "project", "issueId", "externalUser"], outputs: ["ready", "issueCreated", "issueCancelled", "issueSelected", "resized", "embedError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
275
+ }
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyCreateIssueComponent, decorators: [{
277
+ type: Component,
278
+ args: [{
279
+ selector: 'huly-create-issue',
280
+ standalone: true,
281
+ imports: [HulyEmbedComponent],
282
+ changeDetection: ChangeDetectionStrategy.OnPush,
283
+ template: `
284
+ <huly-embed
285
+ component="create-issue"
286
+ [project]="project"
287
+ [externalUser]="externalUser"
288
+ (issueCreated)="issueCreated.emit($event)"
289
+ (issueCancelled)="issueCancelled.emit($event)"
290
+ >
291
+ <ng-content select="[loading]" loading></ng-content>
292
+ <ng-content select="[error]" error></ng-content>
293
+ </huly-embed>
294
+ `,
295
+ }]
296
+ }], propDecorators: { project: [{
297
+ type: Input
298
+ }], externalUser: [{
299
+ type: Input
300
+ }], issueCreated: [{
301
+ type: Output
302
+ }], issueCancelled: [{
303
+ type: Output
304
+ }] } });
305
+
306
+ class HulyIssueListComponent {
307
+ project;
308
+ externalUser;
309
+ issueSelected = new EventEmitter();
310
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyIssueListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
311
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HulyIssueListComponent, isStandalone: true, selector: "huly-issue-list", inputs: { project: "project", externalUser: "externalUser" }, outputs: { issueSelected: "issueSelected" }, ngImport: i0, template: `
312
+ <huly-embed
313
+ component="issue-list"
314
+ [project]="project"
315
+ [externalUser]="externalUser"
316
+ (issueSelected)="issueSelected.emit($event)"
317
+ >
318
+ <ng-content select="[loading]" loading></ng-content>
319
+ <ng-content select="[error]" error></ng-content>
320
+ </huly-embed>
321
+ `, isInline: true, dependencies: [{ kind: "component", type: HulyEmbedComponent, selector: "huly-embed", inputs: ["component", "project", "issueId", "externalUser"], outputs: ["ready", "issueCreated", "issueCancelled", "issueSelected", "resized", "embedError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
322
+ }
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyIssueListComponent, decorators: [{
324
+ type: Component,
325
+ args: [{
326
+ selector: 'huly-issue-list',
327
+ standalone: true,
328
+ imports: [HulyEmbedComponent],
329
+ changeDetection: ChangeDetectionStrategy.OnPush,
330
+ template: `
331
+ <huly-embed
332
+ component="issue-list"
333
+ [project]="project"
334
+ [externalUser]="externalUser"
335
+ (issueSelected)="issueSelected.emit($event)"
336
+ >
337
+ <ng-content select="[loading]" loading></ng-content>
338
+ <ng-content select="[error]" error></ng-content>
339
+ </huly-embed>
340
+ `,
341
+ }]
342
+ }], propDecorators: { project: [{
343
+ type: Input
344
+ }], externalUser: [{
345
+ type: Input
346
+ }], issueSelected: [{
347
+ type: Output
348
+ }] } });
349
+
350
+ class HulyIssueDetailComponent {
351
+ issueId;
352
+ project;
353
+ externalUser;
354
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyIssueDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
355
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HulyIssueDetailComponent, isStandalone: true, selector: "huly-issue-detail", inputs: { issueId: "issueId", project: "project", externalUser: "externalUser" }, ngImport: i0, template: `
356
+ <huly-embed
357
+ component="issue-detail"
358
+ [project]="project"
359
+ [issueId]="issueId"
360
+ [externalUser]="externalUser"
361
+ >
362
+ <ng-content select="[loading]" loading></ng-content>
363
+ <ng-content select="[error]" error></ng-content>
364
+ </huly-embed>
365
+ `, isInline: true, dependencies: [{ kind: "component", type: HulyEmbedComponent, selector: "huly-embed", inputs: ["component", "project", "issueId", "externalUser"], outputs: ["ready", "issueCreated", "issueCancelled", "issueSelected", "resized", "embedError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
366
+ }
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyIssueDetailComponent, decorators: [{
368
+ type: Component,
369
+ args: [{
370
+ selector: 'huly-issue-detail',
371
+ standalone: true,
372
+ imports: [HulyEmbedComponent],
373
+ changeDetection: ChangeDetectionStrategy.OnPush,
374
+ template: `
375
+ <huly-embed
376
+ component="issue-detail"
377
+ [project]="project"
378
+ [issueId]="issueId"
379
+ [externalUser]="externalUser"
380
+ >
381
+ <ng-content select="[loading]" loading></ng-content>
382
+ <ng-content select="[error]" error></ng-content>
383
+ </huly-embed>
384
+ `,
385
+ }]
386
+ }], propDecorators: { issueId: [{
387
+ type: Input,
388
+ args: [{ required: true }]
389
+ }], project: [{
390
+ type: Input
391
+ }], externalUser: [{
392
+ type: Input
393
+ }] } });
394
+
395
+ class HulyKanbanComponent {
396
+ project;
397
+ externalUser;
398
+ issueSelected = new EventEmitter();
399
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyKanbanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
400
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HulyKanbanComponent, isStandalone: true, selector: "huly-kanban", inputs: { project: "project", externalUser: "externalUser" }, outputs: { issueSelected: "issueSelected" }, ngImport: i0, template: `
401
+ <huly-embed
402
+ component="kanban"
403
+ [project]="project"
404
+ [externalUser]="externalUser"
405
+ (issueSelected)="issueSelected.emit($event)"
406
+ >
407
+ <ng-content select="[loading]" loading></ng-content>
408
+ <ng-content select="[error]" error></ng-content>
409
+ </huly-embed>
410
+ `, isInline: true, dependencies: [{ kind: "component", type: HulyEmbedComponent, selector: "huly-embed", inputs: ["component", "project", "issueId", "externalUser"], outputs: ["ready", "issueCreated", "issueCancelled", "issueSelected", "resized", "embedError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
411
+ }
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyKanbanComponent, decorators: [{
413
+ type: Component,
414
+ args: [{
415
+ selector: 'huly-kanban',
416
+ standalone: true,
417
+ imports: [HulyEmbedComponent],
418
+ changeDetection: ChangeDetectionStrategy.OnPush,
419
+ template: `
420
+ <huly-embed
421
+ component="kanban"
422
+ [project]="project"
423
+ [externalUser]="externalUser"
424
+ (issueSelected)="issueSelected.emit($event)"
425
+ >
426
+ <ng-content select="[loading]" loading></ng-content>
427
+ <ng-content select="[error]" error></ng-content>
428
+ </huly-embed>
429
+ `,
430
+ }]
431
+ }], propDecorators: { project: [{
432
+ type: Input
433
+ }], externalUser: [{
434
+ type: Input
435
+ }], issueSelected: [{
436
+ type: Output
437
+ }] } });
438
+
439
+ class HulyCommentsComponent {
440
+ issueId;
441
+ project;
442
+ externalUser;
443
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyCommentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HulyCommentsComponent, isStandalone: true, selector: "huly-comments", inputs: { issueId: "issueId", project: "project", externalUser: "externalUser" }, ngImport: i0, template: `
445
+ <huly-embed
446
+ component="comments"
447
+ [project]="project"
448
+ [issueId]="issueId"
449
+ [externalUser]="externalUser"
450
+ >
451
+ <ng-content select="[loading]" loading></ng-content>
452
+ <ng-content select="[error]" error></ng-content>
453
+ </huly-embed>
454
+ `, isInline: true, dependencies: [{ kind: "component", type: HulyEmbedComponent, selector: "huly-embed", inputs: ["component", "project", "issueId", "externalUser"], outputs: ["ready", "issueCreated", "issueCancelled", "issueSelected", "resized", "embedError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
455
+ }
456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HulyCommentsComponent, decorators: [{
457
+ type: Component,
458
+ args: [{
459
+ selector: 'huly-comments',
460
+ standalone: true,
461
+ imports: [HulyEmbedComponent],
462
+ changeDetection: ChangeDetectionStrategy.OnPush,
463
+ template: `
464
+ <huly-embed
465
+ component="comments"
466
+ [project]="project"
467
+ [issueId]="issueId"
468
+ [externalUser]="externalUser"
469
+ >
470
+ <ng-content select="[loading]" loading></ng-content>
471
+ <ng-content select="[error]" error></ng-content>
472
+ </huly-embed>
473
+ `,
474
+ }]
475
+ }], propDecorators: { issueId: [{
476
+ type: Input,
477
+ args: [{ required: true }]
478
+ }], project: [{
479
+ type: Input
480
+ }], externalUser: [{
481
+ type: Input
482
+ }] } });
483
+
484
+ /**
485
+ * Generated bundle index. Do not edit.
486
+ */
487
+
488
+ export { HULY_EMBED_CONFIG, HulyCommentsComponent, HulyCreateIssueComponent, HulyEmbedComponent, HulyEmbedService, HulyIssueDetailComponent, HulyIssueListComponent, HulyKanbanComponent, HulyMessageService, provideHulyEmbed };
489
+ //# sourceMappingURL=jariahh-angular.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jariahh-angular.mjs","sources":["../../src/lib/providers/huly-embed.config.ts","../../src/lib/services/huly-embed.service.ts","../../src/lib/services/huly-message.service.ts","../../src/lib/providers/huly-embed.provider.ts","../../src/lib/components/huly-embed.component.ts","../../src/lib/components/huly-create-issue.component.ts","../../src/lib/components/huly-issue-list.component.ts","../../src/lib/components/huly-issue-detail.component.ts","../../src/lib/components/huly-kanban.component.ts","../../src/lib/components/huly-comments.component.ts","../../src/jariahh-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { HulyEmbedConfig } from '@jariahh/core';\n\nexport const HULY_EMBED_CONFIG = new InjectionToken<HulyEmbedConfig>('HulyEmbedConfig');\n","import { Injectable, Inject } from '@angular/core';\nimport {\n type HulyEmbedConfig,\n type HulyEmbedComponent,\n type EmbedTokenResponse,\n fetchEmbedToken,\n buildEmbedUrl,\n createTokenRefresher,\n getParentOrigin,\n} from '@jariahh/core';\nimport { HULY_EMBED_CONFIG } from '../providers/huly-embed.config';\n\n@Injectable()\nexport class HulyEmbedService {\n readonly config: HulyEmbedConfig;\n readonly allowedOrigins: string[];\n\n constructor(@Inject(HULY_EMBED_CONFIG) config: HulyEmbedConfig) {\n this.config = config;\n this.allowedOrigins = config.allowedOrigins ?? [new URL(config.hulyUrl).origin];\n }\n\n fetchToken(component: HulyEmbedComponent): Promise<EmbedTokenResponse> {\n return fetchEmbedToken(this.config.tokenEndpoint, component);\n }\n\n buildUrl(\n component: HulyEmbedComponent,\n token: string,\n options?: { project?: string; issue?: string; externalUser?: string }\n ): string {\n return buildEmbedUrl({\n hulyUrl: this.config.hulyUrl,\n component,\n token,\n project: options?.project ?? this.config.defaultProject,\n issue: options?.issue,\n externalUser: options?.externalUser,\n parentOrigin: getParentOrigin(),\n });\n }\n\n createRefresher(\n component: HulyEmbedComponent,\n initialExpiresIn: number,\n onToken: (response: EmbedTokenResponse) => void,\n onError: (error: Error) => void\n ): () => void {\n return createTokenRefresher(\n this.config.tokenEndpoint,\n component,\n this.config.tokenRefreshBuffer ?? 60,\n initialExpiresIn,\n onToken,\n onError\n );\n }\n}\n","import { Injectable, Inject, NgZone, OnDestroy } from '@angular/core';\nimport { Subject, type Observable } from 'rxjs';\nimport { type HulyEmbedMessage, isHulyMessage, parseHulyMessage } from '@jariahh/core';\nimport { HulyEmbedService } from './huly-embed.service';\n\n@Injectable()\nexport class HulyMessageService implements OnDestroy {\n private readonly subject = new Subject<HulyEmbedMessage>();\n private readonly listener: (event: MessageEvent) => void;\n\n readonly messages$: Observable<HulyEmbedMessage> = this.subject.asObservable();\n\n constructor(\n private readonly embedService: HulyEmbedService,\n private readonly ngZone: NgZone\n ) {\n this.listener = (event: MessageEvent) => {\n if (!isHulyMessage(event, this.embedService.allowedOrigins)) {\n return;\n }\n\n const message = parseHulyMessage(event);\n if (message === null) {\n return;\n }\n\n this.ngZone.run(() => {\n this.subject.next(message);\n });\n };\n\n this.ngZone.runOutsideAngular(() => {\n window.addEventListener('message', this.listener);\n });\n }\n\n ngOnDestroy(): void {\n window.removeEventListener('message', this.listener);\n this.subject.complete();\n }\n}\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport type { HulyEmbedConfig } from '@jariahh/core';\nimport { HULY_EMBED_CONFIG } from './huly-embed.config';\nimport { HulyEmbedService } from '../services/huly-embed.service';\nimport { HulyMessageService } from '../services/huly-message.service';\n\nexport function provideHulyEmbed(config: HulyEmbedConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: HULY_EMBED_CONFIG, useValue: config },\n HulyEmbedService,\n HulyMessageService,\n ]);\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n signal,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { type Subscription } from 'rxjs';\nimport type {\n HulyEmbedComponent as EmbedComponentType,\n HulyIssueCreatedEvent,\n HulyIssueCancelledEvent,\n HulyIssueSelectedEvent,\n HulyResizeEvent,\n HulyEmbedError,\n EmbedTokenResponse,\n} from '@jariahh/core';\nimport { EmbedMessageTypes } from '@jariahh/core';\nimport { HulyEmbedService } from '../services/huly-embed.service';\nimport { HulyMessageService } from '../services/huly-message.service';\n\n@Component({\n selector: 'huly-embed',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (loading()) {\n <div class=\"huly-embed-loading\">\n <ng-content select=\"[loading]\"></ng-content>\n </div>\n }\n @if (errorMessage()) {\n <div class=\"huly-embed-error\">\n <ng-content select=\"[error]\"></ng-content>\n </div>\n }\n @if (embedUrl()) {\n <iframe\n #embedIframe\n [src]=\"embedUrl()\"\n [style.height.px]=\"iframeHeight()\"\n [style.display]=\"loading() ? 'none' : 'block'\"\n style=\"width: 100%; border: none;\"\n allow=\"clipboard-write\"\n ></iframe>\n }\n `,\n})\nexport class HulyEmbedComponent implements OnInit, OnDestroy {\n @Input({ required: true }) component!: EmbedComponentType;\n @Input() project?: string;\n @Input() issueId?: string;\n @Input() externalUser?: string;\n\n @Output() readonly ready = new EventEmitter<void>();\n @Output() readonly issueCreated = new EventEmitter<HulyIssueCreatedEvent>();\n @Output() readonly issueCancelled = new EventEmitter<HulyIssueCancelledEvent>();\n @Output() readonly issueSelected = new EventEmitter<HulyIssueSelectedEvent>();\n @Output() readonly resized = new EventEmitter<HulyResizeEvent>();\n @Output() readonly embedError = new EventEmitter<HulyEmbedError>();\n\n @ViewChild('embedIframe') iframeRef?: ElementRef<HTMLIFrameElement>;\n\n readonly embedUrl = signal<string | null>(null);\n readonly loading = signal(true);\n readonly errorMessage = signal<string | null>(null);\n readonly iframeHeight = signal(400);\n\n private subscription?: Subscription;\n private destroyRefresher?: () => void;\n\n constructor(\n private readonly embedService: HulyEmbedService,\n private readonly messageService: HulyMessageService\n ) {}\n\n ngOnInit(): void {\n this.subscription = this.messageService.messages$.subscribe((message) => {\n switch (message.type) {\n case EmbedMessageTypes.Ready:\n this.loading.set(false);\n this.ready.emit();\n break;\n case EmbedMessageTypes.IssueCreated:\n if ('cancelled' in message && message.cancelled) {\n this.issueCancelled.emit(message);\n } else {\n this.issueCreated.emit(message as HulyIssueCreatedEvent);\n }\n break;\n case EmbedMessageTypes.IssueSelected:\n this.issueSelected.emit(message);\n break;\n case EmbedMessageTypes.Resize:\n this.iframeHeight.set(message.height);\n this.resized.emit(message);\n break;\n case EmbedMessageTypes.Error:\n this.errorMessage.set(message.reason);\n this.loading.set(false);\n this.embedError.emit(message);\n break;\n }\n });\n\n this.loadEmbed();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.destroyRefresher?.();\n }\n\n private async loadEmbed(): Promise<void> {\n try {\n this.loading.set(true);\n this.errorMessage.set(null);\n\n const tokenResponse = await this.embedService.fetchToken(this.component);\n const url = this.embedService.buildUrl(this.component, tokenResponse.token, {\n project: this.project,\n issue: this.issueId,\n externalUser: this.externalUser,\n });\n\n this.embedUrl.set(url);\n\n this.destroyRefresher?.();\n this.destroyRefresher = this.embedService.createRefresher(\n this.component,\n tokenResponse.expiresIn,\n (response: EmbedTokenResponse) => {\n const newUrl = this.embedService.buildUrl(this.component, response.token, {\n project: this.project,\n issue: this.issueId,\n externalUser: this.externalUser,\n });\n this.loading.set(true);\n this.embedUrl.set(newUrl);\n },\n (error: Error) => {\n this.errorMessage.set(error.message);\n this.loading.set(false);\n }\n );\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to load embed';\n this.errorMessage.set(message);\n this.loading.set(false);\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport type { HulyIssueCreatedEvent, HulyIssueCancelledEvent } from '@jariahh/core';\nimport { HulyEmbedComponent } from './huly-embed.component';\n\n@Component({\n selector: 'huly-create-issue',\n standalone: true,\n imports: [HulyEmbedComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <huly-embed\n component=\"create-issue\"\n [project]=\"project\"\n [externalUser]=\"externalUser\"\n (issueCreated)=\"issueCreated.emit($event)\"\n (issueCancelled)=\"issueCancelled.emit($event)\"\n >\n <ng-content select=\"[loading]\" loading></ng-content>\n <ng-content select=\"[error]\" error></ng-content>\n </huly-embed>\n `,\n})\nexport class HulyCreateIssueComponent {\n @Input() project?: string;\n @Input() externalUser?: string;\n\n @Output() readonly issueCreated = new EventEmitter<HulyIssueCreatedEvent>();\n @Output() readonly issueCancelled = new EventEmitter<HulyIssueCancelledEvent>();\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport type { HulyIssueSelectedEvent } from '@jariahh/core';\nimport { HulyEmbedComponent } from './huly-embed.component';\n\n@Component({\n selector: 'huly-issue-list',\n standalone: true,\n imports: [HulyEmbedComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <huly-embed\n component=\"issue-list\"\n [project]=\"project\"\n [externalUser]=\"externalUser\"\n (issueSelected)=\"issueSelected.emit($event)\"\n >\n <ng-content select=\"[loading]\" loading></ng-content>\n <ng-content select=\"[error]\" error></ng-content>\n </huly-embed>\n `,\n})\nexport class HulyIssueListComponent {\n @Input() project?: string;\n @Input() externalUser?: string;\n\n @Output() readonly issueSelected = new EventEmitter<HulyIssueSelectedEvent>();\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { HulyEmbedComponent } from './huly-embed.component';\n\n@Component({\n selector: 'huly-issue-detail',\n standalone: true,\n imports: [HulyEmbedComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <huly-embed\n component=\"issue-detail\"\n [project]=\"project\"\n [issueId]=\"issueId\"\n [externalUser]=\"externalUser\"\n >\n <ng-content select=\"[loading]\" loading></ng-content>\n <ng-content select=\"[error]\" error></ng-content>\n </huly-embed>\n `,\n})\nexport class HulyIssueDetailComponent {\n @Input({ required: true }) issueId!: string;\n @Input() project?: string;\n @Input() externalUser?: string;\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport type { HulyIssueSelectedEvent } from '@jariahh/core';\nimport { HulyEmbedComponent } from './huly-embed.component';\n\n@Component({\n selector: 'huly-kanban',\n standalone: true,\n imports: [HulyEmbedComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <huly-embed\n component=\"kanban\"\n [project]=\"project\"\n [externalUser]=\"externalUser\"\n (issueSelected)=\"issueSelected.emit($event)\"\n >\n <ng-content select=\"[loading]\" loading></ng-content>\n <ng-content select=\"[error]\" error></ng-content>\n </huly-embed>\n `,\n})\nexport class HulyKanbanComponent {\n @Input() project?: string;\n @Input() externalUser?: string;\n\n @Output() readonly issueSelected = new EventEmitter<HulyIssueSelectedEvent>();\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { HulyEmbedComponent } from './huly-embed.component';\n\n@Component({\n selector: 'huly-comments',\n standalone: true,\n imports: [HulyEmbedComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <huly-embed\n component=\"comments\"\n [project]=\"project\"\n [issueId]=\"issueId\"\n [externalUser]=\"externalUser\"\n >\n <ng-content select=\"[loading]\" loading></ng-content>\n <ng-content select=\"[error]\" error></ng-content>\n </huly-embed>\n `,\n})\nexport class HulyCommentsComponent {\n @Input({ required: true }) issueId!: string;\n @Input() project?: string;\n @Input() externalUser?: string;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.HulyEmbedService","i2.HulyMessageService"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export { HULY_EMBED_CONFIG } from './lib/providers/huly-embed.config';
2
+ export { provideHulyEmbed } from './lib/providers/huly-embed.provider';
3
+ export { HulyEmbedService } from './lib/services/huly-embed.service';
4
+ export { HulyMessageService } from './lib/services/huly-message.service';
5
+ export { HulyEmbedComponent } from './lib/components/huly-embed.component';
6
+ export { HulyCreateIssueComponent } from './lib/components/huly-create-issue.component';
7
+ export { HulyIssueListComponent } from './lib/components/huly-issue-list.component';
8
+ export { HulyIssueDetailComponent } from './lib/components/huly-issue-detail.component';
9
+ export { HulyKanbanComponent } from './lib/components/huly-kanban.component';
10
+ export { HulyCommentsComponent } from './lib/components/huly-comments.component';
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class HulyCommentsComponent {
3
+ issueId: string;
4
+ project?: string;
5
+ externalUser?: string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<HulyCommentsComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<HulyCommentsComponent, "huly-comments", never, { "issueId": { "alias": "issueId"; "required": true; }; "project": { "alias": "project"; "required": false; }; "externalUser": { "alias": "externalUser"; "required": false; }; }, {}, never, ["[loading]", "[error]"], true, never>;
8
+ }
@@ -0,0 +1,11 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import type { HulyIssueCreatedEvent, HulyIssueCancelledEvent } from '@jariahh/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class HulyCreateIssueComponent {
5
+ project?: string;
6
+ externalUser?: string;
7
+ readonly issueCreated: EventEmitter<HulyIssueCreatedEvent>;
8
+ readonly issueCancelled: EventEmitter<HulyIssueCancelledEvent>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<HulyCreateIssueComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<HulyCreateIssueComponent, "huly-create-issue", never, { "project": { "alias": "project"; "required": false; }; "externalUser": { "alias": "externalUser"; "required": false; }; }, { "issueCreated": "issueCreated"; "issueCancelled": "issueCancelled"; }, never, ["[loading]", "[error]"], true, never>;
11
+ }
@@ -0,0 +1,32 @@
1
+ import { EventEmitter, OnInit, OnDestroy, ElementRef } from '@angular/core';
2
+ import type { HulyEmbedComponent as EmbedComponentType, HulyIssueCreatedEvent, HulyIssueCancelledEvent, HulyIssueSelectedEvent, HulyResizeEvent, HulyEmbedError } from '@jariahh/core';
3
+ import { HulyEmbedService } from '../services/huly-embed.service';
4
+ import { HulyMessageService } from '../services/huly-message.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class HulyEmbedComponent implements OnInit, OnDestroy {
7
+ private readonly embedService;
8
+ private readonly messageService;
9
+ component: EmbedComponentType;
10
+ project?: string;
11
+ issueId?: string;
12
+ externalUser?: string;
13
+ readonly ready: EventEmitter<void>;
14
+ readonly issueCreated: EventEmitter<HulyIssueCreatedEvent>;
15
+ readonly issueCancelled: EventEmitter<HulyIssueCancelledEvent>;
16
+ readonly issueSelected: EventEmitter<HulyIssueSelectedEvent>;
17
+ readonly resized: EventEmitter<HulyResizeEvent>;
18
+ readonly embedError: EventEmitter<HulyEmbedError>;
19
+ iframeRef?: ElementRef<HTMLIFrameElement>;
20
+ readonly embedUrl: import("@angular/core").WritableSignal<string>;
21
+ readonly loading: import("@angular/core").WritableSignal<boolean>;
22
+ readonly errorMessage: import("@angular/core").WritableSignal<string>;
23
+ readonly iframeHeight: import("@angular/core").WritableSignal<number>;
24
+ private subscription?;
25
+ private destroyRefresher?;
26
+ constructor(embedService: HulyEmbedService, messageService: HulyMessageService);
27
+ ngOnInit(): void;
28
+ ngOnDestroy(): void;
29
+ private loadEmbed;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<HulyEmbedComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<HulyEmbedComponent, "huly-embed", never, { "component": { "alias": "component"; "required": true; }; "project": { "alias": "project"; "required": false; }; "issueId": { "alias": "issueId"; "required": false; }; "externalUser": { "alias": "externalUser"; "required": false; }; }, { "ready": "ready"; "issueCreated": "issueCreated"; "issueCancelled": "issueCancelled"; "issueSelected": "issueSelected"; "resized": "resized"; "embedError": "embedError"; }, never, ["[loading]", "[error]"], true, never>;
32
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class HulyIssueDetailComponent {
3
+ issueId: string;
4
+ project?: string;
5
+ externalUser?: string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<HulyIssueDetailComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<HulyIssueDetailComponent, "huly-issue-detail", never, { "issueId": { "alias": "issueId"; "required": true; }; "project": { "alias": "project"; "required": false; }; "externalUser": { "alias": "externalUser"; "required": false; }; }, {}, never, ["[loading]", "[error]"], true, never>;
8
+ }
@@ -0,0 +1,10 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import type { HulyIssueSelectedEvent } from '@jariahh/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class HulyIssueListComponent {
5
+ project?: string;
6
+ externalUser?: string;
7
+ readonly issueSelected: EventEmitter<HulyIssueSelectedEvent>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<HulyIssueListComponent, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<HulyIssueListComponent, "huly-issue-list", never, { "project": { "alias": "project"; "required": false; }; "externalUser": { "alias": "externalUser"; "required": false; }; }, { "issueSelected": "issueSelected"; }, never, ["[loading]", "[error]"], true, never>;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import type { HulyIssueSelectedEvent } from '@jariahh/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class HulyKanbanComponent {
5
+ project?: string;
6
+ externalUser?: string;
7
+ readonly issueSelected: EventEmitter<HulyIssueSelectedEvent>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<HulyKanbanComponent, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<HulyKanbanComponent, "huly-kanban", never, { "project": { "alias": "project"; "required": false; }; "externalUser": { "alias": "externalUser"; "required": false; }; }, { "issueSelected": "issueSelected"; }, never, ["[loading]", "[error]"], true, never>;
10
+ }