SYMBOL INDEX (200 symbols across 57 files) FILE: app/(root)/about/page.tsx function AboutPage (line 21) | function AboutPage() { function FeatureCard (line 106) | function FeatureCard({ icon, title, desc, color }: any) { function SocialButton (line 122) | function SocialButton({ href, icon, label }: any) { FILE: app/(root)/api-docs/page.tsx function ApiDocsPage (line 24) | function ApiDocsPage() { function Badge (line 204) | function Badge({ children, color }: { children: React.ReactNode, color: ... function JobCard (line 217) | function JobCard({ icon, title, trigger, desc, color }: any) { function StackItem (line 235) | function StackItem({ title, desc, url }: any) { FILE: app/(root)/help/page.tsx function HelpPage (line 17) | function HelpPage() { function HelpCard (line 113) | function HelpCard({ icon, title, desc, link, linkText }: any) { FILE: app/(root)/stocks/[symbol]/page.tsx function StockDetails (line 17) | async function StockDetails({ params }: StockDetailsPageProps) { FILE: app/(root)/terms/page.tsx function TermsPage (line 9) | function TermsPage() { function PromiseItem (line 89) | function PromiseItem({ text }: { text: string }) { FILE: app/(root)/watchlist/page.tsx function WatchlistPage (line 14) | async function WatchlistPage() { FILE: app/layout.tsx function RootLayout (line 22) | function RootLayout({ FILE: components/DonatePopup.tsx constant DONATE_POPUP_KEY (line 14) | const DONATE_POPUP_KEY = 'opendevsociety-donate-popup-dismissed'; constant DONATE_POPUP_DELAY (line 15) | const DONATE_POPUP_DELAY = 3000; constant DONATE_POPUP_COOLDOWN (line 16) | const DONATE_POPUP_COOLDOWN = 24 * 60 * 60 * 1000; constant GITHUB_SPONSOR_URL (line 18) | const GITHUB_SPONSOR_URL = 'https://github.com/sponsors/ravixalgorithm'; function DonatePopup (line 20) | function DonatePopup() { FILE: components/OpenDevSocietyBranding.tsx type OpenDevSocietyBrandingProps (line 145) | type OpenDevSocietyBrandingProps = { FILE: components/SearchCommand.tsx function SearchCommand (line 11) | function SearchCommand({ renderAs = 'button', label = 'Add stock', initi... FILE: components/SirayBanner.tsx function SirayBanner (line 8) | function SirayBanner() { FILE: components/TradingViewWidget.tsx type TradingViewWidgetProps (line 9) | interface TradingViewWidgetProps { FILE: components/WatchlistButton.tsx type WatchlistButtonProps (line 6) | interface WatchlistButtonProps { FILE: components/forms/CountrySelectField.tsx type CountrySelectProps (line 25) | type CountrySelectProps = { FILE: components/ui/avatar.tsx function Avatar (line 8) | function Avatar({ function AvatarImage (line 24) | function AvatarImage({ function AvatarFallback (line 37) | function AvatarFallback({ FILE: components/ui/button.tsx function Button (line 37) | function Button({ FILE: components/ui/command.tsx function Command (line 16) | function Command({ function CommandDialog (line 32) | function CommandDialog({ function CommandInput (line 63) | function CommandInput({ function CommandList (line 85) | function CommandList({ function CommandEmpty (line 101) | function CommandEmpty({ function CommandGroup (line 113) | function CommandGroup({ function CommandSeparator (line 129) | function CommandSeparator({ function CommandItem (line 142) | function CommandItem({ function CommandShortcut (line 158) | function CommandShortcut({ FILE: components/ui/dialog.tsx function Dialog (line 9) | function Dialog({ function DialogTrigger (line 15) | function DialogTrigger({ function DialogPortal (line 21) | function DialogPortal({ function DialogClose (line 27) | function DialogClose({ function DialogOverlay (line 33) | function DialogOverlay({ function DialogContent (line 49) | function DialogContent({ function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div... function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div... function DialogTitle (line 106) | function DialogTitle({ function DialogDescription (line 119) | function DialogDescription({ FILE: components/ui/dropdown-menu.tsx function DropdownMenu (line 9) | function DropdownMenu({ function DropdownMenuPortal (line 15) | function DropdownMenuPortal({ function DropdownMenuTrigger (line 23) | function DropdownMenuTrigger({ function DropdownMenuContent (line 34) | function DropdownMenuContent({ function DropdownMenuGroup (line 54) | function DropdownMenuGroup({ function DropdownMenuItem (line 62) | function DropdownMenuItem({ function DropdownMenuCheckboxItem (line 85) | function DropdownMenuCheckboxItem({ function DropdownMenuRadioGroup (line 111) | function DropdownMenuRadioGroup({ function DropdownMenuRadioItem (line 122) | function DropdownMenuRadioItem({ function DropdownMenuLabel (line 146) | function DropdownMenuLabel({ function DropdownMenuSeparator (line 166) | function DropdownMenuSeparator({ function DropdownMenuShortcut (line 179) | function DropdownMenuShortcut({ function DropdownMenuSub (line 195) | function DropdownMenuSub({ function DropdownMenuSubTrigger (line 201) | function DropdownMenuSubTrigger({ function DropdownMenuSubContent (line 225) | function DropdownMenuSubContent({ FILE: components/ui/input.tsx function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu... FILE: components/ui/label.tsx function Label (line 8) | function Label({ FILE: components/ui/popover.tsx function Popover (line 8) | function Popover({ function PopoverTrigger (line 14) | function PopoverTrigger({ function PopoverContent (line 20) | function PopoverContent({ function PopoverAnchor (line 42) | function PopoverAnchor({ FILE: components/ui/select.tsx function Select (line 9) | function Select({ function SelectGroup (line 15) | function SelectGroup({ function SelectValue (line 21) | function SelectValue({ function SelectTrigger (line 27) | function SelectTrigger({ function SelectContent (line 53) | function SelectContent({ function SelectLabel (line 88) | function SelectLabel({ function SelectItem (line 101) | function SelectItem({ function SelectSeparator (line 125) | function SelectSeparator({ function SelectScrollUpButton (line 138) | function SelectScrollUpButton({ function SelectScrollDownButton (line 156) | function SelectScrollDownButton({ FILE: components/watchlist/AlertsPanel.tsx type AlertsPanelProps (line 8) | interface AlertsPanelProps { function AlertsPanel (line 13) | function AlertsPanel({ alerts, onRefresh }: AlertsPanelProps) { FILE: components/watchlist/CreateAlertModal.tsx type CreateAlertModalProps (line 12) | interface CreateAlertModalProps { function CreateAlertModal (line 24) | function CreateAlertModal({ FILE: components/watchlist/NewsGrid.tsx type NewsGridProps (line 8) | interface NewsGridProps { function NewsGrid (line 12) | function NewsGrid({ news }: NewsGridProps) { FILE: components/watchlist/TradingViewWatchlist.tsx type TradingViewWatchlistProps (line 6) | interface TradingViewWatchlistProps { function TradingViewWatchlist (line 10) | function TradingViewWatchlist({ symbols }: TradingViewWatchlistProps) { FILE: components/watchlist/WatchlistManager.tsx type WatchlistManagerProps (line 10) | interface WatchlistManagerProps { function WatchlistManager (line 15) | function WatchlistManager({ initialItems, userId }: WatchlistManagerProp... FILE: components/watchlist/WatchlistStockChip.tsx type WatchlistStockChipProps (line 9) | interface WatchlistStockChipProps { function WatchlistStockChip (line 14) | function WatchlistStockChip({ symbol, userId }: WatchlistStockChipProps) { FILE: components/watchlist/WatchlistTable.tsx type WatchlistTableProps (line 12) | interface WatchlistTableProps { function WatchlistTable (line 18) | function WatchlistTable({ data, userId, onRefresh }: WatchlistTableProps) { FILE: database/models/alert.model.ts type IAlert (line 3) | interface IAlert extends Document { FILE: database/models/watchlist.model.ts type WatchlistItem (line 3) | interface WatchlistItem extends Document { FILE: database/mongoose.ts constant MONGODB_URI (line 3) | const MONGODB_URI = process.env.MONGODB_URI; FILE: hooks/useDebounce.ts function useDebounce (line 5) | function useDebounce(callback: () => void, delay: number) { FILE: lib/actions/alert.actions.ts function createAlert (line 8) | async function createAlert(params: { function getUserAlerts (line 30) | async function getUserAlerts(userId: string) { function deleteAlert (line 42) | async function deleteAlert(alertId: string) { function toggleAlert (line 55) | async function toggleAlert(alertId: string, active: boolean) { FILE: lib/actions/finnhub.actions.ts constant FINNHUB_BASE_URL (line 7) | const FINNHUB_BASE_URL = 'https://finnhub.io/api/v1'; constant NEXT_PUBLIC_FINNHUB_API_KEY (line 8) | const NEXT_PUBLIC_FINNHUB_API_KEY = process.env.NEXT_PUBLIC_FINNHUB_API_... function fetchJSON (line 10) | async function fetchJSON(url: string, revalidateSeconds?: number): Pr... function getQuote (line 25) | async function getQuote(symbol: string) { function getCompanyProfile (line 37) | async function getCompanyProfile(symbol: string) { function getWatchlistData (line 49) | async function getWatchlistData(symbols: string[]) { function getNews (line 76) | async function getNews(symbols?: string[]): Promise { FILE: lib/actions/watchlist.actions.ts function addToWatchlist (line 9) | async function addToWatchlist(userId: string, symbol: string, company: s... function removeFromWatchlist (line 33) | async function removeFromWatchlist(userId: string, symbol: string) { function getUserWatchlist (line 46) | async function getUserWatchlist(userId: string) { function isStockInWatchlist (line 58) | async function isStockInWatchlist(userId: string, symbol: string) { function getWatchlistSymbolsByEmail (line 71) | async function getWatchlistSymbolsByEmail(email: string): Promise constant NEWS_SUMMARY_EMAIL_TEMPLATE (line 168) | const NEWS_SUMMARY_EMAIL_TEMPLATE = ` constant STOCK_ALERT_UPPER_EMAIL_TEMPLATE (line 307) | const STOCK_ALERT_UPPER_EMAIL_TEMPLATE = ` constant STOCK_ALERT_LOWER_EMAIL_TEMPLATE (line 515) | const STOCK_ALERT_LOWER_EMAIL_TEMPLATE = ` constant VOLUME_ALERT_EMAIL_TEMPLATE (line 724) | const VOLUME_ALERT_EMAIL_TEMPLATE = ` constant INACTIVE_USER_REMINDER_EMAIL_TEMPLATE (line 944) | const INACTIVE_USER_REMINDER_EMAIL_TEMPLATE = ` FILE: lib/utils.ts function cn (line 4) | function cn(...inputs: ClassValue[]) { function delay (line 24) | function delay(ms: number) { function formatMarketCapValue (line 29) | function formatMarketCapValue(marketCapUsd: number): string { function formatNumber (line 122) | function formatNumber(num: number): string { function formatSymbolForTradingView (line 157) | function formatSymbolForTradingView(symbol: string): string { FILE: middleware/index.ts function middleware (line 4) | async function middleware(request: NextRequest) { FILE: scripts/check-env.mjs function maskValue (line 106) | function maskValue(value) { FILE: scripts/check_db_name.js function checkDBs (line 11) | async function checkDBs() { FILE: scripts/create-kit-tag.mjs constant KIT_API_KEY (line 5) | const KIT_API_KEY = process.env.KIT_API_KEY; function createTag (line 7) | async function createTag() { FILE: scripts/inspect-user.mjs function checkSchema (line 6) | async function checkSchema() { FILE: scripts/list-kit-forms.mjs constant KIT_API_KEY (line 5) | const KIT_API_KEY = process.env.KIT_API_KEY; function listForms (line 7) | async function listForms() { FILE: scripts/migrate-users-to-kit.mjs constant MONGODB_URI (line 12) | const MONGODB_URI = process.env.MONGODB_URI; constant KIT_API_KEY (line 13) | const KIT_API_KEY = process.env.KIT_API_KEY; constant KIT_WELCOME_FORM_ID (line 14) | const KIT_WELCOME_FORM_ID = process.env.KIT_WELCOME_FORM_ID; function addSubscriberToKit (line 22) | async function addSubscriberToKit(email, firstName) { function runMigration (line 63) | async function runMigration() { FILE: scripts/resolve_srv.js constant SRV_ADDR (line 11) | const SRV_ADDR = '_mongodb._tcp.cluster0.scwvh5g.mongodb.net'; function getStandardConnectionString (line 13) | async function getStandardConnectionString() { FILE: scripts/seed-inactive-user.mjs function run (line 17) | async function run() { FILE: scripts/test-db.mjs function main (line 17) | async function main() { FILE: scripts/test-db.ts function main (line 3) | async function main() { FILE: scripts/test-kit.mjs constant KIT_API_KEY (line 5) | const KIT_API_KEY = process.env.KIT_API_KEY; constant KIT_API_SECRET (line 6) | const KIT_API_SECRET = process.env.KIT_API_SECRET; function runTest (line 16) | async function runTest() { FILE: scripts/verify-watchlist.mjs constant MOCK_USER_ID (line 8) | const MOCK_USER_ID = 'verify-user-' + Date.now(); constant SYMBOL (line 9) | const SYMBOL = 'AAPL'; constant COMPANY (line 10) | const COMPANY = 'Apple Inc'; function verifyFinnhub (line 29) | async function verifyFinnhub() { function verifyDB (line 40) | async function verifyDB() { function main (line 48) | async function main() { FILE: types/global.d.ts type SignInFormData (line 2) | type SignInFormData = { type SignUpFormData (line 7) | type SignUpFormData = { type CountrySelectProps (line 17) | type CountrySelectProps = { type FormInputProps (line 25) | type FormInputProps = { type Option (line 37) | type Option = { type SelectFieldProps (line 42) | type SelectFieldProps = { type FooterLinkProps (line 52) | type FooterLinkProps = { type SearchCommandProps (line 58) | type SearchCommandProps = { type WelcomeEmailData (line 64) | type WelcomeEmailData = { type User (line 70) | type User = { type Stock (line 76) | type Stock = { type StockWithWatchlistStatus (line 83) | type StockWithWatchlistStatus = Stock & { type FinnhubSearchResult (line 87) | type FinnhubSearchResult = { type FinnhubSearchResponse (line 94) | type FinnhubSearchResponse = { type StockDetailsPageProps (line 99) | type StockDetailsPageProps = { type WatchlistButtonProps (line 105) | type WatchlistButtonProps = { type QuoteData (line 114) | type QuoteData = { type ProfileData (line 119) | type ProfileData = { type FinancialsData (line 124) | type FinancialsData = { type SelectedStock (line 128) | type SelectedStock = { type WatchlistTableProps (line 134) | type WatchlistTableProps = { type StockWithData (line 138) | type StockWithData = { type AlertsListProps (line 151) | type AlertsListProps = { type MarketNewsArticle (line 155) | type MarketNewsArticle = { type WatchlistNewsProps (line 167) | type WatchlistNewsProps = { type SearchCommandProps (line 171) | type SearchCommandProps = { type AlertData (line 180) | type AlertData = { type AlertModalProps (line 188) | type AlertModalProps = { type RawNewsArticle (line 196) | type RawNewsArticle = { type Alert (line 208) | type Alert = {