SYMBOL INDEX (171 symbols across 44 files) FILE: .scripts/update.js constant TIMEZONE_OFFSET (line 9) | const TIMEZONE_OFFSET = 9; function insertWord (line 19) | async function insertWord(answers, answer) { function writeCommit (line 29) | async function writeCommit(data) { function getMidnightDate (line 59) | function getMidnightDate() { function main (line 67) | async function main() { FILE: components/Alert.tsx function Alert (line 3) | function Alert() { type AlertOptions (line 20) | interface AlertOptions { FILE: components/App.tsx type Props (line 18) | interface Props { function App (line 29) | function App(props: Props) { FILE: components/Board.tsx type Props (line 8) | interface Props { function Board (line 13) | function Board(props: Props) { FILE: components/Container.tsx function Container (line 3) | function Container(props: PropsWithChildren<{}>) { FILE: components/EmojiRain.tsx constant CUSTOM_EVENT_NAME (line 3) | const CUSTOM_EVENT_NAME = "emoji-rain"; function EmojiRain (line 5) | function EmojiRain() { function rainEmoji (line 98) | function rainEmoji(emoji: string) { type RangeValue (line 103) | interface RangeValue { function interpolate (line 108) | function interpolate(current: number, from: RangeValue, to: RangeValue) { function randomBetween (line 122) | function randomBetween(min: number, max: number) { class ElementPosition (line 128) | class ElementPosition { method constructor (line 136) | constructor( method updateY (line 150) | updateY(velocity: number) { FILE: components/EmojiSelector.tsx type Props (line 4) | interface Props { function EmojiSelector (line 8) | function EmojiSelector(props: Props) { function EmojiBar (line 35) | function EmojiBar({ onSelect }) { FILE: components/Header.tsx type Props (line 7) | interface Props { function Header (line 24) | function Header(props: Props) { FILE: components/HeadingWithNum.tsx type Props (line 1) | interface Props { function HeadingWithNum (line 6) | function HeadingWithNum(props: Props) { FILE: components/HelpModal.tsx type Props (line 5) | interface Props { function HelpModal (line 13) | function HelpModal(props: Props) { FILE: components/Keyboard.tsx type Props (line 7) | interface Props { function Keyboard (line 16) | function Keyboard(props: Props) { FILE: components/KeyboardButton.tsx type Props (line 4) | type Props = { function KeyboardButton (line 9) | function KeyboardButton(props: Props) { FILE: components/Link.tsx function Link (line 4) | function Link(props: ComponentProps) { FILE: components/LiveStatsModal.tsx type Props (line 5) | interface Props { constant GRAPH_WIDTH_MIN_RATIO (line 11) | const GRAPH_WIDTH_MIN_RATIO = 10; function LiveStatsModal (line 13) | function LiveStatsModal(props: Props) { FILE: components/Modal.tsx type Props (line 7) | interface Props { function Modal (line 13) | function Modal(props: Props) { type ModalState (line 55) | type ModalState = "help" | "stats" | "settings"; type ModalStateReturn (line 57) | type ModalStateReturn = [ModalState, (state: ModalState) => void, () => ... function useModalState (line 59) | function useModalState(game: Game, stats: GameStats): ModalStateReturn { FILE: components/SettingsModal.tsx type Props (line 18) | interface Props { function SettingsModal (line 25) | function SettingsModal(props: Props) { type AdminToolsProps (line 100) | interface AdminToolsProps { function AdminTools (line 106) | function AdminTools(props: AdminToolsProps) { type PlayerToolsProps (line 131) | interface PlayerToolsProps { function PlayerTools (line 135) | function PlayerTools(props: PlayerToolsProps) { function AdditionalInformation (line 154) | function AdditionalInformation() { type SwitchProps (line 195) | interface SwitchProps { function Switch (line 205) | function Switch(props: SwitchProps) { function generateLieBoxes (line 263) | function generateLieBoxes(): ForcedResult[] { FILE: components/SponsorshipFooter.tsx function SponsorshipFooter (line 1) | function SponsorshipFooter() { FILE: components/StatsModal.tsx type Props (line 20) | interface Props { type Window (line 29) | interface Window { constant GRAPH_WIDTH_MIN_RATIO (line 34) | const GRAPH_WIDTH_MIN_RATIO = 10; function StatsModal (line 36) | function StatsModal(props: Props) { function WordDefinition (line 411) | function WordDefinition({ answer }) { function TimeCounter (line 453) | function TimeCounter({ time }: { time: ReturnType { function fetchFromKbbi (line 83) | async function fetchFromKbbi(word: string): Promise { FILE: pages/api/live.ts function handler (line 10) | async function handler( FILE: pages/api/words.ts function handler (line 3) | async function handler( FILE: pages/arsip/[num].tsx type Props (line 20) | interface Props { function Arsip (line 40) | function Arsip(props: Props) { FILE: pages/arsip/index.tsx function Arsip (line 13) | function Arsip({ nums }) { FILE: pages/bantuan.tsx function Debug (line 11) | function Debug(props: { hashed: string }) { function NewSiteWarning (line 129) | function NewSiteWarning() { FILE: pages/index.tsx type Props (line 28) | interface Props { constant VALID_STATS_DELAY_MS (line 49) | const VALID_STATS_DELAY_MS = 5000; function Home (line 51) | function Home(props: Props) { FILE: pages/lawan.tsx type Props (line 41) | interface Props { function Lawan (line 45) | function Lawan({ words }: Props) { type MainProps (line 176) | interface MainProps { function Main (line 181) | function Main({ words, config }: MainProps) { type GameBarProps (line 266) | interface GameBarProps { function LiveGameBar (line 272) | function LiveGameBar(props: GameBarProps) { FILE: sentry.client.config.js constant SENTRY_DSN (line 7) | const SENTRY_DSN = process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SEN... FILE: sentry.server.config.js constant SENTRY_DSN (line 3) | const SENTRY_DSN = process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SEN... FILE: utils/__tests__/game.test.js class LocalStorageMock (line 13) | class LocalStorageMock { method constructor (line 14) | constructor() { method clear (line 18) | clear() { method getItem (line 22) | getItem(key) { method setItem (line 26) | setItem(key, value) { method removeItem (line 30) | removeItem(key) { FILE: utils/animation.ts function confetti (line 3) | function confetti(duration: number = 3) { FILE: utils/answers.ts function getAllAnswers (line 4) | function getAllAnswers() { FILE: utils/browser.ts function checkNativeShareSupport (line 3) | function checkNativeShareSupport() { method getItem (line 30) | getItem(key: string): string | null { method setItem (line 41) | setItem(key: string, value: string): void { method removeItem (line 48) | removeItem(key: string): void { method clear (line 55) | clear(): void { method key (line 62) | key(index: number): string | null { method length (line 69) | get length(): number { function isStorageEnabled (line 80) | function isStorageEnabled() { type ShareOptions (line 94) | interface ShareOptions { function shareLink (line 100) | function shareLink(url: string, options: ShareOptions) { function shareText (line 104) | function shareText(text: string, options: ShareOptions) { function share (line 108) | function share(data: ShareData, options: ShareOptions) { FILE: utils/codec.ts function encode (line 1) | function encode(word: string): string { function decode (line 15) | function decode(hash: string): string { constant HASHED_SEPARATOR (line 29) | const HASHED_SEPARATOR = "::"; function encodeHashed (line 31) | function encodeHashed( function decodeHashed (line 41) | function decodeHashed(hashed: string) { FILE: utils/constants.ts constant LAST_HASH_KEY (line 1) | const LAST_HASH_KEY = "katla:lastHash"; constant LAST_SESSION_RESET_KEY (line 2) | const LAST_SESSION_RESET_KEY = "katla:lastSessionReset"; constant GAME_LIVE_STATE_KEY (line 3) | const GAME_LIVE_STATE_KEY = "katla:liveGameState"; constant GAME_STATE_KEY (line 4) | const GAME_STATE_KEY = "katla:gameState"; constant GAME_STATS_KEY (line 5) | const GAME_STATS_KEY = "katla:gameStats"; constant INVALID_WORDS_KEY (line 6) | const INVALID_WORDS_KEY = "katla:invalidWords"; constant SHAKE_ANIMATION_DURATION_MS (line 9) | const SHAKE_ANIMATION_DURATION_MS = 600; constant FLIP_ANIMATION_DURATION_MS (line 10) | const FLIP_ANIMATION_DURATION_MS = 800; constant FLIP_ANIMATION_DELAY_MS (line 11) | const FLIP_ANIMATION_DELAY_MS = 400; FILE: utils/formatter.ts function formatDate (line 1) | function formatDate(d: Date) { function formatTime (line 8) | function formatTime(d: Date) { function pad0 (line 15) | function pad0(n: number): string { FILE: utils/game.ts function useGame (line 32) | function useGame(hashed: string, enableStorage: boolean = true): Game { function useRemainingTime (line 187) | function useRemainingTime() { function getHoursDiff (line 219) | function getHoursDiff(date: Date) { function getMinutesDiff (line 227) | function getMinutesDiff(date: Date) { function getSecondsDiff (line 233) | function getSecondsDiff(date: Date) { function isGameFinished (line 237) | function isGameFinished(game: Game) { function getTotalWin (line 244) | function getTotalWin(stats: GameStats) { function getTotalPlay (line 250) | function getTotalPlay(stats: GameStats) { function verifyStreak (line 254) | function verifyStreak(lastCompletedDate: number | null): boolean { type AnswerStates (line 269) | type AnswerStates = [ function getAnswerStates (line 277) | function getAnswerStates( function checkHardModeAnswer (line 309) | function checkHardModeAnswer( function generateMigrationLink (line 343) | function generateMigrationLink(hash: string, stats: GameStats): string { FILE: utils/liveGame.ts type LiveGameState (line 22) | interface LiveGameState extends GameState { type LiveGame (line 26) | interface LiveGame extends Game { constant NEW_GAME_DELAY_MS (line 38) | const NEW_GAME_DELAY_MS = 5000; function useLiveGame (line 40) | function useLiveGame(words: string[]): LiveGame { function generateRoomId (line 223) | function generateRoomId(auth: string) { type Scores (line 231) | type Scores = Array; function getUserScores (line 233) | function getUserScores(answer: string, hash: string): Scores { function getTotalScore (line 246) | function getTotalScore(scores: Scores) { function getEmojiFromScore (line 250) | function getEmojiFromScore( function shareInviteLink (line 265) | function shareInviteLink(config: LiveConfig, cb?: () => void) { FILE: utils/message.ts function getCongratulationMessage (line 8) | function getCongratulationMessage(attempt: number, stats: GameStats) { function getFailureMessage (line 97) | function getFailureMessage( function randomElement (line 122) | function randomElement(array: T[]): T { constant LOVE_HASHES (line 127) | const LOVE_HASHES = [ constant EID_HASHES (line 140) | const EID_HASHES = [ function handleSubmitWord (line 155) | function handleSubmitWord(game: Game, userAnswer: string) { type GameCompleteOptions (line 167) | interface GameCompleteOptions { function handleGameComplete (line 174) | function handleGameComplete(options: GameCompleteOptions) { function isEidMessage (line 192) | function isEidMessage(answer: string) { FILE: utils/tracking.ts type Window (line 2) | interface Window { function trackEvent (line 7) | function trackEvent( FILE: utils/types.ts type AnswerState (line 3) | type AnswerState = "c" | "e" | "w"; type ForcedResult (line 4) | type ForcedResult = [column: number, state: AnswerState]; type GameState (line 6) | interface GameState { type GameStats (line 17) | interface GameStats { type Game (line 31) | interface Game { type MigrationData (line 44) | interface MigrationData { type LiveConfig (line 50) | interface LiveConfig { type StartEvent (line 56) | interface StartEvent { type EmojiEvent (line 62) | interface EmojiEvent { type WinEvent (line 68) | interface WinEvent { type LoseEvent (line 73) | interface LoseEvent { type LiveEvent (line 78) | type LiveEvent = StartEvent | EmojiEvent | WinEvent | LoseEvent; FILE: utils/useStoredState.ts function createStoredState (line 4) | function createStoredState(storageKey: string) {