From 18eae8fa23af0c8fbdaf75e6f2bc0de0cb975132 Mon Sep 17 00:00:00 2001 From: "fandi.susanto.bts" Date: Thu, 6 Aug 2026 00:35:43 +0700 Subject: [PATCH] feat: add CAutoComplete component with basic functionality and remote search support - Implemented CAutoComplete.vue with props for modelValue, options, debounceWait, loading, and more. - Added search functionality with debounce for remote city suggestions. - Created AutoComplete.vue page for documentation and examples. - Updated CSelect.vue to support remote searching and caching of selected values. - Enhanced CMultiSelect.vue to handle object comparisons for selected values. --- .../auto-complete/CAutoComplete.vue | 421 ++++++++++++++++++ src/components/multi-select/CMultiSelect.vue | 11 +- src/components/select/CSelect.vue | 225 +++++++--- src/index.ts | 1 + src/layouts/useLayoutNavigation.ts | 14 + src/pages/components/AutoComplete.vue | 254 +++++++++++ src/pages/components/Select.vue | 83 +++- src/router/index.ts | 5 + 8 files changed, 956 insertions(+), 58 deletions(-) create mode 100644 src/components/auto-complete/CAutoComplete.vue create mode 100644 src/pages/components/AutoComplete.vue diff --git a/src/components/auto-complete/CAutoComplete.vue b/src/components/auto-complete/CAutoComplete.vue new file mode 100644 index 0000000..e7a344d --- /dev/null +++ b/src/components/auto-complete/CAutoComplete.vue @@ -0,0 +1,421 @@ + + + + + diff --git a/src/components/multi-select/CMultiSelect.vue b/src/components/multi-select/CMultiSelect.vue index 95b3278..24f68e7 100644 --- a/src/components/multi-select/CMultiSelect.vue +++ b/src/components/multi-select/CMultiSelect.vue @@ -1,5 +1,5 @@ @@ -461,18 +576,18 @@ function clearSelection() { .combobox { position: relative; display: flex; +} - &::after { - position: absolute; - inset-inline-end: 9px; - top: 50%; - color: var(--c-muted-text-color, #68717d); - font-size: 10px; - line-height: 1; - pointer-events: none; - content: '▼'; - transform: translateY(-50%); - } +.indicator { + position: absolute; + inset-inline-end: 9px; + top: 50%; + display: inline-flex; + color: var(--c-muted-text-color, #68717d); + font-size: 10px; + line-height: 1; + pointer-events: none; + transform: translateY(-50%); } .c-select { diff --git a/src/index.ts b/src/index.ts index f08a45d..a6d7e6b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ export { default as CAppBar } from './components/app-bar/CAppBar.vue' +export { default as CAutoComplete } from './components/auto-complete/CAutoComplete.vue' export { default as CButton } from './components/button/CButton.vue' export { default as CCheckbox } from './components/checkbox/CCheckbox.vue' export { default as CFormField } from './components/form-field/CFormField.vue' diff --git a/src/layouts/useLayoutNavigation.ts b/src/layouts/useLayoutNavigation.ts index fee8ca4..8718ec0 100644 --- a/src/layouts/useLayoutNavigation.ts +++ b/src/layouts/useLayoutNavigation.ts @@ -113,6 +113,13 @@ export function useTopNavigation() { active: route.name === 'multi-select', command: () => void router.push({ name: 'multi-select' }), }, + { + id: 'auto-complete', + label: 'Auto Complete', + icon: '⌕', + active: route.name === 'auto-complete', + command: () => void router.push({ name: 'auto-complete' }), + }, { type: 'separator' }, { id: 'icon', @@ -230,6 +237,13 @@ export function useComponentNavigation() { active: route.name === 'multi-select', command: () => void router.push({ name: 'multi-select' }), }, + { + id: 'auto-complete', + label: 'Auto Complete', + icon: '⌕', + active: route.name === 'auto-complete', + command: () => void router.push({ name: 'auto-complete' }), + }, { type: 'separator' }, { id: 'icon', diff --git a/src/pages/components/AutoComplete.vue b/src/pages/components/AutoComplete.vue new file mode 100644 index 0000000..dd68547 --- /dev/null +++ b/src/pages/components/AutoComplete.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/src/pages/components/Select.vue b/src/pages/components/Select.vue index 76d5a2f..2d76d3c 100644 --- a/src/pages/components/Select.vue +++ b/src/pages/components/Select.vue @@ -1,5 +1,5 @@