diff --git a/Modules/Company/Resources/views/_form.blade.php b/Modules/Company/Resources/views/_form.blade.php index 08a1cf43..a5bf21dc 100644 --- a/Modules/Company/Resources/views/_form.blade.php +++ b/Modules/Company/Resources/views/_form.blade.php @@ -53,9 +53,8 @@ id="country_id" name="country_id" data-wms-select2 - data-company-country-select2 data-placeholder="Search and select a country" - class="mt-2 h-12 w-full rounded-xl border-zinc-300 bg-white px-4 text-sm text-zinc-900 shadow-sm outline-none transition focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" + class="w-full" > @foreach ($countries as $country) diff --git a/Modules/Company/Resources/views/index.blade.php b/Modules/Company/Resources/views/index.blade.php index 50c76931..1f3661a6 100644 --- a/Modules/Company/Resources/views/index.blade.php +++ b/Modules/Company/Resources/views/index.blade.php @@ -85,9 +85,8 @@ id="quick_country_id" name="country_id" data-wms-select2 - data-company-country-select2 data-placeholder="Search and select country" - class="mt-2 h-12 w-full rounded-xl border-zinc-300 bg-white px-4 text-sm text-zinc-900 shadow-sm outline-none transition focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white" + class="w-full" > @foreach($countries as $country) diff --git a/resources/css/wms-select2.css b/resources/css/wms-select2.css new file mode 100644 index 00000000..afd4dea1 --- /dev/null +++ b/resources/css/wms-select2.css @@ -0,0 +1,157 @@ +/* WMS Select2 professional dark theme. + This file is imported after Select2's own CSS so it wins reliably. */ + +.wms-select2-field .select2-container, +.select2-container--wms { + width: 100% !important; + display: block !important; +} + +.wms-select2-field select[data-wms-select2].select2-hidden-accessible { + position: absolute !important; + width: 1px !important; + height: 1px !important; + overflow: hidden !important; + clip: rect(0 0 0 0) !important; + white-space: nowrap !important; + border: 0 !important; + padding: 0 !important; + margin: -1px !important; +} + +.wms-select2-field .select2-container { + margin-top: 0.5rem !important; +} + +.select2-container--wms .select2-selection--single { + height: 3rem !important; + min-height: 3rem !important; + border: 1px solid rgb(63 63 70) !important; + border-radius: 0.75rem !important; + background: rgb(9 9 11) !important; + box-shadow: 0 1px 2px rgb(0 0 0 / 0.2) !important; + display: flex !important; + align-items: center !important; + outline: none !important; + transition: border-color 140ms ease, box-shadow 140ms ease, background 140ms ease !important; +} + +.select2-container--wms.select2-container--focus .select2-selection--single, +.select2-container--wms.select2-container--open .select2-selection--single { + border-color: rgb(59 130 246) !important; + box-shadow: 0 0 0 3px rgb(59 130 246 / 0.24) !important; +} + +.select2-container--wms .select2-selection--single .select2-selection__rendered { + width: 100% !important; + padding: 0 3rem 0 1rem !important; + color: rgb(244 244 245) !important; + font-size: 0.875rem !important; + font-weight: 500 !important; + line-height: 3rem !important; +} + +.select2-container--wms .select2-selection--single .select2-selection__placeholder { + color: rgb(161 161 170) !important; + font-weight: 500 !important; +} + +.select2-container--wms .select2-selection--single .select2-selection__arrow { + position: absolute !important; + top: 0.5rem !important; + right: 0.625rem !important; + width: 2rem !important; + height: 2rem !important; + border-radius: 0.625rem !important; + background: rgb(39 39 42) !important; +} + +.select2-container--wms .select2-selection--single .select2-selection__arrow b { + border-color: rgb(212 212 216) transparent transparent transparent !important; + border-width: 5px 4px 0 4px !important; + margin-left: -4px !important; + margin-top: -2px !important; +} + +.select2-container--wms.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent rgb(212 212 216) transparent !important; + border-width: 0 4px 5px 4px !important; +} + +.select2-container--wms .select2-selection--single .select2-selection__clear { + position: absolute !important; + right: 2.85rem !important; + top: 0.5rem !important; + width: 2rem !important; + height: 2rem !important; + border-radius: 0.625rem !important; + color: rgb(161 161 170) !important; + font-size: 1.25rem !important; + line-height: 1.85rem !important; + text-align: center !important; +} + +.select2-container--wms .select2-selection--single .select2-selection__clear:hover { + background: rgb(39 39 42) !important; + color: rgb(244 244 245) !important; +} + +.select2-container--wms .select2-dropdown { + overflow: hidden !important; + border: 1px solid rgb(63 63 70) !important; + border-radius: 0.875rem !important; + background: rgb(24 24 27) !important; + color: rgb(244 244 245) !important; + box-shadow: 0 24px 60px rgb(0 0 0 / 0.45) !important; +} + +.select2-container--wms .select2-search--dropdown { + padding: 0.75rem !important; + background: rgb(24 24 27) !important; +} + +.select2-container--wms .select2-search--dropdown .select2-search__field { + height: 2.75rem !important; + border: 1px solid rgb(63 63 70) !important; + border-radius: 0.75rem !important; + background: rgb(9 9 11) !important; + color: rgb(244 244 245) !important; + padding: 0 0.875rem !important; + font-size: 0.875rem !important; + outline: none !important; +} + +.select2-container--wms .select2-search--dropdown .select2-search__field:focus { + border-color: rgb(59 130 246) !important; + box-shadow: 0 0 0 3px rgb(59 130 246 / 0.22) !important; +} + +.select2-container--wms .select2-results__options { + background: rgb(24 24 27) !important; + max-height: 16rem !important; +} + +.select2-container--wms .select2-results__option { + padding: 0.75rem 1rem !important; + color: rgb(244 244 245) !important; + font-size: 0.875rem !important; + font-weight: 500 !important; +} + +.select2-container--wms .select2-results__option--highlighted.select2-results__option--selectable { + background: rgb(37 99 235) !important; + color: white !important; +} + +.select2-container--wms .select2-results__option--selected { + background: rgb(30 41 59) !important; + color: rgb(191 219 254) !important; +} + +.select2-container--wms .select2-results__option[aria-disabled='true'] { + color: rgb(113 113 122) !important; +} + +.select2-container--wms .select2-results__message { + color: rgb(161 161 170) !important; +} diff --git a/resources/js/app.js b/resources/js/app.js index 776ad753..53936f79 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -3,13 +3,13 @@ require('flatpickr'); import '@fortawesome/fontawesome-free/css/all.min.css'; import Chart from 'chart.js/auto'; import $ from 'jquery'; -import select2 from 'select2/dist/js/select2.full.js'; -import 'select2/dist/css/select2.min.css'; window.$ = $; window.jQuery = $; -select2(window, $); +import 'select2'; +import 'select2/dist/css/select2.min.css'; +import '../css/wms-select2.css'; const chartColours = [ 'rgb(8, 145, 178)', @@ -168,47 +168,39 @@ function initialiseSelect2() { return; } - $('[data-helpdesk-select2], [data-wms-select2], [data-company-country-select2]').each(function () { - const select = this; - const $select = $(select); + $('[data-helpdesk-select2], [data-wms-select2]').each(function () { + const $select = $(this); if ($select.hasClass('select2-hidden-accessible')) { - return; + $select.select2('destroy'); } const isMultiple = $select.prop('multiple'); - const placeholder = - $select.data('placeholder') || - $select.find('option[value=""]').first().text() || - (isMultiple ? 'Select options' : 'Select option'); - - if (!isMultiple && !$select.find('option[value=""]').length) { - $select.prepend(new Option('', '', false, false)); - } $select.select2({ + theme: 'wms', width: '100%', allowClear: !isMultiple, closeOnSelect: !isMultiple, dropdownAutoWidth: false, - placeholder, - dropdownParent: $('body'), - sorter: function (data) { - return data.sort(function (a, b) { - return (a.text || '').localeCompare(b.text || '', undefined, { - sensitivity: 'base', - numeric: true, - }); - }); + placeholder: + $select.data('placeholder') || + $select.find('option[value=""]').first().text() || + (isMultiple ? 'Select options' : 'Select option'), + sorter(data) { + return data.sort((first, second) => first.text.localeCompare(second.text, undefined, { + sensitivity: 'base', + ignorePunctuation: true, + })); }, }); - $select.off('change.wms-select2-livewire'); + $select.off('change.select2-livewire'); - $select.on('change.wms-select2-livewire', function () { - setLivewireProperty(select, select.dataset.wireModel, $select.val()); + $select.on('change.select2-livewire', function () { + setLivewireProperty(this, this.dataset.wireModel, $select.val()); - select.dispatchEvent( + this.dispatchEvent( new Event('change', { bubbles: true, })