Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/frontend/src/components
diff options
context:
space:
mode:
authorLeitwolf112026-09-07 21:30:40 +0300
committerLeitwolf112026-09-07 21:30:40 +0300
commitc0cd5f4699e44899956c19176ca47ede27a21a8f (patch)
treedc10ba78fde4c4dfaa91f4d43ffaee7bcb6c78b7 /frontend/src/components
parente77f4585d3a1be272fe83d5a06b1d2a32fa8f7b5 (diff)
downloadwebsite-c0cd5f4699e44899956c19176ca47ede27a21a8f.tar.gz
Separate ViGet from Progmasoft Account infrastructure
Move the Progmasoft mail operations baseline to its owning Progmaweb repository, remove the retired Astro account UI and duplicate identity backend, keep only the ViGet health boundary, add canonical sitemap signals, strengthen dependency CI, and adopt Patent Grant 1.1 across project-owned files.
Diffstat (limited to 'frontend/src/components')
-rw-r--r--frontend/src/components/AuthPanel.astro178
-rw-r--r--frontend/src/components/Icon.astro2
-rw-r--r--frontend/src/components/RepositoryFooter.astro2
-rw-r--r--frontend/src/components/RepositoryHeader.astro2
4 files changed, 3 insertions, 181 deletions
diff --git a/frontend/src/components/AuthPanel.astro b/frontend/src/components/AuthPanel.astro
deleted file mode 100644
index dd7f46f..0000000
--- a/frontend/src/components/AuthPanel.astro
+++ /dev/null
@@ -1,178 +0,0 @@
----
-// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
-// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.0
-
-interface Props {
- mode: "login" | "register" | "recover";
-}
-
-const { mode } = Astro.props;
-const copy = {
- login: {
- title: "Sign in",
- description: "Use your Visual X# registry account.",
- submit: "Next",
- switchText: "New to the registry?",
- switchLabel: "Create an account",
- switchHref: "https://account.progmasoft.com/register",
- },
- register: {
- title: "Create account",
- description: "Publish and manage Visual X# packages.",
- submit: "Next",
- switchText: "Already have an account?",
- switchLabel: "Sign in",
- switchHref: "https://account.progmasoft.com/login",
- },
- recover: {
- title: "Recover account",
- description: "Reset your password securely.",
- submit: "Send code",
- switchText: "Remembered your password?",
- switchLabel: "Sign in",
- switchHref: "https://account.progmasoft.com/login",
- },
-} as const;
-const content = copy[mode];
----
-
-<main class="auth-main" data-auth-flow data-mode={mode}>
- <section class="auth-card glass-panel">
- <a class="auth-brand" href="https://viget.progmasoft.com/" aria-label="Visual X# package registry">
- <img src="/xsharp-logo.webp" width="44" height="44" alt="" />
- <span>Visual X# Registry</span>
- </a>
-
- <div class="auth-heading">
- <p class="eyebrow">Visual X# package registry</p>
- <h1>{content.title}</h1>
- <p>{content.description}</p>
- </div>
-
- <div class="auth-alert" data-auth-alert hidden aria-live="polite"></div>
-
- <button class="oauth-button" type="button" data-google>
- <span class="google-mark" aria-hidden="true">G</span>
- Continue with Google
- </button>
-
- <div class="auth-divider"><span>or continue with email</span></div>
-
- <noscript>
- <p class="auth-alert" data-kind="error">
- JavaScript is required for the secure account flow. Enable it and reload this page.
- </p>
- </noscript>
-
- <form class="auth-form" data-auth-form method="post" novalidate>
- <div class="auth-step" data-step="email">
- <label for="auth-email">Email address</label>
- <input
- id="auth-email"
- name="email"
- type="email"
- autocomplete="email"
- inputmode="email"
- placeholder="name@example.com"
- required
- />
- <button class="auth-submit" type="submit">{content.submit}</button>
- </div>
-
- <div class="auth-step" data-step="password" hidden>
- <button class="auth-back" type="button" data-back>← Change email</button>
- <span class="auth-email-value" data-email-value></span>
- <label for="auth-password">Password</label>
- <input
- id="auth-password"
- name="password"
- type="password"
- autocomplete={mode === "register" ? "new-password" : "current-password"}
- minlength="8"
- required
- />
- {
- mode === "register" && (
- <p class="field-hint">Use at least 8 characters. Passwordless accounts are not created.</p>
- )
- }
- <button class="auth-submit" type="submit">{mode === "register" ? "Create account" : "Sign in"}</button>
- {
- mode === "login" && (
- <a class="auth-recovery" href="https://account.progmasoft.com/recover">Forgot password?</a>
- )
- }
- </div>
-
- {
- mode === "register" && (
- <div class="auth-step" data-step="publisher" hidden>
- <button class="auth-back" type="button" data-publisher-back>← Change password</button>
- <span class="auth-email-value" data-email-value></span>
- <label for="auth-publisher-name">Username</label>
- <input
- id="auth-publisher-name"
- name="publisher-name"
- type="text"
- autocomplete="username"
- autocapitalize="none"
- spellcheck="false"
- pattern="[A-Z][A-Za-z0-9]{7,127}"
- minlength="8"
- maxlength="128"
- placeholder="MyPublisher"
- required
- />
- <p class="field-hint">
- Use 8–128 ASCII letters or digits and start with an uppercase letter. <code>Progmasoft</code> and{" "}
- <code>Leitwolf</code> are reserved.
- </p>
- <button class="auth-submit" type="submit">Continue</button>
- </div>
- )
- }
-
- <div class="auth-step" data-step="code" hidden>
- <span class="auth-email-value" data-code-email></span>
- <label for="auth-code">Verification code</label>
- <input
- id="auth-code"
- name="code"
- type="text"
- autocomplete="one-time-code"
- inputmode="text"
- pattern="[A-Za-z0-9]{8}"
- minlength="8"
- maxlength="8"
- placeholder="Enter the code from your email"
- required
- />
- <p class="field-hint">
- The code is sent by <code>noreply@progmasoft.com</code>. It expires and can only be used once. If it does not
- appear in your inbox, check your spam or junk folder.
- </p>
- <button class="auth-submit" type="submit">Verify email</button>
- <button class="auth-resend" type="button" data-resend>Send another code</button>
- </div>
-
- <div class="auth-step" data-step="new-password" hidden>
- <label for="auth-new-password">New password</label>
- <input
- id="auth-new-password"
- name="new-password"
- type="password"
- autocomplete="new-password"
- minlength="8"
- required
- />
- <button class="auth-submit" type="submit">Set new password</button>
- </div>
- </form>
-
- <p class="auth-switch">
- {content.switchText} <a href={content.switchHref}>{content.switchLabel}</a>
- </p>
- </section>
-</main>
-
-<script is:inline type="module" src="/scripts/auth-flow.v3.js"></script>
diff --git a/frontend/src/components/Icon.astro b/frontend/src/components/Icon.astro
index 9787db2..6231dbb 100644
--- a/frontend/src/components/Icon.astro
+++ b/frontend/src/components/Icon.astro
@@ -1,6 +1,6 @@
---
// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
-// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.0
+// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1
interface Props {
name:
diff --git a/frontend/src/components/RepositoryFooter.astro b/frontend/src/components/RepositoryFooter.astro
index 58b82af..cdb2c1f 100644
--- a/frontend/src/components/RepositoryFooter.astro
+++ b/frontend/src/components/RepositoryFooter.astro
@@ -1,6 +1,6 @@
---
// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
-// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.0
+// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1
---
<footer class="registry-footer">
diff --git a/frontend/src/components/RepositoryHeader.astro b/frontend/src/components/RepositoryHeader.astro
index 3fbc8f9..9755869 100644
--- a/frontend/src/components/RepositoryHeader.astro
+++ b/frontend/src/components/RepositoryHeader.astro
@@ -1,6 +1,6 @@
---
// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
-// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.0
+// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1
interface Props {
authenticated?: boolean;