This commit is contained in:
Mark Gregory
2026-07-07 16:35:28 +01:00
parent 323dabac5a
commit fc27aa7318
3 changed files with 64 additions and 71 deletions
@@ -54,7 +54,7 @@
name="country_id"
data-wms-select2
data-placeholder="Search and select a country"
class="w-full"
class="wms-select2-control"
>
<option value=""></option>
@foreach ($countries as $country)
+31 -24
View File
@@ -1,16 +1,7 @@
/* WMS Select2 professional dark theme.
Imported after Select2's own CSS so it overrides the vendor defaults. */
/* WMS Select2 professional dark theme. Imported after Select2 base CSS. */
.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 {
min-width: 0;
}
.wms-select2-field .select2-container,
@@ -23,6 +14,19 @@
margin-top: 0.5rem !important;
}
.wms-select2-field select[data-wms-select2].select2-hidden-accessible,
.wms-select2-field select.wms-select2-control.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;
}
.select2-container--wms .select2-selection--single {
position: relative !important;
height: 3rem !important;
@@ -71,15 +75,9 @@
.select2-container--wms .select2-selection--single .select2-selection__arrow b {
border-color: rgb(212 212 216) transparent transparent transparent !important;
border-style: solid !important;
border-width: 5px 4px 0 4px !important;
height: 0 !important;
left: 50% !important;
margin-left: -4px !important;
margin-top: -2px !important;
position: absolute !important;
top: 50% !important;
width: 0 !important;
}
.select2-container--wms.select2-container--open .select2-selection--single .select2-selection__arrow b {
@@ -89,17 +87,16 @@
.select2-container--wms .select2-selection--single .select2-selection__clear {
position: absolute !important;
right: 2.1rem !important;
right: 2.25rem !important;
top: 0 !important;
height: 100% !important;
width: 1rem !important;
height: 100% !important;
background: transparent !important;
border: 0 !important;
border-radius: 0 !important;
box-shadow: none !important;
color: rgb(161 161 170) !important;
font-size: 1.125rem !important;
line-height: 3rem !important;
font-size: 1.25rem !important;
line-height: 2.875rem !important;
text-align: center !important;
}
@@ -116,6 +113,14 @@
box-shadow: 0 24px 60px rgb(0 0 0 / 0.45) !important;
}
.select2-container--wms.select2-container--open .select2-dropdown--below {
margin-top: 0.375rem !important;
}
.select2-container--wms.select2-container--open .select2-dropdown--above {
margin-top: -0.375rem !important;
}
.select2-container--wms .select2-search--dropdown {
padding: 0.75rem !important;
background: rgb(24 24 27) !important;
@@ -123,12 +128,14 @@
.select2-container--wms .select2-search--dropdown .select2-search__field {
height: 2.75rem !important;
width: 100% !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;
font-weight: 500 !important;
outline: none !important;
}
@@ -164,7 +171,7 @@
color: rgb(161 161 170) !important;
}
/* Matching fallback before Select2 initialises. */
/* Fallback styling before Select2 initialises, matching WMS inputs. */
.wms-select2-field > select[data-wms-select2],
.wms-select2-field > select.wms-select2-control {
margin-top: 0.5rem;
+32 -46
View File
@@ -143,23 +143,21 @@ function renderWmsCharts() {
function livewireComponentFor(element) {
if (!element || !window.Livewire) {
let current = element;
while (current && current !== document.documentElement) {
if (current.hasAttribute && current.hasAttribute('wire:id')) {
break;
}
current = current.parentElement;
}
if (!current || !window.Livewire) {
return null;
}
let componentRoot = null;
try {
componentRoot = element.closest('[wire\\:id]');
} catch (error) {
componentRoot = null;
}
if (!componentRoot) {
return null;
}
return window.Livewire.find(componentRoot.getAttribute('wire:id'));
return window.Livewire.find(current.getAttribute('wire:id'));
}
function setLivewireProperty(element, model, value) {
@@ -177,15 +175,12 @@ function setLivewireProperty(element, model, value) {
*
* @returns {void}
*/
function initialiseSelect2(root = document) {
function initialiseSelect2() {
if (!window.jQuery?.fn?.select2) {
return;
}
const $root = root instanceof window.Element ? $(root) : $(document);
const selector = 'select[data-helpdesk-select2], select[data-wms-select2], select.wms-select2-control';
$root.find(selector).add($root.is(selector) ? $root : $()).each(function () {
$('[data-helpdesk-select2], [data-wms-select2], .wms-select2-control').each(function () {
const select = this;
const $select = $(select);
@@ -199,28 +194,36 @@ function initialiseSelect2(root = document) {
$select.find('option[value=""]').first().text() ||
(isMultiple ? 'Select options' : 'Select option');
if (!isMultiple && $select.find('option[value=""]').length === 0) {
$select.prepend(new Option('', '', false, false));
}
$select.select2({
theme: 'wms',
width: '100%',
minimumResultsForSearch: 0,
allowClear: !isMultiple,
closeOnSelect: !isMultiple,
dropdownAutoWidth: false,
placeholder,
sorter(data) {
return data.sort((first, second) => first.text.localeCompare(second.text, undefined, {
sensitivity: 'base',
ignorePunctuation: true,
}));
return data.sort((first, second) => {
const firstText = (first.text || '').trim();
const secondText = (second.text || '').trim();
if (!first.id) return -1;
if (!second.id) return 1;
return firstText.localeCompare(secondText, undefined, {
sensitivity: 'base',
ignorePunctuation: true,
});
});
},
});
$select.off('change.wms-select2-livewire');
$select.on('change.wms-select2-livewire', function () {
setLivewireProperty(this, this.dataset.wireModel, $select.val());
this.dispatchEvent(new Event('change', { bubbles: true }));
});
});
}
@@ -236,28 +239,11 @@ function bootUi() {
}
document.addEventListener('DOMContentLoaded', bootUi);
window.addEventListener('load', bootUi);
window.addEventListener('pageshow', bootUi);
document.addEventListener('livewire:navigated', bootUi);
document.addEventListener('livewire:init', () => {
Livewire.hook('morphed', ({ el }) => {
initialiseSelect2(el || document);
Livewire.hook('morphed', () => {
initialiseSelect2();
});
});
const select2Observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node instanceof window.Element) {
initialiseSelect2(node);
}
});
});
});
select2Observer.observe(document.documentElement, {
childList: true,
subtree: true,
});