From ccc857c48d181108d7e3039eec5609d5f2f7bfbd Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Sat, 25 Jul 2026 12:47:48 +0700 Subject: [PATCH] feat: add Calendar, Popover, and NativeSelect components with associated subcomponents --- app/components/ui/calendar/Calendar.vue | 162 ++++++++++++++++++ app/components/ui/calendar/CalendarCell.vue | 23 +++ .../ui/calendar/CalendarCellTrigger.vue | 39 +++++ app/components/ui/calendar/CalendarGrid.vue | 23 +++ .../ui/calendar/CalendarGridBody.vue | 15 ++ .../ui/calendar/CalendarGridHead.vue | 16 ++ .../ui/calendar/CalendarGridRow.vue | 22 +++ .../ui/calendar/CalendarHeadCell.vue | 23 +++ app/components/ui/calendar/CalendarHeader.vue | 23 +++ .../ui/calendar/CalendarHeading.vue | 30 ++++ .../ui/calendar/CalendarNextButton.vue | 31 ++++ .../ui/calendar/CalendarPrevButton.vue | 31 ++++ app/components/ui/calendar/index.ts | 14 ++ .../ui/native-select/NativeSelect.vue | 50 ++++++ .../ui/native-select/NativeSelectOptGroup.vue | 12 ++ .../ui/native-select/NativeSelectOption.vue | 12 ++ app/components/ui/native-select/index.ts | 3 + app/components/ui/popover/Popover.vue | 19 ++ app/components/ui/popover/PopoverAnchor.vue | 15 ++ app/components/ui/popover/PopoverContent.vue | 45 +++++ app/components/ui/popover/PopoverTrigger.vue | 15 ++ app/components/ui/popover/index.ts | 4 + 22 files changed, 627 insertions(+) create mode 100644 app/components/ui/calendar/Calendar.vue create mode 100644 app/components/ui/calendar/CalendarCell.vue create mode 100644 app/components/ui/calendar/CalendarCellTrigger.vue create mode 100644 app/components/ui/calendar/CalendarGrid.vue create mode 100644 app/components/ui/calendar/CalendarGridBody.vue create mode 100644 app/components/ui/calendar/CalendarGridHead.vue create mode 100644 app/components/ui/calendar/CalendarGridRow.vue create mode 100644 app/components/ui/calendar/CalendarHeadCell.vue create mode 100644 app/components/ui/calendar/CalendarHeader.vue create mode 100644 app/components/ui/calendar/CalendarHeading.vue create mode 100644 app/components/ui/calendar/CalendarNextButton.vue create mode 100644 app/components/ui/calendar/CalendarPrevButton.vue create mode 100644 app/components/ui/calendar/index.ts create mode 100644 app/components/ui/native-select/NativeSelect.vue create mode 100644 app/components/ui/native-select/NativeSelectOptGroup.vue create mode 100644 app/components/ui/native-select/NativeSelectOption.vue create mode 100644 app/components/ui/native-select/index.ts create mode 100644 app/components/ui/popover/Popover.vue create mode 100644 app/components/ui/popover/PopoverAnchor.vue create mode 100644 app/components/ui/popover/PopoverContent.vue create mode 100644 app/components/ui/popover/PopoverTrigger.vue create mode 100644 app/components/ui/popover/index.ts diff --git a/app/components/ui/calendar/Calendar.vue b/app/components/ui/calendar/Calendar.vue new file mode 100644 index 0000000..ff12462 --- /dev/null +++ b/app/components/ui/calendar/Calendar.vue @@ -0,0 +1,162 @@ + + + diff --git a/app/components/ui/calendar/CalendarCell.vue b/app/components/ui/calendar/CalendarCell.vue new file mode 100644 index 0000000..c24c48b --- /dev/null +++ b/app/components/ui/calendar/CalendarCell.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/calendar/CalendarCellTrigger.vue b/app/components/ui/calendar/CalendarCellTrigger.vue new file mode 100644 index 0000000..c99219e --- /dev/null +++ b/app/components/ui/calendar/CalendarCellTrigger.vue @@ -0,0 +1,39 @@ + + + diff --git a/app/components/ui/calendar/CalendarGrid.vue b/app/components/ui/calendar/CalendarGrid.vue new file mode 100644 index 0000000..e6dd7d6 --- /dev/null +++ b/app/components/ui/calendar/CalendarGrid.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/calendar/CalendarGridBody.vue b/app/components/ui/calendar/CalendarGridBody.vue new file mode 100644 index 0000000..3b9e716 --- /dev/null +++ b/app/components/ui/calendar/CalendarGridBody.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/calendar/CalendarGridHead.vue b/app/components/ui/calendar/CalendarGridHead.vue new file mode 100644 index 0000000..de1589b --- /dev/null +++ b/app/components/ui/calendar/CalendarGridHead.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/components/ui/calendar/CalendarGridRow.vue b/app/components/ui/calendar/CalendarGridRow.vue new file mode 100644 index 0000000..767557d --- /dev/null +++ b/app/components/ui/calendar/CalendarGridRow.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/ui/calendar/CalendarHeadCell.vue b/app/components/ui/calendar/CalendarHeadCell.vue new file mode 100644 index 0000000..47fefbc --- /dev/null +++ b/app/components/ui/calendar/CalendarHeadCell.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/calendar/CalendarHeader.vue b/app/components/ui/calendar/CalendarHeader.vue new file mode 100644 index 0000000..175118d --- /dev/null +++ b/app/components/ui/calendar/CalendarHeader.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/calendar/CalendarHeading.vue b/app/components/ui/calendar/CalendarHeading.vue new file mode 100644 index 0000000..5a11c12 --- /dev/null +++ b/app/components/ui/calendar/CalendarHeading.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/ui/calendar/CalendarNextButton.vue b/app/components/ui/calendar/CalendarNextButton.vue new file mode 100644 index 0000000..6375cc7 --- /dev/null +++ b/app/components/ui/calendar/CalendarNextButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/calendar/CalendarPrevButton.vue b/app/components/ui/calendar/CalendarPrevButton.vue new file mode 100644 index 0000000..81dc364 --- /dev/null +++ b/app/components/ui/calendar/CalendarPrevButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/calendar/index.ts b/app/components/ui/calendar/index.ts new file mode 100644 index 0000000..552c634 --- /dev/null +++ b/app/components/ui/calendar/index.ts @@ -0,0 +1,14 @@ +export { default as Calendar } from "./Calendar.vue" +export { default as CalendarCell } from "./CalendarCell.vue" +export { default as CalendarCellTrigger } from "./CalendarCellTrigger.vue" +export { default as CalendarGrid } from "./CalendarGrid.vue" +export { default as CalendarGridBody } from "./CalendarGridBody.vue" +export { default as CalendarGridHead } from "./CalendarGridHead.vue" +export { default as CalendarGridRow } from "./CalendarGridRow.vue" +export { default as CalendarHeadCell } from "./CalendarHeadCell.vue" +export { default as CalendarHeader } from "./CalendarHeader.vue" +export { default as CalendarHeading } from "./CalendarHeading.vue" +export { default as CalendarNextButton } from "./CalendarNextButton.vue" +export { default as CalendarPrevButton } from "./CalendarPrevButton.vue" + +export type LayoutTypes = "month-and-year" | "month-only" | "year-only" | undefined diff --git a/app/components/ui/native-select/NativeSelect.vue b/app/components/ui/native-select/NativeSelect.vue new file mode 100644 index 0000000..c54623c --- /dev/null +++ b/app/components/ui/native-select/NativeSelect.vue @@ -0,0 +1,50 @@ + + + diff --git a/app/components/ui/native-select/NativeSelectOptGroup.vue b/app/components/ui/native-select/NativeSelectOptGroup.vue new file mode 100644 index 0000000..d70cb6b --- /dev/null +++ b/app/components/ui/native-select/NativeSelectOptGroup.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/native-select/NativeSelectOption.vue b/app/components/ui/native-select/NativeSelectOption.vue new file mode 100644 index 0000000..5fe52c6 --- /dev/null +++ b/app/components/ui/native-select/NativeSelectOption.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/components/ui/native-select/index.ts b/app/components/ui/native-select/index.ts new file mode 100644 index 0000000..04e92c7 --- /dev/null +++ b/app/components/ui/native-select/index.ts @@ -0,0 +1,3 @@ +export { default as NativeSelect } from "./NativeSelect.vue" +export { default as NativeSelectOptGroup } from "./NativeSelectOptGroup.vue" +export { default as NativeSelectOption } from "./NativeSelectOption.vue" diff --git a/app/components/ui/popover/Popover.vue b/app/components/ui/popover/Popover.vue new file mode 100644 index 0000000..4efdb98 --- /dev/null +++ b/app/components/ui/popover/Popover.vue @@ -0,0 +1,19 @@ + + + diff --git a/app/components/ui/popover/PopoverAnchor.vue b/app/components/ui/popover/PopoverAnchor.vue new file mode 100644 index 0000000..49e01db --- /dev/null +++ b/app/components/ui/popover/PopoverAnchor.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/popover/PopoverContent.vue b/app/components/ui/popover/PopoverContent.vue new file mode 100644 index 0000000..27ebbc8 --- /dev/null +++ b/app/components/ui/popover/PopoverContent.vue @@ -0,0 +1,45 @@ + + + diff --git a/app/components/ui/popover/PopoverTrigger.vue b/app/components/ui/popover/PopoverTrigger.vue new file mode 100644 index 0000000..fd3b497 --- /dev/null +++ b/app/components/ui/popover/PopoverTrigger.vue @@ -0,0 +1,15 @@ + + + diff --git a/app/components/ui/popover/index.ts b/app/components/ui/popover/index.ts new file mode 100644 index 0000000..66edf89 --- /dev/null +++ b/app/components/ui/popover/index.ts @@ -0,0 +1,4 @@ +export { default as Popover } from "./Popover.vue" +export { default as PopoverAnchor } from "./PopoverAnchor.vue" +export { default as PopoverContent } from "./PopoverContent.vue" +export { default as PopoverTrigger } from "./PopoverTrigger.vue"