|
67 | 67 | root?: string;
|
68 | 68 | field?: string | ComponentProps<TextField>['classes'];
|
69 | 69 | options?: string;
|
70 |
| - option?: string; |
| 70 | + option?: string | ComponentProps<MenuItem>['classes']; |
71 | 71 | selected?: string;
|
72 | 72 | group?: string;
|
73 | 73 | empty?: string;
|
74 | 74 | } = {};
|
75 | 75 |
|
76 | 76 | let fieldClasses: ComponentProps<TextField>['classes'];
|
77 |
| - $: fieldClasses = typeof classes.field === 'string' ? { root: classes.field } : classes.field; |
| 77 | + $: { |
| 78 | + let v: {root?: any} = {}; |
| 79 | + if (typeof settingsClasses?.field === 'string') { |
| 80 | + v = { root: settingsClasses.field }; |
| 81 | + } else { |
| 82 | + v = settingsClasses?.field ?? {}; |
| 83 | + } |
| 84 | + if (typeof classes?.field === 'string') { |
| 85 | + fieldClasses = { ...v, root: cls(v.root, classes.field)}; |
| 86 | + } else { |
| 87 | + fieldClasses = { ...v, ...classes?.field ?? {} }; |
| 88 | + } |
| 89 | + } |
| 90 | +
|
| 91 | + let optionClasses: ComponentProps<MenuItem>['classes']; |
| 92 | + $: { |
| 93 | + let v: {root?: any} = {}; |
| 94 | + if (typeof settingsClasses?.option === 'string') { |
| 95 | + v = { root: settingsClasses.option }; |
| 96 | + } else { |
| 97 | + v = settingsClasses?.option ?? {}; |
| 98 | + } |
| 99 | + if (typeof classes?.option === 'string') { |
| 100 | + optionClasses = { ...v, root: cls(v.root, classes.option)}; |
| 101 | + } else { |
| 102 | + optionClasses = { ...v, ...classes?.option ?? {} }; |
| 103 | + } |
| 104 | + } |
78 | 105 |
|
79 | 106 | // Menu props
|
80 | 107 | export let placement: Placement = 'bottom-start';
|
|
425 | 452 | on:keypress={onKeyPress}
|
426 | 453 | actions={fieldActions}
|
427 | 454 | classes={{
|
| 455 | + ...fieldClasses, |
428 | 456 | container: inlineOptions
|
429 |
| - ? 'border-none shadow-none hover:shadow-none group-focus-within:shadow-none' |
430 |
| - : undefined, |
| 457 | + ? cls('border-none shadow-none hover:shadow-none group-focus-within:shadow-none', fieldClasses?.container) |
| 458 | + : fieldClasses?.container, |
| 459 | + |
431 | 460 | }}
|
432 |
| - class={cls('h-full', settingsClasses.field, fieldClasses)} |
| 461 | + class={cls('h-full')} |
433 | 462 | role="combobox"
|
434 | 463 | aria-expanded={open ? 'true' : 'false'}
|
435 | 464 | aria-autocomplete={!inlineOptions ? 'list' : undefined}
|
|
534 | 563 | <svelte:fragment slot="option" let:option let:index>
|
535 | 564 | <slot name="option" {option} {index} {selected} {value} {highlightIndex}>
|
536 | 565 | <MenuItem
|
| 566 | + classes={optionClasses} |
537 | 567 | class={cls(
|
538 | 568 | index === highlightIndex && '[:not(.group:hover)>&]:bg-surface-content/5',
|
539 | 569 | option === selected && (classes.selected || 'font-semibold'),
|
|
549 | 579 | role="option"
|
550 | 580 | aria-selected={option === selected ? 'true' : 'false'}
|
551 | 581 | aria-disabled={option?.disabled ? 'true' : 'false'}
|
| 582 | + icon={option.icon} |
552 | 583 | >
|
553 | 584 | {optionText(option)}
|
554 | 585 | </MenuItem>
|
|
594 | 625 | <svelte:fragment slot="option" let:option let:index>
|
595 | 626 | <slot name="option" {option} {index} {selected} {value} {highlightIndex}>
|
596 | 627 | <MenuItem
|
| 628 | + classes={optionClasses} |
597 | 629 | class={cls(
|
598 | 630 | index === highlightIndex && '[:not(.group:hover)>&]:bg-surface-content/5',
|
599 | 631 | option === selected && (classes.selected || 'font-semibold'),
|
|
609 | 641 | role="option"
|
610 | 642 | aria-selected={option === selected ? 'true' : 'false'}
|
611 | 643 | aria-disabled={option?.disabled ? 'true' : 'false'}
|
| 644 | + icon={option.icon} |
612 | 645 | >
|
613 | 646 | {optionText(option)}
|
614 | 647 | </MenuItem>
|
|
0 commit comments