From bebd9b06ec6d33729737b9bbb9eb2207064f077b Mon Sep 17 00:00:00 2001
From: OpenClaw
+ ©{year} PKGX INC. All Rights Reserved.
+ No packages found Recent searches
Mash up millions of open source packages into monstrously powerful scripts.
-
-
Bash is ancient. Write scripts in any language you want and trivially distribute them to the whole world.
-
-
+ We're a community of thousands of passionate computer users who want to make the most of the fruits of open source software.
+
No pull request required! We index the fork graph.
-
-
-
-
+ Even this site is Open Source! If you have ideas for improving it, why not give it a go?{" "}
+
+ github.com/pkgxdev/www
+
+ What jewel will you discover today?
+ Say goodbye to the days of scavenging through cluttered docs.
+ We believe command line interfaces and graphical user interfaces are complements and should not necessarily share the same features.
+
+ Our cli is precise and powerful where our gui is optimized for discovery and batch operations.
+
Be part of the future of open source. PKGX built tea, and now you can join the movement by participating in the official CoinList sale.
-
-
-
Open source powers the apps, tools, and platforms you use every day — but the people who build it rarely get rewarded. tea changes that.
-
-
+ The tea association has partnered with CoinList — trusted by millions of investors — to launch the tea token sale.
+
+ tea was built by PKGX, trusted across the developer ecosystem. The tea association ensures transparent, community-driven governance.
+ This is your chance to support the future of open source — and to be early.
The tea token sale is offered through CoinList. Availability subject to regulations and eligibility. Nothing here is investment advice.
-
- Get the latest updates about tea and the future of open source development.
+ By submitting your email, you consent with our{" "}
+ Privacy Policy.
+ We'll keep you updated on tea and the future of open source.
+ We are Crafters of Fine
+ {product.desc} {description} {description.value!.description} None None None
+ If you need a version we don't have{" "}
+
request it here
- .
-
+ {results.map((pkg, index) => {
+ const { project, name, description, labels } = pkg;
+ const displayName = name || project;
+ const secondary = (
+
+
);
}
-function RecentSearches({ searches, onSelect }: { searches: string[]; onSelect: (term: string) => void }) {
+function RecentSearches({
+ searches,
+ onSelect,
+}: {
+ searches: string[];
+ onSelect: (term: string) => void;
+}) {
return (
-
- {hits.map(fu)}
+ return (
+
- } else {
-
+ {searches.map(term => (
+
+
+
+ );
+}
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index ef03c961..9fd0cc8b 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -1,92 +1,104 @@
-import Grid from '@mui/material/Grid2';
-import { Link, LinkProps, Typography, useTheme, useMediaQuery, Box, Button, Stack } from "@mui/material";
-import ArrowForwardIcon from '@mui/icons-material/ArrowForward';
-import ArrowOutwardIcon from '@mui/icons-material/CallMade';
+import { ArrowRight, ArrowUpRight } from "lucide-react";
+import { useIsMobile } from "../utils/useIsMobile";
import tea from "../assets/wordmarks/tea.svg";
import logo from "../assets/pkgx.svg";
-
export default function Footer() {
- const year = new Date().getFullYear()
- const theme = useTheme();
- const isxs = useMediaQuery(theme.breakpoints.down('md'));
+ const year = new Date().getFullYear();
+ const isxs = useIsMobile();
- const ul_style = {
- listStyleType: 'none',
- paddingLeft: 0,
- marginLeft: 0,
- fontSize: 14,
- marginTop: 10
- }
- const link_props: LinkProps = {
- color: 'text.secondary',
- underline: 'none',
- }
- const c =
- {!isxs && c}
-
-
-
-
-
-
-
+ {!isxs && copyright}
+
Company
+
+
+ Community
+
+
+
+ {children}
+
+ );
}
diff --git a/src/components/HomebrewBadge.tsx b/src/components/HomebrewBadge.tsx
index c76155af..a364aed3 100644
--- a/src/components/HomebrewBadge.tsx
+++ b/src/components/HomebrewBadge.tsx
@@ -1,57 +1,29 @@
-import { Box, Tooltip, useTheme, useMediaQuery } from "@mui/material";
+import { useIsMobile } from "../utils/useIsMobile";
-/**
- * HomebrewBadge — lightweight badge indicating pkgx's Homebrew heritage.
- * Uses a styled Box instead of MUI Chip to minimize bundle impact.
- *
- * Accessibility: focusable, tooltip, role="status", aria-label.
- * Responsive: smaller text on mobile.
- */
export default function HomebrewBadge() {
- const theme = useTheme();
- const isxs = useMediaQuery(theme.breakpoints.down("md"));
+ const isxs = useIsMobile();
return (
-
+
+ {left}
+
+ {children}
+
+
{results.map((pkg, index) => {
const { project, name, description, labels } = pkg;
const displayName = name || project;
- const secondary = (
-
- {searches.map(term => (
-
+ {searches.map((term) => (
+
+
+
{!shouldHide && (
-
+
+ Get Started
+
+ Install Mash Submitting Scripts
+
+
+ Improving This Website
+
+ {fullname}
+ {timeAgo(birthtime)}
+ {category && (
+
+ {category}
+
+ )}
+
+ {fullname}
+ {timeAgo(birthtime)}
+
-
+
oss.app enables you to query our expansive pkgdb and install your desired version of any package with one click. OpenAI, deno, youtube-dl, and hundreds more… all available to you within seconds.
- pkgx
- One Click Installs
+ oss.app enables you to query our expansive pkgdb and install your desired version of any package with one click.
+
+ Complementing
+ pkgx
+ Which Platform?
+
+
-
+
now available on CoinList
-
-
-
+ Why tea?
+
-
+
The CoinList Sale: Your Early Access
+
-
+
-
Backed by Builders & Trusted Platforms
+
+
Don't Miss Out
+ Stay Updated
+ Thank You!
+ pkgx packages to /usr/local.
-
+ {product.name}
+
+ What's New?
+
+ {title}
+
- {dirs.map(obj =>
+ return (
+
+ {dirs.map((obj) => (
+
+ );
}
-function Package({ project, dirs }: { project: string, dirs: string[] }) {
+function Package({ project, dirs }: { project: string; dirs: string[] }) {
+ const isxs = useIsMobile();
+
const { loading, error, value } = useAsync(async () => {
- const url = `https://raw.githubusercontent.com/pkgxdev/pantry/main/projects/${project}/package.yml`
- const rsp = await fetch(url)
- const txt = await rsp.text()
- const yml = yaml.parse(txt)
- return yml
- }, [project])
+ const url = `https://raw.githubusercontent.com/pkgxdev/pantry/main/projects/${project}/package.yml`;
+ const rsp = await fetch(url);
+ const txt = await rsp.text();
+ return yaml.parse(txt);
+ }, [project]);
const description = useAsync(async () => {
- const rsp = await fetch(`/pkgs/${project}.json`)
+ const rsp = await fetch(`/pkgs/${project}.json`);
if (rsp.ok) {
- return await rsp.json() as { description: string, homepage: string, github: string, displayName: string, provides: string[] }
+ return (await rsp.json()) as {
+ description: string;
+ homepage: string;
+ github: string;
+ displayName: string;
+ provides: string[];
+ };
} else {
- return { description: null, homepage: null, github: null, displayName: null, provides: null }
+ return { description: null, homepage: null, github: null, displayName: null, provides: null };
}
- }, [project])
+ }, [project]);
- const buttons = description.value && <>
- {description.value.homepage &&
- }>Homepage
- }
- {description.value.github &&
- }>GitHub
- }
- >
-
- const imgsrc = `/pkgs/${project}.webp`
-
- return
-
+
Versions
+ Subprojects
+ Programs
+ {programs()}
+ Companions
+ {companions()}
+ Dependencies
+ {deps()}
+
- {provides.map((program, i) =>
+ return (
+ {program.replace(/^s?bin\//g, '')}
-
+ {provides.map((program, i) => (
+
+ );
} else {
- return {program.replace(/^s?bin\//g, "")}
+
- {entries.map(([companion]) =>
+ return (
+
+ {entries.map(([companion]) => (
+
+ );
} else {
- return
- {entries.map(entry)}
-
+ const entries_arr = Object.entries(deps);
+ if (entries_arr.length) {
+ return {entries_arr.map(entry)}
;
} else {
- return
- {state.value!.map(version =>
-
+ {state.value!.map((version) => (
+
+
+ View package listing in{" "} + + 1999 Mode + +
+ > + ); } - return provides ?? [] } diff --git a/src/pkgx.dev/PackageShowcase.tsx b/src/pkgx.dev/PackageShowcase.tsx index 17740450..157e0f48 100644 --- a/src/pkgx.dev/PackageShowcase.tsx +++ b/src/pkgx.dev/PackageShowcase.tsx @@ -1,69 +1,61 @@ -import Grid from '@mui/material/Grid2'; -import { Alert, Box, Card, CardActionArea, CardContent, CardMedia, Chip, FormControl, InputLabel, MenuItem, Select, Skeleton, Stack, TextField, ToggleButton, ToggleButtonGroup, Typography, useMediaQuery, useTheme } from "@mui/material"; -import useInfiniteScroll from 'react-infinite-scroll-hook'; +import useInfiniteScroll from "react-infinite-scroll-hook"; import { CSSProperties, useMemo, useState } from "react"; +import { useIsMobile } from "../utils/useIsMobile"; import get_pkg_name from "../utils/pkg-name"; import { useAsync } from "react-use"; +import { cn } from "../utils/cn"; -// Category definitions for filtering const CATEGORIES: Record+ No packages match your filters. Try adjusting your search or category. +
+{brief || description}
++ tea Protocol is trusted by hundreds of thousands of developers, contributors, and organizations worldwide. +
+{value}
+{formatKey(key)}
+{value}
+{formatKey(key)}
+