diff --git a/.idea/laravel-idea.xml b/.idea/laravel-idea.xml
index 1e6474834..dd2ecef01 100644
--- a/.idea/laravel-idea.xml
+++ b/.idea/laravel-idea.xml
@@ -1,6 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/leantime-oss.iml b/.idea/leantime-oss.iml
index 395105672..cf1e59de7 100644
--- a/.idea/leantime-oss.iml
+++ b/.idea/leantime-oss.iml
@@ -4,6 +4,7 @@
+
diff --git a/.idea/php-test-framework.xml b/.idea/php-test-framework.xml
index 77613e290..5464decef 100644
--- a/.idea/php-test-framework.xml
+++ b/.idea/php-test-framework.xml
@@ -23,6 +23,8 @@
+
+
diff --git a/.idea/php.xml b/.idea/php.xml
index 38c2dd9ad..9c7031bae 100644
--- a/.idea/php.xml
+++ b/.idea/php.xml
@@ -288,6 +288,8 @@
+
+
@@ -313,11 +315,12 @@
+
-
-
-
+
+
+
diff --git a/.idea/phpspec.xml b/.idea/phpspec.xml
index c347231e8..927f0d575 100644
--- a/.idea/phpspec.xml
+++ b/.idea/phpspec.xml
@@ -119,6 +119,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml
index b108760b8..35cdd1f4f 100644
--- a/.idea/phpunit.xml
+++ b/.idea/phpunit.xml
@@ -4,8 +4,7 @@
-
-
+
\ No newline at end of file
diff --git a/app/Core/Configuration/laravelConfig.php b/app/Core/Configuration/laravelConfig.php
index 1b3e359eb..360291ea8 100644
--- a/app/Core/Configuration/laravelConfig.php
+++ b/app/Core/Configuration/laravelConfig.php
@@ -1,18 +1,8 @@
[
@@ -112,7 +103,7 @@
],
'default' => 'single',
],
- "debugbar" => [
+ 'debugbar' => [
/*
|--------------------------------------------------------------------------
@@ -149,14 +140,14 @@
| Leaving it to null will allow localhost only.
*/
'storage' => [
- 'enabled' => true,
- 'open' => true, // bool/callback.
- 'driver' => 'file', // redis, file, pdo, socket, custom
- 'path' => storage_path('debugbar'), // For file driver
+ 'enabled' => true,
+ 'open' => true, // bool/callback.
+ 'driver' => 'file', // redis, file, pdo, socket, custom
+ 'path' => storage_path('debugbar'), // For file driver
'connection' => null, // Leave null for default connection (Redis/PDO)
- 'provider' => '', // Instance of StorageInterface for custom driver
- 'hostname' => '127.0.0.1', // Hostname to use with the "socket" driver
- 'port' => 2304, // Port to use with the "socket" driver
+ 'provider' => '', // Instance of StorageInterface for custom driver
+ 'hostname' => '127.0.0.1', // Hostname to use with the "socket" driver
+ 'port' => 2304, // Port to use with the "socket" driver
],
/*
@@ -175,7 +166,7 @@
'editor' => 'phpstorm',
- /*
+ /*
|--------------------------------------------------------------------------
| Vendors
|--------------------------------------------------------------------------
@@ -245,30 +236,30 @@
*/
'collectors' => [
- 'phpinfo' => true, // Php version
- 'messages' => true, // Messages
- 'time' => true, // Time Datalogger
- 'memory' => true, // Memory usage
- 'exceptions' => true, // Exception displayer
- 'log' => true, // Logs from Monolog (merged in messages if enabled)
- 'db' => false, // Show database (PDO) queries and bindings
- 'views' => true, // Views with their data
- 'route' => true, // Current route information
- 'auth' => false, // Display Laravel authentication status
- 'gate' => false, // Display Laravel Gate checks
- 'session' => true, // Display session data
+ 'phpinfo' => true, // Php version
+ 'messages' => true, // Messages
+ 'time' => true, // Time Datalogger
+ 'memory' => true, // Memory usage
+ 'exceptions' => true, // Exception displayer
+ 'log' => true, // Logs from Monolog (merged in messages if enabled)
+ 'db' => false, // Show database (PDO) queries and bindings
+ 'views' => true, // Views with their data
+ 'route' => true, // Current route information
+ 'auth' => false, // Display Laravel authentication status
+ 'gate' => false, // Display Laravel Gate checks
+ 'session' => true, // Display session data
'symfony_request' => true, // Only one can be enabled..
- 'mail' => false, // Catch mail messages
- 'laravel' => false, // Laravel version and environment
- 'events' => true, // All events fired
+ 'mail' => false, // Catch mail messages
+ 'laravel' => false, // Laravel version and environment
+ 'events' => true, // All events fired
'default_request' => false, // Regular or special Symfony request logger
- 'logs' => true, // Add the latest log messages
- 'files' => true, // Show the included files
- 'config' => true, // Display config settings
- 'cache' => true, // Display cache events
- 'models' => false, // Display models
- 'livewire' => false, // Display Livewire (when available)
- 'jobs' => false, // Display dispatched jobs
+ 'logs' => true, // Add the latest log messages
+ 'files' => true, // Show the included files
+ 'config' => true, // Display config settings
+ 'cache' => true, // Display cache events
+ 'models' => false, // Display models
+ 'livewire' => false, // Display Livewire (when available)
+ 'jobs' => false, // Display dispatched jobs
],
/*
@@ -297,21 +288,21 @@
'show_guards' => true, // Show the guards that are used
],
'db' => [
- 'with_params' => true, // Render SQL with the parameters substituted
- 'backtrace' => true, // Use a backtrace to find the origin of the query in your files.
+ 'with_params' => true, // Render SQL with the parameters substituted
+ 'backtrace' => true, // Use a backtrace to find the origin of the query in your files.
'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults)
- 'timeline' => false, // Add the queries to the timeline
- 'duration_background' => true, // Show shaded background on each query relative to how long it took to execute.
+ 'timeline' => false, // Add the queries to the timeline
+ 'duration_background' => true, // Show shaded background on each query relative to how long it took to execute.
'explain' => [ // Show EXPLAIN output on queries
'enabled' => false,
'types' => ['SELECT'], // Deprecated setting, is always only SELECT
],
- 'hints' => false, // Show hints for common mistakes
- 'show_copy' => false, // Show copy button next to the query,
- 'slow_threshold' => false, // Only track queries that last longer than this time in ms
- 'memory_usage' => false, // Show queries memory usage
- 'soft_limit' => 100, // After the soft limit, no parameters/backtrace are captured
- 'hard_limit' => 500, // After the hard limit, queries are ignored
+ 'hints' => false, // Show hints for common mistakes
+ 'show_copy' => false, // Show copy button next to the query,
+ 'slow_threshold' => false, // Only track queries that last longer than this time in ms
+ 'memory_usage' => false, // Show queries memory usage
+ 'soft_limit' => 100, // After the soft limit, no parameters/backtrace are captured
+ 'hard_limit' => 500, // After the hard limit, queries are ignored
],
'mail' => [
'timeline' => false, // Add mails to the timeline
@@ -322,7 +313,7 @@
'data' => true, //true for all data, 'keys' for only names, false for no parameters.
'group' => 50, // Group duplicate views. Pass value to auto-group, or true/false to force
'exclude_paths' => [ // Add the paths which you don't want to appear in the views
- 'vendor/filament' // Exclude Filament components by default
+ 'vendor/filament', // Exclude Filament components by default
],
],
'route' => [
@@ -691,4 +682,16 @@
'compiled' => realpath(storage_path('framework/views')),
],
+ 'blade-icons' => [
+ 'path' => 'public/assets/images/svg',
+ 'class' => '',
+ 'components' => [
+ 'default' => 'svg',
+ ],
+ ],
+ 'blade-google-material-design-icons' => [
+ 'path' => 'public/assets/images/svg',
+ 'prefix' => 'gmdi',
+ ],
+
];
diff --git a/app/Domain/Calendar/Templates/partials/addEvent.blade.php b/app/Domain/Calendar/Templates/partials/addEvent.blade.php
index 1d4e4f493..b25657d5c 100644
--- a/app/Domain/Calendar/Templates/partials/addEvent.blade.php
+++ b/app/Domain/Calendar/Templates/partials/addEvent.blade.php
@@ -68,7 +68,7 @@
id="allDay"
:checked="isset($values['allDay']) && $values['allDay']"
labelText="{{ __('label.all_day') }}"
- labelPosition="left"
+ labelPosition="right"
/>
diff --git a/app/Domain/Calendar/Templates/partials/editEvent.blade.php b/app/Domain/Calendar/Templates/partials/editEvent.blade.php
index 5933de2d7..211111218 100644
--- a/app/Domain/Calendar/Templates/partials/editEvent.blade.php
+++ b/app/Domain/Calendar/Templates/partials/editEvent.blade.php
@@ -48,7 +48,7 @@
id="allDay"
:checked="$values['allDay']"
labelText="{{ __('label.all_day') }}"
- labelPosition="left"
+ labelPosition="right"
/>
dispatchTplEvent('beforeSubmitButton'); ?>
diff --git a/app/Domain/Goalcanvas/Templates/dashboard.blade.php b/app/Domain/Goalcanvas/Templates/dashboard.blade.php
index a787f7381..552dd88ac 100644
--- a/app/Domain/Goalcanvas/Templates/dashboard.blade.php
+++ b/app/Domain/Goalcanvas/Templates/dashboard.blade.php
@@ -161,9 +161,6 @@ class="sr-only">{{ sprintf(__('text.percent_complete'), round($goalStats['avgPer
$nbcomments = $comments->countComments(moduleId: $row['id']);
@endphp
-
-
-
diff --git a/app/Domain/Goalcanvas/Templates/partials/canvasDialog.blade.php b/app/Domain/Goalcanvas/Templates/partials/canvasDialog.blade.php
index f0da6a4a2..2d4e51c1e 100644
--- a/app/Domain/Goalcanvas/Templates/partials/canvasDialog.blade.php
+++ b/app/Domain/Goalcanvas/Templates/partials/canvasDialog.blade.php
@@ -43,20 +43,24 @@
+ variant="compact"
+ class="w-20" />
+ class="w-20"
+{{-- @if ($canvasItem['setting'] == 'linkAndReport')--}}
+{{-- dataTippyContent="Current value calculated from child goals" @endif--}}
+ />
diff --git a/app/Domain/Projects/Templates/partials/projectCardProgressBar.blade.php b/app/Domain/Projects/Templates/partials/projectCardProgressBar.blade.php
index c4ea234d6..6f0fc2ff4 100644
--- a/app/Domain/Projects/Templates/partials/projectCardProgressBar.blade.php
+++ b/app/Domain/Projects/Templates/partials/projectCardProgressBar.blade.php
@@ -21,11 +21,19 @@
@if ($project['status'] !== null && $project['status'] != '')
-
- {{ __("label.project_status_" . $project['status']) }}
-
+
+ {{ __("label.project_status_" . $project['status']) }}
+
@else
- {{ __("label.no_status") }}
+
+ {{ __("label.no_status") }}
+
@endif
diff --git a/app/Domain/Tickets/Templates/components/duedate.blade.php b/app/Domain/Tickets/Templates/components/duedate.blade.php
new file mode 100644
index 000000000..753f83b22
--- /dev/null
+++ b/app/Domain/Tickets/Templates/components/duedate.blade.php
@@ -0,0 +1,22 @@
+@props([
+ 'contentRole' => 'ghost',
+ 'variant' => '',
+ 'labelPosition' => 'top',
+ 'date' => '',
+])
+
+
+
+
+
+
+ Due Date
+
+
+
diff --git a/app/Domain/Tickets/Templates/components/effort-select.blade.php b/app/Domain/Tickets/Templates/components/effort-select.blade.php
index 1ab082f4a..308c5e21b 100644
--- a/app/Domain/Tickets/Templates/components/effort-select.blade.php
+++ b/app/Domain/Tickets/Templates/components/effort-select.blade.php
@@ -1,21 +1,28 @@
-
+@props([
+ 'contentRole' => 'ghost',
+ 'variant' => 'default',
+ 'labelPosition' => 'left',
+ '$ticket' => '',
+ 'efforts' => [],
+ 'labelPosition' => 'top'
+])
+
+
- 👕 {{ __('label.effort') }}
+ {{ __('label.effort') }}
-
-
+
{{ __('label.effort_not_defined') }}
@foreach ($efforts as $effortKey => $effortValue)
-
{{ $effortValue }}
@endforeach
+
diff --git a/app/Domain/Tickets/Templates/components/priority-select.blade.php b/app/Domain/Tickets/Templates/components/priority-select.blade.php
index 49acac67d..28591fece 100644
--- a/app/Domain/Tickets/Templates/components/priority-select.blade.php
+++ b/app/Domain/Tickets/Templates/components/priority-select.blade.php
@@ -1,22 +1,28 @@
-
+@props([
+ 'contentRole' => 'ghost',
+ 'variant' => '',
+ 'priorities' => [],
+ 'priorityValue' => '',
+ 'labelPosition' => 'top'
+])
+
+
+
- {!! __('label.priority') !!}
+ {!! __('label.priority') !!}
-
-
-
-
+
{{ __('label.priority_not_defined') }}
+
@foreach ($priorities as $priorityKey => $priorityValue)
- {{ $priorityValue }}
+ {{ $priorityValue }}
diff --git a/app/Domain/Tickets/Templates/components/type-select.blade.php b/app/Domain/Tickets/Templates/components/type-select.blade.php
index 819ebbe26..871cff0f8 100644
--- a/app/Domain/Tickets/Templates/components/type-select.blade.php
+++ b/app/Domain/Tickets/Templates/components/type-select.blade.php
@@ -1,13 +1,20 @@
+@props([
+ 'contentRole' => 'default',
+ 'variant' => '',
+ 'ticketTypes' => '',
+ 'labelPosition' => 'top'
+])
+
@php
$typeIcons = array('story' => 'fa-book', 'task' => 'fa-check-square', 'subtask' => 'fa-diagram-successor', 'bug' => 'fa-bug');
@endphp
-
+
@foreach ($ticketTypes as $type)
- {{ __("label." . strtolower($type)) }}
+ {{ __("label." . strtolower($type)) }}
@endforeach
diff --git a/app/Domain/Tickets/Templates/partials/showTicket.blade.php b/app/Domain/Tickets/Templates/partials/showTicket.blade.php
index 21a7fcb9c..3bc4a61d5 100644
--- a/app/Domain/Tickets/Templates/partials/showTicket.blade.php
+++ b/app/Domain/Tickets/Templates/partials/showTicket.blade.php
@@ -12,42 +12,37 @@
-
+
#{{ $ticket->id }}
-
+
-
-
-
-
+{{--
--}}
+{{-- --}}
+{{--
--}}
+
+
-
+
-
+
-
+
-
- 📅 Due Date
-
+
{{--
'regular', // Dropdown variant: regular or card
'contentRole' => 'primary', // Content role: primary, secondary, accent, ghost, link
+ 'state' => '',
+
+ 'buttonVariant' => '',
+
'position' => 'bottom', // Dropdown position: top, left, bottom, right
'align' => 'start', // Dropdown alignment: start or end
'labelText' => 'Dropdown', // Text for the dropdown button
@@ -41,9 +45,9 @@
@endphp
merge(['class' => "dropdown $positionClass $alignmentClass"]) }}>
-
-
+
+
{!! $labelText !!}
diff --git a/app/Views/Templates/components/content/icon.blade.php b/app/Views/Templates/components/content/icon.blade.php
new file mode 100644
index 000000000..dbaf6fd24
--- /dev/null
+++ b/app/Views/Templates/components/content/icon.blade.php
@@ -0,0 +1,21 @@
+@props([
+ 'icon' => ''
+])
+
+@php
+ $leantimeEntityTypeMaps = [
+ 'bug' => 'bug_report',
+ 'subtask' => 'account_tree',
+ 'story' => 'book',
+ 'task' => 'task',
+ ];
+
+ if(key_exists($icon, $leantimeEntityTypeMaps)) {
+ $iconMapped = $leantimeEntityTypeMaps[$icon];
+ }else{
+ $iconMapped = $icon;
+ }
+
+@endphp
+
+merge([ 'class' => 'material-symbols-rounded' ]) }}>{{ $iconMapped }}
diff --git a/app/Views/Templates/components/dates/datepicker.blade.php b/app/Views/Templates/components/dates/datepicker.blade.php
index c5f65f49b..094e79f4d 100644
--- a/app/Views/Templates/components/dates/datepicker.blade.php
+++ b/app/Views/Templates/components/dates/datepicker.blade.php
@@ -4,6 +4,7 @@
"timeName" => '',
"showTime" => true,
"noDateLabel" => "",
+ "leadingVisual" => "",
])
@@ -24,15 +25,15 @@
-
+
-
+
Close
-
+
Clear
diff --git a/app/Views/Templates/components/elements/badge.blade.php b/app/Views/Templates/components/elements/badge.blade.php
index f1abe4c8a..37c3e4be1 100644
--- a/app/Views/Templates/components/elements/badge.blade.php
+++ b/app/Views/Templates/components/elements/badge.blade.php
@@ -1,26 +1,45 @@
@props([
- 'asLink' => false,
- 'color' => match ($color ?? null) {
- 'yellow' => ['yellow-500', 'bg-yellow-500'],
- 'red' => ['red-500', 'bg-red-500'],
- 'blue' => ['blue-500', 'bg-blue-500'],
- 'green' => ['green', 'bg-green'],
- 'primary' => ['primary', 'bg-primary'],
- 'gray', default => ['gray-900', 'bg-gray-900'],
- },
+ 'contentRole' => '', //primary, secondary, tertiary, accent, ghost
+ 'scale' => '', //xs, s, m. l
+ 'outline' => false,
+ 'leadingVisual' => ''
])
-@if ($asLink)
- merge([
- 'class' => 'mix-blend-difference px-2.5 py-0.5 rounded' . ($asLink ? 'text-white' . $color[1] : $color[0] . 'bg-gray-300'),
-] + ($asLink ? ['href' => $url ?? '#'] : [])) }}>
+@php
+ switch($contentRole){
+ case 'secondary':
+ $typeClass = 'badge-secondary';
+ break;
+ case 'tertiary':
+ case 'accent':
+ $typeClass = 'badge-accent';
+ break;
+ case 'ghost':
+ $typeClass = 'badge-ghost';
+ break;
+ default:
+ $typeClass = 'badge-primary';
+ }
+
+ if ($scale === 'xs') {
+ $sizeClass = 'badge-xs';
+ } elseif ($scale === 's') {
+ $sizeClass = 'badge-sm';
+ } elseif ($scale === 'l') {
+ $sizeClass = 'badge-lg';
+ } else {
+ $sizeClass = '';
+ }
+
+ $outlineClass = $outline ? 'badge-outline' : '';
+@endphp
+
+
+merge(['class' => 'badge mt-1 '.$typeClass.' '.$sizeClass.' '.$outlineClass]) }}>
+ @if($leadingVisual)
+
+ {{ $leadingVisual }}>
+
+ @endif
{{ $slot }}
-@if ($asLink)
-
-@else
-
-@endif
+
diff --git a/app/Views/Templates/components/forms/BACKUP-select.blade.php b/app/Views/Templates/components/forms/_archive/BACKUP-select.blade.php
similarity index 100%
rename from app/Views/Templates/components/forms/BACKUP-select.blade.php
rename to app/Views/Templates/components/forms/_archive/BACKUP-select.blade.php
diff --git a/app/Views/Templates/components/forms/dropdownPill.blade.php b/app/Views/Templates/components/forms/_archive/dropdownPill.blade.php
similarity index 100%
rename from app/Views/Templates/components/forms/dropdownPill.blade.php
rename to app/Views/Templates/components/forms/_archive/dropdownPill.blade.php
diff --git a/app/Views/Templates/components/forms/dropdownPillOption.blade.php b/app/Views/Templates/components/forms/_archive/dropdownPillOption.blade.php
similarity index 100%
rename from app/Views/Templates/components/forms/dropdownPillOption.blade.php
rename to app/Views/Templates/components/forms/_archive/dropdownPillOption.blade.php
diff --git a/app/Views/Templates/components/forms/button.blade.php b/app/Views/Templates/components/forms/button.blade.php
index 6e5f5c3b5..67bb8e1a5 100644
--- a/app/Views/Templates/components/forms/button.blade.php
+++ b/app/Views/Templates/components/forms/button.blade.php
@@ -1,9 +1,10 @@
@props([
'labelText' => '',
- 'contentRole' => 'primary',
+ 'contentRole' => 'primary', //default, primary, secondary, tertiary (ghost), accent, link
+ 'state' => '', //default, info, warning, danger, success
'scale' => '',
- 'state' => '',
- 'variant' => '',
+
+ 'variant' => '', //chip, input
'tag' => 'button',
'icon' => '',
'rightIcon' => '',
@@ -17,14 +18,20 @@
])
@php
+ $variantClasses = "";
+ if($variant == "chip") {
+ $variantClasses = ":hover bg-neutral";
+ }else if($variant == "input") {
+ $variantClasses = "w-full input justify-start";
+ }
switch($contentRole){
case 'secondary':
- $typeClass = 'btn-secondary border-primary text-primary hover:bg-primary/20 ';
+ $typeClass = 'btn-secondary btn-outline border-primary text-primary hover:bg-primary/20';
break;
case 'tertiary':
case 'ghost':
- $typeClass = 'btn-ghost hover:bg-primary/20 text-base-content';
+ $typeClass = 'btn-ghost text-base-content hover:bg-neutral';
break;
case 'link':
$typeClass = 'btn-link text-primary hover:bg-primary/20 ';
@@ -37,7 +44,7 @@
$shapeClass = $shape ? 'btn-'.$shape : '';
@endphp
-<{{ $tag }} role="button" {{$attributes->merge(['class' => 'btn btn-sm active:shadow-inner '. $typeClass.' '.$sizeClass. ' '.$stateClass. ' '.$shapeClass])->class([
+<{{ $tag }} role="button" {{ $attributes->merge(['class' => 'btn btn-sm active:shadow-inner '. $typeClass.' '.$sizeClass. ' '.$stateClass. ' '.$shapeClass . ' '.$variantClasses])->class([
'join-item' => $join,
'mr-1' => ! $join,
]) }}>
diff --git a/app/Views/Templates/components/forms/datepicker.blade.php b/app/Views/Templates/components/forms/datepicker.blade.php
index c3cdadaca..ec8115653 100644
--- a/app/Views/Templates/components/forms/datepicker.blade.php
+++ b/app/Views/Templates/components/forms/datepicker.blade.php
@@ -1,41 +1,63 @@
@props([
- "dateName" => '',
- "value" => '',
- "timeName" => '',
- "showTime" => true,
- "noDateLabel" => "",
- "labelText" => '',
- "labelRight" => '',
- "caption" => '',
- "validationText" => '',
+ //Basic Definition
+ 'contentRole' => 'ghost', //default, primary, secondary, tertiary (ghost), accent, link
+ 'state' => '', //default, info, warning, danger, success,
+ 'scale' => '', //xs, sm, md, lg, xl
+
+ //labels & content
+ 'labelPosition' => 'top',
+ 'labelText' => '',
+ 'helpText' => '',
+ 'leadingVisual' => '',
+ 'trailingVisual' => '',
+ 'caption' => '',
+ 'validationText' => '',
+ 'validationState' => '',
+
+ //Variation options
+ 'variant' => '', //chip, input
+ 'dateName' => '',
+ 'value' => '',
+ 'timeName' => '',
+ 'showTime' => true,
+ 'noDateLabel' => "",
])
-
+
+
+
diff --git a/app/Views/Templates/components/forms/text-input.blade.php b/app/Views/Templates/components/forms/text-input.blade.php
index 1321bf2c0..2fa528010 100644
--- a/app/Views/Templates/components/forms/text-input.blade.php
+++ b/app/Views/Templates/components/forms/text-input.blade.php
@@ -1,15 +1,22 @@
@props([
- 'inputType' => 'text',
+ //Basic Definition
+ 'contentRole' => '', //default, primary, secondary, tertiary (ghost), accent, link
+ 'state' => '', //default, info, warning, danger, success,
+ 'scale' => '',
+
+ //labels & content
+ 'labelPosition' => 'top',
'labelText' => '',
- 'labelRight' => '',
- 'size' => '',
- 'state' => '',
+ 'helpText' => '',
'leadingVisual' => '',
'trailingVisual' => '',
'caption' => '',
'validationText' => '',
'validationState' => '',
- 'variant' => '',
+
+ //Variation options
+ 'variant' => '', //default, title
+
])
@php
@@ -19,31 +26,33 @@
$ghostClass = $variant === 'ghost' ? 'input-ghost' : '';
if ($variant === 'title') {
- $style= 'text-lg';
+
+ $style= 'text-xxl p-0 ml-[-5px] pl-[5px] hover:bg-transparent mb-4';
$width = 'max-w-full';
$sizeClass = 'w-full';
$ghostClass = 'input-ghost ';
} elseif ($variant === 'compact') {
+
$style= 'input-bordered input-sm';
$width = 'max-w-xs';
+ $sizeClass = $size ? 'input-'.$size : '';
} else {
$style= 'input-bordered input-sm';
$width = 'w-full max-w-xs';
- $sizeClass = $size ? 'input-'.$size : '';
+ $sizeClass = $scale ? 'input-'.$scale : '';
}
@endphp
-
@if($validationText)
-
- {!! $validationText !!}
-
+ {!! $validationText !!}
@endif
-
+
+
+
diff --git a/composer.json b/composer.json
index 6099eaa0d..ac66dc1c7 100644
--- a/composer.json
+++ b/composer.json
@@ -69,7 +69,9 @@
"carbon-cli/carbon-cli": "^1.2",
"metasyntactical/composer-plugin-license-check": "^2.1",
"predis/predis": "^2.2",
- "sentry/sentry-laravel": "^4.8"
+ "sentry/sentry-laravel": "^4.8",
+ "blade-ui-kit/blade-icons": "^1.7",
+ "codeat3/blade-google-material-design-icons": "^1.19"
},
"require-dev": {
"squizlabs/php_codesniffer": "^3.8",
diff --git a/composer.lock b/composer.lock
index 0657f3f56..7d958aadb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "c83702290190764135fa91054b004993",
+ "content-hash": "26b7582442204a3d1b9e004580963947",
"packages": [
{
"name": "aws/aws-crt-php",
@@ -212,6 +212,87 @@
},
"time": "2022-12-07T17:46:57+00:00"
},
+ {
+ "name": "blade-ui-kit/blade-icons",
+ "version": "1.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/blade-ui-kit/blade-icons.git",
+ "reference": "8f787baf09d88cdfd6ec4dbaba11ebfa885f0595"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/blade-ui-kit/blade-icons/zipball/8f787baf09d88cdfd6ec4dbaba11ebfa885f0595",
+ "reference": "8f787baf09d88cdfd6ec4dbaba11ebfa885f0595",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0",
+ "illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0",
+ "illuminate/support": "^8.0|^9.0|^10.0|^11.0",
+ "illuminate/view": "^8.0|^9.0|^10.0|^11.0",
+ "php": "^7.4|^8.0",
+ "symfony/console": "^5.3|^6.0|^7.0",
+ "symfony/finder": "^5.3|^6.0|^7.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.5.1",
+ "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0",
+ "phpunit/phpunit": "^9.0|^10.5|^11.0"
+ },
+ "bin": [
+ "bin/blade-icons-generate"
+ ],
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "BladeUI\\Icons\\BladeIconsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "BladeUI\\Icons\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dries Vints",
+ "homepage": "https://driesvints.com"
+ }
+ ],
+ "description": "A package to easily make use of icons in your Laravel Blade views.",
+ "homepage": "https://github.com/blade-ui-kit/blade-icons",
+ "keywords": [
+ "blade",
+ "icons",
+ "laravel",
+ "svg"
+ ],
+ "support": {
+ "issues": "https://github.com/blade-ui-kit/blade-icons/issues",
+ "source": "https://github.com/blade-ui-kit/blade-icons"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/driesvints",
+ "type": "github"
+ },
+ {
+ "url": "https://www.paypal.com/paypalme/driesvints",
+ "type": "paypal"
+ }
+ ],
+ "time": "2024-08-14T14:25:11+00:00"
+ },
{
"name": "brick/math",
"version": "0.12.1",
@@ -389,6 +470,79 @@
],
"time": "2023-12-11T17:09:12+00:00"
},
+ {
+ "name": "codeat3/blade-google-material-design-icons",
+ "version": "1.19.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/codeat3/blade-google-material-design-icons.git",
+ "reference": "7a20f3a763edc54dba69725660eff2b2e99f8dad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/codeat3/blade-google-material-design-icons/zipball/7a20f3a763edc54dba69725660eff2b2e99f8dad",
+ "reference": "7a20f3a763edc54dba69725660eff2b2e99f8dad",
+ "shasum": ""
+ },
+ "require": {
+ "blade-ui-kit/blade-icons": "^1.1",
+ "illuminate/support": "^8.0|^9.0|^10.0|^11.0",
+ "php": "^7.4|^8.0"
+ },
+ "require-dev": {
+ "codeat3/blade-icon-generation-helpers": "^0.8",
+ "codeat3/phpcs-styles": "^1.0",
+ "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0",
+ "phpunit/phpunit": "^9.0|^10.5|^11.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Codeat3\\BladeGoogleMaterialDesignIcons\\BladeGoogleMaterialDesignIconsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Codeat3\\BladeGoogleMaterialDesignIcons\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Swapnil Sarwe",
+ "homepage": "https://swapnilsarwe.com"
+ },
+ {
+ "name": "Dries Vints",
+ "homepage": "https://driesvints.com"
+ }
+ ],
+ "description": "A package to easily make use of \"Google Fonts Material Icons\" in your Laravel Blade views.",
+ "homepage": "https://github.com/codeat3/blade-google-material-design-icons",
+ "keywords": [
+ "blade",
+ "google",
+ "icons",
+ "laravel",
+ "material"
+ ],
+ "support": {
+ "issues": "https://github.com/codeat3/blade-google-material-design-icons/issues",
+ "source": "https://github.com/codeat3/blade-google-material-design-icons/tree/1.19.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/swapnilsarwe",
+ "type": "github"
+ }
+ ],
+ "time": "2024-02-28T15:02:13+00:00"
+ },
{
"name": "dasprid/enum",
"version": "1.0.6",
diff --git a/public/assets/css/components/kanban.css b/public/assets/css/components/kanban.css
index c4f9429bf..17088e89c 100644
--- a/public/assets/css/components/kanban.css
+++ b/public/assets/css/components/kanban.css
@@ -288,75 +288,7 @@ body .maincontent .priority-border-5 {
border-left: 3px solid var(--dark-grey);
}
-.priority-bg-1,
-body .maincontent .priority-bg-1,
-body .maincontent .ticketDropdown .priority-bg-1{
- background:var(--dark-red);
- color:var(--dark-red-text-color);
-}
-
-.priority-bg-2,
-body .maincontent .priority-bg-2,
-body .maincontent .ticketDropdown .priority-bg-2{
- background: var(--red);
- color:var(--red-text-color);
-}
-
-.priority-bg-3,
-body .maincontent .priority-bg-3,
-body .maincontent .ticketDropdown .priority-bg-3{
- background: var(--yellow);
- color:var(--yellow-text-color);
-}
-
-.priority-bg-4,
-body .maincontent .priority-bg-4,
-body .maincontent .ticketDropdown .priority-bg-4{
- background:var(--green);
- color:var(--green-text-color);
-}
-
-.priority-bg-5,
-body .maincontent .priority-bg-5,
-body .maincontent .ticketDropdown .priority-bg-5 {
- background:var(--dark-grey);
- color:var(--dark-grey-text-color);
-}
-.priority-text-1,
-body .maincontent .priority-text-1,
-body .maincontent .priority-text-1 a,
-body .maincontent .priority-text-1 a:link{
- color:var(--dark-red);
-}
-
-.priority-text-2,
-body .maincontent .priority-text-2,
-body .maincontent .priority-text-2 a,
-body .maincontent .priority-text-2 a:link {
- color:var(--red);
-}
-
-.priority-text-3,
-body .maincontent .priority-text-3,
-body .maincontent .priority-text-3 a,
-body .maincontent .priority-text-3 a:link {
- color:var(--yellow);
-}
-
-.priority-text-4,
-body .maincontent .priority-text-4,
-body .maincontent .priority-text-4 a,
-body .maincontent .priority-text-4 a:link {
- color:var(--green);
-}
-
-.priority-text-5,
-body .maincontent .priority-text-5,
-body .maincontent .priority-text-5 a,
-body .maincontent .priority-text-5 a:link {
- color:var(--dark-grey);
-}
.widgettitle {
background: var(--kanban-col-title-bg) !important;
diff --git a/public/assets/fonts/material-icons/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf b/public/assets/fonts/material-icons/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf
new file mode 100644
index 000000000..2c7520462
Binary files /dev/null and b/public/assets/fonts/material-icons/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf differ
diff --git a/public/assets/js/app/core/selects.module.mjs b/public/assets/js/app/core/selects.module.mjs
index 0236eb9c2..e9c7ceace 100644
--- a/public/assets/js/app/core/selects.module.mjs
+++ b/public/assets/js/app/core/selects.module.mjs
@@ -28,14 +28,13 @@ function getOptions(selectElement) {
return items;
}
-export const initSelect = function (element, enableSearch, additionalClass) {
+export const initSelect = function (element, enableSearch, additionalClasses) {
- let outerClasses = [];
- outerClasses.push("select");
- outerClasses.push("choices");
+ let outerClasses = ["select"];
- if(additionalClass !== '') {
- outerClasses.push(additionalClass);
+ if(additionalClasses !== '') {
+ const selectClasses = additionalClasses.trim().split(" ");
+ outerClasses = selectClasses;
}
const select = new Choices(element, {
@@ -69,7 +68,8 @@ export const initSelect = function (element, enableSearch, additionalClass) {
list: ["choices__list"],
listItems: ["choices__list--multiple"],
listSingle: ["choices__list--single"],
- listDropdown: ["choices__list--dropdown"],
+ listDropdown: ["dropdown-content", "menu"],
+
item: ["choices__item"],
itemSelectable: ["choices__item--selectable"],
itemDisabled: ["choices__item--disabled"],
@@ -111,14 +111,13 @@ export const initSelect = function (element, enableSearch, additionalClass) {
);
};
-export const initTags = function (element, enableSearch, autoCompleteTags, additionalClass) {
+export const initTags = function (element, enableSearch, autoCompleteTags, additionalClasses) {
- let outerClasses = [];
- outerClasses.push("select");
- outerClasses.push("choices");
+ let outerClasses = ["select"];
- if(additionalClass !== '') {
- outerClasses.push(additionalClass);
+ if(additionalClasses !== '') {
+ const selectClasses = additionalClasses.trim().split(" ");
+ outerClasses = selectClasses;
}
const select = new Choices(element, {
@@ -151,12 +150,11 @@ export const initTags = function (element, enableSearch, autoCompleteTags, addit
input: ["choices__input"],
inputCloned: [
"choices__input--cloned",
-
],
- list: ["choices__list"],
+ list: ["dropdown-content","menu"],
listItems: ["choices__list--multiple"],
listSingle: ["choices__list--single"],
- listDropdown: ["choices__list--dropdown"],
+ listDropdown: ["dropdown-content","menu"],
item: ["choices__item"],
itemSelectable: ["choices__item--selectable"],
itemDisabled: ["choices__item--disabled"],
diff --git a/public/assets/less/base/font.css b/public/assets/less/base/font.css
index ee283233e..ee8e2328d 100644
--- a/public/assets/less/base/font.css
+++ b/public/assets/less/base/font.css
@@ -1,15 +1,13 @@
@font-face {
font-family: 'Hanken Grotesk';
- src: url('fonts/Hanken_Grotesk/HankenGrotesk-VariableFont_wght.ttf') format("woff2 supports variations"),
- url('fonts/Hanken_Grotesk/HankenGrotesk-VariableFont_wght.ttf') format("woff2-variations");
+ src: url('~fonts/Hanken_Grotesk/HankenGrotesk-VariableFont_wght.ttf') format("truetype-variations");
font-weight: 100 1000;
font-style:normal;
}
@font-face {
font-family: 'Hanken Grotesk';
- src: url('fonts/Hanken_Grotesk/HankenGrotesk-Italic-VariableFont_wght.ttf') format("ttf supports variations"),
- url('fonts/Hanken_Grotesk/HankenGrotesk-Italic-VariableFont_wght.ttf') format("ttf-variations");
+ src: url('fonts/Hanken_Grotesk/HankenGrotesk-Italic-VariableFont_wght.ttf') format("truetype-variations");
font-weight: 100 1000;
font-style:italic;
}
@@ -80,7 +78,42 @@
src: url('~fonts/shantell/Shantell_Sans-Informal_Regular_Italic.woff2') format('woff2');
font-weight: normal;
font-style: italic;
+}
+
+@font-face {
+ font-family: 'Material Symbols Rounded';
+ src: url('~fonts/material-icons/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf') format("truetype-variations");
+ font-weight: 100 700;
+}
+
+.material-symbols-rounded {
+ @apply font-materialIcons align-top;
+ margin-left: -2px;
+ font-size:110%;
+ line-height:inherit;
+
+ font-variation-settings:
+ 'FILL' 0,
+ 'wght' 600,
+ 'GRAD' 0,
+ 'opsz' 48;
+
+ &.fill {
+ font-variation-settings:'FILL' 1;
+ }
+
+ &.strong {
+ font-variation-settings:'wght' 600;
+ }
+
+ &.large {
+ font-size: 130%;
+ vertical-align: bottom;
+ }
+}
+strong .material-symbols-rounded {
+ font-variation-settings:'wght' 600;
}
diff --git a/public/assets/less/components/labels.css b/public/assets/less/components/labels.css
index 49527de3f..a50a574c4 100644
--- a/public/assets/less/components/labels.css
+++ b/public/assets/less/components/labels.css
@@ -3,9 +3,9 @@
}
.label {
- @apply text-sm py-0.5;
+ @apply text-sm py-0.5 ;
}
.label-text {
- @apply text-sm;
+ @apply text-sm text-base-content/80;
}
diff --git a/public/assets/less/components/select.css b/public/assets/less/components/select.css
index 5879f708a..b9ebafabd 100644
--- a/public/assets/less/components/select.css
+++ b/public/assets/less/components/select.css
@@ -1,6 +1,14 @@
.select {
- @apply select-bordered select-sm w-full max-w-xs relative;
+ @apply select-sm text-sm w-full max-w-xs relative;
+
+ &.select-ghost {
+ @apply bg-none;
+
+ &:hover {
+ @apply caret-neutral-700;
+ }
+ }
&.select-chip {
@apply bg-none leading-6 min-h-6 h-6 w-auto px-0.5 rounded-full ps-1.5 pe-1.5 bg-none text-xs leading-6 min-h-6 h-6 align-sub;
@@ -31,10 +39,15 @@
@apply border-base-content/20 outline-base-content/20 outline outline-2 outline-offset-2;
}
- .choices__inner {
- select {
- display: none;
- }
+ &:hover {
+ @apply shadow-lg;
+ }
+
+}
+
+.choices__inner {
+ select {
+ display: none;
}
}
@@ -161,7 +174,7 @@
.choices__list--single .choices__item {
width: 100%;
align-content: center;
- @apply select-sm text-sm px-1;
+ @apply px-0 text-sm select-sm;
}
.select-chip {
diff --git a/public/assets/less/custom-utilities.css b/public/assets/less/custom-utilities.css
index 86802f002..605d19df2 100644
--- a/public/assets/less/custom-utilities.css
+++ b/public/assets/less/custom-utilities.css
@@ -1,2 +1,3 @@
@import "utilities/forms.css";
@import "utilities/boxes.css";
+@import "utilities/semantic-styles.css";
diff --git a/public/assets/less/utilities/forms.css b/public/assets/less/utilities/forms.css
index 167b353f4..8419a7490 100644
--- a/public/assets/less/utilities/forms.css
+++ b/public/assets/less/utilities/forms.css
@@ -2,16 +2,15 @@
@apply shadow-md;
}
-
.input,
.select {
-
&:hover {
- @apply shadow-none border-base-content/50;
+ @apply shadow-md bg-neutral;
}
-}
-
-.form-control {
- @apply pb-4;
+ &-bordered {
+ &:hover {
+ @apply border-base-content/50 bg-none;
+ }
+ }
}
diff --git a/public/assets/less/utilities/semantic-styles.css b/public/assets/less/utilities/semantic-styles.css
new file mode 100644
index 000000000..d1cb24d7e
--- /dev/null
+++ b/public/assets/less/utilities/semantic-styles.css
@@ -0,0 +1,26 @@
+
+.priority-text-1 {
+ @apply text-red-50;
+}
+
+.priority-text-2 {
+ @apply text-orange-50;
+}
+
+.priority-text-3 {
+ @apply text-yellow-50;
+}
+
+.priority-text-4 {
+ @apply text-green-50;
+}
+
+.priority-text-5 {
+ @apply text-blue-50;
+}
+
+.priority-text-6 {
+ @apply text-neutral-50;
+}
+
+
diff --git a/public/dist/mix-manifest.json b/public/dist/mix-manifest.json
index aaa4d8238..5c98ef47f 100644
--- a/public/dist/mix-manifest.json
+++ b/public/dist/mix-manifest.json
@@ -132,6 +132,7 @@
"/fonts/Hanken_Grotesk/HankenGrotesk-VariableFont_wght.ttf": "/fonts/Hanken_Grotesk/HankenGrotesk-VariableFont_wght.ttf",
"/fonts/Hanken_Grotesk/OFL.txt": "/fonts/Hanken_Grotesk/OFL.txt",
"/fonts/Hanken_Grotesk/README.txt": "/fonts/Hanken_Grotesk/README.txt",
+ "/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf": "/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf",
"/fonts/Roboto-Bold.ttf": "/fonts/Roboto-Bold.ttf",
"/fonts/Roboto-Bold.woff2": "/fonts/Roboto-Bold.woff2",
"/fonts/Roboto-Italic.ttf": "/fonts/Roboto-Italic.ttf",
@@ -165,6 +166,7 @@
"/fonts/fa-solid-900.woff2": "/fonts/fa-solid-900.woff2",
"/fonts/fa-v4compatibility.ttf": "/fonts/fa-v4compatibility.ttf",
"/fonts/fa-v4compatibility.woff2": "/fonts/fa-v4compatibility.woff2",
+ "/fonts/material-icons/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf": "/fonts/material-icons/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf",
"/fonts/roboto/Google Android License.txt": "/fonts/roboto/Google Android License.txt",
"/fonts/roboto/LICENSE.txt": "/fonts/roboto/LICENSE.txt",
"/fonts/roboto/Roboto-Black.ttf": "/fonts/roboto/Roboto-Black.ttf",
diff --git a/tailwind.config.js b/tailwind.config.js
index 2f969e3ad..61db6dbc9 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -16,6 +16,7 @@ module.exports = {
hanken: ['"Hanken Grotesk"', 'sans-serif'],
atkinson: ['"Atkinson Hyperlegible"', 'sans-serif'],
shantell: ['"Shantell Sans"', 'sans-serif'],
+ materialIcons: ['"Material Symbols Rounded"', 'sans-serif'],
},
fontWeight: {
thin: '100',