diff --git a/app/Data/SecurityData.php b/app/Data/SecurityData.php new file mode 100644 index 0000000..6954dcc --- /dev/null +++ b/app/Data/SecurityData.php @@ -0,0 +1,16 @@ + [ + 'user' => UserData::optional(auth()->user()) + ] ]); } } diff --git a/app/Models/Action.php b/app/Models/Action.php index c8d9931..c36a2e6 100644 --- a/app/Models/Action.php +++ b/app/Models/Action.php @@ -11,6 +11,7 @@ /** * @property Server $server * @property Action\Status $status + * @mixin IdeHelperAction */ class Action extends Model { diff --git a/app/Models/Server.php b/app/Models/Server.php index 557e493..9e34e4e 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -11,6 +11,7 @@ /** * @property array $meta + * @mixin IdeHelperServer */ class Server extends Model { diff --git a/app/Models/Site.php b/app/Models/Site.php index eeaa82d..02172b8 100644 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -10,6 +10,7 @@ /** * @property Site\Type $type + * @mixin IdeHelperSite */ class Site extends Model { diff --git a/app/Models/User.php b/app/Models/User.php index aa9cde3..ce4cd6f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,6 +10,9 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +/** + * @mixin IdeHelperUser + */ class User extends Authenticatable { use HasFactory, Notifiable, Unguarded; diff --git a/lang/en/app.php b/lang/en/app.php index f4f903b..76871ca 100644 --- a/lang/en/app.php +++ b/lang/en/app.php @@ -4,6 +4,12 @@ return [ 'home' => [ - 'title' => 'Home', + 'title' => 'Dashboard', + ], + 'servers' => [ + 'title' => 'Servers', + ], + 'sites' => [ + 'title' => 'Sites', ], ]; diff --git a/lang/en/nouns.php b/lang/en/nouns.php index 7930689..cb88778 100644 --- a/lang/en/nouns.php +++ b/lang/en/nouns.php @@ -6,4 +6,6 @@ 'home' => 'Home', 'servers' => 'Servers', 'sites' => 'Sites', + 'profile' => 'Profile', + 'sign-out' => 'Sign out', ]; diff --git a/package-lock.json b/package-lock.json index bf4aed5..ddf5862 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "dependencies": { + "@heroicons/vue": "^2.1.3", "@unhead/vue": "^1.9.2", "@vueuse/core": "^10.9.0", "axios": "^1.6.8", @@ -15,6 +16,7 @@ "vue": "^3.4.21" }, "devDependencies": { + "@iconify-json/mdi": "^1.1.65", "@intlify/unplugin-vue-i18n": "^4.0.0", "@tailwindcss/postcss": "^4.0.0-alpha.10", "@trivago/prettier-plugin-sort-imports": "^4.3.0", @@ -769,6 +771,14 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@heroicons/vue": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-2.1.3.tgz", + "integrity": "sha512-CP4ipIwFbV4NEn8ULUCN110wkV0wZq6dsViDL3HwgIh+jn5yQGlRm6QaRN+Mv+o+UsUBbRDei3Je/q0NZHf5Gg==", + "peerDependencies": { + "vue": ">= 3" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -900,6 +910,15 @@ "vue": "^3.2.45" } }, + "node_modules/@iconify-json/mdi": { + "version": "1.1.65", + "resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.1.65.tgz", + "integrity": "sha512-P9ovos4pKjqwbcUaF5axnHKc1J4djfwLQ6vheJSzbTuZ7gLyonAI/mDDc+ekC4HFCnrYWPjdpkKT+mIujuqOaA==", + "dev": true, + "dependencies": { + "@iconify/types": "*" + } + }, "node_modules/@iconify/types": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", diff --git a/package.json b/package.json index f9b1289..9086250 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,10 @@ "build": "vite build" }, "devDependencies": { + "@iconify-json/mdi": "^1.1.65", + "@intlify/unplugin-vue-i18n": "^4.0.0", "@tailwindcss/postcss": "^4.0.0-alpha.10", "@trivago/prettier-plugin-sort-imports": "^4.3.0", - "@intlify/unplugin-vue-i18n": "^4.0.0", "@types/node": "^20.11.30", "@vue/eslint-config-typescript": "^13.0.0", "@vue/runtime-core": "^3.4.21", @@ -24,16 +25,17 @@ "tailwindcss": "^4.0.0-alpha.10", "typescript": "^5.4.3", "vite": "^5.0", - "vue-i18n": "^9.10.2", - "vue-eslint-parser": "^9.4.2" + "vue-eslint-parser": "^9.4.2", + "vue-i18n": "^9.10.2" }, "dependencies": { + "@heroicons/vue": "^2.1.3", "@unhead/vue": "^1.9.2", "@vueuse/core": "^10.9.0", "axios": "^1.6.8", - "hybridly": "^0.7.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "hybridly": "^0.7.3", "tailwind-merge": "^2.2.2", "vue": "^3.4.21" } diff --git a/resources/components/main-header.vue b/resources/components/main-header.vue new file mode 100644 index 0000000..dfa3616 --- /dev/null +++ b/resources/components/main-header.vue @@ -0,0 +1,66 @@ + + + diff --git a/resources/components/sidebar.vue b/resources/components/sidebar.vue new file mode 100644 index 0000000..9b74d37 --- /dev/null +++ b/resources/components/sidebar.vue @@ -0,0 +1,120 @@ + + + diff --git a/resources/layouts/auth.vue b/resources/layouts/auth.vue index c63b6d3..fa56519 100644 --- a/resources/layouts/auth.vue +++ b/resources/layouts/auth.vue @@ -3,7 +3,7 @@ import { ContentContainer } from "@/primitives/content-container"