diff --git a/src/components/calendar/CalendarEvent.vue b/src/components/calendar/CalendarEvent.vue index eecc0b6..1b1e22a 100644 --- a/src/components/calendar/CalendarEvent.vue +++ b/src/components/calendar/CalendarEvent.vue @@ -1,6 +1,6 @@ @@ -31,7 +31,7 @@ const { currentDate } = useCalendar()
- +
diff --git a/src/components/calendar/CalendarMenuNav.vue b/src/components/calendar/CalendarMenuNav.vue index b42b5f9..6f9fa2e 100644 --- a/src/components/calendar/CalendarMenuNav.vue +++ b/src/components/calendar/CalendarMenuNav.vue @@ -1,13 +1,13 @@ diff --git a/src/components/calendar/CalendarMenuSearch.vue b/src/components/calendar/CalendarMenuSearch.vue deleted file mode 100644 index f9d9be4..0000000 --- a/src/components/calendar/CalendarMenuSearch.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/src/components/calendar/CalendarMenuSearchResults.vue b/src/components/calendar/CalendarMenuSearchResults.vue deleted file mode 100644 index d29934b..0000000 --- a/src/components/calendar/CalendarMenuSearchResults.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/src/components/calendar/CalendarSwitch.vue b/src/components/calendar/CalendarSwitch.vue index 727e7ec..8432b47 100644 --- a/src/components/calendar/CalendarSwitch.vue +++ b/src/components/calendar/CalendarSwitch.vue @@ -7,10 +7,10 @@ import { DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' -import Button from '../ui/button/Button.vue' import { useCalendar } from '@/stores/calendar' -import { computed } from 'vue' import { PhCalendarBlank } from '@phosphor-icons/vue' +import { computed } from 'vue' +import Button from '../ui/button/Button.vue' const { currentConfig, viewTypeOptions, getViewTypeTitle, setViewType } = useCalendar() diff --git a/src/components/calendar/CalendarTile.vue b/src/components/calendar/CalendarTile.vue index 0945f58..f7184e9 100644 --- a/src/components/calendar/CalendarTile.vue +++ b/src/components/calendar/CalendarTile.vue @@ -2,9 +2,9 @@ import type { LeimDate } from '@/models/Date' import { useCalendar } from '@/stores/calendar' import { useCalendarEvents } from '@/stores/events' +import { storeToRefs } from 'pinia' import { computed } from 'vue' import CalendarEvent from './CalendarEvent.vue' -import { storeToRefs } from 'pinia' const props = defineProps<{ date: LeimDate diff --git a/src/components/calendar/Search.ts b/src/components/calendar/Search.ts new file mode 100644 index 0000000..b565e1c --- /dev/null +++ b/src/components/calendar/Search.ts @@ -0,0 +1,3 @@ +export const searchUnifier = new RegExp(/[^a-zA-Z0-9\-'']/g) + +export type SearchMode = 'characters' | 'events' | undefined diff --git a/src/components/calendar/search/CalendarSearch.vue b/src/components/calendar/search/CalendarSearch.vue new file mode 100644 index 0000000..4a0a4dd --- /dev/null +++ b/src/components/calendar/search/CalendarSearch.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/components/calendar/search/lists/SearchList.vue b/src/components/calendar/search/lists/SearchList.vue new file mode 100644 index 0000000..0a683b6 --- /dev/null +++ b/src/components/calendar/search/lists/SearchList.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/components/calendar/state/Monthly.vue b/src/components/calendar/state/Monthly.vue index 97ff335..60cceaa 100644 --- a/src/components/calendar/state/Monthly.vue +++ b/src/components/calendar/state/Monthly.vue @@ -1,9 +1,9 @@ + + diff --git a/src/components/ui/tabs/TabsContent.vue b/src/components/ui/tabs/TabsContent.vue new file mode 100644 index 0000000..475dc94 --- /dev/null +++ b/src/components/ui/tabs/TabsContent.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/ui/tabs/TabsList.vue b/src/components/ui/tabs/TabsList.vue new file mode 100644 index 0000000..4d6c7f7 --- /dev/null +++ b/src/components/ui/tabs/TabsList.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/ui/tabs/TabsTrigger.vue b/src/components/ui/tabs/TabsTrigger.vue new file mode 100644 index 0000000..79c4dc9 --- /dev/null +++ b/src/components/ui/tabs/TabsTrigger.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/ui/tabs/index.ts b/src/components/ui/tabs/index.ts new file mode 100644 index 0000000..fbea0c6 --- /dev/null +++ b/src/components/ui/tabs/index.ts @@ -0,0 +1,4 @@ +export { default as Tabs } from './Tabs.vue' +export { default as TabsTrigger } from './TabsTrigger.vue' +export { default as TabsList } from './TabsList.vue' +export { default as TabsContent } from './TabsContent.vue' diff --git a/src/components/ui/toggle-group/ToggleGroup.vue b/src/components/ui/toggle-group/ToggleGroup.vue new file mode 100644 index 0000000..3ff029e --- /dev/null +++ b/src/components/ui/toggle-group/ToggleGroup.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/components/ui/toggle-group/ToggleGroupItem.vue b/src/components/ui/toggle-group/ToggleGroupItem.vue new file mode 100644 index 0000000..af7ca39 --- /dev/null +++ b/src/components/ui/toggle-group/ToggleGroupItem.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/ui/toggle-group/index.ts b/src/components/ui/toggle-group/index.ts new file mode 100644 index 0000000..9f89ad7 --- /dev/null +++ b/src/components/ui/toggle-group/index.ts @@ -0,0 +1,2 @@ +export { default as ToggleGroup } from './ToggleGroup.vue' +export { default as ToggleGroupItem } from './ToggleGroupItem.vue' diff --git a/src/components/ui/toggle/Toggle.vue b/src/components/ui/toggle/Toggle.vue new file mode 100644 index 0000000..8092669 --- /dev/null +++ b/src/components/ui/toggle/Toggle.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/ui/toggle/index.ts b/src/components/ui/toggle/index.ts new file mode 100644 index 0000000..6eed09f --- /dev/null +++ b/src/components/ui/toggle/index.ts @@ -0,0 +1,26 @@ +import { type VariantProps, cva } from 'class-variance-authority' + +export { default as Toggle } from './Toggle.vue' + +export const toggleVariants = cva( + 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground', + { + variants: { + variant: { + default: 'bg-transparent', + outline: 'border border-input bg-transparent hover:bg-accent hover:text-accent-foreground' + }, + size: { + default: 'h-10 px-3', + sm: 'h-9 px-2.5', + lg: 'h-11 px-5' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +) + +export type ToggleVariants = VariantProps diff --git a/src/models/Characters.ts b/src/models/Characters.ts new file mode 100644 index 0000000..6373603 --- /dev/null +++ b/src/models/Characters.ts @@ -0,0 +1,12 @@ +import type { LeimDate } from './Date' + +export interface Character { + name: string + description?: string + birth?: LeimDate + death?: LeimDate +} + +export function isCharacter(object: any): object is Character { + return 'birth' in object +} diff --git a/src/models/Date.ts b/src/models/Date.ts index 6c8950a..dcad803 100644 --- a/src/models/Date.ts +++ b/src/models/Date.ts @@ -1,4 +1,4 @@ -export type LeimDate = { +export interface LeimDate { day: number month: number year: number diff --git a/src/models/Events.ts b/src/models/Events.ts new file mode 100644 index 0000000..720794e --- /dev/null +++ b/src/models/Events.ts @@ -0,0 +1,20 @@ +import type { LeimDate } from './Date' + +export interface CalendarEvent { + title: string + date: LeimDate + description?: string + category?: CalendarEventCategory +} + +export type CalendarEventCategory = + | 'birth' + | 'death' + | 'catastrophe' + | 'legal' + | 'natural-disaster' + | 'player' + +export function isCalendarEvent(object: any): object is CalendarEvent { + return 'date' in object +} diff --git a/src/stores/calendar.ts b/src/stores/calendar.ts index ba640df..4d05170 100644 --- a/src/stores/calendar.ts +++ b/src/stores/calendar.ts @@ -1,8 +1,8 @@ -import { computed, type Ref, type ComputedRef, ref } from 'vue' -import { defineStore } from 'pinia' -import { useUrlSearchParams } from '@vueuse/core' import type { LeimDate, LeimPeriod, LeimPeriodShort } from '@/models/Date' import { isDigit, isInt, isSignedInt } from '@/utils/Regex' +import { useUrlSearchParams } from '@vueuse/core' +import { defineStore } from 'pinia' +import { computed, ref, type ComputedRef, type Ref } from 'vue' type CalendarViewType = 'month' | 'year' | 'decade' | 'century' diff --git a/src/stores/characters.ts b/src/stores/characters.ts index 58d9023..f4eb0a6 100644 --- a/src/stores/characters.ts +++ b/src/stores/characters.ts @@ -1,13 +1,7 @@ +import type { Character } from '@/models/Characters' import { defineStore } from 'pinia' -import type { LeimDate } from '@/models/Date' import { computed, type ComputedRef } from 'vue' -export type Character = { - name: string - birth?: LeimDate - death?: LeimDate -} - export const useCharacters = defineStore('characters', () => { const characters: Character[] = [ // Counts of the Alliance diff --git a/src/stores/events.ts b/src/stores/events.ts index 7599a72..d505ef9 100644 --- a/src/stores/events.ts +++ b/src/stores/events.ts @@ -1,24 +1,8 @@ +import type { CalendarEvent } from '@/models/Events' import { defineStore } from 'pinia' -import { computed, watch, type Ref, ref, toRaw } from 'vue' -import { useCharacters } from './characters' - -import type { LeimDate } from '@/models/Date' +import { computed, ref, watch, type Ref } from 'vue' import { useCalendar } from './calendar' - -export type CalendarEvent = { - title: string - date: LeimDate - description?: string - category?: CalendarEventCategory -} - -export type CalendarEventCategory = - | 'birth' - | 'death' - | 'catastrophe' - | 'legal' - | 'natural-disaster' - | 'player' +import { useCharacters } from './characters' export const useCalendarEvents = defineStore('calendar-events', () => { const { currentDate, currentConfig } = useCalendar() @@ -130,5 +114,5 @@ export const useCalendarEvents = defineStore('calendar-events', () => { return allEvents.value.filter((event) => shouldEventBeDisplayed(event)) } - return { allEvents, currentEvents } + return { baseEvents, allEvents, currentEvents } })