@407dev/cms-astro 0.1.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 (212) hide show
  1. package/README.md +69 -0
  2. package/dist/chunk-2TKIQIOE.js +118 -0
  3. package/dist/chunk-2TKIQIOE.js.map +1 -0
  4. package/dist/chunk-53OQ5RXJ.js +912 -0
  5. package/dist/chunk-53OQ5RXJ.js.map +1 -0
  6. package/dist/chunk-56OMNQLH.js +1013 -0
  7. package/dist/chunk-56OMNQLH.js.map +1 -0
  8. package/dist/chunk-5AOOMQ7K.js +1031 -0
  9. package/dist/chunk-5AOOMQ7K.js.map +1 -0
  10. package/dist/chunk-5XRUCFDC.js +743 -0
  11. package/dist/chunk-5XRUCFDC.js.map +1 -0
  12. package/dist/chunk-62ZHCOLZ.js +25 -0
  13. package/dist/chunk-62ZHCOLZ.js.map +1 -0
  14. package/dist/chunk-6AZLRSYA.js +126 -0
  15. package/dist/chunk-6AZLRSYA.js.map +1 -0
  16. package/dist/chunk-6L3ZTCFB.js +14 -0
  17. package/dist/chunk-6L3ZTCFB.js.map +1 -0
  18. package/dist/chunk-6O7ZNNDT.js +697 -0
  19. package/dist/chunk-6O7ZNNDT.js.map +1 -0
  20. package/dist/chunk-6PQIXTMK.js +697 -0
  21. package/dist/chunk-6PQIXTMK.js.map +1 -0
  22. package/dist/chunk-7AW6M7QW.js +1013 -0
  23. package/dist/chunk-7AW6M7QW.js.map +1 -0
  24. package/dist/chunk-7E3XJLKX.js +73 -0
  25. package/dist/chunk-7E3XJLKX.js.map +1 -0
  26. package/dist/chunk-7LM54OTA.js +1031 -0
  27. package/dist/chunk-7LM54OTA.js.map +1 -0
  28. package/dist/chunk-7LMUFCWX.js +126 -0
  29. package/dist/chunk-7LMUFCWX.js.map +1 -0
  30. package/dist/chunk-A3OGL4OX.js +706 -0
  31. package/dist/chunk-A3OGL4OX.js.map +1 -0
  32. package/dist/chunk-AO4UAWOV.js +1030 -0
  33. package/dist/chunk-AO4UAWOV.js.map +1 -0
  34. package/dist/chunk-B4YYLS7Y.js +14 -0
  35. package/dist/chunk-B4YYLS7Y.js.map +1 -0
  36. package/dist/chunk-BDFVGXM2.js +697 -0
  37. package/dist/chunk-BDFVGXM2.js.map +1 -0
  38. package/dist/chunk-CXM7NZVX.js +1031 -0
  39. package/dist/chunk-CXM7NZVX.js.map +1 -0
  40. package/dist/chunk-DMLOBKYE.js +96 -0
  41. package/dist/chunk-DMLOBKYE.js.map +1 -0
  42. package/dist/chunk-DXJSYGS6.js +743 -0
  43. package/dist/chunk-DXJSYGS6.js.map +1 -0
  44. package/dist/chunk-EFUSAQZM.js +72 -0
  45. package/dist/chunk-EFUSAQZM.js.map +1 -0
  46. package/dist/chunk-F7KDGPBN.js +1013 -0
  47. package/dist/chunk-F7KDGPBN.js.map +1 -0
  48. package/dist/chunk-FBSQT45X.js +126 -0
  49. package/dist/chunk-FBSQT45X.js.map +1 -0
  50. package/dist/chunk-FEPDOMVH.js +697 -0
  51. package/dist/chunk-FEPDOMVH.js.map +1 -0
  52. package/dist/chunk-FQDOL2QW.js +25 -0
  53. package/dist/chunk-FQDOL2QW.js.map +1 -0
  54. package/dist/chunk-GB3LGQJM.js +109 -0
  55. package/dist/chunk-GB3LGQJM.js.map +1 -0
  56. package/dist/chunk-HCNP6R3P.js +736 -0
  57. package/dist/chunk-HCNP6R3P.js.map +1 -0
  58. package/dist/chunk-J6WEJDRI.js +743 -0
  59. package/dist/chunk-J6WEJDRI.js.map +1 -0
  60. package/dist/chunk-JHEAPNJ2.js +117 -0
  61. package/dist/chunk-JHEAPNJ2.js.map +1 -0
  62. package/dist/chunk-JOJDJ6GW.js +25 -0
  63. package/dist/chunk-JOJDJ6GW.js.map +1 -0
  64. package/dist/chunk-KTDV6WYB.js +202 -0
  65. package/dist/chunk-KTDV6WYB.js.map +1 -0
  66. package/dist/chunk-KZWJBKPC.js +734 -0
  67. package/dist/chunk-KZWJBKPC.js.map +1 -0
  68. package/dist/chunk-LEAQBGL6.js +109 -0
  69. package/dist/chunk-LEAQBGL6.js.map +1 -0
  70. package/dist/chunk-LGZJL2Q7.js +697 -0
  71. package/dist/chunk-LGZJL2Q7.js.map +1 -0
  72. package/dist/chunk-LQPBU46R.js +109 -0
  73. package/dist/chunk-LQPBU46R.js.map +1 -0
  74. package/dist/chunk-M55NNUTY.js +1013 -0
  75. package/dist/chunk-M55NNUTY.js.map +1 -0
  76. package/dist/chunk-M6NCYCC3.js +1013 -0
  77. package/dist/chunk-M6NCYCC3.js.map +1 -0
  78. package/dist/chunk-MGN7OZAU.js +109 -0
  79. package/dist/chunk-MGN7OZAU.js.map +1 -0
  80. package/dist/chunk-MGYZOX4K.js +1013 -0
  81. package/dist/chunk-MGYZOX4K.js.map +1 -0
  82. package/dist/chunk-MY4IEKJS.js +1031 -0
  83. package/dist/chunk-MY4IEKJS.js.map +1 -0
  84. package/dist/chunk-NCQRGAB4.js +705 -0
  85. package/dist/chunk-NCQRGAB4.js.map +1 -0
  86. package/dist/chunk-NI4NHXI4.js +697 -0
  87. package/dist/chunk-NI4NHXI4.js.map +1 -0
  88. package/dist/chunk-NPI5N7AU.js +14 -0
  89. package/dist/chunk-NPI5N7AU.js.map +1 -0
  90. package/dist/chunk-QN4CPMJF.js +126 -0
  91. package/dist/chunk-QN4CPMJF.js.map +1 -0
  92. package/dist/chunk-QYUVAKMC.js +1013 -0
  93. package/dist/chunk-QYUVAKMC.js.map +1 -0
  94. package/dist/chunk-RAAT6PDT.js +25 -0
  95. package/dist/chunk-RAAT6PDT.js.map +1 -0
  96. package/dist/chunk-RDPO5VPS.js +1013 -0
  97. package/dist/chunk-RDPO5VPS.js.map +1 -0
  98. package/dist/chunk-RQHIW2PF.js +25 -0
  99. package/dist/chunk-RQHIW2PF.js.map +1 -0
  100. package/dist/chunk-RREVHA52.js +722 -0
  101. package/dist/chunk-RREVHA52.js.map +1 -0
  102. package/dist/chunk-S7PT4PZN.js +25 -0
  103. package/dist/chunk-S7PT4PZN.js.map +1 -0
  104. package/dist/chunk-SUXV5M32.js +109 -0
  105. package/dist/chunk-SUXV5M32.js.map +1 -0
  106. package/dist/chunk-SZEORUY6.js +696 -0
  107. package/dist/chunk-SZEORUY6.js.map +1 -0
  108. package/dist/chunk-T7NGGWGY.js +25 -0
  109. package/dist/chunk-T7NGGWGY.js.map +1 -0
  110. package/dist/chunk-UEVWP5VE.js +696 -0
  111. package/dist/chunk-UEVWP5VE.js.map +1 -0
  112. package/dist/chunk-UJNKNP7U.js +748 -0
  113. package/dist/chunk-UJNKNP7U.js.map +1 -0
  114. package/dist/chunk-V4XVFWFI.js +1013 -0
  115. package/dist/chunk-V4XVFWFI.js.map +1 -0
  116. package/dist/chunk-VJU2CIKZ.js +729 -0
  117. package/dist/chunk-VJU2CIKZ.js.map +1 -0
  118. package/dist/chunk-VRQUP5L3.js +202 -0
  119. package/dist/chunk-VRQUP5L3.js.map +1 -0
  120. package/dist/chunk-WBJ5E7CL.js +742 -0
  121. package/dist/chunk-WBJ5E7CL.js.map +1 -0
  122. package/dist/chunk-XJPVYMZM.js +24 -0
  123. package/dist/chunk-XJPVYMZM.js.map +1 -0
  124. package/dist/chunk-Y3Q65C7R.js +14 -0
  125. package/dist/chunk-Y3Q65C7R.js.map +1 -0
  126. package/dist/chunk-YHEGFPTR.js +1030 -0
  127. package/dist/chunk-YHEGFPTR.js.map +1 -0
  128. package/dist/chunk-ZDLBN46C.js +697 -0
  129. package/dist/chunk-ZDLBN46C.js.map +1 -0
  130. package/dist/dev/index.d.ts +122 -0
  131. package/dist/dev/index.js +662 -0
  132. package/dist/dev/index.js.map +1 -0
  133. package/dist/fields/collections.d.ts +18 -0
  134. package/dist/fields/collections.js +37 -0
  135. package/dist/fields/collections.js.map +1 -0
  136. package/dist/index.d.ts +235 -0
  137. package/dist/index.js +956 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/middleware/index.d.ts +8 -0
  140. package/dist/middleware/index.js +13 -0
  141. package/dist/middleware/index.js.map +1 -0
  142. package/dist/preview-BEkLMD6N.d.ts +23 -0
  143. package/dist/preview-D9yewK8x.d.ts +24 -0
  144. package/dist/preview-DJEA4fj7.d.ts +23 -0
  145. package/dist/preview-DeD1Jn7U.d.ts +23 -0
  146. package/dist/toolbar/app.d.ts +28 -0
  147. package/dist/toolbar/app.js +1176 -0
  148. package/dist/toolbar/app.js.map +1 -0
  149. package/dist/types-15jfCQKb.d.ts +141 -0
  150. package/dist/types-BREdL9Gx.d.ts +140 -0
  151. package/dist/types-C6sUZNa2.d.ts +104 -0
  152. package/dist/types-CEYS5Fzc.d.ts +112 -0
  153. package/dist/types-DpeHpobR.d.ts +104 -0
  154. package/dist/types-NaKJe6Pg.d.ts +140 -0
  155. package/package.json +90 -0
  156. package/src/CmsHead.astro +25 -0
  157. package/src/CmsImage.astro +62 -0
  158. package/src/CmsVideo.astro +185 -0
  159. package/src/RichText.astro +32 -0
  160. package/src/client.test.ts +227 -0
  161. package/src/client.ts +164 -0
  162. package/src/dev/config.test.ts +258 -0
  163. package/src/dev/config.ts +319 -0
  164. package/src/dev/index.ts +5 -0
  165. package/src/dev/preview-token.ts +39 -0
  166. package/src/dev/routes.test.ts +354 -0
  167. package/src/dev/routes.ts +245 -0
  168. package/src/dev/token.test.ts +280 -0
  169. package/src/dev/token.ts +201 -0
  170. package/src/dev/verifier.test.ts +63 -0
  171. package/src/dev/verifier.ts +161 -0
  172. package/src/fields/attrs.ts +24 -0
  173. package/src/fields/collection.ts +72 -0
  174. package/src/fields/collections.ts +35 -0
  175. package/src/fields/entryScope.test.ts +62 -0
  176. package/src/fields/entryScope.ts +240 -0
  177. package/src/fields/group.ts +51 -0
  178. package/src/fields/helpers.test.ts +51 -0
  179. package/src/fields/helpers.ts +214 -0
  180. package/src/fields/index.ts +46 -0
  181. package/src/fields/scope.ts +21 -0
  182. package/src/fields/types.ts +119 -0
  183. package/src/head.test.ts +74 -0
  184. package/src/head.ts +123 -0
  185. package/src/image.test.ts +42 -0
  186. package/src/image.ts +64 -0
  187. package/src/index.test.ts +76 -0
  188. package/src/index.ts +13 -0
  189. package/src/integration.ts +218 -0
  190. package/src/jwt.ts +131 -0
  191. package/src/middleware/index.ts +4 -0
  192. package/src/middleware/preview.test.ts +184 -0
  193. package/src/middleware/preview.ts +206 -0
  194. package/src/preview/bridge-script.test.ts +683 -0
  195. package/src/preview/bridge-script.ts +763 -0
  196. package/src/preview/origins.ts +29 -0
  197. package/src/preview.ts +49 -0
  198. package/src/richtext/RichTextNode.astro +130 -0
  199. package/src/richtext/render.ts +248 -0
  200. package/src/richtext.test.ts +139 -0
  201. package/src/runtime/bundle.ts +28 -0
  202. package/src/runtime/store.ts +130 -0
  203. package/src/siteFiles.test.ts +93 -0
  204. package/src/siteFiles.ts +111 -0
  205. package/src/toolbar/app.test.ts +191 -0
  206. package/src/toolbar/app.ts +1091 -0
  207. package/src/toolbar/icon.ts +5 -0
  208. package/src/toolbar/widgets.test.ts +153 -0
  209. package/src/toolbar/widgets.ts +365 -0
  210. package/src/types.test.ts +154 -0
  211. package/src/types.ts +163 -0
  212. package/src/version.ts +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/toolbar/widgets.ts","../../src/toolbar/app.ts"],"names":["walk"],"mappings":"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","file":"app.js","sourcesContent":["import { DEFAULT_EDITOR_ORIGINS } from '../preview/origins';\n\nexport const LIGHTWEIGHT_TYPE_IDS = ['text', 'number', 'toggle', 'select'] as const;\n\nexport type LightweightTypeId = (typeof LIGHTWEIGHT_TYPE_IDS)[number];\n\nexport interface ToolbarWidgetContext {\n key: string;\n typeId?: string;\n value: unknown;\n defaultValue?: unknown;\n constraints?: Record<string, unknown>;\n disabled?: boolean;\n siteId: string;\n routePath: string;\n editorOrigin: string;\n onSave?: (value: unknown) => Promise<{ ok: boolean; error?: string }>;\n}\n\nexport type ToolbarWidgetRenderer = (ctx: ToolbarWidgetContext) => HTMLElement;\n\nexport function isLightweightType(typeId?: string | null): boolean {\n if (!typeId) return false;\n return (LIGHTWEIGHT_TYPE_IDS as readonly string[]).includes(typeId.toLowerCase());\n}\n\n/**\n * Extracts a concise summary string from a ProseMirror RichText object or string.\n */\nexport function extractRichTextSummary(value: unknown): string {\n if (!value) return '(empty)';\n if (typeof value === 'string') {\n const trimmed = value.replace(/<[^>]*>/g, '').trim();\n return trimmed ? (trimmed.length > 50 ? `${trimmed.slice(0, 47)}...` : trimmed) : '(empty)';\n }\n\n if (typeof value === 'object' && value !== null) {\n const doc = value as { type?: string; content?: unknown[] };\n let nodeCount = 0;\n const textRuns: string[] = [];\n\n function walk(node: unknown) {\n if (!node || typeof node !== 'object') return;\n nodeCount++;\n const n = node as { type?: string; text?: string; content?: unknown[] };\n if (typeof n.text === 'string' && n.text.trim()) {\n textRuns.push(n.text.trim());\n }\n if (Array.isArray(n.content)) {\n for (const child of n.content) {\n walk(child);\n }\n }\n }\n\n walk(doc);\n\n const firstRun = textRuns[0] || '';\n const snippet = firstRun.length > 40 ? `${firstRun.slice(0, 37)}...` : firstRun;\n return snippet\n ? `\"${snippet}\" (${nodeCount} ${nodeCount === 1 ? 'node' : 'nodes'})`\n : `(${nodeCount} ${nodeCount === 1 ? 'node' : 'nodes'})`;\n }\n\n return String(value);\n}\n\n/**\n * Extracts a concise summary string from an Image object or string URL.\n */\nexport function extractImageSummary(value: unknown): string {\n if (!value) return '(no image)';\n if (typeof value === 'string') {\n try {\n const u = new URL(value, 'https://placeholder.local');\n const filename = u.pathname.split('/').pop() || value;\n return filename.length > 40 ? `${filename.slice(0, 37)}...` : filename;\n } catch {\n return value.length > 40 ? `${value.slice(0, 37)}...` : value;\n }\n }\n\n if (typeof value === 'object' && value !== null) {\n const img = value as { url?: string; alt?: string; width?: number; height?: number };\n const name = img.url ? img.url.split('/').pop() || 'image' : 'image';\n const dim = img.width && img.height ? ` (${img.width}×${img.height})` : '';\n const alt = img.alt ? ` — \"${img.alt}\"` : '';\n const combined = `${name}${dim}${alt}`;\n return combined.length > 50 ? `${combined.slice(0, 47)}...` : combined;\n }\n\n return String(value);\n}\n\nfunction createTextWidget(ctx: ToolbarWidgetContext): HTMLElement {\n const container = document.createElement('div');\n container.className = 'cms-widget-container';\n\n const form = document.createElement('form');\n form.className = 'cms-widget-form';\n\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'cms-widget-input';\n input.value = ctx.value !== undefined && ctx.value !== null ? String(ctx.value) : '';\n input.placeholder =\n ctx.defaultValue !== undefined && ctx.defaultValue !== null ? String(ctx.defaultValue) : '';\n input.disabled = Boolean(ctx.disabled);\n\n const saveBtn = document.createElement('button');\n saveBtn.type = 'submit';\n saveBtn.className = 'cms-widget-save-btn';\n saveBtn.textContent = 'Save';\n saveBtn.disabled = Boolean(ctx.disabled);\n\n const errorBox = document.createElement('div');\n errorBox.className = 'cms-widget-error';\n errorBox.style.display = 'none';\n\n form.appendChild(input);\n form.appendChild(saveBtn);\n container.appendChild(form);\n container.appendChild(errorBox);\n\n form.addEventListener('submit', async (e) => {\n e.preventDefault();\n if (!ctx.onSave || ctx.disabled) return;\n\n saveBtn.disabled = true;\n saveBtn.textContent = 'Saving...';\n errorBox.style.display = 'none';\n\n try {\n const res = await ctx.onSave(input.value);\n if (!res.ok) {\n errorBox.textContent = res.error || 'Failed to save field';\n errorBox.style.display = 'block';\n }\n } finally {\n saveBtn.disabled = Boolean(ctx.disabled);\n saveBtn.textContent = 'Save';\n }\n });\n\n return container;\n}\n\nfunction createNumberWidget(ctx: ToolbarWidgetContext): HTMLElement {\n const container = document.createElement('div');\n container.className = 'cms-widget-container';\n\n const form = document.createElement('form');\n form.className = 'cms-widget-form';\n\n const input = document.createElement('input');\n input.type = 'number';\n input.className = 'cms-widget-input';\n input.value = ctx.value !== undefined && ctx.value !== null ? String(ctx.value) : '';\n input.placeholder =\n ctx.defaultValue !== undefined && ctx.defaultValue !== null ? String(ctx.defaultValue) : '';\n input.disabled = Boolean(ctx.disabled);\n\n if (ctx.constraints?.min !== undefined) input.min = String(ctx.constraints.min);\n if (ctx.constraints?.max !== undefined) input.max = String(ctx.constraints.max);\n if (ctx.constraints?.step !== undefined) input.step = String(ctx.constraints.step);\n\n const saveBtn = document.createElement('button');\n saveBtn.type = 'submit';\n saveBtn.className = 'cms-widget-save-btn';\n saveBtn.textContent = 'Save';\n saveBtn.disabled = Boolean(ctx.disabled);\n\n const errorBox = document.createElement('div');\n errorBox.className = 'cms-widget-error';\n errorBox.style.display = 'none';\n\n form.appendChild(input);\n form.appendChild(saveBtn);\n container.appendChild(form);\n container.appendChild(errorBox);\n\n form.addEventListener('submit', async (e) => {\n e.preventDefault();\n if (!ctx.onSave || ctx.disabled) return;\n\n saveBtn.disabled = true;\n saveBtn.textContent = 'Saving...';\n errorBox.style.display = 'none';\n\n const numVal = input.value === '' ? null : Number(input.value);\n\n try {\n const res = await ctx.onSave(numVal);\n if (!res.ok) {\n errorBox.textContent = res.error || 'Failed to save field';\n errorBox.style.display = 'block';\n }\n } finally {\n saveBtn.disabled = Boolean(ctx.disabled);\n saveBtn.textContent = 'Save';\n }\n });\n\n return container;\n}\n\nfunction createToggleWidget(ctx: ToolbarWidgetContext): HTMLElement {\n const container = document.createElement('div');\n container.className = 'cms-widget-container cms-widget-toggle-row';\n\n const label = document.createElement('label');\n label.className = 'cms-widget-toggle-label';\n\n const input = document.createElement('input');\n input.type = 'checkbox';\n input.className = 'cms-widget-checkbox';\n input.checked = Boolean(ctx.value ?? ctx.defaultValue ?? false);\n input.disabled = Boolean(ctx.disabled);\n\n const statusText = document.createElement('span');\n statusText.className = 'cms-widget-toggle-text';\n statusText.textContent = input.checked ? 'True' : 'False';\n\n const errorBox = document.createElement('div');\n errorBox.className = 'cms-widget-error';\n errorBox.style.display = 'none';\n\n label.appendChild(input);\n label.appendChild(statusText);\n container.appendChild(label);\n container.appendChild(errorBox);\n\n input.addEventListener('change', async () => {\n statusText.textContent = input.checked ? 'True' : 'False';\n if (!ctx.onSave || ctx.disabled) return;\n\n input.disabled = true;\n errorBox.style.display = 'none';\n\n try {\n const res = await ctx.onSave(input.checked);\n if (!res.ok) {\n errorBox.textContent = res.error || 'Failed to save field';\n errorBox.style.display = 'block';\n input.checked = !input.checked;\n statusText.textContent = input.checked ? 'True' : 'False';\n }\n } finally {\n input.disabled = Boolean(ctx.disabled);\n }\n });\n\n return container;\n}\n\nfunction createSelectWidget(ctx: ToolbarWidgetContext): HTMLElement {\n const container = document.createElement('div');\n container.className = 'cms-widget-container';\n\n const select = document.createElement('select');\n select.className = 'cms-widget-select';\n select.disabled = Boolean(ctx.disabled);\n\n // Optional empty placeholder option\n const emptyOpt = document.createElement('option');\n emptyOpt.value = '';\n emptyOpt.textContent = '(select value)';\n select.appendChild(emptyOpt);\n\n const rawOptions = ctx.constraints?.options;\n if (Array.isArray(rawOptions)) {\n for (const opt of rawOptions) {\n const optEl = document.createElement('option');\n if (typeof opt === 'string') {\n optEl.value = opt;\n optEl.textContent = opt;\n } else if (typeof opt === 'object' && opt !== null) {\n const o = opt as { label?: string; value?: string };\n optEl.value = o.value || '';\n optEl.textContent = o.label || o.value || '';\n }\n select.appendChild(optEl);\n }\n }\n\n const currentVal = ctx.value !== undefined && ctx.value !== null ? String(ctx.value) : '';\n select.value = currentVal;\n\n const errorBox = document.createElement('div');\n errorBox.className = 'cms-widget-error';\n errorBox.style.display = 'none';\n\n container.appendChild(select);\n container.appendChild(errorBox);\n\n select.addEventListener('change', async () => {\n if (!ctx.onSave || ctx.disabled) return;\n\n select.disabled = true;\n errorBox.style.display = 'none';\n\n try {\n const res = await ctx.onSave(select.value);\n if (!res.ok) {\n errorBox.textContent = res.error || 'Failed to save field';\n errorBox.style.display = 'block';\n select.value = currentVal;\n }\n } finally {\n select.disabled = Boolean(ctx.disabled);\n }\n });\n\n return container;\n}\n\nfunction createSummaryWidget(ctx: ToolbarWidgetContext): HTMLElement {\n const container = document.createElement('div');\n container.className = 'cms-widget-summary-row';\n\n const summary = document.createElement('div');\n summary.className = 'cms-widget-summary-text';\n\n const normType = (ctx.typeId || '').toLowerCase();\n if (normType === 'richtext') {\n summary.textContent = extractRichTextSummary(ctx.value ?? ctx.defaultValue);\n } else if (normType === 'image') {\n summary.textContent = extractImageSummary(ctx.value ?? ctx.defaultValue);\n } else {\n const v = ctx.value ?? ctx.defaultValue;\n summary.textContent = v !== undefined && v !== null ? JSON.stringify(v) : '(no value)';\n }\n\n const cleanOrigin = (ctx.editorOrigin || DEFAULT_EDITOR_ORIGINS[0]).replace(/\\/$/, '');\n const editorUrl = `${cleanOrigin}/sites/${encodeURIComponent(ctx.siteId)}/editor?path=${encodeURIComponent(ctx.routePath || '/')}&field=${encodeURIComponent(ctx.key)}`;\n\n const link = document.createElement('a');\n link.href = editorUrl;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n link.className = 'cms-widget-editor-link';\n link.innerHTML = 'Open in Editor ↗';\n\n container.appendChild(summary);\n container.appendChild(link);\n\n return container;\n}\n\nconst widgetRegistry = new Map<string, ToolbarWidgetRenderer>([\n ['text', createTextWidget],\n ['number', createNumberWidget],\n ['toggle', createToggleWidget],\n ['select', createSelectWidget],\n]);\n\nexport function registerToolbarWidget(typeId: string, renderer: ToolbarWidgetRenderer) {\n widgetRegistry.set(typeId.toLowerCase(), renderer);\n}\n\nexport function resolveToolbarWidget(typeId?: string | null): ToolbarWidgetRenderer {\n if (!typeId) return createSummaryWidget;\n const normalized = typeId.toLowerCase();\n return widgetRegistry.get(normalized) || createSummaryWidget;\n}\n","import { chromeTokens } from '@407dev/design-tokens/tokens';\nimport { defineToolbarApp } from 'astro/toolbar';\nimport { DEFAULT_EDITOR_ORIGINS } from '../preview/origins';\nimport { isLightweightType, resolveToolbarWidget } from './widgets';\n\ninterface RenderedFieldInstance {\n key: string;\n kind?: string;\n group?: string;\n entryRef?: {\n collection?: string;\n slug?: string;\n path?: string;\n };\n instances?: number;\n}\n\ninterface FieldDefinitionItem {\n key: string;\n type: string;\n constraints?: Record<string, unknown>;\n default_value?: unknown;\n value?: unknown;\n orphaned_at?: string | null;\n}\n\ninterface DevStatusResponse {\n status: 'ok' | 'read-only' | 'refused' | 'unconfigured';\n siteId: string;\n devSiteId?: string;\n apiUrl: string;\n identity?: { sub: string; email?: string; exp?: number; workspaceRole?: string } | null;\n mismatch?: { source: string; expected: string; actual: string } | null;\n manifest: {\n fresh: boolean;\n localHash: string | null;\n pushedHash: string | null;\n };\n verifier: {\n available: boolean;\n errors: Array<{\n type: string;\n message: string;\n file?: string;\n line?: number;\n column?: number;\n }>;\n warnings: Array<{\n type: string;\n message: string;\n file?: string;\n line?: number;\n column?: number;\n }>;\n };\n editorOrigins?: string[];\n error?: string;\n}\n\ninterface DevBundleResponse {\n bundle?: {\n fields?: Record<string, unknown>;\n site_id?: string;\n } | null;\n fields?: FieldDefinitionItem[];\n}\n\nexport default defineToolbarApp({\n init(canvas, app, server) {\n let isEmbedded = false;\n try {\n isEmbedded = window.self !== window.top || window.parent !== window;\n } catch {\n isEmbedded = true;\n }\n\n if (isEmbedded) {\n const hideToolbar = () => {\n const toolbar = document.querySelector('astro-dev-toolbar');\n if (toolbar instanceof HTMLElement) {\n toolbar.style.setProperty('display', 'none', 'important');\n }\n };\n hideToolbar();\n document.addEventListener('astro:page-load', hideToolbar);\n document.addEventListener('astro:after-swap', hideToolbar);\n }\n\n let devStatus: DevStatusResponse | null = null;\n let fieldDefinitions: Map<string, FieldDefinitionItem> = new Map();\n let bundleFieldsMap: Record<string, unknown> = {};\n let renderedFieldsList: RenderedFieldInstance[] = [];\n\n // Inject Toolbar Styles into Canvas ShadowRoot\n const style = document.createElement('style');\n style.textContent = `\n :host {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n color: ${chromeTokens.foreground};\n font-size: 12px;\n line-height: 1.4;\n }\n * {\n box-sizing: border-box;\n }\n astro-dev-toolbar-window {\n position: fixed !important;\n top: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n left: auto !important;\n transform: none !important;\n width: 440px !important;\n max-width: 100vw !important;\n height: 100vh !important;\n height: 100dvh !important;\n max-height: 100vh !important;\n max-height: 100dvh !important;\n border-radius: 0 !important;\n border: none !important;\n border-left: 1px solid ${chromeTokens.border} !important;\n padding: 0 !important;\n margin: 0 !important;\n background: ${chromeTokens.background} !important;\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.5) !important;\n z-index: 999999999 !important;\n overflow: hidden !important;\n display: flex !important;\n flex-direction: column !important;\n }\n .toolbar-container {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 16px 56px 16px;\n width: 100%;\n height: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n min-height: 0;\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n overscroll-behavior: contain;\n scrollbar-gutter: stable;\n scrollbar-width: thin;\n scrollbar-color: ${chromeTokens.border} transparent;\n background: ${chromeTokens.background};\n border: none;\n border-radius: 0;\n box-shadow: none;\n box-sizing: border-box;\n }\n .toolbar-container > * {\n flex-shrink: 0;\n }\n .toolbar-container::-webkit-scrollbar {\n width: 6px;\n }\n .toolbar-container::-webkit-scrollbar-track {\n background: transparent;\n }\n .toolbar-container::-webkit-scrollbar-thumb {\n background: ${chromeTokens.border};\n border-radius: 3px;\n }\n .toolbar-container::-webkit-scrollbar-thumb:hover {\n background: ${chromeTokens.borderStrong};\n }\n .header-card {\n background: ${chromeTokens.card};\n border: 1px solid ${chromeTokens.border};\n border-radius: 6px;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n flex-shrink: 0;\n }\n .header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n .title-area {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .app-title {\n font-weight: 600;\n font-size: 13px;\n color: ${chromeTokens.cardForeground};\n }\n .meta-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 11px;\n color: ${chromeTokens.mutedForeground};\n }\n .meta-chips {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n }\n .chip {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n }\n .chip-site {\n background: ${chromeTokens.muted};\n color: ${chromeTokens.foregroundSecondary};\n }\n .chip-fresh {\n background: rgba(16, 185, 129, 0.15);\n color: ${chromeTokens.successText};\n border: 1px solid rgba(16, 185, 129, 0.3);\n }\n .chip-unpushed {\n background: rgba(234, 179, 8, 0.15);\n color: ${chromeTokens.warningText};\n border: 1px solid rgba(234, 179, 8, 0.3);\n }\n .toggle-wrap {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n cursor: pointer;\n user-select: none;\n }\n .toggle-input {\n cursor: pointer;\n }\n .banner {\n border-radius: 6px;\n padding: 10px 12px;\n font-size: 11px;\n flex-shrink: 0;\n }\n .banner-error {\n background: rgba(239, 68, 68, 0.15);\n border: 1px solid rgba(239, 68, 68, 0.4);\n color: ${chromeTokens.destructiveText};\n }\n .banner-warning {\n background: rgba(234, 179, 8, 0.15);\n border: 1px solid rgba(234, 179, 8, 0.4);\n color: ${chromeTokens.warningText};\n }\n .banner-info {\n background: rgba(59, 130, 246, 0.15);\n border: 1px solid rgba(59, 130, 246, 0.4);\n color: ${chromeTokens.infoText};\n }\n .section-title {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: ${chromeTokens.foregroundSubtle};\n margin-top: 4px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n }\n .diag-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n flex-shrink: 0;\n }\n .diag-item {\n background: ${chromeTokens.card};\n border: 1px solid ${chromeTokens.border};\n border-radius: 6px;\n padding: 8px 10px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex-shrink: 0;\n }\n .diag-item-error {\n border-left: 3px solid ${chromeTokens.destructive};\n }\n .diag-item-warning {\n border-left: 3px solid ${chromeTokens.warning};\n }\n .diag-loc {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 10px;\n color: ${chromeTokens.infoText};\n text-decoration: none;\n }\n .diag-loc:hover {\n text-decoration: underline;\n }\n .diag-msg {\n color: ${chromeTokens.foregroundSecondary};\n font-size: 11px;\n }\n .group-card {\n background: ${chromeTokens.card};\n border: 1px solid ${chromeTokens.border};\n border-radius: 6px;\n overflow: hidden;\n flex-shrink: 0;\n }\n .group-header {\n background: ${chromeTokens.muted};\n padding: 6px 10px;\n font-weight: 600;\n font-size: 11px;\n color: ${chromeTokens.foregroundSecondary};\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n }\n .field-list {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n }\n .field-row {\n padding: 8px 10px;\n border-top: 1px solid ${chromeTokens.border};\n display: flex;\n flex-direction: column;\n gap: 6px;\n transition: background-color 0.3s ease;\n flex-shrink: 0;\n }\n @keyframes fieldHighlightPulse {\n 0% {\n background: rgba(99, 102, 241, 0.35);\n box-shadow: inset 0 0 0 1px ${chromeTokens.primary};\n }\n 70% {\n background: rgba(99, 102, 241, 0.15);\n box-shadow: inset 0 0 0 1px rgba(99, 102, 241, 0.4);\n }\n 100% {\n background: transparent;\n box-shadow: none;\n }\n }\n .field-row-highlighted {\n animation: fieldHighlightPulse 2s ease-out;\n }\n .field-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 6px;\n }\n .field-key {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 11px;\n font-weight: 500;\n color: ${chromeTokens.foregroundSecondary};\n }\n .badge-group {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n .badge {\n font-size: 9px;\n padding: 1px 4px;\n border-radius: 3px;\n font-weight: 500;\n text-transform: lowercase;\n }\n .badge-no-value {\n background: rgba(239, 68, 68, 0.2);\n color: ${chromeTokens.destructiveText};\n }\n .badge-no-default {\n background: rgba(234, 179, 8, 0.2);\n color: ${chromeTokens.warningText};\n }\n .badge-orphaned {\n background: rgba(168, 85, 247, 0.2);\n color: ${chromeTokens.primaryText};\n }\n .badge-type {\n background: ${chromeTokens.muted};\n color: ${chromeTokens.mutedForeground};\n }\n /* Widget inputs */\n .cms-widget-container {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .cms-widget-form {\n display: flex;\n gap: 6px;\n align-items: center;\n }\n .cms-widget-input {\n flex: 1;\n background: ${chromeTokens.sunken};\n border: 1px solid ${chromeTokens.borderStrong};\n border-radius: 4px;\n color: ${chromeTokens.foreground};\n padding: 4px 8px;\n font-size: 11px;\n outline: none;\n }\n .cms-widget-input:focus {\n border-color: ${chromeTokens.ring};\n }\n .cms-widget-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .cms-widget-save-btn {\n background: ${chromeTokens.primary};\n color: ${chromeTokens.primaryForeground};\n border: none;\n border-radius: 4px;\n padding: 4px 10px;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n }\n .cms-widget-save-btn:hover:not(:disabled) {\n background: color-mix(in srgb, ${chromeTokens.primary} 85%, black);\n }\n .cms-widget-save-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .cms-widget-select {\n width: 100%;\n background: ${chromeTokens.sunken};\n border: 1px solid ${chromeTokens.borderStrong};\n border-radius: 4px;\n color: ${chromeTokens.foreground};\n padding: 4px 8px;\n font-size: 11px;\n outline: none;\n }\n .cms-widget-toggle-row {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .cms-widget-toggle-label {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n }\n .cms-widget-checkbox {\n cursor: pointer;\n }\n .cms-widget-toggle-text {\n font-size: 11px;\n color: ${chromeTokens.foregroundSecondary};\n }\n .cms-widget-summary-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n background: ${chromeTokens.sunken};\n border: 1px solid ${chromeTokens.border};\n border-radius: 4px;\n padding: 4px 8px;\n }\n .cms-widget-summary-text {\n font-size: 11px;\n color: ${chromeTokens.mutedForeground};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 260px;\n }\n .cms-widget-editor-link {\n font-size: 11px;\n color: ${chromeTokens.primaryText};\n text-decoration: none;\n white-space: nowrap;\n }\n .cms-widget-editor-link:hover {\n text-decoration: underline;\n }\n .cms-widget-error {\n font-size: 10px;\n color: ${chromeTokens.destructiveText};\n margin-top: 2px;\n }\n .empty-notice {\n font-size: 11px;\n color: ${chromeTokens.foregroundSubtle};\n font-style: italic;\n padding: 8px 0;\n flex-shrink: 0;\n }\n `;\n\n canvas.appendChild(style);\n\n const windowEl = document.createElement('astro-dev-toolbar-window');\n windowEl.style.position = 'fixed';\n windowEl.style.top = '0';\n windowEl.style.right = '0';\n windowEl.style.bottom = '0';\n windowEl.style.left = 'auto';\n windowEl.style.transform = 'none';\n windowEl.style.width = '440px';\n windowEl.style.maxWidth = '100vw';\n windowEl.style.height = '100vh';\n windowEl.style.maxHeight = '100vh';\n windowEl.style.borderRadius = '0';\n windowEl.style.border = 'none';\n windowEl.style.borderLeft = `1px solid ${chromeTokens.border}`;\n windowEl.style.padding = '0';\n windowEl.style.margin = '0';\n windowEl.style.background = chromeTokens.background;\n windowEl.style.boxShadow = '-4px 0 24px rgba(0, 0, 0, 0.5)';\n windowEl.style.zIndex = '999999999';\n windowEl.style.display = 'flex';\n windowEl.style.flexDirection = 'column';\n windowEl.style.overflow = 'hidden';\n\n const container = document.createElement('div');\n container.className = 'toolbar-container';\n container.style.height = '100%';\n container.style.minHeight = '0';\n container.style.flex = '1 1 auto';\n container.style.overflowY = 'auto';\n container.style.boxSizing = 'border-box';\n windowEl.appendChild(container);\n canvas.appendChild(windowEl);\n\n function patchDomElement(key: string, kind: string, value: unknown, entryRef?: unknown) {\n let selector: string;\n const eRef = entryRef as { collection?: string; slug?: string; path?: string } | undefined;\n const fPath = eRef?.path || key;\n\n if (eRef && (eRef.collection || eRef.slug)) {\n const colAttr = eRef.collection ? `[data-cms-collection=\"${eRef.collection}\"]` : '';\n const entryAttr = eRef.slug ? `[data-cms-entry=\"${eRef.slug}\"]` : '';\n const scopeSel = `${colAttr}${entryAttr}`;\n selector = `${scopeSel} [data-cms-entry-field=\"${fPath}\"], ${scopeSel}[data-cms-entry-field=\"${fPath}\"]`;\n } else if (eRef) {\n selector = `[data-cms-entry-field=\"${fPath}\"]`;\n } else {\n selector = `[data-cms-field=\"${key}\"]`;\n }\n\n const els = document.querySelectorAll(selector);\n for (let i = 0; i < els.length; i++) {\n const el = els[i];\n if (kind === 'image' || el.tagName.toLowerCase() === 'img') {\n if (value && typeof value === 'object') {\n const imgVal = value as { url?: string; alt?: string };\n if (imgVal.url) el.setAttribute('src', imgVal.url);\n if (imgVal.alt !== undefined) el.setAttribute('alt', imgVal.alt);\n } else if (typeof value === 'string') {\n el.setAttribute('src', value);\n }\n } else {\n el.textContent = value !== null && value !== undefined ? String(value) : '';\n }\n }\n }\n\n async function handleSaveValue(\n key: string,\n val: unknown,\n kind: string,\n entryRef?: unknown,\n ): Promise<{ ok: boolean; error?: string }> {\n try {\n const res = await fetch('/_cms/dev/value', {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ key, value: val }),\n });\n\n if (res.ok) {\n // Update local bundle store representation\n bundleFieldsMap[key] = val;\n const def = fieldDefinitions.get(key);\n if (def) {\n def.value = val;\n }\n\n // Patch DOM in place\n patchDomElement(key, kind, val, entryRef);\n\n // Rescan fields\n const w = window as unknown as { __CMS_RESCAN__?: () => void };\n w.__CMS_RESCAN__?.();\n\n render();\n return { ok: true };\n }\n\n const data = (await res.json().catch(() => ({}))) as {\n error?: string;\n errors?: Array<{ message?: string }>;\n };\n const errorMsg =\n data.errors?.map((e) => e.message).join(', ') ||\n data.error ||\n `Save failed (HTTP ${res.status})`;\n return { ok: false, error: errorMsg };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { ok: false, error: msg };\n }\n }\n\n function render() {\n container.innerHTML = '';\n\n if (!devStatus) {\n const loadingDiv = document.createElement('div');\n loadingDiv.className = 'empty-notice';\n loadingDiv.textContent = 'Loading CMS dev status...';\n container.appendChild(loadingDiv);\n return;\n }\n\n const isReadOnly = devStatus.status === 'read-only';\n const isRefused = devStatus.status === 'refused';\n const isUnconfigured = devStatus.status === 'unconfigured';\n const disabled = isReadOnly || isRefused || isUnconfigured;\n\n // 1. Header Card\n const headerCard = document.createElement('div');\n headerCard.className = 'header-card';\n\n const headerTop = document.createElement('div');\n headerTop.className = 'header-top';\n\n const titleArea = document.createElement('div');\n titleArea.className = 'title-area';\n const titleSpan = document.createElement('span');\n titleSpan.className = 'app-title';\n titleSpan.textContent = 'CMS Content';\n titleArea.appendChild(titleSpan);\n\n // Highlight toggle\n const toggleWrap = document.createElement('label');\n toggleWrap.className = 'toggle-wrap';\n const toggleCheckbox = document.createElement('input');\n toggleCheckbox.type = 'checkbox';\n toggleCheckbox.className = 'toggle-input';\n toggleCheckbox.checked = document.documentElement.hasAttribute('data-cms-edit-mode');\n toggleCheckbox.addEventListener('change', () => {\n if (toggleCheckbox.checked) {\n document.documentElement.setAttribute('data-cms-edit-mode', 'true');\n } else {\n document.documentElement.removeAttribute('data-cms-edit-mode');\n }\n });\n const toggleLabel = document.createElement('span');\n toggleLabel.textContent = 'Outlines';\n toggleWrap.appendChild(toggleCheckbox);\n toggleWrap.appendChild(toggleLabel);\n\n headerTop.appendChild(titleArea);\n headerTop.appendChild(toggleWrap);\n headerCard.appendChild(headerTop);\n\n // Meta chips\n const metaRow = document.createElement('div');\n metaRow.className = 'meta-row';\n\n const chips = document.createElement('div');\n chips.className = 'meta-chips';\n\n const siteChip = document.createElement('span');\n siteChip.className = 'chip chip-site';\n siteChip.textContent = devStatus.siteId || 'No Site';\n chips.appendChild(siteChip);\n\n if (devStatus.identity?.email || devStatus.identity?.sub) {\n const userChip = document.createElement('span');\n userChip.className = 'chip chip-site';\n userChip.textContent = devStatus.identity.email || devStatus.identity.sub;\n chips.appendChild(userChip);\n }\n\n if (devStatus.verifier?.available) {\n const freshChip = document.createElement('span');\n if (devStatus.manifest?.fresh) {\n freshChip.className = 'chip chip-fresh';\n freshChip.textContent = '● Fresh';\n } else {\n freshChip.className = 'chip chip-unpushed';\n freshChip.textContent = '▲ Unpushed';\n }\n chips.appendChild(freshChip);\n }\n\n metaRow.appendChild(chips);\n headerCard.appendChild(metaRow);\n container.appendChild(headerCard);\n\n // 2. Alert Banners\n if (isReadOnly && devStatus.mismatch) {\n const banner = document.createElement('div');\n banner.className = 'banner banner-error';\n banner.textContent = `Toolbar is READ-ONLY: ${devStatus.mismatch.source} (${devStatus.mismatch.actual}) ≠ site rendered by this dev server (${devStatus.mismatch.expected})`;\n container.appendChild(banner);\n } else if (isRefused) {\n const banner = document.createElement('div');\n banner.className = 'banner banner-error';\n banner.textContent = `CMS dev routes disabled: ${devStatus.error || 'Access refused'}`;\n container.appendChild(banner);\n } else if (isUnconfigured) {\n const banner = document.createElement('div');\n banner.className = 'banner banner-info';\n banner.textContent =\n devStatus.error || 'Not logged in. Run `cms login` to enable dev-time editing.';\n container.appendChild(banner);\n }\n\n // 3. Diagnostics Section\n const errors = devStatus.verifier?.errors || [];\n const warnings = devStatus.verifier?.warnings || [];\n const allDiags = [...errors, ...warnings];\n\n if (allDiags.length > 0) {\n const diagSec = document.createElement('div');\n diagSec.className = 'section-title';\n diagSec.textContent = `Diagnostics (${allDiags.length})`;\n container.appendChild(diagSec);\n\n const diagList = document.createElement('div');\n diagList.className = 'diag-list';\n\n for (const diag of allDiags) {\n const item = document.createElement('div');\n item.className = `diag-item ${diag.type === 'error' ? 'diag-item-error' : 'diag-item-warning'}`;\n\n if (diag.file) {\n const locLink = document.createElement('a');\n locLink.className = 'diag-loc';\n locLink.href = `vscode://file/${diag.file}:${diag.line || 1}:${diag.column || 1}`;\n locLink.textContent = `${diag.file}:${diag.line || 1}:${diag.column || 1}`;\n item.appendChild(locLink);\n }\n\n const msg = document.createElement('div');\n msg.className = 'diag-msg';\n msg.textContent = diag.message;\n item.appendChild(msg);\n\n diagList.appendChild(item);\n }\n\n container.appendChild(diagList);\n }\n\n // 4. Current Page Rendered Fields List\n const fieldsSecTitle = document.createElement('div');\n fieldsSecTitle.className = 'section-title';\n fieldsSecTitle.textContent = `Rendered Fields (${renderedFieldsList.length})`;\n container.appendChild(fieldsSecTitle);\n\n if (renderedFieldsList.length === 0) {\n const empty = document.createElement('div');\n empty.className = 'empty-notice';\n empty.textContent = 'No CMS fields detected on current page.';\n container.appendChild(empty);\n } else {\n // Group rendered fields by data-cms-group, or scope prefix, or \"Ungrouped\"\n const groupsMap = new Map<string, RenderedFieldInstance[]>();\n\n for (const field of renderedFieldsList) {\n let groupName = field.group;\n if (!groupName) {\n const parts = field.key.split('.');\n if (parts.length > 1) {\n groupName = parts.slice(0, -1).join('.');\n } else {\n groupName = 'Ungrouped';\n }\n }\n if (!groupsMap.has(groupName)) {\n groupsMap.set(groupName, []);\n }\n groupsMap.get(groupName)?.push(field);\n }\n\n const currentRoute = window.location.pathname || '/';\n const editorOrigin = devStatus.editorOrigins?.[0] || DEFAULT_EDITOR_ORIGINS[0];\n\n for (const [groupName, groupFields] of groupsMap.entries()) {\n const groupCard = document.createElement('div');\n groupCard.className = 'group-card';\n\n const groupHeader = document.createElement('div');\n groupHeader.className = 'group-header';\n groupHeader.textContent = groupName;\n groupCard.appendChild(groupHeader);\n\n const fieldList = document.createElement('div');\n fieldList.className = 'field-list';\n\n for (const field of groupFields) {\n const def = fieldDefinitions.get(field.key);\n const rawVal =\n bundleFieldsMap[field.key] !== undefined\n ? bundleFieldsMap[field.key]\n : def?.value !== undefined\n ? def.value\n : def?.default_value;\n\n const typeId = def?.type || field.kind || 'text';\n const isOrphaned = Boolean(def?.orphaned_at);\n const hasNoValue = rawVal === undefined || rawVal === null || rawVal === '';\n const hasNoDefault = def?.default_value === undefined || def?.default_value === null;\n\n const row = document.createElement('div');\n row.className = 'field-row';\n row.dataset.fieldKey = field.key;\n row.setAttribute('data-field-key', field.key);\n\n const meta = document.createElement('div');\n meta.className = 'field-meta';\n\n const keySpan = document.createElement('span');\n keySpan.className = 'field-key';\n keySpan.textContent = field.key;\n meta.appendChild(keySpan);\n\n const badgeGroup = document.createElement('div');\n badgeGroup.className = 'badge-group';\n\n if (isOrphaned) {\n const b = document.createElement('span');\n b.className = 'badge badge-orphaned';\n b.textContent = 'orphaned';\n badgeGroup.appendChild(b);\n }\n if (hasNoValue) {\n const b = document.createElement('span');\n b.className = 'badge badge-no-value';\n b.textContent = 'no value';\n badgeGroup.appendChild(b);\n }\n if (hasNoDefault) {\n const b = document.createElement('span');\n b.className = 'badge badge-no-default';\n b.textContent = 'no default';\n badgeGroup.appendChild(b);\n }\n\n const typeBadge = document.createElement('span');\n typeBadge.className = 'badge badge-type';\n typeBadge.textContent = typeId;\n badgeGroup.appendChild(typeBadge);\n\n meta.appendChild(badgeGroup);\n row.appendChild(meta);\n\n // Widget resolution\n const renderer = resolveToolbarWidget(typeId);\n const widgetEl = renderer({\n key: field.key,\n typeId,\n value: rawVal,\n defaultValue: def?.default_value,\n constraints: def?.constraints,\n disabled,\n siteId: devStatus.siteId,\n routePath: currentRoute,\n editorOrigin,\n onSave: async (v) =>\n handleSaveValue(field.key, v, field.kind || typeId, field.entryRef),\n });\n\n row.appendChild(widgetEl);\n fieldList.appendChild(row);\n }\n\n groupCard.appendChild(fieldList);\n container.appendChild(groupCard);\n }\n }\n\n // 5. Orphaned Fields Section\n const renderedKeys = new Set(renderedFieldsList.map((f) => f.key));\n const orphanedDefs: FieldDefinitionItem[] = [];\n for (const def of fieldDefinitions.values()) {\n if (def.orphaned_at || !renderedKeys.has(def.key)) {\n orphanedDefs.push(def);\n }\n }\n\n if (orphanedDefs.length > 0) {\n const orphanTitle = document.createElement('div');\n orphanTitle.className = 'section-title';\n orphanTitle.textContent = `Unrendered / Orphaned Fields (${orphanedDefs.length})`;\n container.appendChild(orphanTitle);\n\n const orphanCard = document.createElement('div');\n orphanCard.className = 'group-card';\n const orphanList = document.createElement('div');\n orphanList.className = 'field-list';\n\n for (const o of orphanedDefs) {\n const row = document.createElement('div');\n row.className = 'field-row';\n row.dataset.fieldKey = o.key;\n row.setAttribute('data-field-key', o.key);\n\n const meta = document.createElement('div');\n meta.className = 'field-meta';\n\n const keySpan = document.createElement('span');\n keySpan.className = 'field-key';\n keySpan.textContent = o.key;\n meta.appendChild(keySpan);\n\n const badgeGroup = document.createElement('div');\n badgeGroup.className = 'badge-group';\n if (o.orphaned_at) {\n const b = document.createElement('span');\n b.className = 'badge badge-orphaned';\n b.textContent = 'orphaned';\n badgeGroup.appendChild(b);\n } else {\n const b = document.createElement('span');\n b.className = 'badge badge-type';\n b.textContent = 'unrendered';\n badgeGroup.appendChild(b);\n }\n meta.appendChild(badgeGroup);\n row.appendChild(meta);\n orphanList.appendChild(row);\n }\n\n orphanCard.appendChild(orphanList);\n container.appendChild(orphanCard);\n }\n }\n\n async function loadData() {\n try {\n const statusRes = await fetch('/_cms/dev/status');\n if (statusRes.ok) {\n devStatus = (await statusRes.json()) as DevStatusResponse;\n } else if (statusRes.status === 503) {\n const errData = (await statusRes.json().catch(() => ({}))) as {\n error?: string;\n status?: 'refused' | 'unconfigured';\n };\n devStatus = {\n status: errData.status || 'refused',\n siteId: '',\n apiUrl: '',\n manifest: { fresh: true, localHash: null, pushedHash: null },\n verifier: { available: false, errors: [], warnings: [] },\n error: errData.error,\n };\n }\n\n // Toggle app notification state based on diagnostics\n if (devStatus?.verifier?.errors && devStatus.verifier.errors.length > 0) {\n app.toggleNotification({ state: true, level: 'error' });\n } else if (devStatus?.verifier?.warnings && devStatus.verifier.warnings.length > 0) {\n app.toggleNotification({ state: true, level: 'warning' });\n } else {\n app.toggleNotification({ state: false });\n }\n\n if (devStatus && devStatus.status !== 'refused' && devStatus.status !== 'unconfigured') {\n const bundleRes = await fetch('/_cms/dev/bundle');\n if (bundleRes.ok) {\n const bundleData = (await bundleRes.json()) as DevBundleResponse;\n if (bundleData.bundle?.fields) {\n bundleFieldsMap = bundleData.bundle.fields;\n }\n if (Array.isArray(bundleData.fields)) {\n fieldDefinitions = new Map(bundleData.fields.map((f) => [f.key, f]));\n }\n }\n }\n } catch (_err) {\n // Fetch failed\n }\n\n // Read rendered fields from window\n const winFields = (window as unknown as { __CMS_FIELDS__?: RenderedFieldInstance[] })\n .__CMS_FIELDS__;\n if (Array.isArray(winFields)) {\n renderedFieldsList = winFields;\n }\n\n render();\n }\n\n // Server HMR diagnostic events\n server.on('cms:diagnostics', (data: DevStatusResponse['verifier'] & { fresh?: boolean }) => {\n if (devStatus) {\n devStatus.verifier = {\n available: Boolean(data.available),\n errors: data.errors || [],\n warnings: data.warnings || [],\n };\n if (data.fresh !== undefined) {\n devStatus.manifest.fresh = data.fresh;\n }\n\n if (data.errors && data.errors.length > 0) {\n app.toggleNotification({ state: true, level: 'error' });\n } else if (data.warnings && data.warnings.length > 0) {\n app.toggleNotification({ state: true, level: 'warning' });\n } else {\n app.toggleNotification({ state: false });\n }\n\n render();\n }\n });\n\n function escapeCssKey(str: string): string {\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\n return CSS.escape(str);\n }\n return str.replace(/([!\"#$%&'()*+,.\\/:;<=>?@[\\\\\\]^`{|}~])/g, '\\\\$1');\n }\n\n function focusFieldRow(key: string) {\n if (!key) return;\n const targetRow = container.querySelector(\n `[data-field-key=\"${escapeCssKey(key)}\"]`,\n ) as HTMLElement | null;\n if (targetRow) {\n targetRow.scrollIntoView({ behavior: 'smooth', block: 'center' });\n targetRow.classList.remove('field-row-highlighted');\n // Force layout reflow to restart CSS animation\n void targetRow.offsetWidth;\n targetRow.classList.add('field-row-highlighted');\n\n const inputEl = targetRow.querySelector(\n 'input:not([type=\"checkbox\"]), select, textarea, button, a',\n ) as HTMLInputElement | null;\n if (inputEl) {\n setTimeout(() => {\n inputEl.focus();\n if (typeof inputEl.select === 'function') {\n inputEl.select();\n }\n }, 150);\n }\n }\n }\n\n // Document events from bridge-script\n document.addEventListener('cms:fields-updated', ((e: CustomEvent<RenderedFieldInstance[]>) => {\n if (Array.isArray(e.detail)) {\n renderedFieldsList = e.detail;\n render();\n }\n }) as EventListener);\n\n document.addEventListener('cms:field-selected', ((e: CustomEvent<{ key?: string }>) => {\n if (e.detail?.key) {\n focusFieldRow(e.detail.key);\n }\n }) as EventListener);\n\n document.addEventListener('astro:page-load', () => {\n loadData();\n });\n\n // Initial load\n loadData();\n },\n});\n"]}
@@ -0,0 +1,141 @@
1
+ import { CmsAsset } from '@407dev/blocks';
2
+
3
+ interface RouteSeo {
4
+ title?: string;
5
+ description?: string;
6
+ canonical?: string;
7
+ og_image?: string | CmsAsset;
8
+ favicon?: string | CmsAsset;
9
+ og_title?: string;
10
+ og_description?: string;
11
+ twitter_card?: 'summary' | 'summary_large_image' | string;
12
+ noindex?: boolean;
13
+ sitemap_changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
14
+ sitemap_priority?: number;
15
+ [key: string]: unknown;
16
+ }
17
+ interface CmsRedirect {
18
+ id?: string;
19
+ from_path: string;
20
+ to_path: string;
21
+ status_code: 301 | 302 | 307 | 308 | number;
22
+ enabled?: boolean;
23
+ order_key?: string;
24
+ }
25
+ interface CmsSiteConfig {
26
+ site_id?: string;
27
+ redirects: CmsRedirect[];
28
+ robots: {
29
+ rules?: Array<{
30
+ user_agent?: string;
31
+ allow?: string[];
32
+ disallow?: string[];
33
+ }>;
34
+ sitemap?: string | boolean;
35
+ raw?: string;
36
+ [key: string]: unknown;
37
+ };
38
+ default_seo: RouteSeo;
39
+ sitemap: {
40
+ enabled?: boolean;
41
+ exclude?: string[];
42
+ [key: string]: unknown;
43
+ };
44
+ not_found_path?: string | null;
45
+ version_number?: number;
46
+ published_at?: string;
47
+ }
48
+ interface ContentBundle {
49
+ bundleVersion: 1;
50
+ site_id: string;
51
+ fields: Record<string, unknown>;
52
+ collections: Record<string, {
53
+ presentation: 'visual' | 'form';
54
+ orderable: boolean;
55
+ route_pattern?: string | null;
56
+ schema_version: number;
57
+ title_field?: string | null;
58
+ list_columns?: string[] | null;
59
+ body_field?: string | null;
60
+ }>;
61
+ entries: Record<string, Array<{
62
+ slug: string;
63
+ content: Record<string, unknown>;
64
+ position?: string | null;
65
+ status: 'draft' | 'published' | 'scheduled';
66
+ published_at?: string | null;
67
+ }>>;
68
+ routes: Array<{
69
+ path?: string;
70
+ pattern?: string;
71
+ kind: 'static' | 'collection';
72
+ collection?: string | null;
73
+ sourcePath?: string;
74
+ }>;
75
+ settings: {
76
+ robots?: Record<string, unknown>;
77
+ default_seo?: RouteSeo;
78
+ sitemap?: Record<string, unknown>;
79
+ not_found_path?: string | null;
80
+ };
81
+ redirects: Array<{
82
+ id: string;
83
+ from_path: string;
84
+ to_path: string;
85
+ status_code: number;
86
+ enabled: boolean;
87
+ order_key: string;
88
+ }>;
89
+ }
90
+ interface CmsClientConfig {
91
+ siteId: string;
92
+ contentUrl: string;
93
+ previewSecret?: string;
94
+ fetch?: typeof fetch;
95
+ }
96
+ interface GetBundleOptions {
97
+ previewToken?: string | null;
98
+ }
99
+ interface CmsClient {
100
+ readonly siteId: string;
101
+ readonly contentUrl: string;
102
+ readonly previewSecret?: string;
103
+ getBundle(options?: GetBundleOptions): Promise<ContentBundle>;
104
+ getFields(options?: GetBundleOptions): Promise<Record<string, unknown>>;
105
+ getField<T = unknown>(key: string, options?: GetBundleOptions): Promise<T | null>;
106
+ getCollections(options?: GetBundleOptions): Promise<ContentBundle['collections']>;
107
+ getEntries(collectionKey: string, options?: GetBundleOptions): Promise<ContentBundle['entries'][string]>;
108
+ getEntry(collectionKey: string, slug: string, options?: GetBundleOptions): Promise<ContentBundle['entries'][string][number] | null>;
109
+ getRoutes(options?: GetBundleOptions): Promise<ContentBundle['routes']>;
110
+ getSiteConfig(options?: GetBundleOptions): Promise<CmsSiteConfig>;
111
+ clearCache(): void;
112
+ }
113
+ interface PreviewTokenPayload {
114
+ site_id: string;
115
+ sub?: string;
116
+ iat?: number;
117
+ exp?: number;
118
+ [key: string]: unknown;
119
+ }
120
+ interface VerifyTokenResult {
121
+ valid: boolean;
122
+ payload?: PreviewTokenPayload;
123
+ error?: string;
124
+ }
125
+ interface CmsIntegrationOptions {
126
+ siteId?: string;
127
+ apiUrl?: string;
128
+ contentUrl?: string;
129
+ previewSecret?: string;
130
+ previewEntrypoint?: string;
131
+ injectPreviewRoute?: boolean;
132
+ client?: CmsClient;
133
+ emitRedirects?: boolean;
134
+ emitRobots?: boolean;
135
+ emitSitemap?: boolean;
136
+ siteUrl?: string;
137
+ editorOrigins?: string[];
138
+ }
139
+ type CmsAstroOptions = CmsIntegrationOptions;
140
+
141
+ export type { CmsClient as C, GetBundleOptions as G, PreviewTokenPayload as P, RouteSeo as R, VerifyTokenResult as V, CmsClientConfig as a, CmsSiteConfig as b, CmsAstroOptions as c, ContentBundle as d, CmsRedirect as e, CmsIntegrationOptions as f };
@@ -0,0 +1,140 @@
1
+ import { CmsAsset } from '@407dev/blocks';
2
+
3
+ interface RouteSeo {
4
+ title?: string;
5
+ description?: string;
6
+ canonical?: string;
7
+ og_image?: string | CmsAsset;
8
+ og_title?: string;
9
+ og_description?: string;
10
+ twitter_card?: 'summary' | 'summary_large_image' | string;
11
+ noindex?: boolean;
12
+ sitemap_changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
13
+ sitemap_priority?: number;
14
+ [key: string]: unknown;
15
+ }
16
+ interface CmsRedirect {
17
+ id?: string;
18
+ from_path: string;
19
+ to_path: string;
20
+ status_code: 301 | 302 | 307 | 308 | number;
21
+ enabled?: boolean;
22
+ order_key?: string;
23
+ }
24
+ interface CmsSiteConfig {
25
+ site_id?: string;
26
+ redirects: CmsRedirect[];
27
+ robots: {
28
+ rules?: Array<{
29
+ user_agent?: string;
30
+ allow?: string[];
31
+ disallow?: string[];
32
+ }>;
33
+ sitemap?: string | boolean;
34
+ raw?: string;
35
+ [key: string]: unknown;
36
+ };
37
+ default_seo: RouteSeo;
38
+ sitemap: {
39
+ enabled?: boolean;
40
+ exclude?: string[];
41
+ [key: string]: unknown;
42
+ };
43
+ not_found_path?: string | null;
44
+ version_number?: number;
45
+ published_at?: string;
46
+ }
47
+ interface ContentBundle {
48
+ bundleVersion: 1;
49
+ site_id: string;
50
+ fields: Record<string, unknown>;
51
+ collections: Record<string, {
52
+ presentation: 'visual' | 'form';
53
+ orderable: boolean;
54
+ route_pattern?: string | null;
55
+ schema_version: number;
56
+ title_field?: string | null;
57
+ list_columns?: string[] | null;
58
+ body_field?: string | null;
59
+ }>;
60
+ entries: Record<string, Array<{
61
+ slug: string;
62
+ content: Record<string, unknown>;
63
+ position?: string | null;
64
+ status: 'draft' | 'published';
65
+ published_at?: string | null;
66
+ }>>;
67
+ routes: Array<{
68
+ path?: string;
69
+ pattern?: string;
70
+ kind: 'static' | 'collection';
71
+ collection?: string | null;
72
+ sourcePath?: string;
73
+ }>;
74
+ settings: {
75
+ robots?: Record<string, unknown>;
76
+ default_seo?: RouteSeo;
77
+ sitemap?: Record<string, unknown>;
78
+ not_found_path?: string | null;
79
+ };
80
+ redirects: Array<{
81
+ id: string;
82
+ from_path: string;
83
+ to_path: string;
84
+ status_code: number;
85
+ enabled: boolean;
86
+ order_key: string;
87
+ }>;
88
+ }
89
+ interface CmsClientConfig {
90
+ siteId: string;
91
+ contentUrl: string;
92
+ previewSecret?: string;
93
+ fetch?: typeof fetch;
94
+ }
95
+ interface GetBundleOptions {
96
+ previewToken?: string | null;
97
+ }
98
+ interface CmsClient {
99
+ readonly siteId: string;
100
+ readonly contentUrl: string;
101
+ readonly previewSecret?: string;
102
+ getBundle(options?: GetBundleOptions): Promise<ContentBundle>;
103
+ getFields(options?: GetBundleOptions): Promise<Record<string, unknown>>;
104
+ getField<T = unknown>(key: string, options?: GetBundleOptions): Promise<T | null>;
105
+ getCollections(options?: GetBundleOptions): Promise<ContentBundle['collections']>;
106
+ getEntries(collectionKey: string, options?: GetBundleOptions): Promise<ContentBundle['entries'][string]>;
107
+ getEntry(collectionKey: string, slug: string, options?: GetBundleOptions): Promise<ContentBundle['entries'][string][number] | null>;
108
+ getRoutes(options?: GetBundleOptions): Promise<ContentBundle['routes']>;
109
+ getSiteConfig(options?: GetBundleOptions): Promise<CmsSiteConfig>;
110
+ clearCache(): void;
111
+ }
112
+ interface PreviewTokenPayload {
113
+ site_id: string;
114
+ sub?: string;
115
+ iat?: number;
116
+ exp?: number;
117
+ [key: string]: unknown;
118
+ }
119
+ interface VerifyTokenResult {
120
+ valid: boolean;
121
+ payload?: PreviewTokenPayload;
122
+ error?: string;
123
+ }
124
+ interface CmsIntegrationOptions {
125
+ siteId?: string;
126
+ apiUrl?: string;
127
+ contentUrl?: string;
128
+ previewSecret?: string;
129
+ previewEntrypoint?: string;
130
+ injectPreviewRoute?: boolean;
131
+ client?: CmsClient;
132
+ emitRedirects?: boolean;
133
+ emitRobots?: boolean;
134
+ emitSitemap?: boolean;
135
+ siteUrl?: string;
136
+ editorOrigins?: string[];
137
+ }
138
+ type CmsAstroOptions = CmsIntegrationOptions;
139
+
140
+ export type { CmsClient as C, GetBundleOptions as G, PreviewTokenPayload as P, RouteSeo as R, VerifyTokenResult as V, CmsClientConfig as a, CmsSiteConfig as b, CmsAstroOptions as c, ContentBundle as d, CmsRedirect as e, CmsIntegrationOptions as f };
@@ -0,0 +1,104 @@
1
+ import { z, CmsAsset } from '@407dev/blocks';
2
+
3
+ interface FieldReadOptions<T = unknown> {
4
+ defaultValue?: T;
5
+ }
6
+ interface FieldComponentProps<T = unknown> {
7
+ k?: string;
8
+ key?: string;
9
+ defaultValue?: T;
10
+ as?: string;
11
+ tag?: string;
12
+ class?: string;
13
+ [key: string]: unknown;
14
+ }
15
+ interface DualCallableHelper<TValue = unknown, TDefault = TValue> {
16
+ /** Synchronous read call: f.text('home.hero.heading', { defaultValue: '...' }) or group.field() */
17
+ (key?: string, options?: FieldReadOptions<TDefault>): TValue;
18
+ (options?: FieldReadOptions<TDefault>): TValue;
19
+ /** JSX / Astro template component call: <f.text k="home.hero.heading" /> */
20
+ (props?: FieldComponentProps<TDefault>): unknown;
21
+ /** Astro component factory call: ($$result, $$props, $$slots) */
22
+ (result: unknown, props: FieldComponentProps<TDefault>, slots?: unknown): unknown;
23
+ isAstroComponentFactory: true;
24
+ typeId: string;
25
+ publicName: string;
26
+ prefix?: string;
27
+ defaultKey?: string;
28
+ }
29
+ interface FieldHelpersMap {
30
+ text: DualCallableHelper<string>;
31
+ number: DualCallableHelper<number>;
32
+ toggle: DualCallableHelper<boolean>;
33
+ select: DualCallableHelper<string>;
34
+ img: DualCallableHelper<CmsAsset | string>;
35
+ image: DualCallableHelper<CmsAsset | string>;
36
+ vid: DualCallableHelper<CmsAsset | string>;
37
+ video: DualCallableHelper<CmsAsset | string>;
38
+ richText: DualCallableHelper<unknown>;
39
+ richtext: DualCallableHelper<unknown>;
40
+ [key: string]: any;
41
+ }
42
+ type FieldScope = FieldHelpersMap & {
43
+ (key: string): string;
44
+ key(key: string): string;
45
+ scope(subPrefix: string): FieldScope;
46
+ readonly prefix: string;
47
+ };
48
+ interface GroupAccessor<TShape = Record<string, unknown>> {
49
+ attrs(): {
50
+ 'data-cms-group': string;
51
+ };
52
+ key(key: string): string;
53
+ (key: string): string;
54
+ readonly groupName: string;
55
+ readonly prefix: string;
56
+ }
57
+ type BoundGroupAccessor<TShape> = GroupAccessor<TShape> & {
58
+ [K in keyof TShape]: TShape[K] extends DualCallableHelper<infer TVal, infer TDef> ? DualCallableHelper<TVal, TDef> : DualCallableHelper<unknown>;
59
+ };
60
+ interface GroupDefinition<TShape = Record<string, unknown>> {
61
+ (scopeKey: string): BoundGroupAccessor<TShape>;
62
+ readonly groupName: string;
63
+ readonly shape: TShape;
64
+ }
65
+ interface DefineCollectionOptions<TSchema extends z.ZodTypeAny> {
66
+ key: string;
67
+ schema: TSchema;
68
+ route?: string;
69
+ presentation?: 'visual' | 'form';
70
+ titleField?: string;
71
+ listColumns?: string[];
72
+ bodyField?: string;
73
+ orderable?: boolean;
74
+ }
75
+ interface CollectionHandle<TSchema extends z.ZodTypeAny = z.ZodTypeAny> {
76
+ readonly key: string;
77
+ readonly schema: TSchema;
78
+ readonly route?: string;
79
+ readonly presentation?: 'visual' | 'form';
80
+ readonly titleField?: string;
81
+ readonly listColumns?: string[];
82
+ readonly bodyField?: string;
83
+ readonly orderable?: boolean;
84
+ readonly jsonSchema: Record<string, unknown>;
85
+ readonly schemaVersion: number;
86
+ }
87
+ interface CollectionEntry<TContent = Record<string, unknown>> {
88
+ slug: string;
89
+ content: TContent;
90
+ status: 'draft' | 'published';
91
+ published_at?: string | null;
92
+ position?: string | null;
93
+ }
94
+ type InferEntryContent<T> = T extends CollectionHandle<infer TSchema> ? z.infer<TSchema> : Record<string, unknown>;
95
+ interface CollectionStaticPath<TContent = Record<string, unknown>> {
96
+ params: {
97
+ slug: string;
98
+ };
99
+ props: {
100
+ entry: CollectionEntry<TContent>;
101
+ };
102
+ }
103
+
104
+ export type { BoundGroupAccessor as B, CollectionHandle as C, DefineCollectionOptions as D, FieldScope as F, GroupDefinition as G, InferEntryContent as I, CollectionEntry as a, CollectionStaticPath as b, DualCallableHelper as c, FieldHelpersMap as d, FieldComponentProps as e, FieldReadOptions as f, GroupAccessor as g };