Website
-
+
Date
@@ -98,7 +98,7 @@
Total Volume
@@ -110,7 +110,7 @@
Avg. Short % of Volume
diff --git a/src/lib/components/FOMCImpact.svelte b/src/lib/components/FOMCImpact.svelte
index ee77b540..82efa6e3 100644
--- a/src/lib/components/FOMCImpact.svelte
+++ b/src/lib/components/FOMCImpact.svelte
@@ -240,8 +240,7 @@
{#each showFullStats ? tableList?.slice(0, 10) : tableList?.slice(0, 3) as item, index}
3
? 'opacity-[0.5]'
diff --git a/src/lib/components/FailToDeliver.svelte b/src/lib/components/FailToDeliver.svelte
index 3cd73b27..843e0991 100644
--- a/src/lib/components/FailToDeliver.svelte
+++ b/src/lib/components/FailToDeliver.svelte
@@ -263,7 +263,7 @@
-
+
Date
@@ -273,7 +273,7 @@
{formatDateRange(rawData?.slice(-1)?.at(0)?.date)}
-
+
Price Range
@@ -283,7 +283,7 @@
{lowestPrice + "-" + highestPrice}
-
+
Latest FTD
diff --git a/src/lib/components/FinancialTable.svelte b/src/lib/components/FinancialTable.svelte
index b7730cf0..98b4f56a 100644
--- a/src/lib/components/FinancialTable.svelte
+++ b/src/lib/components/FinancialTable.svelte
@@ -5,7 +5,7 @@
{#each fields as { label, key }}
-
+
@@ -13,9 +13,9 @@
{#each data as item}
- {item[key] !== null && item[key] !== 0
- ? abbreviateNumber(item[key]?.toFixed(2))
- : "-"}
+ {@html item[key] !== null && item[key] !== 0
+ ? abbreviateNumber(item[key]?.toFixed(2), false, true)
+ : "n/a"}
{/each}
diff --git a/src/lib/components/ImpliedVolatility.svelte b/src/lib/components/ImpliedVolatility.svelte
index d9e563ca..759958f7 100644
--- a/src/lib/components/ImpliedVolatility.svelte
+++ b/src/lib/components/ImpliedVolatility.svelte
@@ -112,7 +112,7 @@
-
+
Date
@@ -122,7 +122,7 @@
{formatDateRange(rawData?.slice(-1)?.at(0)?.date)}
-
+
IV Range
@@ -132,7 +132,7 @@
{lowestIV + "%" + "-" + highestIV + "%"}
-
+
RV Range
diff --git a/src/lib/components/IndustryTable.svelte b/src/lib/components/IndustryTable.svelte
index ea8c8c66..76377072 100644
--- a/src/lib/components/IndustryTable.svelte
+++ b/src/lib/components/IndustryTable.svelte
@@ -97,7 +97,7 @@
{#each displayList as item}
-
+
Date
@@ -98,7 +98,7 @@
{formatDateRange(historyData?.slice(-1)?.at(0)?.date)}
-
+
Total Notional Sum
@@ -110,7 +110,7 @@
)}
-
+
Total Trade Count
@@ -122,7 +122,7 @@
)}
-
+
Total Share Quantity
@@ -173,7 +173,7 @@
{#each showFullStats ? topMarketMakers?.slice(0, 10) : topMarketMakers?.slice(0, 3) as item, index}
3
diff --git a/src/lib/components/Markethour.svelte b/src/lib/components/Markethour.svelte
index 6b31eae4..3be55e0b 100644
--- a/src/lib/components/Markethour.svelte
+++ b/src/lib/components/Markethour.svelte
@@ -79,7 +79,7 @@
>
-
+
Exchange holidays
@@ -88,44 +88,44 @@
-
+
New Years Day
01.01.2024
-
+
Martin Luther King, Jr. Day
15.01.2024
-
+
Washington's Birthday
19.02.2024
-
+
Good Friday
29.03.2024
-
+
Memorial Day
27.05.2024
-
+
Juneteenth National Independence Day
19.06.2024
-
+
Independence Day
04.07.2024
-
+
Labor Day
02.09.2024
-
+
Thanksgiving Day
28.11.2024
-
+
Christmas
25.12.2024
diff --git a/src/lib/components/NextEarnings.svelte b/src/lib/components/NextEarnings.svelte
index 2f2bdc89..3cc5f10c 100644
--- a/src/lib/components/NextEarnings.svelte
+++ b/src/lib/components/NextEarnings.svelte
@@ -38,7 +38,7 @@
{#if Object?.keys(rawData)?.length !== 0}
-
+
-
+
{$displayCompanyName} is scheduled to release its earnings on {new Date(
rawData?.date ?? null,
)?.toLocaleString("en-US", {
@@ -70,7 +70,7 @@
{/if}
Analysts project revenue of
{abbreviateNumber(rawData?.revenueEst, true)} {@html abbreviateNumber(rawData?.revenueEst, true, true)}, reflecting a
@@ -113,7 +113,10 @@
-
+
-{/if}
\ No newline at end of file
+{/if}
diff --git a/src/lib/components/PastEarnings.svelte b/src/lib/components/PastEarnings.svelte
index 1de85a24..2b315765 100644
--- a/src/lib/components/PastEarnings.svelte
+++ b/src/lib/components/PastEarnings.svelte
@@ -1,456 +1,479 @@
-
-
-
-
-
- {#if isLoaded}
- {#if rawData?.length !== 0}
+ }
+
+
+
+
+
+ {#if isLoaded}
+ {#if rawData?.length !== 0}
The average price volatility over this 3-day period is
- {#if userTier !== 'Pro'}
- ... Unlock content with
- Pro Subscription
+ {#if userTier !== "Pro"}
+ ... Unlock content with
+ Pro Subscription
{:else}
- ±{averageVolatility?.toFixed(2)}% .
- During this period, the reported revenue exceeded expectations {positiveRevenueSurprisePercentage}% of the time & the reported EPS surpassed analyst estimates {positiveEpsSurprisePercentage}% of the time.
+ ±{averageVolatility?.toFixed(2)}% .
+ During this period, the reported revenue exceeded expectations
+ {positiveRevenueSurprisePercentage}%
+ of the time & the reported EPS surpassed analyst estimates
+ {positiveEpsSurprisePercentage}% of
+ the time.
{/if}
-
{/if}
-
-
-
-
-
-
-
-
\ No newline at end of file
+ }
+
+ .chart {
+ width: 100%;
+ }
+
diff --git a/src/lib/components/RetailVolume.svelte b/src/lib/components/RetailVolume.svelte
index 03dc6b17..d15bad83 100644
--- a/src/lib/components/RetailVolume.svelte
+++ b/src/lib/components/RetailVolume.svelte
@@ -272,7 +272,7 @@
-
+
Date
@@ -282,7 +282,7 @@
{formatDateRange(rawData?.lastDate)}
-
+
Volume in $
@@ -292,7 +292,7 @@
{monthlyVolume}
-
+
Retail Sentiment Range
diff --git a/src/lib/components/ShareHolders.svelte b/src/lib/components/ShareHolders.svelte
index 33bce8d4..b6e6c1fa 100644
--- a/src/lib/components/ShareHolders.svelte
+++ b/src/lib/components/ShareHolders.svelte
@@ -248,11 +248,15 @@
>
Institutions hold a total of
{abbreviateNumber(rawData?.numberOf13Fshares)} {@html abbreviateNumber(
+ rawData?.numberOf13Fshares,
+ false,
+ true,
+ )}
{$displayCompanyName} shares, with a combined investment of
{abbreviateNumber(rawData?.totalInvested, true)} {@html abbreviateNumber(rawData?.totalInvested, true, true)}.
@@ -320,7 +324,7 @@
0}
- {item?.sharesNumber !== null
- ? abbreviateNumber(item?.sharesNumber)
+ {@html item?.sharesNumber !== null
+ ? abbreviateNumber(item?.sharesNumber, false, true)
: "-"}
diff --git a/src/lib/components/ShareStatistics.svelte b/src/lib/components/ShareStatistics.svelte
index bb290af8..5cc5ffd1 100644
--- a/src/lib/components/ShareStatistics.svelte
+++ b/src/lib/components/ShareStatistics.svelte
@@ -111,7 +111,7 @@
-
+
Short Interest
@@ -121,7 +121,7 @@
{abbreviateNumber(rawData?.sharesShort)}
-
+
Short Previous Month
@@ -131,7 +131,7 @@
{abbreviateNumber(rawData?.sharesShortPriorMonth)}
-
+
Short % of Shares Out
@@ -141,7 +141,7 @@
{rawData?.shortOutStandingPercent}%
-
+
Short % of Float
diff --git a/src/lib/components/TARating.svelte b/src/lib/components/TARating.svelte
index 85b1e321..13cfc2c0 100644
--- a/src/lib/components/TARating.svelte
+++ b/src/lib/components/TARating.svelte
@@ -206,7 +206,7 @@
{#each showFullStats ? signalList : signalList?.slice(0, 3) as item, index}
2
diff --git a/src/lib/components/Table/Table.svelte b/src/lib/components/Table/Table.svelte
index 44c1cdb3..6413b7ea 100644
--- a/src/lib/components/Table/Table.svelte
+++ b/src/lib/components/Table/Table.svelte
@@ -148,8 +148,16 @@
},
{ name: "Top Analyst Rating", rule: "topAnalystRating", type: "rating" },
{ name: "Top Analyst Count", rule: "topAnalystCounter", type: "int" },
- { name: "Top Analyst Price Target", rule: "topAnalystPriceTarget", type: "float" },
- { name: "Top Analyst PT Upside", rule: "topAnalystUpside", type: "percentSign" },
+ {
+ name: "Top Analyst Price Target",
+ rule: "topAnalystPriceTarget",
+ type: "float",
+ },
+ {
+ name: "Top Analyst PT Upside",
+ rule: "topAnalystUpside",
+ type: "percentSign",
+ },
];
allRows = [...allRows, ...specificRows];
@@ -164,58 +172,57 @@
allRows = sortIndicatorCheckMarks(allRows);
-
const handleDownloadMessage = (event) => {
- let updateData = event?.data?.rawData ?? []; // Use a new variable for updated data
- // Check if both arrays exist and have data
- if (!updateData?.length || !rawData?.length) {
- return;
- }
-
- // Create a new array to ensure reactivity
- const updatedRawData = [...rawData];
-
- for (let i = 0; i < updateData.length; i++) {
- if (updatedRawData[i]) {
- // Create a new object to merge the data
- let newData = {};
-
- // Merge fields from updateData
- Object.assign(newData, updateData[i]);
-
- // Merge fields from defaultRules that are missing in updateData
- defaultRules.forEach((rule) => {
- if (!(rule in updateData[i]) && rule in updatedRawData[i]) {
- newData[rule] = updatedRawData[i][rule];
- }
- });
-
- // Preserve the original 'priceTarget' and other default rule values
- for (let rule of defaultRules) {
- if (rule in updatedRawData[i]) {
- newData[rule] = updatedRawData[i][rule];
- }
- }
-
- // Ensure 'rank' and 'years' are added if they are missing in updateData
- if (!("rank" in updateData[i]) && "rank" in updatedRawData[i]) {
- newData.rank = updatedRawData[i]["rank"];
- }
- if (!("years" in updateData[i]) && "years" in updatedRawData[i]) {
- newData.years = updatedRawData[i]["years"];
- }
-
- // Update the specific item in the array
- updatedRawData[i] = newData;
+ let updateData = event?.data?.rawData ?? []; // Use a new variable for updated data
+ // Check if both arrays exist and have data
+ if (!updateData?.length || !rawData?.length) {
+ return;
}
- }
-
- // Trigger reactivity by creating a new reference
- rawData = [...updatedRawData];
- stockList = rawData?.slice(0, 100);
- columns = generateColumns(rawData);
- sortOrders = generateSortOrders(rawData);
-};
+
+ // Create a new array to ensure reactivity
+ const updatedRawData = [...rawData];
+
+ for (let i = 0; i < updateData.length; i++) {
+ if (updatedRawData[i]) {
+ // Create a new object to merge the data
+ let newData = {};
+
+ // Merge fields from updateData
+ Object.assign(newData, updateData[i]);
+
+ // Merge fields from defaultRules that are missing in updateData
+ defaultRules.forEach((rule) => {
+ if (!(rule in updateData[i]) && rule in updatedRawData[i]) {
+ newData[rule] = updatedRawData[i][rule];
+ }
+ });
+
+ // Preserve the original 'priceTarget' and other default rule values
+ for (let rule of defaultRules) {
+ if (rule in updatedRawData[i]) {
+ newData[rule] = updatedRawData[i][rule];
+ }
+ }
+
+ // Ensure 'rank' and 'years' are added if they are missing in updateData
+ if (!("rank" in updateData[i]) && "rank" in updatedRawData[i]) {
+ newData.rank = updatedRawData[i]["rank"];
+ }
+ if (!("years" in updateData[i]) && "years" in updatedRawData[i]) {
+ newData.years = updatedRawData[i]["years"];
+ }
+
+ // Update the specific item in the array
+ updatedRawData[i] = newData;
+ }
+ }
+
+ // Trigger reactivity by creating a new reference
+ rawData = [...updatedRawData];
+ stockList = rawData?.slice(0, 100);
+ columns = generateColumns(rawData);
+ sortOrders = generateSortOrders(rawData);
+ };
const updateStockScreenerData = async () => {
downloadWorker.postMessage({
@@ -687,7 +694,6 @@
};
$: charNumber = $screenWidth < 640 ? 15 : 20;
-
@@ -857,7 +863,7 @@
{#each stockList as item, index}
{:else}
{/if}
diff --git a/src/routes/analysts/+page.svelte b/src/routes/analysts/+page.svelte
index f0907536..39a9fa51 100644
--- a/src/routes/analysts/+page.svelte
+++ b/src/routes/analysts/+page.svelte
@@ -206,7 +206,7 @@
{#each analystList as item, index}
-
+
{#each Array.from({ length: 5 }) as _, i}
{#if i < Math.floor(analystScore)}
- ({analystScore}) ({analystScore})
@@ -289,7 +290,9 @@
# {rank}
-
+
Out of {numOfAnalysts} analysts
@@ -299,7 +302,9 @@
{totalRatings}
-
@@ -313,7 +318,9 @@
: "text-[#EF4444]"}>{successRate?.toFixed(2)}%
-
@@ -327,7 +334,9 @@
: "text-[#EF4444]"}>{avgReturn?.toFixed(2)}%
-
@@ -388,7 +397,7 @@
{#each stockList as item, index}
{#each displayList as item, index}
-
-
-
+
{#each stockList as item, index}
-
diff --git a/src/routes/crypto/+page.svelte b/src/routes/crypto/+page.svelte
index fafc8912..baf1e715 100644
--- a/src/routes/crypto/+page.svelte
+++ b/src/routes/crypto/+page.svelte
@@ -174,7 +174,7 @@
{#each symbolList as item, index}
goto("/crypto/" + item?.symbol)}
- class="sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-secondary border-b-[#09090B] shake-ticker cursor-pointer"
+ class="sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-odd border-b-[#09090B] shake-ticker cursor-pointer"
>
{#each senateTradingList as item}
{#each quantStats[$cryptoTicker?.toUpperCase()]["Worst 10 Drawdowns"] as item}
-
+
@@ -432,9 +430,7 @@ updateYearRange()
-
+
@@ -476,9 +472,7 @@ updateYearRange()
-
+
@@ -514,9 +508,7 @@ updateYearRange()
-
+
@@ -536,9 +528,7 @@ updateYearRange()
-
+
@@ -558,9 +548,7 @@ updateYearRange()
-
+
@@ -598,9 +586,7 @@ updateYearRange()
-
+
@@ -620,9 +606,7 @@ updateYearRange()
-
+
@@ -642,9 +626,7 @@ updateYearRange()
-
+
@@ -662,9 +644,7 @@ updateYearRange()
-
+
@@ -682,9 +662,7 @@ updateYearRange()
-
+
@@ -702,9 +680,7 @@ updateYearRange()
-
+
@@ -724,9 +700,7 @@ updateYearRange()
-
+
@@ -746,9 +720,7 @@ updateYearRange()
-
+
@@ -786,9 +758,7 @@ updateYearRange()
-
+
@@ -826,9 +796,7 @@ updateYearRange()
-
+
@@ -866,9 +834,7 @@ updateYearRange()
-
+
@@ -888,9 +854,7 @@ updateYearRange()
-
+
@@ -910,9 +874,7 @@ updateYearRange()
-
+
@@ -954,9 +916,7 @@ updateYearRange()
-
+
@@ -998,9 +958,7 @@ updateYearRange()
-
+
@@ -1020,9 +978,7 @@ updateYearRange()
-
+
@@ -1040,9 +996,7 @@ updateYearRange()
-
+
@@ -1060,9 +1014,7 @@ updateYearRange()
-
+
@@ -1082,9 +1034,7 @@ updateYearRange()
-
+
@@ -1104,9 +1054,7 @@ updateYearRange()
-
+
@@ -1126,9 +1074,7 @@ updateYearRange()
-
+
@@ -1148,9 +1094,7 @@ updateYearRange()
-
+
@@ -1170,9 +1114,7 @@ updateYearRange()
-
+
@@ -1208,9 +1150,7 @@ updateYearRange()
-
+
@@ -1248,9 +1188,7 @@ updateYearRange()
-
+
@@ -1288,9 +1226,7 @@ updateYearRange()
-
+
@@ -1326,9 +1262,7 @@ updateYearRange()
-
+
@@ -1368,9 +1302,7 @@ updateYearRange()
-
+
@@ -1410,9 +1342,7 @@ updateYearRange()
-
+
@@ -1452,9 +1382,7 @@ updateYearRange()
-
+
@@ -1494,9 +1422,7 @@ updateYearRange()
-
+
@@ -1536,9 +1462,7 @@ updateYearRange()
-
+
@@ -1576,9 +1500,7 @@ updateYearRange()
-
+
@@ -1598,9 +1520,7 @@ updateYearRange()
-
+
@@ -1620,9 +1540,7 @@ updateYearRange()
-
+
@@ -1642,9 +1560,7 @@ updateYearRange()
-
+
@@ -1682,9 +1598,7 @@ updateYearRange()
-
+
@@ -1724,9 +1638,7 @@ updateYearRange()
-
+
@@ -1746,9 +1658,7 @@ updateYearRange()
-
+
@@ -1768,9 +1678,7 @@ updateYearRange()
-
+
@@ -1790,9 +1698,7 @@ updateYearRange()
-
+
diff --git a/src/routes/dividends-calendar/+page.svelte b/src/routes/dividends-calendar/+page.svelte
index 6614caf9..28989ca6 100644
--- a/src/routes/dividends-calendar/+page.svelte
+++ b/src/routes/dividends-calendar/+page.svelte
@@ -478,7 +478,7 @@
{#each day as item}
{#each stockList as item, index}
{#each rawData?.history as item}
-
+
diff --git a/src/routes/etf/[tickerID]/insider/+page.svelte b/src/routes/etf/[tickerID]/insider/+page.svelte
index 162c3148..96db7dd1 100644
--- a/src/routes/etf/[tickerID]/insider/+page.svelte
+++ b/src/routes/etf/[tickerID]/insider/+page.svelte
@@ -321,7 +321,7 @@
{#each senateTradingList as item}
handleViewData(item?.date)}
on:mouseover={() =>
getDailyTransactions($etfTicker + "+" + item?.date)}
- class="cursor-pointer sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-secondary border-b-[#09090B] {index +
+ class="cursor-pointer sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-odd border-b-[#09090B] {index +
1 ===
optionList?.slice(0, 3)?.length &&
data?.user?.tier !== 'Pro'
@@ -1067,8 +1067,7 @@
{#each data?.user?.tier === "Pro" ? optionChainList : optionChainList?.slice(0, 3) as item, index}
{#each optionHistoryList as item}
-
+
{formatTime(item?.time)}
diff --git a/src/routes/etf/[tickerID]/stats/+page.svelte b/src/routes/etf/[tickerID]/stats/+page.svelte
index b3c1b3db..68a3ef2f 100644
--- a/src/routes/etf/[tickerID]/stats/+page.svelte
+++ b/src/routes/etf/[tickerID]/stats/+page.svelte
@@ -329,9 +329,7 @@ updateYearRange()
{#each quantStats[$etfTicker?.toUpperCase()]["Worst 10 Drawdowns"] as item}
-
+
@@ -432,9 +430,7 @@ updateYearRange()
-
+
@@ -476,9 +472,7 @@ updateYearRange()
-
+
@@ -514,9 +508,7 @@ updateYearRange()
-
+
@@ -536,9 +528,7 @@ updateYearRange()
-
+
@@ -558,9 +548,7 @@ updateYearRange()
-
+
@@ -598,9 +586,7 @@ updateYearRange()
-
+
@@ -618,9 +604,7 @@ updateYearRange()
-
+
@@ -640,9 +624,7 @@ updateYearRange()
-
+
@@ -660,9 +642,7 @@ updateYearRange()
-
+
@@ -680,9 +660,7 @@ updateYearRange()
-
+
@@ -700,9 +678,7 @@ updateYearRange()
-
+
@@ -722,9 +698,7 @@ updateYearRange()
-
+
@@ -744,9 +718,7 @@ updateYearRange()
-
+
@@ -784,9 +756,7 @@ updateYearRange()
-
+
@@ -824,9 +794,7 @@ updateYearRange()
-
+
@@ -864,9 +832,7 @@ updateYearRange()
-
+
@@ -886,9 +852,7 @@ updateYearRange()
-
+
@@ -906,9 +870,7 @@ updateYearRange()
-
+
@@ -950,9 +912,7 @@ updateYearRange()
-
+
@@ -994,9 +954,7 @@ updateYearRange()
-
+
@@ -1016,9 +974,7 @@ updateYearRange()
-
+
@@ -1036,9 +992,7 @@ updateYearRange()
-
+
@@ -1056,9 +1010,7 @@ updateYearRange()
-
+
@@ -1078,9 +1030,7 @@ updateYearRange()
-
+
@@ -1100,9 +1050,7 @@ updateYearRange()
-
+
@@ -1122,9 +1070,7 @@ updateYearRange()
-
+
@@ -1144,9 +1090,7 @@ updateYearRange()
-
+
@@ -1166,9 +1110,7 @@ updateYearRange()
-
+
@@ -1204,9 +1146,7 @@ updateYearRange()
-
+
@@ -1244,9 +1184,7 @@ updateYearRange()
-
+
@@ -1284,9 +1222,7 @@ updateYearRange()
-
+
@@ -1322,9 +1258,7 @@ updateYearRange()
-
+
@@ -1364,9 +1298,7 @@ updateYearRange()
-
+
@@ -1406,9 +1338,7 @@ updateYearRange()
-
+
@@ -1448,9 +1378,7 @@ updateYearRange()
-
+
@@ -1490,9 +1418,7 @@ updateYearRange()
-
+
@@ -1532,9 +1458,7 @@ updateYearRange()
-
+
@@ -1572,9 +1496,7 @@ updateYearRange()
-
+
@@ -1594,9 +1516,7 @@ updateYearRange()
-
+
@@ -1616,9 +1536,7 @@ updateYearRange()
-
+
@@ -1638,9 +1556,7 @@ updateYearRange()
-
+
@@ -1678,9 +1594,7 @@ updateYearRange()
-
+
@@ -1720,9 +1634,7 @@ updateYearRange()
-
+
@@ -1742,9 +1654,7 @@ updateYearRange()
-
+
@@ -1764,9 +1674,7 @@ updateYearRange()
-
+
@@ -1786,9 +1694,7 @@ updateYearRange()
-
+
diff --git a/src/routes/etf/etf-providers/+page.svelte b/src/routes/etf/etf-providers/+page.svelte
index e80ca66f..78df1e06 100644
--- a/src/routes/etf/etf-providers/+page.svelte
+++ b/src/routes/etf/etf-providers/+page.svelte
@@ -120,73 +120,72 @@
-
-
-
+
diff --git a/src/routes/etf/etf-providers/[slug]/+page.svelte b/src/routes/etf/etf-providers/[slug]/+page.svelte
index 45cd4b06..fef46a51 100644
--- a/src/routes/etf/etf-providers/[slug]/+page.svelte
+++ b/src/routes/etf/etf-providers/[slug]/+page.svelte
@@ -119,20 +119,18 @@
etfProviderData = [...originalData].sort(compareValues)?.slice(0, 50);
};
-
function generateStatementInfoHTML() {
return `
${etfProviderName} has ${rawData?.length} ETFs listed with a total of ${abbreviateNumber(
- totalAssets
- )}
+ totalAssets,
+ )}
in assets under management. The funds have an average expense ratio of ${avgExpenseRatio?.toFixed(
2,
)}%.
`;
-}
-
-let htmlOutput = generateStatementInfoHTML();
+ }
+ let htmlOutput = generateStatementInfoHTML();
@@ -166,9 +164,9 @@ let htmlOutput = generateStatementInfoHTML();
{#if rawData?.length !== 0}
-
-
-
+
+
+
{/if}
-
-
-
-
-
-
-
- {#each etfProviderData as item, index}
-
-
-
+
+
+
+
+
+
+ {#each etfProviderData as item, index}
+
+
-
-
+
+
+
-
- {item?.name?.length > charNumber
- ? item?.name?.slice(0, charNumber) + "..."
- : item?.name}
-
+
+ {item?.name?.length > charNumber
+ ? item?.name?.slice(0, charNumber) + "..."
+ : item?.name}
+
-
- {item?.price}
-
+
+ {item?.price}
+
-
- {#if item?.changesPercentage >= 0}
- +{item?.changesPercentage >= 1000
- ? abbreviateNumber(item?.changesPercentage)
- : item?.changesPercentage?.toFixed(2)}%
- {:else if item?.changesPercentage < 0}
- {item?.changesPercentage <= -1000
- ? abbreviateNumber(item?.changesPercentage)
- : item?.changesPercentage?.toFixed(2)}%
-
- {:else}
- -
- {/if}
-
+
+ {#if item?.changesPercentage >= 0}
+ +{item?.changesPercentage >= 1000
+ ? abbreviateNumber(item?.changesPercentage)
+ : item?.changesPercentage?.toFixed(2)}%
+ {:else if item?.changesPercentage < 0}
+ {item?.changesPercentage <= -1000
+ ? abbreviateNumber(item?.changesPercentage)
+ : item?.changesPercentage?.toFixed(2)}%
+
+ {:else}
+ -
+ {/if}
+
-
- {abbreviateNumber(item?.totalAssets)}
-
+
+ {abbreviateNumber(item?.totalAssets)}
+
-
- {item?.numberOfHoldings}
-
+
+ {item?.numberOfHoldings}
+
-
- {item?.expenseRatio}%
-
-
- {/each}
-
-
+
+ {item?.expenseRatio}%
+
+
+ {/each}
+
+
+
+
-
-
-
{:else}
{#each etfData as item}
goto(`/stocks/${item?.symbol}`)}
- class="sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-secondary {index +
+ class="sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] odd:bg-odd {index +
1 ===
displayList?.length && data?.user?.tier !== 'Pro'
? 'opacity-[0.1]'
diff --git a/src/routes/industry/all/+page.svelte b/src/routes/industry/all/+page.svelte
index e87ad32d..6c8b0076 100644
--- a/src/routes/industry/all/+page.svelte
+++ b/src/routes/industry/all/+page.svelte
@@ -104,7 +104,7 @@
{#each displayList as item}
{#each stockList as item, index}
{#each ipoList as item}
{#if isLoaded}
-
-
-
+
+
+
-
-
Select Time period
@@ -146,7 +146,7 @@
{#each ipoList as item}
{#each tableData as item}
{#each displayList as item, index}
handleFilter(item?.id)}
diff --git a/src/routes/stock-screener/+page.svelte b/src/routes/stock-screener/+page.svelte
index f3e72a4e..6bfc02da 100644
--- a/src/routes/stock-screener/+page.svelte
+++ b/src/routes/stock-screener/+page.svelte
@@ -1569,7 +1569,7 @@
ruleOfList =
strategyList?.find((item) => item.id === selectedStrategy)?.rules ?? [];
- ruleOfList.forEach((rule) => {
+ ruleOfList.forEach((rule) => {
ruleCondition[rule.name] =
rule.condition || allRules[rule.name].defaultCondition;
valueMappings[rule.name] = rule.value || allRules[rule.name].defaultValue;
@@ -1596,11 +1596,19 @@
) // Only include specific rules
?.map((rule) => [rule.name, new Set(rule.value)]), // Create Map from filtered rules
);
-
}
function changeRule(state: string) {
- if (data?.user?.tier !== "Pro" && ['topAnalystRating','topAnalystCounter','topAnalystPriceTarget','topAnalystUpside','score']?.includes(state)) {
+ if (
+ data?.user?.tier !== "Pro" &&
+ [
+ "topAnalystRating",
+ "topAnalystCounter",
+ "topAnalystPriceTarget",
+ "topAnalystUpside",
+ "score",
+ ]?.includes(state)
+ ) {
goto("/pricing");
} else {
selectedPopularStrategy = "";
@@ -1624,7 +1632,7 @@
};
const loadWorker = async () => {
- if (['performance', 'analysts']?.includes(displayTableTab) || hoverStatus) {
+ if (["performance", "analysts"]?.includes(displayTableTab) || hoverStatus) {
syncWorker.postMessage({
stockScreenerData,
ruleOfList: [...ruleOfList, ...otherTabRules],
@@ -1638,7 +1646,7 @@
};
const updateStockScreenerData = async () => {
- if (["performance","analysts"]?.includes(displayTableTab) || hoverStatus) {
+ if (["performance", "analysts"]?.includes(displayTableTab) || hoverStatus) {
downloadWorker.postMessage({
ruleOfList: [...ruleOfList, ...otherTabRules],
});
@@ -1823,7 +1831,7 @@ const handleKeyDown = (event) => {
strategyList.find((item) => item.id === selectedStrategy).rules =
ruleOfList;
- const postData = {
+ const postData = {
strategyId: selectedStrategy,
rules: ruleOfList,
};
@@ -1848,7 +1856,7 @@ const handleKeyDown = (event) => {
}
$: {
- if (ruleOfList ) {
+ if (ruleOfList) {
const ruleToUpdate = ruleOfList?.find((rule) => rule.name === ruleName);
if (ruleToUpdate) {
ruleToUpdate.value = valueMappings[ruleToUpdate.name];
@@ -2146,7 +2154,9 @@ const handleKeyDown = (event) => {
? sectorList
: ruleName === "industry"
? industryList
- : ['analystRating','topAnalystRating','score']?.includes(ruleName)
+ : ["analystRating", "topAnalystRating", "score"]?.includes(
+ ruleName,
+ )
? ["Strong Buy", "Buy", "Hold", "Sell", "Strong Sell"]
: ["Compliant", "Non-Compliant"];
testList =
@@ -2300,8 +2310,9 @@ const handleKeyDown = (event) => {
columns = [...(baseColumnsMap[displayTableTab] || [])];
sortOrders = { ...(baseSortOrdersMap[displayTableTab] || {}) };
- const rulesList =
- ["performance","analysts"]?.includes(displayTableTab) ? tabRuleList : displayRules;
+ const rulesList = ["performance", "analysts"]?.includes(displayTableTab)
+ ? tabRuleList
+ : displayRules;
rulesList?.forEach((rule) => {
if (rule.rule !== "marketCap") {
columns.push({
@@ -2351,7 +2362,7 @@ const handleKeyDown = (event) => {
await updateStockScreenerData();
}
}
-/*
+ /*
async function handleMouseOver() {
if (displayTableTab !== "performance") {
hoverStatus = true;
@@ -2995,7 +3006,7 @@ const handleKeyDown = (event) => {
autocomplete="off"
class="{![
'analystRating',
- "topAnalystRating",
+ 'topAnalystRating',
'halalStocks',
'score',
'sector',
@@ -3011,7 +3022,7 @@ const handleKeyDown = (event) => {
{/if}
- {#if !["sma20", "sma50", "sma100", "sma200", "ema20", "ema50", "ema100", "ema200", "grahamNumber", "analystRating", "topAnalystRating","halalStocks", "score", "sector", "industry", "country"]?.includes(row?.rule)}
+ {#if !["sma20", "sma50", "sma100", "sma200", "ema20", "ema50", "ema100", "ema200", "grahamNumber", "analystRating", "topAnalystRating", "halalStocks", "score", "sector", "industry", "country"]?.includes(row?.rule)}
{#each row?.step as newValue, index}
{#if ruleCondition[row?.rule] === "between"}
{#if newValue && row?.step[index + 1]}
@@ -3080,7 +3091,7 @@ const handleKeyDown = (event) => {
{/each}
{:else}
- {#each testList.length > 0 && searchQuery?.length > 0 ? testList : searchQuery?.length > 0 && testList?.length === 0 ? [] : row?.rule === "country" ? listOfRelevantCountries : row?.rule === "sector" ? sectorList : row?.rule === "industry" ? industryList : ['analystRating','topAnalystRating','score']?.includes(ruleName) ? ["Strong Buy", "Buy", "Hold", "Sell", "Strong Sell"] : ["Compliant", "Non-Compliant"] as item}
+ {#each testList.length > 0 && searchQuery?.length > 0 ? testList : searchQuery?.length > 0 && testList?.length === 0 ? [] : row?.rule === "country" ? listOfRelevantCountries : row?.rule === "sector" ? sectorList : row?.rule === "industry" ? industryList : ["analystRating", "topAnalystRating", "score"]?.includes(ruleName) ? ["Strong Buy", "Buy", "Hold", "Sell", "Strong Sell"] : ["Compliant", "Non-Compliant"] as item}
- {:else if displayTableTab === "analysts"}
+ {:else if displayTableTab === "analysts"}