@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.
- package/dist/blex.min.global.js +11 -11
- package/dist/blex.min.global.js.map +1 -1
- package/dist/esm/{calendar-HUZDQQN2.js → calendar-PNRNENA4.js} +24 -6
- package/dist/esm/calendar-PNRNENA4.js.map +1 -0
- package/dist/esm/{chunk-SBTGKDKX.js → chunk-6QSZG6F7.js} +95 -16
- package/dist/esm/chunk-6QSZG6F7.js.map +1 -0
- package/dist/esm/{gallery-ISM7FZA3.js → gallery-FCVFZFE7.js} +9 -3
- package/dist/esm/gallery-FCVFZFE7.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/{kanban-XUXVTRX2.js → kanban-GPGDSK7N.js} +81 -14
- package/dist/esm/kanban-GPGDSK7N.js.map +1 -0
- package/dist/esm/react/index.js +1 -1
- package/dist/esm/render.d.ts.map +1 -1
- package/dist/esm/renderers/calendar.d.ts +2 -1
- package/dist/esm/renderers/calendar.d.ts.map +1 -1
- package/dist/esm/renderers/code.d.ts +3 -1
- package/dist/esm/renderers/code.d.ts.map +1 -1
- package/dist/esm/renderers/confirm.d.ts.map +1 -1
- package/dist/esm/renderers/diff.d.ts.map +1 -1
- package/dist/esm/renderers/file-tree.d.ts +3 -1
- package/dist/esm/renderers/file-tree.d.ts.map +1 -1
- package/dist/esm/renderers/form.d.ts.map +1 -1
- package/dist/esm/renderers/gallery.d.ts +2 -1
- package/dist/esm/renderers/gallery.d.ts.map +1 -1
- package/dist/esm/renderers/kanban.d.ts +9 -1
- package/dist/esm/renderers/kanban.d.ts.map +1 -1
- package/dist/esm/renderers/poll.d.ts.map +1 -1
- package/dist/esm/renderers/svg.d.ts.map +1 -1
- package/dist/esm/renderers/table.d.ts +2 -1
- package/dist/esm/renderers/table.d.ts.map +1 -1
- package/dist/esm/renderers/terminal.d.ts.map +1 -1
- package/dist/esm/{types-C42V92x6.d.ts → types-CUQTmRQn.d.ts} +15 -0
- package/dist/esm/types.d.ts +15 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/esm/calendar-HUZDQQN2.js.map +0 -1
- package/dist/esm/chunk-SBTGKDKX.js.map +0 -1
- package/dist/esm/gallery-ISM7FZA3.js.map +0 -1
- 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-
|
|
314
|
-
//# sourceMappingURL=calendar-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
1953
|
-
//# sourceMappingURL=chunk-
|
|
2031
|
+
//# sourceMappingURL=chunk-6QSZG6F7.js.map
|
|
2032
|
+
//# sourceMappingURL=chunk-6QSZG6F7.js.map
|