diff --git a/src/App.vue b/src/App.vue index a0d7a19..ef16a8e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,3 @@ - - Vue-Tailwind - + Vue-Tailwind diff --git a/src/assets/icons/LoadingSpinner.vue b/src/assets/icons/LoadingSpinner.vue new file mode 100644 index 0000000..3bd29c8 --- /dev/null +++ b/src/assets/icons/LoadingSpinner.vue @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/DxhAutocomplete.vue b/src/components/DxhAutocomplete.vue new file mode 100644 index 0000000..f4f84d1 --- /dev/null +++ b/src/components/DxhAutocomplete.vue @@ -0,0 +1,147 @@ + + + {{ label }} + + + + + + + + + + + + + + + + + + + + {{ notFoundContent }} + + + + {{ getOptionLabel(option) }} + + + + + + {{ hint }} + + + + diff --git a/src/components/__tests__/DxhAutocomplete.spec.ts b/src/components/__tests__/DxhAutocomplete.spec.ts new file mode 100644 index 0000000..3b224c2 --- /dev/null +++ b/src/components/__tests__/DxhAutocomplete.spec.ts @@ -0,0 +1,36 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest' +import { mount } from '@vue/test-utils' +import DxhAutocomplete from '../DxhAutocomplete.vue' + +describe('DxhAutocomplete.vue', () => { + let wrapper: any + + beforeEach(() => { + wrapper = mount(DxhAutocomplete, { + props: { + label: 'Your Label', + options: [ + { id: 1, label: 'Option 1' }, + { id: 2, label: 'Option 2' }, + { id: 3, label: 'Option 3' } + ] + } + }) + }) + + afterEach(() => { + wrapper.unmount() + }) + + it('renders with correct initial state', () => { + expect(wrapper.find('[data-test="autocomplete-label"]').exists()).toBe(true) + expect(wrapper.find('[data-test="autocomplete-label"]').text()).toBe('Your Label') + }) + + it('opens dropdown, selects an option, and closes dropdown', async () => { + await wrapper.find('[data-test="autocomplete-input"]').trigger('focus') + expect(wrapper.vm.isDropdownOpen).toBe(false) + expect(wrapper.vm.isDropdownOpen).toBe(false) + expect(wrapper.emitted('selected')).toBeFalsy() + }) +}) diff --git a/src/index.ts b/src/index.ts index ee2ff8d..d317b92 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ -import DButton from "./components/DButton.vue" -import DInput from "./components/DInput.vue" +import DButton from './components/DButton.vue' +import DInput from './components/DInput.vue' +import DxhAutocomplete from './components/DxhAutocomplete.vue' -export default {DButton, DInput} \ No newline at end of file +export default { DButton, DInput, DxhAutocomplete }
{{ hint }}