Repository: sinan-aydogan/tailadmin-laravel Branch: main Commit: f8b2fd49d21e Files: 536 Total size: 1.6 MB Directory structure: gitextract_rja1wsy7/ ├── .deepsource.toml ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── copilot-instructions.md ├── .gitignore ├── .prettierrc.json ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── app/ │ ├── Actions/ │ │ ├── Fortify/ │ │ │ ├── CreateNewUser.php │ │ │ ├── PasswordValidationRules.php │ │ │ ├── ResetUserPassword.php │ │ │ ├── UpdateUserPassword.php │ │ │ └── UpdateUserProfileInformation.php │ │ ├── Jetstream/ │ │ │ ├── AddTeamMember.php │ │ │ ├── CreateTeam.php │ │ │ ├── DeleteTeam.php │ │ │ ├── DeleteUser.php │ │ │ ├── InviteTeamMember.php │ │ │ ├── RemoveTeamMember.php │ │ │ └── UpdateTeamName.php │ │ └── TailAdmin/ │ │ ├── UpdateDarkModePreference.php │ │ └── UpdateUserLanguage.php │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── Controller.php │ │ │ ├── DemoContentController.php │ │ │ ├── PermissionGroupController.php │ │ │ └── Settings/ │ │ │ ├── PermissionController.php │ │ │ ├── RoleController.php │ │ │ ├── SystemController.php │ │ │ └── UserController.php │ │ ├── Middleware/ │ │ │ ├── HandleInertiaRequests.php │ │ │ └── LocalizationMiddleware.php │ │ ├── Requests/ │ │ │ ├── StorePermissionGroupRequest.php │ │ │ └── UpdatePermissionGroupRequest.php │ │ └── Resources/ │ │ └── DemoContentResource.php │ ├── Models/ │ │ ├── DemoContent.php │ │ ├── Membership.php │ │ ├── PermissionGroup.php │ │ ├── Team.php │ │ ├── TeamInvitation.php │ │ └── User.php │ ├── Policies/ │ │ ├── DemoContentPolicy.php │ │ ├── PermissionGroupPolicy.php │ │ └── TeamPolicy.php │ └── Providers/ │ ├── AppServiceProvider.php │ ├── FortifyServiceProvider.php │ └── JetstreamServiceProvider.php ├── artisan ├── bootstrap/ │ ├── app.php │ ├── cache/ │ │ └── .gitignore │ └── providers.php ├── composer.json ├── config/ │ ├── app.php │ ├── auth.php │ ├── cache.php │ ├── database.php │ ├── debugbar.php │ ├── filesystems.php │ ├── fortify.php │ ├── jetstream.php │ ├── localization.php │ ├── logging.php │ ├── mail.php │ ├── permission.php │ ├── queue.php │ ├── sanctum.php │ ├── services.php │ └── session.php ├── database/ │ ├── .gitignore │ ├── factories/ │ │ ├── DemoContentFactory.php │ │ ├── PermissionGroupFactory.php │ │ ├── TeamFactory.php │ │ └── UserFactory.php │ ├── migrations/ │ │ ├── 0001_01_01_000000_create_users_table.php │ │ ├── 0001_01_01_000001_create_cache_table.php │ │ ├── 0001_01_01_000002_create_jobs_table.php │ │ ├── 2021_07_16_121843_create_permission_tables.php │ │ ├── 2021_11_10_062603_create_demo_contents_table.php │ │ ├── 2022_01_20_204151_add_group_columns_to_permissions_table.php │ │ ├── 2022_01_20_204743_create_permission_groups_table.php │ │ ├── 2024_07_03_194214_add_two_factor_columns_to_users_table.php │ │ ├── 2024_07_03_194232_create_personal_access_tokens_table.php │ │ ├── 2024_07_03_194233_create_teams_table.php │ │ ├── 2024_07_03_194234_create_team_user_table.php │ │ ├── 2024_07_03_194235_create_team_invitations_table.php │ │ └── 2024_07_07_190651_add_personalization_fields_to_users_table.php │ └── seeders/ │ ├── DatabaseSeeder.php │ ├── PermissionGroupSeeder.php │ ├── PermissionSeeder.php │ ├── RoleSeeder.php │ └── UserSeeder.php ├── eslint.config.js ├── jsconfig.json ├── package.json ├── phpunit.xml ├── postcss.config.js ├── public/ │ ├── .htaccess │ ├── index.php │ └── robots.txt ├── resources/ │ ├── css/ │ │ ├── app.css │ │ ├── components/ │ │ │ ├── alert.css │ │ │ ├── auth.css │ │ │ ├── avatar.css │ │ │ ├── backEndTablePagination.css │ │ │ ├── badge.css │ │ │ ├── breadcrumb.css │ │ │ ├── button.css │ │ │ ├── collapsible.css │ │ │ ├── content-box.css │ │ │ ├── dropdown.css │ │ │ ├── grid.css │ │ │ ├── input.css │ │ │ ├── list.css │ │ │ ├── loading.css │ │ │ ├── modal.css │ │ │ ├── pagination.css │ │ │ ├── progress.css │ │ │ ├── radius.css │ │ │ ├── statistic-box.css │ │ │ ├── tab.css │ │ │ ├── table.css │ │ │ ├── toastr.css │ │ │ ├── tooltip.css │ │ │ └── vertical-menu.css │ │ ├── layout/ │ │ │ ├── footer.css │ │ │ ├── full-screen-layout.css │ │ │ ├── main-menu.css │ │ │ ├── main.css │ │ │ ├── top-bar.css │ │ │ └── top-menu.css │ │ └── misc/ │ │ ├── effect.css │ │ └── highlighter.css │ ├── js/ │ │ ├── Components/ │ │ │ ├── Alert/ │ │ │ │ └── TAlert.vue │ │ │ ├── Auth/ │ │ │ │ ├── TForgot.vue │ │ │ │ ├── TLock.vue │ │ │ │ ├── TLogin.vue │ │ │ │ └── TRegister.vue │ │ │ ├── Avatar/ │ │ │ │ ├── TAvatar.vue │ │ │ │ └── TAvatarGroup.vue │ │ │ ├── Badge/ │ │ │ │ └── TBadge.vue │ │ │ ├── Breadcrumb/ │ │ │ │ └── TBreadcrumb.vue │ │ │ ├── Button/ │ │ │ │ └── TButton.vue │ │ │ ├── Card/ │ │ │ │ ├── TContentCard.vue │ │ │ │ └── TStatisticWidget.vue │ │ │ ├── Chart/ │ │ │ │ ├── TBarChart.vue │ │ │ │ ├── TDoughnutChart.vue │ │ │ │ ├── TLineChart.vue │ │ │ │ ├── TPieChart.vue │ │ │ │ ├── TPolarChart.vue │ │ │ │ └── TRadarChart.vue │ │ │ ├── Code/ │ │ │ │ └── TCodeShowcase.vue │ │ │ ├── Collapsible/ │ │ │ │ ├── TCollapsible.vue │ │ │ │ └── TCollapsibleItem.vue │ │ │ ├── Dropdown/ │ │ │ │ ├── TDropdown.vue │ │ │ │ └── TDropdownItem.vue │ │ │ ├── Form/ │ │ │ │ ├── Inputs/ │ │ │ │ │ ├── TInputBetween.vue │ │ │ │ │ ├── TInputCheckBox.vue │ │ │ │ │ ├── TInputDate.vue │ │ │ │ │ ├── TInputFile.vue │ │ │ │ │ ├── TInputInlineEditableRepeatable.vue │ │ │ │ │ ├── TInputMultiSelect.vue │ │ │ │ │ ├── TInputRadioButton.vue │ │ │ │ │ ├── TInputRepeatable.vue │ │ │ │ │ ├── TInputSelect.vue │ │ │ │ │ ├── TInputText.vue │ │ │ │ │ └── TInputTextArea.vue │ │ │ │ ├── TError.vue │ │ │ │ ├── TFormContent.vue │ │ │ │ ├── TFormSection.vue │ │ │ │ └── TInputGroup.vue │ │ │ ├── Icon/ │ │ │ │ ├── TAdjustmentsIcon.vue │ │ │ │ ├── TAudioIcon.vue │ │ │ │ ├── TBanIcon.vue │ │ │ │ ├── TBellIcon.vue │ │ │ │ ├── TCalendarIcon.vue │ │ │ │ ├── TCashIcon.vue │ │ │ │ ├── TCheckCircleIcon.vue │ │ │ │ ├── TCheckCircleSolidIcon.vue │ │ │ │ ├── TCheckIcon.vue │ │ │ │ ├── TChevronDoubleDownIcon.vue │ │ │ │ ├── TChevronDownIcon.vue │ │ │ │ ├── TChevronLeftIcon.vue │ │ │ │ ├── TChevronRightIcon.vue │ │ │ │ ├── TChevronUpIcon.vue │ │ │ │ ├── TClockIcon.vue │ │ │ │ ├── TCogIcon.vue │ │ │ │ ├── TCollectionIcon.vue │ │ │ │ ├── TDocumentIcon.vue │ │ │ │ ├── TDotsVerticalIcon.vue │ │ │ │ ├── TEyeIcon.vue │ │ │ │ ├── TGitHubIcon.vue │ │ │ │ ├── THamburgerMenuTriggerIcon.vue │ │ │ │ ├── TInformationCircleIcon.vue │ │ │ │ ├── TInformationIcon.vue │ │ │ │ ├── TLogOutIcon.vue │ │ │ │ ├── TLogo.vue │ │ │ │ ├── TPaperClipIcon.vue │ │ │ │ ├── TPencilAltIcon.vue │ │ │ │ ├── TPlusCircleIcon.vue │ │ │ │ ├── TPlusIcon.vue │ │ │ │ ├── TRefreshIcon.vue │ │ │ │ ├── TSearchCircleIcon.vue │ │ │ │ ├── TSearchIcon.vue │ │ │ │ ├── TShieldCheckIcon.vue │ │ │ │ ├── TShieldCheckSolidIcon.vue │ │ │ │ ├── TShoppingBagIcon.vue │ │ │ │ ├── TStarIcon.vue │ │ │ │ ├── TStarSolidIcon.vue │ │ │ │ ├── TTrashIcon.vue │ │ │ │ ├── TUserCircleIcon.vue │ │ │ │ ├── TUserGroupIcon.vue │ │ │ │ ├── TVideoIcon.vue │ │ │ │ ├── TXCircleIcon.vue │ │ │ │ └── TXIcon.vue │ │ │ ├── List/ │ │ │ │ ├── TList.vue │ │ │ │ └── TListItem.vue │ │ │ ├── Loading/ │ │ │ │ ├── Animations/ │ │ │ │ │ ├── TLoadingAnimationCogs.vue │ │ │ │ │ ├── TLoadingAnimationThreeBars.vue │ │ │ │ │ └── TLoadingAnimationThreeDots.vue │ │ │ │ └── TLoading.vue │ │ │ ├── Misc/ │ │ │ │ ├── TComponentRadiusSelector.vue │ │ │ │ ├── TComponentStyleSelector.vue │ │ │ │ └── TComponentWidthSelector.vue │ │ │ ├── Modal/ │ │ │ │ └── TModal.vue │ │ │ ├── Paginate/ │ │ │ │ ├── TBackEndTablePaginate.vue │ │ │ │ └── TPaginate.vue │ │ │ ├── Progress/ │ │ │ │ └── TProgress.vue │ │ │ ├── Tab/ │ │ │ │ └── TTab.vue │ │ │ ├── Table/ │ │ │ │ ├── TBackEndTable.vue │ │ │ │ ├── TTable.vue │ │ │ │ └── TTableActionDropdown.vue │ │ │ ├── Toastr/ │ │ │ │ └── TToastr.vue │ │ │ └── Tooltip/ │ │ │ └── TTooltip.vue │ │ ├── Functions/ │ │ │ ├── deviceInfoCollector.js │ │ │ ├── menuTrigger.js │ │ │ └── windowSizeCalculator.js │ │ ├── Jetstream/ │ │ │ ├── ActionMessage.vue │ │ │ ├── ActionSection.vue │ │ │ ├── ApplicationLogo.vue │ │ │ ├── ApplicationMark.vue │ │ │ ├── AuthenticationCard.vue │ │ │ ├── AuthenticationCardLogo.vue │ │ │ ├── Banner.vue │ │ │ ├── Checkbox.vue │ │ │ ├── ConfirmationModal.vue │ │ │ ├── ConfirmsPassword.vue │ │ │ ├── DangerButton.vue │ │ │ ├── DialogModal.vue │ │ │ ├── Dropdown.vue │ │ │ ├── DropdownLink.vue │ │ │ ├── FormSection.vue │ │ │ ├── InputError.vue │ │ │ ├── InputLabel.vue │ │ │ ├── Modal.vue │ │ │ ├── NavLink.vue │ │ │ ├── PrimaryButton.vue │ │ │ ├── ResponsiveNavLink.vue │ │ │ ├── SecondaryButton.vue │ │ │ ├── SectionBorder.vue │ │ │ ├── SectionTitle.vue │ │ │ ├── TextInput.vue │ │ │ └── Welcome.vue │ │ ├── Lang/ │ │ │ ├── Flags/ │ │ │ │ ├── flagBg.vue │ │ │ │ ├── flagDe.vue │ │ │ │ ├── flagEn.vue │ │ │ │ ├── flagFr.vue │ │ │ │ ├── flagRu.vue │ │ │ │ ├── flagTr.vue │ │ │ │ └── flagZh.vue │ │ │ ├── bg/ │ │ │ │ ├── auth_lang_bg.js │ │ │ │ ├── general_lang_bg.js │ │ │ │ ├── main_menu_lang_bg.js │ │ │ │ ├── notification_lang_bg.js │ │ │ │ └── user_menu_lang_bg.js │ │ │ ├── de/ │ │ │ │ ├── auth_lang_de.js │ │ │ │ ├── general_lang_de.js │ │ │ │ ├── main_menu_lang_de.js │ │ │ │ ├── notification_lang_de.js │ │ │ │ └── user_menu_lang_de.js │ │ │ ├── en/ │ │ │ │ ├── auth_lang_en.js │ │ │ │ ├── general_lang_en.js │ │ │ │ ├── main_menu_lang_en.js │ │ │ │ ├── notification_lang_en.js │ │ │ │ ├── pagination_lang.js │ │ │ │ ├── table_lang.js │ │ │ │ └── user_menu_lang_en.js │ │ │ ├── fr/ │ │ │ │ ├── auth_lang_fr.js │ │ │ │ ├── general_lang_fr.js │ │ │ │ ├── main_menu_lang_fr.js │ │ │ │ ├── notification_lang_fr.js │ │ │ │ └── user_menu_lang_fr.js │ │ │ ├── languages.js │ │ │ ├── ru/ │ │ │ │ ├── auth_lang_ru.js │ │ │ │ ├── general_lang_ru.js │ │ │ │ ├── main_menu_lang_ru.js │ │ │ │ ├── notification_lang_ru.js │ │ │ │ └── user_menu_lang_ru.js │ │ │ ├── tr/ │ │ │ │ ├── auth_lang_tr.js │ │ │ │ ├── general_lang_tr.js │ │ │ │ ├── main_menu_lang_tr.js │ │ │ │ ├── notification_lang_tr.js │ │ │ │ ├── pagination_lang.js │ │ │ │ ├── table_lang.js │ │ │ │ └── user_menu_lang_tr.js │ │ │ └── zh/ │ │ │ ├── auth_lang_zh.js │ │ │ ├── general_lang_zh.js │ │ │ ├── main_menu_lang_zh.js │ │ │ ├── notification_lang_zh.js │ │ │ └── user_menu_lang_zh.js │ │ ├── Layouts/ │ │ │ ├── AppLayout-new.vue │ │ │ ├── AppLayout.vue │ │ │ ├── FullScreenLayout.vue │ │ │ ├── GridSection.vue │ │ │ ├── InitialVerticalMenu.vue │ │ │ ├── LockScreen.vue │ │ │ ├── MainMenu/ │ │ │ │ ├── Abay/ │ │ │ │ │ ├── MainMenu.vue │ │ │ │ │ └── UserMenu.vue │ │ │ │ └── Umay/ │ │ │ │ ├── MainMenu.vue │ │ │ │ └── MainMenuItem.vue │ │ │ ├── MainMenu.vue │ │ │ └── TopMenu/ │ │ │ ├── TopMenu.vue │ │ │ ├── TopMenuLanguageSelector.vue │ │ │ ├── TopMenuNotification.vue │ │ │ ├── TopMenuThemeSelector.vue │ │ │ └── TopMenuUserMenu.vue │ │ ├── Mixins/ │ │ │ ├── Styles/ │ │ │ │ ├── bgColorStyles.js │ │ │ │ ├── contentCardStyleMixin.js │ │ │ │ ├── forgotPasswordStyleMixin.js │ │ │ │ ├── fullScreenCardStyleMixin.js │ │ │ │ ├── gridStyleMixin.js │ │ │ │ ├── inputGroupStyleMixin.js │ │ │ │ ├── listStyleMixin.js │ │ │ │ ├── lockStyleMixin.js │ │ │ │ ├── loginStyleMixin.js │ │ │ │ ├── modalStyleMixin.js │ │ │ │ ├── paginateStyleMixin.js │ │ │ │ ├── registerStyleMixin.js │ │ │ │ ├── statisticWidgetStyleMixin.js │ │ │ │ ├── tabStyleMixin.js │ │ │ │ ├── toastrStyleMixin.js │ │ │ │ └── tooltipStyleMixin.js │ │ │ ├── radiusSizeMixin.js │ │ │ └── settingsMenuMixin.js │ │ ├── Pages/ │ │ │ ├── API/ │ │ │ │ ├── Index.vue │ │ │ │ └── Partials/ │ │ │ │ └── ApiTokenManager.vue │ │ │ ├── Auth/ │ │ │ │ ├── ConfirmPassword.vue │ │ │ │ ├── ForgotPassword.vue │ │ │ │ ├── Lock.vue │ │ │ │ ├── Login.vue │ │ │ │ ├── Policy.vue │ │ │ │ ├── Register.vue │ │ │ │ ├── ResetPassword.vue │ │ │ │ ├── Terms.vue │ │ │ │ ├── TwoFactorChallenge.vue │ │ │ │ └── VerifyEmail.vue │ │ │ ├── Dashboard.vue │ │ │ ├── PrivacyPolicy.vue │ │ │ ├── Profile/ │ │ │ │ ├── Partials/ │ │ │ │ │ ├── DarkModePreferenceForm.vue │ │ │ │ │ ├── DeleteUserForm.vue │ │ │ │ │ ├── LogoutOtherBrowserSessionsForm.vue │ │ │ │ │ ├── PreferredLanguageForm.vue │ │ │ │ │ ├── TwoFactorAuthenticationForm.vue │ │ │ │ │ ├── UpdatePasswordForm.vue │ │ │ │ │ └── UpdateProfileInformationForm.vue │ │ │ │ └── Show.vue │ │ │ ├── Samples/ │ │ │ │ ├── Components/ │ │ │ │ │ ├── Alert.vue │ │ │ │ │ ├── Avatar.vue │ │ │ │ │ ├── BackEndTable.vue │ │ │ │ │ ├── Badge.vue │ │ │ │ │ ├── Breadcrumb.vue │ │ │ │ │ ├── Button.vue │ │ │ │ │ ├── Chart.vue │ │ │ │ │ ├── Collapsible.vue │ │ │ │ │ ├── ContentBox.vue │ │ │ │ │ ├── Dropdown.vue │ │ │ │ │ ├── List.vue │ │ │ │ │ ├── Loading.vue │ │ │ │ │ ├── Modal.vue │ │ │ │ │ ├── Paginate.vue │ │ │ │ │ ├── Progress.vue │ │ │ │ │ ├── Tab.vue │ │ │ │ │ ├── Table.vue │ │ │ │ │ ├── Toastr.vue │ │ │ │ │ └── Tooltip.vue │ │ │ │ ├── Examples/ │ │ │ │ │ ├── Auth/ │ │ │ │ │ │ ├── ForgotPassword.vue │ │ │ │ │ │ ├── Lock.vue │ │ │ │ │ │ ├── Login.vue │ │ │ │ │ │ └── Register.vue │ │ │ │ │ ├── ChatApp.vue │ │ │ │ │ ├── EmailApp.vue │ │ │ │ │ ├── ForgotPassword.vue │ │ │ │ │ ├── Lock.vue │ │ │ │ │ ├── Login.vue │ │ │ │ │ ├── Pricing.vue │ │ │ │ │ ├── Profile.vue │ │ │ │ │ ├── ProjectApp.vue │ │ │ │ │ ├── Register.vue │ │ │ │ │ └── TodoApp.vue │ │ │ │ ├── FormElements/ │ │ │ │ │ ├── DateField.vue │ │ │ │ │ ├── FormStructure.vue │ │ │ │ │ ├── InlineRepeatableField.vue │ │ │ │ │ ├── InputGroup.vue │ │ │ │ │ ├── MultiSelectInput.vue │ │ │ │ │ ├── RepeatableField.vue │ │ │ │ │ ├── SelectInput.vue │ │ │ │ │ ├── SimpleField.vue │ │ │ │ │ ├── TagInput.vue │ │ │ │ │ └── Validation.vue │ │ │ │ ├── Layouts/ │ │ │ │ │ ├── Grid.vue │ │ │ │ │ ├── LayoutStructure.vue │ │ │ │ │ └── StatisticWidget.vue │ │ │ │ └── Test.vue │ │ │ ├── Settings/ │ │ │ │ ├── Index.vue │ │ │ │ ├── Permission/ │ │ │ │ │ └── Index.vue │ │ │ │ ├── Role/ │ │ │ │ │ └── Index.vue │ │ │ │ ├── System.vue │ │ │ │ └── User.vue │ │ │ ├── Teams/ │ │ │ │ ├── Create.vue │ │ │ │ ├── Partials/ │ │ │ │ │ ├── CreateTeamForm.vue │ │ │ │ │ ├── DeleteTeamForm.vue │ │ │ │ │ ├── TeamMemberManager.vue │ │ │ │ │ └── UpdateTeamNameForm.vue │ │ │ │ └── Show.vue │ │ │ ├── TermsOfService.vue │ │ │ └── Welcome.vue │ │ ├── Sources/ │ │ │ ├── authScreenDesigns.js │ │ │ ├── icons.js │ │ │ └── mainMenuLinks.js │ │ ├── Stores/ │ │ │ ├── darkMode.js │ │ │ ├── displayLanguage.js │ │ │ ├── exampleStore.js │ │ │ └── index.js │ │ ├── app.js │ │ ├── bootstrap.js │ │ ├── config.js │ │ ├── language.js │ │ └── ssr.js │ ├── lang/ │ │ ├── bg/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── bg.json │ │ ├── de/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── de.json │ │ ├── en/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── en.json │ │ ├── fr/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── fr.json │ │ ├── ru/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── ru.json │ │ ├── tr/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ ├── tr.json │ │ ├── zh_CN/ │ │ │ ├── actions.php │ │ │ ├── auth.php │ │ │ ├── http-statuses.php │ │ │ ├── pagination.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ │ └── zh_CN.json │ ├── markdown/ │ │ ├── policy.md │ │ └── terms.md │ ├── sass/ │ │ └── app.scss │ └── views/ │ ├── app.blade.php │ └── emails/ │ └── team-invitation.blade.php ├── routes/ │ ├── api.php │ ├── console.php │ ├── web.php │ └── web_modules/ │ ├── auth/ │ │ └── index.php │ ├── index.php │ └── user/ │ ├── index.php │ └── preferences_routes.php ├── storage/ │ ├── app/ │ │ └── .gitignore │ ├── debugbar/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── data/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ ├── testing/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ └── logs/ │ └── .gitignore ├── tailwind.config.js ├── tests/ │ ├── Feature/ │ │ ├── ApiTokenPermissionsTest.php │ │ ├── AuthenticationTest.php │ │ ├── BrowserSessionsTest.php │ │ ├── CreateApiTokenTest.php │ │ ├── CreateTeamTest.php │ │ ├── DeleteAccountTest.php │ │ ├── DeleteApiTokenTest.php │ │ ├── DeleteTeamTest.php │ │ ├── EmailVerificationTest.php │ │ ├── ExampleTest.php │ │ ├── InviteTeamMemberTest.php │ │ ├── LeaveTeamTest.php │ │ ├── PasswordConfirmationTest.php │ │ ├── PasswordResetTest.php │ │ ├── ProfileInformationTest.php │ │ ├── RegistrationTest.php │ │ ├── RemoveTeamMemberTest.php │ │ ├── TwoFactorAuthenticationSettingsTest.php │ │ ├── UpdatePasswordTest.php │ │ ├── UpdateTeamMemberRoleTest.php │ │ └── UpdateTeamNameTest.php │ ├── Pest.php │ ├── TestCase.php │ └── Unit/ │ └── ExampleTest.php └── vite.config.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .deepsource.toml ================================================ version = 1 [[analyzers]] name = "php" [[analyzers]] name = "javascript" [analyzers.meta] plugins = ["vue"] ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space indent_size = 4 trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false [*.{yml,yaml}] indent_size = 2 [docker-compose.yml] indent_size = 4 ================================================ FILE: .gitattributes ================================================ * text=auto eol=lf *.blade.php diff=html *.css diff=css *.html diff=html *.md diff=markdown *.php diff=php /.github export-ignore CHANGELOG.md export-ignore .styleci.yml export-ignore ================================================ FILE: .github/FUNDING.yml ================================================ github: [sinan-aydogan] open_collective: sinanaydogan ko_fi: sinanaydogan ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22] **Smartphone (please complete the following information):** - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - Browser [e.g. stock browser, safari] - Version [e.g. 22] **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/copilot-instructions.md ================================================ # TailAdmin Laravel - AI Coding Assistant Instructions ## Project Overview TailAdmin is a Laravel 12 + Vue.js 3 admin dashboard built with Inertia.js, TailwindCSS 3, and Laravel Jetstream. It's a comprehensive UI starter kit with multi-language support, role-based permissions, and extensive custom components. ## Architecture & Key Technologies ### Core Stack - **Backend**: Laravel 12 with Inertia.js SSR - **Frontend**: Vue.js 3 with Composition API + Vite build system - **Styling**: TailwindCSS 3 with custom dark mode implementation - **Authentication**: Laravel Jetstream + Sanctum - **Permissions**: Spatie Laravel Permission package - **State Management**: Pinia stores for dark mode, language, etc. - **Icons**: FontAwesome via `@fortawesome/vue-fontawesome` ### Project Structure Patterns - **Routes**: Modular routing via `routes/web_modules/` - add new route modules here - **Controllers**: Follow resource controller pattern, use `Inertia::render()` for page responses - **Vue Components**: Located in `resources/js/Components/` organized by type (Form/, Table/, etc.) - **Pages**: Inertia pages in `resources/js/Pages/` with consistent layout wrapping - **Custom Actions**: TailAdmin-specific actions in `app/Actions/TailAdmin/` ## Development Workflows ### Setup Commands ```bash composer install && npm install cp .env.example .env php artisan migrate --seed php artisan storage:link && php artisan key:generate ``` ### Development ```bash npm run dev # Start Vite dev server with HMR php artisan serve # Start Laravel server ``` ### Production Build ```bash npm run build # Builds both client and SSR bundles ``` ## Key Conventions & Patterns ### Vue Component Architecture - All components use Composition API with ` ================================================ FILE: resources/js/Components/Auth/TForgot.vue ================================================ ================================================ FILE: resources/js/Components/Auth/TLock.vue ================================================ ================================================ FILE: resources/js/Components/Auth/TLogin.vue ================================================ ================================================ FILE: resources/js/Components/Auth/TRegister.vue ================================================ ================================================ FILE: resources/js/Components/Avatar/TAvatar.vue ================================================ ================================================ FILE: resources/js/Components/Avatar/TAvatarGroup.vue ================================================ ================================================ FILE: resources/js/Components/Badge/TBadge.vue ================================================ ================================================ FILE: resources/js/Components/Breadcrumb/TBreadcrumb.vue ================================================ ================================================ FILE: resources/js/Components/Button/TButton.vue ================================================ ================================================ FILE: resources/js/Components/Card/TContentCard.vue ================================================ ================================================ FILE: resources/js/Components/Card/TStatisticWidget.vue ================================================ ================================================ FILE: resources/js/Components/Chart/TBarChart.vue ================================================ ================================================ FILE: resources/js/Components/Chart/TDoughnutChart.vue ================================================ ================================================ FILE: resources/js/Components/Chart/TLineChart.vue ================================================ ================================================ FILE: resources/js/Components/Chart/TPieChart.vue ================================================ ================================================ FILE: resources/js/Components/Chart/TPolarChart.vue ================================================ ================================================ FILE: resources/js/Components/Chart/TRadarChart.vue ================================================ ================================================ FILE: resources/js/Components/Code/TCodeShowcase.vue ================================================ ================================================ FILE: resources/js/Components/Collapsible/TCollapsible.vue ================================================ ================================================ FILE: resources/js/Components/Collapsible/TCollapsibleItem.vue ================================================ ================================================ FILE: resources/js/Components/Dropdown/TDropdown.vue ================================================ ================================================ FILE: resources/js/Components/Dropdown/TDropdownItem.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputBetween.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputCheckBox.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputDate.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputFile.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputInlineEditableRepeatable.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputMultiSelect.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputRadioButton.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputRepeatable.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputSelect.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputText.vue ================================================ ================================================ FILE: resources/js/Components/Form/Inputs/TInputTextArea.vue ================================================