main f8b2fd49d21e cached
536 files
1.6 MB
424.0k tokens
254 symbols
1 requests
Download .txt
Showing preview only (1,871K chars total). Download the full file or copy to clipboard to get everything.
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 `<script setup>`
- Custom component prefix: `t-` (e.g., `<t-button>`, `<t-input>`)
- Layout components in `resources/js/Layouts/` (AppLayout.vue is main)
- Font Awesome icons registered globally as `<icon>` component

### Backend Patterns
- **Table Search**: Custom `tableSearch()` eloquent macro for frontend table filtering
- **Permissions**: Super Admin bypass implemented in `AppServiceProvider::boot()`
- **Inertia Responses**: Always return with `Inertia::render('PageName', $data)`
- **Resources**: Use API Resources for consistent data transformation

### State Management
- **Dark Mode**: Managed via Pinia store in `resources/js/Stores/darkMode.js`
- **Language**: i18n with vue-i18n, stores in `resources/js/Stores/displayLanguage.js`
- **User Preferences**: Stored in database (`users.language`, `users.dark_mode`, `users.theme`)

### Multi-language Implementation
- **Frontend**: Vue i18n with language files in `resources/js/Lang/`
- **Backend**: Laravel localization in `resources/lang/`
- **Language Switching**: Route `/lang/{locale}` updates session locale

### Component Library Structure
- **Form Components**: Complex form elements with validation integration
- **Table Components**: Frontend and backend table implementations with search/filter
- **UI Components**: Alert, Badge, Button, Modal, etc. with consistent theming
- **Custom Inputs**: Repeatable fields, date pickers, multi-select with rich features

## Integration Points

### Inertia.js Patterns
- Page props passed via controller methods to Vue components
- Shared data configured in `HandleInertiaRequests` middleware
- Progress bar styling configured in `app.js`
- SSR support configured with separate `ssr.js` entry point

### TailwindCSS Customization
- Dark mode: `selector` strategy with manual class toggling
- Custom scrollbar plugin via `tailwind-scrollbar`
- Component-specific utilities in theme extension
- CSS purging configured for Vue SFC templates

### Database Architecture
- **User Personalization**: Language, dark_mode, theme columns in users table
- **Demo Content**: Sample data model for table component demonstrations
- **Permission Groups**: Custom grouping for Spatie permissions
- **Team Management**: Laravel Jetstream team functionality enabled

## Common Tasks

### Adding New Pages
1. Create controller with `Inertia::render()` response
2. Add Vue page component in `resources/js/Pages/`
3. Register route in appropriate `routes/web_modules/` file
4. Use `<app-layout>` wrapper with title and breadcrumbs

### Creating Components
1. Add to appropriate `resources/js/Components/` subdirectory
2. Use `t-` prefix for custom components
3. Include prop validation and emits declaration
4. Follow existing styling patterns with TailwindCSS

### Extending Permissions
1. Add permissions via database seeder or manual creation
2. Group permissions using `PermissionGroup` model
3. Use `@can` directive in Blade or `$page.props.auth.user.permissions` in Vue
4. Remember Super Admin has automatic access to everything

### Styling Guidelines
- Use TailwindCSS utility classes primarily
- Dark mode variants: `dark:` prefix (managed by Pinia store)
- Custom CSS only when Tailwind utilities insufficient
- Component theming via prop-based color/style variants

This codebase emphasizes rapid development with pre-built components, comprehensive theming, and developer-friendly patterns for admin dashboard creation.


================================================
FILE: .gitignore
================================================
# Laravel default
*.log
.DS_Store
.env
.env.backup
.env.production
.phpactor.json
.phpunit.result.cache
/.phpunit.cache
/auth.json
/bootstrap/ssr
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/storage/pail
/vendor
Homestead.json
Homestead.yaml
Thumbs.db
.workspace
npm-debug.log
yarn-error.log

# Editor directories and files
.code-workspace
/.c9
/.cursor
/.fleet
/.jetbrains
/.idea
/.nova
/.vscode
/.vscode-ai
/.zed
/copilot.log
/copilot-error.log
/ai-cache
/ai-temp

# Laravel Sail
docker-compose.yml
docker-compose.dev.yml
docker-compose.override.yml
sail.log


================================================
FILE: .prettierrc.json
================================================


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
contact@sinanaydogan.com.tr.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021 Sinan AYDOĞAN

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================

# TailAdmin Inertia

![TailAdmin](public/img/demo/tailadmin_v2.jpg)

It's a dashboard theme/UI-Starter Kit with **Laravel 12**, **TailwindCSS 3**, **Inertia.js** and **Vue 3 (JetStream)**.

> :wave: If you are looking for the Vue2 version, download [TailAdmin v1](https://github.com/sinan-aydogan/tailadmin-laravel/releases/tag/v.1.0.0) :wave:

![Laravel](https://img.shields.io/badge/Laravel-FF2D20?style=for-the-badge&logo=laravel&logoColor=white)
![Tailwind_CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)
![Vue.js](https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge&logo=vuedotjs&logoColor=4FC08D)

[![Ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/sinanaydogan)
[![BuyMeACoffee](public/img/demo/bmc-button.png)](https://www.buymeacoffee.com/sinanaydogan)
[![Discord](public/img/demo/discord_2.svg)](https://discord.gg/TnjA2GqYmw)

## GitAds Sponsored
[![Sponsored by GitAds](https://gitads.dev/v1/ad-serve?source=sinan-aydogan/tailadmin-laravel@github)](https://gitads.dev/v1/ad-track?source=sinan-aydogan/tailadmin-laravel@github)


Requirements
------
1. PHP min v.8.3
2. DB server (Recommended:MySQL)
3. [composer min v.2](https://getcomposer.org/)
4. [nodejs min v.20](https://nodejs.org/)
5. Please check other requirements of  [Laravel](https://laravel.com/) and [Inertia](https://inertiajs.com/)


Setup Directions
------

1. ```npm install```
2. ```composer install```
3. Please clone .env.example and copied file name change from .env.example to .env
4. Create a clean db table
5. Set database infos in the .env
6. ```php artisan migrate --seed```
7. ```php artisan storage:link```
8. ```php artisan key:generate```
9. ```npm run dev```
10. ```php artisan serve```
11. ```Goto: http://localhost:8000```

Setup Directions with Docker - Linux

1. Setup Docker with user permissions on pc
2. clone this repo to any directory ```git clone sinan-aydogan/tailadmin-laravel```
3. Enter project root directory by terminal for example ```cd tailadmin-laravel```
4. Install composer packages by docker, because your host machine doesn't have php, mysql, nginx etc. Everything is in the docker containers
   ```docker run --rm \ -u "$(id -u):$(id -g)" \ -v "$(pwd):/var/www/html" \ -w /var/www/html \ laravelsail/php83-composer:latest \composer install --ignore-platform-reqs```
5. You should add an alias to your .bashrc file for shorcut to sail. ```sudo nano ~/.bashrc```
6. Adds this lines end of the file ```alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'```
7. Apply changes ```source ~/.bashrc```
8. You can start the project with sail ```sail up -d```
9. Don't forget add to domain to your host file ```sudo nano /etc/hosts```
    - ```127.0.0.1 tailadmin-laravel.test```
10. Go to ```http://tailadmin-laravel.test``` or your custom domain 

Admin Login Infos / Demo Account
------

- **Demo:** *[https://tailadmin-demo.tailadmin.dev](https://tailadmin-demo.tailadmin.dev)*
- **Email:** *admin@tailadmin.dev*
- **Password:** *admin*


[![TailAdmin Demo](public/img/demo/youtube.jpg)](https://www.youtube.com/playlist?list=PLbdS49WKsrOXTo_X_Ja6P3zll1yyhoIYN)

## Help

If you need to help more than this documentation: 
 - You can join our [Discord Channel](https://discord.gg/TnjA2GqYmw) then ask your questions
 - Access to our [Tabbs page](https://tailadmin.tabbs.co/) for how to make links (Install in Linux, solution of the npm errors etc.)

## Featured :

- TailwindCSS
- Vue.js 3 Laravel 12 - JetStream Inertia
- Every component are well documented
- Easy usability
- Simple and short code blocks
- A lot of customization options for every component
- Responsive, you can use with all devices
- Custom Auth Pages: Login, Register, Profile, Lock
- Unique Form Inputs: Repeatable Fields, Select(Rich Content) and Date
- Completely UI Kit
- Statistic Widgets for Summary or Small Data Windows
- It works with FontAwesome
- ### Content Components :
    - Alert 
    - Avatar / Avatar Group for Team Lists 
    - Badge 
    - Breadcrumb 
    - Buttons 
    - Content Card
    - Collapsible Content
    - Dropdowns
    - Lists 
    - Modals 
    - Pagination
    - Popovers 
    - Progress 
    - Statistic Widgets
    - Tabs 
    - FrontEnd Table
    - BackEnd Table 
      - With Dynamic Query Builder
      - Auto generated advanced search fields
      - Sort 
      - Show-hide columns
    - Tooltips

- ### Form Components :
    - Form Content 
    - Form Section 
    - Input Group 
    - HTML Inputs 
    - Text Input
    - Selectable Text Input (Combo)
    - File Input
    - Checkbox
    - Radio
    - Text Area
    - Select
    - Multi Select
    - Repeatable Fields
    - Date/Calendar Input
    - Between Input

> :rocket:  We are going to make the big updates about app because this theme is using in our projects therefore the updates will be continuous

---

### Partners and Sponsors

## GitAds Sponsored
[![Sponsored by GitAds](https://gitads.dev/v1/ad-serve?source=sinan-aydogan/tailadmin-laravel@github)](https://gitads.dev/v1/ad-track?source=sinan-aydogan/tailadmin-laravel@github)

> :metal: If you want to support us, you can send a mail to us via [admin@tailadmin.dev](mailto:admin@tailadmin.dev)

---

### Major External Sources

- [Tailwind](https://tailwindcss.com/)
- [Vue](https://vuejs.org/)
- [Fontawesome](https://fontawesome.com/)

### Minor External Sources

Please see package.json

---
License
------
The TailAdmin is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).


[![Ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/sinanaydogan)
[![BuyMeACoffee](public/img/demo/bmc-button.png)](https://www.buymeacoffee.com/sinanaydogan)

<!-- GitAds-Verify: XU4WES5HAT2HRC3LCB7K9L4CQZ4CIAN8 -->


================================================
FILE: app/Actions/Fortify/CreateNewUser.php
================================================
<?php

namespace App\Actions\Fortify;

use App\Models\Team;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Laravel\Jetstream\Jetstream;

class CreateNewUser implements CreatesNewUsers
{
    use PasswordValidationRules;

    /**
     * Create a newly registered user.
     *
     * @param  array<string, string>  $input
     */
    public function create(array $input): User
    {
        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => $this->passwordRules(),
            'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
        ])->validate();

        return DB::transaction(function () use ($input) {
            return tap(User::create([
                'name' => $input['name'],
                'email' => $input['email'],
                'password' => Hash::make($input['password']),
            ]), function (User $user) {
                $this->createTeam($user);
            });
        });
    }

    /**
     * Create a personal team for the user.
     */
    protected function createTeam(User $user): void
    {
        $user->ownedTeams()->save(Team::forceCreate([
            'user_id' => $user->id,
            'name' => explode(' ', $user->name, 2)[0]."'s Team",
            'personal_team' => true,
        ]));
    }
}


================================================
FILE: app/Actions/Fortify/PasswordValidationRules.php
================================================
<?php

namespace App\Actions\Fortify;

use Illuminate\Validation\Rules\Password;

trait PasswordValidationRules
{
    /**
     * Get the validation rules used to validate passwords.
     *
     * @return array<int, \Illuminate\Contracts\Validation\Rule|array<mixed>|string>
     */
    protected function passwordRules(): array
    {
        return ['required', 'string', Password::default(), 'confirmed'];
    }
}


================================================
FILE: app/Actions/Fortify/ResetUserPassword.php
================================================
<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\ResetsUserPasswords;

class ResetUserPassword implements ResetsUserPasswords
{
    use PasswordValidationRules;

    /**
     * Validate and reset the user's forgotten password.
     *
     * @param  array<string, string>  $input
     */
    public function reset(User $user, array $input): void
    {
        Validator::make($input, [
            'password' => $this->passwordRules(),
        ])->validate();

        $user->forceFill([
            'password' => Hash::make($input['password']),
        ])->save();
    }
}


================================================
FILE: app/Actions/Fortify/UpdateUserPassword.php
================================================
<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\UpdatesUserPasswords;

class UpdateUserPassword implements UpdatesUserPasswords
{
    use PasswordValidationRules;

    /**
     * Validate and update the user's password.
     *
     * @param  array<string, string>  $input
     */
    public function update(User $user, array $input): void
    {
        Validator::make($input, [
            'current_password' => ['required', 'string', 'current_password:web'],
            'password' => $this->passwordRules(),
        ], [
            'current_password.current_password' => __('The provided password does not match your current password.'),
        ])->validateWithBag('updatePassword');

        $user->forceFill([
            'password' => Hash::make($input['password']),
        ])->save();
    }
}


================================================
FILE: app/Actions/Fortify/UpdateUserProfileInformation.php
================================================
<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;

class UpdateUserProfileInformation implements UpdatesUserProfileInformation
{
    /**
     * Validate and update the given user's profile information.
     *
     * @param  array<string, mixed>  $input
     */
    public function update(User $user, array $input): void
    {
        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
            'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
        ])->validateWithBag('updateProfileInformation');

        if (isset($input['photo'])) {
            $user->updateProfilePhoto($input['photo']);
        }

        if ($input['email'] !== $user->email &&
            $user instanceof MustVerifyEmail) {
            $this->updateVerifiedUser($user, $input);
        } else {
            $user->forceFill([
                'name' => $input['name'],
                'email' => $input['email'],
            ])->save();
        }
    }

    /**
     * Update the given verified user's profile information.
     *
     * @param  array<string, string>  $input
     */
    protected function updateVerifiedUser(User $user, array $input): void
    {
        $user->forceFill([
            'name' => $input['name'],
            'email' => $input['email'],
            'email_verified_at' => null,
        ])->save();

        $user->sendEmailVerificationNotification();
    }
}


================================================
FILE: app/Actions/Jetstream/AddTeamMember.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use App\Models\User;
use Closure;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Laravel\Jetstream\Contracts\AddsTeamMembers;
use Laravel\Jetstream\Events\AddingTeamMember;
use Laravel\Jetstream\Events\TeamMemberAdded;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\Rules\Role;

class AddTeamMember implements AddsTeamMembers
{
    /**
     * Add a new team member to the given team.
     */
    public function add(User $user, Team $team, string $email, ?string $role = null): void
    {
        Gate::forUser($user)->authorize('addTeamMember', $team);

        $this->validate($team, $email, $role);

        $newTeamMember = Jetstream::findUserByEmailOrFail($email);

        AddingTeamMember::dispatch($team, $newTeamMember);

        $team->users()->attach(
            $newTeamMember, ['role' => $role]
        );

        TeamMemberAdded::dispatch($team, $newTeamMember);
    }

    /**
     * Validate the add member operation.
     */
    protected function validate(Team $team, string $email, ?string $role): void
    {
        Validator::make([
            'email' => $email,
            'role' => $role,
        ], $this->rules(), [
            'email.exists' => __('We were unable to find a registered user with this email address.'),
        ])->after(
            $this->ensureUserIsNotAlreadyOnTeam($team, $email)
        )->validateWithBag('addTeamMember');
    }

    /**
     * Get the validation rules for adding a team member.
     *
     * @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
     */
    protected function rules(): array
    {
        return array_filter([
            'email' => ['required', 'email', 'exists:users'],
            'role' => Jetstream::hasRoles()
                            ? ['required', 'string', new Role]
                            : null,
        ]);
    }

    /**
     * Ensure that the user is not already on the team.
     */
    protected function ensureUserIsNotAlreadyOnTeam(Team $team, string $email): Closure
    {
        return function ($validator) use ($team, $email) {
            $validator->errors()->addIf(
                $team->hasUserWithEmail($email),
                'email',
                __('This user already belongs to the team.')
            );
        };
    }
}


================================================
FILE: app/Actions/Jetstream/CreateTeam.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Laravel\Jetstream\Contracts\CreatesTeams;
use Laravel\Jetstream\Events\AddingTeam;
use Laravel\Jetstream\Jetstream;

class CreateTeam implements CreatesTeams
{
    /**
     * Validate and create a new team for the given user.
     *
     * @param  array<string, string>  $input
     */
    public function create(User $user, array $input): Team
    {
        Gate::forUser($user)->authorize('create', Jetstream::newTeamModel());

        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
        ])->validateWithBag('createTeam');

        AddingTeam::dispatch($user);

        $user->switchTeam($team = $user->ownedTeams()->create([
            'name' => $input['name'],
            'personal_team' => false,
        ]));

        return $team;
    }
}


================================================
FILE: app/Actions/Jetstream/DeleteTeam.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use Laravel\Jetstream\Contracts\DeletesTeams;

class DeleteTeam implements DeletesTeams
{
    /**
     * Delete the given team.
     */
    public function delete(Team $team): void
    {
        $team->purge();
    }
}


================================================
FILE: app/Actions/Jetstream/DeleteUser.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Laravel\Jetstream\Contracts\DeletesTeams;
use Laravel\Jetstream\Contracts\DeletesUsers;

class DeleteUser implements DeletesUsers
{
    /**
     * Create a new action instance.
     */
    public function __construct(protected DeletesTeams $deletesTeams)
    {
    }

    /**
     * Delete the given user.
     */
    public function delete(User $user): void
    {
        DB::transaction(function () use ($user) {
            $this->deleteTeams($user);
            $user->deleteProfilePhoto();
            $user->tokens->each->delete();
            $user->delete();
        });
    }

    /**
     * Delete the teams and team associations attached to the user.
     */
    protected function deleteTeams(User $user): void
    {
        $user->teams()->detach();

        $user->ownedTeams->each(function (Team $team) {
            $this->deletesTeams->delete($team);
        });
    }
}


================================================
FILE: app/Actions/Jetstream/InviteTeamMember.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use App\Models\User;
use Closure;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Jetstream\Contracts\InvitesTeamMembers;
use Laravel\Jetstream\Events\InvitingTeamMember;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\Mail\TeamInvitation;
use Laravel\Jetstream\Rules\Role;

class InviteTeamMember implements InvitesTeamMembers
{
    /**
     * Invite a new team member to the given team.
     */
    public function invite(User $user, Team $team, string $email, ?string $role = null): void
    {
        Gate::forUser($user)->authorize('addTeamMember', $team);

        $this->validate($team, $email, $role);

        InvitingTeamMember::dispatch($team, $email, $role);

        $invitation = $team->teamInvitations()->create([
            'email' => $email,
            'role' => $role,
        ]);

        Mail::to($email)->send(new TeamInvitation($invitation));
    }

    /**
     * Validate the invite member operation.
     */
    protected function validate(Team $team, string $email, ?string $role): void
    {
        Validator::make([
            'email' => $email,
            'role' => $role,
        ], $this->rules($team), [
            'email.unique' => __('This user has already been invited to the team.'),
        ])->after(
            $this->ensureUserIsNotAlreadyOnTeam($team, $email)
        )->validateWithBag('addTeamMember');
    }

    /**
     * Get the validation rules for inviting a team member.
     *
     * @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
     */
    protected function rules(Team $team): array
    {
        return array_filter([
            'email' => [
                'required', 'email',
                Rule::unique(Jetstream::teamInvitationModel())->where(function (Builder $query) use ($team) {
                    $query->where('team_id', $team->id);
                }),
            ],
            'role' => Jetstream::hasRoles()
                            ? ['required', 'string', new Role]
                            : null,
        ]);
    }

    /**
     * Ensure that the user is not already on the team.
     */
    protected function ensureUserIsNotAlreadyOnTeam(Team $team, string $email): Closure
    {
        return function ($validator) use ($team, $email) {
            $validator->errors()->addIf(
                $team->hasUserWithEmail($email),
                'email',
                __('This user already belongs to the team.')
            );
        };
    }
}


================================================
FILE: app/Actions/Jetstream/RemoveTeamMember.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Gate;
use Illuminate\Validation\ValidationException;
use Laravel\Jetstream\Contracts\RemovesTeamMembers;
use Laravel\Jetstream\Events\TeamMemberRemoved;

class RemoveTeamMember implements RemovesTeamMembers
{
    /**
     * Remove the team member from the given team.
     */
    public function remove(User $user, Team $team, User $teamMember): void
    {
        $this->authorize($user, $team, $teamMember);

        $this->ensureUserDoesNotOwnTeam($teamMember, $team);

        $team->removeUser($teamMember);

        TeamMemberRemoved::dispatch($team, $teamMember);
    }

    /**
     * Authorize that the user can remove the team member.
     */
    protected function authorize(User $user, Team $team, User $teamMember): void
    {
        if (! Gate::forUser($user)->check('removeTeamMember', $team) &&
            $user->id !== $teamMember->id) {
            throw new AuthorizationException;
        }
    }

    /**
     * Ensure that the currently authenticated user does not own the team.
     */
    protected function ensureUserDoesNotOwnTeam(User $teamMember, Team $team): void
    {
        if ($teamMember->id === $team->owner->id) {
            throw ValidationException::withMessages([
                'team' => [__('You may not leave a team that you created.')],
            ])->errorBag('removeTeamMember');
        }
    }
}


================================================
FILE: app/Actions/Jetstream/UpdateTeamName.php
================================================
<?php

namespace App\Actions\Jetstream;

use App\Models\Team;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Laravel\Jetstream\Contracts\UpdatesTeamNames;

class UpdateTeamName implements UpdatesTeamNames
{
    /**
     * Validate and update the given team's name.
     *
     * @param  array<string, string>  $input
     */
    public function update(User $user, Team $team, array $input): void
    {
        Gate::forUser($user)->authorize('update', $team);

        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
        ])->validateWithBag('updateTeamName');

        $team->forceFill([
            'name' => $input['name'],
        ])->save();
    }
}


================================================
FILE: app/Actions/TailAdmin/UpdateDarkModePreference.php
================================================
<?php

declare(strict_types=1);

namespace App\Actions\TailAdmin;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rules\In;

final class UpdateDarkModePreference
{
    /**
     * Dark mode options available in the application.
     */
    private const DARK_MODE_OPTIONS = ['light', 'dark', 'auto'];

    /**
     * Validate and update the authenticated user's dark mode preference.
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function update(Request $request): void
    {
        $validated = $request->validateWithBag('updateDarkModePreference', [
            'dark_mode' => ['required', new In(self::DARK_MODE_OPTIONS)],
        ]);

        /** @var User $user */
        $user = Auth::user();

        $user->update([
            'dark_mode' => $validated['dark_mode'],
        ]);
    }

    /**
     * Get available dark mode options.
     *
     * @return array<string>
     */
    public static function getAvailableOptions(): array
    {
        return self::DARK_MODE_OPTIONS;
    }
}


================================================
FILE: app/Actions/TailAdmin/UpdateUserLanguage.php
================================================
<?php

declare(strict_types=1);

namespace App\Actions\TailAdmin;

use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rules\In;

final class UpdateUserLanguage
{
    /**
     * Supported language codes in the application.
     */
    private const SUPPORTED_LANGUAGES = [
       'bg', 'de', 'en', 'fr', 'ru', 'tr', 'zh_CN'
    ];

    /**
     * Validate and update the authenticated user's preferred language.
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function update(Request $request): void
    {
        $validated = $request->validateWithBag('updatePreferredLanguage', [
            'language' => [
                'required',
                'string',
                'max:5',
                new In(self::SUPPORTED_LANGUAGES)
            ],
        ]);

        /** @var User $user */
        $user = Auth::user();

        $user->update([
            'language' => $validated['language'],
        ]);

        $this->setApplicationLocale($validated['language'], $request);
    }

    /**
     * Set the application and Carbon locale.
     */
    private function setApplicationLocale(string $language, Request $request): void
    {
        App::setLocale($language);

        // Set Carbon locale with fallback handling
        $this->setCarbonLocale($language, $request);
    }

    /**
     * Set Carbon locale with proper format and fallback.
     */
    private function setCarbonLocale(string $language, Request $request): void
    {
        try {
            // Get session locale or use language as fallback
            $sessionLocale = $request->session()->get('locale', $language);

            // Format: language_COUNTRY.UTF-8 (e.g., tr_TR.UTF-8)
            $carbonLocale = sprintf(
                '%s_%s.UTF-8',
                $language,
                strtoupper($sessionLocale)
            );

            Carbon::setLocale($carbonLocale);
        } catch (\Exception $e) {
            // Fallback to just language code if full locale fails
            Carbon::setLocale($language);
        }
    }

    /**
     * Get supported language codes.
     *
     * @return array<string>
     */
    public static function getSupportedLanguages(): array
    {
        return self::SUPPORTED_LANGUAGES;
    }

    /**
     * Check if a language is supported.
     */
    public static function isLanguageSupported(string $language): bool
    {
        return in_array($language, self::SUPPORTED_LANGUAGES, true);
    }
}


================================================
FILE: app/Http/Controllers/Controller.php
================================================
<?php

namespace App\Http\Controllers;

abstract class Controller
{
    //
}


================================================
FILE: app/Http/Controllers/DemoContentController.php
================================================
<?php

namespace App\Http\Controllers;

use App\Http\Resources\DemoContentResource;
use App\Models\DemoContent;
use Illuminate\Http\Request;
use Inertia\Inertia;

class DemoContentController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Inertia\Response
     */
    public function index(Request $request)
    {
        $demoContent = DemoContentResource::collection(DemoContent::tableSearch($request->input('demoSearch')));

        return Inertia::render('Samples/Components/BackEndTable', [
            'demoContent' => $demoContent,
            'searchDataMainProducts' => DemoContent::getRelatedData('main_product_id', 'demo_contents')->get()
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * 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\DemoContent  $demoContent
     * @return \Illuminate\Http\Response
     */
    public function show(DemoContent $demoContent)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\DemoContent  $demoContent
     * @return \Illuminate\Http\Response
     */
    public function edit(DemoContent $demoContent)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\DemoContent  $demoContent
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, DemoContent $demoContent)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\DemoContent  $demoContent
     * @return \Illuminate\Http\Response
     */
    public function destroy(DemoContent $demoContent)
    {
        //
    }
}


================================================
FILE: app/Http/Controllers/PermissionGroupController.php
================================================
<?php

namespace App\Http\Controllers;

use App\Models\PermissionGroup;
use App\Http\Requests\StorePermissionGroupRequest;
use App\Http\Requests\UpdatePermissionGroupRequest;

class PermissionGroupController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \App\Http\Requests\StorePermissionGroupRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StorePermissionGroupRequest $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\PermissionGroup  $permissionGroup
     * @return \Illuminate\Http\Response
     */
    public function show(PermissionGroup $permissionGroup)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\PermissionGroup  $permissionGroup
     * @return \Illuminate\Http\Response
     */
    public function edit(PermissionGroup $permissionGroup)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \App\Http\Requests\UpdatePermissionGroupRequest  $request
     * @param  \App\Models\PermissionGroup  $permissionGroup
     * @return \Illuminate\Http\Response
     */
    public function update(UpdatePermissionGroupRequest $request, PermissionGroup $permissionGroup)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\PermissionGroup  $permissionGroup
     * @return \Illuminate\Http\Response
     */
    public function destroy(PermissionGroup $permissionGroup)
    {
        //
    }
}


================================================
FILE: app/Http/Controllers/Settings/PermissionController.php
================================================
<?php

namespace App\Http\Controllers\Settings;

use App\Http\Controllers\Controller;
use App\Models\PermissionGroup;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Spatie\Permission\Models\Permission;

class PermissionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Inertia\Response
     */
    public function index(Request $request)
    {
        return Inertia::render('Settings/Permission/Index', [
            'permissionGroups' => PermissionGroup::all(),
            'permissions' => Permission::tableSearch($request->input('searchObj'))
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Inertia\Response
     */
    public function create()
    {
        return Inertia::render('Settings/Permission/Create');
    }

    /**
     * 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  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}


================================================
FILE: app/Http/Controllers/Settings/RoleController.php
================================================
<?php

namespace App\Http\Controllers\Settings;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Inertia\Inertia;
use Spatie\Permission\Models\Role;

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Inertia\Response
     */
    public function index(Request $request)
    {
        return Inertia::render('Settings/Role/Index',[
            'Roles' => Role::tableSearch($request->input('searchObj'))
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Inertia\Response
     */
    public function create()
    {
        return Inertia::render('Settings/Role/Create');
    }

    /**
     * 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  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $role = Role::find($id);
        if($role->name != 'Super Admin'){
            Role::destroy($id);
            Session::flash('toastr', ['type' => 'gradient-red-to-pink', 'position' => 'rb','content' => '<b>'.$role->name. '</b> deleted']);
            return redirect()->back() ;
        }else{
            Session::flash('toastr', ['type' => 'solid-yellow', 'position' => 'rb','content' => '<b>You can\'t delete the super admin role</b>']);
            return redirect()->back() ;
        }
    }
}


================================================
FILE: app/Http/Controllers/Settings/SystemController.php
================================================
<?php

namespace App\Http\Controllers\Settings;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Inertia\Inertia;

class SystemController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Inertia\Response
     */
    public function index()
    {
        return Inertia::render('Settings/System');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * 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  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}


================================================
FILE: app/Http/Controllers/Settings/UserController.php
================================================
<?php

namespace App\Http\Controllers\Settings;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Inertia\Inertia;
use Spatie\Permission\Models\Role;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Inertia\Response
     */
    public function index(Request $request)
    {
        return Inertia::render('Settings/User',[
            'role' => Role::all(['id','name']),
            'users'=> User::tableSearch($request->input('searchObj'))
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * 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  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if($id != 1){
            $user = User::find($id);
            User::destroy($id);
            Session::flash('toastr', ['type' => 'gradient-red-to-pink', 'position' => 'rb','content' => '<b>'.$user->name. '</b> deleted']);
            return redirect()->back() ;
        }else{
            Session::flash('toastr', ['type' => 'solid-yellow', 'position' => 'rb','content' => '<b>You can\'t delete the admin</b>']);
            return redirect()->back() ;
        }
    }
}


================================================
FILE: app/Http/Middleware/HandleInertiaRequests.php
================================================
<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Session;
use Inertia\Middleware;
use Tighten\Ziggy\Ziggy;

final class HandleInertiaRequests extends Middleware
{
    /**
     * The root template that is loaded on the first page visit.
     */
    protected $rootView = 'app';

    /**
     * Cache duration for user permissions and roles (in minutes).
     */
    private const CACHE_DURATION = 60;

    /**
     * Determine the current asset version.
     */
    public function version(Request $request): ?string
    {
        return parent::version($request);
    }

    /**
     * Define the props that are shared by default.
     *
     * @return array<string, mixed>
     */
    public function share(Request $request): array
    {
        $data =[
            ...parent::share($request),
            'user_extra' => $this->getAuthenticatedUserData(),
            'ziggy' => $this->getZiggyData($request),
            'flash' => $this->getFlashMessages(),
        ];

        return $data;
    }

    /**
     * Get Ziggy routing data with location.
     *
     * @return \Closure(): array<string, mixed>
     */
    private function getZiggyData(Request $request)
    {
        return fn() => [
            ...(new Ziggy)->toArray(),
            'location' => $request->url(),
        ];
    }

    /**
     * Get flash messages from session.
     *
     * @return array<string, \Closure>
     */
    private function getFlashMessages(): array
    {
        return [
            'message' => fn() => Session::get('message'),
            'toastr' => fn() => Session::get('toastr'),
        ];
    }

    /**
     * Get current application locale.
     *
     * @return \Closure(): string|null
     */
    private function getCurrentLocale()
    {
        return fn() => Session::get('locale', app()->getLocale());
    }

    /**
     * Get authenticated user's roles with caching.
     *
     * @return array<string, mixed>
     */
    private function getUserRoles()
    {
        if (!Auth::check()) {
            return [];
        }

        $userId = Auth::id();
        $cacheKey = "user_roles_{$userId}";

        $data = Auth::user()?->getRoleNames()->toArray() ?? [];

        Cache::put($cacheKey, $data, self::CACHE_DURATION);

        return $data;
    }

    /**
     * Get authenticated user's permissions with caching.
     *
     * @return array<string, mixed>
     */
    private function getUserPermissions()
    {
        if (!Auth::check()) {
            return [];
        }

        $userId = Auth::id();
        $cacheKey = "user_permissions_{$userId}";

        $data = Auth::user()?->getAllPermissions()->pluck('name')->toArray() ?? [];

        Cache::put($cacheKey, $data, self::CACHE_DURATION);

        return $data;
    }

    /**
     * Get authenticated user data with essential information and caching.
     *
     * @return array<string, mixed>
     */
    private function getAuthenticatedUserData()
    {
        if (!Auth::check()) {
            return [];
        }

        $userId = Auth::id();
        $cacheKey = "user_data_{$userId}";

        if (! $userId) {
            return [];
        }

        $user = Auth::user();

        $data = [
            'lang' => $user->language ?? app()->getLocale(),
            'dark_mode' => $user->dark_mode ?? 'auto',
            'cached_at' => now()->toISOString(),
            'roles' => $this->getUserRoles(),
            'permissions' => $this->getUserPermissions(),
        ];

        Cache::put($cacheKey, $data, self::CACHE_DURATION);

        return $data;
    }

    /**
     * Clear all cached data for a specific user.
     * Call this method when user data is updated.
     */
    public static function clearUserCache(int $userId): void
    {
        $cacheKeys = [
            "user_data_{$userId}",
            "user_roles_{$userId}",
            "user_permissions_{$userId}",
        ];

        foreach ($cacheKeys as $key) {
            Cache::forget($key);
        }
    }

    /**
     * Clear cache for the currently authenticated user.
     */
    public static function clearCurrentUserCache(): void
    {
        if (Auth::check()) {
            self::clearUserCache(Auth::id());
        }
    }
}


================================================
FILE: app/Http/Middleware/LocalizationMiddleware.php
================================================
<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use App\Actions\TailAdmin\UpdateUserLanguage;
use Carbon\Carbon;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Symfony\Component\HttpFoundation\Response;

final class LocalizationMiddleware
{
    /**
     * Handle an incoming request.
     */
    public function handle(Request $request, Closure $next): Response
    {
        // Get session locale if available
        $sessionLocale = $request->session()->get('locale');

        if ($sessionLocale && UpdateUserLanguage::isLanguageSupported($sessionLocale)) {
            $this->setApplicationLocale($sessionLocale, $request);
        }

        return $next($request);
    }

    /**
     * Set the application and Carbon locale.
     */
    private function setApplicationLocale(string $language, Request $request): void
    {
        App::setLocale($language);
        $this->setCarbonLocale($language, $request);
    }

    /**
     * Set Carbon locale with proper format and fallback.
     */
    private function setCarbonLocale(string $language, Request $request): void
    {
        try {
            // Get session locale or use language as fallback
            $sessionLocale = $request->session()->get('locale', $language);

            // Format: language_COUNTRY.UTF-8 (e.g., tr_TR.UTF-8)
            $carbonLocale = sprintf(
                '%s_%s.UTF-8',
                $language,
                strtoupper($sessionLocale)
            );

            Carbon::setLocale($carbonLocale);
        } catch (\Exception $e) {
            // Fallback to just language code if full locale fails
            Carbon::setLocale($language);
        }
    }
}



================================================
FILE: app/Http/Requests/StorePermissionGroupRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePermissionGroupRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
     */
    public function rules(): array
    {
        return [
            //
        ];
    }
}


================================================
FILE: app/Http/Requests/UpdatePermissionGroupRequest.php
================================================
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdatePermissionGroupRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
     */
    public function rules(): array
    {
        return [
            //
        ];
    }
}


================================================
FILE: app/Http/Resources/DemoContentResource.php
================================================
<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class DemoContentResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'price' => $this->price,
            'production_date' => $this->production_date,
            'main_product_id' => $this->main_product_id,
            'main_product_name' => $this->mainProduct->name,
            'type' => $this->type,
            'status' => $this->status,
        ];
    }
}


================================================
FILE: app/Models/DemoContent.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class DemoContent extends Model
{
    use HasFactory;

    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */
    protected $fillable = ['name', 'type', 'price', 'production_date', 'status'];

    /**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'production_date' => 'datetime',
    ];

    /**
     * Get the main demo content associated with the demo content.
     */
    public function mainProduct(): \Illuminate\Database\Eloquent\Relations\BelongsTo
    {
        return $this->belongsTo(DemoContent::class);
    }
}


================================================
FILE: app/Models/Membership.php
================================================
<?php

namespace App\Models;

use Laravel\Jetstream\Membership as JetstreamMembership;

class Membership extends JetstreamMembership
{
    /**
     * Indicates if the IDs are auto-incrementing.
     *
     * @var bool
     */
    public $incrementing = true;
}


================================================
FILE: app/Models/PermissionGroup.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Models\Permission;

class PermissionGroup extends Model
{
    use HasFactory;

    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */
    protected $fillable = [
        'name',
        'description'
    ];

    /**
     * Get the permissions associated with the permission group.
     */
    public function permissions()
    {
        return $this->hasMany(Permission::class);
    }
}


================================================
FILE: app/Models/Team.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Laravel\Jetstream\Events\TeamCreated;
use Laravel\Jetstream\Events\TeamDeleted;
use Laravel\Jetstream\Events\TeamUpdated;
use Laravel\Jetstream\Team as JetstreamTeam;

class Team extends JetstreamTeam
{
    /** @use HasFactory<\Database\Factories\TeamFactory> */
    use HasFactory;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'personal_team',
    ];

    /**
     * The event map for the model.
     *
     * @var array<string, class-string>
     */
    protected $dispatchesEvents = [
        'created' => TeamCreated::class,
        'updated' => TeamUpdated::class,
        'deleted' => TeamDeleted::class,
    ];

    /**
     * Get the attributes that should be cast.
     *
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'personal_team' => 'boolean',
        ];
    }
}


================================================
FILE: app/Models/TeamInvitation.php
================================================
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Jetstream\Jetstream;
use Laravel\Jetstream\TeamInvitation as JetstreamTeamInvitation;

class TeamInvitation extends JetstreamTeamInvitation
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'email',
        'role',
    ];

    /**
     * Get the team that the invitation belongs to.
     */
    public function team(): BelongsTo
    {
        return $this->belongsTo(Jetstream::teamModel());
    }
}


================================================
FILE: app/Models/User.php
================================================
<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Jetstream\HasTeams;
use Laravel\Sanctum\HasApiTokens;
/*Spatie Permissions Package*/
use Spatie\Permission\Traits\HasRoles;


class User extends Authenticatable
{
    use HasApiTokens;

    /** @use HasFactory<\Database\Factories\UserFactory> */
    use HasFactory;
    use HasProfilePhoto;
    use HasTeams;
    use Notifiable;
    use TwoFactorAuthenticatable;
    /*Spatie Permissions Package*/
    use HasRoles;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
        'language',
        'dark_mode',
        'theme',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
        'two_factor_recovery_codes',
        'two_factor_secret',
    ];

    /**
     * The accessors to append to the model's array form.
     *
     * @var array<int, string>
     */
    protected $appends = [
        'profile_photo_url',
    ];

    /**
     * Get the attributes that should be cast.
     *
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}


================================================
FILE: app/Policies/DemoContentPolicy.php
================================================
<?php

namespace App\Policies;

use App\Models\DemoContent;
use App\Models\User;
use Illuminate\Auth\Access\Response;

class DemoContentPolicy
{
    /**
     * Determine whether the user can view any models.
     */
    public function viewAny(User $user): bool
    {
        //
    }

    /**
     * Determine whether the user can view the model.
     */
    public function view(User $user, DemoContent $demoContent): bool
    {
        //
    }

    /**
     * Determine whether the user can create models.
     */
    public function create(User $user): bool
    {
        //
    }

    /**
     * Determine whether the user can update the model.
     */
    public function update(User $user, DemoContent $demoContent): bool
    {
        //
    }

    /**
     * Determine whether the user can delete the model.
     */
    public function delete(User $user, DemoContent $demoContent): bool
    {
        //
    }

    /**
     * Determine whether the user can restore the model.
     */
    public function restore(User $user, DemoContent $demoContent): bool
    {
        //
    }

    /**
     * Determine whether the user can permanently delete the model.
     */
    public function forceDelete(User $user, DemoContent $demoContent): bool
    {
        //
    }
}


================================================
FILE: app/Policies/PermissionGroupPolicy.php
================================================
<?php

namespace App\Policies;

use App\Models\PermissionGroup;
use App\Models\User;
use Illuminate\Auth\Access\Response;

class PermissionGroupPolicy
{
    /**
     * Determine whether the user can view any models.
     */
    public function viewAny(User $user): bool
    {
        //
    }

    /**
     * Determine whether the user can view the model.
     */
    public function view(User $user, PermissionGroup $permissionGroup): bool
    {
        //
    }

    /**
     * Determine whether the user can create models.
     */
    public function create(User $user): bool
    {
        //
    }

    /**
     * Determine whether the user can update the model.
     */
    public function update(User $user, PermissionGroup $permissionGroup): bool
    {
        //
    }

    /**
     * Determine whether the user can delete the model.
     */
    public function delete(User $user, PermissionGroup $permissionGroup): bool
    {
        //
    }

    /**
     * Determine whether the user can restore the model.
     */
    public function restore(User $user, PermissionGroup $permissionGroup): bool
    {
        //
    }

    /**
     * Determine whether the user can permanently delete the model.
     */
    public function forceDelete(User $user, PermissionGroup $permissionGroup): bool
    {
        //
    }
}


================================================
FILE: app/Policies/TeamPolicy.php
================================================
<?php

namespace App\Policies;

use App\Models\Team;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class TeamPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can view any models.
     */
    public function viewAny(User $user): bool
    {
        return true;
    }

    /**
     * Determine whether the user can view the model.
     */
    public function view(User $user, Team $team): bool
    {
        return $user->belongsToTeam($team);
    }

    /**
     * Determine whether the user can create models.
     */
    public function create(User $user): bool
    {
        return true;
    }

    /**
     * Determine whether the user can update the model.
     */
    public function update(User $user, Team $team): bool
    {
        return $user->ownsTeam($team);
    }

    /**
     * Determine whether the user can add team members.
     */
    public function addTeamMember(User $user, Team $team): bool
    {
        return $user->ownsTeam($team);
    }

    /**
     * Determine whether the user can update team member permissions.
     */
    public function updateTeamMember(User $user, Team $team): bool
    {
        return $user->ownsTeam($team);
    }

    /**
     * Determine whether the user can remove team members.
     */
    public function removeTeamMember(User $user, Team $team): bool
    {
        return $user->ownsTeam($team);
    }

    /**
     * Determine whether the user can delete the model.
     */
    public function delete(User $user, Team $team): bool
    {
        return $user->ownsTeam($team);
    }
}


================================================
FILE: app/Providers/AppServiceProvider.php
================================================
<?php

namespace App\Providers;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        //Max key length error fix
        Schema::defaultStringLength(191);

        /*Super Admin*/
        Gate::before(function ($user, $ability) {
            return $user->hasRole('Super Admin') ? true : null;
        });

        Builder::macro('tableSearch', function ($request) {
            $request = (object)$request;
            $perPage = (isset($request->perPage)) ? $request->perPage : 5;

            if (key($request)) {

                $searchValue = (object)$request->searchValue;

                if ($request->searchType === "simple") {


                    /*Simple Search*/
                    $searchQuery = $this->when($searchValue->simpleSearchText, function ($query) use ($searchValue) {
                        foreach ($searchValue->simpleSearchFields as $field) {
                            $query->orWhere($field, 'like', '%' . $searchValue->simpleSearchText . '%');
                        }
                    });

                } else {

                    /*Compare Commands*/
                    function compareCondition($condition, $searchValue): array
                    {

                        $searchQuery = [];

                        switch ($condition) {

                            case 'contains' :
                                $searchQuery['condition'] = 'like';
                                $searchQuery['value'] = "%" . $searchValue . "%";
                                break;

                            case 'notContains' :
                                $searchQuery['condition'] = 'not like';
                                $searchQuery['value'] = "%" . $searchValue . "%";
                                break;

                            case 'starts' :
                                $searchQuery['condition'] = 'like';
                                $searchQuery['value'] = $searchValue . "%";
                                break;

                            case 'ends' :
                                $searchQuery['condition'] = 'like';
                                $searchQuery['value'] = "%" . $searchValue;
                                break;

                            case '>' :
                                $searchQuery['condition'] = '>';
                                $searchQuery['value'] = $searchValue;
                                break;

                            case '>=' :
                                $searchQuery['condition'] = '>=';
                                $searchQuery['value'] = $searchValue;
                                break;

                            case '<' :
                                $searchQuery['condition'] = '<';
                                $searchQuery['value'] = $searchValue;
                                break;

                            case '<=' :

                                $searchQuery['condition'] = '<=';
                                $searchQuery['value'] = $searchValue;
                                break;

                            case 'between' :

                                $searchQuery['condition'] = 'between';
                                $searchQuery['value'] = [$searchValue['from'], $searchValue['to']];
                                break;

                            default:

                                $searchQuery['condition'] = '=';
                                $searchQuery['value'] = $searchValue;
                        }

                        return $searchQuery;
                    }

                    /*Advanced Search*/
                    foreach ($searchValue as $key => $value) {

                        $field = compareCondition($value['condition'], $value['value']);

                        if ($value['condition'] === "between") {
                            $whenTrigger = $value['value']['from'] !== null || $value['value']['to'] !== null;
                        } else {
                            $whenTrigger = isset($value['value']);
                        }

                        $searchQuery = $this->when($whenTrigger, function ($query) use ($key, $field, $value) {
                            if ($value['condition'] === "between") {
                                $query->whereBetween($key, $field['value']);
                            } else {
                                $query->where($key, $field['condition'], $field['value']);
                            }
                        });

                    }

                }

                /*Order Function*/
                if ($request->sortDirection) {
                    $sortDirection = 'desc';
                } else {
                    $sortDirection = 'asc';
                }

                if ($request->sortKey) {
                    $searchQuery->orderBy($request->sortKey, $sortDirection);
                }

            } else {
                $searchQuery = $this;
            }


            return $searchQuery->paginate($perPage);
        });

        /*Get Related Data*/
        Builder::macro('getRelatedData', function ($key, $table) {
            return $this->whereIn('id', function ($query) use ($key, $table) {
                $query->select($key)
                    ->from($table)
                    ->distinct();
            });
        }
        );
    }
}


================================================
FILE: app/Providers/FortifyServiceProvider.php
================================================
<?php

namespace App\Providers;

use App\Actions\Fortify\CreateNewUser;
use App\Actions\Fortify\ResetUserPassword;
use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Laravel\Fortify\Fortify;

class FortifyServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Fortify::createUsersUsing(CreateNewUser::class);
        Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
        Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
        Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
        Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class);

        RateLimiter::for('login', function (Request $request) {
            $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());

            return Limit::perMinute(5)->by($throttleKey);
        });

        RateLimiter::for('two-factor', function (Request $request) {
            return Limit::perMinute(5)->by($request->session()->get('login.id'));
        });
    }
}


================================================
FILE: app/Providers/JetstreamServiceProvider.php
================================================
<?php

namespace App\Providers;

use App\Actions\Jetstream\AddTeamMember;
use App\Actions\Jetstream\CreateTeam;
use App\Actions\Jetstream\DeleteTeam;
use App\Actions\Jetstream\DeleteUser;
use App\Actions\Jetstream\InviteTeamMember;
use App\Actions\Jetstream\RemoveTeamMember;
use App\Actions\Jetstream\UpdateTeamName;
use Illuminate\Support\ServiceProvider;
use Laravel\Jetstream\Jetstream;

class JetstreamServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        $this->configurePermissions();

        Jetstream::createTeamsUsing(CreateTeam::class);
        Jetstream::updateTeamNamesUsing(UpdateTeamName::class);
        Jetstream::addTeamMembersUsing(AddTeamMember::class);
        Jetstream::inviteTeamMembersUsing(InviteTeamMember::class);
        Jetstream::removeTeamMembersUsing(RemoveTeamMember::class);
        Jetstream::deleteTeamsUsing(DeleteTeam::class);
        Jetstream::deleteUsersUsing(DeleteUser::class);
    }

    /**
     * Configure the roles and permissions that are available within the application.
     */
    protected function configurePermissions(): void
    {
        Jetstream::defaultApiTokenPermissions(['read']);

        Jetstream::role('admin', 'Administrator', [
            'create',
            'read',
            'update',
            'delete',
        ])->description('Administrator users can perform any action.');

        Jetstream::role('editor', 'Editor', [
            'read',
            'create',
            'update',
        ])->description('Editor users have the ability to read, create, and update.');
    }
}


================================================
FILE: artisan
================================================
#!/usr/bin/env php
<?php

use Symfony\Component\Console\Input\ArgvInput;

define('LARAVEL_START', microtime(true));

// Register the Composer autoloader...
require __DIR__.'/vendor/autoload.php';

// Bootstrap Laravel and handle the command...
$status = (require_once __DIR__.'/bootstrap/app.php')
    ->handleCommand(new ArgvInput);

exit($status);


================================================
FILE: bootstrap/app.php
================================================
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware): void {
        $middleware->web(append: [
            \App\Http\Middleware\HandleInertiaRequests::class,
            \App\Http\Middleware\LocalizationMiddleware::class,
            \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
        ]);

        //
    })
    ->withExceptions(function (Exceptions $exceptions): void {
        //
    })->create();


================================================
FILE: bootstrap/cache/.gitignore
================================================
*
!.gitignore


================================================
FILE: bootstrap/providers.php
================================================
<?php

return [
    App\Providers\AppServiceProvider::class,
    App\Providers\FortifyServiceProvider::class,
    App\Providers\JetstreamServiceProvider::class,
];


================================================
FILE: composer.json
================================================
{
    "name": "sinan-aydogan/tailadmin-laravel",
    "type": "project",
    "description": "TailAdmin is a dashboard theme / UI starter kit with Laravel, TailwindCSS, Inertia and VueJS",
    "keywords": ["laravel", "admin", "dashboard", "starter kit", "component", "monolit", "admin panel", "tailadmin", "framework"],
    "license": "MIT",
    "require": {
        "php": "^8.2",
        "inertiajs/inertia-laravel": "^2.0",
        "laravel/framework": "^12.0",
        "laravel/jetstream": "^5.3",
        "laravel/sanctum": "^4.0",
        "laravel/tinker": "^2.10.1",
        "tightenco/ziggy": "^2.0",
        "spatie/laravel-permission": "^6.9"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.13",
        "fakerphp/faker": "^1.23",
        "laravel-lang/common": "^6.4",
        "laravel/pail": "^1.2.2",
        "laravel/pint": "^1.24",
        "laravel/sail": "^1.41",
        "mockery/mockery": "^1.6",
        "nunomaduro/collision": "^8.6",
        "pestphp/pest": "^4.1",
        "pestphp/pest-plugin-laravel": "^4.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi",
            "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
            "@php artisan migrate --graceful --ansi"
        ],
        "dev": [
            "Composer\\Config::disableProcessTimeout",
            "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
        ],
        "test": [
            "@php artisan config:clear --ansi",
            "@php artisan test"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true,
            "php-http/discovery": true
        }
    },
    "minimum-stability": "stable",
    "prefer-stable": true
}


================================================
FILE: config/app.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Application Name
    |--------------------------------------------------------------------------
    |
    | This value is the name of your application, which will be used when the
    | framework needs to place the application's name in a notification or
    | other UI elements where an application name needs to be displayed.
    |
    */

    'name' => env('APP_NAME', 'TailAdmin'),

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services the application utilizes. Set this in your ".env" file.
    |
    */

    'env' => env('APP_ENV', 'production'),

    /*
    |--------------------------------------------------------------------------
    | Application Debug Mode
    |--------------------------------------------------------------------------
    |
    | When your application is in debug mode, detailed error messages with
    | stack traces will be shown on every error that occurs within your
    | application. If disabled, a simple generic error page is shown.
    |
    */

    'debug' => (bool) env('APP_DEBUG', false),

    /*
    |--------------------------------------------------------------------------
    | Application URL
    |--------------------------------------------------------------------------
    |
    | This URL is used by the console to properly generate URLs when using
    | the Artisan command line tool. You should set this to the root of
    | the application so that it's available within Artisan commands.
    |
    */

    'url' => env('APP_URL', 'http://localhost'),

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. The timezone
    | is set to "UTC" by default as it is suitable for most use cases.
    |
    */

    'timezone' => env('APP_TIMEZONE', 'UTC'),

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by Laravel's translation / localization methods. This option can be
    | set to any locale for which you plan to have translation strings.
    |
    */

    'locale' => env('APP_LOCALE', 'en'),

    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),

    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),

    /*
    |--------------------------------------------------------------------------
    | Encryption Key
    |--------------------------------------------------------------------------
    |
    | This key is utilized by Laravel's encryption services and should be set
    | to a random, 32 character string to ensure that all encrypted values
    | are secure. You should do this prior to deploying the application.
    |
    */

    'cipher' => 'AES-256-CBC',

    'key' => env('APP_KEY'),

    'previous_keys' => [
        ...array_filter(
            explode(',', env('APP_PREVIOUS_KEYS', ''))
        ),
    ],

    /*
    |--------------------------------------------------------------------------
    | Maintenance Mode Driver
    |--------------------------------------------------------------------------
    |
    | These configuration options determine the driver used to determine and
    | manage Laravel's "maintenance mode" status. The "cache" driver will
    | allow maintenance mode to be controlled across multiple machines.
    |
    | Supported drivers: "file", "cache"
    |
    */

    'maintenance' => [
        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
        'store' => env('APP_MAINTENANCE_STORE', 'database'),
    ],

];


================================================
FILE: config/auth.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option defines the default authentication "guard" and password
    | reset "broker" for your application. You may change these values
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => env('AUTH_GUARD', 'web'),
        'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | which utilizes session storage plus the Eloquent user provider.
    |
    | All authentication guards have a user provider, which defines how the
    | users are actually retrieved out of your database or other storage
    | system used by the application. Typically, Eloquent is utilized.
    |
    | Supported: "session"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication guards have a user provider, which defines how the
    | users are actually retrieved out of your database or other storage
    | system used by the application. Typically, Eloquent is utilized.
    |
    | If you have multiple user tables or models you may configure multiple
    | providers to represent the model / table. These providers may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', App\Models\User::class),
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | These configuration options specify the behavior of Laravel's password
    | reset functionality, including the table utilized for token storage
    | and the user provider that is invoked to actually retrieve users.
    |
    | The expiry time is the number of minutes that each reset token will be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    | The throttle setting is the number of seconds a user must wait before
    | generating more password reset tokens. This prevents the user from
    | quickly generating a very large amount of password reset tokens.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | window expires and users are asked to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),

];


================================================
FILE: config/cache.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Cache Store
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache store that will be used by the
    | framework. This connection is utilized if another isn't explicitly
    | specified when running a cache operation inside the application.
    |
    */

    'default' => env('CACHE_STORE', 'database'),

    /*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | well as their drivers. You may even define multiple stores for the
    | same cache driver to group types of items stored in your caches.
    |
    | Supported drivers: "array", "database", "file", "memcached",
    |                    "redis", "dynamodb", "octane", "null"
    |
    */

    'stores' => [

        'array' => [
            'driver' => 'array',
            'serialize' => false,
        ],

        'database' => [
            'driver' => 'database',
            'connection' => env('DB_CACHE_CONNECTION'),
            'table' => env('DB_CACHE_TABLE', 'cache'),
            'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
            'lock_table' => env('DB_CACHE_LOCK_TABLE'),
        ],

        'file' => [
            'driver' => 'file',
            'path' => storage_path('framework/cache/data'),
            'lock_path' => storage_path('framework/cache/data'),
        ],

        'memcached' => [
            'driver' => 'memcached',
            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
            'sasl' => [
                env('MEMCACHED_USERNAME'),
                env('MEMCACHED_PASSWORD'),
            ],
            'options' => [
                // Memcached::OPT_CONNECT_TIMEOUT => 2000,
            ],
            'servers' => [
                [
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                    'port' => env('MEMCACHED_PORT', 11211),
                    'weight' => 100,
                ],
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
            'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
        ],

        'dynamodb' => [
            'driver' => 'dynamodb',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
            'endpoint' => env('DYNAMODB_ENDPOINT'),
        ],

        'octane' => [
            'driver' => 'octane',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing the APC, database, memcached, Redis, and DynamoDB cache
    | stores, there might be other applications using the same cache. For
    | that reason, you may prefix every cache key to avoid collisions.
    |
    */

    'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),

];


================================================
FILE: config/database.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for database operations. This is
    | the connection which will be utilized unless another connection
    | is explicitly specified when you execute a query / statement.
    |
    */

    'default' => env('DB_CONNECTION', 'sqlite'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Below are all of the database connections defined for your application.
    | An example configuration is provided for each database system which
    | is supported by Laravel. You're free to add / remove connections.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DB_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
            'busy_timeout' => null,
            'journal_mode' => null,
            'synchronous' => null,
            'transaction_mode' => 'DEFERRED',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => env('DB_CHARSET', 'utf8mb4'),
            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => 'InnoDb',
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'mariadb' => [
            'driver' => 'mariadb',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => env('DB_CHARSET', 'utf8mb4'),
            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => env('DB_CHARSET', 'utf8'),
            'prefix' => '',
            'prefix_indexes' => true,
            'search_path' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => env('DB_CHARSET', 'utf8'),
            'prefix' => '',
            'prefix_indexes' => true,
            // 'encrypt' => env('DB_ENCRYPT', 'yes'),
            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run on the database.
    |
    */

    'migrations' => [
        'table' => 'migrations',
        'update_date_on_publish' => true,
    ],

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer body of commands than a typical key-value system
    | such as Memcached. You may define your connection settings here.
    |
    */

    'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
            'persistent' => env('REDIS_PERSISTENT', false),
        ],

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', '0'),
            'max_retries' => env('REDIS_MAX_RETRIES', 3),
            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME'),
            'password' => env('REDIS_PASSWORD'),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
            'max_retries' => env('REDIS_MAX_RETRIES', 3),
            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
        ],

    ],

];


================================================
FILE: config/debugbar.php
================================================
<?php

return [

    /*
     |--------------------------------------------------------------------------
     | Debugbar Settings
     |--------------------------------------------------------------------------
     |
     | Debugbar is enabled by default, when debug is set to true in app.php.
     | You can override the value by setting enable to true or false instead of null.
     |
     | You can provide an array of URI's that must be ignored (eg. 'api/*')
     |
     */

    'enabled' => env('DEBUGBAR_ENABLED', null),
    'except' => [
        'telescope*',
        'horizon*',
    ],

    /*
     |--------------------------------------------------------------------------
     | Storage settings
     |--------------------------------------------------------------------------
     |
     | DebugBar stores data for session/ajax requests.
     | You can disable this, so the debugbar stores data in headers/session,
     | but this can cause problems with large data collectors.
     | By default, file storage (in the storage folder) is used. Redis and PDO
     | can also be used. For PDO, run the package migrations first.
     |
     | Warning: Enabling storage.open will allow everyone to access previous
     | request, do not enable open storage in publicly available environments!
     | Specify a callback if you want to limit based on IP or authentication.
     | Leaving it to null will allow localhost only.
     */
    'storage' => [
        'enabled'    => true,
        'open'       => env('DEBUGBAR_OPEN_STORAGE'), // bool/callback.
        'driver'     => 'file', // redis, file, pdo, socket, custom
        'path'       => storage_path('debugbar'), // For file driver
        'connection' => null,   // Leave null for default connection (Redis/PDO)
        'provider'   => '', // Instance of StorageInterface for custom driver
        'hostname'   => '127.0.0.1', // Hostname to use with the "socket" driver
        'port'       => 2304, // Port to use with the "socket" driver
    ],

    /*
    |--------------------------------------------------------------------------
    | Editor
    |--------------------------------------------------------------------------
    |
    | Choose your preferred editor to use when clicking file name.
    |
    | Supported: "phpstorm", "vscode", "vscode-insiders", "vscode-remote",
    |            "vscode-insiders-remote", "vscodium", "textmate", "emacs",
    |            "sublime", "atom", "nova", "macvim", "idea", "netbeans",
    |            "xdebug", "espresso"
    |
    */

    'editor' => env('DEBUGBAR_EDITOR') ?: env('IGNITION_EDITOR', 'phpstorm'),

    /*
    |--------------------------------------------------------------------------
    | Remote Path Mapping
    |--------------------------------------------------------------------------
    |
    | If you are using a remote dev server, like Laravel Homestead, Docker, or
    | even a remote VPS, it will be necessary to specify your path mapping.
    |
    | Leaving one, or both of these, empty or null will not trigger the remote
    | URL changes and Debugbar will treat your editor links as local files.
    |
    | "remote_sites_path" is an absolute base path for your sites or projects
    | in Homestead, Vagrant, Docker, or another remote development server.
    |
    | Example value: "/home/vagrant/Code"
    |
    | "local_sites_path" is an absolute base path for your sites or projects
    | on your local computer where your IDE or code editor is running on.
    |
    | Example values: "/Users/<name>/Code", "C:\Users\<name>\Documents\Code"
    |
    */

    'remote_sites_path' => env('DEBUGBAR_REMOTE_SITES_PATH'),
    'local_sites_path' => env('DEBUGBAR_LOCAL_SITES_PATH', env('IGNITION_LOCAL_SITES_PATH')),

    /*
     |--------------------------------------------------------------------------
     | Vendors
     |--------------------------------------------------------------------------
     |
     | Vendor files are included by default, but can be set to false.
     | This can also be set to 'js' or 'css', to only include javascript or css vendor files.
     | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
     | and for js: jquery and highlight.js
     | So if you want syntax highlighting, set it to true.
     | jQuery is set to not conflict with existing jQuery scripts.
     |
     */

    'include_vendors' => true,

    /*
     |--------------------------------------------------------------------------
     | Capture Ajax Requests
     |--------------------------------------------------------------------------
     |
     | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),
     | you can use this option to disable sending the data through the headers.
     |
     | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.
     |
     | Note for your request to be identified as ajax requests they must either send the header
     | X-Requested-With with the value XMLHttpRequest (most JS libraries send this), or have application/json as a Accept header.
     |
     | By default `ajax_handler_auto_show` is set to true allowing ajax requests to be shown automatically in the Debugbar.
     | Changing `ajax_handler_auto_show` to false will prevent the Debugbar from reloading.
     */

    'capture_ajax' => true,
    'add_ajax_timing' => false,
    'ajax_handler_auto_show' => true,
    'ajax_handler_enable_tab' => true,

    /*
     |--------------------------------------------------------------------------
     | Custom Error Handler for Deprecated warnings
     |--------------------------------------------------------------------------
     |
     | When enabled, the Debugbar shows deprecated warnings for Symfony components
     | in the Messages tab.
     |
     */
    'error_handler' => false,

    /*
     |--------------------------------------------------------------------------
     | Clockwork integration
     |--------------------------------------------------------------------------
     |
     | The Debugbar can emulate the Clockwork headers, so you can use the Chrome
     | Extension, without the server-side code. It uses Debugbar collectors instead.
     |
     */
    'clockwork' => false,

    /*
     |--------------------------------------------------------------------------
     | DataCollectors
     |--------------------------------------------------------------------------
     |
     | Enable/disable DataCollectors
     |
     */

    'collectors' => [
        'phpinfo'         => true,  // Php version
        'messages'        => true,  // Messages
        'time'            => true,  // Time Datalogger
        'memory'          => true,  // Memory usage
        'exceptions'      => true,  // Exception displayer
        'log'             => true,  // Logs from Monolog (merged in messages if enabled)
        'db'              => true,  // Show database (PDO) queries and bindings
        'views'           => true,  // Views with their data
        'route'           => true,  // Current route information
        'auth'            => false, // Display Laravel authentication status
        'gate'            => true,  // Display Laravel Gate checks
        'session'         => true,  // Display session data
        'symfony_request' => true,  // Only one can be enabled..
        'mail'            => true,  // Catch mail messages
        'laravel'         => false, // Laravel version and environment
        'events'          => false, // All events fired
        'default_request' => false, // Regular or special Symfony request logger
        'logs'            => false, // Add the latest log messages
        'files'           => false, // Show the included files
        'config'          => false, // Display config settings
        'cache'           => false, // Display cache events
        'models'          => true,  // Display models
        'livewire'        => true,  // Display Livewire (when available)
        'jobs'            => true, // Display dispatched jobs
    ],

    /*
     |--------------------------------------------------------------------------
     | Extra options
     |--------------------------------------------------------------------------
     |
     | Configure some DataCollectors
     |
     */

    'options' => [
        'time' => [
            'memory_usage' => false,  // Calculated by subtracting memory start and end, it may be inaccurate
        ],
        'messages' => [
            'trace' => true,   // Trace the origin of the debug message
        ],
        'memory' => [
            'reset_peak' => false,     // run memory_reset_peak_usage before collecting
            'with_baseline' => false,  // Set boot memory usage as memory peak baseline
            'precision' => 0,          // Memory rounding precision
        ],
        'auth' => [
            'show_name' => true,   // Also show the users name/email in the debugbar
            'show_guards' => true, // Show the guards that are used
        ],
        'db' => [
            'with_params'       => true,   // Render SQL with the parameters substituted
            'backtrace'         => true,   // Use a backtrace to find the origin of the query in your files.
            'backtrace_exclude_paths' => [],   // Paths to exclude from backtrace. (in addition to defaults)
            'timeline'          => false,  // Add the queries to the timeline
            'duration_background'  => true,   // Show shaded background on each query relative to how long it took to execute.
            'explain' => [                 // Show EXPLAIN output on queries
                'enabled' => false,
                'types' => ['SELECT'],     // Deprecated setting, is always only SELECT
            ],
            'hints'             => false,    // Show hints for common mistakes
            'show_copy'         => false,    // Show copy button next to the query,
            'slow_threshold'    => false,   // Only track queries that last longer than this time in ms
            'memory_usage'      => false,   // Show queries memory usage
            'soft_limit'       => 100,      // After the soft limit, no parameters/backtrace are captured
            'hard_limit'       => 500,      // After the hard limit, queries are ignored
        ],
        'mail' => [
            'timeline' => false,  // Add mails to the timeline
            'show_body' => true,
        ],
        'views' => [
            'timeline' => false,    // Add the views to the timeline (Experimental)
            'data' => false,        //true for all data, 'keys' for only names, false for no parameters.
            'group' => 50,          // Group duplicate views. Pass value to auto-group, or true/false to force
            'exclude_paths' => [    // Add the paths which you don't want to appear in the views
                'vendor/filament'   // Exclude Filament components by default
            ],
        ],
        'route' => [
            'label' => true,  // show complete route on bar
        ],
        'session' => [
            'hiddens' => [], // hides sensitive values using array paths
        ],
        'symfony_request' => [
            'hiddens' => [], // hides sensitive values using array paths, example: request_request.password
        ],
        'events' => [
            'data' => true, // collect events data, listeners
        ],
        'logs' => [
            'file' => null,
        ],
        'cache' => [
            'values' => true, // collect cache values
        ],
    ],

    /*
     |--------------------------------------------------------------------------
     | Inject Debugbar in Response
     |--------------------------------------------------------------------------
     |
     | Usually, the debugbar is added just before </body>, by listening to the
     | Response after the App is done. If you disable this, you have to add them
     | in your template yourself. See http://phpdebugbar.com/docs/rendering.html
     |
     */

    'inject' => true,

    /*
     |--------------------------------------------------------------------------
     | DebugBar route prefix
     |--------------------------------------------------------------------------
     |
     | Sometimes you want to set route prefix to be used by DebugBar to load
     | its resources from. Usually the need comes from misconfigured web server or
     | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
     |
     */
    'route_prefix' => '_debugbar',

    /*
     |--------------------------------------------------------------------------
     | DebugBar route middleware
     |--------------------------------------------------------------------------
     |
     | Additional middleware to run on the Debugbar routes
     */
    'route_middleware' => [],

    /*
     |--------------------------------------------------------------------------
     | DebugBar route domain
     |--------------------------------------------------------------------------
     |
     | By default DebugBar route served from the same domain that request served.
     | To override default domain, specify it as a non-empty value.
     */
    'route_domain' => null,

    /*
     |--------------------------------------------------------------------------
     | DebugBar theme
     |--------------------------------------------------------------------------
     |
     | Switches between light and dark theme. If set to auto it will respect system preferences
     | Possible values: auto, light, dark
     */
    'theme' => env('DEBUGBAR_THEME', 'auto'),

    /*
     |--------------------------------------------------------------------------
     | Backtrace stack limit
     |--------------------------------------------------------------------------
     |
     | By default, the DebugBar limits the number of frames returned by the 'debug_backtrace()' function.
     | If you need larger stacktraces, you can increase this number. Setting it to 0 will result in no limit.
     */
    'debug_backtrace_limit' => 50,
];


================================================
FILE: config/filesystems.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. The "local" disk, as well as a variety of cloud
    | based disks are available to your application for file storage.
    |
    */

    'default' => env('FILESYSTEM_DISK', 'local'),

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Below you may configure as many filesystem disks as necessary, and you
    | may even configure multiple disks for the same driver. Examples for
    | most supported storage drivers are configured here for reference.
    |
    | Supported drivers: "local", "ftp", "sftp", "s3"
    |
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app/private'),
            'serve' => true,
            'throw' => false,
            'report' => false,
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
            'throw' => false,
            'report' => false,
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
            'throw' => false,
            'report' => false,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Symbolic Links
    |--------------------------------------------------------------------------
    |
    | Here you may configure the symbolic links that will be created when the
    | `storage:link` Artisan command is executed. The array keys should be
    | the locations of the links and the values should be their targets.
    |
    */

    'links' => [
        public_path('storage') => storage_path('app/public'),
    ],

];


================================================
FILE: config/fortify.php
================================================
<?php

use Laravel\Fortify\Features;

return [

    /*
    |--------------------------------------------------------------------------
    | Fortify Guard
    |--------------------------------------------------------------------------
    |
    | Here you may specify which authentication guard Fortify will use while
    | authenticating users. This value should correspond with one of your
    | guards that is already present in your "auth" configuration file.
    |
    */

    'guard' => 'web',

    /*
    |--------------------------------------------------------------------------
    | Fortify Password Broker
    |--------------------------------------------------------------------------
    |
    | Here you may specify which password broker Fortify can use when a user
    | is resetting their password. This configured value should match one
    | of your password brokers setup in your "auth" configuration file.
    |
    */

    'passwords' => 'users',

    /*
    |--------------------------------------------------------------------------
    | Username / Email
    |--------------------------------------------------------------------------
    |
    | This value defines which model attribute should be considered as your
    | application's "username" field. Typically, this might be the email
    | address of the users but you are free to change this value here.
    |
    | Out of the box, Fortify expects forgot password and reset password
    | requests to have a field named 'email'. If the application uses
    | another name for the field you may define it below as needed.
    |
    */

    'username' => 'email',

    'email' => 'email',

    /*
    |--------------------------------------------------------------------------
    | Lowercase Usernames
    |--------------------------------------------------------------------------
    |
    | This value defines whether usernames should be lowercased before saving
    | them in the database, as some database system string fields are case
    | sensitive. You may disable this for your application if necessary.
    |
    */

    'lowercase_usernames' => true,

    /*
    |--------------------------------------------------------------------------
    | Home Path
    |--------------------------------------------------------------------------
    |
    | Here you may configure the path where users will get redirected during
    | authentication or password reset when the operations are successful
    | and the user is authenticated. You are free to change this value.
    |
    */

    'home' => '/',

    /*
    |--------------------------------------------------------------------------
    | Fortify Routes Prefix / Subdomain
    |--------------------------------------------------------------------------
    |
    | Here you may specify which prefix Fortify will assign to all the routes
    | that it registers with the application. If necessary, you may change
    | subdomain under which all of the Fortify routes will be available.
    |
    */

    'prefix' => '',

    'domain' => null,

    /*
    |--------------------------------------------------------------------------
    | Fortify Routes Middleware
    |--------------------------------------------------------------------------
    |
    | Here you may specify which middleware Fortify will assign to the routes
    | that it registers with the application. If necessary, you may change
    | these middleware but typically this provided default is preferred.
    |
    */

    'middleware' => ['web'],

    /*
    |--------------------------------------------------------------------------
    | Rate Limiting
    |--------------------------------------------------------------------------
    |
    | By default, Fortify will throttle logins to five requests per minute for
    | every email and IP address combination. However, if you would like to
    | specify a custom rate limiter to call then you may specify it here.
    |
    */

    'limiters' => [
        'login' => 'login',
        'two-factor' => 'two-factor',
    ],

    /*
    |--------------------------------------------------------------------------
    | Register View Routes
    |--------------------------------------------------------------------------
    |
    | Here you may specify if the routes returning views should be disabled as
    | you may not need them when building your own application. This may be
    | especially true if you're writing a custom single-page application.
    |
    */

    'views' => true,

    /*
    |--------------------------------------------------------------------------
    | Features
    |--------------------------------------------------------------------------
    |
    | Some of the Fortify features are optional. You may disable the features
    | by removing them from this array. You're free to only remove some of
    | these features or you can even remove all of these if you need to.
    |
    */

    'features' => [
        Features::registration(),
        Features::resetPasswords(),
        // Features::emailVerification(),
        Features::updateProfileInformation(),
        Features::updatePasswords(),
        Features::twoFactorAuthentication([
            'confirm' => true,
            'confirmPassword' => true,
            // 'window' => 0,
        ]),
    ],

];


================================================
FILE: config/jetstream.php
================================================
<?php

use Laravel\Jetstream\Features;
use Laravel\Jetstream\Http\Middleware\AuthenticateSession;

return [

    /*
    |--------------------------------------------------------------------------
    | Jetstream Stack
    |--------------------------------------------------------------------------
    |
    | This configuration value informs Jetstream which "stack" you will be
    | using for your application. In general, this value is set for you
    | during installation and will not need to be changed after that.
    |
    */

    'stack' => 'inertia',

    /*
    |--------------------------------------------------------------------------
    | Jetstream Route Middleware
    |--------------------------------------------------------------------------
    |
    | Here you may specify which middleware Jetstream will assign to the routes
    | that it registers with the application. When necessary, you may modify
    | these middleware; however, this default value is usually sufficient.
    |
    */

    'middleware' => ['web'],

    'auth_session' => AuthenticateSession::class,

    /*
    |--------------------------------------------------------------------------
    | Jetstream Guard
    |--------------------------------------------------------------------------
    |
    | Here you may specify the authentication guard Jetstream will use while
    | authenticating users. This value should correspond with one of your
    | guards that is already present in your "auth" configuration file.
    |
    */

    'guard' => 'sanctum',

    /*
    |--------------------------------------------------------------------------
    | Features
    |--------------------------------------------------------------------------
    |
    | Some of Jetstream's features are optional. You may disable the features
    | by removing them from this array. You're free to only remove some of
    | these features or you can even remove all of these if you need to.
    |
    */

    'features' => [
        // Features::termsAndPrivacyPolicy(),
        Features::profilePhotos(),
        Features::api(),
        Features::teams(['invitations' => true]),
        Features::accountDeletion(),
    ],

    /*
    |--------------------------------------------------------------------------
    | Profile Photo Disk
    |--------------------------------------------------------------------------
    |
    | This configuration value determines the default disk that will be used
    | when storing profile photos for your application's users. Typically
    | this will be the "public" disk but you may adjust this if needed.
    |
    */

    'profile_photo_disk' => 'public',

];


================================================
FILE: config/localization.php
================================================
<?php

declare(strict_types=1);

use LaravelLang\Config\Constants\RouteName;
use LaravelLang\LocaleList\Locale;

return [
    /*
     * Determines what type of files to use when updating language files.
     *
     * @see https://laravel-lang.com/configuration.html#inline
     *
     * By default, `false`.
     */

    'inline' => (bool) env('LOCALIZATION_INLINE', env('LANG_PUBLISHER_INLINE')),

    /*
     * Do arrays need to be aligned by keys before processing arrays?
     *
     * @see https://laravel-lang.com/configuration.html#alignment
     *
     * By default, true
     */

    'align' => (bool) env('LOCALIZATION_ALIGN', env('LANG_PUBLISHER_ALIGN', true)),

    /*
     * The language codes chosen for the files in this repository may not
     * match the preferences for your project.
     *
     * Specify here mappings of localizations with your project.
     *
     * @see https://laravel-lang.com/configuration.html#aliases
     */

    'aliases' => [
        // \LaravelLang\LocaleList\Locale::German->value => 'de-DE',
        // \LaravelLang\LocaleList\Locale::GermanSwitzerland->value => 'de-CH',
    ],

    /*
     * This option determines the mechanism for converting translation
     * keys into a typographic version.
     *
     * @see https://laravel-lang.com/configuration.html#smart_punctuation
     *
     * By default, false
     */

    'smart_punctuation' => [
        'enable' => (bool) env('LOCALIZATION_SMART_ENABLED', false),

        'common' => [
            'double_quote_opener' => '“',
            'double_quote_closer' => '”',
            'single_quote_opener' => '‘',
            'single_quote_closer' => '’',
        ],

        'locales' => [
            Locale::French->value => [
                'double_quote_opener' => '«&nbsp;',
                'double_quote_closer' => '&nbsp;»',
                'single_quote_opener' => '‘',
                'single_quote_closer' => '’',
            ],

            Locale::Russian->value => [
                'double_quote_opener' => '«',
                'double_quote_closer' => '»',
                'single_quote_opener' => '‘',
                'single_quote_closer' => '’',
            ],

            Locale::Ukrainian->value => [
                'double_quote_opener' => '«',
                'double_quote_closer' => '»',
                'single_quote_opener' => '‘',
                'single_quote_closer' => '’',
            ],

            Locale::Belarusian->value => [
                'double_quote_opener' => '«',
                'double_quote_closer' => '»',
                'single_quote_opener' => '‘',
                'single_quote_closer' => '’',
            ],
        ],
    ],

    /*
     * This option defines the application's route settings.
     *
     * @see https://laravel-lang.com/configuration.html#routes
     */

    'routes' => [
        /*
         * This option defines the settings for the key names used when working with application routing.
         *
         * Default values:
         *
         *   parameter - locale
         *   header    - X-Localization
         *   cookie    - X-Localization
         *   session   - X-Localization
         *   column    - column
         */

        'names' => [
            'parameter' => RouteName::Parameter,
            'header'    => RouteName::Header,
            'cookie'    => RouteName::Cookie,
            'session'   => RouteName::Session,
            'column'    => RouteName::Column,
        ],

        /*
         * This option specifies the prefix of route group names.
         *
         * By default, `localized.`
         */

        'name_prefix' => env('LOCALIZATION_NAME_PREFIX', 'localized.'),

        /*
         * This option specifies the request redirection option when trying to open the default localization.
         *
         * Applies when using the `LaravelLang\Routes\Facades\LocalizationRoute` facade.
         */

        'redirect_default' => (bool) env('LOCALIZATION_REDIRECT_DEFAULT', false),
    ],

    /*
     * This option defines settings for working with model translations.
     *
     * @see https://laravel-lang.com/configuration.html#models
     */

    'models' => [
        /*
         * This option specifies a suffix for models containing translations.
         *
         * For example,
         *   main model is `App\Models\Page`
         *   translation model is `App\Models\PageTranslation`
         *
         * By default, `Translation`
         */

        'suffix' => 'Translation',

        /*
         * This option specifies a folder to store helper files for the IDE.
         *
         * By default, `vendor/_laravel_lang`
         */

        'helpers' => env('VENDOR_PATH', base_path('vendor/_laravel_lang')),
    ],

    /*
     * This option contains a list of translators that the Laravel Lang Translator project works with.
     *
     * Google Translate is enabled by default.
     *
     * @see https://laravel-lang.com/configuration.html#translators
     */

    'translators' => [
        /*
         * List of channels used for translations.
         *
         * By default,
         *
         *     Google is enabled
         *     Deepl  is disabled
         *     Yandex is disabled
         */

        'channels' => [
            'google' => [
                'translator' => '\LaravelLang\Translator\Integrations\Google',

                'enabled'  => (bool) env('TRANSLATION_GOOGLE_ENABLED', true),
                'priority' => (int) env('TRANSLATION_GOOGLE_PRIORITY', 1),
            ],

            'deepl' => [
                'translator' => '\LaravelLang\Translator\Integrations\Deepl',

                'enabled'  => (bool) env('TRANSLATION_DEEPL_ENABLED', false),
                'priority' => (int) env('TRANSLATION_DEEPL_PRIORITY', 2),

                'credentials' => [
                    'key' => (string) env('TRANSLATION_DEEPL_KEY'),
                ],
            ],

            'yandex' => [
                'translator' => '\LaravelLang\Translator\Integrations\Yandex',

                'enabled'  => (bool) env('TRANSLATION_YANDEX_ENABLED', false),
                'priority' => (int) env('TRANSLATION_YANDEX_PRIORITY', 3),

                'credentials' => [
                    'key'    => (string) env('TRANSLATION_YANDEX_KEY'),
                    'folder' => (string) env('TRANSLATION_YANDEX_FOLDER_ID'),
                ],
            ],
        ],

        'options' => [
            /*
             * Set a custom pattern for extracting replaceable keywords from the string,
             * default to extracting words prefixed with a colon.
             *
             *  Available options:
             *
             *     `true` is a `/:(\w+)/`
             *     `false` will disable regular expression processing
             *      `/any regex/` - any regular expression you specify
             *
             *   By default, `true`
             *
             * @example (e.g. "Hello :name" will extract "name")
             */

            'preserve_parameters' => true,
        ],
    ],
];


================================================
FILE: config/logging.php
================================================
<?php

use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
use Monolog\Processor\PsrLogMessageProcessor;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Log Channel
    |--------------------------------------------------------------------------
    |
    | This option defines the default log channel that is utilized to write
    | messages to your logs. The value provided here should match one of
    | the channels present in the list of "channels" configured below.
    |
    */

    'default' => env('LOG_CHANNEL', 'stack'),

    /*
    |--------------------------------------------------------------------------
    | Deprecations Log Channel
    |--------------------------------------------------------------------------
    |
    | This option controls the log channel that should be used to log warnings
    | regarding deprecated PHP and library features. This allows you to get
    | your application ready for upcoming major versions of dependencies.
    |
    */

    'deprecations' => [
        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
        'trace' => env('LOG_DEPRECATIONS_TRACE', false),
    ],

    /*
    |--------------------------------------------------------------------------
    | Log Channels
    |--------------------------------------------------------------------------
    |
    | Here you may configure the log channels for your application. Laravel
    | utilizes the Monolog PHP logging library, which includes a variety
    | of powerful log handlers and formatters that you're free to use.
    |
    | Available drivers: "single", "daily", "slack", "syslog",
    |                    "errorlog", "monolog", "custom", "stack"
    |
    */

    'channels' => [

        'stack' => [
            'driver' => 'stack',
            'channels' => explode(',', (string) env('LOG_STACK', 'single')),
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
            'replace_placeholders' => true,
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
            'days' => env('LOG_DAILY_DAYS', 14),
            'replace_placeholders' => true,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
            'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
            'level' => env('LOG_LEVEL', 'critical'),
            'replace_placeholders' => true,
        ],

        'papertrail' => [
            'driver' => 'monolog',
            'level' => env('LOG_LEVEL', 'debug'),
            'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
            'handler_with' => [
                'host' => env('PAPERTRAIL_URL'),
                'port' => env('PAPERTRAIL_PORT'),
                'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
            ],
            'processors' => [PsrLogMessageProcessor::class],
        ],

        'stderr' => [
            'driver' => 'monolog',
            'level' => env('LOG_LEVEL', 'debug'),
            'handler' => StreamHandler::class,
            'handler_with' => [
                'stream' => 'php://stderr',
            ],
            'formatter' => env('LOG_STDERR_FORMATTER'),
            'processors' => [PsrLogMessageProcessor::class],
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => env('LOG_LEVEL', 'debug'),
            'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
            'replace_placeholders' => true,
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => env('LOG_LEVEL', 'debug'),
            'replace_placeholders' => true,
        ],

        'null' => [
            'driver' => 'monolog',
            'handler' => NullHandler::class,
        ],

        'emergency' => [
            'path' => storage_path('logs/laravel.log'),
        ],

    ],

];


================================================
FILE: config/mail.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Mailer
    |--------------------------------------------------------------------------
    |
    | This option controls the default mailer that is used to send all email
    | messages unless another mailer is explicitly specified when sending
    | the message. All additional mailers can be configured within the
    | "mailers" array. Examples of each type of mailer are provided.
    |
    */

    'default' => env('MAIL_MAILER', 'log'),

    /*
    |--------------------------------------------------------------------------
    | Mailer Configurations
    |--------------------------------------------------------------------------
    |
    | Here you may configure all of the mailers used by your application plus
    | their respective settings. Several examples have been configured for
    | you and you are free to add your own as your application requires.
    |
    | Laravel supports a variety of mail "transport" drivers that can be used
    | when delivering an email. You may specify which one you're using for
    | your mailers below. You may also add additional mailers if needed.
    |
    | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
    |            "postmark", "resend", "log", "array",
    |            "failover", "roundrobin"
    |
    */

    'mailers' => [

        'smtp' => [
            'transport' => 'smtp',
            'scheme' => env('MAIL_SCHEME'),
            'url' => env('MAIL_URL'),
            'host' => env('MAIL_HOST', '127.0.0.1'),
            'port' => env('MAIL_PORT', 2525),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'postmark' => [
            'transport' => 'postmark',
            // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
            // 'client' => [
            //     'timeout' => 5,
            // ],
        ],

        'resend' => [
            'transport' => 'resend',
        ],

        'sendmail' => [
            'transport' => 'sendmail',
            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
        ],

        'log' => [
            'transport' => 'log',
            'channel' => env('MAIL_LOG_CHANNEL'),
        ],

        'array' => [
            'transport' => 'array',
        ],

        'failover' => [
            'transport' => 'failover',
            'mailers' => [
                'smtp',
                'log',
            ],
            'retry_after' => 60,
        ],

        'roundrobin' => [
            'transport' => 'roundrobin',
            'mailers' => [
                'ses',
                'postmark',
            ],
            'retry_after' => 60,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all emails sent by your application to be sent from
    | the same address. Here you may specify a name and address that is
    | used globally for all emails that are sent by your application.
    |
    */

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

];


================================================
FILE: config/permission.php
================================================
<?php

return [

    'models' => [

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * Eloquent model should be used to retrieve your permissions. Of course, it
         * is often just the "Permission" model but you may use whatever you like.
         *
         * The model you want to use as a Permission model needs to implement the
         * `Spatie\Permission\Contracts\Permission` contract.
         */

        'permission' => Spatie\Permission\Models\Permission::class,

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * Eloquent model should be used to retrieve your roles. Of course, it
         * is often just the "Role" model but you may use whatever you like.
         *
         * The model you want to use as a Role model needs to implement the
         * `Spatie\Permission\Contracts\Role` contract.
         */

        'role' => Spatie\Permission\Models\Role::class,

    ],

    'table_names' => [

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your roles. We have chosen a basic
         * default value but you may easily change it to any table you like.
         */

        'roles' => 'roles',

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * table should be used to retrieve your permissions. We have chosen a basic
         * default value but you may easily change it to any table you like.
         */

        'permissions' => 'permissions',

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * table should be used to retrieve your models permissions. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'model_has_permissions' => 'model_has_permissions',

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your models roles. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'model_has_roles' => 'model_has_roles',

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your roles permissions. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'role_has_permissions' => 'role_has_permissions',
    ],

    'column_names' => [
        /*
         * Change this if you want to name the related pivots other than defaults
         */
        'role_pivot_key' => null, //default 'role_id',
        'permission_pivot_key' => null, //default 'permission_id',

        /*
         * Change this if you want to name the related model primary key other than
         * `model_id`.
         *
         * For example, this would be nice if your primary keys are all UUIDs. In
         * that case, name this `model_uuid`.
         */

        'model_morph_key' => 'model_id',

        /*
         * Change this if you want to use the teams feature and your related model's
         * foreign key is other than `team_id`.
         */

        'team_foreign_key' => 'team_id',
    ],

    /*
     * When set to true, the method for checking permissions will be registered on the gate.
     * Set this to false if you want to implement custom logic for checking permissions.
     */

    'register_permission_check_method' => true,

    /*
     * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered
     * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated
     * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it.
     */
    'register_octane_reset_listener' => false,

    /*
     * Teams Feature.
     * When set to true the package implements teams using the 'team_foreign_key'.
     * If you want the migrations to register the 'team_foreign_key', you must
     * set this to true before doing the migration.
     * If you already did the migration then you must make a new migration to also
     * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions'
     * (view the latest version of this package's migration file)
     */

    'teams' => false,

    /*
     * Passport Client Credentials Grant
     * When set to true the package will use Passports Client to check permissions
     */

    'use_passport_client_credentials' => false,

    /*
     * When set to true, the required permission names are added to exception messages.
     * This could be considered an information leak in some contexts, so the default
     * setting is false here for optimum safety.
     */

    'display_permission_in_exception' => false,

    /*
     * When set to true, the required role names are added to exception messages.
     * This could be considered an information leak in some contexts, so the default
     * setting is false here for optimum safety.
     */

    'display_role_in_exception' => false,

    /*
     * By default wildcard permission lookups are disabled.
     * See documentation to understand supported syntax.
     */

    'enable_wildcard_permission' => false,

    /*
     * The class to use for interpreting wildcard permissions.
     * If you need to modify delimiters, override the class and specify its name here.
     */
    // 'permission.wildcard_permission' => Spatie\Permission\WildcardPermission::class,

    /* Cache-specific settings */

    'cache' => [

        /*
         * By default all permissions are cached for 24 hours to speed up performance.
         * When permissions or roles are updated the cache is flushed automatically.
         */

        'expiration_time' => \DateInterval::createFromDateString('24 hours'),

        /*
         * The cache key used to store all permissions.
         */

        'key' => 'spatie.permission.cache',

        /*
         * You may optionally indicate a specific cache driver to use for permission and
         * role caching using any of the `store` drivers listed in the cache.php config
         * file. Using 'default' here means to use the `default` set in cache.php.
         */

        'store' => 'default',
    ],
];


================================================
FILE: config/queue.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Queue Connection Name
    |--------------------------------------------------------------------------
    |
    | Laravel's queue supports a variety of backends via a single, unified
    | API, giving you convenient access to each backend using identical
    | syntax for each. The default queue connection is defined below.
    |
    */

    'default' => env('QUEUE_CONNECTION', 'database'),

    /*
    |--------------------------------------------------------------------------
    | Queue Connections
    |--------------------------------------------------------------------------
    |
    | Here you may configure the connection options for every queue backend
    | used by your application. An example configuration is provided for
    | each backend supported by Laravel. You're also free to add more.
    |
    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
    |
    */

    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'database' => [
            'driver' => 'database',
            'connection' => env('DB_QUEUE_CONNECTION'),
            'table' => env('DB_QUEUE_TABLE', 'jobs'),
            'queue' => env('DB_QUEUE', 'default'),
            'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
            'after_commit' => false,
        ],

        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
            'queue' => env('BEANSTALKD_QUEUE', 'default'),
            'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
            'block_for' => 0,
            'after_commit' => false,
        ],

        'sqs' => [
            'driver' => 'sqs',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
            'queue' => env('SQS_QUEUE', 'default'),
            'suffix' => env('SQS_SUFFIX'),
            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
            'after_commit' => false,
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
            'block_for' => null,
            'after_commit' => false,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Job Batching
    |--------------------------------------------------------------------------
    |
    | The following options configure the database and table that store job
    | batching information. These options can be updated to any database
    | connection and table which has been defined by your application.
    |
    */

    'batching' => [
        'database' => env('DB_CONNECTION', 'sqlite'),
        'table' => 'job_batches',
    ],

    /*
    |--------------------------------------------------------------------------
    | Failed Queue Jobs
    |--------------------------------------------------------------------------
    |
    | These options configure the behavior of failed queue job logging so you
    | can control how and where failed jobs are stored. Laravel ships with
    | support for storing failed jobs in a simple file or in a database.
    |
    | Supported drivers: "database-uuids", "dynamodb", "file", "null"
    |
    */

    'failed' => [
        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
        'database' => env('DB_CONNECTION', 'sqlite'),
        'table' => 'failed_jobs',
    ],

];


================================================
FILE: config/sanctum.php
================================================
<?php

use Laravel\Sanctum\Sanctum;

return [

    /*
    |--------------------------------------------------------------------------
    | Stateful Domains
    |--------------------------------------------------------------------------
    |
    | Requests from the following domains / hosts will receive stateful API
    | authentication cookies. Typically, these should include your local
    | and production domains which access your API via a frontend SPA.
    |
    */

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        Sanctum::currentApplicationUrlWithPort(),
        // Sanctum::currentRequestHost(),
    ))),

    /*
    |--------------------------------------------------------------------------
    | Sanctum Guards
    |--------------------------------------------------------------------------
    |
    | This array contains the authentication guards that will be checked when
    | Sanctum is trying to authenticate a request. If none of these guards
    | are able to authenticate the request, Sanctum will use the bearer
    | token that's present on an incoming request for authentication.
    |
    */

    'guard' => ['web'],

    /*
    |--------------------------------------------------------------------------
    | Expiration Minutes
    |--------------------------------------------------------------------------
    |
    | This value controls the number of minutes until an issued token will be
    | considered expired. This will override any values set in the token's
    | "expires_at" attribute, but first-party sessions are not affected.
    |
    */

    'expiration' => null,

    /*
    |--------------------------------------------------------------------------
    | Token Prefix
    |--------------------------------------------------------------------------
    |
    | Sanctum can prefix new tokens in order to take advantage of numerous
    | security scanning initiatives maintained by open source platforms
    | that notify developers if they commit tokens into repositories.
    |
    | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
    |
    */

    'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),

    /*
    |--------------------------------------------------------------------------
    | Sanctum Middleware
    |--------------------------------------------------------------------------
    |
    | When authenticating your first-party SPA with Sanctum you may need to
    | customize some of the middleware Sanctum uses while processing the
    | request. You may change the middleware listed below as required.
    |
    */

    'middleware' => [
        'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
        'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
        'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
    ],

];


================================================
FILE: config/services.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Third Party Services
    |--------------------------------------------------------------------------
    |
    | This file is for storing the credentials for third party services such
    | as Mailgun, Postmark, AWS and more. This file provides the de facto
    | location for this type of information, allowing packages to have
    | a conventional file to locate the various service credentials.
    |
    */

    'postmark' => [
        'token' => env('POSTMARK_TOKEN'),
    ],

    'resend' => [
        'key' => env('RESEND_KEY'),
    ],

    'ses' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    ],

    'slack' => [
        'notifications' => [
            'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
            'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
        ],
    ],

];


================================================
FILE: config/session.php
================================================
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option determines the default session driver that is utilized for
    | incoming requests. Laravel supports a variety of storage options to
    | persist session data. Database storage is a great default choice.
    |
    | Supported: "file", "cookie", "database", "memcached",
    |            "redis", "dynamodb", "array"
    |
    */

    'driver' => env('SESSION_DRIVER', 'database'),

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to expire immediately when the browser is closed then you may
    | indicate that via the expire_on_close configuration option.
    |
    */

    'lifetime' => (int) env('SESSION_LIFETIME', 120),

    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),

    /*
    |--------------------------------------------------------------------------
    | Session Encryption
    |--------------------------------------------------------------------------
    |
    | This option allows you to easily specify that all of your session data
    | should be encrypted before it's stored. All encryption is performed
    | automatically by Laravel and you may use the session like normal.
    |
    */

    'encrypt' => env('SESSION_ENCRYPT', false),

    /*
    |--------------------------------------------------------------------------
    | Session File Location
    |--------------------------------------------------------------------------
    |
    | When utilizing the "file" session driver, the session files are placed
    | on disk. The default storage location is defined here; however, you
    | are free to provide another location where they should be stored.
    |
    */

    'files' => storage_path('framework/sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Connection
    |--------------------------------------------------------------------------
    |
    | When using the "database" or "redis" session drivers, you may specify a
    | connection that should be used to manage these sessions. This should
    | correspond to a connection in your database configuration options.
    |
    */

    'connection' => env('SESSION_CONNECTION'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Table
    |--------------------------------------------------------------------------
    |
    | When using the "database" session driver, you may specify the table to
    | be used to store sessions. Of course, a sensible default is defined
    | for you; however, you're welcome to change this to another table.
    |
    */

    'table' => env('SESSION_TABLE', 'sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Cache Store
    |--------------------------------------------------------------------------
    |
    | When using one of the framework's cache driven session backends, you may
    | define the cache store which should be used to store the session data
    | between requests. This must match one of your defined cache stores.
    |
    | Affects: "dynamodb", "memcached", "redis"
    |
    */

    'store' => env('SESSION_STORE'),

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Name
    |--------------------------------------------------------------------------
    |
    | Here you may change the name of the session cookie that is created by
    | the framework. Typically, you should not need to change this value
    | since doing so does not grant a meaningful security improvement.
    |
    */

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel')).'-session'
    ),

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Path
    |--------------------------------------------------------------------------
    |
    | The session cookie path determines the path for which the cookie will
    | be regarded as available. Typically, this will be the root path of
    | your application, but you're free to change this when necessary.
    |
    */

    'path' => env('SESSION_PATH', '/'),

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Domain
    |--------------------------------------------------------------------------
    |
    | This value determines the domain and subdomains the session cookie is
    | available to. By default, the cookie will be available to the root
    | domain and all subdomains. Typically, this shouldn't be changed.
    |
    */

    'domain' => env('SESSION_DOMAIN'),

    /*
    |--------------------------------------------------------------------------
    | HTTPS Only Cookies
    |--------------------------------------------------------------------------
    |
    | By setting this option to true, session cookies will only be sent back
    | to the server if the browser has a HTTPS connection. This will keep
    | the cookie from being sent to you when it can't be done securely.
    |
    */

    'secure' => env('SESSION_SECURE_COOKIE'),

    /*
    |--------------------------------------------------------------------------
    | HTTP Access Only
    |--------------------------------------------------------------------------
    |
    | Setting this value to true will prevent JavaScript from accessing the
    | value of the cookie and the cookie will only be accessible through
    | the HTTP protocol. It's unlikely you should disable this option.
    |
    */

    'http_only' => env('SESSION_HTTP_ONLY', true),

    /*
    |--------------------------------------------------------------------------
    | Same-Site Cookies
    |--------------------------------------------------------------------------
    |
    | This option determines how your cookies behave when cross-site requests
    | take place, and can be used to mitigate CSRF attacks. By default, we
    | will set this value to "lax" to permit secure cross-site requests.
    |
    | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
    |
    | Supported: "lax", "strict", "none", null
    |
    */

    'same_site' => env('SESSION_SAME_SITE', 'lax'),

    /*
    |--------------------------------------------------------------------------
    | Partitioned Cookies
    |--------------------------------------------------------------------------
    |
    | Setting this value to true will tie the cookie to the top-level site for
    | a cross-site context. Partitioned cookies are accepted by the browser
    | when flagged "secure" and the Same-Site attribute is set to "none".
    |
    */

    'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),

];


================================================
FILE: database/.gitignore
================================================
*.sqlite*


================================================
FILE: database/factories/DemoContentFactory.php
================================================
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
 */
class DemoContentFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'name' => $this->faker->randomNumber(3) . ("-" . $this->faker->colorName()),
            'type' => $this->faker->randomKey(['Printer', 'Pencil', 'Clipper']),
            'main_product_id' => $this->faker->numberBetween(1,50),
            'price' => $this->faker->randomFloat(2,5,80),
            'production_date' => $this->faker->dateTimeBetween('-5 years', 'now'),
            'status' => $this->faker->boolean
        ];
    }
}


================================================
FILE: database/factories/PermissionGroupFactory.php
================================================
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
 */
class PermissionGroupFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            //
        ];
    }
}


================================================
FILE: database/factories/TeamFactory.php
================================================
<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Team>
 */
class TeamFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'name' => $this->faker->unique()->company(),
            'user_id' => User::factory(),
            'personal_team' => true,
        ];
    }
}


================================================
FILE: database/factories/UserFactory.php
================================================
<?php

namespace Database\Factories;

use App\Models\Team;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use Laravel\Jetstream\Features;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
 */
class UserFactory extends Factory
{
    /**
     * The current password being used by the factory.
     */
    protected static ?string $password;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'name' => fake()->name(),
            'email' => fake()->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => static::$password ??= Hash::make('password'),
            'two_factor_secret' => null,
            'two_factor_recovery_codes' => null,
            'remember_token' => Str::random(10),
            'profile_photo_path' => null,
            'current_team_id' => null,
            'language' => 'en',
            'dark_mode' => 'auto',
            'theme' => 'anemon',
        ];
    }

    /**
     * Indicate that the model's email address should be unverified.
     */
    public function unverified(): static
    {
        return $this->state(fn (array $attributes) => [
            'email_verified_at' => null,
        ]);
    }

    /**
     * Indicate that the user should have a personal team.
     */
    public function withPersonalTeam(callable $callback = null): static
    {
        if (! Features::hasTeamFeatures()) {
            return $this->state([]);
        }

        return $this->has(
            Team::factory()
                ->state(fn (array $attributes, User $user) => [
                    'name' => $user->name.'\'s Team',
                    'user_id' => $user->id,
                    'personal_team' => true,
                ])
                ->when(is_callable($callback), $callback),
            'ownedTeams'
        );
    }
}


================================================
FILE: database/migrations/0001_01_01_000000_create_users_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->foreignId('current_team_id')->nullable();
            $table->string('profile_photo_path', 2048)->nullable();
            $table->timestamps();
        });

        Schema::create('password_reset_tokens', function (Blueprint $table) {
            $table->string('email')->primary();
            $table->string('token');
            $table->timestamp('created_at')->nullable();
        });

        Schema::create('sessions', function (Blueprint $table) {
            $table->string('id')->primary();
            $table->foreignId('user_id')->nullable()->index();
            $table->string('ip_address', 45)->nullable();
            $table->text('user_agent')->nullable();
            $table->longText('payload');
            $table->integer('last_activity')->index();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('users');
        Schema::dropIfExists('password_reset_tokens');
        Schema::dropIfExists('sessions');
    }
};


================================================
FILE: database/migrations/0001_01_01_000001_create_cache_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('cache', function (Blueprint $table) {
            $table->string('key')->primary();
            $table->mediumText('value');
            $table->integer('expiration');
        });

        Schema::create('cache_locks', function (Blueprint $table) {
            $table->string('key')->primary();
            $table->string('owner');
            $table->integer('expiration');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('cache');
        Schema::dropIfExists('cache_locks');
    }
};


================================================
FILE: database/migrations/0001_01_01_000002_create_jobs_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('jobs', function (Blueprint $table) {
            $table->id();
            $table->string('queue')->index();
            $table->longText('payload');
            $table->unsignedTinyInteger('attempts');
            $table->unsignedInteger('reserved_at')->nullable();
            $table->unsignedInteger('available_at');
            $table->unsignedInteger('created_at');
        });

        Schema::create('job_batches', function (Blueprint $table) {
            $table->string('id')->primary();
            $table->string('name');
            $table->integer('total_jobs');
            $table->integer('pending_jobs');
            $table->integer('failed_jobs');
            $table->longText('failed_job_ids');
            $table->mediumText('options')->nullable();
            $table->integer('cancelled_at')->nullable();
            $table->integer('created_at');
            $table->integer('finished_at')->nullable();
        });

        Schema::create('failed_jobs', function (Blueprint $table) {
            $table->id();
            $table->string('uuid')->unique();
            $table->text('connection');
            $table->text('queue');
            $table->longText('payload');
            $table->longText('exception');
            $table->timestamp('failed_at')->useCurrent();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('jobs');
        Schema::dropIfExists('job_batches');
        Schema::dropIfExists('failed_jobs');
    }
};


================================================
FILE: database/migrations/2021_07_16_121843_create_permission_tables.php
================================================
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        $teams = config('permission.teams');
        $tableNames = config('permission.table_names');
        $columnNames = config('permission.column_names');
        $pivotRole = $columnNames['role_pivot_key'] ?? 'role_id';
        $pivotPermission = $columnNames['permission_pivot_key'] ?? 'permission_id';

        if (empty($tableNames)) {
            throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');
        }
        if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {
            throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');
        }

        Schema::create($tableNames['permissions'], function (Blueprint $table) {
            //$table->engine('InnoDB');
            $table->bigIncrements('id'); // permission id
            $table->string('name');       // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format)
            $table->string('guard_name'); // For MyISAM use string('guard_name', 25);
            $table->timestamps();

            $table->unique(['name', 'guard_name']);
        });

        Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {
            //$table->engine('InnoDB');
            $table->bigIncrements('id'); // role id
            if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing
                $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
                $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
            }
            $table->string('name');       // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format)
            $table->string('guard_name'); // For MyISAM use string('guard_name', 25);
            $table->timestamps();
            if ($teams || config('permission.testing')) {
                $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
            } else {
                $table->unique(['name', 'guard_name']);
            }
        });

        Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) {
            $table->unsignedBigInteger($pivotPermission);

            $table->string('model_type');
            $table->unsignedBigInteger($columnNames['model_morph_key']);
            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');

            $table->foreign($pivotPermission)
                ->references('id') // permission id
                ->on($tableNames['permissions'])
                ->onDelete('cascade');
            if ($teams) {
                $table->unsignedBigInteger($columnNames['team_foreign_key']);
                $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');

                $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_permissions_permission_model_type_primary');
            } else {
                $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_permissions_permission_model_type_primary');
            }

        });

        Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) {
            $table->unsignedBigInteger($pivotRole);

            $table->string('model_type');
            $table->unsignedBigInteger($columnNames['model_morph_key']);
            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');

            $table->foreign($pivotRole)
                ->references('id') // role id
                ->on($tableNames['roles'])
                ->onDelete('cascade');
            if ($teams) {
                $table->unsignedBigInteger($columnNames['team_foreign_key']);
                $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');

                $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_roles_role_model_type_primary');
            } else {
                $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'],
                    'model_has_roles_role_model_type_primary');
            }
        });

        Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) {
            $table->unsignedBigInteger($pivotPermission);
            $table->unsignedBigInteger($pivotRole);

            $table->foreign($pivotPermission)
                ->references('id') // permission id
                ->on($tableNames['permissions'])
                ->onDelete('cascade');

            $table->foreign($pivotRole)
                ->references('id') // role id
                ->on($tableNames['roles'])
                ->onDelete('cascade');

            $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary');
        });

        app('cache')
            ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
            ->forget(config('permission.cache.key'));
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        $tableNames = config('permission.table_names');

        if (empty($tableNames)) {
            throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
        }

        Schema::drop($tableNames['role_has_permissions']);
        Schema::drop($tableNames['model_has_roles']);
        Schema::drop($tableNames['model_has_permissions']);
        Schema::drop($tableNames['roles']);
        Schema::drop($tableNames['permissions']);
    }
};


================================================
FILE: database/migrations/2021_11_10_062603_create_demo_contents_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateDemoContentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        Schema::create('demo_contents', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('type');
            $table->double('price');
            $table->foreignId('main_product_id')->nullable();
            $table->date('production_date');
            $table->boolean('status')->default(true);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(): void
    {
        Schema::dropIfExists('demo_contents');
    }
}


================================================
FILE: database/migrations/2022_01_20_204151_add_group_columns_to_permissions_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddGroupColumnsToPermissionsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        Schema::table('permissions', function (Blueprint $table) {
            $table->foreignIdFor(\App\Models\PermissionGroup::class)
                ->after('guard_name')
                ->nullable();

            $table->string('description')
                ->after('name')
                ->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(): void
    {
        Schema::table('permissions', function (Blueprint $table) {
            $table->dropForeign(['permission_group_id']);
            $table->dropColumn('permission_group_id');
            $table->dropColumn('description');
        });
    }
}


================================================
FILE: database/migrations/2022_01_20_204743_create_permission_groups_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePermissionGroupsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        Schema::create('permission_groups', function (Blueprint $table) {
            $table->id();
            $table->string('name',100);
            $table->string('description',250)->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(): void
    {
        Schema::dropIfExists('permission_groups');
    }
}


================================================
FILE: database/migrations/2024_07_03_194214_add_two_factor_columns_to_users_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->text('two_factor_secret')
                ->after('password')
                ->nullable();

            $table->text('two_factor_recovery_codes')
                ->after('two_factor_secret')
                ->nullable();

            $table->timestamp('two_factor_confirmed_at')
                ->after('two_factor_recovery_codes')
                ->nullable();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn([
                'two_factor_secret',
                'two_factor_recovery_codes',
                'two_factor_confirmed_at',
            ]);
        });
    }
};


================================================
FILE: database/migrations/2024_07_03_194232_create_personal_access_tokens_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('personal_access_tokens', function (Blueprint $table) {
            $table->id();
            $table->morphs('tokenable');
            $table->text('name');
            $table->string('token', 64)->unique();
            $table->text('abilities')->nullable();
            $table->timestamp('last_used_at')->nullable();
            $table->timestamp('expires_at')->nullable()->index();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('personal_access_tokens');
    }
};


================================================
FILE: database/migrations/2024_07_03_194233_create_teams_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('teams', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->index();
            $table->string('name');
            $table->boolean('personal_team');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('teams');
    }
};


================================================
FILE: database/migrations/2024_07_03_194234_create_team_user_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('team_user', function (Blueprint $table) {
            $table->id();
            $table->foreignId('team_id');
            $table->foreignId('user_id');
            $table->string('role')->nullable();
            $table->timestamps();

            $table->unique(['team_id', 'user_id']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('team_user');
    }
};


================================================
FILE: database/migrations/2024_07_03_194235_create_team_invitations_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('team_invitations', function (Blueprint $table) {
            $table->id();
            $table->foreignId('team_id')->constrained()->cascadeOnDelete();
            $table->string('email');
            $table->string('role')->nullable();
            $table->timestamps();

            $table->unique(['team_id', 'email']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('team_invitations');
    }
};


================================================
FILE: database/migrations/2024_07_07_190651_add_personalization_fields_to_users_table.php
================================================
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('language')
                ->default('en')
                ->after('profile_photo_path');
            $table->string('dark_mode')
                ->default('auto')
                ->after('language');
            $table->string('theme')
                ->default('anemon')
                ->after('dark_mode');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }
};


================================================
FILE: database/seeders/DatabaseSeeder.php
================================================
<?php

namespace Database\Seeders;

use App\Models\User;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            PermissionSeeder::class,
            RoleSeeder::class,
            UserSeeder::class
        ]);
        \App\Models\User::factory(50)->create();
        \App\Models\DemoContent::factory(100)->create();

    }
}


================================================
FILE: database/seeders/PermissionGroupSeeder.php
================================================
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class PermissionGroupSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}


================================================
FILE: database/seeders/PermissionSeeder.php
================================================
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;

class PermissionSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $permissions = ['create', 'edit-all', 'delete-all', 'view-all', 'edit-own', 'delete-own', 'view-own'];

        foreach ($permissions as $permission) {
            Permission::create([
                'name' => $permission
            ]);
        }

    }
}


================================================
FILE: database/seeders/RoleSeeder.php
================================================
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;

class RoleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        /*Super Admin*/
        Role::create(
            ['name' => 'Super Admin']
        );

        /*Editor*/
        $editor = Role::create(
            ['name' => 'Editor'],
        );

        /*Simple User*/
        $simpleUser = Role::create(
            ['name' => 'Simple User'],
        );

        /*Assign Permission*/
        $editor->givePermissionTo(['create', 'edit-all', 'delete-all', 'view-all']);
        $simpleUser->givePermissionTo(['create', 'edit-own', 'delete-own', 'view-own']);
    }
}


================================================
FILE: database/seeders/UserSeeder.php
================================================
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\User;
use App\Actions\Fortify\CreateNewUser;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        /*Admin*/
        $admin = User::factory()->withPersonalTeam()->create([
            'name' => 'Super Admin',
            'email' => 'admin@tailadmin.dev',
            'password' => bcr
Download .txt
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
Download .txt
SYMBOL INDEX (254 symbols across 85 files)

FILE: app/Actions/Fortify/CreateNewUser.php
  class CreateNewUser (line 13) | class CreateNewUser implements CreatesNewUsers
    method create (line 22) | public function create(array $input): User
    method createTeam (line 45) | protected function createTeam(User $user): void

FILE: app/Actions/Fortify/PasswordValidationRules.php
  type PasswordValidationRules (line 7) | trait PasswordValidationRules
    method passwordRules (line 14) | protected function passwordRules(): array

FILE: app/Actions/Fortify/ResetUserPassword.php
  class ResetUserPassword (line 10) | class ResetUserPassword implements ResetsUserPasswords
    method reset (line 19) | public function reset(User $user, array $input): void

FILE: app/Actions/Fortify/UpdateUserPassword.php
  class UpdateUserPassword (line 10) | class UpdateUserPassword implements UpdatesUserPasswords
    method update (line 19) | public function update(User $user, array $input): void

FILE: app/Actions/Fortify/UpdateUserProfileInformation.php
  class UpdateUserProfileInformation (line 11) | class UpdateUserProfileInformation implements UpdatesUserProfileInformation
    method update (line 18) | public function update(User $user, array $input): void
    method updateVerifiedUser (line 46) | protected function updateVerifiedUser(User $user, array $input): void

FILE: app/Actions/Jetstream/AddTeamMember.php
  class AddTeamMember (line 16) | class AddTeamMember implements AddsTeamMembers
    method add (line 21) | public function add(User $user, Team $team, string $email, ?string $ro...
    method validate (line 41) | protected function validate(Team $team, string $email, ?string $role):...
    method rules (line 58) | protected function rules(): array
    method ensureUserIsNotAlreadyOnTeam (line 71) | protected function ensureUserIsNotAlreadyOnTeam(Team $team, string $em...

FILE: app/Actions/Jetstream/CreateTeam.php
  class CreateTeam (line 13) | class CreateTeam implements CreatesTeams
    method create (line 20) | public function create(User $user, array $input): Team

FILE: app/Actions/Jetstream/DeleteTeam.php
  class DeleteTeam (line 8) | class DeleteTeam implements DeletesTeams
    method delete (line 13) | public function delete(Team $team): void

FILE: app/Actions/Jetstream/DeleteUser.php
  class DeleteUser (line 11) | class DeleteUser implements DeletesUsers
    method __construct (line 16) | public function __construct(protected DeletesTeams $deletesTeams)
    method delete (line 23) | public function delete(User $user): void
    method deleteTeams (line 36) | protected function deleteTeams(User $user): void

FILE: app/Actions/Jetstream/InviteTeamMember.php
  class InviteTeamMember (line 19) | class InviteTeamMember implements InvitesTeamMembers
    method invite (line 24) | public function invite(User $user, Team $team, string $email, ?string ...
    method validate (line 43) | protected function validate(Team $team, string $email, ?string $role):...
    method rules (line 60) | protected function rules(Team $team): array
    method ensureUserIsNotAlreadyOnTeam (line 78) | protected function ensureUserIsNotAlreadyOnTeam(Team $team, string $em...

FILE: app/Actions/Jetstream/RemoveTeamMember.php
  class RemoveTeamMember (line 13) | class RemoveTeamMember implements RemovesTeamMembers
    method remove (line 18) | public function remove(User $user, Team $team, User $teamMember): void
    method authorize (line 32) | protected function authorize(User $user, Team $team, User $teamMember)...
    method ensureUserDoesNotOwnTeam (line 43) | protected function ensureUserDoesNotOwnTeam(User $teamMember, Team $te...

FILE: app/Actions/Jetstream/UpdateTeamName.php
  class UpdateTeamName (line 11) | class UpdateTeamName implements UpdatesTeamNames
    method update (line 18) | public function update(User $user, Team $team, array $input): void

FILE: app/Actions/TailAdmin/UpdateDarkModePreference.php
  class UpdateDarkModePreference (line 12) | final class UpdateDarkModePreference
    method update (line 24) | public function update(Request $request): void
    method getAvailableOptions (line 43) | public static function getAvailableOptions(): array

FILE: app/Actions/TailAdmin/UpdateUserLanguage.php
  class UpdateUserLanguage (line 14) | final class UpdateUserLanguage
    method update (line 28) | public function update(Request $request): void
    method setApplicationLocale (line 52) | private function setApplicationLocale(string $language, Request $reque...
    method setCarbonLocale (line 63) | private function setCarbonLocale(string $language, Request $request): ...
    method getSupportedLanguages (line 88) | public static function getSupportedLanguages(): array
    method isLanguageSupported (line 96) | public static function isLanguageSupported(string $language): bool

FILE: app/Http/Controllers/Controller.php
  class Controller (line 5) | abstract class Controller

FILE: app/Http/Controllers/DemoContentController.php
  class DemoContentController (line 10) | class DemoContentController extends Controller
    method index (line 17) | public function index(Request $request)
    method create (line 32) | public function create()
    method store (line 43) | public function store(Request $request)
    method show (line 54) | public function show(DemoContent $demoContent)
    method edit (line 65) | public function edit(DemoContent $demoContent)
    method update (line 77) | public function update(Request $request, DemoContent $demoContent)
    method destroy (line 88) | public function destroy(DemoContent $demoContent)

FILE: app/Http/Controllers/PermissionGroupController.php
  class PermissionGroupController (line 9) | class PermissionGroupController extends Controller
    method index (line 16) | public function index()
    method create (line 26) | public function create()
    method store (line 37) | public function store(StorePermissionGroupRequest $request)
    method show (line 48) | public function show(PermissionGroup $permissionGroup)
    method edit (line 59) | public function edit(PermissionGroup $permissionGroup)
    method update (line 71) | public function update(UpdatePermissionGroupRequest $request, Permissi...
    method destroy (line 82) | public function destroy(PermissionGroup $permissionGroup)

FILE: app/Http/Controllers/Settings/PermissionController.php
  class PermissionController (line 11) | class PermissionController extends Controller
    method index (line 18) | public function index(Request $request)
    method create (line 31) | public function create()
    method store (line 42) | public function store(Request $request)
    method show (line 53) | public function show($id)
    method edit (line 64) | public function edit($id)
    method update (line 76) | public function update(Request $request, $id)
    method destroy (line 87) | public function destroy($id)

FILE: app/Http/Controllers/Settings/RoleController.php
  class RoleController (line 11) | class RoleController extends Controller
    method index (line 18) | public function index(Request $request)
    method create (line 30) | public function create()
    method store (line 41) | public function store(Request $request)
    method show (line 52) | public function show($id)
    method edit (line 63) | public function edit($id)
    method update (line 75) | public function update(Request $request, $id)
    method destroy (line 86) | public function destroy($id)

FILE: app/Http/Controllers/Settings/SystemController.php
  class SystemController (line 9) | class SystemController extends Controller
    method index (line 16) | public function index()
    method create (line 26) | public function create()
    method store (line 37) | public function store(Request $request)
    method show (line 48) | public function show($id)
    method edit (line 59) | public function edit($id)
    method update (line 71) | public function update(Request $request, $id)
    method destroy (line 82) | public function destroy($id)

FILE: app/Http/Controllers/Settings/UserController.php
  class UserController (line 12) | class UserController extends Controller
    method index (line 19) | public function index(Request $request)
    method create (line 32) | public function create()
    method store (line 43) | public function store(Request $request)
    method show (line 54) | public function show($id)
    method edit (line 65) | public function edit($id)
    method update (line 77) | public function update(Request $request, $id)
    method destroy (line 88) | public function destroy($id)

FILE: app/Http/Middleware/HandleInertiaRequests.php
  class HandleInertiaRequests (line 14) | final class HandleInertiaRequests extends Middleware
    method version (line 29) | public function version(Request $request): ?string
    method share (line 39) | public function share(Request $request): array
    method getZiggyData (line 56) | private function getZiggyData(Request $request)
    method getFlashMessages (line 69) | private function getFlashMessages(): array
    method getCurrentLocale (line 82) | private function getCurrentLocale()
    method getUserRoles (line 92) | private function getUserRoles()
    method getUserPermissions (line 113) | private function getUserPermissions()
    method getAuthenticatedUserData (line 134) | private function getAuthenticatedUserData()
    method clearUserCache (line 166) | public static function clearUserCache(int $userId): void
    method clearCurrentUserCache (line 182) | public static function clearCurrentUserCache(): void

FILE: app/Http/Middleware/LocalizationMiddleware.php
  class LocalizationMiddleware (line 14) | final class LocalizationMiddleware
    method handle (line 19) | public function handle(Request $request, Closure $next): Response
    method setApplicationLocale (line 34) | private function setApplicationLocale(string $language, Request $reque...
    method setCarbonLocale (line 43) | private function setCarbonLocale(string $language, Request $request): ...

FILE: app/Http/Requests/StorePermissionGroupRequest.php
  class StorePermissionGroupRequest (line 7) | class StorePermissionGroupRequest extends FormRequest
    method authorize (line 12) | public function authorize(): bool
    method rules (line 22) | public function rules(): array

FILE: app/Http/Requests/UpdatePermissionGroupRequest.php
  class UpdatePermissionGroupRequest (line 7) | class UpdatePermissionGroupRequest extends FormRequest
    method authorize (line 12) | public function authorize(): bool
    method rules (line 22) | public function rules(): array

FILE: app/Http/Resources/DemoContentResource.php
  class DemoContentResource (line 8) | class DemoContentResource extends JsonResource
    method toArray (line 15) | public function toArray(Request $request)

FILE: app/Models/DemoContent.php
  class DemoContent (line 8) | class DemoContent extends Model
    method mainProduct (line 31) | public function mainProduct(): \Illuminate\Database\Eloquent\Relations...

FILE: app/Models/Membership.php
  class Membership (line 7) | class Membership extends JetstreamMembership

FILE: app/Models/PermissionGroup.php
  class PermissionGroup (line 9) | class PermissionGroup extends Model
    method permissions (line 26) | public function permissions()

FILE: app/Models/Team.php
  class Team (line 11) | class Team extends JetstreamTeam
    method casts (line 42) | protected function casts(): array

FILE: app/Models/TeamInvitation.php
  class TeamInvitation (line 9) | class TeamInvitation extends JetstreamTeamInvitation
    method team (line 24) | public function team(): BelongsTo

FILE: app/Models/User.php
  class User (line 17) | class User extends Authenticatable
    method casts (line 70) | protected function casts(): array

FILE: app/Policies/DemoContentPolicy.php
  class DemoContentPolicy (line 9) | class DemoContentPolicy
    method viewAny (line 14) | public function viewAny(User $user): bool
    method view (line 22) | public function view(User $user, DemoContent $demoContent): bool
    method create (line 30) | public function create(User $user): bool
    method update (line 38) | public function update(User $user, DemoContent $demoContent): bool
    method delete (line 46) | public function delete(User $user, DemoContent $demoContent): bool
    method restore (line 54) | public function restore(User $user, DemoContent $demoContent): bool
    method forceDelete (line 62) | public function forceDelete(User $user, DemoContent $demoContent): bool

FILE: app/Policies/PermissionGroupPolicy.php
  class PermissionGroupPolicy (line 9) | class PermissionGroupPolicy
    method viewAny (line 14) | public function viewAny(User $user): bool
    method view (line 22) | public function view(User $user, PermissionGroup $permissionGroup): bool
    method create (line 30) | public function create(User $user): bool
    method update (line 38) | public function update(User $user, PermissionGroup $permissionGroup): ...
    method delete (line 46) | public function delete(User $user, PermissionGroup $permissionGroup): ...
    method restore (line 54) | public function restore(User $user, PermissionGroup $permissionGroup):...
    method forceDelete (line 62) | public function forceDelete(User $user, PermissionGroup $permissionGro...

FILE: app/Policies/TeamPolicy.php
  class TeamPolicy (line 9) | class TeamPolicy
    method viewAny (line 16) | public function viewAny(User $user): bool
    method view (line 24) | public function view(User $user, Team $team): bool
    method create (line 32) | public function create(User $user): bool
    method update (line 40) | public function update(User $user, Team $team): bool
    method addTeamMember (line 48) | public function addTeamMember(User $user, Team $team): bool
    method updateTeamMember (line 56) | public function updateTeamMember(User $user, Team $team): bool
    method removeTeamMember (line 64) | public function removeTeamMember(User $user, Team $team): bool
    method delete (line 72) | public function delete(User $user, Team $team): bool

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 10) | class AppServiceProvider extends ServiceProvider
    method register (line 15) | public function register(): void
    method boot (line 23) | public function boot(): void

FILE: app/Providers/FortifyServiceProvider.php
  class FortifyServiceProvider (line 17) | class FortifyServiceProvider extends ServiceProvider
    method register (line 22) | public function register(): void
    method boot (line 30) | public function boot(): void

FILE: app/Providers/JetstreamServiceProvider.php
  class JetstreamServiceProvider (line 15) | class JetstreamServiceProvider extends ServiceProvider
    method register (line 20) | public function register(): void
    method boot (line 28) | public function boot(): void
    method configurePermissions (line 44) | protected function configurePermissions(): void

FILE: database/factories/DemoContentFactory.php
  class DemoContentFactory (line 10) | class DemoContentFactory extends Factory
    method definition (line 17) | public function definition(): array

FILE: database/factories/PermissionGroupFactory.php
  class PermissionGroupFactory (line 10) | class PermissionGroupFactory extends Factory
    method definition (line 17) | public function definition(): array

FILE: database/factories/TeamFactory.php
  class TeamFactory (line 11) | class TeamFactory extends Factory
    method definition (line 18) | public function definition(): array

FILE: database/factories/UserFactory.php
  class UserFactory (line 15) | class UserFactory extends Factory
    method definition (line 27) | public function definition(): array
    method unverified (line 48) | public function unverified(): static
    method withPersonalTeam (line 58) | public function withPersonalTeam(callable $callback = null): static

FILE: database/migrations/0001_01_01_000000_create_users_table.php
  method up (line 12) | public function up(): void
  method down (line 45) | public function down(): void

FILE: database/migrations/0001_01_01_000001_create_cache_table.php
  method up (line 12) | public function up(): void
  method down (line 30) | public function down(): void

FILE: database/migrations/0001_01_01_000002_create_jobs_table.php
  method up (line 12) | public function up(): void
  method down (line 51) | public function down(): void

FILE: database/migrations/2021_07_16_121843_create_permission_tables.php
  method up (line 12) | public function up(): void
  method down (line 126) | public function down(): void

FILE: database/migrations/2021_11_10_062603_create_demo_contents_table.php
  class CreateDemoContentsTable (line 7) | class CreateDemoContentsTable extends Migration
    method up (line 14) | public function up(): void
    method down (line 33) | public function down(): void

FILE: database/migrations/2022_01_20_204151_add_group_columns_to_permissions_table.php
  class AddGroupColumnsToPermissionsTable (line 7) | class AddGroupColumnsToPermissionsTable extends Migration
    method up (line 14) | public function up(): void
    method down (line 32) | public function down(): void

FILE: database/migrations/2022_01_20_204743_create_permission_groups_table.php
  class CreatePermissionGroupsTable (line 7) | class CreatePermissionGroupsTable extends Migration
    method up (line 14) | public function up(): void
    method down (line 29) | public function down(): void

FILE: database/migrations/2024_07_03_194214_add_two_factor_columns_to_users_table.php
  method up (line 12) | public function up(): void
  method down (line 32) | public function down(): void

FILE: database/migrations/2024_07_03_194232_create_personal_access_tokens_table.php
  method up (line 12) | public function up(): void
  method down (line 29) | public function down(): void

FILE: database/migrations/2024_07_03_194233_create_teams_table.php
  method up (line 12) | public function up(): void
  method down (line 26) | public function down(): void

FILE: database/migrations/2024_07_03_194234_create_team_user_table.php
  method up (line 12) | public function up(): void
  method down (line 28) | public function down(): void

FILE: database/migrations/2024_07_03_194235_create_team_invitations_table.php
  method up (line 12) | public function up(): void
  method down (line 28) | public function down(): void

FILE: database/migrations/2024_07_07_190651_add_personalization_fields_to_users_table.php
  method up (line 11) | public function up(): void
  method down (line 29) | public function down(): void

FILE: database/seeders/DatabaseSeeder.php
  class DatabaseSeeder (line 10) | class DatabaseSeeder extends Seeder
    method run (line 15) | public function run(): void

FILE: database/seeders/PermissionGroupSeeder.php
  class PermissionGroupSeeder (line 7) | class PermissionGroupSeeder extends Seeder
    method run (line 14) | public function run()

FILE: database/seeders/PermissionSeeder.php
  class PermissionSeeder (line 8) | class PermissionSeeder extends Seeder
    method run (line 13) | public function run(): void

FILE: database/seeders/RoleSeeder.php
  class RoleSeeder (line 8) | class RoleSeeder extends Seeder
    method run (line 13) | public function run(): void

FILE: database/seeders/UserSeeder.php
  class UserSeeder (line 9) | class UserSeeder extends Seeder
    method run (line 14) | public function run(): void

FILE: resources/js/Functions/deviceInfoCollector.js
  function width (line 6) | function width() {

FILE: resources/js/Functions/menuTrigger.js
  function updateMenuStatus (line 6) | function updateMenuStatus(){

FILE: resources/js/Mixins/Styles/bgColorStyles.js
  method data (line 12) | data(){
  method bgColorStyle (line 121) | bgColorStyle(){
  method bgHoverColorStyle (line 135) | bgHoverColorStyle(){
  method textColorStyle (line 147) | textColorStyle(){

FILE: resources/js/Mixins/Styles/contentCardStyleMixin.js
  method data (line 15) | data(){
  method calculatedCardStyle (line 37) | calculatedCardStyle() {

FILE: resources/js/Mixins/Styles/forgotPasswordStyleMixin.js
  method calculatedForgotPasswordStyle (line 7) | calculatedForgotPasswordStyle() {

FILE: resources/js/Mixins/Styles/fullScreenCardStyleMixin.js
  method calculatedFullscreenCardStyle (line 6) | calculatedFullscreenCardStyle() {

FILE: resources/js/Mixins/Styles/gridStyleMixin.js
  method data (line 15) | data() {
  method calculatedGridStyle (line 111) | calculatedGridStyle() {

FILE: resources/js/Mixins/Styles/inputGroupStyleMixin.js
  method data (line 2) | data(){

FILE: resources/js/Mixins/Styles/listStyleMixin.js
  method data (line 2) | data() {
  method calculatedListStyle (line 58) | calculatedListStyle() {

FILE: resources/js/Mixins/Styles/lockStyleMixin.js
  method calculatedLockStyle (line 7) | calculatedLockStyle() {

FILE: resources/js/Mixins/Styles/loginStyleMixin.js
  method calculatedLoginStyle (line 7) | calculatedLoginStyle() {

FILE: resources/js/Mixins/Styles/modalStyleMixin.js
  method calculatedModalStyle (line 6) | calculatedModalStyle() {

FILE: resources/js/Mixins/Styles/paginateStyleMixin.js
  method data (line 11) | data() {
  method calculatedPaginateStyle (line 76) | calculatedPaginateStyle(){
  method calculatedActivePaginateStyle (line 82) | calculatedActivePaginateStyle(){
  method calculatedArrowStyle (line 88) | calculatedArrowStyle() {

FILE: resources/js/Mixins/Styles/registerStyleMixin.js
  method calculatedRegisterStyle (line 7) | calculatedRegisterStyle() {

FILE: resources/js/Mixins/Styles/statisticWidgetStyleMixin.js
  method data (line 14) | data() {
  method calculatedIconStyle (line 46) | calculatedIconStyle() {
  method calculatedDiffStyle (line 56) | calculatedDiffStyle() {

FILE: resources/js/Mixins/Styles/tabStyleMixin.js
  method data (line 19) | data() {
  method calculatedTitleStyle (line 189) | calculatedTitleStyle() {
  method calculatedActiveTitleStyle (line 200) | calculatedActiveTitleStyle() {
  method calculatedTitle2ContainerStyle (line 211) | calculatedTitle2ContainerStyle() {
  method calculatedContentStyle (line 219) | calculatedContentStyle() {

FILE: resources/js/Mixins/Styles/toastrStyleMixin.js
  method data (line 16) | data() {
  method calculatedToastrStyle (line 48) | calculatedToastrStyle() {

FILE: resources/js/Mixins/Styles/tooltipStyleMixin.js
  method data (line 8) | data(){

FILE: resources/js/Mixins/radiusSizeMixin.js
  method data (line 9) | data() {
  method radiusStyle (line 24) | radiusStyle() {

FILE: resources/js/Mixins/settingsMenuMixin.js
  method data (line 2) | data(){

FILE: resources/js/Stores/exampleStore.js
  method increment (line 11) | increment() {

FILE: resources/js/app.js
  method setup (line 50) | setup({ el, App, props, plugin }) {

FILE: resources/js/ssr.js
  method setup (line 16) | setup({ App, props, plugin }) {

FILE: tests/Pest.php
  function something (line 45) | function something()

FILE: tests/TestCase.php
  class TestCase (line 7) | abstract class TestCase extends BaseTestCase
Condensed preview — 536 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,880K chars).
[
  {
    "path": ".deepsource.toml",
    "chars": 114,
    "preview": "version = 1\n\n[[analyzers]]\nname = \"php\"\n\n[[analyzers]]\nname = \"javascript\"\n\n  [analyzers.meta]\n  plugins = [\"vue\"]"
  },
  {
    "path": ".editorconfig",
    "chars": 258,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_"
  },
  {
    "path": ".gitattributes",
    "chars": 186,
    "preview": "* text=auto eol=lf\n\n*.blade.php diff=html\n*.css diff=css\n*.html diff=html\n*.md diff=markdown\n*.php diff=php\n\n/.github ex"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 74,
    "preview": "github: [sinan-aydogan]\nopen_collective: sinanaydogan\nko_fi: sinanaydogan\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 834,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 595,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
  },
  {
    "path": ".github/copilot-instructions.md",
    "chars": 5185,
    "preview": "# TailAdmin Laravel - AI Coding Assistant Instructions\n\n## Project Overview\nTailAdmin is a Laravel 12 + Vue.js 3 admin d"
  },
  {
    "path": ".gitignore",
    "chars": 588,
    "preview": "# Laravel default\n*.log\n.DS_Store\n.env\n.env.backup\n.env.production\n.phpactor.json\n.phpunit.result.cache\n/.phpunit.cache\n"
  },
  {
    "path": ".prettierrc.json",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5229,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2021 Sinan AYDOĞAN\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "README.md",
    "chars": 5811,
    "preview": "\n# TailAdmin Inertia\n\n![TailAdmin](public/img/demo/tailadmin_v2.jpg)\n\nIt's a dashboard theme/UI-Starter Kit with **Larav"
  },
  {
    "path": "app/Actions/Fortify/CreateNewUser.php",
    "chars": 1561,
    "preview": "<?php\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\DB;\nuse "
  },
  {
    "path": "app/Actions/Fortify/PasswordValidationRules.php",
    "chars": 415,
    "preview": "<?php\n\nnamespace App\\Actions\\Fortify;\n\nuse Illuminate\\Validation\\Rules\\Password;\n\ntrait PasswordValidationRules\n{\n    /*"
  },
  {
    "path": "app/Actions/Fortify/ResetUserPassword.php",
    "chars": 693,
    "preview": "<?php\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\"
  },
  {
    "path": "app/Actions/Fortify/UpdateUserPassword.php",
    "chars": 924,
    "preview": "<?php\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\"
  },
  {
    "path": "app/Actions/Fortify/UpdateUserProfileInformation.php",
    "chars": 1703,
    "preview": "<?php\n\nnamespace App\\Actions\\Fortify;\n\nuse App\\Models\\User;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminat"
  },
  {
    "path": "app/Actions/Jetstream/AddTeamMember.php",
    "chars": 2383,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Support\\F"
  },
  {
    "path": "app/Actions/Jetstream/CreateTeam.php",
    "chars": 953,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Gate;\n"
  },
  {
    "path": "app/Actions/Jetstream/DeleteTeam.php",
    "chars": 281,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse Laravel\\Jetstream\\Contracts\\DeletesTeams;\n\nclass Delet"
  },
  {
    "path": "app/Actions/Jetstream/DeleteUser.php",
    "chars": 1010,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\DB;\nus"
  },
  {
    "path": "app/Actions/Jetstream/InviteTeamMember.php",
    "chars": 2689,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Closure;\nuse Illuminate\\Database\\"
  },
  {
    "path": "app/Actions/Jetstream/RemoveTeamMember.php",
    "chars": 1514,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\Authorizat"
  },
  {
    "path": "app/Actions/Jetstream/UpdateTeamName.php",
    "chars": 750,
    "preview": "<?php\n\nnamespace App\\Actions\\Jetstream;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Gate;\n"
  },
  {
    "path": "app/Actions/TailAdmin/UpdateDarkModePreference.php",
    "chars": 1102,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\TailAdmin;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse"
  },
  {
    "path": "app/Actions/TailAdmin/UpdateUserLanguage.php",
    "chars": 2597,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Actions\\TailAdmin;\n\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Illuminat"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 77,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nabstract class Controller\n{\n    //\n}\n"
  },
  {
    "path": "app/Http/Controllers/DemoContentController.php",
    "chars": 2152,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Resources\\DemoContentResource;\nuse App\\Models\\DemoContent;\nuse Illu"
  },
  {
    "path": "app/Http/Controllers/PermissionGroupController.php",
    "chars": 1974,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\PermissionGroup;\nuse App\\Http\\Requests\\StorePermissionGroupReques"
  },
  {
    "path": "app/Http/Controllers/Settings/PermissionController.php",
    "chars": 1908,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\PermissionGroup;\nus"
  },
  {
    "path": "app/Http/Controllers/Settings/RoleController.php",
    "chars": 2310,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse I"
  },
  {
    "path": "app/Http/Controllers/Settings/SystemController.php",
    "chars": 1608,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse I"
  },
  {
    "path": "app/Http/Controllers/Settings/UserController.php",
    "chars": 2308,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers\\Settings;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse Illuminat"
  },
  {
    "path": "app/Http/Middleware/HandleInertiaRequests.php",
    "chars": 4366,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Fac"
  },
  {
    "path": "app/Http/Middleware/LocalizationMiddleware.php",
    "chars": 1718,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Actions\\TailAdmin\\UpdateUserLanguage;\nuse Carbo"
  },
  {
    "path": "app/Http/Requests/StorePermissionGroupRequest.php",
    "chars": 564,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePermissionGroupRequest exte"
  },
  {
    "path": "app/Http/Requests/UpdatePermissionGroupRequest.php",
    "chars": 565,
    "preview": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdatePermissionGroupRequest ext"
  },
  {
    "path": "app/Http/Resources/DemoContentResource.php",
    "chars": 710,
    "preview": "<?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\ncla"
  },
  {
    "path": "app/Models/DemoContent.php",
    "chars": 749,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
  },
  {
    "path": "app/Models/Membership.php",
    "chars": 261,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Laravel\\Jetstream\\Membership as JetstreamMembership;\n\nclass Membership extends Jetstre"
  },
  {
    "path": "app/Models/PermissionGroup.php",
    "chars": 571,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Mo"
  },
  {
    "path": "app/Models/Team.php",
    "chars": 1047,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Laravel\\Jetstream\\Events\\TeamCr"
  },
  {
    "path": "app/Models/TeamInvitation.php",
    "chars": 586,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Relations\\BelongsTo;\nuse Laravel\\Jetstream\\Jetstream;\nuse"
  },
  {
    "path": "app/Models/User.php",
    "chars": 1704,
    "preview": "<?php\n\nnamespace App\\Models;\n\n// use Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factori"
  },
  {
    "path": "app/Policies/DemoContentPolicy.php",
    "chars": 1275,
    "preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\DemoContent;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\Response;\n\nc"
  },
  {
    "path": "app/Policies/PermissionGroupPolicy.php",
    "chars": 1323,
    "preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\PermissionGroup;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\Response"
  },
  {
    "path": "app/Policies/TeamPolicy.php",
    "chars": 1605,
    "preview": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorizatio"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 5796,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illu"
  },
  {
    "path": "app/Providers/FortifyServiceProvider.php",
    "chars": 1574,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Actions\\Fortify\\CreateNewUser;\nuse App\\Actions\\Fortify\\ResetUserPassword;\nuse A"
  },
  {
    "path": "app/Providers/JetstreamServiceProvider.php",
    "chars": 1777,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Actions\\Jetstream\\AddTeamMember;\nuse App\\Actions\\Jetstream\\CreateTeam;\nuse App\\"
  },
  {
    "path": "artisan",
    "chars": 350,
    "preview": "#!/usr/bin/env php\n<?php\n\nuse Symfony\\Component\\Console\\Input\\ArgvInput;\n\ndefine('LARAVEL_START', microtime(true));\n\n// "
  },
  {
    "path": "bootstrap/app.php",
    "chars": 824,
    "preview": "<?php\n\nuse Illuminate\\Foundation\\Application;\nuse Illuminate\\Foundation\\Configuration\\Exceptions;\nuse Illuminate\\Foundat"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "bootstrap/providers.php",
    "chars": 164,
    "preview": "<?php\n\nreturn [\n    App\\Providers\\AppServiceProvider::class,\n    App\\Providers\\FortifyServiceProvider::class,\n    App\\Pr"
  },
  {
    "path": "composer.json",
    "chars": 2848,
    "preview": "{\n    \"name\": \"sinan-aydogan/tailadmin-laravel\",\n    \"type\": \"project\",\n    \"description\": \"TailAdmin is a dashboard the"
  },
  {
    "path": "config/app.php",
    "chars": 4286,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Applicatio"
  },
  {
    "path": "config/auth.php",
    "chars": 4029,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "config/cache.php",
    "chars": 3480,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/database.php",
    "chars": 6854,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/debugbar.php",
    "chars": 14218,
    "preview": "<?php\n\nreturn [\n\n    /*\n     |--------------------------------------------------------------------------\n     | Debugbar"
  },
  {
    "path": "config/filesystems.php",
    "chars": 2500,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/fortify.php",
    "chars": 5368,
    "preview": "<?php\n\nuse Laravel\\Fortify\\Features;\n\nreturn [\n\n    /*\n    |------------------------------------------------------------"
  },
  {
    "path": "config/jetstream.php",
    "chars": 2680,
    "preview": "<?php\n\nuse Laravel\\Jetstream\\Features;\nuse Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession;\n\nreturn [\n\n    /*\n    "
  },
  {
    "path": "config/localization.php",
    "chars": 7096,
    "preview": "<?php\n\ndeclare(strict_types=1);\n\nuse LaravelLang\\Config\\Constants\\RouteName;\nuse LaravelLang\\LocaleList\\Locale;\n\nreturn "
  },
  {
    "path": "config/logging.php",
    "chars": 4327,
    "preview": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\nuse Mon"
  },
  {
    "path": "config/mail.php",
    "chars": 3614,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ma"
  },
  {
    "path": "config/permission.php",
    "chars": 6511,
    "preview": "<?php\n\nreturn [\n\n    'models' => [\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we ne"
  },
  {
    "path": "config/queue.php",
    "chars": 3824,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/sanctum.php",
    "chars": 3037,
    "preview": "<?php\n\nuse Laravel\\Sanctum\\Sanctum;\n\nreturn [\n\n    /*\n    |-------------------------------------------------------------"
  },
  {
    "path": "config/services.php",
    "chars": 1035,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 7839,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "database/.gitignore",
    "chars": 10,
    "preview": "*.sqlite*\n"
  },
  {
    "path": "database/factories/DemoContentFactory.php",
    "chars": 828,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends \\Illuminate\\D"
  },
  {
    "path": "database/factories/PermissionGroupFactory.php",
    "chars": 422,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends \\Illuminate\\D"
  },
  {
    "path": "database/factories/TeamFactory.php",
    "chars": 552,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @"
  },
  {
    "path": "database/factories/UserFactory.php",
    "chars": 2049,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Team;\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factori"
  },
  {
    "path": "database/migrations/0001_01_01_000000_create_users_table.php",
    "chars": 1603,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/0001_01_01_000001_create_cache_table.php",
    "chars": 849,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/0001_01_01_000002_create_jobs_table.php",
    "chars": 1812,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2021_07_16_121843_create_permission_tables.php",
    "chars": 6552,
    "preview": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migratio"
  },
  {
    "path": "database/migrations/2021_11_10_062603_create_demo_contents_table.php",
    "chars": 879,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2022_01_20_204151_add_group_columns_to_permissions_table.php",
    "chars": 990,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2022_01_20_204743_create_permission_groups_table.php",
    "chars": 720,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_07_03_194214_add_two_factor_columns_to_users_table.php",
    "chars": 1057,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_07_03_194232_create_personal_access_tokens_table.php",
    "chars": 863,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_07_03_194233_create_teams_table.php",
    "chars": 660,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_07_03_194234_create_team_user_table.php",
    "chars": 720,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_07_03_194235_create_team_invitations_table.php",
    "chars": 761,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_07_07_190651_add_personalization_fields_to_users_table.php",
    "chars": 854,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "chars": 531,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\User;\n\n// use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nu"
  },
  {
    "path": "database/seeders/PermissionGroupSeeder.php",
    "chars": 239,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass PermissionGroupSeeder extends Seeder\n{\n    /*"
  },
  {
    "path": "database/seeders/PermissionSeeder.php",
    "chars": 501,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Spatie\\Permission\\Models\\Permission;\n\nclass Perm"
  },
  {
    "path": "database/seeders/RoleSeeder.php",
    "chars": 739,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Spatie\\Permission\\Models\\Role;\n\nclass RoleSeeder"
  },
  {
    "path": "database/seeders/UserSeeder.php",
    "chars": 1077,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\User;\nuse App\\Actions\\Fortify\\CreateN"
  },
  {
    "path": "eslint.config.js",
    "chars": 794,
    "preview": "/** @type {import('eslint').Linter.FlatConfig[]} */\nexport default [\n    {\n        files: [\n            \"./resources/js/"
  },
  {
    "path": "jsconfig.json",
    "chars": 169,
    "preview": "{\n    \"compilerOptions\": {\n        \"baseUrl\": \".\",\n        \"paths\": {\n            \"@/*\": [\"resources/js/*\"]\n        }\n  "
  },
  {
    "path": "package.json",
    "chars": 1664,
    "preview": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite\",\n        \"build\": \"vite build && vit"
  },
  {
    "path": "phpunit.xml",
    "chars": 1237,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNam"
  },
  {
    "path": "postcss.config.js",
    "chars": 93,
    "preview": "export default {\n    plugins: {\n        tailwindcss: {},\n        autoprefixer: {},\n    },\n};\n"
  },
  {
    "path": "public/.htaccess",
    "chars": 740,
    "preview": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    Rewr"
  },
  {
    "path": "public/index.php",
    "chars": 543,
    "preview": "<?php\n\nuse Illuminate\\Foundation\\Application;\nuse Illuminate\\Http\\Request;\n\ndefine('LARAVEL_START', microtime(true));\n\n/"
  },
  {
    "path": "public/robots.txt",
    "chars": 24,
    "preview": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "resources/css/app.css",
    "chars": 1283,
    "preview": "@import 'tailwindcss/base';\n@import 'tailwindcss/components';\n@import 'tailwindcss/utilities';\n\n/*Components*/\n@import \""
  },
  {
    "path": "resources/css/components/alert.css",
    "chars": 13940,
    "preview": ".alert {\n    @apply flex flex-shrink-0 items-center justify-start relative w-full flex-grow-0\n}\n\n.alert-content {\n    @a"
  },
  {
    "path": "resources/css/components/auth.css",
    "chars": 1503,
    "preview": "/*Auth*/\n/*Auth Container*/\n.auth-container {\n    @apply flex flex-col border items-center justify-center shadow border-"
  },
  {
    "path": "resources/css/components/avatar.css",
    "chars": 1629,
    "preview": ".avatar-container {\n    @apply relative z-0\n}\n.avatar-container-group {\n    @apply -ml-4  hover:z-10\n}\n.avatar-group-con"
  },
  {
    "path": "resources/css/components/backEndTablePagination.css",
    "chars": 2688,
    "preview": "/*bet-pagination*/\n/*bet-pagination Container*/\n.bet-pagination-container {\n    @apply flex flex-col-reverse my-2 md:fle"
  },
  {
    "path": "resources/css/components/badge.css",
    "chars": 14185,
    "preview": ".badge {\n    @apply flex relative flex-grow-0 flex-shrink-0 justify-center items-center whitespace-nowrap select-none ov"
  },
  {
    "path": "resources/css/components/breadcrumb.css",
    "chars": 3812,
    "preview": ".breadcrumb {\n    @apply hidden md:flex flex-wrap items-center justify-between w-full h-14\n}\n.breadcrumb-item-active{\n  "
  },
  {
    "path": "resources/css/components/button.css",
    "chars": 10110,
    "preview": ".button {\n    @apply flex justify-center items-center whitespace-nowrap font-semibold flex-shrink-0 p-2 gap-1 focus:ring"
  },
  {
    "path": "resources/css/components/collapsible.css",
    "chars": 7012,
    "preview": ".collapsible {\n    @apply flex flex-col flex-grow-0 flex-shrink-0 self-start w-full overflow-hidden\n}\n\n.collapsible-cont"
  },
  {
    "path": "resources/css/components/content-box.css",
    "chars": 199,
    "preview": "/*Content Card*/\n.content-card-show-button {\n    @apply absolute top-4 right-4 text-gray-600 hover:bg-gray-500 hover:tex"
  },
  {
    "path": "resources/css/components/dropdown.css",
    "chars": 1085,
    "preview": ".dropdown {\n    @apply relative max-w-min select-none\n}\n\n.dropdown-button-trigger {\n    @apply relative whitespace-nowra"
  },
  {
    "path": "resources/css/components/grid.css",
    "chars": 1974,
    "preview": ".grid-1 {\n @apply col-span-1\n}\n.grid-2 {\n    @apply col-span-2\n}\n.grid-3 {\n    @apply col-span-3\n}\n.grid-4 {\n    @apply "
  },
  {
    "path": "resources/css/components/input.css",
    "chars": 5218,
    "preview": ".input {\n    @apply flex w-full min-h-[2.5rem] border-gray-300 focus:border-blue-300 focus:outline-none focus:ring focus"
  },
  {
    "path": "resources/css/components/list.css",
    "chars": 14666,
    "preview": ".list {\n    @apply flex flex-col flex-grow-0 flex-shrink-0 self-start w-full\n}\n\n.list-container {\n    @apply flex flex-g"
  },
  {
    "path": "resources/css/components/loading.css",
    "chars": 3379,
    "preview": ".loading-screen {\n    @apply fixed flex h-screen w-screen top-0 justify-center items-center left-0;\n    z-index: 9999999"
  },
  {
    "path": "resources/css/components/modal.css",
    "chars": 6393,
    "preview": ".modal-container {\n    @apply fixed top-0 left-0 inset-0 flex h-screen w-full md:w-screen overflow-hidden justify-center"
  },
  {
    "path": "resources/css/components/pagination.css",
    "chars": 14932,
    "preview": "/*Pagination*/\n/*Pagination Container*/\n.pagination-container {\n    @apply flex flex-col-reverse my-2 md:flex-row md:mt-"
  },
  {
    "path": "resources/css/components/progress.css",
    "chars": 1287,
    "preview": ".progress {\n    @apply flex flex-col w-full\n}\n\n.progress-container {\n    @apply flex flex-row justify-between text-sm\n}\n"
  },
  {
    "path": "resources/css/components/radius.css",
    "chars": 4106,
    "preview": ".radius-0{\n    @apply rounded-none\n}\n.radius-1{\n    @apply rounded-sm\n}\n.radius-2{\n    @apply rounded\n}\n.radius-3{\n    @"
  },
  {
    "path": "resources/css/components/statistic-box.css",
    "chars": 821,
    "preview": "/*Statistic Widget*/\n.statistic-widget {\n    @apply flex justify-between h-full w-full\n}\n\n.statistic-widget-data {\n    @"
  },
  {
    "path": "resources/css/components/tab.css",
    "chars": 3859,
    "preview": ".tab {\n    @apply relative flex flex-col w-full\n}\n\n.tab-title-container {\n    @apply relative flex flex-row justify-cent"
  },
  {
    "path": "resources/css/components/table.css",
    "chars": 1551,
    "preview": ".table-outside-container {\n    @apply w-full space-y-4\n}\n\n/*<editor-fold desc=\"Top Content\">*/\n.table-top {\n    @apply f"
  },
  {
    "path": "resources/css/components/toastr.css",
    "chars": 261,
    "preview": "/*Toastr*/\n.toastr {\n    @apply flex flex-row justify-between items-center shadow p-4 min-h-max\n}\n\n.toastr-close {\n    @"
  },
  {
    "path": "resources/css/components/tooltip.css",
    "chars": 2602,
    "preview": ".tooltip, .tooltip:after, .tooltip:before{\n    @apply inline-flex\n}\n.tooltip-container{\n    @apply relative whitespace-n"
  },
  {
    "path": "resources/css/components/vertical-menu.css",
    "chars": 408,
    "preview": "/*Initial Vertical Menu*/\n.ivm {\n    @apply flex flex-col md:flex-row items-center max-h-min w-full px-2 py-2 overflow-h"
  },
  {
    "path": "resources/css/layout/footer.css",
    "chars": 180,
    "preview": "/*Footer*/\n.footer {\n    @apply flex flex-wrap flex-shrink-0 items-center py-2 px-6 justify-center md:justify-end space-"
  },
  {
    "path": "resources/css/layout/full-screen-layout.css",
    "chars": 318,
    "preview": "/*Full Screen Card*/\n.full-screen-card {\n    @apply relative flex h-screen w-screen\n}\n\n/*Full Screen Card Container*/\n.f"
  },
  {
    "path": "resources/css/layout/main-menu.css",
    "chars": 4691,
    "preview": "/*<editor-fold desc=\"Umay Main Menu\">*/\n.umay-main-menu {\n    @apply flex flex-col flex-shrink-0 justify-between w-72 h-"
  },
  {
    "path": "resources/css/layout/main.css",
    "chars": 928,
    "preview": ".main-container {\n    @apply flex justify-between bg-gray-100 h-screen dark:bg-gray-700 overflow-hidden\n}\n\n.content-wrap"
  },
  {
    "path": "resources/css/layout/top-bar.css",
    "chars": 7146,
    "preview": ".top-menu {\n    @apply flex flex-shrink-0 flex-grow-0 justify-between items-center h-16 px-4 bg-white dark:bg-gray-800 s"
  },
  {
    "path": "resources/css/layout/top-menu.css",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "resources/css/misc/effect.css",
    "chars": 1158,
    "preview": "/*Animations*/\n/*Color*/\n.transition-color-long {\n    transition-property: background-color, color, border-color, text-s"
  },
  {
    "path": "resources/css/misc/highlighter.css",
    "chars": 1355,
    "preview": "pre{\n    @apply flex w-full\n}\n\npre code.hljs{\n    @apply block p-4\n}\n\ncode.hljs{\n    @apply flex w-full overflow-auto;\n}"
  },
  {
    "path": "resources/js/Components/Alert/TAlert.vue",
    "chars": 5616,
    "preview": "<template>\n    <transition name=\"alert\">\n        <!--Alert Container-->\n        <div\n            v-if=\"showAlertBox\"\n   "
  },
  {
    "path": "resources/js/Components/Auth/TForgot.vue",
    "chars": 15490,
    "preview": "<template>\n    <full-screen-layout\n        :bg-image-url=\"activeDesign.bgImage[appearingMode]\"\n        :bg-color=\"active"
  },
  {
    "path": "resources/js/Components/Auth/TLock.vue",
    "chars": 12602,
    "preview": "<template>\n    <full-screen-layout :bg-image-url=\"activeDesign.bgImage[appearingMode]\" :bg-color=\"activeDesign.bgColor\">"
  },
  {
    "path": "resources/js/Components/Auth/TLogin.vue",
    "chars": 17050,
    "preview": "<template>\n    <full-screen-layout\n        :bg-image-url=\"activeDesign.bgImage[appearingMode]\"\n        :bg-color=\"active"
  },
  {
    "path": "resources/js/Components/Auth/TRegister.vue",
    "chars": 20724,
    "preview": "<template>\n    <full-screen-layout\n        :bg-image-url=\"activeDesign.bgImage[appearingMode]\"\n        :bg-color=\"active"
  },
  {
    "path": "resources/js/Components/Avatar/TAvatar.vue",
    "chars": 2647,
    "preview": "<template>\n    <div :class=\"[\n        'avatar-container',\n        {'avatar-container-group' : isAvatarGroup},\n        `a"
  },
  {
    "path": "resources/js/Components/Avatar/TAvatarGroup.vue",
    "chars": 204,
    "preview": "<template>\n  <div class=\"avatar-group-container\">\n    <slot />\n  </div>\n</template>\n\n<script>\nimport { defineComponent }"
  },
  {
    "path": "resources/js/Components/Badge/TBadge.vue",
    "chars": 7895,
    "preview": "<template>\n    <div\n        class=\"badge\"\n        :class=\"containerStyle\"\n        @click.stop=\"collapsible && toggle(); "
  },
  {
    "path": "resources/js/Components/Breadcrumb/TBreadcrumb.vue",
    "chars": 3345,
    "preview": "<template>\n  <div>\n    <div\n      v-if=\"design==='filled'\"\n      :class=\"tStyle['filled']\">\n      <div id=\"breadcrumb-fi"
  },
  {
    "path": "resources/js/Components/Button/TButton.vue",
    "chars": 3099,
    "preview": "<script setup>\nimport { toRefs, ref, computed, defineAsyncComponent, reactive } from \"vue\";\nimport { Link } from \"@inert"
  },
  {
    "path": "resources/js/Components/Card/TContentCard.vue",
    "chars": 2196,
    "preview": "<template>\n  <div\n      :class=\"[\n          'relative p-4 shadow-sm w-full dark:bg-gray-800 dark:border-transparent',\n  "
  },
  {
    "path": "resources/js/Components/Card/TStatisticWidget.vue",
    "chars": 5181,
    "preview": "<template>\n  <!--Widget Main Container-->\n  <t-content-card\n      :border=\"true\"\n      :color=\"color\"\n      :gradient-di"
  },
  {
    "path": "resources/js/Components/Chart/TBarChart.vue",
    "chars": 376,
    "preview": "<script>\nimport { defineComponent } from 'vue'\nimport { Bar } from 'vue-chartjs'\n\nexport default defineComponent({\n  nam"
  },
  {
    "path": "resources/js/Components/Chart/TDoughnutChart.vue",
    "chars": 447,
    "preview": "<script>\nimport { defineComponent } from 'vue'\nimport { Doughnut } from 'vue-chartjs'\n\nexport default defineComponent({\n"
  },
  {
    "path": "resources/js/Components/Chart/TLineChart.vue",
    "chars": 435,
    "preview": "<script>\nimport { defineComponent } from 'vue'\nimport { Line } from 'vue-chartjs'\n\nexport default defineComponent({\n    "
  },
  {
    "path": "resources/js/Components/Chart/TPieChart.vue",
    "chars": 376,
    "preview": "<script>\nimport { defineComponent } from 'vue'\nimport { Pie } from 'vue-chartjs'\n\nexport default defineComponent({\n  nam"
  },
  {
    "path": "resources/js/Components/Chart/TPolarChart.vue",
    "chars": 386,
    "preview": "<script>\nimport { defineComponent } from 'vue'\nimport { PolarArea } from 'vue-chartjs'\n\nexport default defineComponent({"
  },
  {
    "path": "resources/js/Components/Chart/TRadarChart.vue",
    "chars": 382,
    "preview": "<script>\nimport { defineComponent } from 'vue'\nimport { Radar } from 'vue-chartjs'\n\nexport default defineComponent({\n  n"
  },
  {
    "path": "resources/js/Components/Code/TCodeShowcase.vue",
    "chars": 6074,
    "preview": "<template>\n    <!-- Container -->\n    <div class=\"flex flex-col w-full\">\n        <!-- Live Demo -->\n        <div\n       "
  },
  {
    "path": "resources/js/Components/Collapsible/TCollapsible.vue",
    "chars": 1871,
    "preview": "<template>\n  <div class=\"flex w-full\">\n    <div :class=\"tStyle\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<s"
  },
  {
    "path": "resources/js/Components/Collapsible/TCollapsibleItem.vue",
    "chars": 6895,
    "preview": "<template>\n  <div :class=\"tStyle['container']\">\n    <!--Inline Line-->\n    <div v-if=\"activeDesign === 'inline'\"\n       "
  },
  {
    "path": "resources/js/Components/Dropdown/TDropdown.vue",
    "chars": 3611,
    "preview": "<template>\n  <div class=\"dropdown\" ref=\"dropDownItem\">\n\n    <!--Trigger as a Simple Trigger-->\n    <div\n      v-if=\"trig"
  },
  {
    "path": "resources/js/Components/Dropdown/TDropdownItem.vue",
    "chars": 753,
    "preview": "<template>\n  <div class=\"dropdown-item-container\">\n    <Link\n      :href=\"link\"\n      v-if=\"link\"\n      class=\"dropdown-"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputBetween.vue",
    "chars": 1302,
    "preview": "<template>\n    <div class=\"grid grid-cols-12 gap-4\">\n        <!--From : Text Input-->\n        <t-input-text\n            "
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputCheckBox.vue",
    "chars": 3392,
    "preview": "<template>\n    <!--TODO:Styles will be separated-->\n    <div class=\"flex flex-row items-center\" @click=\"!disabled && upd"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputDate.vue",
    "chars": 5563,
    "preview": "<template>\n    <date-picker\n        v-model=\"date\"\n        :is24hr=\"is24hr\"\n        :isRange=\"isRange\"\n        :masks=\"{"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputFile.vue",
    "chars": 7783,
    "preview": "<template>\n    <div>\n        <!--Preview-->\n        <div\n            v-if=\"files.length>0 && preview && !multiple\"\n     "
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputInlineEditableRepeatable.vue",
    "chars": 3196,
    "preview": "<template>\n    <div class=\"relative\">\n        <!--Adding Form-->\n        <div class=\"justify-between items-center flex  "
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputMultiSelect.vue",
    "chars": 15283,
    "preview": "<template>\n    <div class=\"input-select\" ref=\"selectItem\">\n        <!--Select Container-->\n        <div\n            clas"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputRadioButton.vue",
    "chars": 2386,
    "preview": "<template>\n    <div class=\"flex flex-row\" @click=\"!disabled && updateField()\">\n        <div :class=\"[\n        'flex flex"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputRepeatable.vue",
    "chars": 5817,
    "preview": "<template>\n  <div ref=\"target\" class=\"relative select-none\">\n    <!--Adding Form-->\n    <div :class=\"['input border pl-2"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputSelect.vue",
    "chars": 9961,
    "preview": "<template>\n  <div\n      class=\"input-select\"\n      ref=\"selectItem\"\n      :class=\"[errors.length>0 ? `border border-red-"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputText.vue",
    "chars": 12582,
    "preview": "<template>\n  <!--Container-->\n  <div\n      class=\"text-input\"\n      ref=\"withSelectInput\"\n      :class=\"[errors.length>0"
  },
  {
    "path": "resources/js/Components/Form/Inputs/TInputTextArea.vue",
    "chars": 2131,
    "preview": "<template>\n  <div\n      class=\"relative\"\n      :class=\"[errors.length>0 ? `border border-red-500 radius-${radius}`: '']\""
  },
  {
    "path": "resources/js/Components/Form/TError.vue",
    "chars": 259,
    "preview": "<template>\n    <div v-show=\"message\">\n        <p class=\"text-sm text-red-600\">\n            {{ message }}\n        </p>\n  "
  },
  {
    "path": "resources/js/Components/Form/TFormContent.vue",
    "chars": 4724,
    "preview": "<template>\n    <div class=\"w-full\">\n        <form :enctype=\"enctype\" @submit.prevent=\"$emit('submitted')\">\n            <"
  },
  {
    "path": "resources/js/Components/Form/TFormSection.vue",
    "chars": 2674,
    "preview": "<template>\n    <div\n        class=\"text-slate-700 dark:text-gray-100\"\n        :class=\"[\n            { 'md:grid md:grid-c"
  },
  {
    "path": "resources/js/Components/Form/TInputGroup.vue",
    "chars": 2717,
    "preview": "<template>\n    <div\n        class=\"flex flex-col\"\n        :class=\"[\n            phoneWidth ? `grid-${phoneWidth}` : '',\n"
  },
  {
    "path": "resources/js/Components/Icon/TAdjustmentsIcon.vue",
    "chars": 478,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TAudioIcon.vue",
    "chars": 519,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TBanIcon.vue",
    "chars": 429,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TBellIcon.vue",
    "chars": 525,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TCalendarIcon.vue",
    "chars": 426,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TCashIcon.vue",
    "chars": 482,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TCheckCircleIcon.vue",
    "chars": 388,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TCheckCircleSolidIcon.vue",
    "chars": 443,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n        <path fill-rule="
  },
  {
    "path": "resources/js/Components/Icon/TCheckIcon.vue",
    "chars": 351,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TChevronDoubleDownIcon.vue",
    "chars": 368,
    "preview": "<template>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n    <path st"
  },
  {
    "path": "resources/js/Components/Icon/TChevronDownIcon.vue",
    "chars": 357,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TChevronLeftIcon.vue",
    "chars": 358,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TChevronRightIcon.vue",
    "chars": 356,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TChevronUpIcon.vue",
    "chars": 354,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TClockIcon.vue",
    "chars": 380,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TCogIcon.vue",
    "chars": 938,
    "preview": "<template>\n  <svg aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n    <path\n        d=\"M10.325"
  },
  {
    "path": "resources/js/Components/Icon/TCollectionIcon.vue",
    "chars": 505,
    "preview": "<template>\n    <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TDocumentIcon.vue",
    "chars": 446,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TDotsVerticalIcon.vue",
    "chars": 451,
    "preview": "<template>\n  <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n    <path st"
  },
  {
    "path": "resources/js/Components/Icon/TEyeIcon.vue",
    "chars": 572,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TGitHubIcon.vue",
    "chars": 1671,
    "preview": "<template>\n    <svg class=\"inline-block\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-pr"
  },
  {
    "path": "resources/js/Components/Icon/THamburgerMenuTriggerIcon.vue",
    "chars": 428,
    "preview": "<template>\n  <svg\n      fill=\"none\"\n      stroke=\"currentColor\"\n      viewBox=\"0 0 24 24\"\n      xmlns=\"http://www.w3.org"
  },
  {
    "path": "resources/js/Components/Icon/TInformationCircleIcon.vue",
    "chars": 439,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n        <path fill-rule="
  },
  {
    "path": "resources/js/Components/Icon/TInformationIcon.vue",
    "chars": 400,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TLogOutIcon.vue",
    "chars": 428,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  },
  {
    "path": "resources/js/Components/Icon/TLogo.vue",
    "chars": 776,
    "preview": "<template>\n    <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        fill=\"none\"\n        viewBox=\"0 0 24 24\"\n        s"
  },
  {
    "path": "resources/js/Components/Icon/TPaperClipIcon.vue",
    "chars": 457,
    "preview": "<template>\n    <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <p"
  }
]

// ... and 336 more files (download for full content)

About this extraction

This page contains the full source code of the sinan-aydogan/tailadmin-laravel GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 536 files (1.6 MB), approximately 424.0k tokens, and a symbol index with 254 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!