Skip to content

Commit 5f7dbdf

Browse files
committed
chore: improve datetime wip
1 parent 0063fd1 commit 5f7dbdf

34 files changed

+1462
-2273
lines changed

docs/.vitepress/theme/components/DateInputDemo.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<script setup lang="ts">
2-
import { TSInputs } from 'ts-inputs-vue'
2+
import { BaseInputs } from 'ts-inputs-vue'
33
import { ref } from 'vue'
44
55
const date = ref('')
66
</script>
77

88
<template>
9-
<TSInputs
9+
<BaseInputs
1010
v-model="date"
1111
type="date"
1212
class="block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-indigo-600 sm:text-sm/6"

packages/vue/package.json

+5-6
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,15 @@
3535
"lint": "bunx --bun eslint .",
3636
"lint:fix": "bunx --bun eslint . --fix"
3737
},
38-
"dependencies": {
39-
"@types/google.maps": "^3.58.1",
40-
"date-fns": "^3.6.0"
41-
},
4238
"devDependencies": {
43-
"@microsoft/api-extractor": "^7.52.5",
39+
"@microsoft/api-extractor": "^7.52.4",
4440
"@stacksjs/docs": "^0.70.23",
41+
"@types/google.maps": "^3.58.1",
4542
"@vue/tsconfig": "^0.7.0",
4643
"bumpp": "^10.1.0",
4744
"bun-plugin-dtsx": "^0.21.9",
48-
"changelogen": "^0.6.1"
45+
"changelogen": "^0.6.1",
46+
"clean-css": "^5.3.3",
47+
"date-fns": "^3.3.1"
4948
}
5049
}

packages/vue/src/components/TSInputs.vue renamed to packages/vue/src/components/BaseInputs.vue

+6-38
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
import type { TSInputsProps } from '../types'
33
import { format } from 'date-fns'
44
import { ref, watch } from 'vue'
5-
import DpCalendar from './datetime-picker/components/DatePicker/DpCalendar.vue'
6-
import DpHeader from './datetime-picker/components/DatePicker/DpHeader.vue'
7-
import TimePicker from './datetime-picker/components/TimePicker/TimePicker.vue'
5+
6+
import DateTimePicker from './datetime-picker/DateTimePicker.vue'
87
98
const props = defineProps<TSInputsProps>()
109
const emit = defineEmits<{
@@ -112,8 +111,9 @@ function handleTimeUpdate(value: { hours: number, minutes: number, seconds: numb
112111
</script>
113112

114113
<template>
115-
<div class="ts-inputs-wrapper">
114+
<div class="base-inputs-wrapper">
116115
<input
116+
v-if="type !== 'date'"
117117
ref="inputRef"
118118
v-model="formattedValue"
119119
:type="type === 'text' ? 'text' : 'text'"
@@ -125,45 +125,13 @@ function handleTimeUpdate(value: { hours: number, minutes: number, seconds: numb
125125
>
126126

127127
<!-- Date Picker -->
128-
<div v-if="type === 'date' && showDatePicker" class="date-picker-container">
129-
<DpHeader
130-
:month="month"
131-
:year="year"
132-
@update-month-year="handleMonthYearUpdate"
133-
/>
134-
<DpCalendar
135-
:days="[]"
136-
:month="month"
137-
:year="year"
138-
@select-date="handleDateSelect"
139-
/>
140-
<TimePicker
141-
v-if="props.enableTimePicker"
142-
:time="time"
143-
@update-time="handleTimeUpdate"
144-
/>
145-
</div>
128+
<DateTimePicker v-if="type === 'date'" :class="className" v-model="formattedValue" range />
146129
</div>
147130
</template>
148131

149132
<style>
150-
.dp__calendar {
151-
display: flex;
152-
flex-direction: column;
153-
background-color: red;
154-
}
155-
156-
.ts-inputs-wrapper {
133+
.base-inputs-wrapper {
157134
position: relative;
158135
display: inline-block;
159136
}
160-
161-
.date-picker-container {
162-
position: absolute;
163-
z-index: 1000;
164-
background: white;
165-
border: 1px solid #ccc;
166-
border-radius: 4px;
167-
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
168-
}
169137
</style>

packages/vue/src/components/common/BaseInput.vue

-117
This file was deleted.

packages/vue/src/components/datetime-picker/DateTimePicker.vue

+11-117
Original file line numberDiff line numberDiff line change
@@ -677,21 +677,6 @@ defineExpose({
677677
--dp-loader: 5px solid #1976d2;
678678
}
679679
680-
.dp__flex {
681-
display: flex;
682-
align-items: center;
683-
}
684-
685-
.dp__btn {
686-
background: none;
687-
border: none;
688-
padding: 0;
689-
margin: 0;
690-
cursor: pointer;
691-
font-family: var(--dp-font-family);
692-
color: var(--dp-text-color);
693-
}
694-
695680
.dp__main {
696681
font-family: var(--dp-font-family);
697682
user-select: none;
@@ -704,120 +689,29 @@ defineExpose({
704689
direction: var(--dp-direction, ltr);
705690
}
706691
707-
.dp__pointer {
708-
cursor: pointer;
709-
}
710-
711-
.dp__icon {
712-
stroke: currentcolor;
713-
fill: currentcolor;
714-
}
715-
716-
.dp__button {
717-
width: 100%;
718-
text-align: center;
719-
color: var(--dp-icon-color);
720-
cursor: pointer;
692+
.dp__flex_display {
721693
display: flex;
722-
align-items: center;
723-
place-content: center center;
724-
padding: var(--dp-common-padding);
725-
box-sizing: border-box;
726-
height: var(--dp-button-height);
727-
}
728-
729-
.dp__button.dp__overlay_action {
730-
position: absolute;
731-
bottom: 0;
732-
}
733-
734-
.dp__button:hover {
735-
background: var(--dp-hover-color);
736-
color: var(--dp-hover-icon-color);
737-
}
738-
739-
.dp__button svg {
740-
height: var(--dp-button-icon-height);
741-
width: auto;
742-
}
743-
744-
.dp__button_bottom {
745-
border-bottom-left-radius: var(--dp-border-radius);
746-
border-bottom-right-radius: var(--dp-border-radius);
747694
}
748695
749-
.dp__flex_display {
750-
display: flex;
696+
.dp--flex-display-collapsed {
697+
flex-direction: column;
751698
}
752699
753700
.dp__flex_display_with_input {
754701
flex-direction: column;
755702
align-items: flex-start;
756703
}
757704
758-
.dp__relative {
705+
.dp__outer_menu_wrap {
759706
position: relative;
760707
}
761708
762-
.calendar-next-enter-active,
763-
.calendar-next-leave-active,
764-
.calendar-prev-enter-active,
765-
.calendar-prev-leave-active {
766-
transition: all var(--dp-transition-timing-general) ease-out;
767-
}
768-
769-
.calendar-next-enter-from {
770-
opacity: 0;
771-
transform: translateX(var(--dp-transition-length));
772-
}
773-
774-
.calendar-next-leave-to {
775-
opacity: 0;
776-
transform: translateX(calc(var(--dp-transition-length) * -1));
777-
}
778-
779-
.calendar-prev-enter-from {
780-
opacity: 0;
781-
transform: translateX(calc(var(--dp-transition-length) * -1));
782-
}
783-
784-
.calendar-prev-leave-to {
785-
opacity: 0;
786-
transform: translateX(var(--dp-transition-length));
787-
}
788-
789-
.dp-menu-appear-bottom-enter-active,
790-
.dp-menu-appear-bottom-leave-active,
791-
.dp-menu-appear-top-enter-active,
792-
.dp-menu-appear-top-leave-active,
793-
.dp-slide-up-enter-active,
794-
.dp-slide-up-leave-active,
795-
.dp-slide-down-enter-active,
796-
.dp-slide-down-leave-active {
797-
transition: all var(--dp-animation-duration) var(--dp-transition-timing);
798-
}
799-
800-
.dp-menu-appear-top-enter-from,
801-
.dp-menu-appear-top-leave-to,
802-
.dp-slide-down-leave-to,
803-
.dp-slide-up-enter-from {
804-
opacity: 0;
805-
transform: translateY(var(--dp-transition-length));
806-
}
807-
808-
.dp-menu-appear-bottom-enter-from,
809-
.dp-menu-appear-bottom-leave-to,
810-
.dp-slide-down-leave-to,
811-
.dp-slide-up-enter-from {
812-
opacity: 0;
813-
transform: translateY(calc(var(--dp-transition-length) * -1));
814-
}
815-
816-
.dp--arrow-btn-nav {
817-
transition: var(--dp-common-transition);
818-
}
819-
820-
.dp--highlighted {
821-
background-color: var(--dp-highlight-color);
709+
.dp--menu-wrapper {
710+
position: absolute;
711+
z-index: 1000;
712+
background: var(--dp-background-color);
713+
border-radius: var(--dp-border-radius);
714+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
715+
border: 1px solid var(--dp-border-color);
822716
}
823717
</style>

0 commit comments

Comments
 (0)