Buckets:
| import { createAsync } from "@solidjs/router" | |
| import { createMemo } from "solid-js" | |
| import { github } from "~/lib/github" | |
| import { config } from "~/config" | |
| import { useLanguage } from "~/context/language" | |
| import { useI18n } from "~/context/i18n" | |
| export function Footer() { | |
| const language = useLanguage() | |
| const i18n = useI18n() | |
| const community = createMemo(() => { | |
| const locale = language.locale() | |
| return locale === "zh" || locale === "zht" | |
| ? ({ key: "footer.feishu", link: language.route("/feishu") } as const) | |
| : ({ key: "footer.discord", link: language.route("/discord") } as const) | |
| }) | |
| const githubData = createAsync(() => github()) | |
| const starCount = createMemo(() => | |
| githubData()?.stars | |
| ? new Intl.NumberFormat(language.tag(language.locale()), { | |
| notation: "compact", | |
| compactDisplay: "short", | |
| }).format(githubData()!.stars!) | |
| : config.github.starsFormatted.compact, | |
| ) | |
| return ( | |
| <footer data-component="footer"> | |
| <div data-slot="cell"> | |
| <a href={config.github.repoUrl} target="_blank"> | |
| {i18n.t("footer.github")} <span>[{starCount()}]</span> | |
| </a> | |
| </div> | |
| <div data-slot="cell"> | |
| <a href={language.route("/docs")}>{i18n.t("footer.docs")}</a> | |
| </div> | |
| <div data-slot="cell"> | |
| <a href={language.route("/changelog")}>{i18n.t("footer.changelog")}</a> | |
| </div> | |
| <div data-slot="cell"> | |
| <a href={community().link}>{i18n.t(community().key)}</a> | |
| </div> | |
| <div data-slot="cell"> | |
| <a href={config.social.twitter}>{i18n.t("footer.x")}</a> | |
| </div> | |
| </footer> | |
| ) | |
| } | |
Xet Storage Details
- Size:
- 1.64 kB
- Xet hash:
- 16f8ccbee0f5f2410707f81cc3ff6105b0ea327354763fb05f54e96051df0917
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.