@luckydraw/blex 0.1.1 → 0.1.3

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.
Files changed (39) hide show
  1. package/dist/blex.min.global.js +11 -11
  2. package/dist/blex.min.global.js.map +1 -1
  3. package/dist/esm/{calendar-HUZDQQN2.js → calendar-PNRNENA4.js} +24 -6
  4. package/dist/esm/calendar-PNRNENA4.js.map +1 -0
  5. package/dist/esm/{chunk-SBTGKDKX.js → chunk-6QSZG6F7.js} +95 -16
  6. package/dist/esm/chunk-6QSZG6F7.js.map +1 -0
  7. package/dist/esm/{gallery-ISM7FZA3.js → gallery-FCVFZFE7.js} +9 -3
  8. package/dist/esm/gallery-FCVFZFE7.js.map +1 -0
  9. package/dist/esm/index.js +2 -2
  10. package/dist/esm/{kanban-XUXVTRX2.js → kanban-GPGDSK7N.js} +81 -14
  11. package/dist/esm/kanban-GPGDSK7N.js.map +1 -0
  12. package/dist/esm/react/index.js +1 -1
  13. package/dist/esm/render.d.ts.map +1 -1
  14. package/dist/esm/renderers/calendar.d.ts +2 -1
  15. package/dist/esm/renderers/calendar.d.ts.map +1 -1
  16. package/dist/esm/renderers/code.d.ts +3 -1
  17. package/dist/esm/renderers/code.d.ts.map +1 -1
  18. package/dist/esm/renderers/confirm.d.ts.map +1 -1
  19. package/dist/esm/renderers/diff.d.ts.map +1 -1
  20. package/dist/esm/renderers/file-tree.d.ts +3 -1
  21. package/dist/esm/renderers/file-tree.d.ts.map +1 -1
  22. package/dist/esm/renderers/form.d.ts.map +1 -1
  23. package/dist/esm/renderers/gallery.d.ts +2 -1
  24. package/dist/esm/renderers/gallery.d.ts.map +1 -1
  25. package/dist/esm/renderers/kanban.d.ts +9 -1
  26. package/dist/esm/renderers/kanban.d.ts.map +1 -1
  27. package/dist/esm/renderers/poll.d.ts.map +1 -1
  28. package/dist/esm/renderers/svg.d.ts.map +1 -1
  29. package/dist/esm/renderers/table.d.ts +2 -1
  30. package/dist/esm/renderers/table.d.ts.map +1 -1
  31. package/dist/esm/renderers/terminal.d.ts.map +1 -1
  32. package/dist/esm/{types-C42V92x6.d.ts → types-CUQTmRQn.d.ts} +15 -0
  33. package/dist/esm/types.d.ts +15 -0
  34. package/dist/esm/types.d.ts.map +1 -1
  35. package/package.json +1 -1
  36. package/dist/esm/calendar-HUZDQQN2.js.map +0 -1
  37. package/dist/esm/chunk-SBTGKDKX.js.map +0 -1
  38. package/dist/esm/gallery-ISM7FZA3.js.map +0 -1
  39. package/dist/esm/kanban-XUXVTRX2.js.map +0 -1
@@ -42,6 +42,8 @@ var CalendarRenderer = class extends BaseRenderer {
42
42
  this.buildCalendar(block);
43
43
  container.setAttribute("data-blex-ready", "true");
44
44
  }
45
+ revertInteraction(_interaction) {
46
+ }
45
47
  update(block) {
46
48
  if (!this.container) return;
47
49
  this.currentBlock = block;
@@ -191,7 +193,11 @@ var CalendarRenderer = class extends BaseRenderer {
191
193
  blockId: block.id,
192
194
  type: "slot-click",
193
195
  payload: { start, end },
194
- serialized: `Selected time slot: ${start} - ${end}`
196
+ serialized: `Selected time slot: ${start} - ${end}`,
197
+ summary: `Selected slot: ${start}`,
198
+ icon: "\u{1F4C5}",
199
+ immediate: false,
200
+ revertable: true
195
201
  });
196
202
  }));
197
203
  grid.appendChild(cell);
@@ -228,7 +234,11 @@ var CalendarRenderer = class extends BaseRenderer {
228
234
  blockId: block.id,
229
235
  type: "slot-click",
230
236
  payload: { start: slotStart, end: slotEnd },
231
- serialized: `Selected time slot: ${slotStart} - ${slotEnd}`
237
+ serialized: `Selected time slot: ${slotStart} - ${slotEnd}`,
238
+ summary: `Selected slot: ${slotStart}`,
239
+ icon: "\u{1F4C5}",
240
+ immediate: false,
241
+ revertable: true
232
242
  });
233
243
  }));
234
244
  col.appendChild(slot);
@@ -263,7 +273,11 @@ var CalendarRenderer = class extends BaseRenderer {
263
273
  blockId: block.id,
264
274
  type: "slot-click",
265
275
  payload: { start: slotStart, end: slotEnd },
266
- serialized: `Selected time slot: ${slotStart} - ${slotEnd}`
276
+ serialized: `Selected time slot: ${slotStart} - ${slotEnd}`,
277
+ summary: `Selected slot: ${slotStart}`,
278
+ icon: "\u{1F4C5}",
279
+ immediate: false,
280
+ revertable: true
267
281
  });
268
282
  }));
269
283
  col.appendChild(slot);
@@ -292,7 +306,11 @@ var CalendarRenderer = class extends BaseRenderer {
292
306
  blockId: block.id,
293
307
  type: "select",
294
308
  payload: { eventId: event.id },
295
- serialized: `Selected event: ${event.title}`
309
+ serialized: `Selected event: ${event.title}`,
310
+ summary: `Viewed "${event.title}"`,
311
+ icon: "\u{1F4C5}",
312
+ immediate: false,
313
+ revertable: true
296
314
  });
297
315
  }));
298
316
  return el;
@@ -310,5 +328,5 @@ function createCalendarRenderer() {
310
328
  }
311
329
 
312
330
  export { CalendarRenderer, createCalendarRenderer };
313
- //# sourceMappingURL=calendar-HUZDQQN2.js.map
314
- //# sourceMappingURL=calendar-HUZDQQN2.js.map
331
+ //# sourceMappingURL=calendar-PNRNENA4.js.map
332
+ //# sourceMappingURL=calendar-PNRNENA4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/renderers/calendar.ts"],"names":[],"mappings":"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","file":"calendar-PNRNENA4.js","sourcesContent":["import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock, BlockInteraction } from '../types.js';\n\nexport interface CalendarEvent {\n id: string;\n title: string;\n start: string;\n end: string;\n color?: string;\n}\n\nexport type CalendarView = 'month' | 'week' | 'day';\n\nexport interface CalendarData {\n events: CalendarEvent[];\n view?: CalendarView;\n initialDate?: string;\n}\n\nconst DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nconst MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\n/** Format a Date as \"YYYY-MM-DD\". */\nfunction formatDate(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\n/** Return the first day (Sunday) of the week containing date. */\nfunction getWeekStart(date: Date): Date {\n const d = new Date(date);\n d.setDate(d.getDate() - d.getDay());\n return d;\n}\n\nexport class CalendarRenderer extends BaseRenderer<CalendarData> {\n private currentBlock: ContentBlock<CalendarData> | null = null;\n private viewDate: Date = new Date();\n private currentView: CalendarView = 'month';\n\n render(block: ContentBlock<CalendarData>, container: HTMLElement): void {\n this.container = container;\n this.currentBlock = block;\n this.currentView = block.data.view ?? 'month';\n this.viewDate = block.data.initialDate\n ? new Date(block.data.initialDate)\n : new Date();\n this.buildCalendar(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n revertInteraction(_interaction: BlockInteraction): void {\n // Calendar interactions (select, slot-click) don't mutate local state,\n // so revert is a no-op on the renderer side. The consumer just removes the chip.\n }\n\n update(block: ContentBlock<CalendarData>): void {\n if (!this.container) return;\n this.currentBlock = block;\n if (block.data.view) {\n this.currentView = block.data.view;\n }\n this.container.innerHTML = '';\n this.buildCalendar(block);\n }\n\n // ---------------------------------------------------------------------------\n // Top-level builder\n // ---------------------------------------------------------------------------\n\n private buildCalendar(block: ContentBlock<CalendarData>): void {\n const container = this.container!;\n\n const root = document.createElement('div');\n root.className = 'blex-calendar';\n root.setAttribute('data-testid', `blex-calendar-${block.id}`);\n\n root.appendChild(this.buildViewToggle(block));\n root.appendChild(this.buildNav(block));\n\n const grid = document.createElement('div');\n grid.className = 'blex-calendar__grid';\n\n if (this.currentView === 'month') {\n this.buildMonthGrid(grid, block);\n } else if (this.currentView === 'week') {\n this.buildWeekGrid(grid, block);\n } else {\n this.buildDayGrid(grid, block);\n }\n\n root.appendChild(grid);\n container.appendChild(root);\n }\n\n // ---------------------------------------------------------------------------\n // View toggle\n // ---------------------------------------------------------------------------\n\n private buildViewToggle(block: ContentBlock<CalendarData>): HTMLElement {\n const bar = document.createElement('div');\n bar.className = 'blex-calendar__view-toggle';\n\n const views: CalendarView[] = ['month', 'week', 'day'];\n for (const v of views) {\n const btn = document.createElement('button');\n btn.className = 'blex-calendar__view-btn';\n btn.setAttribute('data-testid', `blex-calendar-view-${v}`);\n btn.textContent = v.charAt(0).toUpperCase() + v.slice(1);\n if (v === this.currentView) {\n btn.setAttribute('aria-pressed', 'true');\n }\n\n this.addListener(btn, 'click', (() => {\n this.currentView = v;\n this.container!.innerHTML = '';\n this.buildCalendar(block);\n }) as EventListener);\n\n bar.appendChild(btn);\n }\n\n return bar;\n }\n\n // ---------------------------------------------------------------------------\n // Navigation bar\n // ---------------------------------------------------------------------------\n\n private buildNav(block: ContentBlock<CalendarData>): HTMLElement {\n const nav = document.createElement('div');\n nav.className = 'blex-calendar__nav';\n\n const prev = document.createElement('button');\n prev.className = 'blex-calendar__nav-btn';\n prev.setAttribute('data-testid', `blex-calendar-prev-${block.id}`);\n prev.textContent = '‹';\n this.addListener(prev, 'click', (() => {\n this.navigate(-1);\n }) as EventListener);\n\n const title = document.createElement('span');\n title.className = 'blex-calendar__title';\n title.textContent = this.getHeaderTitle();\n\n const next = document.createElement('button');\n next.className = 'blex-calendar__nav-btn';\n next.setAttribute('data-testid', `blex-calendar-next-${block.id}`);\n next.textContent = '›';\n this.addListener(next, 'click', (() => {\n this.navigate(1);\n }) as EventListener);\n\n nav.appendChild(prev);\n nav.appendChild(title);\n nav.appendChild(next);\n return nav;\n }\n\n private getHeaderTitle(): string {\n if (this.currentView === 'month') {\n return `${MONTH_NAMES[this.viewDate.getMonth()]} ${this.viewDate.getFullYear()}`;\n } else if (this.currentView === 'week') {\n const start = getWeekStart(this.viewDate);\n const end = new Date(start);\n end.setDate(end.getDate() + 6);\n return `${MONTH_NAMES[start.getMonth()]} ${start.getDate()} – ${end.getDate()}, ${start.getFullYear()}`;\n } else {\n return `${MONTH_NAMES[this.viewDate.getMonth()]} ${this.viewDate.getDate()}, ${this.viewDate.getFullYear()}`;\n }\n }\n\n private navigate(direction: number): void {\n if (this.currentView === 'month') {\n this.viewDate.setMonth(this.viewDate.getMonth() + direction);\n } else if (this.currentView === 'week') {\n this.viewDate.setDate(this.viewDate.getDate() + direction * 7);\n } else {\n this.viewDate.setDate(this.viewDate.getDate() + direction);\n }\n this.container!.innerHTML = '';\n this.buildCalendar(this.currentBlock!);\n }\n\n // ---------------------------------------------------------------------------\n // Month grid\n // ---------------------------------------------------------------------------\n\n private buildMonthGrid(grid: HTMLElement, block: ContentBlock<CalendarData>): void {\n const year = this.viewDate.getFullYear();\n const month = this.viewDate.getMonth();\n\n // Day-of-week header row\n for (const name of DAY_NAMES) {\n const hdr = document.createElement('div');\n hdr.className = 'blex-calendar__day-header';\n hdr.textContent = name;\n grid.appendChild(hdr);\n }\n\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n\n // Blank cells before the 1st\n for (let i = 0; i < firstDay; i++) {\n const blank = document.createElement('div');\n blank.className = 'blex-calendar__day blex-calendar__day--filler';\n grid.appendChild(blank);\n }\n\n // Day cells\n for (let day = 1; day <= daysInMonth; day++) {\n const mm = String(month + 1).padStart(2, '0');\n const dd = String(day).padStart(2, '0');\n const dateStr = `${year}-${mm}-${dd}`;\n const cell = document.createElement('div');\n cell.className = 'blex-calendar__day';\n cell.setAttribute('data-testid', `blex-calendar-day-${dateStr}`);\n cell.setAttribute('data-date', dateStr);\n\n const dayNum = document.createElement('span');\n dayNum.className = 'blex-calendar__day-number';\n dayNum.textContent = String(day);\n cell.appendChild(dayNum);\n\n // Events inside this day cell\n const dayEvents = this.getEventsForDate(block.data.events, dateStr);\n for (const event of dayEvents) {\n cell.appendChild(this.buildEventEl(event, block));\n }\n\n // Clicking on the day cell (not on an event) emits slot-click\n this.addListener(cell, 'click', ((e: MouseEvent) => {\n if ((e.target as HTMLElement).closest('.blex-calendar__event')) return;\n const start = `${dateStr}T00:00`;\n const end = `${dateStr}T23:59`;\n this.emit({\n blockId: block.id,\n type: 'slot-click',\n payload: { start, end },\n serialized: `Selected time slot: ${start} - ${end}`,\n summary: `Selected slot: ${start}`,\n icon: '📅',\n immediate: false,\n revertable: true,\n });\n }) as EventListener);\n\n grid.appendChild(cell);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Week grid (structural)\n // ---------------------------------------------------------------------------\n\n private buildWeekGrid(grid: HTMLElement, block: ContentBlock<CalendarData>): void {\n const weekStart = getWeekStart(this.viewDate);\n\n for (let i = 0; i < 7; i++) {\n const day = new Date(weekStart);\n day.setDate(weekStart.getDate() + i);\n const dateStr = formatDate(day);\n\n const col = document.createElement('div');\n col.className = 'blex-calendar__day';\n col.setAttribute('data-testid', `blex-calendar-day-${dateStr}`);\n col.setAttribute('data-date', dateStr);\n\n const hdr = document.createElement('div');\n hdr.className = 'blex-calendar__day-header';\n hdr.textContent = `${DAY_NAMES[day.getDay()]} ${day.getDate()}`;\n col.appendChild(hdr);\n\n // Hourly slots\n for (let hour = 0; hour < 24; hour++) {\n const hourStr = String(hour).padStart(2, '0');\n const slotStart = `${dateStr}T${hourStr}:00`;\n const slotEnd = `${dateStr}T${hourStr}:59`;\n\n const slot = document.createElement('div');\n slot.className = 'blex-calendar__slot';\n slot.setAttribute('data-start', slotStart);\n slot.setAttribute('data-end', slotEnd);\n slot.textContent = `${hourStr}:00`;\n\n this.addListener(slot, 'click', (() => {\n this.emit({\n blockId: block.id,\n type: 'slot-click',\n payload: { start: slotStart, end: slotEnd },\n serialized: `Selected time slot: ${slotStart} - ${slotEnd}`,\n summary: `Selected slot: ${slotStart}`,\n icon: '📅',\n immediate: false,\n revertable: true,\n });\n }) as EventListener);\n\n col.appendChild(slot);\n }\n\n // Events for this day\n const dayEvents = this.getEventsForDate(block.data.events, dateStr);\n for (const event of dayEvents) {\n col.appendChild(this.buildEventEl(event, block));\n }\n\n grid.appendChild(col);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Day grid (structural)\n // ---------------------------------------------------------------------------\n\n private buildDayGrid(grid: HTMLElement, block: ContentBlock<CalendarData>): void {\n const dateStr = formatDate(this.viewDate);\n\n const col = document.createElement('div');\n col.className = 'blex-calendar__day';\n col.setAttribute('data-testid', `blex-calendar-day-${dateStr}`);\n col.setAttribute('data-date', dateStr);\n\n // Hourly slots\n for (let hour = 0; hour < 24; hour++) {\n const hourStr = String(hour).padStart(2, '0');\n const slotStart = `${dateStr}T${hourStr}:00`;\n const slotEnd = `${dateStr}T${hourStr}:59`;\n\n const slot = document.createElement('div');\n slot.className = 'blex-calendar__slot';\n slot.setAttribute('data-start', slotStart);\n slot.setAttribute('data-end', slotEnd);\n slot.textContent = `${hourStr}:00`;\n\n this.addListener(slot, 'click', (() => {\n this.emit({\n blockId: block.id,\n type: 'slot-click',\n payload: { start: slotStart, end: slotEnd },\n serialized: `Selected time slot: ${slotStart} - ${slotEnd}`,\n summary: `Selected slot: ${slotStart}`,\n icon: '📅',\n immediate: false,\n revertable: true,\n });\n }) as EventListener);\n\n col.appendChild(slot);\n }\n\n // Events for this day\n const dayEvents = this.getEventsForDate(block.data.events, dateStr);\n for (const event of dayEvents) {\n col.appendChild(this.buildEventEl(event, block));\n }\n\n grid.appendChild(col);\n }\n\n // ---------------------------------------------------------------------------\n // Shared helpers\n // ---------------------------------------------------------------------------\n\n private buildEventEl(event: CalendarEvent, block: ContentBlock<CalendarData>): HTMLElement {\n const el = document.createElement('div');\n el.className = 'blex-calendar__event';\n el.setAttribute('data-testid', `blex-calendar-event-${event.id}`);\n el.setAttribute('data-event-id', event.id);\n el.textContent = event.title;\n\n if (event.color) {\n el.style.backgroundColor = event.color;\n }\n\n this.addListener(el, 'click', ((e: MouseEvent) => {\n e.stopPropagation();\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: { eventId: event.id },\n serialized: `Selected event: ${event.title}`,\n summary: `Viewed \"${event.title}\"`,\n icon: '📅',\n immediate: false,\n revertable: true,\n });\n }) as EventListener);\n\n return el;\n }\n\n private getEventsForDate(events: CalendarEvent[], dateStr: string): CalendarEvent[] {\n return events.filter((event) => {\n const eventStart = event.start.slice(0, 10);\n const eventEnd = event.end.slice(0, 10);\n return dateStr >= eventStart && dateStr <= eventEnd;\n });\n }\n}\n\nexport function createCalendarRenderer(): CalendarRenderer {\n return new CalendarRenderer();\n}\n"]}
@@ -563,6 +563,11 @@ async function renderBlock(block, container, options) {
563
563
  renderer.onInteraction(callback);
564
564
  }
565
565
  },
566
+ revertInteraction(interaction) {
567
+ if (renderer?.revertInteraction) {
568
+ renderer.revertInteraction(interaction);
569
+ }
570
+ },
566
571
  destroy() {
567
572
  renderer?.destroy();
568
573
  renderer = null;
@@ -611,7 +616,10 @@ var ConfirmRenderer = class extends BaseRenderer {
611
616
  blockId: block.id,
612
617
  type: "click",
613
618
  payload: { button: label },
614
- serialized: `User confirmed: ${data.message} \u2192 ${label}`
619
+ serialized: `User confirmed: ${data.message} \u2192 ${label}`,
620
+ summary: `Confirmed: ${label}`,
621
+ icon: "\u2713",
622
+ immediate: true
615
623
  });
616
624
  });
617
625
  btnGroup.appendChild(btn);
@@ -713,11 +721,15 @@ Selected: ${selectedLabels.join(", ")}`;
713
721
  serialized += `
714
722
  Write-in: ${this.writeInValue}`;
715
723
  }
724
+ const summary = selectedLabels.length > 0 ? `Voted: ${selectedLabels.join(", ")}${this.writeInValue ? ` + "${this.writeInValue}"` : ""}` : `Write-in: ${this.writeInValue}`;
716
725
  this.emit({
717
726
  blockId: block.id,
718
727
  type: "submit",
719
728
  payload,
720
- serialized
729
+ serialized,
730
+ summary,
731
+ icon: "\u{1F5F3}",
732
+ immediate: true
721
733
  });
722
734
  });
723
735
  wrapper.appendChild(submitBtn);
@@ -943,7 +955,10 @@ var SvgRenderer = class extends BaseRenderer {
943
955
  blockId: block.id,
944
956
  type: "click",
945
957
  payload: { action: "download" },
946
- serialized: `Downloaded SVG${title ? `: ${title}` : ""}`
958
+ serialized: `Downloaded SVG${title ? `: ${title}` : ""}`,
959
+ summary: `Downloaded SVG${title ? `: ${title}` : ""}`,
960
+ icon: "\u2B07",
961
+ immediate: true
947
962
  });
948
963
  });
949
964
  actions.appendChild(downloadBtn);
@@ -957,7 +972,10 @@ var SvgRenderer = class extends BaseRenderer {
957
972
  blockId: block.id,
958
973
  type: "click",
959
974
  payload: { action: "copy" },
960
- serialized: `Copied SVG${title ? `: ${title}` : ""}`
975
+ serialized: `Copied SVG${title ? `: ${title}` : ""}`,
976
+ summary: `Copied SVG${title ? `: ${title}` : ""}`,
977
+ icon: "\u{1F4CB}",
978
+ immediate: true
961
979
  });
962
980
  });
963
981
  actions.appendChild(copyBtn);
@@ -985,6 +1003,13 @@ var TableRenderer = class extends BaseRenderer {
985
1003
  this._build(block);
986
1004
  container.setAttribute("data-blex-ready", "true");
987
1005
  }
1006
+ revertInteraction(interaction) {
1007
+ if (!this.container || !this.currentBlock) return;
1008
+ if (interaction.type !== "select") return;
1009
+ this.selectedRows.clear();
1010
+ this.container.innerHTML = "";
1011
+ this._build(this.currentBlock);
1012
+ }
988
1013
  update(block) {
989
1014
  if (!this.container) return;
990
1015
  this.currentBlock = block;
@@ -1080,6 +1105,7 @@ var TableRenderer = class extends BaseRenderer {
1080
1105
  container.appendChild(wrapper);
1081
1106
  }
1082
1107
  _emitSelection(block) {
1108
+ if (this.selectedRows.size === 0) return;
1083
1109
  const { columns, rows } = block.data;
1084
1110
  const selectedIndices = Array.from(this.selectedRows).sort((a, b) => a - b);
1085
1111
  const selectedRows = selectedIndices.map((i) => rows[i]);
@@ -1094,6 +1120,7 @@ var TableRenderer = class extends BaseRenderer {
1094
1120
  separatorLine,
1095
1121
  ...dataLines
1096
1122
  ].join("\n");
1123
+ const count = selectedIndices.length;
1097
1124
  this.emit({
1098
1125
  blockId: block.id,
1099
1126
  type: "select",
@@ -1101,7 +1128,11 @@ var TableRenderer = class extends BaseRenderer {
1101
1128
  selectedRows: selectedIndices,
1102
1129
  columns
1103
1130
  },
1104
- serialized
1131
+ serialized,
1132
+ summary: `Selected ${count} row${count !== 1 ? "s" : ""}`,
1133
+ icon: "\u2610",
1134
+ immediate: false,
1135
+ revertable: true
1105
1136
  });
1106
1137
  }
1107
1138
  };
@@ -1115,14 +1146,25 @@ var CodeRenderer = class extends BaseRenderer {
1115
1146
  super(...arguments);
1116
1147
  this.selectedLines = /* @__PURE__ */ new Set();
1117
1148
  this.lastClickedLine = null;
1149
+ this.currentBlock = null;
1150
+ }
1151
+ revertInteraction(interaction) {
1152
+ if (!this.container || !this.currentBlock) return;
1153
+ if (interaction.type !== "select") return;
1154
+ this.selectedLines.clear();
1155
+ this.lastClickedLine = null;
1156
+ this.container.innerHTML = "";
1157
+ this._build(this.currentBlock);
1118
1158
  }
1119
1159
  render(block, container) {
1160
+ this.currentBlock = block;
1120
1161
  this.container = container;
1121
1162
  this._build(block);
1122
1163
  container.setAttribute("data-blex-ready", "true");
1123
1164
  }
1124
1165
  update(block) {
1125
1166
  if (!this.container) return;
1167
+ this.currentBlock = block;
1126
1168
  const lines = block.data.code.split("\n");
1127
1169
  for (const lineNum of Array.from(this.selectedLines)) {
1128
1170
  if (lineNum > lines.length) this.selectedLines.delete(lineNum);
@@ -1210,6 +1252,7 @@ var CodeRenderer = class extends BaseRenderer {
1210
1252
  }
1211
1253
  }
1212
1254
  _emitSelection(block, lines) {
1255
+ if (this.selectedLines.size === 0) return;
1213
1256
  const { language } = block.data;
1214
1257
  const sortedLines = Array.from(this.selectedLines).sort((a, b) => a - b);
1215
1258
  const selectedCode = sortedLines.map((lineNum) => lines[lineNum - 1]).join("\n");
@@ -1217,6 +1260,7 @@ var CodeRenderer = class extends BaseRenderer {
1217
1260
  const serialized = `\`\`\`${langTag}
1218
1261
  ${selectedCode}
1219
1262
  \`\`\``;
1263
+ const lineRange = sortedLines.length === 1 ? `line ${sortedLines[0]}` : `lines ${sortedLines[0]}-${sortedLines[sortedLines.length - 1]}`;
1220
1264
  this.emit({
1221
1265
  blockId: block.id,
1222
1266
  type: "select",
@@ -1224,7 +1268,11 @@ ${selectedCode}
1224
1268
  lines: sortedLines,
1225
1269
  ...language !== void 0 && { language }
1226
1270
  },
1227
- serialized
1271
+ serialized,
1272
+ summary: `Selected ${lineRange}`,
1273
+ icon: "< >",
1274
+ immediate: false,
1275
+ revertable: true
1228
1276
  });
1229
1277
  }
1230
1278
  };
@@ -1313,7 +1361,10 @@ var DiffRenderer = class extends BaseRenderer {
1313
1361
  blockId: block.id,
1314
1362
  type: "apply",
1315
1363
  payload: { hunks },
1316
- serialized: `Applied diff to ${filename ?? "file"}`
1364
+ serialized: `Applied diff to ${filename ?? "file"}`,
1365
+ summary: `Applied diff${filename ? `: ${filename}` : ""}`,
1366
+ icon: "\u2705",
1367
+ immediate: true
1317
1368
  });
1318
1369
  });
1319
1370
  actions.appendChild(applyBtn);
@@ -1326,7 +1377,10 @@ var DiffRenderer = class extends BaseRenderer {
1326
1377
  blockId: block.id,
1327
1378
  type: "reject",
1328
1379
  payload: { hunks },
1329
- serialized: `Rejected diff to ${filename ?? "file"}`
1380
+ serialized: `Rejected diff to ${filename ?? "file"}`,
1381
+ summary: `Rejected diff${filename ? `: ${filename}` : ""}`,
1382
+ icon: "\u274C",
1383
+ immediate: true
1330
1384
  });
1331
1385
  });
1332
1386
  actions.appendChild(rejectBtn);
@@ -1344,8 +1398,10 @@ var FileTreeRenderer = class extends BaseRenderer {
1344
1398
  super(...arguments);
1345
1399
  this.expandedPaths = /* @__PURE__ */ new Set();
1346
1400
  this.selectedPaths = /* @__PURE__ */ new Set();
1401
+ this.currentBlock = null;
1347
1402
  }
1348
1403
  render(block, container) {
1404
+ this.currentBlock = block;
1349
1405
  this.container = container;
1350
1406
  if (block.data.expanded) {
1351
1407
  for (const p of block.data.expanded) this.expandedPaths.add(p);
@@ -1353,8 +1409,16 @@ var FileTreeRenderer = class extends BaseRenderer {
1353
1409
  this.buildTree(block);
1354
1410
  container.setAttribute("data-blex-ready", "true");
1355
1411
  }
1412
+ revertInteraction(interaction) {
1413
+ if (!this.container || !this.currentBlock) return;
1414
+ if (interaction.type !== "select") return;
1415
+ this.selectedPaths.clear();
1416
+ this.container.innerHTML = "";
1417
+ this.buildTree(this.currentBlock);
1418
+ }
1356
1419
  update(block) {
1357
1420
  if (!this.container) return;
1421
+ this.currentBlock = block;
1358
1422
  this.container.innerHTML = "";
1359
1423
  this.buildTree(block);
1360
1424
  }
@@ -1425,13 +1489,21 @@ var FileTreeRenderer = class extends BaseRenderer {
1425
1489
  return li;
1426
1490
  }
1427
1491
  emitSelection(block) {
1492
+ if (this.selectedPaths.size === 0) return;
1428
1493
  const paths = Array.from(this.selectedPaths).sort();
1494
+ const count = paths.length;
1495
+ const lastPath = paths[paths.length - 1] ?? "";
1496
+ const fileName = lastPath.split("/").pop() ?? lastPath;
1429
1497
  this.emit({
1430
1498
  blockId: block.id,
1431
1499
  type: "select",
1432
1500
  payload: { paths },
1433
1501
  serialized: `Selected files:
1434
- ${paths.join("\n")}`
1502
+ ${paths.join("\n")}`,
1503
+ summary: count === 1 ? `Selected ${fileName}` : `Selected ${count} files`,
1504
+ icon: "\u{1F4C1}",
1505
+ immediate: false,
1506
+ revertable: true
1435
1507
  });
1436
1508
  }
1437
1509
  formatSize(bytes) {
@@ -1476,12 +1548,16 @@ var FormRenderer = class extends BaseRenderer {
1476
1548
  e.preventDefault();
1477
1549
  if (this.validate(fields)) {
1478
1550
  const serializedPairs = Object.entries(this.values).map(([k, v]) => `${k}: ${v}`).join("\n");
1551
+ const fieldCount = Object.keys(this.values).length;
1479
1552
  this.emit({
1480
1553
  blockId: block.id,
1481
1554
  type: "submit",
1482
1555
  payload: { ...this.values },
1483
1556
  serialized: `Form submission${title ? ` (${title})` : ""}:
1484
- ${serializedPairs}`
1557
+ ${serializedPairs}`,
1558
+ summary: `Submitted${title ? `: ${title}` : ` form (${fieldCount} fields)`}`,
1559
+ icon: "\u{1F4CB}",
1560
+ immediate: true
1485
1561
  });
1486
1562
  } else {
1487
1563
  this.container.innerHTML = "";
@@ -1743,7 +1819,10 @@ var TerminalRenderer = class extends BaseRenderer {
1743
1819
  blockId: block.id,
1744
1820
  type: "click",
1745
1821
  payload: { action: "copy" },
1746
- serialized: `Copied terminal output${command ? ` from: ${command}` : ""}`
1822
+ serialized: `Copied terminal output${command ? ` from: ${command}` : ""}`,
1823
+ summary: `Copied output${command ? `: ${command}` : ""}`,
1824
+ icon: "\u{1F4CB}",
1825
+ immediate: true
1747
1826
  });
1748
1827
  });
1749
1828
  wrapper.appendChild(copyBtn);
@@ -1910,15 +1989,15 @@ function registerDefaults() {
1910
1989
  return createChartRenderer;
1911
1990
  });
1912
1991
  registerLazyBlockType("kanban", async () => {
1913
- const { createKanbanRenderer } = await import('./kanban-XUXVTRX2.js');
1992
+ const { createKanbanRenderer } = await import('./kanban-GPGDSK7N.js');
1914
1993
  return createKanbanRenderer;
1915
1994
  });
1916
1995
  registerLazyBlockType("calendar", async () => {
1917
- const { createCalendarRenderer } = await import('./calendar-HUZDQQN2.js');
1996
+ const { createCalendarRenderer } = await import('./calendar-PNRNENA4.js');
1918
1997
  return createCalendarRenderer;
1919
1998
  });
1920
1999
  registerLazyBlockType("gallery", async () => {
1921
- const { createGalleryRenderer } = await import('./gallery-ISM7FZA3.js');
2000
+ const { createGalleryRenderer } = await import('./gallery-FCVFZFE7.js');
1922
2001
  return createGalleryRenderer;
1923
2002
  });
1924
2003
  const builtIns = [
@@ -1949,5 +2028,5 @@ function registerDefaults() {
1949
2028
  }
1950
2029
 
1951
2030
  export { getRegisteredTypes, hasBlockType, isBuiltIn, registerBlockType, registerDefaults, registerLazyBlockType, renderBlock, unregisterBlockType };
1952
- //# sourceMappingURL=chunk-SBTGKDKX.js.map
1953
- //# sourceMappingURL=chunk-SBTGKDKX.js.map
2031
+ //# sourceMappingURL=chunk-6QSZG6F7.js.map
2032
+ //# sourceMappingURL=chunk-6QSZG6F7.js.map