Merge pull request #2764 from homarr-labs/refactor/remove-experimental-warnings

This commit is contained in:
Thomas Camlong
2025-12-26 21:26:57 +01:00
committed by GitHub
9 changed files with 50 additions and 101 deletions

3
.gitignore vendored
View File

@@ -34,4 +34,5 @@ Temporary Items
# Python
__pycache__/
node_modules/
node_modules/
.cursor/commands

View File

@@ -67,7 +67,7 @@
"input-otp": "^1.4.2",
"lucide-react": "^0.553.0",
"motion": "^12.23.24",
"next": "16.0.9",
"next": "16.1.1",
"next-themes": "^0.4.6",
"pocketbase": "^0.26.4",
"posthog-js": "^1.301.1",

89
web/pnpm-lock.yaml generated
View File

@@ -13,7 +13,7 @@ importers:
version: 5.2.1(react-hook-form@7.68.0(react@19.2.1))
'@posthog/nextjs-config':
specifier: ^1.6.3
version: 1.6.3(next@16.0.9(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))
version: 1.6.3(next@16.1.1(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))
'@radix-ui/react-accordion':
specifier: ^1.2.12
version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
@@ -144,8 +144,8 @@ importers:
specifier: ^12.23.24
version: 12.23.24(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
next:
specifier: 16.0.9
version: 16.0.9(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
specifier: 16.1.1
version: 16.1.1(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
@@ -482,53 +482,53 @@ packages:
'@jridgewell/trace-mapping@0.3.29':
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
'@next/env@16.0.9':
resolution: {integrity: sha512-6284pl8c8n9PQidN63qjPVEu1uXXKjnmbmaLebOzIfTrSXdGiAPsIMRi4pk/+v/ezqweE1/B8bFqiAAfC6lMXg==}
'@next/env@16.1.1':
resolution: {integrity: sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA==}
'@next/swc-darwin-arm64@16.0.9':
resolution: {integrity: sha512-j06fWg/gPqiWjK+sEpCDsh5gX+Bdy9gnPYjFqMBvBEOIcCFy1/ecF6pY6XAce7WyCJAbBPVb+6GvpmUZKNq0oQ==}
'@next/swc-darwin-arm64@16.1.1':
resolution: {integrity: sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@16.0.9':
resolution: {integrity: sha512-FRYYz5GSKUkfvDSjd5hgHME2LgYjfOLBmhRVltbs3oRNQQf9n5UTQMmIu/u5vpkjJFV4L2tqo8duGqDxdQOFwg==}
'@next/swc-darwin-x64@16.1.1':
resolution: {integrity: sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@16.0.9':
resolution: {integrity: sha512-EI2klFVL8tOyEIX5J1gXXpm1YuChmDy4R+tHoNjkCHUmBJqXioYErX/O2go4pEhjxkAxHp2i8y5aJcRz2m5NqQ==}
'@next/swc-linux-arm64-gnu@16.1.1':
resolution: {integrity: sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@16.0.9':
resolution: {integrity: sha512-vq/5HeGvowhDPMrpp/KP4GjPVhIXnwNeDPF5D6XK6ta96UIt+C0HwJwuHYlwmn0SWyNANqx1Mp6qSVDXwbFKsw==}
'@next/swc-linux-arm64-musl@16.1.1':
resolution: {integrity: sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@16.0.9':
resolution: {integrity: sha512-GlUdJwy2leA/HnyRYxJ1ZJLCJH+BxZfqV4E0iYLrJipDKxWejWpPtZUdccPmCfIEY9gNBO7bPfbG6IIgkt0qXg==}
'@next/swc-linux-x64-gnu@16.1.1':
resolution: {integrity: sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@16.0.9':
resolution: {integrity: sha512-UCtOVx4N8AHF434VPwg4L0KkFLAd7pgJShzlX/hhv9+FDrT7/xCuVdlBsCXH7l9yCA/wHl3OqhMbIkgUluriWA==}
'@next/swc-linux-x64-musl@16.1.1':
resolution: {integrity: sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@16.0.9':
resolution: {integrity: sha512-tQjtDGtv63mV3n/cZ4TH8BgUvKTSFlrF06yT5DyRmgQuj5WEjBUDy0W3myIW5kTRYMPrLn42H3VfCNwBH6YYiA==}
'@next/swc-win32-arm64-msvc@16.1.1':
resolution: {integrity: sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@next/swc-win32-x64-msvc@16.0.9':
resolution: {integrity: sha512-y9AGACHTBwnWFLq5B5Fiv3FEbXBusdPb60pgoerB04CV/pwjY1xQNdoTNxAv7eUhU2k1CKnkN4XWVuiK07uOqA==}
'@next/swc-win32-x64-msvc@16.1.1':
resolution: {integrity: sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -1955,8 +1955,8 @@ packages:
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
next@16.0.9:
resolution: {integrity: sha512-Xk5x/wEk6ADIAtQECLo1uyE5OagbQCiZ+gW4XEv24FjQ3O2PdSkvgsn22aaseSXC7xg84oONvQjFbSTX5YsMhQ==}
next@16.1.1:
resolution: {integrity: sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w==}
engines: {node: '>=20.9.0'}
hasBin: true
peerDependencies:
@@ -2508,30 +2508,30 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@next/env@16.0.9': {}
'@next/env@16.1.1': {}
'@next/swc-darwin-arm64@16.0.9':
'@next/swc-darwin-arm64@16.1.1':
optional: true
'@next/swc-darwin-x64@16.0.9':
'@next/swc-darwin-x64@16.1.1':
optional: true
'@next/swc-linux-arm64-gnu@16.0.9':
'@next/swc-linux-arm64-gnu@16.1.1':
optional: true
'@next/swc-linux-arm64-musl@16.0.9':
'@next/swc-linux-arm64-musl@16.1.1':
optional: true
'@next/swc-linux-x64-gnu@16.0.9':
'@next/swc-linux-x64-gnu@16.1.1':
optional: true
'@next/swc-linux-x64-musl@16.0.9':
'@next/swc-linux-x64-musl@16.1.1':
optional: true
'@next/swc-win32-arm64-msvc@16.0.9':
'@next/swc-win32-arm64-msvc@16.1.1':
optional: true
'@next/swc-win32-x64-msvc@16.0.9':
'@next/swc-win32-x64-msvc@16.1.1':
optional: true
'@playwright/test@1.57.0':
@@ -2552,12 +2552,12 @@ snapshots:
dependencies:
cross-spawn: 7.0.6
'@posthog/nextjs-config@1.6.3(next@16.0.9(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))':
'@posthog/nextjs-config@1.6.3(next@16.1.1(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))':
dependencies:
'@posthog/cli': 0.5.16
'@posthog/core': 1.7.0
'@posthog/webpack-plugin': 1.1.3
next: 16.0.9(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
next: 16.1.1(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
semver: 7.7.3
transitivePeerDependencies:
- debug
@@ -3918,24 +3918,25 @@ snapshots:
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
next@16.0.9(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
next@16.1.1(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies:
'@next/env': 16.0.9
'@next/env': 16.1.1
'@swc/helpers': 0.5.15
baseline-browser-mapping: 2.8.32
caniuse-lite: 1.0.30001760
postcss: 8.4.31
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
styled-jsx: 5.1.6(react@19.2.1)
optionalDependencies:
'@next/swc-darwin-arm64': 16.0.9
'@next/swc-darwin-x64': 16.0.9
'@next/swc-linux-arm64-gnu': 16.0.9
'@next/swc-linux-arm64-musl': 16.0.9
'@next/swc-linux-x64-gnu': 16.0.9
'@next/swc-linux-x64-musl': 16.0.9
'@next/swc-win32-arm64-msvc': 16.0.9
'@next/swc-win32-x64-msvc': 16.0.9
'@next/swc-darwin-arm64': 16.1.1
'@next/swc-darwin-x64': 16.1.1
'@next/swc-linux-arm64-gnu': 16.1.1
'@next/swc-linux-arm64-musl': 16.1.1
'@next/swc-linux-x64-gnu': 16.1.1
'@next/swc-linux-x64-musl': 16.1.1
'@next/swc-win32-arm64-msvc': 16.1.1
'@next/swc-win32-x64-msvc': 16.1.1
'@playwright/test': 1.57.0
sharp: 0.34.5
transitivePeerDependencies:

View File

@@ -1,7 +1,6 @@
import type { Metadata } from "next"
import { Suspense } from "react"
import { CommunityIconSearch } from "@/components/community-icon-search"
import { ExperimentalWarning } from "@/components/experimental-warning"
import { BASE_URL } from "@/constants"
import { getCommunitySubmissions } from "@/lib/community"
@@ -43,7 +42,6 @@ export default async function CommunityPage() {
const icons = await getCommunitySubmissions()
return (
<div className="isolate overflow-hidden p-2 mx-auto max-w-7xl">
<ExperimentalWarning message="The community icon submission system is currently in an experimentation phase. Submissions shown here will not be reviewed or processed at this time. We're gathering feedback to improve the experience." />
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
<div>
<h1 className="text-3xl font-bold">Browse community icons</h1>

View File

@@ -2,7 +2,6 @@
import { AlertCircle, RefreshCw } from "lucide-react"
import * as React from "react"
import { ExperimentalWarning } from "@/components/experimental-warning"
import { SubmissionsDataTable } from "@/components/submissions-data-table"
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
import { Button } from "@/components/ui/button"
@@ -156,7 +155,6 @@ export default function DashboardPage() {
return (
<>
<main className="container mx-auto pt-12 pb-14 px-4 sm:px-6 lg:px-8">
<ExperimentalWarning message="The submissions dashboard is currently in an experimentation phase. Submissions will not be reviewed or processed at this time. We're gathering feedback to improve the experience." />
<Card className="bg-background/50 border-none shadow-lg">
<CardHeader>
<CardTitle>Submissions Dashboard</CardTitle>

View File

@@ -5,7 +5,6 @@ import { Check, FileImage, FileType, Plus, X } from "lucide-react"
import { useState } from "react"
import { toast } from "sonner"
import { revalidateAllSubmissions } from "@/app/actions/submissions"
import { ExperimentalWarning } from "@/components/experimental-warning"
import { IconNameCombobox } from "@/components/icon-name-combobox"
import { IconSubmissionGuidelines } from "@/components/icon-submission-guidelines"
import {
@@ -328,7 +327,6 @@ export function AdvancedIconSubmissionFormTanStack() {
return (
<div className="max-w-4xl mx-auto">
<ExperimentalWarning message="This icon submission form is currently in an experimentation phase. Submissions will not be reviewed or processed at this time. We're gathering feedback to improve the experience." />
<AlertDialog open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>
<AlertDialogContent className="bg-background">

View File

@@ -1,26 +0,0 @@
import { AlertTriangle } from "lucide-react"
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
import { Button } from "@/components/ui/button"
interface ExperimentalWarningProps {
message?: string
}
export function ExperimentalWarning({ message }: ExperimentalWarningProps) {
const defaultMessage =
message ||
"This icon submission system is currently in an experimentation phase. Submissions will not be reviewed or processed at this time. We're gathering feedback to improve the experience."
return (
<Alert variant="default" className="mb-6 border-amber-500/50 bg-amber-50 dark:bg-amber-950/20 px-8 py-6">
<AlertTriangle className="text-amber-600 dark:text-amber-500 size-8" />
<div className="col-start-2 space-y-4">
<AlertTitle className="text-amber-900 dark:text-amber-100 text-2xl font-bold">Experimental Feature</AlertTitle>
<AlertDescription className="text-amber-800 dark:text-amber-200 text-base leading-relaxed">{defaultMessage}</AlertDescription>
<Button className="feedback-button mt-4" variant="outline" size="lg">
Send feedback
</Button>
</div>
</Alert>
)
}

View File

@@ -382,27 +382,6 @@ export function IconSearch({ icons }: IconSearchProps) {
<div id="icon-submission-content" className="w-full">
<IconSubmissionContent />
</div>
<div className="mt-4 flex flex-col sm:flex-row items-center gap-2 justify-center w-full">
<span className="text-sm text-muted-foreground">Can't submit it yourself?</span>
<Button
className="cursor-pointer w-full sm:w-auto truncate whitespace-nowrap"
variant="outline"
size="sm"
onClick={() => {
setIsLazyRequestSubmitted(true)
toast("Request received!", {
description: `We've noted your request for "${searchQuery || "this icon"}". Thanks for your suggestion.`,
})
posthog.capture("lazy icon request", {
query: searchQuery,
categories: selectedCategories,
})
}}
disabled={isLazyRequestSubmitted}
>
Request this icon
</Button>
</div>
</div>
</div>
) : (

View File

@@ -106,10 +106,10 @@ export function IconSubmissionContent() {
<div className="flex flex-col gap-6">
<div className="text-center space-y-2">
<p className="text-muted-foreground">
Submissions are currently handled via GitHub issues, but we are experimenting with uploading icons directly on the website.
If you would like to help us expand our collection, you can submit your icons using our submission form or by creating an issue on Github
</p>
<Button variant="link" asChild className="text-primary">
<Link href="/submit">Try the experimental submission form &rarr;</Link>
<Link href="/submit">Submit using the submission form &rarr;</Link>
</Button>
</div>