@caretcms/core 0.1.2 → 0.3.0

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 (190) hide show
  1. package/README.md +109 -13
  2. package/dist/contracts.d.ts +1 -0
  3. package/dist/contracts.d.ts.map +1 -1
  4. package/dist/contracts.js +1 -0
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/index.d.ts +31 -9
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +146 -30
  9. package/dist/index.js.map +1 -1
  10. package/dist/loader.d.ts +17 -6
  11. package/dist/loader.d.ts.map +1 -1
  12. package/dist/loader.js +57 -14
  13. package/dist/loader.js.map +1 -1
  14. package/dist/markdown/block-context.d.ts +21 -0
  15. package/dist/markdown/block-context.d.ts.map +1 -0
  16. package/dist/markdown/block-context.js +27 -0
  17. package/dist/markdown/block-context.js.map +1 -0
  18. package/dist/markdown/canonical-body.d.ts +30 -0
  19. package/dist/markdown/canonical-body.d.ts.map +1 -0
  20. package/dist/markdown/canonical-body.js +54 -0
  21. package/dist/markdown/canonical-body.js.map +1 -0
  22. package/dist/markdown/contracts.d.ts +66 -0
  23. package/dist/markdown/contracts.d.ts.map +1 -0
  24. package/dist/markdown/contracts.js +102 -0
  25. package/dist/markdown/contracts.js.map +1 -0
  26. package/dist/markdown/html-to-snodes.d.ts +26 -0
  27. package/dist/markdown/html-to-snodes.d.ts.map +1 -0
  28. package/dist/markdown/html-to-snodes.js +118 -0
  29. package/dist/markdown/html-to-snodes.js.map +1 -0
  30. package/dist/markdown/remark.d.ts +35 -0
  31. package/dist/markdown/remark.d.ts.map +1 -0
  32. package/dist/markdown/remark.js +66 -0
  33. package/dist/markdown/remark.js.map +1 -0
  34. package/dist/markdown/satteri.d.ts +19 -0
  35. package/dist/markdown/satteri.d.ts.map +1 -0
  36. package/dist/markdown/satteri.js +144 -0
  37. package/dist/markdown/satteri.js.map +1 -0
  38. package/dist/markdown/serialize.d.ts +60 -0
  39. package/dist/markdown/serialize.d.ts.map +1 -0
  40. package/dist/markdown/serialize.js +264 -0
  41. package/dist/markdown/serialize.js.map +1 -0
  42. package/dist/markdown/splice.d.ts +32 -0
  43. package/dist/markdown/splice.d.ts.map +1 -0
  44. package/dist/markdown/splice.js +44 -0
  45. package/dist/markdown/splice.js.map +1 -0
  46. package/dist/markdown/stamp.d.ts +68 -0
  47. package/dist/markdown/stamp.d.ts.map +1 -0
  48. package/dist/markdown/stamp.js +131 -0
  49. package/dist/markdown/stamp.js.map +1 -0
  50. package/dist/runtime/auth/rate-limiter.d.ts.map +1 -1
  51. package/dist/runtime/auth/rate-limiter.js +5 -0
  52. package/dist/runtime/auth/rate-limiter.js.map +1 -1
  53. package/dist/runtime/auth/session.d.ts +3 -3
  54. package/dist/runtime/auth/session.d.ts.map +1 -1
  55. package/dist/runtime/auth/session.js +68 -21
  56. package/dist/runtime/auth/session.js.map +1 -1
  57. package/dist/runtime/config.d.ts +3 -0
  58. package/dist/runtime/config.d.ts.map +1 -1
  59. package/dist/runtime/config.js +4 -1
  60. package/dist/runtime/config.js.map +1 -1
  61. package/dist/runtime/content.d.ts.map +1 -1
  62. package/dist/runtime/content.js +4 -2
  63. package/dist/runtime/content.js.map +1 -1
  64. package/dist/runtime/i18n.d.ts +86 -0
  65. package/dist/runtime/i18n.d.ts.map +1 -0
  66. package/dist/runtime/i18n.js +168 -0
  67. package/dist/runtime/i18n.js.map +1 -0
  68. package/dist/runtime/middleware.d.ts.map +1 -1
  69. package/dist/runtime/middleware.js +61 -6
  70. package/dist/runtime/middleware.js.map +1 -1
  71. package/dist/runtime/mutations/contracts.d.ts +28 -1
  72. package/dist/runtime/mutations/contracts.d.ts.map +1 -1
  73. package/dist/runtime/mutations/contracts.js +76 -0
  74. package/dist/runtime/mutations/contracts.js.map +1 -1
  75. package/dist/runtime/mutations/engine.d.ts +6 -1
  76. package/dist/runtime/mutations/engine.d.ts.map +1 -1
  77. package/dist/runtime/mutations/engine.js +271 -51
  78. package/dist/runtime/mutations/engine.js.map +1 -1
  79. package/dist/runtime/providers.d.ts +2 -1
  80. package/dist/runtime/providers.d.ts.map +1 -1
  81. package/dist/runtime/providers.js +7 -1
  82. package/dist/runtime/providers.js.map +1 -1
  83. package/dist/runtime/publish.d.ts +13 -1
  84. package/dist/runtime/publish.d.ts.map +1 -1
  85. package/dist/runtime/publish.js +80 -4
  86. package/dist/runtime/publish.js.map +1 -1
  87. package/dist/runtime/request-context.d.ts +14 -2
  88. package/dist/runtime/request-context.d.ts.map +1 -1
  89. package/dist/runtime/request-context.js +7 -1
  90. package/dist/runtime/request-context.js.map +1 -1
  91. package/dist/runtime/rewrite.d.ts.map +1 -1
  92. package/dist/runtime/rewrite.js +109 -3
  93. package/dist/runtime/rewrite.js.map +1 -1
  94. package/dist/runtime/rich-allowlist.d.ts.map +1 -1
  95. package/dist/runtime/rich-allowlist.js +5 -1
  96. package/dist/runtime/rich-allowlist.js.map +1 -1
  97. package/dist/runtime/routes/admin-entry.d.ts.map +1 -1
  98. package/dist/runtime/routes/admin-entry.js +114 -18
  99. package/dist/runtime/routes/admin-entry.js.map +1 -1
  100. package/dist/runtime/routes/admin.d.ts.map +1 -1
  101. package/dist/runtime/routes/admin.js +33 -15
  102. package/dist/runtime/routes/admin.js.map +1 -1
  103. package/dist/runtime/routes/auth-login.d.ts.map +1 -1
  104. package/dist/runtime/routes/auth-login.js +4 -0
  105. package/dist/runtime/routes/auth-login.js.map +1 -1
  106. package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
  107. package/dist/runtime/routes/auth-logout.js +7 -2
  108. package/dist/runtime/routes/auth-logout.js.map +1 -1
  109. package/dist/runtime/routes/auth-session.d.ts.map +1 -1
  110. package/dist/runtime/routes/auth-session.js +4 -2
  111. package/dist/runtime/routes/auth-session.js.map +1 -1
  112. package/dist/runtime/routes/collection-list.d.ts.map +1 -1
  113. package/dist/runtime/routes/collection-list.js +64 -41
  114. package/dist/runtime/routes/collection-list.js.map +1 -1
  115. package/dist/runtime/routes/entries.d.ts.map +1 -1
  116. package/dist/runtime/routes/entries.js +16 -6
  117. package/dist/runtime/routes/entries.js.map +1 -1
  118. package/dist/runtime/routes/history.d.ts.map +1 -1
  119. package/dist/runtime/routes/history.js +50 -22
  120. package/dist/runtime/routes/history.js.map +1 -1
  121. package/dist/runtime/routes/mutate.d.ts.map +1 -1
  122. package/dist/runtime/routes/mutate.js +40 -6
  123. package/dist/runtime/routes/mutate.js.map +1 -1
  124. package/dist/runtime/routes/publish.d.ts.map +1 -1
  125. package/dist/runtime/routes/publish.js +5 -2
  126. package/dist/runtime/routes/publish.js.map +1 -1
  127. package/dist/runtime/routes/schema.d.ts.map +1 -1
  128. package/dist/runtime/routes/schema.js +11 -3
  129. package/dist/runtime/routes/schema.js.map +1 -1
  130. package/dist/runtime/routes/studio-home.d.ts.map +1 -1
  131. package/dist/runtime/routes/studio-home.js +38 -19
  132. package/dist/runtime/routes/studio-home.js.map +1 -1
  133. package/dist/runtime/routes/theme-stylesheet.d.ts.map +1 -1
  134. package/dist/runtime/routes/theme-stylesheet.js +11 -1
  135. package/dist/runtime/routes/theme-stylesheet.js.map +1 -1
  136. package/dist/runtime/schema-registry.d.ts +8 -1
  137. package/dist/runtime/schema-registry.d.ts.map +1 -1
  138. package/dist/runtime/schema-registry.js +47 -3
  139. package/dist/runtime/schema-registry.js.map +1 -1
  140. package/dist/runtime/storage/atomic-write.d.ts.map +1 -1
  141. package/dist/runtime/storage/atomic-write.js +8 -3
  142. package/dist/runtime/storage/atomic-write.js.map +1 -1
  143. package/dist/runtime/storage/markdown-adapter.d.ts +19 -0
  144. package/dist/runtime/storage/markdown-adapter.d.ts.map +1 -1
  145. package/dist/runtime/storage/markdown-adapter.js +41 -0
  146. package/dist/runtime/storage/markdown-adapter.js.map +1 -1
  147. package/dist/runtime/storage/session-overlay-adapter.d.ts +8 -0
  148. package/dist/runtime/storage/session-overlay-adapter.d.ts.map +1 -1
  149. package/dist/runtime/storage/session-overlay-adapter.js +24 -2
  150. package/dist/runtime/storage/session-overlay-adapter.js.map +1 -1
  151. package/dist/runtime/themes/preset-tokens.js +4 -4
  152. package/dist/runtime/themes/preset-tokens.js.map +1 -1
  153. package/dist/runtime/utils.d.ts +10 -0
  154. package/dist/runtime/utils.d.ts.map +1 -1
  155. package/dist/runtime/utils.js +16 -0
  156. package/dist/runtime/utils.js.map +1 -1
  157. package/dist/runtime/views/studio-layout.d.ts +3 -0
  158. package/dist/runtime/views/studio-layout.d.ts.map +1 -1
  159. package/dist/runtime/views/studio-layout.js +36 -13
  160. package/dist/runtime/views/studio-layout.js.map +1 -1
  161. package/dist/schema-utils.d.ts +7 -0
  162. package/dist/schema-utils.d.ts.map +1 -1
  163. package/dist/schema-utils.js +143 -0
  164. package/dist/schema-utils.js.map +1 -1
  165. package/dist/types.d.ts +83 -1
  166. package/dist/types.d.ts.map +1 -1
  167. package/package.json +2 -2
  168. package/static/cms/admin-entry.css +135 -13
  169. package/static/cms/admin-entry.js +509 -86
  170. package/static/cms/editor/guards.js +1 -1
  171. package/static/cms/editor/image-edit.js +42 -11
  172. package/static/cms/editor/image.css +7 -1
  173. package/static/cms/editor/md-block-edit.js +176 -0
  174. package/static/cms/editor/md-serialize.js +301 -0
  175. package/static/cms/editor/panel.css +69 -25
  176. package/static/cms/editor/panel.js +58 -1
  177. package/static/cms/editor/rich-toolbar.js +4 -3
  178. package/static/cms/editor/sanitize.js +2 -1
  179. package/static/cms/editor/sync.js +277 -56
  180. package/static/cms/editor/text-edit.js +68 -17
  181. package/static/cms/editor/text-link-interactions.js +4 -4
  182. package/static/cms/editor/toast.css +114 -2
  183. package/static/cms/editor/toast.js +121 -22
  184. package/static/cms/editor/tokens-and-text.css +73 -3
  185. package/static/cms/editor/toolbar.css +19 -6
  186. package/static/cms/editor/toolbar.js +64 -23
  187. package/static/cms/editor.css +1 -1
  188. package/static/cms/editor.js +14 -3
  189. package/static/cms/studio-tokens.css +4 -4
  190. package/static/cms/studio.css +24 -0
@@ -15,6 +15,23 @@
15
15
  .caret-field-group .studio-label { margin-bottom: 0.5rem; }
16
16
  .caret-field-inline .studio-label { margin-bottom: 0; }
17
17
 
18
+ .caret-field-with-help {
19
+ display: grid;
20
+ grid-template-columns: minmax(0, 1fr) auto;
21
+ gap: 0.25rem 1rem;
22
+ }
23
+ .caret-field-with-help .caret-field-help {
24
+ grid-column: 1 / -1;
25
+ }
26
+ .caret-field-help,
27
+ .caret-image-help {
28
+ margin: 0.5rem 0 0;
29
+ color: var(--studio-text-dim);
30
+ font-size: 0.7rem;
31
+ line-height: 1.5;
32
+ }
33
+ .caret-image-help.is-error { color: var(--studio-red); }
34
+
18
35
  .caret-nested {
19
36
  padding-left: 1rem;
20
37
  border-left: 1px solid var(--studio-border);
@@ -88,11 +105,16 @@
88
105
  /* Single image */
89
106
  .caret-single-image-preview {
90
107
  position: relative;
91
- width: 128px;
92
- height: 128px;
108
+ width: min(100%, 320px);
109
+ aspect-ratio: 4 / 3;
93
110
  margin-bottom: 0.75rem;
94
111
  border: 1px solid var(--studio-border);
112
+ border-radius: var(--radius-theme-sm);
113
+ padding: 0;
95
114
  overflow: hidden;
115
+ display: block;
116
+ cursor: pointer;
117
+ background: var(--studio-surface);
96
118
  }
97
119
  .caret-single-image-preview img {
98
120
  width: 100%;
@@ -100,6 +122,41 @@
100
122
  object-fit: cover;
101
123
  display: block;
102
124
  }
125
+ .caret-single-image-overlay {
126
+ position: absolute;
127
+ inset: auto 0 0;
128
+ padding: 0.65rem;
129
+ color: white;
130
+ background: linear-gradient(transparent, rgba(0, 0, 0, 0.78));
131
+ font-size: 0.7rem;
132
+ font-weight: 600;
133
+ letter-spacing: 0.04em;
134
+ opacity: 0;
135
+ transform: translateY(0.25rem);
136
+ transition: opacity 0.15s, transform 0.15s;
137
+ }
138
+ .caret-single-image-preview:hover .caret-single-image-overlay,
139
+ .caret-single-image-preview:focus-visible .caret-single-image-overlay {
140
+ opacity: 1;
141
+ transform: translateY(0);
142
+ }
143
+ .caret-single-image-empty {
144
+ width: min(100%, 320px);
145
+ aspect-ratio: 4 / 3;
146
+ margin-bottom: 0.75rem;
147
+ border: 2px dashed var(--studio-border-hover);
148
+ border-radius: var(--radius-theme-sm);
149
+ background: var(--studio-surface);
150
+ color: var(--studio-text-muted);
151
+ cursor: pointer;
152
+ transition: border-color 0.15s, color 0.15s, background 0.15s;
153
+ }
154
+ .caret-single-image-empty:hover,
155
+ .caret-single-image-empty:focus-visible {
156
+ border-color: var(--studio-accent);
157
+ color: var(--studio-accent);
158
+ background: var(--studio-accent-soft);
159
+ }
103
160
  .caret-single-image-row {
104
161
  display: flex;
105
162
  align-items: center;
@@ -126,14 +183,48 @@
126
183
  }
127
184
  .caret-object-array-item {
128
185
  position: relative;
129
- padding: 0.75rem;
186
+ padding: 1rem;
130
187
  border: 1px solid var(--studio-border);
188
+ border-radius: var(--radius-theme-sm);
131
189
  background: rgba(255, 255, 255, 0.02);
132
190
  }
191
+ .caret-object-array-item.caret-object-array-dragging {
192
+ opacity: 0.5;
193
+ }
194
+ .caret-object-array-item.caret-object-array-drag-over {
195
+ border-color: var(--studio-accent);
196
+ box-shadow: 0 0 0 2px var(--studio-accent-soft);
197
+ }
198
+ .caret-object-array-header {
199
+ display: flex;
200
+ align-items: center;
201
+ justify-content: space-between;
202
+ gap: 0.75rem;
203
+ margin-bottom: 0.25rem;
204
+ }
205
+ .caret-object-array-actions {
206
+ display: flex;
207
+ align-items: center;
208
+ gap: 0.25rem;
209
+ }
210
+ .caret-object-array-drag {
211
+ flex: 0 0 auto;
212
+ width: 26px;
213
+ height: 26px;
214
+ padding: 0;
215
+ border: 0;
216
+ background: transparent;
217
+ color: var(--studio-text-dim);
218
+ cursor: grab;
219
+ font-size: 18px;
220
+ line-height: 1;
221
+ }
222
+ .caret-object-array-drag:active { cursor: grabbing; }
223
+ .caret-object-array-drag:focus-visible {
224
+ outline: 2px solid var(--studio-accent);
225
+ outline-offset: 2px;
226
+ }
133
227
  .caret-object-array-remove {
134
- position: absolute;
135
- top: 6px;
136
- right: 6px;
137
228
  width: 22px;
138
229
  height: 22px;
139
230
  border: none;
@@ -142,20 +233,44 @@
142
233
  cursor: pointer;
143
234
  font-size: 16px;
144
235
  line-height: 1;
145
- opacity: 0;
146
- transition: opacity 0.15s;
236
+ transition: background 0.15s;
147
237
  }
148
- .caret-object-array-item:hover .caret-object-array-remove { opacity: 1; }
238
+ .caret-object-array-remove:hover { background: rgba(239, 68, 68, 0.12); }
239
+ .caret-object-array-move {
240
+ width: 26px;
241
+ height: 26px;
242
+ padding: 0;
243
+ border: 1px solid var(--studio-border);
244
+ border-radius: var(--radius-theme-xs);
245
+ background: transparent;
246
+ color: var(--studio-text-muted);
247
+ cursor: pointer;
248
+ }
249
+ .caret-object-array-move:hover:not(:disabled) {
250
+ border-color: var(--studio-accent);
251
+ color: var(--studio-accent);
252
+ }
253
+ .caret-object-array-move:disabled { opacity: 0.3; cursor: default; }
149
254
  .caret-object-array-index {
150
255
  display: block;
151
- font-size: 9px;
152
- color: var(--studio-text-dim);
153
- margin-bottom: 0.5rem;
256
+ flex: 1 1 auto;
257
+ min-width: 0;
258
+ overflow: hidden;
259
+ text-overflow: ellipsis;
260
+ white-space: nowrap;
261
+ font-size: 0.75rem;
262
+ font-weight: 600;
263
+ color: var(--studio-text-muted);
154
264
  }
155
265
  .caret-object-array-fields {
156
266
  display: flex;
157
267
  flex-direction: column;
158
- gap: 0.5rem;
268
+ }
269
+ .caret-object-array-fields > .caret-field-group {
270
+ padding: 0.75rem 0;
271
+ }
272
+ .caret-object-array-fields > .caret-field-group:last-child {
273
+ border-bottom: 0;
159
274
  }
160
275
  .caret-object-array-row {
161
276
  display: flex;
@@ -205,3 +320,10 @@
205
320
  .caret-history-action[data-action="put"] { background: rgba(59,130,246,0.15); color: var(--studio-blue); }
206
321
  .caret-history-action[data-action="delete"] { background: rgba(239,68,68,0.15); color: var(--studio-red); }
207
322
  .caret-history-action[data-action="restore"] { background: rgba(59,130,246,0.15); color: var(--studio-accent); }
323
+
324
+ /* Paired live-page/Studio selection. This is deliberately blue and temporary;
325
+ green remains reserved for confirmed save feedback. */
326
+ .caret-field-group.caret-field-selected {
327
+ background: color-mix(in srgb, var(--studio-accent) 8%, transparent);
328
+ box-shadow: inset 3px 0 0 var(--studio-accent);
329
+ }