edvoyui-component-library-test-flight 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EUIButton.vue.d.ts.map +1 -0
- package/dist/library-vue-ts.cjs.js +4 -3
- package/dist/library-vue-ts.es.js +3 -8
- package/dist/library-vue-ts.umd.js +4 -3
- package/dist/select/EUISelect.vue.d.ts.map +1 -0
- package/package.json +4 -2
- package/src/App.vue +16 -0
- package/src/assets/fonts/gilroy/GilroyBold/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroyBold/font.woff2 +0 -0
- package/src/assets/fonts/gilroy/GilroyBoldItalic/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroyBoldItalic/font.woff2 +0 -0
- package/src/assets/fonts/gilroy/GilroyExtraBold/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroyExtraBold/font.woff2 +0 -0
- package/src/assets/fonts/gilroy/GilroyExtraBoldItalic/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroyExtraBoldItalic/font.woff2 +0 -0
- package/src/assets/fonts/gilroy/GilroyMedium/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroyMedium/font.woff2 +0 -0
- package/src/assets/fonts/gilroy/GilroyRegular/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroyRegular/font.woff2 +0 -0
- package/src/assets/fonts/gilroy/GilroySemiBold/font.woff +0 -0
- package/src/assets/fonts/gilroy/GilroySemiBold/font.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Bold.woff +0 -0
- package/src/assets/fonts/inter/Inter-Bold.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Italic.woff +0 -0
- package/src/assets/fonts/inter/Inter-Italic.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Medium.woff +0 -0
- package/src/assets/fonts/inter/Inter-Medium.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-MediumItalic.woff +0 -0
- package/src/assets/fonts/inter/Inter-MediumItalic.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Regular.woff +0 -0
- package/src/assets/fonts/inter/Inter-Regular.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-SemiBold.woff +0 -0
- package/src/assets/fonts/inter/Inter-SemiBold.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-SemiBoldItalic.woff +0 -0
- package/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 +0 -0
- package/src/assets/scss/body.scss +15 -0
- package/src/assets/svg/ChevronDownSolid.vue +19 -0
- package/src/assets/svg/ChevronDownStroke.vue +22 -0
- package/src/assets/svg/SortArrow.vue +24 -0
- package/src/assets/svg/Student.vue +30 -0
- package/src/assets/svg/partner.vue +33 -0
- package/src/assets/svg/people.vue +25 -0
- package/src/assets/vue.svg +1 -0
- package/src/components/HelloWorld.vue +999 -0
- package/src/components/accordion/EUIAccordion.stories.ts +157 -0
- package/src/components/accordion/EUIAccordion.vue +90 -0
- package/src/components/avatar/EUIAvatar.stories.ts +157 -0
- package/src/components/avatar/EUIAvatar.vue +96 -0
- package/src/components/button/EUIButton.stories.ts +252 -0
- package/src/components/button/EUIButton.vue +151 -0
- package/src/components/checkbox/EUICheckbox.stories.ts +58 -0
- package/src/components/checkbox/EUICheckbox.vue +103 -0
- package/src/components/datepicker/EUIDatepicker.stories.ts +236 -0
- package/src/components/datepicker/EUIDatepicker.vue +185 -0
- package/src/components/delete.vue +108 -0
- package/src/components/dropdown/EUIMultiDropdown.stories.ts +187 -0
- package/src/components/dropdown/EUIMultiDropdown.vue +129 -0
- package/src/components/errorMessage/EUIErrorMessage.scss +0 -0
- package/src/components/errorMessage/EUIErrorMessage.stories.ts +41 -0
- package/src/components/errorMessage/EUIErrorMessage.vue +25 -0
- package/src/components/index.ts +46 -0
- package/src/components/input/EUIInput.stories.ts +174 -0
- package/src/components/input/EUIInput.vue +169 -0
- package/src/components/inputNormal/EUIInputNormal.stories.ts +164 -0
- package/src/components/inputNormal/EUIInputNormal.vue +161 -0
- package/src/components/loader/EUICircleLoader.vue +31 -0
- package/src/components/loader/EUICubeLoader.vue +237 -0
- package/src/components/loader/EUILoader.stories.ts +99 -0
- package/src/components/loader/EUILoader.vue +17 -0
- package/src/components/loader/EUISquareLoader.vue +47 -0
- package/src/components/modal/EUIModal.stories.ts +372 -0
- package/src/components/modal/EUIModal.vue +163 -0
- package/src/components/pillSelect/EUIPillSelect.stories.ts +74 -0
- package/src/components/pillSelect/EUIPillSelect.vue +149 -0
- package/src/components/popover/EUIPopover.stories.ts +247 -0
- package/src/components/popover/EUIPopover.vue +159 -0
- package/src/components/radio/EUIRadio.stories.ts +54 -0
- package/src/components/radio/EUIRadio.vue +78 -0
- package/src/components/searchInput/EUISearch.stories.ts +24 -0
- package/src/components/searchInput/EUISearch.vue +215 -0
- package/src/components/select/EUISelect.scss +0 -0
- package/src/components/select/EUISelect.stories.ts +49 -0
- package/src/components/select/EUISelect.vue +682 -0
- package/src/components/selectSearch/EUISelectSearch.vue +23 -0
- package/src/components/slideover/EUISlideover.stories.ts +318 -0
- package/src/components/slideover/EUISlideover.vue +207 -0
- package/src/components/stepperTimeline/EUIStepperHorizontal.vue +112 -0
- package/src/components/stepperTimeline/EUIStepperTimeline.stories.ts +54 -0
- package/src/components/stepperTimeline/EUIStepperTimeline.vue +16 -0
- package/src/components/stepperTimeline/EUIStepperVertical.vue +112 -0
- package/src/components/table/EUIDashboardTable.vue +482 -0
- package/src/components/table/EUIPageLimit.vue +66 -0
- package/src/components/table/EUIPagination.vue +175 -0
- package/src/components/table/EUIStudentPagination.vue +172 -0
- package/src/components/table/EUITable.stories.ts +190 -0
- package/src/components/table/EUITable.vue +508 -0
- package/src/components/table/EUITableCheckbox.vue +97 -0
- package/src/components/tabs/EUITabs.vue +128 -0
- package/src/components/tabs/EUItabs.stories.ts +123 -0
- package/src/components/tag/EUITag.stories.ts +46 -0
- package/src/components/tag/EUITag.vue +46 -0
- package/src/components/telephone/EUITelephone.stories.ts +202 -0
- package/src/components/telephone/EUITelephone.vue +280 -0
- package/src/components/textArea/EUITextArea.stories.ts +82 -0
- package/src/components/textArea/EUITextArea.vue +122 -0
- package/src/components/timeLine/EUITimeLine.stories.ts +247 -0
- package/src/components/timeLine/EUITimeLine.vue +43 -0
- package/src/components/timeLine/EUITimeLineItem.vue +124 -0
- package/src/components/toggle/EUIToggle.stories.ts +63 -0
- package/src/components/toggle/EUIToggle.vue +99 -0
- package/src/components/tooltip/EUITooltip.stories.ts +53 -0
- package/src/components/tooltip/EUITooltip.vue +108 -0
- package/src/data/books.ts +163 -0
- package/src/data/tab.ts +33 -0
- package/src/data/table.ts +5392 -0
- package/src/main.ts +5 -0
- package/src/utils/lodash.ts +9 -0
- package/src/utils/types.ts +9 -0
- package/src/vite-env.d.ts +5 -0
- package/dist/EUISelect.vue.d.ts.map +0 -1
- package/dist/button/EUIButton.vue.d.ts.map +0 -1
- package/dist/library-vue-ts.css +0 -1
- package/dist/style.scss +0 -118
- /package/dist/{button/EUIButton.vue.d.ts → EUIButton.vue.d.ts} +0 -0
- /package/dist/{EUISelect.vue.d.ts → select/EUISelect.vue.d.ts} +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/vue3";
|
|
2
|
+
import EUISearch from "./EUISearch.vue";
|
|
3
|
+
const meta: Meta<typeof EUISearch> = {
|
|
4
|
+
title: "Example/Search",
|
|
5
|
+
component: EUISearch,
|
|
6
|
+
tags: ["autodocs"],
|
|
7
|
+
argTypes: {},
|
|
8
|
+
} satisfies Meta<typeof EUISearch>;
|
|
9
|
+
|
|
10
|
+
export default meta;
|
|
11
|
+
type Story = StoryObj<typeof meta>;
|
|
12
|
+
|
|
13
|
+
export const Default: Story = {
|
|
14
|
+
args: {},
|
|
15
|
+
render: (args) => ({
|
|
16
|
+
components: { EUISearch },
|
|
17
|
+
setup() {
|
|
18
|
+
return { args };
|
|
19
|
+
},
|
|
20
|
+
template: `<div class="min-h-72 mx-auto max-w-xl p-6 flex items-start justify-end">
|
|
21
|
+
<EUISearch v-bind="args">
|
|
22
|
+
</div>`,
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div ref="componentWrapper" class="cursor-pointer group" @click="expandInput">
|
|
3
|
+
<div class="relative max-w-96 z-[calc(infinity)]">
|
|
4
|
+
<div
|
|
5
|
+
:class="[
|
|
6
|
+
'relative flex items-center py-1 duration-300 ease-linear bg-gray-100 border border-gray-200 rounded-full pe-1 group-focus-within:ring-2 ring-purple-200 group-focus-within:border-gray-300 transition-all delay-100',
|
|
7
|
+
isExpanded ? 'group-focus-within:w-96' : 'size-[2.875rem]',
|
|
8
|
+
]"
|
|
9
|
+
>
|
|
10
|
+
<MagnifyingGlassIcon
|
|
11
|
+
class="absolute text-current size-6 top-3 left-3"
|
|
12
|
+
/>
|
|
13
|
+
<input
|
|
14
|
+
v-if="isExpanded"
|
|
15
|
+
v-model="searchQuery"
|
|
16
|
+
type="search"
|
|
17
|
+
placeholder="Search here..."
|
|
18
|
+
class="text-sm font-medium bg-transparent w-96 ps-12 pe-2 focus:outline-none"
|
|
19
|
+
autofocus="true"
|
|
20
|
+
@input="handleSearch"
|
|
21
|
+
@blur="closeDropdown"
|
|
22
|
+
@focus="showDropdownResult = true"
|
|
23
|
+
/>
|
|
24
|
+
<div
|
|
25
|
+
v-if="isExpanded"
|
|
26
|
+
ref="dropdownButton"
|
|
27
|
+
:open="isOpen"
|
|
28
|
+
class="flex items-center pl-3 pe-2 py-1.5 ml-auto bg-white cursor-pointer rounded-3xl ring-1 ring-gray-200/40 select-none transition-all duration-300 ease-in delay-100"
|
|
29
|
+
@click="toggleDropdown"
|
|
30
|
+
>
|
|
31
|
+
<div
|
|
32
|
+
class="inline-flex items-center gap-2 text-sm font-medium tracking-wide min-w-20"
|
|
33
|
+
>
|
|
34
|
+
<component :is="selectOption.icon" class="text-current size-4" />
|
|
35
|
+
{{ selectOption.title }}
|
|
36
|
+
</div>
|
|
37
|
+
<ChevronDownStroke
|
|
38
|
+
:class="[
|
|
39
|
+
'text-current size-6 transform transition-all duration-300 delay-75',
|
|
40
|
+
isOpen ? '-rotate-180 opacity-100' : 'opacity-50',
|
|
41
|
+
]"
|
|
42
|
+
/>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<ul
|
|
46
|
+
v-if="showDropdown"
|
|
47
|
+
ref="dropdown"
|
|
48
|
+
class="absolute text-sm font-medium right-0 z-50 w-40 bg-white border rounded-xl shadow-lg mt-0.5 overflow-hidden"
|
|
49
|
+
>
|
|
50
|
+
<li
|
|
51
|
+
v-for="data in dataList"
|
|
52
|
+
class="flex items-center gap-2 px-4 py-2 cursor-pointer hover:bg-gray-100"
|
|
53
|
+
@click.stop="onSelectOption(data)"
|
|
54
|
+
>
|
|
55
|
+
<component :is="data.icon" class="text-current size-4" />
|
|
56
|
+
<span>{{ data.title }}</span>
|
|
57
|
+
</li>
|
|
58
|
+
</ul>
|
|
59
|
+
|
|
60
|
+
<!-- search data -->
|
|
61
|
+
<ul
|
|
62
|
+
v-if="showDropdownResult && filteredResults.length"
|
|
63
|
+
ref="dropdown"
|
|
64
|
+
class="absolute text-sm font-medium right-0 z-40 w-full bg-white border rounded-xl shadow-lg mt-0.5 overflow-hidden"
|
|
65
|
+
@click="closeDropdown"
|
|
66
|
+
>
|
|
67
|
+
<li
|
|
68
|
+
v-for="(result, index) in filteredResults"
|
|
69
|
+
:key="index"
|
|
70
|
+
class="flex flex-col gap-1 px-4 py-2 cursor-pointer hover:bg-gray-100"
|
|
71
|
+
>
|
|
72
|
+
<div class="flex items-center gap-2">
|
|
73
|
+
<span
|
|
74
|
+
class="flex items-center justify-center w-8 h-8 rounded-full"
|
|
75
|
+
:style="{ backgroundColor: result.color }"
|
|
76
|
+
>
|
|
77
|
+
<span class="font-bold text-white">{{ result.initial }}</span>
|
|
78
|
+
</span>
|
|
79
|
+
<div class="flex flex-col">
|
|
80
|
+
<span class="font-semibold">{{ result.name }}</span>
|
|
81
|
+
<span class="text-sm text-gray-500">{{ result.email }}</span>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</li>
|
|
85
|
+
</ul>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</template>
|
|
89
|
+
|
|
90
|
+
<script lang="ts" setup>
|
|
91
|
+
import { MagnifyingGlassIcon } from "@heroicons/vue/24/solid";
|
|
92
|
+
import { createPopper } from "@popperjs/core";
|
|
93
|
+
import { computed, onBeforeUnmount, onMounted, ref } from "vue";
|
|
94
|
+
import ChevronDownStroke from "../../assets/svg/ChevronDownStroke.vue";
|
|
95
|
+
import Student from "../../assets/svg/Student.vue";
|
|
96
|
+
import Partner from "../../assets/svg/partner.vue";
|
|
97
|
+
import People from "../../assets/svg/people.vue";
|
|
98
|
+
|
|
99
|
+
const isExpanded = ref(false);
|
|
100
|
+
const dropdownButton = ref<HTMLElement | null>(null);
|
|
101
|
+
const dropdown = ref<HTMLElement | null>(null);
|
|
102
|
+
const showDropdown = ref(false);
|
|
103
|
+
const searchQuery = ref();
|
|
104
|
+
const showDropdownResult = ref(false);
|
|
105
|
+
const isOpen = ref(false);
|
|
106
|
+
const componentWrapper = ref<HTMLElement | null>(null);
|
|
107
|
+
|
|
108
|
+
function expandInput() {
|
|
109
|
+
isExpanded.value = true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function closeInput() {
|
|
113
|
+
if (!searchQuery.value && !selectOption.value) {
|
|
114
|
+
isExpanded.value = false;
|
|
115
|
+
}
|
|
116
|
+
showDropdownResult.value = false;
|
|
117
|
+
isOpen.value = false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function toggleDropdown() {
|
|
121
|
+
showDropdown.value = !showDropdown.value;
|
|
122
|
+
isOpen.value = !isOpen.value;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function closeDropdown() {
|
|
126
|
+
showDropdown.value = false;
|
|
127
|
+
isOpen.value = false;
|
|
128
|
+
closeInput();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function handleOutsideClick(event: MouseEvent) {
|
|
132
|
+
if (
|
|
133
|
+
componentWrapper.value &&
|
|
134
|
+
!componentWrapper.value.contains(event.target as Node)
|
|
135
|
+
) {
|
|
136
|
+
closeDropdown();
|
|
137
|
+
if (!searchQuery.value) {
|
|
138
|
+
isExpanded.value = false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
onMounted(() => {
|
|
144
|
+
document.addEventListener("click", handleOutsideClick);
|
|
145
|
+
if (searchQuery.value) {
|
|
146
|
+
searchQuery.value?.focus();
|
|
147
|
+
}
|
|
148
|
+
if (dropdownButton.value && dropdown.value) {
|
|
149
|
+
createPopper(dropdownButton.value, dropdown.value, {
|
|
150
|
+
placement: "bottom",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
onBeforeUnmount(() => {
|
|
156
|
+
document.removeEventListener("click", handleOutsideClick);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
const filteredResults = computed(() => {
|
|
160
|
+
return results.value.filter((result) =>
|
|
161
|
+
result.name?.toLowerCase().includes(searchQuery.value?.toLowerCase())
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
function handleSearch() {
|
|
166
|
+
if (searchQuery.value) {
|
|
167
|
+
showDropdownResult.value = true;
|
|
168
|
+
} else {
|
|
169
|
+
showDropdownResult.value = false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const dataList = ref([
|
|
174
|
+
{ title: "Student", icon: Student },
|
|
175
|
+
{ title: "People", icon: People },
|
|
176
|
+
{ title: "Partner", icon: Partner },
|
|
177
|
+
]);
|
|
178
|
+
|
|
179
|
+
const selectOption = ref(dataList.value[0]);
|
|
180
|
+
const onSelectOption = (data: any) => {
|
|
181
|
+
selectOption.value = data;
|
|
182
|
+
toggleDropdown()
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const results = ref([
|
|
186
|
+
{
|
|
187
|
+
name: "Kamal Ahmed",
|
|
188
|
+
email: "kamalahmed@gmail.com",
|
|
189
|
+
color: "green",
|
|
190
|
+
initial: "A",
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: "Kamala Koteswararoo",
|
|
194
|
+
email: "kamalkote86@gmail.com",
|
|
195
|
+
color: "purple",
|
|
196
|
+
initial: "K",
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: "Kamaljeet Kaur",
|
|
200
|
+
email: "cheemak346@gmail.com",
|
|
201
|
+
color: "orange",
|
|
202
|
+
initial: "K",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "Kamala Hamal",
|
|
206
|
+
email: "kamalahamal88@outlook.com",
|
|
207
|
+
color: "gray",
|
|
208
|
+
initial: "K",
|
|
209
|
+
},
|
|
210
|
+
]);
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
<style scoped>
|
|
214
|
+
/* Add custom styles here */
|
|
215
|
+
</style>
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/vue3";
|
|
2
|
+
import EUISelect from "./EUISelect.vue"; // Adjust the path if necessary
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: "Forms/Select",
|
|
6
|
+
component: EUISelect,
|
|
7
|
+
tags: ["autodocs"],
|
|
8
|
+
argTypes: {
|
|
9
|
+
name: {
|
|
10
|
+
control: "text",
|
|
11
|
+
description:
|
|
12
|
+
"The name of the select input field, used as a key to display the selected option or error message.",
|
|
13
|
+
},
|
|
14
|
+
items: {
|
|
15
|
+
control: "object",
|
|
16
|
+
description:
|
|
17
|
+
"Array of options to display in the select dropdown. Each option should be an object with `value` and `label` properties.",
|
|
18
|
+
},
|
|
19
|
+
modelValue: {
|
|
20
|
+
control: "text",
|
|
21
|
+
description: "The currently selected value in the select input.",
|
|
22
|
+
},
|
|
23
|
+
errors: {
|
|
24
|
+
control: "object",
|
|
25
|
+
description:
|
|
26
|
+
"Object containing validation errors where keys are field names and values are the error messages.",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
} satisfies Meta<typeof EUISelect>;
|
|
30
|
+
|
|
31
|
+
export default meta;
|
|
32
|
+
type Story = StoryObj<typeof meta>;
|
|
33
|
+
|
|
34
|
+
// Default story for EUISelect
|
|
35
|
+
export const Default: Story = {
|
|
36
|
+
args: {
|
|
37
|
+
name: "country",
|
|
38
|
+
label: "country",
|
|
39
|
+
placeholder: "country",
|
|
40
|
+
items: [
|
|
41
|
+
{ value: "usa", label: "United States", name: "United States" },
|
|
42
|
+
{ value: "canada", label: "Canada", name: "Canada" },
|
|
43
|
+
{ value: "uk", label: "United Kingdom", name: "United Kingdom" },
|
|
44
|
+
],
|
|
45
|
+
modelValue: { value: "usa", label: "United States", name: "United States" },
|
|
46
|
+
errors: {},
|
|
47
|
+
required: true,
|
|
48
|
+
},
|
|
49
|
+
};
|