diff --git a/AI.md b/AI.md index 8d685bf..5f5c915 100644 --- a/AI.md +++ b/AI.md @@ -188,6 +188,7 @@ Note: chip properties for multiselect, and selected properties for single select **_Events:_** - change: Triggered when selection changes. Payload: { value: any } +- changeOneItem: Triggered when a single item is changed/clicked. Payload: { value: any } - initValueChange: Triggered when initial value changes. Payload: { value: any } **_Context:_** diff --git a/src/wwElement_Option.vue b/src/wwElement_Option.vue index bac2f66..56951c9 100644 --- a/src/wwElement_Option.vue +++ b/src/wwElement_Option.vue @@ -275,10 +275,19 @@ export default { ); const handleClick = () => { - if (isSelected.value && canInteract.value && props.content.unselectOnClick) { + const unselectOnClick = props.content.unselectOnClick ?? false; + const selectOnClick = props.content.selectOnClick ?? true; + const sortSelectedToTop = props.content.sortSelectedToTop ?? false; + + // Allow unselecting if either: + // 1. unselectOnClick is explicitly enabled, OR + // 2. sortSelectedToTop is enabled (natural UX for sorted items) + const canUnselect = unselectOnClick || sortSelectedToTop; + + if (isSelected.value && canInteract.value && canUnselect) { unselect(); focusFromOptionId(null); - } else if (!isSelected.value && canInteract.value && props.content.selectOnClick) { + } else if (!isSelected.value && canInteract.value && selectOnClick) { updateValue(value.value); focusFromOptionId(optionId); focusSelectElement(); @@ -306,7 +315,7 @@ export default { const unselect = () => { if (canInteract.value) { if (selectType.value === 'single') { - updateValue(null); + updateValue(null, value.value); } else { removeSpecificValue(value.value); } diff --git a/src/wwElement_OptionsList.vue b/src/wwElement_OptionsList.vue index eaf9041..8574d52 100644 --- a/src/wwElement_OptionsList.vue +++ b/src/wwElement_OptionsList.vue @@ -52,9 +52,10 @@