Commit d2a012a
authored
feat(template-builder): Cake Equity fixes — lockMode, fieldColors, reactive mode (SD-1866, SD-883, SD-2406) (#2727)
* feat(template-builder): wire lockMode through field insertion paths
SuperDoc core already enforces SDT lock modes (SD-1616), but Template
Builder never passed lockMode to the editor commands. This adds:
- LockMode type and lockMode prop on FieldDefinition / TemplateField
- defaultLockMode prop on SuperDocTemplateBuilderProps
- lockMode threading through insertFieldInternal, handleSelectExisting,
and handleMenuSelect
- lockMode read-back in getTemplateFieldsFromEditor
Closes SD-1866
* fix(template-builder): include lockMode in field equality check
areTemplateFieldsEqual omitted lockMode, so lock-only changes were
silently dropped by discoverFields. Also tightens the lockMode spread
guard from truthiness to nullish check for consistency with the ??
resolution above.
* docs(template-builder): add lockMode and defaultLockMode
Documents field locking in configuration guide and API reference.
* feat(template-builder): add lock mode selector to field creation form
Adds a dropdown to the default FieldMenu create form so users can
set a lock mode when creating new fields. Options: No lock, Unlocked,
Container locked, Content locked, Fully locked.
* fix(template-builder): respect lock mode in delete and show lock badge
- deleteField no longer force-removes locked fields from state when
the editor command is rejected by the lock plugin
- FieldList sidebar shows a lock icon for fields with active lock modes
* refactor(template-builder): simplify lock UI to a checkbox
- Revert lock guard in deleteField — template authors can always
delete fields regardless of lock mode
- Replace 5-option lock dropdown with a simple "Locked" checkbox
that maps to contentLocked
- Full LockMode type still available for programmatic use
* docs(template-builder): simplify lock mode documentation
Focus on contentLocked as the default, remove the 4-mode table,
clarify that locking only affects end users not template authors.
* feat(template-builder): add fieldColors prop for field type styling
Consumers can now pass a `fieldColors` prop to color-code fields by
type in both the document and sidebar — no CSS import needed.
- Generates scoped CSS from fieldColors and injects into <head>
- Dynamic sidebar/menu badge colors via updated getFieldTypeStyle
- Removes need for manual field-types.css import (still available)
- Updates demo to use fieldColors instead of CSS variable overrides
- Documents fieldColors in configuration guide and API reference
Closes SD-883
* fix(template-builder): address review findings for fieldColors
- Fix block label selector: use .superdoc-structured-content__label
(not __block__label) to match actual DOM
- Fix non-hex color support: use color-mix() instead of appending '1a'
- Fix partial fieldColors: only generate default rule when owner key
exists, preventing unrelated fields from being recolored
- Simplify style injection: compute CSS in useMemo directly, remove
JSON stringify/parse round-trip
- Extract buildColorRules helper to deduplicate CSS template
- Add 11 unit tests for getFieldTypeStyle and generateFieldColorCSS
* fix(template-builder): pass fieldColors to right-side sidebar
* feat(template-builder): reactive mode changes and refresh method
- Remove document.mode from init effect deps so mode changes don't
destroy and recreate the editor (no more scroll jump / content flash)
- Add separate useEffect that calls setDocumentMode() imperatively,
following the same pattern as the React wrapper
- Add refresh() method to the imperative handle for re-discovering
fields after async data delivery
- Document refresh() in API reference
Closes SD-2406
* fix(template-builder): queue mode changes during init
If document.mode changes while SuperDoc is still loading, the change
is queued and applied once handleReady fires. Follows the same
pendingModeRef pattern as the React wrapper.
* fix(template-builder): address review findings for mode change logic
- Remove redundant prevModeRef — useEffect dep array handles this
- Clear pendingModeRef in init cleanup to prevent stale mode on re-init
- Clear pendingModeRef when applying mode directly
- Extract applyDocumentMode helper to centralize the as-any cast
* docs(template-builder): document reactive mode switching
* fix(template-builder): emit unlocked when checkbox is unchecked
When the "Locked" checkbox is unchecked, emit lockMode: 'unlocked'
instead of omitting it, so it correctly overrides defaultLockMode.1 parent f98650f commit d2a012a
10 files changed
Lines changed: 378 additions & 66 deletions
File tree
- apps/docs/solutions/template-builder
- packages/template-builder
- demo/src
- src
- defaults
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
78 | 86 | | |
79 | 87 | | |
80 | 88 | | |
| |||
174 | 182 | | |
175 | 183 | | |
176 | 184 | | |
| 185 | + | |
177 | 186 | | |
178 | 187 | | |
179 | 188 | | |
| |||
190 | 199 | | |
191 | 200 | | |
192 | 201 | | |
| 202 | + | |
193 | 203 | | |
194 | 204 | | |
195 | 205 | | |
| |||
351 | 361 | | |
352 | 362 | | |
353 | 363 | | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
354 | 372 | | |
355 | 373 | | |
356 | 374 | | |
| |||
387 | 405 | | |
388 | 406 | | |
389 | 407 | | |
390 | | - | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
391 | 423 | | |
392 | 424 | | |
393 | 425 | | |
394 | 426 | | |
395 | 427 | | |
396 | | - | |
397 | | - | |
398 | 428 | | |
399 | 429 | | |
400 | 430 | | |
| |||
426 | 456 | | |
427 | 457 | | |
428 | 458 | | |
| 459 | + | |
429 | 460 | | |
430 | 461 | | |
431 | 462 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
24 | 32 | | |
25 | 33 | | |
26 | 34 | | |
| |||
65 | 73 | | |
66 | 74 | | |
67 | 75 | | |
68 | | - | |
| 76 | + | |
69 | 77 | | |
70 | | - | |
71 | | - | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
72 | 93 | | |
73 | 94 | | |
74 | | - | |
| 95 | + | |
75 | 96 | | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
86 | 100 | | |
87 | 101 | | |
88 | 102 | | |
| |||
110 | 124 | | |
111 | 125 | | |
112 | 126 | | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
113 | 147 | | |
114 | 148 | | |
115 | 149 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
255 | 255 | | |
256 | 256 | | |
257 | 257 | | |
258 | | - | |
259 | | - | |
260 | | - | |
261 | | - | |
262 | | - | |
263 | | - | |
264 | 258 | | |
265 | 259 | | |
266 | 260 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
| |||
253 | 252 | | |
254 | 253 | | |
255 | 254 | | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
256 | 259 | | |
257 | 260 | | |
258 | 261 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
117 | 118 | | |
118 | 119 | | |
119 | 120 | | |
120 | | - | |
| 121 | + | |
121 | 122 | | |
122 | 123 | | |
123 | 124 | | |
124 | 125 | | |
125 | 126 | | |
126 | 127 | | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
127 | 143 | | |
128 | 144 | | |
129 | 145 | | |
130 | 146 | | |
131 | 147 | | |
132 | 148 | | |
133 | | - | |
| 149 | + | |
134 | 150 | | |
135 | 151 | | |
136 | 152 | | |
| |||
196 | 212 | | |
197 | 213 | | |
198 | 214 | | |
| 215 | + | |
199 | 216 | | |
200 | 217 | | |
201 | 218 | | |
| |||
258 | 275 | | |
259 | 276 | | |
260 | 277 | | |
| 278 | + | |
261 | 279 | | |
262 | 280 | | |
263 | 281 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| |||
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
| 34 | + | |
32 | 35 | | |
33 | 36 | | |
34 | 37 | | |
| |||
69 | 72 | | |
70 | 73 | | |
71 | 74 | | |
| 75 | + | |
72 | 76 | | |
73 | 77 | | |
74 | 78 | | |
| |||
83 | 87 | | |
84 | 88 | | |
85 | 89 | | |
| 90 | + | |
86 | 91 | | |
87 | 92 | | |
88 | 93 | | |
| |||
131 | 136 | | |
132 | 137 | | |
133 | 138 | | |
| 139 | + | |
134 | 140 | | |
135 | 141 | | |
136 | 142 | | |
| |||
227 | 233 | | |
228 | 234 | | |
229 | 235 | | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
230 | 249 | | |
231 | 250 | | |
232 | 251 | | |
| |||
254 | 273 | | |
255 | 274 | | |
256 | 275 | | |
| 276 | + | |
257 | 277 | | |
258 | 278 | | |
259 | 279 | | |
| |||
370 | 390 | | |
371 | 391 | | |
372 | 392 | | |
373 | | - | |
| 393 | + | |
374 | 394 | | |
375 | 395 | | |
376 | 396 | | |
| |||
482 | 502 | | |
483 | 503 | | |
484 | 504 | | |
485 | | - | |
| 505 | + | |
486 | 506 | | |
487 | 507 | | |
488 | 508 | | |
| |||
0 commit comments