Skip to content

add xtailwind and xtailwind2 themes#4

Merged
mambax7 merged 1 commit intoXOOPS:masterfrom
mambax7:feature/add_Tailwind_themes
Apr 10, 2026
Merged

add xtailwind and xtailwind2 themes#4
mambax7 merged 1 commit intoXOOPS:masterfrom
mambax7:feature/add_Tailwind_themes

Conversation

@mambax7
Copy link
Copy Markdown
Contributor

@mambax7 mambax7 commented Apr 10, 2026

Summary by CodeRabbit

  • New Features

    • Added two new Tailwind CSS + DaisyUI themes featuring dynamic theme switching with light/dark mode options and palette persistence via browser storage
    • Interactive navigation with responsive mobile drawer menu and theme selector dropdown
    • Homepage hero section with responsive grid layout and sidebar regions
  • Documentation

    • Added comprehensive README and tutorial documentation covering theme setup, customization, and build instructions

Copilot AI review requested due to automatic review settings April 10, 2026 08:20
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 10, 2026

Caution

Review failed

Pull request was closed or merged during review

Walkthrough

Two complete XOOPS 2.5.12 themes (xtailwind and xtailwind2) are added, built on Tailwind CSS and DaisyUI with npm-based build pipelines, curated theme palettes, responsive Smarty templates, form renderer integration, client-side theme switching via localStorage, and supporting language constants and configuration files.

Changes

Cohort / File(s) Summary
xtailwind Theme Foundation
htdocs/themes/xtailwind/.gitignore, htdocs/themes/xtailwind/LICENSE, htdocs/themes/xtailwind/README.md, htdocs/themes/xtailwind/TUTORIAL.md, htdocs/themes/xtailwind/theme.ini
Metadata, documentation, and license for the xtailwind theme; comprehensive tutorial covering Tailwind/DaisyUI setup, template structure, theme switching, and customization.
xtailwind Safety Endpoints
htdocs/themes/xtailwind/index.php, htdocs/themes/xtailwind/css/index.php, htdocs/themes/xtailwind/images/index.php, htdocs/themes/xtailwind/language/index.php, htdocs/themes/xtailwind/tpl/index.php
HTTP 404 endpoint files preventing direct access to theme subdirectories.
xtailwind CSS
htdocs/themes/xtailwind/css/input.css, htdocs/themes/xtailwind/css/styles.css
Tailwind input file with XOOPS-specific layer rules for content/blocks/dropdowns; minified compiled output including DaisyUI components and responsive utilities.
xtailwind Templates
htdocs/themes/xtailwind/tpl/nav-menu.tpl, htdocs/themes/xtailwind/theme.tpl, htdocs/themes/xtailwind/tpl/blockContent.tpl, htdocs/themes/xtailwind/tpl/content-zone.tpl, htdocs/themes/xtailwind/tpl/leftBlock.tpl, htdocs/themes/xtailwind/tpl/rightBlock.tpl, htdocs/themes/xtailwind/tpl/inboxAlert.tpl
Smarty templates for page layout, navigation with theme switcher and mobile drawer, block rendering, content zones, and inbox alerts; includes inline JavaScript for theme persistence and Alpine.js interactivity.
xtailwind Configuration
htdocs/themes/xtailwind/package.json, htdocs/themes/xtailwind/tailwind.config.js, htdocs/themes/xtailwind/theme_autorun.php
npm build/watch scripts; Tailwind JIT content scanning with 34 DaisyUI theme variants; form renderer detection and theme data assignment to templates.
xtailwind Language
htdocs/themes/xtailwind/language/english/index.php, htdocs/themes/xtailwind/language/english/main.php
HTTP 404 endpoint for language directory; English locale constants for navigation, theme switcher, and UI labels.
xtailwind2 Theme Foundation
htdocs/themes/xtailwind2/LICENSE, htdocs/themes/xtailwind2/README.md, htdocs/themes/xtailwind2/TUTORIAL.md, htdocs/themes/xtailwind2/theme.ini
Metadata, documentation, and license for xtailwind2 theme; detailed guide covering six curated palettes, shell styling, navigation, and customization workflow.
xtailwind2 Safety Endpoints
htdocs/themes/xtailwind2/index.php, htdocs/themes/xtailwind2/css/index.php, htdocs/themes/xtailwind2/images/index.php, htdocs/themes/xtailwind2/language/index.php, htdocs/themes/xtailwind2/tpl/index.php
HTTP 404 endpoint files preventing direct access to theme subdirectories.
xtailwind2 CSS
htdocs/themes/xtailwind2/css/input.css, htdocs/themes/xtailwind2/css/styles.css
Tailwind input with smooth scrolling, glassmorphism utilities, editorial typography, hero/content/rail panels, XOOPS content styling; minified output with six named DaisyUI theme palettes (atelier, fjord, pulsefire, noctis, velvet, graphite).
xtailwind2 Templates
htdocs/themes/xtailwind2/tpl/nav-menu.tpl, htdocs/themes/xtailwind2/theme.tpl, htdocs/themes/xtailwind2/tpl/blockContent.tpl, htdocs/themes/xtailwind2/tpl/content-zone.tpl, htdocs/themes/xtailwind2/tpl/leftBlock.tpl, htdocs/themes/xtailwind2/tpl/rightBlock.tpl, htdocs/themes/xtailwind2/tpl/inboxAlert.tpl
Smarty templates for page shell, navigation with palette switcher and mobile panel, block/content layout, sidebar rails, and inbox alerts; includes inline JavaScript for palette persistence and localStorage-based theme recalls.
xtailwind2 Configuration
htdocs/themes/xtailwind2/package.json, htdocs/themes/xtailwind2/tailwind.config.js, htdocs/themes/xtailwind2/theme_autorun.php
npm build/watch scripts; Tailwind config with custom font families (Space Grotesk/Inter), box shadows, border radius, and six custom DaisyUI theme definitions with explicit color palettes; form renderer selection and xtailwindThemes template assignment.
xtailwind2 Language
htdocs/themes/xtailwind2/language/english/index.php, htdocs/themes/xtailwind2/language/english/main.php
HTTP 404 endpoint for language directory; English locale constants for navigation, palette switcher, and UI labels.
Theme Generation Script
tools/write_xtailwind2.ps1
PowerShell script that scaffolds complete xtailwind2 theme directory structure with generated package.json, tailwind.config.js, theme.ini, theme_autorun.php, css/input.css, theme.tpl, navigation/block/content/sidebar templates, and README documentation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'add xtailwind and xtailwind2 themes' is clear and directly summarizes the main change: the addition of two new Tailwind CSS-based themes for XOOPS.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 PHPStan (2.1.46)

Invalid entry in excludePaths:
Path "/tests_codex2" is neither a directory, nor a file path, nor a fnmatch pattern.

If the excluded path can sometimes exist, append (?)
to its config entry to mark it as optional. Example:

parameters:
excludePaths:
analyseAndScan:
- tests_codex2 (?)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 10, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 19.23%. Comparing base (92199b2) to head (4e1a1ba).
⚠️ Report is 5 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff            @@
##             master       #4   +/-   ##
=========================================
  Coverage     19.22%   19.23%           
  Complexity     7584     7584           
=========================================
  Files           621      621           
  Lines         40085    40085           
=========================================
+ Hits           7707     7709    +2     
+ Misses        32378    32376    -2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mambax7 mambax7 merged commit 47e55b2 into XOOPS:master Apr 10, 2026
12 of 13 checks passed
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces two new Tailwind CSS + DaisyUI-based themes (xtailwind and xtailwind2) to the XOOPS theme set, including compiled CSS assets, template structure, theme bootstrapping (theme_autorun.php), and accompanying documentation/build configs.

Changes:

  • Add the xtailwind2 theme (curated palettes, new shell/templates, Tailwind+DaisyUI config, compiled CSS, docs).
  • Add the xtailwind theme (reference/proof-of-concept Tailwind+DaisyUI theme + tutorial/docs/config).
  • Add a PowerShell helper script intended to generate/write xtailwind2 theme files.

Reviewed changes

Copilot reviewed 48 out of 50 changed files in this pull request and generated 16 comments.

Show a summary per file
File Description
tools/write_xtailwind2.ps1 Adds a local script to generate/write out the xtailwind2 theme files.
htdocs/themes/xtailwind2/TUTORIAL.md Theme-specific guide explaining structure, palette system, and customization.
htdocs/themes/xtailwind2/tpl/rightBlock.tpl Right sidebar rail template for blocks.
htdocs/themes/xtailwind2/tpl/nav-menu.tpl Main navigation + search + theme picker + mobile drawer markup.
htdocs/themes/xtailwind2/tpl/leftBlock.tpl Left sidebar rail template for blocks.
htdocs/themes/xtailwind2/tpl/index.php Directory guard (404) for tpl/.
htdocs/themes/xtailwind2/tpl/inboxAlert.tpl PM toast alert template (Alpine-style directives).
htdocs/themes/xtailwind2/tpl/content-zone.tpl Main content wrapper + page-top block regions.
htdocs/themes/xtailwind2/tpl/blockContent.tpl Shared block wrapper + admin “edit block” link.
htdocs/themes/xtailwind2/theme.tpl Main page shell, homepage hero, and theme-switching JS.
htdocs/themes/xtailwind2/theme.ini XOOPS theme metadata for xtailwind2.
htdocs/themes/xtailwind2/theme_autorun.php Theme bootstrap: renderer selection + Smarty vars for theme palettes.
htdocs/themes/xtailwind2/tailwind.config.js Tailwind scan paths, theme extensions, and DaisyUI palette definitions.
htdocs/themes/xtailwind2/README.md Theme overview, behavior notes, and build instructions.
htdocs/themes/xtailwind2/package.json Theme-local build scripts/deps for Tailwind compilation.
htdocs/themes/xtailwind2/LICENSE Bundled license text (GPL v2).
htdocs/themes/xtailwind2/language/index.php Directory guard (404) for language/.
htdocs/themes/xtailwind2/language/english/main.php English language constants for theme strings.
htdocs/themes/xtailwind2/language/english/index.php Directory guard (404) for language/english/.
htdocs/themes/xtailwind2/index.php Directory guard (404) for theme root.
htdocs/themes/xtailwind2/images/index.php Directory guard (404) for images/.
htdocs/themes/xtailwind2/css/styles.css Compiled/minified Tailwind+DaisyUI CSS output.
htdocs/themes/xtailwind2/css/input.css Tailwind source CSS (custom layers/components/utilities).
htdocs/themes/xtailwind2/css/index.php Directory guard (404) for css/.
htdocs/themes/xtailwind/TUTORIAL.md General tutorial for building Tailwind themes for XOOPS.
htdocs/themes/xtailwind/tpl/rightBlock.tpl Right sidebar block template for xtailwind.
htdocs/themes/xtailwind/tpl/nav-menu.tpl Navigation + theme switcher + Alpine-driven mobile nav (xtailwind).
htdocs/themes/xtailwind/tpl/leftBlock.tpl Left sidebar block template for xtailwind.
htdocs/themes/xtailwind/tpl/index.php Directory guard (404) for tpl/.
htdocs/themes/xtailwind/tpl/inboxAlert.tpl PM toast alert template (Alpine-style directives).
htdocs/themes/xtailwind/tpl/content-zone.tpl Main content wrapper + page-top blocks (xtailwind).
htdocs/themes/xtailwind/tpl/blockContent.tpl Shared block wrapper + admin edit shortcut (xtailwind).
htdocs/themes/xtailwind/theme.tpl Main page shell + theme restoration + Alpine include (xtailwind).
htdocs/themes/xtailwind/theme.ini XOOPS theme metadata for xtailwind.
htdocs/themes/xtailwind/theme_autorun.php Theme bootstrap: renderer selection + Smarty theme list.
htdocs/themes/xtailwind/tailwind.config.js Tailwind config including safelist and DaisyUI theme list.
htdocs/themes/xtailwind/README.md Theme overview, install notes, and rebuild instructions.
htdocs/themes/xtailwind/package.json Theme-local build scripts/deps for Tailwind compilation.
htdocs/themes/xtailwind/LICENSE Bundled license text (GPL v2).
htdocs/themes/xtailwind/language/index.php Directory guard (404) for language/.
htdocs/themes/xtailwind/language/english/main.php English language constants for xtailwind strings.
htdocs/themes/xtailwind/language/english/index.php Directory guard (404) for language/english/.
htdocs/themes/xtailwind/index.php Directory guard (404) for theme root.
htdocs/themes/xtailwind/images/index.php Directory guard (404) for images/.
htdocs/themes/xtailwind/css/input.css Tailwind source CSS (custom layer + block normalization).
htdocs/themes/xtailwind/css/index.php Directory guard (404) for css/.
htdocs/themes/xtailwind/.gitignore Ignores node build artifacts while keeping compiled CSS committed.
Files not reviewed (2)
  • htdocs/themes/xtailwind/package-lock.json: Language not supported
  • htdocs/themes/xtailwind2/package-lock.json: Language not supported

Comment on lines +18 to +28
<script>
(function() {
const stored = localStorage.getItem('xtailwind2-theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const theme = stored || (prefersDark ? 'noctis' : 'atelier');
document.documentElement.setAttribute('data-theme', theme);
})();
</script>

<script src="<{$xoops_url}>/browse.php?Frameworks/jquery/jquery.js"></script>
<link rel="alternate" type="application/rss+xml" title="" href="<{xoAppUrl 'backend.php'}>">
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tpl/inboxAlert.tpl uses Alpine.js directives (x-data, x-show, x-transition, @click), but this theme template never loads Alpine.js (only jQuery). Without Alpine, the PM toast will never auto-hide and the close button won’t work. Include the shared Alpine.js bundle (as done in xtailwind/theme.tpl) or remove the Alpine directives and implement equivalent behavior with plain JS.

Copilot uses AI. Check for mistakes.
Comment on lines +38 to +40
<a class="btn btn-ghost rounded-full px-4 text-sm font-medium" href="<{if $cat.category_url neq ''}><{$cat.category_url|escape}><{else}>#<{/if}>" target="<{$cat.category_target}>">
<{$cat.category_title|escape}>
</a>
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Top-level category links can set target="_blank" via $cat.category_target, but unlike submenu links they don’t add rel="noopener noreferrer". Add the same conditional rel when opening a new tab to prevent reverse-tabnabbing.

Copilot uses AI. Check for mistakes.
Comment on lines +121 to +128
<a class="block rounded-2xl px-3 py-2 text-sm text-base-content/80 hover:bg-base-200/70" href="<{if $subItem.url neq ''}><{$subItem.url|escape}><{else}>#<{/if}>" target="<{$subItem.target}>" <{if $subItem.target == '_blank'}> rel="noopener noreferrer"<{/if}>><{$subItem.title|escape}></a>
</li>
<{/foreach}>
</ul>
</details>
<{else}>
<a class="block rounded-3xl border border-base-300/70 bg-base-100/65 px-4 py-3 font-semibold" href="<{if $cat.category_url neq ''}><{$cat.category_url|escape}><{else}>#<{/if}>" target="<{$cat.category_target}>"><{$cat.category_title|escape}></a>
<{/if}>
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue as desktop: mobile category links use target="<{$cat.category_target}>" without adding rel="noopener noreferrer" when the target is _blank. Add the conditional rel attribute for security consistency.

Copilot uses AI. Check for mistakes.
Comment on lines +93 to +95
<button id="xtailwind2-mobile-toggle" class="btn btn-ghost rounded-full xl:hidden" type="button" aria-expanded="false" aria-controls="xtailwind2-mobile-panel">
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg>
</button>
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mobile menu toggle button is icon-only and currently has no accessible name. Add an aria-label (e.g., "Open menu"/"Close menu") so screen readers can announce the control properly.

Copilot uses AI. Check for mistakes.
Comment on lines +105 to +110
<form role="search" action="<{xoAppUrl 'search.php'}>" method="get" class="flex gap-2">
<input type="text" name="query" class="input input-bordered w-full rounded-full" placeholder="<{$smarty.const.THEME_SEARCH_TEXT|default:'Search'}>">
<input type="hidden" name="action" value="results">
<button class="btn btn-primary rounded-full" type="submit">Go</button>
</form>
<{/if}>
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mobile search submit button text is hardcoded as "Go" even though a translatable constant (THEME_SEARCH_BUTTON) exists. Use the language constant (with a sensible default) to keep the theme fully localizable.

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +2
$base = 'C:\wamp64\www\2512menus\themes\xtailwind2'

Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This script hardcodes a local absolute path (C:\wamp64\www\...) as the output base directory, which makes it unusable for other developers/CI and easy to accidentally overwrite local files. Consider taking the destination path as a parameter (or deriving it relative to the repo) and validating it before writing.

Copilot uses AI. Check for mistakes.
Comment on lines +19 to +20
'@ | Set-Content -Path (Join-Path $base 'package.json') -Encoding UTF8

Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Set-Content -Encoding UTF8 can emit a UTF-8 BOM in Windows PowerShell, which is problematic for generated PHP files (it can trigger "headers already sent"). Prefer writing PHP/INI/TPL files as UTF-8 without BOM (e.g., utf8NoBOM where available) to avoid subtle runtime issues.

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +5
{
"name": "xtailwind2",
"version": "0.2.0",
"description": "Art-directed Tailwind CSS + DaisyUI theme for XOOPS 2.5",
"private": true,
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

xtailwind2 includes package.json but there is no per-theme .gitignore like xtailwind/.gitignore to keep node_modules/ and npm logs out of commits. Add a .gitignore in this theme directory (or a repo-level one) to avoid accidental vendor check-ins when running npm install.

Copilot uses AI. Check for mistakes.
- The root `<html>` starts with `data-theme="atelier"`, then swaps to the remembered theme before paint.
- The homepage gets a dedicated hero section when `$xoops_page == "index"`.
- Footer blocks render as lighter support panels instead of repeating the full card treatment from the sidebars.
- The theme prefers `XoopsFormRendererTailwind` (XOOPS 2.5.13+) so forms stay aligned with the rest of the Tailwind shell. On older XOOPS versions without that renderer, it gracefully falls back to `XoopsFormRendererBootstrap5` — forms still render correctly because DaisyUI aliases most Bootstrap 5 form component classes.
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This README states that the Bootstrap 5 fallback renderer stays styled because "DaisyUI aliases most Bootstrap 5 form component classes", but the compiled CSS shipped with the theme does not include Bootstrap selectors like .form-control / .form-select. Please update the documentation or add the necessary alias CSS so the fallback behavior matches what’s described.

Suggested change
- The theme prefers `XoopsFormRendererTailwind` (XOOPS 2.5.13+) so forms stay aligned with the rest of the Tailwind shell. On older XOOPS versions without that renderer, it gracefully falls back to `XoopsFormRendererBootstrap5` — forms still render correctly because DaisyUI aliases most Bootstrap 5 form component classes.
- The theme prefers `XoopsFormRendererTailwind` (XOOPS 2.5.13+) so forms stay aligned with the rest of the Tailwind shell. On older XOOPS versions without that renderer, it falls back to `XoopsFormRendererBootstrap5` for functional compatibility. The shipped theme CSS does not alias Bootstrap 5 form classes such as `.form-control` or `.form-select`, so Bootstrap-rendered forms may not match the full Tailwind/DaisyUI presentation until the Tailwind renderer is available or additional compatibility CSS is added.

Copilot uses AI. Check for mistakes.
### End users (site administrators)
- XOOPS 2.5.11+ (RTL auto-detection requires 2.5.12+)
- PHP 8.2+
- `XoopsFormRendererTailwind` class in XOOPS core is **recommended** (shipped with XOOPS 2.5.13+). If your XOOPS version doesn't include it, the theme automatically falls back to the Bootstrap 5 form renderer — forms will still work and look mostly correct because DaisyUI aliases most Bootstrap 5 form classes. For pixel-perfect form styling, add `XoopsFormRendererTailwind.php` to `htdocs/class/xoopsform/renderer/` manually.
Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This README claims the Bootstrap 5 fallback renderer looks mostly correct because DaisyUI aliases Bootstrap form classes, but the compiled CSS does not include selectors like .form-control. Update this statement or add explicit styling/aliases for the Bootstrap-rendered controls so the fallback matches the documented behavior.

Suggested change
- `XoopsFormRendererTailwind` class in XOOPS core is **recommended** (shipped with XOOPS 2.5.13+). If your XOOPS version doesn't include it, the theme automatically falls back to the Bootstrap 5 form renderer — forms will still work and look mostly correct because DaisyUI aliases most Bootstrap 5 form classes. For pixel-perfect form styling, add `XoopsFormRendererTailwind.php` to `htdocs/class/xoopsform/renderer/` manually.
- `XoopsFormRendererTailwind` class in XOOPS core is **recommended** (shipped with XOOPS 2.5.13+). If your XOOPS version doesn't include it, the theme automatically falls back to the Bootstrap 5 form renderer — forms will still function, but Bootstrap-specific control classes are not styled by the compiled xTailwind CSS in the same way as the Tailwind renderer output. For consistent, theme-matched form styling, add `XoopsFormRendererTailwind.php` to `htdocs/class/xoopsform/renderer/` manually.

Copilot uses AI. Check for mistakes.
@mambax7 mambax7 deleted the feature/add_Tailwind_themes branch April 10, 2026 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants