This commit is contained in:
2023-11-19 20:58:40 +01:00
parent b3fdd071a2
commit d70be43c5d
48 changed files with 2864 additions and 25 deletions

View File

@@ -0,0 +1,69 @@
<?php
namespace App\Http\Controllers;
use App\Models\CountryCode;
use Illuminate\Http\Request;
class CountryCodeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return CountryCode::all();
}
public function active()
{
return CountryCode::active("Y");
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Http\Response
*/
public function show(CountryCode $countryCode)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Http\Response
*/
public function update(Request $request, CountryCode $countryCode)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Http\Response
*/
public function destroy(CountryCode $countryCode)
{
//
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreCountryCodeRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
//
];
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateCountryCodeRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
//
];
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class CountryCode extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'c_ikea_country_code';
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'currency_code';
/**
* Indicates if the model's ID is auto-incrementing.
*
* @var bool
*/
public $incrementing = false;
use HasFactory;
protected function active(String $status)
{
return $this->where('status', $status)->get();
}
}

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Policies;
use App\Models\CountryCode;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CountryCodePolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
//
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, CountryCode $countryCode)
{
//
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
//
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, CountryCode $countryCode)
{
//
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, CountryCode $countryCode)
{
//
}
/**
* Determine whether the user can restore the model.
*
* @param \App\Models\User $user
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, CountryCode $countryCode)
{
//
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\CountryCode $countryCode
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, CountryCode $countryCode)
{
//
}
}

View File

@@ -10,6 +10,7 @@
"guzzlehttp/guzzle": "^7.2",
"hisorange/browser-detect": "^4.5",
"inertiajs/inertia-laravel": "^0.5.2",
"laravel-json-api/laravel": "^2.6",
"laravel/framework": "^9.19",
"laravel/jetstream": "^2.9",
"laravel/sanctum": "^2.14.1",

554
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "efd75a557d90e076b495182d7ac040aa",
"content-hash": "a0740cf70dd9814ae6b1c55e419dacf2",
"packages": [
{
"name": "bacon/bacon-qr-code",
@@ -1650,6 +1650,556 @@
],
"time": "2020-06-13T08:05:20+00:00"
},
{
"name": "laravel-json-api/core",
"version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/core.git",
"reference": "eaa669845a7874ba08e9b5a9116c01bbf80877d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/core/zipball/eaa669845a7874ba08e9b5a9116c01bbf80877d2",
"reference": "eaa669845a7874ba08e9b5a9116c01bbf80877d2",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/contracts": "^8.0|^9.0",
"illuminate/http": "^8.0|^9.0",
"illuminate/support": "^8.0|^9.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Core\\": "src/Core",
"LaravelJsonApi\\Contracts\\": "src/Contracts"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "Contracts and support classes for Laravel JSON:API packages.",
"homepage": "https://github.com/laravel-json-api/core",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/core/issues",
"source": "https://github.com/laravel-json-api/core/tree/v2.4.0"
},
"time": "2023-01-15T17:32:19+00:00"
},
{
"name": "laravel-json-api/eloquent",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/eloquent.git",
"reference": "04b78a299a85ffced866e18508a8f275bdf074bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/eloquent/zipball/04b78a299a85ffced866e18508a8f275bdf074bd",
"reference": "04b78a299a85ffced866e18508a8f275bdf074bd",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/database": "^8.0|^9.0",
"illuminate/support": "^8.0|^9.0",
"laravel-json-api/core": "^2.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"orchestra/testbench": "^6.23|^7.0",
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Eloquent\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "Serialize Eloquent models as JSON:API resources.",
"homepage": "https://github.com/laravel-json-api/eloquent",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/eloquent/issues",
"source": "https://github.com/laravel-json-api/eloquent/tree/v2.3.0"
},
"time": "2023-02-09T20:41:36+00:00"
},
{
"name": "laravel-json-api/encoder-neomerx",
"version": "v2.0.1",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/encoder-neomerx.git",
"reference": "183c0443b64b3258869fefa3d7da5c83335412e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/encoder-neomerx/zipball/183c0443b64b3258869fefa3d7da5c83335412e5",
"reference": "183c0443b64b3258869fefa3d7da5c83335412e5",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/contracts": "^8.0|^9.0",
"illuminate/support": "^8.0|^9.0",
"laravel-json-api/core": "^2.0",
"laravel-json-api/neomerx-json-api": "^5.0.1",
"php": "^7.4|^8.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "2.x-dev"
},
"laravel": {
"providers": [
"LaravelJsonApi\\Encoder\\Neomerx\\ServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Encoder\\Neomerx\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "Encode JSON:API resources using the neomerx/json-api package.",
"homepage": "https://github.com/laravel-json-api/encoder-neomerx",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/encoder-neomerx/issues",
"source": "https://github.com/laravel-json-api/encoder-neomerx/tree/v2.0.1"
},
"time": "2022-06-25T10:37:04+00:00"
},
{
"name": "laravel-json-api/exceptions",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/exceptions.git",
"reference": "ce76cdc546b7339e7a78ccec6ae7429de7aa1f26"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/exceptions/zipball/ce76cdc546b7339e7a78ccec6ae7429de7aa1f26",
"reference": "ce76cdc546b7339e7a78ccec6ae7429de7aa1f26",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/contracts": "^8.0|^9.0",
"illuminate/pipeline": "^8.0|^9.0",
"laravel-json-api/core": "^1.0|^2.0",
"laravel-json-api/validation": "^1.0|^2.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"laravel-json-api/testing": "^1.1",
"orchestra/testbench": "^6.23|^7.0",
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Exceptions\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "JSON:API exception parsing for Laravel applications.",
"homepage": "https://github.com/laravel-json-api/exceptions",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/exceptions/issues",
"source": "https://github.com/laravel-json-api/exceptions/tree/v1.1.1"
},
"time": "2022-09-14T18:43:08+00:00"
},
{
"name": "laravel-json-api/laravel",
"version": "v2.6.0",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/laravel.git",
"reference": "864676e9b7135ff8eab51f826e8b0e3a3e2a309a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/laravel/zipball/864676e9b7135ff8eab51f826e8b0e3a3e2a309a",
"reference": "864676e9b7135ff8eab51f826e8b0e3a3e2a309a",
"shasum": ""
},
"require": {
"ext-json": "*",
"laravel-json-api/core": "^2.4",
"laravel-json-api/eloquent": "^2.3",
"laravel-json-api/encoder-neomerx": "^2.0.1",
"laravel-json-api/exceptions": "^1.1.1",
"laravel-json-api/spec": "^1.2",
"laravel-json-api/validation": "^2.1.3",
"laravel/framework": "^8.76|^9.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"laravel-json-api/testing": "^1.1.2",
"orchestra/testbench": "^6.23|^7.0",
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "2.x-dev"
},
"laravel": {
"aliases": {
"JsonApi": "LaravelJsonApi\\Core\\Facades\\JsonApi",
"JsonApiRoute": "LaravelJsonApi\\Laravel\\Facades\\JsonApiRoute"
},
"providers": [
"LaravelJsonApi\\Laravel\\ServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Laravel\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "JSON:API for Laravel applications.",
"homepage": "https://github.com/laravel-json-api/laravel",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/laravel/issues",
"source": "https://github.com/laravel-json-api/laravel/tree/v2.6.0"
},
"time": "2023-02-09T20:48:38+00:00"
},
{
"name": "laravel-json-api/neomerx-json-api",
"version": "v5.0.2",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/neomerx-json-api.git",
"reference": "00841feae83ab95f4490c6f2086f02f298293381"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/neomerx-json-api/zipball/00841feae83ab95f4490c6f2086f02f298293381",
"reference": "00841feae83ab95f4490c6f2086f02f298293381",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^7.4|^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.17",
"mockery/mockery": "^1.4.4",
"phpmd/phpmd": "^2.11.1",
"phpunit/phpunit": "^9.5.10",
"scrutinizer/ocular": "^1.8",
"squizlabs/php_codesniffer": "^3.6.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "5.x-dev"
}
},
"autoload": {
"files": [
"src/I18n/format.php"
],
"psr-4": {
"Neomerx\\JsonApi\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "neomerx",
"email": "info@neomerx.com"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "Framework agnostic JSON API (jsonapi.org) implementation",
"homepage": "https://github.com/neomerx/json-api",
"keywords": [
"JSON-API",
"api",
"json",
"jsonapi",
"jsonapi.org",
"neomerx"
],
"support": {
"issues": "https://github.com/neomerx/json-api/issues",
"source": "https://github.com/laravel-json-api/neomerx-json-api/tree/v5.0.2"
},
"time": "2023-05-29T14:50:09+00:00"
},
{
"name": "laravel-json-api/spec",
"version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/spec.git",
"reference": "b159d1958c15124cbd257289a6da196b45a1573f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/spec/zipball/b159d1958c15124cbd257289a6da196b45a1573f",
"reference": "b159d1958c15124cbd257289a6da196b45a1573f",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/contracts": "^8.0|^9.0",
"illuminate/pipeline": "^8.0|^9.0",
"illuminate/support": "^8.0|^9.0",
"laravel-json-api/core": "^1.0|^2.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"orchestra/testbench": "^6.23|^7.0",
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "1.x-dev"
},
"laravel": {
"providers": [
"LaravelJsonApi\\Spec\\ServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Spec\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "Validate JSON documents for compliance with the JSON:API specification.",
"homepage": "https://github.com/laravel-json-api/spec",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/spec/issues",
"source": "https://github.com/laravel-json-api/spec/tree/v1.2.0"
},
"time": "2022-04-10T13:29:07+00:00"
},
{
"name": "laravel-json-api/validation",
"version": "v2.1.3",
"source": {
"type": "git",
"url": "https://github.com/laravel-json-api/validation.git",
"reference": "719ec255c8e0877df429eff99eaf4c8e35c03306"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel-json-api/validation/zipball/719ec255c8e0877df429eff99eaf4c8e35c03306",
"reference": "719ec255c8e0877df429eff99eaf4c8e35c03306",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/contracts": "^8.0|^9.0",
"illuminate/support": "^8.0|^9.0",
"laravel-json-api/core": "^2.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"orchestra/testbench": "^6.23|^7.0",
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "2.x-dev"
},
"laravel": {
"providers": [
"LaravelJsonApi\\Validation\\ServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LaravelJsonApi\\Validation\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Cloud Creativity Ltd",
"email": "info@cloudcreativity.co.uk"
},
{
"name": "Christopher Gammie",
"email": "contact@gammie.co.uk"
}
],
"description": "Laravel validation for JSON:API resources.",
"homepage": "https://github.com/laravel-json-api/validation",
"keywords": [
"JSON-API",
"jsonapi",
"jsonapi.org",
"laravel"
],
"support": {
"issues": "https://github.com/laravel-json-api/validation/issues",
"source": "https://github.com/laravel-json-api/validation/tree/v2.1.3"
},
"time": "2023-02-09T20:29:09+00:00"
},
{
"name": "laravel/fortify",
"version": "v1.13.0",
@@ -10461,5 +11011,5 @@
"php": "^8.0.2"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\CountryCode>
*/
class CountryCodeFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
return [
//
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class CountryCodeSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}

View File

@@ -89,5 +89,10 @@
"role `:name` has been deleted": "role `:name` has been deleted",
"user `:name` has been created": "user `:name` has been created",
"user `:name` has been deleted": "user `:name` has been deleted",
"tess": "tess"
"tess": "tess",
"firefox 120": "Firefox 120",
"mac 10.15": "Mac 10.15",
"are you want to try again": "are you want to try again",
"referenceerror: ccount is not defined": "ReferenceError: ccount is not defined",
"referenceerror: currency_code is not defined": "ReferenceError: currency_code is not defined"
}

2
package-lock.json generated
View File

@@ -1,5 +1,5 @@
{
"name": "laravel-inertia-vite",
"name": "ipc",
"lockfileVersion": 2,
"requires": true,
"packages": {

View File

@@ -22,9 +22,13 @@
},
"dependencies": {
"@vueform/multiselect": "^2.5.1",
"flowbite": "^2.1.1",
"flowbite-vue": "^0.1.0",
"laravel-echo": "^1.13.0",
"pusher-js": "^7.3.0",
"sweetalert2": "^11.4.23",
"vue-google-charts": "^1.1.0",
"vue-multiselect": "^3.0.0-beta.3",
"vuedraggable": "^4.1.0"
}
}

View File

@@ -0,0 +1,28 @@
<script setup>
import { GChart } from 'vue-google-charts';
const type = 'GeoChart';
const data = [
['Country', 'Popularity'],
['Germany', 200],
['United States', 300],
['Brazil', 400],
['Canada', 500],
['France', 600],
['RU', 700],
];
const options = {
width: 800,
height: 600,
};
</script>
<template>
<GChart :data="data"
:options="options"
type="GeoChart"
/>
</template>

View File

@@ -0,0 +1,107 @@
<script setup>
// import { defineComponent, h } from 'vue';
import { getCurrentInstance, ref, onMounted, onUnmounted, nextTick } from 'vue';
import Swal from 'sweetalert2';
import Multiselect from 'vue-multiselect';
import { GChart } from 'vue-google-charts';
import { FwbDropdown, FwbListGroup, FwbListGroupItem } from 'flowbite-vue';
import {
FwbNavbar,
FwbNavbarCollapse,
FwbNavbarLink,
FwbNavbarLogo,
} from 'flowbite-vue';
import axios from 'axios';
const type = 'GeoChart';
const ccountry = ref([]);
const ccountry_filter = ref([ [ 'Currency', 'Country'] ]);
const ccountry_list = ref(['TEST']);
const selected = ref(null);
const data = [
['Country', 'Popularity'],
['Germany', 200],
['France', 600],
['RU', 700],
];
const options = {
region: 150,
width: 700,
height: 500,
};
const chart_settings={
packages: ['geochart', 'map'],
mapsApiKey: "AIzaSyDnBGCOIEnYT03KNRm0bLJPMr6leyOpdtU",
};
const fetch = async () => {
try {
const response = await axios.get(route('ccountry.active'))
ccountry.value = response.data
ccountry_filter.value = ccountry.value.map((country) => [ country.currency_code, country.country_name ]);
// ccountry_list.value = ccountry.value.map((country) => country.country_name );
// console.log("TEST=",ccountry_filter.value, ccountry_list.value);
} catch (e) {
const response = await Swal.fire({
title: __('are you want to try again') + '?',
text: __(`${e}`),
icon: 'question',
showCancelButton: true,
showCloseButton: true,
})
response.isConfirmed && fetch()
}
}
onMounted(fetch);
</script>
<template>
<fwb-navbar>
<template #logo>
<fwb-navbar-logo alt="IKEA Price Craweler" image-url="/images/logo.svg" link="#">
IKEA Price Craweler
</fwb-navbar-logo>
</template>
<template #default="{isShowMenu}">
<fwb-navbar-collapse :is-show-menu="isShowMenu">
<fwb-navbar-link is-active link="#">
Home
</fwb-navbar-link>
<fwb-navbar-link link="#">
Services
</fwb-navbar-link>
<fwb-navbar-link link="#">
Pricing
</fwb-navbar-link>
<fwb-navbar-link link="#">
Contact
</fwb-navbar-link>
</fwb-navbar-collapse>
</template>
</fwb-navbar>
<GChart
:type="type"
:data="ccountry_filter"
:options="options"
:settings="chart_settings"
/>
<multiselect
v-model="selected"
:options="ccountry_list">
</multiselect>
</template>
<style src="vue-multiselect/dist/vue-multiselect.css"></style>

View File

@@ -1,23 +1,31 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title inertia>{{ config('app.name', 'Laravel') }}</title>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
<title inertia>{{ config('app.name', 'Laravel') }}</title>
<!-- Icons -->
<link rel="stylesheet" href="{{ url('/vendors/fontawesome/css/all.min.css') }}">
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
<!-- Icons -->
<link rel="stylesheet" href="{{ url('/vendors/fontawesome/css/all.min.css') }}">
<!-- Scripts -->
<style>
.gradient {
background: linear-gradient(90deg, #d53369 0%, #daae51 100%);
}
</style>
@routes
@vite('resources/js/app.js')
@inertiaHead
</head>
<body class="font-sans antialiased gradient">
@inertia
</body>
<!-- Scripts -->
@routes
@vite('resources/js/app.js')
@inertiaHead
</head>
<body class="font-sans antialiased">
@inertia
</body>
</html>

View File

View File

@@ -0,0 +1,10 @@
@props(['on'])
<div x-data="{ shown: false, timeout: null }"
x-init="@this.on('{{ $on }}', () => { clearTimeout(timeout); shown = true; timeout = setTimeout(() => { shown = false }, 2000); })"
x-show.transition.out.opacity.duration.1500ms="shown"
x-transition:leave.opacity.duration.1500ms
style="display: none;"
{{ $attributes->merge(['class' => 'text-sm text-gray-600']) }}>
{{ $slot->isEmpty() ? 'Saved.' : $slot }}
</div>

View File

@@ -0,0 +1,12 @@
<div {{ $attributes->merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>
<x-jet-section-title>
<x-slot name="title">{{ $title }}</x-slot>
<x-slot name="description">{{ $description }}</x-slot>
</x-jet-section-title>
<div class="mt-5 md:mt-0 md:col-span-2">
<div class="px-4 py-5 sm:p-6 bg-white shadow sm:rounded-lg">
{{ $content }}
</div>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<svg viewBox="0 0 317 48" fill="none" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
<path d="M74.09 30.04V13h-4.14v21H82.1v-3.96h-8.01zM95.379 19v1.77c-1.08-1.35-2.7-2.19-4.89-2.19-3.99 0-7.29 3.45-7.29 7.92s3.3 7.92 7.29 7.92c2.19 0 3.81-.84 4.89-2.19V34h3.87V19h-3.87zm-4.17 11.73c-2.37 0-4.14-1.71-4.14-4.23 0-2.52 1.77-4.23 4.14-4.23 2.4 0 4.17 1.71 4.17 4.23 0 2.52-1.77 4.23-4.17 4.23zM106.628 21.58V19h-3.87v15h3.87v-7.17c0-3.15 2.55-4.05 4.56-3.81V18.7c-1.89 0-3.78.84-4.56 2.88zM124.295 19v1.77c-1.08-1.35-2.7-2.19-4.89-2.19-3.99 0-7.29 3.45-7.29 7.92s3.3 7.92 7.29 7.92c2.19 0 3.81-.84 4.89-2.19V34h3.87V19h-3.87zm-4.17 11.73c-2.37 0-4.14-1.71-4.14-4.23 0-2.52 1.77-4.23 4.14-4.23 2.4 0 4.17 1.71 4.17 4.23 0 2.52-1.77 4.23-4.17 4.23zM141.544 19l-3.66 10.5-3.63-10.5h-4.26l5.7 15h4.41l5.7-15h-4.26zM150.354 28.09h11.31c.09-.51.15-1.02.15-1.59 0-4.41-3.15-7.92-7.59-7.92-4.71 0-7.92 3.45-7.92 7.92s3.18 7.92 8.22 7.92c2.88 0 5.13-1.17 6.54-3.21l-3.12-1.8c-.66.87-1.86 1.5-3.36 1.5-2.04 0-3.69-.84-4.23-2.82zm-.06-3c.45-1.92 1.86-3.03 3.93-3.03 1.62 0 3.24.87 3.72 3.03h-7.65zM164.516 34h3.87V12.1h-3.87V34zM185.248 34.36c3.69 0 6.9-2.01 6.9-6.3V13h-2.1v15.06c0 3.03-2.07 4.26-4.8 4.26-2.19 0-3.93-.78-4.62-2.61l-1.77 1.05c1.05 2.43 3.57 3.6 6.39 3.6zM203.124 18.64c-4.65 0-7.83 3.45-7.83 7.86 0 4.53 3.24 7.86 7.98 7.86 3.03 0 5.34-1.41 6.6-3.45l-1.74-1.02c-.81 1.44-2.46 2.55-4.83 2.55-3.18 0-5.55-1.89-5.97-4.95h13.17c.03-.3.06-.63.06-.93 0-4.11-2.85-7.92-7.44-7.92zm0 1.92c2.58 0 4.98 1.71 5.4 5.01h-11.19c.39-2.94 2.64-5.01 5.79-5.01zM221.224 20.92V19h-4.32v-4.2l-1.98.6V19h-3.15v1.92h3.15v9.09c0 3.6 2.25 4.59 6.3 3.99v-1.74c-2.91.12-4.32.33-4.32-2.25v-9.09h4.32zM225.176 22.93c0-1.62 1.59-2.37 3.15-2.37 1.44 0 2.97.57 3.6 2.1l1.65-.96c-.87-1.86-2.79-3.06-5.25-3.06-3 0-5.13 1.89-5.13 4.29 0 5.52 8.76 3.39 8.76 7.11 0 1.77-1.68 2.4-3.45 2.4-2.01 0-3.57-.99-4.11-2.52l-1.68.99c.75 1.92 2.79 3.45 5.79 3.45 3.21 0 5.43-1.77 5.43-4.32 0-5.52-8.76-3.39-8.76-7.11zM244.603 20.92V19h-4.32v-4.2l-1.98.6V19h-3.15v1.92h3.15v9.09c0 3.6 2.25 4.59 6.3 3.99v-1.74c-2.91.12-4.32.33-4.32-2.25v-9.09h4.32zM249.883 21.49V19h-1.98v15h1.98v-8.34c0-3.72 2.34-4.98 4.74-4.98v-1.92c-1.92 0-3.69.63-4.74 2.73zM263.358 18.64c-4.65 0-7.83 3.45-7.83 7.86 0 4.53 3.24 7.86 7.98 7.86 3.03 0 5.34-1.41 6.6-3.45l-1.74-1.02c-.81 1.44-2.46 2.55-4.83 2.55-3.18 0-5.55-1.89-5.97-4.95h13.17c.03-.3.06-.63.06-.93 0-4.11-2.85-7.92-7.44-7.92zm0 1.92c2.58 0 4.98 1.71 5.4 5.01h-11.19c.39-2.94 2.64-5.01 5.79-5.01zM286.848 19v2.94c-1.26-2.01-3.39-3.3-6.06-3.3-4.23 0-7.74 3.42-7.74 7.86s3.51 7.86 7.74 7.86c2.67 0 4.8-1.29 6.06-3.3V34h1.98V19h-1.98zm-5.91 13.44c-3.33 0-5.91-2.61-5.91-5.94 0-3.33 2.58-5.94 5.91-5.94s5.91 2.61 5.91 5.94c0 3.33-2.58 5.94-5.91 5.94zM309.01 18.64c-1.92 0-3.75.87-4.86 2.73-.84-1.74-2.46-2.73-4.56-2.73-1.8 0-3.42.72-4.59 2.55V19h-1.98v15H295v-8.31c0-3.72 2.16-5.13 4.32-5.13 2.13 0 3.51 1.41 3.51 4.08V34h1.98v-8.31c0-3.72 1.86-5.13 4.17-5.13 2.13 0 3.66 1.41 3.66 4.08V34h1.98v-9.36c0-3.75-2.31-6-5.61-6z" fill="#000"/>
<path d="M11.395 44.428C4.557 40.198 0 32.632 0 24 0 10.745 10.745 0 24 0a23.891 23.891 0 0113.997 4.502c-.2 17.907-11.097 33.245-26.602 39.926z" fill="#6875F5"/>
<path d="M14.134 45.885A23.914 23.914 0 0024 48c13.255 0 24-10.745 24-24 0-3.516-.756-6.856-2.115-9.866-4.659 15.143-16.608 27.092-31.75 31.751z" fill="#6875F5"/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,4 @@
<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
<path d="M11.395 44.428C4.557 40.198 0 32.632 0 24 0 10.745 10.745 0 24 0a23.891 23.891 0 0113.997 4.502c-.2 17.907-11.097 33.245-26.602 39.926z" fill="#6875F5"/>
<path d="M14.134 45.885A23.914 23.914 0 0024 48c13.255 0 24-10.745 24-24 0-3.516-.756-6.856-2.115-9.866-4.659 15.143-16.608 27.092-31.75 31.751z" fill="#6875F5"/>
</svg>

After

Width:  |  Height:  |  Size: 428 B

View File

@@ -0,0 +1,6 @@
<a href="/">
<svg class="w-16 h-16" viewbox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.395 44.428C4.557 40.198 0 32.632 0 24 0 10.745 10.745 0 24 0a23.891 23.891 0 0113.997 4.502c-.2 17.907-11.097 33.245-26.602 39.926z" fill="#6875F5"/>
<path d="M14.134 45.885A23.914 23.914 0 0024 48c13.255 0 24-10.745 24-24 0-3.516-.756-6.856-2.115-9.866-4.659 15.143-16.608 27.092-31.75 31.751z" fill="#6875F5"/>
</svg>
</a>

View File

@@ -0,0 +1,9 @@
<div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100">
<div>
{{ $logo }}
</div>
<div class="w-full sm:max-w-md mt-6 px-6 py-4 bg-white shadow-md overflow-hidden sm:rounded-lg">
{{ $slot }}
</div>
</div>

View File

@@ -0,0 +1,46 @@
@props(['style' => session('flash.bannerStyle', 'success'), 'message' => session('flash.banner')])
<div x-data="{{ json_encode(['show' => true, 'style' => $style, 'message' => $message]) }}"
:class="{ 'bg-indigo-500': style == 'success', 'bg-red-700': style == 'danger', 'bg-gray-500': style != 'success' && style != 'danger' }"
style="display: none;"
x-show="show && message"
x-init="
document.addEventListener('banner-message', event => {
style = event.detail.style;
message = event.detail.message;
show = true;
});
">
<div class="max-w-screen-xl mx-auto py-2 px-3 sm:px-6 lg:px-8">
<div class="flex items-center justify-between flex-wrap">
<div class="w-0 flex-1 flex items-center min-w-0">
<span class="flex p-2 rounded-lg" :class="{ 'bg-indigo-600': style == 'success', 'bg-red-600': style == 'danger' }">
<svg x-show="style == 'success'" class="h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
<svg x-show="style == 'danger'" class="h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
<svg x-show="style != 'success' && style != 'danger'" class="h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
</span>
<p class="ml-3 font-medium text-sm text-white truncate" x-text="message"></p>
</div>
<div class="shrink-0 sm:ml-3">
<button
type="button"
class="-mr-1 flex p-2 rounded-md focus:outline-none sm:-mr-2 transition"
:class="{ 'hover:bg-indigo-600 focus:bg-indigo-600': style == 'success', 'hover:bg-red-600 focus:bg-red-600': style == 'danger' }"
aria-label="Dismiss"
x-on:click="show = false">
<svg class="h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,3 @@
<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:border-gray-900 focus:ring focus:ring-gray-300 disabled:opacity-25 transition']) }}>
{{ $slot }}
</button>

View File

@@ -0,0 +1 @@
<input type="checkbox" {!! $attributes->merge(['class' => 'rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}>

View File

@@ -0,0 +1,27 @@
@props(['id' => null, 'maxWidth' => null])
<x-jet-modal :id="$id" :maxWidth="$maxWidth" {{ $attributes }}>
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<div class="sm:flex sm:items-start">
<div class="mx-auto shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10">
<svg class="h-6 w-6 text-red-600" stroke="currentColor" fill="none" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
</svg>
</div>
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
<h3 class="text-lg">
{{ $title }}
</h3>
<div class="mt-2">
{{ $content }}
</div>
</div>
</div>
</div>
<div class="flex flex-row justify-end px-6 py-4 bg-gray-100 text-right">
{{ $footer }}
</div>
</x-jet-modal>

View File

@@ -0,0 +1,46 @@
@props(['title' => __('Confirm Password'), 'content' => __('For your security, please confirm your password to continue.'), 'button' => __('Confirm')])
@php
$confirmableId = md5($attributes->wire('then'));
@endphp
<span
{{ $attributes->wire('then') }}
x-data
x-ref="span"
x-on:click="$wire.startConfirmingPassword('{{ $confirmableId }}')"
x-on:password-confirmed.window="setTimeout(() => $event.detail.id === '{{ $confirmableId }}' && $refs.span.dispatchEvent(new CustomEvent('then', { bubbles: false })), 250);"
>
{{ $slot }}
</span>
@once
<x-jet-dialog-modal wire:model="confirmingPassword">
<x-slot name="title">
{{ $title }}
</x-slot>
<x-slot name="content">
{{ $content }}
<div class="mt-4" x-data="{}" x-on:confirming-password.window="setTimeout(() => $refs.confirmable_password.focus(), 250)">
<x-jet-input type="password" class="mt-1 block w-3/4" placeholder="{{ __('Password') }}"
x-ref="confirmable_password"
wire:model.defer="confirmablePassword"
wire:keydown.enter="confirmPassword" />
<x-jet-input-error for="confirmable_password" class="mt-2" />
</div>
</x-slot>
<x-slot name="footer">
<x-jet-secondary-button wire:click="stopConfirmingPassword" wire:loading.attr="disabled">
{{ __('Cancel') }}
</x-jet-secondary-button>
<x-jet-button class="ml-3" dusk="confirm-password-button" wire:click="confirmPassword" wire:loading.attr="disabled">
{{ $button }}
</x-jet-button>
</x-slot>
</x-jet-dialog-modal>
@endonce

View File

@@ -0,0 +1,3 @@
<button {{ $attributes->merge(['type' => 'button', 'class' => 'inline-flex items-center justify-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 focus:outline-none focus:border-red-700 focus:ring focus:ring-red-200 active:bg-red-600 disabled:opacity-25 transition']) }}>
{{ $slot }}
</button>

View File

@@ -0,0 +1,17 @@
@props(['id' => null, 'maxWidth' => null])
<x-jet-modal :id="$id" :maxWidth="$maxWidth" {{ $attributes }}>
<div class="px-6 py-4">
<div class="text-lg">
{{ $title }}
</div>
<div class="mt-4">
{{ $content }}
</div>
</div>
<div class="flex flex-row justify-end px-6 py-4 bg-gray-100 text-right">
{{ $footer }}
</div>
</x-jet-modal>

View File

@@ -0,0 +1 @@
<a {{ $attributes->merge(['class' => 'block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition']) }}>{{ $slot }}</a>

View File

@@ -0,0 +1,47 @@
@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white', 'dropdownClasses' => ''])
@php
switch ($align) {
case 'left':
$alignmentClasses = 'origin-top-left left-0';
break;
case 'top':
$alignmentClasses = 'origin-top';
break;
case 'none':
case 'false':
$alignmentClasses = '';
break;
case 'right':
default:
$alignmentClasses = 'origin-top-right right-0';
break;
}
switch ($width) {
case '48':
$width = 'w-48';
break;
}
@endphp
<div class="relative" x-data="{ open: false }" @click.away="open = false" @close.stop="open = false">
<div @click="open = ! open">
{{ $trigger }}
</div>
<div x-show="open"
x-transition:enter="transition ease-out duration-200"
x-transition:enter-start="transform opacity-0 scale-95"
x-transition:enter-end="transform opacity-100 scale-100"
x-transition:leave="transition ease-in duration-75"
x-transition:leave-start="transform opacity-100 scale-100"
x-transition:leave-end="transform opacity-0 scale-95"
class="absolute z-50 mt-2 {{ $width }} rounded-md shadow-lg {{ $alignmentClasses }} {{ $dropdownClasses }}"
style="display: none;"
@click="open = false">
<div class="rounded-md ring-1 ring-black ring-opacity-5 {{ $contentClasses }}">
{{ $content }}
</div>
</div>
</div>

View File

@@ -0,0 +1,24 @@
@props(['submit'])
<div {{ $attributes->merge(['class' => 'md:grid md:grid-cols-3 md:gap-6']) }}>
<x-jet-section-title>
<x-slot name="title">{{ $title }}</x-slot>
<x-slot name="description">{{ $description }}</x-slot>
</x-jet-section-title>
<div class="mt-5 md:mt-0 md:col-span-2">
<form wire:submit.prevent="{{ $submit }}">
<div class="px-4 py-5 bg-white sm:p-6 shadow {{ isset($actions) ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md' }}">
<div class="grid grid-cols-6 gap-6">
{{ $form }}
</div>
</div>
@if (isset($actions))
<div class="flex items-center justify-end px-4 py-3 bg-gray-50 text-right sm:px-6 shadow sm:rounded-bl-md sm:rounded-br-md">
{{ $actions }}
</div>
@endif
</form>
</div>
</div>

View File

@@ -0,0 +1,5 @@
@props(['for'])
@error($for)
<p {{ $attributes->merge(['class' => 'text-sm text-red-600']) }}>{{ $message }}</p>
@enderror

View File

@@ -0,0 +1,3 @@
@props(['disabled' => false])
<input {{ $disabled ? 'disabled' : '' }} {!! $attributes->merge(['class' => 'border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm']) !!}>

View File

@@ -0,0 +1,5 @@
@props(['value'])
<label {{ $attributes->merge(['class' => 'block font-medium text-sm text-gray-700']) }}>
{{ $value ?? $slot }}
</label>

View File

@@ -0,0 +1,68 @@
@props(['id', 'maxWidth'])
@php
$id = $id ?? md5($attributes->wire('model'));
$maxWidth = [
'sm' => 'sm:max-w-sm',
'md' => 'sm:max-w-md',
'lg' => 'sm:max-w-lg',
'xl' => 'sm:max-w-xl',
'2xl' => 'sm:max-w-2xl',
][$maxWidth ?? '2xl'];
@endphp
<div
x-data="{
show: @entangle($attributes->wire('model')).defer,
focusables() {
// All focusable element types...
let selector = 'a, button, input:not([type=\'hidden\']), textarea, select, details, [tabindex]:not([tabindex=\'-1\'])'
return [...$el.querySelectorAll(selector)]
// All non-disabled elements...
.filter(el => ! el.hasAttribute('disabled'))
},
firstFocusable() { return this.focusables()[0] },
lastFocusable() { return this.focusables().slice(-1)[0] },
nextFocusable() { return this.focusables()[this.nextFocusableIndex()] || this.firstFocusable() },
prevFocusable() { return this.focusables()[this.prevFocusableIndex()] || this.lastFocusable() },
nextFocusableIndex() { return (this.focusables().indexOf(document.activeElement) + 1) % (this.focusables().length + 1) },
prevFocusableIndex() { return Math.max(0, this.focusables().indexOf(document.activeElement)) -1 },
}"
x-init="$watch('show', value => {
if (value) {
document.body.classList.add('overflow-y-hidden');
{{ $attributes->has('focusable') ? 'setTimeout(() => firstFocusable().focus(), 100)' : '' }}
} else {
document.body.classList.remove('overflow-y-hidden');
}
})"
x-on:close.stop="show = false"
x-on:keydown.escape.window="show = false"
x-on:keydown.tab.prevent="$event.shiftKey || nextFocusable().focus()"
x-on:keydown.shift.tab.prevent="prevFocusable().focus()"
x-show="show"
id="{{ $id }}"
class="jetstream-modal fixed inset-0 overflow-y-auto px-4 py-6 sm:px-0 z-50"
style="display: none;"
>
<div x-show="show" class="fixed inset-0 transform transition-all" x-on:click="show = false" x-transition:enter="ease-out duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="ease-in duration-200"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0">
<div class="absolute inset-0 bg-gray-500 opacity-75"></div>
</div>
<div x-show="show" class="mb-6 bg-white rounded-lg overflow-hidden shadow-xl transform transition-all sm:w-full {{ $maxWidth }} sm:mx-auto"
x-transition:enter="ease-out duration-300"
x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100"
x-transition:leave="ease-in duration-200"
x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100"
x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95">
{{ $slot }}
</div>
</div>

View File

@@ -0,0 +1,11 @@
@props(['active'])
@php
$classes = ($active ?? false)
? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition'
: 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition';
@endphp
<a {{ $attributes->merge(['class' => $classes]) }}>
{{ $slot }}
</a>

View File

@@ -0,0 +1,11 @@
@props(['active'])
@php
$classes = ($active ?? false)
? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition'
: 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition';
@endphp
<a {{ $attributes->merge(['class' => $classes]) }}>
{{ $slot }}
</a>

View File

@@ -0,0 +1,3 @@
<button {{ $attributes->merge(['type' => 'button', 'class' => 'inline-flex items-center px-4 py-2 bg-white border border-gray-300 rounded-md font-semibold text-xs text-gray-700 uppercase tracking-widest shadow-sm hover:text-gray-500 focus:outline-none focus:border-blue-300 focus:ring focus:ring-blue-200 active:text-gray-800 active:bg-gray-50 disabled:opacity-25 transition']) }}>
{{ $slot }}
</button>

View File

@@ -0,0 +1,5 @@
<div class="hidden sm:block">
<div class="py-8">
<div class="border-t border-gray-200"></div>
</div>
</div>

View File

@@ -0,0 +1,13 @@
<div class="md:col-span-1 flex justify-between">
<div class="px-4 sm:px-0">
<h3 class="text-lg font-medium text-gray-900">{{ $title }}</h3>
<p class="mt-1 text-sm text-gray-600">
{{ $description }}
</p>
</div>
<div class="px-4 sm:px-0">
{{ $aside ?? '' }}
</div>
</div>

View File

@@ -0,0 +1,19 @@
@props(['team', 'component' => 'jet-dropdown-link'])
<form method="POST" action="{{ route('current-team.update') }}" x-data>
@method('PUT')
@csrf
<!-- Hidden Team ID -->
<input type="hidden" name="team_id" value="{{ $team->id }}">
<x-dynamic-component :component="$component" href="#" x-on:click.prevent="$root.submit();">
<div class="flex items-center">
@if (Auth::user()->isCurrentTeam($team))
<svg class="mr-2 h-5 w-5 text-green-400" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewBox="0 0 24 24"><path d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
@endif
<div class="truncate">{{ $team->name }}</div>
</div>
</x-dynamic-component>
</form>

View File

@@ -0,0 +1,11 @@
@if ($errors->any())
<div {{ $attributes }}>
<div class="font-medium text-red-600">{{ __('Whoops! Something went wrong.') }}</div>
<ul class="mt-3 list-disc list-inside text-sm text-red-600">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif

View File

@@ -0,0 +1,90 @@
<div class="p-6 sm:px-20 bg-white border-b border-gray-200">
<div>
<x-jet-application-logo class="block h-12 w-auto" />
</div>
<div class="mt-8 text-2xl">
Welcome to your Jetstream application!
</div>
<div class="mt-6 text-gray-500">
Laravel Jetstream provides a beautiful, robust starting point for your next Laravel application. Laravel is designed
to help you build your application using a development environment that is simple, powerful, and enjoyable. We believe
you should love expressing your creativity through programming, so we have spent time carefully crafting the Laravel
ecosystem to be a breath of fresh air. We hope you love it.
</div>
</div>
<div class="bg-gray-200 bg-opacity-25 grid grid-cols-1 md:grid-cols-2">
<div class="p-6">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-400"><path d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"></path></svg>
<div class="ml-4 text-lg text-gray-600 leading-7 font-semibold"><a href="https://laravel.com/docs">Documentation</a></div>
</div>
<div class="ml-12">
<div class="mt-2 text-sm text-gray-500">
Laravel has wonderful documentation covering every aspect of the framework. Whether you're new to the framework or have previous experience, we recommend reading all of the documentation from beginning to end.
</div>
<a href="https://laravel.com/docs">
<div class="mt-3 flex items-center text-sm font-semibold text-indigo-700">
<div>Explore the documentation</div>
<div class="ml-1 text-indigo-500">
<svg viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4"><path fill-rule="evenodd" d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg>
</div>
</div>
</a>
</div>
</div>
<div class="p-6 border-t border-gray-200 md:border-t-0 md:border-l">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-400"><path d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path><path d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
<div class="ml-4 text-lg text-gray-600 leading-7 font-semibold"><a href="https://laracasts.com">Laracasts</a></div>
</div>
<div class="ml-12">
<div class="mt-2 text-sm text-gray-500">
Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
</div>
<a href="https://laracasts.com">
<div class="mt-3 flex items-center text-sm font-semibold text-indigo-700">
<div>Start watching Laracasts</div>
<div class="ml-1 text-indigo-500">
<svg viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4"><path fill-rule="evenodd" d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg>
</div>
</div>
</a>
</div>
</div>
<div class="p-6 border-t border-gray-200">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-400"><path d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg>
<div class="ml-4 text-lg text-gray-600 leading-7 font-semibold"><a href="https://tailwindcss.com/">Tailwind</a></div>
</div>
<div class="ml-12">
<div class="mt-2 text-sm text-gray-500">
Laravel Jetstream is built with Tailwind, an amazing utility first CSS framework that doesn't get in your way. You'll be amazed how easily you can build and maintain fresh, modern designs with this wonderful framework at your fingertips.
</div>
</div>
</div>
<div class="p-6 border-t border-gray-200 md:border-l">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-400"><path d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path></svg>
<div class="ml-4 text-lg text-gray-600 leading-7 font-semibold">Authentication</div>
</div>
<div class="ml-12">
<div class="mt-2 text-sm text-gray-500">
Authentication and registration views are included with Laravel Jetstream, as well as support for user email verification and resetting forgotten passwords. So, you're free to get started what matters most: building your application.
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,23 @@
@component('mail::message')
{{ __('You have been invited to join the :team team!', ['team' => $invitation->team->name]) }}
@if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::registration()))
{{ __('If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:') }}
@component('mail::button', ['url' => route('register')])
{{ __('Create Account') }}
@endcomponent
{{ __('If you already have an account, you may accept this invitation by clicking the button below:') }}
@else
{{ __('You may accept this invitation by clicking the button below:') }}
@endif
@component('mail::button', ['url' => $acceptUrl])
{{ __('Accept Invitation') }}
@endcomponent
{{ __('If you did not expect to receive an invitation to this team, you may discard this email.') }}
@endcomponent

View File

@@ -2,7 +2,7 @@
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use App\Http\Controllers\CountryCodeController;
/*
|--------------------------------------------------------------------------
| Web Routes
@@ -14,10 +14,17 @@ use Inertia\Inertia;
|
*/
Route::get('/', function () {
return Inertia::render('IkeaRoot');
})->name('root');
Route::get('/ccountry/', [CountryCodeController::class, 'index'])->name('ccountry.index');
Route::get('/ccountry/active/', [CountryCodeController::class, 'active'])->name('ccountry.active');
Route::middleware(['auth:sanctum', config('jetstream.auth_session'), 'verified'])->group(function () {
Route::get('/', function () {
return Inertia::render('Dashboard');
})->name('dashboard');
// Route::get('/', function () {
// return Inertia::render('Dashboard');
// })->name('dashboard');
Route::prefix('/superuser')->name('superuser.')->group(function () {
Route::resource('permission', App\Http\Controllers\Superuser\PermissionController::class)->only([

View File

@@ -9,6 +9,8 @@ module.exports = {
'./storage/framework/views/*.php',
'./resources/views/**/*.blade.php',
'./resources/js/**/*.vue',
'./node_modules/flowbite-vue/**/*.{js,jsx,ts,tsx}',
'./node_modules/flowbite/**/*.{js,jsx,ts,tsx}'
],
theme: {
@@ -19,5 +21,5 @@ module.exports = {
},
},
plugins: [require('@tailwindcss/forms'), require('@tailwindcss/typography')],
plugins: [require('@tailwindcss/forms'), require('@tailwindcss/typography'), require('flowbite/plugin')],
};

1298
yarn.lock Normal file

File diff suppressed because it is too large Load Diff