diff --git a/Modules/Analytics/Resources/views/index.blade.php b/Modules/Analytics/Resources/views/index.blade.php index 35b0fa5f..67671ca7 100644 --- a/Modules/Analytics/Resources/views/index.blade.php +++ b/Modules/Analytics/Resources/views/index.blade.php @@ -1,51 +1,48 @@ -
+
- + icon="fa-solid fa-chart-line" />
-
-
-
-
01
-

KPI1 Bar

-

Placeholder area for kpi1 bar.

-
-
+
+
+
+
01
+

KPI1 Bar

+

Placeholder area for kpi1 bar.

-
-
-
-
02
-

KPI1 Line

-

Placeholder area for kpi1 line.

-
-
+
+
+
+
+
+
02
+

KPI1 Line

+

Placeholder area for kpi1 line.

-
-
-
-
03
-

OTTC

-

Placeholder area for ottc.

-
-
+
+
+
+
+
+
03
+

OTTC

+

Placeholder area for ottc.

-
-
-
-
04
-

Warehouse Performance

-

Placeholder area for warehouse performance.

-
-
+
+
+
+
+
+
04
+

Warehouse Performance

+

Placeholder area for warehouse performance.

+
+
@@ -53,7 +50,8 @@

Analytics workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

+

Sample table layout ready to wire into controllers, + queries, DataTables, or Livewire.

@@ -78,26 +76,38 @@ KPI1 Bar Sample 1 - Active - Open + Active + + Open KPI1 Line Sample 2 - Active - Open + Active + + Open OTTC Sample 3 - Active - Open + Active + + Open Warehouse Performance Sample 4 - Active - Open + Active + + Open diff --git a/Modules/Audit/Resources/views/index.blade.php b/Modules/Audit/Resources/views/index.blade.php index b663debf..e53c84d0 100644 --- a/Modules/Audit/Resources/views/index.blade.php +++ b/Modules/Audit/Resources/views/index.blade.php @@ -1,51 +1,48 @@ -
+
- + icon="fa-solid fa-clipboard-check" />
-
-
-
-
01
-

Activity Log

-

Placeholder area for activity log.

-
-
+
+
+
+
01
+

Activity Log

+

Placeholder area for activity log.

-
-
-
-
02
-

Data Changes

-

Placeholder area for data changes.

-
-
+
+
+
+
+
+
02
+

Data Changes

+

Placeholder area for data changes.

-
-
-
-
03
-

API Audit

-

Placeholder area for api audit.

-
-
+
+
+
+
+
+
03
+

API Audit

+

Placeholder area for api audit.

-
-
-
-
04
-

User Actions

-

Placeholder area for user actions.

-
-
+
+
+
+
+
+
04
+

User Actions

+

Placeholder area for user actions.

+
+
@@ -53,7 +50,8 @@

Audit workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

+

Sample table layout ready to wire into controllers, + queries, DataTables, or Livewire.

@@ -78,26 +76,38 @@ Activity Log Sample 1 - Active - Open + Active + + Open Data Changes Sample 2 - Active - Open + Active + + Open API Audit Sample 3 - Active - Open + Active + + Open User Actions Sample 4 - Active - Open + Active + + Open diff --git a/Modules/AuditTrail/Resources/views/layouts/master.blade.php b/Modules/AuditTrail/Resources/views/layouts/master.blade.php index 78f42bc5..e20def14 100644 --- a/Modules/AuditTrail/Resources/views/layouts/master.blade.php +++ b/Modules/AuditTrail/Resources/views/layouts/master.blade.php @@ -1,20 +1,24 @@ - - - - - Module AuditTrail - {{-- Laravel Mix - CSS File --}} - {{-- --}} + + + + + Module AuditTrail - - - - @yield('content') + {{-- Laravel Mix - CSS File --}} + {{-- --}} + + + + + + @yield('content') + + {{-- Laravel Mix - JS File --}} + {{-- --}} + - {{-- Laravel Mix - JS File --}} - {{-- --}} - diff --git a/Modules/CarrierManagement/Resources/views/index.blade.php b/Modules/CarrierManagement/Resources/views/index.blade.php index 5ade44fe..9598a0c2 100644 --- a/Modules/CarrierManagement/Resources/views/index.blade.php +++ b/Modules/CarrierManagement/Resources/views/index.blade.php @@ -1,51 +1,48 @@ -
+
- + icon="fa-solid fa-id-card" />
-
-
-
-
01
-

Carrier Directory

-

Placeholder area for carrier directory.

-
-
+
+
+
+
01
+

Carrier Directory

+

Placeholder area for carrier directory.

-
-
-
-
02
-

Carrier Service Levels

-

Placeholder area for carrier service levels.

-
-
+
+
+
+
+
+
02
+

Carrier Service Levels

+

Placeholder area for carrier service levels.

-
-
-
-
03
-

Carrier Rules

-

Placeholder area for carrier rules.

-
-
+
+
+
+
+
+
03
+

Carrier Rules

+

Placeholder area for carrier rules.

-
-
-
-
04
-

Carrier Audit

-

Placeholder area for carrier audit.

-
-
+
+
+
+
+
+
04
+

Carrier Audit

+

Placeholder area for carrier audit.

+
+
@@ -53,7 +50,8 @@

Carrier Management workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

+

Sample table layout ready to wire into controllers, + queries, DataTables, or Livewire.

@@ -78,26 +76,38 @@ Carrier Directory Sample 1 - Active - Open + Active + + Open Carrier Service Levels Sample 2 - Active - Open + Active + + Open Carrier Rules Sample 3 - Active - Open + Active + + Open Carrier Audit Sample 4 - Active - Open + Active + + Open diff --git a/Modules/Configuration/Resources/views/index.blade.php b/Modules/Configuration/Resources/views/index.blade.php index 612f755b..5adc2ca3 100644 --- a/Modules/Configuration/Resources/views/index.blade.php +++ b/Modules/Configuration/Resources/views/index.blade.php @@ -1,51 +1,48 @@ -
+
- + icon="fa-solid fa-sliders" />
-
-
-
-
01
-

System Settings

-

Placeholder area for system settings.

-
-
+
+
+
+
01
+

System Settings

+

Placeholder area for system settings.

-
-
-
-
02
-

Feature Flags

-

Placeholder area for feature flags.

-
-
+
+
+
+
+
+
02
+

Feature Flags

+

Placeholder area for feature flags.

-
-
-
-
03
-

Warehouse Defaults

-

Placeholder area for warehouse defaults.

-
-
+
+
+
+
+
+
03
+

Warehouse Defaults

+

Placeholder area for warehouse defaults.

-
-
-
-
04
-

Interface Settings

-

Placeholder area for interface settings.

-
-
+
+
+
+
+
+
04
+

Interface Settings

+

Placeholder area for interface settings.

+
+
@@ -53,7 +50,8 @@

Configuration workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

+

Sample table layout ready to wire into controllers, + queries, DataTables, or Livewire.

@@ -78,26 +76,38 @@ System Settings Sample 1 - Active - Open + Active + + Open Feature Flags Sample 2 - Active - Open + Active + + Open Warehouse Defaults Sample 3 - Active - Open + Active + + Open Interface Settings Sample 4 - Active - Open + Active + + Open diff --git a/Modules/Countries/Resources/views/_form.blade.php b/Modules/Countries/Resources/views/_form.blade.php index e30c32b2..04a6d345 100644 --- a/Modules/Countries/Resources/views/_form.blade.php +++ b/Modules/Countries/Resources/views/_form.blade.php @@ -1,63 +1,91 @@ @php $required = '*'; - $textInput = 'mt-2 min-h-11 w-full rounded-xl border-zinc-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-zinc-700 dark:bg-zinc-950 dark:text-zinc-100'; - $textareaInput = 'mt-2 min-h-28 w-full rounded-xl border-zinc-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-zinc-700 dark:bg-zinc-950 dark:text-zinc-100'; + $textInput = + 'mt-2 min-h-11 w-full rounded-xl border-zinc-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-zinc-700 dark:bg-zinc-950 dark:text-zinc-100'; + $textareaInput = + 'mt-2 min-h-28 w-full rounded-xl border-zinc-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-zinc-700 dark:bg-zinc-950 dark:text-zinc-100'; $labelClass = 'text-sm font-semibold text-zinc-900 dark:text-zinc-100'; @endphp
- - @error('alpha2')

{{ $message }}

@enderror + + @error('alpha2') +

{{ $message }}

+ @enderror
- - @error('alpha3')

{{ $message }}

@enderror + + @error('alpha3') +

{{ $message }}

+ @enderror
- - @error('numeric')

{{ $message }}

@enderror + + @error('numeric') +

{{ $message }}

+ @enderror
- @error('name')

{{ $message }}

@enderror + @error('name') +

{{ $message }}

+ @enderror
- - @error('official_name')

{{ $message }}

@enderror + + @error('official_name') +

{{ $message }}

+ @enderror
- - @error('common_name')

{{ $message }}

@enderror + + @error('common_name') +

{{ $message }}

+ @enderror
- - @error('display_name')

{{ $message }}

@enderror + + @error('display_name') +

{{ $message }}

+ @enderror
- - @error('native_name')

{{ $message }}

@enderror + + @error('native_name') +

{{ $message }}

+ @enderror
- - @error('capital')

{{ $message }}

@enderror + + @error('capital') +

{{ $message }}

+ @enderror
@@ -68,40 +96,59 @@ - @error('iso_status')

{{ $message }}

@enderror + @error('iso_status') +

{{ $message }}

+ @enderror
- - @error('sovereignty_status')

{{ $message }}

@enderror + + @error('sovereignty_status') +

{{ $message }}

+ @enderror
- - @error('continent')

{{ $message }}

@enderror + + @error('continent') +

{{ $message }}

+ @enderror
- - @error('region')

{{ $message }}

@enderror + + @error('region') +

{{ $message }}

+ @enderror
- - @error('subregion')

{{ $message }}

@enderror + + @error('subregion') +

{{ $message }}

+ @enderror
- - @error('intermediate_region')

{{ $message }}

@enderror + + @error('intermediate_region') +

{{ $message }}

+ @enderror
@@ -111,110 +158,162 @@
- - @error('flag_emoji')

{{ $message }}

@enderror + + @error('flag_emoji') +

{{ $message }}

+ @enderror
- - @error('calling_code')

{{ $message }}

@enderror + + @error('calling_code') +

{{ $message }}

+ @enderror
- - @error('tld')

{{ $message }}

@enderror + + @error('tld') +

{{ $message }}

+ @enderror
- - @error('currency_code')

{{ $message }}

@enderror + + @error('currency_code') +

{{ $message }}

+ @enderror
- - @error('currency_name')

{{ $message }}

@enderror + + @error('currency_name') +

{{ $message }}

+ @enderror
- - @error('currency_symbol')

{{ $message }}

@enderror + + @error('currency_symbol') +

{{ $message }}

+ @enderror
- - @error('latitude')

{{ $message }}

@enderror + + @error('latitude') +

{{ $message }}

+ @enderror
- - @error('longitude')

{{ $message }}

@enderror + + @error('longitude') +

{{ $message }}

+ @enderror
- - @error('sort_order')

{{ $message }}

@enderror + + @error('sort_order') +

{{ $message }}

+ @enderror
- - @error('ioc_code')

{{ $message }}

@enderror + + @error('ioc_code') +

{{ $message }}

+ @enderror
- - @error('fifa_code')

{{ $message }}

@enderror + + @error('fifa_code') +

{{ $message }}

+ @enderror
- - @error('postal_code_format')

{{ $message }}

@enderror + + @error('postal_code_format') +

{{ $message }}

+ @enderror
- - @error('flag_svg_url')

{{ $message }}

@enderror + + @error('flag_svg_url') +

{{ $message }}

+ @enderror
- - @error('flag_png_url')

{{ $message }}

@enderror + + @error('flag_png_url') +

{{ $message }}

+ @enderror

JSON metadata

-

Use valid JSON. Examples: languages as ["en"], timezones as ["Europe/London"].

+

Use valid JSON. Examples: languages as ["en"], timezones as ["Europe/London"].

- @error('languages')

{{ $message }}

@enderror + @error('languages') +

{{ $message }}

+ @enderror
- @error('timezones')

{{ $message }}

@enderror + @error('timezones') +

{{ $message }}

+ @enderror
- @error('metadata')

{{ $message }}

@enderror + @error('metadata') +

{{ $message }}

+ @enderror
@@ -222,46 +321,67 @@

Operational support

-
diff --git a/Modules/Countries/Resources/views/create.blade.php b/Modules/Countries/Resources/views/create.blade.php index 97dfba7e..779233d6 100644 --- a/Modules/Countries/Resources/views/create.blade.php +++ b/Modules/Countries/Resources/views/create.blade.php @@ -1,29 +1,40 @@
-
+
-

ISO 3166 country support

+

ISO 3166 country + support

Create country

-

Create a governed country reference record for platform, address, billing, carrier, customs and integration workflows.

+

Create a governed country reference record for + platform, address, billing, carrier, customs and integration workflows.

- Back to countries + Back + to countries
-
+ @csrf -
- Fields marked with * are mandatory ISO/WMS support fields. +
+ Fields marked with * are mandatory ISO/WMS + support fields.
@include('countries::_form', ['country' => $country])
- - Cancel + + Cancel
diff --git a/Modules/Countries/Resources/views/edit.blade.php b/Modules/Countries/Resources/views/edit.blade.php index cf60c361..4811ef2c 100644 --- a/Modules/Countries/Resources/views/edit.blade.php +++ b/Modules/Countries/Resources/views/edit.blade.php @@ -1,33 +1,46 @@
-
+
-

ISO 3166 country support

-

Edit {{ $country->flag_emoji }} {{ $country->effective_name }}

-

Expose and manage every ISO, operational, regional, currency, logistics and WMS support parameter.

+

ISO 3166 country + support

+

Edit {{ $country->flag_emoji }} + {{ $country->effective_name }}

+

Expose and manage every ISO, operational, + regional, currency, logistics and WMS support parameter.

-
+ @csrf @method('PUT') -
- Fields marked with * are mandatory ISO/WMS support fields. +
+ Fields marked with * are mandatory ISO/WMS + support fields.
@include('countries::_form', ['country' => $country])
- - Cancel + + Cancel
diff --git a/Modules/Countries/Resources/views/index.blade.php b/Modules/Countries/Resources/views/index.blade.php index db6f0660..462482bb 100644 --- a/Modules/Countries/Resources/views/index.blade.php +++ b/Modules/Countries/Resources/views/index.blade.php @@ -1,61 +1,96 @@
-
+

Reference data

Countries

-

Governed ISO 3166 country records for tenants, companies, warehouses, billing, shipping, carriers, customs and integrations.

+

Governed ISO 3166 country records for tenants, + companies, warehouses, billing, shipping, carriers, customs and integrations.

@csrf - +
- New country + New + country
@if (session('success')) -
{{ session('success') }}
+
+ {{ session('success') }}
@endif
-
Total countries
{{ number_format($totalCount) }}
-
Active
{{ number_format($activeCount) }}
-
Inactive
{{ number_format($inactiveCount) }}
+
+
Total countries
+
{{ number_format($totalCount) }}
+
+
+
Active
+
+ {{ number_format($activeCount) }}
+
+
+
Inactive
+
+ {{ number_format($inactiveCount) }}
+
-
- - + - @foreach ($regions as $availableRegion) @endforeach - +
-
+
- - - - - - + + + + + + @@ -65,19 +100,48 @@
{{ $country->flag_emoji }}
-
{{ $country->effective_name }}
-
{{ $country->official_name ?: $country->name }}
+
+ {{ $country->effective_name }}
+
+ {{ $country->official_name ?: $country->name }}
- - - - - + + + + + @empty - + + + @endforelse
CountryISORegionCurrencySupportActions + CountryISO + + Region + Currency + Support + Actions
{{ $country->alpha2 }} / {{ $country->alpha3 }} / {{ $country->numeric }}
{{ str($country->iso_status ?? 'official')->replace('_', ' ')->title() }}
{{ $country->region ?: '—' }}
{{ $country->subregion ?: '—' }}
{{ $country->currency_code ?: '—' }}
{{ $country->currency_name ?: '—' }}
@if ($country->is_active)Active@elseInactive@endifOpen Edit +
+ {{ $country->alpha2 }} / {{ $country->alpha3 }} / {{ $country->numeric }} +
+
+ {{ str($country->iso_status ?? 'official')->replace('_', ' ')->title() }}
+
+
{{ $country->region ?: '—' }}
+
{{ $country->subregion ?: '—' }}
+
+
+ {{ $country->currency_code ?: '—' }}
+
{{ $country->currency_name ?: '—' }}
+
+ @if ($country->is_active) + Active@elseInactive + @endif + Open + Edit +
No countries matched your search.
No countries + matched your search.
diff --git a/Modules/Countries/Resources/views/layouts/master.blade.php b/Modules/Countries/Resources/views/layouts/master.blade.php index 2a88f21b..e51cc738 100644 --- a/Modules/Countries/Resources/views/layouts/master.blade.php +++ b/Modules/Countries/Resources/views/layouts/master.blade.php @@ -1,20 +1,24 @@ - - - - - Module Countries - {{-- Laravel Mix - CSS File --}} - {{-- --}} + + + + + Module Countries - - - - @yield('content') + {{-- Laravel Mix - CSS File --}} + {{-- --}} + + + + + + @yield('content') + + {{-- Laravel Mix - JS File --}} + {{-- --}} + - {{-- Laravel Mix - JS File --}} - {{-- --}} - diff --git a/Modules/Countries/Resources/views/show.blade.php b/Modules/Countries/Resources/views/show.blade.php index 01fc3f06..3cf1b791 100644 --- a/Modules/Countries/Resources/views/show.blade.php +++ b/Modules/Countries/Resources/views/show.blade.php @@ -1,23 +1,31 @@
-
+

ISO 3166 country

-

{{ $country->flag_emoji }} {{ $country->effective_name }}

-

{{ $country->official_name ?: $country->name }}

+

{{ $country->flag_emoji }} + {{ $country->effective_name }}

+

+ {{ $country->official_name ?: $country->name }}

@if (session('success')) -
{{ session('success') }}
+
+ {{ session('success') }}
@endif @php @@ -31,7 +39,9 @@ 'Display override' => $country->display_name ?: '—', 'Native name' => $country->native_name ?: '—', 'Capital' => $country->capital ?: '—', - 'ISO status' => str($country->iso_status ?? 'official')->replace('_', ' ')->title(), + 'ISO status' => str($country->iso_status ?? 'official') + ->replace('_', ' ') + ->title(), 'Sovereignty status' => $country->sovereignty_status ?: '—', 'Independent' => is_null($country->independent) ? '—' : ($country->independent ? 'Yes' : 'No'), 'UN member' => is_null($country->un_member) ? '—' : ($country->un_member ? 'Yes' : 'No'), @@ -59,16 +69,19 @@
@foreach ($fields as $label => $value) -
+
{{ $label }}
-
{{ $value }}
+
+ {{ $value }}
@endforeach
@foreach (['Languages' => $country->languages, 'Timezones' => $country->timezones, 'Metadata' => $country->metadata] as $label => $value) -
+

{{ $label }}

{{ $value ? json_encode($value, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) : '—' }}
@@ -77,11 +90,14 @@ @if ($country->address_format || $country->flag_svg_url || $country->flag_png_url)
-
+

Address format

-
{{ $country->address_format ?: '—' }}
+
{{ $country->address_format ?: '—' }}
-
+

Flag assets

SVG: {{ $country->flag_svg_url ?: '—' }}
@@ -92,38 +108,51 @@ @endif -
+

WMS usage report

-

Best-effort counts across known WMS tables. Missing optional tables are skipped safely.

+

Best-effort counts across known WMS tables. Missing optional tables are + skipped safely.

- - - - + + + + @forelse ($usageRows ?? [] as $row) - + - - + + @empty - + + + @endforelse
AreaTableColumnReferencesArea + + Table + Column + References
{{ $row['label'] }} + {{ $row['label'] }} {{ $row['table'] }}{{ $row['column'] }}{{ number_format($row['count']) }} + {{ $row['column'] }} + {{ number_format($row['count']) }}
No country-aware WMS usage tables were detected yet.
No country-aware + WMS usage tables were detected yet.
-
+

ISO 3166-2 subdivisions

Subdivisions support address, compliance and shipping workflows.

@@ -132,37 +161,51 @@ - - - - + + + + @forelse ($country->subdivisions as $subdivision) - - + + - + @empty - + + + @endforelse
CodeNameTypeStatusCode + Name + Type + + Status
{{ $subdivision->code }}{{ $subdivision->name }} + {{ $subdivision->code }} + {{ $subdivision->name }} {{ $subdivision->type ?: '—' }}{{ str($subdivision->iso_status)->replace('_', ' ')->title() }} + {{ str($subdivision->iso_status)->replace('_', ' ')->title() }}
No subdivisions have been imported for this country yet.
No subdivisions + have been imported for this country yet.
-
+ @csrf @method('DELETE')

Archive country

-

Soft-deletes the record for administration. Do not archive countries referenced by active business data.

+

Soft-deletes the record for administration. Do not + archive countries referenced by active business data.

- +
diff --git a/Modules/DocumentArchive/Resources/views/index.blade.php b/Modules/DocumentArchive/Resources/views/index.blade.php index 7004f9a5..a2776ead 100644 --- a/Modules/DocumentArchive/Resources/views/index.blade.php +++ b/Modules/DocumentArchive/Resources/views/index.blade.php @@ -1,51 +1,48 @@ -
+
- + icon="fa-solid fa-file-lines" />
-
-
-
-
01
-

Sentinel Doc Archive

-

Placeholder area for sentinel doc archive.

-
-
+
+
+
+
01
+

Sentinel Doc Archive

+

Placeholder area for sentinel doc archive.

-
-
-
-
02
-

Shipment PDFs

-

Placeholder area for shipment pdfs.

-
-
+
+
+
+
+
+
02
+

Shipment PDFs

+

Placeholder area for shipment pdfs.

-
-
-
-
03
-

Bill of Lading

-

Placeholder area for bill of lading.

-
-
+
+
+
+
+
+
03
+

Bill of Lading

+

Placeholder area for bill of lading.

-
-
-
-
04
-

Document Search

-

Placeholder area for document search.

-
-
+
+
+
+
+
+
04
+

Document Search

+

Placeholder area for document search.

+
+
@@ -53,7 +50,8 @@

Document Archive workbench

-

Sample table layout ready to wire into controllers, queries, DataTables, or Livewire.

+

Sample table layout ready to wire into controllers, + queries, DataTables, or Livewire.

@@ -78,26 +76,38 @@ Sentinel Doc Archive Sample 1 - Active - Open + Active + + Open Shipment PDFs Sample 2 - Active - Open + Active + + Open Bill of Lading Sample 3 - Active - Open + Active + + Open Document Search Sample 4 - Active - Open + Active + + Open diff --git a/Modules/Documentation/Resources/views/categories/create.blade.php b/Modules/Documentation/Resources/views/categories/create.blade.php index b44fbe50..663adc0e 100644 --- a/Modules/Documentation/Resources/views/categories/create.blade.php +++ b/Modules/Documentation/Resources/views/categories/create.blade.php @@ -4,17 +4,17 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => 'Create category', - 'subtitle' => 'Add a professional grouping for documents and operational knowledge.', - ]) -
-
Category details
-
-
- @include('documentation::partials.category-form') -
-
-
+ @include('documentation::partials.hero', [ + 'title' => 'Create category', + 'subtitle' => 'Add a professional grouping for documents and operational knowledge.', + ]) +
+
Category details
+
+
+ @include('documentation::partials.category-form') +
+
+
@endsection diff --git a/Modules/Documentation/Resources/views/categories/edit.blade.php b/Modules/Documentation/Resources/views/categories/edit.blade.php index 8c7825b7..944f9ec9 100644 --- a/Modules/Documentation/Resources/views/categories/edit.blade.php +++ b/Modules/Documentation/Resources/views/categories/edit.blade.php @@ -4,17 +4,17 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => 'Edit category', - 'subtitle' => 'Update category naming, ordering, visibility, and presentation metadata.', - ]) -
-
{{ $category->name }}
-
-
- @include('documentation::partials.category-form') -
-
-
+ @include('documentation::partials.hero', [ + 'title' => 'Edit category', + 'subtitle' => 'Update category naming, ordering, visibility, and presentation metadata.', + ]) +
+
{{ $category->name }}
+
+
+ @include('documentation::partials.category-form') +
+
+
@endsection diff --git a/Modules/Documentation/Resources/views/categories/index.blade.php b/Modules/Documentation/Resources/views/categories/index.blade.php index bc9e3e05..9bb1f7d8 100644 --- a/Modules/Documentation/Resources/views/categories/index.blade.php +++ b/Modules/Documentation/Resources/views/categories/index.blade.php @@ -4,56 +4,68 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => 'Document categories', - 'subtitle' => 'Organise documents by policy, process, onboarding, operational support, or technical area.', - ]) + @include('documentation::partials.hero', [ + 'title' => 'Document categories', + 'subtitle' => + 'Organise documents by policy, process, onboarding, operational support, or technical area.', + ]) - @if(session('status')) -
{{ session('status') }}
- @endif + @if (session('status')) +
{{ session('status') }}
+ @endif -
-
- Categories - New category -
-
- - - - - - - - - - - - - @forelse($categories as $category) +
+
+ Categories + New category +
+
+
NameDescriptionDocumentsOrderStatus
+ - - - - - - + + + + + + - @empty - - @endforelse - -
{{ $category->name }}
{{ $category->slug }}
{{ $category->description ?: 'No description' }}{{ $category->documents_count }}{{ $category->sort_order }}{{ $category->is_active ? 'Active' : 'Inactive' }} - Edit -
- @csrf - @method('DELETE') - -
-
NameDescriptionDocumentsOrderStatus
No categories found.
-
{{ $categories->links() }}
-
-
+ + + @forelse($categories as $category) + + {{ $category->name }} +
{{ $category->slug }}
+ + {{ $category->description ?: 'No description' }} + {{ $category->documents_count }} + {{ $category->sort_order }} + {{ $category->is_active ? 'Active' : 'Inactive' }} + + + Edit +
+ @csrf + @method('DELETE') + +
+ + + @empty + + No categories found. + + @endforelse + + +
{{ $categories->links() }}
+
+
@endsection diff --git a/Modules/Documentation/Resources/views/documents/create.blade.php b/Modules/Documentation/Resources/views/documents/create.blade.php index ec88891f..a285e93c 100644 --- a/Modules/Documentation/Resources/views/documents/create.blade.php +++ b/Modules/Documentation/Resources/views/documents/create.blade.php @@ -4,17 +4,17 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => 'Create document', - 'subtitle' => 'Add a controlled document, guide, policy, SOP, upload, or operational note.', - ]) -
-
Document details
-
-
- @include('documentation::partials.document-form') -
-
-
+ @include('documentation::partials.hero', [ + 'title' => 'Create document', + 'subtitle' => 'Add a controlled document, guide, policy, SOP, upload, or operational note.', + ]) +
+
Document details
+
+
+ @include('documentation::partials.document-form') +
+
+
@endsection diff --git a/Modules/Documentation/Resources/views/documents/edit.blade.php b/Modules/Documentation/Resources/views/documents/edit.blade.php index edc8b528..d706f588 100644 --- a/Modules/Documentation/Resources/views/documents/edit.blade.php +++ b/Modules/Documentation/Resources/views/documents/edit.blade.php @@ -4,24 +4,27 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => 'Edit document', - 'subtitle' => 'Maintain document metadata, workflow status, version and attachment details.', - ]) -
-
{{ $document->title }}
-
-
- @include('documentation::partials.document-form') -
-
-
+ @include('documentation::partials.hero', [ + 'title' => 'Edit document', + 'subtitle' => 'Maintain document metadata, workflow status, version and attachment details.', + ]) +
+
{{ $document->title }}
+
+
+ @include('documentation::partials.document-form') +
+
+
- @foreach($document->attachments as $attachment) -
- @csrf - @method('DELETE') -
- @endforeach + @foreach ($document->attachments as $attachment) +
+ @csrf + @method('DELETE') +
+ @endforeach
@endsection diff --git a/Modules/Documentation/Resources/views/documents/index.blade.php b/Modules/Documentation/Resources/views/documents/index.blade.php index c6738b19..b914aa8d 100644 --- a/Modules/Documentation/Resources/views/documents/index.blade.php +++ b/Modules/Documentation/Resources/views/documents/index.blade.php @@ -4,91 +4,102 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => 'Documentation Centre', - 'subtitle' => 'Create, control, publish, and archive operational documents from a clean professional register.', - ]) + @include('documentation::partials.hero', [ + 'title' => 'Documentation Centre', + 'subtitle' => + 'Create, control, publish, and archive operational documents from a clean professional register.', + ]) - @if(session('status')) -
{{ session('status') }}
- @endif + @if (session('status')) +
{{ session('status') }}
+ @endif -
-
{{ $stats['total'] }}Total documents
-
{{ $stats['published'] }}Published
-
{{ $stats['drafts'] }}Drafts
-
{{ $stats['categories'] }}Categories
-
+
+
{{ $stats['total'] }}Total documents
+
{{ $stats['published'] }}Published
+
{{ $stats['drafts'] }}Drafts
+
{{ $stats['categories'] }}Categories
+
- @if($featuredDocuments->isNotEmpty()) -
-
Featured documents
-
- @foreach($featuredDocuments as $featured) - - {{ ucfirst($featured->status) }} -

{{ $featured->title }}

-

{{ $featured->summary ?: 'No summary provided.' }}

-
- @endforeach + @if ($featuredDocuments->isNotEmpty()) +
+
Featured documents
+ +
+ @endif + +
+
+ Document register + New document +
+
+
+ + + + +
+ + + + + + + + + + + + + + @forelse($documents as $document) + + + + + + + + + @empty + + + + @endforelse + +
DocumentCategoryStatusVersionUpdated
+ {{ $document->title }} +
{{ $document->reference ?: 'No reference' }} · + {{ $document->summary ?: 'No summary' }}
+
{{ $document->category?->name ?: 'Uncategorised' }}{{ ucfirst($document->status) }} + {{ $document->version }}{{ $document->updated_at?->format('d M Y H:i') }}Edit
No documents found.
+
{{ $documents->links() }}
- @endif - -
-
- Document register - New document -
-
-
- - - - -
- - - - - - - - - - - - - - @forelse($documents as $document) - - - - - - - - - @empty - - @endforelse - -
DocumentCategoryStatusVersionUpdated
- {{ $document->title }} -
{{ $document->reference ?: 'No reference' }} · {{ $document->summary ?: 'No summary' }}
-
{{ $document->category?->name ?: 'Uncategorised' }}{{ ucfirst($document->status) }}{{ $document->version }}{{ $document->updated_at?->format('d M Y H:i') }}Edit
No documents found.
-
{{ $documents->links() }}
-
-
@endsection diff --git a/Modules/Documentation/Resources/views/documents/show.blade.php b/Modules/Documentation/Resources/views/documents/show.blade.php index 0419c493..7153e0e0 100644 --- a/Modules/Documentation/Resources/views/documents/show.blade.php +++ b/Modules/Documentation/Resources/views/documents/show.blade.php @@ -4,52 +4,67 @@ @section('content')
- @include('documentation::partials.hero', [ - 'title' => $document->title, - 'subtitle' => $document->summary ?: 'Controlled documentation record with versioning, attachments and Markdown rendering.', - 'actions' => [ - ['label' => 'Edit document', 'url' => route('documentation.documents.edit', $document), 'class' => 'primary'], - ['label' => 'Back to documents', 'url' => route('documentation.documents.index'), 'class' => 'secondary'], - ], - ]) + @include('documentation::partials.hero', [ + 'title' => $document->title, + 'subtitle' => + $document->summary ?: + 'Controlled documentation record with versioning, attachments and Markdown rendering.', + 'actions' => [ + [ + 'label' => 'Edit document', + 'url' => route('documentation.documents.edit', $document), + 'class' => 'primary', + ], + [ + 'label' => 'Back to documents', + 'url' => route('documentation.documents.index'), + 'class' => 'secondary', + ], + ], + ]) -
-
-
- {{ $document->reference ?: 'Document' }} -
Version {{ $document->version }} @if($document->category) · {{ $document->category->name }} @endif
-
- {{ ucfirst($document->status) }} -
-
-
{!! $document->rendered_body !!}
-
-
- - @if($document->attachment_name || $document->attachments->isNotEmpty()) -
-
Attachments
-
-
- @if($document->attachment_name) -
- -
- @endif - @foreach($document->attachments as $attachment) -
-
- {{ $attachment->original_name }} - {{ $attachment->size_label }} -
-
- @endforeach +
+
+
+ {{ $document->reference ?: 'Document' }} +
Version {{ $document->version }} @if ($document->category) + · {{ $document->category->name }} + @endif +
+ {{ ucfirst($document->status) }} +
+
+
{!! $document->rendered_body !!}
- @endif + + @if ($document->attachment_name || $document->attachments->isNotEmpty()) +
+
Attachments
+
+
+ @if ($document->attachment_name) +
+ +
+ @endif + @foreach ($document->attachments as $attachment) +
+
+ {{ $attachment->original_name }} + {{ $attachment->size_label }} +
+
+ @endforeach +
+
+
+ @endif
@endsection diff --git a/Modules/Documentation/Resources/views/layouts/master.blade.php b/Modules/Documentation/Resources/views/layouts/master.blade.php index 830f5936..ca1af187 100644 --- a/Modules/Documentation/Resources/views/layouts/master.blade.php +++ b/Modules/Documentation/Resources/views/layouts/master.blade.php @@ -1,564 +1,629 @@
@@ -566,31 +631,29 @@
diff --git a/Modules/Documentation/Resources/views/partials/category-form.blade.php b/Modules/Documentation/Resources/views/partials/category-form.blade.php index c4bde08a..35c41565 100644 --- a/Modules/Documentation/Resources/views/partials/category-form.blade.php +++ b/Modules/Documentation/Resources/views/partials/category-form.blade.php @@ -1,40 +1,58 @@ @csrf -@if($category->exists) +@if ($category->exists) @method('PUT') @endif
- - @error('name')
{{ $message }}
@enderror + + @error('name') +
{{ $message }}
+ @enderror
- - @error('slug')
{{ $message }}
@enderror + + @error('slug') +
{{ $message }}
+ @enderror
- - @error('icon')
{{ $message }}
@enderror + + @error('icon') +
{{ $message }}
+ @enderror
- - @error('colour')
{{ $message }}
@enderror + + @error('colour') +
{{ $message }}
+ @enderror
- - @error('sort_order')
{{ $message }}
@enderror + + @error('sort_order') +
{{ $message }}
+ @enderror
- +
- @error('description')
{{ $message }}
@enderror + @error('description') +
{{ $message }}
+ @enderror
diff --git a/Modules/Documentation/Resources/views/partials/document-form.blade.php b/Modules/Documentation/Resources/views/partials/document-form.blade.php index 32e6adca..1165596d 100644 --- a/Modules/Documentation/Resources/views/partials/document-form.blade.php +++ b/Modules/Documentation/Resources/views/partials/document-form.blade.php @@ -1,52 +1,71 @@ @csrf -@if($document->exists) +@if ($document->exists) @method('PUT') @endif
- - @error('title')
{{ $message }}
@enderror + + @error('title') +
{{ $message }}
+ @enderror
- - @error('slug')
{{ $message }}
@enderror + + @error('slug') +
{{ $message }}
+ @enderror
- @error('documentation_category_id')
{{ $message }}
@enderror + @error('documentation_category_id') +
{{ $message }}
+ @enderror
- @error('status')
{{ $message }}
@enderror + @error('status') +
{{ $message }}
+ @enderror
- - @error('version')
{{ $message }}
@enderror + + @error('version') +
{{ $message }}
+ @enderror
- - @error('reference')
{{ $message }}
@enderror + + @error('reference') +
{{ $message }}
+ @enderror
- - @error('summary')
{{ $message }}
@enderror + + @error('summary') +
{{ $message }}
+ @enderror
@@ -60,47 +79,66 @@ - - + +
-

Markdown is supported, including fenced code blocks such as ```php, tables, lists, links, and headings.

+

Markdown is supported, including fenced code blocks such as + ```php, tables, lists, links, and headings. +

- @error('body')
{{ $message }}
@enderror + @error('body') +
{{ $message }}
+ @enderror

Primary Markdown files can be imported into the document body when the body is blank.

- @if($document->attachment_name) -

Current primary file: {{ $document->attachment_name }}

- + @if ($document->attachment_name) +

Current primary file: {{ $document->attachment_name }} +

+ @endif - @error('attachment')
{{ $message }}
@enderror + @error('attachment') +
{{ $message }}
+ @enderror
-

Attach supporting files such as PDFs, screenshots, spreadsheets, Word documents, Markdown, CSV, and images.

- @error('attachments')
{{ $message }}
@enderror - @error('attachments.*')
{{ $message }}
@enderror +

Attach supporting files such as PDFs, screenshots, spreadsheets, Word documents, Markdown, + CSV, and images.

+ @error('attachments') +
{{ $message }}
+ @enderror + @error('attachments.*') +
{{ $message }}
+ @enderror - @if($document->exists && $document->attachments->isNotEmpty()) + @if ($document->exists && $document->attachments->isNotEmpty())
- @foreach($document->attachments as $attachment) + @foreach ($document->attachments as $attachment)
- +
@endforeach
@endif
- +
diff --git a/Modules/Documentation/Resources/views/partials/hero.blade.php b/Modules/Documentation/Resources/views/partials/hero.blade.php index 2f5b6d93..8dbf8853 100644 --- a/Modules/Documentation/Resources/views/partials/hero.blade.php +++ b/Modules/Documentation/Resources/views/partials/hero.blade.php @@ -4,13 +4,17 @@

{{ $eyebrow ?? 'Documentation workflow' }}

{{ $title ?? 'Documentation' }}

-

{{ $subtitle ?? 'Manage controlled documents, policies, guides, files, and operational knowledge in one professional workspace.' }}

+

{{ $subtitle ?? 'Manage controlled documents, policies, guides, files, and operational knowledge in one professional workspace.' }} +

diff --git a/Modules/Helpdesk/Resources/views/components/date-picker.blade.php b/Modules/Helpdesk/Resources/views/components/date-picker.blade.php index f514c6ed..523076a7 100644 --- a/Modules/Helpdesk/Resources/views/components/date-picker.blade.php +++ b/Modules/Helpdesk/Resources/views/components/date-picker.blade.php @@ -1,10 +1,4 @@ -@props([ - 'id', - 'model', - 'label' => null, - 'required' => false, - 'placeholder' => 'Select date', -]) +@props(['id', 'model', 'label' => null, 'required' => false, 'placeholder' => 'Select date'])
@if ($label) @@ -17,17 +11,11 @@ @endif
- except('value')->merge([ - 'class' => 'block w-full rounded-xl border border-zinc-700 bg-zinc-950 px-4 py-3 text-sm text-zinc-100 shadow-sm outline-none transition-colors duration-150 placeholder:text-zinc-500 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/40', - ]) }} - /> + 'class' => + 'block w-full rounded-xl border border-zinc-700 bg-zinc-950 px-4 py-3 text-sm text-zinc-100 shadow-sm outline-none transition-colors duration-150 placeholder:text-zinc-500 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/40', + ]) }} />
diff --git a/Modules/Helpdesk/Resources/views/components/html-editor.blade.php b/Modules/Helpdesk/Resources/views/components/html-editor.blade.php index 2abe3736..1ffc21c3 100644 --- a/Modules/Helpdesk/Resources/views/components/html-editor.blade.php +++ b/Modules/Helpdesk/Resources/views/components/html-editor.blade.php @@ -10,12 +10,10 @@ $initialValue = $model ? data_get($this, $model, '') : ''; @endphp -
whereDoesntStartWith('wire:model')->merge(['class' => 'space-y-2']) }} - @if($model) data-helpdesk-editor-model="{{ $model }}" @endif +
whereDoesntStartWith('wire:model')->merge(['class' => 'space-y-2']) }} + @if ($model) data-helpdesk-editor-model="{{ $model }}" @endif x-on:helpdesk-editor-reset.window="if ($event.detail.model === model) clear()" - x-on:helpdesk-editor-sync.window="if ($event.detail.model === model) sync()" - x-data="{ + x-on:helpdesk-editor-sync.window="if ($event.detail.model === model) sync()" x-data="{ model: @js($model), value: @js($initialValue), sync() { @@ -39,39 +37,41 @@ init() { this.$refs.editor.innerHTML = this.value || ''; } - }" -> + }"> - @if($model) + @if ($model) @endif -
+
- - - - - - - - + + + + + + + +
-
+ data-placeholder="{{ $placeholder }}">
- @if($model) + @if ($model) @error($model)
{{ $message }}
@enderror diff --git a/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php b/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php index d547eeb1..b46647c5 100644 --- a/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/lookup-table.blade.php @@ -1,6 +1,7 @@
- + @@ -15,22 +16,28 @@ - + @empty - + + + @endforelse
Name Slug
{{ $item->name }} {{ $item->slug }}{{ $item->color }} - - {{ ($item->is_default ?? false) ? 'Default' : 'No' }} + {{ $item->color }} + + + {{ $item->is_default ?? false ? 'Default' : 'No' }} {{ $item->tickets_count ?? 0 }}
- - + +
No records yet.
No records yet.
diff --git a/Modules/Helpdesk/Resources/views/components/project-table.blade.php b/Modules/Helpdesk/Resources/views/components/project-table.blade.php index a51487d5..b4d2d896 100644 --- a/Modules/Helpdesk/Resources/views/components/project-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/project-table.blade.php @@ -1,7 +1,15 @@
- - + + + + + + + + + @forelse ($items as $item) @@ -9,12 +17,23 @@ - + - + @empty - + + + @endforelse
ProjectCompanyTeamDefaultTicketsActions
ProjectCompanyTeamDefaultTicketsActions
{{ $item->title }} {{ $item->company?->name ?? 'Global' }} {{ $item->team?->name ?? 'No team' }}{{ ($item->is_default ?? false) ? 'Default' : 'No' }} + + {{ $item->is_default ?? false ? 'Default' : 'No' }} + {{ $item->tickets_count ?? 0 }}
+
+
No projects yet.
No projects yet.
diff --git a/Modules/Helpdesk/Resources/views/components/repository-table.blade.php b/Modules/Helpdesk/Resources/views/components/repository-table.blade.php index efd1ba5c..875bea96 100644 --- a/Modules/Helpdesk/Resources/views/components/repository-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/repository-table.blade.php @@ -1,7 +1,14 @@
- - + + + + + + + + @forelse ($items as $item) @@ -10,10 +17,19 @@ - + @empty - + + + @endforelse
NameProviderProjectCommitsActions
NameProviderProjectCommitsActions
{{ strtoupper($item->provider) }} {{ $item->project?->title ?? 'No project' }} {{ $item->commits_count ?? 0 }}
+
+
No repositories yet.
No repositories yet.
diff --git a/Modules/Helpdesk/Resources/views/components/settings-section.blade.php b/Modules/Helpdesk/Resources/views/components/settings-section.blade.php index 05892b6e..752f6f2c 100644 --- a/Modules/Helpdesk/Resources/views/components/settings-section.blade.php +++ b/Modules/Helpdesk/Resources/views/components/settings-section.blade.php @@ -1,4 +1,5 @@ -
+

{{ $title }}

{{ $description }}

diff --git a/Modules/Helpdesk/Resources/views/components/team-table.blade.php b/Modules/Helpdesk/Resources/views/components/team-table.blade.php index 65d1bdb8..7f43abce 100644 --- a/Modules/Helpdesk/Resources/views/components/team-table.blade.php +++ b/Modules/Helpdesk/Resources/views/components/team-table.blade.php @@ -1,19 +1,37 @@
- - + + + + + + + + @forelse ($items as $item) - + - + @empty - + + + @endforelse
TeamCompanyDefaultTicketsActions
TeamCompanyDefaultTicketsActions
{{ $item->name }} {{ $item->company?->name ?? 'Global' }}{{ ($item->is_default ?? false) ? 'Default' : 'No' }} + + {{ $item->is_default ?? false ? 'Default' : 'No' }} + {{ $item->tickets_count ?? 0 }}
+
+
No teams yet.
No teams yet.
diff --git a/Modules/Helpdesk/Resources/views/index.blade.php b/Modules/Helpdesk/Resources/views/index.blade.php index 85d49a16..e43990eb 100644 --- a/Modules/Helpdesk/Resources/views/index.blade.php +++ b/Modules/Helpdesk/Resources/views/index.blade.php @@ -1,184 +1,225 @@ + + .hd-helpdesk-surface .hd-btn-blue:hover, + .hd-btn-blue:hover { + background: #1d4ed8 !important; + } -
-
-
-
-
-

Support operations

-

Helpdesk dashboard

-

Track open workload, closed tickets, response performance, project activity, priorities, Git commits and workflow communication from one professional support workspace.

- + .hd-helpdesk-surface .hd-btn-green, + .hd-btn-green { + background: #16a34a !important; + } + + .hd-helpdesk-surface .hd-btn-green:hover, + .hd-btn-green:hover { + background: #15803d !important; + } + + .hd-helpdesk-surface .hd-btn-amber, + .hd-btn-amber { + background: #f59e0b !important; + } + + .hd-helpdesk-surface .hd-btn-amber:hover, + .hd-btn-amber:hover { + background: #d97706 !important; + } + + .hd-helpdesk-surface .hd-btn-red, + .hd-btn-red { + background: #dc2626 !important; + } + + .hd-helpdesk-surface .hd-btn-red:hover, + .hd-btn-red:hover { + background: #b91c1c !important; + } + + .hd-helpdesk-surface .hd-btn-violet, + .hd-btn-violet { + background: #7c3aed !important; + } + + .hd-helpdesk-surface .hd-btn-violet:hover, + .hd-btn-violet:hover { + background: #6d28d9 !important; + } + + .hd-helpdesk-surface button[type="submit"], + .hd-helpdesk-surface button[data-flux-button][type="submit"] { + background: #16a34a !important; + color: #ffffff !important; + border-color: rgba(255, 255, 255, .14) !important; + } + + .hd-helpdesk-surface button[wire\:click^="reset"], + .hd-helpdesk-surface button[wire\:target^="reset"] { + background: #f59e0b !important; + color: #ffffff !important; + border-color: rgba(255, 255, 255, .14) !important; + } + + .hd-helpdesk-surface button[wire\:click^="edit"], + .hd-helpdesk-surface button[wire\:target^="edit"] { + background: #2563eb !important; + color: #ffffff !important; + border-color: rgba(255, 255, 255, .14) !important; + } + + .hd-helpdesk-surface button[wire\:click^="delete"], + .hd-helpdesk-surface button[wire\:target^="delete"] { + background: #dc2626 !important; + color: #ffffff !important; + border-color: rgba(255, 255, 255, .14) !important; + } + + .hd-select { + width: 100%; + min-height: 3.35rem; + border-radius: 1rem; + border: 1px solid #3f3f46 !important; + background: #09090b !important; + color: #f4f4f5 !important; + padding: .78rem 3rem .78rem 1rem; + font-weight: 800; + outline: none; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .05), 0 12px 26px rgba(0, 0, 0, .24); + } + + .hd-select:focus { + border-color: #60a5fa !important; + box-shadow: 0 0 0 3px rgba(96, 165, 250, .38), inset 0 1px 0 rgba(255, 255, 255, .05); + } + + .helpdesk-ticket-form, + .helpdesk-ticket-form * { + -webkit-tap-highlight-color: transparent; + } + + .helpdesk-ticket-form input, + .helpdesk-ticket-form textarea, + .helpdesk-ticket-form select, + .helpdesk-ticket-form .select2-container--default .select2-selection--single, + .helpdesk-ticket-form .select2-container--default .select2-selection--multiple, + .helpdesk-ticket-form .select2-container--default .select2-selection__rendered, + .helpdesk-ticket-form .select2-container--default .select2-selection__choice { + background: #09090b !important; + background-color: #09090b !important; + color: #f4f4f5 !important; + border-color: #3f3f46 !important; + caret-color: #f4f4f5 !important; + opacity: 1 !important; + } + + .helpdesk-ticket-form input:disabled, + .helpdesk-ticket-form textarea:disabled, + .helpdesk-ticket-form select:disabled, + .helpdesk-ticket-form .select2-container--disabled .select2-selection--single, + .helpdesk-ticket-form .select2-container--disabled .select2-selection--multiple, + .helpdesk-ticket-form [disabled], + .helpdesk-ticket-form [aria-disabled="true"] { + background: #09090b !important; + background-color: #09090b !important; + color: #a1a1aa !important; + opacity: 1 !important; + } + + .helpdesk-ticket-form input:-webkit-autofill, + .helpdesk-ticket-form input:-webkit-autofill:hover, + .helpdesk-ticket-form input:-webkit-autofill:focus, + .helpdesk-ticket-form textarea:-webkit-autofill, + .helpdesk-ticket-form textarea:-webkit-autofill:hover, + .helpdesk-ticket-form textarea:-webkit-autofill:focus, + .helpdesk-ticket-form select:-webkit-autofill, + .helpdesk-ticket-form select:-webkit-autofill:hover, + .helpdesk-ticket-form select:-webkit-autofill:focus { + -webkit-text-fill-color: #f4f4f5 !important; + box-shadow: 0 0 0 1000px #09090b inset !important; + transition: background-color 9999s ease-in-out 0s; + } + + +
+
+
+
+
+

Support operations

+

Helpdesk dashboard

+

Track open workload, closed tickets, + response performance, project activity, priorities, Git commits and workflow communication from + one professional support workspace.

+ +
-
-
- @foreach (range(1, 9) as $cell) -
- @endforeach -
-
-
-
-
-
+
+
+ @foreach (range(1, 9) as $cell) +
+ @endforeach +
+
+
+
+
- -
+ + +
diff --git a/Modules/Helpdesk/Resources/views/layouts/app/sidebar.blade.php b/Modules/Helpdesk/Resources/views/layouts/app/sidebar.blade.php index dfc369b9..b3012602 100644 --- a/Modules/Helpdesk/Resources/views/layouts/app/sidebar.blade.php +++ b/Modules/Helpdesk/Resources/views/layouts/app/sidebar.blade.php @@ -3,7 +3,7 @@ @include('partials.head') - - -
- + .wms-sidebar-group[data-wms-menu-open="true"]>.wms-sidebar-group-items { + display: block; + } - -
- ("layouts.partials.topbar") + @php + $helpdeskEnabled = Route::has('helpdesk.index') || Route::has('helpdesk.tickets.index'); -
- {{ $slot }} -
+ $helpdeskSettingsRoute = Route::has('helpdesk.settings') + ? 'helpdesk.settings' + : (Route::has('helpdesk.settings.index') + ? 'helpdesk.settings.index' + : null); + + $helpdeskGitRoute = Route::has('helpdesk.git.index') ? 'helpdesk.git.index' : null; + + $helpdeskWorkflowRoute = Route::has('helpdesk.workflow-templates.index') + ? 'helpdesk.workflow-templates.index' + : null; + + $documentationEnabled = + Route::has('documentation.index') || Route::has('documentation.documents.index'); + + $documentationRoute = Route::has('documentation.index') + ? 'documentation.index' + : (Route::has('documentation.documents.index') + ? 'documentation.documents.index' + : null); + @endphp + + @if ($helpdeskEnabled || $documentationEnabled) +
+ + +
+ @if (Route::has('helpdesk.index')) + + + {{ __('Dashboard') }} + + @endif + + @if ($helpdeskGitRoute) + + + {{ __('Git Tracking') }} + + @endif + + @if ($helpdeskWorkflowRoute) + + + {{ __('Workflow Emails') }} + + @endif + + @if ($documentationRoute) + + + {{ __('Documentation') }} + + @endif + + @if ($helpdeskSettingsRoute) + + + {{ __('Settings') }} + + @endif +
+
+ @endif + +
+ + +
+ @if (Route::has('m3-integration.index')) + + + {{ __('M3 Integration') }} + + @endif + + @if (Route::has('sentinel-integration.index')) + + + {{ __('Sentinel') }} + + @endif + + @if (Route::has('document-archive.index')) + + + {{ __('Documents') }} + + @endif + + @if (Route::has('reporting.index')) + + + {{ __('Reporting') }} + + @endif +
+
+ +
+ + +
+ @if (Route::has('warehouses.index')) + + + {{ __('Warehouses') }} + + @endif + + @if (Route::has('warehouse-rules.index')) + + + {{ __('Validation Rules') }} + + @endif + + @if (auth()->user()?->isMpbaPlatformAdmin() && Route::has('platform.prices.index')) + + + {{ __('Prices') }} + + @endif + + @if (Route::has('configuration.index')) + + + {{ __('Configuration') }} + + @endif + + @if (Route::has('security.index')) + + + {{ __('Security') }} + + @endif + + @if (Route::has('audit.index')) + + + {{ __('Audit') }} + + @endif +
+
+ + @if (auth()->user()?->isMpbaPlatformAdmin()) +
+ + +
+ @if (Route::has('platform.companies.index')) + + + {{ __('Companies') }} + + @endif + + @if (Route::has('platform.licenses.index')) + + + {{ __('Licences') }} + + @endif + + @if (Route::has('platform.payments.index')) + + + {{ __('Payments') }} + + @endif + + @if (Route::has('countries.index')) + + + {{ __('Countries') }} + + @endif +
+
+ @endif + + + + +
+ ("layouts.partials.topbar") + +
+ {{ $slot }} +
+
-
-
+
- - -@livewireScripts -@fluxScripts - - - document.querySelectorAll('[data-wms-sidebar-toggle]').forEach((button) => { - if (button.dataset.wmsBound === '1') { - return; - } + @livewireScripts + @fluxScripts - button.dataset.wmsBound = '1'; + + document.body.classList.toggle('wms-mobile-nav-open', isOpen); + } + + function closeMobileSidebar() { + document.documentElement.dataset.wmsMobileSidebar = 'closed'; + setMobileToggleState(false); + } + + function openMobileSidebar() { + document.documentElement.dataset.wmsMobileSidebar = 'open'; + setMobileToggleState(true); + } + + function toggleMobileSidebar() { + if (document.documentElement.dataset.wmsMobileSidebar === 'open') { + closeMobileSidebar(); + return; + } + + openMobileSidebar(); + } + + function bindSidebarControls() { + applySidebarWidth(); + applySidebarState(); + applyMenuState(); + bindMenuControls(); + bindSidebarResize(); + + document.querySelectorAll('[data-wms-sidebar-toggle]').forEach((button) => { + if (button.dataset.wmsBound === '1') { + return; + } + + button.dataset.wmsBound = '1'; + + button.addEventListener('click', function() { + const root = document.documentElement; + const next = root.dataset.wmsSidebar === 'collapsed' ? 'expanded' : 'collapsed'; + + root.dataset.wmsSidebar = next; + localStorage.setItem(SIDEBAR_STATE_KEY, next); + + applySidebarState(); + }); + }); + + document.querySelectorAll('[data-wms-brand-toggle]').forEach((button) => { + if (button.dataset.wmsBound === '1') { + return; + } + + button.dataset.wmsBound = '1'; + + button.addEventListener('click', function(event) { + const root = document.documentElement; + + if (root.dataset.wmsSidebar !== 'collapsed') { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + root.dataset.wmsSidebar = 'expanded'; + localStorage.setItem(SIDEBAR_STATE_KEY, 'expanded'); + + applySidebarState(); + applyMenuState(); + }); + }); + + closeMobileSidebar(); + + document.querySelectorAll('[data-wms-mobile-open]').forEach((button) => { + if (button.dataset.wmsBound === '1') { + return; + } + + button.dataset.wmsBound = '1'; + + button.addEventListener('click', function(event) { + event.preventDefault(); + toggleMobileSidebar(); + }); + }); + + document.querySelectorAll('[data-wms-mobile-close]').forEach((button) => { + if (button.dataset.wmsBound === '1') { + return; + } + + button.dataset.wmsBound = '1'; + button.addEventListener('click', closeMobileSidebar); + }); + + document.querySelectorAll('.wms-sidebar-link[wire\\:navigate]').forEach((link) => { + if (link.dataset.wmsMobileBound === '1') { + return; + } + + link.dataset.wmsMobileBound = '1'; + + link.addEventListener('click', function() { + document.querySelectorAll('.wms-sidebar-link.is-active').forEach(( + activeLink) => { + activeLink.classList.remove('is-active'); + }); + + link.classList.add('is-active'); + + const selectedGroup = link.closest('[data-wms-menu-group]'); + + if (selectedGroup) { + selectMenuGroup(selectedGroup, true); + } + + applySidebarWidth(); + closeMobileSidebar(); + }); + }); + } + + applySidebarWidth(); + applySidebarState(); + + document.addEventListener('DOMContentLoaded', bindSidebarControls); + document.addEventListener('livewire:navigated', bindSidebarControls); + })(); + + diff --git a/Modules/Helpdesk/Resources/views/layouts/partials/topbar.blade.php b/Modules/Helpdesk/Resources/views/layouts/partials/topbar.blade.php index 5bdd7bdc..422ec00e 100644 --- a/Modules/Helpdesk/Resources/views/layouts/partials/topbar.blade.php +++ b/Modules/Helpdesk/Resources/views/layouts/partials/topbar.blade.php @@ -1,31 +1,27 @@ @php $user = auth()->user(); - $dashboardRoute = Route::has('platform.dashboard') && method_exists($user, 'isMpbaPlatformAdmin') && $user?->isMpbaPlatformAdmin() - ? 'platform.dashboard' - : (Route::has('dashboard') ? 'dashboard' : null); + $dashboardRoute = + Route::has('platform.dashboard') && method_exists($user, 'isMpbaPlatformAdmin') && $user?->isMpbaPlatformAdmin() + ? 'platform.dashboard' + : (Route::has('dashboard') + ? 'dashboard' + : null); @endphp -
- @forelse ($tickets as $ticket) -
-
-
-
{{ $ticket->reference }}
-

{{ $ticket->subject }}

+
+ @forelse ($tickets as $ticket) +
+
+
+
+ {{ $ticket->reference }}
+

+ {{ $ticket->subject }}

+
+ + @if ($ticket->priority) + + {{ $ticket->priority->name }} + + @endif
- @if ($ticket->priority) - - {{ $ticket->priority->name }} - - @endif -
- -
-
{{ $ticket->owner?->name ?? 'Unknown' }}
-
{{ $ticket->agent?->name ?? 'Unassigned' }}
- @if ($ticket->project) -
{{ $ticket->project->title }}
- @endif - @if ($ticket->team) -
{{ $ticket->team->name }}
- @endif - @if ($ticket->product) -
{{ $ticket->product->name }}
- @endif -
+
+
{{ $ticket->owner?->name ?? 'Unknown' }}
+
{{ $ticket->agent?->name ?? 'Unassigned' }} +
+ @if ($ticket->project) +
+ {{ $ticket->project->title }}
+ @endif + @if ($ticket->team) +
{{ $ticket->team->name }}
+ @endif + @if ($ticket->product) +
{{ $ticket->product->name }}
+ @endif +
-
- -
- + @foreach ($boards as $ticketBoard) + + @endforeach + +
+
+ @if ($ticket->tags->isNotEmpty()) +
+ @foreach ($ticket->tags as $tag) + {{ $tag->name }} @endforeach - +
+ @endif + + @if ($ticket->checklistItems->isNotEmpty()) + @php($done = $ticket->checklistItems->where('is_completed', true)->count()) +
Checklist + {{ $done }}/{{ $ticket->checklistItems->count() }}
+ @endif + + @if ($ticket->sla_first_response_breached || $ticket->sla_resolution_breached) +
+ SLA breach
+ @endif + +
+ Open + @can('update', $ticket) + Edit + @endcan
+
+ @empty +
+ Drop tickets here for {{ $status->name }}.
- @if ($ticket->tags->isNotEmpty()) -
- @foreach ($ticket->tags as $tag) - {{ $tag->name }} - @endforeach -
- @endif - - @if ($ticket->checklistItems->isNotEmpty()) - @php($done = $ticket->checklistItems->where('is_completed', true)->count()) -
Checklist {{ $done }}/{{ $ticket->checklistItems->count() }}
- @endif - - @if ($ticket->sla_first_response_breached || $ticket->sla_resolution_breached) -
SLA breach
- @endif - -
- Open - @can('update', $ticket) - Edit - @endcan -
- - @empty -
- Drop tickets here for {{ $status->name }}. -
- @endforelse -
-
- @endforeach -
+ @endforelse +
+
+ @endforeach +
@endif @endif @script @@ -280,8 +361,12 @@ @if ($cannedResponses->isNotEmpty())
- - @foreach ($cannedResponses as $response) @@ -290,7 +375,9 @@
- @@ -299,61 +386,86 @@ @endif
- - + +
- + -
- - - - - - +
+ + + + + +
-
{!! $oldCommentBody !!}
+
+ {!! $oldCommentBody !!}
- +
@can('update', $ticket) -
+
- -

No files selected

+ +

No files selected

-
@error('comment_attachments') -

{{ $message }}

+

{{ $message }}

@enderror @error('comment_attachments.*') -

{{ $message }}

+

{{ $message }}

@enderror
@if ($canSeeInternalNotes) -
+ + +
+
+
+

Time log history

+

+ {{ $ticket->timeLogs->count() }} entries · {{ $this->formattedTimeSpent() }} +

+
+ + +
+
+ +
+
+ @forelse ($ticket->timeLogs as $timeLog) +
+
+
+

+ {{ $timeLog->description ?: 'Time logged' }} +

+ +

+ {{ $timeLog->user?->name ?? 'Unknown user' }} + · + {{ $timeLog->logged_at?->format('d M Y H:i') ?? $timeLog->created_at?->format('d M Y H:i') }} +

+
+ + + {{ $timeLog->minutes }}m + +
+
+ @empty +
+ No time log entries yet. +
+ @endforelse +
+
+
diff --git a/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php b/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php index dd25b6e0..14dd1fe9 100644 --- a/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php +++ b/Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php @@ -4,14 +4,24 @@ @foreach ($comments as $comment) @php $commentUser = $comment->relationLoaded('user') ? $comment->getRelation('user') : null; - $commentAttachments = $comment->relationLoaded('attachments') ? $comment->getRelation('attachments') : collect(); + $commentAttachments = $comment->relationLoaded('attachments') + ? $comment->getRelation('attachments') + : collect(); $commentReplies = $comment->relationLoaded('replies') ? $comment->getRelation('replies') : collect(); - $replyFormId = 'helpdesk-reply-form-'.$comment->id; - $currentTicket = $ticket ?? $comment->ticket ?? null; + $replyFormId = 'helpdesk-reply-form-' . $comment->id; + $currentTicket = $ticket ?? ($comment->ticket ?? null); $replyCount = $commentReplies->count(); $isInternal = (bool) $comment->is_internal; - $borderClass = $isInternal ? 'border-purple-400/70 dark:border-purple-600/70' : 'border-zinc-200 dark:border-zinc-700'; - $railClass = $isInternal ? 'bg-purple-500' : ((int) $level % 3 === 0 ? 'bg-red-500' : (((int) $level % 3 === 1) ? 'bg-blue-500' : 'bg-emerald-500')); + $borderClass = $isInternal + ? 'border-purple-400/70 dark:border-purple-600/70' + : 'border-zinc-200 dark:border-zinc-700'; + $railClass = $isInternal + ? 'bg-purple-500' + : ((int) $level % 3 === 0 + ? 'bg-red-500' + : ((int) $level % 3 === 1 + ? 'bg-blue-500' + : 'bg-emerald-500')); $commentSubject = trim((string) ($comment->subject ?? '')); if ($commentSubject === '') { @@ -19,12 +29,16 @@ $commentSubject = Str::limit($plainSubject !== '' ? $plainSubject : 'Response', 72); } - if ($isInternal && ! Str::startsWith(Str::lower($commentSubject), 'internal')) { + if ($isInternal && !Str::startsWith(Str::lower($commentSubject), 'internal')) { $commentSubject = 'Internal note'; } $renderedBody = html_entity_decode((string) $comment->body, ENT_QUOTES | ENT_HTML5, 'UTF-8'); - while (str_contains($renderedBody, '<') || str_contains($renderedBody, '>') || str_contains($renderedBody, '&lt;')) { + while ( + str_contains($renderedBody, '<') || + str_contains($renderedBody, '>') || + str_contains($renderedBody, '&lt;') + ) { $decodedBody = html_entity_decode($renderedBody, ENT_QUOTES | ENT_HTML5, 'UTF-8'); if ($decodedBody === $renderedBody) { @@ -36,17 +50,21 @@ if ($currentTicket !== null) { $renderedBody = strtr($renderedBody, [ - '{{ ticket.reference }}' => (string) e((string) ($currentTicket->reference ?? '')), - '{{ ticket.subject }}' => (string) e((string) ($currentTicket->subject ?? '')), - '{{ ticket.status }}' => (string) e((string) ($currentTicket->status?->name ?? '')), - '{{ ticket.priority }}' => (string) e((string) ($currentTicket->priority?->name ?? '')), - '{{ ticket.category }}' => (string) e((string) ($currentTicket->category?->name ?? '')), - '{{ ticket.project }}' => (string) e((string) ($currentTicket->project?->title ?? '')), - '{{ ticket.team }}' => (string) e((string) ($currentTicket->team?->name ?? '')), - '{{ requester.name }}' => (string) e((string) ($currentTicket->owner?->name ?? $currentTicket->user?->name ?? '')), - '{{ agent.name }}' => (string) e((string) ($currentTicket->agent?->name ?? '')), - '{{ actor.name }}' => (string) e((string) ($commentUser?->name ?? '')), - '{{ ticket.url }}' => (string) e(route('helpdesk.tickets.show', ['ticket' => $currentTicket->getKey()])), + '{{ ticket . reference }}' => (string) e((string) ($currentTicket->reference ?? '')), + '{{ ticket . subject }}' => (string) e((string) ($currentTicket->subject ?? '')), + '{{ ticket . status }}' => (string) e((string) ($currentTicket->status?->name ?? '')), + '{{ ticket . priority }}' => (string) e((string) ($currentTicket->priority?->name ?? '')), + '{{ ticket . category }}' => (string) e((string) ($currentTicket->category?->name ?? '')), + '{{ ticket . project }}' => (string) e((string) ($currentTicket->project?->title ?? '')), + '{{ ticket . team }}' => (string) e((string) ($currentTicket->team?->name ?? '')), + '{{ requester . name }}' => (string) e( + (string) ($currentTicket->owner?->name ?? ($currentTicket->user?->name ?? '')), + ), + '{{ agent . name }}' => (string) e((string) ($currentTicket->agent?->name ?? '')), + '{{ actor . name }}' => (string) e((string) ($commentUser?->name ?? '')), + '{{ ticket . url }}' => (string) e( + route('helpdesk.tickets.show', ['ticket' => $currentTicket->getKey()]), + ), ]); } @@ -54,34 +72,50 @@ $renderedBody = preg_replace('/<\s*(script|style)[^>]*>.*?<\s*\/\s*\1\s*>/is', '', $renderedBody) ?: ''; $renderedBody = preg_replace('/\s+on[a-z]+\s*=\s*("[^"]*"|\'[^\']*\'|[^\s>]+)/i', '', $renderedBody) ?: ''; $renderedBody = preg_replace('/javascript\s*:/i', '', $renderedBody) ?: ''; - $renderedBody = strip_tags($renderedBody, '


@if ($commentAttachments->isNotEmpty()) -
-
+
+
Attachments
@@ -119,16 +158,21 @@ @if ($currentTicket !== null)
- @if (auth()->user()?->isMpbaPlatformAdmin()) -
+ @csrf @method('DELETE') - @@ -136,63 +180,98 @@ @endif
- + @csrf
- - + +
- -
- - - - - + +
+ + + + +
- + @can('update', $currentTicket) @if ($canSeeInternalNotes) -