finsignal-feed-explore 2.3.3 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -4
- package/dist/FeedList.css +3 -0
- package/dist/components/FilterButton.css +57 -0
- package/dist/components/FilterButton.d.ts +13 -0
- package/dist/components/FilterButton.d.ts.map +1 -0
- package/dist/components/FilterButton.js +22 -0
- package/dist/components/FilterButton.js.map +1 -0
- package/dist/hooks/useFeedData.d.ts.map +1 -1
- package/dist/hooks/useFeedData.js +11 -1
- package/dist/hooks/useFeedData.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/newsfeed.css +3 -0
- package/dist/snippets/NewsSnippet.css +0 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
News feed explorer components for React web applications. A comprehensive library for displaying and interacting with financial news feeds.
|
|
4
4
|
|
|
5
|
-
## Version 2.
|
|
5
|
+
## Version 2.4.0 - FilterButton Component 🎯
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
New in this version:
|
|
8
|
+
- ✨ **FilterButton** - Self-contained filter button component with three states
|
|
9
|
+
- 🔄 Seamless integration with FeedList for filter management
|
|
10
|
+
- 🎨 Customizable colors for icons and badge
|
|
11
|
+
- 📦 Fully typed with TypeScript
|
|
12
|
+
|
|
13
|
+
### Previous Updates (2.0.0) - Major Design Update 🎨
|
|
14
|
+
|
|
15
|
+
Version 2.0.0 included a complete redesign to match the native app UI:
|
|
8
16
|
- ✨ Larger, bolder titles (20px, 700 weight) for better readability
|
|
9
17
|
- 🎯 Improved source display with circular logos positioned after title
|
|
10
18
|
- 📐 Better content hierarchy and spacing matching native design
|
|
@@ -90,6 +98,60 @@ import { FiltersOverlay } from 'finsignal-feed-explore';
|
|
|
90
98
|
/>
|
|
91
99
|
```
|
|
92
100
|
|
|
101
|
+
### FilterButton
|
|
102
|
+
|
|
103
|
+
Self-contained filter button with three visual states that works seamlessly with `FeedList`.
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
import { FeedList, FilterButton } from 'finsignal-feed-explore';
|
|
107
|
+
import { useState } from 'react';
|
|
108
|
+
|
|
109
|
+
function NewsSidebar() {
|
|
110
|
+
const [isFiltersOpen, setIsFiltersOpen] = useState(false);
|
|
111
|
+
const [filterCount, setFilterCount] = useState(0);
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<div>
|
|
115
|
+
{/* Header with FilterButton */}
|
|
116
|
+
<header>
|
|
117
|
+
<FilterButton
|
|
118
|
+
isFiltersOpen={isFiltersOpen}
|
|
119
|
+
filterCount={filterCount}
|
|
120
|
+
onClick={() => setIsFiltersOpen(!isFiltersOpen)}
|
|
121
|
+
/>
|
|
122
|
+
<h2>Explore</h2>
|
|
123
|
+
</header>
|
|
124
|
+
|
|
125
|
+
{/* FeedList synced with FilterButton */}
|
|
126
|
+
<FeedList
|
|
127
|
+
isFiltersOpen={isFiltersOpen}
|
|
128
|
+
onFiltersOpenChange={setIsFiltersOpen}
|
|
129
|
+
onFiltersChange={(data) => setFilterCount(data.count)}
|
|
130
|
+
onNewsClick={(news) => console.log('Clicked:', news)}
|
|
131
|
+
/>
|
|
132
|
+
</div>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Visual States:**
|
|
138
|
+
1. **Normal** - Filter icon (no active filters)
|
|
139
|
+
2. **With Badge** - Filter icon + count badge (has active filters)
|
|
140
|
+
3. **Close** - X icon (filters overlay is open)
|
|
141
|
+
|
|
142
|
+
**Props:**
|
|
143
|
+
|
|
144
|
+
| Prop | Type | Required | Description |
|
|
145
|
+
|------|------|----------|-------------|
|
|
146
|
+
| `isFiltersOpen` | `boolean` | Yes | Whether filters overlay is open |
|
|
147
|
+
| `filterCount` | `number` | Yes | Number of active filters to show in badge |
|
|
148
|
+
| `onClick` | `() => void` | Yes | Click handler |
|
|
149
|
+
| `className` | `string` | No | Additional CSS class |
|
|
150
|
+
| `closeIconColor` | `string` | No | Color for close icon (default: `#7863F6`) |
|
|
151
|
+
| `filterIconColor` | `string` | No | Color for filter icon (default: `#242429`) |
|
|
152
|
+
| `badgeBackgroundColor` | `string` | No | Badge background color (default: `#2d3339`) |
|
|
153
|
+
| `badgeTextColor` | `string` | No | Badge text color (default: `#ffffff`) |
|
|
154
|
+
|
|
93
155
|
## Features
|
|
94
156
|
|
|
95
157
|
- ✅ Beautiful news snippets based on modern design system
|
|
@@ -362,17 +424,45 @@ This ensures users always see content, even during development or API downtime.
|
|
|
362
424
|
|
|
363
425
|
## Development
|
|
364
426
|
|
|
427
|
+
### Building the package
|
|
428
|
+
|
|
365
429
|
```bash
|
|
366
430
|
# Install dependencies
|
|
367
431
|
npm install
|
|
368
432
|
|
|
369
|
-
# Build
|
|
433
|
+
# Build the package
|
|
370
434
|
npm run build
|
|
435
|
+
```
|
|
371
436
|
|
|
372
|
-
|
|
437
|
+
The build process:
|
|
438
|
+
1. Compiles TypeScript files to JavaScript
|
|
439
|
+
2. Generates type definitions (.d.ts files)
|
|
440
|
+
3. Copies all CSS files to dist directory
|
|
441
|
+
|
|
442
|
+
### Testing locally
|
|
443
|
+
|
|
444
|
+
Before publishing, test the package locally:
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
# In the package directory
|
|
448
|
+
npm link
|
|
449
|
+
|
|
450
|
+
# In your test project (e.g., trading-diary-master/frontend)
|
|
451
|
+
npm link finsignal-feed-explore
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Publishing
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
# Update version in package.json (e.g., 2.4.0 -> 2.4.1)
|
|
458
|
+
# Update CHANGELOG.md with new changes
|
|
459
|
+
|
|
460
|
+
# Build and publish (build runs automatically before publish)
|
|
373
461
|
npm publish
|
|
374
462
|
```
|
|
375
463
|
|
|
464
|
+
**Note:** The `prepublishOnly` script automatically runs `npm run build` before publishing.
|
|
465
|
+
|
|
376
466
|
## Peer Dependencies
|
|
377
467
|
|
|
378
468
|
- `react`: >=18.0.0
|
package/dist/FeedList.css
CHANGED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
.filter-button {
|
|
2
|
+
width: 20px;
|
|
3
|
+
height: 20px;
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
background: none;
|
|
8
|
+
border: none;
|
|
9
|
+
padding: 0;
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
position: relative;
|
|
12
|
+
transition: opacity 0.2s ease;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.filter-button:hover {
|
|
16
|
+
opacity: 0.7;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.filter-button:active {
|
|
20
|
+
opacity: 0.5;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.filter-button:focus {
|
|
24
|
+
outline: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.filter-button:focus-visible {
|
|
28
|
+
outline: 2px solid #7863F6;
|
|
29
|
+
outline-offset: 2px;
|
|
30
|
+
border-radius: 4px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* Badge styles */
|
|
34
|
+
.filter-button--with-badge {
|
|
35
|
+
position: relative;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.filter-button__badge {
|
|
39
|
+
position: absolute;
|
|
40
|
+
top: -2px;
|
|
41
|
+
right: -2px;
|
|
42
|
+
border-radius: 12px;
|
|
43
|
+
min-width: 12px;
|
|
44
|
+
height: 12px;
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
justify-content: center;
|
|
48
|
+
padding: 0 3px;
|
|
49
|
+
pointer-events: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.filter-button__badge-text {
|
|
53
|
+
font-size: 8px;
|
|
54
|
+
font-weight: 600;
|
|
55
|
+
line-height: 12px;
|
|
56
|
+
letter-spacing: -0.2px;
|
|
57
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface FilterButtonProps {
|
|
3
|
+
isFiltersOpen: boolean;
|
|
4
|
+
filterCount: number;
|
|
5
|
+
onClick: () => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
closeIconColor?: string;
|
|
8
|
+
filterIconColor?: string;
|
|
9
|
+
badgeBackgroundColor?: string;
|
|
10
|
+
badgeTextColor?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const FilterButton: React.FC<FilterButtonProps>;
|
|
13
|
+
//# sourceMappingURL=FilterButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterButton.d.ts","sourceRoot":"","sources":["../../src/components/FilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAIhC,aAAa,EAAE,OAAO,CAAC;IAKvB,WAAW,EAAE,MAAM,CAAC;IAKpB,OAAO,EAAE,MAAM,IAAI,CAAC;IAKpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAMxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAMzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAM9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA4BD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAiFpD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const FilterButton = ({ isFiltersOpen, filterCount, onClick, className = '', closeIconColor = '#7863F6', filterIconColor = '#242429', badgeBackgroundColor = '#2d3339', badgeTextColor = '#ffffff' }) => {
|
|
3
|
+
if (isFiltersOpen) {
|
|
4
|
+
return (React.createElement("button", { onClick: onClick, className: `filter-button ${className}`, "aria-label": "Close filters" },
|
|
5
|
+
React.createElement("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
6
|
+
React.createElement("path", { d: "M15 5L5 15M5 5L15 15", stroke: closeIconColor, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }))));
|
|
7
|
+
}
|
|
8
|
+
if (filterCount > 0) {
|
|
9
|
+
return (React.createElement("button", { onClick: onClick, className: `filter-button filter-button--with-badge ${className}`, "aria-label": `Open filters (${filterCount} applied)` },
|
|
10
|
+
React.createElement("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
11
|
+
React.createElement("path", { d: "M2.5 5H17.5M5 10H15M7.5 15H12.5", stroke: filterIconColor, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
12
|
+
React.createElement("div", { className: "filter-button__badge", style: {
|
|
13
|
+
backgroundColor: badgeBackgroundColor,
|
|
14
|
+
color: badgeTextColor
|
|
15
|
+
} },
|
|
16
|
+
React.createElement("span", { className: "filter-button__badge-text" }, filterCount))));
|
|
17
|
+
}
|
|
18
|
+
return (React.createElement("button", { onClick: onClick, className: `filter-button ${className}`, "aria-label": "Open filters" },
|
|
19
|
+
React.createElement("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
20
|
+
React.createElement("path", { d: "M2.5 5H17.5M5 10H15M7.5 15H12.5", stroke: filterIconColor, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }))));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=FilterButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterButton.js","sourceRoot":"","sources":["../../src/components/FilterButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA0E1B,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,aAAa,EACb,WAAW,EACX,OAAO,EACP,SAAS,GAAG,EAAE,EACd,cAAc,GAAG,SAAS,EAC1B,eAAe,GAAG,SAAS,EAC3B,oBAAoB,GAAG,SAAS,EAChC,cAAc,GAAG,SAAS,EAC3B,EAAE,EAAE;IAEH,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CACL,gCACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,iBAAiB,SAAS,EAAE,gBAC5B,eAAe;YAE1B,6BAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;gBAC5F,8BACE,CAAC,EAAC,sBAAsB,EACxB,MAAM,EAAE,cAAc,EACtB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,CACE,CACC,CACV,CAAC;IACJ,CAAC;IAGD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CACL,gCACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,2CAA2C,SAAS,EAAE,gBACrD,iBAAiB,WAAW,WAAW;YAEnD,6BAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;gBAC5F,8BACE,CAAC,EAAC,iCAAiC,EACnC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,CACE;YACN,6BACE,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE;oBACL,eAAe,EAAE,oBAAoB;oBACrC,KAAK,EAAE,cAAc;iBACtB;gBAED,8BAAM,SAAS,EAAC,2BAA2B,IACxC,WAAW,CACP,CACH,CACC,CACV,CAAC;IACJ,CAAC;IAGD,OAAO,CACL,gCACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,iBAAiB,SAAS,EAAE,gBAC5B,cAAc;QAEzB,6BAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;YAC5F,8BACE,CAAC,EAAC,iCAAiC,EACnC,MAAM,EAAE,eAAe,EACvB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,CACE,CACC,CACV,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFeedData.d.ts","sourceRoot":"","sources":["../../src/hooks/useFeedData.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,QAAQ,EAAE,MAAM,UAAU,CAAC;AAG/D,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAwB,EACxB,OAAY,EACZ,KAAK,EACL,KAAU,EACX,EAAE,kBAAkB,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useFeedData.d.ts","sourceRoot":"","sources":["../../src/hooks/useFeedData.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,QAAQ,EAAE,MAAM,UAAU,CAAC;AAG/D,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAwB,EACxB,OAAY,EACZ,KAAK,EACL,KAAU,EACX,EAAE,kBAAkB,GAAG,iBAAiB,CAwHxC"}
|
|
@@ -29,14 +29,24 @@ export function useFeedData({ apiUrl = DEFAULT_API_URL, filters = [], query, lim
|
|
|
29
29
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
30
30
|
}
|
|
31
31
|
const data = await response.json();
|
|
32
|
+
const isRegularSearch = !!query;
|
|
33
|
+
const isFilterSearch = !query && filters.length > 0;
|
|
32
34
|
const mappedItems = (data.items || []).map(item => {
|
|
33
35
|
const rawItem = item;
|
|
36
|
+
let summary;
|
|
37
|
+
if (isRegularSearch) {
|
|
38
|
+
summary = rawItem.metadata?.preprocessing?.results?.ai_annotation?.annotations?.summary;
|
|
39
|
+
}
|
|
40
|
+
else if (isFilterSearch) {
|
|
41
|
+
summary = rawItem.preprocessing?.ai_annotation?.annotations?.summary;
|
|
42
|
+
}
|
|
43
|
+
summary = summary || rawItem.newsData?.summary || rawItem.metadata?.newsData?.summary || item.summary;
|
|
34
44
|
return {
|
|
35
45
|
...item,
|
|
36
46
|
id: item.id || rawItem.content_id,
|
|
37
47
|
content: item.content || rawItem.body || '',
|
|
38
48
|
sourceName: rawItem.newsData?.sourceName || rawItem.metadata?.newsData?.sourceName || rawItem.source?.sourceName || rawItem.sourceName,
|
|
39
|
-
summary
|
|
49
|
+
summary,
|
|
40
50
|
timestamp: rawItem.createdAt || item.timestamp || rawItem.created_at || rawItem.publishedAt
|
|
41
51
|
};
|
|
42
52
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFeedData.js","sourceRoot":"","sources":["../../src/hooks/useFeedData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAkBnD,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,GAAG,eAAe,EACxB,OAAO,GAAG,EAAE,EACZ,KAAK,EACL,KAAK,GAAG,EAAE,EACS;IACnB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,QAAiB,KAAK,EAAE,EAAE;QAC7D,IAAI,SAAS;YAAE,OAAO;QAEtB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEtD,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;YAGD,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC5C,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,uBAAuB,CAAC;YAE5B,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,IAAI,GAAiB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAGjD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAChD,MAAM,OAAO,GAAG,IAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"useFeedData.js","sourceRoot":"","sources":["../../src/hooks/useFeedData.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,5 +14,7 @@ export { formatTimestamp } from './utils/formatTimestamp';
|
|
|
14
14
|
export { theme } from './utils/theme';
|
|
15
15
|
export { Chip } from './components/Chip';
|
|
16
16
|
export type { ChipProps } from './components/Chip';
|
|
17
|
+
export { FilterButton } from './components/FilterButton';
|
|
18
|
+
export type { FilterButtonProps } from './components/FilterButton';
|
|
17
19
|
export * from './components/icons';
|
|
18
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,5 +9,6 @@ export { DEFAULT_API_URL } from './constants/api';
|
|
|
9
9
|
export { formatTimestamp } from './utils/formatTimestamp';
|
|
10
10
|
export { theme } from './utils/theme';
|
|
11
11
|
export { Chip } from './components/Chip';
|
|
12
|
+
export { FilterButton } from './components/FilterButton';
|
|
12
13
|
export * from './components/icons';
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAc1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAc1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,cAAc,oBAAoB,CAAC"}
|
package/dist/newsfeed.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "finsignal-feed-explore",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "News feed explorer components for React web applications",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"README.md"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
-
"build": "tsc && cp src/FeedList.css dist/FeedList.css && cp src/FeedList.css dist/newsfeed.css && cp src/components/Chip.css dist/components/Chip.css && cp src/filters/FiltersOverlay.css dist/filters/FiltersOverlay.css && cp src/snippets/NewsSnippet.css dist/snippets/NewsSnippet.css",
|
|
13
|
+
"build": "tsc && cp src/FeedList.css dist/FeedList.css && cp src/FeedList.css dist/newsfeed.css && cp src/components/Chip.css dist/components/Chip.css && cp src/components/FilterButton.css dist/components/FilterButton.css && cp src/filters/FiltersOverlay.css dist/filters/FiltersOverlay.css && cp src/snippets/NewsSnippet.css dist/snippets/NewsSnippet.css",
|
|
14
14
|
"prepublishOnly": "npm run build"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [
|