@aduptive/strapi-blockscene 2.0.0-alpha.10 → 2.0.0-alpha.12

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/README.md CHANGED
@@ -65,7 +65,7 @@ Right beside the native zone label ("blocks (3)") each zone gets a short bar:
65
65
  - **Undo and Redo** (Strapi 5, first zone only): icon and text, the shortcut in
66
66
  the tooltip. See [Undo and redo](#undo-and-redo).
67
67
  - **Editing mode** (first zone only, when a preview route exists): a
68
- menu with Fields, Fields + page and Visual editor. Without a preview route the
68
+ menu with Fields only, Fields + preview and Visual editor. Without a preview route the
69
69
  menu is not shown; Settings, Blockscene says why.
70
70
  - **"…" (More actions)**: Select blocks, and "Paste N blocks" while the
71
71
  clipboard holds blocks this zone allows (see [Row actions](#row-actions)).
@@ -96,8 +96,10 @@ The modal is a block browser (80vw wide):
96
96
  remembered per browser). Active values show as removable chips with "Clear
97
97
  all"; the empty state offers a reset.
98
98
  - **Cards**, grouped by typology: facet badges (IMAGE, VIDEO, GALLERY, RICH
99
- TEXT, LIST, DYNAMIC, FORM), a star and a hover "+" that inserts at once.
100
- - A click **magnifies** the block: the card grows into a large panel over the
99
+ TEXT, LIST, DYNAMIC, FORM), a star and an always-visible magnifying glass.
100
+ Clicking the card, or focusing it and pressing Enter, inserts it immediately;
101
+ the magnifying glass opens its preview.
102
+ - The preview **magnifies** the block: the card grows into a large panel over the
101
103
  grid (sidebar and top bar stay usable, the grid dims underneath) and shrinks
102
104
  back into its card on close (close button, Esc or a click on the dimmed
103
105
  grid). The animation is transform/opacity only, about 250 ms, and is skipped
@@ -105,8 +107,7 @@ The modal is a block browser (80vw wide):
105
107
  with Fit / Mobile / Tablet / Desktop widths (scaled to fit, as in the page
106
108
  preview) and a compact strip: label, uid, description, badges, fields (on
107
109
  demand), the variant choice (see [Insert variants](#insert-variants)), star
108
- and Insert. Double click, "+" or Enter on a focused card inserts without it
109
- (the first variant, when the block has variants).
110
+ and Insert. A direct card insert uses the first variant, when the block has variants.
110
111
 
111
112
  The magnified preview shows the card's thumbnail at once and fades the live
112
113
  page in over it once it has loaded. Live source, first match wins:
@@ -189,7 +190,7 @@ components: {
189
190
  - **Choosing**: with two or more variants the magnified block shows them as a
190
191
  row of buttons; the live preview follows the choice (`{variant}` in the
191
192
  block preview URL, or the variant's block sent through the bridge) and
192
- Insert inserts it. Double click, "+" and Enter insert the first variant.
193
+ Insert inserts it. Clicking the card or pressing Enter inserts the first variant.
193
194
  The picker opened from a page preview insertion seam offers the same
194
195
  choice. A block without variants behaves as before; Settings, Blockscene
195
196
  lists each block's variants read-only.
@@ -214,6 +215,42 @@ components: {
214
215
  per variant and 256 KB for all of them. An invalid variant is left out with
215
216
  a warning naming the problem; the block keeps its valid ones.
216
217
 
218
+ ### Starter kits
219
+
220
+ New entries can start from a named set of blocks instead of an empty Dynamic
221
+ Zone. Kits live in project code, per content type. When every editable zone is
222
+ empty, Blockscene opens the kit chooser once; choosing one only changes the
223
+ unsaved form, so every placeholder remains editable and **Start blank** keeps
224
+ the current behaviour.
225
+
226
+ ```js
227
+ // config/plugins.js
228
+ blockscene: { config: {
229
+ kits: {
230
+ 'api::page.page': [{
231
+ id: 'landing',
232
+ label: { en: 'Landing page', 'pt-BR': 'Página de campanha' },
233
+ // Optional. A language code such as "pt" also matches "pt-BR".
234
+ locales: ['en', 'pt-BR'],
235
+ zones: { blocks: [
236
+ { __component: 'blocks.hero', title: 'Replace this headline' },
237
+ { __component: 'blocks.rich-text', text: 'Replace this text.' },
238
+ ] },
239
+ }],
240
+ },
241
+ } }
242
+ ```
243
+
244
+ Rows use the Content API shape and the same validated values as [insert
245
+ variants](#insert-variants). Schema defaults are merged in, nested components
246
+ work, and configured layout OPEN blocks receive their CLOSE automatically.
247
+ Media and relations are omitted because their ids are installation-specific;
248
+ required ones are called out in the server log and must be completed before
249
+ publishing. Invalid kits, missing required scalar values and kits below or
250
+ above a Dynamic Zone's bounds are ignored with a server warning. The chooser
251
+ is remembered for the current new-entry browser history item, so re-rendering
252
+ or reloading it does not apply or prompt twice.
253
+
217
254
  ## Row thumbnails
218
255
 
219
256
  Each added block shows its thumbnail at the left of the native accordion
@@ -397,7 +434,7 @@ ignored (boot continues). `GET /blockscene/settings` returns them as
397
434
  | Copy and Paste (`clipboard`) | yes/no | yes |
398
435
  | Blocks hidden on the site (`hiddenBlocks`) | `strip` / `flag` / `off` | `strip` |
399
436
  | Friendly field labels (`friendlyLabels`, see [Field labels](#field-labels)) | yes/no | yes |
400
- | Page preview toolbar (`previewToolbar`, see [Pane toolbar](#pane-toolbar)) | ordered list of `modes`, `history`, `devices`, `status`, `actions` | all five |
437
+ | Page preview toolbar (`previewToolbar`, see [Pane toolbar](#pane-toolbar)) | ordered list of `modes`, `history`, `versions`, `devices`, `status`, `actions` | all six (`versions`: Strapi 5) |
401
438
  | Page widths (`previewDevices`) | 1 to 8 of `fit`, `mobile`, `tablet`, `desktop`, `{ label, width }` | the four built-in |
402
439
 
403
440
  Every edit view opens in its content type's mode, else the initial preview
@@ -432,7 +469,7 @@ the two supported versions only.
432
469
  ## Whole-page preview
433
470
 
434
471
  Both distributions add a page preview with three modes, chosen from the
435
- first zone's bar and from the pane toolbar: Fields (form), Fields + page (side
472
+ first zone's bar and from the pane toolbar: Fields only (form), Fields + preview (side
436
473
  by side: resizable pane, native actions moved to a bar above the form) and
437
474
  Visual editor. It posts the live values of the first Dynamic Zone to a page
438
475
  your frontend serves; the page renders them with its own components and styles
@@ -550,7 +587,8 @@ blocks use the native insertion at a position. Differences:
550
587
  ### Pane toolbar
551
588
 
552
589
  Which controls the toolbar shows, and in which order, is `previewToolbar`:
553
- `modes` (Fields, Fields + page, Visual editor), `history` (Undo, Redo),
590
+ `modes` (Fields only, Fields + preview, Visual editor), `history` (Undo, Redo),
591
+ `versions` (the version history drawer, Strapi 5),
554
592
  `devices` (the width menu), `status` (Draft/Modified/Published and the unsaved
555
593
  hint) and `actions` (Save, Publish). A missing id is hidden; `status` and
556
594
  `actions` stay one group on the right, placed where the first of them is
@@ -973,11 +1011,47 @@ from what the document has now; fields the editor may not update, fields the
973
1011
  schema no longer has, blocks whose component is no longer allowed, and media or
974
1012
  related entries that no longer exist are left out and listed.
975
1013
 
1014
+ **Visual editor history (Phase 1).** The preview toolbar's `versions` control
1015
+ opens a drawer on the right. It is separate from `history` (Undo/Redo). If
1016
+ you already configured `previewToolbar`, add `versions` to that list or enable
1017
+ it in Settings. Versions are grouped by local calendar day, with local date
1018
+ and time, actor, action, and captured counts: total top-level Dynamic Zone rows
1019
+ (including group markers), added, removed and changed against the preceding
1020
+ snapshot in that locale. Older or unrecorded events show counts as unavailable;
1021
+ they are not retroactively counted as zero. The actor filter includes only
1022
+ people/tokens recorded for this document and locale. Lists use server pagination
1023
+ (25 per page) and mark events whose snapshots are no longer available.
1024
+
1025
+ Selecting an event hydrates its retained snapshot into a separate, read-only
1026
+ preview. It never calls the form's `setValues`, saves, publishes or restores
1027
+ anything. The banner identifies the version and returns to the current draft,
1028
+ including unsaved changes. Fast selections, returning while a load is pending,
1029
+ and document/locale/permission changes invalidate old responses. The pre-existing
1030
+ side-panel "Load this version" action remains available; restoration and visual
1031
+ diff enhancements are separate phases.
1032
+
1033
+ The parent rejects every mutation, selection, focus and hover message while
1034
+ viewing a version. Each version changes the iframe channel, so delayed messages
1035
+ cannot target the current draft after returning. The `update-page` message adds
1036
+ `readOnly: true`, sends no editable field/media descriptors and no clipboard.
1037
+ The reference bridge in `examples/page-preview` supports this flag, removes
1038
+ editing/insertion controls, and announces `capabilities: ['readOnly']` in `ready`.
1039
+ Custom bridges should do the same and refuse to queue or send edits when
1040
+ read-only. An older bridge can still render the snapshot, but the admin disables
1041
+ iframe interaction (including in-frame scrolling) and explains that it needs an
1042
+ update. Parent-side protection applies regardless of bridge support. The existing
1043
+ `hover` protocol highlights; it does not promise scroll-to-block behavior.
1044
+
1045
+ The drawer button also explains whether history is disabled/not configured for
1046
+ the type, the entry needs its first save, or `history.read` is missing. Permission
1047
+ changes require an administrator; this control cannot grant access.
1048
+
976
1049
  **Permission.** `Blockscene: Read version history` (`history.read`), plus read
977
1050
  access to the content type in the Content Manager. Snapshots hold removed and
978
1051
  unpublished text, so the section is hidden without it. Admin API:
979
- `GET /blockscene/history/:uid/:documentId?locale=` (the latest 100 events, no
980
- snapshots) and `GET /blockscene/history-events/:id` (one event, its snapshot and
1052
+ `GET /blockscene/history/:uid/:documentId?locale=&page=1&pageSize=25&actor=`
1053
+ (no snapshots; `results`, `pagination`, scoped `actors` and resolved `locale`)
1054
+ and `GET /blockscene/history-events/:id` (one event, its snapshot and
981
1055
  the media and relation targets that still exist).
982
1056
 
983
1057
  **Retention.** Snapshots are kept `retentionDays` (90) and at most
@@ -986,6 +1060,10 @@ kept `eventDays` (365, at least `retentionDays`). A cron job added by the plugin
986
1060
  runs nightly at 03:00 server time, in batches of 500; it only empties snapshots
987
1061
  and deletes events, never media files, and running it on several instances is
988
1062
  harmless.
1063
+ These are configurable limits, not a guarantee that a version from a week ago
1064
+ still exists: frequent changes can exceed `maxSnapshots` earlier. The snapshot
1065
+ cap is per document across locales; event metadata may outlive its snapshot.
1066
+ Naming versions and protecting them from purge are not implemented in Phase 1.
989
1067
 
990
1068
  ```js
991
1069
  // config/plugins.js