Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .ddev/addon-metadata/phpmyadmin/manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: phpmyadmin
repository: ddev/ddev-phpmyadmin
version: v1.0.2
install_date: "2026-04-04T16:48:16+02:00"
project_files:
- docker-compose.phpmyadmin.yaml
- docker-compose.phpmyadmin_norouter.yaml
- commands/host/phpmyadmin
global_files: []
Comment on lines +1 to +9
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

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

The added PhpMyAdmin addon metadata (including install_date) isn’t mentioned in the PR description and is typically local-environment state. If this is intentional, please call it out in the PR description; otherwise consider excluding addon-metadata from version control to avoid noisy diffs for unrelated UI changes.

Copilot uses AI. Check for mistakes.
removal_actions: []
19 changes: 19 additions & 0 deletions .ddev/commands/host/phpmyadmin
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

## #ddev-generated: If you want to edit and own this file, remove this line.
## Description: Launch a browser with PhpMyAdmin
## Usage: phpmyadmin
## Example: "ddev phpmyadmin"

DDEV_PHPMYADMIN_PORT=8036
DDEV_PHPMYADMIN_HTTPS_PORT=8037
if [ ${DDEV_PRIMARY_URL%://*} = "http" ] || [ -n "${GITPOD_WORKSPACE_ID:-}" ] || [ "${CODESPACES:-}" = "true" ]; then
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

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

This script uses unquoted parameter expansion ([ ${DDEV_PRIMARY_URL%://*} = "http" ]). If DDEV_PRIMARY_URL is unset/empty this can cause a test syntax error, and unquoted expansions are generally brittle. Quote the expansion (or use a safer conditional) to avoid unexpected failures.

Suggested change
if [ ${DDEV_PRIMARY_URL%://*} = "http" ] || [ -n "${GITPOD_WORKSPACE_ID:-}" ] || [ "${CODESPACES:-}" = "true" ]; then
if [ "${DDEV_PRIMARY_URL%://*}" = "http" ] || [ -n "${GITPOD_WORKSPACE_ID:-}" ] || [ "${CODESPACES:-}" = "true" ]; then

Copilot uses AI. Check for mistakes.
# Gitpod: "gp preview" opens a blank page for PhpMyAdmin, use "xdg-open" instead
if [ "${OSTYPE:-}" = "linux-gnu" ] && [ -n "${GITPOD_WORKSPACE_ID:-}" ] && [ -z "${DDEV_DEBUG:-}" ]; then
xdg-open "$(DDEV_DEBUG=true ddev launch :$DDEV_PHPMYADMIN_PORT | grep "FULLURL" | awk '{print $2}')"
else
ddev launch :$DDEV_PHPMYADMIN_PORT
fi
else
ddev launch :$DDEV_PHPMYADMIN_HTTPS_PORT
fi
2 changes: 1 addition & 1 deletion .ddev/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ type: cakephp
docroot: webroot
php_version: "8.4"
webserver_type: nginx-fpm
xdebug_enabled: true
xdebug_enabled: false
additional_hostnames: []
Comment on lines 4 to 7
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

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

xdebug_enabled was changed to false, but the PR description focuses on the UI refactor and doesn’t mention this dev-environment change. If this is intentional, please note it in the PR description (or split it into a separate PR) to avoid surprising developers who rely on Xdebug being enabled by default.

Copilot uses AI. Check for mistakes.
additional_fqdns: []
database:
Expand Down
31 changes: 31 additions & 0 deletions .ddev/docker-compose.phpmyadmin.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#ddev-generated
services:
phpmyadmin:
container_name: ddev-${DDEV_SITENAME}-phpmyadmin
image: ${PHPMYADMIN_DOCKER_IMAGE:-phpmyadmin:5}
working_dir: "/root"
restart: "no"
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: ${DDEV_APPROOT}
volumes:
- ".:/mnt/ddev_config"
- "ddev-global-cache:/mnt/ddev-global-cache"
expose:
- "80"
environment:
- PMA_USER=root
- PMA_PASSWORD=root
- PMA_HOST=db
- PMA_PORT=3306
- VIRTUAL_HOST=$DDEV_HOSTNAME
- UPLOAD_LIMIT=4000M
Comment on lines +17 to +22
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

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

This phpMyAdmin compose file hardcodes PMA_USER=root / PMA_PASSWORD=root and a very large UPLOAD_LIMIT. Even in a dev-only setup, it’s safer to source credentials from the existing ddev DB env (or document why root/root is required) and to keep upload limits conservative.

Suggested change
- PMA_USER=root
- PMA_PASSWORD=root
- PMA_HOST=db
- PMA_PORT=3306
- VIRTUAL_HOST=$DDEV_HOSTNAME
- UPLOAD_LIMIT=4000M
- PMA_USER=${DDEV_DATABASE_USER:-db}
- PMA_PASSWORD=${DDEV_DATABASE_PASSWORD:-db}
- PMA_HOST=db
- PMA_PORT=3306
- VIRTUAL_HOST=$DDEV_HOSTNAME
- UPLOAD_LIMIT=256M

Copilot uses AI. Check for mistakes.
- HTTP_EXPOSE=8036:80
- HTTPS_EXPOSE=8037:80
healthcheck:
test: ["CMD-SHELL", "true"]
interval: 120s
timeout: 2s
retries: 1
depends_on:
- db
4 changes: 4 additions & 0 deletions .ddev/docker-compose.phpmyadmin_norouter.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#ddev-generated
# If omit_containers[ddev-router] then this file will be replaced
# with another with a `ports` statement to directly expose port 80 to 8036
services: {}
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@
"config": {
"allow-plugins": {
"cakephp/plugin-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true
"dealerdirect/phpcodesniffer-composer-installer": true,
"php-http/discovery": true
},
"platform-check": true,
"sort-packages": true
Expand Down
2 changes: 1 addition & 1 deletion config/form-templates.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* Custom templates for pagination elements.
*/
return [
'button' => '<button class="bg-cake-red hover:cursor-pointer p-2 text-white rounded-sm"{{attrs}}>{{text}}</button>',
'button' => '<button class="btn btn-soft btn-primary"{{attrs}}>{{text}}</button>',
'checkbox' => '<input class="justify-self-start" type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>',
'checkboxWrapper' => '<div class="col-span-2 col-start-2 flex gap-2">{{label}}</div>',
'error' => '<div class="col-start-2 col-end-4 text-cake-red" id="{{id}}">{{content}}</div>',
Expand Down
66 changes: 64 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"type": "module",
"devDependencies": {
"@tailwindcss/vite": "^4.1.4",
"daisyui": "^5.5.19",
"tailwindcss": "^4.0.0",
"vite": "^8.0.0"
},
Expand All @@ -10,6 +11,8 @@
"build": "vite build"
},
"dependencies": {
"htmx.org": "^2.0.8",
"slim-select": "^3.4.3",
"swiper": "^12.1.3"
}
}
93 changes: 82 additions & 11 deletions resources/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,48 @@
@import "./fonts.css";
@import "swiper/css";
@import "swiper/css/navigation";
@import "swiper/css/pagination";
@import "slim-select/styles";
@plugin "daisyui" {
themes: cakephp --default;
}

@plugin "daisyui/theme" {
name: "cakephp";
default: true;
prefersdark: false;
color-scheme: light;

--color-base-100: hsl(0 0% 100%);
--color-base-200: hsl(210 20% 98%);
--color-base-300: hsl(210 20% 94%);
--color-base-content: hsl(220 13% 18%);

--color-primary: hsl(214 84% 46%);
--color-primary-content: hsl(0 0% 100%);
--color-secondary: hsl(262 80% 50%);
--color-secondary-content: hsl(0 0% 100%);
--color-accent: hsl(199 89% 48%);
--color-accent-content: hsl(0 0% 100%);
--color-neutral: hsl(220 13% 18%);
--color-neutral-content: hsl(0 0% 100%);

--color-info: hsl(198 93% 60%);
--color-info-content: hsl(198 100% 12%);
--color-success: hsl(158 64% 52%);
--color-success-content: hsl(158 100% 10%);
--color-warning: hsl(43 96% 56%);
--color-warning-content: hsl(43 100% 11%);
--color-error: hsl(0 72% 46%);
--color-error-content: hsl(0 0% 100%);

--radius-box: 1.5rem;
--radius-field: 1rem;
--radius-selector: 1rem;
--border: 1px;
--depth: 1;
--noise: 0;
}

@theme {
--font-raleway: "Raleway", sans-serif;
Expand Down Expand Up @@ -40,9 +82,46 @@
--ss-primary-color: var(--color-blue-500);
}

.htmx-indicator {
opacity: 1;
transition: opacity 0.2s ease;
}

.htmx-request .htmx-indicator,
.htmx-request.htmx-indicator {
opacity: 1;
}

.main-loading-overlay {
position: fixed;
inset: 0;
z-index: 80;
display: flex;
align-items: center;
justify-content: center;
background: hsl(210 40% 98% / 0.72);
backdrop-filter: blur(2px);
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity 0.2s ease;
}

body.is-htmx-loading .main-loading-overlay,
.main-loading-overlay.htmx-request {
opacity: 1;
visibility: visible;
pointer-events: auto;
}

.main-loading-indicator-card {
opacity: 1;
z-index: 90;
}

@layer components {
.featured-packages-slider-shell {
@apply -mx-3 px-3 pb-4;
@apply pb-4;
}

.featured-packages-slider {
Expand All @@ -53,21 +132,13 @@
@apply h-auto py-2;
}

.featured-packages-slider-button {
@apply inline-flex h-11 w-11 items-center justify-center rounded-full border border-slate-200 bg-white text-lg text-slate-700 shadow-sm transition hover:border-cake-red hover:text-cake-red disabled:cursor-not-allowed disabled:opacity-40;
}

.featured-packages-slider-button::after {
content: none;
}

.packages-section-divider {
@apply flex items-center gap-4 text-xs font-semibold uppercase tracking-[0.24em] text-slate-400;
@apply flex items-center gap-4 text-xs font-semibold uppercase tracking-[0.24em] opacity-40;
}

.packages-section-divider::before,
.packages-section-divider::after {
content: "";
@apply h-px flex-1 bg-slate-200;
@apply h-px flex-1 bg-base-300;
}
}
Loading
Loading