Files
Mark Gregory a433897538 Implemented the dynamic theme manager and merged the supplied themes.
Included

* Standardised all six theme.json files to manifest version 2:
    * admin
    * common
    * corporate
    * saasland
    * swiss
    * welcome
* Every manifest now uses the same fields and structure.
* Separate active frontend and backend themes.
* One-click theme activation.
* Theme preview in a new browser tab without activating it.
* Theme cards showing:
    * Preview
    * Name
    * Version
    * Author
    * Description
    * Theme type
    * Active status
* Dynamic theme-specific settings.
* Support for:
    * Text
    * URL
    * Colour
    * Textarea
    * Checkbox fields
    * Variants
    * Appearance
    * Accent palettes
* Theme ZIP installation.
* Theme ZIP export.
* Asset optimisation.
* Accessibility validation.
* Safe ZIP path validation.
* Theme inheritance.
* Active themes cannot be uninstalled.
* Parent themes cannot be uninstalled while child themes depend on them.
* Stylist administration routes now require an authenticated, verified user.
* Manifest validation now restricts theme types to:
    * frontend
    * backend
    * common
* Added activation tests for independent frontend and backend theme selection.

The supplied corporate theme was incomplete, so I added the required backend entry view and placeholder asset files while preserving its supplied layout.
2026-07-28 12:54:10 +01:00

108 lines
2.2 KiB
JSON

{
"manifest_version": 2,
"name": "Welcome",
"slug": "welcome",
"version": "1.1.2",
"author": "ABSDEV",
"description": "Laravel 13 welcome theme.",
"type": "frontend",
"extends": "common",
"entry_view": "welcome",
"stylesheet": "css/theme.css",
"script": "js/app.js",
"preview": "images/preview.webp",
"views": true,
"livewire_views": true,
"supports": {
"dark_mode": false,
"animations": false,
"privacy": false,
"terms": false,
"auth": false,
"preview": true,
"variants": true,
"settings": false,
"seo": true,
"export": true,
"accessibility_validation": true
},
"variables": {
"brand-primary": "#2563eb",
"brand-secondary": "#0f172a",
"brand-accent": "#22c55e",
"surface": "#ffffff",
"surface-muted": "#f8fafc",
"text-primary": "#0f172a"
},
"variants": {
"light": {
"label": "Light",
"variables": {}
},
"dark": {
"label": "Dark",
"variables": {
"surface": "#0f172a",
"surface-muted": "#111827",
"text-primary": "#f8fafc"
}
}
},
"appearances": {},
"accents": {},
"default_appearance": null,
"default_accent": null,
"settings": {
"site_title": {
"type": "text",
"label": "Site title",
"default": "Welcome"
},
"site_description": {
"type": "text",
"label": "Site description",
"default": "Laravel 13 welcome theme."
},
"logo_url": {
"type": "url",
"label": "Logo URL",
"default": ""
},
"--brand-primary": {
"type": "color",
"label": "Primary colour",
"default": "#2563eb"
},
"hero_title": {
"type": "text",
"label": "Hero title",
"default": ""
},
"facebook_url": {
"type": "url",
"label": "Facebook URL",
"default": ""
},
"x_url": {
"type": "url",
"label": "X URL",
"default": ""
},
"linkedin_url": {
"type": "url",
"label": "LinkedIn URL",
"default": ""
}
},
"seo": {
"title": "Welcome",
"description": "Laravel 13 welcome theme.",
"image": "images/preview.webp",
"json_ld": {
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Welcome"
}
}
}