* fix(security): address all Dependabot vulnerability alerts Python (uv.lock, pyproject.toml): - authlib 1.6.6 → 1.6.9 (JWS header injection, OIDC hash binding, Bleichenbacher padding oracle) - pyasn1 0.6.2 → 0.6.3 (unbounded recursion DoS) - pyjwt 2.10.1 → 2.12.1 (unknown crit header extensions - also in integration-tests and crewai) - orjson 3.11.4 → 3.11.7 (deeply nested JSON recursion DoS) - tornado 6.5.2 → 6.5.5 (multipart DoS, incomplete cookie validation) npm (package.json, package-lock.json): - next ^16.1.6 → ^16.1.7 (HTTP smuggling, CSRF bypass, cache DoS, null origin bypass) - fast-xml-parser override updated to >=5.5.6 (numeric entity expansion bypass) - undici override added >=7.24.0 (WebSocket overflow, smuggling, CRLF injection, DoS) - flatted override added >=3.4.0 (unbounded recursion DoS) - svgo override added >=3.3.3 (DOCTYPE entity expansion DoS) - dompurify override added >=3.3.2 (XSS vulnerability) * feat(docs): add Integrations Hub and unified page hero - Add /integrations page with search, type filter, and card grid - Integrations defined in a single JSON file (src/data/integrations.json) supporting official and community entries with icon, author, and link - Scrolling integrations banner moved from global navbar to /integrations only - Remove IntegrationsGrid component; replace all usages with link to hub - Add PageHero component with full-bleed gradient background, shared across Cookbook, FAQ, Best Practices, Changelog, and Blog index pages - Remove FAQ from top navbar (already in Resources dropdown) - Move integration changelogs table to bottom of changelog page
44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
import React from 'react';
|
|
import type {IconType} from 'react-icons';
|
|
import {IconGrid} from './IconGrid';
|
|
import {SiPython, SiGo, SiOpenai, SiAnthropic, SiGooglegemini, SiOllama} from 'react-icons/si';
|
|
import {LuTerminal, LuPlug, LuZap, LuBrainCog, LuSparkles, LuGlobe} from 'react-icons/lu';
|
|
|
|
const OpenAICompatibleIcon: IconType = ({size = 28, ...props}) => (
|
|
<span style={{position: 'relative', display: 'inline-flex'}}>
|
|
<SiOpenai size={size} {...props} />
|
|
<span style={{
|
|
position: 'absolute', bottom: -3, right: -6,
|
|
fontSize: Math.round((size as number) * 0.5), fontWeight: 900, lineHeight: 1,
|
|
color: 'currentColor',
|
|
}}>+</span>
|
|
</span>
|
|
);
|
|
|
|
export function ClientsGrid() {
|
|
return (
|
|
<IconGrid items={[
|
|
{ label: 'Python', icon: SiPython, href: '/sdks/python' },
|
|
{ label: 'TypeScript', imgSrc: '/img/icons/typescript.png', href: '/sdks/nodejs' },
|
|
{ label: 'Go', icon: SiGo, href: '/sdks/go' },
|
|
{ label: 'CLI', icon: LuTerminal, href: '/sdks/cli' },
|
|
{ label: 'HTTP', icon: LuGlobe, href: '/developer/api/quickstart' },
|
|
]} />
|
|
);
|
|
}
|
|
|
|
|
|
export function LLMProvidersGrid() {
|
|
return (
|
|
<IconGrid items={[
|
|
{ label: 'OpenAI', icon: SiOpenai },
|
|
{ label: 'Anthropic', icon: SiAnthropic },
|
|
{ label: 'Google Gemini', icon: SiGooglegemini },
|
|
{ label: 'Groq', icon: LuZap },
|
|
{ label: 'Ollama', icon: SiOllama },
|
|
{ label: 'LM Studio', icon: LuBrainCog },
|
|
{ label: 'MiniMax', icon: LuSparkles },
|
|
{ label: 'OpenAI Compatible', icon: OpenAICompatibleIcon },
|
|
]} />
|
|
);
|
|
}
|