@squirkle-ui/calendar 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +14 -2
- package/dist/styles.css +79 -0
- package/dist/types/SqCalendar.vue.d.ts +605 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/layout.d.ts +28 -0
- package/dist/vue2/index.cjs +312 -0
- package/dist/vue2/index.cjs.map +1 -0
- package/dist/vue2/index.mjs +312 -0
- package/dist/vue2/index.mjs.map +1 -0
- package/dist/vue3/index.cjs +651 -0
- package/dist/vue3/index.cjs.map +1 -0
- package/dist/vue3/index.mjs +651 -0
- package/dist/vue3/index.mjs.map +1 -0
- package/dist/vue3/styles.css +79 -0
- package/package.json +60 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/layout.ts","../../src/SqCalendar.vue","../../src/index.ts"],"sourcesContent":["/** Pure layout helpers for SqCalendar (unit-tested). */\nexport interface CalendarEvent {\n id: string | number\n title: string\n start: Date | string\n end?: Date | string\n color?: string\n allDay?: boolean\n [key: string]: unknown\n}\n\nexport interface NormEvent { ev: CalendarEvent; start: Date; end: Date }\n\nexport function normalizeEvent(ev: CalendarEvent): NormEvent {\n const start = new Date(ev.start)\n const end = ev.end ? new Date(ev.end) : new Date(start.getTime() + (ev.allDay ? 864e5 : 36e5))\n return { ev, start, end: end > start ? end : new Date(start.getTime() + 15 * 6e4) }\n}\n\nexport interface Placed extends NormEvent { col: number; cols: number; top: number; height: number }\n\n/**\n * Side-by-side layout for timed events of one day: overlapping events share the width in columns.\n * top/height are in minutes from midnight.\n */\nexport function layoutDay(events: NormEvent[], day: Date): Placed[] {\n const d0 = new Date(day.getFullYear(), day.getMonth(), day.getDate()).getTime()\n const d1 = d0 + 864e5\n const items = events\n .filter((e) => !e.ev.allDay && e.start.getTime() < d1 && e.end.getTime() > d0)\n .map((e) => ({ ...e, s: Math.max(e.start.getTime(), d0), f: Math.min(e.end.getTime(), d1) }))\n .sort((a, b) => a.s - b.s || b.f - a.f)\n const out: Placed[] = []\n let cluster: (typeof items[number] & { col: number })[] = []\n let clusterEnd = -1\n const flush = () => {\n const cols = Math.max(1, ...cluster.map((c) => c.col + 1))\n for (const c of cluster) out.push({ ev: c.ev, start: c.start, end: c.end, col: c.col, cols, top: (c.s - d0) / 6e4, height: Math.max(15, (c.f - c.s) / 6e4) })\n cluster = []\n }\n for (const it of items) {\n if (it.s >= clusterEnd && cluster.length) flush()\n const used = new Set(cluster.filter((c) => c.f > it.s).map((c) => c.col))\n let col = 0\n while (used.has(col)) col++\n cluster.push({ ...it, col })\n clusterEnd = Math.max(clusterEnd, it.f)\n }\n if (cluster.length) flush()\n return out\n}\n\nexport const eventsOnDay = (events: NormEvent[], day: Date) => {\n const d0 = new Date(day.getFullYear(), day.getMonth(), day.getDate()).getTime()\n const d1 = d0 + 864e5\n return events.filter((e) => e.start.getTime() < d1 && e.end.getTime() > d0).sort((a, b) => Number(!!b.ev.allDay) - Number(!!a.ev.allDay) || a.start.getTime() - b.start.getTime())\n}\n","<template>\n <div class=\"sq-calendar sq-surface\" :style=\"{ '--sq-r': 'var(--sq-radius-xl)', '--sq-bg': 'var(--sq-surface)', '--sq-bd': 'var(--sq-border)', '--sq-bw': '1px' }\">\n <SqShape clip />\n <div class=\"sq-calendar__toolbar\">\n <SqBtn variant=\"tonal\" size=\"small\" @click=\"today\">{{ messages.today }}</SqBtn>\n <SqBtn icon=\"chevronLeft\" variant=\"text\" color=\"surface\" size=\"small\" :aria-label=\"messages.previous\" @click=\"shift(-1)\" />\n <SqBtn icon=\"chevronRight\" variant=\"text\" color=\"surface\" size=\"small\" :aria-label=\"messages.next\" @click=\"shift(1)\" />\n <div class=\"sq-calendar__title\">{{ title }}</div>\n <span class=\"sq-spacer\"></span>\n <SqBtnToggle v-model=\"viewModel\" mandatory>\n <SqBtn v-for=\"v in views\" :key=\"v\" :value=\"v\" size=\"small\" variant=\"text\" color=\"surface\">{{ viewLabels[v] }}</SqBtn>\n </SqBtnToggle>\n </div>\n\n <!-- month -->\n <div v-if=\"viewModel === 'month'\" class=\"sq-calendar__month\">\n <div v-for=\"(w, wi) in weekdays\" :key=\"wi\" class=\"sq-calendar__weekday\">{{ w }}</div>\n <div\n v-for=\"d in monthDays\"\n :key=\"d.key\"\n class=\"sq-calendar__day\"\n :class=\"{ 'sq-calendar__day--outside': !d.inMonth, 'sq-calendar__day--today': d.today, 'sq-calendar__day--drop': dropKey === d.key }\"\n @click=\"$emit('click:date', d.key)\"\n @dragover.prevent=\"dropKey = d.key\"\n @dragleave=\"dropKey === d.key && (dropKey = '')\"\n @drop.prevent=\"onMonthDrop(d.date)\"\n >\n <span class=\"sq-calendar__date sq-squircle\">{{ d.date.getDate() }}</span>\n <div\n v-for=\"e in d.events.slice(0, maxEvents)\"\n :key=\"String(e.ev.id)\"\n class=\"sq-calendar__chip sq-squircle\"\n :class=\"{ 'sq-calendar__chip--allday': e.ev.allDay }\"\n :style=\"{ '--sq-ev': colorOf(e.ev) }\"\n :draggable=\"editable\"\n :title=\"e.ev.title\"\n @dragstart=\"dragId = e.ev.id\"\n @click.stop=\"$emit('click:event', e.ev)\"\n >\n <span v-if=\"!e.ev.allDay\" class=\"sq-calendar__chip-time\">{{ time(e.start) }}</span>{{ e.ev.title }}\n </div>\n <button v-if=\"d.events.length > maxEvents\" type=\"button\" class=\"sq-calendar__more\" @click.stop=\"goDay(d.date)\">+{{ d.events.length - maxEvents }} more</button>\n </div>\n </div>\n\n <!-- week / day -->\n <div v-else class=\"sq-calendar__time\" :style=\"{ '--sq-cal-cols': columns.length }\">\n <div class=\"sq-calendar__time-head\">\n <div class=\"sq-calendar__gutter\"></div>\n <div v-for=\"c in columns\" :key=\"c.key\" class=\"sq-calendar__col-head\" :class=\"{ 'sq-calendar__col-head--today': c.today }\">\n <span>{{ c.weekday }}</span><b class=\"sq-squircle\">{{ c.date.getDate() }}</b>\n </div>\n </div>\n <div class=\"sq-calendar__allday\">\n <div class=\"sq-calendar__gutter\">all-day</div>\n <div v-for=\"c in columns\" :key=\"c.key\" class=\"sq-calendar__allday-col\">\n <div v-for=\"e in c.allDay\" :key=\"String(e.ev.id)\" class=\"sq-calendar__chip sq-calendar__chip--allday sq-squircle\" :style=\"{ '--sq-ev': colorOf(e.ev) }\" @click=\"$emit('click:event', e.ev)\">{{ e.ev.title }}</div>\n </div>\n </div>\n <div ref=\"scroller\" class=\"sq-calendar__scroll\" :style=\"{ height: toUnit(height) }\">\n <div class=\"sq-calendar__grid\" :style=\"{ height: 24 * hourHeight + 'px' }\">\n <div class=\"sq-calendar__gutter sq-calendar__hours\">\n <div v-for=\"h in 24\" :key=\"h\" class=\"sq-calendar__hour\" :style=\"{ height: hourHeight + 'px' }\"><span v-if=\"h > 1\">{{ hourLabel(h - 1) }}</span></div>\n </div>\n <div v-for=\"c in columns\" :key=\"c.key\" class=\"sq-calendar__col\" @click=\"onSlotClick($event, c.date)\">\n <div v-for=\"h in 24\" :key=\"h\" class=\"sq-calendar__slot\" :style=\"{ height: hourHeight + 'px' }\"></div>\n <div v-if=\"c.today\" class=\"sq-calendar__now\" :style=\"{ top: nowTop + 'px' }\"></div>\n <div\n v-for=\"p in c.placed\"\n :key=\"String(p.ev.id)\"\n class=\"sq-calendar__event sq-squircle\"\n :class=\"{ 'sq-calendar__event--dragging': dragState && dragState.id === p.ev.id }\"\n :style=\"eventStyle(p)\"\n @pointerdown.stop=\"startDrag($event, p, 'move')\"\n @click.stop=\"!moved && $emit('click:event', p.ev)\"\n >\n <div class=\"sq-calendar__event-title\">{{ p.ev.title }}</div>\n <div class=\"sq-calendar__event-time\">{{ time(previewStart(p)) }} – {{ time(previewEnd(p)) }}</div>\n <div v-if=\"editable\" class=\"sq-calendar__resize\" @pointerdown.stop=\"startDrag($event, p, 'resize')\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, ref, watch, type PropType } from 'vue'\nimport { addDays, addMonths, isSameDay, isSameMonth, monthGrid, startOfWeek, toISODate, toUnit, weekdayNames } from '@squirkle-ui/core'\nimport { SqBtn, SqBtnToggle, SqShape, colorValue, config, useProxiedModel, vModel } from '@squirkle-ui/ui'\nimport { eventsOnDay, layoutDay, normalizeEvent, type CalendarEvent, type Placed } from './layout'\n\ntype View = 'month' | 'week' | 'day'\n\n/** Event calendar: month / week / day views, overlapping-event layout, drag to move & resize (editable). */\nexport default defineComponent({\n name: 'SqCalendar',\n components: { SqBtn, SqBtnToggle, SqShape },\n model: vModel,\n props: {\n /** Focused date (ISO `YYYY-MM-DD`). */\n modelValue: { type: String, default: undefined },\n view: { type: String as PropType<View>, default: 'month' },\n views: { type: Array as PropType<View[]>, default: () => ['month', 'week', 'day'] },\n events: { type: Array as PropType<CalendarEvent[]>, default: () => [] },\n firstDayOfWeek: { type: Number, default: 0 },\n editable: Boolean,\n /** Minutes the drag snaps to. */\n snap: { type: Number, default: 15 },\n hourHeight: { type: Number, default: 48 },\n height: { type: [Number, String], default: 560 },\n maxEvents: { type: Number, default: 3 },\n locale: { type: String, default: undefined },\n hour12: { type: Boolean, default: undefined },\n },\n emits: ['update:modelValue', 'update:view', 'click:event', 'click:date', 'click:time', 'event-change'],\n setup(props, { emit }) {\n const dateModel = useProxiedModel<string | undefined>(props, emit, 'modelValue', () => toISODate(new Date()))\n const viewModel = useProxiedModel<View>(props, emit, 'view')\n const loc = computed(() => props.locale ?? config.locale.code)\n const focus = computed(() => {\n const [y, m, d] = (dateModel.value ?? toISODate(new Date())).split('-').map(Number)\n return new Date(y, m - 1, d)\n })\n const norm = computed(() => props.events.map(normalizeEvent))\n const weekdays = computed(() => weekdayNames(loc.value, props.firstDayOfWeek, 'short'))\n const viewLabels: Record<View, string> = { month: 'Month', week: 'Week', day: 'Day' }\n const now = ref(new Date())\n // Started on mount so server rendering never creates a timer.\n let timer: ReturnType<typeof setInterval> | undefined\n onMounted(() => (timer = setInterval(() => (now.value = new Date()), 60_000)))\n onBeforeUnmount(() => clearInterval(timer))\n\n const title = computed(() => {\n const f = focus.value\n if (viewModel.value === 'day') return new Intl.DateTimeFormat(loc.value, { dateStyle: 'full' }).format(f)\n if (viewModel.value === 'week') {\n const a = startOfWeek(f, props.firstDayOfWeek)\n const b = addDays(a, 6)\n const fmt = new Intl.DateTimeFormat(loc.value, { month: 'short', day: 'numeric' })\n return `${fmt.format(a)} – ${fmt.format(b)}, ${b.getFullYear()}`\n }\n return new Intl.DateTimeFormat(loc.value, { month: 'long', year: 'numeric' }).format(f)\n })\n const monthDays = computed(() =>\n monthGrid(focus.value, props.firstDayOfWeek).map((date) => ({ date, key: toISODate(date), inMonth: isSameMonth(date, focus.value), today: isSameDay(date, now.value), events: eventsOnDay(norm.value, date) })),\n )\n const columns = computed(() => {\n const start = viewModel.value === 'day' ? focus.value : startOfWeek(focus.value, props.firstDayOfWeek)\n const count = viewModel.value === 'day' ? 1 : 7\n const wfmt = new Intl.DateTimeFormat(loc.value, { weekday: 'short' })\n return Array.from({ length: count }, (_, i) => {\n const date = addDays(start, i)\n return { date, key: toISODate(date), weekday: wfmt.format(date), today: isSameDay(date, now.value), placed: layoutDay(norm.value, date), allDay: eventsOnDay(norm.value, date).filter((e) => e.ev.allDay) }\n })\n })\n\n const shift = (d: number) => {\n const f = focus.value\n dateModel.value = toISODate(viewModel.value === 'month' ? addMonths(f, d) : addDays(f, d * (viewModel.value === 'week' ? 7 : 1)))\n }\n const today = () => (dateModel.value = toISODate(new Date()))\n const goDay = (d: Date) => { dateModel.value = toISODate(d); viewModel.value = 'day' }\n const colorOf = (ev: CalendarEvent) => colorValue(ev.color ?? 'primary')\n const time = (d: Date) => new Intl.DateTimeFormat(loc.value, { hour: 'numeric', minute: '2-digit', hour12: props.hour12 }).format(d)\n const hourLabel = (h: number) => new Intl.DateTimeFormat(loc.value, { hour: 'numeric', hour12: props.hour12 }).format(new Date(2024, 0, 1, h))\n const nowTop = computed(() => ((now.value.getHours() * 60 + now.value.getMinutes()) / 60) * props.hourHeight)\n\n // month drag (HTML5)\n const dragId = ref<string | number | null>(null)\n const dropKey = ref('')\n const onMonthDrop = (date: Date) => {\n dropKey.value = ''\n const e = norm.value.find((x) => x.ev.id === dragId.value)\n dragId.value = null\n if (!e || !props.editable) return\n const delta = Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(e.start.getFullYear(), e.start.getMonth(), e.start.getDate()).getTime()) / 864e5)\n if (delta) emit('event-change', { event: e.ev, start: addDays(e.start, delta), end: addDays(e.end, delta) })\n }\n\n // week/day pointer drag\n const scroller = ref<HTMLElement | null>(null)\n const dragState = ref<{ id: string | number; mode: 'move' | 'resize'; dMin: number; dDay: number } | null>(null)\n const moved = ref(false)\n let origin = { x: 0, y: 0, colWidth: 1, placed: null as Placed | null }\n const snapMin = (m: number) => Math.round(m / props.snap) * props.snap\n const onDragMove = (e: PointerEvent) => {\n if (!dragState.value) return\n const dy = e.clientY - origin.y\n const dx = e.clientX - origin.x\n if (Math.abs(dy) + Math.abs(dx) > 4) moved.value = true\n dragState.value = { ...dragState.value, dMin: snapMin((dy / props.hourHeight) * 60), dDay: dragState.value.mode === 'move' ? Math.round(dx / origin.colWidth) : 0 }\n }\n const onDragEnd = () => {\n window.removeEventListener('pointermove', onDragMove)\n window.removeEventListener('pointerup', onDragEnd)\n const s = dragState.value\n const p = origin.placed\n dragState.value = null\n if (!s || !p || !moved.value) return\n const start = new Date(p.start.getTime() + (s.mode === 'move' ? s.dMin * 6e4 : 0) + s.dDay * 864e5)\n const end = new Date(p.end.getTime() + s.dMin * 6e4 + s.dDay * 864e5)\n if (end > start) emit('event-change', { event: p.ev, start, end })\n setTimeout(() => (moved.value = false), 0)\n }\n const startDrag = (e: PointerEvent, p: Placed, mode: 'move' | 'resize') => {\n if (!props.editable || e.button !== 0) return\n const col = (e.currentTarget as HTMLElement).closest('.sq-calendar__col') as HTMLElement\n origin = { x: e.clientX, y: e.clientY, colWidth: col?.offsetWidth || 1, placed: p }\n moved.value = false\n dragState.value = { id: p.ev.id, mode, dMin: 0, dDay: 0 }\n window.addEventListener('pointermove', onDragMove)\n window.addEventListener('pointerup', onDragEnd)\n }\n onBeforeUnmount(onDragEnd)\n const previewStart = (p: Placed) => (dragState.value?.id === p.ev.id && dragState.value.mode === 'move' ? new Date(p.start.getTime() + dragState.value.dMin * 6e4) : p.start)\n const previewEnd = (p: Placed) => (dragState.value?.id === p.ev.id ? new Date(p.end.getTime() + dragState.value.dMin * 6e4) : p.end)\n const eventStyle = (p: Placed) => {\n const ds = dragState.value?.id === p.ev.id ? dragState.value : null\n const top = (p.top + (ds && ds.mode === 'move' ? ds.dMin : 0)) / 60 * props.hourHeight\n const height = Math.max(18, ((p.height + (ds && ds.mode === 'resize' ? ds.dMin : 0)) / 60) * props.hourHeight - 2)\n return {\n top: `${top}px`, height: `${height}px`,\n left: `calc(${(p.col / p.cols) * 100}% + 2px)`, width: `calc(${100 / p.cols}% - 4px)`,\n transform: ds && ds.dDay ? `translateX(${ds.dDay * 100}%)` : undefined,\n '--sq-ev': colorOf(p.ev),\n }\n }\n const onSlotClick = (e: MouseEvent, date: Date) => {\n const col = e.currentTarget as HTMLElement\n const minutes = snapMin(((e.clientY - col.getBoundingClientRect().top) / props.hourHeight) * 60)\n emit('click:time', new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, minutes))\n }\n const scrollToNow = () => nextTick(() => scroller.value && (scroller.value.scrollTop = Math.max(0, nowTop.value - 120)))\n onMounted(scrollToNow)\n watch(viewModel, (v) => v !== 'month' && scrollToNow())\n\n return {\n viewModel, viewLabels, weekdays, title, monthDays, columns, shift, today, goDay, colorOf, time, hourLabel, nowTop, dragId, dropKey, onMonthDrop,\n scroller, dragState, moved, startDrag, previewStart, previewEnd, eventStyle, onSlotClick, toUnit, messages: computed(() => config.locale.messages),\n }\n },\n})\n</script>\n\n<style>\n.sq-calendar { display: flex; flex-direction: column; overflow: hidden; color: var(--sq-on-surface); font-size: var(--sq-text-sm); min-width: 0; }\n.sq-calendar__toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sq-space-2); padding: var(--sq-space-3); border-bottom: 1px solid var(--sq-border); }\n.sq-calendar__title { font-size: var(--sq-text-lg); font-weight: var(--sq-weight-semibold); margin-inline-start: var(--sq-space-2); text-transform: capitalize; }\n.sq-calendar__month { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); grid-template-rows: auto; grid-auto-rows: minmax(104px, 1fr); }\n.sq-calendar__weekday { padding: 8px; text-align: center; font-size: var(--sq-text-2xs); font-weight: var(--sq-weight-bold); text-transform: uppercase; letter-spacing: 0.05em; color: var(--sq-muted); border-bottom: 1px solid var(--sq-border); min-height: 0; }\n.sq-calendar__month > .sq-calendar__weekday { grid-row: 1; }\n.sq-calendar__day { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: 4px; border-inline-end: 1px solid var(--sq-border); border-bottom: 1px solid var(--sq-border); cursor: pointer; transition: background var(--sq-duration-fast); }\n.sq-calendar__day:nth-child(7n) { border-inline-end: 0; }\n.sq-calendar__day:hover { background: color-mix(in srgb, var(--sq-primary) 3%, transparent); }\n.sq-calendar__day--outside { background: color-mix(in srgb, var(--sq-surface-variant) 40%, transparent); color: var(--sq-muted); }\n.sq-calendar__day--drop { background: color-mix(in srgb, var(--sq-primary) 10%, transparent) !important; }\n.sq-calendar__date { --sq-r: var(--sq-radius-sm); align-self: flex-end; display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 26px; font-weight: var(--sq-weight-medium); font-variant-numeric: tabular-nums; }\n.sq-calendar__day--today .sq-calendar__date { background: var(--sq-primary); color: var(--sq-on-primary); }\n.sq-calendar__chip { --sq-r: var(--sq-radius-xs); display: block; padding: 2px 6px; font-size: var(--sq-text-xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--sq-on-surface); background: color-mix(in srgb, var(--sq-ev) 14%, transparent); border-inline-start: 3px solid var(--sq-ev); cursor: pointer; }\n.sq-calendar__chip--allday { background: var(--sq-ev); color: #fff; border: 0; }\n.sq-calendar__chip-time { margin-inline-end: 4px; color: var(--sq-muted); font-variant-numeric: tabular-nums; }\n.sq-calendar__more { align-self: flex-start; padding: 0 6px; border: 0; background: none; color: var(--sq-primary); font: inherit; font-size: var(--sq-text-xs); font-weight: var(--sq-weight-semibold); cursor: pointer; }\n.sq-calendar__time-head, .sq-calendar__allday { display: grid; grid-template-columns: 56px repeat(var(--sq-cal-cols), minmax(0, 1fr)); border-bottom: 1px solid var(--sq-border); }\n.sq-calendar__col-head { display: flex; flex-direction: column; align-items: center; padding: 6px 0; font-size: var(--sq-text-2xs); color: var(--sq-muted); text-transform: uppercase; }\n.sq-calendar__col-head b { --sq-r: var(--sq-radius-sm); display: inline-flex; align-items: center; justify-content: center; min-width: 32px; height: 32px; font-size: var(--sq-text-lg); color: var(--sq-on-surface); }\n.sq-calendar__col-head--today b { background: var(--sq-primary); color: var(--sq-on-primary); }\n.sq-calendar__gutter { font-size: var(--sq-text-2xs); color: var(--sq-muted); text-align: end; padding-inline-end: 8px; }\n.sq-calendar__allday .sq-calendar__gutter { padding-top: 6px; }\n.sq-calendar__allday-col { display: flex; flex-direction: column; gap: 2px; padding: 3px; min-height: 28px; border-inline-start: 1px solid var(--sq-border); }\n.sq-calendar__scroll { overflow-y: auto; }\n.sq-calendar__grid { display: grid; grid-template-columns: 56px repeat(var(--sq-cal-cols), minmax(0, 1fr)); position: relative; }\n.sq-calendar__hour { position: relative; }\n.sq-calendar__hour span { position: absolute; top: -7px; right: 8px; }\n.sq-calendar__col { position: relative; border-inline-start: 1px solid var(--sq-border); }\n.sq-calendar__slot { border-bottom: 1px solid var(--sq-border); }\n.sq-calendar__slot:nth-child(odd) { border-bottom-style: solid; }\n.sq-calendar__now { position: absolute; left: 0; right: 0; height: 2px; background: var(--sq-error); z-index: 3; }\n.sq-calendar__now::before { content: ''; position: absolute; left: -5px; top: -4px; width: 10px; height: 10px; border-radius: 50%; background: var(--sq-error); }\n.sq-calendar__event { --sq-r: var(--sq-radius-sm); position: absolute; z-index: 2; overflow: hidden; padding: 4px 6px; background: color-mix(in srgb, var(--sq-ev) 18%, var(--sq-surface)); border-inline-start: 3px solid var(--sq-ev); color: var(--sq-on-surface); font-size: var(--sq-text-xs); cursor: pointer; touch-action: none; transition: box-shadow var(--sq-duration-fast); }\n.sq-calendar__event:hover { box-shadow: var(--sq-elevation-2); z-index: 4; }\n.sq-calendar__event--dragging { opacity: 0.85; box-shadow: var(--sq-elevation-3); z-index: 5; cursor: grabbing; }\n.sq-calendar__event-title { font-weight: var(--sq-weight-semibold); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.sq-calendar__event-time { color: var(--sq-on-surface-variant); font-variant-numeric: tabular-nums; }\n.sq-calendar__resize { position: absolute; left: 0; right: 0; bottom: 0; height: 6px; cursor: ns-resize; }\n</style>\n","import SqCalendar from './SqCalendar.vue'\n\nexport { SqCalendar }\nexport * from './layout'\nexport const componentNames = ['SqCalendar'] as const\nexport default SqCalendar\n"],"names":["defineComponent","SqBtn","SqBtnToggle","SqShape","vModel","useProxiedModel","toISODate","computed","config","weekdayNames","ref","onMounted","onBeforeUnmount","startOfWeek","addDays","monthGrid","isSameMonth","isSameDay","addMonths","colorValue","nextTick","watch","toUnit","_openBlock","_createElementBlock","_createVNode","_createElementVNode","_createTextVNode","_toDisplayString","_Fragment","_renderList","_createBlock","_createCommentVNode","_normalizeClass","_withModifiers","_normalizeStyle"],"mappings":"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"}
|