import BaseStyle from 'primevue/base/style'; const theme = ({ dt }) => ` .p-listbox { background: ${dt('listbox.background')}; color: ${dt('listbox.color')}; border: 1px solid ${dt('listbox.border.color')}; border-radius: ${dt('listbox.border.radius')}; transition: background ${dt('transition.duration')}, color ${dt('transition.duration')}, border-color ${dt('transition.duration')}, box-shadow ${dt('transition.duration')}, outline-color ${dt('transition.duration')}; outline-color: transparent; box-shadow: ${dt('listbox.shadow')}; } .p-listbox.p-focus { border-color: ${dt('listbox.focus.border.color')}; box-shadow: ${dt('listbox.focus.ring.shadow')}; outline: ${dt('listbox.focus.ring.width')} ${dt('listbox.focus.ring.style')} ${dt('listbox.focus.ring.color')}; outline-offset: ${dt('listbox.focus.ring.offset')}; } .p-listbox.p-disabled { opacity: 1; background: ${dt('listbox.disabled.background')}; color: ${dt('listbox.disabled.color')}; } .p-listbox.p-invalid { border-color: ${dt('listbox.invalid.border.color')}; } .p-listbox-header { padding: ${dt('listbox.header.padding')}; } .p-listbox-filter-container { position: relative; } .p-listbox-filter-icon { position: absolute; top: 50%; margin-top: -0.5rem; right: 0.75rem; color: ${dt('listbox.filter.icon.color')}; } .p-listbox-filter { width: 100%; padding-right: 1.75rem; } .p-listbox-list-container { overflow: auto; } .p-listbox-list { list-style-type: none; margin: 0; padding: ${dt('listbox.list.padding')}; outline: 0 none; display: flex; flex-direction: column; gap: ${dt('listbox.list.gap')}; } .p-listbox-option { cursor: pointer; position: relative; overflow: hidden; padding: ${dt('listbox.option.padding')}; border: 0 none; border-radius: ${dt('listbox.option.border.radius')}; color: ${dt('listbox.option.color')}; transition: background-color ${dt('transition.duration')}, color ${dt('transition.duration')}, border-color ${dt('transition.duration')}, box-shadow ${dt('transition.duration')}, outline-color ${dt('transition.duration')}; } .p-listbox .p-listbox-list .p-listbox-option.p-listbox-option-selected { background: ${dt('listbox.option.selected.background')}; color: ${dt('listbox.option.selected.color')}; } .p-listbox:not(.p-disabled) .p-listbox-option.p-listbox-option-selected.p-focus { background: ${dt('listbox.option.selected.focus.background')}; color: ${dt('listbox.option.selected.focus.color')}; } .p-listbox:not(.p-disabled) .p-listbox-option:not(.p-listbox-option-selected):not(.p-disabled).p-focus { background: ${dt('listbox.option.focus.background')}; color: ${dt('listbox.option.focus.color')}; } .p-listbox:not(.p-disabled) .p-listbox-option:not(.p-listbox-option-selected):not(.p-disabled):hover { background: ${dt('listbox.option.focus.background')}; color: ${dt('listbox.option.focus.color')}; } .p-listbox-option-group { margin: 0; padding: ${dt('listbox.option.group.padding')}; color: ${dt('listbox.option.group.color')}; background: ${dt('listbox.option.group.background')}; font-weight: ${dt('listbox.option.group.font.weight')}; } .p-listbox-empty-message { padding: ${dt('listbox.option.padding')}; } `; const classes = { root: ({ props }) => [ 'p-listbox p-component', { 'p-listbox-striped': props.stripedRows, 'p-disabled': props.disabled, 'p-invalid': props.invalid } ], header: 'p-listbox-header', filterContainer: 'p-listbox-filter-container', pcFilter: 'p-listbox-filter', filterIcon: 'p-listbox-filter-icon', listContainer: 'p-listbox-list-container', list: 'p-listbox-list', optionGroup: 'p-listbox-option-group', option: ({ instance, option, index, getItemOptions }) => [ 'p-listbox-option', { 'p-listbox-option-selected': instance.isSelected(option), 'p-focus': instance.focusedOptionIndex === instance.getOptionIndex(index, getItemOptions), 'p-disabled': instance.isOptionDisabled(option) } ], emptyMessage: 'p-listbox-empty-message' }; export default BaseStyle.extend({ name: 'listbox', theme, classes });