@elizaos/plugin-simple-views 2.0.3-beta.5
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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +184 -0
- package/dist/plugin.js.map +1 -0
- package/dist/register.d.ts +2 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +26 -0
- package/dist/register.js.map +1 -0
- package/dist/routes.d.ts +3 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +64 -0
- package/dist/routes.js.map +1 -0
- package/dist/simple-views-view-bundle.d.ts +2 -0
- package/dist/simple-views-view-bundle.d.ts.map +1 -0
- package/dist/simple-views-view-bundle.js +6 -0
- package/dist/simple-views-view-bundle.js.map +1 -0
- package/dist/simple-views.interact.d.ts +9 -0
- package/dist/simple-views.interact.d.ts.map +1 -0
- package/dist/simple-views.interact.js +230 -0
- package/dist/simple-views.interact.js.map +1 -0
- package/dist/storage.d.ts +44 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +179 -0
- package/dist/storage.js.map +1 -0
- package/dist/ui.d.ts +3 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +1041 -0
- package/dist/ui.js.map +1 -0
- package/dist/views/bundle.js +1159 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +115 -0
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui.tsx"],"sourcesContent":["import { AgentButton, useAgentElement } from \"@elizaos/ui/agent-surface\";\nimport {\n CalendarDays,\n ChevronLeft,\n ChevronRight,\n Plus,\n Settings,\n StickyNote,\n Trash2,\n} from \"lucide-react\";\nimport {\n type CSSProperties,\n type FormEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { interact } from \"./simple-views.interact.js\";\nimport {\n applySimpleViewsSnapshot,\n isSimpleViewsSnapshot,\n normalizeDateKey,\n readSelectedDate,\n SIMPLE_VIEWS_EVENT,\n type SimpleCalendarEvent,\n type SimpleViewsSnapshot,\n type StickyColor,\n type StickyNote as StickyNoteModel,\n simpleViewsSnapshot,\n todayDateKey,\n} from \"./storage.js\";\n\nconst COLORS: StickyColor[] = [\"yellow\", \"green\", \"rose\", \"slate\"];\n\nconst NOTE_COLORS: Record<StickyColor, CSSProperties> = {\n yellow: { background: \"#fff5bf\", borderColor: \"#d9b84b\" },\n green: { background: \"#dff6df\", borderColor: \"#7dbb77\" },\n rose: { background: \"#ffe4ec\", borderColor: \"#d991aa\" },\n slate: { background: \"#e8edf2\", borderColor: \"#9aa8b5\" },\n};\n\nconst EVENT_DOTS: Record<StickyColor, string> = {\n yellow: \"#b88719\",\n green: \"#2f7d46\",\n rose: \"#b84065\",\n slate: \"#586879\",\n};\n\nconst shellStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: \"100%\",\n color: \"#15171c\",\n background: \"#f6f7f4\",\n fontFamily:\n \"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif\",\n};\n\nconst headerStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 16,\n padding: \"18px 20px 14px\",\n borderBottom: \"1px solid #dde1d8\",\n background: \"#ffffff\",\n};\n\nconst titleWrapStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n minWidth: 0,\n};\n\nconst iconBoxStyle: CSSProperties = {\n display: \"grid\",\n placeItems: \"center\",\n width: 34,\n height: 34,\n border: \"1px solid #d6dbd2\",\n borderRadius: 8,\n background: \"#f2f4ef\",\n color: \"#263326\",\n};\n\nconst h1Style: CSSProperties = {\n margin: 0,\n fontSize: 20,\n lineHeight: \"26px\",\n fontWeight: 700,\n letterSpacing: 0,\n};\n\nconst subTextStyle: CSSProperties = {\n margin: 0,\n color: \"#60695d\",\n fontSize: 13,\n lineHeight: \"18px\",\n};\n\nconst toolbarStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 8,\n justifyContent: \"flex-end\",\n};\n\nconst buttonStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 7,\n minHeight: 34,\n border: \"1px solid #c9d0c4\",\n borderRadius: 8,\n padding: \"0 12px\",\n background: \"#ffffff\",\n color: \"#1f271e\",\n fontSize: 13,\n fontWeight: 600,\n cursor: \"pointer\",\n};\n\nconst iconButtonStyle: CSSProperties = {\n ...buttonStyle,\n width: 34,\n padding: 0,\n};\n\nconst primaryButtonStyle: CSSProperties = {\n ...buttonStyle,\n borderColor: \"#476b3b\",\n background: \"#476b3b\",\n color: \"#ffffff\",\n};\n\nconst fieldStyle: CSSProperties = {\n width: \"100%\",\n minHeight: 36,\n border: \"1px solid #c9d0c4\",\n borderRadius: 8,\n padding: \"8px 10px\",\n background: \"#ffffff\",\n color: \"#15171c\",\n font: \"inherit\",\n fontSize: 14,\n lineHeight: \"20px\",\n boxSizing: \"border-box\",\n};\n\nconst panelStyle: CSSProperties = {\n border: \"1px solid #dde1d8\",\n borderRadius: 8,\n background: \"#ffffff\",\n};\n\nasync function fetchSimpleViewsSnapshot(): Promise<SimpleViewsSnapshot | null> {\n if (typeof fetch !== \"function\") return null;\n try {\n const response = await fetch(\"/api/simple-views/state\", {\n headers: { Accept: \"application/json\" },\n });\n if (!response.ok) return null;\n const body = (await response.json()) as unknown;\n return isSimpleViewsSnapshot(body) ? body : null;\n } catch {\n return null;\n }\n}\n\nasync function callSimpleViewsCapability(\n capability: string,\n params?: Record<string, unknown>,\n): Promise<void> {\n if (typeof fetch === \"function\") {\n try {\n const response = await fetch(\"/api/simple-views/interact\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({ capability, params }),\n });\n if (response.ok) {\n const body = (await response.json()) as unknown;\n if (\n body &&\n typeof body === \"object\" &&\n \"state\" in body &&\n isSimpleViewsSnapshot((body as { state: unknown }).state)\n ) {\n applySimpleViewsSnapshot(\n (body as { state: SimpleViewsSnapshot }).state,\n );\n return;\n }\n }\n } catch {\n // Fall back to local storage below when the optional backend is absent.\n }\n }\n\n await interact(capability, params);\n}\n\nfunction useSimpleViewsSnapshot(): SimpleViewsSnapshot {\n const [snapshot, setSnapshot] = useState(() => simpleViewsSnapshot());\n\n useEffect(() => {\n const refresh = () => setSnapshot(simpleViewsSnapshot());\n const onStorage = () => refresh();\n const onUpdate = () => refresh();\n const onSharedViewEvent = (event: Event) => {\n const detail = (event as CustomEvent<{ type?: unknown }>).detail;\n if (\n detail?.type === \"simple-views:update\" ||\n detail?.type === \"view:notes:updated\" ||\n detail?.type === \"view:simple-calendar:updated\"\n ) {\n refresh();\n }\n };\n\n window.addEventListener(SIMPLE_VIEWS_EVENT, onUpdate);\n window.addEventListener(\"storage\", onStorage);\n window.addEventListener(\"elizaos-view-event\", onSharedViewEvent);\n void fetchSimpleViewsSnapshot().then((next) => {\n if (next) {\n applySimpleViewsSnapshot(next, { preserveLocalDataOnEmpty: true });\n refresh();\n }\n });\n return () => {\n window.removeEventListener(SIMPLE_VIEWS_EVENT, onUpdate);\n window.removeEventListener(\"storage\", onStorage);\n window.removeEventListener(\"elizaos-view-event\", onSharedViewEvent);\n };\n }, []);\n\n return snapshot;\n}\n\ninterface AgentTextInputProps {\n id: string;\n label: string;\n value: string;\n onFill: (value: string) => void;\n group: string;\n placeholder?: string;\n style?: CSSProperties;\n}\n\nfunction AgentTextInput({\n id,\n label,\n value,\n onFill,\n group,\n placeholder,\n style,\n}: AgentTextInputProps) {\n const { ref, agentProps } = useAgentElement<HTMLInputElement>({\n id,\n label,\n role: \"text-input\",\n group,\n fillable: true,\n getValue: () => value,\n onFill,\n });\n return (\n <input\n ref={ref}\n aria-label={label}\n {...agentProps}\n value={value}\n onChange={(event) => onFill(event.target.value)}\n placeholder={placeholder}\n style={{ ...fieldStyle, ...style }}\n />\n );\n}\n\nfunction AgentTextarea({\n id,\n label,\n value,\n onFill,\n group,\n}: AgentTextInputProps) {\n const { ref, agentProps } = useAgentElement<HTMLTextAreaElement>({\n id,\n label,\n role: \"textarea\",\n group,\n fillable: true,\n getValue: () => value,\n onFill,\n });\n return (\n <textarea\n ref={ref}\n aria-label={label}\n {...agentProps}\n value={value}\n onChange={(event) => onFill(event.target.value)}\n rows={5}\n style={{ ...fieldStyle, minHeight: 112, resize: \"vertical\" }}\n />\n );\n}\n\nfunction openSettings(): void {\n if (typeof window === \"undefined\") return;\n window.history.pushState(null, \"\", \"/settings\");\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\n}\n\nfunction NoteCard({\n note,\n onDelete,\n}: {\n note: StickyNoteModel;\n onDelete: (id: string) => void;\n}) {\n const cardElement = useAgentElement<HTMLDivElement>({\n id: `note-card-${note.id}`,\n label: `Note: ${note.title}`,\n role: \"card\",\n group: \"notes-list\",\n description: note.body,\n status: note.color,\n });\n const deleteElement = useAgentElement<HTMLButtonElement>({\n id: `delete-note-${note.id}`,\n label: `Delete note ${note.title}`,\n role: \"button\",\n group: \"notes-list\",\n onActivate: () => onDelete(note.id),\n });\n\n return (\n <div\n ref={cardElement.ref}\n {...cardElement.agentProps}\n style={{\n ...NOTE_COLORS[note.color],\n minHeight: 180,\n border: \"1px solid\",\n borderRadius: 8,\n padding: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n boxShadow: \"0 8px 20px rgba(31, 39, 30, 0.08)\",\n }}\n >\n <div\n style={{ display: \"flex\", justifyContent: \"space-between\", gap: 10 }}\n >\n <h2\n style={{\n margin: 0,\n fontSize: 16,\n lineHeight: \"22px\",\n fontWeight: 700,\n overflowWrap: \"anywhere\",\n }}\n >\n {note.title}\n </h2>\n <button\n ref={deleteElement.ref}\n type=\"button\"\n {...deleteElement.agentProps}\n onClick={() => onDelete(note.id)}\n style={{\n ...iconButtonStyle,\n width: 30,\n height: 30,\n minHeight: 30,\n background: \"rgba(255,255,255,0.68)\",\n }}\n title=\"Delete note\"\n >\n <Trash2 size={16} aria-hidden />\n </button>\n </div>\n <p\n style={{\n margin: 0,\n color: \"#253025\",\n fontSize: 14,\n lineHeight: \"21px\",\n whiteSpace: \"pre-wrap\",\n overflowWrap: \"anywhere\",\n }}\n >\n {note.body}\n </p>\n </div>\n );\n}\n\nexport function NotesView() {\n const { notes } = useSimpleViewsSnapshot();\n const [title, setTitle] = useState(\"\");\n const [body, setBody] = useState(\"\");\n const [color, setColor] = useState<StickyColor>(\"yellow\");\n const titleRef = useRef(title);\n const bodyRef = useRef(body);\n\n const setTitleValue = useCallback((value: string) => {\n titleRef.current = value;\n setTitle(value);\n }, []);\n\n const setBodyValue = useCallback((value: string) => {\n bodyRef.current = value;\n setBody(value);\n }, []);\n\n const addNote = useCallback(async () => {\n const nextTitle = titleRef.current.trim();\n const nextBody = bodyRef.current.trim();\n if (!nextTitle && !nextBody) return;\n await callSimpleViewsCapability(\"create-note\", {\n title: nextTitle || \"Untitled\",\n body: nextBody || \"New note\",\n color,\n });\n setTitleValue(\"\");\n setBodyValue(\"\");\n }, [color, setBodyValue, setTitleValue]);\n\n const deleteNote = useCallback((id: string) => {\n void callSimpleViewsCapability(\"delete-note\", { id });\n }, []);\n\n const clearNotes = useCallback(() => {\n void callSimpleViewsCapability(\"clear-notes\");\n }, []);\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n void addNote();\n };\n\n return (\n <main data-testid=\"simple-notes-view\" style={shellStyle}>\n <header style={headerStyle}>\n <div style={titleWrapStyle}>\n <div style={iconBoxStyle}>\n <StickyNote size={18} aria-hidden />\n </div>\n <div>\n <h1 style={h1Style}>Notes</h1>\n <p style={subTextStyle}>{notes.length} sticky notes</p>\n </div>\n </div>\n <div style={toolbarStyle}>\n <AgentButton\n agentId=\"notes-clear\"\n agentLabel=\"Clear notes\"\n onClick={clearNotes}\n style={buttonStyle}\n >\n Clear\n </AgentButton>\n <AgentButton\n agentId=\"notes-open-settings\"\n agentLabel=\"Open settings\"\n onClick={openSettings}\n style={iconButtonStyle}\n title=\"Open settings\"\n >\n <Settings size={16} aria-hidden />\n </AgentButton>\n </div>\n </header>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns:\n \"repeat(auto-fit, minmax(min(100%, 280px), 1fr))\",\n gap: 18,\n padding: 20,\n alignItems: \"start\",\n }}\n >\n <form\n onSubmit={handleSubmit}\n style={{\n ...panelStyle,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n padding: 16,\n }}\n >\n <AgentTextInput\n id=\"note-title\"\n label=\"Note title\"\n value={title}\n onFill={setTitleValue}\n placeholder=\"Title\"\n group=\"note-compose\"\n />\n <AgentTextarea\n id=\"note-body\"\n label=\"Note body\"\n value={body}\n onFill={setBodyValue}\n group=\"note-compose\"\n />\n <div style={{ display: \"flex\", gap: 8, flexWrap: \"wrap\" }}>\n {COLORS.map((option) => (\n <AgentButton\n key={option}\n agentId={`note-color-${option}`}\n agentLabel={`Set note color ${option}`}\n agentRole=\"toggle\"\n agentStatus={color === option ? \"active\" : undefined}\n onClick={() => setColor(option)}\n style={{\n ...buttonStyle,\n background: NOTE_COLORS[option].background,\n borderColor:\n color === option\n ? \"#15171c\"\n : NOTE_COLORS[option].borderColor,\n minWidth: 72,\n textTransform: \"capitalize\",\n }}\n >\n {option}\n </AgentButton>\n ))}\n </div>\n <AgentButton\n agentId=\"add-note\"\n agentLabel=\"Add note\"\n onClick={addNote}\n style={primaryButtonStyle}\n >\n <Plus size={16} aria-hidden />\n Add note\n </AgentButton>\n </form>\n\n <section\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(220px, 1fr))\",\n gap: 16,\n }}\n aria-label=\"Sticky note wall\"\n >\n {notes.map((note) => (\n <NoteCard key={note.id} note={note} onDelete={deleteNote} />\n ))}\n </section>\n </div>\n </main>\n );\n}\n\nfunction dateKey(date: Date): string {\n return todayDateKey(date);\n}\n\nfunction parseDateKey(value: string): Date {\n const normalized = normalizeDateKey(value) ?? todayDateKey();\n const [year, month, day] = normalized.split(\"-\").map((part) => Number(part));\n return new Date(Date.UTC(year, month - 1, day));\n}\n\nfunction monthLabel(date: Date): string {\n return new Intl.DateTimeFormat(\"en\", {\n month: \"long\",\n year: \"numeric\",\n timeZone: \"UTC\",\n }).format(date);\n}\n\nfunction startOfMonth(date: Date): Date {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n}\n\nfunction addMonths(date: Date, amount: number): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + amount, 1),\n );\n}\n\nfunction buildCalendarDays(cursor: Date): Date[] {\n const monthStart = startOfMonth(cursor);\n const startOffset = monthStart.getUTCDay();\n const gridStart = new Date(monthStart);\n gridStart.setUTCDate(monthStart.getUTCDate() - startOffset);\n return Array.from({ length: 42 }, (_, index) => {\n const day = new Date(gridStart);\n day.setUTCDate(gridStart.getUTCDate() + index);\n return day;\n });\n}\n\nfunction eventsForDate(\n events: SimpleCalendarEvent[],\n date: string,\n): SimpleCalendarEvent[] {\n return events\n .filter((event) => event.date === date)\n .sort((a: SimpleCalendarEvent, b: SimpleCalendarEvent) =>\n `${a.time} ${a.title}`.localeCompare(`${b.time} ${b.title}`),\n );\n}\n\nfunction CalendarDayButton({\n day,\n selectedDate,\n cursorMonth,\n events,\n onSelect,\n}: {\n day: Date;\n selectedDate: string;\n cursorMonth: number;\n events: SimpleCalendarEvent[];\n onSelect: (date: string) => void;\n}) {\n const key = dateKey(day);\n const isSelected = key === selectedDate;\n const inMonth = day.getUTCMonth() === cursorMonth;\n const dayEvents = eventsForDate(events, key);\n const dayElement = useAgentElement<HTMLButtonElement>({\n id: `calendar-day-${key}`,\n label: `Select ${key}`,\n role: \"button\",\n group: \"simple-calendar-grid\",\n description:\n dayEvents.length > 0\n ? `${dayEvents.length} event${dayEvents.length === 1 ? \"\" : \"s\"}`\n : \"No events\",\n status: isSelected\n ? \"selected\"\n : inMonth\n ? \"current-month\"\n : \"outside-month\",\n onActivate: () => onSelect(key),\n });\n\n return (\n <button\n ref={dayElement.ref}\n type=\"button\"\n {...dayElement.agentProps}\n onClick={() => onSelect(key)}\n style={{\n minWidth: 0,\n minHeight: 78,\n border: isSelected ? \"2px solid #476b3b\" : \"1px solid #dde1d8\",\n borderRadius: 8,\n padding: 6,\n background: inMonth ? \"#ffffff\" : \"#eef1eb\",\n color: inMonth ? \"#15171c\" : \"#687264\",\n textAlign: \"left\",\n cursor: \"pointer\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6,\n }}\n >\n <span style={{ fontWeight: 700, fontSize: 13 }}>{day.getUTCDate()}</span>\n <span style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\" }}>\n {dayEvents.slice(0, 4).map((event) => (\n <span\n key={event.id}\n style={{\n width: 7,\n height: 7,\n borderRadius: 999,\n background: EVENT_DOTS[event.color],\n }}\n />\n ))}\n </span>\n {dayEvents[0] ? (\n <span\n style={{\n fontSize: 11,\n lineHeight: \"15px\",\n color: \"#505b4d\",\n overflowWrap: \"anywhere\",\n }}\n >\n {dayEvents[0].title}\n </span>\n ) : null}\n </button>\n );\n}\n\nfunction EventRow({\n event,\n onDelete,\n}: {\n event: SimpleCalendarEvent;\n onDelete: (id: string) => void;\n}) {\n const rowElement = useAgentElement<HTMLDivElement>({\n id: `calendar-event-${event.id}`,\n label: `Event: ${event.title}`,\n role: \"card\",\n group: \"simple-calendar-events\",\n description: `${event.date} ${event.time}. ${event.notes}`,\n status: event.color,\n });\n const deleteElement = useAgentElement<HTMLButtonElement>({\n id: `delete-calendar-event-${event.id}`,\n label: `Delete calendar event ${event.title}`,\n role: \"button\",\n group: \"simple-calendar-events\",\n onActivate: () => onDelete(event.id),\n });\n\n return (\n <div\n ref={rowElement.ref}\n {...rowElement.agentProps}\n style={{\n display: \"grid\",\n gridTemplateColumns: \"10px minmax(0, 1fr) 32px\",\n gap: 10,\n alignItems: \"center\",\n padding: \"10px 0\",\n borderBottom: \"1px solid #ecefe9\",\n }}\n >\n <span\n style={{\n width: 8,\n height: 34,\n borderRadius: 999,\n background: EVENT_DOTS[event.color],\n }}\n />\n <div style={{ minWidth: 0 }}>\n <div\n style={{\n fontWeight: 700,\n fontSize: 14,\n lineHeight: \"20px\",\n overflowWrap: \"anywhere\",\n }}\n >\n {event.time} - {event.title}\n </div>\n {event.notes ? (\n <div\n style={{\n color: \"#60695d\",\n fontSize: 12,\n lineHeight: \"17px\",\n overflowWrap: \"anywhere\",\n }}\n >\n {event.notes}\n </div>\n ) : null}\n </div>\n <button\n ref={deleteElement.ref}\n type=\"button\"\n {...deleteElement.agentProps}\n onClick={() => onDelete(event.id)}\n style={iconButtonStyle}\n title=\"Delete event\"\n >\n <Trash2 size={16} aria-hidden />\n </button>\n </div>\n );\n}\n\nexport function SimpleCalendarView() {\n const snapshot = useSimpleViewsSnapshot();\n const [selectedDate, setSelectedDate] = useState(() => readSelectedDate());\n const [title, setTitle] = useState(\"\");\n const [time, setTime] = useState(\"09:00\");\n const [notes, setNotes] = useState(\"\");\n const [color, setColor] = useState<StickyColor>(\"green\");\n const selectedDateRef = useRef(selectedDate);\n const titleRef = useRef(title);\n const timeRef = useRef(time);\n const notesRef = useRef(notes);\n const colorRef = useRef(color);\n\n useEffect(() => {\n selectedDateRef.current = snapshot.selectedDate;\n setSelectedDate(snapshot.selectedDate);\n }, [snapshot.selectedDate]);\n\n const setTitleValue = useCallback((value: string) => {\n titleRef.current = value;\n setTitle(value);\n }, []);\n\n const setTimeValue = useCallback((value: string) => {\n timeRef.current = value;\n setTime(value);\n }, []);\n\n const setNotesValue = useCallback((value: string) => {\n notesRef.current = value;\n setNotes(value);\n }, []);\n\n const setColorValue = useCallback((value: StickyColor) => {\n colorRef.current = value;\n setColor(value);\n }, []);\n\n const cursor = useMemo(\n () => startOfMonth(parseDateKey(selectedDate)),\n [selectedDate],\n );\n const days = useMemo(() => buildCalendarDays(cursor), [cursor]);\n const selectedEvents = useMemo(\n () => eventsForDate(snapshot.events, selectedDate),\n [snapshot.events, selectedDate],\n );\n\n const selectDate = useCallback((date: string) => {\n const normalizedDate = normalizeDateKey(date);\n if (!normalizedDate) return;\n selectedDateRef.current = normalizedDate;\n setSelectedDate(normalizedDate);\n void callSimpleViewsCapability(\"select-calendar-date\", {\n date: normalizedDate,\n });\n }, []);\n\n const moveMonth = useCallback(\n (amount: number) => {\n selectDate(dateKey(addMonths(cursor, amount)));\n },\n [cursor, selectDate],\n );\n\n const selectToday = useCallback(() => {\n selectDate(dateKey(new Date()));\n }, [selectDate]);\n\n const addEvent = useCallback(async () => {\n const eventTitle = titleRef.current.trim();\n if (!eventTitle) return;\n await callSimpleViewsCapability(\"create-calendar-event\", {\n title: eventTitle,\n date: selectedDateRef.current,\n time: timeRef.current || \"09:00\",\n notes: notesRef.current.trim(),\n color: colorRef.current,\n });\n setTitleValue(\"\");\n setNotesValue(\"\");\n }, [setNotesValue, setTitleValue]);\n\n const deleteEvent = useCallback((id: string) => {\n void callSimpleViewsCapability(\"delete-calendar-event\", { id });\n }, []);\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n void addEvent();\n };\n\n return (\n <main data-testid=\"simple-calendar-view\" style={shellStyle}>\n <header style={headerStyle}>\n <div style={titleWrapStyle}>\n <div style={iconBoxStyle}>\n <CalendarDays size={18} aria-hidden />\n </div>\n <div>\n <h1 style={h1Style}>Simple Calendar</h1>\n <p style={subTextStyle}>\n {monthLabel(cursor)} - {snapshot.events.length} events\n </p>\n </div>\n </div>\n <div style={toolbarStyle}>\n <AgentButton\n agentId=\"calendar-prev-month\"\n agentLabel=\"Previous month\"\n onClick={() => moveMonth(-1)}\n style={iconButtonStyle}\n title=\"Previous month\"\n >\n <ChevronLeft size={16} aria-hidden />\n </AgentButton>\n <AgentButton\n agentId=\"calendar-today\"\n agentLabel=\"Go to today\"\n onClick={selectToday}\n style={buttonStyle}\n >\n Today\n </AgentButton>\n <AgentButton\n agentId=\"calendar-next-month\"\n agentLabel=\"Next month\"\n onClick={() => moveMonth(1)}\n style={iconButtonStyle}\n title=\"Next month\"\n >\n <ChevronRight size={16} aria-hidden />\n </AgentButton>\n <AgentButton\n agentId=\"calendar-open-settings\"\n agentLabel=\"Open settings\"\n onClick={openSettings}\n style={iconButtonStyle}\n title=\"Open settings\"\n >\n <Settings size={16} aria-hidden />\n </AgentButton>\n </div>\n </header>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns:\n \"repeat(auto-fit, minmax(min(100%, 320px), 1fr))\",\n gap: 18,\n padding: 20,\n alignItems: \"start\",\n }}\n >\n <section style={{ ...panelStyle, padding: 14 }}>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\",\n gap: 8,\n marginBottom: 8,\n color: \"#60695d\",\n fontSize: 12,\n fontWeight: 700,\n textAlign: \"center\",\n }}\n >\n {[\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"].map((day) => (\n <div key={day}>{day}</div>\n ))}\n </div>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\",\n gap: 8,\n }}\n >\n {days.map((day) => (\n <CalendarDayButton\n key={dateKey(day)}\n day={day}\n selectedDate={selectedDate}\n cursorMonth={cursor.getUTCMonth()}\n events={snapshot.events}\n onSelect={selectDate}\n />\n ))}\n </div>\n </section>\n\n <aside\n style={{\n ...panelStyle,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n padding: 16,\n }}\n >\n <div>\n <h2 style={{ ...h1Style, fontSize: 17, lineHeight: \"23px\" }}>\n {selectedDate}\n </h2>\n <p style={subTextStyle}>\n {selectedEvents.length} event\n {selectedEvents.length === 1 ? \"\" : \"s\"}\n </p>\n </div>\n\n <form onSubmit={handleSubmit} style={{ display: \"grid\", gap: 10 }}>\n <AgentTextInput\n id=\"calendar-event-title\"\n label=\"Calendar event title\"\n value={title}\n onFill={setTitleValue}\n placeholder=\"Event title\"\n group=\"simple-calendar-compose\"\n />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr) minmax(88px, 112px)\",\n gap: 8,\n }}\n >\n <AgentTextInput\n id=\"calendar-event-date\"\n label=\"Calendar event date\"\n value={selectedDate}\n onFill={selectDate}\n group=\"simple-calendar-compose\"\n />\n <AgentTextInput\n id=\"calendar-event-time\"\n label=\"Calendar event time\"\n value={time}\n onFill={setTimeValue}\n group=\"simple-calendar-compose\"\n />\n </div>\n <AgentTextarea\n id=\"calendar-event-notes\"\n label=\"Calendar event notes\"\n value={notes}\n onFill={setNotesValue}\n group=\"simple-calendar-compose\"\n />\n <div style={{ display: \"flex\", gap: 8, flexWrap: \"wrap\" }}>\n {COLORS.map((option) => (\n <AgentButton\n key={option}\n agentId={`calendar-event-color-${option}`}\n agentLabel={`Set calendar event color ${option}`}\n agentRole=\"toggle\"\n agentStatus={color === option ? \"active\" : undefined}\n onClick={() => setColorValue(option)}\n style={{\n ...buttonStyle,\n background: NOTE_COLORS[option].background,\n borderColor:\n color === option\n ? \"#15171c\"\n : NOTE_COLORS[option].borderColor,\n minWidth: 72,\n textTransform: \"capitalize\",\n }}\n >\n {option}\n </AgentButton>\n ))}\n </div>\n <AgentButton\n agentId=\"add-calendar-event\"\n agentLabel=\"Add calendar event\"\n onClick={addEvent}\n style={primaryButtonStyle}\n >\n <Plus size={16} aria-hidden />\n Add event\n </AgentButton>\n </form>\n\n <div>\n {selectedEvents.map((event) => (\n <EventRow key={event.id} event={event} onDelete={deleteEvent} />\n ))}\n </div>\n </aside>\n </div>\n </main>\n );\n}\n"],"mappings":"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","names":[]}
|