17 | */
18 | public function definition()
19 | {
20 | return [
21 | 'name' => fake()->name(),
22 | 'email' => fake()->safeEmail(),
23 | 'email_verified_at' => now(),
24 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
25 | 'remember_token' => Str::random(10),
26 | ];
27 | }
28 |
29 | /**
30 | * Indicate that the model's email address should be unverified.
31 | *
32 | * @return static
33 | */
34 | public function unverified()
35 | {
36 | return $this->state(function (array $attributes) {
37 | return [
38 | 'email_verified_at' => null,
39 | ];
40 | });
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/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->string('password');
22 | $table->rememberToken();
23 | $table->timestamps();
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/2019_12_14_000001_create_personal_access_tokens_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->morphs('tokenable');
19 | $table->string('name');
20 | $table->string('token', 64)->unique();
21 | $table->text('abilities')->nullable();
22 | $table->timestamp('last_used_at')->nullable();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('personal_access_tokens');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2022_06_29_150128_create_todo_items_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('todo', 2000);
19 | $table->boolean('completed');
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('todo_items');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2022_06_29_151956_create_continents_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name', 25);
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('continents');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2022_06_29_152007_create_countries_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name', 25);
19 | $table->foreignId('continent_id')->references('id')->on('continents');
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('countries');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2022_06_30_001515_create_products_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('image', 2000);
19 | $table->string('title', 2000);
20 | $table->longText('description');
21 | $table->decimal('price');
22 | $table->timestamps();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('products');
34 | }
35 | };
36 |
--------------------------------------------------------------------------------
/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | create();
22 | $continents = [
23 | ['id' => 1, 'name' => 'Europe',],
24 | ['id' => 2, 'name' => 'Asia',],
25 | ['id' => 3, 'name' => 'Africa',],
26 | ['id' => 4, 'name' => 'South America',],
27 | ['id' => 5, 'name' => 'North America',],
28 | ];
29 | foreach ($continents as $continent) {
30 | \App\Models\Continent::factory()->create($continent)
31 | ->each(function ($c) {
32 | $c->countries()->saveMany(Country::factory(10)->make());
33 | });;
34 | }
35 |
36 | Product::factory(100)->create();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'password' => 'The provided password is incorrect.',
18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
19 |
20 | ];
21 |
--------------------------------------------------------------------------------
/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lang/en/validation.php:
--------------------------------------------------------------------------------
1 | 'The :attribute must be accepted.',
17 | 'accepted_if' => 'The :attribute must be accepted when :other is :value.',
18 | 'active_url' => 'The :attribute is not a valid URL.',
19 | 'after' => 'The :attribute must be a date after :date.',
20 | 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
21 | 'alpha' => 'The :attribute must only contain letters.',
22 | 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
23 | 'alpha_num' => 'The :attribute must only contain letters and numbers.',
24 | 'array' => 'The :attribute must be an array.',
25 | 'before' => 'The :attribute must be a date before :date.',
26 | 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
27 | 'between' => [
28 | 'array' => 'The :attribute must have between :min and :max items.',
29 | 'file' => 'The :attribute must be between :min and :max kilobytes.',
30 | 'numeric' => 'The :attribute must be between :min and :max.',
31 | 'string' => 'The :attribute must be between :min and :max characters.',
32 | ],
33 | 'boolean' => 'The :attribute field must be true or false.',
34 | 'confirmed' => 'The :attribute confirmation does not match.',
35 | 'current_password' => 'The password is incorrect.',
36 | 'date' => 'The :attribute is not a valid date.',
37 | 'date_equals' => 'The :attribute must be a date equal to :date.',
38 | 'date_format' => 'The :attribute does not match the format :format.',
39 | 'declined' => 'The :attribute must be declined.',
40 | 'declined_if' => 'The :attribute must be declined when :other is :value.',
41 | 'different' => 'The :attribute and :other must be different.',
42 | 'digits' => 'The :attribute must be :digits digits.',
43 | 'digits_between' => 'The :attribute must be between :min and :max digits.',
44 | 'dimensions' => 'The :attribute has invalid image dimensions.',
45 | 'distinct' => 'The :attribute field has a duplicate value.',
46 | 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.',
47 | 'email' => 'The :attribute must be a valid email address.',
48 | 'ends_with' => 'The :attribute must end with one of the following: :values.',
49 | 'enum' => 'The selected :attribute is invalid.',
50 | 'exists' => 'The selected :attribute is invalid.',
51 | 'file' => 'The :attribute must be a file.',
52 | 'filled' => 'The :attribute field must have a value.',
53 | 'gt' => [
54 | 'array' => 'The :attribute must have more than :value items.',
55 | 'file' => 'The :attribute must be greater than :value kilobytes.',
56 | 'numeric' => 'The :attribute must be greater than :value.',
57 | 'string' => 'The :attribute must be greater than :value characters.',
58 | ],
59 | 'gte' => [
60 | 'array' => 'The :attribute must have :value items or more.',
61 | 'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
62 | 'numeric' => 'The :attribute must be greater than or equal to :value.',
63 | 'string' => 'The :attribute must be greater than or equal to :value characters.',
64 | ],
65 | 'image' => 'The :attribute must be an image.',
66 | 'in' => 'The selected :attribute is invalid.',
67 | 'in_array' => 'The :attribute field does not exist in :other.',
68 | 'integer' => 'The :attribute must be an integer.',
69 | 'ip' => 'The :attribute must be a valid IP address.',
70 | 'ipv4' => 'The :attribute must be a valid IPv4 address.',
71 | 'ipv6' => 'The :attribute must be a valid IPv6 address.',
72 | 'json' => 'The :attribute must be a valid JSON string.',
73 | 'lt' => [
74 | 'array' => 'The :attribute must have less than :value items.',
75 | 'file' => 'The :attribute must be less than :value kilobytes.',
76 | 'numeric' => 'The :attribute must be less than :value.',
77 | 'string' => 'The :attribute must be less than :value characters.',
78 | ],
79 | 'lte' => [
80 | 'array' => 'The :attribute must not have more than :value items.',
81 | 'file' => 'The :attribute must be less than or equal to :value kilobytes.',
82 | 'numeric' => 'The :attribute must be less than or equal to :value.',
83 | 'string' => 'The :attribute must be less than or equal to :value characters.',
84 | ],
85 | 'mac_address' => 'The :attribute must be a valid MAC address.',
86 | 'max' => [
87 | 'array' => 'The :attribute must not have more than :max items.',
88 | 'file' => 'The :attribute must not be greater than :max kilobytes.',
89 | 'numeric' => 'The :attribute must not be greater than :max.',
90 | 'string' => 'The :attribute must not be greater than :max characters.',
91 | ],
92 | 'mimes' => 'The :attribute must be a file of type: :values.',
93 | 'mimetypes' => 'The :attribute must be a file of type: :values.',
94 | 'min' => [
95 | 'array' => 'The :attribute must have at least :min items.',
96 | 'file' => 'The :attribute must be at least :min kilobytes.',
97 | 'numeric' => 'The :attribute must be at least :min.',
98 | 'string' => 'The :attribute must be at least :min characters.',
99 | ],
100 | 'multiple_of' => 'The :attribute must be a multiple of :value.',
101 | 'not_in' => 'The selected :attribute is invalid.',
102 | 'not_regex' => 'The :attribute format is invalid.',
103 | 'numeric' => 'The :attribute must be a number.',
104 | 'password' => [
105 | 'letters' => 'The :attribute must contain at least one letter.',
106 | 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.',
107 | 'numbers' => 'The :attribute must contain at least one number.',
108 | 'symbols' => 'The :attribute must contain at least one symbol.',
109 | 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
110 | ],
111 | 'present' => 'The :attribute field must be present.',
112 | 'prohibited' => 'The :attribute field is prohibited.',
113 | 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
114 | 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
115 | 'prohibits' => 'The :attribute field prohibits :other from being present.',
116 | 'regex' => 'The :attribute format is invalid.',
117 | 'required' => 'The :attribute field is required.',
118 | 'required_array_keys' => 'The :attribute field must contain entries for: :values.',
119 | 'required_if' => 'The :attribute field is required when :other is :value.',
120 | 'required_unless' => 'The :attribute field is required unless :other is in :values.',
121 | 'required_with' => 'The :attribute field is required when :values is present.',
122 | 'required_with_all' => 'The :attribute field is required when :values are present.',
123 | 'required_without' => 'The :attribute field is required when :values is not present.',
124 | 'required_without_all' => 'The :attribute field is required when none of :values are present.',
125 | 'same' => 'The :attribute and :other must match.',
126 | 'size' => [
127 | 'array' => 'The :attribute must contain :size items.',
128 | 'file' => 'The :attribute must be :size kilobytes.',
129 | 'numeric' => 'The :attribute must be :size.',
130 | 'string' => 'The :attribute must be :size characters.',
131 | ],
132 | 'starts_with' => 'The :attribute must start with one of the following: :values.',
133 | 'string' => 'The :attribute must be a string.',
134 | 'timezone' => 'The :attribute must be a valid timezone.',
135 | 'unique' => 'The :attribute has already been taken.',
136 | 'uploaded' => 'The :attribute failed to upload.',
137 | 'url' => 'The :attribute must be a valid URL.',
138 | 'uuid' => 'The :attribute must be a valid UUID.',
139 |
140 | /*
141 | |--------------------------------------------------------------------------
142 | | Custom Validation Language Lines
143 | |--------------------------------------------------------------------------
144 | |
145 | | Here you may specify custom validation messages for attributes using the
146 | | convention "attribute.rule" to name the lines. This makes it quick to
147 | | specify a specific custom language line for a given attribute rule.
148 | |
149 | */
150 |
151 | 'custom' => [
152 | 'attribute-name' => [
153 | 'rule-name' => 'custom-message',
154 | ],
155 | ],
156 |
157 | /*
158 | |--------------------------------------------------------------------------
159 | | Custom Validation Attributes
160 | |--------------------------------------------------------------------------
161 | |
162 | | The following language lines are used to swap our attribute placeholder
163 | | with something more reader friendly such as "E-Mail Address" instead
164 | | of "email". This simply helps us make our message more expressive.
165 | |
166 | */
167 |
168 | 'attributes' => [],
169 |
170 | ];
171 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "vite",
5 | "build": "vite build"
6 | },
7 | "devDependencies": {
8 | "@tailwindcss/forms": "^0.5.2",
9 | "autoprefixer": "^10.4.7",
10 | "axios": "^0.25",
11 | "laravel-vite-plugin": "^0.2.1",
12 | "lodash": "^4.17.19",
13 | "postcss": "^8.4.14",
14 | "tailwindcss": "^3.1.4",
15 | "vite": "^2.9.11"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/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/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecodeholic/livewire-projects/c3ff87d08fd5a4131e3bae823bfd47f1b1b10d2d/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class);
50 |
51 | $response = $kernel->handle(
52 | $request = Request::capture()
53 | )->send();
54 |
55 | $kernel->terminate($request, $response);
56 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/public/vendor/livewire/manifest.json:
--------------------------------------------------------------------------------
1 | {"/livewire.js":"/livewire.js?id=c69d0f2801c01fcf8166"}
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 | import './bootstrap';
2 |
--------------------------------------------------------------------------------
/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | import _ from 'lodash';
2 | window._ = _;
3 |
4 | /**
5 | * We'll load the axios HTTP library which allows us to easily issue requests
6 | * to our Laravel back-end. This library automatically handles sending the
7 | * CSRF token as a header based on the value of the "XSRF" token cookie.
8 | */
9 |
10 | import axios from 'axios';
11 | window.axios = axios;
12 |
13 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
14 |
15 | /**
16 | * Echo exposes an expressive API for subscribing to channels and listening
17 | * for events that are broadcast by Laravel. Echo and event broadcasting
18 | * allows your team to easily build robust real-time web applications.
19 | */
20 |
21 | // import Echo from 'laravel-echo';
22 |
23 | // import Pusher from 'pusher-js';
24 | // window.Pusher = Pusher;
25 |
26 | // window.Echo = new Echo({
27 | // broadcaster: 'pusher',
28 | // key: import.meta.env.VITE_PUSHER_APP_KEY,
29 | // wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_CLUSTER}.pusher.com`,
30 | // wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
31 | // wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
32 | // forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
33 | // enabledTransports: ['ws', 'wss'],
34 | // });
35 |
--------------------------------------------------------------------------------
/resources/views/calculator.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/layouts/app.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Laravel
8 |
9 |
10 |
11 |
12 | @vite(['resources/css/app.css', 'resources/js/app.js'])
13 |
14 |
19 |
20 |
21 |
30 |
31 | {{ $slot }}
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/resources/views/livewire/calculator.blade.php:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/resources/views/livewire/cascading-dropdown.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 | Loading...
11 |
12 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/views/livewire/counter.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ $count }}
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/views/livewire/image-upload.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
21 | @foreach($images as $image)
22 |

23 | @endforeach
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/resources/views/livewire/products-search.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | ID |
9 | Image |
10 | Title |
11 | Price |
12 |
13 |
14 |
15 | @foreach($products as $product)
16 |
17 | {{$product->id}} |
18 |  |
19 | {{$product->title}} |
20 | {{$product->price}} |
21 |
22 | @endforeach
23 |
24 |
25 | {{$products->links()}}
26 |
27 |
--------------------------------------------------------------------------------
/resources/views/livewire/registration-form.blade.php:
--------------------------------------------------------------------------------
1 |
62 |
--------------------------------------------------------------------------------
/resources/views/livewire/todo-list.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 | @if (count($todos) == 0)
13 |
There are no todos
14 | @endif
15 | @foreach($todos as $index => $todo)
16 |
17 |
completed ? ' checked' : ''}} wire:change="toggleTodo({{$todo->id}})">
18 |
19 |
26 |
27 | @endforeach
28 |
29 |
30 |
--------------------------------------------------------------------------------
/resources/views/vendor/livewire/simple-tailwind.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if ($paginator->hasPages())
3 |
42 | @endif
43 |
--------------------------------------------------------------------------------
/resources/views/vendor/livewire/tailwind.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if ($paginator->hasPages())
3 | @php(isset($this->numberOfPaginatorsRendered[$paginator->getPageName()]) ? $this->numberOfPaginatorsRendered[$paginator->getPageName()]++ : $this->numberOfPaginatorsRendered[$paginator->getPageName()] = 1)
4 |
5 |
115 | @endif
116 |
117 |
--------------------------------------------------------------------------------
/resources/views/welcome.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/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 | name('counter');
19 | Route::get('/calculator', \App\Http\Livewire\Calculator::class)->name('calculator');
20 | Route::get('/todo-list', \App\Http\Livewire\TodoList::class)->name('todo-list');
21 | Route::get('/cascading-dropdown', \App\Http\Livewire\CascadingDropdown::class)->name('cascading-dropdown');
22 | Route::get('/products', \App\Http\Livewire\ProductsSearch::class)->name('products');
23 | Route::get('/image-upload', \App\Http\Livewire\ImageUpload::class)->name('image-upload');
24 | Route::get('/register', \App\Http\Livewire\RegisterForm::class)->name('register');
25 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | content: [
3 | "./resources/**/*.blade.php",
4 | "./resources/**/*.js",
5 | "./resources/**/*.vue",
6 | ],
7 | theme: {
8 | extend: {},
9 | },
10 | plugins: [
11 | require('@tailwindcss/forms'),
12 | ],
13 | }
14 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import laravel from 'laravel-vite-plugin';
3 |
4 | export default defineConfig({
5 | plugins: [
6 | laravel([
7 | 'resources/css/app.css',
8 | 'resources/js/app.js',
9 | ]),
10 | ],
11 | });
12 |
--------------------------------------------------------------------------------