seo optimization
This commit is contained in:
parent
b2c9a34ade
commit
6b67e98a10
@ -70,20 +70,14 @@
|
|||||||
insider: "/insider",
|
insider: "/insider",
|
||||||
options: "/options",
|
options: "/options",
|
||||||
dividends: "/dividends",
|
dividends: "/dividends",
|
||||||
statistics: "/statistics",
|
holdings: "/holdings",
|
||||||
metrics: "metrics",
|
|
||||||
forecast: "/forecast",
|
|
||||||
financials: "/financials",
|
|
||||||
history: "/history",
|
history: "/history",
|
||||||
profile: "/profile",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (state !== "overview" && sectionMap[state]) {
|
if (state !== "overview" && sectionMap[state]) {
|
||||||
displaySection = state;
|
displaySection = state;
|
||||||
//goto(`/etf/${$etfTicker}${sectionMap[state]}`);
|
|
||||||
} else {
|
} else {
|
||||||
displaySection = "overview";
|
displaySection = "overview";
|
||||||
//goto(`/etf/${$etfTicker}/`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,7 +336,6 @@
|
|||||||
const sectionMap = {
|
const sectionMap = {
|
||||||
holdings: "holdings",
|
holdings: "holdings",
|
||||||
options: "options",
|
options: "options",
|
||||||
options: "options",
|
|
||||||
insider: "insider",
|
insider: "insider",
|
||||||
dividends: "dividends",
|
dividends: "dividends",
|
||||||
history: "history",
|
history: "history",
|
||||||
@ -380,7 +373,9 @@
|
|||||||
class="flex-1 flex-shrink-0 flex flex-row items-center justify-between -mt-2"
|
class="flex-1 flex-shrink-0 flex flex-row items-center justify-between -mt-2"
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href={/^\/(stocks|etf|index)/.test($previousPage || "") ? "/" : $previousPage || "/"}
|
href={/^\/(stocks|etf|index)/.test($previousPage || "")
|
||||||
|
? "/"
|
||||||
|
: $previousPage || "/"}
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
class="w-5 h-5 inline-block"
|
class="w-5 h-5 inline-block"
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { etfTicker } from "$lib/store";
|
import { etfTicker } from "$lib/store";
|
||||||
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
|
||||||
import { formatDate } from "$lib/utils";
|
import { formatDate } from "$lib/utils";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
@ -14,14 +13,14 @@
|
|||||||
<div
|
<div
|
||||||
class="relative flex justify-center items-start overflow-hidden w-full"
|
class="relative flex justify-center items-start overflow-hidden w-full"
|
||||||
>
|
>
|
||||||
<main class="w-full lg:w-3/4">
|
<main class="w-full lg:w-3/4 lg:pr-10">
|
||||||
<slot />
|
<slot />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<aside class="hidden lg:block relative fixed w-1/4 ml-4">
|
<aside class="hidden lg:block relative fixed w-1/4 mt-3">
|
||||||
{#if newsList?.length !== 0}
|
{#if newsList?.length !== 0}
|
||||||
<div
|
<div
|
||||||
class="w-full sm:hover:text-white text-white border border-gray-600 bg-primary rounded-md h-fit pb-4 mt-4 cursor-pointer"
|
class="w-full sm:hover:text-white text-white border border-gray-600 rounded-md h-fit pb-4 mt-4 cursor-pointer bg-inherit"
|
||||||
>
|
>
|
||||||
<div class="p-4 text-sm">
|
<div class="p-4 text-sm">
|
||||||
<h3 class="text-lg text-white font-semibold mb-3">
|
<h3 class="text-lg text-white font-semibold mb-3">
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
import { GridComponent, TooltipComponent } from "echarts/components";
|
import { GridComponent, TooltipComponent } from "echarts/components";
|
||||||
import { CanvasRenderer } from "echarts/renderers";
|
import { CanvasRenderer } from "echarts/renderers";
|
||||||
import Infobox from "$lib/components/Infobox.svelte";
|
import Infobox from "$lib/components/Infobox.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
use([LineChart, BarChart, TooltipComponent, GridComponent, CanvasRenderer]);
|
use([LineChart, BarChart, TooltipComponent, GridComponent, CanvasRenderer]);
|
||||||
|
|
||||||
@ -173,43 +174,10 @@
|
|||||||
const htmlOutput = generateDividendInfoHTML();
|
const htmlOutput = generateDividendInfoHTML();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title={`${$displayCompanyName} (${$etfTicker}) Dividend History, Dates & Yield`}
|
||||||
<meta name="viewport" content="width=device-width" />
|
description={`Get the latest dividend data for ${$displayCompanyName} (${$etfTicker}) stock price quote with breaking news, financials, statistics, charts and more.`}
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$etfTicker}) Dividend History, Dates & Yield ·
|
|
||||||
stocknear
|
|
||||||
</title>
|
|
||||||
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Get the latest dividend data for ${$displayCompanyName} (${$etfTicker}) stock price quote with breaking news, financials, statistics, charts and more.`}
|
|
||||||
/>
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) Dividend History, Dates & Yield · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Get the latest dividend data for ${$displayCompanyName} (${$etfTicker}), including dividend history, yield, key dates, growth and other metrics.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) Dividend History, Dates & Yield · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Get the latest dividend data for ${$displayCompanyName} (${$etfTicker}) stock price quote with breaking news, financials, statistics, charts and more.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section class="w-full bg-default overflow-hidden text-white h-full">
|
<section class="w-full bg-default overflow-hidden text-white h-full">
|
||||||
<div class="w-full flex h-full overflow-hidden">
|
<div class="w-full flex h-full overflow-hidden">
|
||||||
|
|||||||
@ -1,85 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import { stockTicker, screenWidth } from "$lib/store";
|
|
||||||
import { onDestroy } from "svelte";
|
|
||||||
import { page } from "$app/stores";
|
|
||||||
|
|
||||||
let displaySubSection = "overview";
|
|
||||||
|
|
||||||
if (displaySubSection) {
|
|
||||||
const parts = $page?.url?.pathname.split("/");
|
|
||||||
const sectionMap = {
|
|
||||||
overview: "overview",
|
|
||||||
ai: "ai",
|
|
||||||
analyst: "analyst",
|
|
||||||
};
|
|
||||||
|
|
||||||
const foundSection = parts?.find((part) =>
|
|
||||||
Object?.values(sectionMap)?.includes(part),
|
|
||||||
);
|
|
||||||
|
|
||||||
displaySubSection =
|
|
||||||
Object?.keys(sectionMap)?.find(
|
|
||||||
(key) => sectionMap[key] === foundSection,
|
|
||||||
) || "overview";
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeSubSection(state) {
|
|
||||||
const subSectionMap = {
|
|
||||||
overview: "/forecast",
|
|
||||||
ai: "/forecast/ai",
|
|
||||||
analyst: "/forecast/analyst",
|
|
||||||
};
|
|
||||||
|
|
||||||
if (state !== "overview" && subSectionMap[state]) {
|
|
||||||
displaySubSection = state;
|
|
||||||
//goto(`/stocks/${$stockTicker}${subSectionMap[state]}`);
|
|
||||||
} else {
|
|
||||||
displaySubSection = state;
|
|
||||||
//goto(`/stocks/${$stockTicker}/stats`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const unsubscribe = page.subscribe(($page) => {
|
|
||||||
const splitRoute = $page.url.pathname.split("/");
|
|
||||||
const routeState =
|
|
||||||
splitRoute[splitRoute.length - 1] !== "forecast"
|
|
||||||
? splitRoute[splitRoute.length - 1]
|
|
||||||
: "overview";
|
|
||||||
|
|
||||||
changeSubSection(routeState);
|
|
||||||
});
|
|
||||||
|
|
||||||
onDestroy(() => {
|
|
||||||
unsubscribe();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<section
|
|
||||||
class="w-auto max-w-5xl bg-default overflow-hidden text-black h-full mb-40"
|
|
||||||
>
|
|
||||||
<div class="m-auto h-full overflow-hidden">
|
|
||||||
<slot />
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.scrollbar {
|
|
||||||
display: grid;
|
|
||||||
grid-gap: 18px;
|
|
||||||
grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
|
|
||||||
grid-auto-flow: column;
|
|
||||||
overflow-x: auto;
|
|
||||||
scrollbar-width: thin; /* Hide the default scrollbar in Firefox */
|
|
||||||
scrollbar-color: transparent transparent; /* Hide the default scrollbar in Firefox */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Custom scrollbar for Webkit (Chrome, Safari) */
|
|
||||||
.scrollbar::-webkit-scrollbar {
|
|
||||||
width: 0; /* Hide the width of the scrollbar */
|
|
||||||
height: 0; /* Hide the height of the scrollbar */
|
|
||||||
}
|
|
||||||
|
|
||||||
.scrollbar::-webkit-scrollbar-thumb {
|
|
||||||
background: transparent; /* Make the thumb transparent */
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
export const load = async ({ locals, params }) => {
|
|
||||||
const { apiURL, apiKey } = locals;
|
|
||||||
const postData = {
|
|
||||||
ticker: params.tickerID,
|
|
||||||
};
|
|
||||||
const getAnalystInsight = async () => {
|
|
||||||
const response = await fetch(apiURL + "/analyst-insight", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
"X-API-KEY": apiKey,
|
|
||||||
},
|
|
||||||
body: JSON.stringify(postData),
|
|
||||||
});
|
|
||||||
|
|
||||||
const output = await response.json();
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getPriceAnalysis = async () => {
|
|
||||||
const response = await fetch(apiURL + "/price-analysis", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
"X-API-KEY": apiKey,
|
|
||||||
},
|
|
||||||
body: JSON.stringify(postData),
|
|
||||||
});
|
|
||||||
|
|
||||||
const output = await response.json();
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getSentimentAnalysis = async () => {
|
|
||||||
const response = await fetch(apiURL + "/sentiment-analysis", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
"X-API-KEY": apiKey,
|
|
||||||
},
|
|
||||||
body: JSON.stringify(postData),
|
|
||||||
});
|
|
||||||
|
|
||||||
const output = await response.json();
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Make sure to return a promise
|
|
||||||
return {
|
|
||||||
getAnalystInsight: await getAnalystInsight(),
|
|
||||||
getPriceAnalysis: await getPriceAnalysis(),
|
|
||||||
getSentimentAnalysis: await getSentimentAnalysis(),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
@ -1,100 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import {
|
|
||||||
numberOfUnreadNotification,
|
|
||||||
displayCompanyName,
|
|
||||||
stockTicker,
|
|
||||||
sentimentComponent,
|
|
||||||
priceAnalysisComponent,
|
|
||||||
} from "$lib/store";
|
|
||||||
import PriceAnalysis from "$lib/components/PriceAnalysis.svelte";
|
|
||||||
import SentimentAnalysis from "$lib/components/SentimentAnalysis.svelte";
|
|
||||||
import AnalystInsight from "$lib/components/AnalystInsight.svelte";
|
|
||||||
|
|
||||||
import Lazy from "$lib/components/Lazy.svelte";
|
|
||||||
|
|
||||||
export let data;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$stockTicker}) Forecast AI · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Forecast AI · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Forecast AI · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
|
||||||
class="bg-default overflow-hidden text-white h-full mb-40 sm:mb-0 w-full"
|
|
||||||
>
|
|
||||||
<div class="flex justify-center m-auto h-full overflow-hidden w-full">
|
|
||||||
<div
|
|
||||||
class="relative flex justify-center items-center overflow-hidden w-full"
|
|
||||||
>
|
|
||||||
<div class="sm:pl-7 sm:pb-7 sm:pt-7 w-full m-auto mt-2 sm:mt-0">
|
|
||||||
<Lazy>
|
|
||||||
<div
|
|
||||||
class="w-full mt-10 sm:mt-0 m-auto sm:pt-6 {Object?.keys(
|
|
||||||
data?.getAnalystInsight,
|
|
||||||
)?.length === 0
|
|
||||||
? 'hidden'
|
|
||||||
: ''}"
|
|
||||||
>
|
|
||||||
<AnalystInsight {data} />
|
|
||||||
</div>
|
|
||||||
</Lazy>
|
|
||||||
|
|
||||||
<Lazy>
|
|
||||||
<div
|
|
||||||
class="w-full mt-10 sm:mt-5 m-auto sm:pb-6 sm:pt-6 {Object?.keys(
|
|
||||||
data?.getPriceAnalysis,
|
|
||||||
)?.length === 0
|
|
||||||
? 'hidden'
|
|
||||||
: ''}"
|
|
||||||
>
|
|
||||||
<PriceAnalysis {data} />
|
|
||||||
</div>
|
|
||||||
</Lazy>
|
|
||||||
|
|
||||||
<Lazy>
|
|
||||||
<div
|
|
||||||
class="w-full mt-10 sm:mt-5 m-auto sm:pb-6 sm:pt-6 {data
|
|
||||||
?.getSentimentAnalysis?.length === 0
|
|
||||||
? 'hidden'
|
|
||||||
: ''}"
|
|
||||||
>
|
|
||||||
<SentimentAnalysis {data} />
|
|
||||||
</div>
|
|
||||||
</Lazy>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@ -10,6 +10,7 @@
|
|||||||
import { Button } from "$lib/components/shadcn/button/index.js";
|
import { Button } from "$lib/components/shadcn/button/index.js";
|
||||||
import { goto } from "$app/navigation";
|
import { goto } from "$app/navigation";
|
||||||
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
|
|
||||||
@ -272,42 +273,10 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title={`${$displayCompanyName} (${$etfTicker}) Stock Price History`}
|
||||||
<meta name="viewport" content="width=device-width" />
|
description={`Get a complete stock price history for ${$displayCompanyName} (${$etfTicker}), starting from its first trading day. Includes open, high, low, close and volume.`}
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$etfTicker}) Historical Stock Price Data · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Get a complete stock price history for ${$etfTicker}, starting from its first trading day. Includes open, high, low, close and volume.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) Historical Stock Price Data · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Get a complete stock price history for NVIDIA, starting from its first trading day. Includes open, high, low, close and volume.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) Historical Stock Price Data · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Get a complete stock price history for NVIDIA, starting from its first trading day. Includes open, high, low, close and volume.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="bg-default overflow-hidden text-white h-full min-h-screen mb-20 sm:mb-0 w-full mt-2 sm:mt-0"
|
class="bg-default overflow-hidden text-white h-full min-h-screen mb-20 sm:mb-0 w-full mt-2 sm:mt-0"
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
import { formatString } from "$lib/utils";
|
import { formatString } from "$lib/utils";
|
||||||
import Table from "$lib/components/Table/Table.svelte";
|
import Table from "$lib/components/Table/Table.svelte";
|
||||||
import Infobox from "$lib/components/Infobox.svelte";
|
import Infobox from "$lib/components/Infobox.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
let rawData = data?.getETFHoldings?.holdings || [];
|
let rawData = data?.getETFHoldings?.holdings || [];
|
||||||
@ -57,42 +58,10 @@
|
|||||||
let htmlOutput = generateStatementInfoHTML();
|
let htmlOutput = generateStatementInfoHTML();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title={`${$displayCompanyName} (${$etfTicker}) Holdings List`}
|
||||||
<meta name="viewport" content="width=device-width" />
|
description={`Get the Holdings List of ${$displayCompanyName} (${$etfTicker}).`}
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$etfTicker}) Holdings List · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Get the Holdings List of ${$displayCompanyName} (${$etfTicker}).`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) Holdings List · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Get the Holdings List of ${$displayCompanyName} (${$etfTicker}).`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) Holdings List · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Get the Holdings List of ${$displayCompanyName} (${$etfTicker}).`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="bg-default overflow-hidden text-white h-full min-h-screen mb-20 sm:mb-0 w-full mt-2 sm:mt-0"
|
class="bg-default overflow-hidden text-white h-full min-h-screen mb-20 sm:mb-0 w-full mt-2 sm:mt-0"
|
||||||
|
|||||||
@ -14,14 +14,14 @@
|
|||||||
<div
|
<div
|
||||||
class="relative flex justify-center items-start overflow-hidden w-full"
|
class="relative flex justify-center items-start overflow-hidden w-full"
|
||||||
>
|
>
|
||||||
<main class="w-full lg:w-3/4">
|
<main class="w-full lg:w-3/4 lg:pr-10">
|
||||||
<slot />
|
<slot />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<aside class="hidden lg:block relative fixed w-1/4 ml-4">
|
<aside class="hidden lg:block relative fixed w-1/4 mt-3">
|
||||||
{#if newsList?.length !== 0}
|
{#if newsList?.length !== 0}
|
||||||
<div
|
<div
|
||||||
class="w-full sm:hover:text-white text-white border border-gray-600 bg-primary rounded-md h-fit pb-4 mt-4 cursor-pointer"
|
class="w-full sm:hover:text-white text-white border border-gray-600 rounded-md h-fit pb-4 mt-4 cursor-pointer bg-inherit"
|
||||||
>
|
>
|
||||||
<div class="p-4 text-sm">
|
<div class="p-4 text-sm">
|
||||||
<h3 class="text-lg text-white font-semibold mb-3">
|
<h3 class="text-lg text-white font-semibold mb-3">
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
} from "$lib/store";
|
} from "$lib/store";
|
||||||
import { getPartyForPoliticians } from "$lib/utils";
|
import { getPartyForPoliticians } from "$lib/utils";
|
||||||
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
@ -183,43 +184,10 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title={`${$displayCompanyName} (${$etfTicker}) US Congress & Senate Trading`}
|
||||||
<meta name="viewport" content="width=device-width" />
|
description={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$etfTicker}) from democrates and republicans.`}
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$etfTicker}) US Congress & Senate Trading ·
|
|
||||||
stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$etfTicker}) from democrates and republicans.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) US Congress & Senate Trading · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$etfTicker}) from democrates and republicans.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${$displayCompanyName} (${$etfTicker}) US Congress & Senate Trading · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$etfTicker}) from democrates and republicans.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="w-full bg-default overflow-hidden min-h-screen text-white h-full"
|
class="w-full bg-default overflow-hidden min-h-screen text-white h-full"
|
||||||
@ -243,7 +211,7 @@
|
|||||||
>
|
>
|
||||||
<!--Start Buy/Sell-->
|
<!--Start Buy/Sell-->
|
||||||
<div
|
<div
|
||||||
class="flex flex-row items-center flex-wrap w-full px-3 sm:px-4 border border-gray-600 bg-primary rounded-md h-20"
|
class="flex flex-row items-center flex-wrap w-full px-3 sm:px-4 border border-gray-600 rounded h-20"
|
||||||
>
|
>
|
||||||
<div class="flex flex-col items-start">
|
<div class="flex flex-col items-start">
|
||||||
<span
|
<span
|
||||||
@ -305,7 +273,7 @@
|
|||||||
<!--End Buy/Sell-->
|
<!--End Buy/Sell-->
|
||||||
<!--Start Dem/Rep-->
|
<!--Start Dem/Rep-->
|
||||||
<div
|
<div
|
||||||
class="flex flex-row items-center flex-wrap w-full px-3 sm:px-4 border border-gray-600 bg-primary rounded-md h-20"
|
class="flex flex-row items-center flex-wrap w-full px-3 sm:px-4 border border-gray-600 rounded h-20"
|
||||||
>
|
>
|
||||||
<div class="flex flex-col items-start">
|
<div class="flex flex-col items-start">
|
||||||
<span
|
<span
|
||||||
@ -368,10 +336,10 @@
|
|||||||
<!--End Widget-->
|
<!--End Widget-->
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="mt-6 flex justify-start items-center w-full m-auto rounded-none sm:rounded-md mb-4 overflow-x-scroll"
|
class="mt-6 flex justify-start items-center w-full m-auto rounded-none sm:rounded mb-4 overflow-x-scroll"
|
||||||
>
|
>
|
||||||
<table
|
<table
|
||||||
class="table table-sm sm:table-md table-compact rounded-none sm:rounded-md w-full bg-table border border-gray-800 m-auto"
|
class="table table-sm sm:table-md table-compact rounded-none sm:rounded w-full bg-table border border-gray-800 m-auto"
|
||||||
>
|
>
|
||||||
<thead>
|
<thead>
|
||||||
<TableHeader {columns} {sortOrders} {sortData} />
|
<TableHeader {columns} {sortOrders} {sortData} />
|
||||||
@ -475,7 +443,7 @@
|
|||||||
<div class="flex justify-center items-center h-80">
|
<div class="flex justify-center items-center h-80">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<label
|
<label
|
||||||
class="bg-secondary rounded-md h-14 w-14 flex justify-center items-center absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"
|
class="bg-secondary rounded h-14 w-14 flex justify-center items-center absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2"
|
||||||
>
|
>
|
||||||
<span class="loading loading-spinner loading-md text-gray-400"
|
<span class="loading loading-spinner loading-md text-gray-400"
|
||||||
></span>
|
></span>
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
||||||
import Infobox from "$lib/components/Infobox.svelte";
|
import Infobox from "$lib/components/Infobox.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
let etfProviderList = data?.getAllETFProviders;
|
let etfProviderList = data?.getAllETFProviders;
|
||||||
|
|
||||||
@ -83,42 +85,10 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title="Largest ETF Providers by Assets Under Management"
|
||||||
<meta name="viewport" content="width=device-width" />
|
description="A complete list of all the companies that provide exchange-traded funds (ETFs) that are actively traded on the U.S. stock market."
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} Largest
|
|
||||||
ETF Providers by Assets Under Management · Stocknear
|
|
||||||
</title>
|
|
||||||
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`A complete list of all the companies that provide exchange-traded funds (ETFs) that are actively traded on the U.S. stock market.`}
|
|
||||||
/>
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`Largest ETF Providers by Assets Under Management · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`A complete list of all the companies that provide exchange-traded funds (ETFs) that are actively traded on the U.S. stock market.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`Largest ETF Providers by Assets Under Management · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`A complete list of all the companies that provide exchange-traded funds (ETFs) that are actively traded on the U.S. stock market.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section class="w-full overflow-hidden m-auto">
|
<section class="w-full overflow-hidden m-auto">
|
||||||
<Infobox
|
<Infobox
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
||||||
import HoverStockChart from "$lib/components/HoverStockChart.svelte";
|
import HoverStockChart from "$lib/components/HoverStockChart.svelte";
|
||||||
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
let rawData = data?.getETFProviderData;
|
let rawData = data?.getETFProviderData;
|
||||||
@ -133,34 +134,10 @@
|
|||||||
let htmlOutput = generateStatementInfoHTML();
|
let htmlOutput = generateStatementInfoHTML();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title={`${etfProviderName} ETF List: Complete Guide to ${etfProviderData?.length} Exchange Traded Funds`}
|
||||||
<meta name="viewport" content="width=device-width" />
|
description={`Explore ${etfProviderName}'s complete ETF lineup of ${etfProviderData?.length} funds with $${abbreviateNumber(totalAssets)} AUM. Compare expense ratios, assets, and performance metrics to find the right ETF for your portfolio.`}
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{etfProviderData?.length}
|
|
||||||
{etfProviderName} ETFs - A Complete List · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta name="description" content={``} />
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${etfProviderName} (${etfProviderData?.length}) ETFs - A Complete List`}
|
|
||||||
/>
|
|
||||||
<meta property="og:description" content={``} />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${etfProviderName} (${etfProviderData?.length}) ETFs - A Complete List`}
|
|
||||||
/>
|
|
||||||
<meta name="twitter:description" content={``} />
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section class="w-full overflow-hidden m-auto">
|
<section class="w-full overflow-hidden m-auto">
|
||||||
{#if rawData?.length !== 0}
|
{#if rawData?.length !== 0}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
import { abbreviateNumber } from "$lib/utils";
|
import { abbreviateNumber } from "$lib/utils";
|
||||||
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
||||||
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
@ -85,36 +86,10 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title="New Launches of ETFs"
|
||||||
<meta name="viewport" content="width=device-width" />
|
description="A list of the 100 most recently launched ETFs on the US stock market, sorted by the inception date."
|
||||||
<title>
|
/>
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} 100
|
|
||||||
Newest ETFs · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`A list of the 100 most recently launched ETFs on the US stock market, sorted by the inception date.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta property="og:title" content={`100 Newest ETFs · Stocknear`} />
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`A list of the 100 most recently launched ETFs on the US stock market, sorted by the inception date.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta name="twitter:title" content={`100 Newest ETFs · Stocknear`} />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`A list of the 100 most recently launched ETFs on the US stock market, sorted by the inception date.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden pb-20 pt-5 px-4 lg:px-3"
|
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden pb-20 pt-5 px-4 lg:px-3"
|
||||||
|
|||||||
@ -44,12 +44,6 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- HEADER FOR BETTER SEO -->
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden pb-20 pt-5 px-4 lg:px-3"
|
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden pb-20 pt-5 px-4 lg:px-3"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import notifySound from "$lib/audio/options-flow-reader.mp3";
|
import notifySound from "$lib/audio/options-flow-reader.mp3";
|
||||||
import {
|
import { getCache, setCache, isOpen } from "$lib/store";
|
||||||
numberOfUnreadNotification,
|
|
||||||
getCache,
|
|
||||||
setCache,
|
|
||||||
isOpen,
|
|
||||||
} from "$lib/store";
|
|
||||||
|
|
||||||
import { cn } from "$lib/utils";
|
import { cn } from "$lib/utils";
|
||||||
import { onMount, onDestroy } from "svelte";
|
import { onMount, onDestroy } from "svelte";
|
||||||
@ -17,6 +12,7 @@
|
|||||||
import { Calendar } from "$lib/components/shadcn/calendar/index.js";
|
import { Calendar } from "$lib/components/shadcn/calendar/index.js";
|
||||||
import CalendarIcon from "lucide-svelte/icons/calendar";
|
import CalendarIcon from "lucide-svelte/icons/calendar";
|
||||||
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
import { page } from "$app/stores";
|
import { page } from "$app/stores";
|
||||||
|
|
||||||
@ -826,37 +822,10 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title="Options Flow Feed"
|
||||||
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0" />
|
description="Explore unusual options from big institutional traders and hedge funds."
|
||||||
|
/>
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} Options
|
|
||||||
Flow Feed · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Explore unusual options from big institutional traders and hedge funds.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta property="og:title" content={`Options Flow Feed · Stocknear`} />
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Explore unusual options from big institutional traders and hedge funds.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta name="twitter:title" content={`Options Flow Feed · Stocknear`} />
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Explore unusual options from big institutional traders and hedge funds.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<body class="overflow-y-auto">
|
<body class="overflow-y-auto">
|
||||||
<section
|
<section
|
||||||
|
|||||||
@ -77,6 +77,13 @@
|
|||||||
let activeIdx = 0;
|
let activeIdx = 0;
|
||||||
let subActiveIdx = 0;
|
let subActiveIdx = 0;
|
||||||
|
|
||||||
|
let expandedDescriptions: { [key: string]: boolean } = {};
|
||||||
|
|
||||||
|
function truncateText(text: string, maxLength: number = 250) {
|
||||||
|
if (text.length <= maxLength) return text;
|
||||||
|
return text.slice(0, maxLength) + "...";
|
||||||
|
}
|
||||||
|
|
||||||
function plotData() {
|
function plotData() {
|
||||||
const history = data?.getEggPrice?.history || [];
|
const history = data?.getEggPrice?.history || [];
|
||||||
const dateList = history.map((item) => item?.date ?? null);
|
const dateList = history.map((item) => item?.date ?? null);
|
||||||
@ -424,7 +431,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="text-sm sm:text-[1rem] text-gray-400">
|
<span class="text-sm sm:text-[1rem] text-gray-400">
|
||||||
{item.time_formatted} {item.location !== null ? `- ${item?.location}` : ''}
|
{item.time_formatted}
|
||||||
|
{item.location !== null
|
||||||
|
? `- ${item?.location}`
|
||||||
|
: ""}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -459,7 +469,9 @@
|
|||||||
<br />
|
<br />
|
||||||
|
|
||||||
{#each items as item, indexB}
|
{#each items as item, indexB}
|
||||||
<div class="flex flex-col items-start space-y-1 mb-6">
|
<div
|
||||||
|
class="flex flex-col items-start space-y-1 mb-6 border-b border-gray-800 pb-4"
|
||||||
|
>
|
||||||
<div class="flex flex-row items-center space-x-2">
|
<div class="flex flex-row items-center space-x-2">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<svg
|
<svg
|
||||||
@ -520,9 +532,25 @@
|
|||||||
{item?.sentiment}
|
{item?.sentiment}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="text-[1rem] ml-7 pt-2"
|
<span class="text-[1rem] ml-7 pt-2">
|
||||||
>{item.description}</span
|
{#if item.description.length > 150}
|
||||||
>
|
{expandedDescriptions[item.title]
|
||||||
|
? item.description
|
||||||
|
: truncateText(item.description)}
|
||||||
|
<button
|
||||||
|
on:click={() =>
|
||||||
|
(expandedDescriptions[item.title] =
|
||||||
|
!expandedDescriptions[item.title])}
|
||||||
|
class="text-blue-400 hover:text-blue-300 ml-1 font-medium"
|
||||||
|
>
|
||||||
|
{expandedDescriptions[item.title]
|
||||||
|
? "Read less"
|
||||||
|
: "Read more"}
|
||||||
|
</button>
|
||||||
|
{:else}
|
||||||
|
{item.description}
|
||||||
|
{/if}
|
||||||
|
</span>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
href={item?.link}
|
href={item?.link}
|
||||||
|
|||||||
@ -4,7 +4,10 @@
|
|||||||
const emailAddress = "support@stocknear.com";
|
const emailAddress = "support@stocknear.com";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SEO title="Privacy Policiy" description="" />
|
<SEO
|
||||||
|
title="Privacy Policy"
|
||||||
|
description="Learn about how Stocknear protects your privacy and handles your data. Our comprehensive privacy policy outlines our commitment to data security and transparency."
|
||||||
|
/>
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden pb-20 pt-5 px-4 lg:px-3"
|
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden pb-20 pt-5 px-4 lg:px-3"
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
import { GridComponent, TooltipComponent } from "echarts/components";
|
import { GridComponent, TooltipComponent } from "echarts/components";
|
||||||
import { CanvasRenderer } from "echarts/renderers";
|
import { CanvasRenderer } from "echarts/renderers";
|
||||||
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
use([LineChart, BarChart, GridComponent, TooltipComponent, CanvasRenderer]);
|
use([LineChart, BarChart, GridComponent, TooltipComponent, CanvasRenderer]);
|
||||||
|
|
||||||
@ -256,36 +257,12 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} Wallstreetbets
|
|
||||||
Tracker · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Track the stocks and discussion of Wallstreetbets in realtime.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta property="og:title" content={`Wallstreetbets Tracker · Stocknear`} />
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Track the stocks and discussion of Wallstreetbets in realtime.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
<SEO
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
title="Reddit Stock Tracker - WSB Analytics & Insights"
|
||||||
<meta name="twitter:title" content={`Wallstreetbets Tracker · Stocknear`} />
|
description="Track WallStreetBets stock discussions and trends in real-time. Get detailed analytics, sentiment analysis, and trading insights from Reddit's largest stock community."
|
||||||
<meta
|
/>
|
||||||
name="twitter:description"
|
|
||||||
content={`Track the stocks and discussion of Wallstreetbets in realtime.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden min-h-screen pb-20 pt-5 px-4 lg:px-3"
|
class="w-full max-w-3xl sm:max-w-[1400px] overflow-hidden min-h-screen pb-20 pt-5 px-4 lg:px-3"
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { enhance } from "$app/forms";
|
import { enhance } from "$app/forms";
|
||||||
import Input from "$lib/components/Input.svelte";
|
import Input from "$lib/components/Input.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
import toast from "svelte-french-toast";
|
import toast from "svelte-french-toast";
|
||||||
|
|
||||||
export let form;
|
export let form;
|
||||||
@ -57,16 +57,12 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- HEADER FOR BETTER SEO -->
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
<SEO
|
||||||
<title>Sign Up · Stocknear</title>
|
title="Sign Up"
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
description="Sign Up to Stocknear to become part of the largest trading community in the world."
|
||||||
<meta
|
/>
|
||||||
name="description"
|
|
||||||
content="Sign Up to stocknear to become part of the largest trading community in the world."
|
|
||||||
/>
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="relative w-full max-w-3xl mx-auto min-h-screen pb-40 sm:mt-10 {oauthLoading
|
class="relative w-full max-w-3xl mx-auto min-h-screen pb-40 sm:mt-10 {oauthLoading
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
import toast from "svelte-french-toast";
|
import toast from "svelte-french-toast";
|
||||||
import { pb } from "$lib/pocketbase";
|
import { pb } from "$lib/pocketbase";
|
||||||
import { goto } from "$app/navigation";
|
import { goto } from "$app/navigation";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
let loading = false;
|
let loading = false;
|
||||||
let email: String;
|
let email: String;
|
||||||
@ -27,16 +28,12 @@
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- HEADER FOR BETTER SEO -->
|
|
||||||
<svelte:head>
|
<SEO
|
||||||
<meta charset="utf-8" />
|
title="Reset Password"
|
||||||
<title>Reset Password · Stocknear</title>
|
description="Reset your password to sign in to your Stocknear account."
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
/>
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content="Reset your password to sign in to your stocknear account."
|
|
||||||
/>
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="flex flex-col items-center min-h-screen w-full max-w-3xl m-auto mt-40"
|
class="flex flex-col items-center min-h-screen w-full max-w-3xl m-auto mt-40"
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
import { LineChart, BarChart, GaugeChart } from "echarts/charts";
|
import { LineChart, BarChart, GaugeChart } from "echarts/charts";
|
||||||
import { GridComponent, TooltipComponent } from "echarts/components";
|
import { GridComponent, TooltipComponent } from "echarts/components";
|
||||||
import { CanvasRenderer } from "echarts/renderers";
|
import { CanvasRenderer } from "echarts/renderers";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
use([
|
use([
|
||||||
@ -451,42 +452,12 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$stockTicker}) Forecast Overview · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Forecast Overview · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
<SEO
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
title={`${$displayCompanyName} (${$stockTicker}) Forecast Overview · Stocknear`}
|
||||||
<meta
|
description={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
||||||
name="twitter:title"
|
/>
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Forecast Overview · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section class="w-full bg-default overflow-hidden text-white h-full">
|
<section class="w-full bg-default overflow-hidden text-white h-full">
|
||||||
<div class="w-full flex h-full overflow-hidden">
|
<div class="w-full flex h-full overflow-hidden">
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
||||||
import { goto } from "$app/navigation";
|
import { goto } from "$app/navigation";
|
||||||
import Infobox from "$lib/components/Infobox.svelte";
|
import Infobox from "$lib/components/Infobox.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
let analystRating = data?.getAnalystRating ?? {};
|
let analystRating = data?.getAnalystRating ?? {};
|
||||||
@ -194,42 +195,13 @@
|
|||||||
$: charNumber = $screenWidth < 640 ? 20 : 30;
|
$: charNumber = $screenWidth < 640 ? 20 : 30;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$stockTicker}) Analyst Ratings · Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Analyst Ratings · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
<SEO
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
title={`${$displayCompanyName} (${$stockTicker}) Analyst Ratings · Stocknear`}
|
||||||
<meta
|
description={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
||||||
name="twitter:title"
|
/>
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Analyst Ratings · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`A list of analyst ratings for Advanced Micro Devices (AMD) stock. See upgrades, downgrades, price targets and more from top Wall Street stock analysts.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="bg-default overflow-hidden text-white h-full min-h-screen mb-40 sm:mb-0 w-full"
|
class="bg-default overflow-hidden text-white h-full min-h-screen mb-40 sm:mb-0 w-full"
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
import { Button } from "$lib/components/shadcn/button/index.js";
|
import { Button } from "$lib/components/shadcn/button/index.js";
|
||||||
import { goto } from "$app/navigation";
|
import { goto } from "$app/navigation";
|
||||||
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
import ArrowLogo from "lucide-svelte/icons/move-up-right";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
@ -269,43 +269,12 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$stockTicker}) Historical Stock Price Data ·
|
|
||||||
Stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Get a complete stock price history for ${$stockTicker}, starting from its first trading day. Includes open, high, low, close and volume.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
|
||||||
<meta
|
|
||||||
property="og:title"
|
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Historical Stock Price Data · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Get a complete stock price history for NVIDIA, starting from its first trading day. Includes open, high, low, close and volume.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
<SEO
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
title={`${$displayCompanyName} (${$stockTicker}) Stock Price History · Stocknear`}
|
||||||
<meta
|
description={`Get a complete stock price history for ${$displayCompanyName} (${$stockTicker}), starting from its first trading day. Includes open, high, low, close and volume.`}
|
||||||
name="twitter:title"
|
/>
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) Historical Stock Price Data · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Get a complete stock price history for NVIDIA, starting from its first trading day. Includes open, high, low, close and volume.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="bg-default overflow-hidden text-white h-full min-h-screen mb-20 sm:mb-0 w-full mt-2 sm:mt-0"
|
class="bg-default overflow-hidden text-white h-full min-h-screen mb-20 sm:mb-0 w-full mt-2 sm:mt-0"
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
import TableHeader from "$lib/components/Table/TableHeader.svelte";
|
||||||
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
import UpgradeToPro from "$lib/components/UpgradeToPro.svelte";
|
||||||
import Infobox from "$lib/components/Infobox.svelte";
|
import Infobox from "$lib/components/Infobox.svelte";
|
||||||
|
import SEO from "$lib/components/SEO.svelte";
|
||||||
export let data;
|
export let data;
|
||||||
|
|
||||||
let rawData = data?.getSenateTrading;
|
let rawData = data?.getSenateTrading;
|
||||||
@ -179,43 +179,11 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<title>
|
|
||||||
{$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""}
|
|
||||||
{$displayCompanyName} ({$stockTicker}) US Congress & Senate Trading ·
|
|
||||||
stocknear
|
|
||||||
</title>
|
|
||||||
<meta
|
|
||||||
name="description"
|
|
||||||
content={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$stockTicker}) from democrates and republicans.`}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Other meta tags -->
|
<SEO
|
||||||
<meta
|
title={`${$displayCompanyName} (${$stockTicker}) US Congress & Senate Trading · Stocknear`}
|
||||||
property="og:title"
|
description={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$stockTicker}) from democrates and republicans.`}
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) US Congress & Senate Trading · Stocknear`}
|
/>
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
property="og:description"
|
|
||||||
content={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$stockTicker}) from democrates and republicans.`}
|
|
||||||
/>
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
|
||||||
|
|
||||||
<!-- Twitter specific meta tags -->
|
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
|
||||||
<meta
|
|
||||||
name="twitter:title"
|
|
||||||
content={`${$displayCompanyName} (${$stockTicker}) US Congress & Senate Trading · Stocknear`}
|
|
||||||
/>
|
|
||||||
<meta
|
|
||||||
name="twitter:description"
|
|
||||||
content={`Get the latest US congress & senate trading of ${$displayCompanyName} (${$stockTicker}) from democrates and republicans.`}
|
|
||||||
/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
|
||||||
</svelte:head>
|
|
||||||
|
|
||||||
<section
|
<section
|
||||||
class="w-full bg-default overflow-hidden min-h-screen text-white h-full"
|
class="w-full bg-default overflow-hidden min-h-screen text-white h-full"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user