@luckydraw/blex 0.1.0 → 0.1.2

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 (40) hide show
  1. package/dist/blex.min.global.js +391 -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-ZKSJGHJI.js → chunk-JEYTN6MT.js} +472 -16
  6. package/dist/esm/chunk-JEYTN6MT.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-FLEZGRIE.js} +51 -4
  11. package/dist/esm/kanban-FLEZGRIE.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 +5 -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/theme.d.ts.map +1 -1
  33. package/dist/esm/{types-C42V92x6.d.ts → types-CUQTmRQn.d.ts} +15 -0
  34. package/dist/esm/types.d.ts +15 -0
  35. package/dist/esm/types.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/esm/calendar-HUZDQQN2.js.map +0 -1
  38. package/dist/esm/chunk-ZKSJGHJI.js.map +0 -1
  39. package/dist/esm/gallery-ISM7FZA3.js.map +0 -1
  40. package/dist/esm/kanban-XUXVTRX2.js.map +0 -1
@@ -141,6 +141,386 @@ var DEFAULT_STYLES = `
141
141
  0% { background-position: 200% 0; }
142
142
  100% { background-position: -200% 0; }
143
143
  }
144
+
145
+ /* \u2500\u2500 Shared block base \u2500\u2500 */
146
+ .blex-confirm, .blex-poll, .blex-status, .blex-metric, .blex-image,
147
+ .blex-mermaid, .blex-svg, .blex-form, .blex-progress, .blex-terminal,
148
+ .blex-timeline, .blex-diff, .blex-file-tree, .blex-code {
149
+ font-family: var(--blex-font-family);
150
+ color: var(--blex-text);
151
+ background: var(--blex-bg);
152
+ border: 1px solid var(--blex-border);
153
+ border-radius: 6px;
154
+ padding: 12px 16px;
155
+ line-height: 1.5;
156
+ }
157
+
158
+ /* \u2500\u2500 Shared button styles \u2500\u2500 */
159
+ .blex-confirm__button, .blex-poll__submit, .blex-poll__option,
160
+ .blex-diff__toggle, .blex-diff__apply, .blex-diff__reject,
161
+ .blex-mermaid__btn, .blex-svg__btn, .blex-image__btn,
162
+ .blex-terminal__toggle, .blex-terminal__copy, .blex-form__submit,
163
+ .blex-calendar__view-btn, .blex-calendar__nav-btn, .blex-gallery__nav-btn {
164
+ font-family: var(--blex-font-family);
165
+ font-size: 13px;
166
+ padding: 6px 12px;
167
+ border: 1px solid var(--blex-border);
168
+ border-radius: 4px;
169
+ background: var(--blex-bg);
170
+ color: var(--blex-text);
171
+ cursor: pointer;
172
+ transition: background var(--blex-animation-duration), border-color var(--blex-animation-duration);
173
+ }
174
+ .blex-confirm__button:hover, .blex-poll__submit:hover, .blex-poll__option:hover,
175
+ .blex-diff__toggle:hover, .blex-mermaid__btn:hover, .blex-svg__btn:hover,
176
+ .blex-image__btn:hover, .blex-terminal__toggle:hover, .blex-terminal__copy:hover,
177
+ .blex-form__submit:hover, .blex-calendar__view-btn:hover, .blex-calendar__nav-btn:hover,
178
+ .blex-gallery__nav-btn:hover {
179
+ background: var(--blex-border);
180
+ }
181
+
182
+ /* \u2500\u2500 confirm \u2500\u2500 */
183
+ .blex-confirm__message { margin: 0 0 12px; font-size: 14px; }
184
+ .blex-confirm__buttons { display: flex; gap: 8px; flex-wrap: wrap; }
185
+
186
+ /* \u2500\u2500 poll \u2500\u2500 */
187
+ .blex-poll__question { margin: 0 0 12px; font-size: 14px; font-weight: 600; }
188
+ .blex-poll__options { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; list-style: none; padding: 0; }
189
+ .blex-poll__option { text-align: left; width: 100%; }
190
+ .blex-poll__option--selected { background: var(--blex-accent); color: #fff; border-color: var(--blex-accent); }
191
+ .blex-poll__option--selected:hover { background: var(--blex-accent); opacity: 0.9; }
192
+ .blex-poll__writein {
193
+ display: block; width: 100%; box-sizing: border-box; margin-bottom: 12px;
194
+ padding: 8px 10px; border: 1px solid var(--blex-border); border-radius: 4px;
195
+ font-family: var(--blex-font-family); font-size: 13px;
196
+ background: var(--blex-bg); color: var(--blex-text);
197
+ }
198
+ .blex-poll__submit { background: var(--blex-accent); color: #fff; border-color: var(--blex-accent); }
199
+ .blex-poll__submit:hover { opacity: 0.9; background: var(--blex-accent); }
200
+
201
+ /* \u2500\u2500 status \u2500\u2500 */
202
+ .blex-status { padding: 8px 12px; }
203
+ .blex-status__entry {
204
+ display: flex; align-items: center; gap: 8px;
205
+ padding: 6px 0; border-bottom: 1px solid var(--blex-border);
206
+ }
207
+ .blex-status__entry:last-child { border-bottom: none; }
208
+ .blex-status__key { font-size: 13px; font-weight: 600; min-width: 100px; }
209
+ .blex-status__value { font-size: 13px; flex: 1; }
210
+ .blex-status__indicator {
211
+ width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
212
+ }
213
+ .blex-status__indicator--ok { background: var(--blex-success); }
214
+ .blex-status__indicator--warning { background: var(--blex-warning); }
215
+ .blex-status__indicator--error { background: var(--blex-error); }
216
+
217
+ /* \u2500\u2500 metric \u2500\u2500 */
218
+ .blex-metric { text-align: center; padding: 20px 16px; }
219
+ .blex-metric__value { font-size: 36px; font-weight: 700; line-height: 1.2; }
220
+ .blex-metric__label { font-size: 13px; opacity: 0.7; margin-top: 4px; }
221
+ .blex-metric__trend { font-size: 14px; margin-top: 8px; font-weight: 500; }
222
+ .blex-metric__trend--up { color: var(--blex-success); }
223
+ .blex-metric__trend--down { color: var(--blex-error); }
224
+ .blex-metric__trend--flat { color: var(--blex-warning); }
225
+
226
+ /* \u2500\u2500 image \u2500\u2500 */
227
+ .blex-image { padding: 0; overflow: hidden; text-align: center; }
228
+ .blex-image__img { max-width: 100%; height: auto; display: block; margin: 0 auto; }
229
+ .blex-image__caption { padding: 8px 12px; font-size: 13px; opacity: 0.8; }
230
+ .blex-image__actions { display: flex; gap: 6px; padding: 8px 12px; justify-content: flex-end; }
231
+ .blex-image__overlay {
232
+ position: fixed; inset: 0; z-index: 9999;
233
+ background: rgba(0,0,0,0.85); display: flex; align-items: center; justify-content: center; cursor: zoom-out;
234
+ }
235
+ .blex-image__overlay img { max-width: 95vw; max-height: 95vh; object-fit: contain; }
236
+
237
+ /* \u2500\u2500 mermaid \u2500\u2500 */
238
+ .blex-mermaid--loading .blex-mermaid__diagram { min-height: 100px; display: flex; align-items: center; justify-content: center; }
239
+ .blex-mermaid__title { font-size: 14px; font-weight: 600; margin-bottom: 8px; }
240
+ .blex-mermaid__diagram { overflow-x: auto; }
241
+ .blex-mermaid__diagram svg { max-width: 100%; height: auto; }
242
+ .blex-mermaid__diagram--error { color: var(--blex-error); font-size: 13px; }
243
+ .blex-mermaid__source {
244
+ margin-top: 8px; padding: 10px; border-radius: 4px;
245
+ background: var(--blex-border); font-family: var(--blex-font-mono);
246
+ font-size: 12px; white-space: pre-wrap; overflow-x: auto;
247
+ }
248
+ .blex-mermaid__actions { display: flex; gap: 6px; margin-top: 8px; }
249
+
250
+ /* \u2500\u2500 svg \u2500\u2500 */
251
+ .blex-svg__title { font-size: 14px; font-weight: 600; margin-bottom: 8px; }
252
+ .blex-svg__content { overflow-x: auto; }
253
+ .blex-svg__content svg { max-width: 100%; height: auto; }
254
+ .blex-svg__actions { display: flex; gap: 6px; margin-top: 8px; }
255
+
256
+ /* \u2500\u2500 table \u2500\u2500 */
257
+ .blex-table { padding: 0; overflow-x: auto; }
258
+ .blex-table table { width: 100%; border-collapse: collapse; font-size: 13px; }
259
+ .blex-table__header { background: var(--blex-border); }
260
+ .blex-table__header-cell {
261
+ padding: 8px 12px; text-align: left; font-weight: 600; cursor: pointer;
262
+ user-select: none; white-space: nowrap; border-bottom: 2px solid var(--blex-border);
263
+ }
264
+ .blex-table__header-cell:hover { background: rgba(0,0,0,0.05); }
265
+ .blex-table__header-cell--sorted-asc::after { content: ' \u25B2'; font-size: 10px; }
266
+ .blex-table__header-cell--sorted-desc::after { content: ' \u25BC'; font-size: 10px; }
267
+ .blex-table__row { border-bottom: 1px solid var(--blex-border); cursor: pointer; }
268
+ .blex-table__row:hover { background: rgba(0,0,0,0.03); }
269
+ .blex-table__row--selected { background: color-mix(in srgb, var(--blex-accent) 12%, transparent); }
270
+ .blex-table__cell { padding: 8px 12px; }
271
+
272
+ /* \u2500\u2500 chart \u2500\u2500 */
273
+ .blex-chart { border: 1px solid var(--blex-border); border-radius: 6px; padding: 12px; background: var(--blex-chart-bg); }
274
+ .blex-chart canvas { width: 100% !important; height: auto !important; }
275
+
276
+ /* \u2500\u2500 code \u2500\u2500 */
277
+ .blex-code {
278
+ padding: 0; margin: 0; position: relative; overflow: hidden;
279
+ font-family: var(--blex-font-mono); font-size: 13px;
280
+ background: var(--blex-bg); display: flex;
281
+ }
282
+ .blex-code__copy {
283
+ position: absolute; top: 8px; right: 8px; z-index: 1;
284
+ font-family: var(--blex-font-family); font-size: 12px;
285
+ padding: 4px 8px; border: 1px solid var(--blex-border); border-radius: 4px;
286
+ background: var(--blex-bg); color: var(--blex-text); cursor: pointer; opacity: 0.7;
287
+ }
288
+ .blex-code__copy:hover { opacity: 1; }
289
+ .blex-code__gutter {
290
+ padding: 12px 8px 12px 12px; text-align: right; user-select: none;
291
+ color: var(--blex-text); opacity: 0.4; border-right: 1px solid var(--blex-border);
292
+ flex-shrink: 0;
293
+ }
294
+ .blex-code__content { padding: 12px; overflow-x: auto; flex: 1; }
295
+ .blex-code__line { display: block; min-height: 1.5em; padding: 0 4px; cursor: pointer; }
296
+ .blex-code__line:hover { background: rgba(0,0,0,0.04); }
297
+ .blex-code__line--highlighted { background: color-mix(in srgb, var(--blex-warning) 15%, transparent); }
298
+ .blex-code__line--selected { background: color-mix(in srgb, var(--blex-accent) 15%, transparent); }
299
+ .blex-code__line-number { display: block; min-height: 1.5em; }
300
+
301
+ /* \u2500\u2500 diff \u2500\u2500 */
302
+ .blex-diff__header { display: flex; gap: 8px; margin-bottom: 8px; align-items: center; flex-wrap: wrap; }
303
+ .blex-diff__hunks { font-family: var(--blex-font-mono); font-size: 12px; overflow-x: auto; }
304
+ .blex-diff__hunk { margin-bottom: 8px; border: 1px solid var(--blex-border); border-radius: 4px; overflow: hidden; }
305
+ .blex-diff__hunk--selected { border-color: var(--blex-accent); }
306
+ .blex-diff__hunk-header {
307
+ padding: 6px 10px; background: var(--blex-border); font-size: 11px;
308
+ cursor: pointer; user-select: none; font-weight: 600;
309
+ }
310
+ .blex-diff__line { display: block; padding: 1px 10px; white-space: pre-wrap; }
311
+ .blex-diff__line--add { background: color-mix(in srgb, var(--blex-success) 15%, transparent); }
312
+ .blex-diff__line--remove { background: color-mix(in srgb, var(--blex-error) 15%, transparent); }
313
+ .blex-diff__line--context { }
314
+ .blex-diff__actions { display: flex; gap: 6px; margin-top: 8px; }
315
+ .blex-diff__apply { background: var(--blex-success); color: #fff; border-color: var(--blex-success); }
316
+ .blex-diff__apply:hover { opacity: 0.9; background: var(--blex-success); }
317
+ .blex-diff__reject { background: var(--blex-error); color: #fff; border-color: var(--blex-error); }
318
+ .blex-diff__reject:hover { opacity: 0.9; background: var(--blex-error); }
319
+
320
+ /* \u2500\u2500 file-tree \u2500\u2500 */
321
+ .blex-file-tree { padding: 8px 0; }
322
+ .blex-file-tree ul { list-style: none; padding: 0; margin: 0; }
323
+ .blex-file-tree__children { padding-left: 20px; }
324
+ .blex-file-tree__node { padding: 2px 0; }
325
+ .blex-file-tree__label {
326
+ display: inline-flex; align-items: center; gap: 4px; cursor: pointer;
327
+ padding: 2px 6px; border-radius: 3px; font-size: 13px;
328
+ }
329
+ .blex-file-tree__label:hover { background: rgba(0,0,0,0.05); }
330
+ .blex-file-tree__node--selected > .blex-file-tree__label { background: color-mix(in srgb, var(--blex-accent) 15%, transparent); }
331
+ .blex-file-tree__node--directory > .blex-file-tree__label::before { content: '\u{1F4C1}'; font-size: 14px; }
332
+ .blex-file-tree__node--file > .blex-file-tree__label::before { content: '\u{1F4C4}'; font-size: 14px; }
333
+ .blex-file-tree__toggle {
334
+ background: none; border: none; cursor: pointer; padding: 0 4px;
335
+ font-size: 10px; color: var(--blex-text); opacity: 0.6;
336
+ }
337
+ .blex-file-tree__size { font-size: 11px; opacity: 0.5; margin-left: 8px; }
338
+
339
+ /* \u2500\u2500 form \u2500\u2500 */
340
+ .blex-form__title { font-size: 15px; font-weight: 600; margin-bottom: 12px; }
341
+ .blex-form__field { margin-bottom: 12px; }
342
+ .blex-form__label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 4px; }
343
+ .blex-form__input {
344
+ display: block; width: 100%; box-sizing: border-box;
345
+ padding: 8px 10px; border: 1px solid var(--blex-border); border-radius: 4px;
346
+ font-family: var(--blex-font-family); font-size: 13px;
347
+ background: var(--blex-bg); color: var(--blex-text);
348
+ }
349
+ .blex-form__input:focus { outline: 2px solid var(--blex-accent); outline-offset: -1px; }
350
+ .blex-form__checkbox { margin-right: 6px; }
351
+ .blex-form__error { color: var(--blex-error); font-size: 12px; margin-top: 4px; }
352
+ .blex-form__submit { margin-top: 8px; background: var(--blex-accent); color: #fff; border-color: var(--blex-accent); }
353
+ .blex-form__submit:hover { opacity: 0.9; background: var(--blex-accent); }
354
+
355
+ /* \u2500\u2500 progress \u2500\u2500 */
356
+ .blex-progress__title { font-size: 14px; font-weight: 600; margin-bottom: 12px; }
357
+ .blex-progress__steps { display: flex; flex-direction: column; gap: 0; position: relative; }
358
+ .blex-progress__step {
359
+ display: flex; align-items: flex-start; gap: 12px; padding: 8px 0;
360
+ position: relative;
361
+ }
362
+ .blex-progress__step::before {
363
+ content: ''; position: absolute; left: 11px; top: 28px; bottom: -8px;
364
+ width: 2px; background: var(--blex-border);
365
+ }
366
+ .blex-progress__step:last-child::before { display: none; }
367
+ .blex-progress__indicator {
368
+ width: 24px; height: 24px; border-radius: 50%; flex-shrink: 0;
369
+ display: flex; align-items: center; justify-content: center;
370
+ font-size: 12px; font-weight: 700; border: 2px solid var(--blex-border);
371
+ background: var(--blex-bg); color: var(--blex-text); z-index: 1;
372
+ }
373
+ .blex-progress__step--completed .blex-progress__indicator {
374
+ background: var(--blex-success); border-color: var(--blex-success); color: #fff;
375
+ }
376
+ .blex-progress__step--completed .blex-progress__indicator::after { content: '\u2713'; }
377
+ .blex-progress__step--active .blex-progress__indicator {
378
+ background: var(--blex-accent); border-color: var(--blex-accent); color: #fff;
379
+ }
380
+ .blex-progress__step--pending .blex-progress__indicator { opacity: 0.5; }
381
+ .blex-progress__step--completed::before { background: var(--blex-success); }
382
+ .blex-progress__content { padding-top: 2px; }
383
+ .blex-progress__label { font-size: 14px; font-weight: 500; }
384
+ .blex-progress__description { font-size: 12px; opacity: 0.7; margin-top: 2px; }
385
+
386
+ /* \u2500\u2500 terminal \u2500\u2500 */
387
+ .blex-terminal {
388
+ background: #1e1e1e; color: #d4d4d4; font-family: var(--blex-font-mono);
389
+ font-size: 13px; border-color: #333;
390
+ }
391
+ .blex-terminal__command {
392
+ display: flex; align-items: center; gap: 8px; padding-bottom: 8px;
393
+ border-bottom: 1px solid #333; margin-bottom: 8px;
394
+ }
395
+ .blex-terminal__prompt { color: var(--blex-success); font-weight: 700; user-select: none; }
396
+ .blex-terminal__output { white-space: pre-wrap; overflow-x: auto; line-height: 1.4; }
397
+ .blex-terminal__toggle {
398
+ background: #2d2d2d; color: #d4d4d4; border-color: #444;
399
+ font-family: var(--blex-font-mono); font-size: 12px;
400
+ }
401
+ .blex-terminal__toggle:hover { background: #3d3d3d; }
402
+ .blex-terminal__exit-code {
403
+ display: inline-block; padding: 2px 8px; border-radius: 3px;
404
+ font-size: 11px; font-weight: 600; margin-top: 8px;
405
+ }
406
+ .blex-terminal__exit-code--success { background: color-mix(in srgb, var(--blex-success) 20%, #1e1e1e); color: var(--blex-success); }
407
+ .blex-terminal__exit-code--error { background: color-mix(in srgb, var(--blex-error) 20%, #1e1e1e); color: var(--blex-error); }
408
+ .blex-terminal__copy {
409
+ background: #2d2d2d; color: #d4d4d4; border-color: #444;
410
+ font-family: var(--blex-font-mono); font-size: 12px; margin-top: 8px;
411
+ }
412
+ .blex-terminal__copy:hover { background: #3d3d3d; }
413
+
414
+ /* \u2500\u2500 timeline \u2500\u2500 */
415
+ .blex-timeline__title { font-size: 14px; font-weight: 600; margin-bottom: 12px; }
416
+ .blex-timeline__list { list-style: none; padding: 0; margin: 0; }
417
+ .blex-timeline__item {
418
+ display: flex; gap: 12px; position: relative; padding-bottom: 16px;
419
+ }
420
+ .blex-timeline__item::before {
421
+ content: ''; position: absolute; left: 5px; top: 16px; bottom: 0;
422
+ width: 2px; background: var(--blex-border);
423
+ }
424
+ .blex-timeline__item:last-child::before { display: none; }
425
+ .blex-timeline__dot {
426
+ width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0;
427
+ background: var(--blex-accent); margin-top: 4px; z-index: 1;
428
+ }
429
+ .blex-timeline__content { flex: 1; }
430
+ .blex-timeline__time { font-size: 11px; opacity: 0.6; margin-bottom: 2px; }
431
+ .blex-timeline__event-title { font-size: 14px; font-weight: 500; }
432
+ .blex-timeline__description { font-size: 13px; opacity: 0.8; margin-top: 2px; }
433
+
434
+ /* \u2500\u2500 layout \u2500\u2500 */
435
+ .blex-layout { border: none; padding: 0; background: transparent; gap: 12px; }
436
+ .blex-layout__child { min-width: 0; }
437
+
438
+ /* \u2500\u2500 kanban \u2500\u2500 */
439
+ .blex-kanban {
440
+ display: flex; gap: 12px; overflow-x: auto; padding: 12px;
441
+ font-family: var(--blex-font-family); color: var(--blex-text);
442
+ }
443
+ .blex-kanban__column {
444
+ min-width: 220px; max-width: 300px; flex-shrink: 0;
445
+ background: var(--blex-border); border-radius: 8px; padding: 10px;
446
+ }
447
+ .blex-kanban__column-title {
448
+ font-size: 13px; font-weight: 700; text-transform: uppercase;
449
+ letter-spacing: 0.05em; padding: 4px 6px 10px; opacity: 0.7;
450
+ }
451
+ .blex-kanban__item {
452
+ background: var(--blex-bg); border: 1px solid var(--blex-border);
453
+ border-radius: 6px; padding: 10px; margin-bottom: 8px; cursor: grab;
454
+ transition: box-shadow var(--blex-animation-duration);
455
+ }
456
+ .blex-kanban__item:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }
457
+ .blex-kanban__item--dragging { opacity: 0.5; }
458
+ .blex-kanban__item-title { font-size: 14px; font-weight: 500; }
459
+ .blex-kanban__item-subtitle { font-size: 12px; opacity: 0.7; margin-top: 4px; }
460
+ .blex-kanban__item-tags { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 8px; }
461
+ .blex-kanban__item-tags span {
462
+ font-size: 11px; padding: 2px 8px; border-radius: 10px;
463
+ background: color-mix(in srgb, var(--blex-accent) 15%, transparent);
464
+ color: var(--blex-accent); font-weight: 500;
465
+ }
466
+
467
+ /* \u2500\u2500 calendar \u2500\u2500 */
468
+ .blex-calendar {
469
+ font-family: var(--blex-font-family); color: var(--blex-text);
470
+ border: 1px solid var(--blex-border); border-radius: 6px; padding: 12px;
471
+ background: var(--blex-bg);
472
+ }
473
+ .blex-calendar__nav { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
474
+ .blex-calendar__title { flex: 1; text-align: center; font-weight: 600; font-size: 15px; }
475
+ .blex-calendar__view-toggle { display: flex; gap: 4px; margin-bottom: 12px; justify-content: center; }
476
+ .blex-calendar__view-btn[aria-pressed="true"] {
477
+ background: var(--blex-accent); color: #fff; border-color: var(--blex-accent);
478
+ }
479
+ .blex-calendar__grid {
480
+ display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px;
481
+ border: 1px solid var(--blex-border); border-radius: 4px; overflow: hidden;
482
+ }
483
+ .blex-calendar__day-header {
484
+ padding: 6px 4px; text-align: center; font-size: 11px; font-weight: 600;
485
+ text-transform: uppercase; background: var(--blex-border); letter-spacing: 0.05em;
486
+ }
487
+ .blex-calendar__day {
488
+ min-height: 80px; padding: 4px; background: var(--blex-bg);
489
+ border: 1px solid var(--blex-border); cursor: pointer; font-size: 12px;
490
+ }
491
+ .blex-calendar__day:hover { background: rgba(0,0,0,0.02); }
492
+ .blex-calendar__day--filler { background: rgba(0,0,0,0.02); cursor: default; }
493
+ .blex-calendar__day-number { font-weight: 600; font-size: 13px; margin-bottom: 4px; }
494
+ .blex-calendar__slot {
495
+ min-height: 40px; padding: 4px; border-bottom: 1px solid var(--blex-border);
496
+ cursor: pointer; font-size: 12px;
497
+ }
498
+ .blex-calendar__slot:hover { background: rgba(0,0,0,0.02); }
499
+ .blex-calendar__event {
500
+ display: block; padding: 2px 6px; margin: 1px 0; border-radius: 3px;
501
+ font-size: 11px; color: #fff; background: var(--blex-accent);
502
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer;
503
+ }
504
+
505
+ /* \u2500\u2500 gallery \u2500\u2500 */
506
+ .blex-gallery {
507
+ font-family: var(--blex-font-family); color: var(--blex-text);
508
+ border: 1px solid var(--blex-border); border-radius: 6px; overflow: hidden;
509
+ background: var(--blex-bg);
510
+ }
511
+ .blex-gallery--grid .blex-gallery__item { display: block; }
512
+ .blex-gallery--grid {
513
+ display: grid;
514
+ grid-template-columns: repeat(var(--blex-gallery-columns, 3), 1fr);
515
+ gap: 4px; padding: 4px;
516
+ }
517
+ .blex-gallery--carousel { position: relative; }
518
+ .blex-gallery__item { overflow: hidden; cursor: pointer; }
519
+ .blex-gallery__img { width: 100%; height: 100%; object-fit: cover; display: block; }
520
+ .blex-gallery__caption { padding: 6px 8px; font-size: 12px; opacity: 0.8; }
521
+ .blex-gallery__nav {
522
+ display: flex; justify-content: center; gap: 8px; padding: 8px;
523
+ }
144
524
  `;
145
525
  var injected = false;
146
526
  function ensureTheme() {
@@ -183,6 +563,11 @@ async function renderBlock(block, container, options) {
183
563
  renderer.onInteraction(callback);
184
564
  }
185
565
  },
566
+ revertInteraction(interaction) {
567
+ if (renderer?.revertInteraction) {
568
+ renderer.revertInteraction(interaction);
569
+ }
570
+ },
186
571
  destroy() {
187
572
  renderer?.destroy();
188
573
  renderer = null;
@@ -231,7 +616,10 @@ var ConfirmRenderer = class extends BaseRenderer {
231
616
  blockId: block.id,
232
617
  type: "click",
233
618
  payload: { button: label },
234
- 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
235
623
  });
236
624
  });
237
625
  btnGroup.appendChild(btn);
@@ -333,11 +721,15 @@ Selected: ${selectedLabels.join(", ")}`;
333
721
  serialized += `
334
722
  Write-in: ${this.writeInValue}`;
335
723
  }
724
+ const summary = selectedLabels.length > 0 ? `Voted: ${selectedLabels.join(", ")}${this.writeInValue ? ` + "${this.writeInValue}"` : ""}` : `Write-in: ${this.writeInValue}`;
336
725
  this.emit({
337
726
  blockId: block.id,
338
727
  type: "submit",
339
728
  payload,
340
- serialized
729
+ serialized,
730
+ summary,
731
+ icon: "\u{1F5F3}",
732
+ immediate: true
341
733
  });
342
734
  });
343
735
  wrapper.appendChild(submitBtn);
@@ -563,7 +955,10 @@ var SvgRenderer = class extends BaseRenderer {
563
955
  blockId: block.id,
564
956
  type: "click",
565
957
  payload: { action: "download" },
566
- serialized: `Downloaded SVG${title ? `: ${title}` : ""}`
958
+ serialized: `Downloaded SVG${title ? `: ${title}` : ""}`,
959
+ summary: `Downloaded SVG${title ? `: ${title}` : ""}`,
960
+ icon: "\u2B07",
961
+ immediate: true
567
962
  });
568
963
  });
569
964
  actions.appendChild(downloadBtn);
@@ -577,7 +972,10 @@ var SvgRenderer = class extends BaseRenderer {
577
972
  blockId: block.id,
578
973
  type: "click",
579
974
  payload: { action: "copy" },
580
- serialized: `Copied SVG${title ? `: ${title}` : ""}`
975
+ serialized: `Copied SVG${title ? `: ${title}` : ""}`,
976
+ summary: `Copied SVG${title ? `: ${title}` : ""}`,
977
+ icon: "\u{1F4CB}",
978
+ immediate: true
581
979
  });
582
980
  });
583
981
  actions.appendChild(copyBtn);
@@ -605,6 +1003,13 @@ var TableRenderer = class extends BaseRenderer {
605
1003
  this._build(block);
606
1004
  container.setAttribute("data-blex-ready", "true");
607
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
+ }
608
1013
  update(block) {
609
1014
  if (!this.container) return;
610
1015
  this.currentBlock = block;
@@ -714,6 +1119,7 @@ var TableRenderer = class extends BaseRenderer {
714
1119
  separatorLine,
715
1120
  ...dataLines
716
1121
  ].join("\n");
1122
+ const count = selectedIndices.length;
717
1123
  this.emit({
718
1124
  blockId: block.id,
719
1125
  type: "select",
@@ -721,7 +1127,11 @@ var TableRenderer = class extends BaseRenderer {
721
1127
  selectedRows: selectedIndices,
722
1128
  columns
723
1129
  },
724
- serialized
1130
+ serialized,
1131
+ summary: `Selected ${count} row${count !== 1 ? "s" : ""}`,
1132
+ icon: "\u2610",
1133
+ immediate: false,
1134
+ revertable: true
725
1135
  });
726
1136
  }
727
1137
  };
@@ -735,14 +1145,25 @@ var CodeRenderer = class extends BaseRenderer {
735
1145
  super(...arguments);
736
1146
  this.selectedLines = /* @__PURE__ */ new Set();
737
1147
  this.lastClickedLine = null;
1148
+ this.currentBlock = null;
1149
+ }
1150
+ revertInteraction(interaction) {
1151
+ if (!this.container || !this.currentBlock) return;
1152
+ if (interaction.type !== "select") return;
1153
+ this.selectedLines.clear();
1154
+ this.lastClickedLine = null;
1155
+ this.container.innerHTML = "";
1156
+ this._build(this.currentBlock);
738
1157
  }
739
1158
  render(block, container) {
1159
+ this.currentBlock = block;
740
1160
  this.container = container;
741
1161
  this._build(block);
742
1162
  container.setAttribute("data-blex-ready", "true");
743
1163
  }
744
1164
  update(block) {
745
1165
  if (!this.container) return;
1166
+ this.currentBlock = block;
746
1167
  const lines = block.data.code.split("\n");
747
1168
  for (const lineNum of Array.from(this.selectedLines)) {
748
1169
  if (lineNum > lines.length) this.selectedLines.delete(lineNum);
@@ -837,6 +1258,7 @@ var CodeRenderer = class extends BaseRenderer {
837
1258
  const serialized = `\`\`\`${langTag}
838
1259
  ${selectedCode}
839
1260
  \`\`\``;
1261
+ const lineRange = sortedLines.length === 1 ? `line ${sortedLines[0]}` : `lines ${sortedLines[0]}-${sortedLines[sortedLines.length - 1]}`;
840
1262
  this.emit({
841
1263
  blockId: block.id,
842
1264
  type: "select",
@@ -844,7 +1266,11 @@ ${selectedCode}
844
1266
  lines: sortedLines,
845
1267
  ...language !== void 0 && { language }
846
1268
  },
847
- serialized
1269
+ serialized,
1270
+ summary: `Selected ${lineRange}`,
1271
+ icon: "< >",
1272
+ immediate: false,
1273
+ revertable: true
848
1274
  });
849
1275
  }
850
1276
  };
@@ -933,7 +1359,10 @@ var DiffRenderer = class extends BaseRenderer {
933
1359
  blockId: block.id,
934
1360
  type: "apply",
935
1361
  payload: { hunks },
936
- serialized: `Applied diff to ${filename ?? "file"}`
1362
+ serialized: `Applied diff to ${filename ?? "file"}`,
1363
+ summary: `Applied diff${filename ? `: ${filename}` : ""}`,
1364
+ icon: "\u2705",
1365
+ immediate: true
937
1366
  });
938
1367
  });
939
1368
  actions.appendChild(applyBtn);
@@ -946,7 +1375,10 @@ var DiffRenderer = class extends BaseRenderer {
946
1375
  blockId: block.id,
947
1376
  type: "reject",
948
1377
  payload: { hunks },
949
- serialized: `Rejected diff to ${filename ?? "file"}`
1378
+ serialized: `Rejected diff to ${filename ?? "file"}`,
1379
+ summary: `Rejected diff${filename ? `: ${filename}` : ""}`,
1380
+ icon: "\u274C",
1381
+ immediate: true
950
1382
  });
951
1383
  });
952
1384
  actions.appendChild(rejectBtn);
@@ -964,8 +1396,10 @@ var FileTreeRenderer = class extends BaseRenderer {
964
1396
  super(...arguments);
965
1397
  this.expandedPaths = /* @__PURE__ */ new Set();
966
1398
  this.selectedPaths = /* @__PURE__ */ new Set();
1399
+ this.currentBlock = null;
967
1400
  }
968
1401
  render(block, container) {
1402
+ this.currentBlock = block;
969
1403
  this.container = container;
970
1404
  if (block.data.expanded) {
971
1405
  for (const p of block.data.expanded) this.expandedPaths.add(p);
@@ -973,8 +1407,16 @@ var FileTreeRenderer = class extends BaseRenderer {
973
1407
  this.buildTree(block);
974
1408
  container.setAttribute("data-blex-ready", "true");
975
1409
  }
1410
+ revertInteraction(interaction) {
1411
+ if (!this.container || !this.currentBlock) return;
1412
+ if (interaction.type !== "select") return;
1413
+ this.selectedPaths.clear();
1414
+ this.container.innerHTML = "";
1415
+ this.buildTree(this.currentBlock);
1416
+ }
976
1417
  update(block) {
977
1418
  if (!this.container) return;
1419
+ this.currentBlock = block;
978
1420
  this.container.innerHTML = "";
979
1421
  this.buildTree(block);
980
1422
  }
@@ -1046,12 +1488,19 @@ var FileTreeRenderer = class extends BaseRenderer {
1046
1488
  }
1047
1489
  emitSelection(block) {
1048
1490
  const paths = Array.from(this.selectedPaths).sort();
1491
+ const count = paths.length;
1492
+ const lastPath = paths[paths.length - 1] ?? "";
1493
+ const fileName = lastPath.split("/").pop() ?? lastPath;
1049
1494
  this.emit({
1050
1495
  blockId: block.id,
1051
1496
  type: "select",
1052
1497
  payload: { paths },
1053
1498
  serialized: `Selected files:
1054
- ${paths.join("\n")}`
1499
+ ${paths.join("\n")}`,
1500
+ summary: count === 1 ? `Selected ${fileName}` : `Selected ${count} files`,
1501
+ icon: "\u{1F4C1}",
1502
+ immediate: false,
1503
+ revertable: true
1055
1504
  });
1056
1505
  }
1057
1506
  formatSize(bytes) {
@@ -1096,12 +1545,16 @@ var FormRenderer = class extends BaseRenderer {
1096
1545
  e.preventDefault();
1097
1546
  if (this.validate(fields)) {
1098
1547
  const serializedPairs = Object.entries(this.values).map(([k, v]) => `${k}: ${v}`).join("\n");
1548
+ const fieldCount = Object.keys(this.values).length;
1099
1549
  this.emit({
1100
1550
  blockId: block.id,
1101
1551
  type: "submit",
1102
1552
  payload: { ...this.values },
1103
1553
  serialized: `Form submission${title ? ` (${title})` : ""}:
1104
- ${serializedPairs}`
1554
+ ${serializedPairs}`,
1555
+ summary: `Submitted${title ? `: ${title}` : ` form (${fieldCount} fields)`}`,
1556
+ icon: "\u{1F4CB}",
1557
+ immediate: true
1105
1558
  });
1106
1559
  } else {
1107
1560
  this.container.innerHTML = "";
@@ -1363,7 +1816,10 @@ var TerminalRenderer = class extends BaseRenderer {
1363
1816
  blockId: block.id,
1364
1817
  type: "click",
1365
1818
  payload: { action: "copy" },
1366
- serialized: `Copied terminal output${command ? ` from: ${command}` : ""}`
1819
+ serialized: `Copied terminal output${command ? ` from: ${command}` : ""}`,
1820
+ summary: `Copied output${command ? `: ${command}` : ""}`,
1821
+ icon: "\u{1F4CB}",
1822
+ immediate: true
1367
1823
  });
1368
1824
  });
1369
1825
  wrapper.appendChild(copyBtn);
@@ -1530,15 +1986,15 @@ function registerDefaults() {
1530
1986
  return createChartRenderer;
1531
1987
  });
1532
1988
  registerLazyBlockType("kanban", async () => {
1533
- const { createKanbanRenderer } = await import('./kanban-XUXVTRX2.js');
1989
+ const { createKanbanRenderer } = await import('./kanban-FLEZGRIE.js');
1534
1990
  return createKanbanRenderer;
1535
1991
  });
1536
1992
  registerLazyBlockType("calendar", async () => {
1537
- const { createCalendarRenderer } = await import('./calendar-HUZDQQN2.js');
1993
+ const { createCalendarRenderer } = await import('./calendar-PNRNENA4.js');
1538
1994
  return createCalendarRenderer;
1539
1995
  });
1540
1996
  registerLazyBlockType("gallery", async () => {
1541
- const { createGalleryRenderer } = await import('./gallery-ISM7FZA3.js');
1997
+ const { createGalleryRenderer } = await import('./gallery-FCVFZFE7.js');
1542
1998
  return createGalleryRenderer;
1543
1999
  });
1544
2000
  const builtIns = [
@@ -1569,5 +2025,5 @@ function registerDefaults() {
1569
2025
  }
1570
2026
 
1571
2027
  export { getRegisteredTypes, hasBlockType, isBuiltIn, registerBlockType, registerDefaults, registerLazyBlockType, renderBlock, unregisterBlockType };
1572
- //# sourceMappingURL=chunk-ZKSJGHJI.js.map
1573
- //# sourceMappingURL=chunk-ZKSJGHJI.js.map
2028
+ //# sourceMappingURL=chunk-JEYTN6MT.js.map
2029
+ //# sourceMappingURL=chunk-JEYTN6MT.js.map