feat!: release v2 (#6545)
Co-authored-by: Artur <145776561+arturict@users.noreply.github.com> Co-authored-by: arturict <arturict@users.noreply.github.com> Co-authored-by: Thomas <thomas@ajnart.fr> Co-authored-by: Afonso Jorge Ramos <afonsojorgeramos@gmail.com> Co-authored-by: Danura30082 <danura30082+github@gmail.com> Co-authored-by: Kushie <122986913+kushiemoon-dev@users.noreply.github.com> Co-authored-by: ajnart <thomas@ajnart.fr> Co-authored-by: ajnart <thomas@ajnart.dev> Co-authored-by: chenjun <chenjun@foxmail.com> Co-authored-by: Wikibear <wikibear@users.noreply.github.com> Co-authored-by: Bergasha <bergasha@gmail.com> Co-authored-by: leafyelin <43306196+leafyelin@users.noreply.github.com> Co-authored-by: Lucas Araujo <lucas.lra@gmail.com> Co-authored-by: GreenMonito <86085570+GreenMonito@users.noreply.github.com> Co-authored-by: Nerdy-Technician <roffo@nerdy-technician.social> Co-authored-by: Jun <34545896+jcstrong@users.noreply.github.com> Co-authored-by: Edmond Abraham <54119952+gitedmond@users.noreply.github.com> Co-authored-by: thrawnx <tight.bulb9384@fastmail.com> Co-authored-by: Chris <58918656+nordada@users.noreply.github.com> Co-authored-by: yi111 <153097222+Yi-111-a@users.noreply.github.com> Co-authored-by: Yanis <naamaneyanis@gmail.com> Co-authored-by: Wikibear <me@sej.de> Co-authored-by: alessiottavo <93441886+alessiottavo@users.noreply.github.com>
This commit is contained in:
3286 files changed
+284386
-139176
No files matched your search
@@ -1,32 +0,0 @@
|
||||
import Layout from "@theme/Layout";
|
||||
import React from "react";
|
||||
import { CodeContributorList } from "@site/src/components/pages/about/code-contributors/code-contributor-list";
|
||||
import { TranslationContributorList } from "@site/src/components/pages/about/translations-contributors/translation-constributor-list";
|
||||
|
||||
export default function AboutUs() {
|
||||
return (
|
||||
<Layout
|
||||
title="About Homarr"
|
||||
description={
|
||||
"Homarr is a community driven open source project that is being maintained by volunteers. Homarr has been a growing project since 2021."
|
||||
}
|
||||
>
|
||||
<main className="mx-auto w-full md:w-2/3 ps-10 pr-10 mb-20 mt-10">
|
||||
<h1 className="text-5xl font-extrabold">About us</h1>
|
||||
<p className="text-lg text-gray-500">
|
||||
Homarr is a community driven open source project that is being maintained by volunteers. Thanks to these
|
||||
people, Homarr has been a growing project since 2021. Our team is working completely remote from many
|
||||
different countries on Homarr in their leisure time for no compensation.
|
||||
</p>
|
||||
|
||||
<h2 className={"mt-10"}>Code contributions</h2>
|
||||
|
||||
<CodeContributorList />
|
||||
|
||||
<h2 className={"mt-10"}>Translation contributions</h2>
|
||||
|
||||
<TranslationContributorList />
|
||||
</main>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import React from "react";
|
||||
import Layout from "@theme/Layout";
|
||||
import BrowserOnly from "@docusaurus/BrowserOnly";
|
||||
|
||||
export default function ApiReferencePage() {
|
||||
return (
|
||||
<Layout title="API Reference" description="Homarr OpenAPI Reference">
|
||||
<BrowserOnly fallback={<div style={{ height: "100vh" }} />}>
|
||||
{() => {
|
||||
const { ThemedApiReference } = require("@site/src/components/themed-api-reference");
|
||||
return (
|
||||
<ThemedApiReference
|
||||
configuration={{
|
||||
url: "/api/open-api-schema.json",
|
||||
theme: "kepler",
|
||||
hideModels: false,
|
||||
hideDownloadButton: false,
|
||||
mcp: { disabled: true },
|
||||
customCss: `
|
||||
.scalar-sidebar-footer a[href="https://www.scalar.com"] { display: none !important; }
|
||||
`,
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
</BrowserOnly>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import React from "react";
|
||||
import Layout from "@theme/Layout";
|
||||
import { CarbonCoverStrict, CarbonCoverObserver, CarbonCoverCssOnlySecond } from "../components/carbon";
|
||||
|
||||
export default function CarbonTestPage() {
|
||||
return (
|
||||
<Layout title="Carbon Ads Test" description="Test different Carbon cover implementations">
|
||||
<div className="container margin-vert--lg">
|
||||
<h1>Carbon Ads Test</h1>
|
||||
<p>Compare three implementations to only show the cover unit.</p>
|
||||
|
||||
<section style={{ marginTop: 24, marginBottom: 24 }}>
|
||||
<h2>1) Strict re-initialization</h2>
|
||||
<CarbonCoverStrict />
|
||||
</section>
|
||||
|
||||
<section style={{ marginTop: 24, marginBottom: 24 }}>
|
||||
<h2>2) Observer trimming</h2>
|
||||
<CarbonCoverObserver />
|
||||
</section>
|
||||
|
||||
<section style={{ marginTop: 24, marginBottom: 24 }}>
|
||||
<h2>3) CSS-only (hide first, keep cover)</h2>
|
||||
<CarbonCoverCssOnlySecond />
|
||||
</section>
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
@@ -1,41 +1,383 @@
|
||||
/**
|
||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
||||
* and scoped locally.
|
||||
*/
|
||||
.heroBanner {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: clamp(3rem, 6vw, 6rem) clamp(1.25rem, 4vw, 4rem);
|
||||
background: var(--ifm-color-primary);
|
||||
color: var(--primary-foreground);
|
||||
}
|
||||
|
||||
section {
|
||||
margin-bottom: 2rem;
|
||||
.heroContent {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) minmax(0, 48rem);
|
||||
align-items: center;
|
||||
gap: clamp(1rem, 3vw, 3rem);
|
||||
width: 100%;
|
||||
max-width: 96rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.heroCopy {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
max-width: 52rem;
|
||||
}
|
||||
|
||||
.heroTitle {
|
||||
margin: 0;
|
||||
color: inherit;
|
||||
font-size: clamp(3rem, 4.45vw, 4.5rem);
|
||||
font-weight: 800;
|
||||
line-height: 0.98;
|
||||
letter-spacing: -0.04em;
|
||||
text-wrap: balance;
|
||||
}
|
||||
|
||||
.heroDescription {
|
||||
max-width: 46rem;
|
||||
margin: 1.75rem 0 0;
|
||||
color: inherit;
|
||||
font-size: clamp(1rem, 1.5vw, 1.35rem);
|
||||
font-weight: 500;
|
||||
line-height: 1.55;
|
||||
text-wrap: pretty;
|
||||
}
|
||||
|
||||
.heroActions {
|
||||
--hero-button-bg: #fff;
|
||||
--hero-button-fg: #27272a;
|
||||
--hero-button-border: color-mix(in srgb, #111827 12%, transparent);
|
||||
--hero-button-hover-bg: #f4f4f5;
|
||||
--hero-button-hover-fg: #18181b;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem;
|
||||
margin-top: 1.75rem;
|
||||
}
|
||||
|
||||
.heroButton {
|
||||
display: inline-flex;
|
||||
min-height: 2.75rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.65rem;
|
||||
padding: 0.7rem 1rem;
|
||||
border: 1px solid var(--hero-button-border);
|
||||
border-radius: 999px;
|
||||
background: var(--hero-button-bg);
|
||||
color: var(--hero-button-fg);
|
||||
font-size: 0.95rem;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
text-decoration: none;
|
||||
box-shadow: 0 2px 8px rgb(49 46 129 / 10%);
|
||||
transition:
|
||||
background-color 150ms ease,
|
||||
box-shadow 150ms ease;
|
||||
}
|
||||
|
||||
.heroButton:hover {
|
||||
background: var(--hero-button-hover-bg);
|
||||
color: var(--hero-button-hover-fg);
|
||||
box-shadow: 0 4px 14px rgb(49 46 129 / 18%);
|
||||
}
|
||||
|
||||
.partnerButton,
|
||||
.partnerButton:hover {
|
||||
border-color: #27272a;
|
||||
background: #27272a;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.partnerButton img {
|
||||
width: auto;
|
||||
max-height: 1.25rem;
|
||||
}
|
||||
|
||||
:global(.dark) .heroActions {
|
||||
--hero-button-bg: #27272a;
|
||||
--hero-button-fg: #f4f4f5;
|
||||
--hero-button-border: #52525b;
|
||||
--hero-button-hover-bg: #3f3f46;
|
||||
--hero-button-hover-fg: #fff;
|
||||
}
|
||||
|
||||
.heroPreview {
|
||||
min-width: 0;
|
||||
animation: dashboard-float 5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.heroCards {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem 0.75rem;
|
||||
width: min(100%, 48rem);
|
||||
margin-inline: auto;
|
||||
color: #343a40;
|
||||
transform: rotate(8deg) scale(0.8) skew(8deg);
|
||||
}
|
||||
|
||||
:global(.dark) .heroCards {
|
||||
color: #dee2e6;
|
||||
}
|
||||
|
||||
.widgetCard {
|
||||
flex: none;
|
||||
min-width: 0;
|
||||
border: 1px solid color-mix(in srgb, currentcolor 12%, transparent) !important;
|
||||
border-radius: 0.75rem;
|
||||
background: color-mix(in srgb, var(--ifm-navbar-background-color) 82%, transparent) !important;
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
box-shadow: 0 5px 12px rgb(31 41 55 / 10%);
|
||||
backdrop-filter: blur(12px);
|
||||
}
|
||||
|
||||
.heroCards :global(.app-card) {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.heroCards :global(.app-card img) {
|
||||
transition: transform 150ms ease;
|
||||
}
|
||||
|
||||
.heroCards :global(.app-card:hover img) {
|
||||
transform: scale(0.66) !important;
|
||||
}
|
||||
|
||||
.resourcesWidget,
|
||||
.dockerWidget {
|
||||
align-items: stretch !important;
|
||||
justify-content: flex-start !important;
|
||||
gap: 0.5rem;
|
||||
padding: 0.75rem !important;
|
||||
}
|
||||
|
||||
.widgetHeading,
|
||||
.resourceLabel,
|
||||
.containerRow {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.widgetTitle {
|
||||
display: inline-flex;
|
||||
min-width: 0;
|
||||
align-items: center;
|
||||
gap: 0.375rem;
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.onlineStatus,
|
||||
.dockerCount {
|
||||
flex: none;
|
||||
font-size: 0.6875rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.onlineStatus {
|
||||
color: #087f5b;
|
||||
}
|
||||
|
||||
:global(.dark) .onlineStatus {
|
||||
color: #69dbb1;
|
||||
}
|
||||
|
||||
.resourceMeter {
|
||||
display: grid;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.resourceMeterCritical .resourceLabel {
|
||||
color: #a51111;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.resourceLabel {
|
||||
font-size: 0.6875rem;
|
||||
}
|
||||
|
||||
.resourceLabel > span:first-child {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.resourceTrack {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 0.375rem;
|
||||
appearance: none;
|
||||
border: 0;
|
||||
border-radius: 999px;
|
||||
background: color-mix(in srgb, currentcolor 16%, transparent);
|
||||
}
|
||||
|
||||
.resourceTrack::-webkit-progress-bar {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.resourceTrack::-webkit-progress-value,
|
||||
.resourceTrack::-moz-progress-bar {
|
||||
height: 100%;
|
||||
border-radius: inherit;
|
||||
background: var(--primary);
|
||||
}
|
||||
|
||||
.resourceMeterCritical .resourceTrack::-webkit-progress-value,
|
||||
.resourceMeterCritical .resourceTrack::-moz-progress-bar {
|
||||
background: #e03131;
|
||||
}
|
||||
|
||||
.downloadProgress {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 0.5rem;
|
||||
appearance: none;
|
||||
border: 0;
|
||||
border-radius: 999px;
|
||||
background: color-mix(in srgb, currentcolor 18%, transparent);
|
||||
}
|
||||
|
||||
.downloadProgress::-webkit-progress-bar {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.downloadProgress::-webkit-progress-value,
|
||||
.downloadProgress::-moz-progress-bar {
|
||||
border-radius: inherit;
|
||||
background: #2f9e44;
|
||||
}
|
||||
|
||||
.containerList {
|
||||
display: grid;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.containerRow {
|
||||
font-size: 0.6875rem;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.containerName {
|
||||
overflow: hidden;
|
||||
font-weight: 600;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.containerStatus {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
color: color-mix(in srgb, currentcolor 82%, transparent);
|
||||
}
|
||||
|
||||
.statusDot {
|
||||
width: 0.375rem;
|
||||
height: 0.375rem;
|
||||
border-radius: 999px;
|
||||
background: #12b886;
|
||||
}
|
||||
|
||||
.containerRowFailed {
|
||||
color: #a51111;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
:global(.dark) .resourceMeterCritical .resourceLabel,
|
||||
:global(.dark) .containerRowFailed {
|
||||
color: #ffe3e3;
|
||||
}
|
||||
|
||||
.statusDotFailed {
|
||||
background: #fa5252;
|
||||
animation: failed-container-pulse 1.4s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.heroWave {
|
||||
width: 100%;
|
||||
height: 125px;
|
||||
}
|
||||
|
||||
.hero h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.hero p {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.heroImage {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
border-radius: 6px;
|
||||
max-width: min(100%, 500px);
|
||||
width: 100%;
|
||||
height: clamp(5rem, 9vw, 8rem);
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
@keyframes dashboard-float {
|
||||
50% {
|
||||
transform: translateY(10px);
|
||||
}
|
||||
}
|
||||
|
||||
.heroBanner {
|
||||
padding: 4rem;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
@keyframes failed-container-pulse {
|
||||
50% {
|
||||
opacity: 0.35;
|
||||
transform: scale(1.65);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1280px) {
|
||||
.heroBanner {
|
||||
padding: 3rem 1.5rem;
|
||||
}
|
||||
|
||||
.heroContent {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
gap: 2.5rem;
|
||||
}
|
||||
|
||||
.heroCopy {
|
||||
max-width: 46rem;
|
||||
}
|
||||
|
||||
.heroPreview {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 996px) {
|
||||
.heroBanner {
|
||||
padding: 2rem;
|
||||
padding: 3.25rem 2rem 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 640px) {
|
||||
.heroBanner {
|
||||
padding: 2.5rem 2rem 3.5rem;
|
||||
}
|
||||
|
||||
.heroTitle {
|
||||
font-size: 1.875rem;
|
||||
line-height: 1.08;
|
||||
letter-spacing: -0.04em;
|
||||
}
|
||||
|
||||
.heroDescription {
|
||||
margin-top: 1.4rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.heroActions > * {
|
||||
flex: 1 1 0;
|
||||
}
|
||||
|
||||
.partnerButton {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.heroPreview,
|
||||
.statusDotFailed {
|
||||
animation: none;
|
||||
}
|
||||
|
||||
.heroCards :global(.app-card img),
|
||||
.heroButton {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
import React from "react";
|
||||
|
||||
import Layout from "@theme/Layout";
|
||||
|
||||
import HomepageFeatures from "../components/pages/home/features/features";
|
||||
import HomepageUserReviews from "../components/pages/home/review-list/review-list";
|
||||
import HomeHero from "../components/pages/home/hero/hero";
|
||||
|
||||
import styles from "./index.module.css";
|
||||
import BrowserOnly from "@docusaurus/BrowserOnly";
|
||||
import { SectionContainer } from "@site/src/components/pages/home/container/section-container";
|
||||
import { DragAndDropShowcase } from "@site/src/components/pages/home/drag-and-drop/drag-and-drop-showcase";
|
||||
import { AvailableIntegrations } from "@site/src/components/pages/home/integrations/available-integrations";
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<Layout description="Simplify the management of your server with Homarr - a sleek, modern dashboard that puts all of your apps and services at your fingertips. With Homarr, you can access and control everything in one convenient location. Homarr seamlessly integrates with the apps you've added, providing you with valuable information and giving you complete control. Installation is a breeze, and Homarr supports a wide range of deployment methods.">
|
||||
<HomeHero />
|
||||
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
preserveAspectRatio="none"
|
||||
viewBox="0 0 1440 320"
|
||||
className={styles.heroWave}
|
||||
>
|
||||
<path
|
||||
fill="var(--ifm-color-primary)"
|
||||
fillOpacity="1"
|
||||
d="M0,224L48,202.7C96,181,192,139,288,133.3C384,128,480,160,576,149.3C672,139,768,85,864,58.7C960,32,1056,32,1152,37.3C1248,43,1344,53,1392,58.7L1440,64L1440,0L1392,0C1344,0,1248,0,1152,0C1056,0,960,0,864,0C768,0,672,0,576,0C480,0,384,0,288,0C192,0,96,0,48,0L0,0Z"
|
||||
></path>
|
||||
</svg>
|
||||
<SectionContainer>
|
||||
<HomepageFeatures />
|
||||
</SectionContainer>
|
||||
<BrowserOnly fallback={<span>loading...</span>}>
|
||||
{() => {
|
||||
const DataflowVisualizationComponent =
|
||||
require("../components/pages/home/dataflow/dataflow").DataflowVisualizationComponent;
|
||||
return <DataflowVisualizationComponent />;
|
||||
}}
|
||||
</BrowserOnly>
|
||||
<DragAndDropShowcase />
|
||||
<AvailableIntegrations />
|
||||
<SectionContainer>
|
||||
<HomepageUserReviews />
|
||||
</SectionContainer>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user