@feedlog-ai/webcomponents 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/feedlog-badge_3.cjs.entry.js +1 -1
- package/dist/cjs/feedlog-github-issues-client.cjs.entry.js +6 -11
- package/dist/cjs/feedlog-github-issues.cjs.entry.js +1 -19
- package/dist/cjs/feedlog-toolkit.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/feedlog-badge/feedlog-badge.stories.js +1 -2
- package/dist/collection/components/feedlog-button/feedlog-button.stories.js +1 -2
- package/dist/collection/components/feedlog-card/feedlog-card.stories.js +1 -2
- package/dist/collection/components/feedlog-github-issues/feedlog-github-issues.js +38 -52
- package/dist/collection/components/feedlog-github-issues/feedlog-github-issues.stories.js +1 -2
- package/dist/collection/components/feedlog-github-issues-client/feedlog-github-issues-client.js +27 -32
- package/dist/collection/components/feedlog-issues-list/feedlog-issues-list.js +1 -1
- package/dist/components/feedlog-github-issues-client.js +1 -1
- package/dist/components/feedlog-github-issues.js +1 -1
- package/dist/components/feedlog-issues-list.js +1 -1
- package/dist/components/{p-DMcNh5Ys.js → p-BVUX_uVS.js} +1 -1
- package/dist/components/p-Dhl83qnK.js +1 -0
- package/dist/esm/feedlog-badge_3.entry.js +1 -1
- package/dist/esm/feedlog-github-issues-client.entry.js +6 -11
- package/dist/esm/feedlog-github-issues.entry.js +1 -19
- package/dist/esm/feedlog-toolkit.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/feedlog-toolkit/feedlog-toolkit.esm.js +1 -1
- package/dist/feedlog-toolkit/{p-2f7954f7.entry.js → p-125595a1.entry.js} +1 -1
- package/dist/feedlog-toolkit/p-5fc3d243.entry.js +1 -0
- package/dist/feedlog-toolkit/p-ee48d93a.entry.js +1 -0
- package/dist/types/components/feedlog-badge/feedlog-badge.stories.d.ts +2 -3
- package/dist/types/components/feedlog-button/feedlog-button.stories.d.ts +2 -3
- package/dist/types/components/feedlog-card/feedlog-card.stories.d.ts +2 -3
- package/dist/types/components/feedlog-github-issues/feedlog-github-issues.d.ts +8 -9
- package/dist/types/components/feedlog-github-issues/feedlog-github-issues.stories.d.ts +2 -3
- package/dist/types/components/feedlog-github-issues-client/feedlog-github-issues-client.d.ts +6 -7
- package/dist/types/components.d.ts +24 -22
- package/package.json +3 -3
- package/dist/components/p-CPOiBAxu.js +0 -1
- package/dist/feedlog-toolkit/p-a01a3115.entry.js +0 -1
- package/dist/feedlog-toolkit/p-b3d26272.entry.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e,p as s,H as t,c as o,h as d,a}from"./index.js";import{d as i}from"./p-CHtSMTyP.js";import{d as r}from"./p-DMdb-G26.js";import{d as c}from"./p-BVUX_uVS.js";const l=s(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.feedlogUpvote=o(this,"feedlogUpvote"),this.feedlogLoadMore=o(this,"feedlogLoadMore"),this.issues=[],this.maxWidth="42rem",this.theme="light",this.loading=!1,this.error=null,this.hasMore=!1,this.isLoadingMore=!1,this.currentTheme="light",this.handleUpvote=e=>{this.feedlogUpvote.emit(e.detail)},this.handleLoadMore=()=>{this.feedlogLoadMore.emit()}}componentWillLoad(){this.currentTheme=this.theme}render(){return d(a,{key:"473e30453d8b3a719bd977a361b7f669fdd88e48",class:"dark"===this.currentTheme?"dark":""},d("div",{key:"ab91126edb301a1da6136f14441ec33833b6cd74",class:"github-issues-container",style:{maxWidth:this.maxWidth}},(this.heading||this.subtitle)&&d("header",{key:"17494da495d2b2910e6f024f1c3971a945e0a1cc",class:"issues-header"},d("div",{key:"95d5ac1c25ccfc864a863cafe1fa89d4ce04fce2",class:"header-content"},this.heading&&d("h1",{key:"b37f9b9372e1b99da76c0fb9ee50d0a6cdbb0549",class:"issues-title"},this.heading),this.subtitle&&d("p",{key:"5edc92ca86f2dfd1afe640d77d65782e5ec27a8e",class:"issues-subtitle"},this.subtitle))),this.loading&&d("div",{key:"f786656d24c8b88a57c7fa48f0d1877ac3565767",class:"loading-state"},d("p",{key:"fa97c2a05f52c2c1fbe0e907ac797cd6570d0a82"},"Loading issues...")),this.error&&d("div",{key:"798f3dc1ba004b2889aee6490b74240900ba3812",class:"error-state"},d("p",{key:"03b996ab514027fce2e88a93901f3fe17d8da3e1"},"Error: ",this.error)),!this.loading&&!this.error&&d("div",{key:"67501ae1866122df2db6f97752d632013dbcd8a1"},d("feedlog-issues-list",{key:"c668c631f6ba6008df0a411bda7824bcce7318cd",issues:this.issues,theme:this.currentTheme,onFeedlogUpvote:this.handleUpvote}),this.hasMore&&d("div",{key:"28e1ea0600436f3ca8bf12e57e9764bf8899fa53",class:"load-more-container"},d("feedlog-button",{key:"f19576026d152e1b7f7957c83ccfee3c44727dd0",onFeedlogClick:this.handleLoadMore,disabled:this.isLoadingMore,variant:"outline"},this.isLoadingMore?"Loading...":"Load More Issues")))))}static get style(){return":host{display:block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-muted-foreground:#717182;--feedlog-destructive:#d4183d;--feedlog-padding:2rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-muted-foreground:oklch(0.708 0 0);--feedlog-destructive:oklch(0.637 0.237 25.331)}.github-issues-container{min-height:100vh;background-color:var(--feedlog-background);padding:var(--feedlog-padding);margin:0 auto}.issues-header{margin-bottom:1.5rem;display:flex;align-items:flex-start;justify-content:space-between}.header-content{flex:1}.issues-title{color:var(--feedlog-foreground);margin:0 0 0.25rem 0;font-size:1.5rem;font-weight:500;line-height:1.5}.issues-subtitle{color:var(--feedlog-muted-foreground);font-size:0.875rem;margin:0}.loading-state,.error-state{padding:2rem;text-align:center;color:var(--feedlog-muted-foreground)}.error-state{color:var(--feedlog-destructive)}.load-more-container{display:flex;justify-content:center;padding:2rem 0;gap:1rem}"}},[1,"feedlog-github-issues",{issues:[16],maxWidth:[1,"max-width"],theme:[1025],heading:[1],subtitle:[1],loading:[4],error:[1],hasMore:[4,"has-more"],isLoadingMore:[4,"is-loading-more"],currentTheme:[32]}]);function f(){"undefined"!=typeof customElements&&["feedlog-github-issues","feedlog-badge","feedlog-button","feedlog-issues-list"].forEach((s=>{switch(s){case"feedlog-github-issues":customElements.get(e(s))||customElements.define(e(s),l);break;case"feedlog-badge":customElements.get(e(s))||i();break;case"feedlog-button":customElements.get(e(s))||r();break;case"feedlog-issues-list":customElements.get(e(s))||c()}}))}f();export{l as F,f as d}
|
|
@@ -83,7 +83,7 @@ const FeedlogIssuesList = class {
|
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
render() {
|
|
86
|
-
return (h(Host, { key: '
|
|
86
|
+
return (h(Host, { key: '81b2b973309388f09d20629da416b92545567618', class: this.theme === 'dark' ? 'dark' : '' }, h("div", { key: 'ed22c88736ee13621f39b3095f71c361b0d04b44', class: "issues-list" }, this.issues.length === 0 ? (h("div", { class: "empty-state" }, h("p", null, "No issues found"))) : (this.issues.map(issue => (h("div", { key: issue.id, class: "issue-card" }, h("div", { class: "issue-content" }, h("div", { class: "issue-header" }, h("div", { class: "issue-type-badge" }, issue.type === 'bug' ? (h("feedlog-badge", { variant: "destructive" }, "Bug")) : (h("feedlog-badge", { variant: "enhancement" }, "Enhancement"))), issue.pinnedAt && (h("div", { class: "pinned-indicator", title: "Pinned issue" }, "\uD83D\uDCCC"))), h("div", { class: "issue-main" }, h("div", { class: "issue-details" }, h("h3", { class: "issue-title" }, issue.title), h("p", { class: "issue-body" }, issue.body), h("div", { class: "issue-repository" }, h("span", { class: "repo-name" }, issue.repository.owner, "/", issue.repository.name))), h("button", { class: `upvote-button ${issue.hasUpvoted ? 'upvoted' : ''}`, onClick: (e) => this.handleUpvote(e, issue), title: issue.hasUpvoted ? 'Remove upvote' : 'Upvote this issue' }, issue.hasUpvoted ? h(HeartFilledIcon, null) : h(HeartOutlineIcon, null), h("span", { class: "upvote-count" }, issue.upvoteCount))), h("div", { class: "issue-footer" }, h("span", { class: "issue-date", title: `Updated: ${issue.updatedAt}` }, "Updated ", this.formatDate(issue.updatedAt)), h("span", { class: "issue-date", title: `Created: ${issue.createdAt}` }, "Created ", this.formatDate(issue.createdAt)))))))))));
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* Format an ISO date string to a relative time string
|
|
@@ -78,12 +78,15 @@ class FeedlogTimeoutError extends FeedlogError {
|
|
|
78
78
|
* Provides methods to interact with the Feedlog API
|
|
79
79
|
*/
|
|
80
80
|
class FeedlogSDK {
|
|
81
|
-
constructor(config
|
|
81
|
+
constructor(config) {
|
|
82
82
|
this.config = {
|
|
83
83
|
credentials: 'include',
|
|
84
84
|
...config,
|
|
85
85
|
};
|
|
86
86
|
this.apiKey = this.config.apiKey;
|
|
87
|
+
if (!this.apiKey) {
|
|
88
|
+
throw new FeedlogValidationError('apiKey is required in FeedlogSDKConfig');
|
|
89
|
+
}
|
|
87
90
|
this.endpoint = this.config.endpoint || 'https://api.feedlog.app';
|
|
88
91
|
this.timeout = this.config.timeout || 30000;
|
|
89
92
|
// Ensure endpoint doesn't have trailing slash
|
|
@@ -131,6 +134,7 @@ class FeedlogSDK {
|
|
|
131
134
|
method: 'POST',
|
|
132
135
|
headers: this.getAuthHeaders(),
|
|
133
136
|
credentials: this.config.credentials || 'include',
|
|
137
|
+
body: JSON.stringify({}),
|
|
134
138
|
});
|
|
135
139
|
if (response.status === 404) {
|
|
136
140
|
throw new FeedlogNetworkError('Issue not found', 404);
|
|
@@ -332,7 +336,6 @@ const FeedlogGithubIssuesClient = class {
|
|
|
332
336
|
constructor(hostRef) {
|
|
333
337
|
registerInstance(this, hostRef);
|
|
334
338
|
this.feedlogUpvote = createEvent(this, "feedlogUpvote");
|
|
335
|
-
this.feedlogThemeChange = createEvent(this, "feedlogThemeChange");
|
|
336
339
|
this.feedlogError = createEvent(this, "feedlogError");
|
|
337
340
|
/**
|
|
338
341
|
* Maximum width of the container
|
|
@@ -342,10 +345,6 @@ const FeedlogGithubIssuesClient = class {
|
|
|
342
345
|
* Theme variant: 'light' or 'dark'
|
|
343
346
|
*/
|
|
344
347
|
this.theme = 'light';
|
|
345
|
-
/**
|
|
346
|
-
* Whether to show the theme toggle button
|
|
347
|
-
*/
|
|
348
|
-
this.showThemeToggle = true;
|
|
349
348
|
this.issues = [];
|
|
350
349
|
this.loading = true;
|
|
351
350
|
this.error = null;
|
|
@@ -380,10 +379,6 @@ const FeedlogGithubIssuesClient = class {
|
|
|
380
379
|
this.feedlogError.emit({ error: errorMsg });
|
|
381
380
|
}
|
|
382
381
|
};
|
|
383
|
-
this.handleThemeChange = (event) => {
|
|
384
|
-
this.theme = event.detail;
|
|
385
|
-
this.feedlogThemeChange.emit(event.detail);
|
|
386
|
-
};
|
|
387
382
|
}
|
|
388
383
|
componentWillLoad() {
|
|
389
384
|
this.previousType = this.type;
|
|
@@ -488,7 +483,7 @@ const FeedlogGithubIssuesClient = class {
|
|
|
488
483
|
}
|
|
489
484
|
}
|
|
490
485
|
render() {
|
|
491
|
-
return (h("feedlog-github-issues", { key: '
|
|
486
|
+
return (h("feedlog-github-issues", { key: '39ee74bee86db7ff47d921cd771e5ce7c7468bb5', issues: this.issues, maxWidth: this.maxWidth, theme: this.theme, heading: this.heading, subtitle: this.subtitle, loading: this.loading, error: this.error, hasMore: this.hasMore, isLoadingMore: this.isLoadingMore, onFeedlogUpvote: this.handleUpvote, onFeedlogLoadMore: async () => this.loadMore() }));
|
|
492
487
|
}
|
|
493
488
|
};
|
|
494
489
|
|
|
@@ -2,19 +2,10 @@ import { r as registerInstance, c as createEvent, h, H as Host } from './index-C
|
|
|
2
2
|
|
|
3
3
|
const feedlogGithubIssuesCss = () => `:host{display:block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-muted-foreground:#717182;--feedlog-destructive:#d4183d;--feedlog-padding:2rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-muted-foreground:oklch(0.708 0 0);--feedlog-destructive:oklch(0.637 0.237 25.331)}.github-issues-container{min-height:100vh;background-color:var(--feedlog-background);padding:var(--feedlog-padding);margin:0 auto}.issues-header{margin-bottom:1.5rem;display:flex;align-items:flex-start;justify-content:space-between}.header-content{flex:1}.issues-title{color:var(--feedlog-foreground);margin:0 0 0.25rem 0;font-size:1.5rem;font-weight:500;line-height:1.5}.issues-subtitle{color:var(--feedlog-muted-foreground);font-size:0.875rem;margin:0}.loading-state,.error-state{padding:2rem;text-align:center;color:var(--feedlog-muted-foreground)}.error-state{color:var(--feedlog-destructive)}.load-more-container{display:flex;justify-content:center;padding:2rem 0;gap:1rem}`;
|
|
4
4
|
|
|
5
|
-
/**
|
|
6
|
-
* Sun icon SVG component
|
|
7
|
-
*/
|
|
8
|
-
const SunIcon = () => (h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("circle", { cx: "12", cy: "12", r: "4" }), h("path", { d: "M12 2v2" }), h("path", { d: "M12 20v2" }), h("path", { d: "m4.93 4.93 1.41 1.41" }), h("path", { d: "m17.66 17.66 1.41 1.41" }), h("path", { d: "M2 12h2" }), h("path", { d: "M20 12h2" }), h("path", { d: "m6.34 17.66-1.41 1.41" }), h("path", { d: "m19.07 4.93-1.41 1.41" })));
|
|
9
|
-
/**
|
|
10
|
-
* Moon icon SVG component
|
|
11
|
-
*/
|
|
12
|
-
const MoonIcon = () => (h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" })));
|
|
13
5
|
const FeedlogGithubIssues = class {
|
|
14
6
|
constructor(hostRef) {
|
|
15
7
|
registerInstance(this, hostRef);
|
|
16
8
|
this.feedlogUpvote = createEvent(this, "feedlogUpvote");
|
|
17
|
-
this.feedlogThemeChange = createEvent(this, "feedlogThemeChange");
|
|
18
9
|
this.feedlogLoadMore = createEvent(this, "feedlogLoadMore");
|
|
19
10
|
/**
|
|
20
11
|
* Array of issues to display
|
|
@@ -36,10 +27,6 @@ const FeedlogGithubIssues = class {
|
|
|
36
27
|
* Error message - shows error state when set
|
|
37
28
|
*/
|
|
38
29
|
this.error = null;
|
|
39
|
-
/**
|
|
40
|
-
* Whether to show the theme toggle button
|
|
41
|
-
*/
|
|
42
|
-
this.showThemeToggle = true;
|
|
43
30
|
/**
|
|
44
31
|
* Whether there are more issues to load
|
|
45
32
|
*/
|
|
@@ -55,11 +42,6 @@ const FeedlogGithubIssues = class {
|
|
|
55
42
|
this.handleUpvote = (event) => {
|
|
56
43
|
this.feedlogUpvote.emit(event.detail);
|
|
57
44
|
};
|
|
58
|
-
this.toggleTheme = () => {
|
|
59
|
-
this.currentTheme = this.currentTheme === 'dark' ? 'light' : 'dark';
|
|
60
|
-
this.theme = this.currentTheme;
|
|
61
|
-
this.feedlogThemeChange.emit(this.currentTheme);
|
|
62
|
-
};
|
|
63
45
|
this.handleLoadMore = () => {
|
|
64
46
|
this.feedlogLoadMore.emit();
|
|
65
47
|
};
|
|
@@ -71,7 +53,7 @@ const FeedlogGithubIssues = class {
|
|
|
71
53
|
const containerStyle = {
|
|
72
54
|
maxWidth: this.maxWidth,
|
|
73
55
|
};
|
|
74
|
-
return (h(Host, { key: '
|
|
56
|
+
return (h(Host, { key: '473e30453d8b3a719bd977a361b7f669fdd88e48', class: this.currentTheme === 'dark' ? 'dark' : '' }, h("div", { key: 'ab91126edb301a1da6136f14441ec33833b6cd74', class: "github-issues-container", style: containerStyle }, (this.heading || this.subtitle) && (h("header", { key: '17494da495d2b2910e6f024f1c3971a945e0a1cc', class: "issues-header" }, h("div", { key: '95d5ac1c25ccfc864a863cafe1fa89d4ce04fce2', class: "header-content" }, this.heading && h("h1", { key: 'b37f9b9372e1b99da76c0fb9ee50d0a6cdbb0549', class: "issues-title" }, this.heading), this.subtitle && h("p", { key: '5edc92ca86f2dfd1afe640d77d65782e5ec27a8e', class: "issues-subtitle" }, this.subtitle)))), this.loading && (h("div", { key: 'f786656d24c8b88a57c7fa48f0d1877ac3565767', class: "loading-state" }, h("p", { key: 'fa97c2a05f52c2c1fbe0e907ac797cd6570d0a82' }, "Loading issues..."))), this.error && (h("div", { key: '798f3dc1ba004b2889aee6490b74240900ba3812', class: "error-state" }, h("p", { key: '03b996ab514027fce2e88a93901f3fe17d8da3e1' }, "Error: ", this.error))), !this.loading && !this.error && (h("div", { key: '67501ae1866122df2db6f97752d632013dbcd8a1' }, h("feedlog-issues-list", { key: 'c668c631f6ba6008df0a411bda7824bcce7318cd', issues: this.issues, theme: this.currentTheme, onFeedlogUpvote: this.handleUpvote }), this.hasMore && (h("div", { key: '28e1ea0600436f3ca8bf12e57e9764bf8899fa53', class: "load-more-container" }, h("feedlog-button", { key: 'f19576026d152e1b7f7957c83ccfee3c44727dd0', onFeedlogClick: this.handleLoadMore, disabled: this.isLoadingMore, variant: "outline" }, this.isLoadingMore ? 'Loading...' : 'Load More Issues'))))))));
|
|
75
57
|
}
|
|
76
58
|
};
|
|
77
59
|
FeedlogGithubIssues.style = feedlogGithubIssuesCss();
|
|
@@ -16,5 +16,5 @@ var patchBrowser = () => {
|
|
|
16
16
|
|
|
17
17
|
patchBrowser().then(async (options) => {
|
|
18
18
|
await globalScripts();
|
|
19
|
-
return bootstrapLazy([["feedlog-card",[[257,"feedlog-card"]]],["feedlog-badge_3",[[1,"feedlog-issues-list",{"issues":[16],"theme":[1]}],[257,"feedlog-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1]}],[257,"feedlog-badge",{"variant":[1]}]]],["feedlog-github-issues",[[1,"feedlog-github-issues",{"issues":[16],"maxWidth":[1,"max-width"],"theme":[1025],"
|
|
19
|
+
return bootstrapLazy([["feedlog-card",[[257,"feedlog-card"]]],["feedlog-badge_3",[[1,"feedlog-issues-list",{"issues":[16],"theme":[1]}],[257,"feedlog-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1]}],[257,"feedlog-badge",{"variant":[1]}]]],["feedlog-github-issues",[[1,"feedlog-github-issues",{"issues":[16],"maxWidth":[1,"max-width"],"theme":[1025],"heading":[1],"subtitle":[1],"loading":[4],"error":[1],"hasMore":[4,"has-more"],"isLoadingMore":[4,"is-loading-more"],"currentTheme":[32]}]]],["feedlog-github-issues-client",[[1,"feedlog-github-issues-client",{"apiKey":[1,"api-key"],"type":[1],"limit":[2],"endpoint":[1],"maxWidth":[1,"max-width"],"theme":[1],"heading":[1],"subtitle":[1],"issues":[32],"loading":[32],"error":[32],"cursor":[32],"hasMore":[32],"isLoadingMore":[32]}]]]], options);
|
|
20
20
|
});
|
package/dist/esm/loader.js
CHANGED
|
@@ -4,7 +4,7 @@ export { s as setNonce } from './index-CkB6Yzeb.js';
|
|
|
4
4
|
const defineCustomElements = async (win, options) => {
|
|
5
5
|
if (typeof window === 'undefined') return undefined;
|
|
6
6
|
await globalScripts();
|
|
7
|
-
return bootstrapLazy([["feedlog-card",[[257,"feedlog-card"]]],["feedlog-badge_3",[[1,"feedlog-issues-list",{"issues":[16],"theme":[1]}],[257,"feedlog-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1]}],[257,"feedlog-badge",{"variant":[1]}]]],["feedlog-github-issues",[[1,"feedlog-github-issues",{"issues":[16],"maxWidth":[1,"max-width"],"theme":[1025],"
|
|
7
|
+
return bootstrapLazy([["feedlog-card",[[257,"feedlog-card"]]],["feedlog-badge_3",[[1,"feedlog-issues-list",{"issues":[16],"theme":[1]}],[257,"feedlog-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1]}],[257,"feedlog-badge",{"variant":[1]}]]],["feedlog-github-issues",[[1,"feedlog-github-issues",{"issues":[16],"maxWidth":[1,"max-width"],"theme":[1025],"heading":[1],"subtitle":[1],"loading":[4],"error":[1],"hasMore":[4,"has-more"],"isLoadingMore":[4,"is-loading-more"],"currentTheme":[32]}]]],["feedlog-github-issues-client",[[1,"feedlog-github-issues-client",{"apiKey":[1,"api-key"],"type":[1],"limit":[2],"endpoint":[1],"maxWidth":[1,"max-width"],"theme":[1],"heading":[1],"subtitle":[1],"issues":[32],"loading":[32],"error":[32],"cursor":[32],"hasMore":[32],"isLoadingMore":[32]}]]]], options);
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export { defineCustomElements };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e,g as
|
|
1
|
+
import{p as e,g as i,b as a}from"./p-CkB6Yzeb.js";export{s as setNonce}from"./p-CkB6Yzeb.js";(()=>{const s=import.meta.url,i={};return""!==s&&(i.resourcesUrl=new URL(".",s).href),e(i)})().then((async e=>(await i(),a([["p-cdb2b098",[[257,"feedlog-card"]]],["p-125595a1",[[1,"feedlog-issues-list",{issues:[16],theme:[1]}],[257,"feedlog-button",{variant:[1],size:[1],disabled:[4],type:[1]}],[257,"feedlog-badge",{variant:[1]}]]],["p-5fc3d243",[[1,"feedlog-github-issues",{issues:[16],maxWidth:[1,"max-width"],theme:[1025],heading:[1],subtitle:[1],loading:[4],error:[1],hasMore:[4,"has-more"],isLoadingMore:[4,"is-loading-more"],currentTheme:[32]}]]],["p-ee48d93a",[[1,"feedlog-github-issues-client",{apiKey:[1,"api-key"],type:[1],limit:[2],endpoint:[1],maxWidth:[1,"max-width"],theme:[1],heading:[1],subtitle:[1],issues:[32],loading:[32],error:[32],cursor:[32],hasMore:[32],isLoadingMore:[32]}]]]],e))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,h as o,c as r,H as d}from"./p-CkB6Yzeb.js";const t=class{constructor(o){e(this,o),this.variant="default"}render(){return o("span",{key:"482a74feb8d254a75383c30c7b39790edd04a05b",class:`badge badge-${this.variant}`},o("slot",{key:"8d2db3fe0c2bc58e17829db4de7d0233189bb101"}))}};t.style=":host{display:inline-block;--feedlog-badge-font-size:0.75rem;--feedlog-badge-font-weight:500;--feedlog-badge-padding-x:0.5rem;--feedlog-badge-padding-y:0.125rem;--feedlog-badge-border-radius:calc(0.625rem - 2px);--feedlog-blue-500:oklch(0.623 0.214 259.815);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-blue-700:oklch(0.488 0.243 264.376);--feedlog-destructive:#d4183d;--feedlog-destructive-hover:#b91c1c}:host(.dark){--feedlog-blue-500:oklch(0.623 0.214 259.815);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-destructive:oklch(0.396 0.141 25.723);--feedlog-destructive-hover:oklch(0.45 0.16 25.723)}.badge{display:inline-flex;align-items:center;justify-content:center;font-size:var(--feedlog-badge-font-size);font-weight:var(--feedlog-badge-font-weight);padding:var(--feedlog-badge-padding-y) var(--feedlog-badge-padding-x);border-radius:var(--feedlog-badge-border-radius);white-space:nowrap;transition:background-color 0.15s ease;font-family:inherit}.badge-default{background-color:var(--feedlog-blue-600);color:#ffffff}.badge-default:hover{background-color:var(--feedlog-blue-700)}:host(.dark) .badge-default{background-color:var(--feedlog-blue-500)}:host(.dark) .badge-default:hover{background-color:var(--feedlog-blue-600)}.badge-enhancement{background-color:var(--feedlog-blue-600);color:#ffffff}.badge-enhancement:hover{background-color:var(--feedlog-blue-700)}:host(.dark) .badge-enhancement{background-color:var(--feedlog-blue-500)}:host(.dark) .badge-enhancement:hover{background-color:var(--feedlog-blue-600)}.badge-destructive{background-color:var(--feedlog-destructive);color:#ffffff}.badge-destructive:hover{background-color:var(--feedlog-destructive-hover)}";const l=class{constructor(o){e(this,o),this.feedlogClick=r(this,"feedlogClick"),this.variant="default",this.size="default",this.disabled=!1,this.type="button",this.handleClick=e=>{this.disabled||this.feedlogClick.emit(e)}}render(){return o("button",{key:"6cdd8347def51592707b1fb9aab0dc565ca0f76f",type:this.type,class:`button button-${this.variant} ${"default"===this.size?"button-size-default":`button-size-${this.size}`}`,disabled:this.disabled,onClick:this.handleClick},o("slot",{key:"3f3845195fa4b8a551473ecf1d5702321a31763e"}))}};l.style=":host{display:inline-block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-primary:#030213;--feedlog-primary-foreground:oklch(1 0 0);--feedlog-secondary:oklch(0.95 0.0058 264.53);--feedlog-secondary-foreground:#030213;--feedlog-muted:#ececf0;--feedlog-accent:#e9ebef;--feedlog-accent-foreground:#030213;--feedlog-border:rgba(0, 0, 0, 0.1);--feedlog-input:transparent;--feedlog-ring:oklch(0.708 0 0);--feedlog-destructive:#d4183d;--feedlog-radius:0.625rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-primary:oklch(0.985 0 0);--feedlog-primary-foreground:oklch(0.205 0 0);--feedlog-secondary:oklch(0.269 0 0);--feedlog-secondary-foreground:oklch(0.985 0 0);--feedlog-muted:oklch(0.269 0 0);--feedlog-accent:oklch(0.269 0 0);--feedlog-accent-foreground:oklch(0.985 0 0);--feedlog-border:oklch(0.269 0 0);--feedlog-input:oklch(0.269 0 0);--feedlog-ring:oklch(0.439 0 0);--feedlog-destructive:oklch(0.396 0.141 25.723)}button{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;white-space:nowrap;font-size:0.875rem;font-weight:500;border-radius:calc(var(--feedlog-radius) - 2px);border:1px solid transparent;cursor:pointer;transition:all 0.15s ease;outline:none;font-family:inherit}button:disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}button:focus-visible{border-color:var(--feedlog-ring);box-shadow:0 0 0 3px color-mix(in oklab, var(--feedlog-ring) 50%, transparent)}.button-default{background-color:var(--feedlog-primary);color:var(--feedlog-primary-foreground);border-color:transparent}.button-default:hover:not(:disabled){background-color:color-mix(in oklab, var(--feedlog-primary) 90%, transparent)}.button-outline{background-color:var(--feedlog-background);color:var(--feedlog-foreground);border-color:var(--feedlog-border)}.button-outline:hover:not(:disabled){background-color:var(--feedlog-accent);color:var(--feedlog-accent-foreground)}:host(.dark) .button-outline{background-color:transparent;border-color:var(--feedlog-input)}:host(.dark) .button-outline:hover:not(:disabled){background-color:color-mix(in oklab, var(--feedlog-accent) 50%, transparent)}.button-ghost{background-color:transparent;color:var(--feedlog-foreground);border-color:transparent}.button-ghost:hover:not(:disabled){background-color:var(--feedlog-accent);color:var(--feedlog-accent-foreground)}.button-destructive{background-color:var(--feedlog-destructive);color:#ffffff;border-color:transparent}.button-destructive:hover:not(:disabled){background-color:color-mix(in oklab, var(--feedlog-destructive) 90%, transparent)}:host(.dark) .button-destructive{background-color:color-mix(in oklab, var(--feedlog-destructive) 60%, transparent)}.button-size-sm{height:2rem;padding:0 0.75rem;font-size:0.75rem}.button-size-sm:has(svg:only-child){width:2rem;padding:0}.button-size-default{height:2.25rem;padding:0.5rem 1rem}.button-size-lg{height:2.5rem;padding:0.625rem 1.5rem;font-size:1rem}button svg{pointer-events:none;flex-shrink:0;width:1rem;height:1rem}";const a=()=>o("svg",{class:"upvote-icon filled",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"},o("path",{d:"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"})),n=()=>o("svg",{class:"upvote-icon outline",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},o("path",{d:"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"})),s=class{constructor(o){e(this,o),this.feedlogUpvote=r(this,"feedlogUpvote"),this.issues=[],this.theme="light",this.handleUpvote=(e,o)=>{e.stopPropagation(),this.feedlogUpvote.emit({issueId:o.id,currentUpvoted:o.hasUpvoted,currentCount:o.upvoteCount})}}render(){return o(d,{key:"5cef6f5476239d0f8096664c04690aa4c3383bd0",class:"dark"===this.theme?"dark":""},o("div",{key:"d72fffe457f0497dbbbe0c64dab3282f76a49217",class:"issues-list"},0===this.issues.length?o("div",{class:"empty-state"},o("p",null,"No issues found")):this.issues.map((e=>o("div",{key:e.id,class:"issue-card"},o("div",{class:"issue-content"},o("div",{class:"issue-header"},o("div",{class:"issue-type-badge"},"bug"===e.type?o("feedlog-badge",{variant:"destructive"},"Bug"):o("feedlog-badge",{variant:"enhancement"},"Enhancement")),e.pinnedAt&&o("div",{class:"pinned-indicator",title:"Pinned issue"},"📌")),o("div",{class:"issue-main"},o("div",{class:"issue-details"},o("h3",{class:"issue-title"},e.title),o("p",{class:"issue-body"},e.body),o("div",{class:"issue-repository"},o("span",{class:"repo-name"},e.repository.owner,"/",e.repository.name))),o("button",{class:"upvote-button "+(e.hasUpvoted?"upvoted":""),onClick:o=>this.handleUpvote(o,e),title:e.hasUpvoted?"Remove upvote":"Upvote this issue"},o(e.hasUpvoted?a:n,null),o("span",{class:"upvote-count"},e.upvoteCount))),o("div",{class:"issue-footer"},o("span",{class:"issue-date",title:`Updated: ${e.updatedAt}`},"Updated ",this.formatDate(e.updatedAt)),o("span",{class:"issue-date",title:`Created: ${e.createdAt}`},"Created ",this.formatDate(e.createdAt)))))))))}formatDate(e){try{const o=new Date(e),r=new Date,d=Math.floor((r.getTime()-o.getTime())/1e3);return d<60?"just now":d<3600?`${Math.floor(d/60)}m ago`:d<86400?`${Math.floor(d/3600)}h ago`:d<604800?`${Math.floor(d/86400)}d ago`:d<2592e3?`${Math.floor(d/604800)}w ago`:o.toLocaleDateString()}catch(e){return"unknown date"}}};s.style=":host{display:block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-card:#ffffff;--feedlog-card-foreground:oklch(0.145 0 0);--feedlog-muted:#ececf0;--feedlog-muted-foreground:#717182;--feedlog-border:rgba(0, 0, 0, 0.1);--feedlog-accent-color:#2563eb;--feedlog-destructive:#d4183d;--feedlog-blue-400:oklch(0.707 0.165 254.624);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-blue-100:oklch(0.932 0.032 255.585);--feedlog-red-100:#fce7f3;--feedlog-red-400:#f472b6;--feedlog-red-600:#db2777;--feedlog-radius:0.625rem;--feedlog-gap:0.5rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-card:oklch(0.145 0 0);--feedlog-card-foreground:oklch(0.985 0 0);--feedlog-muted:oklch(0.269 0 0);--feedlog-muted-foreground:oklch(0.708 0 0);--feedlog-border:oklch(0.269 0 0);--feedlog-accent-color:#3b82f6;--feedlog-destructive:oklch(0.396 0.141 25.723);--feedlog-blue-400:oklch(0.707 0.165 254.624);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-blue-900-30:color-mix(in oklab, oklch(0.379 0.146 265.522) 30%, transparent);--feedlog-red-900-30:color-mix(in oklab, oklch(0.396 0.141 25.723) 30%, transparent)}.issues-list{display:flex;flex-direction:column;gap:var(--feedlog-gap)}.empty-state{text-align:center;padding:3rem 1.5rem;color:var(--feedlog-muted-foreground);font-size:0.875rem}.issue-card{background-color:var(--feedlog-card);border:1px solid var(--feedlog-border);border-radius:var(--feedlog-radius);box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);transition:box-shadow 0.15s ease;position:relative}.issue-card:hover{box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)}.issue-content{padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.issue-header{display:flex;align-items:center;gap:0.5rem;justify-content:space-between}.issue-type-badge{width:fit-content}.pinned-indicator{font-size:1rem;opacity:0.7}.issue-main{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.issue-details{flex:1;min-width:0}.issue-title{color:var(--feedlog-card-foreground);font-size:0.875rem;font-weight:600;margin:0 0 0.375rem 0;line-height:1.4;word-break:break-word}.issue-body{color:var(--feedlog-muted-foreground);font-size:0.75rem;line-height:1.625;margin:0 0 0.75rem 0;word-break:break-word;white-space:pre-wrap}.issue-repository{display:flex;align-items:center;gap:0.5rem;font-size:0.75rem;color:var(--feedlog-muted-foreground);margin-bottom:0.5rem}.repo-name{font-weight:500}.github-number{color:var(--feedlog-blue-600);font-weight:600}:host(.dark) .github-number{color:var(--feedlog-blue-400)}.upvote-button{display:flex;flex-direction:column;align-items:center;gap:0.125rem;padding:0.5rem 0.75rem;border-radius:0.5rem;background-color:var(--feedlog-muted);border:1px solid transparent;cursor:pointer;transition:all 0.15s ease;flex-shrink:0;font-size:0.75rem;font-weight:600}.upvote-button:hover{background-color:var(--feedlog-blue-100);border-color:var(--feedlog-blue-400)}.upvote-button.upvoted{background-color:var(--feedlog-red-100);border-color:var(--feedlog-red-400)}.upvote-button.upvoted:hover{background-color:var(--feedlog-red-100);border-color:var(--feedlog-red-600)}:host(.dark) .upvote-button:hover{background-color:var(--feedlog-blue-900-30);border-color:var(--feedlog-blue-600)}:host(.dark) .upvote-button.upvoted{background-color:var(--feedlog-red-900-30);border-color:var(--feedlog-red-600)}.upvote-icon{width:1rem;height:1rem;stroke-width:2}.upvote-icon.filled{color:var(--feedlog-red-600)}.upvote-icon.outline{color:var(--feedlog-blue-600)}:host(.dark) .upvote-icon.outline{color:var(--feedlog-blue-400)}.upvote-count{font-size:0.75rem;font-weight:600;color:var(--feedlog-card-foreground)}.issue-footer{display:flex;flex-direction:column;gap:0.25rem;font-size:0.75rem}.issue-date{color:var(--feedlog-muted-foreground);cursor:help}";export{t as feedlog_badge,l as feedlog_button,s as feedlog_issues_list}
|
|
1
|
+
import{r as e,h as o,c as r,H as d}from"./p-CkB6Yzeb.js";const t=class{constructor(o){e(this,o),this.variant="default"}render(){return o("span",{key:"482a74feb8d254a75383c30c7b39790edd04a05b",class:`badge badge-${this.variant}`},o("slot",{key:"8d2db3fe0c2bc58e17829db4de7d0233189bb101"}))}};t.style=":host{display:inline-block;--feedlog-badge-font-size:0.75rem;--feedlog-badge-font-weight:500;--feedlog-badge-padding-x:0.5rem;--feedlog-badge-padding-y:0.125rem;--feedlog-badge-border-radius:calc(0.625rem - 2px);--feedlog-blue-500:oklch(0.623 0.214 259.815);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-blue-700:oklch(0.488 0.243 264.376);--feedlog-destructive:#d4183d;--feedlog-destructive-hover:#b91c1c}:host(.dark){--feedlog-blue-500:oklch(0.623 0.214 259.815);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-destructive:oklch(0.396 0.141 25.723);--feedlog-destructive-hover:oklch(0.45 0.16 25.723)}.badge{display:inline-flex;align-items:center;justify-content:center;font-size:var(--feedlog-badge-font-size);font-weight:var(--feedlog-badge-font-weight);padding:var(--feedlog-badge-padding-y) var(--feedlog-badge-padding-x);border-radius:var(--feedlog-badge-border-radius);white-space:nowrap;transition:background-color 0.15s ease;font-family:inherit}.badge-default{background-color:var(--feedlog-blue-600);color:#ffffff}.badge-default:hover{background-color:var(--feedlog-blue-700)}:host(.dark) .badge-default{background-color:var(--feedlog-blue-500)}:host(.dark) .badge-default:hover{background-color:var(--feedlog-blue-600)}.badge-enhancement{background-color:var(--feedlog-blue-600);color:#ffffff}.badge-enhancement:hover{background-color:var(--feedlog-blue-700)}:host(.dark) .badge-enhancement{background-color:var(--feedlog-blue-500)}:host(.dark) .badge-enhancement:hover{background-color:var(--feedlog-blue-600)}.badge-destructive{background-color:var(--feedlog-destructive);color:#ffffff}.badge-destructive:hover{background-color:var(--feedlog-destructive-hover)}";const l=class{constructor(o){e(this,o),this.feedlogClick=r(this,"feedlogClick"),this.variant="default",this.size="default",this.disabled=!1,this.type="button",this.handleClick=e=>{this.disabled||this.feedlogClick.emit(e)}}render(){return o("button",{key:"6cdd8347def51592707b1fb9aab0dc565ca0f76f",type:this.type,class:`button button-${this.variant} ${"default"===this.size?"button-size-default":`button-size-${this.size}`}`,disabled:this.disabled,onClick:this.handleClick},o("slot",{key:"3f3845195fa4b8a551473ecf1d5702321a31763e"}))}};l.style=":host{display:inline-block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-primary:#030213;--feedlog-primary-foreground:oklch(1 0 0);--feedlog-secondary:oklch(0.95 0.0058 264.53);--feedlog-secondary-foreground:#030213;--feedlog-muted:#ececf0;--feedlog-accent:#e9ebef;--feedlog-accent-foreground:#030213;--feedlog-border:rgba(0, 0, 0, 0.1);--feedlog-input:transparent;--feedlog-ring:oklch(0.708 0 0);--feedlog-destructive:#d4183d;--feedlog-radius:0.625rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-primary:oklch(0.985 0 0);--feedlog-primary-foreground:oklch(0.205 0 0);--feedlog-secondary:oklch(0.269 0 0);--feedlog-secondary-foreground:oklch(0.985 0 0);--feedlog-muted:oklch(0.269 0 0);--feedlog-accent:oklch(0.269 0 0);--feedlog-accent-foreground:oklch(0.985 0 0);--feedlog-border:oklch(0.269 0 0);--feedlog-input:oklch(0.269 0 0);--feedlog-ring:oklch(0.439 0 0);--feedlog-destructive:oklch(0.396 0.141 25.723)}button{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;white-space:nowrap;font-size:0.875rem;font-weight:500;border-radius:calc(var(--feedlog-radius) - 2px);border:1px solid transparent;cursor:pointer;transition:all 0.15s ease;outline:none;font-family:inherit}button:disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}button:focus-visible{border-color:var(--feedlog-ring);box-shadow:0 0 0 3px color-mix(in oklab, var(--feedlog-ring) 50%, transparent)}.button-default{background-color:var(--feedlog-primary);color:var(--feedlog-primary-foreground);border-color:transparent}.button-default:hover:not(:disabled){background-color:color-mix(in oklab, var(--feedlog-primary) 90%, transparent)}.button-outline{background-color:var(--feedlog-background);color:var(--feedlog-foreground);border-color:var(--feedlog-border)}.button-outline:hover:not(:disabled){background-color:var(--feedlog-accent);color:var(--feedlog-accent-foreground)}:host(.dark) .button-outline{background-color:transparent;border-color:var(--feedlog-input)}:host(.dark) .button-outline:hover:not(:disabled){background-color:color-mix(in oklab, var(--feedlog-accent) 50%, transparent)}.button-ghost{background-color:transparent;color:var(--feedlog-foreground);border-color:transparent}.button-ghost:hover:not(:disabled){background-color:var(--feedlog-accent);color:var(--feedlog-accent-foreground)}.button-destructive{background-color:var(--feedlog-destructive);color:#ffffff;border-color:transparent}.button-destructive:hover:not(:disabled){background-color:color-mix(in oklab, var(--feedlog-destructive) 90%, transparent)}:host(.dark) .button-destructive{background-color:color-mix(in oklab, var(--feedlog-destructive) 60%, transparent)}.button-size-sm{height:2rem;padding:0 0.75rem;font-size:0.75rem}.button-size-sm:has(svg:only-child){width:2rem;padding:0}.button-size-default{height:2.25rem;padding:0.5rem 1rem}.button-size-lg{height:2.5rem;padding:0.625rem 1.5rem;font-size:1rem}button svg{pointer-events:none;flex-shrink:0;width:1rem;height:1rem}";const a=()=>o("svg",{class:"upvote-icon filled",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"},o("path",{d:"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"})),n=()=>o("svg",{class:"upvote-icon outline",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},o("path",{d:"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"})),s=class{constructor(o){e(this,o),this.feedlogUpvote=r(this,"feedlogUpvote"),this.issues=[],this.theme="light",this.handleUpvote=(e,o)=>{e.stopPropagation(),this.feedlogUpvote.emit({issueId:o.id,currentUpvoted:o.hasUpvoted,currentCount:o.upvoteCount})}}render(){return o(d,{key:"81b2b973309388f09d20629da416b92545567618",class:"dark"===this.theme?"dark":""},o("div",{key:"ed22c88736ee13621f39b3095f71c361b0d04b44",class:"issues-list"},0===this.issues.length?o("div",{class:"empty-state"},o("p",null,"No issues found")):this.issues.map((e=>o("div",{key:e.id,class:"issue-card"},o("div",{class:"issue-content"},o("div",{class:"issue-header"},o("div",{class:"issue-type-badge"},"bug"===e.type?o("feedlog-badge",{variant:"destructive"},"Bug"):o("feedlog-badge",{variant:"enhancement"},"Enhancement")),e.pinnedAt&&o("div",{class:"pinned-indicator",title:"Pinned issue"},"📌")),o("div",{class:"issue-main"},o("div",{class:"issue-details"},o("h3",{class:"issue-title"},e.title),o("p",{class:"issue-body"},e.body),o("div",{class:"issue-repository"},o("span",{class:"repo-name"},e.repository.owner,"/",e.repository.name))),o("button",{class:"upvote-button "+(e.hasUpvoted?"upvoted":""),onClick:o=>this.handleUpvote(o,e),title:e.hasUpvoted?"Remove upvote":"Upvote this issue"},o(e.hasUpvoted?a:n,null),o("span",{class:"upvote-count"},e.upvoteCount))),o("div",{class:"issue-footer"},o("span",{class:"issue-date",title:`Updated: ${e.updatedAt}`},"Updated ",this.formatDate(e.updatedAt)),o("span",{class:"issue-date",title:`Created: ${e.createdAt}`},"Created ",this.formatDate(e.createdAt)))))))))}formatDate(e){try{const o=new Date(e),r=new Date,d=Math.floor((r.getTime()-o.getTime())/1e3);return d<60?"just now":d<3600?`${Math.floor(d/60)}m ago`:d<86400?`${Math.floor(d/3600)}h ago`:d<604800?`${Math.floor(d/86400)}d ago`:d<2592e3?`${Math.floor(d/604800)}w ago`:o.toLocaleDateString()}catch(e){return"unknown date"}}};s.style=":host{display:block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-card:#ffffff;--feedlog-card-foreground:oklch(0.145 0 0);--feedlog-muted:#ececf0;--feedlog-muted-foreground:#717182;--feedlog-border:rgba(0, 0, 0, 0.1);--feedlog-accent-color:#2563eb;--feedlog-destructive:#d4183d;--feedlog-blue-400:oklch(0.707 0.165 254.624);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-blue-100:oklch(0.932 0.032 255.585);--feedlog-red-100:#fce7f3;--feedlog-red-400:#f472b6;--feedlog-red-600:#db2777;--feedlog-radius:0.625rem;--feedlog-gap:0.5rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-card:oklch(0.145 0 0);--feedlog-card-foreground:oklch(0.985 0 0);--feedlog-muted:oklch(0.269 0 0);--feedlog-muted-foreground:oklch(0.708 0 0);--feedlog-border:oklch(0.269 0 0);--feedlog-accent-color:#3b82f6;--feedlog-destructive:oklch(0.396 0.141 25.723);--feedlog-blue-400:oklch(0.707 0.165 254.624);--feedlog-blue-600:oklch(0.546 0.245 262.881);--feedlog-blue-900-30:color-mix(in oklab, oklch(0.379 0.146 265.522) 30%, transparent);--feedlog-red-900-30:color-mix(in oklab, oklch(0.396 0.141 25.723) 30%, transparent)}.issues-list{display:flex;flex-direction:column;gap:var(--feedlog-gap)}.empty-state{text-align:center;padding:3rem 1.5rem;color:var(--feedlog-muted-foreground);font-size:0.875rem}.issue-card{background-color:var(--feedlog-card);border:1px solid var(--feedlog-border);border-radius:var(--feedlog-radius);box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);transition:box-shadow 0.15s ease;position:relative}.issue-card:hover{box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)}.issue-content{padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.issue-header{display:flex;align-items:center;gap:0.5rem;justify-content:space-between}.issue-type-badge{width:fit-content}.pinned-indicator{font-size:1rem;opacity:0.7}.issue-main{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.issue-details{flex:1;min-width:0}.issue-title{color:var(--feedlog-card-foreground);font-size:0.875rem;font-weight:600;margin:0 0 0.375rem 0;line-height:1.4;word-break:break-word}.issue-body{color:var(--feedlog-muted-foreground);font-size:0.75rem;line-height:1.625;margin:0 0 0.75rem 0;word-break:break-word;white-space:pre-wrap}.issue-repository{display:flex;align-items:center;gap:0.5rem;font-size:0.75rem;color:var(--feedlog-muted-foreground);margin-bottom:0.5rem}.repo-name{font-weight:500}.github-number{color:var(--feedlog-blue-600);font-weight:600}:host(.dark) .github-number{color:var(--feedlog-blue-400)}.upvote-button{display:flex;flex-direction:column;align-items:center;gap:0.125rem;padding:0.5rem 0.75rem;border-radius:0.5rem;background-color:var(--feedlog-muted);border:1px solid transparent;cursor:pointer;transition:all 0.15s ease;flex-shrink:0;font-size:0.75rem;font-weight:600}.upvote-button:hover{background-color:var(--feedlog-blue-100);border-color:var(--feedlog-blue-400)}.upvote-button.upvoted{background-color:var(--feedlog-red-100);border-color:var(--feedlog-red-400)}.upvote-button.upvoted:hover{background-color:var(--feedlog-red-100);border-color:var(--feedlog-red-600)}:host(.dark) .upvote-button:hover{background-color:var(--feedlog-blue-900-30);border-color:var(--feedlog-blue-600)}:host(.dark) .upvote-button.upvoted{background-color:var(--feedlog-red-900-30);border-color:var(--feedlog-red-600)}.upvote-icon{width:1rem;height:1rem;stroke-width:2}.upvote-icon.filled{color:var(--feedlog-red-600)}.upvote-icon.outline{color:var(--feedlog-blue-600)}:host(.dark) .upvote-icon.outline{color:var(--feedlog-blue-400)}.upvote-count{font-size:0.75rem;font-weight:600;color:var(--feedlog-card-foreground)}.issue-footer{display:flex;flex-direction:column;gap:0.25rem;font-size:0.75rem}.issue-date{color:var(--feedlog-muted-foreground);cursor:help}";export{t as feedlog_badge,l as feedlog_button,s as feedlog_issues_list}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,c as s,h as t,H as d}from"./p-CkB6Yzeb.js";const o=class{constructor(t){e(this,t),this.feedlogUpvote=s(this,"feedlogUpvote"),this.feedlogLoadMore=s(this,"feedlogLoadMore"),this.issues=[],this.maxWidth="42rem",this.theme="light",this.loading=!1,this.error=null,this.hasMore=!1,this.isLoadingMore=!1,this.currentTheme="light",this.handleUpvote=e=>{this.feedlogUpvote.emit(e.detail)},this.handleLoadMore=()=>{this.feedlogLoadMore.emit()}}componentWillLoad(){this.currentTheme=this.theme}render(){return t(d,{key:"473e30453d8b3a719bd977a361b7f669fdd88e48",class:"dark"===this.currentTheme?"dark":""},t("div",{key:"ab91126edb301a1da6136f14441ec33833b6cd74",class:"github-issues-container",style:{maxWidth:this.maxWidth}},(this.heading||this.subtitle)&&t("header",{key:"17494da495d2b2910e6f024f1c3971a945e0a1cc",class:"issues-header"},t("div",{key:"95d5ac1c25ccfc864a863cafe1fa89d4ce04fce2",class:"header-content"},this.heading&&t("h1",{key:"b37f9b9372e1b99da76c0fb9ee50d0a6cdbb0549",class:"issues-title"},this.heading),this.subtitle&&t("p",{key:"5edc92ca86f2dfd1afe640d77d65782e5ec27a8e",class:"issues-subtitle"},this.subtitle))),this.loading&&t("div",{key:"f786656d24c8b88a57c7fa48f0d1877ac3565767",class:"loading-state"},t("p",{key:"fa97c2a05f52c2c1fbe0e907ac797cd6570d0a82"},"Loading issues...")),this.error&&t("div",{key:"798f3dc1ba004b2889aee6490b74240900ba3812",class:"error-state"},t("p",{key:"03b996ab514027fce2e88a93901f3fe17d8da3e1"},"Error: ",this.error)),!this.loading&&!this.error&&t("div",{key:"67501ae1866122df2db6f97752d632013dbcd8a1"},t("feedlog-issues-list",{key:"c668c631f6ba6008df0a411bda7824bcce7318cd",issues:this.issues,theme:this.currentTheme,onFeedlogUpvote:this.handleUpvote}),this.hasMore&&t("div",{key:"28e1ea0600436f3ca8bf12e57e9764bf8899fa53",class:"load-more-container"},t("feedlog-button",{key:"f19576026d152e1b7f7957c83ccfee3c44727dd0",onFeedlogClick:this.handleLoadMore,disabled:this.isLoadingMore,variant:"outline"},this.isLoadingMore?"Loading...":"Load More Issues")))))}};o.style=":host{display:block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-muted-foreground:#717182;--feedlog-destructive:#d4183d;--feedlog-padding:2rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-muted-foreground:oklch(0.708 0 0);--feedlog-destructive:oklch(0.637 0.237 25.331)}.github-issues-container{min-height:100vh;background-color:var(--feedlog-background);padding:var(--feedlog-padding);margin:0 auto}.issues-header{margin-bottom:1.5rem;display:flex;align-items:flex-start;justify-content:space-between}.header-content{flex:1}.issues-title{color:var(--feedlog-foreground);margin:0 0 0.25rem 0;font-size:1.5rem;font-weight:500;line-height:1.5}.issues-subtitle{color:var(--feedlog-muted-foreground);font-size:0.875rem;margin:0}.loading-state,.error-state{padding:2rem;text-align:center;color:var(--feedlog-muted-foreground)}.error-state{color:var(--feedlog-destructive)}.load-more-container{display:flex;justify-content:center;padding:2rem 0;gap:1rem}";export{o as feedlog_github_issues}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as t,c as e,h as s}from"./p-CkB6Yzeb.js";function i(t){if("string"!=typeof t)return"";let e=t.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"");return e=e.replace(/\s*on\w+\s*=\s*["'][^"']*["']/gi,""),e=e.replace(/\s*on\w+\s*=\s*[^\s>]*/gi,""),e=e.replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,""),e=e.replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,""),e=e.replace(/<(embed|object)\b[^<]*>/gi,""),e=e.replace(/javascript:/gi,""),e=e.replace(/data:(?!image\/(?:png|jpg|jpeg|gif|webp);)/gi,""),e}class o extends Error{constructor(t,e,s){super(t),this.statusCode=e,this.originalError=s,this.name="FeedlogError",Object.setPrototypeOf(this,o.prototype)}}class r extends o{constructor(t){super(t),this.name="FeedlogValidationError",Object.setPrototypeOf(this,r.prototype)}}class n extends o{constructor(t,e,s){super(t,e,s),this.name="FeedlogNetworkError",Object.setPrototypeOf(this,n.prototype)}}class h extends o{constructor(t="Request timed out"){super(t),this.name="FeedlogTimeoutError",Object.setPrototypeOf(this,h.prototype)}}class a{constructor(t){if(this.config={credentials:"include",...t},this.apiKey=this.config.apiKey,!this.apiKey)throw new r("apiKey is required in FeedlogSDKConfig");this.endpoint=this.config.endpoint||"https://api.feedlog.app",this.timeout=this.config.timeout||3e4,this.endpoint=this.endpoint.replace(/\/$/,"")}async fetchIssues(t={}){try{const e=this.buildIssuesUrl(t),s=await this.fetchWithTimeout(e,{method:"GET",headers:this.getAuthHeaders(),credentials:this.config.credentials||"include"});if(!s.ok)throw new n(`Failed to fetch issues: ${s.statusText}`,s.status);const i=await s.json();return this.validateIssuesResponse(i)}catch(t){if(t instanceof o)throw t;if(t instanceof TypeError&&t.message.includes("fetch"))throw new n("Network error: Unable to reach API",void 0,t);throw new o(`Failed to fetch issues: ${t instanceof Error?t.message:"Unknown error"}`,void 0,t)}}async toggleUpvote(t){if(!t||"string"!=typeof t)throw new r("Issue ID is required");try{const e=`${this.endpoint}/api/issues/${encodeURIComponent(t)}/upvote`,s=await this.fetchWithTimeout(e,{method:"POST",headers:this.getAuthHeaders(),credentials:this.config.credentials||"include",body:JSON.stringify({})});if(404===s.status)throw new n("Issue not found",404);if(401===s.status)throw new n("Unauthorized",401);if(403===s.status)throw new n("Forbidden: Domain not allowed for this repository",403);if(!s.ok)throw new n(`Failed to toggle upvote: ${s.statusText}`,s.status);const i=await s.json();return this.validateUpvoteResponse(i)}catch(t){if(t instanceof o)throw t;if(t instanceof TypeError&&t.message.includes("fetch"))throw new n("Network error: Unable to reach API",void 0,t);throw new o(`Failed to toggle upvote: ${t instanceof Error?t.message:"Unknown error"}`,void 0,t)}}buildIssuesUrl(t){const e=new URL(`${this.endpoint}/api/issues`);if(t.repositoryIds){const s=Array.isArray(t.repositoryIds)?t.repositoryIds:[t.repositoryIds];for(const t of s)e.searchParams.append("repositoryIds",t)}return t.type&&e.searchParams.set("type",t.type),t.cursor&&e.searchParams.set("cursor",t.cursor),void 0!==t.limit&&e.searchParams.set("limit",t.limit.toString()),e.toString()}getAuthHeaders(){const t={"Content-Type":"application/json"};return this.apiKey&&(t["x-api-key"]=this.apiKey),t}async fetchWithTimeout(t,e){const s=new AbortController,i=setTimeout((()=>s.abort()),this.timeout);try{const o=await fetch(t,{...e,signal:s.signal});return clearTimeout(i),o}catch(t){if(clearTimeout(i),t instanceof Error&&"AbortError"===t.name)throw new h(`Request timed out after ${this.timeout}ms`);throw t}}validateIssuesResponse(t){if(!t||"object"!=typeof t)throw new r("Invalid API response: expected object");const e=t;if(!Array.isArray(e.issues))throw new r("Invalid API response: issues must be an array");if(!e.pagination||"object"!=typeof e.pagination)throw new r("Invalid API response: pagination is required");return{issues:e.issues.map((t=>this.validateIssue(t))),pagination:{cursor:e.pagination.cursor,hasMore:Boolean(e.pagination.hasMore)}}}validateIssue(t){if(!t||"object"!=typeof t)throw new r("Invalid issue: expected object");const e=t;if("string"!=typeof e.id)throw new r("Invalid issue: id is required and must be a string");if("string"!=typeof e.title)throw new r("Invalid issue: title is required and must be a string");if(!["bug","enhancement"].includes(String(e.type)))throw new r('Invalid issue: type must be "bug" or "enhancement"');if(!["open","closed"].includes(String(e.status)))throw new r('Invalid issue: status must be "open" or "closed"');if(!e.repository||"object"!=typeof e.repository)throw new r("Invalid issue: repository is required");const s=e.repository;if("string"!=typeof s.id||"string"!=typeof s.name||"string"!=typeof s.owner)throw new r("Invalid issue: repository must have id, name, and owner");const o=i(String(e.title)),n=i(String(e.body||""));return{id:String(e.id),type:e.type||"bug",status:e.status||"open",pinnedAt:e.pinnedAt?String(e.pinnedAt):null,revision:Number(e.revision)||1,title:o,body:n,repository:{id:String(s.id),name:String(s.name),owner:String(s.owner)},updatedAt:String(e.updatedAt)||(new Date).toISOString(),createdAt:String(e.createdAt)||(new Date).toISOString(),upvoteCount:Number(e.upvoteCount)||0,hasUpvoted:Boolean(e.hasUpvoted)}}validateUpvoteResponse(t){if(!t||"object"!=typeof t)throw new r("Invalid upvote response: expected object");const e=t;if("boolean"!=typeof e.upvoted)throw new r("Invalid upvote response: upvoted must be a boolean");if("number"!=typeof e.upvoteCount)throw new r("Invalid upvote response: upvoteCount must be a number");if("string"!=typeof e.anonymousUserId)throw new r("Invalid upvote response: anonymousUserId must be a string");return{upvoted:e.upvoted,upvoteCount:e.upvoteCount,anonymousUserId:e.anonymousUserId}}getEndpoint(){return this.endpoint}getTimeout(){return this.timeout}}const c=class{constructor(s){t(this,s),this.feedlogUpvote=e(this,"feedlogUpvote"),this.feedlogError=e(this,"feedlogError"),this.maxWidth="42rem",this.theme="light",this.issues=[],this.loading=!0,this.error=null,this.cursor=null,this.hasMore=!1,this.isLoadingMore=!1,this.sdk=null,this.handleUpvote=async t=>{if(!this.sdk)return;const{issueId:e,currentUpvoted:s,currentCount:i}=t.detail;this.issues=this.issues.map((t=>t.id===e?Object.assign(Object.assign({},t),{hasUpvoted:!s,upvoteCount:s?i-1:i+1}):t));try{const t=await this.sdk.toggleUpvote(e);this.issues=this.issues.map((s=>s.id===e?Object.assign(Object.assign({},s),{hasUpvoted:t.upvoted,upvoteCount:t.upvoteCount}):s)),this.feedlogUpvote.emit({issueId:e,upvoted:t.upvoted,upvoteCount:t.upvoteCount})}catch(t){this.issues=this.issues.map((t=>t.id===e?Object.assign(Object.assign({},t),{hasUpvoted:s,upvoteCount:i}):t));const o=t instanceof Error?t.message:"Failed to toggle upvote";this.feedlogError.emit({error:o})}}}componentWillLoad(){this.previousType=this.type,this.previousLimit=this.limit,this.initializeSDK(),this.fetchIssues()}componentDidUpdate(){(this.previousType!==this.type||this.previousLimit!==this.limit)&&(this.cursor=null,this.hasMore=!1,this.issues=[],this.fetchIssues(),this.previousType=this.type,this.previousLimit=this.limit)}initializeSDK(){try{if(!this.apiKey)throw new Error("API key is required for the Feedlog SDK");this.sdk=new a(Object.assign({apiKey:this.apiKey},this.endpoint&&{endpoint:this.endpoint})),this.error=null}catch(t){const e=t instanceof Error?t.message:"Failed to initialize SDK";this.error=e,this.feedlogError.emit({error:e})}}async fetchIssues(){if(this.sdk)try{this.loading=!0,this.error=null;const t={};this.type&&(t.type=this.type),this.limit&&(t.limit=this.limit),this.cursor&&(t.cursor=this.cursor);const e=await this.sdk.fetchIssues(t);this.issues=e.issues,this.cursor=e.pagination.cursor,this.hasMore=e.pagination.hasMore}catch(t){const e=t instanceof Error?t.message:"Failed to fetch issues";this.error=e,this.issues=[],this.feedlogError.emit({error:e,code:null==t?void 0:t.statusCode})}finally{this.loading=!1,this.isLoadingMore=!1}}async loadMore(){if(this.sdk&&this.hasMore&&!this.isLoadingMore&&!this.loading){this.isLoadingMore=!0;try{const t={};this.type&&(t.type=this.type),this.limit&&(t.limit=this.limit),this.cursor&&(t.cursor=this.cursor);const e=await this.sdk.fetchIssues(t);this.issues=[...this.issues,...e.issues],this.cursor=e.pagination.cursor,this.hasMore=e.pagination.hasMore}catch(t){const e=t instanceof Error?t.message:"Failed to load more issues";this.feedlogError.emit({error:e,code:null==t?void 0:t.statusCode})}finally{this.isLoadingMore=!1}}}render(){return s("feedlog-github-issues",{key:"39ee74bee86db7ff47d921cd771e5ce7c7468bb5",issues:this.issues,maxWidth:this.maxWidth,theme:this.theme,heading:this.heading,subtitle:this.subtitle,loading:this.loading,error:this.error,hasMore:this.hasMore,isLoadingMore:this.isLoadingMore,onFeedlogUpvote:this.handleUpvote,onFeedlogLoadMore:async()=>this.loadMore()})}};export{c as feedlog_github_issues_client}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@stencil/storybook-plugin';
|
|
2
|
-
|
|
3
|
-
declare const meta: Meta<FeedlogBadge>;
|
|
2
|
+
declare const meta: Meta;
|
|
4
3
|
export default meta;
|
|
5
|
-
type Story = StoryObj
|
|
4
|
+
type Story = StoryObj;
|
|
6
5
|
export declare const Default: Story;
|
|
7
6
|
export declare const Destructive: Story;
|
|
8
7
|
export declare const AllVariants: Story;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@stencil/storybook-plugin';
|
|
2
|
-
|
|
3
|
-
declare const meta: Meta<FeedlogButton>;
|
|
2
|
+
declare const meta: Meta;
|
|
4
3
|
export default meta;
|
|
5
|
-
type Story = StoryObj
|
|
4
|
+
type Story = StoryObj;
|
|
6
5
|
export declare const Default: Story;
|
|
7
6
|
export declare const Outline: Story;
|
|
8
7
|
export declare const Ghost: Story;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@stencil/storybook-plugin';
|
|
2
|
-
|
|
3
|
-
declare const meta: Meta<FeedlogCard>;
|
|
2
|
+
declare const meta: Meta;
|
|
4
3
|
export default meta;
|
|
5
|
-
type Story = StoryObj
|
|
4
|
+
type Story = StoryObj;
|
|
6
5
|
export declare const Default: Story;
|
|
7
6
|
export declare const WithFooter: Story;
|
|
8
7
|
export declare const HeaderOnly: Story;
|
|
@@ -19,6 +19,14 @@ export declare class FeedlogGithubIssues {
|
|
|
19
19
|
* Theme variant: 'light' or 'dark'
|
|
20
20
|
*/
|
|
21
21
|
theme: 'light' | 'dark';
|
|
22
|
+
/**
|
|
23
|
+
* Custom heading for the issues section
|
|
24
|
+
*/
|
|
25
|
+
heading?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Custom subtitle for the issues section
|
|
28
|
+
*/
|
|
29
|
+
subtitle?: string;
|
|
22
30
|
/**
|
|
23
31
|
* Loading state - shows loading indicator when true
|
|
24
32
|
*/
|
|
@@ -27,10 +35,6 @@ export declare class FeedlogGithubIssues {
|
|
|
27
35
|
* Error message - shows error state when set
|
|
28
36
|
*/
|
|
29
37
|
error: string | null;
|
|
30
|
-
/**
|
|
31
|
-
* Whether to show the theme toggle button
|
|
32
|
-
*/
|
|
33
|
-
showThemeToggle: boolean;
|
|
34
38
|
/**
|
|
35
39
|
* Whether there are more issues to load
|
|
36
40
|
*/
|
|
@@ -51,17 +55,12 @@ export declare class FeedlogGithubIssues {
|
|
|
51
55
|
currentUpvoted: boolean;
|
|
52
56
|
currentCount: number;
|
|
53
57
|
}>;
|
|
54
|
-
/**
|
|
55
|
-
* Event emitted when theme changes
|
|
56
|
-
*/
|
|
57
|
-
feedlogThemeChange: EventEmitter<'light' | 'dark'>;
|
|
58
58
|
/**
|
|
59
59
|
* Event emitted to load more issues
|
|
60
60
|
*/
|
|
61
61
|
feedlogLoadMore: EventEmitter<void>;
|
|
62
62
|
componentWillLoad(): void;
|
|
63
63
|
private handleUpvote;
|
|
64
|
-
private toggleTheme;
|
|
65
64
|
private handleLoadMore;
|
|
66
65
|
render(): any;
|
|
67
66
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@stencil/storybook-plugin';
|
|
2
|
-
|
|
3
|
-
declare const meta: Meta<FeedlogGithubIssues>;
|
|
2
|
+
declare const meta: Meta;
|
|
4
3
|
export default meta;
|
|
5
|
-
type Story = StoryObj
|
|
4
|
+
type Story = StoryObj;
|
|
6
5
|
export declare const Default: Story;
|
|
7
6
|
export declare const Loading: Story;
|
|
8
7
|
export declare const Error: Story;
|
package/dist/types/components/feedlog-github-issues-client/feedlog-github-issues-client.d.ts
CHANGED
|
@@ -33,9 +33,13 @@ export declare class FeedlogGithubIssuesClient {
|
|
|
33
33
|
*/
|
|
34
34
|
theme: 'light' | 'dark';
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* Custom heading for the issues section
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
heading?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Custom subtitle for the issues section
|
|
41
|
+
*/
|
|
42
|
+
subtitle?: string;
|
|
39
43
|
/**
|
|
40
44
|
* Event emitted when an issue is upvoted
|
|
41
45
|
*/
|
|
@@ -44,10 +48,6 @@ export declare class FeedlogGithubIssuesClient {
|
|
|
44
48
|
upvoted: boolean;
|
|
45
49
|
upvoteCount: number;
|
|
46
50
|
}>;
|
|
47
|
-
/**
|
|
48
|
-
* Event emitted when theme changes
|
|
49
|
-
*/
|
|
50
|
-
feedlogThemeChange: EventEmitter<'light' | 'dark'>;
|
|
51
51
|
/**
|
|
52
52
|
* Event emitted on error
|
|
53
53
|
*/
|
|
@@ -70,6 +70,5 @@ export declare class FeedlogGithubIssuesClient {
|
|
|
70
70
|
private fetchIssues;
|
|
71
71
|
private loadMore;
|
|
72
72
|
private handleUpvote;
|
|
73
|
-
private handleThemeChange;
|
|
74
73
|
render(): any;
|
|
75
74
|
}
|
|
@@ -67,6 +67,10 @@ export namespace Components {
|
|
|
67
67
|
* @default false
|
|
68
68
|
*/
|
|
69
69
|
"hasMore": boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Custom heading for the issues section
|
|
72
|
+
*/
|
|
73
|
+
"heading"?: string;
|
|
70
74
|
/**
|
|
71
75
|
* Whether more issues are currently loading
|
|
72
76
|
* @default false
|
|
@@ -88,10 +92,9 @@ export namespace Components {
|
|
|
88
92
|
*/
|
|
89
93
|
"maxWidth": string;
|
|
90
94
|
/**
|
|
91
|
-
*
|
|
92
|
-
* @default true
|
|
95
|
+
* Custom subtitle for the issues section
|
|
93
96
|
*/
|
|
94
|
-
"
|
|
97
|
+
"subtitle"?: string;
|
|
95
98
|
/**
|
|
96
99
|
* Theme variant: 'light' or 'dark'
|
|
97
100
|
* @default 'light'
|
|
@@ -112,6 +115,10 @@ export namespace Components {
|
|
|
112
115
|
* Custom API endpoint
|
|
113
116
|
*/
|
|
114
117
|
"endpoint"?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Custom heading for the issues section
|
|
120
|
+
*/
|
|
121
|
+
"heading"?: string;
|
|
115
122
|
/**
|
|
116
123
|
* Maximum number of issues to fetch (1-100, default 10)
|
|
117
124
|
*/
|
|
@@ -122,10 +129,9 @@ export namespace Components {
|
|
|
122
129
|
*/
|
|
123
130
|
"maxWidth": string;
|
|
124
131
|
/**
|
|
125
|
-
*
|
|
126
|
-
* @default true
|
|
132
|
+
* Custom subtitle for the issues section
|
|
127
133
|
*/
|
|
128
|
-
"
|
|
134
|
+
"subtitle"?: string;
|
|
129
135
|
/**
|
|
130
136
|
* Theme variant: 'light' or 'dark'
|
|
131
137
|
* @default 'light'
|
|
@@ -217,7 +223,6 @@ declare global {
|
|
|
217
223
|
currentUpvoted: boolean;
|
|
218
224
|
currentCount: number;
|
|
219
225
|
};
|
|
220
|
-
"feedlogThemeChange": 'light' | 'dark';
|
|
221
226
|
"feedlogLoadMore": void;
|
|
222
227
|
}
|
|
223
228
|
/**
|
|
@@ -241,7 +246,6 @@ declare global {
|
|
|
241
246
|
};
|
|
242
247
|
interface HTMLFeedlogGithubIssuesClientElementEventMap {
|
|
243
248
|
"feedlogUpvote": { issueId: string; upvoted: boolean; upvoteCount: number };
|
|
244
|
-
"feedlogThemeChange": 'light' | 'dark';
|
|
245
249
|
"feedlogError": { error: string; code?: number };
|
|
246
250
|
}
|
|
247
251
|
/**
|
|
@@ -361,6 +365,10 @@ declare namespace LocalJSX {
|
|
|
361
365
|
* @default false
|
|
362
366
|
*/
|
|
363
367
|
"hasMore"?: boolean;
|
|
368
|
+
/**
|
|
369
|
+
* Custom heading for the issues section
|
|
370
|
+
*/
|
|
371
|
+
"heading"?: string;
|
|
364
372
|
/**
|
|
365
373
|
* Whether more issues are currently loading
|
|
366
374
|
* @default false
|
|
@@ -385,10 +393,6 @@ declare namespace LocalJSX {
|
|
|
385
393
|
* Event emitted to load more issues
|
|
386
394
|
*/
|
|
387
395
|
"onFeedlogLoadMore"?: (event: FeedlogGithubIssuesCustomEvent<void>) => void;
|
|
388
|
-
/**
|
|
389
|
-
* Event emitted when theme changes
|
|
390
|
-
*/
|
|
391
|
-
"onFeedlogThemeChange"?: (event: FeedlogGithubIssuesCustomEvent<'light' | 'dark'>) => void;
|
|
392
396
|
/**
|
|
393
397
|
* Event emitted when an issue is upvoted
|
|
394
398
|
*/
|
|
@@ -398,10 +402,9 @@ declare namespace LocalJSX {
|
|
|
398
402
|
currentCount: number;
|
|
399
403
|
}>) => void;
|
|
400
404
|
/**
|
|
401
|
-
*
|
|
402
|
-
* @default true
|
|
405
|
+
* Custom subtitle for the issues section
|
|
403
406
|
*/
|
|
404
|
-
"
|
|
407
|
+
"subtitle"?: string;
|
|
405
408
|
/**
|
|
406
409
|
* Theme variant: 'light' or 'dark'
|
|
407
410
|
* @default 'light'
|
|
@@ -422,6 +425,10 @@ declare namespace LocalJSX {
|
|
|
422
425
|
* Custom API endpoint
|
|
423
426
|
*/
|
|
424
427
|
"endpoint"?: string;
|
|
428
|
+
/**
|
|
429
|
+
* Custom heading for the issues section
|
|
430
|
+
*/
|
|
431
|
+
"heading"?: string;
|
|
425
432
|
/**
|
|
426
433
|
* Maximum number of issues to fetch (1-100, default 10)
|
|
427
434
|
*/
|
|
@@ -435,19 +442,14 @@ declare namespace LocalJSX {
|
|
|
435
442
|
* Event emitted on error
|
|
436
443
|
*/
|
|
437
444
|
"onFeedlogError"?: (event: FeedlogGithubIssuesClientCustomEvent<{ error: string; code?: number }>) => void;
|
|
438
|
-
/**
|
|
439
|
-
* Event emitted when theme changes
|
|
440
|
-
*/
|
|
441
|
-
"onFeedlogThemeChange"?: (event: FeedlogGithubIssuesClientCustomEvent<'light' | 'dark'>) => void;
|
|
442
445
|
/**
|
|
443
446
|
* Event emitted when an issue is upvoted
|
|
444
447
|
*/
|
|
445
448
|
"onFeedlogUpvote"?: (event: FeedlogGithubIssuesClientCustomEvent<{ issueId: string; upvoted: boolean; upvoteCount: number }>) => void;
|
|
446
449
|
/**
|
|
447
|
-
*
|
|
448
|
-
* @default true
|
|
450
|
+
* Custom subtitle for the issues section
|
|
449
451
|
*/
|
|
450
|
-
"
|
|
452
|
+
"subtitle"?: string;
|
|
451
453
|
/**
|
|
452
454
|
* Theme variant: 'light' or 'dark'
|
|
453
455
|
* @default 'light'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feedlog-ai/webcomponents",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "Stencil web components for Feedlog Toolkit - Data visualization components",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@stencil/vue-output-target": "^0.8.0",
|
|
34
34
|
"@types/node": "^20.11.24",
|
|
35
35
|
"rollup": "^4.0.0",
|
|
36
|
-
"storybook": "^9.
|
|
36
|
+
"storybook": "^9.0.5",
|
|
37
37
|
"typescript": "^5.3.3",
|
|
38
|
-
"vite": "^
|
|
38
|
+
"vite": "^6.0.0",
|
|
39
39
|
"wsl-utils": "^0.1.0"
|
|
40
40
|
},
|
|
41
41
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e,p as s,H as t,c as o,h as i,a}from"./index.js";import{d}from"./p-CHtSMTyP.js";import{d as r}from"./p-DMdb-G26.js";import{d as l}from"./p-DMcNh5Ys.js";const n=()=>i("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},i("circle",{cx:"12",cy:"12",r:"4"}),i("path",{d:"M12 2v2"}),i("path",{d:"M12 20v2"}),i("path",{d:"m4.93 4.93 1.41 1.41"}),i("path",{d:"m17.66 17.66 1.41 1.41"}),i("path",{d:"M2 12h2"}),i("path",{d:"M20 12h2"}),i("path",{d:"m6.34 17.66-1.41 1.41"}),i("path",{d:"m19.07 4.93-1.41 1.41"})),c=()=>i("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},i("path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"})),h=s(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.feedlogUpvote=o(this,"feedlogUpvote"),this.feedlogThemeChange=o(this,"feedlogThemeChange"),this.feedlogLoadMore=o(this,"feedlogLoadMore"),this.issues=[],this.maxWidth="42rem",this.theme="light",this.loading=!1,this.error=null,this.showThemeToggle=!0,this.hasMore=!1,this.isLoadingMore=!1,this.currentTheme="light",this.handleUpvote=e=>{this.feedlogUpvote.emit(e.detail)},this.toggleTheme=()=>{this.currentTheme="dark"===this.currentTheme?"light":"dark",this.theme=this.currentTheme,this.feedlogThemeChange.emit(this.currentTheme)},this.handleLoadMore=()=>{this.feedlogLoadMore.emit()}}componentWillLoad(){this.currentTheme=this.theme}render(){return i(a,{key:"8f238ab41f45799062270c84188596d770d6bde0",class:"dark"===this.currentTheme?"dark":""},i("div",{key:"af0c2155ef3cdc12f228ec804ee906afd7d75477",class:"github-issues-container",style:{maxWidth:this.maxWidth}},i("header",{key:"ccf9a063df220f7a48e3600cb22df8203960a45b",class:"issues-header"},i("div",{key:"c261d6b0c8168a66faef9ec2fb381619f5175070",class:"header-content"},i("h1",{key:"19203aa63dab0648b0a2865fe812233bfbbc225a",class:"issues-title"},"GitHub Issues"),i("p",{key:"e717a4e64cc747c81ad7a9e1cec234c247bfc329",class:"issues-subtitle"},"Track bugs and enhancements for your project")),this.showThemeToggle&&i("feedlog-button",{key:"21057c7d384c53262e699e0384234077b0b36314",variant:"outline",size:"sm",onFeedlogClick:this.toggleTheme},i("dark"===this.currentTheme?n:c,null))),this.loading&&i("div",{key:"2059c491247e0a48a81d802d9757d9fa97ac1a72",class:"loading-state"},i("p",{key:"5654904e73b05bd5a05aa0243506e4bf074e5486"},"Loading issues...")),this.error&&i("div",{key:"7d2e09e0055e5d834aa870ed47bd4ebaba64dff1",class:"error-state"},i("p",{key:"d4cc2bb872c81234b4e81a4ec4ce21aff368ad74"},"Error: ",this.error)),!this.loading&&!this.error&&i("div",{key:"e25eb90f7098416837a26a44e5811888530220a4"},i("feedlog-issues-list",{key:"a8e7ec5c5861cb31456738107b93f6e7adebbbe9",issues:this.issues,theme:this.currentTheme,onFeedlogUpvote:this.handleUpvote}),this.hasMore&&i("div",{key:"0d935e9247f44bff0700fce487d0bc4ccd104f2a",class:"load-more-container"},i("feedlog-button",{key:"2858d701f5e3d219c39a6a28a7475c619464bc72",onFeedlogClick:this.handleLoadMore,disabled:this.isLoadingMore,variant:"outline"},this.isLoadingMore?"Loading...":"Load More Issues")))))}static get style(){return":host{display:block;font-family:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;--feedlog-background:#ffffff;--feedlog-foreground:oklch(0.145 0 0);--feedlog-muted-foreground:#717182;--feedlog-destructive:#d4183d;--feedlog-padding:2rem}:host(.dark){--feedlog-background:oklch(0.145 0 0);--feedlog-foreground:oklch(0.985 0 0);--feedlog-muted-foreground:oklch(0.708 0 0);--feedlog-destructive:oklch(0.637 0.237 25.331)}.github-issues-container{min-height:100vh;background-color:var(--feedlog-background);padding:var(--feedlog-padding);margin:0 auto}.issues-header{margin-bottom:1.5rem;display:flex;align-items:flex-start;justify-content:space-between}.header-content{flex:1}.issues-title{color:var(--feedlog-foreground);margin:0 0 0.25rem 0;font-size:1.5rem;font-weight:500;line-height:1.5}.issues-subtitle{color:var(--feedlog-muted-foreground);font-size:0.875rem;margin:0}.loading-state,.error-state{padding:2rem;text-align:center;color:var(--feedlog-muted-foreground)}.error-state{color:var(--feedlog-destructive)}.load-more-container{display:flex;justify-content:center;padding:2rem 0;gap:1rem}"}},[1,"feedlog-github-issues",{issues:[16],maxWidth:[1,"max-width"],theme:[1025],loading:[4],error:[1],showThemeToggle:[4,"show-theme-toggle"],hasMore:[4,"has-more"],isLoadingMore:[4,"is-loading-more"],currentTheme:[32]}]);function f(){"undefined"!=typeof customElements&&["feedlog-github-issues","feedlog-badge","feedlog-button","feedlog-issues-list"].forEach((s=>{switch(s){case"feedlog-github-issues":customElements.get(e(s))||customElements.define(e(s),h);break;case"feedlog-badge":customElements.get(e(s))||d();break;case"feedlog-button":customElements.get(e(s))||r();break;case"feedlog-issues-list":customElements.get(e(s))||l()}}))}f();export{h as F,f as d}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as t,c as e,h as s}from"./p-CkB6Yzeb.js";function i(t){if("string"!=typeof t)return"";let e=t.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"");return e=e.replace(/\s*on\w+\s*=\s*["'][^"']*["']/gi,""),e=e.replace(/\s*on\w+\s*=\s*[^\s>]*/gi,""),e=e.replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,""),e=e.replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,""),e=e.replace(/<(embed|object)\b[^<]*>/gi,""),e=e.replace(/javascript:/gi,""),e=e.replace(/data:(?!image\/(?:png|jpg|jpeg|gif|webp);)/gi,""),e}class o extends Error{constructor(t,e,s){super(t),this.statusCode=e,this.originalError=s,this.name="FeedlogError",Object.setPrototypeOf(this,o.prototype)}}class r extends o{constructor(t){super(t),this.name="FeedlogValidationError",Object.setPrototypeOf(this,r.prototype)}}class n extends o{constructor(t,e,s){super(t,e,s),this.name="FeedlogNetworkError",Object.setPrototypeOf(this,n.prototype)}}class h extends o{constructor(t="Request timed out"){super(t),this.name="FeedlogTimeoutError",Object.setPrototypeOf(this,h.prototype)}}class a{constructor(t={}){this.config={credentials:"include",...t},this.apiKey=this.config.apiKey,this.endpoint=this.config.endpoint||"https://api.feedlog.app",this.timeout=this.config.timeout||3e4,this.endpoint=this.endpoint.replace(/\/$/,"")}async fetchIssues(t={}){try{const e=this.buildIssuesUrl(t),s=await this.fetchWithTimeout(e,{method:"GET",headers:this.getAuthHeaders(),credentials:this.config.credentials||"include"});if(!s.ok)throw new n(`Failed to fetch issues: ${s.statusText}`,s.status);const i=await s.json();return this.validateIssuesResponse(i)}catch(t){if(t instanceof o)throw t;if(t instanceof TypeError&&t.message.includes("fetch"))throw new n("Network error: Unable to reach API",void 0,t);throw new o(`Failed to fetch issues: ${t instanceof Error?t.message:"Unknown error"}`,void 0,t)}}async toggleUpvote(t){if(!t||"string"!=typeof t)throw new r("Issue ID is required");try{const e=`${this.endpoint}/api/issues/${encodeURIComponent(t)}/upvote`,s=await this.fetchWithTimeout(e,{method:"POST",headers:this.getAuthHeaders(),credentials:this.config.credentials||"include"});if(404===s.status)throw new n("Issue not found",404);if(401===s.status)throw new n("Unauthorized",401);if(403===s.status)throw new n("Forbidden: Domain not allowed for this repository",403);if(!s.ok)throw new n(`Failed to toggle upvote: ${s.statusText}`,s.status);const i=await s.json();return this.validateUpvoteResponse(i)}catch(t){if(t instanceof o)throw t;if(t instanceof TypeError&&t.message.includes("fetch"))throw new n("Network error: Unable to reach API",void 0,t);throw new o(`Failed to toggle upvote: ${t instanceof Error?t.message:"Unknown error"}`,void 0,t)}}buildIssuesUrl(t){const e=new URL(`${this.endpoint}/api/issues`);if(t.repositoryIds){const s=Array.isArray(t.repositoryIds)?t.repositoryIds:[t.repositoryIds];for(const t of s)e.searchParams.append("repositoryIds",t)}return t.type&&e.searchParams.set("type",t.type),t.cursor&&e.searchParams.set("cursor",t.cursor),void 0!==t.limit&&e.searchParams.set("limit",t.limit.toString()),e.toString()}getAuthHeaders(){const t={"Content-Type":"application/json"};return this.apiKey&&(t["x-api-key"]=this.apiKey),t}async fetchWithTimeout(t,e){const s=new AbortController,i=setTimeout((()=>s.abort()),this.timeout);try{const o=await fetch(t,{...e,signal:s.signal});return clearTimeout(i),o}catch(t){if(clearTimeout(i),t instanceof Error&&"AbortError"===t.name)throw new h(`Request timed out after ${this.timeout}ms`);throw t}}validateIssuesResponse(t){if(!t||"object"!=typeof t)throw new r("Invalid API response: expected object");const e=t;if(!Array.isArray(e.issues))throw new r("Invalid API response: issues must be an array");if(!e.pagination||"object"!=typeof e.pagination)throw new r("Invalid API response: pagination is required");return{issues:e.issues.map((t=>this.validateIssue(t))),pagination:{cursor:e.pagination.cursor,hasMore:Boolean(e.pagination.hasMore)}}}validateIssue(t){if(!t||"object"!=typeof t)throw new r("Invalid issue: expected object");const e=t;if("string"!=typeof e.id)throw new r("Invalid issue: id is required and must be a string");if("string"!=typeof e.title)throw new r("Invalid issue: title is required and must be a string");if(!["bug","enhancement"].includes(String(e.type)))throw new r('Invalid issue: type must be "bug" or "enhancement"');if(!["open","closed"].includes(String(e.status)))throw new r('Invalid issue: status must be "open" or "closed"');if(!e.repository||"object"!=typeof e.repository)throw new r("Invalid issue: repository is required");const s=e.repository;if("string"!=typeof s.id||"string"!=typeof s.name||"string"!=typeof s.owner)throw new r("Invalid issue: repository must have id, name, and owner");const o=i(String(e.title)),n=i(String(e.body||""));return{id:String(e.id),type:e.type||"bug",status:e.status||"open",pinnedAt:e.pinnedAt?String(e.pinnedAt):null,revision:Number(e.revision)||1,title:o,body:n,repository:{id:String(s.id),name:String(s.name),owner:String(s.owner)},updatedAt:String(e.updatedAt)||(new Date).toISOString(),createdAt:String(e.createdAt)||(new Date).toISOString(),upvoteCount:Number(e.upvoteCount)||0,hasUpvoted:Boolean(e.hasUpvoted)}}validateUpvoteResponse(t){if(!t||"object"!=typeof t)throw new r("Invalid upvote response: expected object");const e=t;if("boolean"!=typeof e.upvoted)throw new r("Invalid upvote response: upvoted must be a boolean");if("number"!=typeof e.upvoteCount)throw new r("Invalid upvote response: upvoteCount must be a number");if("string"!=typeof e.anonymousUserId)throw new r("Invalid upvote response: anonymousUserId must be a string");return{upvoted:e.upvoted,upvoteCount:e.upvoteCount,anonymousUserId:e.anonymousUserId}}getEndpoint(){return this.endpoint}getTimeout(){return this.timeout}}const c=class{constructor(s){t(this,s),this.feedlogUpvote=e(this,"feedlogUpvote"),this.feedlogThemeChange=e(this,"feedlogThemeChange"),this.feedlogError=e(this,"feedlogError"),this.maxWidth="42rem",this.theme="light",this.showThemeToggle=!0,this.issues=[],this.loading=!0,this.error=null,this.cursor=null,this.hasMore=!1,this.isLoadingMore=!1,this.sdk=null,this.handleUpvote=async t=>{if(!this.sdk)return;const{issueId:e,currentUpvoted:s,currentCount:i}=t.detail;this.issues=this.issues.map((t=>t.id===e?Object.assign(Object.assign({},t),{hasUpvoted:!s,upvoteCount:s?i-1:i+1}):t));try{const t=await this.sdk.toggleUpvote(e);this.issues=this.issues.map((s=>s.id===e?Object.assign(Object.assign({},s),{hasUpvoted:t.upvoted,upvoteCount:t.upvoteCount}):s)),this.feedlogUpvote.emit({issueId:e,upvoted:t.upvoted,upvoteCount:t.upvoteCount})}catch(t){this.issues=this.issues.map((t=>t.id===e?Object.assign(Object.assign({},t),{hasUpvoted:s,upvoteCount:i}):t));const o=t instanceof Error?t.message:"Failed to toggle upvote";this.feedlogError.emit({error:o})}},this.handleThemeChange=t=>{this.theme=t.detail,this.feedlogThemeChange.emit(t.detail)}}componentWillLoad(){this.previousType=this.type,this.previousLimit=this.limit,this.initializeSDK(),this.fetchIssues()}componentDidUpdate(){(this.previousType!==this.type||this.previousLimit!==this.limit)&&(this.cursor=null,this.hasMore=!1,this.issues=[],this.fetchIssues(),this.previousType=this.type,this.previousLimit=this.limit)}initializeSDK(){try{if(!this.apiKey)throw new Error("API key is required for the Feedlog SDK");this.sdk=new a(Object.assign({apiKey:this.apiKey},this.endpoint&&{endpoint:this.endpoint})),this.error=null}catch(t){const e=t instanceof Error?t.message:"Failed to initialize SDK";this.error=e,this.feedlogError.emit({error:e})}}async fetchIssues(){if(this.sdk)try{this.loading=!0,this.error=null;const t={};this.type&&(t.type=this.type),this.limit&&(t.limit=this.limit),this.cursor&&(t.cursor=this.cursor);const e=await this.sdk.fetchIssues(t);this.issues=e.issues,this.cursor=e.pagination.cursor,this.hasMore=e.pagination.hasMore}catch(t){const e=t instanceof Error?t.message:"Failed to fetch issues";this.error=e,this.issues=[],this.feedlogError.emit({error:e,code:null==t?void 0:t.statusCode})}finally{this.loading=!1,this.isLoadingMore=!1}}async loadMore(){if(this.sdk&&this.hasMore&&!this.isLoadingMore&&!this.loading){this.isLoadingMore=!0;try{const t={};this.type&&(t.type=this.type),this.limit&&(t.limit=this.limit),this.cursor&&(t.cursor=this.cursor);const e=await this.sdk.fetchIssues(t);this.issues=[...this.issues,...e.issues],this.cursor=e.pagination.cursor,this.hasMore=e.pagination.hasMore}catch(t){const e=t instanceof Error?t.message:"Failed to load more issues";this.feedlogError.emit({error:e,code:null==t?void 0:t.statusCode})}finally{this.isLoadingMore=!1}}}render(){return s("feedlog-github-issues",{key:"2c35408db4c6f52927112f8b07c03883238d5e8d",issues:this.issues,maxWidth:this.maxWidth,theme:this.theme,showThemeToggle:this.showThemeToggle,loading:this.loading,error:this.error,hasMore:this.hasMore,isLoadingMore:this.isLoadingMore,onFeedlogUpvote:this.handleUpvote,onFeedlogThemeChange:this.handleThemeChange,onFeedlogLoadMore:async()=>this.loadMore()})}};export{c as feedlog_github_issues_client}
|