├── .editorconfig
├── .env.example
├── .gitattributes
├── .github
└── funding.yml
├── .gitignore
├── .php_cs.cache
├── .styleci.yml
├── .vscode
└── .php_cs
├── LICENSE
├── README.md
├── app
├── Console
│ ├── Commands
│ │ ├── DemoInstallCommand.php
│ │ ├── DumpLoad.php
│ │ └── DumpMake.php
│ └── Kernel.php
├── Exceptions
│ └── Handler.php
├── Http
│ ├── Controllers
│ │ └── Controller.php
│ ├── Kernel.php
│ └── Middleware
│ │ ├── Authenticate.php
│ │ ├── EncryptCookies.php
│ │ ├── PreventRequestsDuringMaintenance.php
│ │ ├── RedirectIfAuthenticated.php
│ │ ├── TrimStrings.php
│ │ ├── TrustHosts.php
│ │ ├── TrustProxies.php
│ │ └── VerifyCsrfToken.php
├── Models
│ ├── FormIndexTable.php
│ ├── FormRelation.php
│ ├── OpeningHour.php
│ ├── Order.php
│ ├── OrderProduct.php
│ ├── Product.php
│ ├── States
│ │ └── ProductState.php
│ ├── Types
│ │ └── ProductType.php
│ └── User.php
├── Providers
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
└── helpers.php
├── artisan
├── bootstrap
├── app.php
└── cache
│ └── .gitignore
├── composer.json
├── composer.lock
├── config
├── app.php
├── auth.php
├── broadcasting.php
├── cache.php
├── cors.php
├── database.php
├── filesystems.php
├── hashing.php
├── larabug.php
├── lit.php
├── logging.php
├── mail.php
├── media-library.php
├── queue.php
├── services.php
├── session.php
├── sluggable.php
├── translatable.php
└── view.php
├── database
├── .gitignore
├── dumps
│ └── demo.sql
├── factories
│ ├── FormIndexTableFactory.php
│ ├── OrderFactory.php
│ ├── OrderProductFactory.php
│ ├── ProductFactory.php
│ └── UserFactory.php
├── migrations
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ ├── 2019_08_19_000000_create_failed_jobs_table.php
│ ├── 2020_00_00_000000_create_lit_forms_table.php
│ ├── 2020_00_00_000000_create_lit_list_items_table.php
│ ├── 2020_00_00_000000_create_lit_relations_table.php
│ ├── 2020_00_00_000000_create_lit_repeatables_table.php
│ ├── 2020_00_00_000000_create_lit_users_table.php
│ ├── 2020_00_00_000000_create_permission_tables.php
│ ├── 2020_10_02_174910_create_media_table.php
│ ├── 2020_10_02_174952_create_orders_table.php
│ ├── 2020_10_02_175456_create_products_table.php
│ ├── 2020_10_02_175548_create_order_product_table.php
│ ├── 2021_02_01_085451_create_opening_hours_table.php
│ ├── 2021_03_14_130429_create_form_relations_tables.php
│ ├── 2021_03_14_141115_create_form_index_table_items_table.php
│ ├── 2021_04_04_174351_create_jobs_table.php
│ └── ______________________make_permissions.php
└── seeders
│ ├── DatabaseSeeder.php
│ ├── OrderSeeder.php
│ ├── ProductSeeder.php
│ └── UserSeeder.php
├── lit
├── app
│ ├── Actions
│ │ └── Booking
│ │ │ └── SendMailAction.php
│ ├── Composers
│ │ └── LoginComposer.php
│ ├── Config
│ │ ├── Charts
│ │ │ ├── Example
│ │ │ │ ├── AreaChartConfig.php
│ │ │ │ ├── BarChartConfig.php
│ │ │ │ ├── DonutChartConfig.php
│ │ │ │ ├── NumberChartConfig.php
│ │ │ │ └── ProgressChartConfig.php
│ │ │ ├── OrderAmountAreaChartConfig.php
│ │ │ ├── OrderCountNumberChartConfig.php
│ │ │ └── UserOrderAmountAreaChartConfig.php
│ │ ├── Crud
│ │ │ ├── CustomerConfig.php
│ │ │ ├── FormIndexTableAdvancedConfig.php
│ │ │ ├── FormIndexTableConfig.php
│ │ │ ├── FormRelationConfig.php
│ │ │ ├── OrderConfig.php
│ │ │ ├── ProductConfig.php
│ │ │ └── UserConfig.php
│ │ ├── Form
│ │ │ ├── Charts
│ │ │ │ └── ChartsConfig.php
│ │ │ ├── Fields
│ │ │ │ ├── BooleanConfig.php
│ │ │ │ ├── CheckboxesConfig.php
│ │ │ │ ├── ConditionsConfig.php
│ │ │ │ ├── DatetimeConfig.php
│ │ │ │ ├── IconConfig.php
│ │ │ │ ├── ImageConfig.php
│ │ │ │ ├── InputConfig.php
│ │ │ │ ├── ListFieldConfig.php
│ │ │ │ ├── ModalConfig.php
│ │ │ │ ├── PasswordConfig.php
│ │ │ │ ├── RadioConfig.php
│ │ │ │ ├── RangeConfig.php
│ │ │ │ ├── RelationConfig.php
│ │ │ │ ├── RouteConfig.php
│ │ │ │ └── WysiwygConfig.php
│ │ │ ├── Form
│ │ │ │ ├── AdvancedConfig.php
│ │ │ │ └── FieldsConfig.php
│ │ │ └── Pages
│ │ │ │ └── HomeConfig.php
│ │ ├── NavigationConfig.php
│ │ ├── SearchConfig.php
│ │ └── User
│ │ │ ├── ProfileSettingsConfig.php
│ │ │ └── UserConfig.php
│ ├── Filters
│ │ ├── CreatedAtFilter.php
│ │ └── UserNameFilter.php
│ ├── Http
│ │ └── Controllers
│ │ │ ├── Crud
│ │ │ ├── CustomerController.php
│ │ │ ├── FormIndexTableController.php
│ │ │ ├── FormRelationController.php
│ │ │ ├── OrderController.php
│ │ │ ├── ProductController.php
│ │ │ └── UserController.php
│ │ │ ├── Form
│ │ │ ├── Charts
│ │ │ │ └── ChartsController.php
│ │ │ ├── Fields
│ │ │ │ ├── BooleanController.php
│ │ │ │ ├── CheckboxesController.php
│ │ │ │ ├── ConditionsController.php
│ │ │ │ ├── DatetimeController.php
│ │ │ │ ├── IconController.php
│ │ │ │ ├── ImageController.php
│ │ │ │ ├── InputController.php
│ │ │ │ ├── ListController.php
│ │ │ │ ├── ListFieldController.php
│ │ │ │ ├── ModalController.php
│ │ │ │ ├── PasswordController.php
│ │ │ │ ├── RadioController.php
│ │ │ │ ├── RangeController.php
│ │ │ │ ├── RelationController.php
│ │ │ │ ├── RouteController.php
│ │ │ │ └── WysiwygController.php
│ │ │ ├── Form
│ │ │ │ ├── AdvancedController.php
│ │ │ │ └── FieldsController.php
│ │ │ └── Pages
│ │ │ │ └── HomeController.php
│ │ │ ├── User
│ │ │ ├── ProfileSettingsController.php
│ │ │ └── UserController.php
│ │ │ └── WelcomeController.php
│ ├── Kernel.php
│ ├── Models
│ │ └── User.php
│ ├── Providers
│ │ ├── LitstackServiceProvider.php
│ │ ├── LivewireServiceProvider.php
│ │ ├── LocalizationServiceProvider.php
│ │ └── RouteServiceProvider.php
│ └── Repeatables
│ │ ├── ImageRepeatable.php
│ │ ├── ImageTextRepeatable.php
│ │ └── TextRepeatable.php
├── resources
│ ├── js
│ │ ├── app.js
│ │ ├── components
│ │ │ ├── Example.vue
│ │ │ └── OrderPaymentInfo.vue
│ │ └── service
│ │ │ └── component.service.js
│ ├── lang
│ │ ├── de
│ │ │ ├── models.php
│ │ │ └── permissions.php
│ │ └── en
│ │ │ ├── models.php
│ │ │ └── permissions.php
│ ├── sass
│ │ ├── _variables.scss
│ │ └── app.scss
│ └── views
│ │ ├── booking
│ │ └── provider.blade.php
│ │ ├── columns
│ │ └── foo.blade.php
│ │ └── welcome.blade.php
└── routes
│ └── web.php
├── package-lock.json
├── package.json
├── phpunit.xml
├── public
├── .htaccess
├── css
│ └── app.css
├── favicon.ico
├── images
│ └── vendor
│ │ └── cropperjs
│ │ └── src
│ │ └── bg.png
├── index.php
├── js
│ ├── app.js
│ ├── app.js.LICENSE.txt
│ └── login.js
├── lit
│ ├── css
│ │ └── app.css
│ └── js
│ │ ├── app.js
│ │ └── app.js.LICENSE.txt
├── mix-manifest.json
└── robots.txt
├── resources
├── css
│ └── app.css
├── js
│ ├── app.js
│ └── bootstrap.js
├── lang
│ └── en
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
└── views
│ └── welcome.blade.php
├── routes
├── api.php
├── channels.php
├── console.php
└── web.php
├── server.php
├── storage
├── app
│ └── .gitignore
├── clockwork
│ └── .gitignore
├── dump
│ ├── .DS_Store
│ └── home
│ │ └── header_image.jpg
├── framework
│ ├── .gitignore
│ ├── cache
│ │ ├── .gitignore
│ │ └── data
│ │ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ ├── testing
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
├── logs
│ └── .gitignore
└── media-library
│ └── temp
│ ├── 0dYxg84BGBmEYHo1LBiHAEvcQJcs4TZT
│ └── fRjckvrSzBXiT94cj1PlT2HqbPy3CziB.jpeg
│ ├── 9cVRO2BCRpfBXb0el910gEnKuKRWzUvU
│ ├── 600x600-lg.jpeg
│ ├── 600x600-md.jpeg
│ ├── 600x600-preview.jpg
│ ├── 600x600-sm.jpeg
│ ├── B4TTFLjGDNCK1Z5TD30XUUZOUFqEuDsU.jpeg
│ └── KQIs9tEauE104IJFpHSMuSnFLZL7ng43xl.jpeg
│ ├── ACLV3HZc5vAw1Xnb0mXV1Hie2p8l2R76
│ └── uHuzxyXCFAWalnOX127IhLJ72N6PHO8w.jpeg
│ ├── EPEpjcUFWu4TJjd2185t18qh4uLxlLfA
│ ├── 600x600-md.jpeg
│ ├── 600x600-preview.jpg
│ ├── 600x600-sm.jpeg
│ └── cKh5MsSSzSjArsUOrwqnZCyy0TaGJiOt.jpeg
│ ├── GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN
│ ├── 600x600-lg.jpeg
│ ├── 600x600-md.jpeg
│ ├── 600x600-preview.jpg
│ ├── 600x600-sm.jpeg
│ ├── OdVHtRVQ7gyg1yNYdTqdyNEqCM7sXXKFxl.jpeg
│ └── r88OkMglq29QklVHeEZ0aUh4rOmGFAyi.jpeg
│ ├── H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7
│ ├── 600x600-lg.jpeg
│ ├── 600x600-md.jpeg
│ ├── 600x600-preview.jpg
│ ├── 600x600-sm.jpeg
│ ├── PlsILfsZ8e6LpDbjdOGe2IBVSM1rxBRNxl.jpeg
│ └── ldKHyG4nNccEkGu6eUFASIUYjinY4WLO.jpeg
│ ├── cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5
│ ├── 600x600-lg.jpeg
│ ├── 600x600-md.jpeg
│ ├── 600x600-preview.jpg
│ ├── 600x600-sm.jpeg
│ └── QPB9rJquZXqp8EvN5jg3XcWvd0J7COAg.jpeg
│ ├── nmglrVtCrVkaw6himmTpzzQ6OS1UxuvE
│ ├── W4jZlw5rFPeFhpoRARKZoDiAlVXAKsGo.jpeg
│ └── xzCf9jBZldCSm0WsTXtCYIwitCaNbDnhpreview.jpeg
│ ├── pbWcAanl2IEFp5f1IngumKclIQiFZbl5
│ └── sCo4dY4HtPZTaJbtjQXfuU2kwV4Zcmk9.jpeg
│ ├── r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR
│ ├── 600x600-lg.jpeg
│ ├── 600x600-md.jpeg
│ ├── 600x600-preview.jpg
│ ├── 600x600-sm.jpeg
│ ├── 600x600-xl.jpeg
│ └── SQ7sTs1I8FQcNsRWSCh3U9kaglY4Uqjd.jpeg
│ ├── ulcIdXf1N701DOi1ZXH8akGRdtDOdF49
│ └── gRDPoQeudVFKEwnlab6oihbzpauShJQV.jpeg
│ └── v2hNKlpXkXqseh9sor0olNo66UzaBT0N
│ ├── 600x600-preview.jpg
│ └── ehasqxk8xcSUrr1tQzsxf3vzRc1rkcVw.jpeg
├── tests
├── CreatesApplication.php
├── Feature
│ └── ExampleTest.php
├── TestCase.php
└── Unit
│ └── ExampleTest.php
└── webpack.mix.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | indent_style = space
8 | indent_size = 4
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.{yml,yaml}]
15 | indent_size = 2
16 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_URL=http://demo.test
6 |
7 | LOG_CHANNEL=stack
8 |
9 | DB_CONNECTION=mysql
10 | DB_HOST=127.0.0.1
11 | DB_PORT=3306
12 | DB_DATABASE=demo
13 | DB_USERNAME=root
14 | DB_PASSWORD=root
15 |
16 | BROADCAST_DRIVER=log
17 | CACHE_DRIVER=file
18 | QUEUE_CONNECTION=database
19 | SESSION_DRIVER=file
20 | SESSION_LIFETIME=120
21 |
22 | REDIS_HOST=127.0.0.1
23 | REDIS_PASSWORD=null
24 | REDIS_PORT=6379
25 |
26 | MAIL_MAILER=smtp
27 | MAIL_HOST=smtp.mailtrap.io
28 | MAIL_PORT=2525
29 | MAIL_USERNAME=null
30 | MAIL_PASSWORD=null
31 | MAIL_ENCRYPTION=null
32 | MAIL_FROM_ADDRESS=null
33 | MAIL_FROM_NAME="${APP_NAME}"
34 |
35 | AWS_ACCESS_KEY_ID=
36 | AWS_SECRET_ACCESS_KEY=
37 | AWS_DEFAULT_REGION=us-east-1
38 | AWS_BUCKET=
39 |
40 | PUSHER_APP_ID=
41 | PUSHER_APP_KEY=
42 | PUSHER_APP_SECRET=
43 | PUSHER_APP_CLUSTER=mt1
44 |
45 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
46 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
47 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.scss linguist-vendored
4 | *.js linguist-vendored
5 | CHANGELOG.md export-ignore
6 |
--------------------------------------------------------------------------------
/.github/funding.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: [litstack]
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /public/hot
3 | /public/storage
4 | /storage/*.key
5 | /vendor
6 | .env
7 | .env.backup
8 | .phpunit.result.cache
9 | Homestead.json
10 | Homestead.yaml
11 | npm-debug.log
12 | yarn-error.log
13 |
--------------------------------------------------------------------------------
/.styleci.yml:
--------------------------------------------------------------------------------
1 | php:
2 | preset: laravel
3 | disabled:
4 | - no_unused_imports
5 | finder:
6 | not-name:
7 | - index.php
8 | - server.php
9 | js:
10 | finder:
11 | not-name:
12 | - webpack.mix.js
13 | css: true
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 litstack
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Litstack Demo
6 |
7 | A demo application to illustrate how litstack works. The online version can be found under [demo.litstack.io](https://demo.litstack.io).
8 |
9 | ## Installation
10 |
11 | Clone the repository:
12 |
13 | ```shell
14 | git clone https://github.com/litstack/demo.git && cd demo
15 | ```
16 |
17 | Copy the `.env.example` file:
18 |
19 | ```shell
20 | cp .env.example .env
21 | ```
22 |
23 | Setup a connection to an existing database and run the seeder via artisan:
24 |
25 | ```shell
26 | php artisan demo:install
27 | ```
28 |
--------------------------------------------------------------------------------
/app/Console/Commands/DemoInstallCommand.php:
--------------------------------------------------------------------------------
1 | line('Cleaned storage.');
34 |
35 | $this->call('migrate:fresh', ['--seed' => true]);
36 | $user = User::create([
37 | 'first_name' => 'Admin',
38 | 'last_name' => '',
39 | 'username' => '',
40 | 'email' => 'demo@admin.com',
41 | 'locale' => 'en',
42 | ]);
43 | $user->password = bcrypt('secret');
44 | $user->save();
45 |
46 | $user->assignRole('admin');
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/Console/Commands/DumpLoad.php:
--------------------------------------------------------------------------------
1 | load(base_path('database/dumps/demo.sql'));
37 | } catch (Exception $e) {
38 | return $this->error('Couldn\'t import sql dump, the table must be empty.');
39 | }
40 |
41 | $this->info('Imported sql dump database/dumps/demo.sql');
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/Console/Commands/DumpMake.php:
--------------------------------------------------------------------------------
1 | tables['*'] = MySQLDump::NONE;
34 |
35 | $dump->tables['lit_repeatables'] = MySQLDump::DATA;
36 | $dump->tables['lit_repeatable_translations'] = MySQLDump::DATA;
37 | $dump->tables['lit_relations'] = MySQLDump::DATA;
38 | $dump->tables['lit_forms'] = MySQLDump::DATA;
39 | $dump->tables['lit_form_translations'] = MySQLDump::DATA;
40 | $dump->tables['lit_list_items'] = MySQLDump::DATA;
41 | $dump->tables['lit_list_item_translations'] = MySQLDump::DATA;
42 | $dump->tables['opening_hours'] = MySQLDump::DATA;
43 | $dump->tables['form_relation_order'] = MySQLDump::DATA;
44 | $dump->save(base_path('database/dumps/demo.sql'));
45 |
46 | $this->info('Created sql dump database/dumps/demo.sql');
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')->hourly();
28 | }
29 |
30 | /**
31 | * Register the commands for the application.
32 | *
33 | * @return void
34 | */
35 | protected function commands()
36 | {
37 | $this->load(__DIR__.'/Commands');
38 |
39 | require base_path('routes/console.php');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 | [
33 | \App\Http\Middleware\EncryptCookies::class,
34 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
35 | \Illuminate\Session\Middleware\StartSession::class,
36 | // \Illuminate\Session\Middleware\AuthenticateSession::class,
37 | \Illuminate\View\Middleware\ShareErrorsFromSession::class,
38 | \App\Http\Middleware\VerifyCsrfToken::class,
39 | \Illuminate\Routing\Middleware\SubstituteBindings::class,
40 | ],
41 |
42 | 'api' => [
43 | 'throttle:api',
44 | \Illuminate\Routing\Middleware\SubstituteBindings::class,
45 | ],
46 | ];
47 |
48 | /**
49 | * The application's route middleware.
50 | *
51 | * These middleware may be assigned to groups or used individually.
52 | *
53 | * @var array
54 | */
55 | protected $routeMiddleware = [
56 | 'auth' => \App\Http\Middleware\Authenticate::class,
57 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
58 | 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
59 | 'can' => \Illuminate\Auth\Middleware\Authorize::class,
60 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
61 | 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
62 | 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
63 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
64 | 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
65 | ];
66 | }
67 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson()) {
18 | return route('login');
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 | check()) {
26 | return redirect(RouteServiceProvider::HOME);
27 | }
28 | }
29 |
30 | return $next($request);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 | allSubdomainsOfApplicationUrl(),
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustProxies.php:
--------------------------------------------------------------------------------
1 | 'boolean',
20 | ];
21 |
22 | public function getImageAttribute()
23 | {
24 | return $this->getMedia('image')->first();
25 | }
26 |
27 | public function user()
28 | {
29 | return $this->belongsTo(User::class);
30 | }
31 |
32 | public function scopeSuccess($query)
33 | {
34 | $query->whereState('success');
35 | }
36 |
37 | public function scopePending($query)
38 | {
39 | $query->whereState('pending');
40 | }
41 |
42 | public function scopeFailed($query)
43 | {
44 | $query->whereState('failed');
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/Models/FormRelation.php:
--------------------------------------------------------------------------------
1 | belongsToMany(Order::class, 'form_relation_order');
14 | }
15 |
16 | public function user()
17 | {
18 | return $this->belongsTo(User::class);
19 | }
20 |
21 | public function opening_hours()
22 | {
23 | return $this->manyRelation(OpeningHour::class, 'opening_hours');
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/app/Models/OpeningHour.php:
--------------------------------------------------------------------------------
1 | belongsToMany(Order::class);
39 | }
40 |
41 | public function getImagesAttribute()
42 | {
43 | return $this->getMedia('images');
44 | }
45 |
46 | public function getPreviewImageAttribute()
47 | {
48 | return $this->getMedia('images')->first();
49 | }
50 |
51 | public function scopeWithCustomersCount($query)
52 | {
53 | $query->withCount([
54 | 'orders as customers_count' => function ($ordersQuery) {
55 | $ordersQuery->select(DB::raw('COUNT(DISTINCT(user_id))'));
56 | },
57 | ]);
58 | }
59 |
60 | public function scopeWithRevenue($query)
61 | {
62 | $query->withCount([
63 | 'orders as revenue' => function ($ordersQuery) {
64 | $ordersQuery->select(DB::raw('ROUND(SUM(amount), 2)'));
65 | },
66 | ]);
67 | }
68 |
69 | public function getReadableRevenueAttribute()
70 | {
71 | if ($this->revenue) {
72 | return readable_money($this->revenue, 'EUR', 'de_DE');
73 | }
74 | }
75 |
76 | public function getReadablePriceAttribute()
77 | {
78 | if ($this->price) {
79 | return readable_money((float) $this->price, 'EUR', 'de_DE');
80 | }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/app/Models/States/ProductState.php:
--------------------------------------------------------------------------------
1 | 'datetime',
46 | ];
47 |
48 | protected $appends = [
49 | 'profile_image',
50 | ];
51 |
52 | /**
53 | * The orders created by the user.
54 | *
55 | * @return HasMany
56 | */
57 | public function orders(): HasMany
58 | {
59 | return $this->hasMany(Order::class);
60 | }
61 |
62 | /**
63 | * Select "paid_amount".
64 | *
65 | * @param Builder $query
66 | * @return void
67 | */
68 | public function scopeWithPaidAmount($query)
69 | {
70 | $query->withCount([
71 | 'orders AS paid_amount' => function ($query) {
72 | $query->select(DB::raw('SUM(amount) as paidsum'))->where('state', 'success');
73 | },
74 | ]);
75 | }
76 |
77 | public function getProfileImageAttribute()
78 | {
79 | return $this->getMedia('profile_image')->first();
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | 'App\Policies\ModelPolicy',
17 | ];
18 |
19 | /**
20 | * Register any authentication / authorization services.
21 | *
22 | * @return void
23 | */
24 | public function boot()
25 | {
26 | $this->registerPolicies();
27 |
28 | //
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | [
19 | SendEmailVerificationNotification::class,
20 | ],
21 | ];
22 |
23 | /**
24 | * Register any events for your application.
25 | *
26 | * @return void
27 | */
28 | public function boot()
29 | {
30 | //
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | configureRateLimiting();
39 |
40 | $this->routes(function () {
41 | Route::prefix('api')
42 | ->middleware('api')
43 | ->namespace($this->namespace)
44 | ->group(base_path('routes/api.php'));
45 |
46 | Route::middleware('web')
47 | ->namespace($this->namespace)
48 | ->group(base_path('routes/web.php'));
49 | });
50 | }
51 |
52 | /**
53 | * Configure the rate limiters for the application.
54 | *
55 | * @return void
56 | */
57 | protected function configureRateLimiting()
58 | {
59 | RateLimiter::for('api', function (Request $request) {
60 | return Limit::perMinute(60);
61 | });
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/app/helpers.php:
--------------------------------------------------------------------------------
1 | getLocale();
7 | }
8 |
9 | $numberFormatter = new NumberFormatter($locale, NumberFormatter::CURRENCY);
10 |
11 | return $numberFormatter->formatCurrency((float) $money, $currency);
12 | }
13 |
--------------------------------------------------------------------------------
/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | make(Illuminate\Contracts\Console\Kernel::class);
34 |
35 | $output = new Symfony\Component\Console\Output\ConsoleOutput;
36 | $output->setVerbosity(100);
37 |
38 | $status = $kernel->handle(
39 | $input = new Symfony\Component\Console\Input\ArgvInput,
40 | $output
41 | );
42 |
43 | // $status = $kernel->handle(
44 | // $input = new Symfony\Component\Console\Input\ArgvInput,
45 | // new Symfony\Component\Console\Output\ConsoleOutput
46 | // );
47 |
48 | /*
49 | |--------------------------------------------------------------------------
50 | | Shutdown The Application
51 | |--------------------------------------------------------------------------
52 | |
53 | | Once Artisan has finished running, we will fire off the shutdown events
54 | | so that any final work may be done by the application before we shut
55 | | down the process. This is the last thing to happen to the request.
56 | |
57 | */
58 |
59 | $kernel->terminate($input, $status);
60 |
61 | exit($status);
62 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | Illuminate\Contracts\Http\Kernel::class,
31 | App\Http\Kernel::class
32 | );
33 |
34 | $app->singleton(
35 | Illuminate\Contracts\Console\Kernel::class,
36 | App\Console\Kernel::class
37 | );
38 |
39 | $app->singleton(
40 | Illuminate\Contracts\Debug\ExceptionHandler::class,
41 | App\Exceptions\Handler::class
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel/laravel",
3 | "type": "project",
4 | "description": "The Laravel Framework.",
5 | "keywords": [
6 | "framework",
7 | "laravel"
8 | ],
9 | "license": "MIT",
10 | "require": {
11 | "php": "^7.4|^8.0",
12 | "dg/mysql-dump": "^1.5",
13 | "fideloper/proxy": "^4.2",
14 | "fruitcake/laravel-cors": "^2.0",
15 | "guzzlehttp/guzzle": "^7.0.1",
16 | "larabug/larabug": "^2.3",
17 | "laravel/framework": "^8.0",
18 | "laravel/tinker": "^2.0",
19 | "litstack/litstack": "dev-search",
20 | "mbezhanov/faker-provider-collection": "^2.0"
21 | },
22 | "require-dev": {
23 | "facade/ignition": "^2.3.6",
24 | "fakerphp/faker": "^1.9.1",
25 | "itsgoingd/clockwork": "^5.0",
26 | "mockery/mockery": "^1.3.1",
27 | "nunomaduro/collision": "^5.0",
28 | "phpunit/phpunit": "^9.3"
29 | },
30 | "config": {
31 | "optimize-autoloader": true,
32 | "preferred-install": "dist",
33 | "sort-packages": true
34 | },
35 | "extra": {
36 | "laravel": {
37 | "dont-discover": []
38 | }
39 | },
40 | "autoload": {
41 | "files": [
42 | "app/helpers.php"
43 | ],
44 | "psr-4": {
45 | "App\\": "app/",
46 | "Database\\Factories\\": "database/factories/",
47 | "Database\\Seeders\\": "database/seeders/",
48 | "Lit\\": "lit/app/"
49 | }
50 | },
51 | "autoload-dev": {
52 | "psr-4": {
53 | "Tests\\": "tests/"
54 | }
55 | },
56 | "minimum-stability": "dev",
57 | "prefer-stable": true,
58 | "scripts": {
59 | "post-autoload-dump": [
60 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
61 | "@php artisan package:discover --ansi"
62 | ],
63 | "post-root-package-install": [
64 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
65 | ],
66 | "post-create-project-cmd": [
67 | "@php artisan key:generate --ansi"
68 | ]
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/config/broadcasting.php:
--------------------------------------------------------------------------------
1 | env('BROADCAST_DRIVER', 'null'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Broadcast Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the broadcast connections that will be used
26 | | to broadcast events to other systems or over websockets. Samples of
27 | | each available type of connection are provided inside this array.
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'pusher' => [
34 | 'driver' => 'pusher',
35 | 'key' => env('PUSHER_APP_KEY'),
36 | 'secret' => env('PUSHER_APP_SECRET'),
37 | 'app_id' => env('PUSHER_APP_ID'),
38 | 'options' => [
39 | 'cluster' => env('PUSHER_APP_CLUSTER'),
40 | 'useTLS' => true,
41 | ],
42 | ],
43 |
44 | 'redis' => [
45 | 'driver' => 'redis',
46 | 'connection' => 'default',
47 | ],
48 |
49 | 'log' => [
50 | 'driver' => 'log',
51 | ],
52 |
53 | 'null' => [
54 | 'driver' => 'null',
55 | ],
56 |
57 | ],
58 |
59 | ];
60 |
--------------------------------------------------------------------------------
/config/cors.php:
--------------------------------------------------------------------------------
1 | ['api/*'],
19 |
20 | 'allowed_methods' => ['*'],
21 |
22 | 'allowed_origins' => ['*'],
23 |
24 | 'allowed_origins_patterns' => [],
25 |
26 | 'allowed_headers' => ['*'],
27 |
28 | 'exposed_headers' => [],
29 |
30 | 'max_age' => 0,
31 |
32 | 'supports_credentials' => false,
33 |
34 | ];
35 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DRIVER', 'local'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Cloud Filesystem Disk
21 | |--------------------------------------------------------------------------
22 | |
23 | | Many applications store files both locally and in the cloud. For this
24 | | reason, you may specify a default "cloud" driver here. This driver
25 | | will be bound as the Cloud disk implementation in the container.
26 | |
27 | */
28 |
29 | 'cloud' => env('FILESYSTEM_CLOUD', 's3'),
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Filesystem Disks
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may configure as many filesystem "disks" as you wish, and you
37 | | may even configure multiple disks of the same driver. Defaults have
38 | | been setup for each driver as an example of the required options.
39 | |
40 | | Supported Drivers: "local", "ftp", "sftp", "s3"
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path('app'),
49 | ],
50 |
51 | 'public' => [
52 | 'driver' => 'local',
53 | 'root' => storage_path('app/public'),
54 | 'url' => env('APP_URL').'/storage',
55 | 'visibility' => 'public',
56 | ],
57 |
58 | 's3' => [
59 | 'driver' => 's3',
60 | 'key' => env('AWS_ACCESS_KEY_ID'),
61 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
62 | 'region' => env('AWS_DEFAULT_REGION'),
63 | 'bucket' => env('AWS_BUCKET'),
64 | 'url' => env('AWS_URL'),
65 | 'endpoint' => env('AWS_ENDPOINT'),
66 | ],
67 |
68 | ],
69 |
70 | /*
71 | |--------------------------------------------------------------------------
72 | | Symbolic Links
73 | |--------------------------------------------------------------------------
74 | |
75 | | Here you may configure the symbolic links that will be created when the
76 | | `storage:link` Artisan command is executed. The array keys should be
77 | | the locations of the links and the values should be their targets.
78 | |
79 | */
80 |
81 | 'links' => [
82 | public_path('storage') => storage_path('app/public'),
83 | ],
84 |
85 | ];
86 |
--------------------------------------------------------------------------------
/config/hashing.php:
--------------------------------------------------------------------------------
1 | 'bcrypt',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Bcrypt Options
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may specify the configuration options that should be used when
26 | | passwords are hashed using the Bcrypt algorithm. This will allow you
27 | | to control the amount of time it takes to hash the given password.
28 | |
29 | */
30 |
31 | 'bcrypt' => [
32 | 'rounds' => env('BCRYPT_ROUNDS', 10),
33 | ],
34 |
35 | /*
36 | |--------------------------------------------------------------------------
37 | | Argon Options
38 | |--------------------------------------------------------------------------
39 | |
40 | | Here you may specify the configuration options that should be used when
41 | | passwords are hashed using the Argon algorithm. These will allow you
42 | | to control the amount of time it takes to hash the given password.
43 | |
44 | */
45 |
46 | 'argon' => [
47 | 'memory' => 1024,
48 | 'threads' => 2,
49 | 'time' => 2,
50 | ],
51 |
52 | ];
53 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
21 | ],
22 |
23 | 'postmark' => [
24 | 'token' => env('POSTMARK_TOKEN'),
25 | ],
26 |
27 | 'ses' => [
28 | 'key' => env('AWS_ACCESS_KEY_ID'),
29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
31 | ],
32 |
33 | ];
34 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('views'),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => env(
32 | 'VIEW_COMPILED_PATH',
33 | realpath(storage_path('framework/views'))
34 | ),
35 |
36 | ];
37 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 | *.sqlite-journal
3 |
--------------------------------------------------------------------------------
/database/factories/FormIndexTableFactory.php:
--------------------------------------------------------------------------------
1 | $this->faker->word(),
38 | 'html_text' => $this->faker->randomHtml(3),
39 | 'money' => $this->faker->biasedNumberBetween(100, 10000),
40 | 'active' => $this->faker->boolean(),
41 | 'progress' => $this->faker->biasedNumberBetween(0, 100),
42 | 'state' => $this->faker->randomElement($this->state),
43 | 'user_id' => User::inRandomOrder()->first()?->id,
44 | 'created_at' => $this->faker->dateTimeBetween(startDate: '-30days', endDate: 'now'),
45 | ];
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/database/factories/OrderFactory.php:
--------------------------------------------------------------------------------
1 | select('id', 'created_at')->first();
46 |
47 | return [
48 | 'user_id' => $user->id,
49 | 'provider' => $this->faker->randomElement($this->providers),
50 | 'shipping_price' => 4.90,
51 | 'subtotal' => $subtotal = $this->faker->numberBetween(1000, 150000) / 100,
52 | 'amount' => $subtotal + 4.90,
53 | 'state' => $this->faker->randomElement($this->state),
54 | 'created_at' => $this->faker->dateTimeBetween(startDate: $user->created_at, endDate: 'now'),
55 |
56 | // Billing address.
57 | 'billing_address_first_name' => $this->faker->firstName,
58 | 'billing_address_last_name' => $this->faker->lastName,
59 | 'billing_address_company' => $this->faker->lastName,
60 | 'billing_address_street' => $this->faker->address,
61 | 'billing_address_zip' => $this->faker->biasedNumberBetween(1000, 99999),
62 | 'billing_address_city' => $this->faker->city,
63 | 'billing_address_state' => $this->faker->state,
64 | 'billing_address_country' => $this->faker->country,
65 | ];
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/database/factories/OrderProductFactory.php:
--------------------------------------------------------------------------------
1 | faker->image('', word: false);
26 |
27 | return [
28 | 'state' => $this->faker->randomElement([
29 | ProductState::ACTIVE,
30 | ProductState::ACTIVE,
31 | ProductState::ACTIVE,
32 | ProductState::ACTIVE,
33 | ProductState::ACTIVE,
34 | ProductState::ACTIVE,
35 | ProductState::DRAFT,
36 | ]),
37 | 'title' => $this->faker->productName,
38 | 'description' => $this->faker->randomHtml(2, 3),
39 | 'price' => $this->faker->numberBetween(100, 15000) / 100,
40 | 'publish_at' => $this->faker->dateTimeBetween($startDate = '-60 days', $endDate = 'now'),
41 | ];
42 | }
43 |
44 | /**
45 | * Get a new Faker instance.
46 | *
47 | * @return \Faker\Generator
48 | */
49 | protected function withFaker()
50 | {
51 | $faker = parent::withFaker();
52 |
53 | $faker->addProvider(
54 | new \Bezhanov\Faker\Provider\Commerce($faker)
55 | );
56 |
57 | return $faker;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/database/factories/UserFactory.php:
--------------------------------------------------------------------------------
1 | $this->faker->name,
27 | 'email' => $this->faker->unique()->safeEmail,
28 | 'email_verified_at' => now(),
29 | // 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
30 | 'remember_token' => Str::random(10),
31 | 'created_at' => $this->faker->dateTimeBetween(startDate: '-90 days', endDate: 'now'),
32 | ];
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('email')->unique();
20 | $table->timestamp('email_verified_at')->nullable();
21 | $table->rememberToken();
22 | $table->dateTime('created_at')->nullable();
23 | $table->dateTime('updated_at')->nullable();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('users');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('uuid')->unique();
19 | $table->text('connection');
20 | $table->text('queue');
21 | $table->longText('payload');
22 | $table->longText('exception');
23 | $table->timestamp('failed_at')->useCurrent();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('failed_jobs');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/2020_00_00_000000_create_lit_forms_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 |
19 | $table->string('config_type');
20 | $table->string('form_type')->nullable();
21 | $table->string('collection')->nullable();
22 | $table->string('form_name')->nullable();
23 |
24 | $table->text('value')->nullable();
25 |
26 | $table->unsignedInteger('order_column')->nullable();
27 |
28 | $table->dateTime('created_at')->nullable();
29 | $table->dateTime('updated_at')->nullable();
30 | });
31 |
32 | Schema::create('lit_form_translations', function (Blueprint $table) {
33 | $table->translates('lit_forms', 'lit_form_id');
34 | $table->text('value')->nullable();
35 | });
36 | }
37 |
38 | /**
39 | * Reverse the migrations.
40 | *
41 | * @return void
42 | */
43 | public function down()
44 | {
45 | Schema::disableForeignKeyConstraints();
46 | Schema::dropIfExists('lit_forms');
47 | Schema::dropIfExists('lit_form_translations');
48 | Schema::enableForeignKeyConstraints();
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/database/migrations/2020_00_00_000000_create_lit_list_items_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 |
19 | $table->string('model_type')->nullable();
20 | $table->bigInteger('model_id')->nullable();
21 | $table->bigInteger('parent_id')->nullable();
22 | $table->string('config_type');
23 | $table->string('form_type')->nullable();
24 | $table->string('field_id')->nullable();
25 |
26 | $table->text('value')->nullable();
27 |
28 | $table->unsignedInteger('order_column')->nullable();
29 | $table->boolean('active')->default(true);
30 |
31 | $table->dateTime('created_at')->nullable();
32 | $table->dateTime('updated_at')->nullable();
33 | });
34 |
35 | Schema::create('lit_list_item_translations', function (Blueprint $table) {
36 | $table->translates('lit_list_items', 'lit_list_item_id');
37 | $table->text('value')->nullable();
38 | });
39 | }
40 |
41 | /**
42 | * Reverse the migrations.
43 | *
44 | * @return void
45 | */
46 | public function down()
47 | {
48 | Schema::disableForeignKeyConstraints();
49 | Schema::dropIfExists('lit_list_items');
50 | Schema::dropIfExists('lit_list_item_translations');
51 | Schema::enableForeignKeyConstraints();
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/database/migrations/2020_00_00_000000_create_lit_relations_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('from_model_type');
19 | $table->bigInteger('from_model_id');
20 | $table->string('to_model_type');
21 | $table->bigInteger('to_model_id');
22 | $table->string('field_id');
23 | $table->unsignedInteger('order_column')->nullable();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('lit_relations');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/2020_00_00_000000_create_lit_repeatables_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 |
19 | $table->string('model_type')->nullable();
20 | $table->bigInteger('model_id')->nullable();
21 | $table->string('config_type');
22 | $table->string('form_type')->nullable();
23 | $table->string('field_id')->nullable();
24 |
25 | $table->string('type')->nullable();
26 | $table->text('value')->nullable();
27 |
28 | $table->unsignedInteger('order_column')->nullable();
29 |
30 | $table->dateTime('created_at')->nullable();
31 | $table->dateTime('updated_at')->nullable();
32 | });
33 |
34 | Schema::create('lit_repeatable_translations', function (Blueprint $table) {
35 | $table->translates('lit_repeatables', 'lit_repeatable_id');
36 | $table->text('value')->nullable();
37 | });
38 | }
39 |
40 | /**
41 | * Reverse the migrations.
42 | *
43 | * @return void
44 | */
45 | public function down()
46 | {
47 | Schema::disableForeignKeyConstraints();
48 | Schema::dropIfExists('lit_repeatables');
49 | Schema::dropIfExists('lit_repeatable_translations');
50 | Schema::enableForeignKeyConstraints();
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/database/migrations/2020_00_00_000000_create_lit_users_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('first_name');
19 | $table->string('last_name');
20 | $table->string('username')->unique();
21 | $table->string('email')->unique();
22 | $table->timestamp('email_verified_at')->nullable();
23 | $table->string('password')->nullable();
24 | $table->rememberToken();
25 | $table->string('locale')->nullable();
26 | $table->dateTime('created_at')->nullable();
27 | $table->dateTime('updated_at')->nullable();
28 | });
29 | }
30 |
31 | /**
32 | * Reverse the migrations.
33 | *
34 | * @return void
35 | */
36 | public function down()
37 | {
38 | Schema::disableForeignKeyConstraints();
39 | Schema::dropIfExists('lit_users');
40 | Schema::enableForeignKeyConstraints();
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/database/migrations/2020_10_02_174910_create_media_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
13 |
14 | $table->morphs('model');
15 | $table->uuid('uuid')->nullable()->unique();
16 | $table->string('collection_name');
17 | $table->string('name');
18 | $table->string('file_name');
19 | $table->string('mime_type')->nullable();
20 | $table->string('disk');
21 | $table->string('conversions_disk')->nullable();
22 | $table->unsignedBigInteger('size');
23 | $table->json('manipulations');
24 | $table->json('custom_properties');
25 | $table->json('generated_conversions');
26 | $table->json('responsive_images');
27 | $table->unsignedInteger('order_column')->nullable();
28 |
29 | $table->dateTime('created_at')->nullable();
30 | $table->dateTime('updated_at')->nullable();
31 | });
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/database/migrations/2020_10_02_174952_create_orders_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id')->from(100000);
18 |
19 | $table->unsignedBigInteger('user_id')->index();
20 |
21 | $table->string('provider');
22 | $table->float('subtotal');
23 | $table->float('amount');
24 | $table->float('shipping_price');
25 | $table->string('state');
26 |
27 | $table->string('billing_address_first_name')->nullable();
28 | $table->string('billing_address_last_name')->nullable();
29 | $table->string('billing_address_company')->nullable();
30 | $table->string('billing_address_street')->nullable();
31 | $table->string('billing_address_zip')->nullable();
32 | $table->string('billing_address_state')->nullable();
33 | $table->string('billing_address_city')->nullable();
34 | $table->string('billing_address_country')->nullable();
35 |
36 | $table->dateTime('created_at')->nullable();
37 | $table->dateTime('updated_at')->nullable();
38 | });
39 | }
40 |
41 | /**
42 | * Reverse the migrations.
43 | *
44 | * @return void
45 | */
46 | public function down()
47 | {
48 | Schema::dropIfExists('orders');
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/database/migrations/2020_10_02_175456_create_products_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('state');
19 | $table->string('title');
20 | $table->text('description')->nullable();
21 | $table->float('price');
22 | $table->timestamp('publish_at');
23 | $table->dateTime('created_at')->nullable();
24 | $table->dateTime('updated_at')->nullable();
25 | });
26 | }
27 |
28 | /**
29 | * Reverse the migrations.
30 | *
31 | * @return void
32 | */
33 | public function down()
34 | {
35 | Schema::dropIfExists('products');
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/database/migrations/2020_10_02_175548_create_order_product_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->foreignId('order_id');
19 | $table->foreignId('product_id');
20 | $table->float('price');
21 |
22 | $table->dateTime('created_at')->nullable();
23 | $table->dateTime('updated_at')->nullable();
24 |
25 | $table->index(['order_id', 'product_id']);
26 | });
27 | }
28 |
29 | /**
30 | * Reverse the migrations.
31 | *
32 | * @return void
33 | */
34 | public function down()
35 | {
36 | Schema::dropIfExists('order_product');
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/database/migrations/2021_02_01_085451_create_opening_hours_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('week_day');
19 | $table->string('order_column')->nullable();
20 | $table->string('opening_at');
21 | $table->string('closing_at');
22 | $table->dateTime('created_at')->nullable();
23 | $table->dateTime('updated_at')->nullable();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('opening_hours');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/2021_03_14_130429_create_form_relations_tables.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('user_id');
19 | $table->nullableMorphs('relationable');
20 | $table->dateTime('created_at')->nullable();
21 | $table->dateTime('updated_at')->nullable();
22 | });
23 |
24 | Schema::create('form_relation_order', function (Blueprint $table) {
25 | $table->string('form_relation_id');
26 | $table->string('order_id');
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | *
33 | * @return void
34 | */
35 | public function down()
36 | {
37 | Schema::dropIfExists('form_relations');
38 | Schema::dropIfExists('form_relation_order');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/database/migrations/2021_03_14_141115_create_form_index_table_items_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('title');
19 | $table->string('state');
20 | $table->text('html_text');
21 | $table->integer('money');
22 | $table->boolean('active');
23 | $table->integer('progress');
24 | $table->string('user_id');
25 | $table->dateTime('created_at')->nullable();
26 | $table->dateTime('updated_at')->nullable();
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | *
33 | * @return void
34 | */
35 | public function down()
36 | {
37 | Schema::dropIfExists('form_index_table_items');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/database/migrations/2021_04_04_174351_create_jobs_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('queue')->index();
19 | $table->longText('payload');
20 | $table->unsignedTinyInteger('attempts');
21 | $table->unsignedInteger('reserved_at')->nullable();
22 | $table->unsignedInteger('available_at');
23 | $table->unsignedInteger('created_at');
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('jobs');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/______________________make_permissions.php:
--------------------------------------------------------------------------------
1 | combineOperationsAndGroups(
70 | ['read', 'update'], $this->editPermissionGroups
71 | );
72 | $this->combineOperationsAndGroups(
73 | ['create', 'read', 'update', 'delete'], $this->crudPermissionGroups
74 | );
75 | }
76 |
77 | /**
78 | * Run the migrations.
79 | *
80 | * @return void
81 | */
82 | public function up()
83 | {
84 | Role::firstOrCreate(['guard_name' => 'lit', 'name' => 'admin']);
85 | Role::firstOrCreate(['guard_name' => 'lit', 'name' => 'user']);
86 | $this->buildPermissions();
87 | $this->upPermissions();
88 | }
89 |
90 | /**
91 | * Reverse the migrations.
92 | *
93 | * @return void
94 | */
95 | public function down()
96 | {
97 | $this->combineOperationsAndGroups(
98 | ['create', 'read', 'update', 'delete'], $this->down
99 | );
100 | $this->buildPermissions();
101 | $this->downPermissions();
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call([
24 | UserSeeder::class,
25 | ProductSeeder::class,
26 | OrderSeeder::class,
27 | ]);
28 |
29 | $properties = ['title' => null, 'alt' => null];
30 |
31 | $home = HomeConfig::load();
32 | $home->addMedia(storage_path('dump/home/header_image.jpg'))
33 | ->preservingOriginal()
34 | ->withCustomProperties($properties)
35 | ->toMediaCollection('header_image');
36 |
37 | FormRelation::create([
38 | 'user_id' => User::inRandomOrder()->first()->id,
39 | ]);
40 |
41 | FormIndexTable::factory(200)->create();
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/database/seeders/OrderSeeder.php:
--------------------------------------------------------------------------------
1 | create();
20 |
21 | foreach ($orders as $booking) {
22 | $productCount = rand(2, 10);
23 | for ($i = 0; $i < $productCount; $i++) {
24 | $product = Product::inRandomOrder()->first();
25 | OrderProduct::factory(1)->create([
26 | 'order_id' => $booking->id,
27 | 'product_id' => $product->id,
28 | 'price' => $product->price,
29 | 'created_at' => $booking->created_at,
30 | ]);
31 | }
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/database/seeders/ProductSeeder.php:
--------------------------------------------------------------------------------
1 | create();
20 |
21 | $faker = Container::getInstance()->make(Generator::class);
22 |
23 | $products->each(function (Product $product) {
24 | $properties = ['title' => null, 'alt' => null];
25 |
26 | $this->command->info("Downloading image for product with id [{$product->id}].");
27 |
28 | $product->addMediaFromUrl('https://source.unsplash.com/collection/2323310/600x600')
29 | ->preservingOriginal()
30 | ->withCustomProperties($properties)
31 | ->toMediaCollection('images');
32 | });
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/database/seeders/UserSeeder.php:
--------------------------------------------------------------------------------
1 | where('guard_name', 'lit')->first();
19 |
20 | $adminRole->revokePermissionTo('update lit-role-permissions');
21 | $adminRole->revokePermissionTo('delete lit-users');
22 |
23 | $users = User::factory(10)->create();
24 |
25 | $users->each(function (User $user) {
26 | $properties = ['title' => null, 'alt' => null];
27 |
28 | $this->command->info("Downloading profile image for user with id [{$user->id}].");
29 |
30 | $user->addMediaFromUrl('https://source.unsplash.com/collection/4805779/600x600')
31 | ->preservingOriginal()
32 | ->withCustomProperties($properties)
33 | ->toMediaCollection('profile_image');
34 | });
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lit/app/Actions/Booking/SendMailAction.php:
--------------------------------------------------------------------------------
1 | confirmText('Send '.fa('paper-plane'));
15 |
16 | $modal->form(function ($form) {
17 | $form->input('subject');
18 | $form->text('message');
19 | });
20 | }
21 |
22 | /**
23 | * Run the action.
24 | *
25 | * @param Collection $models
26 | * @return JsonResponse
27 | */
28 | public function run(Collection $models, AttributeBag $attributes)
29 | {
30 | if ($models->count() > 0) {
31 | return response()->success('success');
32 | } else {
33 | return response()->danger('fail');
34 | }
35 | foreach ($models as $model) {
36 | // Send Mail to model.
37 | // $attributes->subject
38 | // $attributes->message
39 | }
40 |
41 | return response()->success('Mail was sent.');
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/lit/app/Composers/LoginComposer.php:
--------------------------------------------------------------------------------
1 | with('script', '/js/login.js');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/Example/AreaChartConfig.php:
--------------------------------------------------------------------------------
1 | currency('€');
37 | }
38 |
39 | /**
40 | * Calculate value.
41 | *
42 | * @param Builder $query
43 | * @return int
44 | */
45 | public function value($query)
46 | {
47 | return $this->sum($query, 'amount');
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/Example/BarChartConfig.php:
--------------------------------------------------------------------------------
1 | currency('€');
37 | }
38 |
39 | /**
40 | * Calculate value.
41 | *
42 | * @param Builder $query
43 | * @return int
44 | */
45 | public function value($query)
46 | {
47 | return $this->sum($query, 'amount');
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/Example/DonutChartConfig.php:
--------------------------------------------------------------------------------
1 | count((clone $query)->where('state', 'pending')),
49 | $this->count((clone $query)->where('state', 'success')),
50 | $this->count((clone $query)->where('state', 'failed')),
51 | ];
52 | }
53 |
54 | /**
55 | * Labels.
56 | *
57 | * @return array
58 | */
59 | public function labels(): array
60 | {
61 | return [
62 | 'Pending',
63 | 'Success',
64 | 'Failed',
65 | ];
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/Example/NumberChartConfig.php:
--------------------------------------------------------------------------------
1 | count($query);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/Example/ProgressChartConfig.php:
--------------------------------------------------------------------------------
1 | count($query);
37 | }
38 |
39 | /**
40 | * Get goal value.
41 | *
42 | * @return int|float
43 | */
44 | public function goal()
45 | {
46 | return 1000;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/OrderAmountAreaChartConfig.php:
--------------------------------------------------------------------------------
1 | currency('€');
37 | }
38 |
39 | /**
40 | * Calculate value.
41 | *
42 | * @param Builder $query
43 | * @return int
44 | */
45 | public function value($query)
46 | {
47 | return $this->sum($query, 'amount');
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/OrderCountNumberChartConfig.php:
--------------------------------------------------------------------------------
1 | count($query);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lit/app/Config/Charts/UserOrderAmountAreaChartConfig.php:
--------------------------------------------------------------------------------
1 | currency('€');
44 | }
45 |
46 | /**
47 | * Calculate value.
48 | *
49 | * @param Builder $query
50 | * @return int
51 | */
52 | public function value($query)
53 | {
54 | return $this->sum($query->where('state', 'success'), 'amount');
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/lit/app/Config/Crud/FormIndexTableConfig.php:
--------------------------------------------------------------------------------
1 | 'Table',
40 | 'plural' => 'Basic Table',
41 | ];
42 | }
43 |
44 | /**
45 | * Get crud route prefix.
46 | *
47 | * @return string
48 | */
49 | public function routePrefix()
50 | {
51 | return 'form/table';
52 | }
53 |
54 | /**
55 | * Build index page.
56 | *
57 | * @param \Ignite\Crud\CrudIndex $page
58 | * @return void
59 | */
60 | public function index(CrudIndex $page)
61 | {
62 | $page->table(fn ($table) => $this->makeIndexTableColumns($table))
63 | ->search('title')
64 | ->query(function ($query) {
65 | // $query->withCount('orders');
66 | })
67 | ->filter([
68 | 'State' => [
69 | 'pending' => 'pending',
70 | 'success' => 'success',
71 | 'failed' => 'failed',
72 | ],
73 | ])
74 | ->action('Custom Action', SendMailAction::class)
75 | ->sortBy(array_merge(
76 | Table::numericOrder('id'),
77 | Table::alphabeticOrder('title'),
78 | ));
79 | }
80 |
81 | protected function makeIndexTableColumns(CrudColumnBuilder $table)
82 | {
83 | $table->col('Title')->value('{title}')->sortBy('title');
84 | $table->col('Stipped Html')->value('{html_text}')->stripHtml()->maxChars(25)->nowrap();
85 | $table->money('money', 'EUR', 'de_DE');
86 | $table->date('created_at', 'LL', isoFormat: true)->label('Formatted Date/Time')->nowrap();
87 | $table->col('State')->value('state', [
88 | 'success' => '{state}
',
89 | 'canceled' => '{state}
',
90 | 'pending' => '{state}
',
91 | ])->sortBy('state');
92 | $table->view('lit::columns.foo')->label('Blade View');
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/lit/app/Config/Crud/UserConfig.php:
--------------------------------------------------------------------------------
1 | 'User',
37 | 'plural' => 'Users',
38 | ];
39 | }
40 |
41 | /**
42 | * Get crud route prefix.
43 | *
44 | * @return string
45 | */
46 | public function routePrefix()
47 | {
48 | return 'users';
49 | }
50 |
51 | /**
52 | * Build index page.
53 | *
54 | * @param \Ignite\Crud\CrudIndex $page
55 | * @return void
56 | */
57 | public function index(CrudIndex $page)
58 | {
59 | $page->table(function ($table) {
60 | $table->col('title')->value('{title}')->sortBy('title');
61 | })
62 | ->search('name')
63 | ->sortBy([
64 | 'id.desc' => __lit('lit.sort_new_to_old'),
65 | 'id.asc' => __lit('lit.sort_old_to_new'),
66 | ]);
67 | }
68 |
69 | /**
70 | * Setup show page.
71 | *
72 | * @param \Ignite\Crud\CrudShow $page
73 | * @return void
74 | */
75 | public function show(CrudShow $page)
76 | {
77 | $page->card(function ($form) {
78 | $form->input('title')->title('Title')->width(6);
79 | });
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Charts/ChartsConfig.php:
--------------------------------------------------------------------------------
1 | 'Charts',
42 | ];
43 | }
44 |
45 | /**
46 | * Setup form page.
47 | *
48 | * @param \Lit\Crud\CrudShow $page
49 | * @return void
50 | */
51 | public function show(CrudShow $page)
52 | {
53 | $page->chart(NumberChartConfig::class)->height('130px')->width(1 / 3)->variant('secondary');
54 | $page->chart(ProgressChartConfig::class)->height('185px')->width(1 / 3);
55 | $page->chart(DonutChartConfig::class)->height('185px')->width(1 / 3)->variant('secondary');
56 | $page->chart(AreaChartConfig::class)->height('120px');
57 | $page->chart(BarChartConfig::class)->height('120px')->variant('white');
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/BooleanConfig.php:
--------------------------------------------------------------------------------
1 | 'Boolean',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->boolean('active');
50 | });
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/CheckboxesConfig.php:
--------------------------------------------------------------------------------
1 | 'Checkboxes',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->checkboxes('text')->options([
50 | 'orange' => 'Orange',
51 | 'apple' => 'Apple',
52 | 'pineapple' => 'Pineapple',
53 | ]);
54 | });
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/ConditionsConfig.php:
--------------------------------------------------------------------------------
1 | 'Conditions',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->select('type')
50 | ->options([
51 | 'news' => 'News',
52 | 'blog' => 'Blog',
53 | ])
54 | ->title('Type');
55 |
56 | $form->input('news_title')
57 | ->title('Title')
58 | ->when('type', 'news');
59 |
60 | $form->markdown('
61 | ```php
62 | $form->select(\'type\')
63 | ->options([
64 | \'news\' => \'News\',
65 | \'blog\' => \'Blog\',
66 | ])
67 | ->title(\'Type\');
68 |
69 | $form->input(\'news_title\')
70 | ->title(\'Title\')
71 | ->when(\'type\', \'news\');
72 | ```
73 | ');
74 | });
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/DatetimeConfig.php:
--------------------------------------------------------------------------------
1 | 'Datetime',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->datetime('date')
50 | ->width(1 / 3);
51 |
52 | $form->datetime('date_and_time')
53 | ->onlyDate(false)
54 | ->width(1 / 3);
55 |
56 | $form->datetime('time')
57 | ->minuteInterval(15)
58 | ->onlyTime(true)
59 | ->width(1 / 3);
60 |
61 | $form->group(function ($form) {
62 | $form->markdown('
63 | ```php
64 | $form->datetime(\'date\')
65 | ->width(1 / 3);
66 | ```
67 | ');
68 | })->width(1 / 3);
69 |
70 | $form->group(function ($form) {
71 | $form->markdown('
72 | ```php
73 | $form->datetime(\'date_and_time\')
74 | ->onlyDate(false)
75 | ->width(1 / 3);
76 | ```
77 | ');
78 | })->width(1 / 3);
79 |
80 | $form->group(function ($form) {
81 | $form->markdown('
82 | ```php
83 | $form->datetime(\'time\')
84 | ->minuteInterval(15)
85 | ->onlyTime(true)
86 | ->width(1 / 3);
87 | ```
88 | ');
89 | })->width(1 / 3);
90 | });
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/IconConfig.php:
--------------------------------------------------------------------------------
1 | 'Icon',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->icon('icon');
50 | });
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/ImageConfig.php:
--------------------------------------------------------------------------------
1 | 'Image',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->group(function ($page) {
49 | $page->card(function ($form) {
50 | $form->image('croppable_image')
51 | ->maxFiles(1)
52 | ->crop(16 / 9);
53 |
54 | $form->markdown('
55 | Single image that can be cropped.
56 |
57 | ```php
58 | $form->image(\'croppable_image\')
59 | ->maxFiles(1)
60 | ->crop(16 / 9);
61 | ```
62 | ');
63 | });
64 |
65 | $page->card(function ($form) {
66 | $form->image('images')
67 | ->firstBig()
68 | ->maxFiles(5);
69 |
70 | $form->markdown('
71 | Single image that can be cropped.
72 |
73 | ```php
74 | $form->image(\'images\')
75 | ->firstBig()
76 | ->maxFiles(5);
77 | ```
78 | ');
79 | });
80 | })->width(6);
81 |
82 | $page->group(function ($page) {
83 | $page->card(function ($form) {
84 | $form->image('expanded_image')
85 | ->maxFiles(1)
86 | ->expand()
87 | ->hint('Header image.');
88 |
89 | $form->markdown('
90 | Single image with full preview as a header image.
91 |
92 | ```php
93 | $form->image(\'expanded_image\')
94 | ->maxFiles(1)
95 | ->expand()
96 | ->hint(\'Header image.\');
97 | ```
98 | ');
99 | });
100 | })->width(6);
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/InputConfig.php:
--------------------------------------------------------------------------------
1 | 'Input',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->input('text')
50 | ->translatable(false)
51 | ->rules('min:10', 'max:50');
52 |
53 | $form->markdown('
54 | ```php
55 | $form->input(\'text\')
56 | ->translatable(false)
57 | ->rules(\'min:10\', \'max:50\');
58 | ```
59 | ');
60 | });
61 |
62 | $page->card(function ($form) {
63 | $form->input('credit_card')
64 | ->title('Input Field With Credit Card Mask')
65 | ->placeholder('4242 4242 4242 4242')
66 | ->mask([
67 | 'creditCard' => true,
68 | ]);
69 |
70 | $form->markdown('
71 | ```php
72 | $form->input(\'credit_card\')
73 | ->placeholder(\'4242 4242 4242 4242\')
74 | ->mask([
75 | \'creditCard\' => true,
76 | ]);
77 | ```
78 | ');
79 | });
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/ListFieldConfig.php:
--------------------------------------------------------------------------------
1 | 'List',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->list('menue')
50 | ->previewTitle('{title}')
51 | ->form(function ($form) {
52 | $form->input('title');
53 | });
54 |
55 | $form->markdown('
56 | ```php
57 | $form->list(\'menue\')
58 | ->previewTitle(\'{title}\')
59 | ->form(function ($form) {
60 | $form->input(\'title\');
61 | });
62 | ```
63 | ');
64 | });
65 |
66 | $page->card(function ($form) {
67 | $form->markdown('
68 | Apply the listing field to your model.
69 |
70 | ```php
71 | use Illuminate\Database\Eloquent\Relations\MorphMany;
72 |
73 | class Post extends Model
74 | {
75 | protected menue(): MorphMany
76 | {
77 | return $this->listItems(\'menue\');
78 | }
79 | }
80 | ```
81 | ');
82 | });
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/PasswordConfig.php:
--------------------------------------------------------------------------------
1 | 'Password',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->password('password');
50 |
51 | $form->markdown('
52 | ```php
53 | $form->password(\'password\');
54 | ```
55 | ');
56 | });
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/RadioConfig.php:
--------------------------------------------------------------------------------
1 | 'Radio',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->radio('type')
50 | ->title('Type')
51 | ->options([
52 | 'article' => 'Article',
53 | 'hint' => 'Hint',
54 | ]);
55 |
56 | $form->markdown('
57 | ```php
58 | $form->radio(\'type\')
59 | ->title(\'Type\')
60 | ->options([
61 | \'article\' => \'Article\',
62 | \'hint\' => \'Hint\',
63 | ]);
64 | ```
65 | ');
66 | });
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/RangeConfig.php:
--------------------------------------------------------------------------------
1 | 'Range',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->range('range')
50 | ->min(1)
51 | ->max(20)
52 | ->step(1)
53 | ->hint('Range.');
54 |
55 | $form->markdown('
56 | ```php
57 | $form->range(\'range\')
58 | ->min(1)
59 | ->max(20)
60 | ->step(1)
61 | ->hint(\'Range.\');
62 | ```
63 | ');
64 | });
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/RouteConfig.php:
--------------------------------------------------------------------------------
1 | 'Route',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->route('route')
50 | ->collection('app')
51 | ->title('Picke a Url');
52 |
53 | // ...
54 | });
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Fields/WysiwygConfig.php:
--------------------------------------------------------------------------------
1 | 'Wysiwyg',
37 | ];
38 | }
39 |
40 | /**
41 | * Setup form page.
42 | *
43 | * @param \Lit\Crud\CrudShow $page
44 | * @return void
45 | */
46 | public function show(CrudShow $page)
47 | {
48 | $page->card(function ($form) {
49 | $form->wysiwyg('text');
50 | });
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Form/AdvancedConfig.php:
--------------------------------------------------------------------------------
1 | 'Advanced',
39 | ];
40 | }
41 |
42 | /**
43 | * Setup form page.
44 | *
45 | * @param \Lit\Crud\CrudShow $page
46 | * @return void
47 | */
48 | public function show(CrudShow $page)
49 | {
50 | $page->card(function ($form) {
51 | $form->input('credit_card')->mask(['creditCard' => true])->translatable(false)->width(1 / 2)->append(fa('credit-card'));
52 | $form->input('phone_number')->mask(['phone' => true, 'phoneRegionCode' => 'us'])->width(1 / 2)->append(fa('phone'));
53 | })->title('Input Masks');
54 |
55 | $page->card(function ($form) {
56 | $form->route('route')
57 | ->collection('app')
58 | ->title('Picke a Route');
59 | })->title('Route Picker');
60 |
61 | $page->card(function ($form) {
62 | $form->list('menue')
63 | ->title('Menue')
64 | ->previewTitle('{title}')
65 | ->form(function ($form) {
66 | $form->input('title')->rules('required')->translatable(false);
67 | $form->textarea('Text')->translatable(false);
68 | });
69 | $form->info()->text(fa('info-circle').' The sortable list field can be used to create a navigation builder.');
70 | })->title('Sortable List');
71 |
72 | $page->card(function ($form) {
73 | $form->info()
74 | ->text('Add repetitive content to your side using a block field and repeatables.')
75 | ->text('Each repeatable has form fields and a preivew that shows its content when collapsed.');
76 | $form->block('content')
77 | ->repeatables(function ($rep) {
78 | $rep->add(TextRepeatable::class);
79 | $rep->add(ImageRepeatable::class);
80 | });
81 | })->title('Block');
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/lit/app/Config/Form/Pages/HomeConfig.php:
--------------------------------------------------------------------------------
1 | 'Home',
38 | ];
39 | }
40 |
41 | /**
42 | * Setup form page.
43 | *
44 | * @param \Lit\Crud\CrudShow $page
45 | * @return void
46 | */
47 | public function show(CrudShow $page)
48 | {
49 | $page->group(function ($page) {
50 | $page->card(function ($form) {
51 | $form->input('headline');
52 | $form->image('header_image')
53 | ->expand()
54 | ->maxFiles(1)
55 | ->hint('Background vector created by freepik - www.freepik.com');
56 | $form->wysiwyg('text');
57 | });
58 |
59 | $page->card(function ($form) {
60 | $form->block('content')->repeatables(function ($rep) {
61 | $rep->add('text', function ($form, $preview) {
62 | $preview->col('text')->stripHtml()->maxChars(50);
63 | $form->wysiwyg('text');
64 | });
65 | });
66 | });
67 |
68 | $page->card(function ($form) {
69 | $form->manyRelation('products')
70 | ->model(Product::class)
71 | ->hint('Select the products that should be featured on the front page.');
72 | })->title('Featured');
73 | })->width(8);
74 | $page->group(function ($page) {
75 | $page->card(function ($form) {
76 | $form->boolean('live')->hint('Wether the site is available to the public.');
77 |
78 | // ...
79 | });
80 | })->width(4);
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/lit/app/Config/NavigationConfig.php:
--------------------------------------------------------------------------------
1 | section([
28 | $nav->preset('profile'),
29 | ]);
30 |
31 | $nav->section([
32 | $nav->title(__lit('lit.user_administration')),
33 |
34 | $nav->preset('user.user', [
35 | 'icon' => fa('users'),
36 | ]),
37 | $nav->preset('permissions'),
38 | ]);
39 | }
40 |
41 | /**
42 | * Main navigation entries.
43 | *
44 | * @param \Ignite\Application\Navigation\Navigation $nav
45 | * @return void
46 | */
47 | public function main(Navigation $nav)
48 | {
49 | $nav->section([
50 | $nav->title('Form Controls'),
51 |
52 | $nav->preset(FieldsConfig::class, ['icon' => fa('edit')]),
53 | $nav->preset(AdvancedConfig::class, ['icon' => fa('plus')]),
54 | $nav->entry('Relations', [
55 | 'icon' => fa('link'),
56 | 'link' => lit()->url('form/relations/1'),
57 | ]),
58 | $nav->group([
59 | 'title' => 'Index Table',
60 | 'icon' => fa('table'),
61 | ], [
62 | $nav->preset(FormIndexTableConfig::class, ['icon' => fa('columns')]),
63 | $nav->preset(FormIndexTableAdvancedConfig::class, ['icon' => fa('columns')]),
64 | ]),
65 |
66 | $nav->title('Charts'),
67 | $nav->preset(ChartsConfig::class, ['icon' => fa('chart-line')]),
68 |
69 | ]);
70 |
71 | $nav->section([
72 | $nav->title('Models'),
73 |
74 | $nav->preset(OrderConfig::class, ['icon' => fa('ticket-alt')]),
75 | $nav->preset(ProductConfig::class, ['icon' => fa('box-open')]),
76 | $nav->preset(CustomerConfig::class, ['icon' => fa('users')]),
77 | ]);
78 |
79 | $nav->section([
80 | $nav->title('Pages'),
81 |
82 | $nav->preset(HomeConfig::class, ['icon' => fa('home')]),
83 | ]);
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/lit/app/Config/SearchConfig.php:
--------------------------------------------------------------------------------
1 | add(OrderConfig::class)
17 | ->add(ProductConfig::class)
18 | ->add(CustomerConfig::class);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/lit/app/Config/User/UserConfig.php:
--------------------------------------------------------------------------------
1 | ucfirst(__lit('base.user')),
47 | 'plural' => ucfirst(__lit('base.users')),
48 | ];
49 | }
50 |
51 | /**
52 | * Build user index table.
53 | *
54 | * @param CrudIndex $page
55 | * @return void
56 | */
57 | public function index(CrudIndex $page)
58 | {
59 | $page->table(fn ($table) => $this->indexTable($table))
60 | ->query(fn ($query) => $query->with('ordered_roles'))
61 | ->sortByDefault('id.desc')
62 | ->search('username', 'first_name', 'last_name', 'email');
63 | }
64 |
65 | /**
66 | * User index table.
67 | *
68 | * @param ColumnBuilder $table
69 | * @return void
70 | */
71 | public function indexTable(ColumnBuilder $table)
72 | {
73 | $table->col()
74 | ->value('{first_name} {last_name}')
75 | ->label('Name');
76 |
77 | $table->col()
78 | ->value('email')
79 | ->label('E-Mail');
80 |
81 | $table->component('lit-permissions-lit-users-roles')
82 | ->link(false)
83 | ->label(ucfirst(__lit('base.roles')));
84 |
85 | $table->component('lit-permissions-lit-users-apply-role')
86 | ->authorize(fn ($user) => $user->can('update lit-user-roles'))
87 | ->label('')
88 | ->link(false)
89 | ->small();
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/lit/app/Filters/CreatedAtFilter.php:
--------------------------------------------------------------------------------
1 | has('created_at')) {
23 | $query->whereBetween('created_at', [
24 | (new Carbon($attributes->created_at))->startOfDay(),
25 | (new Carbon($attributes->created_at))->endOfDay(),
26 | ]);
27 | }
28 | }
29 |
30 | /**
31 | * Add filter form fields.
32 | *
33 | * @param FilterForm $form
34 | * @return void
35 | */
36 | public function form(FilterForm $form)
37 | {
38 | $form->date('created_at');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/lit/app/Filters/UserNameFilter.php:
--------------------------------------------------------------------------------
1 | has('name')) {
22 | $query->whereHas('user', function ($userQuery) use ($attributes) {
23 | $userQuery->where('name', 'LIKE', "%{$attributes->name}%");
24 | });
25 | }
26 | }
27 |
28 | /**
29 | * Add filter form fields.
30 | *
31 | * @param FilterForm $form
32 | * @return void
33 | */
34 | public function form(FilterForm $form)
35 | {
36 | $form->input('name');
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Crud/CustomerController.php:
--------------------------------------------------------------------------------
1 | can("{$operation} customers");
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Crud/FormIndexTableController.php:
--------------------------------------------------------------------------------
1 | can("{$operation} form_relations");
22 | return true;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Crud/FormRelationController.php:
--------------------------------------------------------------------------------
1 | can("{$operation} form_relations");
22 | return true;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Crud/OrderController.php:
--------------------------------------------------------------------------------
1 | can("{$operation} orders");
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Crud/ProductController.php:
--------------------------------------------------------------------------------
1 | can("{$operation} products");
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Crud/UserController.php:
--------------------------------------------------------------------------------
1 | can("{$operation} users");
22 | return true;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/Form/Charts/ChartsController.php:
--------------------------------------------------------------------------------
1 | id == lit_user()->id;
32 | }
33 |
34 | /**
35 | * Initial query.
36 | *
37 | * @return \Illuminate\Database\Eloquent\Builder
38 | */
39 | public function query($query)
40 | {
41 | $query->where('id', lit_user()->id);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/User/UserController.php:
--------------------------------------------------------------------------------
1 | id == $id;
30 | }
31 |
32 | if ($operation == 'delete' && $user->id == $id) {
33 | return false;
34 | }
35 |
36 | return $user->can("{$operation} lit-users");
37 | }
38 |
39 | /**
40 | * Initial query.
41 | *
42 | * @return \Illuminate\Database\Eloquent\Builder
43 | */
44 | public function query($query)
45 | {
46 | //
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lit/app/Http/Controllers/WelcomeController.php:
--------------------------------------------------------------------------------
1 | htmlTitle(ucfirst(__lit('base.hello')))->view('lit::welcome');
20 |
21 | return $page;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lit/app/Kernel.php:
--------------------------------------------------------------------------------
1 | loadRepeatablesFrom(__DIR__.'/Repeatables');
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lit/app/Models/User.php:
--------------------------------------------------------------------------------
1 | 'datetime',
57 | ];
58 |
59 | /**
60 | * Determines if the user has the admin role.
61 | *
62 | * @return bool
63 | */
64 | public function getIsAdminAttribute()
65 | {
66 | return $this->hasRole('admin');
67 | }
68 |
69 | /**
70 | * Send password reset notification.
71 | *
72 | * @param string $token
73 | * @return void
74 | */
75 | public function sendPasswordResetNotification($token)
76 | {
77 | $link = route('lit.password.reset', $token);
78 |
79 | $link .= '?email='.urlencode($this->email);
80 |
81 | $this->notify(new ResetPasswordNotification($link));
82 | }
83 |
84 | /**
85 | * Has role admin scope.
86 | *
87 | * @param Builder $query
88 | * @return Builder $query
89 | */
90 | public function scopeAdmin($query)
91 | {
92 | $query->role('admin');
93 | }
94 |
95 | /**
96 | * Has role user scope.
97 | *
98 | * @param Builder $query
99 | * @return Builder $query
100 | */
101 | public function scopeUser($query)
102 | {
103 | return $query->role('user');
104 | }
105 |
106 | /**
107 | * Ordered Roles by permission count.
108 | *
109 | * @return MorphToMany
110 | */
111 | public function ordered_roles()
112 | {
113 | return $this->roles()
114 | ->withCount('permissions')
115 | ->orderByDesc('permissions_count');
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/lit/app/Providers/LitstackServiceProvider.php:
--------------------------------------------------------------------------------
1 | loadViewsFrom(lit_resource_path('views'), 'lit');
20 |
21 | View::composer('litstack::auth.login', LoginComposer::class);
22 |
23 | Route::register('app', function ($collection) {
24 | $collection->route('Home', 'home', function () {
25 | return '/home';
26 | });
27 |
28 | $collection->route('Datapolicy', 'datapolicy', function () {
29 | return '/datapolicy';
30 | });
31 |
32 | $collection->route('Imprint', 'imprint', function () {
33 | return '/imprint';
34 | });
35 |
36 | $collection->group('Articles', 'articles', function ($group) {
37 | $articles = [
38 | [
39 | 'title' => 'Foo',
40 | 'id' => 1,
41 | ],
42 | [
43 | 'title' => 'Bar',
44 | 'id' => 2,
45 | ],
46 | ];
47 |
48 | foreach ($articles as $article) {
49 | $group->route($article['title'], $article['id'], function () use ($article) {
50 | return "/articles/{$article['id']}";
51 | });
52 | }
53 | });
54 | });
55 | }
56 |
57 | /**
58 | * Register any application services.
59 | *
60 | * @return void
61 | */
62 | public function register()
63 | {
64 | //
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/lit/app/Providers/LivewireServiceProvider.php:
--------------------------------------------------------------------------------
1 | loadLivewireComponentsFrom(
20 | 'Lit\\Http\\Livewire',
21 | base_path('lit/app/Http/Livewire'),
22 | 'lit'
23 | );
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/lit/app/Providers/LocalizationServiceProvider.php:
--------------------------------------------------------------------------------
1 | addPaths();
30 | }
31 |
32 | /**
33 | * Add localization paths.
34 | *
35 | * @return void
36 | */
37 | protected function addPaths()
38 | {
39 | foreach ($this->paths() as $path) {
40 | Lang::addPath($path);
41 | }
42 | }
43 |
44 | /**
45 | * Register any application services.
46 | *
47 | * @return void
48 | */
49 | public function register()
50 | {
51 | //
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lit/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | mapWebRoutes();
18 | }
19 |
20 | /**
21 | * Define the "web" routes for the litstack application.
22 | *
23 | * These routes all require the "lit" guard and have the prefix set in the
24 | * config under "lit.route_prefix".
25 | *
26 | * @return void
27 | */
28 | protected function mapWebRoutes()
29 | {
30 | Route::group(lit_base_path('routes/web.php'));
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lit/app/Repeatables/ImageRepeatable.php:
--------------------------------------------------------------------------------
1 | image('Image')->src('{image.url}');
34 | }
35 |
36 | /**
37 | * Build the repeatable form.
38 | *
39 | * @param RepeatableForm $form
40 | * @return void
41 | */
42 | public function form(RepeatableForm $form): void
43 | {
44 | $form->image('image')->maxFiles(1);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lit/app/Repeatables/ImageTextRepeatable.php:
--------------------------------------------------------------------------------
1 | col('{text}')->stripHtml()->maxChars(50);
34 | }
35 |
36 | /**
37 | * Build the repeatable form.
38 | *
39 | * @param RepeatableForm $form
40 | * @return void
41 | */
42 | public function form(RepeatableForm $form): void
43 | {
44 | $form->wysiwyg('text')->translatable(false);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lit/resources/js/app.js:
--------------------------------------------------------------------------------
1 | import Litstack from 'litstack';
2 |
3 | require('./service/component.service');
4 |
5 | const store = {
6 | // Add store modules here.
7 | };
8 |
9 | new Litstack({
10 | store,
11 | });
12 |
--------------------------------------------------------------------------------
/lit/resources/js/components/Example.vue:
--------------------------------------------------------------------------------
1 |
2 | Hello World!
3 |
4 |
5 |
10 |
--------------------------------------------------------------------------------
/lit/resources/js/components/OrderPaymentInfo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Subtotal |
8 |
9 | {{ model.products_count }}
10 | {{ model.products_count == 1 ? "Products" : "Products" }}
11 | |
12 |
13 | {{ model.readable_subtotal }}
14 | |
15 |
16 |
17 |
18 | Shipping |
19 | |
20 |
21 | {{ model.readable_shipping_price }}
22 | |
23 |
24 |
25 |
26 | |
27 | |
28 |
29 | Total
30 |
31 | {{ model.readable_amount }}
32 |
33 | |
34 |
35 |
36 |
37 |
38 |
39 | Paid by customer
40 |
41 | {{
42 | model.state == "successfull"
43 | ? model.readable_amount
44 | : "0,00 €"
45 | }}
46 |
47 |
48 |
49 |
50 |
51 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/lit/resources/js/service/component.service.js:
--------------------------------------------------------------------------------
1 | import kebabCase from 'lodash/kebabCase';
2 |
3 | /**
4 | * Automatic Global Registration of Base Components.
5 | * https://vuejs.org/v2/guide/components-registration.html#Automatic-Global-Registration-of-Base-Components
6 | */
7 |
8 | const requireComponent = require.context(
9 | // The relative path of the components folder
10 | '../components',
11 | // Whether or not to look in subfolders
12 | true,
13 | // The regular expression used to match base component filenames
14 | /[A-Z]\w+\.(vue)$/
15 | );
16 |
17 | requireComponent.keys().forEach(fileName => {
18 | // Get component config
19 | const componentConfig = requireComponent(fileName);
20 |
21 | // Get PascalCase name of component
22 | const componentName = kebabCase(
23 | // Gets the file name regardless of folder depth
24 | fileName
25 | .split('/')
26 | .pop()
27 | .replace(/\.\w+$/, '')
28 | );
29 |
30 | // Register component globally
31 | Vue.component(componentName, componentConfig.default || componentConfig);
32 | });
33 |
--------------------------------------------------------------------------------
/lit/resources/lang/de/models.php:
--------------------------------------------------------------------------------
1 | 'Produkte',
5 | 'product' => 'Produkt',
6 | ];
7 |
--------------------------------------------------------------------------------
/lit/resources/lang/de/permissions.php:
--------------------------------------------------------------------------------
1 | 'Seiten',
18 | 'settings' => 'Einstellungen',
19 | ];
20 |
--------------------------------------------------------------------------------
/lit/resources/lang/en/models.php:
--------------------------------------------------------------------------------
1 | 'Products',
5 | 'product' => 'Product',
6 | ];
7 |
--------------------------------------------------------------------------------
/lit/resources/lang/en/permissions.php:
--------------------------------------------------------------------------------
1 | 'Pages',
18 | 'settings' => 'Settings',
19 | ];
20 |
--------------------------------------------------------------------------------
/lit/resources/sass/_variables.scss:
--------------------------------------------------------------------------------
1 | // Bootstrap sass variables can be overwritten here to create your own theme.
2 |
--------------------------------------------------------------------------------
/lit/resources/sass/app.scss:
--------------------------------------------------------------------------------
1 | @import '_variables';
2 | @import '@lit-sass/app';
3 |
--------------------------------------------------------------------------------
/lit/resources/views/booking/provider.blade.php:
--------------------------------------------------------------------------------
1 | Hello
--------------------------------------------------------------------------------
/lit/resources/views/columns/foo.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lit/resources/views/welcome.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
14 |
{!! __lit('base.user_hello', ['user' => ''.lit_user()->first_name.'']) !!}.
15 |
16 |
17 |
--------------------------------------------------------------------------------
/lit/routes/web.php:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | ./tests/Unit
10 |
11 |
12 | ./tests/Feature
13 |
14 |
15 |
16 |
17 | ./app
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Send Requests To Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/public/css/app.css:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/public/favicon.ico
--------------------------------------------------------------------------------
/public/images/vendor/cropperjs/src/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/public/images/vendor/cropperjs/src/bg.png
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class);
50 |
51 | $response = tap($kernel->handle(
52 | $request = Request::capture()
53 | ))->send();
54 |
55 | $kernel->terminate($request, $response);
56 |
--------------------------------------------------------------------------------
/public/js/app.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /**
2 | * @license
3 | * Lodash
4 | * Copyright OpenJS Foundation and other contributors
5 | * Released under MIT license
6 | * Based on Underscore.js 1.8.3
7 | * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
8 | */
9 |
--------------------------------------------------------------------------------
/public/js/login.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | let email = document.getElementById("email");
3 | let password = document.getElementById("password");
4 |
5 | function typeWriter(el, text, callback, i = 0) {
6 | let speed = 30;
7 | if (i < text.length) {
8 | el.value += text.charAt(i);
9 | i++;
10 | setTimeout(() => {
11 | typeWriter(el, text, callback, i);
12 | }, speed);
13 | } else {
14 | if (callback) {
15 | callback();
16 | }
17 | }
18 | }
19 |
20 | typeWriter(email, "demo@admin.com", () => {
21 | typeWriter(password, "secret");
22 | });
23 | })();
24 |
--------------------------------------------------------------------------------
/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/lit/js/app.js": "/lit/js/app.js",
3 | "/js/app.js": "/js/app.js",
4 | "/lit/css/app.css": "/lit/css/app.css",
5 | "/css/app.css": "/css/app.css"
6 | }
7 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/resources/css/app.css
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 | require('./bootstrap');
2 |
--------------------------------------------------------------------------------
/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | window._ = require('lodash');
2 |
3 | /**
4 | * We'll load the axios HTTP library which allows us to easily issue requests
5 | * to our Laravel back-end. This library automatically handles sending the
6 | * CSRF token as a header based on the value of the "XSRF" token cookie.
7 | */
8 |
9 | window.axios = require('axios');
10 |
11 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
12 |
13 | /**
14 | * Echo exposes an expressive API for subscribing to channels and listening
15 | * for events that are broadcast by Laravel. Echo and event broadcasting
16 | * allows your team to easily build robust real-time web applications.
17 | */
18 |
19 | // import Echo from 'laravel-echo';
20 |
21 | // window.Pusher = require('pusher-js');
22 |
23 | // window.Echo = new Echo({
24 | // broadcaster: 'pusher',
25 | // key: process.env.MIX_PUSHER_APP_KEY,
26 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER,
27 | // forceTLS: true
28 | // });
29 |
--------------------------------------------------------------------------------
/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset!',
17 | 'sent' => 'We have emailed your password reset link!',
18 | 'throttled' => 'Please wait before retrying.',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that email address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | get('/user', function (Request $request) {
18 | return $request->user();
19 | });
20 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/routes/web.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/clockwork/.gitignore:
--------------------------------------------------------------------------------
1 | *.json
2 | *.json.gz
3 | index
4 |
--------------------------------------------------------------------------------
/storage/dump/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/dump/.DS_Store
--------------------------------------------------------------------------------
/storage/dump/home/header_image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/dump/home/header_image.jpg
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | compiled.php
2 | config.php
3 | down
4 | events.scanned.php
5 | maintenance.php
6 | routes.php
7 | routes.scanned.php
8 | schedule-*
9 | services.json
10 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/media-library/temp/0dYxg84BGBmEYHo1LBiHAEvcQJcs4TZT/fRjckvrSzBXiT94cj1PlT2HqbPy3CziB.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/0dYxg84BGBmEYHo1LBiHAEvcQJcs4TZT/fRjckvrSzBXiT94cj1PlT2HqbPy3CziB.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-lg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-lg.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-md.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-md.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-sm.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/600x600-sm.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/B4TTFLjGDNCK1Z5TD30XUUZOUFqEuDsU.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/B4TTFLjGDNCK1Z5TD30XUUZOUFqEuDsU.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/KQIs9tEauE104IJFpHSMuSnFLZL7ng43xl.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/9cVRO2BCRpfBXb0el910gEnKuKRWzUvU/KQIs9tEauE104IJFpHSMuSnFLZL7ng43xl.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/ACLV3HZc5vAw1Xnb0mXV1Hie2p8l2R76/uHuzxyXCFAWalnOX127IhLJ72N6PHO8w.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/ACLV3HZc5vAw1Xnb0mXV1Hie2p8l2R76/uHuzxyXCFAWalnOX127IhLJ72N6PHO8w.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/600x600-md.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/600x600-md.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/600x600-sm.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/600x600-sm.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/cKh5MsSSzSjArsUOrwqnZCyy0TaGJiOt.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/EPEpjcUFWu4TJjd2185t18qh4uLxlLfA/cKh5MsSSzSjArsUOrwqnZCyy0TaGJiOt.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-lg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-lg.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-md.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-md.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-sm.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/600x600-sm.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/OdVHtRVQ7gyg1yNYdTqdyNEqCM7sXXKFxl.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/OdVHtRVQ7gyg1yNYdTqdyNEqCM7sXXKFxl.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/r88OkMglq29QklVHeEZ0aUh4rOmGFAyi.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/GaecGcP5RkEsF1FMrGpNdjnb32LXqmiN/r88OkMglq29QklVHeEZ0aUh4rOmGFAyi.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-lg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-lg.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-md.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-md.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-sm.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/600x600-sm.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/PlsILfsZ8e6LpDbjdOGe2IBVSM1rxBRNxl.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/PlsILfsZ8e6LpDbjdOGe2IBVSM1rxBRNxl.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/ldKHyG4nNccEkGu6eUFASIUYjinY4WLO.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/H5cbFRBhHRDXRfciQCuuw19pPVqTzLh7/ldKHyG4nNccEkGu6eUFASIUYjinY4WLO.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-lg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-lg.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-md.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-md.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-sm.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/600x600-sm.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/QPB9rJquZXqp8EvN5jg3XcWvd0J7COAg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/cqTPqu4tDRNdMe32PbaTbSFqa9JClxi5/QPB9rJquZXqp8EvN5jg3XcWvd0J7COAg.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/nmglrVtCrVkaw6himmTpzzQ6OS1UxuvE/W4jZlw5rFPeFhpoRARKZoDiAlVXAKsGo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/nmglrVtCrVkaw6himmTpzzQ6OS1UxuvE/W4jZlw5rFPeFhpoRARKZoDiAlVXAKsGo.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/nmglrVtCrVkaw6himmTpzzQ6OS1UxuvE/xzCf9jBZldCSm0WsTXtCYIwitCaNbDnhpreview.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/nmglrVtCrVkaw6himmTpzzQ6OS1UxuvE/xzCf9jBZldCSm0WsTXtCYIwitCaNbDnhpreview.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/pbWcAanl2IEFp5f1IngumKclIQiFZbl5/sCo4dY4HtPZTaJbtjQXfuU2kwV4Zcmk9.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/pbWcAanl2IEFp5f1IngumKclIQiFZbl5/sCo4dY4HtPZTaJbtjQXfuU2kwV4Zcmk9.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-lg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-lg.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-md.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-md.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-sm.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-sm.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-xl.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/600x600-xl.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/SQ7sTs1I8FQcNsRWSCh3U9kaglY4Uqjd.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/r3oDKY4lsB2gek8XHJIHawrOTDhD5LtR/SQ7sTs1I8FQcNsRWSCh3U9kaglY4Uqjd.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/ulcIdXf1N701DOi1ZXH8akGRdtDOdF49/gRDPoQeudVFKEwnlab6oihbzpauShJQV.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/ulcIdXf1N701DOi1ZXH8akGRdtDOdF49/gRDPoQeudVFKEwnlab6oihbzpauShJQV.jpeg
--------------------------------------------------------------------------------
/storage/media-library/temp/v2hNKlpXkXqseh9sor0olNo66UzaBT0N/600x600-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/v2hNKlpXkXqseh9sor0olNo66UzaBT0N/600x600-preview.jpg
--------------------------------------------------------------------------------
/storage/media-library/temp/v2hNKlpXkXqseh9sor0olNo66UzaBT0N/ehasqxk8xcSUrr1tQzsxf3vzRc1rkcVw.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litstack/demo/58c9746e4407269516fdd9f3322f596fc809d58a/storage/media-library/temp/v2hNKlpXkXqseh9sor0olNo66UzaBT0N/ehasqxk8xcSUrr1tQzsxf3vzRc1rkcVw.jpeg
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 |
2 | require('litstack/resources/js/mix.js');
3 | const mix = require('laravel-mix');
4 |
5 | /*
6 | |--------------------------------------------------------------------------
7 | | Mix Asset Management
8 | |--------------------------------------------------------------------------
9 | |
10 | | Mix provides a clean, fluent API for defining some Webpack build steps
11 | | for your Laravel applications. By default, we are compiling the CSS
12 | | file for the application as well as bundling up all the JS files.
13 | |
14 | */
15 |
16 | mix.js('resources/js/app.js', 'public/js')
17 | .postCss('resources/css/app.css', 'public/css', [
18 | //
19 | ]);
20 |
--------------------------------------------------------------------------------