Thursday, June 04, 2026 4:20:08 AM
> _slim_select.scss
@import "slim-select/scss";

.ss-main {
    --ss-primary-color: #{$primary};
    --ss-bg-color: #{$input-bg};
    --ss-font-color: #{$input-color};
    --ss-font-placeholder-color: #{$input-placeholder-color};
    --ss-disabled-color: #{$input-disabled-bg};
    --ss-border-color: #{$input-border-color};
    --ss-focus-color: #{$input-focus-border-color};
    --ss-border-radius: #{$input-border-radius};
    --ss-main-height: #{$input-height};

    background-color: var(--ss-bg-color);
    background-image: none !important;
    border-color: var(--ss-border-color);
    padding: #{$input-padding-y} #{$input-padding-x};

    // Add smooth transitions for validation states
    transition:
        border-color 0.15s ease-in-out,
        box-shadow 0.15s ease-in-out;

    .ss-single {
        color: var(--ss-font-color);
        margin: 0;
        padding: 0;
    }

    .ss-arrow path {
        stroke: #{$input-color};
        opacity: 0.75;
        transition: stroke 0.15s ease-in-out;
    }

    // Validation states
    &.is-invalid {
        padding-right: #{$input-padding-x} !important;
        border-color: #{$danger} !important;

        // Match Bootstrap's invalid focus state
        &:focus-within {
            border-color: #{$danger} !important;
            box-shadow: 0 0 0 0.25rem #{rgba($danger, 0.25)} !important;
        }

        // Make the arrow red too for consistency
        .ss-arrow path {
            stroke: #{$danger} !important;
        }
    }

    &.is-valid {
        padding-right: #{$input-padding-x} !important;
        border-color: #{$success} !important;

        &:focus-within {
            border-color: #{$success} !important;
            box-shadow: 0 0 0 0.25rem #{rgba($success, 0.25)} !important;
        }

        // Make the arrow green too
        .ss-arrow path {
            stroke: #{$success} !important;
        }
    }

    // Disabled state styling
    &.ss-disabled {
        padding-right: #{$input-padding-x} !important;
        background-color: #{$input-disabled-bg} !important;
        border-color: #{$input-disabled-border-color} !important;
        opacity: 1;

        .ss-single {
            color: #{$input-disabled-color} !important;
        }

        .ss-arrow path {
            stroke: #{$input-disabled-color} !important;
            opacity: 0.5;
        }
    }
}

.ss-content {
    --ss-bg-color: #{$dropdown-bg};
    --ss-font-color: #{$dropdown-color};
    --ss-border-color: #{$dropdown-border-color};

    background-color: var(--ss-bg-color);
    background-image: none !important;
    border-color: var(--ss-border-color);
    box-shadow: #{$dropdown-box-shadow};
    padding-right: 0.75em;

    .ss-search {
        @extend .px-0;
        @extend .pt-2;
        @extend .pb-1;

        background-color: var(--ss-bg-color);

        input {
            background-color: #{$input-bg};
            border: #{$input-border-width} solid #{$input-border-color};
            border-radius: #{$input-border-radius};
            color: #{$input-color};
            padding: #{$input-padding-y} #{$input-padding-x};
            font-size: #{$input-font-size};
            line-height: #{$input-line-height};

            &:focus {
                border-color: #{$input-focus-border-color};
                box-shadow: #{$input-focus-box-shadow};
                outline: 0;
            }

            &::placeholder {
                color: #{$input-placeholder-color};
                opacity: 1;
            }
        }
    }

    .ss-list {
        .ss-option {
            &.ss-selected,
            &:not(.ss-disabled).ss-selected {
                background-color: #{rgba($primary, 0.1)} !important;
                color: #{$white} !important;
                border-left: 3px solid #{$primary};
                padding-left: calc(var(--ss-spacing-l) * 3 - 3px);
            }

            &:hover {
                background-color: rgba(255, 255, 255, 0.08) !important;
                color: #{$light} !important;
                border-left: 3px solid transparent;
                padding-left: calc(var(--ss-spacing-l) * 3 - 3px);
            }
        }

        // Also target the more specific optgroup version
        .ss-optgroup .ss-option {
            &:not(.ss-disabled).ss-selected {
                background-color: #{rgba($primary, 0.3)} !important;
                color: #{$white} !important;
            }

            &:hover {
                background-color: rgba(255, 255, 255, 0.08) !important;
                color: #{$light} !important;
            }
        }
    }
}

// Make sure invalid-feedback shows properly after Slim Select
.ss-main + .invalid-feedback {
    display: block !important;
}

.ss-selectall {
    // Replace with a simple dash/checkbox icon
    &::before {
        content: "☐"; // or use bi-square icon
        margin-right: 0.5rem;
        color: $esm-warm-gray-500;
    }

    &.ss-selected::before {
        content: "☑"; // or use bi-check-square
        color: $esm-ui-info; // Your nice blue instead of green
    }

    // Hide the default checkmark
    svg {
        display: none;
    }
}
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 4294fb2