@object-ui/plugin-calendar 5.3.2 → 5.4.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @object-ui/plugin-calendar
2
2
 
3
+ ## 5.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - @object-ui/types@5.4.1
8
+ - @object-ui/core@5.4.1
9
+ - @object-ui/i18n@5.4.1
10
+ - @object-ui/react@5.4.1
11
+ - @object-ui/components@5.4.1
12
+ - @object-ui/fields@5.4.1
13
+ - @object-ui/mobile@5.4.1
14
+ - @object-ui/plugin-detail@5.4.1
15
+
16
+ ## 5.4.0
17
+
18
+ ### Patch Changes
19
+
20
+ - Updated dependencies [3a8c754]
21
+ - @object-ui/types@5.4.0
22
+ - @object-ui/components@5.4.0
23
+ - @object-ui/core@5.4.0
24
+ - @object-ui/fields@5.4.0
25
+ - @object-ui/mobile@5.4.0
26
+ - @object-ui/plugin-detail@5.4.0
27
+ - @object-ui/react@5.4.0
28
+ - @object-ui/i18n@5.4.0
29
+
3
30
  ## 5.3.2
4
31
 
5
32
  ### Patch Changes
package/dist/index.js CHANGED
@@ -165,9 +165,9 @@ function ce({ events: t = [], view: n = "month", currentDate: r = ae, locale: i
165
165
  onSelect: (e) => {
166
166
  e && (C(e), c?.(e));
167
167
  },
168
- initialFocus: !0,
169
- fromYear: 2e3,
170
- toYear: 2050
168
+ autoFocus: !0,
169
+ startMonth: new Date(2e3, 0),
170
+ endMonth: new Date(2050, 11)
171
171
  })
172
172
  })] })]
173
173
  }), /* @__PURE__ */ L("div", {
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`react`),require(`@object-ui/core`),require(`@object-ui/react`),require(`lucide-react`),require(`@object-ui/components`),require(`@object-ui/i18n`),require(`react/jsx-runtime`),require(`@object-ui/mobile`),require(`@object-ui/plugin-detail`)):typeof define==`function`&&define.amd?define([`exports`,`react`,`@object-ui/core`,`@object-ui/react`,`lucide-react`,`@object-ui/components`,`@object-ui/i18n`,`react/jsx-runtime`,`@object-ui/mobile`,`@object-ui/plugin-detail`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.ObjectUIPluginCalendar={},e.React,e.ObjectUICore,e.ObjectUIReact,e.LucideReact,e.ObjectUIComponents,e._object_ui_i18n,e.react_jsx_runtime,e._object_ui_mobile,e._object_ui_plugin_detail))})(this,function(e,t,n,r,i,a,o,s,c,l){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var u=Object.create,d=Object.defineProperty,f=Object.getOwnPropertyDescriptor,p=Object.getOwnPropertyNames,m=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,g=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=p(t),a=0,o=i.length,s;a<o;a++)s=i[a],!h.call(e,s)&&s!==n&&d(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=f(t,s))||r.enumerable});return e};t=((e,t,n)=>(n=e==null?{}:u(m(e)),g(t||!e||!e.__esModule?d(n,`default`,{value:e,enumerable:!0}):n,e)))(t,1);var _=`bg-blue-100 text-blue-900 border border-blue-200`,v=new Date,y=[`bg-blue-100 text-blue-900 border border-blue-200`,`bg-emerald-100 text-emerald-900 border border-emerald-200`,`bg-amber-100 text-amber-900 border border-amber-200`,`bg-rose-100 text-rose-900 border border-rose-200`,`bg-violet-100 text-violet-900 border border-violet-200`,`bg-cyan-100 text-cyan-900 border border-cyan-200`,`bg-orange-100 text-orange-900 border border-orange-200`,`bg-fuchsia-100 text-fuchsia-900 border border-fuchsia-200`],b=/^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i,x=/(^|\s)(bg|text|from|to|via)-/;function S(e){if(!e)return{className:_};if(b.test(e))return{className:`text-white`,inlineColor:e};if(x.test(e))return{className:e};let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return{className:y[Math.abs(t)%y.length]}}var C={"calendar.today":`Today`,"calendar.month":`Month`,"calendar.week":`Week`,"calendar.day":`Day`,"calendar.newEvent":`New event`,"calendar.moreEvents":`+{{count}} more`,"calendar.allDay":`all-day`};function w(){try{let e=(0,o.useObjectTranslation)();return e.t(`calendar.today`)===`calendar.today`?{t:(e,t)=>{let n=C[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n},language:`en`}:{t:e.t,language:e.language}}catch{return{t:(e,t)=>{let n=C[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n},language:`en`}}}function T({events:e=[],view:n=`month`,currentDate:r=v,locale:o=`default`,onEventClick:c,onDateClick:l,onViewChange:u,onNavigate:d,onAddClick:f,onEventDrop:p,onTimeRangeSelect:m,slotMinutes:h=30,className:g}){let[_,y]=t.useState(n),[b,x]=t.useState(r),{t:S,language:C}=w(),T=o===`default`?C:o;t.useEffect(()=>{x(r)},[r]),t.useEffect(()=>{y(n)},[n]);let D=t.useRef(u);D.current=u,t.useEffect(()=>{let e=window.matchMedia(`(max-width: 639px)`),t=e=>{e.matches&&(y(`day`),D.current?.(`day`))};return t(e),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let O=()=>{let e=new Date(b);_===`month`?e.setMonth(e.getMonth()-1):_===`week`?e.setDate(e.getDate()-7):e.setDate(e.getDate()-1),x(e),d?.(e)},A=()=>{let e=new Date(b);_===`month`?e.setMonth(e.getMonth()+1):_===`week`?e.setDate(e.getDate()+7):e.setDate(e.getDate()+1),x(e),d?.(e)},j=()=>{let e=new Date;x(e),d?.(e)},M=e=>{y(e),u?.(e)},N=()=>{if(_===`month`)return b.toLocaleDateString(T,{month:`long`,year:`numeric`});if(_===`week`){let e=E(b),t=new Date(e);return t.setDate(t.getDate()+6),`${e.toLocaleDateString(T,{month:`short`,day:`numeric`})} - ${t.toLocaleDateString(T,{month:`short`,day:`numeric`,year:`numeric`})}`}else return b.toLocaleDateString(T,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`})},F=t.useRef(0);return(0,s.jsxs)(`div`,{role:`region`,"aria-label":`Calendar`,className:(0,a.cn)(`flex flex-col h-full bg-background min-w-0 overflow-hidden`,g),children:[(0,s.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 p-2 sm:p-4 border-b min-w-0`,children:[(0,s.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,s.jsxs)(`div`,{className:`flex items-center bg-muted/50 rounded-lg p-1 gap-1`,children:[(0,s.jsx)(a.Button,{variant:`ghost`,size:`sm`,onClick:j,className:`h-8`,"aria-label":`Go to today`,children:S(`calendar.today`)}),(0,s.jsx)(`div`,{className:`h-4 w-px bg-border mx-1`}),(0,s.jsx)(a.Button,{variant:`ghost`,size:`icon`,"aria-label":`Previous period`,onClick:O,className:`h-8 w-8`,children:(0,s.jsx)(i.ChevronLeftIcon,{className:`h-4 w-4`})}),(0,s.jsx)(a.Button,{variant:`ghost`,size:`icon`,"aria-label":`Next period`,onClick:A,className:`h-8 w-8`,children:(0,s.jsx)(i.ChevronRightIcon,{className:`h-4 w-4`})})]}),(0,s.jsxs)(a.Popover,{children:[(0,s.jsx)(a.PopoverTrigger,{asChild:!0,children:(0,s.jsxs)(a.Button,{variant:`ghost`,"aria-label":`Current date: ${N()}`,className:(0,a.cn)(`text-base sm:text-xl font-semibold h-auto px-2 sm:px-3 py-1 hover:bg-muted/50 transition-colors`,`flex items-center gap-2`),children:[(0,s.jsx)(i.CalendarIcon,{className:`h-5 w-5 text-muted-foreground`}),(0,s.jsx)(`span`,{children:N()})]})}),(0,s.jsx)(a.PopoverContent,{className:`w-auto p-0`,align:`start`,children:(0,s.jsx)(a.Calendar,{mode:`single`,selected:b,onSelect:e=>{e&&(x(e),d?.(e))},initialFocus:!0,fromYear:2e3,toYear:2050})})]})]}),(0,s.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,s.jsxs)(a.Select,{value:_,onValueChange:M,children:[(0,s.jsx)(a.SelectTrigger,{className:`w-32 bg-background`,children:(0,s.jsx)(a.SelectValue,{})}),(0,s.jsxs)(a.SelectContent,{children:[(0,s.jsx)(a.SelectItem,{value:`day`,children:S(`calendar.day`)}),(0,s.jsx)(a.SelectItem,{value:`week`,children:S(`calendar.week`)}),(0,s.jsx)(a.SelectItem,{value:`month`,children:S(`calendar.month`)})]})]}),f&&(0,s.jsxs)(a.Button,{onClick:f,size:`sm`,className:`gap-1`,children:[(0,s.jsx)(i.PlusIcon,{className:`h-4 w-4`}),S(`calendar.newEvent`)]})]})]}),(0,s.jsxs)(`div`,{className:`flex-1 overflow-auto`,onTouchStart:e=>{F.current=e.touches[0].clientX},onTouchEnd:e=>{let t=F.current-e.changedTouches[0].clientX;if(Math.abs(t)>50){let e=new Date(b);_===`day`?e.setDate(e.getDate()+(t>0?1:-1)):_===`week`?e.setDate(e.getDate()+(t>0?7:-7)):e.setMonth(e.getMonth()+(t>0?1:-1)),x(e),d?.(e)}},children:[_===`month`&&(0,s.jsx)(k,{date:b,events:e,locale:T,onEventClick:c,onDateClick:l,onEventDrop:p}),_===`week`&&(0,s.jsx)(P,{mode:`week`,date:b,events:e,locale:T,slotMinutes:h,onEventClick:c,onEventDrop:p,onTimeRangeSelect:m}),_===`day`&&(0,s.jsx)(P,{mode:`day`,date:b,events:e,locale:T,slotMinutes:h,onEventClick:c,onEventDrop:p,onTimeRangeSelect:m})]})]})}function E(e){let t=new Date(e),n=t.getDay(),r=t.getDate()-n;return t.setDate(r),t}function D(e){let t=e.getFullYear(),n=e.getMonth(),r=new Date(t,n,1),i=new Date(t,n+1,0),a=r.getDay(),o=[];for(let e=a-1;e>=0;e--){let t=new Date(r.getTime());t.setDate(t.getDate()-(e+1)),o.push(t)}for(let e=1;e<=i.getDate();e++)o.push(new Date(t,n,e));let s=42-o.length;for(let e=1;e<=s;e++){let t=new Date(i.getTime());t.setDate(t.getDate()+e),o.push(t)}return o}function O(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function k({date:e,events:n,locale:r=`default`,onEventClick:i,onDateClick:o,onEventDrop:c}){let l=t.useMemo(()=>D(e),[e.getFullYear(),e.getMonth()]),u=t.useMemo(()=>new Date,[]),{t:d}=w(),f=t.useMemo(()=>{let e=new Date(2024,0,7);return Array.from({length:7},(t,n)=>{let i=new Date(e);return i.setDate(i.getDate()+n),i.toLocaleDateString(r,{weekday:`short`})})},[r]),[p,m]=t.useState(null),[h,g]=t.useState(null),_=t.useMemo(()=>{let e=new Map;for(let t of n){let n=new Date(t.start),r=t.end?new Date(t.end):new Date(n);n.setHours(0,0,0,0),r.setHours(0,0,0,0);let i=new Date(n);for(;i<=r;){let a=`${i.getFullYear()}-${i.getMonth()}-${i.getDate()}`,o=i.getTime()===n.getTime(),s=i.getTime()===r.getTime(),c=o||s||i.getDay()===0,l=e.get(a),u={event:t,isTitleDay:c,isSpanStart:o,isSpanEnd:s};l?l.push(u):e.set(a,[u]),i.setDate(i.getDate()+1)}}return e},[n]),v=(e,t,n=`move`,r)=>{m(t.id),e.dataTransfer.effectAllowed=`move`;let i={id:t.id,mode:n,...r?{sourceDay:`${r.getFullYear()}-${r.getMonth()}-${r.getDate()}`}:{}};e.dataTransfer.setData(`text/plain`,JSON.stringify(i)),n===`resize-end`&&e.stopPropagation()},y=()=>{m(null),g(null)},b=(e,t)=>{e.preventDefault(),e.dataTransfer.dropEffect=`move`,g(t)},x=e=>{e.currentTarget.contains(e.relatedTarget)||g(null)},C=(e,t)=>{if(e.preventDefault(),g(null),m(null),!c)return;let r=e.dataTransfer.getData(`text/plain`),i;try{i=JSON.parse(r)}catch{i={id:r,mode:`move`}}let a=n.find(e=>String(e.id)===String(i.id));if(!a)return;let o=new Date(t);if(o.setHours(0,0,0,0),i.mode===`resize-end`){let e=a.end?new Date(a.end):new Date(a.start),t=new Date(e);if(t.setHours(0,0,0,0),o.getTime()===t.getTime())return;let n=new Date(a.start);if(n.setHours(0,0,0,0),o.getTime()<n.getTime())return;let r=new Date(o);r.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),0),c(a,new Date(a.start),r);return}let s=new Date(a.start),l;if(i.sourceDay){let[e,t,n]=i.sourceDay.split(`-`).map(e=>parseInt(e,10));l=new Date(e,t,n)}else l=new Date(s);l.setHours(0,0,0,0);let u=o.getTime()-l.getTime();if(u===0)return;let d=new Date(s.getTime()+u),f;a.end&&(f=new Date(new Date(a.end).getTime()+u)),c(a,d,f)};return(0,s.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,s.jsx)(`div`,{role:`row`,className:`grid grid-cols-7 border-b`,children:f.map(e=>(0,s.jsx)(`div`,{role:`columnheader`,className:`p-2 text-center text-sm font-medium text-muted-foreground border-r last:border-r-0`,children:e},e))}),(0,s.jsx)(`div`,{role:`grid`,"aria-label":`Calendar grid`,className:`grid grid-cols-7 flex-1 auto-rows-fr`,children:l.map((t,n)=>{let r=`${t.getFullYear()}-${t.getMonth()}-${t.getDate()}`,l=_.get(r)||[],f=t.getMonth()===e.getMonth(),m=O(t,u);return(0,s.jsxs)(`div`,{role:`gridcell`,"aria-label":`${t.toLocaleDateString(`default`,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`})}${l.length>0?`, ${l.length} event${l.length>1?`s`:``}`:``}`,className:(0,a.cn)(`border-b border-r last:border-r-0 p-2 min-h-[100px] cursor-pointer hover:bg-accent/50`,!f&&`bg-muted/50 text-muted-foreground opacity-50`,h===n&&`ring-2 ring-primary`),onClick:()=>o?.(t),onDragOver:e=>b(e,n),onDragLeave:x,onDrop:e=>C(e,t),children:[(0,s.jsx)(`div`,{className:(0,a.cn)(`text-sm font-medium mb-2`,m&&`inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground h-6 w-6`),...m?{"aria-current":`date`}:{},children:t.getDate()}),(0,s.jsxs)(`div`,{className:`space-y-0.5`,children:[l.slice(0,4).map(({event:e,isTitleDay:n,isSpanStart:r,isSpanEnd:o},l)=>{let u=!n,{className:d,inlineColor:f}=S(e.color),m=!!c&&o;return(0,s.jsxs)(`div`,{role:`button`,title:e.title,"aria-label":e.title,draggable:!!c,onDragStart:n=>v(n,e,`move`,t),onDragEnd:y,className:(0,a.cn)(`relative text-xs hover:opacity-80 truncate`,c?`cursor-move`:`cursor-pointer`,u?`h-1.5`:`px-2 py-0.5`,r?`rounded-l`:`rounded-l-none`,o?`rounded-r`:`rounded-r-none`,!o&&`-mr-2`,d,p===e.id&&`opacity-50`),style:f?{backgroundColor:f}:void 0,onClick:t=>{t.stopPropagation(),i?.(e)},children:[u?``:e.title,m&&(0,s.jsx)(`span`,{role:`separator`,"aria-label":`Resize event end`,title:`Drag to change end date`,draggable:!0,onDragStart:n=>v(n,e,`resize-end`,t),onDragEnd:y,onClick:e=>e.stopPropagation(),className:`absolute inset-y-0 right-0 w-2 cursor-ew-resize bg-black/25 hover:bg-black/50 rounded-r`})]},`${e.id}-${l}`)}),l.length>4&&(0,s.jsx)(`div`,{className:`text-xs text-muted-foreground px-2`,children:d(`calendar.moreEvents`,{count:l.length-4})})]})]},n)})})]})}var A=48;function j(e){let t=new Date(e);return t.setHours(0,0,0,0),t}function M(e){return e.getHours()*60+e.getMinutes()}function N(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function P({mode:e,date:n,events:r,locale:i=`default`,slotMinutes:o=30,onEventClick:c,onEventDrop:l,onTimeRangeSelect:u}){let{t:d}=w(),f=A*o/60,p=A*24,m=t.useMemo(()=>{if(e===`day`)return[j(n)];let t=E(n);return Array.from({length:7},(e,n)=>{let r=new Date(t);return r.setDate(t.getDate()+n),j(r)})},[e,n.getFullYear(),n.getMonth(),n.getDate()]),h=t.useMemo(()=>new Date,[]),g=t.useCallback(e=>{if(e.allDay)return!0;let t=new Date(e.start),n=e.end?new Date(e.end):new Date(t),r=t.getHours()===0&&t.getMinutes()===0&&t.getSeconds()===0,i=n.getHours()===0&&n.getMinutes()===0&&n.getSeconds()===0,a=n.getTime()-t.getTime();return!!(r&&i||a>=1440*60*1e3)},[]),{allDayEvents:_,timedEvents:v}=t.useMemo(()=>{let e=[],t=[];for(let n of r)g(n)?e.push(n):t.push(n);return{allDayEvents:e,timedEvents:t}},[r,g]),y=t.useMemo(()=>{let e=new Map;for(let t of m)e.set(N(t),[]);for(let t of _){let n=j(new Date(t.start)),r=t.end?new Date(t.end):new Date(t.start),i=j(r);r.getHours()===0&&r.getMinutes()===0&&r.getSeconds()===0&&r.getTime()>n.getTime()&&(i=new Date(i),i.setDate(i.getDate()-1));for(let r of m){let a=j(r);a<n||a>i||e.get(N(r)).push({event:t,isStart:a.getTime()===n.getTime(),isEnd:a.getTime()===i.getTime()})}}return e},[m,_]),b=t.useMemo(()=>{let e=new Map;for(let t of m)e.set(N(t),[]);for(let t of v){let n=new Date(t.start),r=t.end?new Date(t.end):new Date(n.getTime()+3600*1e3);for(let i of m){let a=j(i),o=new Date(a);if(o.setDate(o.getDate()+1),r<=a||n>=o)continue;let s=n<a?a:n,c=r>o?o:r,l=M(s),u=c.getTime()===o.getTime()?1440:M(c);e.get(N(i)).push({event:t,startMin:l,endMin:Math.max(u,l+15),isStart:s.getTime()===n.getTime(),isEnd:c.getTime()===r.getTime()})}}return e},[m,v]),x=t.useMemo(()=>{let e=new Map;for(let[t,n]of b){let r=[...n].sort((e,t)=>e.startMin-t.startMin||e.endMin-t.endMin),i=[],a=[],o=[];for(let e of r){let t=0;for(;i[t]&&i[t].endMin>e.startMin;)t++;i[t]={endMin:e.endMin},a.push({entry:e,col:t})}for(let e=0;e<a.length;e++){let t=a[e],n=t.col;for(let r=0;r<a.length;r++){if(r===e)continue;let i=a[r];i.entry.startMin<t.entry.endMin&&i.entry.endMin>t.entry.startMin&&i.col>n&&(n=i.col)}o.push({...t.entry,col:t.col,cols:n+1})}e.set(t,o)}return e},[b]),C=t.useRef(null),T=t.useRef([]),[D,k]=t.useState(null),P=t.useRef(null);P.current=D;let I=t.useRef(!1),L=t.useCallback((e,t)=>{let n=T.current[t];if(!n)return 0;let r=(e-n.getBoundingClientRect().top+n.scrollTop)/A*60,i=Math.round(r/o)*o;return Math.max(0,Math.min(1440,i))},[o]),R=t.useCallback(e=>{for(let t=0;t<T.current.length;t++){let n=T.current[t];if(!n)continue;let r=n.getBoundingClientRect();if(e>=r.left&&e<=r.right)return t}return-1},[]);t.useEffect(()=>{if(!D)return;let e=e=>{let t=D.kind===`select`||D.kind===`move`?R(e.clientX):D.dayIndex,n=t<0?D.dayIndex??0:t,r=L(e.clientY,n);k(e=>e&&(e.kind===`select`?{...e,dayIndex:n>=0?n:e.dayIndex,headMinutes:r}:e.kind===`move`?{...e,dayIndex:n,minutes:r}:{...e,minutes:r}))},t=e=>{let t=P.current;if(!t){k(null);return}try{if(t.kind===`select`&&u){let e=Math.min(t.anchorMinutes,t.headMinutes),n=Math.max(t.anchorMinutes,t.headMinutes),r=e,i=n===e?Math.min(1440,e+o):n,a=m[t.dayIndex]??m[0],s=new Date(a);s.setHours(0,Math.round(r),0,0);let c=new Date(a);c.setHours(0,Math.round(i),0,0),I.current=!0,u(s,c)}else if(t.kind===`move`&&l){let e=r.find(e=>String(e.id)===String(t.eventId));if(e){let n=t.dayIndex<0?0:t.dayIndex,r=t.minutes-t.grabMinuteOffset,i=Math.max(0,Math.min(1440-t.durationMin,Math.round(r/o)*o)),a=m[n]??m[0],s=new Date(a);s.setHours(0,i,0,0);let c=new Date(s.getTime()+t.durationMin*60*1e3);I.current=!0,l(e,s,c)}}else if(t.kind===`resize-top`&&l){let e=r.find(e=>String(e.id)===String(t.eventId));if(e){let n=m[t.dayIndex]??m[0],r=Math.min(t.anchorEndMin-o,Math.max(0,t.minutes)),i=new Date(n);i.setHours(0,r,0,0);let a=new Date(n);a.setHours(0,t.anchorEndMin,0,0),I.current=!0,l(e,i,a)}}else if(t.kind===`resize-bottom`&&l){let e=r.find(e=>String(e.id)===String(t.eventId));if(e){let n=m[t.dayIndex]??m[0],r=Math.max(t.anchorStartMin+o,Math.min(1440,t.minutes)),i=new Date(n);i.setHours(0,t.anchorStartMin,0,0);let a=new Date(n);a.setHours(0,r,0,0),I.current=!0,l(e,i,a)}}}finally{k(null),setTimeout(()=>{I.current=!1},50)}};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[D,m,r,o,l,u,R,L]);let z=t.useMemo(()=>m.map(e=>({weekday:e.toLocaleDateString(i,{weekday:`short`}),day:e.getDate(),month:e.toLocaleDateString(i,{month:`short`}),isToday:O(e,h)})),[m,i,h]),B=t.useMemo(()=>Array.from({length:24},(e,t)=>new Date(2024,0,1,t,0).toLocaleTimeString(i,{hour:`numeric`})),[i]),V=(e,t,n,r)=>{if(!l||e.button!==0)return;e.stopPropagation(),e.preventDefault();let i=L(e.clientY,n);k(r===`body`?{kind:`move`,eventId:t.event.id,grabMinuteOffset:Math.max(0,i-t.startMin),durationMin:t.endMin-t.startMin,dayIndex:n,minutes:i}:r===`top`?{kind:`resize-top`,eventId:t.event.id,anchorEndMin:t.endMin,dayIndex:n,minutes:i}:{kind:`resize-bottom`,eventId:t.event.id,anchorStartMin:t.startMin,dayIndex:n,minutes:i})},H=(e,t)=>{if(!u||e.button!==0)return;e.preventDefault();let n=L(e.clientY,t);k({kind:`select`,dayIndex:t,anchorMinutes:n,headMinutes:n})},U=e=>{if(!D)return null;if(D.kind===`select`&&D.dayIndex===e){let t=Math.min(D.anchorMinutes,D.headMinutes),n=Math.max(D.anchorMinutes,D.headMinutes);return(0,s.jsx)(`div`,{className:`absolute left-1 right-1 rounded bg-primary/30 border border-primary pointer-events-none z-10`,style:{top:t/60*A,height:Math.max(f,(n-t)/60*A)},"aria-hidden":!0,children:(0,s.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:F(m[e],t,n,i)})})}if(D.kind===`move`&&D.dayIndex===e){let t=D.minutes-D.grabMinuteOffset,n=Math.max(0,Math.min(1440-D.durationMin,Math.round(t/o)*o));return(0,s.jsx)(`div`,{className:`absolute left-1 right-1 rounded border-2 border-dashed border-primary bg-primary/10 pointer-events-none z-10`,style:{top:n/60*A,height:D.durationMin/60*A},"aria-hidden":!0,children:(0,s.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:F(m[e],n,n+D.durationMin,i)})})}if((D.kind===`resize-top`||D.kind===`resize-bottom`)&&D.dayIndex===e){let t,n;return D.kind===`resize-top`?(t=Math.min(D.anchorEndMin-o,Math.max(0,D.minutes)),n=D.anchorEndMin):(t=D.anchorStartMin,n=Math.max(D.anchorStartMin+o,Math.min(1440,D.minutes))),(0,s.jsx)(`div`,{className:`absolute left-1 right-1 rounded border-2 border-dashed border-primary bg-primary/10 pointer-events-none z-10`,style:{top:t/60*A,height:(n-t)/60*A},"aria-hidden":!0,children:(0,s.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:F(m[e],t,n,i)})})}return null};return(0,s.jsxs)(`div`,{className:`flex flex-col h-full`,ref:C,children:[(0,s.jsxs)(`div`,{className:`flex border-b sticky top-0 bg-background z-20`,children:[(0,s.jsx)(`div`,{className:`w-14 shrink-0 border-r`,"aria-hidden":!0}),z.map((e,t)=>(0,s.jsxs)(`div`,{role:`columnheader`,className:(0,a.cn)(`flex-1 p-2 text-center text-sm border-r last:border-r-0`,e.isToday&&`bg-primary/5`),children:[(0,s.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.weekday}),(0,s.jsx)(`div`,{className:(0,a.cn)(`font-medium`,e.isToday&&`inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground h-6 w-6 mx-auto`),children:e.day})]},t))]}),_.length>0&&(0,s.jsxs)(`div`,{className:`flex border-b bg-muted/20 max-h-[140px] overflow-y-auto`,children:[(0,s.jsx)(`div`,{className:`w-14 shrink-0 border-r flex items-start justify-end pr-1 pt-1 text-[10px] text-muted-foreground sticky left-0 bg-muted/20`,children:d(`calendar.allDay`)===`calendar.allDay`?`all-day`:d(`calendar.allDay`)}),m.map(e=>{let t=N(e);return(0,s.jsx)(`div`,{className:`flex-1 border-r last:border-r-0 min-h-[28px] p-0.5 space-y-0.5`,children:(y.get(t)??[]).map(({event:e,isStart:t,isEnd:n},r)=>{let{className:i,inlineColor:o}=S(e.color);return(0,s.jsx)(`div`,{role:`button`,title:e.title,onClick:t=>{t.stopPropagation(),c?.(e)},className:(0,a.cn)(`text-[11px] px-2 py-0.5 truncate cursor-pointer hover:opacity-80`,t?`rounded-l`:`rounded-l-none -ml-0.5`,n?`rounded-r`:`rounded-r-none -mr-0.5`,i),style:o?{backgroundColor:o}:void 0,children:t?e.title:`\xA0`},`${e.id}-${r}`)})},t)})]}),(0,s.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,s.jsxs)(`div`,{className:`flex`,style:{height:p},children:[(0,s.jsx)(`div`,{className:`w-14 shrink-0 border-r relative`,children:B.map((e,t)=>(0,s.jsx)(`div`,{className:`absolute right-1 text-[10px] text-muted-foreground -translate-y-1/2`,style:{top:t*A},children:t===0?``:e},t))}),m.map((e,t)=>{let n=N(e),r=x.get(n)??[];return(0,s.jsxs)(`div`,{ref:e=>{T.current[t]=e},className:`flex-1 border-r last:border-r-0 relative select-none`,style:{height:p},onPointerDown:e=>H(e,t),"aria-label":e.toLocaleDateString(i,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`}),children:[Array.from({length:24},(e,t)=>(0,s.jsx)(`div`,{className:`absolute left-0 right-0 border-t border-muted/60 pointer-events-none`,style:{top:t*A}},t)),o<60&&Array.from({length:Math.floor(1440/o)},(e,t)=>{let n=t*o;return n%60==0?null:(0,s.jsx)(`div`,{className:`absolute left-0 right-0 border-t border-dashed border-muted/30 pointer-events-none`,style:{top:n/60*A}},t)}),r.map(n=>{let r=n.startMin/60*A,o=Math.max(f,(n.endMin-n.startMin)/60*A),u=100/n.cols,d=n.col*u,{className:p,inlineColor:m}=S(n.event.color),h=D&&D.eventId===n.event.id;return(0,s.jsxs)(`div`,{role:`button`,tabIndex:0,title:n.event.title,"aria-label":n.event.title,onPointerDown:e=>V(e,n,t,`body`),onClick:e=>{if(I.current){e.stopPropagation();return}e.stopPropagation(),c?.(n.event)},className:(0,a.cn)(`absolute rounded text-xs px-2 py-1 overflow-hidden shadow-sm`,l?`cursor-move`:`cursor-pointer`,p,h&&`opacity-40`),style:{top:r,height:o,left:`calc(${d}% + 2px)`,width:`calc(${u}% - 4px)`,...m?{backgroundColor:m}:{}},children:[(0,s.jsx)(`div`,{className:`font-medium truncate`,children:n.event.title}),(0,s.jsx)(`div`,{className:`text-[10px] opacity-80 truncate`,children:F(e,n.startMin,n.endMin,i)}),l&&n.isStart&&(0,s.jsx)(`div`,{onPointerDown:e=>V(e,n,t,`top`),className:`absolute top-0 left-0 right-0 h-1.5 cursor-ns-resize`,"aria-label":`Resize start`}),l&&n.isEnd&&(0,s.jsx)(`div`,{onPointerDown:e=>V(e,n,t,`bottom`),className:`absolute bottom-0 left-0 right-0 h-1.5 cursor-ns-resize`,"aria-label":`Resize end`})]},`${n.event.id}-${n.startMin}`)}),U(t)]},n)})]})})]})}function F(e,t,n,r){let i=new Date(e);i.setHours(0,Math.round(t),0,0);let a=new Date(e);a.setHours(0,Math.round(n),0,0);let o=e=>e.toLocaleTimeString(r,{hour:`numeric`,minute:`2-digit`});return`${o(i)} – ${o(a)}`}function I(e){return`data`in e&&e.data?e.data:`staticData`in e&&e.staticData?{provider:`value`,items:e.staticData}:e.objectName?{provider:`object`,object:e.objectName}:null}function L(e){if(e){if(typeof e==`string`){let t=e.split(` `),n=t[0],r=t[1]?.toLowerCase()===`desc`?`desc`:`asc`;return{[n]:r}}if(Array.isArray(e))return e.reduce((e,t)=>(t.field&&t.order&&(e[t.field]=t.order),e),{})}}function R(e){return`filter`in e&&e.filter&&typeof e.filter==`object`&&`calendar`in e.filter?e.filter.calendar:e.calendar?e.calendar:e.startDateField||e.dateField?{startDateField:e.startDateField||e.dateField,endDateField:e.endDateField||e.endField,titleField:e.titleField,colorField:e.colorField,allDayField:e.allDayField}:null}var z=({schema:e,dataSource:i,className:o,data:u,loading:d,onEventClick:f,onRowClick:p,onDateClick:m,onNavigate:h,onViewChange:g,onEventDrop:_,locale:v})=>{let y=Array.isArray(u),[b,x]=(0,t.useState)(y?u:[]),[S,C]=(0,t.useState)(y?d??!1:!0),[w,E]=(0,t.useState)(null),[D,O]=(0,t.useState)(null),[k,A]=(0,t.useState)(new Date),j=(0,a.useIsMobile)(),M=e.defaultView,[N,P]=(0,t.useState)(()=>{let e=M===`day`||!M;return typeof window<`u`&&window.innerWidth<768&&e?`month`:M||`month`});(0,t.useEffect)(()=>{j&&N===`day`&&(M===`day`||!M)&&P(`month`)},[j]);let[F,z]=(0,t.useState)(0);(0,t.useEffect)(()=>{if(!y&&!(!i?.onMutation||!e.objectName))return i.onMutation(t=>{t.resource===e.objectName&&z(e=>e+1)})},[i,e.objectName,y]);let{ref:B,isRefreshing:V,pullDistance:H}=(0,c.usePullToRefresh)({onRefresh:(0,t.useCallback)(async()=>{z(e=>e+1)},[]),enabled:!!i&&!!e.objectName}),U=(0,t.useMemo)(()=>I(e),[e.data,e.staticData,e.objectName]),W=(0,t.useMemo)(()=>R(e),[e.filter,e.calendar,e.dateField,e.endField,e.titleField,e.colorField]),G=U?.provider===`value`,K=(0,t.useRef)(null);K.current=D,(0,t.useEffect)(()=>{y&&x(u)},[u,y]),(0,t.useEffect)(()=>{y&&d!==void 0&&C(d)},[d,y]),(0,t.useEffect)(()=>{if(y)return;let t=!0;return(async()=>{try{if(!t)return;if(C(!0),G&&U?.provider===`value`){t&&(x(U.items),C(!1));return}if(!i||typeof i.find!=`function`)throw Error(`DataSource required for object/api providers`);if(U?.provider===`object`){let r=U.object,a=(0,n.buildExpandFields)(K.current?.fields),o=(0,n.extractRecords)(await i.find(r,{$filter:e.filter,$orderby:L(e.sort),...a.length>0?{$expand:a}:{}}));t&&x(o)}else U?.provider===`api`&&(console.warn(`API provider not yet implemented for ObjectCalendar`),t&&x([]));t&&C(!1)}catch(e){console.error(`[ObjectCalendar] Error fetching data:`,e),t&&(E(e),C(!1))}})(),()=>{t=!1}},[y,U,i,G,e.filter,e.sort,F]),(0,t.useEffect)(()=>{!G&&i&&(async()=>{try{if(!i)return;let t=U?.provider===`object`?U.object:e.objectName;if(!t)return;O(await i.getObjectSchema(t))}catch(e){console.error(`Failed to fetch object schema:`,e)}})()},[e.objectName,i,G,U]);let q=(0,t.useMemo)(()=>{if(!W||!b.length)return[];let{startDateField:e,endDateField:t,titleField:n,colorField:r}=W,i=D?.titleFormat,a=typeof i==`string`?i:i&&typeof i==`object`&&typeof i.source==`string`?i.source:void 0,o=D?.NAME_FIELD_KEY,s=[`name`,`full_name`,`fullName`,`title`,`subject`,`label`,`display_name`,`displayName`],c=(e,t)=>{let n=`[-\\u2013\\u2014|/·,:]`,r=!1,i=e.replace(/\{([^{}]+)\}/g,(e,n)=>{let i=t[n.trim()];return i!=null&&i!==``?(r=!0,String(i)):`\0`});return r?i.replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim():``},l=e=>{let t;if(n&&(t=e[n],typeof t==`string`&&(t=t.trim())),!t&&a){let n=c(a,e);n&&(t=n)}if(!t&&o){let n=e[o];typeof n==`string`?t=n.trim():n&&(t=n)}if(!t)for(let n of s){let r=e[n],i=typeof r==`string`?r.trim():r;if(i){t=i;break}}return t||`Untitled`};return b.map((n,i)=>{let a=n[e],o=t?n[t]:null,s=l(n),c=r?n[r]:void 0;return{id:n.id||n._id||`event-${i}`,title:s,start:a?new Date(a):new Date,end:o?new Date(o):void 0,color:c,allDay:!o,data:n}}).filter(e=>!isNaN(e.start.getTime()))},[b,W,D]);(0,t.useCallback)(()=>{m?.(new Date)},[m]);let J=e.navigation??{mode:`drawer`,width:`min(960px, 60vw)`},Y=J.mode===`drawer`||J.mode===`modal`||J.mode===`split`||J.mode===`popover`,X=(0,r.useNavigationOverlay)({navigation:J,objectName:e.objectName,onRowClick:Y?void 0:p}),ee=(0,t.useCallback)(async(t,n,r)=>{if(!W)return;let{startDateField:a,endDateField:o}=W,s=t?.id??t?._id;if(!s||!e.objectName||!i?.update)return;let c={[a]:n.toISOString()};o&&r&&(c[o]=r.toISOString());let l=b;x(e=>e.map(e=>(e?.id??e?._id)===s?{...e,...c}:e));try{await i.update(e.objectName,s,c)}catch(e){x(l),console.error(`[ObjectCalendar] Failed to persist drag-and-drop reschedule:`,e)}},[W,e.objectName,i,b]),[Z,Q]=(0,t.useState)(null),te=(0,t.useCallback)(t=>{!W||!e.objectName||!i?.create||Q({start:t,title:``,submitting:!1})},[W,e.objectName,i]),ne=(0,t.useCallback)((t,n)=>{!W||!e.objectName||!i?.create||Q({start:t,end:n,title:``,submitting:!1})},[W,e.objectName,i]),$=(0,t.useCallback)(async()=>{if(!Z||!W)return;let t=Z.title.trim();if(!t){Q(e=>e&&{...e,error:`Title is required`});return}if(!e.objectName||!i?.create)return;Q(e=>e&&{...e,submitting:!0,error:void 0});let{startDateField:n,endDateField:r,titleField:a}=W,o={[a||`name`]:t,[n]:Z.start.toISOString()};r&&(o[r]=(Z.end??Z.start).toISOString());let s=D?.fields;if(s&&typeof s==`object`){let e=Array.isArray(s)?s.map(e=>[e.name??e.apiName,e]):Object.entries(s);for(let[t,n]of e){if(!t||t in o||!n?.required)continue;if(n.defaultValue!==void 0&&n.defaultValue!==null){o[t]=n.defaultValue;continue}let e=n.type;if(e===`select`||e===`picklist`||e===`status`){let e=(n.options||n.choices||[])[0];e!==void 0&&(o[t]=typeof e==`object`?e.value??e.id:e)}else e===`boolean`||e===`checkbox`?o[t]=!1:(e===`number`||e===`integer`||e===`decimal`||e===`currency`||e===`percent`)&&(o[t]=0)}}try{let t=await i.create(e.objectName,o),n=(t&&(t.record||t.data||t))??null;n&&(n.id!==void 0||n._id!==void 0)&&x(e=>[...e,n]),Q(null)}catch(e){let t=e?.message||String(e);Q(e=>e&&{...e,submitting:!1,error:t}),console.error(`[ObjectCalendar] Quick-create failed:`,e)}},[Z,W,e.objectName,i,D]);return S?(0,s.jsx)(`div`,{className:o,children:(0,s.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,s.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading calendar...`})})}):w?(0,s.jsx)(`div`,{className:o,children:(0,s.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,s.jsxs)(`div`,{className:`text-destructive`,children:[`Error: `,w.message]})})}):W?(0,s.jsxs)(`div`,{ref:B,className:o,children:[H>0&&(0,s.jsx)(`div`,{className:`flex items-center justify-center text-xs text-muted-foreground`,style:{height:H},children:V?`Refreshing…`:`Pull to refresh`}),(0,s.jsx)(`div`,{className:`bg-background h-[calc(100vh-120px)] sm:h-[calc(100vh-160px)] md:h-[calc(100vh-200px)] min-h-[400px] sm:min-h-[600px]`,children:(0,s.jsx)(T,{events:q,currentDate:k,view:N,locale:v,onEventClick:e=>{X.handleClick(e.data),Y||f?.(e.data)},onDateClick:e=>{m?m(e):te(e)},onNavigate:e=>{A(e),h?.(e)},onViewChange:e=>{P(e),g?.(e)},onAddClick:void 0,onEventDrop:(e,t,n)=>{_?_(e.data,t,n):ee(e.data,t,n)},onTimeRangeSelect:ne})}),(0,s.jsx)(a.Dialog,{open:!!Z,onOpenChange:e=>{e||Q(null)},children:(0,s.jsxs)(a.DialogContent,{className:`sm:max-w-md`,children:[(0,s.jsxs)(a.DialogHeader,{children:[(0,s.jsx)(a.DialogTitle,{children:`New event`}),(0,s.jsx)(a.DialogDescription,{children:Z&&(()=>{let e=Z.end&&Z.end.getTime()!==Z.start.getTime(),t=Z.start.toLocaleDateString(v,{year:`numeric`,month:`long`,day:`numeric`});if(e){let e=e=>e.toLocaleTimeString(v,{hour:`numeric`,minute:`2-digit`});return(0,s.jsxs)(s.Fragment,{children:[t,` · `,e(Z.start),` – `,e(Z.end)]})}return(0,s.jsxs)(s.Fragment,{children:[`On `,t]})})()})]}),(0,s.jsxs)(`div`,{className:`space-y-2`,children:[(0,s.jsx)(a.Label,{htmlFor:`quick-create-title`,children:`Title`}),(0,s.jsx)(a.Input,{id:`quick-create-title`,autoFocus:!0,value:Z?.title??``,onChange:e=>Q(t=>t&&{...t,title:e.target.value,error:void 0}),onKeyDown:e=>{e.key===`Enter`&&!Z?.submitting&&(e.preventDefault(),$())},placeholder:`What's this event about?`,disabled:Z?.submitting}),Z?.error&&(0,s.jsx)(`p`,{className:`text-sm text-destructive`,children:Z.error})]}),(0,s.jsxs)(a.DialogFooter,{children:[(0,s.jsx)(a.Button,{variant:`outline`,onClick:()=>Q(null),disabled:Z?.submitting,children:`Cancel`}),(0,s.jsx)(a.Button,{onClick:()=>void $(),disabled:Z?.submitting||!Z?.title.trim(),children:Z?.submitting?`Creating…`:`Create`})]})]})}),X.isOverlay&&X.isOpen&&X.selectedRecord&&(()=>{let t=U?.provider===`object`?U.object:e.objectName,n=X.selectedRecord,r=n.id??n._id;if(!t||r==null)return null;let a=W?.titleField?String(n[W.titleField]??`Event Details`):`Event Details`;return(0,s.jsx)(l.RecordDetailDrawer,{open:!0,onClose:X.close,title:a,record:n,objectName:t,recordId:r,dataSource:i,objectSchema:D,width:X.width??`min(960px, 60vw)`,fullPageHref:(0,l.deriveRecordPageHref)(t,r)??void 0,onFieldSave:async(e,n)=>{i?.update&&(await i.update(t,String(r),{[e]:n}),x(t=>t.map(t=>String(t.id??t._id)===String(r)?{...t,[e]:n}:t)))},onDelete:async()=>{i?.delete&&(await i.delete(t,String(r)),x(e=>e.filter(e=>String(e.id??e._id)!==String(r))))}})})()]}):(0,s.jsx)(`div`,{className:o,children:(0,s.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,s.jsx)(`div`,{className:`text-muted-foreground`,children:`Calendar configuration required. Please specify startDateField and titleField.`})})})};n.ComponentRegistry.register(`calendar-view`,({schema:e,className:n,onAction:r,...i})=>{let a=t.default.useMemo(()=>!e.data||!Array.isArray(e.data)?[]:e.data.map((t,n)=>{let r=e.titleField||`title`,i=e.startDateField||`start`,a=e.endDateField||`end`,o=e.colorField||`color`,s=e.allDayField||`allDay`;return{id:t.id||t._id||n,title:t[r]||`Untitled Event`,start:new Date(t[i]),end:t[a]?new Date(t[a]):void 0,allDay:t[s],color:t[o],data:t}}),[e.data,e.titleField,e.startDateField,e.endDateField,e.colorField,e.allDayField]);return(0,s.jsx)(T,{className:n,events:a,onEventClick:e=>{r?.({type:`event-click`,payload:e})},...i})},{namespace:`plugin-calendar`,label:`Calendar View`,inputs:[{name:`data`,type:`array`,label:`Data`,description:`Array of record objects to display as events`},{name:`titleField`,type:`string`,label:`Title Field`,defaultValue:`title`,description:`Field name to use for event title`},{name:`startDateField`,type:`string`,label:`Start Date Field`,defaultValue:`start`,description:`Field name for event start date`},{name:`endDateField`,type:`string`,label:`End Date Field`,defaultValue:`end`,description:`Field name for event end date (optional)`},{name:`allDayField`,type:`string`,label:`All Day Field`,defaultValue:`allDay`,description:`Field name for all-day flag`},{name:`colorField`,type:`string`,label:`Color Field`,defaultValue:`color`,description:`Field name for event color`},{name:`colorMapping`,type:`object`,label:`Color Mapping`,description:`Map field values to colors (e.g., {meeting: "blue", deadline: "red"})`},{name:`view`,type:`enum`,enum:[`month`,`week`,`day`],defaultValue:`month`,label:`View Mode`,description:`Calendar view mode (month, week, or day)`},{name:`currentDate`,type:`string`,label:`Current Date`,description:`ISO date string for initial calendar date`},{name:`allowCreate`,type:`boolean`,label:`Allow Create`,defaultValue:!1,description:`Allow creating events by clicking on dates`},{name:`className`,type:`string`,label:`CSS Class`}],defaultProps:{view:`month`,titleField:`title`,startDateField:`start`,endDateField:`end`,allDayField:`allDay`,colorField:`color`,allowCreate:!1,data:[{id:1,title:`Team Meeting`,start:new Date(new Date().setHours(10,0,0,0)).toISOString(),end:new Date(new Date().setHours(11,0,0,0)).toISOString(),color:`#3b82f6`,allDay:!1},{id:2,title:`Project Deadline`,start:new Date(new Date().setDate(new Date().getDate()+3)).toISOString(),color:`#ef4444`,allDay:!0},{id:3,title:`Conference`,start:new Date(new Date().setDate(new Date().getDate()+7)).toISOString(),end:new Date(new Date().setDate(new Date().getDate()+9)).toISOString(),color:`#10b981`,allDay:!0}],className:`h-[600px] border rounded-lg`}});var B=({schema:e,...t})=>{let{dataSource:n}=(0,r.useSchemaContext)()||{};return(0,s.jsx)(z,{schema:e,dataSource:n,...t})};n.ComponentRegistry.register(`object-calendar`,B,{namespace:`plugin-calendar`,label:`Object Calendar`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`calendar`,type:`object`,label:`Calendar Config`,description:`startDateField, endDateField, titleField, colorField`}]}),n.ComponentRegistry.register(`calendar`,B,{namespace:`view`,label:`Calendar View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`calendar`,type:`object`,label:`Calendar Config`,description:`startDateField, endDateField, titleField, colorField`}]}),e.CalendarView=T,e.ObjectCalendar=z,e.ObjectCalendarRenderer=B});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`react`),require(`@object-ui/core`),require(`@object-ui/react`),require(`lucide-react`),require(`@object-ui/components`),require(`@object-ui/i18n`),require(`react/jsx-runtime`),require(`@object-ui/mobile`),require(`@object-ui/plugin-detail`)):typeof define==`function`&&define.amd?define([`exports`,`react`,`@object-ui/core`,`@object-ui/react`,`lucide-react`,`@object-ui/components`,`@object-ui/i18n`,`react/jsx-runtime`,`@object-ui/mobile`,`@object-ui/plugin-detail`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.ObjectUIPluginCalendar={},e.React,e.ObjectUICore,e.ObjectUIReact,e.LucideReact,e.ObjectUIComponents,e._object_ui_i18n,e.react_jsx_runtime,e._object_ui_mobile,e._object_ui_plugin_detail))})(this,function(e,t,n,r,i,a,o,s,c,l){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var u=Object.create,d=Object.defineProperty,f=Object.getOwnPropertyDescriptor,p=Object.getOwnPropertyNames,m=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,g=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=p(t),a=0,o=i.length,s;a<o;a++)s=i[a],!h.call(e,s)&&s!==n&&d(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=f(t,s))||r.enumerable});return e};t=((e,t,n)=>(n=e==null?{}:u(m(e)),g(t||!e||!e.__esModule?d(n,`default`,{value:e,enumerable:!0}):n,e)))(t,1);var _=`bg-blue-100 text-blue-900 border border-blue-200`,v=new Date,y=[`bg-blue-100 text-blue-900 border border-blue-200`,`bg-emerald-100 text-emerald-900 border border-emerald-200`,`bg-amber-100 text-amber-900 border border-amber-200`,`bg-rose-100 text-rose-900 border border-rose-200`,`bg-violet-100 text-violet-900 border border-violet-200`,`bg-cyan-100 text-cyan-900 border border-cyan-200`,`bg-orange-100 text-orange-900 border border-orange-200`,`bg-fuchsia-100 text-fuchsia-900 border border-fuchsia-200`],b=/^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i,x=/(^|\s)(bg|text|from|to|via)-/;function S(e){if(!e)return{className:_};if(b.test(e))return{className:`text-white`,inlineColor:e};if(x.test(e))return{className:e};let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return{className:y[Math.abs(t)%y.length]}}var C={"calendar.today":`Today`,"calendar.month":`Month`,"calendar.week":`Week`,"calendar.day":`Day`,"calendar.newEvent":`New event`,"calendar.moreEvents":`+{{count}} more`,"calendar.allDay":`all-day`};function w(){try{let e=(0,o.useObjectTranslation)();return e.t(`calendar.today`)===`calendar.today`?{t:(e,t)=>{let n=C[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n},language:`en`}:{t:e.t,language:e.language}}catch{return{t:(e,t)=>{let n=C[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n},language:`en`}}}function T({events:e=[],view:n=`month`,currentDate:r=v,locale:o=`default`,onEventClick:c,onDateClick:l,onViewChange:u,onNavigate:d,onAddClick:f,onEventDrop:p,onTimeRangeSelect:m,slotMinutes:h=30,className:g}){let[_,y]=t.useState(n),[b,x]=t.useState(r),{t:S,language:C}=w(),T=o===`default`?C:o;t.useEffect(()=>{x(r)},[r]),t.useEffect(()=>{y(n)},[n]);let D=t.useRef(u);D.current=u,t.useEffect(()=>{let e=window.matchMedia(`(max-width: 639px)`),t=e=>{e.matches&&(y(`day`),D.current?.(`day`))};return t(e),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let O=()=>{let e=new Date(b);_===`month`?e.setMonth(e.getMonth()-1):_===`week`?e.setDate(e.getDate()-7):e.setDate(e.getDate()-1),x(e),d?.(e)},A=()=>{let e=new Date(b);_===`month`?e.setMonth(e.getMonth()+1):_===`week`?e.setDate(e.getDate()+7):e.setDate(e.getDate()+1),x(e),d?.(e)},j=()=>{let e=new Date;x(e),d?.(e)},M=e=>{y(e),u?.(e)},N=()=>{if(_===`month`)return b.toLocaleDateString(T,{month:`long`,year:`numeric`});if(_===`week`){let e=E(b),t=new Date(e);return t.setDate(t.getDate()+6),`${e.toLocaleDateString(T,{month:`short`,day:`numeric`})} - ${t.toLocaleDateString(T,{month:`short`,day:`numeric`,year:`numeric`})}`}else return b.toLocaleDateString(T,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`})},F=t.useRef(0);return(0,s.jsxs)(`div`,{role:`region`,"aria-label":`Calendar`,className:(0,a.cn)(`flex flex-col h-full bg-background min-w-0 overflow-hidden`,g),children:[(0,s.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 p-2 sm:p-4 border-b min-w-0`,children:[(0,s.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,s.jsxs)(`div`,{className:`flex items-center bg-muted/50 rounded-lg p-1 gap-1`,children:[(0,s.jsx)(a.Button,{variant:`ghost`,size:`sm`,onClick:j,className:`h-8`,"aria-label":`Go to today`,children:S(`calendar.today`)}),(0,s.jsx)(`div`,{className:`h-4 w-px bg-border mx-1`}),(0,s.jsx)(a.Button,{variant:`ghost`,size:`icon`,"aria-label":`Previous period`,onClick:O,className:`h-8 w-8`,children:(0,s.jsx)(i.ChevronLeftIcon,{className:`h-4 w-4`})}),(0,s.jsx)(a.Button,{variant:`ghost`,size:`icon`,"aria-label":`Next period`,onClick:A,className:`h-8 w-8`,children:(0,s.jsx)(i.ChevronRightIcon,{className:`h-4 w-4`})})]}),(0,s.jsxs)(a.Popover,{children:[(0,s.jsx)(a.PopoverTrigger,{asChild:!0,children:(0,s.jsxs)(a.Button,{variant:`ghost`,"aria-label":`Current date: ${N()}`,className:(0,a.cn)(`text-base sm:text-xl font-semibold h-auto px-2 sm:px-3 py-1 hover:bg-muted/50 transition-colors`,`flex items-center gap-2`),children:[(0,s.jsx)(i.CalendarIcon,{className:`h-5 w-5 text-muted-foreground`}),(0,s.jsx)(`span`,{children:N()})]})}),(0,s.jsx)(a.PopoverContent,{className:`w-auto p-0`,align:`start`,children:(0,s.jsx)(a.Calendar,{mode:`single`,selected:b,onSelect:e=>{e&&(x(e),d?.(e))},autoFocus:!0,startMonth:new Date(2e3,0),endMonth:new Date(2050,11)})})]})]}),(0,s.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,s.jsxs)(a.Select,{value:_,onValueChange:M,children:[(0,s.jsx)(a.SelectTrigger,{className:`w-32 bg-background`,children:(0,s.jsx)(a.SelectValue,{})}),(0,s.jsxs)(a.SelectContent,{children:[(0,s.jsx)(a.SelectItem,{value:`day`,children:S(`calendar.day`)}),(0,s.jsx)(a.SelectItem,{value:`week`,children:S(`calendar.week`)}),(0,s.jsx)(a.SelectItem,{value:`month`,children:S(`calendar.month`)})]})]}),f&&(0,s.jsxs)(a.Button,{onClick:f,size:`sm`,className:`gap-1`,children:[(0,s.jsx)(i.PlusIcon,{className:`h-4 w-4`}),S(`calendar.newEvent`)]})]})]}),(0,s.jsxs)(`div`,{className:`flex-1 overflow-auto`,onTouchStart:e=>{F.current=e.touches[0].clientX},onTouchEnd:e=>{let t=F.current-e.changedTouches[0].clientX;if(Math.abs(t)>50){let e=new Date(b);_===`day`?e.setDate(e.getDate()+(t>0?1:-1)):_===`week`?e.setDate(e.getDate()+(t>0?7:-7)):e.setMonth(e.getMonth()+(t>0?1:-1)),x(e),d?.(e)}},children:[_===`month`&&(0,s.jsx)(k,{date:b,events:e,locale:T,onEventClick:c,onDateClick:l,onEventDrop:p}),_===`week`&&(0,s.jsx)(P,{mode:`week`,date:b,events:e,locale:T,slotMinutes:h,onEventClick:c,onEventDrop:p,onTimeRangeSelect:m}),_===`day`&&(0,s.jsx)(P,{mode:`day`,date:b,events:e,locale:T,slotMinutes:h,onEventClick:c,onEventDrop:p,onTimeRangeSelect:m})]})]})}function E(e){let t=new Date(e),n=t.getDay(),r=t.getDate()-n;return t.setDate(r),t}function D(e){let t=e.getFullYear(),n=e.getMonth(),r=new Date(t,n,1),i=new Date(t,n+1,0),a=r.getDay(),o=[];for(let e=a-1;e>=0;e--){let t=new Date(r.getTime());t.setDate(t.getDate()-(e+1)),o.push(t)}for(let e=1;e<=i.getDate();e++)o.push(new Date(t,n,e));let s=42-o.length;for(let e=1;e<=s;e++){let t=new Date(i.getTime());t.setDate(t.getDate()+e),o.push(t)}return o}function O(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function k({date:e,events:n,locale:r=`default`,onEventClick:i,onDateClick:o,onEventDrop:c}){let l=t.useMemo(()=>D(e),[e.getFullYear(),e.getMonth()]),u=t.useMemo(()=>new Date,[]),{t:d}=w(),f=t.useMemo(()=>{let e=new Date(2024,0,7);return Array.from({length:7},(t,n)=>{let i=new Date(e);return i.setDate(i.getDate()+n),i.toLocaleDateString(r,{weekday:`short`})})},[r]),[p,m]=t.useState(null),[h,g]=t.useState(null),_=t.useMemo(()=>{let e=new Map;for(let t of n){let n=new Date(t.start),r=t.end?new Date(t.end):new Date(n);n.setHours(0,0,0,0),r.setHours(0,0,0,0);let i=new Date(n);for(;i<=r;){let a=`${i.getFullYear()}-${i.getMonth()}-${i.getDate()}`,o=i.getTime()===n.getTime(),s=i.getTime()===r.getTime(),c=o||s||i.getDay()===0,l=e.get(a),u={event:t,isTitleDay:c,isSpanStart:o,isSpanEnd:s};l?l.push(u):e.set(a,[u]),i.setDate(i.getDate()+1)}}return e},[n]),v=(e,t,n=`move`,r)=>{m(t.id),e.dataTransfer.effectAllowed=`move`;let i={id:t.id,mode:n,...r?{sourceDay:`${r.getFullYear()}-${r.getMonth()}-${r.getDate()}`}:{}};e.dataTransfer.setData(`text/plain`,JSON.stringify(i)),n===`resize-end`&&e.stopPropagation()},y=()=>{m(null),g(null)},b=(e,t)=>{e.preventDefault(),e.dataTransfer.dropEffect=`move`,g(t)},x=e=>{e.currentTarget.contains(e.relatedTarget)||g(null)},C=(e,t)=>{if(e.preventDefault(),g(null),m(null),!c)return;let r=e.dataTransfer.getData(`text/plain`),i;try{i=JSON.parse(r)}catch{i={id:r,mode:`move`}}let a=n.find(e=>String(e.id)===String(i.id));if(!a)return;let o=new Date(t);if(o.setHours(0,0,0,0),i.mode===`resize-end`){let e=a.end?new Date(a.end):new Date(a.start),t=new Date(e);if(t.setHours(0,0,0,0),o.getTime()===t.getTime())return;let n=new Date(a.start);if(n.setHours(0,0,0,0),o.getTime()<n.getTime())return;let r=new Date(o);r.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),0),c(a,new Date(a.start),r);return}let s=new Date(a.start),l;if(i.sourceDay){let[e,t,n]=i.sourceDay.split(`-`).map(e=>parseInt(e,10));l=new Date(e,t,n)}else l=new Date(s);l.setHours(0,0,0,0);let u=o.getTime()-l.getTime();if(u===0)return;let d=new Date(s.getTime()+u),f;a.end&&(f=new Date(new Date(a.end).getTime()+u)),c(a,d,f)};return(0,s.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,s.jsx)(`div`,{role:`row`,className:`grid grid-cols-7 border-b`,children:f.map(e=>(0,s.jsx)(`div`,{role:`columnheader`,className:`p-2 text-center text-sm font-medium text-muted-foreground border-r last:border-r-0`,children:e},e))}),(0,s.jsx)(`div`,{role:`grid`,"aria-label":`Calendar grid`,className:`grid grid-cols-7 flex-1 auto-rows-fr`,children:l.map((t,n)=>{let r=`${t.getFullYear()}-${t.getMonth()}-${t.getDate()}`,l=_.get(r)||[],f=t.getMonth()===e.getMonth(),m=O(t,u);return(0,s.jsxs)(`div`,{role:`gridcell`,"aria-label":`${t.toLocaleDateString(`default`,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`})}${l.length>0?`, ${l.length} event${l.length>1?`s`:``}`:``}`,className:(0,a.cn)(`border-b border-r last:border-r-0 p-2 min-h-[100px] cursor-pointer hover:bg-accent/50`,!f&&`bg-muted/50 text-muted-foreground opacity-50`,h===n&&`ring-2 ring-primary`),onClick:()=>o?.(t),onDragOver:e=>b(e,n),onDragLeave:x,onDrop:e=>C(e,t),children:[(0,s.jsx)(`div`,{className:(0,a.cn)(`text-sm font-medium mb-2`,m&&`inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground h-6 w-6`),...m?{"aria-current":`date`}:{},children:t.getDate()}),(0,s.jsxs)(`div`,{className:`space-y-0.5`,children:[l.slice(0,4).map(({event:e,isTitleDay:n,isSpanStart:r,isSpanEnd:o},l)=>{let u=!n,{className:d,inlineColor:f}=S(e.color),m=!!c&&o;return(0,s.jsxs)(`div`,{role:`button`,title:e.title,"aria-label":e.title,draggable:!!c,onDragStart:n=>v(n,e,`move`,t),onDragEnd:y,className:(0,a.cn)(`relative text-xs hover:opacity-80 truncate`,c?`cursor-move`:`cursor-pointer`,u?`h-1.5`:`px-2 py-0.5`,r?`rounded-l`:`rounded-l-none`,o?`rounded-r`:`rounded-r-none`,!o&&`-mr-2`,d,p===e.id&&`opacity-50`),style:f?{backgroundColor:f}:void 0,onClick:t=>{t.stopPropagation(),i?.(e)},children:[u?``:e.title,m&&(0,s.jsx)(`span`,{role:`separator`,"aria-label":`Resize event end`,title:`Drag to change end date`,draggable:!0,onDragStart:n=>v(n,e,`resize-end`,t),onDragEnd:y,onClick:e=>e.stopPropagation(),className:`absolute inset-y-0 right-0 w-2 cursor-ew-resize bg-black/25 hover:bg-black/50 rounded-r`})]},`${e.id}-${l}`)}),l.length>4&&(0,s.jsx)(`div`,{className:`text-xs text-muted-foreground px-2`,children:d(`calendar.moreEvents`,{count:l.length-4})})]})]},n)})})]})}var A=48;function j(e){let t=new Date(e);return t.setHours(0,0,0,0),t}function M(e){return e.getHours()*60+e.getMinutes()}function N(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function P({mode:e,date:n,events:r,locale:i=`default`,slotMinutes:o=30,onEventClick:c,onEventDrop:l,onTimeRangeSelect:u}){let{t:d}=w(),f=A*o/60,p=A*24,m=t.useMemo(()=>{if(e===`day`)return[j(n)];let t=E(n);return Array.from({length:7},(e,n)=>{let r=new Date(t);return r.setDate(t.getDate()+n),j(r)})},[e,n.getFullYear(),n.getMonth(),n.getDate()]),h=t.useMemo(()=>new Date,[]),g=t.useCallback(e=>{if(e.allDay)return!0;let t=new Date(e.start),n=e.end?new Date(e.end):new Date(t),r=t.getHours()===0&&t.getMinutes()===0&&t.getSeconds()===0,i=n.getHours()===0&&n.getMinutes()===0&&n.getSeconds()===0,a=n.getTime()-t.getTime();return!!(r&&i||a>=1440*60*1e3)},[]),{allDayEvents:_,timedEvents:v}=t.useMemo(()=>{let e=[],t=[];for(let n of r)g(n)?e.push(n):t.push(n);return{allDayEvents:e,timedEvents:t}},[r,g]),y=t.useMemo(()=>{let e=new Map;for(let t of m)e.set(N(t),[]);for(let t of _){let n=j(new Date(t.start)),r=t.end?new Date(t.end):new Date(t.start),i=j(r);r.getHours()===0&&r.getMinutes()===0&&r.getSeconds()===0&&r.getTime()>n.getTime()&&(i=new Date(i),i.setDate(i.getDate()-1));for(let r of m){let a=j(r);a<n||a>i||e.get(N(r)).push({event:t,isStart:a.getTime()===n.getTime(),isEnd:a.getTime()===i.getTime()})}}return e},[m,_]),b=t.useMemo(()=>{let e=new Map;for(let t of m)e.set(N(t),[]);for(let t of v){let n=new Date(t.start),r=t.end?new Date(t.end):new Date(n.getTime()+3600*1e3);for(let i of m){let a=j(i),o=new Date(a);if(o.setDate(o.getDate()+1),r<=a||n>=o)continue;let s=n<a?a:n,c=r>o?o:r,l=M(s),u=c.getTime()===o.getTime()?1440:M(c);e.get(N(i)).push({event:t,startMin:l,endMin:Math.max(u,l+15),isStart:s.getTime()===n.getTime(),isEnd:c.getTime()===r.getTime()})}}return e},[m,v]),x=t.useMemo(()=>{let e=new Map;for(let[t,n]of b){let r=[...n].sort((e,t)=>e.startMin-t.startMin||e.endMin-t.endMin),i=[],a=[],o=[];for(let e of r){let t=0;for(;i[t]&&i[t].endMin>e.startMin;)t++;i[t]={endMin:e.endMin},a.push({entry:e,col:t})}for(let e=0;e<a.length;e++){let t=a[e],n=t.col;for(let r=0;r<a.length;r++){if(r===e)continue;let i=a[r];i.entry.startMin<t.entry.endMin&&i.entry.endMin>t.entry.startMin&&i.col>n&&(n=i.col)}o.push({...t.entry,col:t.col,cols:n+1})}e.set(t,o)}return e},[b]),C=t.useRef(null),T=t.useRef([]),[D,k]=t.useState(null),P=t.useRef(null);P.current=D;let I=t.useRef(!1),L=t.useCallback((e,t)=>{let n=T.current[t];if(!n)return 0;let r=(e-n.getBoundingClientRect().top+n.scrollTop)/A*60,i=Math.round(r/o)*o;return Math.max(0,Math.min(1440,i))},[o]),R=t.useCallback(e=>{for(let t=0;t<T.current.length;t++){let n=T.current[t];if(!n)continue;let r=n.getBoundingClientRect();if(e>=r.left&&e<=r.right)return t}return-1},[]);t.useEffect(()=>{if(!D)return;let e=e=>{let t=D.kind===`select`||D.kind===`move`?R(e.clientX):D.dayIndex,n=t<0?D.dayIndex??0:t,r=L(e.clientY,n);k(e=>e&&(e.kind===`select`?{...e,dayIndex:n>=0?n:e.dayIndex,headMinutes:r}:e.kind===`move`?{...e,dayIndex:n,minutes:r}:{...e,minutes:r}))},t=e=>{let t=P.current;if(!t){k(null);return}try{if(t.kind===`select`&&u){let e=Math.min(t.anchorMinutes,t.headMinutes),n=Math.max(t.anchorMinutes,t.headMinutes),r=e,i=n===e?Math.min(1440,e+o):n,a=m[t.dayIndex]??m[0],s=new Date(a);s.setHours(0,Math.round(r),0,0);let c=new Date(a);c.setHours(0,Math.round(i),0,0),I.current=!0,u(s,c)}else if(t.kind===`move`&&l){let e=r.find(e=>String(e.id)===String(t.eventId));if(e){let n=t.dayIndex<0?0:t.dayIndex,r=t.minutes-t.grabMinuteOffset,i=Math.max(0,Math.min(1440-t.durationMin,Math.round(r/o)*o)),a=m[n]??m[0],s=new Date(a);s.setHours(0,i,0,0);let c=new Date(s.getTime()+t.durationMin*60*1e3);I.current=!0,l(e,s,c)}}else if(t.kind===`resize-top`&&l){let e=r.find(e=>String(e.id)===String(t.eventId));if(e){let n=m[t.dayIndex]??m[0],r=Math.min(t.anchorEndMin-o,Math.max(0,t.minutes)),i=new Date(n);i.setHours(0,r,0,0);let a=new Date(n);a.setHours(0,t.anchorEndMin,0,0),I.current=!0,l(e,i,a)}}else if(t.kind===`resize-bottom`&&l){let e=r.find(e=>String(e.id)===String(t.eventId));if(e){let n=m[t.dayIndex]??m[0],r=Math.max(t.anchorStartMin+o,Math.min(1440,t.minutes)),i=new Date(n);i.setHours(0,t.anchorStartMin,0,0);let a=new Date(n);a.setHours(0,r,0,0),I.current=!0,l(e,i,a)}}}finally{k(null),setTimeout(()=>{I.current=!1},50)}};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[D,m,r,o,l,u,R,L]);let z=t.useMemo(()=>m.map(e=>({weekday:e.toLocaleDateString(i,{weekday:`short`}),day:e.getDate(),month:e.toLocaleDateString(i,{month:`short`}),isToday:O(e,h)})),[m,i,h]),B=t.useMemo(()=>Array.from({length:24},(e,t)=>new Date(2024,0,1,t,0).toLocaleTimeString(i,{hour:`numeric`})),[i]),V=(e,t,n,r)=>{if(!l||e.button!==0)return;e.stopPropagation(),e.preventDefault();let i=L(e.clientY,n);k(r===`body`?{kind:`move`,eventId:t.event.id,grabMinuteOffset:Math.max(0,i-t.startMin),durationMin:t.endMin-t.startMin,dayIndex:n,minutes:i}:r===`top`?{kind:`resize-top`,eventId:t.event.id,anchorEndMin:t.endMin,dayIndex:n,minutes:i}:{kind:`resize-bottom`,eventId:t.event.id,anchorStartMin:t.startMin,dayIndex:n,minutes:i})},H=(e,t)=>{if(!u||e.button!==0)return;e.preventDefault();let n=L(e.clientY,t);k({kind:`select`,dayIndex:t,anchorMinutes:n,headMinutes:n})},U=e=>{if(!D)return null;if(D.kind===`select`&&D.dayIndex===e){let t=Math.min(D.anchorMinutes,D.headMinutes),n=Math.max(D.anchorMinutes,D.headMinutes);return(0,s.jsx)(`div`,{className:`absolute left-1 right-1 rounded bg-primary/30 border border-primary pointer-events-none z-10`,style:{top:t/60*A,height:Math.max(f,(n-t)/60*A)},"aria-hidden":!0,children:(0,s.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:F(m[e],t,n,i)})})}if(D.kind===`move`&&D.dayIndex===e){let t=D.minutes-D.grabMinuteOffset,n=Math.max(0,Math.min(1440-D.durationMin,Math.round(t/o)*o));return(0,s.jsx)(`div`,{className:`absolute left-1 right-1 rounded border-2 border-dashed border-primary bg-primary/10 pointer-events-none z-10`,style:{top:n/60*A,height:D.durationMin/60*A},"aria-hidden":!0,children:(0,s.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:F(m[e],n,n+D.durationMin,i)})})}if((D.kind===`resize-top`||D.kind===`resize-bottom`)&&D.dayIndex===e){let t,n;return D.kind===`resize-top`?(t=Math.min(D.anchorEndMin-o,Math.max(0,D.minutes)),n=D.anchorEndMin):(t=D.anchorStartMin,n=Math.max(D.anchorStartMin+o,Math.min(1440,D.minutes))),(0,s.jsx)(`div`,{className:`absolute left-1 right-1 rounded border-2 border-dashed border-primary bg-primary/10 pointer-events-none z-10`,style:{top:t/60*A,height:(n-t)/60*A},"aria-hidden":!0,children:(0,s.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:F(m[e],t,n,i)})})}return null};return(0,s.jsxs)(`div`,{className:`flex flex-col h-full`,ref:C,children:[(0,s.jsxs)(`div`,{className:`flex border-b sticky top-0 bg-background z-20`,children:[(0,s.jsx)(`div`,{className:`w-14 shrink-0 border-r`,"aria-hidden":!0}),z.map((e,t)=>(0,s.jsxs)(`div`,{role:`columnheader`,className:(0,a.cn)(`flex-1 p-2 text-center text-sm border-r last:border-r-0`,e.isToday&&`bg-primary/5`),children:[(0,s.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.weekday}),(0,s.jsx)(`div`,{className:(0,a.cn)(`font-medium`,e.isToday&&`inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground h-6 w-6 mx-auto`),children:e.day})]},t))]}),_.length>0&&(0,s.jsxs)(`div`,{className:`flex border-b bg-muted/20 max-h-[140px] overflow-y-auto`,children:[(0,s.jsx)(`div`,{className:`w-14 shrink-0 border-r flex items-start justify-end pr-1 pt-1 text-[10px] text-muted-foreground sticky left-0 bg-muted/20`,children:d(`calendar.allDay`)===`calendar.allDay`?`all-day`:d(`calendar.allDay`)}),m.map(e=>{let t=N(e);return(0,s.jsx)(`div`,{className:`flex-1 border-r last:border-r-0 min-h-[28px] p-0.5 space-y-0.5`,children:(y.get(t)??[]).map(({event:e,isStart:t,isEnd:n},r)=>{let{className:i,inlineColor:o}=S(e.color);return(0,s.jsx)(`div`,{role:`button`,title:e.title,onClick:t=>{t.stopPropagation(),c?.(e)},className:(0,a.cn)(`text-[11px] px-2 py-0.5 truncate cursor-pointer hover:opacity-80`,t?`rounded-l`:`rounded-l-none -ml-0.5`,n?`rounded-r`:`rounded-r-none -mr-0.5`,i),style:o?{backgroundColor:o}:void 0,children:t?e.title:`\xA0`},`${e.id}-${r}`)})},t)})]}),(0,s.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,s.jsxs)(`div`,{className:`flex`,style:{height:p},children:[(0,s.jsx)(`div`,{className:`w-14 shrink-0 border-r relative`,children:B.map((e,t)=>(0,s.jsx)(`div`,{className:`absolute right-1 text-[10px] text-muted-foreground -translate-y-1/2`,style:{top:t*A},children:t===0?``:e},t))}),m.map((e,t)=>{let n=N(e),r=x.get(n)??[];return(0,s.jsxs)(`div`,{ref:e=>{T.current[t]=e},className:`flex-1 border-r last:border-r-0 relative select-none`,style:{height:p},onPointerDown:e=>H(e,t),"aria-label":e.toLocaleDateString(i,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`}),children:[Array.from({length:24},(e,t)=>(0,s.jsx)(`div`,{className:`absolute left-0 right-0 border-t border-muted/60 pointer-events-none`,style:{top:t*A}},t)),o<60&&Array.from({length:Math.floor(1440/o)},(e,t)=>{let n=t*o;return n%60==0?null:(0,s.jsx)(`div`,{className:`absolute left-0 right-0 border-t border-dashed border-muted/30 pointer-events-none`,style:{top:n/60*A}},t)}),r.map(n=>{let r=n.startMin/60*A,o=Math.max(f,(n.endMin-n.startMin)/60*A),u=100/n.cols,d=n.col*u,{className:p,inlineColor:m}=S(n.event.color),h=D&&D.eventId===n.event.id;return(0,s.jsxs)(`div`,{role:`button`,tabIndex:0,title:n.event.title,"aria-label":n.event.title,onPointerDown:e=>V(e,n,t,`body`),onClick:e=>{if(I.current){e.stopPropagation();return}e.stopPropagation(),c?.(n.event)},className:(0,a.cn)(`absolute rounded text-xs px-2 py-1 overflow-hidden shadow-sm`,l?`cursor-move`:`cursor-pointer`,p,h&&`opacity-40`),style:{top:r,height:o,left:`calc(${d}% + 2px)`,width:`calc(${u}% - 4px)`,...m?{backgroundColor:m}:{}},children:[(0,s.jsx)(`div`,{className:`font-medium truncate`,children:n.event.title}),(0,s.jsx)(`div`,{className:`text-[10px] opacity-80 truncate`,children:F(e,n.startMin,n.endMin,i)}),l&&n.isStart&&(0,s.jsx)(`div`,{onPointerDown:e=>V(e,n,t,`top`),className:`absolute top-0 left-0 right-0 h-1.5 cursor-ns-resize`,"aria-label":`Resize start`}),l&&n.isEnd&&(0,s.jsx)(`div`,{onPointerDown:e=>V(e,n,t,`bottom`),className:`absolute bottom-0 left-0 right-0 h-1.5 cursor-ns-resize`,"aria-label":`Resize end`})]},`${n.event.id}-${n.startMin}`)}),U(t)]},n)})]})})]})}function F(e,t,n,r){let i=new Date(e);i.setHours(0,Math.round(t),0,0);let a=new Date(e);a.setHours(0,Math.round(n),0,0);let o=e=>e.toLocaleTimeString(r,{hour:`numeric`,minute:`2-digit`});return`${o(i)} – ${o(a)}`}function I(e){return`data`in e&&e.data?e.data:`staticData`in e&&e.staticData?{provider:`value`,items:e.staticData}:e.objectName?{provider:`object`,object:e.objectName}:null}function L(e){if(e){if(typeof e==`string`){let t=e.split(` `),n=t[0],r=t[1]?.toLowerCase()===`desc`?`desc`:`asc`;return{[n]:r}}if(Array.isArray(e))return e.reduce((e,t)=>(t.field&&t.order&&(e[t.field]=t.order),e),{})}}function R(e){return`filter`in e&&e.filter&&typeof e.filter==`object`&&`calendar`in e.filter?e.filter.calendar:e.calendar?e.calendar:e.startDateField||e.dateField?{startDateField:e.startDateField||e.dateField,endDateField:e.endDateField||e.endField,titleField:e.titleField,colorField:e.colorField,allDayField:e.allDayField}:null}var z=({schema:e,dataSource:i,className:o,data:u,loading:d,onEventClick:f,onRowClick:p,onDateClick:m,onNavigate:h,onViewChange:g,onEventDrop:_,locale:v})=>{let y=Array.isArray(u),[b,x]=(0,t.useState)(y?u:[]),[S,C]=(0,t.useState)(y?d??!1:!0),[w,E]=(0,t.useState)(null),[D,O]=(0,t.useState)(null),[k,A]=(0,t.useState)(new Date),j=(0,a.useIsMobile)(),M=e.defaultView,[N,P]=(0,t.useState)(()=>{let e=M===`day`||!M;return typeof window<`u`&&window.innerWidth<768&&e?`month`:M||`month`});(0,t.useEffect)(()=>{j&&N===`day`&&(M===`day`||!M)&&P(`month`)},[j]);let[F,z]=(0,t.useState)(0);(0,t.useEffect)(()=>{if(!y&&!(!i?.onMutation||!e.objectName))return i.onMutation(t=>{t.resource===e.objectName&&z(e=>e+1)})},[i,e.objectName,y]);let{ref:B,isRefreshing:V,pullDistance:H}=(0,c.usePullToRefresh)({onRefresh:(0,t.useCallback)(async()=>{z(e=>e+1)},[]),enabled:!!i&&!!e.objectName}),U=(0,t.useMemo)(()=>I(e),[e.data,e.staticData,e.objectName]),W=(0,t.useMemo)(()=>R(e),[e.filter,e.calendar,e.dateField,e.endField,e.titleField,e.colorField]),G=U?.provider===`value`,K=(0,t.useRef)(null);K.current=D,(0,t.useEffect)(()=>{y&&x(u)},[u,y]),(0,t.useEffect)(()=>{y&&d!==void 0&&C(d)},[d,y]),(0,t.useEffect)(()=>{if(y)return;let t=!0;return(async()=>{try{if(!t)return;if(C(!0),G&&U?.provider===`value`){t&&(x(U.items),C(!1));return}if(!i||typeof i.find!=`function`)throw Error(`DataSource required for object/api providers`);if(U?.provider===`object`){let r=U.object,a=(0,n.buildExpandFields)(K.current?.fields),o=(0,n.extractRecords)(await i.find(r,{$filter:e.filter,$orderby:L(e.sort),...a.length>0?{$expand:a}:{}}));t&&x(o)}else U?.provider===`api`&&(console.warn(`API provider not yet implemented for ObjectCalendar`),t&&x([]));t&&C(!1)}catch(e){console.error(`[ObjectCalendar] Error fetching data:`,e),t&&(E(e),C(!1))}})(),()=>{t=!1}},[y,U,i,G,e.filter,e.sort,F]),(0,t.useEffect)(()=>{!G&&i&&(async()=>{try{if(!i)return;let t=U?.provider===`object`?U.object:e.objectName;if(!t)return;O(await i.getObjectSchema(t))}catch(e){console.error(`Failed to fetch object schema:`,e)}})()},[e.objectName,i,G,U]);let q=(0,t.useMemo)(()=>{if(!W||!b.length)return[];let{startDateField:e,endDateField:t,titleField:n,colorField:r}=W,i=D?.titleFormat,a=typeof i==`string`?i:i&&typeof i==`object`&&typeof i.source==`string`?i.source:void 0,o=D?.NAME_FIELD_KEY,s=[`name`,`full_name`,`fullName`,`title`,`subject`,`label`,`display_name`,`displayName`],c=(e,t)=>{let n=`[-\\u2013\\u2014|/·,:]`,r=!1,i=e.replace(/\{([^{}]+)\}/g,(e,n)=>{let i=t[n.trim()];return i!=null&&i!==``?(r=!0,String(i)):`\0`});return r?i.replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim():``},l=e=>{let t;if(n&&(t=e[n],typeof t==`string`&&(t=t.trim())),!t&&a){let n=c(a,e);n&&(t=n)}if(!t&&o){let n=e[o];typeof n==`string`?t=n.trim():n&&(t=n)}if(!t)for(let n of s){let r=e[n],i=typeof r==`string`?r.trim():r;if(i){t=i;break}}return t||`Untitled`};return b.map((n,i)=>{let a=n[e],o=t?n[t]:null,s=l(n),c=r?n[r]:void 0;return{id:n.id||n._id||`event-${i}`,title:s,start:a?new Date(a):new Date,end:o?new Date(o):void 0,color:c,allDay:!o,data:n}}).filter(e=>!isNaN(e.start.getTime()))},[b,W,D]);(0,t.useCallback)(()=>{m?.(new Date)},[m]);let J=e.navigation??{mode:`drawer`,width:`min(960px, 60vw)`},Y=J.mode===`drawer`||J.mode===`modal`||J.mode===`split`||J.mode===`popover`,X=(0,r.useNavigationOverlay)({navigation:J,objectName:e.objectName,onRowClick:Y?void 0:p}),ee=(0,t.useCallback)(async(t,n,r)=>{if(!W)return;let{startDateField:a,endDateField:o}=W,s=t?.id??t?._id;if(!s||!e.objectName||!i?.update)return;let c={[a]:n.toISOString()};o&&r&&(c[o]=r.toISOString());let l=b;x(e=>e.map(e=>(e?.id??e?._id)===s?{...e,...c}:e));try{await i.update(e.objectName,s,c)}catch(e){x(l),console.error(`[ObjectCalendar] Failed to persist drag-and-drop reschedule:`,e)}},[W,e.objectName,i,b]),[Z,Q]=(0,t.useState)(null),te=(0,t.useCallback)(t=>{!W||!e.objectName||!i?.create||Q({start:t,title:``,submitting:!1})},[W,e.objectName,i]),ne=(0,t.useCallback)((t,n)=>{!W||!e.objectName||!i?.create||Q({start:t,end:n,title:``,submitting:!1})},[W,e.objectName,i]),$=(0,t.useCallback)(async()=>{if(!Z||!W)return;let t=Z.title.trim();if(!t){Q(e=>e&&{...e,error:`Title is required`});return}if(!e.objectName||!i?.create)return;Q(e=>e&&{...e,submitting:!0,error:void 0});let{startDateField:n,endDateField:r,titleField:a}=W,o={[a||`name`]:t,[n]:Z.start.toISOString()};r&&(o[r]=(Z.end??Z.start).toISOString());let s=D?.fields;if(s&&typeof s==`object`){let e=Array.isArray(s)?s.map(e=>[e.name??e.apiName,e]):Object.entries(s);for(let[t,n]of e){if(!t||t in o||!n?.required)continue;if(n.defaultValue!==void 0&&n.defaultValue!==null){o[t]=n.defaultValue;continue}let e=n.type;if(e===`select`||e===`picklist`||e===`status`){let e=(n.options||n.choices||[])[0];e!==void 0&&(o[t]=typeof e==`object`?e.value??e.id:e)}else e===`boolean`||e===`checkbox`?o[t]=!1:(e===`number`||e===`integer`||e===`decimal`||e===`currency`||e===`percent`)&&(o[t]=0)}}try{let t=await i.create(e.objectName,o),n=(t&&(t.record||t.data||t))??null;n&&(n.id!==void 0||n._id!==void 0)&&x(e=>[...e,n]),Q(null)}catch(e){let t=e?.message||String(e);Q(e=>e&&{...e,submitting:!1,error:t}),console.error(`[ObjectCalendar] Quick-create failed:`,e)}},[Z,W,e.objectName,i,D]);return S?(0,s.jsx)(`div`,{className:o,children:(0,s.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,s.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading calendar...`})})}):w?(0,s.jsx)(`div`,{className:o,children:(0,s.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,s.jsxs)(`div`,{className:`text-destructive`,children:[`Error: `,w.message]})})}):W?(0,s.jsxs)(`div`,{ref:B,className:o,children:[H>0&&(0,s.jsx)(`div`,{className:`flex items-center justify-center text-xs text-muted-foreground`,style:{height:H},children:V?`Refreshing…`:`Pull to refresh`}),(0,s.jsx)(`div`,{className:`bg-background h-[calc(100vh-120px)] sm:h-[calc(100vh-160px)] md:h-[calc(100vh-200px)] min-h-[400px] sm:min-h-[600px]`,children:(0,s.jsx)(T,{events:q,currentDate:k,view:N,locale:v,onEventClick:e=>{X.handleClick(e.data),Y||f?.(e.data)},onDateClick:e=>{m?m(e):te(e)},onNavigate:e=>{A(e),h?.(e)},onViewChange:e=>{P(e),g?.(e)},onAddClick:void 0,onEventDrop:(e,t,n)=>{_?_(e.data,t,n):ee(e.data,t,n)},onTimeRangeSelect:ne})}),(0,s.jsx)(a.Dialog,{open:!!Z,onOpenChange:e=>{e||Q(null)},children:(0,s.jsxs)(a.DialogContent,{className:`sm:max-w-md`,children:[(0,s.jsxs)(a.DialogHeader,{children:[(0,s.jsx)(a.DialogTitle,{children:`New event`}),(0,s.jsx)(a.DialogDescription,{children:Z&&(()=>{let e=Z.end&&Z.end.getTime()!==Z.start.getTime(),t=Z.start.toLocaleDateString(v,{year:`numeric`,month:`long`,day:`numeric`});if(e){let e=e=>e.toLocaleTimeString(v,{hour:`numeric`,minute:`2-digit`});return(0,s.jsxs)(s.Fragment,{children:[t,` · `,e(Z.start),` – `,e(Z.end)]})}return(0,s.jsxs)(s.Fragment,{children:[`On `,t]})})()})]}),(0,s.jsxs)(`div`,{className:`space-y-2`,children:[(0,s.jsx)(a.Label,{htmlFor:`quick-create-title`,children:`Title`}),(0,s.jsx)(a.Input,{id:`quick-create-title`,autoFocus:!0,value:Z?.title??``,onChange:e=>Q(t=>t&&{...t,title:e.target.value,error:void 0}),onKeyDown:e=>{e.key===`Enter`&&!Z?.submitting&&(e.preventDefault(),$())},placeholder:`What's this event about?`,disabled:Z?.submitting}),Z?.error&&(0,s.jsx)(`p`,{className:`text-sm text-destructive`,children:Z.error})]}),(0,s.jsxs)(a.DialogFooter,{children:[(0,s.jsx)(a.Button,{variant:`outline`,onClick:()=>Q(null),disabled:Z?.submitting,children:`Cancel`}),(0,s.jsx)(a.Button,{onClick:()=>void $(),disabled:Z?.submitting||!Z?.title.trim(),children:Z?.submitting?`Creating…`:`Create`})]})]})}),X.isOverlay&&X.isOpen&&X.selectedRecord&&(()=>{let t=U?.provider===`object`?U.object:e.objectName,n=X.selectedRecord,r=n.id??n._id;if(!t||r==null)return null;let a=W?.titleField?String(n[W.titleField]??`Event Details`):`Event Details`;return(0,s.jsx)(l.RecordDetailDrawer,{open:!0,onClose:X.close,title:a,record:n,objectName:t,recordId:r,dataSource:i,objectSchema:D,width:X.width??`min(960px, 60vw)`,fullPageHref:(0,l.deriveRecordPageHref)(t,r)??void 0,onFieldSave:async(e,n)=>{i?.update&&(await i.update(t,String(r),{[e]:n}),x(t=>t.map(t=>String(t.id??t._id)===String(r)?{...t,[e]:n}:t)))},onDelete:async()=>{i?.delete&&(await i.delete(t,String(r)),x(e=>e.filter(e=>String(e.id??e._id)!==String(r))))}})})()]}):(0,s.jsx)(`div`,{className:o,children:(0,s.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,s.jsx)(`div`,{className:`text-muted-foreground`,children:`Calendar configuration required. Please specify startDateField and titleField.`})})})};n.ComponentRegistry.register(`calendar-view`,({schema:e,className:n,onAction:r,...i})=>{let a=t.default.useMemo(()=>!e.data||!Array.isArray(e.data)?[]:e.data.map((t,n)=>{let r=e.titleField||`title`,i=e.startDateField||`start`,a=e.endDateField||`end`,o=e.colorField||`color`,s=e.allDayField||`allDay`;return{id:t.id||t._id||n,title:t[r]||`Untitled Event`,start:new Date(t[i]),end:t[a]?new Date(t[a]):void 0,allDay:t[s],color:t[o],data:t}}),[e.data,e.titleField,e.startDateField,e.endDateField,e.colorField,e.allDayField]);return(0,s.jsx)(T,{className:n,events:a,onEventClick:e=>{r?.({type:`event-click`,payload:e})},...i})},{namespace:`plugin-calendar`,label:`Calendar View`,inputs:[{name:`data`,type:`array`,label:`Data`,description:`Array of record objects to display as events`},{name:`titleField`,type:`string`,label:`Title Field`,defaultValue:`title`,description:`Field name to use for event title`},{name:`startDateField`,type:`string`,label:`Start Date Field`,defaultValue:`start`,description:`Field name for event start date`},{name:`endDateField`,type:`string`,label:`End Date Field`,defaultValue:`end`,description:`Field name for event end date (optional)`},{name:`allDayField`,type:`string`,label:`All Day Field`,defaultValue:`allDay`,description:`Field name for all-day flag`},{name:`colorField`,type:`string`,label:`Color Field`,defaultValue:`color`,description:`Field name for event color`},{name:`colorMapping`,type:`object`,label:`Color Mapping`,description:`Map field values to colors (e.g., {meeting: "blue", deadline: "red"})`},{name:`view`,type:`enum`,enum:[`month`,`week`,`day`],defaultValue:`month`,label:`View Mode`,description:`Calendar view mode (month, week, or day)`},{name:`currentDate`,type:`string`,label:`Current Date`,description:`ISO date string for initial calendar date`},{name:`allowCreate`,type:`boolean`,label:`Allow Create`,defaultValue:!1,description:`Allow creating events by clicking on dates`},{name:`className`,type:`string`,label:`CSS Class`}],defaultProps:{view:`month`,titleField:`title`,startDateField:`start`,endDateField:`end`,allDayField:`allDay`,colorField:`color`,allowCreate:!1,data:[{id:1,title:`Team Meeting`,start:new Date(new Date().setHours(10,0,0,0)).toISOString(),end:new Date(new Date().setHours(11,0,0,0)).toISOString(),color:`#3b82f6`,allDay:!1},{id:2,title:`Project Deadline`,start:new Date(new Date().setDate(new Date().getDate()+3)).toISOString(),color:`#ef4444`,allDay:!0},{id:3,title:`Conference`,start:new Date(new Date().setDate(new Date().getDate()+7)).toISOString(),end:new Date(new Date().setDate(new Date().getDate()+9)).toISOString(),color:`#10b981`,allDay:!0}],className:`h-[600px] border rounded-lg`}});var B=({schema:e,...t})=>{let{dataSource:n}=(0,r.useSchemaContext)()||{};return(0,s.jsx)(z,{schema:e,dataSource:n,...t})};n.ComponentRegistry.register(`object-calendar`,B,{namespace:`plugin-calendar`,label:`Object Calendar`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`calendar`,type:`object`,label:`Calendar Config`,description:`startDateField, endDateField, titleField, colorField`}]}),n.ComponentRegistry.register(`calendar`,B,{namespace:`view`,label:`Calendar View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`calendar`,type:`object`,label:`Calendar Config`,description:`startDateField, endDateField, titleField, colorField`}]}),e.CalendarView=T,e.ObjectCalendar=z,e.ObjectCalendarRenderer=B});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/plugin-calendar",
3
- "version": "5.3.2",
3
+ "version": "5.4.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Calendar view plugins for Object UI - includes both ObjectQL-integrated and standalone calendar components",
@@ -25,14 +25,14 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "lucide-react": "^1.16.0",
28
- "@object-ui/components": "5.3.2",
29
- "@object-ui/core": "5.3.2",
30
- "@object-ui/fields": "5.3.2",
31
- "@object-ui/i18n": "5.3.2",
32
- "@object-ui/mobile": "5.3.2",
33
- "@object-ui/plugin-detail": "5.3.2",
34
- "@object-ui/react": "5.3.2",
35
- "@object-ui/types": "5.3.2"
28
+ "@object-ui/components": "5.4.1",
29
+ "@object-ui/core": "5.4.1",
30
+ "@object-ui/fields": "5.4.1",
31
+ "@object-ui/i18n": "5.4.1",
32
+ "@object-ui/mobile": "5.4.1",
33
+ "@object-ui/plugin-detail": "5.4.1",
34
+ "@object-ui/react": "5.4.1",
35
+ "@object-ui/types": "5.4.1"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "react": "^18.0.0 || ^19.0.0",
@@ -45,7 +45,7 @@
45
45
  "typescript": "^6.0.3",
46
46
  "vite": "^8.0.13",
47
47
  "vite-plugin-dts": "^5.0.0",
48
- "@object-ui/data-objectstack": "5.3.2"
48
+ "@object-ui/data-objectstack": "5.4.1"
49
49
  },
50
50
  "keywords": [
51
51
  "objectui",