├── resources ├── views │ ├── auth │ │ ├── partials │ │ │ └── logo.blade.php │ │ ├── layout.blade.php │ │ └── login.blade.php │ └── partials │ │ ├── meta.blade.php │ │ ├── toggle.blade.php │ │ ├── footer.blade.php │ │ ├── user.blade.php │ │ └── logo.blade.php ├── js │ ├── toggle.js │ ├── components │ │ ├── icons │ │ │ └── IconToggle.vue │ │ └── NovaDarkThemeToggle.vue │ └── theme.js ├── css │ ├── marshmallow-theme.css │ └── responsive.css └── sass │ └── dark.scss ├── .gitignore ├── mix-manifest.json ├── webpack.mix.js ├── src ├── Theme.php └── ThemeServiceProvider.php ├── CHANGELOG.md ├── .github ├── workflows │ └── php-syntax-checker.yml └── dependabot.yml ├── package.json ├── dist ├── css │ ├── marshmallow-theme.css │ ├── dark.css │ └── responsive.css └── js │ └── theme.js ├── config └── nova-styling.php ├── LICENSE ├── .php_cs.cache ├── .php_cs.dist ├── composer.json ├── README.md └── composer.lock /resources/views/auth/partials/logo.blade.php: -------------------------------------------------------------------------------- 1 | @include('nova::partials.logo', ['width' => '220', 'height' => '40']) 2 | -------------------------------------------------------------------------------- /resources/views/partials/meta.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | /vendor 3 | /node_modules 4 | composer.phar 5 | phpunit.xml 6 | .phpunit.result.cache 7 | .DS_Store 8 | Thumbs.db 9 | -------------------------------------------------------------------------------- /resources/views/partials/toggle.blade.php: -------------------------------------------------------------------------------- 1 |
  • 2 | 3 | {{-- label="{{ __('Dark Theme') }}" --}} 4 |
  • 5 | -------------------------------------------------------------------------------- /mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/dist/js/theme.js": "/dist/js/theme.js", 3 | "/dist/css/dark.css": "/dist/css/dark.css", 4 | "/dist/css/marshmallow-theme.css": "/dist/css/marshmallow-theme.css", 5 | "/dist/css/responsive.css": "/dist/css/responsive.css" 6 | } 7 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | let mix = require("laravel-mix"); 2 | 3 | mix.js("resources/js/theme.js", "dist/js") 4 | .vue() 5 | .sass("resources/sass/dark.scss", "dist/css") 6 | .copy("resources/css/marshmallow-theme.css", "dist/css") 7 | .copy("resources/css/responsive.css", "dist/css"); 8 | -------------------------------------------------------------------------------- /src/Theme.php: -------------------------------------------------------------------------------- 1 | version); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ![marshmallow-transparent-logo](https://cdn.marshmallow-office.com/media/images/logo/marshmallow.transparent.red.png)(https://marshmallow.dev) 2 | 3 | # Change Log 4 | 5 | ## 1.3.0-beta - 25-April-2020 6 | 7 | - Updated Publishing. 8 | - Added Responsive Theme & Options. 9 | 10 | ## 1.0.0-beta - 25-Jan-2020 11 | 12 | - Initial beta release. 13 | 14 | - - - 15 | 16 | Copyright (c) 2020 marshmallow -------------------------------------------------------------------------------- /resources/js/toggle.js: -------------------------------------------------------------------------------- 1 | function darkTheme() { 2 | var toggle = document.querySelector(".dark-theme-toggle"); 3 | 4 | toggle.addEventListener( 5 | "click", 6 | function (e) { 7 | e.stopPropagation(); 8 | var html = document.querySelector("html"); 9 | html.classList.toggle("nova-dark-theme"); 10 | }, 11 | true 12 | ); 13 | } 14 | 15 | document.addEventListener("DOMContentLoaded", darkTheme, false); 16 | -------------------------------------------------------------------------------- /.github/workflows/php-syntax-checker.yml: -------------------------------------------------------------------------------- 1 | name: PHP Syntax Checker 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | jobs: 11 | php-cs-fixer: 12 | name: PHP Syntax Checker 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout v3 16 | uses: actions/checkout@v3 17 | 18 | - name: Check PHP syntax errors 19 | uses: overtrue/phplint@8.0 20 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: composer 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "10:00" 8 | timezone: Europe/Amsterdam 9 | open-pull-requests-limit: 10 10 | - package-ecosystem: npm 11 | directory: "/" 12 | schedule: 13 | interval: daily 14 | time: "10:00" 15 | timezone: Europe/Amsterdam 16 | open-pull-requests-limit: 10 17 | - package-ecosystem: "github-actions" 18 | directory: "/" 19 | schedule: 20 | interval: "daily" 21 | time: "10:00" 22 | timezone: Europe/Amsterdam 23 | open-pull-requests-limit: 10 24 | -------------------------------------------------------------------------------- /resources/views/partials/footer.blade.php: -------------------------------------------------------------------------------- 1 |

    2 | {{ config('app.name') }} {{ __('by') }} Marshmallow © {{ date('Y') }}· 3 |

    4 | 5 | {{ __('Theme') }} v{{ \Marshmallow\NovaStyling\Theme::version() }} 6 | · 7 | Laravel Nova v{{ \Laravel\Nova\Nova::version() }} 8 |

    9 | {{-- --}} 10 | 11 | -------------------------------------------------------------------------------- /resources/js/components/icons/IconToggle.vue: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "mix", 5 | "watch": "mix watch", 6 | "watch-poll": "mix watch -- --watch-options-poll=1000", 7 | "hot": "mix watch --hot", 8 | "prod": "mix --production", 9 | "format": "prettier --write 'resources/**/*.{js,scss,vue}'" 10 | }, 11 | "devDependencies": { 12 | "cross-env": "^7.0.3", 13 | "laravel-mix": "^6.0.39", 14 | "laravel-nova": "^1.12.3", 15 | "resolve-url-loader": "^4.0.0", 16 | "sass": "^1.44.0", 17 | "sass-loader": "^12.4.0", 18 | "vue-loader": "^15.9.8", 19 | "vue-template-compiler": "^2.6.14" 20 | }, 21 | "dependencies": { 22 | "vue": "^2.6.14" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /dist/css/marshmallow-theme.css: -------------------------------------------------------------------------------- 1 | :root{--primary:rgb(255, 18, 59, 1);--primary-dark:rgb(206, 6, 42, 1);--primary-70:rgba(255, 18, 59, 0.7);--primary-50:rgba(255, 18, 59, 0.5);--primary-30:rgba(255, 18, 59, 0.3);--primary-10:rgba(255, 18, 59, 0.1);--logo:#ff123b;--sidebar-icon:#fff;--secondary:#5c7aff;--tertiary:#fbaf00;--dark:#292f36;--blue:#5c7aff;--yellow:#f4e409;--dark-green:#218380;--orange:#fbaf00}.bg-grad-sidebar{background-image:-webkit-gradient(linear,left bottom,left top,from(#ff123b),to(#3c4655));background-image:linear-gradient(0deg,#ff123b,#fe4d6b)}.text-secondary{color:var(--secondary)}.text-primary-bold{color:var(--primary);font-weight:600}.p-relative{position:relative}.current-language-header-icon{position:absolute;height:20px;width:20px;top:-2px;left:20px;border:2px solid --tertiary;padding:2px;background:#fff} 2 | -------------------------------------------------------------------------------- /config/nova-styling.php: -------------------------------------------------------------------------------- 1 | false, 7 | 8 | // List of sidebar headlines to hide (Ex.: ["Other"]) 9 | 'hidden_sidebar_headlines' => [], 10 | 11 | // If true, the resource tables actions will be always visible (sticky) 12 | 'resource_tables_sticky_actions' => false, 13 | 14 | // If true, the resource tables actions will be always visible (sticky) on mobile 15 | 'resource_tables_sticky_actions_on_mobile' => false, 16 | 17 | // If true, hides the "Update & Continue Editing" button on "Update" forms 18 | 'hide_update_and_continue_editing_button' => false, 19 | 20 | // If true, hides the "Update & Continue Editing" button on "Update" forms (mobile only) 21 | 'hide_update_and_continue_editing_button_on_mobile' => false, 22 | 23 | // If true, the sidebar will stay fixed on desktop view 24 | 'fixed_sidebar' => false, 25 | 26 | ]; 27 | -------------------------------------------------------------------------------- /resources/views/partials/user.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | @if (class_exists('\Marshmallow\Translatable\Models\Language')) 6 | 8 | @endif 9 | 10 | 11 | {{ $user->name ?? $user->email ?? __('Marshmallow User') }} 12 | 13 | 14 | 15 | 16 | 23 | 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Marshmallow-Development 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /resources/views/auth/layout.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ \Laravel\Nova\Nova::name() }} 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | @include('nova::partials.meta') 18 | 19 | 20 | @foreach(\Laravel\Nova\Nova::themeStyles() as $publicPath) 21 | 22 | @endforeach 23 | 24 | 25 |
    26 |
    27 | @yield('content') 28 |
    29 |
    30 | 31 | 32 | -------------------------------------------------------------------------------- /.php_cs.cache: -------------------------------------------------------------------------------- 1 | {"php":"7.4.10","version":"2.16.4","indent":" ","lineEnding":"\n","rules":{"blank_line_after_namespace":true,"braces":true,"class_definition":true,"constant_case":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"on_multiline":"ensure_fully_multiline","keep_multiple_spaces_after_comma":true},"no_break_comment":true,"no_closing_tag":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_import_per_statement":true,"single_line_after_imports":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":true,"encoding":true,"full_opening_tag":true,"array_syntax":{"syntax":"short"},"ordered_imports":{"sortAlgorithm":"alpha"},"no_unused_imports":true,"not_operator_with_successor_space":true,"trailing_comma_in_multiline_array":true,"phpdoc_scalar":true,"unary_operator_spaces":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["break","continue","declare","return","throw","try"]},"phpdoc_single_line_var_spacing":true,"phpdoc_var_without_name":true,"class_attributes_separation":{"elements":["method","property"]}},"hashes":{"src\/ThemeServiceProvider.php":4072422129}} -------------------------------------------------------------------------------- /.php_cs.dist: -------------------------------------------------------------------------------- 1 | notPath('bootstrap/*') 5 | ->notPath('storage/*') 6 | ->notPath('vendor') 7 | ->in([ 8 | __DIR__ . '/src', 9 | ]) 10 | ->name('*.php') 11 | ->ignoreDotFiles(true) 12 | ->ignoreVCS(true); 13 | 14 | return PhpCsFixer\Config::create() 15 | ->setRules([ 16 | '@PSR2' => true, 17 | 'array_syntax' => ['syntax' => 'short'], 18 | 'ordered_imports' => ['sortAlgorithm' => 'length'], 19 | 'no_unused_imports' => true, 20 | 'not_operator_with_successor_space' => true, 21 | 'trailing_comma_in_multiline_array' => true, 22 | 'phpdoc_scalar' => true, 23 | 'unary_operator_spaces' => true, 24 | 'binary_operator_spaces' => true, 25 | 'blank_line_before_statement' => [ 26 | 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'], 27 | ], 28 | 'phpdoc_single_line_var_spacing' => true, 29 | 'phpdoc_var_without_name' => true, 30 | 'class_attributes_separation' => [ 31 | 'elements' => [ 32 | 'method', 'property', 33 | ], 34 | ], 35 | 'method_argument_space' => [ 36 | 'on_multiline' => 'ensure_fully_multiline', 37 | 'keep_multiple_spaces_after_comma' => true, 38 | ] 39 | ]) 40 | ->setFinder($finder); 41 | -------------------------------------------------------------------------------- /resources/css/marshmallow-theme.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primary: rgb(255, 18, 59, 1); 3 | /* --primary-dark: rgb(209, 0, 105, 1); */ 4 | --primary-dark: rgb(206, 6, 42, 1); 5 | --primary-70: rgba(255, 18, 59, 0.7); 6 | --primary-50: rgba(255, 18, 59, 0.5); 7 | --primary-30: rgba(255, 18, 59, 0.3); 8 | --primary-10: rgba(255, 18, 59, 0.1); 9 | --logo: #ff123b; 10 | --sidebar-icon: #fff; 11 | --secondary: #5c7aff; 12 | --tertiary: #fbaf00; 13 | --dark: #292f36; 14 | --blue: #5c7aff; 15 | --yellow: #f4e409; 16 | --dark-green: #218380; 17 | --orange: #fbaf00; 18 | } 19 | 20 | .bg-grad-sidebar { 21 | background-image: -webkit-gradient( 22 | linear, 23 | left bottom, 24 | left top, 25 | from(rgb(255, 18, 59, 1)), 26 | to(#3c4655) 27 | ); 28 | 29 | background-image: linear-gradient( 30 | 0deg, 31 | rgb(255, 18, 59, 1), 32 | rgb(254, 77, 107) 33 | ); 34 | } 35 | 36 | /* .bg-gray-100 { 37 | --bg-opacity: 1; 38 | background-color:#eef1f3; 39 | background-color: rgba(238, 241, 243, var(--bg-opacity)); 40 | } */ 41 | 42 | .text-secondary { 43 | color: var(--secondary); 44 | } 45 | 46 | .text-primary-bold { 47 | color: var(--primary); 48 | font-weight: 600; 49 | } 50 | 51 | .p-relative { 52 | position: relative; 53 | } 54 | 55 | .current-language-header-icon { 56 | position: absolute; 57 | height: 20px; 58 | width: 20px; 59 | top: -2px; 60 | left: 20px; 61 | border: 2px solid --tertiary; 62 | padding: 2px; 63 | background: white; 64 | } 65 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "marshmallow/nova-styling", 3 | "description": "A Responsive Laravel Nova Marshmallow Theme based on 'A Responsive Laravel Nova theme'. With dark mode :)", 4 | "keywords": [ 5 | "Laravel Nova Theme", 6 | "Marshmallow Theme", 7 | "Dark Mode", 8 | "Laravel Nova Dark Mode", 9 | "Marshmallow", 10 | "laravel", 11 | "nova", 12 | "Responsive Laravel Nova Theme" 13 | ], 14 | "homepage": "https://github.com/marshmallow-packages/nova-styling", 15 | "license": "MIT", 16 | "authors": [ 17 | { 18 | "name": "Stef van Esch", 19 | "email": "stef@marshmallow.dev", 20 | "homepage": "https://marshmallow.dev/", 21 | "role": "Developer" 22 | }, 23 | { 24 | "name": "LTKort", 25 | "email": "lars@kort.dev", 26 | "homepage": "https://kort.dev/", 27 | "role": "Developer" 28 | } 29 | ], 30 | "require": { 31 | "php": "^8.0", 32 | "marshmallow/categorise-resources": "^1.0.0" 33 | }, 34 | "require-dev": {}, 35 | "autoload": { 36 | "psr-4": { 37 | "Marshmallow\\NovaStyling\\": "src" 38 | } 39 | }, 40 | "autoload-dev": { 41 | "psr-4": { 42 | "Marshmallow\\NovaStyling\\": "src" 43 | } 44 | }, 45 | "extra": { 46 | "laravel": { 47 | "providers": [ 48 | "Marshmallow\\NovaStyling\\ThemeServiceProvider" 49 | ] 50 | } 51 | }, 52 | "minimum-stability": "dev", 53 | "prefer-stable": true 54 | } 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![alt text](https://marshmallow.dev/cdn/media/logo-red-237x46.png "marshmallow.") 2 | 3 | # Laravel Nova Styling 4 | This package customizes Laravel Nova with the original Marshmallow styling. Implemented for all multipurpose CMS systems created and developed by Marshmallow. 5 | 6 | ## We support darkmode 🌙 7 | [![marshmallow-nova-styling-example](https://marshmallow.dev/cdn/readme/nova-custom/custom-styling-darkmode.png)](https://marshmallow.dev) 8 | 9 | ### Installation 10 | ```bash 11 | composer require marshmallow/nova-styling 12 | ``` 13 | 14 | ### Vendor Publish 15 | This theme includes adapted Nova blade files and a config file with options based on Nova Responsive Theme. To use them, first publish the config file: 16 | ```bash 17 | php artisan vendor:publish --provider="Marshmallow\NovaStyling\ThemeServiceProvider" --tag="config" --force 18 | php artisan vendor:publish --provider="Marshmallow\NovaStyling\ThemeServiceProvider" --tag="views" --force 19 | php artisan vendor:publish --provider="Marshmallow\NovaStyling\ThemeServiceProvider" --tag="styling" --force 20 | ``` 21 | 22 | ## Changelog 23 | 24 | Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. 25 | 26 | ## Security 27 | 28 | If you discover any security related issues, please email stef@marshmallow.dev instead of using the issue tracker. 29 | 30 | ## Credits 31 | 32 | - [All Contributors](../../contributors) 33 | 34 | Responsive design is based on Nova Responsive Theme by Gregoriohc. 35 | See https://github.com/gregoriohc/laravel-nova-theme-responsive 36 | - [Gregorio Hernández Caso](https://github.com/gregoriohc) 37 | 38 | ## License 39 | 40 | The MIT License (MIT). Please see [License File](LICENSE) for more information. 41 | -------------------------------------------------------------------------------- /src/ThemeServiceProvider.php: -------------------------------------------------------------------------------- 1 | config('nova-styling'), 30 | ]); 31 | }); 32 | 33 | // Publishes Config 34 | $this->publishes([ 35 | self::CONFIG_FILE => config_path('nova-styling.php'), 36 | ], 'config'); 37 | 38 | // Views 39 | $this->publishes([ 40 | self::NOVA_VIEWS_PATH => resource_path('views/vendor/nova'), 41 | ], 'views'); 42 | 43 | // Publish Public CSS for login screen 44 | $this->publishes([ 45 | self::CSS_PATH => public_path('vendor/marshmallow/nova-styling'), 46 | ], 'styling'); 47 | 48 | // Sets CSS file as asset 49 | Nova::style('nova-styling-mm', asset('vendor/marshmallow/nova-styling/marshmallow-theme.css')); 50 | // Nova::style(asset('vendor/marshmallow/nova-styling/responsive.css')); 51 | } 52 | 53 | /** 54 | * Register any application services. 55 | * 56 | * @return void 57 | */ 58 | public function register() 59 | { 60 | $this->mergeConfigFrom( 61 | self::CONFIG_FILE, 62 | 'nova-styling' 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /resources/views/auth/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('nova::auth.layout') 2 | 3 | @section('content') 4 | 5 | @include('nova::auth.partials.header') 6 | 7 |
    12 | {{ csrf_field() }} 13 | 14 | @component('nova::auth.partials.heading') 15 | {{ __('Welcome!') }} 16 | @endcomponent 17 | 18 | @if ($errors->any()) 19 |

    20 | @if ($errors->has('email')) 21 | {{ $errors->first('email') }} 22 | @else 23 | {{ $errors->first('password') }} 24 | @endif 25 |

    26 | @endif 27 | 28 |
    29 | 30 | 31 |
    32 | 33 |
    34 | 35 | 36 |
    37 |
    38 | 42 |
    43 | 44 |
    45 | 48 |
    49 | @if (\Laravel\Nova\Nova::resetsPasswords()) 50 |
    51 | 52 | 53 | {{ __('Forgot Your Password?') }} 54 | 55 |
    56 | @endif 57 |
    58 | @endsection 59 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "77ca1c0ed1ef0a3bbe50cd90c6fc7140", 8 | "packages": [ 9 | { 10 | "name": "marshmallow/categorise-resources", 11 | "version": "v1.3.2", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/marshmallow-packages/categorise-resources.git", 15 | "reference": "e82769675c082cc33ec5196a1c9b8762e4d5536d" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/marshmallow-packages/categorise-resources/zipball/e82769675c082cc33ec5196a1c9b8762e4d5536d", 20 | "reference": "e82769675c082cc33ec5196a1c9b8762e4d5536d", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.1|^8.0" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "laravel": { 29 | "providers": [ 30 | "Marshmallow\\CategoriseResources\\ToolServiceProvider" 31 | ] 32 | } 33 | }, 34 | "autoload": { 35 | "psr-4": { 36 | "Marshmallow\\CategoriseResources\\": "src/" 37 | } 38 | }, 39 | "notification-url": "https://packagist.org/downloads/", 40 | "license": [ 41 | "MIT" 42 | ], 43 | "authors": [ 44 | { 45 | "name": "Stef van Esch", 46 | "email": "stef@marshmallow.dev", 47 | "role": "Developer" 48 | }, 49 | { 50 | "name": "Alex Bowers", 51 | "email": "bowersbros@gmail.com", 52 | "role": "Developer" 53 | } 54 | ], 55 | "description": "Group and categorise your nova resources", 56 | "homepage": "https://github.com/marshmallow-packages/categorise-resources", 57 | "keywords": [ 58 | "laravel", 59 | "nova" 60 | ], 61 | "support": { 62 | "issues": "https://github.com/marshmallow-packages/categorise-resources/issues", 63 | "source": "https://github.com/marshmallow-packages/categorise-resources/tree/v1.3.2" 64 | }, 65 | "time": "2021-07-01T17:55:08+00:00" 66 | } 67 | ], 68 | "packages-dev": [], 69 | "aliases": [], 70 | "minimum-stability": "dev", 71 | "stability-flags": [], 72 | "prefer-stable": true, 73 | "prefer-lowest": false, 74 | "platform": { 75 | "php": "^8.0" 76 | }, 77 | "platform-dev": [], 78 | "plugin-api-version": "2.3.0" 79 | } 80 | -------------------------------------------------------------------------------- /resources/js/components/NovaDarkThemeToggle.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 77 | 78 | 111 | -------------------------------------------------------------------------------- /resources/js/theme.js: -------------------------------------------------------------------------------- 1 | Nova.booting((Vue, router) => { 2 | Vue.component( 3 | "nova-dark-theme-toggle", 4 | require("./components/NovaDarkThemeToggle").default 5 | ); 6 | }); 7 | 8 | if (localStorage.darkThemeOn === "true") { 9 | document.querySelector("html").classList.add("nova-dark-theme"); 10 | document.querySelector("body").classList.add("nova-dark-theme"); 11 | } else { 12 | document.querySelector("html").classList.remove("nova-dark-theme"); 13 | document.querySelector("body").classList.remove("nova-dark-theme"); 14 | } 15 | 16 | function load() { 17 | // Set viewport 18 | var viewport = document.querySelector("meta[name=viewport]"); 19 | viewport.setAttribute( 20 | "content", 21 | "width=device-width, initial-scale=1, shrink-to-fit=no" 22 | ); 23 | 24 | // Add hidden class to sidebar 25 | var sidebar = document.querySelector(".w-sidebar"); 26 | sidebar.classList.add("sidebar-hidden"); 27 | 28 | // Add hamburger menu to header 29 | var hamburger = document.createElement("span"); 30 | hamburger.className = "hamburger-menu"; 31 | var contentHeader = document.querySelector(".content .h-header"); 32 | contentHeader.prepend(hamburger); 33 | 34 | // Hamburger click event 35 | hamburger.addEventListener( 36 | "click", 37 | function (e) { 38 | e.stopPropagation(); 39 | var sidebar = document.querySelector(".w-sidebar"); 40 | sidebar.classList.toggle("sidebar-hidden"); 41 | }, 42 | true 43 | ); 44 | 45 | var sidebarLinks = document.querySelectorAll( 46 | ".w-sidebar a, .w-sidebar .cursor-pointer:not(.nc-head), .w-sidebar .nc-item-link" 47 | ); 48 | sidebarLinks.forEach(function (sidebarLink) { 49 | sidebarLink.addEventListener( 50 | "click", 51 | function () { 52 | var sidebar = document.querySelector(".w-sidebar"); 53 | sidebar.classList.add("sidebar-hidden"); 54 | }, 55 | false 56 | ); 57 | }); 58 | 59 | // Hide sidebar when clicking outside 60 | var rootElements = document.querySelectorAll("body,html"); 61 | rootElements.forEach(function (rootElement) { 62 | rootElement.addEventListener("click", function (e) { 63 | var sidebar = document.querySelector(".w-sidebar"); 64 | if (e.target !== sidebar && !sidebar.contains(e.target)) { 65 | sidebar.classList.add("sidebar-hidden"); 66 | } 67 | }); 68 | }); 69 | 70 | // Config based theme tweaking 71 | if (Nova.config.mmns) { 72 | // Hide sidebar headlines 73 | var sidebarHeadlines = document.querySelectorAll(".w-sidebar h4"); 74 | sidebarHeadlines.forEach(function (sidebarHeadline) { 75 | if ( 76 | Nova.config.mmns.hide_all_sidebar_headlines || 77 | Nova.config.mmns.hidden_sidebar_headlines.indexOf( 78 | sidebarHeadline.textContent 79 | ) !== -1 80 | ) { 81 | sidebarHeadline.classList.add("hidden"); 82 | } 83 | }); 84 | 85 | // Sticky resource table actions 86 | if (Nova.config.mmns.resource_tables_sticky_actions) { 87 | var contents = document.querySelectorAll(".content"); 88 | contents.forEach(function (content) { 89 | content.classList.add("sticky-actions"); 90 | }); 91 | } 92 | if (Nova.config.mmns.resource_tables_sticky_actions_on_mobile) { 93 | var contents = document.querySelectorAll(".content"); 94 | contents.forEach(function (content) { 95 | content.classList.add("sticky-actions-on-mobile"); 96 | }); 97 | } 98 | 99 | // Hide "Update & Continue Editing" button 100 | if (Nova.config.mmns.hide_update_and_continue_editing_button) { 101 | var contents = document.querySelectorAll(".content"); 102 | contents.forEach(function (content) { 103 | content.classList.add( 104 | "hide-update-and-continue-editing-button" 105 | ); 106 | }); 107 | } 108 | if ( 109 | Nova.config.mmns.hide_update_and_continue_editing_button_on_mobile 110 | ) { 111 | var contents = document.querySelectorAll(".content"); 112 | contents.forEach(function (content) { 113 | content.classList.add( 114 | "hide-update-and-continue-editing-button-on-mobile" 115 | ); 116 | }); 117 | } 118 | 119 | // Fixed sidebar on desktop 120 | if (Nova.config.mmns.fixed_sidebar) { 121 | document.querySelector("body").classList.add("fixed-sidebar"); 122 | } 123 | } 124 | } 125 | 126 | document.addEventListener("DOMContentLoaded", load, false); 127 | -------------------------------------------------------------------------------- /dist/css/dark.css: -------------------------------------------------------------------------------- 1 | html.nova-dark-theme{background-color:#06090f!important}.nova-dark-theme html{background-color:#0d1117!important;height:auto!important}.nova-dark-theme body{background-color:#06090f!important;height:auto!important}.nova-dark-theme .hamburger-menu:before{background:linear-gradient(180deg,#fff,#fff 20%,#000 0,#000 40%,#fff 0,#fff 60%,#000 0,#000 80%,#fff 0,#fff)}.nova-dark-theme .dark-mode-toggle{background-color:#0e1217}.nova-dark-theme #layout-selector .components-container,.nova-dark-theme .bg-white{background-color:#0d1117}.nova-dark-theme .component-layout-selector{background-color:#161c22;border-color:#30383d}.nova-dark-theme .flex .border-60{border-color:#30383d}.nova-dark-theme .flex .bg-white{background-color:#161b22}.nova-dark-theme .link,.nova-dark-theme a,.nova-dark-theme a .text-secondary{color:#5c7aff;text-decoration:none}.nova-dark-theme .link:hover,.nova-dark-theme a .text-secondary:hover,.nova-dark-theme a:hover{text-decoration:underline}.nova-dark-theme .link .link:visited,.nova-dark-theme a .link:visited,.nova-dark-theme a .text-secondary .link:visited{opacity:.8}.nova-dark-theme .text-primary:visited{color:#bc4d61!important}.nova-dark-theme .w-sidebar *{color:#c9d1d9!important}.nova-dark-theme .w-sidebar :hover{color:#ff113b!important;opacity:1}.nova-dark-theme .multiselect__option--highlight,.nova-dark-theme .multiselect__option--highlight:after{background-color:#ff113b;background:#ff113b}.nova-dark-theme .bg-logo{background-color:#161b22;color:#ff113b!important}.nova-dark-theme .cursor-pointer:hover,.nova-dark-theme .text-primary{color:#ff113b!important}.nova-dark-theme .cursor-pointer:hover:visited,.nova-dark-theme .text-primary:visited{color:#bc4d61}.nova-dark-theme .btn-primary,.nova-dark-theme .btn-primary:visited{color:#fff}.nova-dark-theme .bg-grad-sidebar{background-color:#0d1117;background-image:-webkit-gradient(linear,left bottom,left top,from(#0d1117),to(#0d1117))}.nova-dark-theme .table td,.nova-dark-theme .table th{border-color:#30363d;color:#eee}.nova-dark-theme .table th{background-color:#0d1117}.nova-dark-theme .flex.items-center.relative.shadow.h-header.bg-white.z-20.px-view{background-color:#0f1217}.nova-dark-theme .bg-20,.nova-dark-theme .bg-30,.nova-dark-theme .btn-white,.nova-dark-theme .card,.nova-dark-theme .multiselect__spinner{background-color:#161b22}.nova-dark-theme .bg-30:hover{background-color:#060910}.nova-dark-theme .bg-40,.nova-dark-theme .multiselect__content-wrapper,.nova-dark-theme .table tr:hover td,.nova-dark-theme .tooltip{background-color:#0d1117}.nova-dark-theme .border-30{border-color:#30363d}.nova-dark-theme .border-30,.nova-dark-theme .border-40,.nova-dark-theme .border-50{border-color:#30373d}.nova-dark-theme .border-60,.nova-dark-theme .border-70{border-color:#0e1217}.nova-dark-theme .border-80{border-color:#060910}.nova-dark-theme .text-60,.nova-dark-theme .text-70{color:#626a71}.nova-dark-theme .relationship-tabs-panel .tab,.nova-dark-theme .text-80,.nova-dark-theme .text-90{color:#cfd3d8}.nova-dark-theme .btn-outline,.nova-dark-theme .relationship-tabs-panel .tab:hover{color:#ff113b}.nova-dark-theme .multiselect__content-wrapper,.nova-dark-theme .tooltip{border-color:#161b22;color:#cfd3d8}.nova-dark-theme .form-global-search:active,.nova-dark-theme .form-global-search:focus,.nova-dark-theme .form-input:focus,.nova-dark-theme .form-search:active,.nova-dark-theme .form-search:focus{background-color:#060910}.nova-dark-theme .form-input-bordered,.nova-dark-theme .form-input-row,.nova-dark-theme .form-select,.nova-dark-theme .multiselect,.nova-dark-theme .multiselect__input,.nova-dark-theme .multiselect__single,.nova-dark-theme .multiselect__tags,.nova-dark-theme .tags-input-text{background-color:#0e1217;border-color:#2e3235;color:#cfd3d8}.nova-dark-theme .multiselect__tags{border-color:#2e3235!important}.nova-dark-theme .form-global-search,.nova-dark-theme input{background-color:#161b22;border-color:#535c67;color:#cfd3d8}.nova-dark-theme .form-input-bordered,.nova-dark-theme .multiselect__content-wrapper,.nova-dark-theme .multiselect__tags{border-color:#2e3235}.nova-dark-theme .checkbox:checked{background-color:#ff133b}.nova-dark-theme select{color:#cfd3d8}.nova-dark-theme .bg-gray-800{--bg-opacity:1;background-color:#0d1117;background-color:rgba(45,55,72,var(--bg-opacity))}.nova-dark-theme .bg-gray-900{--bg-opacity:1;background-color:#06090f;background-color:rgba(26,32,44,var(--bg-opacity))}.nova-dark-theme .border-gray-700{--border-opacity:1;border-color:#30363d;border-color:rgba(74,85,104,var(--border-opacity))}.nova-dark-theme .text-white{--text-opacity:1;color:#c9d1d9;color:rgba(255,255,255,var(--text-opacity))}.nova-dark-theme .text-gray-400{--text-opacity:1;color:#88929c;color:rgba(203,213,224,var(--text-opacity))}.nova-dark-theme button.appearance-none.cursor-pointer.fill-current.hover\:text-primary.flex.px-4.items-center.focus\:outline-none{color:rgba(207,211,216,.702)}.nova-dark-theme .hover\:bg-30:hover{background-color:#232930}.nova-dark-theme .gallery .gallery-item .gallery-item-info{--bg-opacity:0;background-color:#0e1217;background-color:rgba(14,18,23,var(--bg-opacity))}.nova-dark-theme .gallery .gallery-item-image.gallery-item .gallery-item-info{background-color:rgba(232,245,251,.35)}.nova-dark-theme .bg-gray-100,.nova-dark-theme .gallery .gallery-item{--bg-opacity:1;background-color:#0e1217;background-color:rgba(14,18,23,var(--bg-opacity))}.nova-dark-theme button.text-left.w-full.leading-normal.dim.my-2{color:#cfd3d8} 2 | -------------------------------------------------------------------------------- /dist/css/responsive.css: -------------------------------------------------------------------------------- 1 | .hamburger-menu{cursor:pointer;position:relative;height:19px;display:none}html:not([dir=rtl]) .hamburger-menu{padding-left:1.25em;margin-right:9px}html[dir=rtl] .hamburger-menu{padding-right:1.25em;margin-left:9px}.hamburger-menu:before{content:"";position:absolute;top:.21em;bottom:.21em;width:1em;background:linear-gradient(to bottom,#000,#000 20%,#fff 20%,#fff 40%,#000 40%,#000 60%,#fff 60%,#fff 80%,#000 80%,#000 100%)}html:not([dir=rtl]) .hamburger-menu:before{left:0}html[dir=rtl] .hamburger-menu:before{right:0}.content.hide-update-and-continue-editing-button button[dusk$=update-and-continue-editing-button]{display:none}.content.sticky-actions .card table.w-full tbody tr td:last-child,.content.sticky-actions .card table.w-full thead tr th:last-child{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky;right:0}.content.sticky-actions .card table.w-full tbody tr td:last-child{background:#fff}.content.sticky-actions .card table.w-full tbody tr td:last-child:before{content:'';height:100%;top:0;margin-left:-.75rem;position:absolute;border-left:1px solid #eee}@media (min-width:992px){body.fixed-sidebar .bg-grad-sidebar{position:fixed;padding-top:5.5rem!important;overflow:auto;height:100%}body.fixed-sidebar .content{padding-left:13.75rem;max-width:100%}}@media (max-width:80rem){.min-w-site{min-width:auto}.content{min-width:auto;width:100%}.content.sticky-actions-on-mobile .card table.w-full tbody tr td:last-child,.content.sticky-actions-on-mobile .card table.w-full thead tr th:last-child{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky;right:0}.content.sticky-actions-on-mobile .card table.w-full tbody tr td:last-child{background:#fff}.content.sticky-actions-on-mobile .card table.w-full tbody tr td:last-child:before{content:'';height:100%;top:0;margin-left:-.75rem;position:absolute;border-left:1px solid #eee}}@media (max-width:992px){.w-sidebar{position:fixed;padding-top:5.5rem!important;z-index:30;height:100%;overflow:auto}.w-sidebar.pt-header{padding-top:1.75rem}.sidebar-hidden{display:none}.h-header{z-index:40;position:fixed;width:100%;margin-top:-3.75rem}.hamburger-menu{display:block}html:not([dir=rtl]) .hamburger-menu{margin-right:1rem}html[dir=rtl] .hamburger-menu{margin-left:1rem}.bg-logo{display:none!important}html:not([dir=rtl]) .h-header .dropdown-trigger{margin-right:-20px}html[dir=rtl] .h-header .dropdown-trigger{margin-left:-20px}.h-header .dropdown-trigger span,.h-header .dropdown-trigger svg{display:none}html:not([dir=rtl]) .h-header .dropdown-trigger img.mr-3{margin-right:2em}html[dir=rtl] .h-header .dropdown-trigger img.mr-3{margin-right:2em}span.hamburger-menu+a{display:none}.h-header .pl-search{width:85%}.content{padding-top:3.75rem;max-width:none}.content .px-view{padding-left:1.125rem;padding-right:1.125rem}.content .py-view{padding-top:1.125rem;padding-bottom:1.125rem}form .w-1\/2{width:80%}form .w-1\/2>div.flex{display:flex;flex-wrap:nowrap}form>.flex{display:block}form>.flex>button{margin-bottom:10px}.content.hide-update-and-continue-editing-button-on-mobile button[dusk$=update-and-continue-editing-button]{display:none}.content form .card>.flex,div[dusk$=detail-component] .card>.flex{display:block}.content form .card>.flex>div,div[dusk$=detail-component] .card>.flex>div{width:100%}.content form .card>.flex>.py-6,div[dusk$=detail-component] .card>.flex>.py-4{padding-top:.5rem;padding-bottom:0}.content form .card>.flex>.py-6,div[dusk$=detail-component] .card>.flex.bg-20>.py-4{padding-bottom:.5rem}.content form .card>.flex>.py-6+.py-6,div[dusk$=detail-component] .card>.flex>.py-4+.py-4{padding-bottom:.5rem}.card>form>div header.flex{display:block}.card>form>div header.flex ul:first-child{border-bottom:1px solid var(--60)}html:not([dir=rtl]) .card>form>div header.flex ul:nth-child(2) button:first-child{border-left:none}html[dir=rtl] .card>form>div header.flex ul:nth-child(2) button:first-child{border-right:none}html:not([dir=rtl]) .card>form>div header.flex ul:nth-child(2) button:last-child{border-right:1px solid var(--60)}html[dir=rtl] .card>form>div header.flex ul:nth-child(2) button:last-child{border-left:1px solid var(--60)}.card>form>div div.pin{z-index:2000}trix-toolbar .trix-button-row{display:inline-block!important}html:not([dir=rtl]) trix-toolbar .trix-button-group{float:left!important}html[dir=rtl] trix-toolbar .trix-button-group{float:right!important}.content .flex-wrap>.w-1\/2,.content .flex-wrap>.w-1\/3,.content .flex-wrap>.w-1\/4,.content .flex-wrap>.w-1\/5,.content .flex-wrap>.w-1\/6,.content .flex-wrap>.w-2\/3,.content .flex-wrap>.w-2\/5,.content .flex-wrap>.w-3\/4,.content .flex-wrap>.w-3\/5,.content .flex-wrap>.w-4\/5,.content .flex-wrap>.w-5\/6{width:100%}.content .card table td.w-1\/2{display:table-row}.btn{white-space:nowrap}div[dusk$=index-component] .pl-search{width:auto}div[dusk$=index-component] .btn[dusk=attach-button],div[dusk$=index-component] .btn[dusk=create-button]{font-weight:bolder;font-size:26px;padding:0 12px;width:39px;overflow:hidden}div[dusk$=index-component] .btn[dusk=attach-button]::before,div[dusk$=index-component] .btn[dusk=create-button]::before{content:"+";position:relative}html:not([dir=rtl]) div[dusk$=index-component] .btn[dusk=attach-button]::before,html:not([dir=rtl]) div[dusk$=index-component] .btn[dusk=create-button]::before{margin-right:20px}html[dir=rtl] div[dusk$=index-component] .btn[dusk=attach-button]::before,html[dir=rtl] div[dusk$=index-component] .btn[dusk=create-button]::before{margin-left:20px}.modal{top:auto}.modal form{width:100%!important}div[dusk$=index-component]>div.card>div.py-3.flex.items-center.border-b.border-50{padding-bottom:.35rem}div[dusk$=detail-component]>div>div.flex.items-center.mb-3{display:block}div[dusk$=detail-component]>div>div.flex.items-center.mb-3>h4{position:absolute}div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center,div[dusk$=index-component]>div.card>div.py-3.flex.items-center.border-b.border-50>div.flex.items-center.ml-auto.px-3{display:inline-block}div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center{display:inline-block;padding-top:1.5rem}div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center>a,div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center>button,div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center>div,div[dusk$=index-component]>div.card>div.py-3.flex.items-center.border-b.border-50>div.flex.items-center.ml-auto.px-3>div{display:inline-flex;vertical-align:top;margin-bottom:.4rem}html:not([dir=rtl]) div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center>div.ml-3{margin-left:0}html[dir=rtl] div[dusk$=detail-component]>div>div.flex.items-center.mb-3>div.ml-3.w-full.flex.items-center>div.ml-3{margin-right:0}}@media (max-width:500px){select[dusk=action-select]{width:8.9rem}}@media (max-width:310px){select[dusk=action-select]{width:5.6rem}}@media (max-height:610px){.z-50.open .scroll-wrap{max-height:270px!important}}@media (max-height:540px){.z-50.open .scroll-wrap{max-height:180px!important}}@media (max-height:440px){.z-50.open .scroll-wrap{max-height:110px!important}} 2 | -------------------------------------------------------------------------------- /resources/sass/dark.scss: -------------------------------------------------------------------------------- 1 | html.nova-dark-theme { 2 | background-color: #06090f !important; 3 | } 4 | 5 | .nova-dark-theme { 6 | html { 7 | background-color: #0d1117 !important; 8 | height: auto !important; 9 | } 10 | 11 | body { 12 | background-color: #06090f !important; 13 | height: auto !important; 14 | } 15 | 16 | .hamburger-menu:before { 17 | background: linear-gradient( 18 | to bottom, 19 | white, 20 | white 20%, 21 | black 20%, 22 | black 40%, 23 | white 40%, 24 | white 60%, 25 | black 60%, 26 | black 80%, 27 | white 80%, 28 | white 100% 29 | ); 30 | } 31 | 32 | .dark-mode-toggle { 33 | background-color: #0e1217; 34 | } 35 | 36 | .bg-white, 37 | #layout-selector .components-container { 38 | background-color: #0d1117; 39 | } 40 | 41 | .component-layout-selector { 42 | border-color: #30383d; 43 | background-color: #161c22; 44 | } 45 | 46 | .flex { 47 | .border-60 { 48 | border-color: #30383d; 49 | } 50 | .bg-white { 51 | background-color: #161b22; 52 | } 53 | } 54 | 55 | a, 56 | .link, 57 | a .text-secondary { 58 | color: #5c7aff; 59 | text-decoration: none; 60 | &:hover { 61 | text-decoration: underline; 62 | } 63 | .link:visited { 64 | opacity: 0.8; 65 | } 66 | } 67 | 68 | .text-primary:visited { 69 | color: #bc4d61 !important; 70 | } 71 | 72 | .w-sidebar * { 73 | color: #c9d1d9 !important; 74 | 75 | &:hover { 76 | color: #ff113b !important; 77 | opacity: 1; 78 | } 79 | } 80 | 81 | .multiselect__option--highlight, 82 | .multiselect__option--highlight::after { 83 | background-color: #ff113b; 84 | background: #ff113b; 85 | } 86 | 87 | .bg-logo { 88 | background-color: #161b22; 89 | color: #ff113b !important; 90 | } 91 | 92 | .markdown { 93 | // background-color: #ffff !important; 94 | } 95 | 96 | .text-primary, 97 | .cursor-pointer:hover { 98 | color: #ff113b !important; 99 | 100 | &:visited { 101 | color: #bc4d61; 102 | } 103 | } 104 | .btn-primary { 105 | color: #ffff; 106 | 107 | &:visited { 108 | color: #ffff; 109 | } 110 | } 111 | 112 | .bg-grad-sidebar { 113 | background-image: -webkit-gradient( 114 | linear, 115 | left bottom, 116 | left top, 117 | from(#0d1117), 118 | to(#0d1117) 119 | ); 120 | background-color: #0d1117; 121 | } 122 | 123 | .table td { 124 | color: #eeeeee; 125 | border-color: #30363d; 126 | } 127 | 128 | .table th { 129 | background-color: #0d1117; 130 | color: #eeeeee; 131 | border-color: #30363d; 132 | } 133 | 134 | .flex.items-center.relative.shadow.h-header.bg-white.z-20.px-view { 135 | background-color: #0f1217; 136 | } 137 | 138 | .bg-20, 139 | .card, 140 | .btn-white, 141 | .multiselect__spinner { 142 | background-color: #161b22; 143 | } 144 | 145 | .bg-30 { 146 | background-color: #161b22; 147 | 148 | &:hover { 149 | background-color: #060910; 150 | } 151 | } 152 | 153 | .bg-40, 154 | .table tr:hover td, 155 | .tooltip, 156 | .multiselect__content-wrapper { 157 | background-color: #0d1117; 158 | } 159 | 160 | .border-30 { 161 | border-color: #30363d; 162 | } 163 | 164 | .border-30, 165 | .border-40, 166 | .border-50 { 167 | border-color: #30373d; 168 | } 169 | 170 | .border-60, 171 | .border-70 { 172 | border-color: #0e1217; 173 | } 174 | 175 | .border-80 { 176 | border-color: #060910; 177 | } 178 | 179 | .text-60, 180 | .text-70 { 181 | color: #626a71; 182 | } 183 | 184 | .text-80, 185 | .text-90 { 186 | color: #cfd3d8; 187 | } 188 | 189 | .relationship-tabs-panel .tab { 190 | color: #cfd3d8; 191 | &:hover { 192 | color: #ff113b; 193 | } 194 | } 195 | 196 | .btn-outline { 197 | color: #ff113b; 198 | } 199 | 200 | .tooltip, 201 | .multiselect__content-wrapper { 202 | border-color: #161b22; 203 | color: #cfd3d8; 204 | } 205 | 206 | .form-input:focus, 207 | .form-global-search:active, 208 | .form-global-search:focus, 209 | .form-search:active, 210 | .form-search:focus { 211 | background-color: #060910; 212 | } 213 | 214 | // .form-select, .tabs-wrap { 215 | // background-color: #0e1217; 216 | // border-color: #161b22; 217 | // } 218 | 219 | .form-input-bordered, 220 | .multiselect__input, 221 | .multiselect__tags, 222 | .multiselect__single, 223 | .form-select, 224 | .tags-input-text, 225 | .multiselect, 226 | .form-input-row { 227 | background-color: #0e1217; 228 | color: #cfd3d8; 229 | border-color: #2e3235; 230 | } 231 | 232 | .multiselect__tags { 233 | border-color: #2e3235 !important; 234 | } 235 | 236 | .form-global-search, 237 | input { 238 | border-color: #535c67; 239 | background-color: #161b22; 240 | color: #cfd3d8; 241 | } 242 | 243 | .form-input-bordered, 244 | .multiselect__content-wrapper, 245 | .multiselect__tags { 246 | border-color: #2e3235; 247 | } 248 | 249 | .checkbox:checked { 250 | background-color: #ff133b; 251 | } 252 | 253 | select { 254 | color: #cfd3d8; 255 | } 256 | 257 | .bg-gray-800 { 258 | --bg-opacity: 1; 259 | background-color: #0d1117; 260 | background-color: rgba(45, 55, 72, var(--bg-opacity)); 261 | } 262 | .bg-gray-900 { 263 | --bg-opacity: 1; 264 | background-color: #06090f; 265 | background-color: rgba(26, 32, 44, var(--bg-opacity)); 266 | } 267 | .border-gray-700 { 268 | --border-opacity: 1; 269 | border-color: #30363d; 270 | border-color: rgba(74, 85, 104, var(--border-opacity)); 271 | } 272 | .text-white { 273 | --text-opacity: 1; 274 | color: #c9d1d9; 275 | color: rgba(255, 255, 255, var(--text-opacity)); 276 | } 277 | .text-gray-400 { 278 | --text-opacity: 1; 279 | color: #88929c; 280 | color: rgba(203, 213, 224, var(--text-opacity)); 281 | } 282 | 283 | button.appearance-none.cursor-pointer.fill-current.hover\:text-primary.flex.px-4.items-center.focus\:outline-none { 284 | color: #cfd3d8b3; 285 | } 286 | 287 | .hover\:bg-30:hover { 288 | background-color: #232930; 289 | } 290 | 291 | .gallery .gallery-item .gallery-item-info { 292 | --bg-opacity: 0; 293 | background-color: #0e1217; 294 | background-color: rgba(14, 18, 23, var(--bg-opacity)); 295 | } 296 | 297 | .gallery .gallery-item-image.gallery-item .gallery-item-info { 298 | background-color: rgb(232 245 251 / 35%); 299 | } 300 | 301 | .bg-gray-100, 302 | .gallery .gallery-item { 303 | --bg-opacity: 1; 304 | background-color: #0e1217; 305 | background-color: rgba(14, 18, 23, var(--bg-opacity)); 306 | } 307 | 308 | button.text-left.w-full.leading-normal.dim.my-2 { 309 | color: #cfd3d8; 310 | } 311 | } 312 | -------------------------------------------------------------------------------- /resources/views/partials/logo.blade.php: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | 28 | 32 | 46 | 50 | 58 | 69 | 70 | 71 | 79 | 87 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /dist/js/theme.js: -------------------------------------------------------------------------------- 1 | (()=>{var e,t={747:(e,t,n)=>{Nova.booting((function(e,t){e.component("nova-dark-theme-toggle",n(577).Z)})),"true"===localStorage.darkThemeOn?(document.querySelector("html").classList.add("nova-dark-theme"),document.querySelector("body").classList.add("nova-dark-theme")):(document.querySelector("html").classList.remove("nova-dark-theme"),document.querySelector("body").classList.remove("nova-dark-theme")),document.addEventListener("DOMContentLoaded",(function(){document.querySelector("meta[name=viewport]").setAttribute("content","width=device-width, initial-scale=1, shrink-to-fit=no"),document.querySelector(".w-sidebar").classList.add("sidebar-hidden");var e=document.createElement("span");if(e.className="hamburger-menu",document.querySelector(".content .h-header").prepend(e),e.addEventListener("click",(function(e){e.stopPropagation(),document.querySelector(".w-sidebar").classList.toggle("sidebar-hidden")}),!0),document.querySelectorAll(".w-sidebar a, .w-sidebar .cursor-pointer:not(.nc-head), .w-sidebar .nc-item-link").forEach((function(e){e.addEventListener("click",(function(){document.querySelector(".w-sidebar").classList.add("sidebar-hidden")}),!1)})),document.querySelectorAll("body,html").forEach((function(e){e.addEventListener("click",(function(e){var t=document.querySelector(".w-sidebar");e.target===t||t.contains(e.target)||t.classList.add("sidebar-hidden")}))})),Nova.config.mmns){if(document.querySelectorAll(".w-sidebar h4").forEach((function(e){(Nova.config.mmns.hide_all_sidebar_headlines||-1!==Nova.config.mmns.hidden_sidebar_headlines.indexOf(e.textContent))&&e.classList.add("hidden")})),Nova.config.mmns.resource_tables_sticky_actions)document.querySelectorAll(".content").forEach((function(e){e.classList.add("sticky-actions")}));if(Nova.config.mmns.resource_tables_sticky_actions_on_mobile)document.querySelectorAll(".content").forEach((function(e){e.classList.add("sticky-actions-on-mobile")}));if(Nova.config.mmns.hide_update_and_continue_editing_button)document.querySelectorAll(".content").forEach((function(e){e.classList.add("hide-update-and-continue-editing-button")}));if(Nova.config.mmns.hide_update_and_continue_editing_button_on_mobile)document.querySelectorAll(".content").forEach((function(e){e.classList.add("hide-update-and-continue-editing-button-on-mobile")}));Nova.config.mmns.fixed_sidebar&&document.querySelector("body").classList.add("fixed-sidebar")}}),!1)},881:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(519),r=n.n(o)()((function(e){return e[1]}));r.push([e.id,".dark-mode-toggle[data-v-979d093e]{background:var(--primary);border-radius:.6rem 0 0;bottom:0;height:40px;padding:.8rem .6rem .6rem;position:fixed;right:0;width:40px}.nova-dark-theme .dark-mode-toggle[data-v-979d093e]{background:#161c22}.dark-mode-toggle[data-v-979d093e]:hover{background-color:var(--primary-dark)}.dark-mode-toggle[data-v-979d093e]:focus{outline:none}.nova-dark-theme .dark-mode-toggle[data-v-979d093e]:hover{background:#0e1217}.dark-mode-active[data-v-979d093e]{color:var(--primary);margin-bottom:-2px}.dark-mode-disabled[data-v-979d093e]{color:#fff;margin-bottom:-2px;transform:rotate(180deg)}",""]);const a=r},519:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,o){"string"==typeof e&&(e=[[null,e,""]]);var r={};if(o)for(var a=0;a{},379:(e,t,n)=>{"use strict";var o,r=function(){return void 0===o&&(o=Boolean(window&&document&&document.all&&!window.atob)),o},a=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),i=[];function d(e){for(var t=-1,n=0;n{"use strict";n.d(t,{Z:()=>l});function o(e,t,n,o,r,a,i,d){var c,s="function"==typeof e?e.options:e;if(t&&(s.render=t,s.staticRenderFns=n,s._compiled=!0),o&&(s.functional=!0),a&&(s._scopeId="data-v-"+a),i?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},s._ssrRegister=c):r&&(c=d?function(){r.call(this,(s.functional?this.parent:this).$root.$options.shadowRoot)}:r),c)if(s.functional){s._injectStyles=c;var l=s.render;s.render=function(e,t){return c.call(t),l(e,t)}}else{var u=s.beforeCreate;s.beforeCreate=u?[].concat(u,c):[c]}return{exports:e,options:s}}const r=o({},(function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{staticClass:"svg-inline--fa fa-toggle-on",attrs:{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48","aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"toggle-on",role:"img"}},[t("path",{attrs:{fill:"currentColor",d:"M40 17.37V8h-9.37L24 1.37 17.37 8H8v9.37L1.37 24 8 30.63V40h9.37L24 46.63 30.63 40H40v-9.37L46.63 24 40 17.37zM24 36c-1.79 0-3.48-.4-5-1.1 4.13-1.9 7-6.06 7-10.9s-2.87-9-7-10.9c1.52-.7 3.21-1.1 5-1.1 6.63 0 12 5.37 12 12s-5.37 12-12 12z"}})])}),[],!1,null,null,null).exports,a={name:"NovaDarkThemeToggle",props:{label:{type:String,required:!1,default:function(){return"Dark Theme"}}},data:function(){return{darkThemeOn:!1}},components:{IconToggle:r},mounted:function(){window.matchMedia("(prefers-color-scheme: dark)").matches&&void 0===localStorage.darkThemeOn?(localStorage.darkThemeOn="true",this.darkThemeOn="true"):this.darkThemeOn="true"===localStorage.darkThemeOn,"true"===localStorage.darkThemeOn&&(document.querySelector("html").classList.add("nova-dark-theme"),document.querySelector("body").classList.add("nova-dark-theme")),"false"===localStorage.darkThemeOn&&(document.querySelector("html").classList.remove("nova-dark-theme"),document.querySelector("body").classList.remove("nova-dark-theme"))},methods:{toggle:function(){this.darkThemeOn=!this.darkThemeOn,localStorage.darkThemeOn=this.darkThemeOn.toString(),document.querySelector("html").classList.toggle("nova-dark-theme"),document.querySelector("body").classList.toggle("nova-dark-theme")}}};var i=n(379),d=n.n(i),c=n(881),s={insert:"head",singleton:!1};d()(c.Z,s);c.Z.locals;const l=o(a,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"block no-underline text-90 hover:bg-30 p-3 w-full text-left dark-mode-toggle",on:{click:function(t){return e.toggle()}}},[e.darkThemeOn?n("icon-toggle",{staticClass:"w-4 h-4 text-black align-baseline ml-1 mr-4 dark-mode-active"}):n("icon-toggle",{staticClass:"w-4 h-4 text-black align-baseline ml-1 mr-4 dark-mode-disabled"})],1)}),[],!1,null,"979d093e",null).exports}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={id:e,exports:{}};return t[e](a,a.exports,o),a.exports}o.m=t,e=[],o.O=(t,n,r,a)=>{if(!n){var i=1/0;for(l=0;l=a)&&Object.keys(o.O).every((e=>o.O[e](n[c])))?n.splice(c--,1):(d=!1,a0&&e[l-1][2]>a;l--)e[l]=e[l-1];e[l]=[n,r,a]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={564:0,963:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var r,a,[i,d,c]=n,s=0;if(i.some((t=>0!==e[t]))){for(r in d)o.o(d,r)&&(o.m[r]=d[r]);if(c)var l=c(o)}for(t&&t(n);so(747)));var r=o.O(void 0,[963],(()=>o(959)));r=o.O(r)})(); -------------------------------------------------------------------------------- /resources/css/responsive.css: -------------------------------------------------------------------------------- 1 | /* Responsive theme by Gregoriohc/laravel-nova-theme-responsive */ 2 | .hamburger-menu { 3 | cursor: pointer; 4 | position: relative; 5 | height: 19px; 6 | display: none; 7 | } 8 | html:not([dir="rtl"]) .hamburger-menu { 9 | padding-left: 1.25em; 10 | margin-right: 9px; 11 | } 12 | html[dir="rtl"] .hamburger-menu { 13 | padding-right: 1.25em; 14 | margin-left: 9px; 15 | } 16 | 17 | .hamburger-menu:before { 18 | content: ""; 19 | position: absolute; 20 | top: 0.21em; 21 | bottom: 0.21em; 22 | width: 1em; 23 | background: linear-gradient( 24 | to bottom, 25 | black, 26 | black 20%, 27 | white 20%, 28 | white 40%, 29 | black 40%, 30 | black 60%, 31 | white 60%, 32 | white 80%, 33 | black 80%, 34 | black 100% 35 | ); 36 | } 37 | html:not([dir="rtl"]) .hamburger-menu:before { 38 | left: 0; 39 | } 40 | html[dir="rtl"] .hamburger-menu:before { 41 | right: 0; 42 | } 43 | 44 | .content.hide-update-and-continue-editing-button 45 | button[dusk$="update-and-continue-editing-button"] { 46 | display: none; 47 | } 48 | 49 | /* Resource tables */ 50 | .content.sticky-actions .card table.w-full tbody tr td:last-child, 51 | .content.sticky-actions .card table.w-full thead tr th:last-child { 52 | position: -webkit-sticky; 53 | position: -moz-sticky; 54 | position: -ms-sticky; 55 | position: -o-sticky; 56 | position: sticky; 57 | right: 0; 58 | } 59 | 60 | .content.sticky-actions .card table.w-full tbody tr td:last-child { 61 | background: white; 62 | } 63 | 64 | .content.sticky-actions .card table.w-full tbody tr td:last-child:before { 65 | content: ""; 66 | height: 100%; 67 | top: 0; 68 | margin-left: -0.75rem; 69 | position: absolute; 70 | border-left: 1px solid #eee; 71 | } 72 | 73 | @media (min-width: 992px) { 74 | body.fixed-sidebar .bg-grad-sidebar { 75 | position: fixed; 76 | padding-top: 5.5rem !important; 77 | overflow: auto; 78 | height: 100%; 79 | } 80 | 81 | body.fixed-sidebar .content { 82 | padding-left: 13.75rem; 83 | max-width: 100%; 84 | } 85 | } 86 | 87 | @media (max-width: 80rem) { 88 | .min-w-site { 89 | min-width: auto; 90 | } 91 | 92 | .content { 93 | min-width: auto; 94 | width: 100%; 95 | } 96 | 97 | /* Resource tables */ 98 | .content.sticky-actions-on-mobile .card table.w-full tbody tr td:last-child, 99 | .content.sticky-actions-on-mobile 100 | .card 101 | table.w-full 102 | thead 103 | tr 104 | th:last-child { 105 | position: -webkit-sticky; 106 | position: -moz-sticky; 107 | position: -ms-sticky; 108 | position: -o-sticky; 109 | position: sticky; 110 | right: 0; 111 | } 112 | 113 | .content.sticky-actions-on-mobile 114 | .card 115 | table.w-full 116 | tbody 117 | tr 118 | td:last-child { 119 | background: white; 120 | } 121 | 122 | .content.sticky-actions-on-mobile 123 | .card 124 | table.w-full 125 | tbody 126 | tr 127 | td:last-child:before { 128 | content: ""; 129 | height: 100%; 130 | top: 0; 131 | margin-left: -0.75rem; 132 | position: absolute; 133 | border-left: 1px solid #eee; 134 | } 135 | } 136 | 137 | @media (max-width: 992px) { 138 | /* Sidebar */ 139 | .w-sidebar { 140 | position: fixed; 141 | padding-top: 5.5rem !important; 142 | z-index: 30; 143 | height: 100%; 144 | overflow: auto; 145 | } 146 | 147 | .w-sidebar.pt-header { 148 | padding-top: 1.75rem; 149 | } 150 | 151 | .sidebar-hidden { 152 | display: none; 153 | } 154 | 155 | /* Header */ 156 | .h-header { 157 | z-index: 40; 158 | position: fixed; 159 | width: 100%; 160 | margin-top: -3.75rem; 161 | } 162 | 163 | .hamburger-menu { 164 | display: block; 165 | } 166 | html:not([dir="rtl"]) .hamburger-menu { 167 | margin-right: 1rem; 168 | } 169 | html[dir="rtl"] .hamburger-menu { 170 | margin-left: 1rem; 171 | } 172 | 173 | .bg-logo { 174 | display: none !important; 175 | } 176 | 177 | html:not([dir="rtl"]) .h-header .dropdown-trigger { 178 | margin-right: -20px; 179 | } 180 | html[dir="rtl"] .h-header .dropdown-trigger { 181 | margin-left: -20px; 182 | } 183 | 184 | .h-header .dropdown-trigger span, 185 | .h-header .dropdown-trigger svg { 186 | display: none; 187 | } 188 | 189 | html:not([dir="rtl"]) .h-header .dropdown-trigger img.mr-3 { 190 | margin-right: 2em; 191 | } 192 | html[dir="rtl"] .h-header .dropdown-trigger img.mr-3 { 193 | margin-right: 2em; 194 | } 195 | 196 | span.hamburger-menu + a { 197 | display: none; 198 | } 199 | 200 | .h-header .pl-search { 201 | width: 85%; 202 | } 203 | 204 | /* Content */ 205 | .content { 206 | padding-top: 3.75rem; 207 | max-width: none; 208 | } 209 | 210 | .content .px-view { 211 | padding-left: 1.125rem; 212 | padding-right: 1.125rem; 213 | } 214 | 215 | .content .py-view { 216 | padding-top: 1.125rem; 217 | padding-bottom: 1.125rem; 218 | } 219 | 220 | /* Forms */ 221 | form .w-1\/2 { 222 | width: 80%; 223 | } 224 | 225 | form .w-1\/2 > div.flex { 226 | display: flex; 227 | flex-wrap: nowrap; 228 | } 229 | 230 | form > .flex { 231 | display: block; 232 | } 233 | 234 | form > .flex > button { 235 | margin-bottom: 10px; 236 | } 237 | 238 | .content.hide-update-and-continue-editing-button-on-mobile 239 | button[dusk$="update-and-continue-editing-button"] { 240 | display: none; 241 | } 242 | 243 | .content form .card > .flex, 244 | div[dusk$="detail-component"] .card > .flex { 245 | display: block; 246 | } 247 | .content form .card > .flex > div, 248 | div[dusk$="detail-component"] .card > .flex > div { 249 | width: 100%; 250 | } 251 | 252 | .content form .card > .flex > .py-6, 253 | div[dusk$="detail-component"] .card > .flex > .py-4 { 254 | padding-top: 0.5rem; 255 | padding-bottom: 0; 256 | } 257 | 258 | .content form .card > .flex > .py-6, 259 | div[dusk$="detail-component"] .card > .flex.bg-20 > .py-4 { 260 | padding-bottom: 0.5rem; 261 | } 262 | 263 | .content form .card > .flex > .py-6 + .py-6, 264 | div[dusk$="detail-component"] .card > .flex > .py-4 + .py-4 { 265 | padding-bottom: 0.5rem; 266 | } 267 | 268 | .card > form > div header.flex { 269 | display: block; 270 | } 271 | 272 | .card > form > div header.flex ul:first-child { 273 | border-bottom: 1px solid var(--60); 274 | } 275 | 276 | html:not([dir="rtl"]) 277 | .card 278 | > form 279 | > div 280 | header.flex 281 | ul:nth-child(2) 282 | button:first-child { 283 | border-left: none; 284 | } 285 | html[dir="rtl"] 286 | .card 287 | > form 288 | > div 289 | header.flex 290 | ul:nth-child(2) 291 | button:first-child { 292 | border-right: none; 293 | } 294 | 295 | html:not([dir="rtl"]) 296 | .card 297 | > form 298 | > div 299 | header.flex 300 | ul:nth-child(2) 301 | button:last-child { 302 | border-right: 1px solid var(--60); 303 | } 304 | html[dir="rtl"] 305 | .card 306 | > form 307 | > div 308 | header.flex 309 | ul:nth-child(2) 310 | button:last-child { 311 | border-left: 1px solid var(--60); 312 | } 313 | 314 | .card > form > div div.pin { 315 | z-index: 2000; 316 | } 317 | 318 | trix-toolbar .trix-button-row { 319 | display: inline-block !important; 320 | } 321 | 322 | html:not([dir="rtl"]) trix-toolbar .trix-button-group { 323 | float: left !important; 324 | } 325 | html[dir="rtl"] trix-toolbar .trix-button-group { 326 | float: right !important; 327 | } 328 | 329 | /* Cards */ 330 | .content .flex-wrap > .w-1\/2, 331 | .content .flex-wrap > .w-1\/3, 332 | .content .flex-wrap > .w-1\/4, 333 | .content .flex-wrap > .w-1\/5, 334 | .content .flex-wrap > .w-1\/6, 335 | .content .flex-wrap > .w-2\/3, 336 | .content .flex-wrap > .w-2\/5, 337 | .content .flex-wrap > .w-3\/4, 338 | .content .flex-wrap > .w-3\/5, 339 | .content .flex-wrap > .w-4\/5, 340 | .content .flex-wrap > .w-5\/6 { 341 | width: 100%; 342 | } 343 | 344 | .content .card table td.w-1\/2 { 345 | display: table-row; 346 | } 347 | 348 | /* Other */ 349 | .btn { 350 | white-space: nowrap; 351 | } 352 | 353 | div[dusk$="index-component"] .pl-search { 354 | width: auto; 355 | } 356 | 357 | div[dusk$="index-component"] .btn[dusk="create-button"], 358 | div[dusk$="index-component"] .btn[dusk="attach-button"] { 359 | font-weight: bolder; 360 | font-size: 26px; 361 | padding: 0 12px; 362 | width: 39px; 363 | overflow: hidden; 364 | } 365 | 366 | div[dusk$="index-component"] .btn[dusk="create-button"]::before, 367 | div[dusk$="index-component"] .btn[dusk="attach-button"]::before { 368 | content: "+"; 369 | position: relative; 370 | } 371 | html:not([dir="rtl"]) 372 | div[dusk$="index-component"] 373 | .btn[dusk="create-button"]::before, 374 | html:not([dir="rtl"]) 375 | div[dusk$="index-component"] 376 | .btn[dusk="attach-button"]::before { 377 | margin-right: 20px; 378 | } 379 | html[dir="rtl"] 380 | div[dusk$="index-component"] 381 | .btn[dusk="attach-button"]::before, 382 | html[dir="rtl"] 383 | div[dusk$="index-component"] 384 | .btn[dusk="create-button"]::before { 385 | margin-left: 20px; 386 | } 387 | 388 | .modal form { 389 | width: 100% !important; 390 | } 391 | 392 | div[dusk$="index-component"] 393 | > div.card 394 | > div.py-3.flex.items-center.border-b.border-50 { 395 | padding-bottom: 0.35rem; 396 | } 397 | 398 | div[dusk$="detail-component"] > div > div.flex.items-center.mb-3 { 399 | display: block; 400 | } 401 | 402 | div[dusk$="detail-component"] > div > div.flex.items-center.mb-3 > h4 { 403 | position: absolute; 404 | } 405 | 406 | div[dusk$="index-component"] 407 | > div.card 408 | > div.py-3.flex.items-center.border-b.border-50 409 | > div.flex.items-center.ml-auto.px-3, 410 | div[dusk$="detail-component"] 411 | > div 412 | > div.flex.items-center.mb-3 413 | > div.ml-3.w-full.flex.items-center { 414 | display: inline-block; 415 | } 416 | 417 | div[dusk$="detail-component"] 418 | > div 419 | > div.flex.items-center.mb-3 420 | > div.ml-3.w-full.flex.items-center { 421 | display: inline-block; 422 | padding-top: 1.5rem; 423 | } 424 | 425 | div[dusk$="index-component"] 426 | > div.card 427 | > div.py-3.flex.items-center.border-b.border-50 428 | > div.flex.items-center.ml-auto.px-3 429 | > div, 430 | div[dusk$="detail-component"] 431 | > div 432 | > div.flex.items-center.mb-3 433 | > div.ml-3.w-full.flex.items-center 434 | > div, 435 | div[dusk$="detail-component"] 436 | > div 437 | > div.flex.items-center.mb-3 438 | > div.ml-3.w-full.flex.items-center 439 | > button, 440 | div[dusk$="detail-component"] 441 | > div 442 | > div.flex.items-center.mb-3 443 | > div.ml-3.w-full.flex.items-center 444 | > a { 445 | display: inline-flex; 446 | vertical-align: top; 447 | margin-bottom: 0.4rem; 448 | } 449 | 450 | html:not([dir="rtl"]) 451 | div[dusk$="detail-component"] 452 | > div 453 | > div.flex.items-center.mb-3 454 | > div.ml-3.w-full.flex.items-center 455 | > div.ml-3 { 456 | margin-left: 0; 457 | } 458 | html[dir="rtl"] 459 | div[dusk$="detail-component"] 460 | > div 461 | > div.flex.items-center.mb-3 462 | > div.ml-3.w-full.flex.items-center 463 | > div.ml-3 { 464 | margin-right: 0; 465 | } 466 | } 467 | 468 | @media (max-width: 500px) { 469 | select[dusk="action-select"] { 470 | width: 8.9rem; 471 | } 472 | } 473 | 474 | @media (max-width: 310px) { 475 | select[dusk="action-select"] { 476 | width: 5.6rem; 477 | } 478 | } 479 | 480 | @media (max-height: 610px) { 481 | .z-50.open .scroll-wrap { 482 | max-height: 270px !important; 483 | } 484 | } 485 | 486 | @media (max-height: 540px) { 487 | .z-50.open .scroll-wrap { 488 | max-height: 180px !important; 489 | } 490 | } 491 | 492 | @media (max-height: 440px) { 493 | .z-50.open .scroll-wrap { 494 | max-height: 110px !important; 495 | } 496 | } 497 | --------------------------------------------------------------------------------