@feedlog-ai/webcomponents 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -17
- package/dist/cjs/feedlog-badge.cjs.entry.js +3 -3
- package/dist/cjs/feedlog-button_3.cjs.entry.js +16 -1385
- package/dist/cjs/feedlog-card.cjs.entry.js +3 -3
- package/dist/cjs/feedlog-issues-client.cjs.entry.js +102 -74
- package/dist/cjs/feedlog-issues.cjs.entry.js +4 -11
- package/dist/cjs/feedlog-toolkit.cjs.js +2 -2
- package/dist/cjs/{index-CXKBwRlh.js → index-prPyjPBk.js} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/purify.es-ppGw41aq.js +1384 -0
- package/dist/collection/components/feedlog-badge/feedlog-badge.css +35 -45
- package/dist/collection/components/feedlog-badge/feedlog-badge.js +1 -1
- package/dist/collection/components/feedlog-button/feedlog-button.css +16 -66
- package/dist/collection/components/feedlog-button/feedlog-button.js +1 -1
- package/dist/collection/components/feedlog-card/feedlog-card.css +22 -24
- package/dist/collection/components/feedlog-card/feedlog-card.js +1 -1
- package/dist/collection/components/feedlog-card/feedlog-card.stories.js +1 -1
- package/dist/collection/components/feedlog-issue/feedlog-issue.css +99 -187
- package/dist/collection/components/feedlog-issue/feedlog-issue.js +1 -1
- package/dist/collection/components/feedlog-issue/feedlog-issue.stories.js +19 -19
- package/dist/collection/components/feedlog-issues/feedlog-issues.css +34 -63
- package/dist/collection/components/feedlog-issues/feedlog-issues.js +2 -14
- package/dist/collection/components/feedlog-issues/feedlog-issues.stories.js +72 -52
- package/dist/collection/components/feedlog-issues-client/feedlog-issues-client.js +22 -28
- package/dist/collection/components/feedlog-issues-list/feedlog-issues-list.js +3 -3
- package/dist/collection/utils/markdown.js +6 -1
- package/dist/components/feedlog-badge.js +1 -1
- package/dist/components/feedlog-button.js +1 -1
- package/dist/components/feedlog-card.js +1 -1
- package/dist/components/feedlog-issue.js +1 -1
- package/dist/components/feedlog-issues-client.js +1 -1
- package/dist/components/feedlog-issues-list.js +1 -1
- package/dist/components/feedlog-issues.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-BoxVrJId.js +1 -0
- package/dist/components/{p-BRjVS8bz.js → p-CvIMO_S7.js} +2 -2
- package/dist/components/p-DFD585IK.js +1 -0
- package/dist/components/p-I6NOP29P.js +1 -0
- package/dist/components/p-fDVosM5p.js +1 -0
- package/dist/esm/feedlog-badge.entry.js +3 -3
- package/dist/esm/feedlog-button_3.entry.js +15 -1384
- package/dist/esm/feedlog-card.entry.js +3 -3
- package/dist/esm/feedlog-issues-client.entry.js +102 -74
- package/dist/esm/feedlog-issues.entry.js +4 -11
- package/dist/esm/feedlog-toolkit.js +3 -3
- package/dist/esm/{index-CgNWSmzU.js → index-Cu1eYdKa.js} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/purify.es-Bow7VsVH.js +1381 -0
- package/dist/feedlog-toolkit/feedlog-toolkit.css +1 -1
- package/dist/feedlog-toolkit/feedlog-toolkit.esm.js +1 -1
- package/dist/feedlog-toolkit/p-001d7353.entry.js +1 -0
- package/dist/feedlog-toolkit/p-556062d0.entry.js +1 -0
- package/dist/feedlog-toolkit/p-62554649.entry.js +1 -0
- package/dist/feedlog-toolkit/p-Bow7VsVH.js +2 -0
- package/dist/feedlog-toolkit/p-Cu1eYdKa.js +2 -0
- package/dist/feedlog-toolkit/p-b558fc9f.entry.js +1 -0
- package/dist/feedlog-toolkit/p-ca90ade9.entry.js +1 -0
- package/dist/types/components/feedlog-issues/feedlog-issues.d.ts +0 -5
- package/dist/types/components/feedlog-issues-client/feedlog-issues-client.d.ts +1 -0
- package/dist/types/index.d.ts +1 -1
- package/hydrate/index.js +130 -101
- package/hydrate/index.mjs +130 -101
- package/package.json +4 -7
- package/dist/components/p-BBbiSGNf.js +0 -1
- package/dist/components/p-CuFKEckF.js +0 -1
- package/dist/components/p-DMdb-G26.js +0 -1
- package/dist/components/p-DzATWlAC.js +0 -1
- package/dist/feedlog-toolkit/p-32663f65.entry.js +0 -1
- package/dist/feedlog-toolkit/p-891c349f.entry.js +0 -3
- package/dist/feedlog-toolkit/p-CgNWSmzU.js +0 -2
- package/dist/feedlog-toolkit/p-b51c95a6.entry.js +0 -1
- package/dist/feedlog-toolkit/p-da0268a8.entry.js +0 -1
- package/dist/feedlog-toolkit/p-f22117ae.entry.js +0 -1
|
@@ -1,59 +1,30 @@
|
|
|
1
1
|
:host {
|
|
2
2
|
display: block;
|
|
3
|
-
font-family:
|
|
4
|
-
ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
|
|
3
|
+
font-family: var(--feedlog-font-family);
|
|
5
4
|
|
|
6
5
|
/* Light theme defaults - use --feedlog-theme-bg so parent can override via --feedlog-background */
|
|
7
|
-
--feedlog-theme-bg:
|
|
8
|
-
--feedlog-
|
|
9
|
-
--feedlog-
|
|
10
|
-
--feedlog-card-foreground: oklch(0.145 0 0);
|
|
11
|
-
--feedlog-muted: #ececf0;
|
|
12
|
-
--feedlog-muted-foreground: #717182;
|
|
13
|
-
--feedlog-border: rgba(0, 0, 0, 0.1);
|
|
14
|
-
--feedlog-accent-color: #2563eb;
|
|
15
|
-
--feedlog-destructive: #d4183d;
|
|
16
|
-
--feedlog-blue-400: oklch(0.707 0.165 254.624);
|
|
17
|
-
--feedlog-blue-600: oklch(0.546 0.245 262.881);
|
|
18
|
-
--feedlog-blue-100: oklch(0.932 0.032 255.585);
|
|
19
|
-
--feedlog-red-100: #fce7f3;
|
|
20
|
-
--feedlog-red-400: #f472b6;
|
|
21
|
-
--feedlog-red-600: #db2777;
|
|
22
|
-
--feedlog-radius: 0.625rem;
|
|
23
|
-
--feedlog-gap: 0.5rem;
|
|
24
|
-
--feedlog-padding: 2rem;
|
|
6
|
+
--feedlog-theme-bg: var(--feedlog-background);
|
|
7
|
+
--feedlog-gap: var(--feedlog-space-2);
|
|
8
|
+
--feedlog-padding: var(--feedlog-space-8);
|
|
25
9
|
--feedlog-min-height: 100%;
|
|
26
|
-
--feedlog-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08), 0 1px 2px -1px rgba(0, 0, 0, 0.08);
|
|
27
10
|
}
|
|
28
11
|
|
|
29
12
|
:host(.dark) {
|
|
30
13
|
/* Dark theme values */
|
|
31
|
-
--feedlog-theme-bg:
|
|
32
|
-
--feedlog-foreground: oklch(0.985 0 0);
|
|
33
|
-
--feedlog-card: oklch(0.24 0.01 260);
|
|
34
|
-
--feedlog-card-foreground: oklch(0.985 0 0);
|
|
35
|
-
--feedlog-muted: oklch(0.32 0.01 260);
|
|
36
|
-
--feedlog-muted-foreground: oklch(0.72 0.02 260);
|
|
37
|
-
--feedlog-border: oklch(0.34 0.01 260);
|
|
38
|
-
--feedlog-accent-color: #3b82f6;
|
|
39
|
-
--feedlog-destructive: oklch(0.396 0.141 25.723);
|
|
40
|
-
--feedlog-blue-400: oklch(0.707 0.165 254.624);
|
|
41
|
-
--feedlog-blue-600: oklch(0.546 0.245 262.881);
|
|
42
|
-
--feedlog-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.3);
|
|
14
|
+
--feedlog-theme-bg: var(--feedlog-background);
|
|
43
15
|
}
|
|
44
16
|
|
|
45
|
-
|
|
46
17
|
.issues-container {
|
|
47
18
|
min-height: var(--feedlog-min-height);
|
|
48
19
|
/* Parent can override via --feedlog-background (e.g. transparent); fallback to theme default */
|
|
49
20
|
background-color: var(--feedlog-background, var(--feedlog-theme-bg, #ffffff));
|
|
50
21
|
padding: var(--feedlog-padding);
|
|
51
22
|
margin: 0 auto;
|
|
52
|
-
border-radius: var(--feedlog-radius);
|
|
23
|
+
border-radius: var(--feedlog-radius-lg);
|
|
53
24
|
}
|
|
54
25
|
|
|
55
26
|
.issues-header {
|
|
56
|
-
margin-bottom:
|
|
27
|
+
margin-bottom: var(--feedlog-space-6);
|
|
57
28
|
display: flex;
|
|
58
29
|
align-items: flex-start;
|
|
59
30
|
justify-content: space-between;
|
|
@@ -65,15 +36,15 @@
|
|
|
65
36
|
|
|
66
37
|
.issues-title {
|
|
67
38
|
color: var(--feedlog-foreground);
|
|
68
|
-
margin: 0 0
|
|
69
|
-
font-size:
|
|
70
|
-
font-weight:
|
|
39
|
+
margin: 0 0 var(--feedlog-space-1) 0;
|
|
40
|
+
font-size: var(--feedlog-text-xl);
|
|
41
|
+
font-weight: var(--feedlog-font-semibold);
|
|
71
42
|
line-height: 1.5;
|
|
72
43
|
}
|
|
73
44
|
|
|
74
45
|
.issues-subtitle {
|
|
75
46
|
color: var(--feedlog-muted-foreground);
|
|
76
|
-
font-size:
|
|
47
|
+
font-size: var(--feedlog-text-sm);
|
|
77
48
|
margin: 0;
|
|
78
49
|
}
|
|
79
50
|
|
|
@@ -91,7 +62,7 @@
|
|
|
91
62
|
background-color: var(--feedlog-card);
|
|
92
63
|
border: 1px solid var(--feedlog-border);
|
|
93
64
|
border-radius: var(--feedlog-radius);
|
|
94
|
-
box-shadow: var(--feedlog-shadow);
|
|
65
|
+
box-shadow: var(--feedlog-shadow-sm);
|
|
95
66
|
position: relative;
|
|
96
67
|
overflow: hidden;
|
|
97
68
|
}
|
|
@@ -107,24 +78,24 @@
|
|
|
107
78
|
}
|
|
108
79
|
|
|
109
80
|
.skeleton-content {
|
|
110
|
-
padding:
|
|
111
|
-
padding-left: calc(
|
|
81
|
+
padding: var(--feedlog-space-5);
|
|
82
|
+
padding-left: calc(var(--feedlog-space-5) + 3px);
|
|
112
83
|
display: flex;
|
|
113
84
|
flex-direction: column;
|
|
114
|
-
gap:
|
|
85
|
+
gap: var(--feedlog-space-3);
|
|
115
86
|
}
|
|
116
87
|
|
|
117
88
|
.skeleton-header {
|
|
118
89
|
display: flex;
|
|
119
90
|
align-items: center;
|
|
120
91
|
justify-content: space-between;
|
|
121
|
-
gap:
|
|
92
|
+
gap: var(--feedlog-space-3);
|
|
122
93
|
}
|
|
123
94
|
|
|
124
95
|
.skeleton-badge {
|
|
125
96
|
width: 4.5rem;
|
|
126
97
|
height: 1.25rem;
|
|
127
|
-
border-radius:
|
|
98
|
+
border-radius: var(--feedlog-radius-sm);
|
|
128
99
|
background-color: var(--feedlog-muted);
|
|
129
100
|
animation: skeleton-pulse 1.5s ease-in-out infinite;
|
|
130
101
|
}
|
|
@@ -132,7 +103,7 @@
|
|
|
132
103
|
.skeleton-timestamp {
|
|
133
104
|
width: 3rem;
|
|
134
105
|
height: 0.75rem;
|
|
135
|
-
border-radius:
|
|
106
|
+
border-radius: var(--feedlog-radius-sm);
|
|
136
107
|
background-color: var(--feedlog-muted);
|
|
137
108
|
animation: skeleton-pulse 1.5s ease-in-out infinite 0.2s;
|
|
138
109
|
}
|
|
@@ -140,12 +111,12 @@
|
|
|
140
111
|
.skeleton-main {
|
|
141
112
|
display: flex;
|
|
142
113
|
flex-direction: column;
|
|
143
|
-
gap:
|
|
114
|
+
gap: var(--feedlog-space-2);
|
|
144
115
|
}
|
|
145
116
|
|
|
146
117
|
.skeleton-title {
|
|
147
118
|
height: 0.9375rem;
|
|
148
|
-
border-radius:
|
|
119
|
+
border-radius: var(--feedlog-radius-sm);
|
|
149
120
|
background-color: var(--feedlog-muted);
|
|
150
121
|
animation: skeleton-pulse 1.5s ease-in-out infinite 0.1s;
|
|
151
122
|
width: 85%;
|
|
@@ -154,12 +125,12 @@
|
|
|
154
125
|
.skeleton-body {
|
|
155
126
|
display: flex;
|
|
156
127
|
flex-direction: column;
|
|
157
|
-
gap:
|
|
128
|
+
gap: var(--feedlog-space-1);
|
|
158
129
|
}
|
|
159
130
|
|
|
160
131
|
.skeleton-line {
|
|
161
132
|
height: 0.8125rem;
|
|
162
|
-
border-radius:
|
|
133
|
+
border-radius: var(--feedlog-radius-sm);
|
|
163
134
|
background-color: var(--feedlog-muted);
|
|
164
135
|
animation: skeleton-pulse 1.5s ease-in-out infinite 0.15s;
|
|
165
136
|
width: 100%;
|
|
@@ -172,7 +143,7 @@
|
|
|
172
143
|
.skeleton-repo {
|
|
173
144
|
width: 6rem;
|
|
174
145
|
height: 0.75rem;
|
|
175
|
-
border-radius:
|
|
146
|
+
border-radius: var(--feedlog-radius-sm);
|
|
176
147
|
background-color: var(--feedlog-muted);
|
|
177
148
|
animation: skeleton-pulse 1.5s ease-in-out infinite 0.25s;
|
|
178
149
|
}
|
|
@@ -185,7 +156,7 @@
|
|
|
185
156
|
.skeleton-upvote {
|
|
186
157
|
width: 2.5rem;
|
|
187
158
|
height: 2rem;
|
|
188
|
-
border-radius:
|
|
159
|
+
border-radius: var(--feedlog-radius);
|
|
189
160
|
background-color: var(--feedlog-muted);
|
|
190
161
|
animation: skeleton-pulse 1.5s ease-in-out infinite 0.3s;
|
|
191
162
|
}
|
|
@@ -204,7 +175,7 @@
|
|
|
204
175
|
display: flex;
|
|
205
176
|
align-items: center;
|
|
206
177
|
justify-content: center;
|
|
207
|
-
padding:
|
|
178
|
+
padding: var(--feedlog-space-10) var(--feedlog-space-8);
|
|
208
179
|
min-height: 12rem;
|
|
209
180
|
}
|
|
210
181
|
|
|
@@ -214,26 +185,26 @@
|
|
|
214
185
|
align-items: center;
|
|
215
186
|
text-align: center;
|
|
216
187
|
max-width: 20rem;
|
|
217
|
-
padding:
|
|
188
|
+
padding: var(--feedlog-space-8);
|
|
218
189
|
}
|
|
219
190
|
|
|
220
191
|
.error-icon {
|
|
221
192
|
color: var(--feedlog-muted-foreground);
|
|
222
193
|
opacity: 0.8;
|
|
223
|
-
margin-bottom:
|
|
194
|
+
margin-bottom: var(--feedlog-space-4);
|
|
224
195
|
}
|
|
225
196
|
|
|
226
197
|
.error-state-title {
|
|
227
|
-
margin: 0 0
|
|
228
|
-
font-size:
|
|
229
|
-
font-weight:
|
|
198
|
+
margin: 0 0 var(--feedlog-space-2) 0;
|
|
199
|
+
font-size: var(--feedlog-text-lg);
|
|
200
|
+
font-weight: var(--feedlog-font-semibold);
|
|
230
201
|
color: var(--feedlog-foreground);
|
|
231
202
|
line-height: 1.4;
|
|
232
203
|
}
|
|
233
204
|
|
|
234
205
|
.error-state-message {
|
|
235
|
-
margin: 0 0
|
|
236
|
-
font-size:
|
|
206
|
+
margin: 0 0 var(--feedlog-space-5) 0;
|
|
207
|
+
font-size: var(--feedlog-text-sm);
|
|
237
208
|
color: var(--feedlog-muted-foreground);
|
|
238
209
|
line-height: 1.5;
|
|
239
210
|
}
|
|
@@ -241,6 +212,6 @@
|
|
|
241
212
|
.load-more-container {
|
|
242
213
|
display: flex;
|
|
243
214
|
justify-content: center;
|
|
244
|
-
padding:
|
|
245
|
-
gap:
|
|
215
|
+
padding: var(--feedlog-space-8) 0;
|
|
216
|
+
gap: var(--feedlog-space-4);
|
|
246
217
|
}
|
|
@@ -35,10 +35,6 @@ export class FeedlogIssues {
|
|
|
35
35
|
* Whether more issues are currently loading
|
|
36
36
|
*/
|
|
37
37
|
this.isLoadingMore = false;
|
|
38
|
-
/**
|
|
39
|
-
* Internal state for theme
|
|
40
|
-
*/
|
|
41
|
-
this.currentTheme = 'light';
|
|
42
38
|
this.handleUpvote = (event) => {
|
|
43
39
|
event.stopPropagation();
|
|
44
40
|
this.feedlogUpvote.emit(event.detail);
|
|
@@ -47,21 +43,18 @@ export class FeedlogIssues {
|
|
|
47
43
|
this.feedlogLoadMore.emit();
|
|
48
44
|
};
|
|
49
45
|
}
|
|
50
|
-
componentWillLoad() {
|
|
51
|
-
this.currentTheme = this.theme;
|
|
52
|
-
}
|
|
53
46
|
renderErrorIcon() {
|
|
54
47
|
return (h("svg", { class: "error-icon", xmlns: "http://www.w3.org/2000/svg", width: "48", height: "48", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, h("circle", { cx: "12", cy: "12", r: "10" }), h("line", { x1: "12", y1: "8", x2: "12", y2: "12" }), h("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })));
|
|
55
48
|
}
|
|
56
49
|
renderIssuesList() {
|
|
57
50
|
var _a, _b;
|
|
58
|
-
return (h("feedlog-issues-list", { issues: this.issues, limit: this.limit, theme: this.
|
|
51
|
+
return (h("feedlog-issues-list", { issues: this.issues, limit: this.limit, theme: this.theme, getIssueUrl: this.getIssueUrl, emptyStateTitle: (_a = this.emptyStateTitle) !== null && _a !== void 0 ? _a : 'No updates yet', emptyStateMessage: (_b = this.emptyStateMessage) !== null && _b !== void 0 ? _b : 'Check back later for new updates.', onFeedlogUpvote: (e) => this.handleUpvote(e), part: "issues-list" }, h("slot", { name: "empty-state", slot: "empty-state" })));
|
|
59
52
|
}
|
|
60
53
|
render() {
|
|
61
54
|
const containerStyle = {
|
|
62
55
|
maxWidth: this.maxWidth,
|
|
63
56
|
};
|
|
64
|
-
return (h(Host, { key: '
|
|
57
|
+
return (h(Host, { key: '79835dd61383b41124f48d204977951236a7f8ce', class: this.theme === 'dark' ? 'dark' : '' }, h("div", { key: '62228927cba9bd4cf58d8b4f3ec2751ba423dd67', class: "issues-container", style: containerStyle, part: "base" }, h("slot", { key: 'c57d46adc472c2b03857db3e07cc5b549bd110f1', name: "header" }, (this.heading || this.subtitle) && (h("header", { key: '080059a002a373d76bee863b368a12ffdba59384', class: "issues-header", part: "header" }, h("div", { key: 'db85f995fb6f1f9fe961ea6726cf82da17fc9c2d', class: "header-content", part: "header-content" }, this.heading && (h("h1", { key: 'e7b510ecd2039072b384d6dcb531ebf0b091010b', class: "issues-title", part: "title" }, this.heading)), this.subtitle && (h("p", { key: '323f9a635b6a1c2ca9d955d12dc1925c0be59cf8', class: "issues-subtitle", part: "subtitle" }, this.subtitle)))))), this.loading && (h("slot", { key: 'ba63923aa7cac4b3ab050b423d5f65dcbbe81677', name: "loading" }, h("div", { key: '4bf1fc0d367acb0285eb124875c42e541939d388', class: "loading-state", role: "status", "aria-label": "Loading issues", part: "loading-state" }, h("div", { key: 'fa369824bd1cb8e3b5c393613952611658e6919a', class: "loading-skeletons", part: "loading-skeletons" }, [1, 2, 3].map(i => (h("div", { key: i, class: "skeleton-card", part: "skeleton-card" }, h("div", { class: "skeleton-content", part: "skeleton-content" }, h("div", { class: "skeleton-header", part: "skeleton-header" }, h("div", { class: "skeleton-badge", part: "skeleton-badge" }), h("div", { class: "skeleton-timestamp", part: "skeleton-timestamp" })), h("div", { class: "skeleton-main", part: "skeleton-main" }, h("div", { class: "skeleton-title", part: "skeleton-title" }), h("div", { class: "skeleton-body", part: "skeleton-body" }, h("div", { class: "skeleton-line", part: "skeleton-line" }), h("div", { class: "skeleton-line short", part: "skeleton-line short" })), h("div", { class: "skeleton-repo", part: "skeleton-repo" })), h("div", { class: "skeleton-footer", part: "skeleton-footer" }, h("div", { class: "skeleton-upvote", part: "skeleton-upvote" })))))))))), this.error && (h("slot", { key: '5ad8c400e465213de6e9d1f2a4d5e70c86a7ca2d', name: "error" }, h("div", { key: '0a1a62f25e9ccac249ea7426cc7839e95a24b60f', class: "error-state", role: "alert", part: "error-state" }, h("div", { key: '3286f0ab99dbead8e7949317de510e643bfbc897', class: "error-state-content", part: "error-state-content" }, this.renderErrorIcon(), h("h2", { key: '78319f0bbc6cc972bb2a4478134194b0592c13ba', class: "error-state-title", part: "error-title" }, "Something went wrong"), h("p", { key: 'ba262bf4d991326d36a04667b1109fed008d7cfd', class: "error-state-message", part: "error-message" }, this.error))))), !this.loading && !this.error && (h("div", { key: 'adc09c9a78afb9c163d23813eebb23a4c031be52', part: "list-container" }, this.renderIssuesList(), this.hasMore && (h("slot", { key: '26010e848f5fc2976f0ab0c1d7f134efb023f173', name: "load-more" }, h("div", { key: 'adbfb37d368383405dc9edd136ed7c0003b8cb67', class: "load-more-container", part: "load-more-container" }, h("feedlog-button", { key: '8d00e17e29dd9148e71e86cb178b9e058f50ce32', onFeedlogClick: this.handleLoadMore, disabled: this.isLoadingMore, variant: "outline", part: "load-more-btn" }, this.isLoadingMore ? 'Loading...' : 'Load More Issues')))))))));
|
|
65
58
|
}
|
|
66
59
|
static get is() { return "feedlog-issues"; }
|
|
67
60
|
static get encapsulation() { return "shadow"; }
|
|
@@ -341,11 +334,6 @@ export class FeedlogIssues {
|
|
|
341
334
|
}
|
|
342
335
|
};
|
|
343
336
|
}
|
|
344
|
-
static get states() {
|
|
345
|
-
return {
|
|
346
|
-
"currentTheme": {}
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
337
|
static get events() {
|
|
350
338
|
return [{
|
|
351
339
|
"method": "feedlogUpvote",
|
|
@@ -1,98 +1,118 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
/** API-shaped sample issues (matches FetchIssuesResponse) plus bug examples for badge coverage */
|
|
2
3
|
const sampleIssues = [
|
|
3
4
|
{
|
|
4
|
-
id: '
|
|
5
|
-
githubIssueLink:
|
|
6
|
-
title: 'Add dark mode support',
|
|
7
|
-
body: 'It would be great to have a dark mode option for the dashboard.',
|
|
5
|
+
id: 'iss_365sfvyqb434',
|
|
6
|
+
githubIssueLink: null,
|
|
8
7
|
type: 'enhancement',
|
|
9
8
|
status: 'open',
|
|
10
9
|
pinnedAt: null,
|
|
11
|
-
|
|
10
|
+
title: 'Add support for native GitHub Issue Types',
|
|
11
|
+
body: "## Motivation\nGitHub has introduced a native 'Issue Type' field at the organization level to provide a structured way to categorize work, replacing the inconsistent use of labels or project-specific custom fields.\n\n## What’s Changing\nThe system will now support the native GitHub 'Issue Type' property as the primary source of truth for categorizing issues. Integration will be updated to read the 'issue.type' field from webhooks and API responses.\n\n## Expected Behavior\n1. The system will prioritize the 'issue.type.name' field to determine the issue category.\n2. Existing label-based categorization will be maintained as a fallback mechanism for issues where the native type is not defined.\n3. The application will correctly ignore project-level 'Type' fields to avoid data conflicts.",
|
|
12
|
+
revision: 2,
|
|
12
13
|
repository: {
|
|
13
|
-
id: '
|
|
14
|
-
name: '
|
|
15
|
-
description:
|
|
14
|
+
id: 'rep_755dtvwg9d6r',
|
|
15
|
+
name: 'Infrastructure',
|
|
16
|
+
description: null,
|
|
16
17
|
},
|
|
17
|
-
updatedAt:
|
|
18
|
-
createdAt:
|
|
19
|
-
upvoteCount:
|
|
18
|
+
updatedAt: '2026-03-23T16:42:40.555Z',
|
|
19
|
+
createdAt: '2026-03-23T16:41:06.302Z',
|
|
20
|
+
upvoteCount: 0,
|
|
20
21
|
hasUpvoted: false,
|
|
21
22
|
},
|
|
22
23
|
{
|
|
23
|
-
id: '
|
|
24
|
-
githubIssueLink:
|
|
25
|
-
|
|
26
|
-
body: 'The chart components are not properly responsive on smaller screens.',
|
|
27
|
-
type: 'bug',
|
|
24
|
+
id: 'iss_9k1ums2a23s1',
|
|
25
|
+
githubIssueLink: null,
|
|
26
|
+
type: 'enhancement',
|
|
28
27
|
status: 'open',
|
|
29
28
|
pinnedAt: null,
|
|
30
|
-
|
|
29
|
+
title: 'Introduce Release issue type for hierarchical task management',
|
|
30
|
+
body: '## Motivation\nUsers currently lack a native way to group related enhancements and bug fixes under a single release umbrella, making it difficult to track progress across multiple smaller tasks.\n\n## What’s Changing\nA new "Release" parent issue type is being introduced to allow for the nesting of enhancement and bug issues as sub-tasks.\n\n## Expected Behavior\n1. Users can create a parent Release issue without requiring specific labels.\n2. Enhancement and bug issues can be linked as children to a parent Release issue by leveraging existing GitHub sub-issue functionality.\n3. The interface will display all associated sub-issues directly under the parent Release issue for improved visibility.',
|
|
31
|
+
revision: 4,
|
|
31
32
|
repository: {
|
|
32
|
-
id: '
|
|
33
|
-
name: '
|
|
34
|
-
description:
|
|
33
|
+
id: 'rep_755dtvwg9d6r',
|
|
34
|
+
name: 'Infrastructure',
|
|
35
|
+
description: null,
|
|
35
36
|
},
|
|
36
|
-
updatedAt:
|
|
37
|
-
createdAt:
|
|
37
|
+
updatedAt: '2026-03-21T17:01:16.642Z',
|
|
38
|
+
createdAt: '2026-03-21T16:57:19.826Z',
|
|
38
39
|
upvoteCount: 0,
|
|
39
40
|
hasUpvoted: false,
|
|
40
41
|
},
|
|
41
42
|
{
|
|
42
|
-
id: '
|
|
43
|
-
githubIssueLink:
|
|
44
|
-
title: 'Export data to CSV',
|
|
45
|
-
body: 'Add functionality to export chart data as CSV files.',
|
|
43
|
+
id: 'iss_zwhnnqy38zmi',
|
|
44
|
+
githubIssueLink: null,
|
|
46
45
|
type: 'enhancement',
|
|
47
46
|
status: 'open',
|
|
48
47
|
pinnedAt: null,
|
|
49
|
-
|
|
48
|
+
title: 'Implement structured user feedback collection via forms',
|
|
49
|
+
body: '## Motivation\nCurrent feedback mechanisms are limited to simple upvote buttons, which lack the granularity required to understand specific user preferences or pain points. \n\n## What’s Changing\nThis update introduces a structured feedback collection system supporting checkboxes, radio buttons, and custom form fields. Feedback data submitted by users will be automatically aggregated and posted directly to the corresponding GitHub issue. \n\n## Expected Behavior\n1. Users can select multiple options via checkboxes or single options via radio buttons within a feedback form.\n2. Submitted feedback responses are automatically compiled and displayed as a summary within the relevant GitHub issue.',
|
|
50
|
+
revision: 3,
|
|
50
51
|
repository: {
|
|
51
|
-
id: '
|
|
52
|
-
name: '
|
|
53
|
-
description:
|
|
52
|
+
id: 'rep_755dtvwg9d6r',
|
|
53
|
+
name: 'Infrastructure',
|
|
54
|
+
description: null,
|
|
54
55
|
},
|
|
55
|
-
updatedAt:
|
|
56
|
-
createdAt:
|
|
57
|
-
upvoteCount:
|
|
56
|
+
updatedAt: '2026-03-21T16:47:18.550Z',
|
|
57
|
+
createdAt: '2026-03-21T16:41:04.709Z',
|
|
58
|
+
upvoteCount: 0,
|
|
58
59
|
hasUpvoted: false,
|
|
59
60
|
},
|
|
60
61
|
{
|
|
61
|
-
id: '
|
|
62
|
-
githubIssueLink:
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
id: 'iss_w5nhudiz7udm',
|
|
63
|
+
githubIssueLink: null,
|
|
64
|
+
type: 'enhancement',
|
|
65
|
+
status: 'open',
|
|
66
|
+
pinnedAt: null,
|
|
67
|
+
title: 'Enable media support for card components',
|
|
68
|
+
body: '## Motivation\nCard components currently lack the ability to display visual content, limiting the ability to effectively illustrate issues or provide context.\n\n## What’s Changing\nSupport for embedded media, including images and videos, is being integrated into card components using standard Markdown syntax.\n\n## Expected Behavior\n1. Images and videos included in the Markdown content will render correctly within the card component.\n2. Media rendering will mirror the display behavior currently utilized in issue bodies.',
|
|
69
|
+
revision: 6,
|
|
70
|
+
repository: {
|
|
71
|
+
id: 'rep_755dtvwg9d6r',
|
|
72
|
+
name: 'Infrastructure',
|
|
73
|
+
description: null,
|
|
74
|
+
},
|
|
75
|
+
updatedAt: '2026-03-21T07:37:58.605Z',
|
|
76
|
+
createdAt: '2026-03-20T15:18:47.674Z',
|
|
77
|
+
upvoteCount: 1,
|
|
78
|
+
hasUpvoted: false,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'iss_bug_charts_mobile',
|
|
82
|
+
githubIssueLink: null,
|
|
65
83
|
type: 'bug',
|
|
66
84
|
status: 'open',
|
|
67
85
|
pinnedAt: null,
|
|
86
|
+
title: 'Charts not rendering on mobile',
|
|
87
|
+
body: 'The chart components are not properly responsive on smaller screens.',
|
|
68
88
|
revision: 1,
|
|
69
89
|
repository: {
|
|
70
|
-
id: '
|
|
71
|
-
name: '
|
|
72
|
-
description:
|
|
90
|
+
id: 'rep_755dtvwg9d6r',
|
|
91
|
+
name: 'Infrastructure',
|
|
92
|
+
description: null,
|
|
73
93
|
},
|
|
74
|
-
updatedAt:
|
|
75
|
-
createdAt:
|
|
94
|
+
updatedAt: '2026-03-19T12:00:00.000Z',
|
|
95
|
+
createdAt: '2026-03-19T10:00:00.000Z',
|
|
76
96
|
upvoteCount: 0,
|
|
77
97
|
hasUpvoted: false,
|
|
78
98
|
},
|
|
79
99
|
{
|
|
80
|
-
id: '
|
|
100
|
+
id: 'iss_bug_memory_leak',
|
|
81
101
|
githubIssueLink: null,
|
|
82
|
-
|
|
83
|
-
body: 'Allow users to customize the color palette for charts and UI elements.',
|
|
84
|
-
type: 'enhancement',
|
|
102
|
+
type: 'bug',
|
|
85
103
|
status: 'open',
|
|
86
104
|
pinnedAt: null,
|
|
105
|
+
title: 'Memory leak in real-time updates',
|
|
106
|
+
body: 'When leaving the dashboard open for extended periods, memory usage increases significantly.',
|
|
87
107
|
revision: 1,
|
|
88
108
|
repository: {
|
|
89
|
-
id: '
|
|
90
|
-
name: '
|
|
91
|
-
description:
|
|
109
|
+
id: 'rep_755dtvwg9d6r',
|
|
110
|
+
name: 'Infrastructure',
|
|
111
|
+
description: null,
|
|
92
112
|
},
|
|
93
|
-
updatedAt:
|
|
94
|
-
createdAt:
|
|
95
|
-
upvoteCount:
|
|
113
|
+
updatedAt: '2026-03-18T09:30:00.000Z',
|
|
114
|
+
createdAt: '2026-03-17T14:00:00.000Z',
|
|
115
|
+
upvoteCount: 0,
|
|
96
116
|
hasUpvoted: false,
|
|
97
117
|
},
|
|
98
118
|
];
|
|
@@ -97,7 +97,9 @@ export class FeedlogIssuesClient {
|
|
|
97
97
|
this.cursor = null;
|
|
98
98
|
this.hasMore = false;
|
|
99
99
|
this.issues = [];
|
|
100
|
-
this.fetchIssues()
|
|
100
|
+
void this.fetchIssues().catch(() => {
|
|
101
|
+
/* errors handled inside fetchIssues */
|
|
102
|
+
});
|
|
101
103
|
this.previousType = this.type;
|
|
102
104
|
this.previousLimit = this.limit;
|
|
103
105
|
this.previousSortBy = this.sortBy;
|
|
@@ -117,6 +119,22 @@ export class FeedlogIssuesClient {
|
|
|
117
119
|
this.feedlogError.emit({ error: errorMsg });
|
|
118
120
|
}
|
|
119
121
|
}
|
|
122
|
+
buildFetchParams() {
|
|
123
|
+
const params = {};
|
|
124
|
+
if (this.type) {
|
|
125
|
+
params.type = this.type;
|
|
126
|
+
}
|
|
127
|
+
if (this.sortBy) {
|
|
128
|
+
params.sortBy = this.sortBy;
|
|
129
|
+
}
|
|
130
|
+
if (this.limit) {
|
|
131
|
+
params.limit = this.limit;
|
|
132
|
+
}
|
|
133
|
+
if (this.cursor) {
|
|
134
|
+
params.cursor = this.cursor;
|
|
135
|
+
}
|
|
136
|
+
return params;
|
|
137
|
+
}
|
|
120
138
|
async fetchIssues() {
|
|
121
139
|
if (!this.sdk) {
|
|
122
140
|
return;
|
|
@@ -126,19 +144,7 @@ export class FeedlogIssuesClient {
|
|
|
126
144
|
try {
|
|
127
145
|
this.loading = true;
|
|
128
146
|
this.error = null;
|
|
129
|
-
const params =
|
|
130
|
-
if (this.type) {
|
|
131
|
-
params.type = this.type;
|
|
132
|
-
}
|
|
133
|
-
if (this.sortBy) {
|
|
134
|
-
params.sortBy = this.sortBy;
|
|
135
|
-
}
|
|
136
|
-
if (this.limit) {
|
|
137
|
-
params.limit = this.limit;
|
|
138
|
-
}
|
|
139
|
-
if (this.cursor) {
|
|
140
|
-
params.cursor = this.cursor;
|
|
141
|
-
}
|
|
147
|
+
const params = this.buildFetchParams();
|
|
142
148
|
const response = await this.sdk.fetchIssues(params);
|
|
143
149
|
// Ignore response if component disconnected or a newer request was made
|
|
144
150
|
if (this.isDisconnected || currentRequestId !== this.fetchRequestId) {
|
|
@@ -177,19 +183,7 @@ export class FeedlogIssuesClient {
|
|
|
177
183
|
const currentRequestId = this.fetchRequestId;
|
|
178
184
|
this.isLoadingMore = true;
|
|
179
185
|
try {
|
|
180
|
-
const params =
|
|
181
|
-
if (this.type) {
|
|
182
|
-
params.type = this.type;
|
|
183
|
-
}
|
|
184
|
-
if (this.sortBy) {
|
|
185
|
-
params.sortBy = this.sortBy;
|
|
186
|
-
}
|
|
187
|
-
if (this.limit) {
|
|
188
|
-
params.limit = this.limit;
|
|
189
|
-
}
|
|
190
|
-
if (this.cursor) {
|
|
191
|
-
params.cursor = this.cursor;
|
|
192
|
-
}
|
|
186
|
+
const params = this.buildFetchParams();
|
|
193
187
|
const response = await this.sdk.fetchIssues(params);
|
|
194
188
|
// Ignore response if component disconnected or a newer request was made
|
|
195
189
|
if (this.isDisconnected || currentRequestId !== this.fetchRequestId) {
|
|
@@ -224,7 +218,7 @@ export class FeedlogIssuesClient {
|
|
|
224
218
|
const style = hostBg
|
|
225
219
|
? { '--feedlog-background': hostBg }
|
|
226
220
|
: undefined;
|
|
227
|
-
return (h("feedlog-issues", { key: '
|
|
221
|
+
return (h("feedlog-issues", { key: '2d9528bb33630664824ab584e10208359d579eb6', style: style, issues: this.issues, limit: this.limit, maxWidth: this.maxWidth, theme: this.theme, heading: this.heading, subtitle: this.subtitle, emptyStateTitle: this.emptyStateTitle, emptyStateMessage: this.emptyStateMessage, getIssueUrl: this.getIssueUrl, loading: this.loading, error: this.error, hasMore: this.hasMore, isLoadingMore: this.isLoadingMore, onFeedlogUpvote: this.handleUpvote, onFeedlogLoadMore: async () => this.loadMore(), part: "base" }, h("slot", { key: 'efe89b9fd0f337af7930823762296487ebcb758e', name: "header", slot: "header" }), h("slot", { key: 'ffebd688ebf25bb464ceefd6a161f7140e03933b', name: "loading", slot: "loading" }), h("slot", { key: 'b59010966b6f7768814ba838c05ffd62cfd1c26a', name: "error", slot: "error" }), h("slot", { key: '99b1abfcbb62703b3642fb02d79d8d1488421ee3', name: "empty-state", slot: "empty-state" }), h("slot", { key: 'c47c1dc83e8434b8f66d1b42b65e812aa5e1f8ee', name: "load-more", slot: "load-more" })));
|
|
228
222
|
}
|
|
229
223
|
static get is() { return "feedlog-issues-client"; }
|
|
230
224
|
static get encapsulation() { return "shadow"; }
|
|
@@ -64,13 +64,13 @@ export class FeedlogIssuesList {
|
|
|
64
64
|
return null;
|
|
65
65
|
const totalPages = Math.ceil(this.issues.length / this.limit);
|
|
66
66
|
const pageNumbers = this.getPageNumbers();
|
|
67
|
-
return (h("nav", { class: "pagination", "aria-label": "Issues pagination" }, h("button", { type: "button", class: "pagination-btn pagination-arrow", "aria-label": "Previous page", disabled: this.currentPage <= 1, onClick: () => this.goToPage(this.currentPage - 1) }, "\u2039"), pageNumbers.map((p, i) => p === 'ellipsis' ? (h("span", { key: i
|
|
67
|
+
return (h("nav", { class: "pagination", "aria-label": "Issues pagination", part: "pagination" }, h("button", { type: "button", class: "pagination-btn pagination-arrow", "aria-label": "Previous page", disabled: this.currentPage <= 1, onClick: () => this.goToPage(this.currentPage - 1), part: "pagination-btn pagination-arrow" }, "\u2039"), pageNumbers.map((p, i) => p === 'ellipsis' ? (h("span", { key: `ellipsis-${i}`, class: "pagination-ellipsis", "aria-hidden": "true", part: "pagination-ellipsis" }, "\u2026")) : (h("button", { key: `page-${p}`, type: "button", class: "pagination-btn", "aria-current": p === this.currentPage ? 'page' : undefined, onClick: () => this.goToPage(p), part: `pagination-btn ${p === this.currentPage ? 'pagination-btn-active' : ''}` }, p))), h("button", { type: "button", class: "pagination-btn pagination-arrow", "aria-label": "Next page", disabled: this.currentPage >= totalPages, onClick: () => this.goToPage(this.currentPage + 1), part: "pagination-btn pagination-arrow" }, "\u203A")));
|
|
68
68
|
}
|
|
69
69
|
render() {
|
|
70
70
|
const visibleIssues = this.getVisibleIssues();
|
|
71
|
-
return (h(Host, { key: '
|
|
71
|
+
return (h(Host, { key: 'cfbc683e096ad29327539323e1db97aba4bba373', class: this.theme === 'dark' ? 'dark' : '' }, h("div", { key: 'fb342265514ab879e37136955cb0dc444f381646', class: "issues-list", part: "base" }, visibleIssues.length === 0 ? (h("div", { class: "empty-state", part: "empty-state" }, this.emptyStateTitle && this.emptyStateMessage ? (h("div", { class: "empty-state-content", part: "empty-state-content" }, this.renderEmptyStateIllustration(), h("h2", { class: "empty-state-title", part: "empty-state-title" }, this.emptyStateTitle), h("p", { class: "empty-state-message", part: "empty-state-message" }, this.emptyStateMessage))) : (h("slot", { name: "empty-state" }, h("p", null, "No issues found"))))) : (visibleIssues.map(issue => {
|
|
72
72
|
var _a, _b;
|
|
73
|
-
return (h("feedlog-issue", { key: issue.id, issue: issue, issueUrl: (_b = (_a = this.getIssueUrl) === null || _a === void 0 ? void 0 : _a.call(this, issue)) !== null && _b !== void 0 ? _b : undefined, theme: this.theme, onFeedlogUpvote: (e) => this.handleUpvote(e) }));
|
|
73
|
+
return (h("feedlog-issue", { key: issue.id, issue: issue, issueUrl: (_b = (_a = this.getIssueUrl) === null || _a === void 0 ? void 0 : _a.call(this, issue)) !== null && _b !== void 0 ? _b : undefined, theme: this.theme, onFeedlogUpvote: (e) => this.handleUpvote(e), part: "issue" }));
|
|
74
74
|
}))), this.renderPagination()));
|
|
75
75
|
}
|
|
76
76
|
static get is() { return "feedlog-issues-list"; }
|
|
@@ -8,10 +8,15 @@ export function parseMarkdown(markdown) {
|
|
|
8
8
|
if (markdown == null || markdown === '') {
|
|
9
9
|
return '';
|
|
10
10
|
}
|
|
11
|
-
const
|
|
11
|
+
const parsed = marked.parse(markdown, {
|
|
12
12
|
gfm: true,
|
|
13
13
|
breaks: true,
|
|
14
|
+
async: false,
|
|
14
15
|
});
|
|
16
|
+
if (typeof parsed !== 'string') {
|
|
17
|
+
throw new Error('marked.parse returned a Promise; async markdown is not supported');
|
|
18
|
+
}
|
|
19
|
+
const html = parsed;
|
|
15
20
|
return DOMPurify.sanitize(html, {
|
|
16
21
|
ALLOWED_TAGS: [
|
|
17
22
|
'p',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as o,d as s}from"./p-
|
|
1
|
+
import{F as o,d as s}from"./p-DFD585IK.js";const p=o,r=s;export{p as FeedlogBadge,r as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as o,d as s}from"./p-
|
|
1
|
+
import{F as o,d as s}from"./p-I6NOP29P.js";const p=o,r=s;export{p as FeedlogButton,r as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e,p as
|
|
1
|
+
import{t as e,p as d,H as o,h as a}from"./index.js";const r=d(class extends o{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow()}render(){return a("div",{key:"c95d00e338fcf8d985407cda878f50d173c86c71",class:"feedlog-card",part:"base"},a("div",{key:"5001f2e08495d54abb59ddcada568c9ff4c6fb87",class:"feedlog-card-header",part:"header"},a("slot",{key:"b6c6f18a458249aedfb4a95679d4592cfcac4187",name:"header"})),a("div",{key:"99faa1bd9af52fb23cb304e0a87d35b8e14a6358",class:"feedlog-card-content",part:"content"},a("slot",{key:"44370b05b0c2335d6c7271f2807189a7a208be71",name:"content"})),a("div",{key:"e3876d4f589f9ecf917b5a9b5919363c19d08c93",class:"feedlog-card-footer",part:"footer"},a("slot",{key:"be69074d341c8e88f9227d2f035f22838469b035",name:"footer"})))}static get style(){return':host{display:block;font-family:var(--feedlog-font-family)}.feedlog-card{background-color:var(--feedlog-card);color:var(--feedlog-card-foreground);border:1px solid var(--feedlog-border);border-radius:var(--feedlog-radius);box-shadow:var(--feedlog-shadow-sm);transition:box-shadow 0.15s ease;position:relative;display:flex;flex-direction:column}.feedlog-card:hover{box-shadow:var(--feedlog-shadow)}.feedlog-card-header{padding:var(--feedlog-space-6);display:flex;flex-direction:column;gap:var(--feedlog-space-1)}.feedlog-card-content{padding:var(--feedlog-space-6);padding-top:0}.feedlog-card-footer{padding:var(--feedlog-space-6);padding-top:0;display:flex;align-items:center}::slotted([slot="header"]),::slotted([slot="content"]),::slotted([slot="footer"]){display:block}'}},[257,"feedlog-card"]);function t(){"undefined"!=typeof customElements&&["feedlog-card"].forEach((d=>{"feedlog-card"===d&&(customElements.get(e(d))||customElements.define(e(d),r))}))}t();const c=r,f=t;export{c as FeedlogCard,f as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as o,d as s}from"./p-
|
|
1
|
+
import{F as o,d as s}from"./p-CvIMO_S7.js";const p=o,r=s;export{p as FeedlogIssue,r as defineCustomElement}
|