Full Code of krayin/laravel-crm for AI

2.2 ba25b7e7f8e1 cached
1083 files
6.0 MB
1.7M tokens
6712 symbols
1 requests
Download .txt
Showing preview only (6,587K chars total). Download the full file or copy to clipboard to get everything.
Repository: krayin/laravel-crm
Branch: 2.2
Commit: ba25b7e7f8e1
Files: 1083
Total size: 6.0 MB

Directory structure:
gitextract_tgh1bov9/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── 1_Bug_report.md
│   │   ├── 2_Feature_request.md
│   │   ├── 3_Support_question.md
│   │   └── 4_Security_vulnerabilities.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── admin_playwright_tests.yml
│       ├── auto_commits.yml
│       └── ci.yml
├── .gitignore
├── .styleci.yml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── UPGRADE.md
├── app/
│   ├── Http/
│   │   └── Controllers/
│   │       └── Controller.php
│   ├── Models/
│   │   └── User.php
│   └── Providers/
│       └── AppServiceProvider.php
├── artisan
├── bootstrap/
│   ├── app.php
│   ├── cache/
│   │   └── .gitignore
│   └── providers.php
├── composer.json
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── breadcrumbs.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── concord.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── imap.php
│   ├── krayin-vite.php
│   ├── logging.php
│   ├── mail-receiver.php
│   ├── mail.php
│   ├── queue.php
│   ├── repository.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   ├── tinker.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│   │   ├── 2024_09_09_094040_create_job_batches_table.php
│   │   └── 2024_09_09_094042_create_jobs_table.php
│   └── seeders/
│       └── DatabaseSeeder.php
├── lang/
│   └── en/
│       ├── auth.php
│       ├── pagination.php
│       ├── passwords.php
│       └── validation.php
├── package.json
├── packages/
│   └── Webkul/
│       ├── Activity/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Activity.php
│       │       │   ├── File.php
│       │       │   └── Participant.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_05_12_150329_create_activities_table.php
│       │       │       ├── 2021_05_15_151855_create_activity_files_table.php
│       │       │       ├── 2021_07_28_142453_create_activity_participants_table.php
│       │       │       ├── 2021_11_17_190943_add_location_column_in_activities_table.php
│       │       │       └── 2025_01_17_151632_alter_activities_table.php
│       │       ├── Models/
│       │       │   ├── Activity.php
│       │       │   ├── ActivityProxy.php
│       │       │   ├── File.php
│       │       │   ├── FileProxy.php
│       │       │   ├── Participant.php
│       │       │   └── ParticipantProxy.php
│       │       ├── Providers/
│       │       │   ├── ActivityServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── ActivityRepository.php
│       │       │   ├── FileRepository.php
│       │       │   └── ParticipantRepository.php
│       │       └── Traits/
│       │           └── LogsActivity.php
│       ├── Admin/
│       │   ├── .gitignore
│       │   ├── composer.json
│       │   ├── package.json
│       │   ├── postcss.config.cjs
│       │   ├── src/
│       │   │   ├── Bouncer.php
│       │   │   ├── Config/
│       │   │   │   ├── acl.php
│       │   │   │   ├── attribute_entity_types.php
│       │   │   │   ├── attribute_lookups.php
│       │   │   │   ├── core_config.php
│       │   │   │   └── menu.php
│       │   │   ├── DataGrids/
│       │   │   │   ├── Activity/
│       │   │   │   │   └── ActivityDataGrid.php
│       │   │   │   ├── Contact/
│       │   │   │   │   ├── OrganizationDataGrid.php
│       │   │   │   │   └── PersonDataGrid.php
│       │   │   │   ├── Lead/
│       │   │   │   │   └── LeadDataGrid.php
│       │   │   │   ├── Mail/
│       │   │   │   │   └── EmailDataGrid.php
│       │   │   │   ├── Product/
│       │   │   │   │   └── ProductDataGrid.php
│       │   │   │   ├── Quote/
│       │   │   │   │   └── QuoteDataGrid.php
│       │   │   │   └── Settings/
│       │   │   │       ├── AttributeDataGrid.php
│       │   │   │       ├── DataTransfer/
│       │   │   │       │   └── ImportDataGrid.php
│       │   │   │       ├── EmailTemplateDataGrid.php
│       │   │   │       ├── GroupDataGrid.php
│       │   │   │       ├── Marketing/
│       │   │   │       │   ├── CampaignDatagrid.php
│       │   │   │       │   └── EventDataGrid.php
│       │   │   │       ├── PipelineDataGrid.php
│       │   │   │       ├── RoleDataGrid.php
│       │   │   │       ├── SourceDataGrid.php
│       │   │   │       ├── TagDataGrid.php
│       │   │   │       ├── TypeDataGrid.php
│       │   │   │       ├── UserDataGrid.php
│       │   │   │       ├── WarehouseDataGrid.php
│       │   │   │       ├── WebhookDataGrid.php
│       │   │   │       └── WorkflowDataGrid.php
│       │   │   ├── Database/
│       │   │   │   └── Migrations/
│       │   │   │       ├── 2021_06_07_162808_add_lead_view_permission_column_in_users_table.php
│       │   │   │       └── 2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php
│       │   │   ├── Exceptions/
│       │   │   │   └── Handler.php
│       │   │   ├── Facades/
│       │   │   │   └── Bouncer.php
│       │   │   ├── Helpers/
│       │   │   │   ├── Dashboard.php
│       │   │   │   └── Reporting/
│       │   │   │       ├── AbstractReporting.php
│       │   │   │       ├── Activity.php
│       │   │   │       ├── Lead.php
│       │   │   │       ├── Organization.php
│       │   │   │       ├── Person.php
│       │   │   │       ├── Product.php
│       │   │   │       └── Quote.php
│       │   │   ├── Http/
│       │   │   │   ├── Controllers/
│       │   │   │   │   ├── Activity/
│       │   │   │   │   │   └── ActivityController.php
│       │   │   │   │   ├── Configuration/
│       │   │   │   │   │   └── ConfigurationController.php
│       │   │   │   │   ├── Contact/
│       │   │   │   │   │   ├── OrganizationController.php
│       │   │   │   │   │   └── Persons/
│       │   │   │   │   │       ├── ActivityController.php
│       │   │   │   │   │       ├── PersonController.php
│       │   │   │   │   │       └── TagController.php
│       │   │   │   │   ├── Controller.php
│       │   │   │   │   ├── DashboardController.php
│       │   │   │   │   ├── DataGrid/
│       │   │   │   │   │   └── SavedFilterController.php
│       │   │   │   │   ├── DataGridController.php
│       │   │   │   │   ├── Lead/
│       │   │   │   │   │   ├── ActivityController.php
│       │   │   │   │   │   ├── EmailController.php
│       │   │   │   │   │   ├── LeadController.php
│       │   │   │   │   │   ├── QuoteController.php
│       │   │   │   │   │   └── TagController.php
│       │   │   │   │   ├── Mail/
│       │   │   │   │   │   ├── EmailController.php
│       │   │   │   │   │   └── TagController.php
│       │   │   │   │   ├── Products/
│       │   │   │   │   │   ├── ActivityController.php
│       │   │   │   │   │   ├── ProductController.php
│       │   │   │   │   │   └── TagController.php
│       │   │   │   │   ├── Quote/
│       │   │   │   │   │   └── QuoteController.php
│       │   │   │   │   ├── Settings/
│       │   │   │   │   │   ├── AttributeController.php
│       │   │   │   │   │   ├── DataTransfer/
│       │   │   │   │   │   │   └── ImportController.php
│       │   │   │   │   │   ├── EmailTemplateController.php
│       │   │   │   │   │   ├── GroupController.php
│       │   │   │   │   │   ├── LocationController.php
│       │   │   │   │   │   ├── Marketing/
│       │   │   │   │   │   │   ├── CampaignsController.php
│       │   │   │   │   │   │   └── EventController.php
│       │   │   │   │   │   ├── PipelineController.php
│       │   │   │   │   │   ├── RoleController.php
│       │   │   │   │   │   ├── SettingController.php
│       │   │   │   │   │   ├── SourceController.php
│       │   │   │   │   │   ├── TagController.php
│       │   │   │   │   │   ├── TypeController.php
│       │   │   │   │   │   ├── UserController.php
│       │   │   │   │   │   ├── Warehouse/
│       │   │   │   │   │   │   ├── ActivityController.php
│       │   │   │   │   │   │   ├── TagController.php
│       │   │   │   │   │   │   └── WarehouseController.php
│       │   │   │   │   │   ├── WebFormController.php
│       │   │   │   │   │   ├── WebhookController.php
│       │   │   │   │   │   └── WorkflowController.php
│       │   │   │   │   ├── TinyMCEController.php
│       │   │   │   │   └── User/
│       │   │   │   │       ├── AccountController.php
│       │   │   │   │       ├── ForgotPasswordController.php
│       │   │   │   │       ├── ResetPasswordController.php
│       │   │   │   │       └── SessionController.php
│       │   │   │   ├── Middleware/
│       │   │   │   │   ├── Bouncer.php
│       │   │   │   │   ├── Locale.php
│       │   │   │   │   └── SanitizeUrl.php
│       │   │   │   ├── Requests/
│       │   │   │   │   ├── AttributeForm.php
│       │   │   │   │   ├── ConfigurationForm.php
│       │   │   │   │   ├── LeadForm.php
│       │   │   │   │   ├── MassDestroyRequest.php
│       │   │   │   │   ├── MassUpdateRequest.php
│       │   │   │   │   ├── PipelineForm.php
│       │   │   │   │   └── UserForm.php
│       │   │   │   ├── Resources/
│       │   │   │   │   ├── ActivityFileResource.php
│       │   │   │   │   ├── ActivityParticipantResource.php
│       │   │   │   │   ├── ActivityResource.php
│       │   │   │   │   ├── EmailAttachmentResource.php
│       │   │   │   │   ├── EmailResource.php
│       │   │   │   │   ├── LeadResource.php
│       │   │   │   │   ├── OrganizationResource.php
│       │   │   │   │   ├── PersonResource.php
│       │   │   │   │   ├── PipelineResource.php
│       │   │   │   │   ├── ProductResource.php
│       │   │   │   │   ├── QuoteResource.php
│       │   │   │   │   ├── SourceResource.php
│       │   │   │   │   ├── StageResource.php
│       │   │   │   │   ├── TagResource.php
│       │   │   │   │   ├── TypeResource.php
│       │   │   │   │   └── UserResource.php
│       │   │   │   └── helpers.php
│       │   │   ├── Listeners/
│       │   │   │   ├── Activity.php
│       │   │   │   ├── Lead.php
│       │   │   │   └── Person.php
│       │   │   ├── Notifications/
│       │   │   │   ├── Common.php
│       │   │   │   └── User/
│       │   │   │       ├── Create.php
│       │   │   │       ├── UserResetPassword.php
│       │   │   │       └── UserUpdatePassword.php
│       │   │   ├── Providers/
│       │   │   │   ├── AdminServiceProvider.php
│       │   │   │   ├── EventServiceProvider.php
│       │   │   │   └── ModuleServiceProvider.php
│       │   │   ├── Requests/
│       │   │   │   └── WebhookRequest.php
│       │   │   ├── Resources/
│       │   │   │   ├── assets/
│       │   │   │   │   ├── css/
│       │   │   │   │   │   └── app.css
│       │   │   │   │   ├── js/
│       │   │   │   │   │   ├── app.js
│       │   │   │   │   │   ├── chart.js
│       │   │   │   │   │   ├── directives/
│       │   │   │   │   │   │   ├── debounce.js
│       │   │   │   │   │   │   ├── dompurify.js
│       │   │   │   │   │   │   └── tooltip.js
│       │   │   │   │   │   └── plugins/
│       │   │   │   │   │       ├── admin.js
│       │   │   │   │   │       ├── axios.js
│       │   │   │   │   │       ├── createElement.js
│       │   │   │   │   │       ├── draggable.js
│       │   │   │   │   │       ├── emitter.js
│       │   │   │   │   │       ├── flatpickr.js
│       │   │   │   │   │       ├── vee-validate.js
│       │   │   │   │   │       └── vue-cal.js
│       │   │   │   │   └── locales/
│       │   │   │   │       ├── hi_IN.json
│       │   │   │   │       └── sin.json
│       │   │   │   ├── lang/
│       │   │   │   │   ├── ar/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── en/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── es/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── fa/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── pt_BR/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── tr/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   └── vi/
│       │   │   │   │       └── app.php
│       │   │   │   └── views/
│       │   │   │       ├── activities/
│       │   │   │       │   ├── datagrid/
│       │   │   │       │   │   └── is-done.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── components/
│       │   │   │       │   ├── accordion/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── activities/
│       │   │   │       │   │   ├── actions/
│       │   │   │       │   │   │   ├── activity/
│       │   │   │       │   │   │   │   └── participants.blade.php
│       │   │   │       │   │   │   ├── activity.blade.php
│       │   │   │       │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   ├── mail.blade.php
│       │   │   │       │   │   │   └── note.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── attachments/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── attributes/
│       │   │   │       │   │   ├── edit/
│       │   │   │       │   │   │   ├── address.blade.php
│       │   │   │       │   │   │   ├── boolean.blade.php
│       │   │   │       │   │   │   ├── checkbox.blade.php
│       │   │   │       │   │   │   ├── date.blade.php
│       │   │   │       │   │   │   ├── datetime.blade.php
│       │   │   │       │   │   │   ├── email.blade.php
│       │   │   │       │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   ├── image.blade.php
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   ├── lookup.blade.php
│       │   │   │       │   │   │   ├── multiselect.blade.php
│       │   │   │       │   │   │   ├── phone.blade.php
│       │   │   │       │   │   │   ├── price.blade.php
│       │   │   │       │   │   │   ├── select.blade.php
│       │   │   │       │   │   │   ├── text.blade.php
│       │   │   │       │   │   │   └── textarea.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── view/
│       │   │   │       │   │   │   ├── address.blade.php
│       │   │   │       │   │   │   ├── boolean.blade.php
│       │   │   │       │   │   │   ├── checkbox.blade.php
│       │   │   │       │   │   │   ├── date.blade.php
│       │   │   │       │   │   │   ├── datetime.blade.php
│       │   │   │       │   │   │   ├── email.blade.php
│       │   │   │       │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   ├── image.blade.php
│       │   │   │       │   │   │   ├── lookup.blade.php
│       │   │   │       │   │   │   ├── multiselect.blade.php
│       │   │   │       │   │   │   ├── phone.blade.php
│       │   │   │       │   │   │   ├── price.blade.php
│       │   │   │       │   │   │   ├── select.blade.php
│       │   │   │       │   │   │   ├── text.blade.php
│       │   │   │       │   │   │   └── textarea.blade.php
│       │   │   │       │   │   └── view.blade.php
│       │   │   │       │   ├── avatar/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── breadcrumbs/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── button/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── charts/
│       │   │   │       │   │   ├── bar.blade.php
│       │   │   │       │   │   ├── doughnut.blade.php
│       │   │   │       │   │   └── line.blade.php
│       │   │   │       │   ├── datagrid/
│       │   │   │       │   │   ├── export/
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   └── temp.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── table.blade.php
│       │   │   │       │   │   ├── toolbar/
│       │   │   │       │   │   │   ├── filter.blade.php
│       │   │   │       │   │   │   ├── mass-action.blade.php
│       │   │   │       │   │   │   ├── pagination.blade.php
│       │   │   │       │   │   │   └── search.blade.php
│       │   │   │       │   │   └── toolbar.blade.php
│       │   │   │       │   ├── drawer/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── dropdown/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   └── menu/
│       │   │   │       │   │       └── item.blade.php
│       │   │   │       │   ├── example.blade.php
│       │   │   │       │   ├── flash-group/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   └── item.blade.php
│       │   │   │       │   ├── flat-picker/
│       │   │   │       │   │   ├── date.blade.php
│       │   │   │       │   │   └── datetime.blade.php
│       │   │   │       │   ├── form/
│       │   │   │       │   │   ├── control-group/
│       │   │   │       │   │   │   ├── control.blade.php
│       │   │   │       │   │   │   ├── controls/
│       │   │   │       │   │   │   │   ├── inline/
│       │   │   │       │   │   │   │   │   ├── address.blade.php
│       │   │   │       │   │   │   │   │   ├── boolean.blade.php
│       │   │   │       │   │   │   │   │   ├── date.blade.php
│       │   │   │       │   │   │   │   │   ├── datetime.blade.php
│       │   │   │       │   │   │   │   │   ├── email.blade.php
│       │   │   │       │   │   │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   │   │   ├── image.blade.php
│       │   │   │       │   │   │   │   │   ├── lookup.blade.php
│       │   │   │       │   │   │   │   │   ├── multiselect.blade.php
│       │   │   │       │   │   │   │   │   ├── phone.blade.php
│       │   │   │       │   │   │   │   │   ├── select.blade.php
│       │   │   │       │   │   │   │   │   └── text.blade.php
│       │   │   │       │   │   │   │   └── tags.blade.php
│       │   │   │       │   │   │   ├── error.blade.php
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   └── label.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── layouts/
│       │   │   │       │   │   ├── anonymous.blade.php
│       │   │   │       │   │   ├── header/
│       │   │   │       │   │   │   ├── desktop/
│       │   │   │       │   │   │   │   └── mega-search.blade.php
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   ├── mobile/
│       │   │   │       │   │   │   │   └── mega-search.blade.php
│       │   │   │       │   │   │   └── quick-creation.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── sidebar/
│       │   │   │       │   │   │   ├── desktop/
│       │   │   │       │   │   │   │   └── index.blade.php
│       │   │   │       │   │   │   └── mobile/
│       │   │   │       │   │   │       └── index.blade.php
│       │   │   │       │   │   └── tabs.blade.php
│       │   │   │       │   ├── lookup/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── media/
│       │   │   │       │   │   ├── images.blade.php
│       │   │   │       │   │   └── videos.blade.php
│       │   │   │       │   ├── modal/
│       │   │   │       │   │   ├── confirm.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── shimmer/
│       │   │   │       │   │   ├── accordion/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── activities/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── charts/
│       │   │   │       │   │   │   └── bar.blade.php
│       │   │   │       │   │   ├── common/
│       │   │   │       │   │   │   └── address.blade.php
│       │   │   │       │   │   ├── dashboard/
│       │   │   │       │   │   │   └── index/
│       │   │   │       │   │   │       ├── open-leads-by-states.blade.php
│       │   │   │       │   │   │       ├── over-all.blade.php
│       │   │   │       │   │   │       ├── revenue-by-sources.blade.php
│       │   │   │       │   │   │       ├── revenue-by-types.blade.php
│       │   │   │       │   │   │       ├── revenue.blade.php
│       │   │   │       │   │   │       ├── top-persons.blade.php
│       │   │   │       │   │   │       ├── top-selling-products.blade.php
│       │   │   │       │   │   │       └── total-leads.blade.php
│       │   │   │       │   │   ├── datagrid/
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   ├── table/
│       │   │   │       │   │   │   │   ├── body.blade.php
│       │   │   │       │   │   │   │   └── head.blade.php
│       │   │   │       │   │   │   ├── toolbar/
│       │   │   │       │   │   │   │   ├── filter.blade.php
│       │   │   │       │   │   │   │   ├── pagination.blade.php
│       │   │   │       │   │   │   │   └── search.blade.php
│       │   │   │       │   │   │   └── toolbar.blade.php
│       │   │   │       │   │   ├── header/
│       │   │   │       │   │   │   └── mega-search/
│       │   │   │       │   │   │       ├── configurations.blade.php
│       │   │   │       │   │   │       ├── leads.blade.php
│       │   │   │       │   │   │       ├── persons.blade.php
│       │   │   │       │   │   │       ├── products.blade.php
│       │   │   │       │   │   │       ├── quotes.blade.php
│       │   │   │       │   │   │       └── settings.blade.php
│       │   │   │       │   │   ├── image/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── leads/
│       │   │   │       │   │   │   ├── datagrid.blade.php
│       │   │   │       │   │   │   ├── index/
│       │   │   │       │   │   │   │   ├── kanban/
│       │   │   │       │   │   │   │   │   └── toolbar.blade.php
│       │   │   │       │   │   │   │   └── kanban.blade.php
│       │   │   │       │   │   │   └── view/
│       │   │   │       │   │   │       ├── mail/
│       │   │   │       │   │   │       │   └── index.blade.php
│       │   │   │       │   │   │       └── stages.blade.php
│       │   │   │       │   │   ├── mail/
│       │   │   │       │   │   │   └── datagrid/
│       │   │   │       │   │   │       ├── index.blade.php
│       │   │   │       │   │   │       └── table/
│       │   │   │       │   │   │           ├── body.blade.php
│       │   │   │       │   │   │           └── head.blade.php
│       │   │   │       │   │   ├── person/
│       │   │   │       │   │   │   └── view/
│       │   │   │       │   │   │       ├── activities/
│       │   │   │       │   │   │       │   └── index.blade.php
│       │   │   │       │   │   │       ├── stages.blade.php
│       │   │   │       │   │   │       └── tags.blade.php
│       │   │   │       │   │   ├── pipelines/
│       │   │   │       │   │   │   └── kanban.blade.php
│       │   │   │       │   │   ├── quotes/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── settings/
│       │   │   │       │   │   │   ├── attributes.blade.php
│       │   │   │       │   │   │   └── web-forms/
│       │   │   │       │   │   │       ├── body.blade.php
│       │   │   │       │   │   │       ├── head.blade.php
│       │   │   │       │   │   │       └── index.blade.php
│       │   │   │       │   │   ├── tabs/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── tags/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── tinymce/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   └── tree/
│       │   │   │       │   │       └── index.blade.php
│       │   │   │       │   ├── spinner/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── table/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── tbody/
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   └── tr.blade.php
│       │   │   │       │   │   ├── td.blade.php
│       │   │   │       │   │   ├── th.blade.php
│       │   │   │       │   │   └── thead/
│       │   │   │       │   │       ├── index.blade.php
│       │   │   │       │   │       └── tr.blade.php
│       │   │   │       │   ├── tabs/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   └── item.blade.php
│       │   │   │       │   ├── tags/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── tinymce/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── tree/
│       │   │   │       │       ├── checkbox.blade.php
│       │   │   │       │       ├── radio.blade.php
│       │   │   │       │       └── view.blade.php
│       │   │   │       ├── configuration/
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── field-type.blade.php
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── contacts/
│       │   │   │       │   ├── organizations/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── persons/
│       │   │   │       │       ├── create.blade.php
│       │   │   │       │       ├── edit.blade.php
│       │   │   │       │       ├── index.blade.php
│       │   │   │       │       ├── view/
│       │   │   │       │       │   ├── attributes.blade.php
│       │   │   │       │       │   └── organization.blade.php
│       │   │   │       │       └── view.blade.php
│       │   │   │       ├── dashboard/
│       │   │   │       │   ├── index/
│       │   │   │       │   │   ├── open-leads-by-states.blade.php
│       │   │   │       │   │   ├── over-all.blade.php
│       │   │   │       │   │   ├── revenue-by-sources.blade.php
│       │   │   │       │   │   ├── revenue-by-types.blade.php
│       │   │   │       │   │   ├── revenue.blade.php
│       │   │   │       │   │   ├── top-persons.blade.php
│       │   │   │       │   │   ├── top-selling-products.blade.php
│       │   │   │       │   │   └── total-leads.blade.php
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── emails/
│       │   │   │       │   ├── common/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── layout.blade.php
│       │   │   │       │   └── users/
│       │   │   │       │       ├── create.blade.php
│       │   │   │       │       └── forget-password.blade.php
│       │   │   │       ├── errors/
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── leads/
│       │   │   │       │   ├── common/
│       │   │   │       │   │   ├── contact.blade.php
│       │   │   │       │   │   └── products.blade.php
│       │   │   │       │   ├── create.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── index/
│       │   │   │       │   │   ├── kanban/
│       │   │   │       │   │   │   ├── filter.blade.php
│       │   │   │       │   │   │   ├── search.blade.php
│       │   │   │       │   │   │   └── toolbar.blade.php
│       │   │   │       │   │   ├── kanban.blade.php
│       │   │   │       │   │   ├── table.blade.php
│       │   │   │       │   │   ├── upload.blade.php
│       │   │   │       │   │   └── view-switcher.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   ├── view/
│       │   │   │       │   │   ├── attributes.blade.php
│       │   │   │       │   │   ├── person.blade.php
│       │   │   │       │   │   ├── products.blade.php
│       │   │   │       │   │   ├── quotes.blade.php
│       │   │   │       │   │   └── stages.blade.php
│       │   │   │       │   └── view.blade.php
│       │   │   │       ├── mail/
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   └── view.blade.php
│       │   │   │       ├── partials/
│       │   │   │       │   └── breadcrumbs.blade.php
│       │   │   │       ├── products/
│       │   │   │       │   ├── create.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   ├── view/
│       │   │   │       │   │   ├── attributes.blade.php
│       │   │   │       │   │   └── inventory.blade.php
│       │   │   │       │   └── view.blade.php
│       │   │   │       ├── quotes/
│       │   │   │       │   ├── create.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   └── pdf.blade.php
│       │   │   │       ├── sessions/
│       │   │   │       │   ├── forgot-password.blade.php
│       │   │   │       │   ├── login.blade.php
│       │   │   │       │   └── reset-password.blade.php
│       │   │   │       ├── settings/
│       │   │   │       │   ├── attributes/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── data-transfer/
│       │   │   │       │   │   └── imports/
│       │   │   │       │   │       ├── create.blade.php
│       │   │   │       │   │       ├── edit.blade.php
│       │   │   │       │   │       ├── import.blade.php
│       │   │   │       │   │       └── index.blade.php
│       │   │   │       │   ├── email-templates/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── groups/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   ├── marketing/
│       │   │   │       │   │   ├── campaigns/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   └── events/
│       │   │   │       │   │       └── index.blade.php
│       │   │   │       │   ├── pipelines/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── roles/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── sources/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── tags/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── types/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── users/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── warehouses/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── view/
│       │   │   │       │   │   │   ├── contact-information.blade.php
│       │   │   │       │   │   │   ├── general-information.blade.php
│       │   │   │       │   │   │   └── locations.blade.php
│       │   │   │       │   │   └── view.blade.php
│       │   │   │       │   ├── web-forms/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── webhook/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── workflows/
│       │   │   │       │       ├── create.blade.php
│       │   │   │       │       ├── edit.blade.php
│       │   │   │       │       └── index.blade.php
│       │   │   │       └── user/
│       │   │   │           └── account/
│       │   │   │               └── edit.blade.php
│       │   │   ├── Routes/
│       │   │   │   ├── Admin/
│       │   │   │   │   ├── activities-routes.php
│       │   │   │   │   ├── auth-routes.php
│       │   │   │   │   ├── configuration-routes.php
│       │   │   │   │   ├── contacts-routes.php
│       │   │   │   │   ├── leads-routes.php
│       │   │   │   │   ├── mail-routes.php
│       │   │   │   │   ├── products-routes.php
│       │   │   │   │   ├── quote-routes.php
│       │   │   │   │   ├── rest-routes.php
│       │   │   │   │   ├── settings-routes.php
│       │   │   │   │   └── web.php
│       │   │   │   └── Front/
│       │   │   │       └── web.php
│       │   │   └── Traits/
│       │   │       └── ProvideDropdownOptions.php
│       │   ├── tailwind.config.js
│       │   ├── tests/
│       │   │   └── e2e-pw/
│       │   │       ├── .gitignore
│       │   │       ├── playwright.config.ts
│       │   │       ├── setup.ts
│       │   │       ├── tests/
│       │   │       │   ├── auth.spec.ts
│       │   │       │   ├── contacts/
│       │   │       │   │   ├── organization.spec.ts
│       │   │       │   │   └── person.spec.ts
│       │   │       │   ├── lang/
│       │   │       │   │   └── lang.spec.ts
│       │   │       │   ├── lead.spec.ts
│       │   │       │   ├── mail/
│       │   │       │   │   ├── draft.spec.ts
│       │   │       │   │   ├── inbox.spec.ts
│       │   │       │   │   ├── outbox.spec.ts
│       │   │       │   │   ├── sent.spec.ts
│       │   │       │   │   └── trash.spec.ts
│       │   │       │   ├── product.spec.ts
│       │   │       │   ├── quotes.spec.ts
│       │   │       │   └── settings/
│       │   │       │       ├── automation/
│       │   │       │       │   └── events.spec.ts
│       │   │       │       ├── lead/
│       │   │       │       │   └── types.spec.ts
│       │   │       │       ├── user/
│       │   │       │       │   ├── groups.spec.ts
│       │   │       │       │   └── users.spec.ts
│       │   │       │       └── warehouses/
│       │   │       │           └── warehouse.spec.ts
│       │   │       └── utils/
│       │   │           ├── components.ts
│       │   │           └── faker.ts
│       │   └── vite.config.js
│       ├── Attribute/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Config/
│       │       │   └── attribute_lookups.php
│       │       ├── Contracts/
│       │       │   ├── Attribute.php
│       │       │   ├── AttributeOption.php
│       │       │   └── AttributeValue.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_02_080709_create_attributes_table.php
│       │       │       ├── 2021_04_02_080837_create_attribute_options_table.php
│       │       │       ├── 2021_04_06_122751_create_attribute_values_table.php
│       │       │       └── 2025_07_02_191710_alter_attribute_values_table.php
│       │       ├── Models/
│       │       │   ├── Attribute.php
│       │       │   ├── AttributeOption.php
│       │       │   ├── AttributeOptionProxy.php
│       │       │   ├── AttributeProxy.php
│       │       │   ├── AttributeValue.php
│       │       │   └── AttributeValueProxy.php
│       │       ├── Providers/
│       │       │   ├── AttributeServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── AttributeOptionRepository.php
│       │       │   ├── AttributeRepository.php
│       │       │   └── AttributeValueRepository.php
│       │       └── Traits/
│       │           └── CustomAttribute.php
│       ├── Automation/
│       │   └── src/
│       │       ├── Config/
│       │       │   └── workflows.php
│       │       ├── Contracts/
│       │       │   ├── Webhook.php
│       │       │   └── Workflow.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_08_26_133538_create_workflows_table.php
│       │       │       └── 2024_07_24_150821_create_webhooks_table.php
│       │       ├── Helpers/
│       │       │   ├── Entity/
│       │       │   │   ├── AbstractEntity.php
│       │       │   │   ├── Activity.php
│       │       │   │   ├── Lead.php
│       │       │   │   ├── Person.php
│       │       │   │   └── Quote.php
│       │       │   ├── Entity.php
│       │       │   └── Validator.php
│       │       ├── Listeners/
│       │       │   └── Entity.php
│       │       ├── Models/
│       │       │   ├── Webhook.php
│       │       │   ├── WebhookProxy.php
│       │       │   ├── Workflow.php
│       │       │   └── WorkflowProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── WorkflowServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── WebhookRepository.php
│       │       │   └── WorkflowRepository.php
│       │       └── Services/
│       │           └── WebhookService.php
│       ├── Contact/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Organization.php
│       │       │   └── Person.php
│       │       ├── Database/
│       │       │   ├── Factories/
│       │       │   │   └── PersonFactory.php
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_09_051326_create_organizations_table.php
│       │       │       ├── 2021_04_09_065617_create_persons_table.php
│       │       │       ├── 2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php
│       │       │       ├── 2024_07_31_092951_add_job_title_in_persons_table.php
│       │       │       ├── 2024_08_06_145943_create_person_tags_table.php
│       │       │       ├── 2024_08_06_161212_create_person_activities_table.php
│       │       │       ├── 2024_08_14_102116_add_user_id_column_in_persons_table.php
│       │       │       ├── 2024_08_14_102136_add_user_id_column_in_organizations_table.php
│       │       │       ├── 2024_09_09_112201_add_unique_id_to_person_table.php
│       │       │       └── 2025_03_19_132236_update_organization_id_column_in_persons_table.php
│       │       ├── Models/
│       │       │   ├── Organization.php
│       │       │   ├── OrganizationProxy.php
│       │       │   ├── Person.php
│       │       │   └── PersonProxy.php
│       │       ├── Providers/
│       │       │   ├── ContactServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           ├── OrganizationRepository.php
│       │           └── PersonRepository.php
│       ├── Core/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Acl/
│       │       │   └── AclItem.php
│       │       ├── Acl.php
│       │       ├── Config/
│       │       │   ├── concord.php
│       │       │   ├── cors.php
│       │       │   └── sanctum.php
│       │       ├── Console/
│       │       │   └── Commands/
│       │       │       └── Version.php
│       │       ├── Contracts/
│       │       │   ├── CoreConfig.php
│       │       │   ├── Country.php
│       │       │   ├── CountryState.php
│       │       │   └── Validations/
│       │       │       ├── Code.php
│       │       │       └── Decimal.php
│       │       ├── Core.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_03_12_060658_create_core_config_table.php
│       │       │       ├── 2021_04_12_173232_create_countries_table.php
│       │       │       ├── 2021_04_12_173344_create_country_states_table.php
│       │       │       └── 2025_01_29_133500_update_text_column_type_in_core_config_table.php
│       │       ├── Eloquent/
│       │       │   ├── Repository.php
│       │       │   └── TranslatableModel.php
│       │       ├── Exceptions/
│       │       │   └── ViterNotFound.php
│       │       ├── Facades/
│       │       │   ├── Acl.php
│       │       │   ├── Core.php
│       │       │   ├── Menu.php
│       │       │   └── SystemConfig.php
│       │       ├── Helpers/
│       │       │   └── Helper.php
│       │       ├── Http/
│       │       │   └── helpers.php
│       │       ├── Menu/
│       │       │   └── MenuItem.php
│       │       ├── Menu.php
│       │       ├── Models/
│       │       │   ├── CoreConfig.php
│       │       │   ├── CoreConfigProxy.php
│       │       │   ├── Country.php
│       │       │   ├── CountryProxy.php
│       │       │   ├── CountryState.php
│       │       │   └── CountryStateProxy.php
│       │       ├── Providers/
│       │       │   ├── BaseModuleServiceProvider.php
│       │       │   ├── CoreServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── CoreConfigRepository.php
│       │       │   ├── CountryRepository.php
│       │       │   └── CountryStateRepository.php
│       │       ├── Resources/
│       │       │   └── lang/
│       │       │       ├── ar/
│       │       │       │   └── app.php
│       │       │       ├── en/
│       │       │       │   └── app.php
│       │       │       ├── es/
│       │       │       │   └── app.php
│       │       │       ├── fa/
│       │       │       │   └── app.php
│       │       │       ├── pt_BR/
│       │       │       │   └── app.php
│       │       │       ├── tr/
│       │       │       │   └── app.php
│       │       │       └── vi/
│       │       │           └── app.php
│       │       ├── SystemConfig/
│       │       │   ├── Item.php
│       │       │   └── ItemField.php
│       │       ├── SystemConfig.php
│       │       ├── Traits/
│       │       │   ├── PDFHandler.php
│       │       │   └── Sanitizer.php
│       │       ├── ViewRenderEventManager.php
│       │       └── Vite.php
│       ├── DataGrid/
│       │   └── src/
│       │       ├── Action.php
│       │       ├── Column.php
│       │       ├── ColumnTypes/
│       │       │   ├── Aggregate.php
│       │       │   ├── Boolean.php
│       │       │   ├── Date.php
│       │       │   ├── Datetime.php
│       │       │   ├── Decimal.php
│       │       │   ├── Integer.php
│       │       │   └── Text.php
│       │       ├── Contracts/
│       │       │   └── SavedFilter.php
│       │       ├── DataGrid.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       └── 2024_05_10_152848_create_saved_filters_table.php
│       │       ├── Enums/
│       │       │   ├── ColumnTypeEnum.php
│       │       │   ├── DateRangeOptionEnum.php
│       │       │   └── FilterTypeEnum.php
│       │       ├── Exceptions/
│       │       │   ├── InvalidColumnException.php
│       │       │   ├── InvalidColumnTypeException.php
│       │       │   └── InvalidDataGridException.php
│       │       ├── Exports/
│       │       │   └── DataGridExport.php
│       │       ├── Http/
│       │       │   └── helpers.php
│       │       ├── MassAction.php
│       │       ├── Models/
│       │       │   ├── SavedFilter.php
│       │       │   └── SavedFilterProxy.php
│       │       ├── Providers/
│       │       │   ├── DataGridServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           └── SavedFilterRepository.php
│       ├── DataTransfer/
│       │   └── src/
│       │       ├── Config/
│       │       │   └── importers.php
│       │       ├── Contracts/
│       │       │   ├── Import.php
│       │       │   └── ImportBatch.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2024_01_11_154640_create_imports_table.php
│       │       │       └── 2024_01_11_154741_create_import_batches_table.php
│       │       ├── Helpers/
│       │       │   ├── Error.php
│       │       │   ├── Import.php
│       │       │   ├── Importers/
│       │       │   │   ├── AbstractImporter.php
│       │       │   │   ├── Leads/
│       │       │   │   │   ├── Importer.php
│       │       │   │   │   └── Storage.php
│       │       │   │   ├── Persons/
│       │       │   │   │   ├── Importer.php
│       │       │   │   │   └── Storage.php
│       │       │   │   └── Products/
│       │       │   │       ├── Importer.php
│       │       │   │       └── SKUStorage.php
│       │       │   └── Sources/
│       │       │       ├── AbstractSource.php
│       │       │       ├── CSV.php
│       │       │       └── Excel.php
│       │       ├── Jobs/
│       │       │   └── Import/
│       │       │       ├── Completed.php
│       │       │       ├── ImportBatch.php
│       │       │       ├── IndexBatch.php
│       │       │       ├── Indexing.php
│       │       │       ├── LinkBatch.php
│       │       │       └── Linking.php
│       │       ├── Models/
│       │       │   ├── Import.php
│       │       │   ├── ImportBatch.php
│       │       │   ├── ImportBatchProxy.php
│       │       │   └── ImportProxy.php
│       │       ├── Providers/
│       │       │   ├── DataTransferServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── ImportBatchRepository.php
│       │       │   └── ImportRepository.php
│       │       └── Resources/
│       │           └── lang/
│       │               ├── ar/
│       │               │   └── ar.php
│       │               ├── en/
│       │               │   └── app.php
│       │               ├── es/
│       │               │   └── app.php
│       │               ├── fa/
│       │               │   └── app.php
│       │               ├── pt_BR/
│       │               │   └── app.php
│       │               └── tr/
│       │                   └── app.php
│       ├── Email/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Console/
│       │       │   └── Commands/
│       │       │       └── ProcessInboundEmails.php
│       │       ├── Contracts/
│       │       │   ├── Attachment.php
│       │       │   └── Email.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_05_24_075618_create_emails_table.php
│       │       │       ├── 2021_05_25_072700_create_email_attachments_table.php
│       │       │       └── 2024_08_27_091619_create_email_tags_table.php
│       │       ├── Enums/
│       │       │   └── SupportedFolderEnum.php
│       │       ├── Helpers/
│       │       │   ├── Attachment.php
│       │       │   ├── Charset.php
│       │       │   ├── Contracts/
│       │       │   │   └── CharsetManager.php
│       │       │   ├── HtmlFilter.php
│       │       │   └── Parser.php
│       │       ├── InboundEmailProcessor/
│       │       │   ├── Contracts/
│       │       │   │   └── InboundEmailProcessor.php
│       │       │   ├── SendgridEmailProcessor.php
│       │       │   └── WebklexImapEmailProcessor.php
│       │       ├── Mails/
│       │       │   └── Email.php
│       │       ├── Models/
│       │       │   ├── Attachment.php
│       │       │   ├── AttachmentProxy.php
│       │       │   ├── Email.php
│       │       │   └── EmailProxy.php
│       │       ├── Providers/
│       │       │   ├── EmailServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           ├── AttachmentRepository.php
│       │           └── EmailRepository.php
│       ├── EmailTemplate/
│       │   └── src/
│       │       ├── Contracts/
│       │       │   └── EmailTemplate.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_09_03_172713_create_email_templates_table.php
│       │       │       └── 2025_07_09_133553_alter_email_templates_table.php
│       │       ├── Models/
│       │       │   ├── EmailTemplate.php
│       │       │   └── EmailTemplateProxy.php
│       │       ├── Providers/
│       │       │   ├── EmailTemplateServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           └── EmailTemplateRepository.php
│       ├── Installer/
│       │   ├── .gitignore
│       │   ├── composer.json
│       │   ├── package.json
│       │   ├── postcss.config.js
│       │   ├── src/
│       │   │   ├── Console/
│       │   │   │   └── Commands/
│       │   │   │       └── Installer.php
│       │   │   ├── Data/
│       │   │   │   ├── countries.json
│       │   │   │   └── states.json
│       │   │   ├── Database/
│       │   │   │   ├── Migrations/
│       │   │   │   │   ├── 2024_06_24_174241_insert_warehouse_attributes_in_attributes_table.php
│       │   │   │   │   ├── 2024_07_31_093603_add_organization_sales_owner_attribute_in_attributes_table.php
│       │   │   │   │   ├── 2024_07_31_093605_add_person_job_title_attribute_in_attributes_table.php
│       │   │   │   │   ├── 2024_07_31_093605_add_person_sales_owner_attribute_in_attributes_table.php
│       │   │   │   │   └── 2024_08_21_153011_add_leads_stage_and_pipeline_attributes.php
│       │   │   │   └── Seeders/
│       │   │   │       ├── Attribute/
│       │   │   │       │   ├── AttributeSeeder.php
│       │   │   │       │   └── DatabaseSeeder.php
│       │   │   │       ├── Core/
│       │   │   │       │   ├── CountriesSeeder.php
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   └── StatesSeeder.php
│       │   │   │       ├── DatabaseSeeder.php
│       │   │   │       ├── EmailTemplate/
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   └── EmailTemplateSeeder.php
│       │   │   │       ├── Lead/
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   ├── PipelineSeeder.php
│       │   │   │       │   ├── SourceSeeder.php
│       │   │   │       │   └── TypeSeeder.php
│       │   │   │       ├── User/
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   ├── RoleSeeder.php
│       │   │   │       │   └── UserSeeder.php
│       │   │   │       └── Workflow/
│       │   │   │           ├── DatabaseSeeder.php
│       │   │   │           └── WorkflowSeeder.php
│       │   │   ├── Events/
│       │   │   │   └── ComposerEvents.php
│       │   │   ├── Helpers/
│       │   │   │   ├── DatabaseManager.php
│       │   │   │   ├── EnvironmentManager.php
│       │   │   │   └── ServerRequirements.php
│       │   │   ├── Http/
│       │   │   │   ├── Controllers/
│       │   │   │   │   ├── Controller.php
│       │   │   │   │   ├── ImageCacheController.php
│       │   │   │   │   └── InstallerController.php
│       │   │   │   └── Middleware/
│       │   │   │       ├── CanInstall.php
│       │   │   │       └── Locale.php
│       │   │   ├── Listeners/
│       │   │   │   └── Installer.php
│       │   │   ├── Providers/
│       │   │   │   └── InstallerServiceProvider.php
│       │   │   ├── Resources/
│       │   │   │   ├── assets/
│       │   │   │   │   ├── css/
│       │   │   │   │   │   └── app.css
│       │   │   │   │   └── js/
│       │   │   │   │       ├── app.js
│       │   │   │   │       └── plugins/
│       │   │   │   │           └── axios.js
│       │   │   │   ├── lang/
│       │   │   │   │   ├── ar/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── en/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── es/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── fa/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── pt_BR/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── tr/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   └── vi/
│       │   │   │   │       └── app.php
│       │   │   │   └── views/
│       │   │   │       ├── components/
│       │   │   │       │   ├── button/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── form/
│       │   │   │       │       ├── control-group/
│       │   │   │       │       │   ├── control.blade.php
│       │   │   │       │       │   ├── error.blade.php
│       │   │   │       │       │   ├── index.blade.php
│       │   │   │       │       │   └── label.blade.php
│       │   │   │       │       └── index.blade.php
│       │   │   │       └── installer/
│       │   │   │           └── index.blade.php
│       │   │   ├── Routes/
│       │   │   │   └── web.php
│       │   │   └── Templates/
│       │   │       └── on-boarding.php
│       │   ├── tailwind.config.js
│       │   └── vite.config.js
│       ├── Lead/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Lead.php
│       │       │   ├── Pipeline.php
│       │       │   ├── Product.php
│       │       │   ├── Source.php
│       │       │   ├── Stage.php
│       │       │   └── Type.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_21_172825_create_lead_sources_table.php
│       │       │       ├── 2021_04_21_172847_create_lead_types_table.php
│       │       │       ├── 2021_04_22_153258_create_lead_stages_table.php
│       │       │       ├── 2021_04_22_155706_create_lead_pipelines_table.php
│       │       │       ├── 2021_04_22_155838_create_lead_pipeline_stages_table.php
│       │       │       ├── 2021_04_22_164215_create_leads_table.php
│       │       │       ├── 2021_04_22_171805_create_lead_products_table.php
│       │       │       ├── 2021_05_12_150329_create_lead_activities_table.php
│       │       │       ├── 2021_05_20_141240_create_lead_tags_table.php
│       │       │       ├── 2021_07_02_201822_create_lead_quotes_table.php
│       │       │       ├── 2021_09_23_221138_add_column_expected_close_date_in_leads_table.php
│       │       │       ├── 2021_09_30_135857_add_column_rotten_days_in_lead_pipelines_table.php
│       │       │       ├── 2021_09_30_154222_alter_lead_pipeline_stages_table.php
│       │       │       ├── 2021_09_30_161722_alter_leads_table.php
│       │       │       ├── 2021_09_30_183825_change_user_id_to_nullable_in_leads_table.php
│       │       │       ├── 2021_11_11_180804_change_lead_pipeline_stage_id_constraint_in_leads_table.php
│       │       │       ├── 2024_11_29_120302_modify_foreign_keys_in_leads_table.php
│       │       │       └── 2025_07_01_133612_alter_lead_pipelines_table.php
│       │       ├── Helpers/
│       │       │   └── MagicAI.php
│       │       ├── Models/
│       │       │   ├── Lead.php
│       │       │   ├── LeadProxy.php
│       │       │   ├── Pipeline.php
│       │       │   ├── PipelineProxy.php
│       │       │   ├── Product.php
│       │       │   ├── ProductProxy.php
│       │       │   ├── Source.php
│       │       │   ├── SourceProxy.php
│       │       │   ├── Stage.php
│       │       │   ├── StageProxy.php
│       │       │   ├── Type.php
│       │       │   └── TypeProxy.php
│       │       ├── Providers/
│       │       │   ├── LeadServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── LeadRepository.php
│       │       │   ├── PipelineRepository.php
│       │       │   ├── ProductRepository.php
│       │       │   ├── SourceRepository.php
│       │       │   ├── StageRepository.php
│       │       │   └── TypeRepository.php
│       │       └── Services/
│       │           └── MagicAIService.php
│       ├── Marketing/
│       │   └── src/
│       │       ├── Console/
│       │       │   └── Commands/
│       │       │       └── CampaignCommand.php
│       │       ├── Contracts/
│       │       │   ├── Campaign.php
│       │       │   └── Event.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2024_10_29_044744_create_marketing_events_table.php
│       │       │       └── 2024_11_04_122500_create_marketing_campaigns_table.php
│       │       ├── Helpers/
│       │       │   └── Campaign.php
│       │       ├── Mail/
│       │       │   └── CampaignMail.php
│       │       ├── Models/
│       │       │   ├── Campaign.php
│       │       │   ├── CampaignProxy.php
│       │       │   ├── Event.php
│       │       │   └── EventProxy.php
│       │       ├── Providers/
│       │       │   ├── MarketingServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           ├── CampaignRepository.php
│       │           └── EventRepository.php
│       ├── Product/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Product.php
│       │       │   └── ProductInventory.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_09_065617_create_products_table.php
│       │       │       ├── 2024_06_28_154009_create_product_inventories_table.php
│       │       │       ├── 2024_08_10_150329_create_product_activities_table.php
│       │       │       ├── 2024_08_10_150340_create_product_tags_table.php
│       │       │       └── 2024_09_06_065808_alter_product_inventories_table.php
│       │       ├── Models/
│       │       │   ├── Product.php
│       │       │   ├── ProductInventory.php
│       │       │   ├── ProductInventoryProxy.php
│       │       │   └── ProductProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── ProductServiceProvider.php
│       │       └── Repositories/
│       │           ├── ProductInventoryRepository.php
│       │           └── ProductRepository.php
│       ├── Quote/
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Quote.php
│       │       │   └── QuoteItem.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_07_01_230345_create_quotes_table.php
│       │       │       └── 2021_07_01_231317_create_quote_items_table.php
│       │       ├── Models/
│       │       │   ├── Quote.php
│       │       │   ├── QuoteItem.php
│       │       │   ├── QuoteItemProxy.php
│       │       │   └── QuoteProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── QuoteServiceProvider.php
│       │       └── Repositories/
│       │           ├── QuoteItemRepository.php
│       │           └── QuoteRepository.php
│       ├── Tag/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   └── Tag.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       └── 2021_05_20_141230_create_tags_table.php
│       │       ├── Models/
│       │       │   ├── Tag.php
│       │       │   └── TagProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── TagServiceProvider.php
│       │       └── Repositories/
│       │           └── TagRepository.php
│       ├── User/
│       │   ├── .gitignore
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Group.php
│       │       │   ├── Role.php
│       │       │   └── User.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── .gitkeep
│       │       │       ├── 2021_03_12_074578_create_groups_table.php
│       │       │       ├── 2021_03_12_074597_create_roles_table.php
│       │       │       ├── 2021_03_12_074857_create_users_table.php
│       │       │       ├── 2021_03_12_074867_create_user_groups_table.php
│       │       │       ├── 2021_03_12_074957_create_user_password_resets_table.php
│       │       │       ├── 2021_09_22_194622_add_unique_index_to_name_in_groups_table.php
│       │       │       └── 2021_11_12_171510_add_image_column_in_users_table.php
│       │       ├── Models/
│       │       │   ├── Group.php
│       │       │   ├── GroupProxy.php
│       │       │   ├── Role.php
│       │       │   ├── RoleProxy.php
│       │       │   ├── User.php
│       │       │   └── UserProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── UserServiceProvider.php
│       │       └── Repositories/
│       │           ├── GroupRepository.php
│       │           ├── RoleRepository.php
│       │           └── UserRepository.php
│       ├── Warehouse/
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Location.php
│       │       │   └── Warehouse.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2024_06_21_160707_create_warehouses_table.php
│       │       │       ├── 2024_06_21_160735_create_warehouse_locations_table.php
│       │       │       ├── 2024_08_10_100329_create_warehouse_activities_table.php
│       │       │       └── 2024_08_10_100340_create_warehouse_tags_table.php
│       │       ├── Models/
│       │       │   ├── Location.php
│       │       │   ├── LocationProxy.php
│       │       │   ├── Warehouse.php
│       │       │   └── WarehouseProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── WarehouseServiceProvider.php
│       │       └── Repositories/
│       │           ├── LocationRepository.php
│       │           └── WarehouseRepository.php
│       └── WebForm/
│           ├── .gitignore
│           ├── composer.json
│           ├── package.json
│           ├── postcss.config.js
│           ├── src/
│           │   ├── Config/
│           │   │   ├── acl.php
│           │   │   └── menu.php
│           │   ├── Contracts/
│           │   │   ├── WebForm.php
│           │   │   └── WebFormAttribute.php
│           │   ├── DataGrids/
│           │   │   └── WebFormDataGrid.php
│           │   ├── Database/
│           │   │   └── Migrations/
│           │   │       ├── 2021_12_14_213049_create_web_forms_table.php
│           │   │       └── 2021_12_14_214923_create_web_form_attributes_table.php
│           │   ├── Http/
│           │   │   ├── Controllers/
│           │   │   │   ├── Controller.php
│           │   │   │   └── WebFormController.php
│           │   │   └── Requests/
│           │   │       └── WebForm.php
│           │   ├── Models/
│           │   │   ├── WebForm.php
│           │   │   ├── WebFormAttribute.php
│           │   │   ├── WebFormAttributeProxy.php
│           │   │   └── WebFormProxy.php
│           │   ├── Providers/
│           │   │   ├── ModuleServiceProvider.php
│           │   │   └── WebFormServiceProvider.php
│           │   ├── Repositories/
│           │   │   ├── WebFormAttributeRepository.php
│           │   │   └── WebFormRepository.php
│           │   ├── Resources/
│           │   │   ├── assets/
│           │   │   │   ├── css/
│           │   │   │   │   └── app.css
│           │   │   │   ├── js/
│           │   │   │   │   ├── app.js
│           │   │   │   │   └── plugins/
│           │   │   │   │       ├── axios.js
│           │   │   │   │       ├── emitter.js
│           │   │   │   │       ├── flatpickr.js
│           │   │   │   │       └── vee-validate.js
│           │   │   │   └── locales/
│           │   │   │       ├── hi_IN.json
│           │   │   │       └── sin.json
│           │   │   ├── lang/
│           │   │   │   ├── ar/
│           │   │   │   │   └── app.php
│           │   │   │   ├── en/
│           │   │   │   │   └── app.php
│           │   │   │   ├── es/
│           │   │   │   │   └── app.php
│           │   │   │   ├── fa/
│           │   │   │   │   └── app.php
│           │   │   │   ├── pt_BR/
│           │   │   │   │   └── app.php
│           │   │   │   ├── tr/
│           │   │   │   │   └── app.php
│           │   │   │   └── vi/
│           │   │   │       └── app.php
│           │   │   └── views/
│           │   │       ├── components/
│           │   │       │   ├── button/
│           │   │       │   │   └── index.blade.php
│           │   │       │   ├── flash-group/
│           │   │       │   │   ├── index.blade.php
│           │   │       │   │   └── item.blade.php
│           │   │       │   ├── form/
│           │   │       │   │   ├── control-group/
│           │   │       │   │   │   ├── control.blade.php
│           │   │       │   │   │   ├── error.blade.php
│           │   │       │   │   │   ├── index.blade.php
│           │   │       │   │   │   └── label.blade.php
│           │   │       │   │   └── index.blade.php
│           │   │       │   ├── layouts/
│           │   │       │   │   └── index.blade.php
│           │   │       │   └── spinner/
│           │   │       │       └── index.blade.php
│           │   │       └── settings/
│           │   │           └── web-forms/
│           │   │               ├── controls.blade.php
│           │   │               ├── embed.blade.php
│           │   │               └── preview.blade.php
│           │   ├── Routes/
│           │   │   └── routes.php
│           │   └── Rules/
│           │       └── PhoneNumber.php
│           ├── tailwind.config.js
│           └── vite.config.js
├── phpunit.xml
├── pint.json
├── public/
│   ├── .htaccess
│   ├── admin/
│   │   └── build/
│   │       ├── assets/
│   │       │   ├── app-B1rBjssc.js
│   │       │   ├── app-C2Wq9G4i.css
│   │       │   ├── app-xcMAMgaV.css
│   │       │   ├── ar.es-CfdTYgcp.js
│   │       │   ├── bg.es-Ce0T19Qg.js
│   │       │   ├── bn.es-iWyup8_3.js
│   │       │   ├── bs.es-Cz58hpHx.js
│   │       │   ├── ca.es-CujU75Im.js
│   │       │   ├── chart-D1u1Dgzh.js
│   │       │   ├── cs.es-BHhRbaip.js
│   │       │   ├── da.es-DglD7fV2.js
│   │       │   ├── de.es-D_4ZyLTN.js
│   │       │   ├── drag-and-drop.es-JkAdgoaa.js
│   │       │   ├── el.es-BC26X5xm.js
│   │       │   ├── en.es-DDTuV2po.js
│   │       │   ├── es.es-BvvfjN-O.js
│   │       │   ├── et.es-C0rF9HtR.js
│   │       │   ├── fa.es-CibKJjgz.js
│   │       │   ├── fi.es-B0Iy6aas.js
│   │       │   ├── fr.es-B7WXlprl.js
│   │       │   ├── he.es-K9Fk8xhK.js
│   │       │   ├── hr.es-ef5bxYFj.js
│   │       │   ├── hu.es-nZ65MV0n.js
│   │       │   ├── id.es-CzHAK-XV.js
│   │       │   ├── is.es-Dz07gBgt.js
│   │       │   ├── it.es-CquQA5xx.js
│   │       │   ├── ja.es-D6pL26k_.js
│   │       │   ├── ka.es-Cb9X-eNS.js
│   │       │   ├── ko.es-CTpJlj0A.js
│   │       │   ├── lt.es-vqgjGyMx.js
│   │       │   ├── mn.es-YZet1as4.js
│   │       │   ├── nl.es-COp8PWbT.js
│   │       │   ├── no.es-_2m-F2FS.js
│   │       │   ├── pl.es-jjNeJM5X.js
│   │       │   ├── pt-br.es-D8ojES2d.js
│   │       │   ├── pt-pt.es-D8ojES2d.js
│   │       │   ├── ro.es-B6_ATXom.js
│   │       │   ├── ru.es-BGEpmv_x.js
│   │       │   ├── sk.es-V3h-1af8.js
│   │       │   ├── sl.es-mZjm0YDT.js
│   │       │   ├── sq.es-_6B4UQXy.js
│   │       │   ├── sr.es-BmdOpTOG.js
│   │       │   ├── sv.es-LwrPWbzy.js
│   │       │   ├── tr.es-CS80t-Rq.js
│   │       │   ├── uk.es-BVYlda65.js
│   │       │   ├── vi.es-B5CIRCK5.js
│   │       │   ├── zh-cn.es-DKz-yscG.js
│   │       │   └── zh-hk.es-CFZP5Cvd.js
│   │       └── manifest.json
│   ├── fonts/
│   │   └── .gitignore
│   ├── index.php
│   ├── installer/
│   │   └── build/
│   │       ├── assets/
│   │       │   ├── app-aec2df31.js
│   │       │   └── app-e0866a20.css
│   │       └── manifest.json
│   ├── robots.txt
│   ├── web.config
│   └── webform/
│       └── build/
│           ├── assets/
│           │   ├── app-499ae59b.css
│           │   ├── app-8787c790.js
│           │   └── app-c04ede37.css
│           └── manifest.json
├── resources/
│   ├── css/
│   │   └── app.css
│   ├── js/
│   │   ├── app.js
│   │   └── bootstrap.js
│   └── views/
│       └── .gitignore
├── routes/
│   ├── api.php
│   ├── breadcrumbs.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage/
│   ├── .gitignore
│   ├── app/
│   │   └── .gitignore
│   ├── debugbar/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   ├── Feature/
│   │   └── AuthenticationTest.php
│   ├── Pest.php
│   ├── TestCase.php
│   └── Unit/
│       └── BasicTest.php
└── vite.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2


================================================
FILE: .gitattributes
================================================
* text=auto eol=lf

*.blade.php diff=html
*.css diff=css
*.html diff=html
*.md diff=markdown
*.php diff=php

/.github export-ignore
CHANGELOG.md export-ignore
.styleci.yml export-ignore


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

open_collective: bagisto

================================================
FILE: .github/ISSUE_TEMPLATE/1_Bug_report.md
================================================
---
name: "🐛 Bug Report"
about: 'Report a general library issue.'
---

# Bug report

### Title
**Just a quick sentence to brief your trouble with Krayin CRM or something associated with it.**
**Please be calm, short and emphasize on points.**

### Issue Description
**Description helps the developers to understand the bug. It describes the problem encountered or some after effect of some kind.**

### Preconditions
**Please provide as detailed information about your environment as possible.**

    1. framework Version.
    2. Commit id.

### Steps to reproduce
**It is important to provide a set of clear steps to reproduce this bug.If relevant please include code samples.**

    1. step1
    2. step2

### Expected result
**Tell us what should happen.**

*   [Screenshots, logs or description]

### Actual result

>    **Tell us what happens instead.**

* [points....]

================================================
FILE: .github/ISSUE_TEMPLATE/2_Feature_request.md
================================================
---
name: "💡 Feature Request"
about: 'For ideas or feature requests, please make a pull request, or open an issue'
---

This repository is only for reporting bugs or issues. If you need support, please use
other channels:

1. Write an email - mailto:support@krayincrm.com

2. Create support ticket on https://krayincrm.uvdesk.com

3. Visit forums to get support from our community (https://forums.krayincrm.com)

Alternatively, you may use Facebook (https://www.facebook.com/groups/krayincrm/).

We promise that more channels are coming soon!!!

================================================
FILE: .github/ISSUE_TEMPLATE/3_Support_question.md
================================================
---
name: "❔ Support Question"
about: 'This repository is only for reporting bugs or problems. If you need help, see:
  https://github.com/krayin/laravel-crm#documentation'
---

This repository is only for reporting bugs or issues. If you need support, please use:

1. Create support ticket on https://krayincrm.uvdesk.com

Thanks!


================================================
FILE: .github/ISSUE_TEMPLATE/4_Security_vulnerabilities.md
================================================
---
name: "🔒 Security Vulnerabilities"
about: 'For reporting security-related issues, see: https://github.com/krayin/laravel-crm#security-vulnerabilities'
---

PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, SEE BELOW.

If you have security vulnerability to address related to Krayin then please write a mail to us:
**support@krayincrm.com**

================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Issue Reference
<!--- Please mention issue #id or use a comma if your pull request solves multiple issues. -->

## Description
<!--- Please describe your changes in detail. -->

## How To Test This?
<!--- Please describe in detail how to test the changes made in this pull request. -->

## Documentation
- [ ] My pull request requires an update on the documentation repository.
<!--- Please describe in detail what needs to be changed. --->

## Branch Selection
<!--- Please specify the target branch for this pull request. -->
- [ ] Target Branch: master 

## Tailwind Reordering
<!--- Please make sure all the Tailwind classes are reordered. -->

================================================
FILE: .github/workflows/admin_playwright_tests.yml
================================================
name: Admin | Playwright Tests

on: [push, pull_request]

permissions:
  contents: read

env:
  FORCE_COLOR: 1

jobs:
  admin_playwright_test:
    runs-on: ${{ matrix.operating-systems }}

    strategy:
      fail-fast: false
      matrix:
        operating-systems: [ubuntu-latest]
        php-versions: ['8.3']
        node-version: ['22.13.1']
        shard-index: [1,2,3,4,5,6]
        shard-total: [6]

    name: Admin | Playwright Tests | Shard ${{ matrix.shard-index }} Of ${{ matrix.shard-total }}

    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: krayin
        ports:
          - 3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: curl, fileinfo, gd, intl, mbstring, openssl, pdo, pdo_mysql, tokenizer, zip
          ini-values: error_reporting=E_ALL
          tools: composer:v2

      - name: Set Up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install Node.js Dependencies
        run: npm install
        working-directory: packages/Webkul/Admin

      - name: Install Playwright Browsers
        run: npx playwright install --with-deps
        working-directory: packages/Webkul/Admin

      - name: Setting Environment
        run: |
          cp .env.example .env
          sed -i "s|^\(DB_HOST=\s*\).*$|\1127.0.0.1|" .env
          sed -i "s|^\(DB_PORT=\s*\).*$|\1${{ job.services.mysql.ports['3306'] }}|" .env
          sed -i "s|^\(DB_DATABASE=\s*\).*$|\1krayin|" .env
          sed -i "s|^\(DB_USERNAME=\s*\).*$|\1root|" .env
          sed -i "s|^\(DB_PASSWORD=\s*\).*$|\1root|" .env
          sed -i "s|^\(APP_DEBUG=\s*\).*$|\1true|" .env
          sed -i "s|^\(APP_URL=\s*\).*$|\1http://127.0.0.1:8000|" .env
          cat .env

      - name: Install Composer Dependencies
        run: composer install

      - name: Running Krayin Installer
        run: php artisan krayin-crm:install --skip-env-check --skip-admin-creation

      - name: Clear Laravel Caches
        run: php artisan optimize:clear

      - name: Verify Activity Binding
        run: |
          php artisan tinker --execute="
          // 1) Laravel container binding (needed by repositories)
          if (! app()->bound(Webkul\\Activity\\Contracts\\Activity::class)) {
              throw new RuntimeException('Activity contract is NOT bound in Laravel container');
          }

          // 2) Concord model-proxy registry (needed by ActivityProxy::modelClass())
          \$concord = app('concord');
          if (! \$concord->model(Webkul\\Activity\\Contracts\\Activity::class)) {
              throw new RuntimeException('Activity contract is NOT registered in Concord model registry');
          }

          dump(app()->make(Webkul\\Activity\\Contracts\\Activity::class)::class);
          dump(\$concord->model(Webkul\\Activity\\Contracts\\Activity::class));
          "

      # - name: Seed Product Table
      #   run: php artisan db:seed --class="Webkul\\Installer\\Database\\Seeders\\ProductTableSeeder"

      - name: Start Laravel server
        run: |
          php artisan serve --host=0.0.0.0 --port=8000 > server.log 2>&1 &
          echo "Waiting for server to start..."
          timeout 30 bash -c 'until curl -s http://127.0.0.1:8000 > /dev/null; do sleep 1; done'

      - name: Run All Playwright Tests
        env:
          BASE_URL: 'http://127.0.0.1:8000'
        run: |
          npx playwright test --reporter=list --config=tests/e2e-pw/playwright.config.ts --shard=${{ matrix.shard-index }}/${{ matrix.shard-total }}
        working-directory: packages/Webkul/Admin

      - name: Upload Test Results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: test-results-${{ matrix.shard-index }}-${{ github.run_id }}-${{ github.run_number }}
          path: packages/Webkul/Admin/tests/e2e-pw/test-results
          retention-days: 1


================================================
FILE: .github/workflows/auto_commits.yml
================================================
name: Linting Tests

on: [push, pull_request]

permissions:
  contents: write

jobs:
  linting_tests:
    runs-on: ${{ matrix.operating-systems }}

    strategy:
      matrix:
        operating-systems: [ubuntu-latest]
        php-versions: ['8.3']

    name: PHP ${{ matrix.php-versions }} test on ${{ matrix.operating-systems }}

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          tools: composer:v2

      - name: Install Pint
        run: composer global require laravel/pint
        env:
          COMPOSER_HOME: ${{ runner.temp }}/composer

      - name: Run Pint
        run: ${{ runner.temp }}/composer/vendor/bin/pint

      - name: Commit Linted Files
        uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: "chore: applied pint changes"


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on: [push, pull_request]

jobs:
  tests:
    runs-on: ${{ matrix.operating-system }}

    strategy:
      matrix:
        operating-system: [ubuntu-latest]
        php-versions: ["8.3"]

    name: PHP ${{ matrix.php-versions }} test on ${{ matrix.operating-system }}

    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: krayin
        ports:
          - 3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: curl, gd, intl, mbstring, openssl, pdo, pdo_mysql, tokenizer, zip
          ini-values: error_reporting=E_ALL
          tools: composer:v2

      - name: Running Composer Install
        run: composer install --no-interaction --prefer-dist --no-progress

      - name: Set Testing Environment
        run: |
          cp .env.example .env
          sed -i "s|^\(APP_ENV=\s*\).*$|\1testing|" .env
          sed -i "s|^\(DB_HOST=\s*\).*$|\1127.0.0.1|" .env
          sed -i "s|^\(DB_PORT=\s*\).*$|\1${{ job.services.mysql.ports['3306'] }}|" .env
          sed -i "s|^\(DB_DATABASE=\s*\).*$|\1krayin|" .env
          sed -i "s|^\(DB_USERNAME=\s*\).*$|\1root|" .env
          sed -i "s|^\(DB_PASSWORD=\s*\).*$|\1root|" .env

      - name: Running Krayin Installer
        run: php artisan krayin-crm:install --skip-env-check --skip-admin-creation

      - name: Running Pest Test
        run: vendor/bin/pest --parallel --colors=always


================================================
FILE: .gitignore
================================================
.env
.env.testing
.idea
.php_cs.cache
.phpunit.result.cache
.vscode
.vagrant
*.hot
/stubs
/data
/docker-compose-collection
Homestead.json
Homestead.yaml
/ignorables/*
/node_modules
npm-debug.log
package-lock.json
/playwright-report
/public/css
/public/js
/public/hot
/public/storage
/public/vendor
/lang/vendor
/storage/*.key
/storage/dcc-data/
/vendor
yarn.lock
yarn-error.log

# Playwright
node_modules/
/test-results/
/blob-report/
/playwright/.cache/


================================================
FILE: .styleci.yml
================================================
php:
  preset: laravel
  disabled:
    - no_unused_imports
  finder:
    not-name:
      - index.php
js: true
css: true


================================================
FILE: CHANGELOG.md
================================================
# CHANGELOG for 2.2

This changelog consists of the bug & security fixes and new features being included in the releases listed below.

## **v2.2.0 (17th of March 2026)** *Release*

* **[Laravel 12 Upgrade]** Upgraded framework to Laravel 12

* #2480[enhancement] Codebase updates and refinements.

* #2478[enhancement] Improved class instantiation handling.

* #2472[enhancement] Upgrade to Laravel 12.

* #2470[enhancement] Updated auto_commits.yml configuration.

* #2469[enhancement] General enhancements and optimizations.

* #2468[enhancement] Documentation updates (MD files).

* #2450[fixed] Added ACL support for warehouses.

* #2444[fixed] Improved global search functionality for organizations.

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

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

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

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at support@krayincrm.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

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

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


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

Copyright 2010-2025, Webkul Software

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

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

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


================================================
FILE: README.md
================================================
<p align="center">
    <a href="https://krayincrm.com">
        <picture>
            <source media="(prefers-color-scheme: dark)" height="100" srcset="packages/Webkul/Admin/src/Resources/assets/images/dark-logo.svg">
            <source media="(prefers-color-scheme: light)" height="100" srcset="packages/Webkul/Admin/src/Resources/assets/images/logo.svg">
            <img alt="Krayin CRM" height="100" src="packages/Webkul/Admin/src/Resources/assets/images/logo.svg">
        </picture>
    </a>
</p>

<p align="center">
<a href="https://packagist.org/packages/krayin/laravel-crm"><img src="https://poser.pugx.org/krayin/laravel-crm/d/total.svg" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/krayin/laravel-crm"><img src="https://poser.pugx.org/krayin/laravel-crm/v/stable.svg" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/krayin/laravel-crm"><img src="https://poser.pugx.org/krayin/laravel-crm/license.svg" alt="License"></a>
</p>


![enter image description here](https://raw.githubusercontent.com/krayin/temp-media/master/dashboard.png)

## Topics

1. [Introduction](#introduction)
2. [Documentation](#documentation)
3. [Requirements](#requirements)
4. [Installation & Configuration](#installation-and-configuration)
4. [Docker Installation](https://devdocs.krayincrm.com/2.0/introduction/docker.html)
5. [Krayin Cloud System](#krayin-cloud-system)
6. [License](#license)
7. [Security Vulnerabilities](#security-vulnerabilities)

### Introduction

[Krayin CRM](https://krayincrm.com) is a hand tailored CRM framework built on some of the hottest opensource technologies
such as [Laravel](https://laravel.com) (a [PHP](https://secure.php.net/) framework) and [Vue.js](https://vuejs.org)
a progressive Javascript framework.

**Free & Opensource Laravel CRM solution for SMEs and Enterprises for complete customer lifecycle management.**

**Read our documentation: [Krayin CRM Docs](https://devdocs.krayincrm.com/)**

**We also have a forum for any type of concerns, feature requests, or discussions. Please visit: [Krayin CRM Forums](https://forums.krayincrm.com/)**

# Visit our live [Demo](https://demo.krayincrm.com)

<a href="javascript:void();">
    <img class="flag-img" src="https://raw.githubusercontent.com/krayin/temp-media/master/visit-our-live-demo.png" alt="Chinese" width="100%">
</a>

It packs in lots of features that will allow your E-Commerce business to scale in no time:

-   Descriptive and Simple Admin Panel.
-   Admin Dashboard.
-   Custom Attributes.
-   Built on Modular Approach.
-   Email parsing via Sendgrid.
-   Check out [these features and more](https://krayincrm.com/features/).

**For Developers**:
Take advantage of two of the hottest frameworks used in this project -- Laravel and Vue.js -- both of which have been used in Krayin CRM.

### Documentation

#### Krayin Documentation [https://devdocs.krayincrm.com](https://devdocs.krayincrm.com)

### Requirements

-   **SERVER**: Apache 2 or NGINX.
-   **RAM**: 3 GB or higher.
-   **PHP**: 8.3 or higher
-   **Composer**: 2.5 or higher
-   **For MySQL users**: 8.0.32 or higher.

### Installation and Configuration

##### Execute these commands below, in order

```
composer create-project
```

-   Find **.env** file in root directory and change the **APP_URL** param to your **domain**.

-   Also, Configure the **Mail** and **Database** parameters inside **.env** file.

```
php artisan krayin-crm:install
```

**To execute Krayin**:

##### On server:

Warning: Before going into production mode we recommend you uninstall developer dependencies.
In order to do that, run the command below:

> composer install --no-dev

```
Open the specified entry point in your hosts file in your browser or make an entry in hosts file if not done.
```

##### On local:

```
php artisan route:clear
php artisan serve
```


**How to log in as admin:**

> _http(s)://example.com/admin/login_

```
email:admin@example.com
password:admin123
```

### Krayin Cloud Hosting

[Krayin CRM Cloud Hosting](https://krayincrm.com/crm-cloud-hosting) is a fully managed hosting solution where our team sets up, secures, and configures your Krayin CRM on reliable infrastructure.

Get a ready-to-use CRM on your own domain, without manual installation or infrastructure complexity, and focus on growing your business while we handle the technology.

![Krayin CRM Cloud Hosting](https://raw.githubusercontent.com/krayin/temp-media/master/cloud_hosting.png)

### Krayin CRM Multi Tenant SaaS

[Krayin CRM Multi Tenant SaaS](https://krayincrm.com/extensions/krayin-crm-multi-tenant-saas-extension/) Krayin Multitenant SaaS is a Laravel-based CRM solution that allows multiple businesses (tenants) to use a single application instance while keeping their data isolated and secure.

![enter image description here](https://raw.githubusercontent.com/krayin/temp-media/master/krayin-saas.png)

### WhatsApp CRM Integration

[Krayin CRM WhatsApp](https://krayincrm.com/extensions/krayin-crm-whatsapp-extension/) Extension enables the store administrator to generate leads via their WhatsApp number.

![enter image description here](https://raw.githubusercontent.com/krayin/temp-media/master/krayin-crm-whatsapp-integration.png)

### VoIP CRM Integration

[Krayin CRM VoIP](https://krayincrm.com/extensions/krayin-crm-voip/) extension allows the user to make Trunk calls over a broadband Internet connection and the user can also perform Inbound routes.

![enter image description here](https://raw.githubusercontent.com/krayin/temp-media/master/krayin-voip.png)

### License

Krayin CRM is a fully open-source CRM framework which will always be free under the [MIT License](https://github.com/krayin/laravel-crm/blob/2.1/LICENSE).

### Security Vulnerabilities

Please don't disclose security vulnerabilities publicly. If you find any security vulnerability in Krayin CRM then please email us: sales@krayincrm.com.


================================================
FILE: UPGRADE.md
================================================
# UPGRADE Guide

- [Upgrading To v2.2 From v2.1](#upgrading-to-v22-from-v21)

## High Impact Changes

- [Laravel 12 Upgrade](#laravel-12-upgrade)

## Upgrading To v2.2 From v2.1

> [!NOTE]
> We strive to document every potential breaking change. However, as some of these alterations occur in lesser-known sections of Krayin, only a fraction of them may impact your application.

### Updating Dependencies

**Impact Probability: High**

#### PHP 8.3 Required

Krayin CRM v2.2 now requires PHP 8.3 or greater.

### Laravel 12 Upgrade

**Impact Probability: High**

Krayin CRM v2.2 has been upgraded to Laravel 12, which introduces stricter type checking and modernized date/time handling.

#### Key Changes

- **Bootstrap**: `bootstrap/app.php` now uses the new `Application::configure()` builder pattern. Service providers are listed in `bootstrap/providers.php`.

- **Kernels Removed**: `app/Http/Kernel.php` and `app/Console/Kernel.php` are removed. Middleware and scheduling are configured in `bootstrap/app.php` and `routes/console.php` respectively.

- **Exception Handler Removed**: `app/Exceptions/Handler.php` is removed. Exception handling is configured in `bootstrap/app.php`.

- **Middleware Classes Removed**: Built-in middleware wrappers (EncryptCookies, VerifyCsrfToken, TrimStrings, TrustProxies, etc.) are removed. Customizations are now done via `bootstrap/app.php`.

- **Service Providers Simplified**: `AuthServiceProvider`, `EventServiceProvider`, `RouteServiceProvider`, and `BroadcastServiceProvider` are removed. Their logic is handled in `bootstrap/app.php` or `AppServiceProvider`.

- **Config**: `config/app.php` no longer contains `providers` or `aliases` arrays.

- **doctrine/dbal** dependency has been removed (native column modification in Laravel 12).

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

namespace App\Http\Controllers;

abstract class Controller
{
    //
}


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

namespace App\Models;

use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    /** @use HasFactory<UserFactory> */
    use HasFactory, Notifiable;

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

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

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


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

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

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

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        //
    }
}


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

use Symfony\Component\Console\Input\ArgvInput;

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

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

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

exit($status);


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

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
use Webkul\Installer\Http\Middleware\CanInstall;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        channels: __DIR__.'/../routes/channels.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->append(CanInstall::class);

        $middleware->encryptCookies(except: [
            'dark_mode',
        ]);

        $middleware->validateCsrfTokens(except: [
            'admin/mail/inbound-parse',
            'admin/web-forms/forms/*',
        ]);

        $middleware->api(prepend: [
            EnsureFrontendRequestsAreStateful::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();


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


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

use App\Providers\AppServiceProvider;
use Barryvdh\DomPDF\ServiceProvider;
use Konekt\Concord\ConcordServiceProvider;
use Prettus\Repository\Providers\RepositoryServiceProvider;
use Webkul\Activity\Providers\ActivityServiceProvider;
use Webkul\Admin\Providers\AdminServiceProvider;
use Webkul\Attribute\Providers\AttributeServiceProvider;
use Webkul\Automation\Providers\WorkflowServiceProvider;
use Webkul\Contact\Providers\ContactServiceProvider;
use Webkul\Core\Providers\CoreServiceProvider;
use Webkul\DataGrid\Providers\DataGridServiceProvider;
use Webkul\DataTransfer\Providers\DataTransferServiceProvider;
use Webkul\Email\Providers\EmailServiceProvider;
use Webkul\EmailTemplate\Providers\EmailTemplateServiceProvider;
use Webkul\Installer\Providers\InstallerServiceProvider;
use Webkul\Lead\Providers\LeadServiceProvider;
use Webkul\Marketing\Providers\MarketingServiceProvider;
use Webkul\Product\Providers\ProductServiceProvider;
use Webkul\Quote\Providers\QuoteServiceProvider;
use Webkul\Tag\Providers\TagServiceProvider;
use Webkul\User\Providers\UserServiceProvider;
use Webkul\Warehouse\Providers\WarehouseServiceProvider;
use Webkul\WebForm\Providers\WebFormServiceProvider;

return [
    /*
     * Package Service Providers...
     */
    ServiceProvider::class,
    ConcordServiceProvider::class,
    RepositoryServiceProvider::class,

    /*
     * Application Service Providers...
     */
    AppServiceProvider::class,

    /*
     * Webkul Service Providers...
     */
    ActivityServiceProvider::class,
    AdminServiceProvider::class,
    AttributeServiceProvider::class,
    WorkflowServiceProvider::class,
    ContactServiceProvider::class,
    CoreServiceProvider::class,
    DataGridServiceProvider::class,
    DataTransferServiceProvider::class,
    EmailTemplateServiceProvider::class,
    EmailServiceProvider::class,
    MarketingServiceProvider::class,
    InstallerServiceProvider::class,
    LeadServiceProvider::class,
    ProductServiceProvider::class,
    QuoteServiceProvider::class,
    TagServiceProvider::class,
    UserServiceProvider::class,
    WarehouseServiceProvider::class,
    WebFormServiceProvider::class,
];


================================================
FILE: composer.json
================================================
{
    "name": "krayin/laravel-crm",
    "type": "project",
    "description": "Krayin CRM",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^8.3",
        "barryvdh/laravel-dompdf": "^3.1",
        "diglactic/laravel-breadcrumbs": "^10.0",
        "enshrined/svg-sanitize": "^0.22.0",
        "guzzlehttp/guzzle": "^7.8",
        "khaled.alshamaa/ar-php": "^6.3",
        "konekt/concord": "^1.17",
        "laravel/framework": "^12.0",
        "laravel/sanctum": "^4.0",
        "laravel/tinker": "^2.10",
        "laravel/ui": "^4.6",
        "league/fractal": "^0.21.0",
        "maatwebsite/excel": "^3.1",
        "mpdf/mpdf": "^8.2",
        "prettus/l5-repository": "^3.0",
        "smalot/pdfparser": "^2.11",
        "webklex/laravel-imap": "^6.0"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.14",
        "fakerphp/faker": "^1.23",
        "krayin/krayin-package-generator": "dev-master",
        "laravel/pint": "^1.18",
        "laravel/sail": "^1.38",
        "mockery/mockery": "^1.6",
        "nunomaduro/collision": "^8.0",
        "pestphp/pest": "^3.0",
        "pestphp/pest-plugin-laravel": "^3.0",
        "phpunit/phpunit": "^11.0",
        "spatie/laravel-ignition": "^2.8"
    },
    "config": {
        "optimize-autoloader": true,
        "platform": {
            "php": "8.3.30"
        },
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true
        }
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "Webkul\\Activity\\": "packages/Webkul/Activity/src",
            "Webkul\\Admin\\": "packages/Webkul/Admin/src",
            "Webkul\\Attribute\\": "packages/Webkul/Attribute/src",
            "Webkul\\Contact\\": "packages/Webkul/Contact/src",
            "Webkul\\Core\\": "packages/Webkul/Core/src",
            "Webkul\\DataGrid\\": "packages/Webkul/DataGrid/src",
            "Webkul\\DataTransfer\\": "packages/Webkul/DataTransfer/src",
            "Webkul\\Email\\": "packages/Webkul/Email/src",
            "Webkul\\EmailTemplate\\": "packages/Webkul/EmailTemplate/src",
            "Webkul\\Marketing\\": "packages/Webkul/Marketing/src",
            "Webkul\\Installer\\": "packages/Webkul/Installer/src",
            "Webkul\\Lead\\": "packages/Webkul/Lead/src",
            "Webkul\\Product\\": "packages/Webkul/Product/src",
            "Webkul\\Quote\\": "packages/Webkul/Quote/src",
            "Webkul\\Tag\\": "packages/Webkul/Tag/src",
            "Webkul\\User\\": "packages/Webkul/User/src",
            "Webkul\\Warehouse\\": "packages/Webkul/Warehouse/src",
            "Webkul\\WebForm\\": "packages/Webkul/WebForm/src",
            "Webkul\\Automation\\": "packages/Webkul/Automation/src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "repositories": [
        {
            "type": "path",
            "url": "packages/*/*",
            "options": {
                "symlink": true
            }
        }
    ],
    "minimum-stability": "stable",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}


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

return [

    /*
    |--------------------------------------------------------------------------
    | Application Name
    |--------------------------------------------------------------------------
    |
    | This value is the name of your application. This value is used when the
    | framework needs to place the application's name in a notification or
    | any other location as required by the application or its packages.
    |
     */

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

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

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

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

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

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

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

    /*
    |--------------------------------------------------------------------------
    | Application Admin URL
    |--------------------------------------------------------------------------
    |
    | This URL suffix is used to define the admin url for example
    | admin/ or backend/
    |
     */

    'admin_path' => env('APP_ADMIN_PATH', 'admin'),

    'asset_url' => env('ASSET_URL'),

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default timezone for your application, which
    | will be used by the PHP date and date-time functions. We have gone
    | ahead and set this to a sensible default for you out of the box.
    |
     */

    'timezone' => env('APP_TIMEZONE', 'Asia/Kolkata'),

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | The application locale determines the default locale that will be used
    | by the translation service provider. You are free to set this value
    | to any of the locales which will be supported by the application.
    |
     */

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

    /*
    |--------------------------------------------------------------------------
    | Available Locales Configuration
    |--------------------------------------------------------------------------
    |
    | The application available locale determines the supported locales
    | by application
    |
     */

    'available_locales' => [
        'ar' => 'Arabic',
        'en' => 'English',
        'es' => 'Español',
        'fa' => 'Persian',
        'pt_BR' => 'Portuguese',
        'tr' => 'Türkçe',
        'vi' => 'Vietnamese',
    ],

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | The fallback locale determines the locale to use when the current one
    | is not available. You may change the value to correspond to any of
    | the language folders that are provided through your application.
    |
     */

    'fallback_locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Faker Locale
    |--------------------------------------------------------------------------
    |
    | This locale will be used by the Faker PHP library when generating fake
    | data for your database seeds. For example, this will be used to get
    | localized telephone numbers, street address information and more.
    |
     */

    'faker_locale' => 'en_US',

    /*
    |--------------------------------------------------------------------------
    | Base Currency Code
    |--------------------------------------------------------------------------
    |
    | Here you may specify the base currency code for your application.
    |
     */

    'currency' => env('APP_CURRENCY', 'USD'),

    /*
    |--------------------------------------------------------------------------
    | Encryption Key
    |--------------------------------------------------------------------------
    |
    | This key is used by the Illuminate encrypter service and should be set
    | to a random, 32 character string, otherwise these encrypted strings
    | will not be safe. Please do this before deploying an application!
    |
     */

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

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

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

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


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

use Webkul\User\Models\User;

return [

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

    'defaults' => [
        'guard' => 'user',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => User::class,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'user_password_resets',
            'expire' => 60,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */

    'password_timeout' => 10800,

];


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

use Diglactic\Breadcrumbs\Generator;
use Diglactic\Breadcrumbs\Manager;

return [

    /*
    |--------------------------------------------------------------------------
    | View Name
    |--------------------------------------------------------------------------
    |
    | Choose a view to display when Breadcrumbs::render() is called.
    | Built in templates are:
    |
    | - 'breadcrumbs::bootstrap5'  - Bootstrap 5
    | - 'breadcrumbs::bootstrap4'  - Bootstrap 4
    | - 'breadcrumbs::bulma'       - Bulma
    | - 'breadcrumbs::foundation6' - Foundation 6
    | - 'breadcrumbs::json-ld'     - JSON-LD Structured Data
    | - 'breadcrumbs::materialize' - Materialize
    | - 'breadcrumbs::tailwind'    - Tailwind CSS
    | - 'breadcrumbs::uikit'       - UIkit
    |
    | Or a custom view, e.g. '_partials/breadcrumbs'.
    |
    */

    'view' => 'breadcrumbs::bootstrap5',

    /*
    |--------------------------------------------------------------------------
    | Breadcrumbs File(s)
    |--------------------------------------------------------------------------
    |
    | The file(s) where breadcrumbs are defined. e.g.
    |
    | - base_path('routes/breadcrumbs.php')
    | - glob(base_path('breadcrumbs/*.php'))
    |
    */

    'files' => base_path('routes/breadcrumbs.php'),

    /*
    |--------------------------------------------------------------------------
    | Exceptions
    |--------------------------------------------------------------------------
    |
    | Determine when to throw an exception.
    |
    */

    // When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException)
    'unnamed-route-exception' => true,

    // When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException)
    'missing-route-bound-breadcrumb-exception' => true,

    // When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException)
    'invalid-named-breadcrumb-exception' => true,

    /*
    |--------------------------------------------------------------------------
    | Classes
    |--------------------------------------------------------------------------
    |
    | Subclass the default classes for more advanced customisations.
    |
    */

    // Manager
    'manager-class' => Manager::class,

    // Generator
    'generator-class' => Generator::class,

];


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

return [

    /*
    |--------------------------------------------------------------------------
    | Default Broadcaster
    |--------------------------------------------------------------------------
    |
    | This option controls the default broadcaster that will be used by the
    | framework when an event needs to be broadcast. You may set this to
    | any of the connections defined in the "connections" array below.
    |
    | Supported: "pusher", "ably", "redis", "log", "null"
    |
    */

    'default' => env('BROADCAST_DRIVER', 'null'),

    /*
    |--------------------------------------------------------------------------
    | Broadcast Connections
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the broadcast connections that will be used
    | to broadcast events to other systems or over websockets. Samples of
    | each available type of connection are provided inside this array.
    |
    */

    'connections' => [

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'useTLS' => true,
            ],
        ],

        'ably' => [
            'driver' => 'ably',
            'key' => env('ABLY_KEY'),
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],

    ],

];


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

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Cache Store
    |--------------------------------------------------------------------------
    |
    | This option controls the default cache connection that gets used while
    | using this caching library. This connection is used when another is
    | not explicitly specified when executing a given caching function.
    |
    */

    'default' => env('CACHE_DRIVER', 'file'),

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

    'stores' => [

        'apc' => [
            'driver' => 'apc',
        ],

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

        'database' => [
            'driver' => 'database',
            'table' => 'cache',
            'connection' => null,
            'lock_connection' => null,
        ],

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

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

        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache',
            'lock_connection' => 'default',
        ],

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

    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Key Prefix
    |--------------------------------------------------------------------------
    |
    | When utilizing a RAM based store such as APC or Memcached, there might
    | be other applications utilizing the same cache. So, we'll specify a
    | value to get prefixed to all our keys so we can avoid collisions.
    |
    */

    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),

];


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

use Webkul\Activity\Providers\ModuleServiceProvider;

return [
    'modules' => [
        ModuleServiceProvider::class,
        Webkul\Admin\Providers\ModuleServiceProvider::class,
        Webkul\Attribute\Providers\ModuleServiceProvider::class,
        Webkul\Automation\Providers\ModuleServiceProvider::class,
        Webkul\Contact\Providers\ModuleServiceProvider::class,
        Webkul\Core\Providers\ModuleServiceProvider::class,
        Webkul\DataGrid\Providers\ModuleServiceProvider::class,
        Webkul\EmailTemplate\Providers\ModuleServiceProvider::class,
        Webkul\Email\Providers\ModuleServiceProvider::class,
        Webkul\Lead\Providers\ModuleServiceProvider::class,
        Webkul\Product\Providers\ModuleServiceProvider::class,
        Webkul\Quote\Providers\ModuleServiceProvider::class,
        Webkul\Tag\Providers\ModuleServiceProvider::class,
        Webkul\User\Providers\ModuleServiceProvider::class,
        Webkul\Warehouse\Providers\ModuleServiceProvider::class,
        Webkul\WebForm\Providers\ModuleServiceProvider::class,
        Webkul\DataTransfer\Providers\ModuleServiceProvider::class,
    ],

    'register_route_models' => true,
];


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

return [

    /*
    |--------------------------------------------------------------------------
    | Laravel CORS Options
    |--------------------------------------------------------------------------
    |
    | The allowed_methods and allowed_headers options are case-insensitive.
    |
    | You don't need to provide both allowed_origins and allowed_origins_patterns.
    | If one of the strings passed matches, it is considered a valid origin.
    |
    | If ['*'] is provided to allowed_methods, allowed_origins or allowed_headers
    | all methods / origins / headers are allowed.
    |
    */

    /*
     * You can enable CORS for 1 or multiple paths.
     * Example: ['api/*']
     */
    'paths' => [
        'admin/web-forms/forms/*',
    ],

    /*
    * Matches the request method. `['*']` allows all methods.
    */
    'allowed_methods' => ['*'],

    /*
     * Matches the request origin. `['*']` allows all origins. Wildcards can be used, eg `*.mydomain.com`
     */
    'allowed_origins' => ['*'],

    /*
     * Patterns that can be used with `preg_match` to match the origin.
     */
    'allowed_origins_patterns' => [],

    /*
     * Sets the Access-Control-Allow-Headers response header. `['*']` allows all headers.
     */
    'allowed_headers' => ['*'],

    /*
     * Sets the Access-Control-Expose-Headers response header with these headers.
     */
    'exposed_headers' => [],

    /*
     * Sets the Access-Control-Max-Age response header when > 0.
     */
    'max_age' => 0,

    /*
     * Sets the Access-Control-Allow-Credentials header.
     */
    'supports_credentials' => false,
];


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

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => env('DB_PREFIX', ''),
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => env('DB_PREFIX', ''),
            'prefix_indexes' => true,
            'strict' => false,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => env('DB_PREFIX', ''),
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => env('DB_PREFIX', ''),
            'prefix_indexes' => true,
        ],
    ],

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

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer body of commands than a typical key-value system
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

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

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ],

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', '0'),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
        ],

    ],

];


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

return [

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

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

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Here you may configure as many filesystem "disks" as you wish, and you
    | may even configure multiple disks of the same driver. Defaults have
    | been setup for each driver as an example of the required options.
    |
    | Supported Drivers: "local", "ftp", "sftp", "s3"
    |
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

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

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

    ],

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

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

];


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

return [

    /*
    |--------------------------------------------------------------------------
    | Default Hash Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default hash driver that will be used to hash
    | passwords for your application. By default, the bcrypt algorithm is
    | used; however, you remain free to modify this option if you wish.
    |
    | Supported: "bcrypt", "argon", "argon2id"
    |
    */

    'driver' => 'bcrypt',

    /*
    |--------------------------------------------------------------------------
    | Bcrypt Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Bcrypt algorithm. This will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'bcrypt' => [
        'rounds' => env('BCRYPT_ROUNDS', 10),
    ],

    /*
    |--------------------------------------------------------------------------
    | Argon Options
    |--------------------------------------------------------------------------
    |
    | Here you may specify the configuration options that should be used when
    | passwords are hashed using the Argon algorithm. These will allow you
    | to control the amount of time it takes to hash the given password.
    |
    */

    'argon' => [
        'memory' => 1024,
        'threads' => 2,
        'time' => 2,
    ],

];


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

use Webklex\IMAP\Events\FlagDeletedEvent;
use Webklex\IMAP\Events\FlagNewEvent;
use Webklex\IMAP\Events\FolderDeletedEvent;
use Webklex\IMAP\Events\FolderMovedEvent;
use Webklex\IMAP\Events\FolderNewEvent;
use Webklex\IMAP\Events\MessageCopiedEvent;
use Webklex\IMAP\Events\MessageDeletedEvent;
use Webklex\IMAP\Events\MessageMovedEvent;
use Webklex\IMAP\Events\MessageNewEvent;
use Webklex\IMAP\Events\MessageRestoredEvent;
use Webklex\PHPIMAP\IMAP;
use Webklex\PHPIMAP\Support\Masks\AttachmentMask;
use Webklex\PHPIMAP\Support\Masks\MessageMask;

return [

    /*
    |--------------------------------------------------------------------------
    | IMAP default account
    |--------------------------------------------------------------------------
    |
    | The default account identifier. It will be used as default for any missing account parameters.
    | If however the default account is missing a parameter the package default will be used.
    | Set to 'false' [boolean] to disable this functionality.
    |
    */
    'default' => env('IMAP_DEFAULT_ACCOUNT', 'default'),

    /*
    |--------------------------------------------------------------------------
    | Default date format
    |--------------------------------------------------------------------------
    |
    | The default date format is used to convert any given Carbon::class object into a valid date string.
    | These are currently known working formats: "d-M-Y", "d-M-y", "d M y"
    |
    */
    'date_format' => 'd-M-Y',

    /*
    |--------------------------------------------------------------------------
    | Available IMAP accounts
    |--------------------------------------------------------------------------
    |
    | Please list all IMAP accounts which you are planning to use within the
    | array below.
    |
    */
    'accounts' => [
        'default' => [
            'host' => env('IMAP_HOST', 'localhost'),
            'port' => env('IMAP_PORT', 993),
            'protocol' => env('IMAP_PROTOCOL', 'imap'), // might also use imap, [pop3 or nntp (untested)]
            'encryption' => env('IMAP_ENCRYPTION', 'ssl'), // Supported: false, 'ssl', 'tls', 'notls', 'starttls'
            'validate_cert' => env('IMAP_VALIDATE_CERT', true),
            'username' => env('IMAP_USERNAME', 'root@example.com'),
            'password' => env('IMAP_PASSWORD', ''),
            'authentication' => env('IMAP_AUTHENTICATION', null),
            'proxy' => [
                'socket' => null,
                'request_fulluri' => false,
                'username' => null,
                'password' => null,
            ],
            'timeout' => 30,
            'extensions' => [],
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Available IMAP options
    |--------------------------------------------------------------------------
    |
    | Available php imap config parameters are listed below
    |   -Delimiter (optional):
    |       This option is only used when calling $oClient->
    |       You can use any supported char such as ".", "/", (...)
    |   -Fetch option:
    |       IMAP::FT_UID  - Message marked as read by fetching the body message
    |       IMAP::FT_PEEK - Fetch the message without setting the "seen" flag
    |   -Fetch sequence id:
    |       IMAP::ST_UID  - Fetch message components using the message uid
    |       IMAP::ST_MSGN - Fetch message components using the message number
    |   -Body download option
    |       Default TRUE
    |   -Flag download option
    |       Default TRUE
    |   -Soft fail
    |       Default FALSE - Set to TRUE if you want to ignore certain exception while fetching bulk messages
    |   -RFC822
    |       Default TRUE - Set to FALSE to prevent the usage of \imap_rfc822_parse_headers().
    |                      See https://github.com/Webklex/php-imap/issues/115 for more information.
    |   -Debug enable to trace communication traffic
    |   -UID cache enable the UID cache
    |   -Fallback date is used if the given message date could not be parsed
    |   -Boundary regex used to detect message boundaries. If you are having problems with empty messages, missing
    |       attachments or anything like this. Be advised that it likes to break which causes new problems..
    |   -Message key identifier option
    |       You can choose between the following:
    |       'id'     - Use the MessageID as array key (default, might cause hickups with yahoo mail)
    |       'number' - Use the message number as array key (isn't always unique and can cause some interesting behavior)
    |       'list'   - Use the message list number as array key (incrementing integer (does not always start at 0 or 1)
    |       'uid'    - Use the message uid as array key (isn't always unique and can cause some interesting behavior)
    |   -Fetch order
    |       'asc'  - Order all messages ascending (probably results in oldest first)
    |       'desc' - Order all messages descending (probably results in newest first)
    |   -Disposition types potentially considered an attachment
    |       Default ['attachment', 'inline']
    |   -Common folders
    |       Default folder locations and paths assumed if none is provided
    |   -Open IMAP options:
    |       DISABLE_AUTHENTICATOR - Disable authentication properties.
    |                               Use 'GSSAPI' if you encounter the following
    |                               error: "Kerberos error: No credentials cache
    |                               file found (try running kinit) (...)"
    |                               or ['GSSAPI','PLAIN'] if you are using outlook mail
    |   -Decoder options (currently only the message subject and attachment name decoder can be set)
    |       'utf-8' - Uses imap_utf8($string) to decode a string
    |       'mimeheader' - Uses mb_decode_mimeheader($string) to decode a string
    |
    */
    'options' => [
        'delimiter' => '/',
        'fetch' => IMAP::FT_PEEK,
        'sequence' => IMAP::ST_UID,
        'fetch_body' => true,
        'fetch_flags' => true,
        'soft_fail' => false,
        'rfc822' => true,
        'debug' => false,
        'uid_cache' => true,
        // 'fallback_date' => "01.01.1970 00:00:00",
        'boundary' => '/boundary=(.*?(?=;)|(.*))/i',
        'message_key' => 'list',
        'fetch_order' => 'asc',
        'dispositions' => ['attachment', 'inline'],
        'common_folders' => [
            'root' => 'INBOX',
            'junk' => 'INBOX/Junk',
            'draft' => 'INBOX/Drafts',
            'sent' => 'INBOX/Sent',
            'trash' => 'INBOX/Trash',
        ],
        'decoder' => [
            'message' => 'utf-8', // mimeheader
            'attachment' => 'utf-8', // mimeheader
        ],
        'open' => [
            // 'DISABLE_AUTHENTICATOR' => 'GSSAPI'
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Available flags
    |--------------------------------------------------------------------------
    |
    | List all available / supported flags. Set to null to accept all given flags.
     */
    'flags' => ['recent', 'flagged', 'answered', 'deleted', 'seen', 'draft'],

    /*
    |--------------------------------------------------------------------------
    | Available events
    |--------------------------------------------------------------------------
    |
    */
    'events' => [
        'message' => [
            'new' => MessageNewEvent::class,
            'moved' => MessageMovedEvent::class,
            'copied' => MessageCopiedEvent::class,
            'deleted' => MessageDeletedEvent::class,
            'restored' => MessageRestoredEvent::class,
        ],
        'folder' => [
            'new' => FolderNewEvent::class,
            'moved' => FolderMovedEvent::class,
            'deleted' => FolderDeletedEvent::class,
        ],
        'flag' => [
            'new' => FlagNewEvent::class,
            'deleted' => FlagDeletedEvent::class,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Available masking options
    |--------------------------------------------------------------------------
    |
    | By using your own custom masks you can implement your own methods for
    | a better and faster access and less code to write.
    |
    | Checkout the two examples custom_attachment_mask and custom_message_mask
    | for a quick start.
    |
    | The provided masks below are used as the default masks.
    */
    'masks' => [
        'message' => MessageMask::class,
        'attachment' => AttachmentMask::class,
    ],
];


================================================
FILE: config/krayin-vite.php
================================================
<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Krayin Vite Configuration
    |--------------------------------------------------------------------------
    |
    | Please add your Vite registry here to seamlessly support the `assets` function.
    |
    */

    'viters' => [
        'admin' => [
            'hot_file' => 'admin-vite.hot',
            'build_directory' => 'admin/build',
            'package_assets_directory' => 'src/Resources/assets',
        ],

        'installer' => [
            'hot_file' => 'installer-vite.hot',
            'build_directory' => 'installer/build',
            'package_assets_directory' => 'src/Resources/assets',
        ],

        'webform' => [
            'hot_file' => 'webform-vite.hot',
            'build_directory' => 'webform/build',
            'package_assets_directory' => 'src/Resources/assets',
        ],
    ],
];


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

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

return [

    /*
    |--------------------------------------------------------------------------
    | Default Log Channel
    |--------------------------------------------------------------------------
    |
    | This option defines the default log channel that gets used when writing
    | messages to the logs. The name specified in this option should match
    | one of the channels defined in the "channels" configuration array.
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | Log Channels
    |--------------------------------------------------------------------------
    |
    | Here you may configure the log channels for your application. Out of
    | the box, Laravel uses the Monolog PHP logging library. This gives
    | you a variety of powerful log handlers / formatters to utilize.
    |
    | Available Drivers: "single", "daily", "slack", "syslog",
    |                    "errorlog", "monolog",
    |                    "custom", "stack"
    |
    */

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
            'ignore_exceptions' => false,
        ],

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

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

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

        'papertrail' => [
            'driver' => 'monolog',
            'level' => env('LOG_LEVEL', 'debug'),
            'handler' => SyslogUdpHandler::class,
            'handler_with' => [
                'host' => env('PAPERTRAIL_URL'),
                'port' => env('PAPERTRAIL_PORT'),
            ],
        ],

        'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'formatter' => env('LOG_STDERR_FORMATTER'),
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => env('LOG_LEVEL', 'debug'),
        ],

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

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

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

];


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

return [
    /*
    |--------------------------------------------------------------------------
    | Default Mail Receiver
    |--------------------------------------------------------------------------
    |
    | This option controls the default mail receiver that is used to receive any email
    | messages sent by third party application.
    |
    | Supported: "webklex-imap", "sendgrid"
    |
    */

    'default' => env('MAIL_RECEIVER_DRIVER', 'sendgrid'),
];


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

return [

    /*
    |--------------------------------------------------------------------------
    | Default Mailer
    |--------------------------------------------------------------------------
    |
    | This option controls the default mailer that is used to send any email
    | messages sent by your application. Alternative mailers may be setup
    | and used as needed; however, this mailer will be used by default.
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | Mailer Configurations
    |--------------------------------------------------------------------------
    |
    | Here you may configure all of the mailers used by your application plus
    | their respective settings. Several examples have been configured for
    | you and you are free to add your own as your application requires.
    |
    | Laravel supports a variety of mail "transport" drivers to be used while
    | sending an e-mail. You will specify which one you are using for your
    | mailers below. You are free to add additional mailers as required.
    |
    | Supported: "smtp", "sendmail", "mailgun", "ses",
    |            "postmark", "log", "array", "failover"
    |
    */

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'verify_peer' => false,
        ],

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

        'mailgun' => [
            'transport' => 'mailgun',
        ],

        'postmark' => [
            'transport' => 'postmark',
        ],

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

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

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

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

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

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS'),
        'name' => env('MAIL_FROM_NAME'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Default Mailer Domain
    |--------------------------------------------------------------------------
    |
    | This option controls the domain for email message_id that is used to send email
    | messages sent by your application.
    |
    */

    'domain' => env('MAIL_DOMAIN', 'webkul.com'),

    /*
    |--------------------------------------------------------------------------
    | Markdown Mail Settings
    |--------------------------------------------------------------------------
    |
    | If you are using Markdown based email rendering, you may configure your
    | theme and component paths here, allowing you to customize the design
    | of the emails. Or, you may simply stick with the Laravel defaults!
    |
    */

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];


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

return [

    /*
    |--------------------------------------------------------------------------
    | Default Queue Connection Name
    |--------------------------------------------------------------------------
    |
    | Laravel's queue API supports an assortment of back-ends via a single
    | API, giving you convenient access to each back-end using the same
    | syntax for every one. Here you may define a default connection.
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | Queue Connections
    |--------------------------------------------------------------------------
    |
    | Here you may configure the connection information for each server that
    | is used by your application. A default configuration has been added
    | for each back-end shipped with Laravel. You are free to add more.
    |
    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
    |
    */

    'connections' => [

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

        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],

        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => 'localhost',
            'queue' => 'default',
            'retry_after' => 90,
            'block_for' => 0,
        ],

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

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Failed Queue Jobs
    |--------------------------------------------------------------------------
    |
    | These options configure the behavior of failed queue job logging so you
    | can control which database and table are used to store the jobs that
    | have failed. You may change them to any database / table you wish.
    |
    */

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

];


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

use League\Fractal\Serializer\DataArraySerializer;

/*
|--------------------------------------------------------------------------
| Prettus Repository Config
|--------------------------------------------------------------------------
|
|
*/
return [

    /*
    |--------------------------------------------------------------------------
    | Repository Pagination Limit Default
    |--------------------------------------------------------------------------
    |
    */
    'pagination' => [
        'limit' => 15,
    ],

    /*
    |--------------------------------------------------------------------------
    | Fractal Presenter Config
    |--------------------------------------------------------------------------
    |

    Available serializers:
    ArraySerializer
    DataArraySerializer
    JsonApiSerializer

    */
    'fractal' => [
        'params' => [
            'include' => 'include',
        ],
        'serializer' => DataArraySerializer::class,
    ],

    /*
    |--------------------------------------------------------------------------
    | Cache Config
    |--------------------------------------------------------------------------
    |
    */
    'cache' => [
        /*
         |--------------------------------------------------------------------------
         | Cache Status
         |--------------------------------------------------------------------------
         |
         | Enable or disable cache
         |
         */
        'enabled' => false,

        /*
         |--------------------------------------------------------------------------
         | Cache Minutes
         |--------------------------------------------------------------------------
         |
         | Time of expiration cache
         |
         */
        'minutes' => 30,

        /*
         |--------------------------------------------------------------------------
         | Cache Repository
         |--------------------------------------------------------------------------
         |
         | Instance of Illuminate\Contracts\Cache\Repository
         |
         */
        'repository' => 'cache',

        /*
          |--------------------------------------------------------------------------
          | Cache Clean Listener
          |--------------------------------------------------------------------------
          |
          |
          |
          */
        'clean' => [

            /*
              |--------------------------------------------------------------------------
              | Enable clear cache on repository changes
              |--------------------------------------------------------------------------
              |
              */
            'enabled' => true,

            /*
              |--------------------------------------------------------------------------
              | Actions in Repository
              |--------------------------------------------------------------------------
              |
              | create : Clear Cache on create Entry in repository
              | update : Clear Cache on update Entry in repository
              | delete : Clear Cache on delete Entry in repository
              |
              */
            'on' => [
                'create' => true,
                'update' => true,
                'delete' => true,
            ],
        ],

        'params' => [
            /*
            |--------------------------------------------------------------------------
            | Skip Cache Params
            |--------------------------------------------------------------------------
            |
            |
            | Ex: http://prettus.local/?search=lorem&skipCache=true
            |
            */
            'skipCache' => 'skipCache',
        ],

        /*
       |--------------------------------------------------------------------------
       | Methods Allowed
       |--------------------------------------------------------------------------
       |
       | methods cacheable : all, paginate, find, findByField, findWhere, getByCriteria
       |
       | Ex:
       |
       | 'only' =>['all','paginate'],
       |
       | or
       |
       | 'except' =>['find'],
       */
        'allowed' => [
            'only' => null,
            'except' => null,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Criteria Config
    |--------------------------------------------------------------------------
    |
    | Settings of request parameters names that will be used by Criteria
    |
    */
    'criteria' => [
        /*
        |--------------------------------------------------------------------------
        | Accepted Conditions
        |--------------------------------------------------------------------------
        |
        | Conditions accepted in consultations where the Criteria
        |
        | Ex:
        |
        | 'acceptedConditions'=>['=','like']
        |
        | $query->where('foo','=','bar')
        | $query->where('foo','like','bar')
        |
        */
        'acceptedConditions' => [
            '=',
            'like',
            'in',
        ],
        /*
        |--------------------------------------------------------------------------
        | Request Params
        |--------------------------------------------------------------------------
        |
        | Request parameters that will be used to filter the query in the repository
        |
        | Params :
        |
        | - search : Searched value
        |   Ex: http://prettus.local/?search=lorem
        |
        | - searchFields : Fields in which research should be carried out
        |   Ex:
        |    http://prettus.local/?search=lorem&searchFields=name;email
        |    http://prettus.local/?search=lorem&searchFields=name:like;email
        |    http://prettus.local/?search=lorem&searchFields=name:like
        |
        | - filter : Fields that must be returned to the response object
        |   Ex:
        |   http://prettus.local/?search=lorem&filter=id,name
        |
        | - orderBy : Order By
        |   Ex:
        |   http://prettus.local/?search=lorem&orderBy=id
        |
        | - sortedBy : Sort
        |   Ex:
        |   http://prettus.local/?search=lorem&orderBy=id&sortedBy=asc
        |   http://prettus.local/?search=lorem&orderBy=id&sortedBy=desc
        |
        | - searchJoin: Specifies the search method (AND / OR), by default the
        |               application searches each parameter with OR
        |   EX:
        |   http://prettus.local/?search=lorem&searchJoin=and
        |   http://prettus.local/?search=lorem&searchJoin=or
        |
        */
        'params' => [
            'search' => 'search',
            'searchFields' => 'searchFields',
            'filter' => 'filter',
            'orderBy' => 'orderBy',
            'sortedBy' => 'sortedBy',
            'with' => 'with',
            'searchJoin' => 'searchJoin',
            'withCount' => 'withCount',
        ],
    ],
    /*
    |--------------------------------------------------------------------------
    | Generator Config
    |--------------------------------------------------------------------------
    |
    */
    'generator' => [
        'basePath' => app()->path(),
        'rootNamespace' => 'App\\',
        'stubsOverridePath' => app()->path(),
        'paths' => [
            'models' => 'Entities',
            'repositories' => 'Repositories',
            'interfaces' => 'Repositories',
            'transformers' => 'Transformers',
            'presenters' => 'Presenters',
            'validators' => 'Validators',
            'controllers' => 'Http/Controllers',
            'provider' => 'RepositoryServiceProvider',
            'criteria' => 'Criteria',
        ],
    ],
];


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

use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;

return [

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

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
    ))),

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

    'guard' => ['user'],

    /*
    |--------------------------------------------------------------------------
    | Expiration Minutes
    |--------------------------------------------------------------------------
    |
    | This value controls the number of minutes until an issued token will be
    | considered expired. If this value is null, personal access tokens do
    | not expire. This won't tweak the lifetime of first-party sessions.
    |
    */

    'expiration' => null,

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

    'middleware' => [
        'verify_csrf_token' => VerifyCsrfToken::class,
        'encrypt_cookies' => EncryptCookies::class,
    ],

];


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

return [

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

    'mailgun' => [
        'domain' => env('MAILGUN_DOMAIN'),
        'secret' => env('MAILGUN_SECRET'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
    ],

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

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

];


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

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default session "driver" that will be used on
    | requests. By default, we will use the lightweight native driver but
    | you may specify any of the other wonderful drivers provided here.
    |
    | Supported: "file", "cookie", "database", "apc",
    |            "memcached", "redis", "dynamodb", "array"
    |
    */

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

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to immediately expire on the browser closing, set that option.
    |
    */

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

    'expire_on_close' => false,

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

    'encrypt' => false,

    /*
    |--------------------------------------------------------------------------
    | Session File Location
    |--------------------------------------------------------------------------
    |
    | When using the native session driver, we need a location where session
    | files may be stored. A default has been set for you but a different
    | location may be specified. This is only needed for file sessions.
    |
    */

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

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

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

    /*
    |--------------------------------------------------------------------------
    | Session Database Table
    |--------------------------------------------------------------------------
    |
    | When using the "database" session driver, you may specify the table we
    | should use to manage the sessions. Of course, a sensible default is
    | provided for you; however, you are free to change this as needed.
    |
    */

    'table' => 'sessions',

    /*
    |--------------------------------------------------------------------------
    | Session Cache Store
    |--------------------------------------------------------------------------
    |
    | While using one of the framework's cache driven session backends you may
    | list a cache store that should be used for these sessions. This value
    | must match with one of the application's configured cache "stores".
    |
    | Affects: "apc", "dynamodb", "memcached", "redis"
    |
    */

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

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

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Name
    |--------------------------------------------------------------------------
    |
    | Here you may change the name of the cookie used to identify a session
    | instance by ID. The name specified here will get used every time a
    | new session cookie is created by the framework for every driver.
    |
    */

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),

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

    'path' => '/',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Domain
    |--------------------------------------------------------------------------
    |
    | Here you may change the domain of the cookie used to identify a session
    | in your application. This will determine which domains the cookie is
    | available to in your application. A sensible default has been set.
    |
    */

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

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

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

    /*
    |--------------------------------------------------------------------------
    | HTTP Access Only
    |--------------------------------------------------------------------------
    |
    | Setting this value to true will prevent JavaScript from accessing the
    | value of the cookie and the cookie will only be accessible through
    | the HTTP protocol. You are free to modify this option if needed.
    |
    */

    'http_only' => true,

    /*
    |--------------------------------------------------------------------------
    | Same-Site Cookies
    |--------------------------------------------------------------------------
    |
    | This option determines how your cookies behave when cross-site requests
    | take place, and can be used to mitigate CSRF attacks. By default, we
    | will set this value to "lax" since this is a secure default value.
    |
    | Supported: "lax", "strict", "none", null
    |
    */

    'same_site' => 'lax',

];


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

return [

    /*
    |--------------------------------------------------------------------------
    | Console Commands
    |--------------------------------------------------------------------------
    |
    | This option allows you to add additional Artisan commands that should
    | be available within the Tinker environment. Once the command is in
    | this array you may execute the command in Tinker using its name.
    |
    */

    'commands' => [
        // App\Console\Commands\ExampleCommand::class,
    ],

    /*
    |--------------------------------------------------------------------------
    | Auto Aliased Classes
    |--------------------------------------------------------------------------
    |
    | Tinker will not automatically alias classes in your vendor namespaces
    | but you may explicitly allow a subset of classes to get aliased by
    | adding the names of each of those classes to the following list.
    |
    */

    'alias' => [
        //
    ],

    /*
    |--------------------------------------------------------------------------
    | Classes That Should Not Be Aliased
    |--------------------------------------------------------------------------
    |
    | Typically, Tinker automatically aliases classes as you require them in
    | Tinker. However, you may wish to never alias certain classes, which
    | you may accomplish by listing the classes in the following array.
    |
    */

    'dont_alias' => [
        'App\Nova',
    ],

];


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

return [

    /*
    |--------------------------------------------------------------------------
    | View Storage Paths
    |--------------------------------------------------------------------------
    |
    | Most templating systems load templates from disk. Here you may specify
    | an array of paths that should be checked for your views. Of course
    | the usual Laravel view path has already been registered for you.
    |
    */

    'paths' => [
        resource_path('views'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Compiled View Path
    |--------------------------------------------------------------------------
    |
    | This option determines where all the compiled Blade templates will be
    | stored for your application. Typically, this is within the storage
    | directory. However, as usual, you are free to change this value.
    |
    */

    'compiled' => env(
        'VIEW_COMPILED_PATH',
        realpath(storage_path('framework/views'))
    ),

];


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


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

namespace Database\Factories;

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

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }

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


================================================
FILE: database/migrations/2019_08_19_000000_create_failed_jobs_table.php
================================================
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('failed_jobs', function (Blueprint $table) {
            $table->id();
            $table->string('uuid')->unique();
            $table->text('connection');
            $table->text('queue');
            $table->longText('payload');
            $table->longText('exception');
            $table->timestamp('failed_at')->useCurrent();
        });
    }

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


================================================
FILE: database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php
================================================
<?php

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

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

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


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

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('job_batches', function (Blueprint $table) {
            $table->string('id')->primary();
            $table->string('name');
            $table->integer('total_jobs');
            $table->integer('pending_jobs');
            $table->integer('failed_jobs');
            $table->text('failed_job_ids');
            $table->mediumText('options')->nullable();
            $table->integer('cancelled_at')->nullable();
            $table->integer('created_at');
            $table->integer('finished_at')->nullable();
        });
    }

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


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

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

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

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


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

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Webkul\Installer\Database\Seeders\DatabaseSeeder as KrayinDatabaseSeeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(KrayinDatabaseSeeder::class);
    }
}


================================================
FILE: lang/en/auth.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */

    'failed' => 'These credentials do not match our records.',
    'password' => 'The provided password is incorrect.',
    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',

];


================================================
FILE: lang/en/pagination.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Pagination Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used by the paginator library to build
    | the simple pagination links. You are free to change them to anything
    | you want to customize your views to better match your application.
    |
    */

    'previous' => '&laquo; Previous',
    'next' => 'Next &raquo;',

];


================================================
FILE: lang/en/passwords.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Password Reset Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are the default lines which match reasons
    | that are given by the password broker for a password update attempt
    | has failed, such as for an invalid token or invalid new password.
    |
    */

    'reset' => 'Your password has been reset!',
    'sent' => 'We have emailed your password reset link!',
    'throttled' => 'Please wait before retrying.',
    'token' => 'This password reset token is invalid.',
    'user' => "We can't find a user with that email address.",

];


================================================
FILE: lang/en/validation.php
================================================
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Validation Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines contain the default error messages used by
    | the validator class. Some of these rules have multiple versions such
    | as the size rules. Feel free to tweak each of these messages here.
    |
    */

    'accepted' => 'The :attribute must be accepted.',
    'active_url' => 'The :attribute is not a valid URL.',
    'after' => 'The :attribute must be a date after :date.',
    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
    'alpha' => 'The :attribute may only contain letters.',
    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
    'alpha_num' => 'The :attribute may only contain letters and numbers.',
    'array' => 'The :attribute must be an array.',
    'before' => 'The :attribute must be a date before :date.',
    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
    'between' => [
        'numeric' => 'The :attribute must be between :min and :max.',
        'file' => 'The :attribute must be between :min and :max kilobytes.',
        'string' => 'The :attribute must be between :min and :max characters.',
        'array' => 'The :attribute must have between :min and :max items.',
    ],
    'boolean' => 'The :attribute field must be true or false.',
    'confirmed' => 'The :attribute confirmation does not match.',
    'date' => 'The :attribute is not a valid date.',
    'date_equals' => 'The :attribute must be a date equal to :date.',
    'date_format' => 'The :attribute does not match the format :format.',
    'different' => 'The :attribute and :other must be different.',
    'digits' => 'The :attribute must be :digits digits.',
    'digits_between' => 'The :attribute must be between :min and :max digits.',
    'dimensions' => 'The :attribute has invalid image dimensions.',
    'distinct' => 'The :attribute field has a duplicate value.',
    'email' => 'The :attribute must be a valid email address.',
    'ends_with' => 'The :attribute must end with one of the following: :values.',
    'exists' => 'The selected :attribute is invalid.',
    'file' => 'The :attribute must be a file.',
    'filled' => 'The :attribute field must have a value.',
    'gt' => [
        'numeric' => 'The :attribute must be greater than :value.',
        'file' => 'The :attribute must be greater than :value kilobytes.',
        'string' => 'The :attribute must be greater than :value characters.',
        'array' => 'The :attribute must have more than :value items.',
    ],
    'gte' => [
        'numeric' => 'The :attribute must be greater than or equal :value.',
        'file' => 'The :attribute must be greater than or equal :value kilobytes.',
        'string' => 'The :attribute must be greater than or equal :value characters.',
        'array' => 'The :attribute must have :value items or more.',
    ],
    'image' => 'The :attribute must be an image.',
    'in' => 'The selected :attribute is invalid.',
    'in_array' => 'The :attribute field does not exist in :other.',
    'integer' => 'The :attribute must be an integer.',
    'ip' => 'The :attribute must be a valid IP address.',
    'ipv4' => 'The :attribute must be a valid IPv4 address.',
    'ipv6' => 'The :attribute must be a valid IPv6 address.',
    'json' => 'The :attribute must be a valid JSON string.',
    'lt' => [
        'numeric' => 'The :attribute must be less than :value.',
        'file' => 'The :attribute must be less than :value kilobytes.',
        'string' => 'The :attribute must be less than :value characters.',
        'array' => 'The :attribute must have less than :value items.',
    ],
    'lte' => [
        'numeric' => 'The :attribute must be less than or equal :value.',
        'file' => 'The :attribute must be less than or equal :value kilobytes.',
        'string' => 'The :attribute must be less than or equal :value characters.',
        'array' => 'The :attribute must not have more than :value items.',
    ],
    'max' => [
        'numeric' => 'The :attribute may not be greater than :max.',
        'file' => 'The :attribute may not be greater than :max kilobytes.',
        'string' => 'The :attribute may not be greater than :max characters.',
        'array' => 'The :attribute may not have more than :max items.',
    ],
    'mimes' => 'The :attribute must be a file of type: :values.',
    'mimetypes' => 'The :attribute must be a file of type: :values.',
    'min' => [
        'numeric' => 'The :attribute must be at least :min.',
        'file' => 'The :attribute must be at least :min kilobytes.',
        'string' => 'The :attribute must be at least :min characters.',
        'array' => 'The :attribute must have at least :min items.',
    ],
    'multiple_of' => 'The :attribute must be a multiple of :value.',
    'not_in' => 'The selected :attribute is invalid.',
    'not_regex' => 'The :attribute format is invalid.',
    'numeric' => 'The :attribute must be a number.',
    'password' => 'The password is incorrect.',
    'present' => 'The :attribute field must be present.',
    'regex' => 'The :attribute format is invalid.',
    'required' => 'The :attribute field is required.',
    'required_if' => 'The :attribute field is required when :other is :value.',
    'required_unless' => 'The :attribute field is required unless :other is in :values.',
    'required_with' => 'The :attribute field is required when :values is present.',
    'required_with_all' => 'The :attribute field is required when :values are present.',
    'required_without' => 'The :attribute field is required when :values is not present.',
    'required_without_all' => 'The :attribute field is required when none of :values are present.',
    'same' => 'The :attribute and :other must match.',
    'size' => [
        'numeric' => 'The :attribute must be :size.',
        'file' => 'The :attribute must be :size kilobytes.',
        'string' => 'The :attribute must be :size characters.',
        'array' => 'The :attribute must contain :size items.',
    ],
    'starts_with' => 'The :attribute must start with one of the following: :values.',
    'string' => 'The :attribute must be a string.',
    'timezone' => 'The :attribute must be a valid zone.',
    'unique' => 'The :attribute has already been taken.',
    'uploaded' => 'The :attribute failed to upload.',
    'url' => 'The :attribute format is invalid.',
    'uuid' => 'The :attribute must be a valid UUID.',

    /*
    |--------------------------------------------------------------------------
    | Custom Validation Language Lines
    |--------------------------------------------------------------------------
    |
    | Here you may specify custom validation messages for attributes using the
    | convention "attribute.rule" to name the lines. This makes it quick to
    | specify a specific custom language line for a given attribute rule.
    |
    */

    'custom' => [
        'attribute-name' => [
            'rule-name' => 'custom-message',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Custom Validation Attributes
    |--------------------------------------------------------------------------
    |
    | The following language lines are used to swap our attribute placeholder
    | with something more reader friendly such as "E-Mail Address" instead
    | of "email". This simply helps us make our message more expressive.
    |
    */

    'attributes' => [],

];


================================================
FILE: package.json
================================================
{
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build"
  },
  "devDependencies": {
    "axios": "^1.6.4",
    "laravel-vite-plugin": "^1.0.0",
    "vite": "^5.0.0"
  }
}


================================================
FILE: packages/Webkul/Activity/composer.json
================================================
{
    "name": "krayin/laravel-activity",
    "license": "MIT",
    "authors": [
        {
            "name": "Jitendra Singh",
            "email": "jitendra@webkul.com"
        }
    ],
    "require": {
        "krayin/laravel-core": "^1.0",
        "krayin/laravel-user": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "Webkul\\Activity\\": "src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Webkul\\Activity\\Providers\\ActivityServiceProvider"
            ],
            "aliases": {}
        }
    },
    "minimum-stability": "dev"
}

================================================
FILE: packages/Webkul/Activity/src/Contracts/Activity.php
================================================
<?php

namespace Webkul\Activity\Contracts;

interface Activity {}


================================================
FILE: packages/Webkul/Activity/src/Contracts/File.php
================================================
<?php

namespace Webkul\Activity\Contracts;

interface File {}


================================================
FILE: packages/Webkul/Activity/src/Contracts/Participant.php
================================================
<?php

namespace Webkul\Activity\Contracts;

interface Participant {}


================================================
FILE: packages/Webkul/Activity/src/Database/Migrations/2021_05_12_150329_create_activities_table.php
================================================
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('activities', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title')->nullable();
            $table->string('type');
            $table->text('comment')->nullable();
            $table->json('additional')->nullable();
            $table->datetime('schedule_from')->nullable();
            $table->datetime('schedule_to')->nullable();
            $table->boolean('is_done')->default(0);

            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->timestamps();
        });
    }

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


================================================
FILE: packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php
================================================
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('activity_files', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('path');

            $table->integer('activity_id')->unsigned();
            $table->foreign('activity_id')->references('id')->on('activities')->onDelete('cascade');

            $table->timestamps();
        });
    }

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


================================================
FILE: packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php
================================================
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('activity_participants', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('activity_id')->unsigned();
            $table->foreign('activity_id')->references('id')->on('activities')->onDelete('cascade');

            $table->integer('user_id')->nullable()->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            $table->integer('person_id')->nullable()->unsigned();
            $table->foreign('person_id')->references('id')->on('persons')->onDelete('cascade');
        });
    }

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


================================================
FILE: packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php
================================================
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('activities', function (Blueprint $table) {
            $table->string('location')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('activities', function (Blueprint $table) {
            $table->dropColumn('location');
        });
    }
};


================================================
FILE: packages/Webkul/Activity/src/Database/Migrations/2025_01_17_151632_alter_activities_table.php
================================================
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('activities', function (Blueprint $table) {
            $table->dropForeign(['user_id']);

            $table->unsignedInteger('user_id')->nullable()->change();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('activities', function (Blueprint $table) {
            $tablePrefix = DB::getTablePrefix();

            // Disable foreign key checks temporarily.
            DB::statement('SET FOREIGN_KEY_CHECKS=0');

            // Drop the foreign key constraint using raw SQL.
            DB::statement('ALTER TABLE '.$tablePrefix.'activities DROP FOREIGN KEY activities_user_id_foreign');

            // Drop the index.
            DB::statement('ALTER TABLE '.$tablePrefix.'activities DROP INDEX activities_user_id_foreign');

            // Change the column to be non-nullable.
            $table->unsignedInteger('user_id')->nullable(false)->change();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

            // Re-enable foreign key checks.
            DB::statement('SET FOREIGN_KEY_CHECKS=1');
        });
    }
};


================================================
FILE: packages/Webkul/Activity/src/Models/Activity.php
================================================
<?php

namespace Webkul\Activity\Models;

use Illuminate\Database\Eloquent\Model;
use Webkul\Activity\Contracts\Activity as ActivityContract;
use Webkul\Contact\Models\PersonProxy;
use Webkul\Lead\Models\LeadProxy;
use Webkul\Product\Models\ProductProxy;
use Webkul\User\Models\UserProxy;
use Webkul\Warehouse\Models\WarehouseProxy;

class Activity extends Model implements ActivityContract
{
    /**
     * Define table name of property
     *
     * @var string
     */
    protected $table = 'activities';

    /**
     * Define relationships that should be touched on save
     *
     * @var array
     */
    protected $with = ['user'];

    /**
     * Cast attributes to date time
     *
     * @var array
     */
    protected $casts = [
        'schedule_from' => 'datetime',
        'schedule_to' => 'datetime',
    ];

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'title',
        'type',
        'location',
        'comment',
        'additional',
        'schedule_from',
        'schedule_to',
        'is_done',
        'user_id',
    ];

    /**
     * Get the user that owns the activity.
     */
    public function user()
    {
        return $this->belongsTo(UserProxy::modelClass());
    }

    /**
     * The participants that belong to the activity.
     */
    public function participants()
    {
        return $this->hasMany(ParticipantProxy::modelClass());
    }

    /**
     * Get the file associated with the activity.
     */
    public function files()
    {
        return $this->hasMany(FileProxy::modelClass(), 'activity_id');
    }

    /**
     * The leads that belong to the activity.
     */
    public function leads()
    {
        return $this->belongsToMany(LeadProxy::modelClass(), 'lead_activities');
    }

    /**
     * The Person that belong to the activity.
     */
    public function persons()
    {
        return $this->belongsToMany(PersonProxy::modelClass(), 'person_activities');
    }

    /**
     * The leads that belong to the activity.
     */
    public function products()
    {
        return $this->belongsToMany(ProductProxy::modelClass(), 'product_activities');
    }

    /**
     * The Warehouse that belong to the activity.
     */
    public function warehouses()
    {
        return $this->belongsToMany(WarehouseProxy::modelClass(), 'warehouse_activities');
    }
}


================================================
FILE: packages/Webkul/Activity/src/Models/ActivityProxy.php
================================================
<?php

namespace Webkul\Activity\Models;

use Konekt\Concord\Proxies\ModelProxy;

class ActivityProxy extends ModelProxy {}


================================================
FILE: packages/Webkul/Activity/src/Models/File.php
================================================
<?php

namespace Webkul\Activity\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use Webkul\Activity\Contracts\File as FileContract;

class File extends Model implements FileContract
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'activity_files';

    /**
     * The attributes that should be appended to the model.
     *
     * @var array
     */
    protected $appends = ['url'];

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

    /**
     * Get image url for the product image.
     */
    public function url()
    {
        return Storage::url($this->path);
    }

    /**
     * Get image url for the product image.
     */
    public function getUrlAttribute()
    {
        return $this->url();
    }

    /**
     * Get the activity that owns the file.
     */
    public function activity()
    {
        return $this->belongsTo(ActivityProxy::modelClass());
    }

    /**
     * @return array
     */
    public function toArray()
    {
        $array = parent::toArray();

        $array['url'] = $this->url;

        return $array;
    }
}


================================================
FILE: packages/Webkul/Activity/src/Models/FileProxy.php
================================================
<?php

namespace Webkul\Activity\Models;

use Konekt\Concord\Proxies\ModelProxy;

class FileProxy extends ModelProxy {}


================================================
FILE: packages/Webkul/Activity/src/Models/Participant.php
================================================
<?php

namespace Webkul\Activity\Models;

use Illuminate\Database\Eloquent\Model;
use Webkul\Activity\Contracts\Participant as ParticipantContract;
use Webkul\Contact\Models\PersonProxy;
use Webkul\User\Models\UserProxy;

class Participant extends Model implements ParticipantContract
{
    public $timestamps = false;

    protected $table = 'activity_participants';

    protected $with = ['user', 'person'];

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'activity_id',
        'user_id',
        'person_id',
    ];

    /**
     * Get the activity that owns the participant.
     */
    public function activity()
    {
        return $this->belongsTo(ActivityProxy::modelClass());
    }

    /**
     * Get the user that owns the participant.
     */
    public function user()
    {
        return $this->belongsTo(UserProxy::modelClass());
    }

    /**
     * Get the person that owns the participant.
     */
    public function person()
    {
        return $this->belongsTo(PersonProxy::modelClass());
    }
}


================================================
FILE: packages/Webkul/Activity/src/Models/ParticipantProxy.php
================================================
<?php

namespace Webkul\Activity\Models;

use Konekt\Concord\Proxies\ModelProxy;

class ParticipantProxy extends ModelProxy {}


================================================
FILE: packages/Webkul/Activity/src/Providers/ActivityServiceProvider.php
================================================
<?php

namespace Webkul\Activity\Providers;

use Illuminate\Routing\Router;
use Illuminate\Support\ServiceProvider;
use Webkul\Activity\Contracts\Activity as ActivityContract;
use Webkul\Activity\Contracts\File as FileContract;
use Webkul\Activity\Contracts\Participant as ParticipantContract;
use Webkul\Activity\Models\Activity;
use Webkul\Activity\Models\File;
use Webkul\Activity\Models\Participant;

class ActivityServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * Adds Laravel container bindings as a fallback so repositories that
     * type-hint the contract interfaces resolve even if Concord's
     * ModuleServiceProvider::boot() has not yet run.
     */
    public function register(): void
    {
        $this->app->bindIf(ActivityContract::class, Activity::class);
        $this->app->bindIf(FileContract::class, File::class);
        $this->app->bindIf(ParticipantContract::class, Participant::class);
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot(Router $router)
    {
        $this->loadMigrationsFrom(__DIR__.'/../Database/Migrations');

        // Guarantee that Concord's model-proxy registry contains the Activity
        // bindings after all providers have booted.  ModelProxy::modelClass()
        // looks up $concord->model($contract) — a separate store from the
        // Laravel container — so this registration is strictly necessary for
        // proxies like ActivityProxy used in Eloquent relationships.
        $this->app->booted(function () {
            $concord = app('concord');

            if (! $concord->model(ActivityContract::class)) {
                $concord->registerModel(ActivityContract::class, Activity::class);
            }

            if (! $concord->model(FileContract::class)) {
                $concord->registerModel(FileContract::class, File::class);
            }

            if (! $concord->model(ParticipantContract::class)) {
                $concord->registerModel(ParticipantContract::class, Participant::class);
            }
        });
    }
}


================================================
FILE: packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php
================================================
<?php

namespace Webkul\Activity\Providers;

use Webkul\Activity\Models\Activity;
use Webkul\Activity\Models\File;
use Webkul\Activity\Models\Participant;
use Webkul\Core\Providers\BaseModuleServiceProvider;

class ModuleServiceProvider extends BaseModuleServiceProvider
{
    protected $models = [
        Activity::class,
        File::class,
        Participant::class,
    ];
}


================================================
FILE: packages/Webkul/Activity/src/Repositories/ActivityRepository.php
================================================
<?php

namespace Webkul\Activity\Repositories;

use Webkul\Activity\Contracts\Activity;
use Webkul\Core\Eloquent\Repository;

class ActivityRepository extends Repository
{
    /**
     * Specify Model class name
     *
     * @return mixed
     */
    public function model()
    {
        return 'Webkul\Activity\Contracts\Activity';
    }

    /**
     * Create pipeline.
     *
     * @return Activity
     */
    public function create(array $data)
    {
        $activity = parent::create($data);

        if (isset($data['file'])) {
            app(FileRepository::class)->create([
                'name' => $data['name'] ?? $data['file']->getClientOriginalName(),
                'path' => $data['file']->store('activities/'.$activity->id),
                'activity_id' => $activity->id,
            ]);
        }

        if (! isset($data['participants'])) {
            return $activity;
        }

        foreach ($data['participants']['users'] ?? [] as $userId) {
            $activity->participants()->create([
                'user_id' => $userId,
            ]);
        }

        foreach ($data['participants']['persons'] ?? [] as $personId) {
            $activity->participants()->create([
                'person_id' => $personId,
            ]);
        }

        return $activity;
    }

    /**
     * Update pipeline.
     *
     * @param  int  $id
     * @param  string  $attribute
     * @return Activity
     */
    public function update(array $data, $id, $attribute = 'id')
    {
        $activity = parent::update($data, $id);

        if (isset($data['participants'])) {
            $activity->participants()->delete();

            foreach ($data['participants']['users'] ?? [] as $userId) {
                /**
                 * In some cases, the component exists in an HTML form, and traditional HTML does not send an empty array.
                 * Therefore, we need to check for an empty string.
                 * This scenario occurs only when all participants are removed.
                 */
                if (empty($userId)) {
                    break;
                }

                $activity->participants()->create([
                    'user_id' => $userId,
                ]);
            }

            foreach ($data['participants']['persons'] ?? [] as $personId) {
                /**
                 * In some cases, the component exists in an HTML form, and traditional HTML does not send an empty array.
                 * Therefore, we need to check for an empty string.
                 * This scenario occurs only when all participants are removed.
                 */
                if (empty($personId)) {
                    break;
                }

                $activity->participants()->create([
                    'person_id' => $personId,
                ]);
            }
        }

        return $activity;
    }

    /**
     * @param  string  $dateRange
     * @return mixed
     */
    public function getActivities($dateRange)
    {
        $tablePrefix = \DB::getTablePrefix();

        return $this->select(
            'activities.id',
            'activities.created_at',
            'activities.title',
            'activities.schedule_from as start',
            'activities.schedule_to as end',
            'users.name as user_name',
        )
            ->addSelect(\DB::raw('IF('.$tablePrefix.'activities.is_done, "done", "") as class'))
            ->leftJoin('activity_participants', 'activities.id', '=', 'activity_participants.activity_id')
            ->leftJoin('users', 'activities.user_id', '=', 'users.id')
            ->whereIn('type', ['call', 'meeting', 'lunch'])
            ->whereBetween('activities.schedule_from', $dateRange)
            ->where(function ($query) {
                if ($userIds = bouncer()->getAuthorizedUserIds()) {
                    $query->whereIn('activities.user_id', $userIds)
                        ->orWhereIn('activity_participants.user_id', $userIds);
                }
            })
            ->distinct()
            ->get();
    }

    /**
     * @param  string  $startFrom
     * @param  string  $endFrom
     * @param  array  $participants
     * @param  int  $id
     * @return bool
     */
    public function isDurationOverlapping($startFrom, $endFrom, $participants, $id)
    {
        $queryBuilder = $this->leftJoin('activity_participants', 'activities.id', '=', 'activity_participants.activity_id')
            ->where(function ($query) use ($startFrom, $endFrom) {
                $query->where([
                    ['activities.schedule_from', '<=', $startFrom],
                    ['activities.schedule_to', '>=', $startFrom],
                ])->orWhere([
                    ['activities.schedule_from', '>=', $startFrom],
                    ['activities.schedule_from', '<=', $endFrom],
                ]);
            })
            ->where(function ($query) use ($participants) {
                if (is_null($participants)) {
                    return;
                }

                if (isset($participants['users'])) {
                    $query->orWhereIn('activity_participants.user_id', $participants['users']);
                }

                if (isset($participants['persons'])) {
                    $query->orWhereIn('activity_participants.person_id', $participants['persons']);
                }
            })
            ->groupBy('activities.id');

        if (! is_null($id)) {
            $queryBuilder->where('activities.id', '!=', $id);
        }

        return $queryBuilder->count() ? true : false;
    }
}


================================================
FILE: packages/Webkul/Activity/src/Repositories/FileRepository.php
================================================
<?php

namespace Webkul\Activity\Repositories;

use Webkul\Activity\Contracts\File;
use Webkul\Core\Eloquent\Repository;

class FileRepository extends Repository
{
    /**
     * Specify model class name.
     *
     * @return mixed
     */
    public function model()
    {
        return File::class;
    }
}


================================================
FILE: packages/Webkul/Activity/src/Repositories/ParticipantRepository.php
================================================
<?php

namespace Webkul\Activity\Repositories;

use Webkul\Core\Eloquent\Repository;

class ParticipantRepository extends Repository
{
    /**
     * Specify Model class name
     *
     * @return mixed
     */
    public function model()
    {
        return 'Webkul\Activity\Contracts\Participant';
    }
}


================================================
FILE: packages/Webkul/Activity/src/Traits/LogsActivity.php
================================================
<?php

namespace Webkul\Activity\Traits;

use Webkul\Activity\Repositories\ActivityRepository;
use Webkul\Attribute\Contracts\AttributeValue;
use Webkul\Attribute\Repositories\AttributeValueRepository;

trait LogsActivity
{
    /**
     * The "booted" method of the model.
     */
    protected static function booted(): void
    {
        static::created(function ($model) {
            if (! method_exists($model->entity ?? $model, 'activities')) {
                return;
            }

            if (! $model instanceof AttributeValue) {
                $activity = app(ActivityRepository::class)->create([
                    'type' => 'system',
                    'title' => trans('admin::app.activities.created'),
                    'is_done' => 1,
                    'user_id' => auth()->check()
                        ? auth()->id()
                        : null,
                ]);

                $model->activities()->attach($activity->id);

                return;
            }

            static::logActivity($model);
        });

        static::updated(function ($model) {
            if (! method_exists($model->entity ?? $model, 'activities')) {
                return;
            }

            static::logActivity($model);
        });

        static::deleting(function ($model) {
            if (! method_exists($model->entity ?? $model, 'activities')) {
                return;
            }

            $model->activities()->delete();
        });
    }

    /**
     * Create activity.
     */
    protected static function logActivity($model)
    {
        $customAttributes = [];

        if (method_exists($model, 'getCustomAttributes')) {
            $customAttributes = $model->getCustomAttributes()->pluck('code')->toArray();
        }

        $updatedAttributes = static::getUpdatedAttributes($model);

        foreach ($updatedAttributes as $attributeCode => $attributeData) {
            if (in_array($attributeCode, $customAttributes)) {
                continue;
            }

            $attributeCode = $model->attribute?->name ?: $attributeCode;

            $activity = app(ActivityRepository::class)->create([
                'type' => 'system',
                'title' => trans('admin::app.activities.updated', ['attribute' => $attributeCode]),
                'is_done' => 1,
                'additional' => json_encode([
                    'attribute' => $attributeCode,
                    'new' => [
                        'value' => $attributeData['new'],
                        'label' => static::getAttributeLabel($attributeData['new'], $model->attribute),
                    ],
                    'old' => [
                        'value' => $attributeData['old'],
                        'label' => static::getAttributeLabel($attributeData['old'], $model->attribute),
                    ],
                ]),
                'user_id' => auth()->id(),
            ]);

            if ($model instanceof AttributeValue) {
                $model->entity->activities()->attach($activity->id);
            } else {
                $model->activities()->attach($activity->id);
            }
        }
    }

    /**
     * Get attribute label.
     */
    protected static function getAttributeLabel($value, $attribute)
    {
        return app(AttributeValueRepository::class)->getAttributeLabel($value, $attribute);
    }

    /**
     * Create activity.
     */
    protected static function getUpdatedAttributes($model)
    {
        $updatedAttributes = [];

        foreach ($model->getDirty() as $key => $value) {
            if (in_array($key, [
                'id',
                'attribute_id',
                'entity_id',
                'entity_type',
                'updated_at',
            ])) {
                continue;
            }

            $newValue = static::decodeValueIfJson($value);

            $oldValue = static::decodeValueIfJson($model->getOriginal($key));

            if ($newValue != $oldValue) {
                $updatedAttributes[$key] = [
                    'new' => $newValue,
                    'old' => $oldValue,
                ];
            }
        }

        return $updatedAttributes;
    }

    /**
     * Convert value if json.
     */
    protected static function decodeValueIfJson($value)
    {
        if (
            ! is_array($value)
            && json_decode($value, true)
        ) {
            $value = json_decode($value, true);
        }

        if (! is_array($value)) {
            return $value;
        }

        static::ksortRecursive($value);

        return $value;
    }

    /**
     * Sort array recursively.
     */
    protected static function ksortRecursive(&$array)
    {
        if (! is_array($array)) {
            return;
        }

        ksort($array);

        foreach ($array as &$value) {
            if (! is_array($value)) {
                continue;
            }

            static::ksortRecursive($value);
        }
    }
}


================================================
FILE: packages/Webkul/Admin/.gitignore
================================================
/node_modules
/package-lock.json
npm-debug.log
/playwright-report
/test-results

================================================
FILE: packages/Webkul/Admin/composer.json
================================================
{
    "name": "krayin/laravel-admin",
    "license": "MIT",
    "authors": [
        {
            "name": "Jitendra Singh",
            "email": "jitendra@webkul.com"
        }
    ],
    "require": {
        "krayin/laravel-attribute": "^1.0",
        "krayin/laravel-contact": "^1.0",
        "krayin/laravel-core": "^1.0",
        "krayin/laravel-email": "^1.0",
        "krayin/laravel-lead": "^1.0",
        "krayin/laravel-product": "^1.0",
        "krayin/laravel-tag": "^1.0",
        "krayin/laravel-ui": "^1.0",
        "krayin/laravel-user": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "Webkul\\Admin\\": "src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Webkul\\Admin\\Providers\\AdminServiceProvider"
            ],
            "aliases": {}
        }
    },
    "minimum-stability": "dev"
}

================================================
FILE: packages/Webkul/Admin/package.json
================================================
{
    "private": true,
    "type": "module",
    "scripts": {
        "dev": "vite",
        "build": "vite build"
    },
    "devDependencies": {
        "@playwright/test": "^1.50.1",
        "@types/node": "^22.7.8",
        "autoprefixer": "^10.4.16",
        "axios": "^1.7.4",
        "laravel-vite-plugin": "^1.0",
        "postcss": "^8.4.23",
        "tailwindcss": "^3.3.2",
        "vite": "^5.4.12",
        "vue": "^3.4.21"
    },
    "dependencies": {
        "@vee-validate/i18n": "^4.9.1",
        "@vee-validate/rules": "^4.9.1",
        "@vitejs/plugin-vue": "^4.2.3",
        "chartjs-chart-funnel": "^4.2.1",
        "dompurify": "^3.1.7",
        "dotenv": "^16.4.7",
        "flatpickr": "^4.6.13",
        "mitt": "^3.0.1",
        "playwright": "^1.48.1",
        "readline-sync": "^1.4.10",
        "vee-validate": "^4.9.1",
        "vue-cal": "^4.9.0",
        "vue-flatpickr": "^2.3.0",
        "vuedraggable": "^4.1.0"
    }
}


================================================
FILE: packages/Webkul/Admin/postcss.config.cjs
================================================
module.exports = ({ env }) => ({
    plugins: [require("tailwindcss")(), require("autoprefixer")()],
});


================================================
FILE: packages/Webkul/Admin/src/Bouncer.php
================================================
<?php

namespace Webkul\Admin;

use Webkul\User\Repositories\UserRepository;

class Bouncer
{
    /**
     * Checks if user allowed or not for certain action
     *
     * @param  string  $permission
     * @return void
     */
    public function hasPermission($permission)
    {
        if (auth()->guard('user')->check() && auth()->guard('user')->user()->role->permission_type == 'all') {
            return true;
        } else {
            if (! auth()->guard('user')->check() || ! auth()->guard('user')->user()->hasPermission($permission)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Checks if user allowed or not for certain action
     *
     * @param  string  $permission
     * @return void
     */
    public static function allow($permission)
    {
        if (! auth()->guard('user')->check() || ! auth()->guard('user')->user()->hasPermission($permission)) {
            abort(401, 'This action is unauthorized');
        }
    }

    /**
     * This function will return user ids of current user's groups
     *
     * @return array|null
     */
    public function getAuthorizedUserIds()
    {
        $user = auth()->guard('user')->user();

        if ($user->view_permission == 'global') {
            return null;
        }

        if ($user->view_permission == 'group') {
            return app(UserRepository::class)->getCurrentUserGroupsUserIds();
        } else {
            return [$user->id];
        }
    }
}


================================================
FILE: packages/Webkul/Admin/src/Config/acl.php
================================================
<?php

return [
    [
        'key' => 'dashboard',
        'name' => 'admin::app.layouts.dashboard',
        'route' => 'admin.dashboard.index',
        'sort' => 1,
    ], [
        'key' => 'leads',
        'name' => 'admin::app.acl.leads',
        'route' => 'admin.leads.index',
        'sort' => 2,
    ], [
        'key' => 'leads.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.leads.create', 'admin.leads.store'],
        'sort' => 1,
    ], [
        'key' => 'leads.view',
        'name' => 'admin::app.acl.view',
        'route' => 'admin.leads.view',
        'sort' => 2,
    ], [
        'key' => 'leads.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.leads.edit', 'admin.leads.update', 'admin.leads.mass_update'],
        'sort' => 3,
    ], [
        'key' => 'leads.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.leads.delete', 'admin.leads.mass_delete'],
        'sort' => 4,
    ], [
        'key' => 'quotes',
        'name' => 'admin::app.acl.quotes',
        'route' => 'admin.quotes.index',
        'sort' => 3,
    ], [
        'key' => 'quotes.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.quotes.create', 'admin.quotes.store'],
        'sort' => 1,
    ], [
        'key' => 'quotes.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.quotes.edit', 'admin.quotes.update'],
        'sort' => 2,
    ], [
        'key' => 'quotes.print',
        'name' => 'admin::app.acl.print',
        'route' => 'admin.quotes.print',
        'sort' => 3,
    ], [
        'key' => 'quotes.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.quotes.delete', 'admin.quotes.mass_delete'],
        'sort' => 4,
    ], [
        'key' => 'mail',
        'name' => 'admin::app.acl.mail',
        'route' => 'admin.mail.index',
        'sort' => 4,
    ], [
        'key' => 'mail.inbox',
        'name' => 'admin::app.acl.inbox',
        'route' => 'admin.mail.index',
        'sort' => 1,
    ], [
        'key' => 'mail.draft',
        'name' => 'admin::app.acl.draft',
        'route' => 'admin.mail.index',
        'sort' => 2,
    ], [
        'key' => 'mail.outbox',
        'name' => 'admin::app.acl.outbox',
        'route' => 'admin.mail.index',
        'sort' => 3,
    ], [
        'key' => 'mail.sent',
        'name' => 'admin::app.acl.sent',
        'route' => 'admin.mail.index',
        'sort' => 4,
    ], [
        'key' => 'mail.trash',
        'name' => 'admin::app.acl.trash',
        'route' => 'admin.mail.index',
        'sort' => 5,
    ], [
        'key' => 'mail.compose',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.mail.store'],
        'sort' => 6,
    ], [
        'key' => 'mail.view',
        'name' => 'admin::app.acl.view',
        'route' => 'admin.mail.view',
        'sort' => 7,
    ], [
        'key' => 'mail.edit',
        'name' => 'admin::app.acl.edit',
        'route' => 'admin.mail.update',
        'sort' => 8,
    ], [
        'key' => 'mail.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.mail.delete', 'admin.mail.mass_delete'],
        'sort' => 9,
    ], [
        'key' => 'activities',
        'name' => 'admin::app.acl.activities',
        'route' => 'admin.activities.index',
        'sort' => 5,
    ], [
        'key' => 'activities.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.activities.create', 'admin.activities.store'],
        'sort' => 1,
    ], [
        'key' => 'activities.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.activities.edit', 'admin.activities.update', 'admin.activities.mass_update'],
        'sort' => 2,
    ], [
        'key' => 'activities.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.activities.delete', 'admin.activities.mass_delete'],
        'sort' => 3,
    ], [
        'key' => 'contacts',
        'name' => 'admin::app.acl.contacts',
        'route' => 'admin.contacts.users.index',
        'sort' => 6,
    ], [
        'key' => 'contacts.persons',
        'name' => 'admin::app.acl.persons',
        'route' => 'admin.contacts.persons.index',
        'sort' => 1,
    ], [
        'key' => 'contacts.persons.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.contacts.persons.create', 'admin.contacts.persons.store'],
        'sort' => 2,
    ], [
        'key' => 'contacts.persons.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.contacts.persons.edit', 'admin.contacts.persons.update'],
        'sort' => 3,
    ], [
        'key' => 'contacts.persons.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.contacts.persons.delete', 'admin.contacts.persons.mass_delete'],
        'sort' => 4,
    ], [
        'key' => 'contacts.persons.view',
        'name' => 'admin::app.acl.view',
        'route' => 'admin.contacts.persons.view',
        'sort' => 5,
    ], [
        'key' => 'contacts.organizations',
        'name' => 'admin::app.acl.organizations',
        'route' => 'admin.contacts.organizations.index',
        'sort' => 2,
    ], [
        'key' => 'contacts.organizations.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.contacts.organizations.create', 'admin.contacts.organizations.store'],
        'sort' => 1,
    ], [
        'key' => 'contacts.organizations.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.contacts.organizations.edit', 'admin.contacts.organizations.update'],
        'sort' => 2,
    ], [
        'key' => 'contacts.organizations.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.contacts.organizations.delete', 'admin.contacts.organizations.mass_delete'],
        'sort' => 3,
    ], [
        'key' => 'products',
        'name' => 'admin::app.acl.products',
        'route' => 'admin.products.index',
        'sort' => 7,
    ], [
        'key' => 'products.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.products.create', 'admin.products.store'],
        'sort' => 1,
    ], [
        'key' => 'products.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.products.edit', 'admin.products.update'],
        'sort' => 2,
    ], [
        'key' => 'products.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.products.delete', 'admin.products.mass_delete'],
        'sort' => 3,
    ], [
        'key' => 'products.view',
        'name' => 'admin::app.acl.view',
        'route' => 'admin.products.view',
        'sort' => 3,
    ], [
        'key' => 'settings',
        'name' => 'admin::app.acl.settings',
        'route' => 'admin.settings.index',
        'sort' => 8,
    ], [
        'key' => 'settings.user',
        'name' => 'admin::app.acl.user',
        'route' => ['admin.settings.groups.index', 'admin.settings.roles.index', 'admin.settings.users.index'],
        'sort' => 1,
    ], [
        'key' => 'settings.user.groups',
        'name' => 'admin::app.acl.groups',
        'route' => 'admin.settings.groups.index',
        'sort' => 1,
    ], [
        'key' => 'settings.user.groups.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.groups.create', 'admin.settings.groups.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.user.groups.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.groups.edit', 'admin.settings.groups.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.user.groups.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.groups.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.user.roles',
        'name' => 'admin::app.acl.roles',
        'route' => 'admin.settings.roles.index',
        'sort' => 2,
    ], [
        'key' => 'settings.user.roles.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.roles.create', 'admin.settings.roles.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.user.roles.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.roles.edit', 'admin.settings.roles.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.user.roles.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.roles.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.user.users',
        'name' => 'admin::app.acl.users',
        'route' => 'admin.settings.users.index',
        'sort' => 3,
    ], [
        'key' => 'settings.user.users.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.users.create', 'admin.settings.users.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.user.users.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.users.edit', 'admin.settings.users.update', 'admin.settings.users.mass_update'],
        'sort' => 2,
    ], [
        'key' => 'settings.user.users.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.settings.users.delete', 'admin.settings.users.mass_delete'],
        'sort' => 3,
    ], [
        'key' => 'settings.lead',
        'name' => 'admin::app.acl.lead',
        'route' => ['admin.settings.pipelines.index', 'admin.settings.sources.index', 'admin.settings.types.index'],
        'sort' => 2,
    ], [
        'key' => 'settings.lead.pipelines',
        'name' => 'admin::app.acl.pipelines',
        'route' => 'admin.settings.pipelines.index',
        'sort' => 1,
    ], [
        'key' => 'settings.lead.pipelines.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.pipelines.create', 'admin.settings.pipelines.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.lead.pipelines.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.pipelines.edit', 'admin.settings.pipelines.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.lead.pipelines.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.pipelines.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.lead.sources',
        'name' => 'admin::app.acl.sources',
        'route' => 'admin.settings.sources.index',
        'sort' => 2,
    ], [
        'key' => 'settings.lead.sources.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.sources.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.lead.sources.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.sources.edit', 'admin.settings.sources.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.lead.sources.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.sources.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.lead.types',
        'name' => 'admin::app.acl.types',
        'route' => 'admin.settings.types.index',
        'sort' => 3,
    ], [
        'key' => 'settings.lead.types.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.types.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.lead.types.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.types.edit', 'admin.settings.types.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.lead.types.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.types.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.inventory',
        'name' => 'admin::app.acl.inventory',
        'route' => ['admin.settings.warehouse.index'],
        'sort' => 3,
    ], [
        'key' => 'settings.inventory.warehouse',
        'name' => 'admin::app.acl.warehouses',
        'route' => ['admin.settings.warehouse.index'],
        'sort' => 1,
    ], [
        'key' => 'settings.inventory.warehouse.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.warehouse.create', 'admin.settings.warehouse.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.inventory.warehouse.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.warehouse.edit', 'admin.settings.warehouse.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.inventory.warehouse.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.warehouse.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.automation',
        'name' => 'admin::app.acl.automation',
        'route' => ['admin.settings.attributes.index', 'admin.settings.email_templates.index', 'admin.settings.workflows.index'],
        'sort' => 4,
    ], [
        'key' => 'settings.automation.attributes',
        'name' => 'admin::app.acl.attributes',
        'route' => 'admin.settings.attributes.index',
        'sort' => 1,
    ], [
        'key' => 'settings.automation.attributes.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.attributes.create', 'admin.settings.attributes.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.automation.attributes.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.attributes.edit', 'admin.settings.attributes.update', 'admin.settings.attributes.mass_update'],
        'sort' => 2,
    ], [
        'key' => 'settings.automation.attributes.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.attributes.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.automation.email_templates',
        'name' => 'admin::app.acl.email-templates',
        'route' => 'admin.settings.email_templates.index',
        'sort' => 2,
    ], [
        'key' => 'settings.automation.email_templates.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.email_templates.create', 'admin.settings.email_templates.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.automation.email_templates.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.email_templates.edit', 'admin.settings.email_templates.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.automation.email_templates.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.email_templates.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.automation.workflows',
        'name' => 'admin::app.acl.workflows',
        'route' => 'admin.settings.workflows.index',
        'sort' => 3,
    ], [
        'key' => 'settings.automation.workflows.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.workflows.create', 'admin.settings.workflows.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.automation.workflows.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.workflows.edit', 'admin.settings.workflows.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.automation.workflows.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.workflows.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.automation.events',
        'name' => 'admin::app.acl.event',
        'route' => 'admin.settings.marketing.events.index',
        'sort' => 4,
    ], [
        'key' => 'settings.automation.events.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.marketing.events.create', 'admin.settings.marketing.events.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.automation.events.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.marketing.events.edit', 'admin.settings.marketing.events.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.automation.events.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.settings.marketing.events.delete', 'admin.settings.marketing.events.mass_delete'],
        'sort' => 3,
    ], [
        'key' => 'settings.automation.campaigns',
        'name' => 'admin::app.acl.campaigns',
        'route' => 'admin.settings.marketing.campaigns.index',
        'sort' => 5,
    ], [
        'key' => 'settings.automation.campaigns.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.marketing.campaigns.create', 'admin.settings.marketing.campaigns.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.automation.campaigns.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.marketing.campaigns.edit', 'admin.settings.marketing.campaigns.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.automation.campaigns.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.settings.marketing.campaigns.delete', 'admin.settings.marketing.campaigns.mass_delete'],
        'sort' => 3,
    ], [
        'key' => 'settings.automation.webhooks',
        'name' => 'admin::app.acl.webhook',
        'route' => 'admin.settings.webhooks.index',
        'sort' => 6,
    ], [
        'key' => 'settings.automation.webhooks.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.webhooks.create', 'admin.settings.webhooks.store'],
        'sort' => 1,
    ], [
        'key' => 'settings.automation.webhooks.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.webhooks.edit', 'admin.settings.webhooks.update'],
        'sort' => 2,
    ], [
        'key' => 'settings.automation.webhooks.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.webhooks.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.automation.data_transfer',
        'name' => 'admin::app.acl.data-transfer',
        'route' => 'admin.settings.data_transfer.imports.index',
        'sort' => 7,
    ], [
        'key' => 'settings.automation.data_transfer.imports',
        'name' => 'admin::app.acl.imports',
        'route' => 'admin.settings.data_transfer.imports.index',
        'sort' => 1,
    ], [
        'key' => 'settings.automation.data_transfer.imports.create',
        'name' => 'admin::app.acl.create',
        'route' => 'admin.settings.data_transfer.imports.create',
        'sort' => 1,
    ], [
        'key' => 'settings.automation.data_transfer.imports.edit',
        'name' => 'admin::app.acl.edit',
        'route' => 'admin.settings.data_transfer.imports.edit',
        'sort' => 2,
    ], [
        'key' => 'settings.automation.data_transfer.imports.delete',
        'name' => 'admin::app.acl.delete',
        'route' => 'admin.settings.data_transfer.imports.delete',
        'sort' => 3,
    ], [
        'key' => 'settings.automation.data_transfer.imports.import',
        'name' => 'admin::app.acl.import',
        'route' => 'admin.settings.data_transfer.imports.imports',
        'sort' => 4,
    ], [
        'key' => 'settings.other_settings',
        'name' => 'admin::app.acl.other-settings',
        'route' => 'admin.settings.tags.index',
        'sort' => 5,
    ], [
        'key' => 'settings.other_settings.tags',
        'name' => 'admin::app.acl.tags',
        'route' => 'admin.settings.tags.index',
        'sort' => 1,
    ], [
        'key' => 'settings.other_settings.tags.create',
        'name' => 'admin::app.acl.create',
        'route' => ['admin.settings.tags.create', 'admin.settings.tags.store', 'admin.leads.tags.attach'],
        'sort' => 1,
    ], [
        'key' => 'settings.other_settings.tags.edit',
        'name' => 'admin::app.acl.edit',
        'route' => ['admin.settings.tags.edit', 'admin.settings.tags.update'],
        'sort' => 1,
    ], [
        'key' => 'settings.other_settings.tags.delete',
        'name' => 'admin::app.acl.delete',
        'route' => ['admin.settings.tags.delete', 'admin.settings.tags.mass_delete', 'admin.leads.tags.detach'],
        'sort' => 2,
    ], [
        'key' => 'configuration',
        'name' => 'admin::app.acl.configuration',
        'route' => 'admin.configuration.index',
        'sort' => 9,
    ],
];


================================================
FILE: packages/Webkul/Admin/src/Config/attribute_entity_types.php
================================================
<?php

return [
    'leads' => [
        'name' => 'admin::app.leads.index.title',
        'repository' => 'Webkul\Lead\Repositories\LeadRepository',
    ],

    'persons' => [
        'name' => 'admin::app.contacts.persons.index.title',
        'repository' => 'Webkul\Contact\Repositories\PersonRepository',
    ],

    'organizations' => [
        'name' => 'admin::app.contacts.organizations.index.title',
        'repository' => 'Webkul\Contact\Repositories\OrganizationRepository',
    ],

    'products' => [
        'name' => 'admin::app.products.index.title',
        'repository' => 'Webkul\Product\Repositories\ProductRepository',
    ],

    'quotes' => [
        'name' => 'admin::app.quotes.index.title',
        'repository' => 'Webkul\Quote\Repositories\QuoteRepository',
    ],

    'warehouses' => [
        'name' => 'admin::app.settings.warehouses.index.title',
        'repository' => 'Webkul\Warehouse\Repositories\WarehouseRepository',
    ],
];


================================================
FILE: packages/Webkul/Admin/src/Config/attribute_lookups.php
================================================
<?php

return [
    'leads' => [
        'name' => 'Leads',
        'repository' => 'Webkul\Lead\Repositories\LeadRepository',
        'label_column' => 'title',
    ],

    'lead_sources' => [
        'name' => 'Lead Sources',
        'repository' => 'Webkul\Lead\Repositories\SourceRepository',
    ],

    'lead_types' => [
        'name' => 'Lead Types',
        'repository' => 'Webkul\Lead\Repositories\TypeRepository',
    ],

    'lead_pipelines' => [
        'name' => 'Lead Pipelines',
        'repository' => 'Webkul\Lead\Repositories\PipelineRepository',
    ],

    'lead_pipeline_stages' => [
        'name' => 'Lead Pipeline Stages',
        'repository' => 'Webkul\Lead\Repositories\StageRepository',
    ],

    'users' => [
        'name' => 'Sales Owners',
        'repository' => 'Webkul\User\Repositories\UserRepository',
    ],

    'organizations' => [
        'name' => 'Organizations',
        'repository' => 'Webkul\Contact\Repositories\OrganizationRepository',
    ],

    'persons' => [
        'name' => 'Persons',
        'repository' => 'Webkul\Contact\Repositories\PersonRepository',
    ],

    'warehouses' => [
        'name' => 'Warehouses',
        'repository' => 'Webkul\Warehouse\Repositories\WarehouseRepository',
    ],

    'locations' => [
        'name' => 'Locations',
        'repository' => 'Webkul\Warehouse\Repositories\LocationRepository',
    ],
];


================================================
FILE: packages/Webkul/Admin/src/Config/core_config.php
================================================
<?php

return [
    /**
     * General.
     */
    [
        'key' => 'general',
        'name' => 'admin::app.configuration.index.general.title',
        'info' => 'admin::app.configuration.index.general.info',
        'sort' => 1,
    ], [
        'key' => 'general.general',
        'name' => 'admin::app.configuration.index.general.general.title',
        'info' => 'admin::app.configuration.index.general.general.info',
        'icon' => 'icon-setting',
        'sort' => 1,
    ], [
        'key' => 'general.general.locale_settings',
        'name' => 'admin::app.configuration.index.general.general.locale-settings.title',
        'info' => 'admin::app.configuration.index.general.general.locale-settings.title-info',
        'sort' => 1,
        'fields' => [
            [
                'name' => 'locale',
                'title' => 'admin::app.configuration.index.general.general.locale-settings.title',
                'type' => 'select',
                'default' => 'en',
                'options' => 'Webkul\Core\Core@locales',
            ],
        ],
    ], [
        'key' => 'general.general.admin_logo',
        'name' => 'admin::app.configuration.index.general.general.admin-logo.title',
        'info' => 'admin::app.configuration.index.general.general.admin-logo.title-info',
        'sort' => 2,
        'fields' => [
            [
                'name' => 'logo_image',
                'title' => 'admin::app.configuration.index.general.general.admin-logo.logo-image',
                'type' => 'image',
                'validation' => 'mimes:bmp,jpeg,jpg,png,webp,svg',
            ],
        ],
    ], [
        'key' => 'general.settings',
        'name' => 'admin::app.configuration.index.general.settings.title',
        'info' => 'admin::app.configuration.index.general.settings.info',
        'icon' => 'icon-configuration',
        'sort' => 2,
    ], [
        'key' => 'general.settings.footer',
        'name' => 'admin::app.configuration.index.general.settings.footer.title',
        'info' => 'admin::app.configuration.index.general.settings.footer.info',
        'sort' => 1,
        'fields' => [
            [
                'name' => 'label',
                'title' => 'admin::app.configuration.index.general.settings.footer.powered-by',
                'type' => 'editor',
                'default' => 'Powered by <span style="color: rgb(14, 144, 217);"><a href="http://www.krayincrm.com" target="_blank">Krayin</a></span>, an open-source project by <span style="color: rgb(14, 144, 217);"><a href="https://webkul.com" target="_blank">Webkul</a></span>.',
                'tinymce' => true,
            ],
        ],
    ], [
        'key' => 'general.settings.menu',
        'name' => 'admin::app.configuration.index.general.settings.menu.title',
        'info' => 'admin::app.configuration.index.general.settings.menu.info',
        'sort' => 2,
        'fields' => [
            [
                'name' => 'dashboard',
                'title' => 'admin::app.configuration.index.general.settings.menu.dashboard',
                'type' => 'text',
                'default' => 'Dashboard',
                'validation' => 'max:20',
            ], [
                'name' => 'leads',
                'title' => 'admin::app.configuration.index.general.settings.menu.leads',
                'type' => 'text',
                'default' => 'Leads',
                'validation' => 'max:20',
            ], [
                'name' => 'quotes',
                'title' => 'admin::app.configuration.index.general.settings.menu.quotes',
                'type' => 'text',
                'default' => 'Quotes',
                'validation' => 'max:20',
            ], [
                'name' => 'mail.mail',
                'title' => 'admin::app.configuration.index.general.settings.menu.mail',
                'type' => 'text',
                'default' => 'Mail',
                'validation' => 'max:20',
            ], [
                'name' => 'mail.inbox',
                'title' => 'admin::app.configuration.index.general.settings.menu.inbox',
                'type' => 'text',
                'default' => 'Inbox',
                'validation' => 'max:20',
            ], [
                'name' => 'mail.draft',
                'title' => 'admin::app.configuration.index.general.settings.menu.draft',
                'type' => 'text',
                'default' => 'Draft',
                'validation' => 'max:20',
            ], [
                'name' => 'mail.outbox',
                'title' => 'admin::app.configuration.index.general.settings.menu.outbox',
                'type' => 'text',
                'default' => 'Outbox',
                'validation' => 'max:20',
            ], [
                'name' => 'mail.sent',
                'title' => 'admin::app.configuration.index.general.settings.menu.sent',
                'type' => 'text',
                'default' => 'Sent',
                'validation' => 'max:20',
            ], [
                'name' => 'mail.trash',
                'title' => 'admin::app.configuration.index.general.settings.menu.trash',
                'type' => 'text',
                'default' => 'Trash',
                'validation' => 'max:20',
            ], [
                'name' => 'activities',
                'title' => 'admin::app.configuration.index.general.settings.menu.activities',
                'type' => 'text',
                'default' => 'Activities',
                'validation' => 'max:20',
            ], [
                'name' => 'contacts.contacts',
                'title' => 'admin::app.configuration.index.general.settings.menu.contacts',
                'type' => 'text',
                'default' => 'Contacts',
                'validation' => 'max:20',
            ], [
                'name' => 'contacts.persons',
                'title' => 'admin::app.configuration.index.general.settings.menu.persons',
                'type' => 'text',
                'default' => 'Persons',
                'validation' => 'max:20',
            ], [
                'name' => 'contacts.organizations',
                'title' => 'admin::app.configuration.index.general.settings.menu.organizations',
                'type' => 'text',
                'default' => 'Organizations',
                'validation' => 'max:20',
            ], [
                'name' => 'products',
                'title' => 'admin::app.configuration.index.general.settings.menu.products',
                'type' => 'text',
                'default' => 'Products',
                'validation' => 'max:20',
            ], [
                'name' => 'settings',
                'title' => 'admin::app.configuration.index.general.settings.menu.settings',
                'type' => 'text',
                'default' => 'Settings',
                'validation' => 'max:20',
            ], [
                'name' => 'configuration',
                'title' => 'admin::app.configuration.index.general.settings.menu.configuration',
                'type' => 'text',
                'default' => 'Configuration',
                'validation' => 'max:20',
            ],
        ],
    ], [
        'key' => 'general.settings.menu_color',
        'name' => 'admin::app.configuration.index.general.settings.menu-color.title',
        'info' => 'admin::app.configuration.index.general.settings.menu-color.info',
        'sort' => 3,
        'fields' => [
            [
                'name' => 'brand_color',
                'title' => 'admin::app.configuration.index.general.settings.menu-color.brand-color',
                'type' => 'color',
                'default' => '#0E90D9',
            ],
        ],
    ], [
        'key' => 'general.magic_ai',
        'name' => 'admin::app.configuration.index.magic-ai.title',
        'info' => 'admin::app.configuration.index.magic-ai.info',
        'icon' => 'icon-setting',
        'sort' => 3,
    ], [
        'key' => 'general.magic_ai.settings',
        'name' => 'admin::app.configuration.index.magic-ai.settings.title',
        'info' => 'admin::app.configuration.index.magic-ai.settings.info',
        'sort' => 1,
        'fields' => [
            [
                'name' => 'enable',
                'title' => 'admin::app.configuration.index.magic-ai.settings.enable',
                'type' => 'boolean',
                'channel_based' => true,
            ], [
                'name' => 'api_key',
                'title' => 'admin::app.configuration.index.magic-ai.settings.api-key',
                'type' => 'password',
                'depends' => 'enable:1',
                'validation' => 'required_if:enable,1',
                'info' => 'admin::app.configuration.index.magic-ai.settings.api-key-info',
            ], [
                'name' => 'model',
                'title' => 'admin::app.configuration.index.magic-ai.settings.models.title',
                'type' => 'select',
                'channel_based' => true,
                'depends' => 'enable:1',
                'options' => [
                    [
                        'title' => 'admin::app.configuration.index.magic-ai.settings.models.gpt-4o',
                        'value' => 'openai/chatgpt-4o-latest',
                    ], [
                        'title' => 'admin::app.configuration.index.magic-ai.settings.models.gpt-4o-mini',
                        'value' => 'openai/gpt-4o-mini',
                    ], [
                        'title' => 'admin::app.configuration.index.magic-ai.settings.models.gemini-2-0-flash-001',
                        'value' => 'google/gemini-2.0-flash-001',
                    ], [
                        'title' => 'admin::app.configuration.index.magic-ai.settings.models.deepseek-r1',
                        'value' => 'deepseek/deepseek-r1-distill-llama-8b',
                    ], [
                        'title' => 'admin::app.configuration.index.magic-ai.settings.models.llama-3-2-3b-instruct',
                        'value' => 'meta-llama/llama-3.2-3b-instruct',
                    ], [
                        'title' => 'admin::app.configuration.index.magic-ai.settings.models.grok-2-1212',
                        'value' => 'x-ai/grok-2-1212',
                    ],
                ],
            ], [
                'name' => 'other_model',
                'title' => 'admin::app.configuration.index.magic-ai.settings.other',
                'type' => 'text',
                'info' => 'admin::app.configuration.index.magic-ai.settings.other-model',
                'default' => null,
                'depends' => 'enable:1',
            ],
        ],
    ], [
        'key' => 'general.magic_ai.doc_generation',
        'name' => 'admin::app.configuration.index.magic-ai.settings.doc-generation',
        'info' => 'admin::app.configuration.index.magic-ai.settings.doc-generation-info',
        'sort' => 2,
        'fields' => [
            [
                'name' => 'enabled',
                'title' => 'admin::app.configuration.index.magic-ai.settings.enable',
                'type' => 'boolean',
            ],
        ],
    ],

    /**
     * Email.
     */
    [
        'key' => 'email',
        'name' => 'admin::app.configuration.index.email.title',
        'info' => 'admin::app.configuration.index.email.info',
        'sort' => 2,
    ], [
        'key' => 'email.imap',
        'name' => 'admin::app.configuration.index.email.imap.title',
        'info' => 'admin::app.configuration.index.email.imap.info',
        'icon' => 'icon-setting',
        'sort' => 1,
    ], [
        'key' => 'email.imap.account',
        'name' => 'admin::app.configuration.index.email.imap.account.title',
        'info' => 'admin::app.configuration.index.email.imap.account.title-info',
        'sort' => 1,
        'fields' => [
            [
                'name' => 'host',
                'title' => 'admin::app.configuration.index.email.imap.account.host',
                'type' => 'text',
                'default' => config('imap.accounts.default.host'),
            ],
            [
                'name' => 'port',
                'title' => 'admin::app.configuration.index.email.imap.account.port',
                'type' => 'text',
                'default' => config('imap.accounts.default.port'),
            ],
            [
                'name' => 'encryption',
                'title' => 'admin::app.configuration.index.email.imap.account.encryption',
                'type' => 'text',
                'default' => config('imap.accounts.default.encryption'),
            ],
            [
                'name' => 'validate_cert',
                'title' => 'admin::app.configuration.index.email.imap.account.validate-cert',
                'type' => 'boolean',
                'default' => config('imap.accounts.default.validate_cert'),
            ],
            [
                'name' => 'username',
                'title' => 'admin::app.configuration.index.email.imap.account.username',
                'type' => 'text',
                'default' => config('imap.accounts.default.username'),
            ],
            [
                'name' => 'password',
                'title' => 'admin::app.configuration.index.email.imap.account.password',
                'type' => 'password',
                'default' => config('imap.accounts.default.password'),
            ],
        ],
    ],
];


================================================
FILE: packages/Webkul/Admin/src/Config/menu.php
================================================
<?php

return [
    /**
     * Dashboard.
     */
    [
        'key' => 'dashboard',
        'name' => 'admin::app.layouts.dashboard',
        'route' => 'admin.dashboard.index',
        'sort' => 1,
        'icon-class' => 'icon-dashboard',
    ],

    /**
     * Leads.
     */
    [
        'key' => 'leads',
        'name' => 'admin::app.layouts.leads',
        'route' => 'admin.leads.index',
        'sort' => 2,
        'icon-class' => 'icon-leads',
    ],

    /**
     * Quotes.
     */
    [
        'key' => 'quotes',
        'name' => 'admin::app.layouts.quotes',
        'route' => 'admin.quotes.index',
        'sort' => 3,
        'icon-class' => 'icon-quote',
    ],

    /**
     * Emails.
     */
    [
        'key' => 'mail',
        'name' => 'admin::app.layouts.mail.title',
        'route' => 'admin.mail.index',
        'params' => ['route' => 'inbox'],
        'sort' => 4,
        'icon-class' => 'icon-mail',
    ], [
        'key' => 'mail.inbox',
        'name' => 'admin::app.layouts.mail.inbox',
        'route' => 'admin.mail.index',
        'params' => ['route' => 'inbox'],
        'sort' => 2,
        'icon-class' => '',
    ], [
        'key' => 'mail.draft',
        'name' => 'admin::app.layouts.mail.draft',
        'route' => 'admin.mail.index',
        'params' => ['route' => 'draft'],
        'sort' => 3,
        'icon-class' => '',
    ], [
        'key' => 'mail.outbox',
        'name' => 'admin::app.layouts.mail.outbox',
        'route' => 'admin.mail.index',
        'params' => ['route' => 'outbox'],
        'sort' => 4,
        'icon-class' => '',
    ], [
        'key' => 'mail.sent',
        'name' => 'admin::app.layouts.mail.sent',
        'route' => 'admin.mail.index',
        'params' => ['route' => 'sent'],
        'sort' => 4,
        'icon-class' => '',
    ], [
        'key' => 'mail.trash',
        'name' => 'admin::app.layouts.mail.trash',
        'route' => 'admin.mail.index',
        'params' => ['route' => 'trash'],
        'sort' => 5,
        'icon-class' => '',
    ],

    /**
     * Activities.
     */
    [
        'key' => 'activities',
        'name' => 'admin::app.layouts.activities',
        'route' => 'admin.activities.index',
        'sort' => 5,
        'icon-class' => 'icon-activity',
    ],

    /**
     * Contacts.
     */
    [
        'key' => 'contacts',
        'name' => 'admin::app.layouts.contacts',
        'route' => 'admin.contacts.persons.index',
        'sort' => 6,
        'icon-class' => 'icon-contact',
    ], [
        'key' => 'contacts.persons',
        'name' => 'admin::app.layouts.persons',
        'route' => 'admin.contacts.persons.index',
        'sort' => 1,
        'icon-class' => '',
    ], [
        'key' => 'contacts.organizations',
        'name' => 'admin::app.layouts.organizations',
        'route' => 'admin.contacts.organizations.index',
        'sort' => 2,
        'icon-class' => '',
    ],

    /**
     * Products.
     */
    [
        'key' => 'products',
        'name' => 'admin::app.layouts.products',
        'route' => 'admin.products.index',
        'sort' => 7,
        'icon-class' => 'icon-product',
    ],

    /**
     * Settings.
     */
    [
        'key' => 'settings',
        'name' => 'admin::app.layouts.settings',
        'route' => 'admin.settings.index',
        'sort' => 8,
        'icon-class' => 'icon-setting',
    ], [
        'key' => 'settings.user',
        'name' => 'admin::app.layouts.user',
        'route' => 'admin.settings.groups.index',
        'info' => 'admin::app.layouts.user-info',
        'sort' => 1,
        'icon-class' => 'icon-settings-group',
    ], [
        'key' => 'settings.user.groups',
        'name' => 'admin::app.layouts.groups',
        'info' => 'admin::app.layouts.groups-info',
        'route' => 'admin.settings.groups.index',
        'sort' => 1,
        'icon-class' => 'icon-settings-group',
    ], [
        'key' => 'settings.user.roles',
        'name' => 'admin::app.layouts.roles',
        'info' => 'admin::app.layouts.roles-info',
        'route' => 'admin.settings.roles.index',
        'sort' => 2,
        'icon-class' => 'icon-role',
    ], [
        'key' => 'settings.user.users',
        'name' => 'admin::app.layouts.users',
        'info' => 'admin::app.layouts.users-info',
        'route' => 'admin.settings.users.index',
        'sort' => 3,
        'icon-class' => 'icon-user',
    ], [
        'key' => 'settings.lead',
        'name' => 'admin::app.layouts.lead',
        'info' => 'admin::app.layouts.lead-info',
        'route' => 'admin.settings.pipelines.index',
        'sort' => 2,
        'icon-class' => '',
    ], [
        'key' => 'settings.lead.pipelines',
        'name' => 'admin::app.layouts.pipelines',
        'info' => 'admin::app.layouts.pipelines-info',
        'route' => 'admin.settings.pipelines.index',
        'sort' => 1,
        'icon-class' => 'icon-settings-pipeline',
    ], [
        'key' => 'settings.lead.sources',
        'name' => 'admin::app.layouts.sources',
        'info' => 'admin::app.layouts.sources-info',
        'route' => 'admin.settings.sources.index',
        'sort' => 2,
        'icon-class' => 'icon-settings-sources',
    ], [
        'key' => 'settings.lead.types',
        'name' => 'admin::app.layouts.types',
        'info' => 'admin::app.layouts.types-info',
        'route' => 'admin.settings.types.index',
        'sort' => 3,
        'icon-class' => 'icon-settings-type',
    ], [
        'key' => 's
Download .txt
gitextract_tgh1bov9/

├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── 1_Bug_report.md
│   │   ├── 2_Feature_request.md
│   │   ├── 3_Support_question.md
│   │   └── 4_Security_vulnerabilities.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── admin_playwright_tests.yml
│       ├── auto_commits.yml
│       └── ci.yml
├── .gitignore
├── .styleci.yml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── UPGRADE.md
├── app/
│   ├── Http/
│   │   └── Controllers/
│   │       └── Controller.php
│   ├── Models/
│   │   └── User.php
│   └── Providers/
│       └── AppServiceProvider.php
├── artisan
├── bootstrap/
│   ├── app.php
│   ├── cache/
│   │   └── .gitignore
│   └── providers.php
├── composer.json
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── breadcrumbs.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── concord.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── imap.php
│   ├── krayin-vite.php
│   ├── logging.php
│   ├── mail-receiver.php
│   ├── mail.php
│   ├── queue.php
│   ├── repository.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   ├── tinker.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── factories/
│   │   └── UserFactory.php
│   ├── migrations/
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│   │   ├── 2024_09_09_094040_create_job_batches_table.php
│   │   └── 2024_09_09_094042_create_jobs_table.php
│   └── seeders/
│       └── DatabaseSeeder.php
├── lang/
│   └── en/
│       ├── auth.php
│       ├── pagination.php
│       ├── passwords.php
│       └── validation.php
├── package.json
├── packages/
│   └── Webkul/
│       ├── Activity/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Activity.php
│       │       │   ├── File.php
│       │       │   └── Participant.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_05_12_150329_create_activities_table.php
│       │       │       ├── 2021_05_15_151855_create_activity_files_table.php
│       │       │       ├── 2021_07_28_142453_create_activity_participants_table.php
│       │       │       ├── 2021_11_17_190943_add_location_column_in_activities_table.php
│       │       │       └── 2025_01_17_151632_alter_activities_table.php
│       │       ├── Models/
│       │       │   ├── Activity.php
│       │       │   ├── ActivityProxy.php
│       │       │   ├── File.php
│       │       │   ├── FileProxy.php
│       │       │   ├── Participant.php
│       │       │   └── ParticipantProxy.php
│       │       ├── Providers/
│       │       │   ├── ActivityServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── ActivityRepository.php
│       │       │   ├── FileRepository.php
│       │       │   └── ParticipantRepository.php
│       │       └── Traits/
│       │           └── LogsActivity.php
│       ├── Admin/
│       │   ├── .gitignore
│       │   ├── composer.json
│       │   ├── package.json
│       │   ├── postcss.config.cjs
│       │   ├── src/
│       │   │   ├── Bouncer.php
│       │   │   ├── Config/
│       │   │   │   ├── acl.php
│       │   │   │   ├── attribute_entity_types.php
│       │   │   │   ├── attribute_lookups.php
│       │   │   │   ├── core_config.php
│       │   │   │   └── menu.php
│       │   │   ├── DataGrids/
│       │   │   │   ├── Activity/
│       │   │   │   │   └── ActivityDataGrid.php
│       │   │   │   ├── Contact/
│       │   │   │   │   ├── OrganizationDataGrid.php
│       │   │   │   │   └── PersonDataGrid.php
│       │   │   │   ├── Lead/
│       │   │   │   │   └── LeadDataGrid.php
│       │   │   │   ├── Mail/
│       │   │   │   │   └── EmailDataGrid.php
│       │   │   │   ├── Product/
│       │   │   │   │   └── ProductDataGrid.php
│       │   │   │   ├── Quote/
│       │   │   │   │   └── QuoteDataGrid.php
│       │   │   │   └── Settings/
│       │   │   │       ├── AttributeDataGrid.php
│       │   │   │       ├── DataTransfer/
│       │   │   │       │   └── ImportDataGrid.php
│       │   │   │       ├── EmailTemplateDataGrid.php
│       │   │   │       ├── GroupDataGrid.php
│       │   │   │       ├── Marketing/
│       │   │   │       │   ├── CampaignDatagrid.php
│       │   │   │       │   └── EventDataGrid.php
│       │   │   │       ├── PipelineDataGrid.php
│       │   │   │       ├── RoleDataGrid.php
│       │   │   │       ├── SourceDataGrid.php
│       │   │   │       ├── TagDataGrid.php
│       │   │   │       ├── TypeDataGrid.php
│       │   │   │       ├── UserDataGrid.php
│       │   │   │       ├── WarehouseDataGrid.php
│       │   │   │       ├── WebhookDataGrid.php
│       │   │   │       └── WorkflowDataGrid.php
│       │   │   ├── Database/
│       │   │   │   └── Migrations/
│       │   │   │       ├── 2021_06_07_162808_add_lead_view_permission_column_in_users_table.php
│       │   │   │       └── 2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php
│       │   │   ├── Exceptions/
│       │   │   │   └── Handler.php
│       │   │   ├── Facades/
│       │   │   │   └── Bouncer.php
│       │   │   ├── Helpers/
│       │   │   │   ├── Dashboard.php
│       │   │   │   └── Reporting/
│       │   │   │       ├── AbstractReporting.php
│       │   │   │       ├── Activity.php
│       │   │   │       ├── Lead.php
│       │   │   │       ├── Organization.php
│       │   │   │       ├── Person.php
│       │   │   │       ├── Product.php
│       │   │   │       └── Quote.php
│       │   │   ├── Http/
│       │   │   │   ├── Controllers/
│       │   │   │   │   ├── Activity/
│       │   │   │   │   │   └── ActivityController.php
│       │   │   │   │   ├── Configuration/
│       │   │   │   │   │   └── ConfigurationController.php
│       │   │   │   │   ├── Contact/
│       │   │   │   │   │   ├── OrganizationController.php
│       │   │   │   │   │   └── Persons/
│       │   │   │   │   │       ├── ActivityController.php
│       │   │   │   │   │       ├── PersonController.php
│       │   │   │   │   │       └── TagController.php
│       │   │   │   │   ├── Controller.php
│       │   │   │   │   ├── DashboardController.php
│       │   │   │   │   ├── DataGrid/
│       │   │   │   │   │   └── SavedFilterController.php
│       │   │   │   │   ├── DataGridController.php
│       │   │   │   │   ├── Lead/
│       │   │   │   │   │   ├── ActivityController.php
│       │   │   │   │   │   ├── EmailController.php
│       │   │   │   │   │   ├── LeadController.php
│       │   │   │   │   │   ├── QuoteController.php
│       │   │   │   │   │   └── TagController.php
│       │   │   │   │   ├── Mail/
│       │   │   │   │   │   ├── EmailController.php
│       │   │   │   │   │   └── TagController.php
│       │   │   │   │   ├── Products/
│       │   │   │   │   │   ├── ActivityController.php
│       │   │   │   │   │   ├── ProductController.php
│       │   │   │   │   │   └── TagController.php
│       │   │   │   │   ├── Quote/
│       │   │   │   │   │   └── QuoteController.php
│       │   │   │   │   ├── Settings/
│       │   │   │   │   │   ├── AttributeController.php
│       │   │   │   │   │   ├── DataTransfer/
│       │   │   │   │   │   │   └── ImportController.php
│       │   │   │   │   │   ├── EmailTemplateController.php
│       │   │   │   │   │   ├── GroupController.php
│       │   │   │   │   │   ├── LocationController.php
│       │   │   │   │   │   ├── Marketing/
│       │   │   │   │   │   │   ├── CampaignsController.php
│       │   │   │   │   │   │   └── EventController.php
│       │   │   │   │   │   ├── PipelineController.php
│       │   │   │   │   │   ├── RoleController.php
│       │   │   │   │   │   ├── SettingController.php
│       │   │   │   │   │   ├── SourceController.php
│       │   │   │   │   │   ├── TagController.php
│       │   │   │   │   │   ├── TypeController.php
│       │   │   │   │   │   ├── UserController.php
│       │   │   │   │   │   ├── Warehouse/
│       │   │   │   │   │   │   ├── ActivityController.php
│       │   │   │   │   │   │   ├── TagController.php
│       │   │   │   │   │   │   └── WarehouseController.php
│       │   │   │   │   │   ├── WebFormController.php
│       │   │   │   │   │   ├── WebhookController.php
│       │   │   │   │   │   └── WorkflowController.php
│       │   │   │   │   ├── TinyMCEController.php
│       │   │   │   │   └── User/
│       │   │   │   │       ├── AccountController.php
│       │   │   │   │       ├── ForgotPasswordController.php
│       │   │   │   │       ├── ResetPasswordController.php
│       │   │   │   │       └── SessionController.php
│       │   │   │   ├── Middleware/
│       │   │   │   │   ├── Bouncer.php
│       │   │   │   │   ├── Locale.php
│       │   │   │   │   └── SanitizeUrl.php
│       │   │   │   ├── Requests/
│       │   │   │   │   ├── AttributeForm.php
│       │   │   │   │   ├── ConfigurationForm.php
│       │   │   │   │   ├── LeadForm.php
│       │   │   │   │   ├── MassDestroyRequest.php
│       │   │   │   │   ├── MassUpdateRequest.php
│       │   │   │   │   ├── PipelineForm.php
│       │   │   │   │   └── UserForm.php
│       │   │   │   ├── Resources/
│       │   │   │   │   ├── ActivityFileResource.php
│       │   │   │   │   ├── ActivityParticipantResource.php
│       │   │   │   │   ├── ActivityResource.php
│       │   │   │   │   ├── EmailAttachmentResource.php
│       │   │   │   │   ├── EmailResource.php
│       │   │   │   │   ├── LeadResource.php
│       │   │   │   │   ├── OrganizationResource.php
│       │   │   │   │   ├── PersonResource.php
│       │   │   │   │   ├── PipelineResource.php
│       │   │   │   │   ├── ProductResource.php
│       │   │   │   │   ├── QuoteResource.php
│       │   │   │   │   ├── SourceResource.php
│       │   │   │   │   ├── StageResource.php
│       │   │   │   │   ├── TagResource.php
│       │   │   │   │   ├── TypeResource.php
│       │   │   │   │   └── UserResource.php
│       │   │   │   └── helpers.php
│       │   │   ├── Listeners/
│       │   │   │   ├── Activity.php
│       │   │   │   ├── Lead.php
│       │   │   │   └── Person.php
│       │   │   ├── Notifications/
│       │   │   │   ├── Common.php
│       │   │   │   └── User/
│       │   │   │       ├── Create.php
│       │   │   │       ├── UserResetPassword.php
│       │   │   │       └── UserUpdatePassword.php
│       │   │   ├── Providers/
│       │   │   │   ├── AdminServiceProvider.php
│       │   │   │   ├── EventServiceProvider.php
│       │   │   │   └── ModuleServiceProvider.php
│       │   │   ├── Requests/
│       │   │   │   └── WebhookRequest.php
│       │   │   ├── Resources/
│       │   │   │   ├── assets/
│       │   │   │   │   ├── css/
│       │   │   │   │   │   └── app.css
│       │   │   │   │   ├── js/
│       │   │   │   │   │   ├── app.js
│       │   │   │   │   │   ├── chart.js
│       │   │   │   │   │   ├── directives/
│       │   │   │   │   │   │   ├── debounce.js
│       │   │   │   │   │   │   ├── dompurify.js
│       │   │   │   │   │   │   └── tooltip.js
│       │   │   │   │   │   └── plugins/
│       │   │   │   │   │       ├── admin.js
│       │   │   │   │   │       ├── axios.js
│       │   │   │   │   │       ├── createElement.js
│       │   │   │   │   │       ├── draggable.js
│       │   │   │   │   │       ├── emitter.js
│       │   │   │   │   │       ├── flatpickr.js
│       │   │   │   │   │       ├── vee-validate.js
│       │   │   │   │   │       └── vue-cal.js
│       │   │   │   │   └── locales/
│       │   │   │   │       ├── hi_IN.json
│       │   │   │   │       └── sin.json
│       │   │   │   ├── lang/
│       │   │   │   │   ├── ar/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── en/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── es/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── fa/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── pt_BR/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── tr/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   └── vi/
│       │   │   │   │       └── app.php
│       │   │   │   └── views/
│       │   │   │       ├── activities/
│       │   │   │       │   ├── datagrid/
│       │   │   │       │   │   └── is-done.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── components/
│       │   │   │       │   ├── accordion/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── activities/
│       │   │   │       │   │   ├── actions/
│       │   │   │       │   │   │   ├── activity/
│       │   │   │       │   │   │   │   └── participants.blade.php
│       │   │   │       │   │   │   ├── activity.blade.php
│       │   │   │       │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   ├── mail.blade.php
│       │   │   │       │   │   │   └── note.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── attachments/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── attributes/
│       │   │   │       │   │   ├── edit/
│       │   │   │       │   │   │   ├── address.blade.php
│       │   │   │       │   │   │   ├── boolean.blade.php
│       │   │   │       │   │   │   ├── checkbox.blade.php
│       │   │   │       │   │   │   ├── date.blade.php
│       │   │   │       │   │   │   ├── datetime.blade.php
│       │   │   │       │   │   │   ├── email.blade.php
│       │   │   │       │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   ├── image.blade.php
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   ├── lookup.blade.php
│       │   │   │       │   │   │   ├── multiselect.blade.php
│       │   │   │       │   │   │   ├── phone.blade.php
│       │   │   │       │   │   │   ├── price.blade.php
│       │   │   │       │   │   │   ├── select.blade.php
│       │   │   │       │   │   │   ├── text.blade.php
│       │   │   │       │   │   │   └── textarea.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── view/
│       │   │   │       │   │   │   ├── address.blade.php
│       │   │   │       │   │   │   ├── boolean.blade.php
│       │   │   │       │   │   │   ├── checkbox.blade.php
│       │   │   │       │   │   │   ├── date.blade.php
│       │   │   │       │   │   │   ├── datetime.blade.php
│       │   │   │       │   │   │   ├── email.blade.php
│       │   │   │       │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   ├── image.blade.php
│       │   │   │       │   │   │   ├── lookup.blade.php
│       │   │   │       │   │   │   ├── multiselect.blade.php
│       │   │   │       │   │   │   ├── phone.blade.php
│       │   │   │       │   │   │   ├── price.blade.php
│       │   │   │       │   │   │   ├── select.blade.php
│       │   │   │       │   │   │   ├── text.blade.php
│       │   │   │       │   │   │   └── textarea.blade.php
│       │   │   │       │   │   └── view.blade.php
│       │   │   │       │   ├── avatar/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── breadcrumbs/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── button/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── charts/
│       │   │   │       │   │   ├── bar.blade.php
│       │   │   │       │   │   ├── doughnut.blade.php
│       │   │   │       │   │   └── line.blade.php
│       │   │   │       │   ├── datagrid/
│       │   │   │       │   │   ├── export/
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   └── temp.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── table.blade.php
│       │   │   │       │   │   ├── toolbar/
│       │   │   │       │   │   │   ├── filter.blade.php
│       │   │   │       │   │   │   ├── mass-action.blade.php
│       │   │   │       │   │   │   ├── pagination.blade.php
│       │   │   │       │   │   │   └── search.blade.php
│       │   │   │       │   │   └── toolbar.blade.php
│       │   │   │       │   ├── drawer/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── dropdown/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   └── menu/
│       │   │   │       │   │       └── item.blade.php
│       │   │   │       │   ├── example.blade.php
│       │   │   │       │   ├── flash-group/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   └── item.blade.php
│       │   │   │       │   ├── flat-picker/
│       │   │   │       │   │   ├── date.blade.php
│       │   │   │       │   │   └── datetime.blade.php
│       │   │   │       │   ├── form/
│       │   │   │       │   │   ├── control-group/
│       │   │   │       │   │   │   ├── control.blade.php
│       │   │   │       │   │   │   ├── controls/
│       │   │   │       │   │   │   │   ├── inline/
│       │   │   │       │   │   │   │   │   ├── address.blade.php
│       │   │   │       │   │   │   │   │   ├── boolean.blade.php
│       │   │   │       │   │   │   │   │   ├── date.blade.php
│       │   │   │       │   │   │   │   │   ├── datetime.blade.php
│       │   │   │       │   │   │   │   │   ├── email.blade.php
│       │   │   │       │   │   │   │   │   ├── file.blade.php
│       │   │   │       │   │   │   │   │   ├── image.blade.php
│       │   │   │       │   │   │   │   │   ├── lookup.blade.php
│       │   │   │       │   │   │   │   │   ├── multiselect.blade.php
│       │   │   │       │   │   │   │   │   ├── phone.blade.php
│       │   │   │       │   │   │   │   │   ├── select.blade.php
│       │   │   │       │   │   │   │   │   └── text.blade.php
│       │   │   │       │   │   │   │   └── tags.blade.php
│       │   │   │       │   │   │   ├── error.blade.php
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   └── label.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── layouts/
│       │   │   │       │   │   ├── anonymous.blade.php
│       │   │   │       │   │   ├── header/
│       │   │   │       │   │   │   ├── desktop/
│       │   │   │       │   │   │   │   └── mega-search.blade.php
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   ├── mobile/
│       │   │   │       │   │   │   │   └── mega-search.blade.php
│       │   │   │       │   │   │   └── quick-creation.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── sidebar/
│       │   │   │       │   │   │   ├── desktop/
│       │   │   │       │   │   │   │   └── index.blade.php
│       │   │   │       │   │   │   └── mobile/
│       │   │   │       │   │   │       └── index.blade.php
│       │   │   │       │   │   └── tabs.blade.php
│       │   │   │       │   ├── lookup/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── media/
│       │   │   │       │   │   ├── images.blade.php
│       │   │   │       │   │   └── videos.blade.php
│       │   │   │       │   ├── modal/
│       │   │   │       │   │   ├── confirm.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── shimmer/
│       │   │   │       │   │   ├── accordion/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── activities/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── charts/
│       │   │   │       │   │   │   └── bar.blade.php
│       │   │   │       │   │   ├── common/
│       │   │   │       │   │   │   └── address.blade.php
│       │   │   │       │   │   ├── dashboard/
│       │   │   │       │   │   │   └── index/
│       │   │   │       │   │   │       ├── open-leads-by-states.blade.php
│       │   │   │       │   │   │       ├── over-all.blade.php
│       │   │   │       │   │   │       ├── revenue-by-sources.blade.php
│       │   │   │       │   │   │       ├── revenue-by-types.blade.php
│       │   │   │       │   │   │       ├── revenue.blade.php
│       │   │   │       │   │   │       ├── top-persons.blade.php
│       │   │   │       │   │   │       ├── top-selling-products.blade.php
│       │   │   │       │   │   │       └── total-leads.blade.php
│       │   │   │       │   │   ├── datagrid/
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   ├── table/
│       │   │   │       │   │   │   │   ├── body.blade.php
│       │   │   │       │   │   │   │   └── head.blade.php
│       │   │   │       │   │   │   ├── toolbar/
│       │   │   │       │   │   │   │   ├── filter.blade.php
│       │   │   │       │   │   │   │   ├── pagination.blade.php
│       │   │   │       │   │   │   │   └── search.blade.php
│       │   │   │       │   │   │   └── toolbar.blade.php
│       │   │   │       │   │   ├── header/
│       │   │   │       │   │   │   └── mega-search/
│       │   │   │       │   │   │       ├── configurations.blade.php
│       │   │   │       │   │   │       ├── leads.blade.php
│       │   │   │       │   │   │       ├── persons.blade.php
│       │   │   │       │   │   │       ├── products.blade.php
│       │   │   │       │   │   │       ├── quotes.blade.php
│       │   │   │       │   │   │       └── settings.blade.php
│       │   │   │       │   │   ├── image/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── leads/
│       │   │   │       │   │   │   ├── datagrid.blade.php
│       │   │   │       │   │   │   ├── index/
│       │   │   │       │   │   │   │   ├── kanban/
│       │   │   │       │   │   │   │   │   └── toolbar.blade.php
│       │   │   │       │   │   │   │   └── kanban.blade.php
│       │   │   │       │   │   │   └── view/
│       │   │   │       │   │   │       ├── mail/
│       │   │   │       │   │   │       │   └── index.blade.php
│       │   │   │       │   │   │       └── stages.blade.php
│       │   │   │       │   │   ├── mail/
│       │   │   │       │   │   │   └── datagrid/
│       │   │   │       │   │   │       ├── index.blade.php
│       │   │   │       │   │   │       └── table/
│       │   │   │       │   │   │           ├── body.blade.php
│       │   │   │       │   │   │           └── head.blade.php
│       │   │   │       │   │   ├── person/
│       │   │   │       │   │   │   └── view/
│       │   │   │       │   │   │       ├── activities/
│       │   │   │       │   │   │       │   └── index.blade.php
│       │   │   │       │   │   │       ├── stages.blade.php
│       │   │   │       │   │   │       └── tags.blade.php
│       │   │   │       │   │   ├── pipelines/
│       │   │   │       │   │   │   └── kanban.blade.php
│       │   │   │       │   │   ├── quotes/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── settings/
│       │   │   │       │   │   │   ├── attributes.blade.php
│       │   │   │       │   │   │   └── web-forms/
│       │   │   │       │   │   │       ├── body.blade.php
│       │   │   │       │   │   │       ├── head.blade.php
│       │   │   │       │   │   │       └── index.blade.php
│       │   │   │       │   │   ├── tabs/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── tags/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   ├── tinymce/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   └── tree/
│       │   │   │       │   │       └── index.blade.php
│       │   │   │       │   ├── spinner/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── table/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── tbody/
│       │   │   │       │   │   │   ├── index.blade.php
│       │   │   │       │   │   │   └── tr.blade.php
│       │   │   │       │   │   ├── td.blade.php
│       │   │   │       │   │   ├── th.blade.php
│       │   │   │       │   │   └── thead/
│       │   │   │       │   │       ├── index.blade.php
│       │   │   │       │   │       └── tr.blade.php
│       │   │   │       │   ├── tabs/
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   └── item.blade.php
│       │   │   │       │   ├── tags/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── tinymce/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── tree/
│       │   │   │       │       ├── checkbox.blade.php
│       │   │   │       │       ├── radio.blade.php
│       │   │   │       │       └── view.blade.php
│       │   │   │       ├── configuration/
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── field-type.blade.php
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── contacts/
│       │   │   │       │   ├── organizations/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── persons/
│       │   │   │       │       ├── create.blade.php
│       │   │   │       │       ├── edit.blade.php
│       │   │   │       │       ├── index.blade.php
│       │   │   │       │       ├── view/
│       │   │   │       │       │   ├── attributes.blade.php
│       │   │   │       │       │   └── organization.blade.php
│       │   │   │       │       └── view.blade.php
│       │   │   │       ├── dashboard/
│       │   │   │       │   ├── index/
│       │   │   │       │   │   ├── open-leads-by-states.blade.php
│       │   │   │       │   │   ├── over-all.blade.php
│       │   │   │       │   │   ├── revenue-by-sources.blade.php
│       │   │   │       │   │   ├── revenue-by-types.blade.php
│       │   │   │       │   │   ├── revenue.blade.php
│       │   │   │       │   │   ├── top-persons.blade.php
│       │   │   │       │   │   ├── top-selling-products.blade.php
│       │   │   │       │   │   └── total-leads.blade.php
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── emails/
│       │   │   │       │   ├── common/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── layout.blade.php
│       │   │   │       │   └── users/
│       │   │   │       │       ├── create.blade.php
│       │   │   │       │       └── forget-password.blade.php
│       │   │   │       ├── errors/
│       │   │   │       │   └── index.blade.php
│       │   │   │       ├── leads/
│       │   │   │       │   ├── common/
│       │   │   │       │   │   ├── contact.blade.php
│       │   │   │       │   │   └── products.blade.php
│       │   │   │       │   ├── create.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── index/
│       │   │   │       │   │   ├── kanban/
│       │   │   │       │   │   │   ├── filter.blade.php
│       │   │   │       │   │   │   ├── search.blade.php
│       │   │   │       │   │   │   └── toolbar.blade.php
│       │   │   │       │   │   ├── kanban.blade.php
│       │   │   │       │   │   ├── table.blade.php
│       │   │   │       │   │   ├── upload.blade.php
│       │   │   │       │   │   └── view-switcher.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   ├── view/
│       │   │   │       │   │   ├── attributes.blade.php
│       │   │   │       │   │   ├── person.blade.php
│       │   │   │       │   │   ├── products.blade.php
│       │   │   │       │   │   ├── quotes.blade.php
│       │   │   │       │   │   └── stages.blade.php
│       │   │   │       │   └── view.blade.php
│       │   │   │       ├── mail/
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   └── view.blade.php
│       │   │   │       ├── partials/
│       │   │   │       │   └── breadcrumbs.blade.php
│       │   │   │       ├── products/
│       │   │   │       │   ├── create.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   ├── view/
│       │   │   │       │   │   ├── attributes.blade.php
│       │   │   │       │   │   └── inventory.blade.php
│       │   │   │       │   └── view.blade.php
│       │   │   │       ├── quotes/
│       │   │   │       │   ├── create.blade.php
│       │   │   │       │   ├── edit.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   └── pdf.blade.php
│       │   │   │       ├── sessions/
│       │   │   │       │   ├── forgot-password.blade.php
│       │   │   │       │   ├── login.blade.php
│       │   │   │       │   └── reset-password.blade.php
│       │   │   │       ├── settings/
│       │   │   │       │   ├── attributes/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── data-transfer/
│       │   │   │       │   │   └── imports/
│       │   │   │       │   │       ├── create.blade.php
│       │   │   │       │   │       ├── edit.blade.php
│       │   │   │       │   │       ├── import.blade.php
│       │   │   │       │   │       └── index.blade.php
│       │   │   │       │   ├── email-templates/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── groups/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── index.blade.php
│       │   │   │       │   ├── marketing/
│       │   │   │       │   │   ├── campaigns/
│       │   │   │       │   │   │   └── index.blade.php
│       │   │   │       │   │   └── events/
│       │   │   │       │   │       └── index.blade.php
│       │   │   │       │   ├── pipelines/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── roles/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── sources/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── tags/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── types/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── users/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── warehouses/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   ├── index.blade.php
│       │   │   │       │   │   ├── view/
│       │   │   │       │   │   │   ├── contact-information.blade.php
│       │   │   │       │   │   │   ├── general-information.blade.php
│       │   │   │       │   │   │   └── locations.blade.php
│       │   │   │       │   │   └── view.blade.php
│       │   │   │       │   ├── web-forms/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   ├── webhook/
│       │   │   │       │   │   ├── create.blade.php
│       │   │   │       │   │   ├── edit.blade.php
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── workflows/
│       │   │   │       │       ├── create.blade.php
│       │   │   │       │       ├── edit.blade.php
│       │   │   │       │       └── index.blade.php
│       │   │   │       └── user/
│       │   │   │           └── account/
│       │   │   │               └── edit.blade.php
│       │   │   ├── Routes/
│       │   │   │   ├── Admin/
│       │   │   │   │   ├── activities-routes.php
│       │   │   │   │   ├── auth-routes.php
│       │   │   │   │   ├── configuration-routes.php
│       │   │   │   │   ├── contacts-routes.php
│       │   │   │   │   ├── leads-routes.php
│       │   │   │   │   ├── mail-routes.php
│       │   │   │   │   ├── products-routes.php
│       │   │   │   │   ├── quote-routes.php
│       │   │   │   │   ├── rest-routes.php
│       │   │   │   │   ├── settings-routes.php
│       │   │   │   │   └── web.php
│       │   │   │   └── Front/
│       │   │   │       └── web.php
│       │   │   └── Traits/
│       │   │       └── ProvideDropdownOptions.php
│       │   ├── tailwind.config.js
│       │   ├── tests/
│       │   │   └── e2e-pw/
│       │   │       ├── .gitignore
│       │   │       ├── playwright.config.ts
│       │   │       ├── setup.ts
│       │   │       ├── tests/
│       │   │       │   ├── auth.spec.ts
│       │   │       │   ├── contacts/
│       │   │       │   │   ├── organization.spec.ts
│       │   │       │   │   └── person.spec.ts
│       │   │       │   ├── lang/
│       │   │       │   │   └── lang.spec.ts
│       │   │       │   ├── lead.spec.ts
│       │   │       │   ├── mail/
│       │   │       │   │   ├── draft.spec.ts
│       │   │       │   │   ├── inbox.spec.ts
│       │   │       │   │   ├── outbox.spec.ts
│       │   │       │   │   ├── sent.spec.ts
│       │   │       │   │   └── trash.spec.ts
│       │   │       │   ├── product.spec.ts
│       │   │       │   ├── quotes.spec.ts
│       │   │       │   └── settings/
│       │   │       │       ├── automation/
│       │   │       │       │   └── events.spec.ts
│       │   │       │       ├── lead/
│       │   │       │       │   └── types.spec.ts
│       │   │       │       ├── user/
│       │   │       │       │   ├── groups.spec.ts
│       │   │       │       │   └── users.spec.ts
│       │   │       │       └── warehouses/
│       │   │       │           └── warehouse.spec.ts
│       │   │       └── utils/
│       │   │           ├── components.ts
│       │   │           └── faker.ts
│       │   └── vite.config.js
│       ├── Attribute/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Config/
│       │       │   └── attribute_lookups.php
│       │       ├── Contracts/
│       │       │   ├── Attribute.php
│       │       │   ├── AttributeOption.php
│       │       │   └── AttributeValue.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_02_080709_create_attributes_table.php
│       │       │       ├── 2021_04_02_080837_create_attribute_options_table.php
│       │       │       ├── 2021_04_06_122751_create_attribute_values_table.php
│       │       │       └── 2025_07_02_191710_alter_attribute_values_table.php
│       │       ├── Models/
│       │       │   ├── Attribute.php
│       │       │   ├── AttributeOption.php
│       │       │   ├── AttributeOptionProxy.php
│       │       │   ├── AttributeProxy.php
│       │       │   ├── AttributeValue.php
│       │       │   └── AttributeValueProxy.php
│       │       ├── Providers/
│       │       │   ├── AttributeServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── AttributeOptionRepository.php
│       │       │   ├── AttributeRepository.php
│       │       │   └── AttributeValueRepository.php
│       │       └── Traits/
│       │           └── CustomAttribute.php
│       ├── Automation/
│       │   └── src/
│       │       ├── Config/
│       │       │   └── workflows.php
│       │       ├── Contracts/
│       │       │   ├── Webhook.php
│       │       │   └── Workflow.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_08_26_133538_create_workflows_table.php
│       │       │       └── 2024_07_24_150821_create_webhooks_table.php
│       │       ├── Helpers/
│       │       │   ├── Entity/
│       │       │   │   ├── AbstractEntity.php
│       │       │   │   ├── Activity.php
│       │       │   │   ├── Lead.php
│       │       │   │   ├── Person.php
│       │       │   │   └── Quote.php
│       │       │   ├── Entity.php
│       │       │   └── Validator.php
│       │       ├── Listeners/
│       │       │   └── Entity.php
│       │       ├── Models/
│       │       │   ├── Webhook.php
│       │       │   ├── WebhookProxy.php
│       │       │   ├── Workflow.php
│       │       │   └── WorkflowProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── WorkflowServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── WebhookRepository.php
│       │       │   └── WorkflowRepository.php
│       │       └── Services/
│       │           └── WebhookService.php
│       ├── Contact/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Organization.php
│       │       │   └── Person.php
│       │       ├── Database/
│       │       │   ├── Factories/
│       │       │   │   └── PersonFactory.php
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_09_051326_create_organizations_table.php
│       │       │       ├── 2021_04_09_065617_create_persons_table.php
│       │       │       ├── 2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php
│       │       │       ├── 2024_07_31_092951_add_job_title_in_persons_table.php
│       │       │       ├── 2024_08_06_145943_create_person_tags_table.php
│       │       │       ├── 2024_08_06_161212_create_person_activities_table.php
│       │       │       ├── 2024_08_14_102116_add_user_id_column_in_persons_table.php
│       │       │       ├── 2024_08_14_102136_add_user_id_column_in_organizations_table.php
│       │       │       ├── 2024_09_09_112201_add_unique_id_to_person_table.php
│       │       │       └── 2025_03_19_132236_update_organization_id_column_in_persons_table.php
│       │       ├── Models/
│       │       │   ├── Organization.php
│       │       │   ├── OrganizationProxy.php
│       │       │   ├── Person.php
│       │       │   └── PersonProxy.php
│       │       ├── Providers/
│       │       │   ├── ContactServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           ├── OrganizationRepository.php
│       │           └── PersonRepository.php
│       ├── Core/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Acl/
│       │       │   └── AclItem.php
│       │       ├── Acl.php
│       │       ├── Config/
│       │       │   ├── concord.php
│       │       │   ├── cors.php
│       │       │   └── sanctum.php
│       │       ├── Console/
│       │       │   └── Commands/
│       │       │       └── Version.php
│       │       ├── Contracts/
│       │       │   ├── CoreConfig.php
│       │       │   ├── Country.php
│       │       │   ├── CountryState.php
│       │       │   └── Validations/
│       │       │       ├── Code.php
│       │       │       └── Decimal.php
│       │       ├── Core.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_03_12_060658_create_core_config_table.php
│       │       │       ├── 2021_04_12_173232_create_countries_table.php
│       │       │       ├── 2021_04_12_173344_create_country_states_table.php
│       │       │       └── 2025_01_29_133500_update_text_column_type_in_core_config_table.php
│       │       ├── Eloquent/
│       │       │   ├── Repository.php
│       │       │   └── TranslatableModel.php
│       │       ├── Exceptions/
│       │       │   └── ViterNotFound.php
│       │       ├── Facades/
│       │       │   ├── Acl.php
│       │       │   ├── Core.php
│       │       │   ├── Menu.php
│       │       │   └── SystemConfig.php
│       │       ├── Helpers/
│       │       │   └── Helper.php
│       │       ├── Http/
│       │       │   └── helpers.php
│       │       ├── Menu/
│       │       │   └── MenuItem.php
│       │       ├── Menu.php
│       │       ├── Models/
│       │       │   ├── CoreConfig.php
│       │       │   ├── CoreConfigProxy.php
│       │       │   ├── Country.php
│       │       │   ├── CountryProxy.php
│       │       │   ├── CountryState.php
│       │       │   └── CountryStateProxy.php
│       │       ├── Providers/
│       │       │   ├── BaseModuleServiceProvider.php
│       │       │   ├── CoreServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── CoreConfigRepository.php
│       │       │   ├── CountryRepository.php
│       │       │   └── CountryStateRepository.php
│       │       ├── Resources/
│       │       │   └── lang/
│       │       │       ├── ar/
│       │       │       │   └── app.php
│       │       │       ├── en/
│       │       │       │   └── app.php
│       │       │       ├── es/
│       │       │       │   └── app.php
│       │       │       ├── fa/
│       │       │       │   └── app.php
│       │       │       ├── pt_BR/
│       │       │       │   └── app.php
│       │       │       ├── tr/
│       │       │       │   └── app.php
│       │       │       └── vi/
│       │       │           └── app.php
│       │       ├── SystemConfig/
│       │       │   ├── Item.php
│       │       │   └── ItemField.php
│       │       ├── SystemConfig.php
│       │       ├── Traits/
│       │       │   ├── PDFHandler.php
│       │       │   └── Sanitizer.php
│       │       ├── ViewRenderEventManager.php
│       │       └── Vite.php
│       ├── DataGrid/
│       │   └── src/
│       │       ├── Action.php
│       │       ├── Column.php
│       │       ├── ColumnTypes/
│       │       │   ├── Aggregate.php
│       │       │   ├── Boolean.php
│       │       │   ├── Date.php
│       │       │   ├── Datetime.php
│       │       │   ├── Decimal.php
│       │       │   ├── Integer.php
│       │       │   └── Text.php
│       │       ├── Contracts/
│       │       │   └── SavedFilter.php
│       │       ├── DataGrid.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       └── 2024_05_10_152848_create_saved_filters_table.php
│       │       ├── Enums/
│       │       │   ├── ColumnTypeEnum.php
│       │       │   ├── DateRangeOptionEnum.php
│       │       │   └── FilterTypeEnum.php
│       │       ├── Exceptions/
│       │       │   ├── InvalidColumnException.php
│       │       │   ├── InvalidColumnTypeException.php
│       │       │   └── InvalidDataGridException.php
│       │       ├── Exports/
│       │       │   └── DataGridExport.php
│       │       ├── Http/
│       │       │   └── helpers.php
│       │       ├── MassAction.php
│       │       ├── Models/
│       │       │   ├── SavedFilter.php
│       │       │   └── SavedFilterProxy.php
│       │       ├── Providers/
│       │       │   ├── DataGridServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           └── SavedFilterRepository.php
│       ├── DataTransfer/
│       │   └── src/
│       │       ├── Config/
│       │       │   └── importers.php
│       │       ├── Contracts/
│       │       │   ├── Import.php
│       │       │   └── ImportBatch.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2024_01_11_154640_create_imports_table.php
│       │       │       └── 2024_01_11_154741_create_import_batches_table.php
│       │       ├── Helpers/
│       │       │   ├── Error.php
│       │       │   ├── Import.php
│       │       │   ├── Importers/
│       │       │   │   ├── AbstractImporter.php
│       │       │   │   ├── Leads/
│       │       │   │   │   ├── Importer.php
│       │       │   │   │   └── Storage.php
│       │       │   │   ├── Persons/
│       │       │   │   │   ├── Importer.php
│       │       │   │   │   └── Storage.php
│       │       │   │   └── Products/
│       │       │   │       ├── Importer.php
│       │       │   │       └── SKUStorage.php
│       │       │   └── Sources/
│       │       │       ├── AbstractSource.php
│       │       │       ├── CSV.php
│       │       │       └── Excel.php
│       │       ├── Jobs/
│       │       │   └── Import/
│       │       │       ├── Completed.php
│       │       │       ├── ImportBatch.php
│       │       │       ├── IndexBatch.php
│       │       │       ├── Indexing.php
│       │       │       ├── LinkBatch.php
│       │       │       └── Linking.php
│       │       ├── Models/
│       │       │   ├── Import.php
│       │       │   ├── ImportBatch.php
│       │       │   ├── ImportBatchProxy.php
│       │       │   └── ImportProxy.php
│       │       ├── Providers/
│       │       │   ├── DataTransferServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── ImportBatchRepository.php
│       │       │   └── ImportRepository.php
│       │       └── Resources/
│       │           └── lang/
│       │               ├── ar/
│       │               │   └── ar.php
│       │               ├── en/
│       │               │   └── app.php
│       │               ├── es/
│       │               │   └── app.php
│       │               ├── fa/
│       │               │   └── app.php
│       │               ├── pt_BR/
│       │               │   └── app.php
│       │               └── tr/
│       │                   └── app.php
│       ├── Email/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Console/
│       │       │   └── Commands/
│       │       │       └── ProcessInboundEmails.php
│       │       ├── Contracts/
│       │       │   ├── Attachment.php
│       │       │   └── Email.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_05_24_075618_create_emails_table.php
│       │       │       ├── 2021_05_25_072700_create_email_attachments_table.php
│       │       │       └── 2024_08_27_091619_create_email_tags_table.php
│       │       ├── Enums/
│       │       │   └── SupportedFolderEnum.php
│       │       ├── Helpers/
│       │       │   ├── Attachment.php
│       │       │   ├── Charset.php
│       │       │   ├── Contracts/
│       │       │   │   └── CharsetManager.php
│       │       │   ├── HtmlFilter.php
│       │       │   └── Parser.php
│       │       ├── InboundEmailProcessor/
│       │       │   ├── Contracts/
│       │       │   │   └── InboundEmailProcessor.php
│       │       │   ├── SendgridEmailProcessor.php
│       │       │   └── WebklexImapEmailProcessor.php
│       │       ├── Mails/
│       │       │   └── Email.php
│       │       ├── Models/
│       │       │   ├── Attachment.php
│       │       │   ├── AttachmentProxy.php
│       │       │   ├── Email.php
│       │       │   └── EmailProxy.php
│       │       ├── Providers/
│       │       │   ├── EmailServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           ├── AttachmentRepository.php
│       │           └── EmailRepository.php
│       ├── EmailTemplate/
│       │   └── src/
│       │       ├── Contracts/
│       │       │   └── EmailTemplate.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_09_03_172713_create_email_templates_table.php
│       │       │       └── 2025_07_09_133553_alter_email_templates_table.php
│       │       ├── Models/
│       │       │   ├── EmailTemplate.php
│       │       │   └── EmailTemplateProxy.php
│       │       ├── Providers/
│       │       │   ├── EmailTemplateServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           └── EmailTemplateRepository.php
│       ├── Installer/
│       │   ├── .gitignore
│       │   ├── composer.json
│       │   ├── package.json
│       │   ├── postcss.config.js
│       │   ├── src/
│       │   │   ├── Console/
│       │   │   │   └── Commands/
│       │   │   │       └── Installer.php
│       │   │   ├── Data/
│       │   │   │   ├── countries.json
│       │   │   │   └── states.json
│       │   │   ├── Database/
│       │   │   │   ├── Migrations/
│       │   │   │   │   ├── 2024_06_24_174241_insert_warehouse_attributes_in_attributes_table.php
│       │   │   │   │   ├── 2024_07_31_093603_add_organization_sales_owner_attribute_in_attributes_table.php
│       │   │   │   │   ├── 2024_07_31_093605_add_person_job_title_attribute_in_attributes_table.php
│       │   │   │   │   ├── 2024_07_31_093605_add_person_sales_owner_attribute_in_attributes_table.php
│       │   │   │   │   └── 2024_08_21_153011_add_leads_stage_and_pipeline_attributes.php
│       │   │   │   └── Seeders/
│       │   │   │       ├── Attribute/
│       │   │   │       │   ├── AttributeSeeder.php
│       │   │   │       │   └── DatabaseSeeder.php
│       │   │   │       ├── Core/
│       │   │   │       │   ├── CountriesSeeder.php
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   └── StatesSeeder.php
│       │   │   │       ├── DatabaseSeeder.php
│       │   │   │       ├── EmailTemplate/
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   └── EmailTemplateSeeder.php
│       │   │   │       ├── Lead/
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   ├── PipelineSeeder.php
│       │   │   │       │   ├── SourceSeeder.php
│       │   │   │       │   └── TypeSeeder.php
│       │   │   │       ├── User/
│       │   │   │       │   ├── DatabaseSeeder.php
│       │   │   │       │   ├── RoleSeeder.php
│       │   │   │       │   └── UserSeeder.php
│       │   │   │       └── Workflow/
│       │   │   │           ├── DatabaseSeeder.php
│       │   │   │           └── WorkflowSeeder.php
│       │   │   ├── Events/
│       │   │   │   └── ComposerEvents.php
│       │   │   ├── Helpers/
│       │   │   │   ├── DatabaseManager.php
│       │   │   │   ├── EnvironmentManager.php
│       │   │   │   └── ServerRequirements.php
│       │   │   ├── Http/
│       │   │   │   ├── Controllers/
│       │   │   │   │   ├── Controller.php
│       │   │   │   │   ├── ImageCacheController.php
│       │   │   │   │   └── InstallerController.php
│       │   │   │   └── Middleware/
│       │   │   │       ├── CanInstall.php
│       │   │   │       └── Locale.php
│       │   │   ├── Listeners/
│       │   │   │   └── Installer.php
│       │   │   ├── Providers/
│       │   │   │   └── InstallerServiceProvider.php
│       │   │   ├── Resources/
│       │   │   │   ├── assets/
│       │   │   │   │   ├── css/
│       │   │   │   │   │   └── app.css
│       │   │   │   │   └── js/
│       │   │   │   │       ├── app.js
│       │   │   │   │       └── plugins/
│       │   │   │   │           └── axios.js
│       │   │   │   ├── lang/
│       │   │   │   │   ├── ar/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── en/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── es/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── fa/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── pt_BR/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   ├── tr/
│       │   │   │   │   │   └── app.php
│       │   │   │   │   └── vi/
│       │   │   │   │       └── app.php
│       │   │   │   └── views/
│       │   │   │       ├── components/
│       │   │   │       │   ├── button/
│       │   │   │       │   │   └── index.blade.php
│       │   │   │       │   └── form/
│       │   │   │       │       ├── control-group/
│       │   │   │       │       │   ├── control.blade.php
│       │   │   │       │       │   ├── error.blade.php
│       │   │   │       │       │   ├── index.blade.php
│       │   │   │       │       │   └── label.blade.php
│       │   │   │       │       └── index.blade.php
│       │   │   │       └── installer/
│       │   │   │           └── index.blade.php
│       │   │   ├── Routes/
│       │   │   │   └── web.php
│       │   │   └── Templates/
│       │   │       └── on-boarding.php
│       │   ├── tailwind.config.js
│       │   └── vite.config.js
│       ├── Lead/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Lead.php
│       │       │   ├── Pipeline.php
│       │       │   ├── Product.php
│       │       │   ├── Source.php
│       │       │   ├── Stage.php
│       │       │   └── Type.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_21_172825_create_lead_sources_table.php
│       │       │       ├── 2021_04_21_172847_create_lead_types_table.php
│       │       │       ├── 2021_04_22_153258_create_lead_stages_table.php
│       │       │       ├── 2021_04_22_155706_create_lead_pipelines_table.php
│       │       │       ├── 2021_04_22_155838_create_lead_pipeline_stages_table.php
│       │       │       ├── 2021_04_22_164215_create_leads_table.php
│       │       │       ├── 2021_04_22_171805_create_lead_products_table.php
│       │       │       ├── 2021_05_12_150329_create_lead_activities_table.php
│       │       │       ├── 2021_05_20_141240_create_lead_tags_table.php
│       │       │       ├── 2021_07_02_201822_create_lead_quotes_table.php
│       │       │       ├── 2021_09_23_221138_add_column_expected_close_date_in_leads_table.php
│       │       │       ├── 2021_09_30_135857_add_column_rotten_days_in_lead_pipelines_table.php
│       │       │       ├── 2021_09_30_154222_alter_lead_pipeline_stages_table.php
│       │       │       ├── 2021_09_30_161722_alter_leads_table.php
│       │       │       ├── 2021_09_30_183825_change_user_id_to_nullable_in_leads_table.php
│       │       │       ├── 2021_11_11_180804_change_lead_pipeline_stage_id_constraint_in_leads_table.php
│       │       │       ├── 2024_11_29_120302_modify_foreign_keys_in_leads_table.php
│       │       │       └── 2025_07_01_133612_alter_lead_pipelines_table.php
│       │       ├── Helpers/
│       │       │   └── MagicAI.php
│       │       ├── Models/
│       │       │   ├── Lead.php
│       │       │   ├── LeadProxy.php
│       │       │   ├── Pipeline.php
│       │       │   ├── PipelineProxy.php
│       │       │   ├── Product.php
│       │       │   ├── ProductProxy.php
│       │       │   ├── Source.php
│       │       │   ├── SourceProxy.php
│       │       │   ├── Stage.php
│       │       │   ├── StageProxy.php
│       │       │   ├── Type.php
│       │       │   └── TypeProxy.php
│       │       ├── Providers/
│       │       │   ├── LeadServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       ├── Repositories/
│       │       │   ├── LeadRepository.php
│       │       │   ├── PipelineRepository.php
│       │       │   ├── ProductRepository.php
│       │       │   ├── SourceRepository.php
│       │       │   ├── StageRepository.php
│       │       │   └── TypeRepository.php
│       │       └── Services/
│       │           └── MagicAIService.php
│       ├── Marketing/
│       │   └── src/
│       │       ├── Console/
│       │       │   └── Commands/
│       │       │       └── CampaignCommand.php
│       │       ├── Contracts/
│       │       │   ├── Campaign.php
│       │       │   └── Event.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2024_10_29_044744_create_marketing_events_table.php
│       │       │       └── 2024_11_04_122500_create_marketing_campaigns_table.php
│       │       ├── Helpers/
│       │       │   └── Campaign.php
│       │       ├── Mail/
│       │       │   └── CampaignMail.php
│       │       ├── Models/
│       │       │   ├── Campaign.php
│       │       │   ├── CampaignProxy.php
│       │       │   ├── Event.php
│       │       │   └── EventProxy.php
│       │       ├── Providers/
│       │       │   ├── MarketingServiceProvider.php
│       │       │   └── ModuleServiceProvider.php
│       │       └── Repositories/
│       │           ├── CampaignRepository.php
│       │           └── EventRepository.php
│       ├── Product/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Product.php
│       │       │   └── ProductInventory.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_04_09_065617_create_products_table.php
│       │       │       ├── 2024_06_28_154009_create_product_inventories_table.php
│       │       │       ├── 2024_08_10_150329_create_product_activities_table.php
│       │       │       ├── 2024_08_10_150340_create_product_tags_table.php
│       │       │       └── 2024_09_06_065808_alter_product_inventories_table.php
│       │       ├── Models/
│       │       │   ├── Product.php
│       │       │   ├── ProductInventory.php
│       │       │   ├── ProductInventoryProxy.php
│       │       │   └── ProductProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── ProductServiceProvider.php
│       │       └── Repositories/
│       │           ├── ProductInventoryRepository.php
│       │           └── ProductRepository.php
│       ├── Quote/
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Quote.php
│       │       │   └── QuoteItem.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2021_07_01_230345_create_quotes_table.php
│       │       │       └── 2021_07_01_231317_create_quote_items_table.php
│       │       ├── Models/
│       │       │   ├── Quote.php
│       │       │   ├── QuoteItem.php
│       │       │   ├── QuoteItemProxy.php
│       │       │   └── QuoteProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── QuoteServiceProvider.php
│       │       └── Repositories/
│       │           ├── QuoteItemRepository.php
│       │           └── QuoteRepository.php
│       ├── Tag/
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   └── Tag.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       └── 2021_05_20_141230_create_tags_table.php
│       │       ├── Models/
│       │       │   ├── Tag.php
│       │       │   └── TagProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── TagServiceProvider.php
│       │       └── Repositories/
│       │           └── TagRepository.php
│       ├── User/
│       │   ├── .gitignore
│       │   ├── composer.json
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Group.php
│       │       │   ├── Role.php
│       │       │   └── User.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── .gitkeep
│       │       │       ├── 2021_03_12_074578_create_groups_table.php
│       │       │       ├── 2021_03_12_074597_create_roles_table.php
│       │       │       ├── 2021_03_12_074857_create_users_table.php
│       │       │       ├── 2021_03_12_074867_create_user_groups_table.php
│       │       │       ├── 2021_03_12_074957_create_user_password_resets_table.php
│       │       │       ├── 2021_09_22_194622_add_unique_index_to_name_in_groups_table.php
│       │       │       └── 2021_11_12_171510_add_image_column_in_users_table.php
│       │       ├── Models/
│       │       │   ├── Group.php
│       │       │   ├── GroupProxy.php
│       │       │   ├── Role.php
│       │       │   ├── RoleProxy.php
│       │       │   ├── User.php
│       │       │   └── UserProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── UserServiceProvider.php
│       │       └── Repositories/
│       │           ├── GroupRepository.php
│       │           ├── RoleRepository.php
│       │           └── UserRepository.php
│       ├── Warehouse/
│       │   └── src/
│       │       ├── Contracts/
│       │       │   ├── Location.php
│       │       │   └── Warehouse.php
│       │       ├── Database/
│       │       │   └── Migrations/
│       │       │       ├── 2024_06_21_160707_create_warehouses_table.php
│       │       │       ├── 2024_06_21_160735_create_warehouse_locations_table.php
│       │       │       ├── 2024_08_10_100329_create_warehouse_activities_table.php
│       │       │       └── 2024_08_10_100340_create_warehouse_tags_table.php
│       │       ├── Models/
│       │       │   ├── Location.php
│       │       │   ├── LocationProxy.php
│       │       │   ├── Warehouse.php
│       │       │   └── WarehouseProxy.php
│       │       ├── Providers/
│       │       │   ├── ModuleServiceProvider.php
│       │       │   └── WarehouseServiceProvider.php
│       │       └── Repositories/
│       │           ├── LocationRepository.php
│       │           └── WarehouseRepository.php
│       └── WebForm/
│           ├── .gitignore
│           ├── composer.json
│           ├── package.json
│           ├── postcss.config.js
│           ├── src/
│           │   ├── Config/
│           │   │   ├── acl.php
│           │   │   └── menu.php
│           │   ├── Contracts/
│           │   │   ├── WebForm.php
│           │   │   └── WebFormAttribute.php
│           │   ├── DataGrids/
│           │   │   └── WebFormDataGrid.php
│           │   ├── Database/
│           │   │   └── Migrations/
│           │   │       ├── 2021_12_14_213049_create_web_forms_table.php
│           │   │       └── 2021_12_14_214923_create_web_form_attributes_table.php
│           │   ├── Http/
│           │   │   ├── Controllers/
│           │   │   │   ├── Controller.php
│           │   │   │   └── WebFormController.php
│           │   │   └── Requests/
│           │   │       └── WebForm.php
│           │   ├── Models/
│           │   │   ├── WebForm.php
│           │   │   ├── WebFormAttribute.php
│           │   │   ├── WebFormAttributeProxy.php
│           │   │   └── WebFormProxy.php
│           │   ├── Providers/
│           │   │   ├── ModuleServiceProvider.php
│           │   │   └── WebFormServiceProvider.php
│           │   ├── Repositories/
│           │   │   ├── WebFormAttributeRepository.php
│           │   │   └── WebFormRepository.php
│           │   ├── Resources/
│           │   │   ├── assets/
│           │   │   │   ├── css/
│           │   │   │   │   └── app.css
│           │   │   │   ├── js/
│           │   │   │   │   ├── app.js
│           │   │   │   │   └── plugins/
│           │   │   │   │       ├── axios.js
│           │   │   │   │       ├── emitter.js
│           │   │   │   │       ├── flatpickr.js
│           │   │   │   │       └── vee-validate.js
│           │   │   │   └── locales/
│           │   │   │       ├── hi_IN.json
│           │   │   │       └── sin.json
│           │   │   ├── lang/
│           │   │   │   ├── ar/
│           │   │   │   │   └── app.php
│           │   │   │   ├── en/
│           │   │   │   │   └── app.php
│           │   │   │   ├── es/
│           │   │   │   │   └── app.php
│           │   │   │   ├── fa/
│           │   │   │   │   └── app.php
│           │   │   │   ├── pt_BR/
│           │   │   │   │   └── app.php
│           │   │   │   ├── tr/
│           │   │   │   │   └── app.php
│           │   │   │   └── vi/
│           │   │   │       └── app.php
│           │   │   └── views/
│           │   │       ├── components/
│           │   │       │   ├── button/
│           │   │       │   │   └── index.blade.php
│           │   │       │   ├── flash-group/
│           │   │       │   │   ├── index.blade.php
│           │   │       │   │   └── item.blade.php
│           │   │       │   ├── form/
│           │   │       │   │   ├── control-group/
│           │   │       │   │   │   ├── control.blade.php
│           │   │       │   │   │   ├── error.blade.php
│           │   │       │   │   │   ├── index.blade.php
│           │   │       │   │   │   └── label.blade.php
│           │   │       │   │   └── index.blade.php
│           │   │       │   ├── layouts/
│           │   │       │   │   └── index.blade.php
│           │   │       │   └── spinner/
│           │   │       │       └── index.blade.php
│           │   │       └── settings/
│           │   │           └── web-forms/
│           │   │               ├── controls.blade.php
│           │   │               ├── embed.blade.php
│           │   │               └── preview.blade.php
│           │   ├── Routes/
│           │   │   └── routes.php
│           │   └── Rules/
│           │       └── PhoneNumber.php
│           ├── tailwind.config.js
│           └── vite.config.js
├── phpunit.xml
├── pint.json
├── public/
│   ├── .htaccess
│   ├── admin/
│   │   └── build/
│   │       ├── assets/
│   │       │   ├── app-B1rBjssc.js
│   │       │   ├── app-C2Wq9G4i.css
│   │       │   ├── app-xcMAMgaV.css
│   │       │   ├── ar.es-CfdTYgcp.js
│   │       │   ├── bg.es-Ce0T19Qg.js
│   │       │   ├── bn.es-iWyup8_3.js
│   │       │   ├── bs.es-Cz58hpHx.js
│   │       │   ├── ca.es-CujU75Im.js
│   │       │   ├── chart-D1u1Dgzh.js
│   │       │   ├── cs.es-BHhRbaip.js
│   │       │   ├── da.es-DglD7fV2.js
│   │       │   ├── de.es-D_4ZyLTN.js
│   │       │   ├── drag-and-drop.es-JkAdgoaa.js
│   │       │   ├── el.es-BC26X5xm.js
│   │       │   ├── en.es-DDTuV2po.js
│   │       │   ├── es.es-BvvfjN-O.js
│   │       │   ├── et.es-C0rF9HtR.js
│   │       │   ├── fa.es-CibKJjgz.js
│   │       │   ├── fi.es-B0Iy6aas.js
│   │       │   ├── fr.es-B7WXlprl.js
│   │       │   ├── he.es-K9Fk8xhK.js
│   │       │   ├── hr.es-ef5bxYFj.js
│   │       │   ├── hu.es-nZ65MV0n.js
│   │       │   ├── id.es-CzHAK-XV.js
│   │       │   ├── is.es-Dz07gBgt.js
│   │       │   ├── it.es-CquQA5xx.js
│   │       │   ├── ja.es-D6pL26k_.js
│   │       │   ├── ka.es-Cb9X-eNS.js
│   │       │   ├── ko.es-CTpJlj0A.js
│   │       │   ├── lt.es-vqgjGyMx.js
│   │       │   ├── mn.es-YZet1as4.js
│   │       │   ├── nl.es-COp8PWbT.js
│   │       │   ├── no.es-_2m-F2FS.js
│   │       │   ├── pl.es-jjNeJM5X.js
│   │       │   ├── pt-br.es-D8ojES2d.js
│   │       │   ├── pt-pt.es-D8ojES2d.js
│   │       │   ├── ro.es-B6_ATXom.js
│   │       │   ├── ru.es-BGEpmv_x.js
│   │       │   ├── sk.es-V3h-1af8.js
│   │       │   ├── sl.es-mZjm0YDT.js
│   │       │   ├── sq.es-_6B4UQXy.js
│   │       │   ├── sr.es-BmdOpTOG.js
│   │       │   ├── sv.es-LwrPWbzy.js
│   │       │   ├── tr.es-CS80t-Rq.js
│   │       │   ├── uk.es-BVYlda65.js
│   │       │   ├── vi.es-B5CIRCK5.js
│   │       │   ├── zh-cn.es-DKz-yscG.js
│   │       │   └── zh-hk.es-CFZP5Cvd.js
│   │       └── manifest.json
│   ├── fonts/
│   │   └── .gitignore
│   ├── index.php
│   ├── installer/
│   │   └── build/
│   │       ├── assets/
│   │       │   ├── app-aec2df31.js
│   │       │   └── app-e0866a20.css
│   │       └── manifest.json
│   ├── robots.txt
│   ├── web.config
│   └── webform/
│       └── build/
│           ├── assets/
│           │   ├── app-499ae59b.css
│           │   ├── app-8787c790.js
│           │   └── app-c04ede37.css
│           └── manifest.json
├── resources/
│   ├── css/
│   │   └── app.css
│   ├── js/
│   │   ├── app.js
│   │   └── bootstrap.js
│   └── views/
│       └── .gitignore
├── routes/
│   ├── api.php
│   ├── breadcrumbs.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage/
│   ├── .gitignore
│   ├── app/
│   │   └── .gitignore
│   ├── debugbar/
│   │   └── .gitignore
│   ├── framework/
│   │   ├── .gitignore
│   │   ├── cache/
│   │   │   └── .gitignore
│   │   ├── sessions/
│   │   │   └── .gitignore
│   │   ├── testing/
│   │   │   └── .gitignore
│   │   └── views/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── tests/
│   ├── Feature/
│   │   └── AuthenticationTest.php
│   ├── Pest.php
│   ├── TestCase.php
│   └── Unit/
│       └── BasicTest.php
└── vite.config.js
Download .txt
Showing preview only (640K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6712 symbols across 550 files)

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

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

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 7) | class AppServiceProvider extends ServiceProvider
    method register (line 12) | public function register(): void
    method boot (line 20) | public function boot(): void

FILE: database/factories/UserFactory.php
  class UserFactory (line 9) | class UserFactory extends Factory
    method definition (line 23) | public function definition()
    method unverified (line 39) | public function unverified()

FILE: database/migrations/2019_08_19_000000_create_failed_jobs_table.php
  method up (line 14) | public function up()
  method down (line 32) | public function down()

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

FILE: database/migrations/2024_09_09_094040_create_job_batches_table.php
  method up (line 14) | public function up()
  method down (line 35) | public function down()

FILE: database/migrations/2024_09_09_094042_create_jobs_table.php
  method up (line 14) | public function up()
  method down (line 32) | public function down()

FILE: database/seeders/DatabaseSeeder.php
  class DatabaseSeeder (line 8) | class DatabaseSeeder extends Seeder
    method run (line 15) | public function run()

FILE: packages/Webkul/Activity/src/Contracts/Activity.php
  type Activity (line 5) | interface Activity {}

FILE: packages/Webkul/Activity/src/Contracts/File.php
  type File (line 5) | interface File {}

FILE: packages/Webkul/Activity/src/Contracts/Participant.php
  type Participant (line 5) | interface Participant {}

FILE: packages/Webkul/Activity/src/Database/Migrations/2021_05_12_150329_create_activities_table.php
  method up (line 14) | public function up()
  method down (line 37) | public function down()

FILE: packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php
  method up (line 14) | public function up()
  method down (line 33) | public function down()

FILE: packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php
  method up (line 14) | public function up()
  method down (line 35) | public function down()

FILE: packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php
  method up (line 14) | public function up()
  method down (line 26) | public function down()

FILE: packages/Webkul/Activity/src/Database/Migrations/2025_01_17_151632_alter_activities_table.php
  method up (line 15) | public function up()
  method down (line 30) | public function down()

FILE: packages/Webkul/Activity/src/Models/Activity.php
  class Activity (line 13) | class Activity extends Model implements ActivityContract
    method user (line 59) | public function user()
    method participants (line 67) | public function participants()
    method files (line 75) | public function files()
    method leads (line 83) | public function leads()
    method persons (line 91) | public function persons()
    method products (line 99) | public function products()
    method warehouses (line 107) | public function warehouses()

FILE: packages/Webkul/Activity/src/Models/ActivityProxy.php
  class ActivityProxy (line 7) | class ActivityProxy extends ModelProxy {}

FILE: packages/Webkul/Activity/src/Models/File.php
  class File (line 9) | class File extends Model implements FileContract
    method url (line 39) | public function url()
    method getUrlAttribute (line 47) | public function getUrlAttribute()
    method activity (line 55) | public function activity()
    method toArray (line 63) | public function toArray()

FILE: packages/Webkul/Activity/src/Models/FileProxy.php
  class FileProxy (line 7) | class FileProxy extends ModelProxy {}

FILE: packages/Webkul/Activity/src/Models/Participant.php
  class Participant (line 10) | class Participant extends Model implements ParticipantContract
    method activity (line 32) | public function activity()
    method user (line 40) | public function user()
    method person (line 48) | public function person()

FILE: packages/Webkul/Activity/src/Models/ParticipantProxy.php
  class ParticipantProxy (line 7) | class ParticipantProxy extends ModelProxy {}

FILE: packages/Webkul/Activity/src/Providers/ActivityServiceProvider.php
  class ActivityServiceProvider (line 14) | class ActivityServiceProvider extends ServiceProvider
    method register (line 23) | public function register(): void
    method boot (line 35) | public function boot(Router $router)

FILE: packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php
  class ModuleServiceProvider (line 10) | class ModuleServiceProvider extends BaseModuleServiceProvider

FILE: packages/Webkul/Activity/src/Repositories/ActivityRepository.php
  class ActivityRepository (line 8) | class ActivityRepository extends Repository
    method model (line 15) | public function model()
    method create (line 25) | public function create(array $data)
    method update (line 63) | public function update(array $data, $id, $attribute = 'id')
    method getActivities (line 108) | public function getActivities($dateRange)
    method isDurationOverlapping (line 142) | public function isDurationOverlapping($startFrom, $endFrom, $participa...

FILE: packages/Webkul/Activity/src/Repositories/FileRepository.php
  class FileRepository (line 8) | class FileRepository extends Repository
    method model (line 15) | public function model()

FILE: packages/Webkul/Activity/src/Repositories/ParticipantRepository.php
  class ParticipantRepository (line 7) | class ParticipantRepository extends Repository
    method model (line 14) | public function model()

FILE: packages/Webkul/Activity/src/Traits/LogsActivity.php
  type LogsActivity (line 9) | trait LogsActivity
    method booted (line 14) | protected static function booted(): void
    method logActivity (line 59) | protected static function logActivity($model)
    method getAttributeLabel (line 105) | protected static function getAttributeLabel($value, $attribute)
    method getUpdatedAttributes (line 113) | protected static function getUpdatedAttributes($model)
    method decodeValueIfJson (line 146) | protected static function decodeValueIfJson($value)
    method ksortRecursive (line 167) | protected static function ksortRecursive(&$array)

FILE: packages/Webkul/Admin/src/Bouncer.php
  class Bouncer (line 7) | class Bouncer
    method hasPermission (line 15) | public function hasPermission($permission)
    method allow (line 34) | public static function allow($permission)
    method getAuthorizedUserIds (line 46) | public function getAuthorizedUserIds()

FILE: packages/Webkul/Admin/src/DataGrids/Activity/ActivityDataGrid.php
  class ActivityDataGrid (line 12) | class ActivityDataGrid extends DataGrid
    method prepareQueryBuilder (line 19) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 57) | public function prepareColumns(): void
    method prepareActions (line 184) | public function prepareActions(): void
    method prepareMassActions (line 210) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php
  class OrganizationDataGrid (line 10) | class OrganizationDataGrid extends DataGrid
    method __construct (line 17) | public function __construct(protected PersonRepository $personReposito...
    method prepareQueryBuilder (line 22) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 44) | public function prepareColumns(): void
    method prepareActions (line 92) | public function prepareActions(): void
    method prepareMassActions (line 116) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Contact/PersonDataGrid.php
  class PersonDataGrid (line 10) | class PersonDataGrid extends DataGrid
    method __construct (line 17) | public function __construct(protected OrganizationRepository $organiza...
    method prepareQueryBuilder (line 22) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 49) | public function prepareColumns(): void
    method prepareActions (line 110) | public function prepareActions(): void
    method prepareMassActions (line 149) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Lead/LeadDataGrid.php
  class LeadDataGrid (line 17) | class LeadDataGrid extends DataGrid
    method __construct (line 31) | public function __construct(
    method prepareQueryBuilder (line 49) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 112) | public function prepareColumns(): void
    method prepareActions (line 285) | public function prepareActions(): void
    method prepareMassActions (line 309) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Mail/EmailDataGrid.php
  class EmailDataGrid (line 12) | class EmailDataGrid extends DataGrid
    method prepareQueryBuilder (line 24) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 56) | public function prepareColumns(): void
    method prepareActions (line 143) | public function prepareActions(): void
    method prepareMassActions (line 183) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Product/ProductDataGrid.php
  class ProductDataGrid (line 10) | class ProductDataGrid extends DataGrid
    method prepareQueryBuilder (line 15) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 54) | public function prepareColumns(): void
    method prepareActions (line 127) | public function prepareActions(): void
    method prepareMassActions (line 163) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Quote/QuoteDataGrid.php
  class QuoteDataGrid (line 11) | class QuoteDataGrid extends DataGrid
    method prepareQueryBuilder (line 16) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 63) | public function prepareColumns(): void
    method prepareActions (line 182) | public function prepareActions(): void
    method prepareMassActions (line 218) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/AttributeDataGrid.php
  class AttributeDataGrid (line 10) | class AttributeDataGrid extends DataGrid
    method prepareQueryBuilder (line 15) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 38) | public function prepareColumns(): void
    method prepareActions (line 120) | public function prepareActions(): void
    method prepareMassActions (line 144) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/DataTransfer/ImportDataGrid.php
  class ImportDataGrid (line 9) | class ImportDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 32) | public function prepareColumns(): void
    method prepareActions (line 123) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/EmailTemplateDataGrid.php
  class EmailTemplateDataGrid (line 8) | class EmailTemplateDataGrid extends DataGrid
    method prepareQueryBuilder (line 13) | public function prepareQueryBuilder()
    method prepareColumns (line 32) | public function prepareColumns()
    method prepareActions (line 65) | public function prepareActions()

FILE: packages/Webkul/Admin/src/DataGrids/Settings/GroupDataGrid.php
  class GroupDataGrid (line 9) | class GroupDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 31) | public function prepareColumns(): void
    method prepareActions (line 62) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/Marketing/CampaignDatagrid.php
  class CampaignDatagrid (line 8) | class CampaignDatagrid extends DataGrid
    method prepareQueryBuilder (line 13) | public function prepareQueryBuilder()
    method prepareColumns (line 33) | public function prepareColumns()
    method prepareActions (line 73) | public function prepareActions()
    method prepareMassActions (line 99) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/Marketing/EventDataGrid.php
  class EventDataGrid (line 8) | class EventDataGrid extends DataGrid
    method prepareQueryBuilder (line 13) | public function prepareQueryBuilder()
    method prepareColumns (line 33) | public function prepareColumns()
    method prepareActions (line 73) | public function prepareActions()
    method prepareMassActions (line 99) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/PipelineDataGrid.php
  class PipelineDataGrid (line 9) | class PipelineDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 32) | public function prepareColumns(): void
    method prepareActions (line 71) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/RoleDataGrid.php
  class RoleDataGrid (line 9) | class RoleDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 33) | public function prepareColumns(): void
    method prepareActions (line 85) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/SourceDataGrid.php
  class SourceDataGrid (line 9) | class SourceDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 30) | public function prepareColumns(): void
    method prepareActions (line 52) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/TagDataGrid.php
  class TagDataGrid (line 9) | class TagDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 41) | public function prepareColumns(): void
    method prepareActions (line 85) | public function prepareActions(): void
    method prepareMassActions (line 115) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/TypeDataGrid.php
  class TypeDataGrid (line 9) | class TypeDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 30) | public function prepareColumns(): void
    method prepareActions (line 54) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/UserDataGrid.php
  class UserDataGrid (line 10) | class UserDataGrid extends DataGrid
    method prepareQueryBuilder (line 15) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 39) | public function prepareColumns(): void
    method prepareActions (line 95) | public function prepareActions(): void
    method prepareMassActions (line 121) | public function prepareMassActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/WarehouseDataGrid.php
  class WarehouseDataGrid (line 9) | class WarehouseDataGrid extends DataGrid
    method prepareQueryBuilder (line 16) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 40) | public function prepareColumns(): void
    method prepareActions (line 124) | public function prepareActions()

FILE: packages/Webkul/Admin/src/DataGrids/Settings/WebhookDataGrid.php
  class WebhookDataGrid (line 9) | class WebhookDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 32) | public function prepareColumns(): void
    method prepareActions (line 74) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/DataGrids/Settings/WorkflowDataGrid.php
  class WorkflowDataGrid (line 9) | class WorkflowDataGrid extends DataGrid
    method prepareQueryBuilder (line 14) | public function prepareQueryBuilder(): Builder
    method prepareColumns (line 30) | public function prepareColumns(): void
    method prepareActions (line 54) | public function prepareActions(): void

FILE: packages/Webkul/Admin/src/Database/Migrations/2021_06_07_162808_add_lead_view_permission_column_in_users_table.php
  method up (line 14) | public function up()
  method down (line 26) | public function down()

FILE: packages/Webkul/Admin/src/Database/Migrations/2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php
  method up (line 14) | public function up()
  method down (line 41) | public function down() {}

FILE: packages/Webkul/Admin/src/Exceptions/Handler.php
  class Handler (line 16) | class Handler extends ExceptionHandler
    method __construct (line 30) | public function __construct(Container $container)
    method render (line 48) | public function render($request, Throwable $exception)
    method unauthenticated (line 63) | protected function unauthenticated($request, AuthenticationException $...
    method renderCustomResponse (line 77) | private function renderCustomResponse(Throwable $exception)
    method response (line 107) | private function response($errorCode)

FILE: packages/Webkul/Admin/src/Facades/Bouncer.php
  class Bouncer (line 7) | class Bouncer extends Facade
    method getFacadeAccessor (line 14) | protected static function getFacadeAccessor()

FILE: packages/Webkul/Admin/src/Helpers/Dashboard.php
  class Dashboard (line 14) | class Dashboard
    method __construct (line 21) | public function __construct(
    method getRevenueStats (line 33) | public function getRevenueStats(): array
    method getOverAllStats (line 44) | public function getOverAllStats(): array
    method getTotalLeadsStats (line 59) | public function getTotalLeadsStats(): array
    method getLeadsStatsBySources (line 78) | public function getLeadsStatsBySources(): mixed
    method getLeadsStatsByTypes (line 86) | public function getLeadsStatsByTypes(): mixed
    method getOpenLeadsByStates (line 94) | public function getOpenLeadsByStates(): mixed
    method getTopSellingProducts (line 102) | public function getTopSellingProducts(): Collection
    method getTopPersons (line 110) | public function getTopPersons(): Collection
    method getStartDate (line 120) | public function getStartDate(): Carbon
    method getEndDate (line 130) | public function getEndDate(): Carbon
    method getDateRange (line 138) | public function getDateRange(): string

FILE: packages/Webkul/Admin/src/Helpers/Reporting/AbstractReporting.php
  class AbstractReporting (line 9) | abstract class AbstractReporting
    method __construct (line 36) | public function __construct()
    method setStartDate (line 49) | public function setStartDate(?Carbon $startDate = null): self
    method setEndDate (line 65) | public function setEndDate(?Carbon $endDate = null): self
    method getStartDate (line 79) | public function getStartDate(): Carbon
    method getEndDate (line 89) | public function getEndDate(): Carbon
    method setLastStartDate (line 97) | private function setLastStartDate(): void
    method setLastEndDate (line 113) | private function setLastEndDate(): void
    method getLastStartDate (line 123) | public function getLastStartDate(): Carbon
    method getLastEndDate (line 133) | public function getLastEndDate(): Carbon
    method getPercentageChange (line 144) | public function getPercentageChange($previous, $current): float|int
    method getTimeInterval (line 161) | public function getTimeInterval($startDate, $endDate, $dateColumn, $pe...
    method getMonthsInterval (line 235) | public function getMonthsInterval($startDate, $endDate)
    method getWeeksInterval (line 276) | public function getWeeksInterval($startDate, $endDate)
    method getDaysInterval (line 323) | public function getDaysInterval($startDate, $endDate)

FILE: packages/Webkul/Admin/src/Helpers/Reporting/Activity.php
  class Activity (line 5) | class Activity extends AbstractReporting {}

FILE: packages/Webkul/Admin/src/Helpers/Reporting/Lead.php
  class Lead (line 10) | class Lead extends AbstractReporting
    method __construct (line 37) | public function __construct(
    method getTotalLeadsOverTime (line 55) | public function getTotalLeadsOverTime($period = 'auto'): array
    method getTotalWonLeadsOverTime (line 69) | public function getTotalWonLeadsOverTime($period = 'auto'): array
    method getTotalLostLeadsOverTime (line 83) | public function getTotalLostLeadsOverTime($period = 'auto'): array
    method determinePeriod (line 97) | protected function determinePeriod($period = 'auto'): string
    method getTotalLeadsProgress (line 121) | public function getTotalLeadsProgress(): array
    method getTotalLeads (line 136) | public function getTotalLeads($startDate, $endDate): int
    method getAverageLeadsPerDayProgress (line 147) | public function getAverageLeadsPerDayProgress(): array
    method getAverageLeadsPerDay (line 162) | public function getAverageLeadsPerDay($startDate, $endDate): float
    method getTotalLeadValueProgress (line 176) | public function getTotalLeadValueProgress(): array
    method getTotalLeadValue (line 192) | public function getTotalLeadValue($startDate, $endDate): float
    method getAverageLeadValueProgress (line 203) | public function getAverageLeadValueProgress(): array
    method getAverageLeadValue (line 219) | public function getAverageLeadValue($startDate, $endDate): float
    method getTotalWonLeadValueProgress (line 230) | public function getTotalWonLeadValueProgress(): array
    method getTotalWonLeadValue (line 247) | public function getTotalWonLeadValue($startDate, $endDate): ?float
    method getTotalLostLeadValueProgress (line 259) | public function getTotalLostLeadValueProgress(): array
    method getTotalLostLeadValue (line 276) | public function getTotalLostLeadValue($startDate, $endDate): ?float
    method getTotalWonLeadValueBySources (line 288) | public function getTotalWonLeadValueBySources()
    method getTotalWonLeadValueByTypes (line 306) | public function getTotalWonLeadValueByTypes()
    method getOpenLeadsByStates (line 324) | public function getOpenLeadsByStates()
    method getOverTimeStats (line 350) | public function getOverTimeStats($startDate, $endDate, $valueColumn, $...
    method generateTimeIntervals (line 391) | protected function generateTimeIntervals(Carbon $startDate, Carbon $en...
    method getGroupColumn (line 430) | protected function getGroupColumn(string $dateColumn, string $period):...
    method formatDateForGrouping (line 449) | protected function formatDateForGrouping(Carbon $date, string $period)...
    method formatDateForLabel (line 468) | protected function formatDateForLabel(Carbon $date, string $period): s...

FILE: packages/Webkul/Admin/src/Helpers/Reporting/Organization.php
  class Organization (line 10) | class Organization extends AbstractReporting
    method __construct (line 17) | public function __construct(protected OrganizationRepository $organiza...
    method getTotalOrganizationsProgress (line 25) | public function getTotalOrganizationsProgress(): array
    method getTotalOrganizations (line 40) | public function getTotalOrganizations($startDate, $endDate): int
    method getTopOrganizationsByRevenue (line 53) | public function getTopOrganizationsByRevenue($limit = null): Collection

FILE: packages/Webkul/Admin/src/Helpers/Reporting/Person.php
  class Person (line 10) | class Person extends AbstractReporting
    method __construct (line 17) | public function __construct(protected PersonRepository $personRepository)
    method getTotalPersonsProgress (line 25) | public function getTotalPersonsProgress(): array
    method getTotalPersons (line 40) | public function getTotalPersons($startDate, $endDate): int
    method getTopCustomersByRevenue (line 53) | public function getTopCustomersByRevenue($limit = null): Collection

FILE: packages/Webkul/Admin/src/Helpers/Reporting/Product.php
  class Product (line 9) | class Product extends AbstractReporting
    method __construct (line 16) | public function __construct(
    method getTopSellingProductsByRevenue (line 27) | public function getTopSellingProductsByRevenue($limit = null): Collection
    method getTopSellingProductsByQuantity (line 64) | public function getTopSellingProductsByQuantity($limit = null): Collec...

FILE: packages/Webkul/Admin/src/Helpers/Reporting/Quote.php
  class Quote (line 8) | class Quote extends AbstractReporting
    method __construct (line 15) | public function __construct(protected QuoteRepository $quoteRepository)
    method getTotalQuotesProgress (line 23) | public function getTotalQuotesProgress(): array
    method getTotalQuotes (line 38) | public function getTotalQuotes($startDate, $endDate): int

FILE: packages/Webkul/Admin/src/Http/Controllers/Activity/ActivityController.php
  class ActivityController (line 21) | class ActivityController extends Controller
    method __construct (line 28) | public function __construct(
    method index (line 37) | public function index(): View
    method get (line 45) | public function get(): JsonResponse
    method store (line 69) | public function store(): RedirectResponse|JsonResponse
    method edit (line 127) | public function edit(int $id): View
    method update (line 141) | public function update($id): RedirectResponse|JsonResponse
    method massUpdate (line 179) | public function massUpdate(MassUpdateRequest $massUpdateRequest): Json...
    method download (line 201) | public function download(int $id): StreamedResponse
    method destroy (line 215) | public function destroy(int $id): JsonResponse
    method massDestroy (line 239) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Configuration/ConfigurationController.php
  class ConfigurationController (line 15) | class ConfigurationController extends Controller
    method __construct (line 22) | public function __construct(protected ConfigurationRepository $configu...
    method index (line 27) | public function index(): View
    method store (line 42) | public function store(ConfigurationForm $request): RedirectResponse
    method download (line 60) | public function download()
    method search (line 74) | public function search(): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php
  class OrganizationController (line 15) | class OrganizationController extends Controller
    method __construct (line 22) | public function __construct(protected OrganizationRepository $organiza...
    method index (line 30) | public function index(): View|JsonResponse
    method create (line 42) | public function create(): View
    method store (line 50) | public function store(AttributeForm $request): RedirectResponse
    method edit (line 66) | public function edit(int $id): View
    method update (line 76) | public function update(AttributeForm $request, int $id): RedirectResponse
    method destroy (line 92) | public function destroy(int $id): JsonResponse
    method massDestroy (line 114) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Contact/Persons/ActivityController.php
  class ActivityController (line 13) | class ActivityController extends Controller
    method __construct (line 20) | public function __construct(
    method index (line 32) | public function index($id)
    method concatEmailAsActivities (line 45) | public function concatEmailAsActivities($personId, $activities)

FILE: packages/Webkul/Admin/src/Http/Controllers/Contact/Persons/PersonController.php
  class PersonController (line 19) | class PersonController extends Controller
    method __construct (line 26) | public function __construct(protected PersonRepository $personRepository)
    method index (line 34) | public function index()
    method create (line 46) | public function create(): View
    method store (line 54) | public function store(AttributeForm $request): RedirectResponse|JsonRe...
    method show (line 77) | public function show(int $id): View
    method edit (line 87) | public function edit(int $id): View
    method update (line 97) | public function update(AttributeForm $request, int $id): RedirectRespo...
    method search (line 120) | public function search(): JsonResource
    method destroy (line 138) | public function destroy(int $id): JsonResponse
    method massDestroy (line 172) | public function massDestroy(MassDestroyRequest $request): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Contact/Persons/TagController.php
  class TagController (line 10) | class TagController extends Controller
    method __construct (line 17) | public function __construct(protected PersonRepository $personReposito...
    method attach (line 22) | public function attach(int $id): JsonResponse
    method detach (line 42) | public function detach(int $personId): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Controller.php
  class Controller (line 11) | class Controller extends BaseController
    method redirectToLogin (line 20) | public function redirectToLogin()

FILE: packages/Webkul/Admin/src/Http/Controllers/DashboardController.php
  class DashboardController (line 9) | class DashboardController extends Controller
    method __construct (line 32) | public function __construct(protected Dashboard $dashboardHelper) {}
    method index (line 39) | public function index()
    method stats (line 52) | public function stats()

FILE: packages/Webkul/Admin/src/Http/Controllers/DataGrid/SavedFilterController.php
  class SavedFilterController (line 9) | class SavedFilterController extends Controller
    method __construct (line 14) | public function __construct(protected SavedFilterRepository $savedFilt...
    method store (line 19) | public function store()
    method get (line 47) | public function get()
    method update (line 60) | public function update(int $id)
    method destroy (line 96) | public function destroy(int $id)

FILE: packages/Webkul/Admin/src/Http/Controllers/DataGridController.php
  class DataGridController (line 7) | class DataGridController extends Controller
    method lookUp (line 12) | public function lookUp()

FILE: packages/Webkul/Admin/src/Http/Controllers/Lead/ActivityController.php
  class ActivityController (line 13) | class ActivityController extends Controller
    method __construct (line 20) | public function __construct(
    method index (line 32) | public function index($id)
    method concatEmailAsActivities (line 45) | public function concatEmailAsActivities($leadId, $activities)

FILE: packages/Webkul/Admin/src/Http/Controllers/Lead/EmailController.php
  class EmailController (line 10) | class EmailController extends BaseEmailController
    method store (line 17) | public function store()
    method detach (line 35) | public function detach($id)
    method transformToActivity (line 56) | public function transformToActivity($data)

FILE: packages/Webkul/Admin/src/Http/Controllers/Lead/LeadController.php
  class LeadController (line 33) | class LeadController extends Controller
    method __construct (line 45) | public function __construct(
    method index (line 62) | public function index()
    method get (line 83) | public function get(): JsonResponse
    method create (line 148) | public function create(): View
    method store (line 156) | public function store(LeadForm $request): RedirectResponse|JsonResponse
    method edit (line 209) | public function edit(int $id): View
    method view (line 219) | public function view(int $id)
    method update (line 238) | public function update(LeadForm $request, int $id): RedirectResponse|J...
    method updateAttributes (line 280) | public function updateAttributes(int $id)
    method updateStage (line 303) | public function updateStage(int $id)
    method search (line 339) | public function search(): AnonymousResourceCollection
    method destroy (line 357) | public function destroy(int $id): JsonResponse
    method massUpdate (line 381) | public function massUpdate(MassUpdateRequest $massUpdateRequest): Json...
    method massDestroy (line 409) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...
    method addProduct (line 435) | public function addProduct(int $leadId): JsonResponse
    method removeProduct (line 460) | public function removeProduct(int $id): JsonResponse
    method kanbanLookup (line 485) | public function kanbanLookup()
    method getKanbanColumns (line 511) | private function getKanbanColumns(): array
    method createByAI (line 631) | public function createByAI()
    method processFile (line 676) | private function processFile($file)
    method createLeads (line 699) | private function createLeads($rawLeads): array

FILE: packages/Webkul/Admin/src/Http/Controllers/Lead/QuoteController.php
  class QuoteController (line 11) | class QuoteController extends Controller
    method __construct (line 18) | public function __construct(
    method store (line 29) | public function store($id)
    method delete (line 53) | public function delete($leadId)

FILE: packages/Webkul/Admin/src/Http/Controllers/Lead/TagController.php
  class TagController (line 10) | class TagController extends Controller
    method __construct (line 17) | public function __construct(protected LeadRepository $leadRepository) {}
    method attach (line 25) | public function attach($id)
    method detach (line 48) | public function detach($leadId)

FILE: packages/Webkul/Admin/src/Http/Controllers/Mail/EmailController.php
  class EmailController (line 25) | class EmailController extends Controller
    method __construct (line 32) | public function __construct(
    method index (line 41) | public function index(): View|JsonResponse|RedirectResponse
    method view (line 65) | public function view()
    method store (line 112) | public function store()
    method update (line 161) | public function update($id)
    method inboundParse (line 215) | public function inboundParse(InboundEmailProcessor $inboundEmailProces...
    method download (line 228) | public function download($id)
    method massUpdate (line 244) | public function massUpdate(MassUpdateRequest $massUpdateRequest): Json...
    method destroy (line 272) | public function destroy(int $id): JsonResponse|RedirectResponse
    method massDestroy (line 320) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Mail/TagController.php
  class TagController (line 10) | class TagController extends Controller
    method __construct (line 17) | public function __construct(protected EmailRepository $emailRepository...
    method attach (line 22) | public function attach(int $id): JsonResponse
    method detach (line 42) | public function detach(int $mailId): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Products/ActivityController.php
  class ActivityController (line 11) | class ActivityController extends Controller
    method __construct (line 18) | public function __construct(
    method index (line 29) | public function index($id)
    method concatEmail (line 42) | public function concatEmail($activities)

FILE: packages/Webkul/Admin/src/Http/Controllers/Products/ProductController.php
  class ProductController (line 18) | class ProductController extends Controller
    method __construct (line 25) | public function __construct(protected ProductRepository $productReposi...
    method index (line 33) | public function index(): View|JsonResponse
    method create (line 45) | public function create(): View
    method store (line 55) | public function store(AttributeForm $request)
    method view (line 71) | public function view(int $id): View
    method edit (line 81) | public function edit(int $id): View|JsonResponse
    method update (line 105) | public function update(AttributeForm $request, int $id)
    method storeInventories (line 127) | public function storeInventories(int $id, ?int $warehouseId = null): J...
    method search (line 153) | public function search(): JsonResource
    method warehouses (line 166) | public function warehouses(int $id): JsonResponse
    method destroy (line 176) | public function destroy(int $id): JsonResponse
    method massDestroy (line 200) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Products/TagController.php
  class TagController (line 10) | class TagController extends Controller
    method __construct (line 17) | public function __construct(protected ProductRepository $productReposi...
    method attach (line 25) | public function attach($id)
    method detach (line 48) | public function detach($productId)

FILE: packages/Webkul/Admin/src/Http/Controllers/Quote/QuoteController.php
  class QuoteController (line 22) | class QuoteController extends Controller
    method __construct (line 31) | public function __construct(
    method index (line 41) | public function index(): View|JsonResponse
    method create (line 53) | public function create(): View
    method store (line 63) | public function store(AttributeForm $request): RedirectResponse
    method edit (line 90) | public function edit(int $id): View
    method update (line 100) | public function update(AttributeForm $request, int $id): RedirectResponse
    method search (line 129) | public function search(): AnonymousResourceCollection
    method destroy (line 141) | public function destroy(int $id): JsonResponse
    method massDestroy (line 165) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...
    method print (line 191) | public function print($id): Response|StreamedResponse
    method additionalValidation (line 204) | private function additionalValidation(): void

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/AttributeController.php
  class AttributeController (line 17) | class AttributeController extends Controller
    method __construct (line 24) | public function __construct(
    method index (line 32) | public function index(): View|JsonResponse
    method create (line 44) | public function create(): View
    method store (line 52) | public function store(): RedirectResponse
    method edit (line 76) | public function edit(int $id): View
    method update (line 86) | public function update($id): RedirectResponse
    method destroy (line 108) | public function destroy(int $id): JsonResponse
    method checkUniqueValidation (line 141) | public function checkUniqueValidation()
    method lookup (line 160) | public function lookup($lookup): JsonResponse
    method lookupEntity (line 170) | public function lookupEntity(string $lookup): JsonResponse
    method massDestroy (line 180) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...
    method getAttributeOptions (line 218) | public function getAttributeOptions(int $id)
    method download (line 228) | public function download()

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/DataTransfer/ImportController.php
  class ImportController (line 15) | class ImportController extends Controller
    method __construct (line 22) | public function __construct(
    method index (line 30) | public function index(): View|JsonResponse
    method create (line 42) | public function create(): View
    method store (line 50) | public function store(): RedirectResponse
    method edit (line 104) | public function edit(int $id): View
    method update (line 114) | public function update(int $id): RedirectResponse
    method destroy (line 182) | public function destroy(int $id): JsonResponse
    method import (line 207) | public function import(int $id): View
    method validateImport (line 237) | public function validateImport(int $id): JsonResponse
    method start (line 254) | public function start(int $id): JsonResponse
    method link (line 327) | public function link(int $id): JsonResponse
    method indexData (line 388) | public function indexData(int $id): JsonResponse
    method stats (line 448) | public function stats(int $id, string $state = Import::STATE_PROCESSED...
    method downloadSample (line 465) | public function downloadSample(string $type)
    method download (line 475) | public function download(int $id)
    method downloadErrorReport (line 485) | public function downloadErrorReport(int $id)

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/EmailTemplateController.php
  class EmailTemplateController (line 14) | class EmailTemplateController extends Controller
    method __construct (line 21) | public function __construct(
    method index (line 29) | public function index(): View|JsonResponse
    method create (line 43) | public function create()
    method store (line 53) | public function store(): RedirectResponse
    method edit (line 75) | public function edit(int $id): View
    method update (line 87) | public function update(int $id): RedirectResponse
    method destroy (line 109) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/GroupController.php
  class GroupController (line 14) | class GroupController extends Controller
    method __construct (line 21) | public function __construct(protected GroupRepository $groupRepository...
    method index (line 26) | public function index(): View|JsonResponse
    method store (line 38) | public function store(): JsonResponse
    method edit (line 63) | public function edit(int $id): JsonResource
    method update (line 75) | public function update(int $id): JsonResponse
    method destroy (line 102) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/LocationController.php
  class LocationController (line 13) | class LocationController extends Controller
    method __construct (line 20) | public function __construct(protected LocationRepository $locationRepo...
    method search (line 27) | public function search()
    method store (line 41) | public function store(AttributeForm $request): JsonResponse
    method destroy (line 60) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/Marketing/CampaignsController.php
  class CampaignsController (line 15) | class CampaignsController extends Controller
    method __construct (line 20) | public function __construct(
    method index (line 29) | public function index(): View|JsonResponse
    method getEvents (line 41) | public function getEvents(): JsonResponse
    method getEmailTemplates (line 53) | public function getEmailTemplates(): JsonResponse
    method store (line 65) | public function store(): JsonResponse
    method show (line 89) | public function show(int $id): JsonResponse
    method update (line 101) | public function update(int $id): JsonResponse
    method destroy (line 125) | public function destroy(int $id): JsonResponse
    method massDestroy (line 141) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/Marketing/EventController.php
  class EventController (line 14) | class EventController extends Controller
    method __construct (line 19) | public function __construct(protected EventRepository $eventRepository...
    method index (line 24) | public function index(): View|JsonResponse
    method store (line 36) | public function store(): JsonResponse
    method update (line 59) | public function update(int $id): JsonResponse
    method destroy (line 82) | public function destroy(int $id): JsonResponse
    method massDestroy (line 106) | public function massDestroy(MassDestroyRequest $request): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/PipelineController.php
  class PipelineController (line 14) | class PipelineController extends Controller
    method __construct (line 21) | public function __construct(protected PipelineRepository $pipelineRepo...
    method index (line 26) | public function index(): View|JsonResponse
    method create (line 38) | public function create(): View
    method store (line 46) | public function store(PipelineForm $request): RedirectResponse
    method edit (line 68) | public function edit(int $id): View
    method update (line 78) | public function update(PipelineForm $request, int $id): RedirectResponse
    method destroy (line 115) | public function destroy($id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/RoleController.php
  class RoleController (line 13) | class RoleController extends Controller
    method __construct (line 20) | public function __construct(protected RoleRepository $roleRepository) {}
    method index (line 25) | public function index(): View|JsonResponse
    method create (line 37) | public function create(): View
    method store (line 45) | public function store(): RedirectResponse
    method edit (line 80) | public function edit(int $id): View
    method update (line 90) | public function update(int $id): RedirectResponse
    method destroy (line 121) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/SettingController.php
  class SettingController (line 11) | class SettingController extends Controller
    method index (line 18) | public function index()
    method search (line 26) | public function search(): ?JsonResponse
    method searchMenuItems (line 47) | protected function searchMenuItems(Collection $menuItems, string $quer...
    method matchesQuery (line 74) | protected function matchesQuery(MenuItem $item, string $query): bool
    method getSettingsConfig (line 92) | protected function getSettingsConfig(): Collection

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/SourceController.php
  class SourceController (line 13) | class SourceController extends Controller
    method __construct (line 20) | public function __construct(protected SourceRepository $sourceReposito...
    method index (line 25) | public function index(): View|JsonResponse
    method store (line 37) | public function store(): JsonResponse
    method edit (line 58) | public function edit(int $id): View|JsonResponse
    method update (line 70) | public function update(int $id): JsonResponse
    method destroy (line 91) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/TagController.php
  class TagController (line 16) | class TagController extends Controller
    method __construct (line 23) | public function __construct(protected TagRepository $tagRepository) {}
    method index (line 28) | public function index(): View|JsonResponse
    method store (line 40) | public function store(): JsonResponse
    method edit (line 66) | public function edit(int $id): View|JsonResponse
    method update (line 78) | public function update(int $id): JsonResponse
    method destroy (line 102) | public function destroy(int $id): JsonResponse
    method search (line 128) | public function search()
    method massDestroy (line 140) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/TypeController.php
  class TypeController (line 12) | class TypeController extends Controller
    method __construct (line 19) | public function __construct(protected TypeRepository $typeRepository) {}
    method index (line 24) | public function index(): View|JsonResponse
    method store (line 36) | public function store(): JsonResponse
    method edit (line 57) | public function edit(int $id): View|JsonResponse
    method update (line 69) | public function update(int $id): JsonResponse
    method destroy (line 90) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/UserController.php
  class UserController (line 22) | class UserController extends Controller
    method __construct (line 29) | public function __construct(
    method index (line 38) | public function index(): View|JsonResponse
    method store (line 54) | public function store(): View|JsonResponse
    method edit (line 98) | public function edit(int $id): View|JsonResponse
    method update (line 110) | public function update(int $id): JsonResponse
    method search (line 153) | public function search(): JsonResource
    method destroy (line 165) | public function destroy(int $id): JsonResponse
    method massUpdate (line 194) | public function massUpdate(MassUpdateRequest $massDestroyRequest): Jso...
    method massDestroy (line 230) | public function massDestroy(MassDestroyRequest $massDestroyRequest): J...

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/Warehouse/ActivityController.php
  class ActivityController (line 11) | class ActivityController extends Controller
    method __construct (line 18) | public function __construct(
    method index (line 29) | public function index($id)
    method concatEmail (line 42) | public function concatEmail($activities)

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/Warehouse/TagController.php
  class TagController (line 10) | class TagController extends Controller
    method __construct (line 17) | public function __construct(protected WarehouseRepository $warehouseRe...
    method attach (line 25) | public function attach($id)
    method detach (line 48) | public function detach($warehouseId)

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/Warehouse/WarehouseController.php
  class WarehouseController (line 16) | class WarehouseController extends Controller
    method __construct (line 23) | public function __construct(protected WarehouseRepository $warehouseRe...
    method index (line 31) | public function index(): View|JsonResponse
    method search (line 43) | public function search(): JsonResponse
    method products (line 55) | public function products(int $id)
    method create (line 69) | public function create(): View
    method store (line 77) | public function store(AttributeForm $request): RedirectResponse
    method view (line 93) | public function view(int $id): View
    method edit (line 106) | public function edit($id)
    method update (line 116) | public function update(AttributeForm $request, int $id): RedirectRespo...
    method destroy (line 139) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/WebFormController.php
  class WebFormController (line 19) | class WebFormController extends Controller
    method __construct (line 26) | public function __construct(
    method index (line 39) | public function index(): View|JsonResponse
    method create (line 51) | public function create(): View
    method store (line 74) | public function store(): RedirectResponse
    method edit (line 99) | public function edit(int $id): View
    method update (line 114) | public function update(int $id): RedirectResponse
    method destroy (line 139) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/WebhookController.php
  class WebhookController (line 14) | class WebhookController extends Controller
    method __construct (line 16) | public function __construct(protected WebhookRepository $webhookReposi...
    method index (line 21) | public function index(): View|JsonResponse
    method create (line 33) | public function create(): View
    method store (line 41) | public function store(WebhookRequest $webhookRequest): RedirectResponse
    method edit (line 57) | public function edit(int $id): View
    method update (line 67) | public function update(WebhookRequest $webhookRequest, int $id): Redir...
    method destroy (line 83) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/Settings/WorkflowController.php
  class WorkflowController (line 13) | class WorkflowController extends Controller
    method __construct (line 20) | public function __construct(protected WorkflowRepository $workflowRepo...
    method index (line 25) | public function index(): View|JsonResponse
    method create (line 37) | public function create(): View
    method store (line 45) | public function store(): RedirectResponse
    method edit (line 65) | public function edit(int $id): View
    method update (line 75) | public function update(int $id): RedirectResponse
    method destroy (line 95) | public function destroy(int $id): JsonResponse

FILE: packages/Webkul/Admin/src/Http/Controllers/TinyMCEController.php
  class TinyMCEController (line 10) | class TinyMCEController extends Controller
    method upload (line 22) | public function upload(): JsonResponse
    method storeMedia (line 38) | public function storeMedia(): array

FILE: packages/Webkul/Admin/src/Http/Controllers/User/AccountController.php
  class AccountController (line 12) | class AccountController extends Controller
    method edit (line 19) | public function edit()
    method update (line 31) | public function update()

FILE: packages/Webkul/Admin/src/Http/Controllers/User/ForgotPasswordController.php
  class ForgotPasswordController (line 12) | class ForgotPasswordController extends Controller
    method create (line 19) | public function create()
    method store (line 41) | public function store()
    method broker (line 75) | public function broker()

FILE: packages/Webkul/Admin/src/Http/Controllers/User/ResetPasswordController.php
  class ResetPasswordController (line 17) | class ResetPasswordController extends Controller
    method create (line 29) | public function create($token = null)
    method store (line 42) | public function store()
    method resetPassword (line 80) | protected function resetPassword($admin, $password)
    method broker (line 98) | public function broker()

FILE: packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php
  class SessionController (line 11) | class SessionController extends Controller
    method create (line 16) | public function create(): RedirectResponse|View
    method store (line 36) | public function store(): RedirectResponse
    method destroy (line 85) | public function destroy(): RedirectResponse
    method canAccessIntendedUrl (line 95) | protected function canAccessIntendedUrl(Collection $menus, ?string $ur...

FILE: packages/Webkul/Admin/src/Http/Middleware/Bouncer.php
  class Bouncer (line 8) | class Bouncer
    method handle (line 17) | public function handle($request, \Closure $next, $guard = 'user')
    method isPermissionsEmpty (line 55) | public function isPermissionsEmpty()
    method checkIfAuthorized (line 79) | public function checkIfAuthorized()

FILE: packages/Webkul/Admin/src/Http/Middleware/Locale.php
  class Locale (line 9) | class Locale
    method __construct (line 16) | public function __construct(
    method handle (line 31) | public function handle($request, Closure $next)

FILE: packages/Webkul/Admin/src/Http/Middleware/SanitizeUrl.php
  class SanitizeUrl (line 10) | class SanitizeUrl
    method handle (line 18) | public function handle($request, Closure $next)

FILE: packages/Webkul/Admin/src/Http/Requests/AttributeForm.php
  class AttributeForm (line 10) | class AttributeForm extends FormRequest
    method __construct (line 22) | public function __construct(
    method authorize (line 32) | public function authorize()
    method rules (line 42) | public function rules()

FILE: packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php
  class ConfigurationForm (line 7) | class ConfigurationForm extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: packages/Webkul/Admin/src/Http/Requests/LeadForm.php
  class LeadForm (line 11) | class LeadForm extends FormRequest
    method __construct (line 23) | public function __construct(
    method authorize (line 33) | public function authorize()
    method rules (line 43) | public function rules()
    method messages (line 149) | public function messages(): array

FILE: packages/Webkul/Admin/src/Http/Requests/MassDestroyRequest.php
  class MassDestroyRequest (line 7) | class MassDestroyRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: packages/Webkul/Admin/src/Http/Requests/MassUpdateRequest.php
  class MassUpdateRequest (line 7) | class MassUpdateRequest extends FormRequest
    method authorize (line 14) | public function authorize()
    method rules (line 24) | public function rules()

FILE: packages/Webkul/Admin/src/Http/Requests/PipelineForm.php
  class PipelineForm (line 8) | class PipelineForm extends FormRequest
    method __construct (line 15) | public function __construct(ValidationFactory $validationFactory)
    method authorize (line 25) | public function authorize()
    method rules (line 35) | public function rules()
    method messages (line 58) | public function messages()
    method validatorExtensions (line 70) | public function validatorExtensions(ValidationFactory $validationFactory)

FILE: packages/Webkul/Admin/src/Http/Requests/UserForm.php
  class UserForm (line 7) | class UserForm extends FormRequest
    method authorize (line 16) | public function authorize()
    method rules (line 26) | public function rules()

FILE: packages/Webkul/Admin/src/Http/Resources/ActivityFileResource.php
  class ActivityFileResource (line 8) | class ActivityFileResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/ActivityParticipantResource.php
  class ActivityParticipantResource (line 8) | class ActivityParticipantResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/ActivityResource.php
  class ActivityResource (line 8) | class ActivityResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/EmailAttachmentResource.php
  class EmailAttachmentResource (line 8) | class EmailAttachmentResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/EmailResource.php
  class EmailResource (line 8) | class EmailResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/LeadResource.php
  class LeadResource (line 8) | class LeadResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/OrganizationResource.php
  class OrganizationResource (line 8) | class OrganizationResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/PersonResource.php
  class PersonResource (line 8) | class PersonResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/PipelineResource.php
  class PipelineResource (line 8) | class PipelineResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/ProductResource.php
  class ProductResource (line 8) | class ProductResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/QuoteResource.php
  class QuoteResource (line 8) | class QuoteResource extends JsonResource
    method toArray (line 13) | public function toArray(Request $request): array

FILE: packages/Webkul/Admin/src/Http/Resources/SourceResource.php
  class SourceResource (line 8) | class SourceResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/StageResource.php
  class StageResource (line 8) | class StageResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/TagResource.php
  class TagResource (line 8) | class TagResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/TypeResource.php
  class TypeResource (line 8) | class TypeResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/Resources/UserResource.php
  class UserResource (line 8) | class UserResource extends JsonResource
    method toArray (line 16) | public function toArray($request)

FILE: packages/Webkul/Admin/src/Http/helpers.php
  function bouncer (line 4) | function bouncer()

FILE: packages/Webkul/Admin/src/Listeners/Activity.php
  class Activity (line 11) | class Activity
    method __construct (line 18) | public function __construct(
    method afterUpdateOrCreate (line 28) | public function afterUpdateOrCreate(ActivityContract $activity): void

FILE: packages/Webkul/Admin/src/Listeners/Lead.php
  class Lead (line 7) | class Lead
    method __construct (line 14) | public function __construct(protected EmailRepository $emailRepository...
    method linkToEmail (line 20) | public function linkToEmail($lead)

FILE: packages/Webkul/Admin/src/Listeners/Person.php
  class Person (line 7) | class Person
    method __construct (line 14) | public function __construct(protected EmailRepository $emailRepository...
    method linkToEmail (line 20) | public function linkToEmail($person)

FILE: packages/Webkul/Admin/src/Notifications/Common.php
  class Common (line 7) | class Common extends Mailable
    method __construct (line 14) | public function __construct(public $data) {}
    method build (line 19) | public function build()

FILE: packages/Webkul/Admin/src/Notifications/User/Create.php
  class Create (line 7) | class Create extends Mailable
    method __construct (line 13) | public function __construct(public $user) {}
    method build (line 18) | public function build()

FILE: packages/Webkul/Admin/src/Notifications/User/UserResetPassword.php
  class UserResetPassword (line 8) | class UserResetPassword extends ResetPassword
    method toMail (line 16) | public function toMail($notifiable)

FILE: packages/Webkul/Admin/src/Notifications/User/UserUpdatePassword.php
  class UserUpdatePassword (line 10) | class UserUpdatePassword extends Mailable
    method __construct (line 20) | public function __construct(public $user) {}
    method build (line 27) | public function build()

FILE: packages/Webkul/Admin/src/Providers/AdminServiceProvider.php
  class AdminServiceProvider (line 24) | class AdminServiceProvider extends ServiceProvider
    method boot (line 29) | public function boot(Router $router): void
    method register (line 73) | public function register()
    method registerFacades (line 83) | protected function registerFacades(): void
    method registerConfig (line 97) | protected function registerConfig(): void

FILE: packages/Webkul/Admin/src/Providers/EventServiceProvider.php
  class EventServiceProvider (line 7) | class EventServiceProvider extends ServiceProvider

FILE: packages/Webkul/Admin/src/Providers/ModuleServiceProvider.php
  class ModuleServiceProvider (line 7) | class ModuleServiceProvider extends BaseModuleServiceProvider

FILE: packages/Webkul/Admin/src/Requests/WebhookRequest.php
  class WebhookRequest (line 9) | class WebhookRequest extends FormRequest
    method authorize (line 14) | public function authorize(): bool
    method rules (line 24) | public function rules()

FILE: packages/Webkul/Admin/src/Resources/assets/js/app.js
  method data (line 15) | data() {
  method created (line 23) | created() {
  method beforeDestroy (line 27) | beforeDestroy() {
  method onSubmit (line 32) | onSubmit() {}
  method onInvalidSubmit (line 34) | onInvalidSubmit({ values, errors, results }) {
  method handleMouseOver (line 49) | handleMouseOver(event) {
  method handleMouseLeave (line 64) | handleMouseLeave(event) {
  method handleFocusOut (line 78) | handleFocusOut(event) {

FILE: packages/Webkul/Admin/src/Resources/assets/js/chart.js
  method Colors (line 13) | get Colors(){return Go}
  method Decimation (line 13) | get Decimation(){return Qo}
  method Filler (line 13) | get Filler(){return ma}
  method Legend (line 13) | get Legend(){return ya}
  method SubTitle (line 13) | get SubTitle(){return ka}
  method Title (line 13) | get Title(){return Ma}
  method Tooltip (line 13) | get Tooltip(){return Ba}
  function e (line 13) | function e(){}
  function s (line 13) | function s(t){return null==t}
  function n (line 13) | function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object...
  function o (line 13) | function o(t){return null!==t&&"[object Object]"===Object.prototype.toSt...
  function a (line 13) | function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(...
  function r (line 13) | function r(t,e){return a(t)?t:e}
  function l (line 13) | function l(t,e){return void 0===t?e:t}
  function d (line 13) | function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}
  function u (line 13) | function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--...
  function f (line 13) | function f(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(...
  function g (line 13) | function g(t){if(n(t))return t.map(g);if(o(t)){const e=Object.create(nul...
  function p (line 13) | function p(t){return-1===["__proto__","prototype","constructor"].indexOf...
  function m (line 13) | function m(t,e,i,s){if(!p(t))return;const n=e[t],a=i[t];o(n)&&o(a)?b(n,a...
  function b (line 13) | function b(t,e,i){const s=n(e)?e:[e],a=s.length;if(!o(t))return t;const ...
  function x (line 13) | function x(t,e){return b(t,e,{merger:_})}
  function _ (line 13) | function _(t,e,i){if(!p(t))return;const s=e[t],n=i[t];o(s)&&o(n)?x(s,n):...
  function v (line 13) | function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s...
  function M (line 13) | function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{...
  function w (line 13) | function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}
  function D (line 13) | function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"=...
  function V (line 13) | function V(t,e,i){return Math.abs(t-e)<i}
  function B (line 13) | function B(t){const e=Math.round(t);t=V(t,e,t/1e3)?e:t;const i=Math.pow(...
  function W (line 13) | function W(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s<i;s++)t%s==0&&(e...
  function N (line 13) | function N(t){return!isNaN(parseFloat(t))&&isFinite(t)}
  function H (line 13) | function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}
  function j (line 13) | function j(t,e,i){let s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s][i],isNaN(o...
  function $ (line 13) | function $(t){return t*(C/180)}
  function Y (line 13) | function Y(t){return t*(180/C)}
  function U (line 13) | function U(t){if(!a(t))return;let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*...
  function X (line 13) | function X(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Mat...
  function q (line 13) | function q(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}
  function K (line 13) | function K(t,e){return(t-e+A)%O-C}
  function G (line 13) | function G(t){return(t%O+O)%O}
  function Z (line 13) | function Z(t,e,i,s){const n=G(t),o=G(e),a=G(i),r=G(o-n),l=G(a-n),h=G(n-o...
  function J (line 13) | function J(t,e,i){return Math.max(e,Math.min(i,t))}
  function Q (line 13) | function Q(t){return J(t,-32768,32767)}
  function tt (line 13) | function tt(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t<=Math.max(e,i)+s}
  function et (line 13) | function et(t,e,i){i=i||(i=>t[i]<e);let s,n=t.length-1,o=0;for(;n-o>1;)s...
  function nt (line 13) | function nt(t,e,i){let s=0,n=t.length;for(;s<n&&t[s]<e;)s++;for(;n>s&&t[...
  function at (line 13) | function at(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineP...
  function rt (line 13) | function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s...
  function lt (line 13) | function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}
  function ct (line 13) | function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.cal...
  function dt (line 13) | function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i...
  function pt (line 13) | function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iSca...
  function mt (line 13) | function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,x...
  class bt (line 13) | class bt{constructor(){this._request=null,this._charts=new Map,this._run...
    method constructor (line 13) | constructor(){this._request=null,this._charts=new Map,this._running=!1...
    method _notify (line 13) | _notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({...
    method _refresh (line 13) | _refresh(){this._request||(this._running=!0,this._request=ht.call(wind...
    method _update (line 13) | _update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.runn...
    method _getAnims (line 13) | _getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running...
    method listen (line 13) | listen(t,e,i){this._getAnims(t).listeners[e].push(i)}
    method add (line 13) | add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}
    method has (line 13) | has(t){return this._getAnims(t).items.length>0}
    method start (line 13) | start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now...
    method running (line 13) | running(t){if(!this._running)return!1;const e=this._charts.get(t);retu...
    method stop (line 13) | stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;cons...
    method remove (line 13) | remove(t){return this._charts.delete(t)}
  function _t (line 19) | function _t(t){return t+.5|0}
  function vt (line 19) | function vt(t){return yt(_t(2.55*t),0,255)}
  function Mt (line 19) | function Mt(t){return yt(_t(255*t),0,255)}
  function wt (line 19) | function wt(t){return yt(_t(t/2.55)/100,0,1)}
  function kt (line 19) | function kt(t){return yt(_t(100*t),0,100)}
  function At (line 19) | function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;re...
  function Lt (line 19) | function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Ma...
  function Et (line 19) | function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4...
  function Rt (line 19) | function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i...
  function It (line 19) | function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=M...
  function zt (line 19) | function zt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s))...
  function Ft (line 19) | function Ft(t,e,i){return zt(Lt,t,e,i)}
  function Vt (line 19) | function Vt(t){return(t%360+360)%360}
  function Bt (line 19) | function Bt(t){const e=Tt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=...
  function jt (line 19) | function jt(t){Ht||(Ht=function(){const t={},e=Object.keys(Nt),i=Object....
  function Xt (line 19) | function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*...
  function qt (line 19) | function qt(t,e){return t?Object.assign(e||{},t):t}
  function Kt (line 19) | function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.lengt...
  function Gt (line 19) | function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);le...
  class Zt (line 19) | class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let...
    method constructor (line 19) | constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var ...
    method valid (line 19) | get valid(){return this._valid}
    method rgb (line 19) | get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}
    method rgb (line 19) | set rgb(t){this._rgb=Kt(t)}
    method rgbString (line 19) | rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, $...
    method hexString (line 19) | hexString(){return this._valid?At(this._rgb):void 0}
    method hslString (line 19) | hslString(){return this._valid?function(t){if(!t)return;const e=It(t),...
    method mix (line 19) | mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o...
    method interpolate (line 19) | interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t....
    method clone (line 19) | clone(){return new Zt(this.rgb)}
    method alpha (line 19) | alpha(t){return this._rgb.a=Mt(t),this}
    method clearer (line 19) | clearer(t){return this._rgb.a*=1-t,this}
    method greyscale (line 19) | greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=...
    method opaquer (line 19) | opaquer(t){return this._rgb.a*=1+t,this}
    method negate (line 19) | negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,...
    method lighten (line 19) | lighten(t){return Xt(this._rgb,2,t),this}
    method darken (line 19) | darken(t){return Xt(this._rgb,2,-t),this}
    method saturate (line 19) | saturate(t){return Xt(this._rgb,1,t),this}
    method desaturate (line 19) | desaturate(t){return Xt(this._rgb,1,-t),this}
    method rotate (line 19) | rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r...
  function Jt (line 19) | function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[ob...
  function Qt (line 19) | function Qt(t){return Jt(t)?t:new Zt(t)}
  function te (line 19) | function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexStrin...
  function ne (line 19) | function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify...
  method numeric (line 19) | numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let ...
  method logarithmic (line 19) | logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.p...
  function he (line 19) | function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.len...
  function ce (line 19) | function ce(t,e,i){return"string"==typeof e?b(he(t,e),i):b(he(t,""),e)}
  class de (line 19) | class de{constructor(t,e){this.animation=void 0,this.backgroundColor="rg...
    method constructor (line 19) | constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,...
    method set (line 19) | set(t,e){return ce(this,t,e)}
    method get (line 19) | get(t){return he(this,t)}
    method describe (line 19) | describe(t,e){return ce(le,t,e)}
    method override (line 19) | override(t,e){return ce(re,t,e)}
    method route (line 19) | route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.definePr...
    method apply (line 19) | apply(t){t.forEach((t=>t(this)))}
  function fe (line 19) | function fe(){return"undefined"!=typeof window&&"undefined"!=typeof docu...
  function ge (line 19) | function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.to...
  function pe (line 19) | function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!=...
  function be (line 19) | function be(t,e){return me(t).getPropertyValue(e)}
  function _e (line 19) | function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=...
  function ve (line 19) | function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePi...
  function we (line 19) | function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"c...
  function ke (line 19) | function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t....
  method passive (line 19) | get passive(){return t=!0,!1}
  function Pe (line 19) | function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);retur...
  function De (line 19) | function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ...
  function Ce (line 19) | function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).wid...
  function Oe (line 19) | function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=...
  function Ae (line 19) | function Ae(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/...
  function Te (line 19) | function Te(t,e){(e=e||t.getContext("2d")).save(),e.resetTransform(),e.c...
  function Le (line 19) | function Le(t,e,i,s){Ee(t,e,i,s,null)}
  function Ee (line 19) | function Ee(t,e,i,s,n){let o,a,r,l,h,c,d,u;const f=e.pointStyle,g=e.rota...
  function Re (line 19) | function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x<e.right+i&&t....
  function Ie (line 19) | function Ie(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.le...
  function ze (line 19) | function ze(t){t.restore()}
  function Fe (line 19) | function Fe(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if("middle"===n){c...
  function Ve (line 19) | function Ve(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e....
  function Be (line 19) | function Be(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measur...
  function We (line 19) | function We(t,e){const i=t.fillStyle;t.fillStyle=e.color,t.fillRect(e.le...
  function Ne (line 19) | function Ne(t,e,i,o,a,r={}){const l=n(e)?e:[e],h=r.strokeWidth>0&&""!==r...
  function He (line 19) | function He(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a...
  function je (line 19) | function je(t,e=[""],i,s,n=(()=>t[0])){const o=i||t;void 0===s&&(s=ti("_...
  function $e (line 19) | function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProx...
  function Ye (line 19) | function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scri...
  function qe (line 19) | function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t...
  function Ke (line 19) | function Ke(t,e,i){return S(t)?t(e,i):t}
  function Ze (line 19) | function Ze(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);...
  function Je (line 19) | function Je(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t...
  function Qe (line 19) | function Qe(t,e,i,s,n){for(;i;)i=Ze(t,e,i,s,n);return i}
  function ti (line 19) | function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0...
  function ei (line 19) | function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=ne...
  function ii (line 19) | function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new A...
  function ai (line 19) | function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,...
  function ri (line 19) | function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array...
  function li (line 19) | function li(t,e,i){return Math.max(Math.min(t,i),e)}
  function hi (line 19) | function hi(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.ski...
  method easeInOutElastic (line 19) | easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):....
  method easeInBack (line 19) | easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)}
  method easeOutBack (line 19) | easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1}
  method easeInOutBack (line 19) | easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*...
  method easeOutBounce (line 19) | easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1....
  function gi (line 19) | function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}
  function pi (line 19) | function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e....
  function mi (line 19) | function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a...
  function _i (line 19) | function _i(t,e){const i=(""+t).match(bi);if(!i||"normal"===i[1])return ...
  function vi (line 19) | function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[...
  function Mi (line 19) | function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}
  function wi (line 19) | function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRig...
  function ki (line 19) | function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.to...
  function Si (line 19) | function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==t...
  function Pi (line 19) | function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;o<a;++o)if(r=t[o]...
  function Di (line 19) | function Di(t,e,i){const{min:s,max:n}=t,o=c(e,(n-s)/2),a=(t,e)=>i&&0===t...
  function Ci (line 19) | function Ci(t,e){return Object.assign(Object.create(t),e)}
  function Oi (line 19) | function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t...
  function Ai (line 19) | function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.ge...
  function Ti (line 19) | function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style....
  function Li (line 19) | function Li(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{betw...
  function Ei (line 19) | function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end...
  function Ri (line 19) | function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e...
  function Ii (line 19) | function Ii(t,e){const i=[],s=t.segments;for(let n=0;n<s.length;n++){con...
  function zi (line 19) | function zi(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)...
  function Fi (line 19) | function Fi(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n...
  function Vi (line 19) | function Vi(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t...
  function Bi (line 19) | function Bi(t,e){if(!e)return!1;const i=[],s=function(t,e){return Jt(e)?...
  function Ni (line 19) | function Ni(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedM...
  function Hi (line 19) | function Hi(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];f...
  function ji (line 19) | function ji(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;re...
  function $i (line 19) | function $i(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.ind...
  function Yi (line 19) | function Yi(t,e,i,s,n,o){return o||t.isPointInArea(e)?"r"!==i||s?$i(t,e,...
  function Ui (line 19) | function Ui(t,e,i,s,n){const o=[],a="x"===i?"inXRange":"inYRange";let r=...
  method index (line 19) | index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=...
  method dataset (line 19) | dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1...
  method nearest (line 19) | nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1...
  function Ki (line 19) | function Ki(t,e){return t.filter((t=>t.pos===e))}
  function Gi (line 19) | function Gi(t,e){return t.filter((t=>-1===qi.indexOf(t.pos)&&t.box.axis=...
  function Zi (line 19) | function Zi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.w...
  function Ji (line 19) | function Ji(t,e){const i=function(t){const e={};for(const i of t){const{...
  function Qi (line 19) | function Qi(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}
  function ts (line 19) | function ts(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.le...
  function es (line 19) | function es(t,e,i,s){const{pos:n,box:a}=i,r=t.maxPadding;if(!o(n)){i.siz...
  function is (line 19) | function is(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:...
  function ss (line 19) | function ss(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o...
  function ns (line 19) | function ns(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width...
  function os (line 19) | function os(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){...
  method addBox (line 19) | addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e...
  method removeBox (line 19) | removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.spl...
  method configure (line 19) | configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i....
  method update (line 19) | update(t,e,i,s){if(!t)return;const n=ki(t.options.layout.padding),o=Math...
  class rs (line 19) | class rs{acquireContext(t,e){}releaseContext(t){return!1}addEventListene...
    method acquireContext (line 19) | acquireContext(t,e){}
    method releaseContext (line 19) | releaseContext(t){return!1}
    method addEventListener (line 19) | addEventListener(t,e,i){}
    method removeEventListener (line 19) | removeEventListener(t,e,i){}
    method getDevicePixelRatio (line 19) | getDevicePixelRatio(){return 1}
    method getMaximumSize (line 19) | getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,...
    method isAttached (line 19) | isAttached(t){return!0}
    method updateConfig (line 19) | updateConfig(t){}
  class ls (line 19) | class ls extends rs{acquireContext(t){return t&&t.getContext&&t.getConte...
    method acquireContext (line 19) | acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}
    method updateConfig (line 19) | updateConfig(t){t.options.animation=!1}
  function fs (line 19) | function fs(t,e,i){t.canvas.removeEventListener(e,i,us)}
  function gs (line 19) | function gs(t,e){for(const i of t)if(i===e||i.contains(e))return!0}
  function ps (line 19) | function ps(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1...
  function ms (line 19) | function ms(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1...
  function _s (line 19) | function _s(){const t=window.devicePixelRatio;t!==xs&&(xs=t,bs.forEach((...
  function ys (line 19) | function ys(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct((...
  function vs (line 19) | function vs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){bs.delete...
  function Ms (line 19) | function Ms(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t...
  class ws (line 19) | class ws extends rs{acquireContext(t,e){const i=t&&t.getContext&&t.getCo...
    method acquireContext (line 19) | acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return...
    method releaseContext (line 19) | releaseContext(t){const e=t.canvas;if(!e[hs])return!1;const i=e[hs].in...
    method addEventListener (line 19) | addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxi...
    method removeEventListener (line 19) | removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if...
    method getDevicePixelRatio (line 19) | getDevicePixelRatio(){return window.devicePixelRatio}
    method getMaximumSize (line 19) | getMaximumSize(t,e,i,s){return we(t,e,i,s)}
    method isAttached (line 19) | isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}
  function ks (line 19) | function ks(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t insta...
  method color (line 19) | color(t,e,i){const s=Qt(t||Ps),n=s.valid&&Qt(e||Ps);return n&&n.valid?n....
  class Cs (line 19) | class Cs{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const...
    method constructor (line 19) | constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([...
    method active (line 19) | active(){return this._active}
    method update (line 19) | update(t,e,i){if(this._active){this._notify(!1);const s=this._target[t...
    method cancel (line 19) | cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._no...
    method tick (line 19) | tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._fr...
    method wait (line 19) | wait(){const t=this._promises||(this._promises=[]);return new Promise(...
    method _notify (line 19) | _notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t<i....
  class Os (line 19) | class Os{constructor(t,e){this._chart=t,this._properties=new Map,this.co...
    method constructor (line 19) | constructor(t,e){this._chart=t,this._properties=new Map,this.configure...
    method configure (line 19) | configure(t){if(!o(t))return;const e=Object.keys(ue.animation),i=this....
    method _animateOptions (line 19) | _animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;le...
    method _createAnimations (line 19) | _createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||...
    method update (line 19) | update(t,e){if(0===this._properties.size)return void Object.assign(t,e...
  function As (line 19) | function As(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e...
  function Ts (line 19) | function Ts(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=...
  function Ls (line 19) | function Ls(t,e,i,s={}){const n=t.keys,o="single"===s.mode;let r,l,h,c;i...
  function Es (line 19) | function Es(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void...
  function Rs (line 19) | function Rs(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}
  function Is (line 19) | function Is(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse...
  function zs (line 19) | function zs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks=...
  function Fs (line 19) | function Fs(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t]....
  function Vs (line 19) | function Vs(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if...
  class Ns (line 19) | class Ns{static defaults={};static datasetElementType=null;static dataEl...
    method constructor (line 19) | constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cache...
    method initialize (line 19) | initialize(){const t=this._cachedMeta;this.configure(),this.linkScales...
    method updateIndex (line 19) | updateIndex(t){this.index!==t&&Vs(this._cachedMeta),this.index=t}
    method linkScales (line 19) | linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset()...
    method getDataset (line 19) | getDataset(){return this.chart.data.datasets[this.index]}
    method getMeta (line 19) | getMeta(){return this.chart.getDatasetMeta(this.index)}
    method getScaleForId (line 19) | getScaleForId(t){return this.chart.scales[t]}
    method _getOtherScale (line 19) | _getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScal...
    method reset (line 19) | reset(){this._update("reset")}
    method _destroy (line 19) | _destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t....
    method _dataCheck (line 19) | _dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._d...
    method addElements (line 19) | addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetE...
    method buildOrUpdateElements (line 19) | buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();...
    method configure (line 19) | configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type)...
    method parse (line 19) | parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:a,_stacked:r}=i,l...
    method parsePrimitiveData (line 19) | parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.ax...
    method parseArrayData (line 19) | parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let ...
    method parseObjectData (line 19) | parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a="x",yA...
    method getParsed (line 19) | getParsed(t){return this._cachedMeta._parsed[t]}
    method getDataElement (line 19) | getDataElement(t){return this._cachedMeta.data[t]}
    method applyStack (line 19) | applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];re...
    method updateRangeFromParsed (line 19) | updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;...
    method getMinMax (line 19) | getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i...
    method getAllParsedValues (line 19) | getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;...
    method getMaxOverflow (line 19) | getMaxOverflow(){return!1}
    method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=t...
    method _update (line 19) | _update(t){const e=this._cachedMeta;this.update(t||"default"),e._clip=...
    method update (line 19) | update(t){}
    method draw (line 19) | draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],...
    method getStyle (line 19) | getStyle(t,e){const i=e?"active":"default";return void 0===t&&this._ca...
    method getContext (line 19) | getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t<this._cac...
    method resolveDatasetElementOptions (line 19) | resolveDatasetElementOptions(t){return this._resolveElementOptions(thi...
    method resolveDataElementOptions (line 19) | resolveDataElementOptions(t,e){return this._resolveElementOptions(this...
    method _resolveElementOptions (line 19) | _resolveElementOptions(t,e="default",i){const s="active"===e,n=this._c...
    method _resolveAnimations (line 19) | _resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=...
    method getSharedOptions (line 19) | getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sh...
    method includeOptions (line 19) | includeOptions(t,e){return!e||Bs(t)||this.chart._animationsDisabled}
    method _getSharedOptions (line 19) | _getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=t...
    method updateElement (line 19) | updateElement(t,e,i,s){Bs(s)?Object.assign(t,i):this._resolveAnimation...
    method updateSharedOptions (line 19) | updateSharedOptions(t,e,i){t&&!Bs(e)&&this._resolveAnimations(void 0,e...
    method _setStyle (line 19) | _setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolve...
    method removeHoverStyle (line 19) | removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}
    method setHoverStyle (line 19) | setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}
    method _removeDatasetHoverStyle (line 19) | _removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._s...
    method _setDatasetHoverStyle (line 19) | _setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setS...
    method _resyncElements (line 19) | _resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(cons...
    method _insertElements (line 19) | _insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let ...
    method updateElements (line 19) | updateElements(t,e,i,s){}
    method _removeElements (line 19) | _removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const ...
    method _sync (line 19) | _sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;t...
    method _onDataPush (line 19) | _onDataPush(){const t=arguments.length;this._sync(["_insertElements",t...
    method _onDataPop (line 19) | _onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.lengt...
    method _onDataShift (line 19) | _onDataShift(){this._sync(["_removeElements",0,1])}
    method _onDataSplice (line 19) | _onDataSplice(t,e){e&&this._sync(["_removeElements",t,e]);const i=argu...
    method _onDataUnshift (line 19) | _onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}
  class Hs (line 19) | class Hs{static defaults={};static defaultRoutes=void 0;x;y;active=!1;op...
    method tooltipPosition (line 19) | tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:...
    method hasValue (line 19) | hasValue(){return N(this.x)&&N(this.y)}
    method getProps (line 19) | getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={...
  function js (line 19) | function js(t,e){const i=t.options.ticks,n=function(t){const e=t.options...
  function $s (line 19) | function $s(t,e,i,s,n){const o=l(s,0),a=Math.min(l(n,t.length),t.length)...
  function Xs (line 19) | function Xs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;o<n;o+=...
  function qs (line 19) | function qs(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPi...
  function Ks (line 19) | function Ks(t){return t.drawTicks?t.tickLength:0}
  function Gs (line 19) | function Gs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padd...
  function Zs (line 19) | function Zs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&...
  class Js (line 19) | class Js extends Hs{constructor(t){super(),this.id=t.id,this.type=t.type...
    method constructor (line 19) | constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void...
    method init (line 19) | init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,...
    method parse (line 19) | parse(t,e){return t}
    method getUserBounds (line 19) | getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMa...
    method getMinMax (line 19) | getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUse...
    method getPadding (line 19) | getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,ri...
    method getTicks (line 19) | getTicks(){return this.ticks}
    method getLabels (line 19) | getLabels(){const t=this.chart.data;return this.options.labels||(this....
    method getLabelItems (line 19) | getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._...
    method beforeLayout (line 19) | beforeLayout(){this._cache={},this._dataLimitsCached=!1}
    method beforeUpdate (line 19) | beforeUpdate(){d(this.options.beforeUpdate,[this])}
    method update (line 19) | update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sa...
    method configure (line 19) | configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this...
    method afterUpdate (line 19) | afterUpdate(){d(this.options.afterUpdate,[this])}
    method beforeSetDimensions (line 19) | beforeSetDimensions(){d(this.options.beforeSetDimensions,[this])}
    method setDimensions (line 19) | setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.lef...
    method afterSetDimensions (line 19) | afterSetDimensions(){d(this.options.afterSetDimensions,[this])}
    method _callHooks (line 19) | _callHooks(t){this.chart.notifyPlugins(t,this.getContext()),d(this.opt...
    method beforeDataLimits (line 19) | beforeDataLimits(){this._callHooks("beforeDataLimits")}
    method determineDataLimits (line 19) | determineDataLimits(){}
    method afterDataLimits (line 19) | afterDataLimits(){this._callHooks("afterDataLimits")}
    method beforeBuildTicks (line 19) | beforeBuildTicks(){this._callHooks("beforeBuildTicks")}
    method buildTicks (line 19) | buildTicks(){return[]}
    method afterBuildTicks (line 19) | afterBuildTicks(){this._callHooks("afterBuildTicks")}
    method beforeTickToLabelConversion (line 19) | beforeTickToLabelConversion(){d(this.options.beforeTickToLabelConversi...
    method generateTickLabels (line 19) | generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t...
    method afterTickToLabelConversion (line 19) | afterTickToLabelConversion(){d(this.options.afterTickToLabelConversion...
    method beforeCalculateLabelRotation (line 19) | beforeCalculateLabelRotation(){d(this.options.beforeCalculateLabelRota...
    method calculateLabelRotation (line 19) | calculateLabelRotation(){const t=this.options,e=t.ticks,i=Us(this.tick...
    method afterCalculateLabelRotation (line 19) | afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotati...
    method afterAutoSkip (line 19) | afterAutoSkip(){}
    method beforeFit (line 19) | beforeFit(){d(this.options.beforeFit,[this])}
    method fit (line 19) | fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,gri...
    method _calculatePadding (line 19) | _calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}...
    method _handleMargins (line 19) | _handleMargins(){this._margins&&(this._margins.left=Math.max(this.padd...
    method afterFit (line 19) | afterFit(){d(this.options.afterFit,[this])}
    method isHorizontal (line 19) | isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||...
    method isFullSize (line 19) | isFullSize(){return this.options.fullSize}
    method _convertTicksToLabels (line 19) | _convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(...
    method _getLabelSizes (line 19) | _getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ti...
    method _computeLabelSizes (line 19) | _computeLabelSizes(t,e,i){const{ctx:o,_longestTextCache:a}=this,r=[],l...
    method getLabelForValue (line 19) | getLabelForValue(t){return t}
    method getPixelForValue (line 19) | getPixelForValue(t,e){return NaN}
    method getValueForPixel (line 19) | getValueForPixel(t){}
    method getPixelForTick (line 19) | getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:th...
    method getPixelForDecimal (line 19) | getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._start...
    method getDecimalForPixel (line 19) | getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return...
    method getBasePixel (line 19) | getBasePixel(){return this.getPixelForValue(this.getBaseValue())}
    method getBaseValue (line 19) | getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}
    method getContext (line 19) | getContext(t){const e=this.ticks||[];if(t>=0&&t<e.length){const i=e[t]...
    method _tickSize (line 19) | _tickSize(){const t=this.options.ticks,e=$(this.labelRotation),i=Math....
    method _isVisible (line 19) | _isVisible(){const t=this.options.display;return"auto"!==t?!!t:this.ge...
    method _computeGridLineItems (line 19) | _computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options...
    method _computeLabelItems (line 19) | _computeLabelItems(t){const e=this.axis,i=this.options,{position:s,tic...
    method _getXAxisLabelAlignment (line 19) | _getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-$...
    method _getYAxisLabelAlignment (line 19) | _getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror...
    method _computeLabelArea (line 19) | _computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.c...
    method drawBackground (line 19) | drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,...
    method getLineWidthForValue (line 19) | getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible(...
    method drawGrid (line 19) | drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems...
    method drawBorder (line 19) | drawBorder(){const{chart:t,ctx:e,options:{border:i,grid:s}}=this,n=i.s...
    method drawLabels (line 19) | drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i...
    method drawTitle (line 19) | drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;i...
    method draw (line 19) | draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),thi...
    method _layers (line 19) | _layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=l(t.grid&&t.g...
    method getMatchingVisibleMetas (line 19) | getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetM...
    method _resolveTickFontOptions (line 19) | _resolveTickFontOptions(t){return Si(this.options.ticks.setContext(thi...
    method _maxDigits (line 19) | _maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return...
  class Qs (line 19) | class Qs{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,thi...
    method constructor (line 19) | constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items...
    method isForType (line 19) | isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prot...
    method register (line 19) | register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return...
    method get (line 19) | get(t){return this.items[t]}
    method unregister (line 19) | unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[...
  class tn (line 19) | class tn{constructor(){this.controllers=new Qs(Ns,"datasets",!0),this.el...
    method constructor (line 19) | constructor(){this.controllers=new Qs(Ns,"datasets",!0),this.elements=...
    method add (line 19) | add(...t){this._each("register",t)}
    method remove (line 19) | remove(...t){this._each("unregister",t)}
    method addControllers (line 19) | addControllers(...t){this._each("register",t,this.controllers)}
    method addElements (line 19) | addElements(...t){this._each("register",t,this.elements)}
    method addPlugins (line 19) | addPlugins(...t){this._each("register",t,this.plugins)}
    method addScales (line 19) | addScales(...t){this._each("register",t,this.scales)}
    method getController (line 19) | getController(t){return this._get(t,this.controllers,"controller")}
    method getElement (line 19) | getElement(t){return this._get(t,this.elements,"element")}
    method getPlugin (line 19) | getPlugin(t){return this._get(t,this.plugins,"plugin")}
    method getScale (line 19) | getScale(t){return this._get(t,this.scales,"scale")}
    method removeControllers (line 19) | removeControllers(...t){this._each("unregister",t,this.controllers)}
    method removeElements (line 19) | removeElements(...t){this._each("unregister",t,this.elements)}
    method removePlugins (line 19) | removePlugins(...t){this._each("unregister",t,this.plugins)}
    method removeScales (line 19) | removeScales(...t){this._each("unregister",t,this.scales)}
    method _each (line 19) | _each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e...
    method _exec (line 19) | _exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s]...
    method _getRegistryForType (line 19) | _getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++)...
    method _get (line 19) | _get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('"'+t+'" is...
  class sn (line 19) | class sn{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(...
    method constructor (line 19) | constructor(){this._init=[]}
    method notify (line 19) | notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(...
    method _notify (line 19) | _notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===d(...
    method invalidate (line 19) | invalidate(){s(this._cache)||(this._oldCache=this._cache,this._cache=v...
    method _descriptors (line 19) | _descriptors(t){if(this._cache)return this._cache;const e=this._cache=...
    method _createDescriptors (line 19) | _createDescriptors(t,e){const i=t&&t.config,s=l(i.options&&i.options.p...
    method _notifyStateChanges (line 19) | _notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e...
  function nn (line 19) | function nn(t,e){return e||!1!==t?!0===t?{}:t:null}
  function on (line 19) | function on(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.g...
  function an (line 19) | function an(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||...
  function rn (line 19) | function rn(t){if("x"===t||"y"===t||"r"===t)return t}
  function ln (line 19) | function ln(t,...e){if(rn(t))return t;for(const s of e){const e=s.axis||...
  function hn (line 19) | function hn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}
  function cn (line 19) | function cn(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=an(t.t...
  function dn (line 19) | function dn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{...
  function un (line 19) | function un(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels...
  function pn (line 19) | function pn(t,e){let i=fn.get(t);return i||(i=e(),fn.set(t,i),gn.add(i)),i}
  class bn (line 19) | class bn{constructor(t){this._config=function(t){return(t=t||{}).data=un...
    method constructor (line 19) | constructor(t){this._config=function(t){return(t=t||{}).data=un(t.data...
    method platform (line 19) | get platform(){return this._config.platform}
    method type (line 19) | get type(){return this._config.type}
    method type (line 19) | set type(t){this._config.type=t}
    method data (line 19) | get data(){return this._config.data}
    method data (line 19) | set data(t){this._config.data=un(t)}
    method options (line 19) | get options(){return this._config.options}
    method options (line 19) | set options(t){this._config.options=t}
    method plugins (line 19) | get plugins(){return this._config.plugins}
    method update (line 19) | update(){const t=this._config;this.clearCache(),dn(t)}
    method clearCache (line 19) | clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}
    method datasetScopeKeys (line 19) | datasetScopeKeys(t){return pn(t,(()=>[[`datasets.${t}`,""]]))}
    method datasetAnimationScopeKeys (line 19) | datasetAnimationScopeKeys(t,e){return pn(`${t}.transition.${e}`,(()=>[...
    method datasetElementScopeKeys (line 19) | datasetElementScopeKeys(t,e){return pn(`${t}-${e}`,(()=>[[`datasets.${...
    method pluginScopeKeys (line 19) | pluginScopeKeys(t){const e=t.id;return pn(`${this.type}-plugin-${e}`,(...
    method _cachedScopes (line 19) | _cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!...
    method getOptionScopes (line 19) | getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScop...
    method chartOptionScopes (line 19) | chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue...
    method resolveNamedOptions (line 19) | resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,sub...
    method createResolver (line 19) | createResolver(t,e,i=[""],s){const{resolver:n}=xn(this._resolverCache,...
  function xn (line 19) | function xn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.jo...
  function vn (line 19) | function vn(t,e){return"top"===t||"bottom"===t||-1===yn.indexOf(t)&&"x"=...
  function Mn (line 19) | function Mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-...
  function wn (line 19) | function wn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("af...
  function kn (line 19) | function kn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[...
  function Sn (line 19) | function Sn(t){return fe()&&"string"==typeof t?t=document.getElementById...
  function Cn (line 19) | function Cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;i...
  function On (line 19) | function On(t,e,i){return t.options.clip?t[i]:e[i]}
  class An (line 19) | class An{static defaults=ue;static instances=Pn;static overrides=re;stat...
    method register (line 19) | static register(...t){en.add(...t),Tn()}
    method unregister (line 19) | static unregister(...t){en.remove(...t),Tn()}
    method constructor (line 19) | constructor(t,e){const s=this.config=new bn(e),n=Sn(t),o=Dn(n);if(o)th...
    method aspectRatio (line 19) | get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},...
    method data (line 19) | get data(){return this.config.data}
    method data (line 19) | set data(t){this.config.data=t}
    method options (line 19) | get options(){return this._options}
    method options (line 19) | set options(t){this.config.options=t}
    method registry (line 19) | get registry(){return en}
    method _initialize (line 19) | _initialize(){return this.notifyPlugins("beforeInit"),this.options.res...
    method clear (line 19) | clear(){return Te(this.canvas,this.ctx),this}
    method stop (line 19) | stop(){return xt.stop(this),this}
    method resize (line 19) | resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}...
    method _resize (line 19) | _resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRati...
    method ensureScalesHaveIDs (line 19) | ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}
    method buildOrUpdateScales (line 19) | buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=...
    method _updateMetasets (line 19) | _updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i...
    method _removeUnreferencedMetasets (line 19) | _removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=thi...
    method buildOrUpdateControllers (line 19) | buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for...
    method _resetElements (line 19) | _resetElements(){u(this.data.datasets,((t,e)=>{this.getDatasetMeta(e)....
    method reset (line 19) | reset(){this._resetElements(),this.notifyPlugins("reset")}
    method update (line 19) | update(t){const e=this.config;e.update();const i=this._options=e.creat...
    method _updateScales (line 19) | _updateScales(){u(this.scales,(t=>{as.removeBox(this,t)})),this.ensure...
    method _checkEventBindings (line 19) | _checkEventBindings(){const t=this.options,e=new Set(Object.keys(this....
    method _updateHiddenIndices (line 19) | _updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniform...
    method _getUniformDataChanges (line 19) | _getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)re...
    method _updateLayout (line 19) | _updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable...
    method _updateDatasets (line 19) | _updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{...
    method _updateDataset (line 19) | _updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,m...
    method render (line 19) | render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(xt....
    method draw (line 19) | draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._...
    method _getSortedDatasetMetas (line 19) | _getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;fo...
    method getSortedVisibleDatasetMetas (line 19) | getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}
    method _drawDatasets (line 19) | _drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cance...
    method _drawDataset (line 19) | _drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t,...
    method isPointInArea (line 19) | isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}
    method getElementsAtEventForMode (line 19) | getElementsAtEventForMode(t,e,i,s){const n=Xi.modes[e];return"function...
    method getDatasetMeta (line 19) | getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s...
    method getContext (line 19) | getContext(){return this.$context||(this.$context=Ci(null,{chart:this,...
    method getVisibleDatasetCount (line 19) | getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().le...
    method isDatasetVisible (line 19) | isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const...
    method setDatasetVisibility (line 19) | setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}
    method toggleDataVisibility (line 19) | toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}
    method getDataVisibility (line 19) | getDataVisibility(t){return!this._hiddenIndices[t]}
    method _updateVisibility (line 19) | _updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta...
    method hide (line 19) | hide(t,e){this._updateVisibility(t,e,!1)}
    method show (line 19) | show(t,e){this._updateVisibility(t,e,!0)}
    method _destroyDatasetMeta (line 19) | _destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.co...
    method _stop (line 19) | _stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datase...
    method destroy (line 19) | destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:e}=th...
    method toBase64Image (line 19) | toBase64Image(...t){return this.canvas.toDataURL(...t)}
    method bindEvents (line 19) | bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindRe...
    method bindUserEvents (line 19) | bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.a...
    method bindResponsiveEvents (line 19) | bindResponsiveEvents(){this._responsiveListeners||(this._responsiveLis...
    method unbindEvents (line 19) | unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventLis...
    method updateHoverStyle (line 19) | updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("data...
    method getActiveElements (line 19) | getActiveElements(){return this._active||[]}
    method setActiveElements (line 19) | setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:...
    method notifyPlugins (line 19) | notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}
    method isPluginEnabled (line 19) | isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin...
    method _updateHoverStyles (line 19) | _updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter...
    method _eventHandler (line 19) | _eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea...
    method _handleEvent (line 19) | _handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._get...
    method _getActiveElements (line 19) | _getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)retu...
  function Tn (line 19) | function Tn(){return u(An.instances,(t=>t._plugins.invalidate()))}
  function Ln (line 19) | function Ln(){throw new Error("This method is not implemented: Check tha...
  class En (line 19) | class En{static override(t){Object.assign(En.prototype,t)}options;constr...
    method override (line 19) | static override(t){Object.assign(En.prototype,t)}
    method constructor (line 19) | constructor(t){this.options=t||{}}
    method init (line 19) | init(){}
    method formats (line 19) | formats(){return Ln()}
    method parse (line 19) | parse(){return Ln()}
    method format (line 19) | format(){return Ln()}
    method add (line 19) | add(){return Ln()}
    method diff (line 19) | diff(){return Ln()}
    method startOf (line 19) | startOf(){return Ln()}
    method endOf (line 19) | endOf(){return Ln()}
  function In (line 19) | function In(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const...
  function zn (line 19) | function zn(t,e,i,s){return n(t)?function(t,e,i,s){const n=i.parse(t[0],...
  function Fn (line 19) | function Fn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o...
  function Vn (line 19) | function Vn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}
  function Bn (line 19) | function Bn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(...
  function Wn (line 19) | function Wn(t,e,i,s){var n,o,a;return s?(a=i,t=Nn(t=(n=t)===(o=e)?a:n===...
  function Nn (line 19) | function Nn(t,e,i){return"start"===t?e:"end"===t?i:t}
  function Hn (line 19) | function Hn(t,{inflateAmount:e},i){t.inflateAmount="auto"===e?1===i?.33:...
  class jn (line 19) | class jn extends Ns{static id="doughnut";static defaults={datasetElement...
    method generateLabels (line 19) | generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length...
    method onClick (line 19) | onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}
    method constructor (line 19) | constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadi...
    method linkScales (line 19) | linkScales(){}
    method parse (line 19) | parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===t...
    method _getRotation (line 19) | _getRotation(){return $(this.options.rotation-90)}
    method _getCircumference (line 19) | _getCircumference(){return $(this.options.circumference)}
    method _getRotationExtents (line 19) | _getRotationExtents(){let t=O,e=-O;for(let i=0;i<this.chart.data.datas...
    method update (line 19) | update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.da...
    method _circumference (line 19) | _circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._ge...
    method updateElements (line 19) | updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea...
    method calculateTotal (line 19) | calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i...
    method calculateCircumference (line 19) | calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!...
    method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.lab...
    method getMaxBorderWidth (line 19) | getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)fo...
    method getMaxOffset (line 19) | getMaxOffset(t){let e=0;for(let i=0,s=t.length;i<s;++i){const t=this.r...
    method _getRingWeightOffset (line 19) | _getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatas...
    method _getRingWeight (line 19) | _getRingWeight(t){return Math.max(l(this.chart.data.datasets[t].weight...
    method _getVisibleDatasetWeightTotal (line 19) | _getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this....
  class $n (line 19) | class $n extends Ns{static id="polarArea";static defaults={dataElementTy...
    method generateLabels (line 19) | generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length...
    method onClick (line 19) | onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}
    method constructor (line 19) | constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=v...
    method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.lab...
    method parseObjectData (line 19) | parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}
    method update (line 19) | update(t){const e=this._cachedMeta.data;this._updateRadius(),this.upda...
    method getMinMax (line 19) | getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,m...
    method _updateRadius (line 19) | _updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.mi...
    method updateElements (line 19) | updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.a...
    method countVisibleElements (line 19) | countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data....
    method _computeAngle (line 19) | _computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.res...
  method parsePrimitiveData (line 19) | parsePrimitiveData(t,e,i,s){return Fn(t,e,i,s)}
  method parseArrayData (line 19) | parseArrayData(t,e,i,s){return Fn(t,e,i,s)}
  method parseObjectData (line 19) | parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxi...
  method updateRangeFromParsed (line 19) | updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);cons...
  method getMaxOverflow (line 19) | getMaxOverflow(){return 0}
  method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=thi...
  method initialize (line 19) | initialize(){this.enableOptionSharing=!0,super.initialize();this._cached...
  method update (line 19) | update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.l...
  method updateElements (line 19) | updateElements(t,e,i,n){const o="reset"===n,{index:a,_cachedMeta:{vScale...
  method _getStacks (line 19) | _getStacks(t,e){const{iScale:i}=this._cachedMeta,n=i.getMatchingVisibleM...
  method _getStackCount (line 19) | _getStackCount(t){return this._getStacks(void 0,t).length}
  method _getStackIndex (line 19) | _getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexO...
  method _getRuler (line 19) | _getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let ...
  method _calculateBarValuePixels (line 19) | _calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i,index...
  method _calculateBarIndexPixels (line 19) | _calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNul...
  method draw (line 19) | draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;f...
  method initialize (line 19) | initialize(){this.enableOptionSharing=!0,super.initialize()}
  method parsePrimitiveData (line 19) | parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);fo...
  method parseArrayData (line 19) | parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=...
  method parseObjectData (line 19) | parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let ...
  method getMaxOverflow (line 19) | getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.lengt...
  method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[...
  method update (line 19) | update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length...
  method updateElements (line 19) | updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._ca...
  method resolveDataElementOptions (line 19) | resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.res...
  method initialize (line 19) | initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,supe...
  method update (line 19) | update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=...
  method updateElements (line 19) | updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:...
  method getMaxOverflow (line 19) | getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.opt...
  method draw (line 19) | draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart...
  method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);...
  method parseObjectData (line 19) | parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}
  method update (line 19) | update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.g...
  method updateElements (line 19) | updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;fo...
  method getLabelAndValue (line 19) | getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[...
  method update (line 19) | update(t){const e=this._cachedMeta,{data:i=[]}=e,s=this.chart._animation...
  method addElements (line 19) | addElements(){const{showLine:t}=this.options;!this.datasetElementType&&t...
  method updateElements (line 19) | updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:...
  method getMaxOverflow (line 19) | getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options....
  function Un (line 19) | function Un(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","ou...
  function Xn (line 19) | function Xn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}
  function qn (line 19) | function qn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerR...
  function Kn (line 19) | function Kn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,...
  function Gn (line 19) | function Gn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.se...
  function Zn (line 19) | function Zn(t,e,i){t.lineTo(i.x,i.y)}
  function Jn (line 19) | function Jn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,...
  function Qn (line 19) | function Qn(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l...
  function to (line 19) | function to(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=Jn(n,i,s)...
  function eo (line 19) | function eo(t){const e=t.options,i=e.borderDash&&e.borderDash.length;ret...
  function so (line 19) | function so(t,e,i,s){io&&!e.options.segment?function(t,e,i,s){let n=e._p...
  class no (line 19) | class no extends Hs{static id="line";static defaults={borderCapStyle:"bu...
    method constructor (line 19) | constructor(t){super(),this.animated=!0,this.options=void 0,this._char...
    method updateControlPoints (line 19) | updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone...
    method points (line 19) | set points(t){this._points=t,delete this._segments,delete this._path,t...
    method points (line 19) | get points(){return this._points}
    method segments (line 19) | get segments(){return this._segments||(this._segments=zi(this,this.opt...
    method first (line 19) | first(){const t=this.segments,e=this.points;return t.length&&e[t[0].st...
    method last (line 19) | last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-...
    method interpolate (line 19) | interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{...
    method pathSegment (line 19) | pathSegment(t,e,i){return eo(this)(t,this,e,i)}
    method path (line 19) | path(t,e,i){const s=this.segments,n=eo(this);let o=this._loop;e=e||0,i...
    method draw (line 19) | draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.bor...
  function oo (line 19) | function oo(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return ...
  function ao (line 19) | function ao(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps(["x",...
  function ro (line 19) | function ro(t,e,i,s){return t?0:J(e,i,s)}
  function lo (line 19) | function lo(t){const e=ao(t),i=e.right-e.left,s=e.bottom-e.top,n=functio...
  function ho (line 19) | function ho(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&ao(t,s);r...
  function co (line 19) | function co(t,e){t.rect(e.x,e.y,e.w,e.h)}
  function uo (line 19) | function uo(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w...
  method constructor (line 19) | constructor(t){super(),this.options=void 0,this.circumference=void 0,thi...
  method inRange (line 19) | inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X...
  method getCenterPoint (line 19) | getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,ou...
  method tooltipPosition (line 19) | tooltipPosition(t){return this.getCenterPoint(t)}
  method draw (line 19) | draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spa...
  method constructor (line 19) | constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.b...
  method draw (line 19) | draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}...
  method inRange (line 19) | inRange(t,e,i){return ho(this,t,e,i)}
  method inXRange (line 19) | inXRange(t,e){return ho(this,t,null,e)}
  method inYRange (line 19) | inYRange(t,e){return ho(this,null,t,e)}
  method getCenterPoint (line 19) | getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps(["x",...
  method getRange (line 19) | getRange(t){return"x"===t?this.width/2:this.height/2}
  method constructor (line 19) | constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=...
  method inRange (line 19) | inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i)...
  method inXRange (line 19) | inXRange(t,e){return oo(this,t,"x",e)}
  method inYRange (line 19) | inYRange(t,e){return oo(this,t,"y",e)}
  method getCenterPoint (line 19) | getCenterPoint(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y...
  method size (line 19) | size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverR...
  method draw (line 19) | draw(t,e){const i=this.options;this.skip||i.radius<.1||!Re(this,e,this.s...
  method getRange (line 19) | getRange(){const t=this.options||{};return t.radius+t.hitRadius}
  function go (line 19) | function go(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("...
  function po (line 19) | function po(t){const e=this.getLabels();return t>=0&&t<e.length?e[t]:t}
  function mo (line 19) | function mo(t,e,{horizontal:i,minRotation:s}){const n=$(s),o=(i?Math.sin...
  class bo (line 19) | class bo extends Js{constructor(t){super(t),this.start=void 0,this.end=v...
    method constructor (line 19) | constructor(t){super(t),this.start=void 0,this.end=void 0,this._startV...
    method parse (line 19) | parse(t,e){return s(t)||("number"==typeof t||t instanceof Number)&&!is...
    method handleTickRangeOptions (line 19) | handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined...
    method getTickLimit (line 19) | getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepS...
    method computeTickLimit (line 19) | computeTickLimit(){return Number.POSITIVE_INFINITY}
    method buildTicks (line 19) | buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();...
    method configure (line 19) | configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.conf...
    method getLabelForValue (line 19) | getLabelForValue(t){return ne(t,this.chart.options.locale,this.options...
  class xo (line 19) | class xo extends bo{static id="linear";static defaults={ticks:{callback:...
    method determineDataLimits (line 19) | determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a...
    method computeTickLimit (line 19) | computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.hei...
    method getPixelForValue (line 19) | getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-thi...
    method getValueForPixel (line 19) | getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)...
  function vo (line 19) | function vo(t){return 1===t/Math.pow(10,_o(t))}
  function Mo (line 19) | function Mo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math....
  function wo (line 19) | function wo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=_o(e);let o=funct...
  class ko (line 19) | class ko extends Js{static id="logarithmic";static defaults={ticks:{call...
    method constructor (line 19) | constructor(t){super(t),this.start=void 0,this.end=void 0,this._startV...
    method parse (line 19) | parse(t,e){const i=bo.prototype.parse.apply(this,[t,e]);if(0!==i)retur...
    method determineDataLimits (line 19) | determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a...
    method handleTickRangeOptions (line 19) | handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUser...
    method buildTicks (line 19) | buildTicks(){const t=this.options,e=wo({min:this._userMin,max:this._us...
    method getLabelForValue (line 19) | getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.loca...
    method configure (line 19) | configure(){const t=this.min;super.configure(),this._startValue=z(t),t...
    method getPixelForValue (line 19) | getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||i...
    method getValueForPixel (line 19) | getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow...
  function So (line 19) | function So(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.bac...
  function Po (line 19) | function Po(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:t<s||...
  function Do (line 19) | function Do(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.ri...
  function Co (line 19) | function Co(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos...
  function Oo (line 19) | function Oo(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padd...
  function Ao (line 19) | function Ao(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;r...
  function To (line 19) | function To(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor...
  function Lo (line 19) | function Lo(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O...
  class Eo (line 19) | class Eo extends bo{static id="radialLinear";static defaults={display:!0...
    method constructor (line 19) | constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.d...
    method setDimensions (line 19) | setDimensions(){const t=this._padding=ki(So(this.options)/2),e=this.wi...
    method determineDataLimits (line 19) | determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a...
    method computeTickLimit (line 19) | computeTickLimit(){return Math.ceil(this.drawingArea/So(this.options))}
    method generateTickLabels (line 19) | generateTickLabels(t){bo.prototype.generateTickLabels.call(this,t),thi...
    method fit (line 19) | fit(){const t=this.options;t.display&&t.pointLabels.display?Do(this):t...
    method setCenterPoint (line 19) | setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter...
    method getIndexAngle (line 19) | getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.o...
    method getDistanceFromCenterForValue (line 19) | getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawi...
    method getValueForDistanceFromCenter (line 19) | getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.dr...
    method getPointLabelContext (line 19) | getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t<e.len...
    method getPointPosition (line 19) | getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-E+i;return{x:M...
    method getPointPositionForValue (line 19) | getPointPositionForValue(t,e){return this.getPointPosition(t,this.getD...
    method getBasePosition (line 19) | getBasePosition(t){return this.getPointPositionForValue(t||0,this.getB...
    method getPointLabelPosition (line 19) | getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._po...
    method drawBackground (line 19) | drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.optio...
    method drawGrid (line 19) | drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s,border...
    method drawBorder (line 19) | drawBorder(){}
    method drawLabels (line 19) | drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)r...
    method drawTitle (line 19) | drawTitle(){}
  function zo (line 19) | function zo(t,e){return t-e}
  function Fo (line 19) | function Fo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:...
  function Vo (line 19) | function Vo(t,e,i,s){const n=Io.length;for(let o=Io.indexOf(t);o<n-1;++o...
  function Bo (line 19) | function Bo(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=et(i,e);t[i[s]>=e...
  function Wo (line 19) | function Wo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a<o;++a)r=...
  class No (line 19) | class No extends Js{static id="time";static defaults={bounds:"data",adap...
    method constructor (line 19) | constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._u...
    method init (line 19) | init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new Rn._date(...
    method parse (line 19) | parse(t,e){return void 0===t?null:Fo(this,t)}
    method beforeLayout (line 19) | beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all...
    method determineDataLimits (line 19) | determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.un...
    method _getLabelBounds (line 19) | _getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSIT...
    method buildTicks (line 19) | buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.so...
    method afterAutoSkip (line 19) | afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(thi...
    method initOffsets (line 19) | initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=th...
    method _generate (line 19) | _generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options...
    method getLabelForValue (line 19) | getLabelForValue(t){const e=this._adapter,i=this.options.time;return i...
    method format (line 19) | format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e|...
    method _tickFormatFunction (line 19) | _tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;i...
    method generateTickLabels (line 19) | generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e<i;++e)s=t[e],s.la...
    method getDecimalForValue (line 19) | getDecimalForValue(t){return null===t?NaN:(t-this.min)/(this.max-this....
    method getPixelForValue (line 19) | getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t)...
    method getValueForPixel (line 19) | getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)...
    method _getLabelSize (line 19) | _getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t)....
    method _getLabelCapacity (line 19) | _getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[...
    method getDataTimestamps (line 19) | getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return ...
    method getLabelTimestamps (line 19) | getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.lengt...
    method normalize (line 19) | normalize(t){return lt(t.sort(zo))}
  function Ho (line 19) | function Ho(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e<=t[l]....
  method constructor (line 19) | constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this....
  method init (line 19) | init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();...
  method parse (line 19) | parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>nu...
  method determineDataLimits (line 19) | determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBound...
  method buildTicks (line 19) | buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let ...
  method getLabelForValue (line 19) | getLabelForValue(t){return po.call(this,t)}
  method configure (line 19) | configure(){super.configure(),this.isHorizontal()||(this._reversePixels=...
  method getPixelForValue (line 19) | getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t...
  method getPixelForTick (line 19) | getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this...
  method getValueForPixel (line 19) | getValueForPixel(t){return Math.round(this._startValue+this.getDecimalFo...
  method getBasePixel (line 19) | getBasePixel(){return this.bottom}
  method constructor (line 19) | constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRa...
  method initOffsets (line 19) | initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.b...
  method buildLookupTable (line 19) | buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(...
  method _generate (line 19) | _generate(){const t=this.min,e=this.max;let i=super.getDataTimestamps();...
  method _getTimestampsForTable (line 19) | _getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;...
  method getDecimalForValue (line 19) | getDecimalForValue(t){return(Ho(this._table,t)-this._minPos)/this._table...
  method getValueForPixel (line 19) | getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e...
  function Uo (line 19) | function Uo(t){return $o[t%$o.length]}
  function Xo (line 19) | function Xo(t){return Yo[t%Yo.length]}
  function qo (line 19) | function qo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).control...
  function Ko (line 19) | function Ko(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColo...
  method beforeLayout (line 19) | beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options...
  function Zo (line 19) | function Zo(t){if(t._decimated){const e=t._data;delete t._decimated,dele...
  function Jo (line 19) | function Jo(t){t.data.datasets.forEach((t=>{Zo(t)}))}
  method destroy (line 19) | destroy(t){Jo(t)}
  function ta (line 19) | function ta(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n...
  function ea (line 19) | function ea(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y...
  function ia (line 19) | function ia(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}
  function sa (line 19) | function sa(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){co...
  function na (line 19) | function na(t){return t&&!1!==t.fill}
  function oa (line 19) | function oa(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(...
  function aa (line 19) | function aa(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=...
  function ra (line 19) | function ra(t,e,i){const s=[];for(let n=0;n<i.length;n++){const o=i[n],{...
  function la (line 19) | function la(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i...
  class ha (line 19) | class ha{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathS...
    method constructor (line 19) | constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}
    method pathSegment (line 19) | pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,e...
    method interpolate (line 19) | interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math....
  function ca (line 19) | function ca(t){const{chart:e,fill:i,line:s}=t;if(a(i))return function(t,...
  function da (line 19) | function da(t,e,i){const s=ca(e),{line:n,scale:o,axis:a}=e,r=n.options,l...
  function ua (line 19) | function ua(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPat...
  function fa (line 19) | function fa(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=f...
  function ga (line 19) | function ga(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,s...
  function pa (line 19) | function pa(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}
  method afterDatasetsUpdate (line 19) | afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let...
  method beforeDraw (line 19) | beforeDraw(t,e,i){const s="beforeDraw"===i.drawTime,n=t.getSortedVisible...
  method beforeDatasetsDraw (line 19) | beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;co...
  method beforeDatasetDraw (line 19) | beforeDatasetDraw(t,e,i){const s=e.meta.$filler;na(s)&&"beforeDatasetDra...
  class xa (line 19) | class xa extends Hs{constructor(t){super(),this._added=!1,this.legendHit...
    method constructor (line 19) | constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hov...
    method update (line 19) | update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.se...
    method setDimensions (line 19) | setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.lef...
    method buildLabels (line 19) | buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels...
    method fit (line 19) | fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width...
    method _fitRows (line 19) | _fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}...
    method _fitCols (line 19) | _fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}...
    method adjustHitBoxes (line 19) | adjustHitBoxes(){if(!this.options.display)return;const t=this._compute...
    method isHorizontal (line 19) | isHorizontal(){return"top"===this.options.position||"bottom"===this.op...
    method draw (line 19) | draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw...
    method _draw (line 19) | _draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:...
    method drawTitle (line 19) | drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding...
    method _computeTitleHeight (line 19) | _computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.p...
    method _getLegendItemAt (line 19) | _getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,th...
    method handleEvent (line 19) | handleEvent(t){const e=this.options;if(!function(t,e){if(("mousemove"=...
  function _a (line 19) | function _a(t,e){return e*(t.text?t.text.length:0)}
  method start (line 19) | start(t,e,i){const s=t.legend=new xa({ctx:t.ctx,options:i,chart:t});as.c...
  method stop (line 19) | stop(t){as.removeBox(t,t.legend),delete t.legend}
  method beforeUpdate (line 19) | beforeUpdate(t,e,i){const s=t.legend;as.configure(t,s,i),s.options=i}
  method afterUpdate (line 19) | afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()}
  method afterEvent (line 19) | afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)}
  method onClick (line 19) | onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n...
  method generateLabels (line 19) | generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,point...
  class va (line 19) | class va extends Hs{constructor(t){super(),this.chart=t.chart,this.optio...
    method constructor (line 19) | constructor(t){super(),this.chart=t.chart,this.options=t.options,this....
    method update (line 19) | update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)...
    method isHorizontal (line 19) | isHorizontal(){const t=this.options.position;return"top"===t||"bottom"...
    method _drawArgs (line 19) | _drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.a...
    method draw (line 19) | draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si...
  method start (line 19) | start(t,e,i){!function(t,e){const i=new va({ctx:t.ctx,options:e,chart:t}...
  method stop (line 19) | stop(t){const e=t.titleBlock;as.removeBox(t,e),delete t.titleBlock}
  method beforeUpdate (line 19) | beforeUpdate(t,e,i){const s=t.titleBlock;as.configure(t,s,i),s.options=i}
  method start (line 19) | start(t,e,i){const s=new va({ctx:t.ctx,options:i,chart:t});as.configure(...
  method stop (line 19) | stop(t){as.removeBox(t,wa.get(t)),wa.delete(t)}
  method beforeUpdate (line 19) | beforeUpdate(t,e,i){const s=wa.get(t);as.configure(t,s,i),s.options=i}
  method average (line 19) | average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;...
  method nearest (line 19) | nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITI...
  function Pa (line 19) | function Pa(t,e){return e&&(n(e)?Array.prototype.push.apply(t,e):t.push(...
  function Da (line 19) | function Da(t){return("string"==typeof t||t instanceof String)&&t.indexO...
  function Ca (line 19) | function Ca(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatase...
  function Oa (line 19) | function Oa(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWid...
  function Aa (line 19) | function Aa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,rig...
  function Ta (line 19) | function Ta(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,h...
  function La (line 19) | function La(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,...
  function Ea (line 19) | function Ea(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/...
  function Ra (line 19) | function Ra(t){return Pa([],Da(t))}
  function Ia (line 19) | function Ia(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tool...
  method title (line 19) | title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:...
  method label (line 19) | label(t){if(this&&this.options&&"dataset"===this.options.mode)return t.l...
  method labelColor (line 19) | labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller....
  method labelTextColor (line 19) | labelTextColor(){return this.options.bodyColor}
  method labelPointStyle (line 19) | labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).contro...
  function Fa (line 19) | function Fa(t,e,i,s){const n=t[e].call(i,s);return void 0===n?za[e].call...
  class Va (line 19) | class Va extends Hs{static positioners=Sa;constructor(t){super(),this.op...
    method constructor (line 19) | constructor(t){super(),this.opacity=0,this._active=[],this._eventPosit...
    method initialize (line 19) | initialize(t){this.options=t,this._cachedAnimations=void 0,this.$conte...
    method _resolveAnimations (line 19) | _resolveAnimations(){const t=this._cachedAnimations;if(t)return t;cons...
    method getContext (line 19) | getContext(){return this.$context||(this.$context=(t=this.chart.getCon...
    method getTitle (line 19) | getTitle(t,e){const{callbacks:i}=e,s=Fa(i,"beforeTitle",this,t),n=Fa(i...
    method getBeforeBody (line 19) | getBeforeBody(t,e){return Ra(Fa(e.callbacks,"beforeBody",this,t))}
    method getBody (line 19) | getBody(t,e){const{callbacks:i}=e,s=[];return u(t,(t=>{const e={before...
    method getAfterBody (line 19) | getAfterBody(t,e){return Ra(Fa(e.callbacks,"afterBody",this,t))}
    method getFooter (line 19) | getFooter(t,e){const{callbacks:i}=e,s=Fa(i,"beforeFooter",this,t),n=Fa...
    method _createItems (line 19) | _createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];...
    method update (line 19) | update(t,e){const i=this.options.setContext(this.getContext()),s=this....
    method drawCaret (line 19) | drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,...
    method getCaretPosition (line 19) | getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cor...
    method drawTitle (line 19) | drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l...
    method _drawColorBox (line 19) | _drawColorBox(t,e,i,s,n){const a=this.labelColors[i],r=this.labelPoint...
    method drawBody (line 19) | drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayC...
    method drawFooter (line 19) | drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r...
    method drawBackground (line 19) | drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{wid...
    method _updateAnimationTarget (line 19) | _updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i...
    method _willRender (line 19) | _willRender(){return!!this.opacity}
    method draw (line 19) | draw(t){const e=this.options.setContext(this.getContext());let i=this....
    method getActiveElements (line 19) | getActiveElements(){return this._active||[]}
    method setActiveElements (line 19) | setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,...
    method handleEvent (line 19) | handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ig...
    method _getActiveElements (line 19) | _getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.typ...
    method _positionChanged (line 19) | _positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Sa[n.p...
  method afterInit (line 19) | afterInit(t,e,i){i&&(t.tooltip=new Va({chart:t,options:i}))}
  method beforeUpdate (line 19) | beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)}
  method reset (line 19) | reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)}
  method afterDraw (line 19) | afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e...
  method afterEvent (line 19) | afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.e...

FILE: packages/Webkul/Admin/src/Resources/assets/js/directives/debounce.js
  method mounted (line 4) | mounted(el, binding) {

FILE: packages/Webkul/Admin/src/Resources/assets/js/directives/dompurify.js
  method beforeMount (line 4) | beforeMount(el, binding) {
  method updated (line 7) | updated(el, binding) {

FILE: packages/Webkul/Admin/src/Resources/assets/js/directives/tooltip.js
  method mounted (line 2) | mounted(el, binding) {
  method updated (line 5) | updated(el, binding) {

FILE: packages/Webkul/Admin/src/Resources/assets/js/plugins/admin.js
  method install (line 2) | install(app) {

FILE: packages/Webkul/Admin/src/Resources/assets/js/plugins/axios.js
  method install (line 11) | install(app) {

FILE: packages/Webkul/Admin/src/Resources/assets/js/plugins/createElement.js
  method install (line 4) | install(app) {

FILE: packages/Webkul/Admin/src/Traits/ProvideDropdownOptions.php
  type ProvideDropdownOptions (line 14) | trait ProvideDropdownOptions
    method isBooleanDropdownChoiceExists (line 31) | public function isBooleanDropdownChoiceExists($choice): bool
    method getBooleanDropdownOptions (line 41) | public function getBooleanDropdownOptions($choice = 'active_inactive')...
    method getActiveInactiveDropdownOptions (line 51) | public function getActiveInactiveDropdownOptions(): array
    method getYesNoDropdownOptions (line 77) | public function getYesNoDropdownOptions(): array
    method getUserDropdownOptions (line 103) | public function getUserDropdownOptions(): array
    method getLeadSourcesOptions (line 130) | public function getLeadSourcesOptions(): array
    method getOrganizationDropdownOptions (line 157) | public function getOrganizationDropdownOptions(): array
    method getRoleDropdownOptions (line 184) | public function getRoleDropdownOptions(): array
    method getActivityTypeDropdownOptions (line 204) | public function getActivityTypeDropdownOptions(): array
    method getAttributeTypeDropdownOptions (line 234) | public function getAttributeTypeDropdownOptions(): array
    method getWarehouseDropdownOptions (line 261) | public function getWarehouseDropdownOptions(): array

FILE: packages/Webkul/Admin/tests/e2e-pw/playwright.config.ts
  constant TESTS_ROOT_PATH (line 9) | const TESTS_ROOT_PATH = __dirname;
  constant STATE_DIR_PATH (line 10) | const STATE_DIR_PATH = `${ TESTS_ROOT_PATH }/.state/`;
  constant ADMIN_AUTH_STATE_PATH (line 11) | const ADMIN_AUTH_STATE_PATH = `${ STATE_DIR_PATH }/admin-auth.json`;

FILE: packages/Webkul/Admin/tests/e2e-pw/setup.ts
  type AdminFixtures (line 3) | type AdminFixtures = {

FILE: packages/Webkul/Admin/tests/e2e-pw/tests/lang/lang.spec.ts
  constant LANG_DIR (line 12) | const LANG_DIR = path.resolve(
  constant BASE_LANG (line 17) | const BASE_LANG = 'en';
  function getNormalizedKeys (line 20) | function getNormalizedKeys(filePath: string): string[] {

FILE: packages/Webkul/Admin/tests/e2e-pw/tests/lead.spec.ts
  function generateLead (line 5) | async function generateLead(adminPage) {
  function generateFile (line 59) | function generateFile(fileName, content) {
  function openLeadByTitle (line 64) | async function openLeadByTitle(adminPage, leadTitle) {

FILE: packages/Webkul/Admin/tests/e2e-pw/tests/mail/inbox.spec.ts
  function composeMail (line 4) | async function composeMail(adminPage, ccMail = false, bccMail = false) {

FILE: packages/Webkul/Admin/tests/e2e-pw/tests/settings/user/users.spec.ts
  function createGroup (line 9) | async function createGroup(adminPage) {

FILE: packages/Webkul/Admin/tests/e2e-pw/utils/components.ts
  function confirmModal (line 4) | function confirmModal(message, page) {

FILE: packages/Webkul/Admin/tests/e2e-pw/utils/faker.ts
  function generateName (line 16) | function generateName() {
  function generateFirstName (line 48) | function generateFirstName() {
  function generateLastName (line 70) | function generateLastName() {
  function generateFullName (line 92) | function generateFullName() {
  function generateEmail (line 99) | function generateEmail() {
  function generatePhoneNumber (line 148) | function generatePhoneNumber() {
  function generateSKU (line 163) | function generateSKU() {
  function generateSlug (line 176) | function generateSlug(delimiter = "-") {
  function generateEmailSubject (line 197) | function generateEmailSubject() {
  function generateDescription (line 228) | function generateDescription(length = 255) {
  function generateHostname (line 272) | function generateHostname() {
  function randomElement (line 300) | function randomElement(array) {
  function getImageFile (line 307) | function getImageFile(
  function generateDate (line 331) | function generateDate(): string {
  function generateCompanyName (line 342) | function generateCompanyName() {
  function generateProductName (line 364) | function generateProductName() {
  function generatePrice (line 374) | function generatePrice() {
  function generateQuantity (line 378) | function generateQuantity() {
  function createOrganization (line 384) | async function createOrganization(page) {
  function generateJobProfile (line 418) | function generateJobProfile() {
  function createPerson (line 435) | async function createPerson(page) {
  function createProduct (line 459) | async function createProduct(page) {
  function getRandomDateTime (line 478) | function getRandomDateTime() {

FILE: packages/Webkul/Admin/vite.config.js
  method renderBuiltUrl (line 41) | renderBuiltUrl(filename, { hostId, hostType, type }) {

FILE: packages/Webkul/Attribute/src/Contracts/Attribute.php
  type Attribute (line 5) | interface Attribute {}

FILE: packages/Webkul/Attribute/src/Contracts/AttributeOption.php
  type AttributeOption (line 5) | interface AttributeOption {}

FILE: packages/Webkul/Attribute/src/Contracts/AttributeValue.php
  type AttributeValue (line 5) | interface AttributeValue {}

FILE: packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080709_create_attributes_table.php
  method up (line 14) | public function up()
  method down (line 39) | public function down()

FILE: packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080837_create_attribute_options_table.php
  method up (line 14) | public function up()
  method down (line 30) | public function down()

FILE: packages/Webkul/Attribute/src/Database/Migrations/2021_04_06_122751_create_attribute_values_table.php
  method up (line 14) | public function up()
  method down (line 40) | public function down()

FILE: packages/Webkul/Attribute/src/Database/Migrations/2025_07_02_191710_alter_attribute_values_table.php
  method up (line 13) | public function up(): void
  method down (line 31) | public function down(): void

FILE: packages/Webkul/Attribute/src/Models/Attribute.php
  class Attribute (line 8) | class Attribute extends Model implements AttributeContract
    method options (line 31) | public function options()

FILE: packages/Webkul/Attribute/src/Models/AttributeOption.php
  class AttributeOption (line 8) | class AttributeOption extends Model implements AttributeOptionContract
    method attribute (line 26) | public function attribute()

FILE: packages/Webkul/Attribute/src/Models/AttributeOptionProxy.php
  class AttributeOptionProxy (line 7) | class AttributeOptionProxy extends ModelProxy {}

FILE: packages/Webkul/Attribute/src/Models/AttributeProxy.php
  class AttributeProxy (line 7) | class AttributeProxy extends ModelProxy {}

FILE: packages/Webkul/Attribute/src/Models/AttributeValue.php
  class AttributeValue (line 9) | class AttributeValue extends Model implements AttributeValueContract
    method attribute (line 73) | public function attribute()
    method entity (line 81) | public function entity()

FILE: packages/Webkul/Attribute/src/Models/AttributeValueProxy.php
  class AttributeValueProxy (line 7) | class AttributeValueProxy extends ModelProxy {}

FILE: packages/Webkul/Attribute/src/Providers/AttributeServiceProvider.php
  class AttributeServiceProvider (line 8) | class AttributeServiceProvider extends ServiceProvider
    method boot (line 15) | public function boot(Router $router)
    method register (line 25) | public function register()
    method registerConfig (line 35) | protected function registerConfig()

FILE: packages/Webkul/Attribute/src/Providers/ModuleServiceProvider.php
  class ModuleServiceProvider (line 10) | class ModuleServiceProvider extends BaseModuleServiceProvider

FILE: packages/Webkul/Attribute/src/Repositories/AttributeOptionRepository.php
  class AttributeOptionRepository (line 7) | class AttributeOptionRepository extends Repository
    method model (line 14) | public function model()

FILE: packages/Webkul/Attribute/src/Repositories/AttributeRepository.php
  class AttributeRepository (line 10) | class AttributeRepository extends Repository
    method __construct (line 17) | public function __construct(
    method model (line 29) | public function model()
    method create (line 37) | public function create(array $data)
    method update (line 62) | public function update(array $data, $id, $attribute = 'id')
    method getAttributeByCode (line 101) | public function getAttributeByCode($code)
    method getLookUpOptions (line 118) | public function getLookUpOptions($lookup, $query = '', $columns = [])
    method getLookUpEntity (line 158) | public function getLookUpEntity($lookup, $entityId = null, $columns = [])

FILE: packages/Webkul/Attribute/src/Repositories/AttributeValueRepository.php
  class AttributeValueRepository (line 13) | class AttributeValueRepository extends Repository
    method __construct (line 20) | public function __construct(
    method model (line 32) | public function model()
    method save (line 40) | public function save(array $data, $attributes = []): void
    method isValueUnique (line 124) | public function isValueUnique($entityId, $entityType, $attribute, $value)
    method sanitizeEmailAndPhone (line 149) | public function sanitizeEmailAndPhone($data)
    method getAttributeLabel (line 163) | public function getAttributeLabel(mixed $value, mixed $attribute)

FILE: packages/Webkul/Attribute/src/Traits/CustomAttribute.php
  type CustomAttribute (line 9) | trait CustomAttribute
    method attribute_values (line 35) | public function attribute_values()
    method getAttribute (line 46) | public function getAttribute($key)
    method attributesToArray (line 66) | public function attributesToArray()
    method getCustomAttributes (line 92) | public function getCustomAttributes()
    method getCustomAttributeValue (line 108) | public function getCustomAttributeValue($attribute)
    method getLookUpAttributes (line 125) | public function getLookUpAttributes($attributes)
    method newInstance (line 144) | public function newInstance($attributes = [], $exists = false)
    method fill (line 160) | public function fill(array $attributes)
    method boot (line 168) | public static function boot()

FILE: packages/Webkul/Automation/src/Contracts/Webhook.php
  type Webhook (line 5) | interface Webhook {}

FILE: packages/Webkul/Automation/src/Contracts/Workflow.php
  type Workflow (line 5) | interface Workflow {}

FILE: packages/Webkul/Automation/src/Database/Migrations/2021_08_26_133538_create_workflows_table.php
  method up (line 14) | public function up()
  method down (line 34) | public function down()

FILE: packages/Webkul/Automation/src/Database/Migrations/2024_07_24_150821_create_webhooks_table.php
  method up (line 12) | public function up(): void
  method down (line 33) | public function down(): void

FILE: packages/Webkul/Automation/src/Helpers/Entity.php
  class Entity (line 8) | class Entity
    method __construct (line 15) | public function __construct(
    method getEvents (line 25) | public function getEvents()
    method getConditions (line 49) | public function getConditions()
    method getActions (line 69) | public function getActions()
    method getEmailTemplatePlaceholders (line 89) | public function getEmailTemplatePlaceholders()

FILE: packages/Webkul/Automation/src/Helpers/Entity/AbstractEntity.php
  class AbstractEntity (line 10) | abstract class AbstractEntity
    method __construct (line 20) | public function __construct(
    method getEntity (line 28) | abstract public function getEntity(mixed $entity);
    method getActions (line 33) | abstract public function getActions();
    method executeActions (line 38) | abstract public function executeActions(mixed $workflow, mixed $entity...
    method getConditions (line 43) | public function getConditions(): array
    method getAttributes (line 51) | public function getAttributes(string $entityType, array $skipAttribute...
    method getEmailTemplatePlaceholders (line 81) | public function getEmailTemplatePlaceholders(array $entity): array
    method replacePlaceholders (line 101) | public function replacePlaceholders(mixed $entity, string $content): s...
    method triggerWebhook (line 218) | public function triggerWebhook(int $webhookId, mixed $entity)

FILE: packages/Webkul/Automation/src/Helpers/Entity/Activity.php
  class Activity (line 17) | class Activity extends AbstractEntity
    method __construct (line 31) | public function __construct(
    method getAttributes (line 44) | public function getAttributes(string $entityType, array $skipAttribute...
    method getEmailTemplatePlaceholders (line 115) | public function getEmailTemplatePlaceholders(array $entity): array
    method replacePlaceholders (line 130) | public function replacePlaceholders(mixed $entity, string $content): s...
    method getEntity (line 151) | public function getEntity(mixed $entity): mixed
    method getActions (line 163) | public function getActions(): array
    method executeActions (line 193) | public function executeActions(mixed $workflow, mixed $activity): void
    method getICSContent (line 287) | public function getICSContent(ContractsActivity $activity): string

FILE: packages/Webkul/Automation/src/Helpers/Entity/Lead.php
  class Lead (line 17) | class Lead extends AbstractEntity
    method __construct (line 29) | public function __construct(
    method getEntity (line 43) | public function getEntity(mixed $entity)
    method getAttributes (line 55) | public function getAttributes(string $entityType, array $skipAttribute...
    method getActions (line 63) | public function getActions(): array
    method executeActions (line 103) | public function executeActions(mixed $workflow, mixed $lead): void

FILE: packages/Webkul/Automation/src/Helpers/Entity/Person.php
  class Person (line 16) | class Person extends AbstractEntity
    method __construct (line 28) | public function __construct(
    method getEntity (line 40) | public function getEntity(mixed $entity): mixed
    method getActions (line 52) | public function getActions(): array
    method executeActions (line 82) | public function executeActions(mixed $workflow, mixed $person): void

FILE: packages/Webkul/Automation/src/Helpers/Entity/Quote.php
  class Quote (line 16) | class Quote extends AbstractEntity
    method __construct (line 28) | public function __construct(
    method getEntity (line 41) | public function getEntity(mixed $entity): mixed
    method getActions (line 53) | public function getActions(): array
    method executeActions (line 91) | public function executeActions(mixed $workflow, mixed $quote): void

FILE: packages/Webkul/Automation/src/Helpers/Validator.php
  class Validator (line 7) | class Validator
    method validate (line 16) | public function validate($workflow, $entity)
    method validateEntity (line 58) | private function validateEntity($condition, $entity)
    method getAttributeValue (line 73) | public function getAttributeValue($condition, $entity)
    method validateAttribute (line 91) | public function validateAttribute($condition, $attributeValue)
    method validateArrayValues (line 167) | private static function validateArrayValues(array $attributeValue, str...

FILE: packages/Webkul/Automation/src/Listeners/Entity.php
  class Entity (line 8) | class Entity
    method __construct (line 15) | public function __construct(
    method process (line 25) | public function process($eventName, $entity)

FILE: packages/Webkul/Automation/src/Models/Webhook.php
  class Webhook (line 9) | class Webhook extends Model implements ContractsWebhook

FILE: packages/Webkul/Automation/src/Models/WebhookProxy.php
  class WebhookProxy (line 7) | class WebhookProxy extends ModelProxy {}

FILE: packages/Webkul/Automation/src/Models/Workflow.php
  class Workflow (line 8) | class Workflow extends Model implements WorkflowContract

FILE: packages/Webkul/Automation/src/Models/WorkflowProxy.php
  class WorkflowProxy (line 7) | class WorkflowProxy extends ModelProxy {}

FILE: packages/Webkul/Automation/src/Providers/ModuleServiceProvider.php
  class ModuleServiceProvider (line 9) | class ModuleServiceProvider extends BaseModuleServiceProvider

FILE: packages/Webkul/Automation/src/Providers/WorkflowServiceProvider.php
  class WorkflowServiceProvider (line 9) | class WorkflowServiceProvider extends ServiceProvider
    method boot (line 16) | public function boot()
    method register (line 34) | public function register()
    method registerConfig (line 44) | protected function registerConfig()

FILE: packages/Webkul/Automation/src/Repositories/WebhookRepository.php
  class WebhookRepository (line 8) | class WebhookRepository extends Repository
    method model (line 13) | public function model(): string

FILE: packages/Webkul/Automation/src/Repositories/WorkflowRepository.php
  class WorkflowRepository (line 8) | class WorkflowRepository extends Repository
    method model (line 13) | public function model(): string

FILE: packages/Webkul/Automation/src/Services/WebhookService.php
  class WebhookService (line 10) | class WebhookService
    method __construct (line 20) | public function __construct(protected PersonRepository $personRepository)
    method triggerWebhook (line 33) | public function triggerWebhook(mixed $data): array
    method parseJsonField (line 78) | protected function parseJsonField(mixed $field): array
    method buildRequestOptions (line 101) | protected function buildRequestOptions(string $method, array $headers,...
    method prepareJsonPayload (line 151) | protected function prepareJsonPayload(mixed $payload): mixed
    method prepareFormPayload (line 173) | protected function prepareFormPayload(mixed $payload): array
    method prepareMultipartPayload (line 200) | protected function prepareMultipartPayload(mixed $payload): array
    method prepareRawPayload (line 210) | protected function prepareRawPayload(mixed $payload): string
    method autoDetectPayloadFormat (line 226) | protected function autoDetectPayloadFormat(mixed $payload): array
    method getContentType (line 259) | protected function getContentType(array $headers): string
    method buildMultipartData (line 275) | protected function buildMultipartData(array $payload): array
    method formatHeaders (line 292) | protected function formatHeaders(array $headers): array
    method formatPayload (line 333) | protected function formatPayload(mixed $payload): array
    method isKeyValuePairArray (line 386) | protected function isKeyValuePairArray(array $array): bool
    method appendQueryParams (line 410) | protected function appendQueryParams(string $endPoint, string $queryPa...

FILE: packages/Webkul/Contact/src/Contracts/Organization.php
  type Organization (line 5) | interface Organization {}

FILE: packages/Webkul/Contact/src/Contracts/Person.php
  type Person (line 5) | interface Person {}

FILE: packages/Webkul/Contact/src/Database/Factories/PersonFactory.php
  class PersonFactory (line 8) | class PersonFactory extends Factory
    method definition (line 22) | public function definition()

FILE: packages/Webkul/Contact/src/Database/Migrations/2021_04_09_051326_create_organizations_table.php
  method up (line 14) | public function up()
  method down (line 30) | public function down()

FILE: packages/Webkul/Contact/src/Database/Migrations/2021_04_09_065617_create_persons_table.php
  method up (line 14) | public function up()
  method down (line 33) | public function down()

FILE: packages/Webkul/Contact/src/Database/Migrations/2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php
  method up (line 14) | public function up()
  method down (line 26) | public function down()

FILE: packages/Webkul/Contact/src/Database/Migrations/2024_07_31_092951_add_job_title_in_persons_table.php
  method up (line 12) | public function up(): void
  method down (line 22) | public function down(): void

FILE: packages/Webkul/Contact/src/Database/Migrations/2024_08_06_145943_create_person_tags_table.php
  method up (line 12) | public function up(): void
  method down (line 26) | public function down(): void

FILE: packages/Webkul/Contact/src/Database/Migrations/2024_08_06_161212_create_person_activities_table.php
  method up (line 12) | public function up(): void
  method down (line 26) | public function down(): void

FILE: packages/Webkul/Contact/src/Database/Migrations/2024_08_14_102116_add_user_id_column_in_persons_table.php
  method up (line 12) | public function up(): void
  method down (line 23) | public function down(): void

FILE: packages/Webkul/Contact/src/Database/Migrations/2024_08_14_102136_add_user_id_column_in_organizations_table.php
  method up (line 12) | public function up(): void
  method down (line 23) | public function down(): void

FILE: packages/Webkul/Contact/src/Database/Migrations/2024_09_09_112201_add_unique_id_to_person_table.php
  method up (line 13) | public function up(): void
  method down (line 35) | public function down(): void

FILE: packages/Webkul/Contact/src/Database/Migrations/2025_03_19_132236_update_organization_id_column_in_persons_table.php
  method up (line 12) | public function up(): void
  method down (line 24) | public function down(): void

FILE: packages/Webkul/Contact/src/Models/Organization.php
  class Organization (line 11) | class Organization extends Model implements OrganizationContract
    method persons (line 35) | public function persons()
    method user (line 43) | public function user()

FILE: packages/Webkul/Contact/src/Models/OrganizationProxy.php
  class OrganizationProxy (line 7) | class OrganizationProxy extends ModelProxy {}

FILE: packages/Webkul/Contact/src/Models/Person.php
  class Person (line 19) | class Person extends Model implements PersonContract
    method user (line 65) | public function user(): BelongsTo
    method organization (line 73) | public function organization(): BelongsTo
    method activities (line 81) | public function activities(): BelongsToMany
    method tags (line 89) | public function tags(): BelongsToMany
    method leads (line 97) | public function leads(): HasMany
    method newFactory (line 105) | protected static function newFactory(): PersonFactory

FILE: packages/Webkul/Contact/src/Models/PersonProxy.php
  class PersonProxy (line 7) | class PersonProxy extends ModelProxy {}

FILE: packages/Webkul/Contact/src/Providers/ContactServiceProvider.php
  class ContactServiceProvider (line 8) | class ContactServiceProvider extends ServiceProvider
    method boot (line 15) | public function boot(Router $router)
    method register (line 25) | public function register() {}

FILE: packages/Webkul/Contact/src/Providers/ModuleServiceProvider.php
  class ModuleServiceProvider (line 9) | class ModuleServiceProvider extends BaseModuleServiceProvider

FILE: packages/Webkul/Contact/src/Repositories/OrganizationRepository.php
  class OrganizationRepository (line 12) | class OrganizationRepository extends Repository
    method __construct (line 19) | public function __construct(
    method model (line 32) | public function model()
    method create (line 42) | public function create(array $data)
    method update (line 64) | public function update(array $data, $id, $attributes = [])
    method delete (line 106) | public function delete($id)

FILE: packages/Webkul/Contact/src/Repositories/PersonRepository.php
  class PersonRepository (line 11) | class PersonRepository extends Repository
    method __construct (line 32) | public function __construct(
    method model (line 46) | public function model()
    method create (line 56) | public function create(array $data)
    method update (line 84) | public function update(array $data, $id, $attributes = [])
    method getCustomerCount (line 133) | public function getCustomerCount($startDate, $endDate)
    method fetchOrCreateOrganizationByName (line 144) | public function fetchOrCreateOrganizationByName(string $organizationName)
    method sanitizeRequestedPersonData (line 159) | private function sanitizeRequestedPersonData(array $data): array

FILE: packages/Webkul/Core/src/Acl.php
  class Acl (line 9) | class Acl
    method addItem (line 19) | public function addItem(AclItem $aclItem): void
    method getItems (line 27) | public function getItems(): Collection
    method getAclConfig (line 41) | private function getAclConfig(): array
    method getRoles (line 57) | public function getRoles(): Collection
    method prepareAclItems (line 82) | private function prepareAclItems(): void
    method processSubAclItems (line 108) | private function processSubAclItems($aclItem): Collection

FILE: packages/Webkul/Core/src/Acl/AclItem.php
  class AclItem (line 7) | class AclItem
    method __construct (line 12) | public function __construct(

FILE: packages/Webkul/Core/src/Console/Commands/Version.php
  class Version (line 7) | class Version extends Command
    method __construct (line 28) | public function __construct()
    method handle (line 38) | public function handle()

FILE: packages/Webkul/Core/src/Contracts/CoreConfig.php
  type CoreConfig (line 5) | interface CoreConfig {}

FILE: packages/Webkul/Core/src/Contracts/Country.php
  type Country (line 5) | interface Country {}

FILE: packages/Webkul/Core/src/Contracts/CountryState.php
  type CountryState (line 5) | interface CountryState {}

FILE: packages/Webkul/Core/src/Contracts/Validations/Code.php
  class Code (line 7) | class Code implements Rule
    method passes (line 16) | public function passes($attribute, $value)
    method message (line 26) | public function message()

FILE: packages/Webkul/Core/src/Contracts/Validations/Decimal.php
  class Decimal (line 9) | class Decimal implements ValidationRule
    method validate (line 16) | public function validate(string $attribute, mixed $value, Closure $fai...

FILE: packages/Webkul/Core/src/Core.php
  class Core (line 11) | class Core
    method __construct (line 25) | public function __construct(
    method version (line 36) | public function version()
    method timezones (line 44) | public function timezones(): array
    method locales (line 58) | public function locales(): array
    method countries (line 77) | public function countries()
    method country_name (line 85) | public function country_name(string $code): string
    method state_name (line 95) | public function state_name(string $code): string
    method states (line 107) | public function states(string $countryCode)
    method groupedStatesByCountries (line 117) | public function groupedStatesByCountries()
    method findStateByCountryCode (line 133) | public function findStateByCountryCode($countryCode = null, $stateCode...
    method getSingletonInstance (line 155) | public function getSingletonInstance($className)
    method formatDate (line 171) | public function formatDate($date, $format = 'd M Y h:iA')
    method xWeekRange (line 183) | public function xWeekRange($date, $day)
    method currencySymbol (line 204) | public function currencySymbol($code)
    method formatBasePrice (line 218) | public function formatBasePrice($price)
    method getConfigField (line 232) | public function getConfigField(string $fieldName): ?array
    method getConfigData (line 240) | public function getConfigData(string $field): mixed

FILE: packages/Webkul/Core/src/Database/Migrations/2021_03_12_060658_create_core_config_table.php
  method up (line 14) | public function up()
  method down (line 29) | public function down()

FILE: packages/Webkul/Core/src/Database/Migrations/2021_04_12_173232_create_countries_table.php
  method up (line 14) | public function up()
  method down (line 28) | public function down()

FILE: packages/Webkul/Core/src/Database/Migrations/2021_04_12_173344_create_country_states_table.php
  method up (line 14) | public function up()
  method down (line 32) | public function down()

FILE: packages/Webkul/Core/src/Database/Migrations/2025_01_29_133500_update_text_column_type_in_core_config_table.php
  method up (line 12) | public function up(): void
  method down (line 22) | public function down(): void

FILE: packages/Webkul/Core/src/Eloquent/Repository.php
  class Repository (line 9) | abstract class Repository extends BaseRepository implements CacheableInt...
    method findOneByField (line 21) | public function findOneByField($field, $value = null, $columns = ['*'])
    method findOneWhere (line 36) | public function findOneWhere(array $where, $columns = ['*'])
    method find (line 50) | public function find($id, $columns = ['*'])
    method findOrFail (line 67) | public function findOrFail($id, $columns = ['*'])
    method count (line 83) | public function count(array $where = [], $columns = '*')
    method sum (line 103) | public function sum($columns)
    method avg (line 118) | public function avg($columns)
    method getModel (line 132) | public function getModel($data = [])
    method resetModel (line 140) | public function resetModel()

FILE: packages/Webkul/Core/src/Eloquent/TranslatableModel.php
  class TranslatableModel (line 8) | class TranslatableModel extends Model
    method locale (line 15) | protected function locale()

FILE: packages/Webkul/Core/src/Exceptions/ViterNotFound.php
  class ViterNotFound (line 5) | class ViterNotFound extends \Exception
    method __construct (line 13) | public function __construct($namespace)

FILE: packages/Webkul/Core/src/Facades/Acl.php
  class Acl (line 7) | class Acl extends Facade
    method getFacadeAccessor (line 14) | protected static function getFacadeAccessor()

FILE: packages/Webkul/Core/src/Facades/Core.php
  class Core (line 7) | class Core extends Facade
    method getFacadeAccessor (line 14) | protected static function getFacadeAccessor()

FILE: packages/Webkul/Core/src/Facades/Menu.php
  class Menu (line 7) | class Menu extends Facade
    method getFacadeAccessor (line 14) | protected static function getFacadeAccessor()

FILE: packages/Webkul/Core/src/Facades/SystemConfig.php
  class SystemConfig (line 7) | class SystemConfig extends Facade
    method getFacadeAccessor (line 14) | protected static function getFacadeAccessor()

FILE: packages/Webkul/Core/src/Helpers/Helper.php
  class Helper (line 5) | class Helper
    method jsonTranslations (line 11) | public function jsonTranslations($packageName)

FILE: packages/Webkul/Core/src/Http/helpers.php
  function core (line 14) | function core(): Core
  function menu (line 24) | function menu(): Menu
  function acl (line 34) | function acl(): Acl
  function system_config (line 44) | function system_config(): SystemConfig
  function view_render_event (line 54) | function view_render_event($eventName, $params = null)
  function vite (line 70) | function vite(): Vite

FILE: packages/Webkul/Core/src/Menu.php
  class Menu (line 9) | class Menu
    method addItem (line 39) | public function addItem(MenuItem $menuItem): void
    method getItems (line 47) | public function getItems(?string $area = null, string $key = ''): Coll...
    method getAdminMenuByKey (line 91) | public function getAdminMenuByKey(array|string $keys): mixed
    method prepareMenuItems (line 105) | private function prepareMenuItems(): void
    method processSubMenuItems (line 136) | private function processSubMenuItems($menuItem): Collection
    method getCurrentActiveMenu (line 160) | public function getCurrentActiveMenu(?string $area = null): ?MenuItem
    method findMatchingItem (line 170) | private function findMatchingItem($items, $currentKey): ?MenuItem

FILE: packages/Webkul/Core/src/Menu/MenuItem.php
  class MenuItem (line 7) | class MenuItem
    method __construct (line 14) | public function __construct(
    method setName (line 28) | public function setName(string $name): self
    method getName (line 38) | public function getName(): string
    method setPosition (line 46) | public function setPosition(int $sort): self
    method getPosition (line 56) | public function getPosition()
    method setIcon (line 64) | public function setIcon(string $icon): self
    method getIcon (line 74) | public function getIcon(): string
    method setInfo (line 82) | public function setInfo(string $info): self
    method getInfo (line 92) | public function getInfo(): string
    method setRoute (line 100) | public function setRoute(string $route): self
    method getRoute (line 110) | public function getRoute(): string
    method setUrl (line 118) | public function setUrl(string $url): self
    method getUrl (line 128) | public function getUrl(): string
    method setKey (line 136) | public function setKey(string $key): self
    method getKey (line 146) | public function getKey(): string
    method setChildren (line 154) | public function setChildren(Collection $children): self
    method haveChildren (line 164) | public function haveChildren(): bool
    method getChildren (line 172) | public function getChildren(): Collection
    method isActive (line 184) | public function isActive(): bool

FILE: packages/Webkul/Core/src/Models/CoreConfig.php
  class CoreConfig (line 8) | class CoreConfig extends Model implements CoreConfigContract

FILE: packages/Webkul/Core/src/Models/CoreConfigProxy.php
  class CoreConfigProxy (line 7) | class CoreConfigProxy extends ModelProxy {}

FILE: packages/Webkul/Core/src/Models/Country.php
  class Country (line 8) | class Country extends Model implements CountryContract

FILE: packages/Webkul/Core/src/Models/CountryProxy.php
  class CountryProxy (line 7) | class CountryProxy extends ModelProxy {}

FILE: packages/Webkul/Core/src/Models/CountryState.php
  class CountryState (line 8) | class CountryState extends Model implements CountryStateContract

FILE: packages/Webkul/Core/src/Models/CountryStateProxy.php
  class CountryStateProxy (line 7) | class CountryStateProxy extends ModelProxy {}

FILE: packages/Webkul/Core/src/Providers/BaseModuleServiceProvider.php
  class BaseModuleServiceProvider (line 7) | class BaseModuleServiceProvider extends ConcordBaseModuleServiceProvider
    method boot (line 12) | public function boot()

FILE: packages/Webkul/Core/src/Providers/CoreServiceProvider.php
  class CoreServiceProvider (line 18) | class CoreServiceProvider extends ServiceProvider
    method boot (line 27) | public function boot()
    method register (line 47) | public function register()
    method registerFacades (line 59) | protected function registerFacades()
    method registerCommands (line 83) | protected function registerCommands(): void

FILE: packages/Webkul/Core/src/Providers/ModuleServiceProvider.php
  class ModuleServiceProvider (line 9) | class ModuleServiceProvider extends BaseModuleServiceProvider

FILE: packages/Webkul/Core/src/Repositories/CoreConfigRepository.php
  class CoreConfigRepository (line 13) | class CoreConfigRepository extends Repository
    method model (line 18) | public function model(): string
    method getTranslatedTitle (line 26) | protected function getTranslatedTitle(mixed $configuration): string
    method getChildrenAndFields (line 48) | protected function getChildrenAndFields(mixed $configuration, string $...
    method search (line 72) | public function search(Collection $items, string $searchTerm, array $p...
    method create (line 100) | public function create(array $data): void
    method recursiveArray (line 186) | public function recursiveArray(array $formData, string $method): array
    method countDim (line 224) | public function countDim(array|string $array): int

FILE: packages/Webkul/Core/src/Repositories/CountryRepository.php
  class CountryRepository (line 8) | class CountryRepository extends Repository
    method model (line 17) | public function model()

FILE: packages/Webkul/Core/src/Repositories/CountryStateRepository.php
  class CountryStateRepository (line 8) | class CountryStateRepository extends Repository
    method model (line 17) | public function model()

FILE: packages/Webkul/Core/src/SystemConfig.php
  class SystemConfig (line 11) | class SystemConfig
    method __construct (line 23) | public function __construct(protected CoreConfigRepository $coreConfig...
    method addItem (line 28) | public function addItem(Item $item): void
    method getItems (line 36) | public function getItems(): Collection
    method retrieveCoreConfig (line 49) | private function retrieveCoreConfig(): array
    method prepareConfigurationItems (line 63) | public function prepareConfigurationItems()
    method processSubConfigItems (line 92) | private function processSubConfigItems($configItem): Collection
    method getActiveConfigurationItem (line 116) | public function getActiveConfigurationItem(): ?Item
    method getConfigField (line 138) | public function getConfigField(string $fieldName): ?array
    method getDefaultConfig (line 160) | private function getDefaultConfig(string $field): mixed
    method getConfigData (line 176) | public function getConfigData(string $field): mixed

FILE: packages/Webkul/Core/src/SystemConfig/Item.php
  class Item (line 7) | class Item
    method __construct (line 12) | public function __construct(
    method getName (line 26) | public function getName(): string
    method formatOptions (line 34) | private function formatOptions($options)
    method getFields (line 42) | public function getFields(): Collection
    method getInfo (line 67) | public function getInfo(): ?string
    method getRoute (line 75) | public function getRoute(): string
    method getUrl (line 83) | public function getUrl(): string
    method getKey (line 91) | public function getKey(): string
    method getIcon (line 99) | public function getIcon(): ?string
    method haveChildren (line 107) | public function haveChildren(): bool
    method getChildren (line 115) | public function getChildren(): Collection

FILE: packages/Webkul/Core/src/SystemConfig/ItemField.php
  class ItemField (line 7) | class ItemField
    method __construct (line 21) | public function __construct(
    method getName (line 43) | public function getName(): ?string
    method getInfo (line 51) | public function getInfo(): ?string
    method getTitle (line 59) | public function getTitle(): ?string
    method getTinymce (line 67) | public function getTinymce(): bool
    method getType (line 75) | public function getType(): string
    method getPath (line 83) | public function getPath(): ?string
    method getItemKey (line 91) | public function getItemKey(): string
    method getValidations (line 99) | public function getValidations(): ?string
    method getDepends (line 115) | public function getDepends(): ?string
    method getDefault (line 123) | public function getDefault(): ?string
    method getChannelBased (line 131) | public function getChannelBased(): ?bool
    method getLocaleBased (line 139) | public function getLocaleBased(): ?bool
    method getNameKey (line 147) | public function getNameKey(): string
    method isRequired (line 155) | public function isRequired(): string
    method getOptions (line 163) | public function getOptions(): array
    method toArray (line 181) | public function toArray()
    method getNameField (line 206) | public function getNameField($key = null)
    method getDependFieldName (line 224) | public function getDependFieldName(): string
    method getFieldOptions (line 238) | protected function getFieldOptions(string $options): array

FILE: packages/Webkul/Core/src/Traits/PDFHandler.php
  type PDFHandler (line 11) | trait PDFHandler
    method downloadPDF (line 18) | protected function downloadPDF(string $html, ?string $fileName = null)
    method adjustArabicAndPersianContent (line 54) | protected function adjustArabicAndPersianContent(string $html)

FILE: packages/Webkul/Core/src/Traits/Sanitizer.php
  type Sanitizer (line 15) | trait Sanitizer
    method sanitizeSvg (line 20) | public function sanitizeSvg(string $path, UploadedFile $file): void
    method isSvgFile (line 77) | public function isSvgFile(UploadedFile $file): bool

FILE: packages/Webkul/Core/src/ViewRenderEventManager.php
  class ViewRenderEventManager (line 7) | class ViewRenderEventManager
    method handleRenderEvent (line 30) | public function handleRenderEvent($eventName, $params = null)
    method getParams (line 44) | public function getParams()
    method getParam (line 54) | public function getParam($name)
    method addTemplate (line 65) | public function addTemplate($template)
    method render (line 75) | public function render()

FILE: packages/Webkul/Core/src/Vite.php
  class Vite (line 8) | class Vite
    method asset (line 15) | public function asset(string $filename, string $namespace = 'admin')
    method set (line 37) | public function set(mixed $entryPoints, string $namespace = 'admin')

FILE: packages/Webkul/DataGrid/src/Action.php
  class Action (line 8) | class Action
    method __construct (line 13) | public function __construct(
    method toArray (line 24) | public function toArray()

FILE: packages/Webkul/DataGrid/src/Column.php
  class Column (line 8) | class Column
    method __construct (line 78) | public function __construct(array $column)
    method init (line 86) | public function init(array $column): void
    method setIndex (line 116) | public function setIndex(string $index): void
    method getIndex (line 124) | public function getIndex(): string
    method setLabel (line 132) | public function setLabel(string $label): void
    method getLabel (line 140) | public function getLabel(): string
    method setType (line 148) | public function setType(string $type): void
    method getType (line 156) | public function getType(): string
    method setSearchable (line 164) | public function setSearchable(bool $searchable): void
    method getSearchable (line 172) | public function getSearchable(): bool
    method setFilterable (line 180) | public function setFilterable(bool $filterable): void
    method getFilterable (line 188) | public function getFilterable(): bool
    method setFilterableType (line 196) | public function setFilterableType(?string $filterableType): void
    method getFilterableType (line 204) | public function getFilterableType(): ?string
    method setFilterableOptions (line 212) | public function setFilterableOptions(mixed $filterableOptions): void
    method getFilterableOptions (line 224) | public function getFilterableOptions(): array
    method setAllowMultipleValues (line 232) | public function setAllowMultipleValues(bool $allowMultipleValues): void
    method getAllowMultipleValues (line 240) | public function getAllowMultipleValues(): bool
    method setSortable (line 248) | public function setSortable(?bool $sortable = null): void
    method getSortable (line 256) | public function getSortable(): bool
    method setExportable (line 264) | public function setExportable(bool $exportable): void
    method getExportable (line 272) | public function getExportable(): bool
    method setVisibility (line 280) | public function setVisibility(bool $visibility): void
    method getVisibility (line 288) | public function getVisibility(): bool
    method setClosure (line 296) | public function setClosure(mixed $closure): void
    method getClosure (line 304) | public function getClosure(): mixed
    method setColumnName (line 313) | public function setColumnName(mixed $columnName): void
    method getColumnName (line 321) | public function getColumnName(): mixed
    method toArray (line 329) | public function toArray(): array
    method validate (line 348) | public static function validate(array $column): void
    method resolveType (line 366) | public static function resolveType(array $column): self

FILE: packages/Webkul/DataGrid/src/ColumnTypes/Aggregate.php
  class Aggregate (line 8) | class Aggregate extends Column
    method processFilter (line 13) | public function processFilter($queryBuilder, $requestedValues)

FILE: packages/Webkul/DataGrid/src/ColumnTypes/Boolean.php
  class Boolean (line 9) | class Boolean extends Column
    method setFilterableType (line 14) | public function setFilterableType(?string $filterableType): void
    method setFilterableOptions (line 33) | public function setFilterableOptions(mixed $filterableOptions): void
    method processFilter (line 54) | public function processFilter($queryBuilder, $requestedValues): mixed

FILE: packages/Webkul/DataGrid/src/ColumnTypes/Date.php
  class Date (line 10) | class Date extends Column
    method setFilterableType (line 15) | public f
Condensed preview — 1083 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,641K chars).
[
  {
    "path": ".editorconfig",
    "chars": 220,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_"
  },
  {
    "path": ".gitattributes",
    "chars": 186,
    "preview": "* text=auto eol=lf\n\n*.blade.php diff=html\n*.css diff=css\n*.html diff=html\n*.md diff=markdown\n*.php diff=php\n\n/.github ex"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 71,
    "preview": "# These are supported funding model platforms\n\nopen_collective: bagisto"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/1_Bug_report.md",
    "chars": 874,
    "preview": "---\nname: \"🐛 Bug Report\"\nabout: 'Report a general library issue.'\n---\n\n# Bug report\n\n### Title\n**Just a quick sentence t"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2_Feature_request.md",
    "chars": 544,
    "preview": "---\nname: \"💡 Feature Request\"\nabout: 'For ideas or feature requests, please make a pull request, or open an issue'\n---\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/3_Support_question.md",
    "chars": 332,
    "preview": "---\nname: \"❔ Support Question\"\nabout: 'This repository is only for reporting bugs or problems. If you need help, see:\n  "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/4_Security_vulnerabilities.md",
    "chars": 349,
    "preview": "---\nname: \"🔒 Security Vulnerabilities\"\nabout: 'For reporting security-related issues, see: https://github.com/krayin/lar"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 650,
    "preview": "## Issue Reference\n<!--- Please mention issue #id or use a comma if your pull request solves multiple issues. -->\n\n## De"
  },
  {
    "path": ".github/workflows/admin_playwright_tests.yml",
    "chars": 4237,
    "preview": "name: Admin | Playwright Tests\n\non: [push, pull_request]\n\npermissions:\n  contents: read\n\nenv:\n  FORCE_COLOR: 1\n\njobs:\n  "
  },
  {
    "path": ".github/workflows/auto_commits.yml",
    "chars": 942,
    "preview": "name: Linting Tests\n\non: [push, pull_request]\n\npermissions:\n  contents: write\n\njobs:\n  linting_tests:\n    runs-on: ${{ m"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 1705,
    "preview": "name: CI\n\non: [push, pull_request]\n\njobs:\n  tests:\n    runs-on: ${{ matrix.operating-system }}\n\n    strategy:\n      matr"
  },
  {
    "path": ".gitignore",
    "chars": 455,
    "preview": ".env\n.env.testing\n.idea\n.php_cs.cache\n.phpunit.result.cache\n.vscode\n.vagrant\n*.hot\n/stubs\n/data\n/docker-compose-collecti"
  },
  {
    "path": ".styleci.yml",
    "chars": 120,
    "preview": "php:\n  preset: laravel\n  disabled:\n    - no_unused_imports\n  finder:\n    not-name:\n      - index.php\njs: true\ncss: true\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 705,
    "preview": "# CHANGELOG for 2.2\n\nThis changelog consists of the bug & security fixes and new features being included in the releases"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3353,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "LICENSE",
    "chars": 1078,
    "preview": "MIT License\n\nCopyright 2010-2025, Webkul Software\n\nPermission is hereby granted, free of charge, to any person obtaining"
  },
  {
    "path": "README.md",
    "chars": 5920,
    "preview": "<p align=\"center\">\n    <a href=\"https://krayincrm.com\">\n        <picture>\n            <source media=\"(prefers-color-sche"
  },
  {
    "path": "UPGRADE.md",
    "chars": 1783,
    "preview": "# UPGRADE Guide\n\n- [Upgrading To v2.2 From v2.1](#upgrading-to-v22-from-v21)\n\n## High Impact Changes\n\n- [Laravel 12 Upgr"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "chars": 77,
    "preview": "<?php\n\nnamespace App\\Http\\Controllers;\n\nabstract class Controller\n{\n    //\n}\n"
  },
  {
    "path": "app/Models/User.php",
    "chars": 975,
    "preview": "<?php\n\nnamespace App\\Models;\n\nuse Database\\Factories\\UserFactory;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "chars": 361,
    "preview": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvid"
  },
  {
    "path": "artisan",
    "chars": 350,
    "preview": "#!/usr/bin/env php\n<?php\n\nuse Symfony\\Component\\Console\\Input\\ArgvInput;\n\ndefine('LARAVEL_START', microtime(true));\n\n// "
  },
  {
    "path": "bootstrap/app.php",
    "chars": 1095,
    "preview": "<?php\n\nuse Illuminate\\Foundation\\Application;\nuse Illuminate\\Foundation\\Configuration\\Exceptions;\nuse Illuminate\\Foundat"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "bootstrap/providers.php",
    "chars": 2171,
    "preview": "<?php\n\nuse App\\Providers\\AppServiceProvider;\nuse Barryvdh\\DomPDF\\ServiceProvider;\nuse Konekt\\Concord\\ConcordServiceProvi"
  },
  {
    "path": "composer.json",
    "chars": 3824,
    "preview": "{\n    \"name\": \"krayin/laravel-crm\",\n    \"type\": \"project\",\n    \"description\": \"Krayin CRM\",\n    \"keywords\": [\n        \"f"
  },
  {
    "path": "config/app.php",
    "chars": 6274,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Applicatio"
  },
  {
    "path": "config/auth.php",
    "chars": 3558,
    "preview": "<?php\n\nuse Webkul\\User\\Models\\User;\n\nreturn [\n\n    /*\n    |-------------------------------------------------------------"
  },
  {
    "path": "config/breadcrumbs.php",
    "chars": 2407,
    "preview": "<?php\n\nuse Diglactic\\Breadcrumbs\\Generator;\nuse Diglactic\\Breadcrumbs\\Manager;\n\nreturn [\n\n    /*\n    |------------------"
  },
  {
    "path": "config/broadcasting.php",
    "chars": 1711,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Br"
  },
  {
    "path": "config/cache.php",
    "chars": 3199,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/concord.php",
    "chars": 1183,
    "preview": "<?php\n\nuse Webkul\\Activity\\Providers\\ModuleServiceProvider;\n\nreturn [\n    'modules' => [\n        ModuleServiceProvider::"
  },
  {
    "path": "config/cors.php",
    "chars": 1632,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Laravel CO"
  },
  {
    "path": "config/database.php",
    "chars": 5126,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/filesystems.php",
    "chars": 2197,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Fi"
  },
  {
    "path": "config/hashing.php",
    "chars": 1571,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ha"
  },
  {
    "path": "config/imap.php",
    "chars": 8742,
    "preview": "<?php\n\nuse Webklex\\IMAP\\Events\\FlagDeletedEvent;\nuse Webklex\\IMAP\\Events\\FlagNewEvent;\nuse Webklex\\IMAP\\Events\\FolderDel"
  },
  {
    "path": "config/krayin-vite.php",
    "chars": 939,
    "preview": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Krayin Vite"
  },
  {
    "path": "config/logging.php",
    "chars": 3004,
    "preview": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn"
  },
  {
    "path": "config/mail-receiver.php",
    "chars": 477,
    "preview": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Default Mai"
  },
  {
    "path": "config/mail.php",
    "chars": 3942,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Ma"
  },
  {
    "path": "config/queue.php",
    "chars": 2766,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Qu"
  },
  {
    "path": "config/repository.php",
    "chars": 7884,
    "preview": "<?php\n\nuse League\\Fractal\\Serializer\\DataArraySerializer;\n\n/*\n|---------------------------------------------------------"
  },
  {
    "path": "config/sanctum.php",
    "chars": 2359,
    "preview": "<?php\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies;\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken;\n\nretu"
  },
  {
    "path": "config/services.php",
    "chars": 950,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Part"
  },
  {
    "path": "config/session.php",
    "chars": 7041,
    "preview": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------"
  },
  {
    "path": "config/tinker.php",
    "chars": 1504,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Console Co"
  },
  {
    "path": "config/view.php",
    "chars": 1053,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Stora"
  },
  {
    "path": "database/.gitignore",
    "chars": 26,
    "preview": "*.sqlite\n*.sqlite-journal\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "chars": 1075,
    "preview": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illum"
  },
  {
    "path": "database/migrations/2019_08_19_000000_create_failed_jobs_table.php",
    "chars": 810,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php",
    "chars": 856,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_09_09_094040_create_job_batches_table.php",
    "chars": 989,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/migrations/2024_09_09_094042_create_jobs_table.php",
    "chars": 856,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "chars": 358,
    "preview": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Webkul\\Installer\\Database\\Seeders\\DatabaseSeeder"
  },
  {
    "path": "lang/en/auth.php",
    "chars": 674,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentica"
  },
  {
    "path": "lang/en/pagination.php",
    "chars": 534,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination"
  },
  {
    "path": "lang/en/passwords.php",
    "chars": 744,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password R"
  },
  {
    "path": "lang/en/validation.php",
    "chars": 7711,
    "preview": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation"
  },
  {
    "path": "package.json",
    "chars": 216,
    "preview": "{\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\"\n  },\n  \"devDependen"
  },
  {
    "path": "packages/Webkul/Activity/composer.json",
    "chars": 608,
    "preview": "{\n    \"name\": \"krayin/laravel-activity\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Jitendra "
  },
  {
    "path": "packages/Webkul/Activity/src/Contracts/Activity.php",
    "chars": 67,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Contracts;\n\ninterface Activity {}\n"
  },
  {
    "path": "packages/Webkul/Activity/src/Contracts/File.php",
    "chars": 63,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Contracts;\n\ninterface File {}\n"
  },
  {
    "path": "packages/Webkul/Activity/src/Contracts/Participant.php",
    "chars": 70,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Contracts;\n\ninterface Participant {}\n"
  },
  {
    "path": "packages/Webkul/Activity/src/Database/Migrations/2021_05_12_150329_create_activities_table.php",
    "chars": 1090,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php",
    "chars": 830,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php",
    "chars": 1057,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php",
    "chars": 648,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Activity/src/Database/Migrations/2025_01_17_151632_alter_activities_table.php",
    "chars": 1593,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Activity/src/Models/Activity.php",
    "chars": 2422,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Webkul\\Activity\\Contracts\\Activity"
  },
  {
    "path": "packages/Webkul/Activity/src/Models/ActivityProxy.php",
    "chars": 124,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Models;\n\nuse Konekt\\Concord\\Proxies\\ModelProxy;\n\nclass ActivityProxy extends ModelProxy"
  },
  {
    "path": "packages/Webkul/Activity/src/Models/File.php",
    "chars": 1295,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Storage"
  },
  {
    "path": "packages/Webkul/Activity/src/Models/FileProxy.php",
    "chars": 120,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Models;\n\nuse Konekt\\Concord\\Proxies\\ModelProxy;\n\nclass FileProxy extends ModelProxy {}\n"
  },
  {
    "path": "packages/Webkul/Activity/src/Models/Participant.php",
    "chars": 1102,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Webkul\\Activity\\Contracts\\Particip"
  },
  {
    "path": "packages/Webkul/Activity/src/Models/ParticipantProxy.php",
    "chars": 127,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Models;\n\nuse Konekt\\Concord\\Proxies\\ModelProxy;\n\nclass ParticipantProxy extends ModelPr"
  },
  {
    "path": "packages/Webkul/Activity/src/Providers/ActivityServiceProvider.php",
    "chars": 2109,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Providers;\n\nuse Illuminate\\Routing\\Router;\nuse Illuminate\\Support\\ServiceProvider;\nuse "
  },
  {
    "path": "packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php",
    "chars": 382,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Providers;\n\nuse Webkul\\Activity\\Models\\Activity;\nuse Webkul\\Activity\\Models\\File;\nuse W"
  },
  {
    "path": "packages/Webkul/Activity/src/Repositories/ActivityRepository.php",
    "chars": 5608,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Repositories;\n\nuse Webkul\\Activity\\Contracts\\Activity;\nuse Webkul\\Core\\Eloquent\\Reposit"
  },
  {
    "path": "packages/Webkul/Activity/src/Repositories/FileRepository.php",
    "chars": 311,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Repositories;\n\nuse Webkul\\Activity\\Contracts\\File;\nuse Webkul\\Core\\Eloquent\\Repository;"
  },
  {
    "path": "packages/Webkul/Activity/src/Repositories/ParticipantRepository.php",
    "chars": 309,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Repositories;\n\nuse Webkul\\Core\\Eloquent\\Repository;\n\nclass ParticipantRepository extend"
  },
  {
    "path": "packages/Webkul/Activity/src/Traits/LogsActivity.php",
    "chars": 4999,
    "preview": "<?php\n\nnamespace Webkul\\Activity\\Traits;\n\nuse Webkul\\Activity\\Repositories\\ActivityRepository;\nuse Webkul\\Attribute\\Cont"
  },
  {
    "path": "packages/Webkul/Admin/.gitignore",
    "chars": 79,
    "preview": "/node_modules\n/package-lock.json\nnpm-debug.log\n/playwright-report\n/test-results"
  },
  {
    "path": "packages/Webkul/Admin/composer.json",
    "chars": 878,
    "preview": "{\n    \"name\": \"krayin/laravel-admin\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Jitendra Sin"
  },
  {
    "path": "packages/Webkul/Admin/package.json",
    "chars": 955,
    "preview": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite\",\n        \"build\": \"vite build\"\n    }"
  },
  {
    "path": "packages/Webkul/Admin/postcss.config.cjs",
    "chars": 105,
    "preview": "module.exports = ({ env }) => ({\n    plugins: [require(\"tailwindcss\")(), require(\"autoprefixer\")()],\n});\n"
  },
  {
    "path": "packages/Webkul/Admin/src/Bouncer.php",
    "chars": 1494,
    "preview": "<?php\n\nnamespace Webkul\\Admin;\n\nuse Webkul\\User\\Repositories\\UserRepository;\n\nclass Bouncer\n{\n    /**\n     * Checks if u"
  },
  {
    "path": "packages/Webkul/Admin/src/Config/acl.php",
    "chars": 20511,
    "preview": "<?php\n\nreturn [\n    [\n        'key' => 'dashboard',\n        'name' => 'admin::app.layouts.dashboard',\n        'route' =>"
  },
  {
    "path": "packages/Webkul/Admin/src/Config/attribute_entity_types.php",
    "chars": 969,
    "preview": "<?php\n\nreturn [\n    'leads' => [\n        'name' => 'admin::app.leads.index.title',\n        'repository' => 'Webkul\\Lead\\"
  },
  {
    "path": "packages/Webkul/Admin/src/Config/attribute_lookups.php",
    "chars": 1402,
    "preview": "<?php\n\nreturn [\n    'leads' => [\n        'name' => 'Leads',\n        'repository' => 'Webkul\\Lead\\Repositories\\LeadReposi"
  },
  {
    "path": "packages/Webkul/Admin/src/Config/core_config.php",
    "chars": 13440,
    "preview": "<?php\n\nreturn [\n    /**\n     * General.\n     */\n    [\n        'key' => 'general',\n        'name' => 'admin::app.configur"
  },
  {
    "path": "packages/Webkul/Admin/src/Config/menu.php",
    "chars": 9107,
    "preview": "<?php\n\nreturn [\n    /**\n     * Dashboard.\n     */\n    [\n        'key' => 'dashboard',\n        'name' => 'admin::app.layo"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Activity/ActivityDataGrid.php",
    "chars": 8398,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Activity;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php",
    "chars": 3841,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Contact;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades\\"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Contact/PersonDataGrid.php",
    "chars": 5237,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Contact;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades\\"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Lead/LeadDataGrid.php",
    "chars": 11934,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Lead;\n\nuse Illuminate\\Contracts\\Database\\Query\\Builder;\nuse Illuminate\\Support\\F"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Mail/EmailDataGrid.php",
    "chars": 7022,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Product/ProductDataGrid.php",
    "chars": 5971,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Product;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades\\"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Quote/QuoteDataGrid.php",
    "chars": 8134,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Quote;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades\\DB"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/AttributeDataGrid.php",
    "chars": 5131,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/DataTransfer/ImportDataGrid.php",
    "chars": 5509,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings\\DataTransfer;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Su"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/EmailTemplateDataGrid.php",
    "chars": 2490,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Webkul\\DataGrid\\DataGrid;\n\ncla"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/GroupDataGrid.php",
    "chars": 2369,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/Marketing/CampaignDatagrid.php",
    "chars": 3321,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings\\Marketing;\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Webkul\\DataGrid\\Data"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/Marketing/EventDataGrid.php",
    "chars": 3262,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings\\Marketing;\n\nuse Illuminate\\Support\\Facades\\DB;\nuse Webkul\\DataGrid\\Data"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/PipelineDataGrid.php",
    "chars": 2847,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/RoleDataGrid.php",
    "chars": 3135,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/SourceDataGrid.php",
    "chars": 2066,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/TagDataGrid.php",
    "chars": 3722,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/TypeDataGrid.php",
    "chars": 2110,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/UserDataGrid.php",
    "chars": 4412,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/WarehouseDataGrid.php",
    "chars": 5175,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/WebhookDataGrid.php",
    "chars": 2812,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/DataGrids/Settings/WorkflowDataGrid.php",
    "chars": 2152,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\DataGrids\\Settings;\n\nuse Illuminate\\Database\\Query\\Builder;\nuse Illuminate\\Support\\Facades"
  },
  {
    "path": "packages/Webkul/Admin/src/Database/Migrations/2021_06_07_162808_add_lead_view_permission_column_in_users_table.php",
    "chars": 688,
    "preview": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Admin/src/Database/Migrations/2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php",
    "chars": 1006,
    "preview": "<?php\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Support\\Facades\\DB;\n\nreturn new c"
  },
  {
    "path": "packages/Webkul/Admin/src/Exceptions/Handler.php",
    "chars": 3322,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Exceptions;\n\nuse Illuminate\\Auth\\AuthenticationException;\nuse Illuminate\\Container\\Contain"
  },
  {
    "path": "packages/Webkul/Admin/src/Facades/Bouncer.php",
    "chars": 295,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nclass Bouncer extends Facade\n{\n    /**\n "
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Dashboard.php",
    "chars": 3825,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers;\n\nuse Illuminate\\Support\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Webkul\\Adm"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/AbstractReporting.php",
    "chars": 8990,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nuse Carbon\\CarbonPeriod;\nuse Illuminate\\Support\\Carbon;\nuse Illuminate"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/Activity.php",
    "chars": 94,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nclass Activity extends AbstractReporting {}\n"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/Lead.php",
    "chars": 14464,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\DB;\nuse Webkul\\Lead\\"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/Organization.php",
    "chars": 2484,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\S"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/Person.php",
    "chars": 2420,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\S"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/Product.php",
    "chars": 3086,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Facades\\DB;\n"
  },
  {
    "path": "packages/Webkul/Admin/src/Helpers/Reporting/Quote.php",
    "chars": 1139,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Helpers\\Reporting;\n\nuse Carbon\\Carbon;\nuse Webkul\\Quote\\Repositories\\QuoteRepository;\n\ncla"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Activity/ActivityController.php",
    "chars": 8347,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Activity;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\JsonResponse;\nuse Illum"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Configuration/ConfigurationController.php",
    "chars": 2184,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Configuration;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Red"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php",
    "chars": 4033,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Contact;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectR"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Contact/Persons/ActivityController.php",
    "chars": 3272,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Contact\\Persons;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Fa"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Contact/Persons/PersonController.php",
    "chars": 6815,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Contact\\Persons;\n\nuse Exception;\nuse Illuminate\\Http\\JsonResponse;\nuse Il"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Contact/Persons/TagController.php",
    "chars": 1551,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Contact\\Persons;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Suppor"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Controller.php",
    "chars": 598,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminat"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/DashboardController.php",
    "chars": 1570,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\View\\View;\nuse Webkul\\"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/DataGrid/SavedFilterController.php",
    "chars": 3362,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\DataGrid;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Webkul\\Admin\\Http\\Co"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/DataGridController.php",
    "chars": 1291,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers;\n\nuse Illuminate\\Support\\Facades\\Crypt;\n\nclass DataGridController extends"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Lead/ActivityController.php",
    "chars": 3243,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Lead;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\DB;\nu"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Lead/EmailController.php",
    "chars": 2412,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Lead;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\Event"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Lead/LeadController.php",
    "chars": 23183,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Lead;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminat"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Lead/QuoteController.php",
    "chars": 1676,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Lead;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\Event"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Lead/TagController.php",
    "chars": 1551,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Lead;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\Event"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Mail/EmailController.php",
    "chars": 10586,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Mail;\n\nuse Exception;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Ht"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Mail/TagController.php",
    "chars": 1481,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Mail;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Facades\\E"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Products/ActivityController.php",
    "chars": 1228,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Products;\n\nuse Illuminate\\Http\\Response;\nuse Webkul\\Activity\\Repositories"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Products/ProductController.php",
    "chars": 6338,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Products;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resource"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Products/TagController.php",
    "chars": 1624,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Products;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\E"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Quote/QuoteController.php",
    "chars": 6459,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Quote;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\RedirectRes"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/AttributeController.php",
    "chars": 6780,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/DataTransfer/ImportController.php",
    "chars": 14733,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings\\DataTransfer;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/EmailTemplateController.php",
    "chars": 4105,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/GroupController.php",
    "chars": 3493,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resource"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/LocationController.php",
    "chars": 2208,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Response"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/Marketing/CampaignsController.php",
    "chars": 4919,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings\\Marketing;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Sup"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/Marketing/EventController.php",
    "chars": 5200,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings\\Marketing;\n\nuse Exception;\nuse Illuminate\\Http\\JsonResponse;\nuse"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/PipelineController.php",
    "chars": 4527,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/RoleController.php",
    "chars": 4871,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/SettingController.php",
    "chars": 2413,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Colle"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/SourceController.php",
    "chars": 3239,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Exception;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminat"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/TagController.php",
    "chars": 4361,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Response"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/TypeController.php",
    "chars": 2923,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Facad"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/UserController.php",
    "chars": 7570,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Resource"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/Warehouse/ActivityController.php",
    "chars": 1246,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings\\Warehouse;\n\nuse Illuminate\\Http\\Response;\nuse Webkul\\Activity\\Re"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/Warehouse/TagController.php",
    "chars": 1670,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings\\Warehouse;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/Warehouse/WarehouseController.php",
    "chars": 4544,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings\\Warehouse;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Htt"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/WebFormController.php",
    "chars": 4952,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/WebhookController.php",
    "chars": 2799,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/Settings/WorkflowController.php",
    "chars": 3341,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\Settings;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\Redirect"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/TinyMCEController.php",
    "chars": 1340,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Http\\UploadedFile;\nuse"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/User/AccountController.php",
    "chars": 2639,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\User;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\Event"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/User/ForgotPasswordController.php",
    "chars": 2224,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\User;\n\nuse Illuminate\\Contracts\\Auth\\PasswordBroker;\nuse Illuminate\\Found"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/User/ResetPasswordController.php",
    "chars": 2701,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\User;\n\nuse Illuminate\\Auth\\Events\\PasswordReset;\nuse Illuminate\\Contracts"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php",
    "chars": 3144,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Controllers\\User;\n\nuse Illuminate\\Http\\RedirectResponse;\nuse Illuminate\\Support\\Colle"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Middleware/Bouncer.php",
    "chars": 2139,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Middleware;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\n\nclas"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Middleware/Locale.php",
    "chars": 744,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Foundation\\Application;\nuse Illuminate\\Http\\"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Middleware/SanitizeUrl.php",
    "chars": 1345,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Str;\nus"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/AttributeForm.php",
    "chars": 4290,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Webkul\\Attribute\\Repositor"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php",
    "chars": 1122,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ConfigurationForm exten"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/LeadForm.php",
    "chars": 6007,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Webkul\\"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/MassDestroyRequest.php",
    "chars": 562,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MassDestroyRequest exte"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/MassUpdateRequest.php",
    "chars": 598,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass MassUpdateRequest exten"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/PipelineForm.php",
    "chars": 2149,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Fact"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Requests/UserForm.php",
    "chars": 956,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UserForm extends FormRe"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/ActivityFileResource.php",
    "chars": 596,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/ActivityParticipantResource.php",
    "chars": 541,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/ActivityResource.php",
    "chars": 1203,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/EmailAttachmentResource.php",
    "chars": 732,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/EmailResource.php",
    "chars": 1392,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/LeadResource.php",
    "chars": 1254,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/OrganizationResource.php",
    "chars": 569,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/PersonResource.php",
    "chars": 695,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/PipelineResource.php",
    "chars": 686,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/ProductResource.php",
    "chars": 642,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/QuoteResource.php",
    "chars": 1102,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/SourceResource.php",
    "chars": 522,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/StageResource.php",
    "chars": 789,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/TagResource.php",
    "chars": 609,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/TypeResource.php",
    "chars": 520,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/Resources/UserResource.php",
    "chars": 588,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResou"
  },
  {
    "path": "packages/Webkul/Admin/src/Http/helpers.php",
    "chars": 119,
    "preview": "<?php\n\nif (! function_exists('bouncer')) {\n    function bouncer()\n    {\n        return app()->make('bouncer');\n    }\n}\n"
  },
  {
    "path": "packages/Webkul/Admin/src/Listeners/Activity.php",
    "chars": 1939,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Listeners;\n\nuse Webkul\\Activity\\Contracts\\Activity as ActivityContract;\nuse Webkul\\Contact"
  },
  {
    "path": "packages/Webkul/Admin/src/Listeners/Lead.php",
    "chars": 581,
    "preview": "<?php\n\nnamespace Webkul\\Admin\\Listeners;\n\nuse Webkul\\Email\\Repositories\\EmailRepository;\n\nclass Lead\n{\n    /**\n     * Cr"
  }
]

// ... and 883 more files (download for full content)

About this extraction

This page contains the full source code of the krayin/laravel-crm GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1083 files (6.0 MB), approximately 1.7M tokens, and a symbol index with 6712 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!