├── .editorconfig
├── .env.dusk
├── .env.example
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── app
├── Actions
│ ├── Fortify
│ │ ├── CreateNewUser.php
│ │ ├── PasswordValidationRules.php
│ │ ├── ResetUserPassword.php
│ │ ├── UpdateUserPassword.php
│ │ └── UpdateUserProfileInformation.php
│ └── Jetstream
│ │ └── DeleteUser.php
├── Console
│ └── Kernel.php
├── Exceptions
│ └── Handler.php
├── Helpers
│ ├── Countries.php
│ ├── MainHelper.php
│ ├── SettingsHelper.php
│ └── UserSystemInfoHelper.php
├── Http
│ ├── Controllers
│ │ ├── Controller.php
│ │ └── Dashboard
│ │ │ ├── DashboardController.php
│ │ │ ├── LanguageController.php
│ │ │ ├── PermissionController.php
│ │ │ ├── PluginController.php
│ │ │ ├── RoleController.php
│ │ │ ├── SettingController.php
│ │ │ ├── TrafficsController.php
│ │ │ └── UserController.php
│ ├── Kernel.php
│ └── Middleware
│ │ ├── Authenticate.php
│ │ ├── CheckUserRegistration.php
│ │ ├── EncryptCookies.php
│ │ ├── Language.php
│ │ ├── PreventRequestsDuringMaintenance.php
│ │ ├── RateLimit.php
│ │ ├── RedirectIfAuthenticated.php
│ │ ├── TrimStrings.php
│ │ ├── TrustHosts.php
│ │ ├── TrustProxies.php
│ │ ├── ValidateSignature.php
│ │ └── VerifyCsrfToken.php
├── Models
│ ├── Language.php
│ ├── RateLimit.php
│ ├── RateLimitDetail.php
│ ├── ReportError.php
│ ├── Setting.php
│ └── User.php
├── Policies
│ └── TeamPolicy.php
├── Providers
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ ├── FortifyServiceProvider.php
│ ├── JetstreamServiceProvider.php
│ ├── RouteServiceProvider.php
│ └── TranslationsServiceProvider.php
└── Tables
│ ├── ErrorReports.php
│ ├── Languages.php
│ ├── Permissions.php
│ ├── Roles.php
│ ├── Traffics.php
│ ├── TrafficsLogs.php
│ └── Users.php
├── artisan
├── bootstrap
├── app.php
├── cache
│ └── .gitignore
└── ssr
│ ├── assets
│ └── CompilerErrorMessages-6b34f14b-6b34f14b.js
│ └── ssr.js
├── composer.json
├── composer.lock
├── config
├── app.php
├── auth.php
├── broadcasting.php
├── cache.php
├── cors.php
├── database.php
├── filesystems.php
├── fortify.php
├── hashing.php
├── jetstream.php
├── location.php
├── logging.php
├── mail.php
├── modules.php
├── permission.php
├── queue.php
├── sanctum.php
├── services.php
├── session.php
├── splade.php
├── translations.php
└── view.php
├── database
├── .gitignore
├── factories
│ ├── TeamFactory.php
│ └── UserFactory.php
├── migrations
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2014_10_12_100000_create_password_reset_tokens_table.php
│ ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php
│ ├── 2018_01_01_000000_create_permission_tables.php
│ ├── 2019_08_19_000000_create_failed_jobs_table.php
│ ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│ ├── 2023_08_03_171119_create_sessions_table.php
│ ├── 2023_08_07_090927_create_settings_table.php
│ ├── 2023_08_07_172433_create_languages_table.php
│ ├── 2023_08_08_081808_create_rate_limits_table.php
│ ├── 2023_08_08_082015_create_rate_limit_details_table.php
│ └── 2023_08_08_082127_create_report_errors_table.php
└── seeders
│ ├── DatabaseSeeder.php
│ ├── LanguagesSeeder.php
│ ├── RolesAndPermissionsSeeder.php
│ ├── SettingsSeeder.php
│ └── UsersSeeder.php
├── lang
├── ar
│ ├── auth.php
│ ├── main.php
│ ├── pagination.php
│ ├── passwords.php
│ └── validation.php
└── en
│ ├── auth.php
│ ├── main.php
│ ├── pagination.php
│ ├── passwords.php
│ └── validation.php
├── modules_statuses.json
├── package-lock.json
├── package.json
├── phpunit.xml
├── postcss.config.js
├── public
├── .htaccess
├── assets
│ ├── flags
│ │ ├── ad.svg
│ │ ├── ae.svg
│ │ ├── af.svg
│ │ ├── ag.svg
│ │ ├── ai.svg
│ │ ├── al.svg
│ │ ├── am.svg
│ │ ├── ao.svg
│ │ ├── aq.svg
│ │ ├── ar.svg
│ │ ├── as.svg
│ │ ├── at.svg
│ │ ├── au.svg
│ │ ├── aw.svg
│ │ ├── ax.svg
│ │ ├── az.svg
│ │ ├── ba.svg
│ │ ├── bb.svg
│ │ ├── bd.svg
│ │ ├── be.svg
│ │ ├── bf.svg
│ │ ├── bg.svg
│ │ ├── bh.svg
│ │ ├── bi.svg
│ │ ├── bj.svg
│ │ ├── bl.svg
│ │ ├── bm.svg
│ │ ├── bn.svg
│ │ ├── bo.svg
│ │ ├── bq.svg
│ │ ├── br.svg
│ │ ├── bs.svg
│ │ ├── bt.svg
│ │ ├── bv.svg
│ │ ├── bw.svg
│ │ ├── by.svg
│ │ ├── bz.svg
│ │ ├── ca.svg
│ │ ├── cc.svg
│ │ ├── cd.svg
│ │ ├── cf.svg
│ │ ├── cg.svg
│ │ ├── ch.svg
│ │ ├── ci.svg
│ │ ├── ck.svg
│ │ ├── cl.svg
│ │ ├── cm.svg
│ │ ├── cn.svg
│ │ ├── co.svg
│ │ ├── cr.svg
│ │ ├── cu.svg
│ │ ├── cv.svg
│ │ ├── cw.svg
│ │ ├── cx.svg
│ │ ├── cy.svg
│ │ ├── cz.svg
│ │ ├── de.svg
│ │ ├── dj.svg
│ │ ├── dk.svg
│ │ ├── dm.svg
│ │ ├── do.svg
│ │ ├── dz.svg
│ │ ├── ec.svg
│ │ ├── ee.svg
│ │ ├── eg.svg
│ │ ├── eh.svg
│ │ ├── er.svg
│ │ ├── es.svg
│ │ ├── et.svg
│ │ ├── eu.svg
│ │ ├── fi.svg
│ │ ├── fj.svg
│ │ ├── fk.svg
│ │ ├── fm.svg
│ │ ├── fo.svg
│ │ ├── fr.svg
│ │ ├── ga.svg
│ │ ├── gb-eng.svg
│ │ ├── gb-nir.svg
│ │ ├── gb-sct.svg
│ │ ├── gb-wls.svg
│ │ ├── gb.svg
│ │ ├── gd.svg
│ │ ├── ge.svg
│ │ ├── gf.svg
│ │ ├── gg.svg
│ │ ├── gh.svg
│ │ ├── gi.svg
│ │ ├── gl.svg
│ │ ├── gm.svg
│ │ ├── gn.svg
│ │ ├── gp.svg
│ │ ├── gq.svg
│ │ ├── gr.svg
│ │ ├── gs.svg
│ │ ├── gt.svg
│ │ ├── gu.svg
│ │ ├── gw.svg
│ │ ├── gy.svg
│ │ ├── hk.svg
│ │ ├── hm.svg
│ │ ├── hn.svg
│ │ ├── hr.svg
│ │ ├── ht.svg
│ │ ├── hu.svg
│ │ ├── id.svg
│ │ ├── ie.svg
│ │ ├── il.svg
│ │ ├── im.svg
│ │ ├── in.svg
│ │ ├── io.svg
│ │ ├── iq.svg
│ │ ├── ir.svg
│ │ ├── is.svg
│ │ ├── it.svg
│ │ ├── je.svg
│ │ ├── jm.svg
│ │ ├── jo.svg
│ │ ├── jp.svg
│ │ ├── ke.svg
│ │ ├── kg.svg
│ │ ├── kh.svg
│ │ ├── ki.svg
│ │ ├── km.svg
│ │ ├── kn.svg
│ │ ├── kp.svg
│ │ ├── kr.svg
│ │ ├── kw.svg
│ │ ├── ky.svg
│ │ ├── kz.svg
│ │ ├── la.svg
│ │ ├── lb.svg
│ │ ├── lc.svg
│ │ ├── li.svg
│ │ ├── lk.svg
│ │ ├── lr.svg
│ │ ├── ls.svg
│ │ ├── lt.svg
│ │ ├── lu.svg
│ │ ├── lv.svg
│ │ ├── ly.svg
│ │ ├── ma.svg
│ │ ├── mc.svg
│ │ ├── md.svg
│ │ ├── me.svg
│ │ ├── mf.svg
│ │ ├── mg.svg
│ │ ├── mh.svg
│ │ ├── mk.svg
│ │ ├── ml.svg
│ │ ├── mm.svg
│ │ ├── mn.svg
│ │ ├── mo.svg
│ │ ├── mp.svg
│ │ ├── mq.svg
│ │ ├── mr.svg
│ │ ├── ms.svg
│ │ ├── mt.svg
│ │ ├── mu.svg
│ │ ├── mv.svg
│ │ ├── mw.svg
│ │ ├── mx.svg
│ │ ├── my.svg
│ │ ├── mz.svg
│ │ ├── na.svg
│ │ ├── nc.svg
│ │ ├── ne.svg
│ │ ├── nf.svg
│ │ ├── ng.svg
│ │ ├── ni.svg
│ │ ├── nl.svg
│ │ ├── no.svg
│ │ ├── np.svg
│ │ ├── nr.svg
│ │ ├── nu.svg
│ │ ├── nz.svg
│ │ ├── om.svg
│ │ ├── pa.svg
│ │ ├── pe.svg
│ │ ├── pf.svg
│ │ ├── pg.svg
│ │ ├── ph.svg
│ │ ├── pk.svg
│ │ ├── pl.svg
│ │ ├── pm.svg
│ │ ├── pn.svg
│ │ ├── pr.svg
│ │ ├── ps.svg
│ │ ├── pt.svg
│ │ ├── pw.svg
│ │ ├── py.svg
│ │ ├── qa.svg
│ │ ├── re.svg
│ │ ├── ro.svg
│ │ ├── rs.svg
│ │ ├── ru.svg
│ │ ├── rw.svg
│ │ ├── sa.svg
│ │ ├── sb.svg
│ │ ├── sc.svg
│ │ ├── sd.svg
│ │ ├── se.svg
│ │ ├── sg.svg
│ │ ├── sh.svg
│ │ ├── si.svg
│ │ ├── sj.svg
│ │ ├── sk.svg
│ │ ├── sl.svg
│ │ ├── sm.svg
│ │ ├── sn.svg
│ │ ├── so.svg
│ │ ├── sr.svg
│ │ ├── ss.svg
│ │ ├── st.svg
│ │ ├── sv.svg
│ │ ├── sx.svg
│ │ ├── sy.svg
│ │ ├── sz.svg
│ │ ├── tc.svg
│ │ ├── td.svg
│ │ ├── tf.svg
│ │ ├── tg.svg
│ │ ├── th.svg
│ │ ├── tj.svg
│ │ ├── tk.svg
│ │ ├── tl.svg
│ │ ├── tm.svg
│ │ ├── tn.svg
│ │ ├── to.svg
│ │ ├── tr.svg
│ │ ├── tt.svg
│ │ ├── tv.svg
│ │ ├── tw.svg
│ │ ├── tz.svg
│ │ ├── ua.svg
│ │ ├── ug.svg
│ │ ├── um.svg
│ │ ├── un.svg
│ │ ├── us.svg
│ │ ├── uy.svg
│ │ ├── uz.svg
│ │ ├── va.svg
│ │ ├── vc.svg
│ │ ├── ve.svg
│ │ ├── vg.svg
│ │ ├── vi.svg
│ │ ├── vn.svg
│ │ ├── vu.svg
│ │ ├── wf.svg
│ │ ├── ws.svg
│ │ ├── ye.svg
│ │ ├── yt.svg
│ │ ├── za.svg
│ │ ├── zm.svg
│ │ └── zw.svg
│ └── js
│ │ └── toggle-dark-mode.js
├── build
│ ├── assets
│ │ ├── CompilerErrorMessages-6b34f14b-862555c2.js
│ │ ├── _commonjsHelpers-725317a4.js
│ │ ├── app-a1319ed7.css
│ │ ├── app-e9331348.js
│ │ ├── autosize.esm-32e303a0.js
│ │ ├── choices-b4319f5a.js
│ │ ├── fa-brands-400-003f1154.ttf
│ │ ├── fa-brands-400-faae6fc0.woff2
│ │ ├── fa-regular-400-7d81a1a7.ttf
│ │ ├── fa-regular-400-9169d8be.woff2
│ │ ├── fa-solid-900-886c8611.woff2
│ │ ├── fa-solid-900-cea79b34.ttf
│ │ ├── fa-v4compatibility-335fd7d9.woff2
│ │ ├── fa-v4compatibility-455e8e72.ttf
│ │ ├── filepond-plugin-file-validate-size.esm-cc68c999.js
│ │ ├── filepond-plugin-file-validate-type.esm-54b3a46f.js
│ │ ├── filepond-plugin-image-exif-orientation.esm-a30467e6.js
│ │ ├── filepond-plugin-image-preview.esm-b8cee188.js
│ │ ├── filepond-plugin-image-validate-size.esm-337c4814.js
│ │ ├── filepond.esm-54e39f90.js
│ │ ├── index-e698212e.js
│ │ ├── jodit.min-bd42590e.js
│ │ └── nprogress-e771348b.js
│ └── manifest.json
├── favicon.ico
├── index.php
├── robots.txt
└── vendor
│ └── translations
│ ├── app.css
│ ├── app.js
│ └── mix-manifest.json
├── resources
├── css
│ └── app.css
├── js
│ ├── app.js
│ ├── bootstrap.js
│ └── ssr.js
├── markdown
│ ├── policy.md
│ └── terms.md
└── views
│ ├── api
│ ├── edit.blade.php
│ └── index.blade.php
│ ├── auth
│ ├── confirm-password.blade.php
│ ├── forgot-password.blade.php
│ ├── login.blade.php
│ ├── register.blade.php
│ ├── reset-password.blade.php
│ ├── two-factor-challenge.blade.php
│ └── verify-email.blade.php
│ ├── components
│ ├── action-message.blade.php
│ ├── action-section.blade.php
│ ├── app-layout.blade.php
│ ├── application-logo.blade.php
│ ├── authentication-card.blade.php
│ ├── banner.blade.php
│ ├── btn-link.blade.php
│ ├── dashboard-layout.blade.php
│ ├── dialog-modal.blade.php
│ ├── dropdown-link.blade.php
│ ├── form-section.blade.php
│ ├── layout.blade.php
│ ├── nav-link.blade.php
│ ├── navbar.blade.php
│ ├── navigation.blade.php
│ ├── panel.blade.php
│ ├── responsive-nav-link.blade.php
│ ├── section-border.blade.php
│ ├── section-content.blade.php
│ ├── section-title.blade.php
│ ├── sidebar.blade.php
│ └── welcome.blade.php
│ ├── dashboard
│ ├── index.blade.php
│ ├── languages
│ │ └── index.blade.php
│ ├── permissions
│ │ ├── edit.blade.php
│ │ └── index.blade.php
│ ├── plugins
│ │ ├── create.blade.php
│ │ └── index.blade.php
│ ├── roles
│ │ ├── edit.blade.php
│ │ └── index.blade.php
│ ├── settings
│ │ └── index.blade.php
│ ├── traffics
│ │ ├── error-reports.blade.php
│ │ ├── index.blade.php
│ │ └── logs.blade.php
│ └── users
│ │ ├── edit.blade.php
│ │ └── index.blade.php
│ ├── docs.blade.php
│ ├── emails
│ └── team-invitation.blade.php
│ ├── home.blade.php
│ ├── policy.blade.php
│ ├── profile
│ ├── delete-user-form.blade.php
│ ├── logout-other-browser-sessions-form.blade.php
│ ├── show.blade.php
│ ├── two-factor-authentication-form.blade.php
│ ├── update-password-form.blade.php
│ └── update-profile-information-form.blade.php
│ ├── root.blade.php
│ ├── terms.blade.php
│ ├── vendor
│ └── splade
│ │ ├── components
│ │ ├── button-with-dropdown.blade.php
│ │ ├── button.blade.php
│ │ ├── confirm.blade.php
│ │ ├── dropdown.blade.php
│ │ ├── modal-wrapper.blade.php
│ │ ├── modal.blade.php
│ │ ├── slideover.blade.php
│ │ ├── toast-wrapper.blade.php
│ │ └── toast.blade.php
│ │ ├── form
│ │ ├── checkbox.blade.php
│ │ ├── checkboxes.blade.php
│ │ ├── error.blade.php
│ │ ├── file.blade.php
│ │ ├── group.blade.php
│ │ ├── help.blade.php
│ │ ├── input.blade.php
│ │ ├── label.blade.php
│ │ ├── radio.blade.php
│ │ ├── radios.blade.php
│ │ ├── select-child.blade.php
│ │ ├── select.blade.php
│ │ ├── submit.blade.php
│ │ ├── textarea.blade.php
│ │ └── wysiwyg.blade.php
│ │ └── table
│ │ ├── add-search-row.blade.php
│ │ ├── body.blade.php
│ │ ├── bulk-actions-exports.blade.php
│ │ ├── columns.blade.php
│ │ ├── controls.blade.php
│ │ ├── filters.blade.php
│ │ ├── global-search.blade.php
│ │ ├── head.blade.php
│ │ ├── pagination.blade.php
│ │ ├── per-page-selector.blade.php
│ │ ├── search-row.blade.php
│ │ ├── select-rows-dropdown.blade.php
│ │ ├── simple-pagination.blade.php
│ │ ├── table.blade.php
│ │ └── wrapper.blade.php
│ └── welcome.blade.php
├── routes
├── api.php
├── channels.php
├── console.php
└── web.php
├── storage
├── app
│ ├── .gitignore
│ └── public
│ │ └── .gitignore
├── framework
│ ├── .gitignore
│ ├── cache
│ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ ├── testing
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
└── logs
│ └── .gitignore
├── tailwind.config.js
├── tests
├── Browser
│ ├── Jetstream
│ │ ├── ApiTokenPermissionsTest.php
│ │ ├── AuthenticationTest.php
│ │ ├── BrowserSessionsTest.php
│ │ ├── CreateApiTokenTest.php
│ │ ├── CreateTeamTest.php
│ │ ├── DeleteAccountTest.php
│ │ ├── DeleteApiTokenTest.php
│ │ ├── DeleteTeamTest.php
│ │ ├── EmailVerificationTest.php
│ │ ├── InviteTeamMemberTest.php
│ │ ├── LeaveTeamTest.php
│ │ ├── PasswordConfirmationTest.php
│ │ ├── PasswordResetTest.php
│ │ ├── PrivacyTest.php
│ │ ├── ProfileInformationTest.php
│ │ ├── RegistrationTest.php
│ │ ├── RemoveTeamMemberTest.php
│ │ ├── TermsTest.php
│ │ ├── TwoFactorAuthenticationSettingsTest.php
│ │ ├── UpdatePasswordTest.php
│ │ ├── UpdateTeamMemberRoleTest.php
│ │ ├── UpdateTeamNameTest.php
│ │ └── photo.jpeg
│ ├── Pages
│ │ ├── HomePage.php
│ │ └── Page.php
│ ├── console
│ │ └── .gitignore
│ ├── screenshots
│ │ └── .gitignore
│ └── source
│ │ └── .gitignore
├── CreatesApplication.php
├── DuskTestCase.php
├── Feature
│ ├── AuthenticationTest.php
│ ├── EmailVerificationTest.php
│ ├── ExampleTest.php
│ ├── PasswordConfirmationTest.php
│ ├── PasswordResetTest.php
│ └── RegistrationTest.php
├── TestCase.php
└── Unit
│ └── ExampleTest.php
└── vite.config.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_size = 4
7 | indent_style = space
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.{yml,yaml}]
15 | indent_size = 2
16 |
17 | [docker-compose.yml]
18 | indent_size = 4
19 |
--------------------------------------------------------------------------------
/.env.dusk:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=base64:xcEnu4C/PJvhan7I0PnHK/hAqVclnMU9ANW+LSXDVO4=
4 | APP_DEBUG=true
5 | APP_URL=http://127.0.0.1:8000
6 |
7 | LOG_CHANNEL=stack
8 | LOG_DEPRECATIONS_CHANNEL=null
9 | LOG_LEVEL=debug
10 |
11 | DB_CONNECTION=sqlite
12 | # DB_HOST=127.0.0.1
13 | # DB_PORT=3306
14 | # DB_DATABASE=splade
15 | # DB_USERNAME=root
16 | # DB_PASSWORD=
17 |
18 | BROADCAST_DRIVER=log
19 | CACHE_DRIVER=file
20 | FILESYSTEM_DISK=local
21 | QUEUE_CONNECTION=sync
22 | SESSION_DRIVER=file
23 | SESSION_LIFETIME=120
24 |
25 | MEMCACHED_HOST=127.0.0.1
26 |
27 | REDIS_HOST=127.0.0.1
28 | REDIS_PASSWORD=null
29 | REDIS_PORT=6379
30 |
31 | MAIL_MAILER=smtp
32 | MAIL_HOST=mailhog
33 | MAIL_PORT=1025
34 | MAIL_USERNAME=null
35 | MAIL_PASSWORD=null
36 | MAIL_ENCRYPTION=null
37 | MAIL_FROM_ADDRESS="hello@example.com"
38 | MAIL_FROM_NAME="${APP_NAME}"
39 |
40 | AWS_ACCESS_KEY_ID=
41 | AWS_SECRET_ACCESS_KEY=
42 | AWS_DEFAULT_REGION=us-east-1
43 | AWS_BUCKET=
44 | AWS_USE_PATH_STYLE_ENDPOINT=false
45 |
46 | PUSHER_APP_ID=
47 | PUSHER_APP_KEY=
48 | PUSHER_APP_SECRET=
49 | PUSHER_HOST=
50 | PUSHER_PORT=443
51 | PUSHER_SCHEME=https
52 | PUSHER_APP_CLUSTER=mt1
53 |
54 | VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
55 | VITE_PUSHER_HOST="${PUSHER_HOST}"
56 | VITE_PUSHER_PORT="${PUSHER_PORT}"
57 | VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
58 | VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
59 |
60 | DUSK_FAKE_MAILS=true
61 | DUSK_FAKE_NOTIFICATIONS=true
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_URL=http://localhost
6 |
7 | LOG_CHANNEL=stack
8 | LOG_DEPRECATIONS_CHANNEL=null
9 | LOG_LEVEL=debug
10 |
11 | DB_CONNECTION=mysql
12 | DB_HOST=127.0.0.1
13 | DB_PORT=3306
14 | DB_DATABASE=dashboard
15 | DB_USERNAME=root
16 | DB_PASSWORD=
17 |
18 | BROADCAST_DRIVER=log
19 | CACHE_DRIVER=file
20 | FILESYSTEM_DISK=local
21 | QUEUE_CONNECTION=sync
22 | SESSION_DRIVER=database
23 | SESSION_LIFETIME=120
24 |
25 | MEMCACHED_HOST=127.0.0.1
26 |
27 | REDIS_HOST=127.0.0.1
28 | REDIS_PASSWORD=null
29 | REDIS_PORT=6379
30 |
31 | MAIL_MAILER=smtp
32 | MAIL_HOST=mailpit
33 | MAIL_PORT=1025
34 | MAIL_USERNAME=null
35 | MAIL_PASSWORD=null
36 | MAIL_ENCRYPTION=null
37 | MAIL_FROM_ADDRESS="hello@example.com"
38 | MAIL_FROM_NAME="${APP_NAME}"
39 |
40 | AWS_ACCESS_KEY_ID=
41 | AWS_SECRET_ACCESS_KEY=
42 | AWS_DEFAULT_REGION=us-east-1
43 | AWS_BUCKET=
44 | AWS_USE_PATH_STYLE_ENDPOINT=false
45 |
46 | PUSHER_APP_ID=
47 | PUSHER_APP_KEY=
48 | PUSHER_APP_SECRET=
49 | PUSHER_HOST=
50 | PUSHER_PORT=443
51 | PUSHER_SCHEME=https
52 | PUSHER_APP_CLUSTER=mt1
53 |
54 | VITE_APP_NAME="${APP_NAME}"
55 | VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
56 | VITE_PUSHER_HOST="${PUSHER_HOST}"
57 | VITE_PUSHER_PORT="${PUSHER_PORT}"
58 | VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
59 | VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
60 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 |
3 | *.blade.php diff=html
4 | *.css diff=css
5 | *.html diff=html
6 | *.md diff=markdown
7 | *.php diff=php
8 |
9 | /.github export-ignore
10 | CHANGELOG.md export-ignore
11 | .styleci.yml export-ignore
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor/
2 | node_modules/
3 | npm-debug.log
4 | yarn-error.log
5 |
6 | # Laravel 4 specific
7 | bootstrap/compiled.php
8 | app/storage/
9 |
10 | # Laravel 5 & Lumen specific
11 | public/storage
12 | public/hot
13 |
14 | # Laravel 5 & Lumen specific with changed public path
15 | public_html/storage
16 | public_html/hot
17 |
18 | storage/*.key
19 | .env
20 | Homestead.yaml
21 | Homestead.json
22 | /.vagrant
23 | .phpunit.result.cache
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Abdelmjid Saber
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/app/Actions/Fortify/PasswordValidationRules.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected function passwordRules(): array
15 | {
16 | return ['required', 'string', new Password, 'confirmed'];
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/Actions/Fortify/ResetUserPassword.php:
--------------------------------------------------------------------------------
1 | $input
18 | */
19 | public function reset(User $user, array $input): void
20 | {
21 | Validator::make($input, [
22 | 'password' => $this->passwordRules(),
23 | ])->validate();
24 |
25 | $user->forceFill([
26 | 'password' => Hash::make($input['password']),
27 | ])->save();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Actions/Fortify/UpdateUserPassword.php:
--------------------------------------------------------------------------------
1 | $input
18 | */
19 | public function update(User $user, array $input): void
20 | {
21 | Validator::make($input, [
22 | 'current_password' => ['required', 'string', 'current_password:web'],
23 | 'password' => $this->passwordRules(),
24 | ], [
25 | 'current_password.current_password' => __('The provided password does not match your current password.'),
26 | ])->validateWithBag('updatePassword');
27 |
28 | $user->forceFill([
29 | 'password' => Hash::make($input['password']),
30 | ])->save();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Actions/Jetstream/DeleteUser.php:
--------------------------------------------------------------------------------
1 | deletesTeams = $deletesTeams;
26 | }
27 |
28 | /**
29 | * Delete the given user.
30 | */
31 | public function delete(User $user): void
32 | {
33 | DB::transaction(function () use ($user) {
34 | $this->deleteTeams($user);
35 | $user->deleteProfilePhoto();
36 | $user->tokens->each->delete();
37 | $user->delete();
38 | });
39 | }
40 |
41 | /**
42 | * Delete the teams and team associations attached to the user.
43 | */
44 | protected function deleteTeams(User $user): void
45 | {
46 | $user->teams()->detach();
47 |
48 | $user->ownedTeams->each(function (Team $team) {
49 | $this->deletesTeams->delete($team);
50 | });
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')->hourly();
16 | }
17 |
18 | /**
19 | * Register the commands for the application.
20 | */
21 | protected function commands(): void
22 | {
23 | $this->load(__DIR__.'/Commands');
24 |
25 | require base_path('routes/console.php');
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 |
15 | */
16 | protected $dontFlash = [
17 | 'current_password',
18 | 'password',
19 | 'password_confirmation',
20 | ];
21 |
22 | /**
23 | * Register the exception handling callbacks for the application.
24 | */
25 | public function register(): void
26 | {
27 | $this->renderable(\ProtoneMedia\Splade\SpladeCore::exceptionHandler($this));
28 |
29 | $this->reportable(function (Throwable $e) {
30 | MainHelper::make_error_report([
31 | 'error'=>$e->getMessage(),
32 | 'error_code'=>500,
33 | 'details'=>"Error : ".$e->getFile()." Line : ". $e->getLine() . json_encode(request()->instance())
34 | ]);
35 | });
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/Helpers/SettingsHelper.php:
--------------------------------------------------------------------------------
1 | value('value');
11 | } catch (\Exception $e) {
12 | return "Error: Could not connect to database.";
13 | }
14 | }
15 | }
16 |
17 | function social_image()
18 | {
19 | return Storage::url(getSetting('social_image'));
20 | }
21 |
22 | function light_logo()
23 | {
24 | return Storage::url(getSetting('light_logo'));
25 | }
26 |
27 | function dark_logo()
28 | {
29 | return Storage::url(getSetting('dark_logo'));
30 |
31 | }
32 |
33 | function favicon()
34 | {
35 | return Storage::url(getSetting('favicon'));
36 | }
37 |
38 | function locales()
39 | {
40 | return Language::where('status', 1)->orderBy('name', 'asc')->get();
41 | }
--------------------------------------------------------------------------------
/app/Http/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | middleware('can:read reports', ['only' => ['index', 'logs', 'error_reports', 'error_report']]);
17 | }
18 |
19 | public function index()
20 | {
21 | return view('dashboard.traffics.index', [
22 | 'traffics' => Traffics::class,
23 | ]);
24 | }
25 |
26 | public function logs()
27 | {
28 | return view('dashboard.traffics.logs', [
29 | 'logs' => TrafficsLogs::class
30 | ]);
31 | }
32 |
33 | public function error_reports()
34 | {
35 | return view('dashboard.traffics.error-reports', [
36 | 'reports' => ErrorReports::class
37 | ]);
38 | }
39 |
40 | public function error_report(ReportError $report)
41 | {
42 | return dd($report);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson() ? null : route('login');
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/CheckUserRegistration.php:
--------------------------------------------------------------------------------
1 | route('login')->withErrors(['message' => 'User registration is currently disabled.']);
22 | }
23 |
24 | return $next($request);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Language.php:
--------------------------------------------------------------------------------
1 | segment(1))->first();
26 | $locale = $language ? $language->code : config('app.locale');
27 | Session::put('locale', $locale);
28 | }
29 |
30 | App::setLocale($locale);
31 | return $next($request);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/Http/Middleware/PreventRequestsDuringMaintenance.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Http/Middleware/RateLimit.php:
--------------------------------------------------------------------------------
1 | check()) {
24 | return redirect(RouteServiceProvider::HOME);
25 | }
26 | }
27 |
28 | return $next($request);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | 'current_password',
16 | 'password',
17 | 'password_confirmation',
18 | ];
19 | }
20 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustHosts.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | public function hosts(): array
15 | {
16 | return [
17 | $this->allSubdomainsOfApplicationUrl(),
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustProxies.php:
--------------------------------------------------------------------------------
1 | |string|null
14 | */
15 | protected $proxies;
16 |
17 | /**
18 | * The headers that should be used to detect proxies.
19 | *
20 | * @var int
21 | */
22 | protected $headers =
23 | Request::HEADER_X_FORWARDED_FOR |
24 | Request::HEADER_X_FORWARDED_HOST |
25 | Request::HEADER_X_FORWARDED_PORT |
26 | Request::HEADER_X_FORWARDED_PROTO |
27 | Request::HEADER_X_FORWARDED_AWS_ELB;
28 | }
29 |
--------------------------------------------------------------------------------
/app/Http/Middleware/ValidateSignature.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | // 'fbclid',
16 | // 'utm_campaign',
17 | // 'utm_content',
18 | // 'utm_medium',
19 | // 'utm_source',
20 | // 'utm_term',
21 | ];
22 | }
23 |
--------------------------------------------------------------------------------
/app/Http/Middleware/VerifyCsrfToken.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Models/Language.php:
--------------------------------------------------------------------------------
1 | hasMany(RateLimitDetail::class);
17 | }
18 |
19 | public function user()
20 | {
21 | return $this->belongsTo(User::class);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/Models/RateLimitDetail.php:
--------------------------------------------------------------------------------
1 | belongsTo(RateLimit::class);
17 | }
18 |
19 | public function user()
20 | {
21 | return $this->belongsTo(User::class);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/Models/ReportError.php:
--------------------------------------------------------------------------------
1 | belongsTo(User::class);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/Models/Setting.php:
--------------------------------------------------------------------------------
1 |
15 | */
16 | protected $policies = [
17 | Team::class => TeamPolicy::class,
18 | ];
19 |
20 | /**
21 | * Register any authentication / authorization services.
22 | */
23 | public function boot(): void
24 | {
25 | $this->registerPolicies();
26 |
27 | //
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | >
16 | */
17 | protected $listen = [
18 | Registered::class => [
19 | SendEmailVerificationNotification::class,
20 | ],
21 | ];
22 |
23 | /**
24 | * Register any events for your application.
25 | */
26 | public function boot(): void
27 | {
28 | //
29 | }
30 |
31 | /**
32 | * Determine if events and listeners should be automatically discovered.
33 | */
34 | public function shouldDiscoverEvents(): bool
35 | {
36 | return false;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | by($request->user()?->id ?: $request->ip());
29 | });
30 |
31 | $this->routes(function () {
32 | Route::middleware('api')
33 | ->prefix('api')
34 | ->group(base_path('routes/api.php'));
35 |
36 | Route::middleware('web')
37 | ->group(base_path('routes/web.php'));
38 | });
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Providers/TranslationsServiceProvider.php:
--------------------------------------------------------------------------------
1 | email, [
19 | //
20 | ]);
21 | });
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/config/cors.php:
--------------------------------------------------------------------------------
1 | ['api/*', 'sanctum/csrf-cookie'],
19 |
20 | 'allowed_methods' => ['*'],
21 |
22 | 'allowed_origins' => ['*'],
23 |
24 | 'allowed_origins_patterns' => [],
25 |
26 | 'allowed_headers' => ['*'],
27 |
28 | 'exposed_headers' => [],
29 |
30 | 'max_age' => 0,
31 |
32 | 'supports_credentials' => false,
33 |
34 | ];
35 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
21 | 'scheme' => 'https',
22 | ],
23 |
24 | 'postmark' => [
25 | 'token' => env('POSTMARK_TOKEN'),
26 | ],
27 |
28 | 'ses' => [
29 | 'key' => env('AWS_ACCESS_KEY_ID'),
30 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
31 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
32 | ],
33 |
34 | ];
35 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('views'),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => env(
32 | 'VIEW_COMPILED_PATH',
33 | realpath(storage_path('framework/views'))
34 | ),
35 |
36 | ];
37 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite*
2 |
--------------------------------------------------------------------------------
/database/factories/TeamFactory.php:
--------------------------------------------------------------------------------
1 |
22 | */
23 | public function definition(): array
24 | {
25 | return [
26 | 'name' => $this->faker->unique()->company(),
27 | 'user_id' => User::factory(),
28 | 'personal_team' => true,
29 | ];
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('name');
17 | $table->string('username')->unique();
18 | $table->string('email')->unique();
19 | $table->timestamp('email_verified_at')->nullable();
20 | $table->string('password');
21 | $table->rememberToken();
22 | $table->foreignId('current_team_id')->nullable();
23 | $table->string('profile_photo_path', 2048)->nullable();
24 | $table->longText('bio')->nullable();
25 | $table->enum('status', ['Active', 'Banned'])->default('Active');
26 | $table->timestamps();
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | */
33 | public function down(): void
34 | {
35 | Schema::dropIfExists('users');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php:
--------------------------------------------------------------------------------
1 | string('email')->primary();
16 | $table->string('token');
17 | $table->timestamp('created_at')->nullable();
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | */
24 | public function down(): void
25 | {
26 | Schema::dropIfExists('password_reset_tokens');
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('uuid')->unique();
17 | $table->text('connection');
18 | $table->text('queue');
19 | $table->longText('payload');
20 | $table->longText('exception');
21 | $table->timestamp('failed_at')->useCurrent();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | */
28 | public function down(): void
29 | {
30 | Schema::dropIfExists('failed_jobs');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->morphs('tokenable');
17 | $table->string('name');
18 | $table->string('token', 64)->unique();
19 | $table->text('abilities')->nullable();
20 | $table->timestamp('last_used_at')->nullable();
21 | $table->timestamp('expires_at')->nullable();
22 | $table->timestamps();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | */
29 | public function down(): void
30 | {
31 | Schema::dropIfExists('personal_access_tokens');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_03_171119_create_sessions_table.php:
--------------------------------------------------------------------------------
1 | string('id')->primary();
16 | $table->foreignId('user_id')->nullable()->index();
17 | $table->string('ip_address', 45)->nullable();
18 | $table->text('user_agent')->nullable();
19 | $table->longText('payload');
20 | $table->integer('last_activity')->index();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | */
27 | public function down(): void
28 | {
29 | Schema::dropIfExists('sessions');
30 | }
31 | };
32 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_07_090927_create_settings_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('key')->nullable();
17 | $table->longText('value')->nullable();
18 | $table->timestamps();
19 | });
20 | }
21 |
22 | /**
23 | * Reverse the migrations.
24 | */
25 | public function down(): void
26 | {
27 | Schema::dropIfExists('settings');
28 | }
29 | };
30 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_07_172433_create_languages_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('name');
17 | $table->string('code');
18 | $table->enum('dir', ['ltr', 'rtl'])->default('ltr');
19 | $table->string('icon')->nullable();
20 | $table->enum('status', ['Active', 'Disabled'])->default('Active');
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | */
28 | public function down(): void
29 | {
30 | Schema::dropIfExists('languages');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_08_082015_create_rate_limit_details_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->unsignedBigInteger('user_id')->nullable();
17 | $table->foreign('user_id')->references('id')->on("users")->onDelete('cascade');
18 | $table->unsignedBigInteger('rate_limit_id')->nullable();
19 | $table->foreign('rate_limit_id')->references('id')->on("rate_limits")->onDelete('cascade');
20 | $table->text('query')->nullable();
21 | $table->string('url')->nullable()->index();
22 | $table->string('ip')->index();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | */
30 | public function down(): void
31 | {
32 | Schema::dropIfExists('rate_limit_details');
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_08_082127_create_report_errors_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->unsignedBigInteger('user_id')->nullable();
17 | $table->foreign('user_id')->references('id')->on("users")->onDelete('cascade');
18 | $table->text('title')->nullable();
19 | $table->string('code');
20 | $table->text('url');
21 | $table->string('ip');
22 | $table->string('user_agent')->nullable();
23 | $table->text('request')->nullable();
24 | $table->text('description')->nullable();
25 | $table->text('note')->nullable();
26 | $table->timestamps();
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | */
33 | public function down(): void
34 | {
35 | Schema::dropIfExists('report_errors');
36 | }
37 | };
38 |
--------------------------------------------------------------------------------
/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call([
16 | RolesAndPermissionsSeeder::class,
17 | UsersSeeder::class,
18 | SettingsSeeder::class,
19 | LanguagesSeeder::class
20 | ]);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/database/seeders/LanguagesSeeder.php:
--------------------------------------------------------------------------------
1 | 'English',
19 | 'code' => 'en',
20 | 'dir' => 'ltr',
21 | 'icon' => 'us',
22 | 'status' => 'Active',
23 | ],
24 | [
25 | 'name' => 'العربية',
26 | 'code' => 'ar',
27 | 'dir' => 'rtl',
28 | 'icon' => 'eg',
29 | 'status' => 'Active',
30 | ],
31 | ];
32 |
33 | foreach ($languages as $language) {
34 | Language::create($language);
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/database/seeders/UsersSeeder.php:
--------------------------------------------------------------------------------
1 | "Admin",
18 | 'username' => "admin",
19 | 'email' => 'admin@admin.com',
20 | 'email_verified_at' => now(),
21 | 'password' => bcrypt('password')
22 | ]);
23 |
24 | $user->syncRoles('super-admin');
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lang/ar/auth.php:
--------------------------------------------------------------------------------
1 | 'لا تتطابق هذه البيانات مع سجلاتنا.',
5 | 'password' => 'كلمة المرور المقدمة غير صحيحة.',
6 | 'throttle' => 'عدد كبير من محاولات تسجيل الدخول. يُرجى المحاولة مرة أخرى بعد :seconds ثانية.',
7 | ];
8 |
--------------------------------------------------------------------------------
/lang/ar/pagination.php:
--------------------------------------------------------------------------------
1 | '« السابق',
5 | 'next' => 'التالي »',
6 | ];
7 |
--------------------------------------------------------------------------------
/lang/ar/passwords.php:
--------------------------------------------------------------------------------
1 | 'تم إعادة تعيين كلمة المرور.',
5 | 'sent' => 'لقد قمنا بإرسال رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني.',
6 | 'throttled' => 'الرجاء الانتظار قبل إعادة المحاولة.',
7 | 'token' => 'رمز إعادة تعيين كلمة المرور هذا غير صالح.',
8 | 'user' => 'لا يمكننا العثور على مستخدم بهذا البريد الالكتروني.',
9 | ];
10 |
--------------------------------------------------------------------------------
/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
5 | 'password' => 'The provided password is incorrect.',
6 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
7 | ];
8 |
--------------------------------------------------------------------------------
/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
5 | 'next' => 'Next »',
6 | ];
7 |
--------------------------------------------------------------------------------
/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset.',
5 | 'sent' => 'We have emailed your password reset link.',
6 | 'throttled' => 'Please wait before retrying.',
7 | 'token' => 'This password reset token is invalid.',
8 | 'user' => 'We can\'t find a user with that email address.',
9 | ];
10 |
--------------------------------------------------------------------------------
/modules_statuses.json:
--------------------------------------------------------------------------------
1 | []
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "type": "module",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build && vite build --ssr"
7 | },
8 | "devDependencies": {
9 | "@protonemedia/laravel-splade": "^1.4.8",
10 | "@tailwindcss/forms": "^0.5.3",
11 | "@tailwindcss/typography": "^0.5.2",
12 | "@vitejs/plugin-vue": "^4.0.0",
13 | "autoprefixer": "^10.4.12",
14 | "axios": "^1.1.2",
15 | "laravel-vite-plugin": "^0.7.5",
16 | "postcss": "^8.4.18",
17 | "tailwindcss": "^3.3.0",
18 | "vite": "^4.0.0",
19 | "vue": "^3.2.41"
20 | },
21 | "dependencies": {
22 | "@fortawesome/fontawesome-free": "^6.4.2"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | tests/Unit
10 |
11 |
12 | tests/Feature
13 |
14 |
15 |
16 |
17 | app
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Send Requests To Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/public/assets/flags/ae.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ag.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/am.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/at.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ax.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/az.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ba.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bd.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/be.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bj.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bq.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bs.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/bw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ca.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/assets/flags/cd.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ci.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/co.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/cz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/de.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/dj.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/dk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/dz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ee.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/eh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/eu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/fi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/fm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/fo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/fr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ga.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gb-eng.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gb-sct.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/gy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/hn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/hu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/id.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ie.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/il.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/in.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/is.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/it.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/jm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/jo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/jp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ke.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/km.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/kn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/kp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/kw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/la.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/lc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/lr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/lt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/lu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/lv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ly.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ma.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ml.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mq.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/mv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/na.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/nc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ne.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ng.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/nl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/no.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/np.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/nr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pa.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pe.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ph.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ps.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/pw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/qa.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/re.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ro.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ru.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/rw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sd.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/se.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sj.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/so.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ss.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/st.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/sy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/td.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/th.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/to.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/tz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ua.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/uz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/vc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ve.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/vn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/wf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ws.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/ye.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/yt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/flags/za.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/build/assets/_commonjsHelpers-725317a4.js:
--------------------------------------------------------------------------------
1 | var o=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}export{o as c,l as g};
2 |
--------------------------------------------------------------------------------
/public/build/assets/fa-brands-400-003f1154.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-brands-400-003f1154.ttf
--------------------------------------------------------------------------------
/public/build/assets/fa-brands-400-faae6fc0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-brands-400-faae6fc0.woff2
--------------------------------------------------------------------------------
/public/build/assets/fa-regular-400-7d81a1a7.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-regular-400-7d81a1a7.ttf
--------------------------------------------------------------------------------
/public/build/assets/fa-regular-400-9169d8be.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-regular-400-9169d8be.woff2
--------------------------------------------------------------------------------
/public/build/assets/fa-solid-900-886c8611.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-solid-900-886c8611.woff2
--------------------------------------------------------------------------------
/public/build/assets/fa-solid-900-cea79b34.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-solid-900-cea79b34.ttf
--------------------------------------------------------------------------------
/public/build/assets/fa-v4compatibility-335fd7d9.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-v4compatibility-335fd7d9.woff2
--------------------------------------------------------------------------------
/public/build/assets/fa-v4compatibility-455e8e72.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/build/assets/fa-v4compatibility-455e8e72.ttf
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/public/favicon.ico
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/public/vendor/translations/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/app.js": "/app.js",
3 | "/app.css": "/app.css"
4 | }
5 |
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
1 | @import "@fortawesome/fontawesome-free/css/all.css";
2 |
3 | @tailwind base;
4 | @tailwind components;
5 | @tailwind utilities;
6 |
7 | @layer components {
8 | .dark .choices__item {
9 | color: white;
10 | }
11 |
12 | .dark .choices .choices__inner {
13 | background-color: #1F2937;
14 | color: white;
15 | border-color: rgb(75 85 99 / var(--tw-border-opacity));
16 | }
17 |
18 | .dark .choices__input {
19 | background-color: transparent;
20 | }
21 |
22 | .dark .choices[data-type*=select-one] .choices__input {
23 | background-color: #111827 !important;
24 | color: white;
25 | }
26 |
27 | .dark .choices__list--dropdown,
28 | .dark .choices__list[aria-expanded] {
29 | background-color: #111827 !important;
30 | }
31 |
32 | .dark .choices .choices__list--dropdown .choices__item--selectable {
33 | color: white !important;
34 | }
35 |
36 | :dir(rtl) .choices[data-type*=select-one] .choices__button {
37 | left: 0;
38 | }
39 | }
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 | import "./bootstrap";
2 | import "../css/app.css";
3 | import "@protonemedia/laravel-splade/dist/style.css";
4 | import { createApp } from "vue/dist/vue.esm-bundler.js";
5 | import { renderSpladeApp, SpladePlugin } from "@protonemedia/laravel-splade";
6 | import "@protonemedia/laravel-splade/dist/jodit.css";
7 | import "../../public/assets/js/toggle-dark-mode";
8 |
9 | const el = document.getElementById("app");
10 |
11 | createApp({
12 | render: renderSpladeApp({ el })
13 | })
14 | .use(SpladePlugin, {
15 | "max_keep_alive": 10,
16 | "transform_anchors": false,
17 | "progress_bar": true
18 | })
19 | .mount(el);
20 |
--------------------------------------------------------------------------------
/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | /**
2 | * We'll load the axios HTTP library which allows us to easily issue requests
3 | * to our Laravel back-end. This library automatically handles sending the
4 | * CSRF token as a header based on the value of the "XSRF" token cookie.
5 | */
6 |
7 | import axios from 'axios';
8 | window.axios = axios;
9 |
10 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
11 |
12 | /**
13 | * Echo exposes an expressive API for subscribing to channels and listening
14 | * for events that are broadcast by Laravel. Echo and event broadcasting
15 | * allows your team to easily build robust real-time web applications.
16 | */
17 |
18 | // import Echo from 'laravel-echo';
19 |
20 | // import Pusher from 'pusher-js';
21 | // window.Pusher = Pusher;
22 |
23 | // window.Echo = new Echo({
24 | // broadcaster: 'pusher',
25 | // key: import.meta.env.VITE_PUSHER_APP_KEY,
26 | // cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',
27 | // wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
28 | // wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
29 | // wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
30 | // forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
31 | // enabledTransports: ['ws', 'wss'],
32 | // });
33 |
--------------------------------------------------------------------------------
/resources/js/ssr.js:
--------------------------------------------------------------------------------
1 | import { createServer } from "http";
2 | import { createSSRApp } from "vue";
3 | import { renderToString } from "@vue/server-renderer";
4 | import { renderSpladeApp, SpladePlugin, startServer } from "@protonemedia/laravel-splade";
5 |
6 | startServer(createServer, renderToString, (props) => {
7 | return createSSRApp({
8 | render: renderSpladeApp(props)
9 | })
10 | .use(SpladePlugin);
11 | });
--------------------------------------------------------------------------------
/resources/markdown/policy.md:
--------------------------------------------------------------------------------
1 | # Privacy Policy
2 |
3 | Edit this file to define the privacy policy for your application.
4 |
--------------------------------------------------------------------------------
/resources/markdown/terms.md:
--------------------------------------------------------------------------------
1 | # Terms of Service
2 |
3 | Edit this file to define the terms of service for your application.
4 |
--------------------------------------------------------------------------------
/resources/views/api/edit.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{ __('API Token Permissions') }}
7 |
8 |
9 |
10 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/resources/views/auth/confirm-password.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('main.secure_area'))
2 |
3 |
4 |
5 | {{ __('main.confirm_password_message') }}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/auth/forgot-password.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('main.forgot_password'))
2 |
3 |
4 | @lang('main.forgot_password')
5 |
6 | {{ __('main.forgot_password_message') }}
7 |
8 |
9 | @if($status = session('status'))
10 |
11 | {{ $status }}
12 |
13 | @endif
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/views/auth/login.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('main.login'))
2 |
3 |
4 | @lang('main.login')
5 | @if($status = session('status'))
6 |
7 | {{ $status }}
8 |
9 | @endif
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{ __('main.remember_me') }}
17 |
18 | @if(Route::has('password.request'))
19 |
20 | {{ __('main.forgot_your_password?') }}
21 |
22 | @endif
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/resources/views/auth/reset-password.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('main.reset_password'))
2 |
3 |
4 | @lang('main.reset_password')
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/components/action-message.blade.php:
--------------------------------------------------------------------------------
1 |
class('text-sm text-gray-600') }}>
2 | {{ $slot }}
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/components/action-section.blade.php:
--------------------------------------------------------------------------------
1 | class('md:grid md:grid-cols-3 md:gap-6') }}>
2 |
3 |
4 | {{ $title }}
5 |
6 |
7 |
8 | {{ $description }}
9 |
10 |
11 |
12 |
13 |
14 | {{ $content }}
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/resources/views/components/app-layout.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | @isset($header)
9 |
10 |
11 | {{ $header }}
12 |
13 |
14 | @endif
15 |
16 |
17 |
18 | {{ $slot }}
19 |
20 |
--------------------------------------------------------------------------------
/resources/views/components/application-logo.blade.php:
--------------------------------------------------------------------------------
1 | @if (getSetting('light_logo') && getSetting('dark_logo'))
2 |
3 |
4 |
5 |
6 | @else
7 | {{ getSetting('website_name') }}
8 | @endif
--------------------------------------------------------------------------------
/resources/views/components/authentication-card.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ $slot }}
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/resources/views/components/btn-link.blade.php:
--------------------------------------------------------------------------------
1 | merge() }} class="block border rounded-md shadow-sm font-bold py-2 px-4 focus:outline-none focus:ring focus:ring-opacity-50 bg-indigo-500 hover:bg-indigo-700 text-white border-transparent focus:border-indigo-300 focus:ring-indigo-200">
2 | {{ $slot }}
3 |
4 |
--------------------------------------------------------------------------------
/resources/views/components/dashboard-layout.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{ $slot }}
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/components/dialog-modal.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ $title }}
4 |
5 |
6 |
7 | {{ $content }}
8 |
9 |
10 |
11 |
12 | {{ $footer }}
13 |
--------------------------------------------------------------------------------
/resources/views/components/dropdown-link.blade.php:
--------------------------------------------------------------------------------
1 | @props(['as' => false])
2 |
3 |
--------------------------------------------------------------------------------
/resources/views/components/form-section.blade.php:
--------------------------------------------------------------------------------
1 | class('md:grid md:grid-cols-3 md:gap-6') }}>
2 |
3 |
4 | {{ $title }}
5 |
6 |
7 |
8 | {{ $description }}
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{ $form }}
16 |
17 |
18 |
19 | @isset($actions)
20 |
21 | {{ $actions }}
22 |
23 | @endisset
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/resources/views/components/layout.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | @if(isset($header))
6 |
13 | @endif
14 |
15 |
16 |
17 | {{ $slot }}
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/views/components/nav-link.blade.php:
--------------------------------------------------------------------------------
1 | @props(['active' => false])
2 |
3 | @php
4 | $classes = ($active ?? false)
5 | ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-gray-300 text-sm font-medium leading-5 text-gray-900 dark:text-gray-300 focus:outline-none focus:border-indigo-700 dark:focus:border-gray-500 transition duration-150 ease-in-out'
6 | : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-500 transition duration-150 ease-in-out';
7 | @endphp
8 |
9 | merge(['class' => $classes]) }}>
10 | {{ $slot }}
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/components/panel.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
class(['p-6 sm:px-20 bg-white border-b border-gray-200' => true]) }}>
5 | {{ $slot }}
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/resources/views/components/responsive-nav-link.blade.php:
--------------------------------------------------------------------------------
1 | @props(['as' => false, 'active' => false])
2 |
3 | @php
4 | $classes = ($active ?? false)
5 | ? 'block w-full pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-left text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out'
6 | : 'block w-full pl-3 pr-4 py-2 border-l-4 border-transparent text-left text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out';
7 | @endphp
8 |
9 | @if($as === 'button')
10 | merge(['type' => 'submit', 'class' => $classes]) }}>
11 | {{ $slot }}
12 |
13 | @else
14 | merge(['class' => $classes]) }}>
15 | {{ $slot }}
16 |
17 | @endif
--------------------------------------------------------------------------------
/resources/views/components/section-border.blade.php:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/resources/views/components/section-content.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{ $slot }}
3 |
--------------------------------------------------------------------------------
/resources/views/components/section-title.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ $title }}
5 |
6 |
7 |
8 | {{ $description }}
9 |
10 |
11 |
12 |
13 | {{ $aside ?? null }}
14 |
15 |
16 |
--------------------------------------------------------------------------------
/resources/views/components/welcome.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Welcome to your SpladePanel!
4 |
5 |
6 |
7 | Introducing SpladePanel: Your gateway to a streamlined dashboard creation experience. This user-friendly Arabic dashboard boasts essential settings, an appealing layout, and leverages Laravel Splade's prowess. Effortlessly construct fast Single Page Applications (SPAs) using standard Blade templates, enriched by Vue 3 components. Unveil the art of efficient dashboard design with SpladePanel.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/dashboard/index.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('main.dashboard'))
2 |
3 |
4 |
5 |
6 | @lang('main.dashboard')
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/docs.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Docs') }}
4 |
5 |
6 |
7 | Hi developer!
8 | You'll find the docs at splade.dev/docs
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/emails/team-invitation.blade.php:
--------------------------------------------------------------------------------
1 | @component('mail::message')
2 | {{ __('You have been invited to join the :team team!', ['team' => $invitation->team->name]) }}
3 |
4 | @if (Laravel\Fortify\Features::enabled(Laravel\Fortify\Features::registration()))
5 | {{ __('If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:') }}
6 |
7 | @component('mail::button', ['url' => route('register')])
8 | {{ __('Create Account') }}
9 | @endcomponent
10 |
11 | {{ __('If you already have an account, you may accept this invitation by clicking the button below:') }}
12 |
13 | @else
14 | {{ __('You may accept this invitation by clicking the button below:') }}
15 | @endif
16 |
17 |
18 | @component('mail::button', ['url' => $acceptUrl])
19 | {{ __('Accept Invitation') }}
20 | @endcomponent
21 |
22 | {{ __('If you did not expect to receive an invitation to this team, you may discard this email.') }}
23 | @endcomponent
24 |
--------------------------------------------------------------------------------
/resources/views/home.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Home') }}
4 |
5 |
6 |
7 |
8 |
9 |
10 | Welcome to your Splade application!
11 |
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/policy.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('Privacy Policy'))
2 |
3 |
--------------------------------------------------------------------------------
/resources/views/profile/delete-user-form.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ __('Delete Account') }}
4 |
5 |
6 |
7 | {{ __('Permanently delete your account.') }}
8 |
9 |
10 |
11 |
12 | {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }}
13 |
14 |
15 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/views/root.blade.php:
--------------------------------------------------------------------------------
1 |
2 | code) dir="{{ $locale->dir }}" @endif @endforeach>
3 |
4 |
5 |
6 |
7 | @spladeHead
8 | @vite('resources/js/app.js')
9 |
10 |
11 | @splade
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/terms.blade.php:
--------------------------------------------------------------------------------
1 | @seoTitle(__('Terms of Service'))
2 |
3 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/components/button-with-dropdown.blade.php:
--------------------------------------------------------------------------------
1 | class('w-full bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm px-2.5 sm:px-4 py-2 inline-flex justify-center text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500') }}>
2 |
3 | {{ $button }}
4 |
5 |
6 |
7 | {{ $slot }}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/components/dropdown.blade.php:
--------------------------------------------------------------------------------
1 | except('class')
2 | ->mergeVueBinding(':inline', $inline)
3 | ->mergeVueBinding(':teleport', $teleport)
4 | ->mergeVueBinding(':close-on-click', $closeOnClick)
5 | }} :splade-id="@js($spladeId)">
6 |
7 | only('class')->when($inline && !$attributes->has('class'), fn($attributes) => $attributes->class('inline')) }}
11 | :class="{ 'cursor-not-allowed': dropdown.disabled }"
12 | :disabled="dropdown.disabled"
13 | @click.prevent="dropdown.toggle"
14 | >
15 | {{ $trigger }}
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{ $slot }}
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/components/modal-wrapper.blade.php:
--------------------------------------------------------------------------------
1 |
2 | mergeVueBinding(':close-button', $closeButton) }} :name="@js($name)">
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
18 |
19 | {{ $slot }}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/checkbox.blade.php:
--------------------------------------------------------------------------------
1 | only(['v-if', 'v-show', 'class']) }}>
2 |
3 | except(['v-if', 'v-show', 'class'])->class(
4 | 'rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 disabled:opacity-50'
5 | )->merge([
6 | 'name' => $name,
7 | 'value' => $value,
8 | 'type' => 'checkbox',
9 | 'v-model' => $vueModel(),
10 | 'data-validation-key' => $validationKey(),
11 | ]) }} :true-value="@js($value)" :false-value="@js($falseValue)" />
12 |
13 | @if(trim($slot))
14 | {{ $slot }}
15 | @else
16 | {{ $label }}
17 | @endif
18 |
19 |
20 | @includeWhen($help, 'splade::form.help', ['help' => $help])
21 | @includeWhen($showErrors, 'splade::form.error', ['name' => $validationKey()])
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/checkboxes.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{ $label }}
3 |
4 | @foreach($options as $value => $label)
5 |
11 | @endforeach
12 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/error.blade.php:
--------------------------------------------------------------------------------
1 | @if($name)
@endif
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/group.blade.php:
--------------------------------------------------------------------------------
1 | @php
2 | [$gridClasses, $otherClasses] = collect(explode(' ', $attributes->get('class')))
3 | ->partition(fn ($class) => Str::startsWith($class, ['gap', 'grid']) || Str::contains($class, [':gap', ':grid']));
4 | @endphp
5 |
6 | only(['v-if', 'v-show'])->class($otherClasses->all())->merge([
7 | 'data-validation-key' => $validationKey(),
8 | ]) }}>
9 | @includeWhen($label, 'splade::form.label', ['label' => $label])
10 |
11 |
except(['v-if', 'v-show', 'class'])->class([
12 | 'flex flex-wrap space-x-6' => $inline && $gridClasses->isEmpty(),
13 | 'space-y-1' => !$inline && $gridClasses->isEmpty(),
14 | ])->class($gridClasses->all()) }}
15 | >
16 | {{ $slot }}
17 |
18 |
19 | @includeWhen($help, 'splade::form.help', ['help' => $help])
20 | @includeWhen($showErrors, 'splade::form.error', ['name' => $validationKey()])
21 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/help.blade.php:
--------------------------------------------------------------------------------
1 | @if($help){{ $help }}
@endif
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/label.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {!! $label !!}
3 | @if($attributes->has('required') || $attributes->has('data-required'))
4 | *
5 | @endif
6 |
7 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/radio.blade.php:
--------------------------------------------------------------------------------
1 | only(['v-if', 'v-show', 'class']) }}>
2 |
3 | except(['v-if', 'v-show', 'class'])->class(
4 | 'rounded-full border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 disabled:opacity-50'
5 | )->merge([
6 | 'name' => $name,
7 | 'value' => $value,
8 | 'type' => 'radio',
9 | 'v-model' => $vueModel(),
10 | 'data-validation-key' => $validationKey(),
11 | ]) }}
12 | />
13 |
14 | @if(trim($slot))
15 | {{ $slot }}
16 | @else
17 | {{ $label }}
18 | @endif
19 |
20 |
21 | @includeWhen($help, 'splade::form.help', ['help' => $help])
22 | @includeWhen($showErrors, 'splade::form.error', ['name' => $validationKey()])
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/radios.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{ $label }}
3 |
4 | @foreach($options as $value => $label)
5 |
6 | @endforeach
7 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/select-child.blade.php:
--------------------------------------------------------------------------------
1 | @php $attributes = $selectChild->attributes() @endphp
2 |
3 | @if($selectChild->isGroup())
4 |
5 | @foreach($selectChild->getOptions() as $nestedSelectChild)
6 | @include('splade::form.select-child', ['selectChild' => $nestedSelectChild])
7 | @endforeach
8 |
9 | @else
10 | except('label') }} @if($selected($attributes->get('value'))) selected @endif>
11 | {{ $attributes->get('label') }}
12 |
13 | @endif
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/textarea.blade.php:
--------------------------------------------------------------------------------
1 | only(['v-if', 'v-show', 'class']) }}
3 | :autosize="@js($attributes->has('autosize') ? (bool) $attributes->get('autosize') : $defaultAutosizeValue)"
4 | v-model="{{ $vueModel() }}"
5 | >
6 |
7 | @includeWhen($label, 'splade::form.label', ['label' => $label])
8 |
9 |
16 |
17 |
18 | @includeWhen($help, 'splade::form.help', ['help' => $help])
19 | @includeWhen($showErrors, 'splade::form.error', ['name' => $validationKey()])
20 |
21 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/form/wysiwyg.blade.php:
--------------------------------------------------------------------------------
1 | only(['v-if', 'v-show', 'class']) }}
3 | :options="@js($joditOptions())"
4 | :js-options="{!! $jsJoditOptions() !!}"
5 | v-model="{{ $vueModel() }}"
6 | :dusk="@js($attributes->get('dusk'))"
7 | >
8 |
9 | @includeWhen($label, 'splade::form.label', ['label' => $label])
10 |
11 |
18 |
19 |
20 | @includeWhen($help, 'splade::form.help', ['help' => $help])
21 | @includeWhen($showErrors, 'splade::form.error', ['name' => $validationKey()])
22 |
23 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/table/add-search-row.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | @foreach($table->searchInputs() as $searchInput)
9 | @if($searchInput->key === 'global')
10 | @continue
11 | @endif
12 |
13 | key)); dropdown.hide()"
16 | dusk="add-search-row-{{ $searchInput->key }}">
17 | {{ $searchInput->label }}
18 |
19 | @endforeach
20 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/table/global-search.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/table/per-page-selector.blade.php:
--------------------------------------------------------------------------------
1 |
6 | @foreach($table->allPerPageOptions() as $perPage)
7 | perPage())>
8 | {{ $perPage }} {{ __('per page') }}
9 |
10 | @endforeach
11 |
--------------------------------------------------------------------------------
/resources/views/vendor/splade/table/wrapper.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ $slot }}
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | get('/user', function (Request $request) {
18 | return $request->user();
19 | });
20 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | compiled.php
2 | config.php
3 | down
4 | events.scanned.php
5 | maintenance.php
6 | routes.php
7 | routes.scanned.php
8 | schedule-*
9 | services.json
10 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | import forms from "@tailwindcss/forms";
2 | import typography from "@tailwindcss/typography";
3 |
4 | /* @type {import('tailwindcss').Config} */
5 | export default {
6 | darkMode: 'class',
7 | content: [
8 | "./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php",
9 | "./vendor/protonemedia/laravel-splade/lib/**/*.vue",
10 | "./vendor/protonemedia/laravel-splade/resources/views/**/*.blade.php",
11 | "./storage/framework/views/*.php",
12 | "./resources/views/**/*.blade.php",
13 | "./resources/js/**/*.vue",
14 | // "./app/Forms/*.php",
15 | // "./app/Tables/*.php",
16 | ],
17 |
18 | theme: {
19 | extend: {},
20 | },
21 |
22 | plugins: [forms, typography],
23 | };
24 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/BrowserSessionsTest.php:
--------------------------------------------------------------------------------
1 | browse(function (Browser $browser) {
17 | $user = User::factory()->withPersonalTeam()->create();
18 |
19 | $browser->loginAs($user)
20 | ->visit('/user/profile')
21 | ->waitForText('Browser Sessions')
22 | ->within('@logout-other-browser-sessions-form', fn (Browser $browser) => $browser->press('Log Out Other Browser Sessions'))
23 | ->within('#headlessui-portal-root', function (Browser $browser) {
24 | $browser->type('input', 'password')
25 | ->press('Log Out Other Browser Sessions');
26 | })
27 | ->within('@logout-other-browser-sessions-form', fn (Browser $browser) => $browser->waitForText('Done.'));
28 | });
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/CreateTeamTest.php:
--------------------------------------------------------------------------------
1 | browse(function (Browser $browser) {
18 | $user = User::factory()->withPersonalTeam()->create();
19 |
20 | $browser->loginAs($user)
21 | ->visit('/teams/create')
22 | ->waitForText('Team Details')
23 | ->type('name', 'Test Team')
24 | ->press('Create')
25 | ->waitForLocation(RouteServiceProvider::HOME);
26 |
27 | $this->assertCount(2, $user->fresh()->ownedTeams);
28 | $this->assertEquals('Test Team', $user->fresh()->ownedTeams()->latest('id')->first()->name);
29 | });
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/DeleteAccountTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped('Account deletion is not enabled.');
19 |
20 | return;
21 | }
22 |
23 | $this->browse(function (Browser $browser) {
24 | $user = User::factory()->withPersonalTeam()->create();
25 |
26 | $browser->loginAs($user)
27 | ->visit('/user/profile')
28 | ->waitForText('Delete Account')
29 | ->within('@delete-user-form', fn (Browser $browser) => $browser->press('Delete Account'))
30 | ->within('#headlessui-portal-root', function (Browser $browser) {
31 | $browser->type('input', 'password')
32 | ->press('Delete Account');
33 | })
34 | ->waitUntilMissingText('Delete Account')
35 | ->assertGuest();
36 |
37 | $this->assertNull($user->fresh());
38 | });
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/PrivacyTest.php:
--------------------------------------------------------------------------------
1 | browse(function (Browser $browser) {
16 | $browser->visit('/privacy-policy')
17 | ->waitForText('Privacy Policy')
18 | ->assertSee('Edit this file to define the privacy policy for your application.');
19 | });
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/TermsTest.php:
--------------------------------------------------------------------------------
1 | browse(function (Browser $browser) {
16 | $browser->visit('/terms-of-service')
17 | ->waitForText('Terms of Service')
18 | ->assertSee('Edit this file to define the terms of service for your application.');
19 | });
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/UpdateTeamNameTest.php:
--------------------------------------------------------------------------------
1 | browse(function (Browser $browser) {
17 | $user = User::factory()->withPersonalTeam()->create();
18 |
19 | $browser->loginAs($user)
20 | ->visit('/teams/'.$user->currentTeam->id)
21 | ->waitForText('Team Name')
22 | ->within('@update-team-name-form', function (Browser $browser) {
23 | $browser->type('name', 'Test Team')
24 | ->press('Save')
25 | ->waitForText('Saved.');
26 | });
27 |
28 | $this->assertCount(1, $user->fresh()->ownedTeams);
29 | $this->assertEquals('Test Team', $user->currentTeam->fresh()->name);
30 | });
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/tests/Browser/Jetstream/photo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/megoxv/SpladePanel/b25cfabdb199e79dfe1e60e9fa0e54b23dddf645/tests/Browser/Jetstream/photo.jpeg
--------------------------------------------------------------------------------
/tests/Browser/Pages/HomePage.php:
--------------------------------------------------------------------------------
1 |
29 | */
30 | public function elements(): array
31 | {
32 | return [
33 | '@element' => '#selector',
34 | ];
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/tests/Browser/Pages/Page.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | public static function siteElements(): array
15 | {
16 | return [
17 | '@element' => '#selector',
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/tests/Browser/console/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tests/Browser/screenshots/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tests/Browser/source/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
18 |
19 | return $app;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Feature/AuthenticationTest.php:
--------------------------------------------------------------------------------
1 | get('/login');
17 |
18 | $response->assertStatus(200);
19 | }
20 |
21 | public function test_users_can_authenticate_using_the_login_screen(): void
22 | {
23 | $user = User::factory()->create();
24 |
25 | $response = $this->post('/login', [
26 | 'email' => $user->email,
27 | 'password' => 'password',
28 | ]);
29 |
30 | $this->assertAuthenticated();
31 | $response->assertRedirect(RouteServiceProvider::HOME);
32 | }
33 |
34 | public function test_users_can_not_authenticate_with_invalid_password(): void
35 | {
36 | $user = User::factory()->create();
37 |
38 | $this->post('/login', [
39 | 'email' => $user->email,
40 | 'password' => 'wrong-password',
41 | ]);
42 |
43 | $this->assertGuest();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
16 |
17 | $response->assertStatus(200);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/tests/Feature/PasswordConfirmationTest.php:
--------------------------------------------------------------------------------
1 | withPersonalTeam()->create();
17 |
18 | $response = $this->actingAs($user)->get('/user/confirm-password');
19 |
20 | $response->assertStatus(200);
21 | }
22 |
23 | public function test_password_can_be_confirmed(): void
24 | {
25 | $user = User::factory()->create();
26 |
27 | $response = $this->actingAs($user)->post('/user/confirm-password', [
28 | 'password' => 'password',
29 | ]);
30 |
31 | $response->assertRedirect();
32 | $response->assertSessionHasNoErrors();
33 | }
34 |
35 | public function test_password_is_not_confirmed_with_invalid_password(): void
36 | {
37 | $user = User::factory()->create();
38 |
39 | $response = $this->actingAs($user)->post('/user/confirm-password', [
40 | 'password' => 'wrong-password',
41 | ]);
42 |
43 | $response->assertSessionHasErrors();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import laravel from "laravel-vite-plugin";
3 | import vue from "@vitejs/plugin-vue";
4 |
5 | export default defineConfig({
6 | plugins: [
7 | laravel({
8 | input: "resources/js/app.js",
9 | ssr: "resources/js/ssr.js",
10 | refresh: true,
11 | }),
12 | vue({
13 | template: {
14 | transformAssetUrls: {
15 | base: null,
16 | includeAbsolute: false,
17 | },
18 | },
19 | }),
20 | ],
21 | ssr: {
22 | noExternal: ["vue", "@protonemedia/laravel-splade"]
23 | },
24 | });
--------------------------------------------------------------------------------