@actuate-media/cms-admin 0.49.4 → 0.50.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 (63) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/__tests__/components/seo-char-count.test.d.ts +2 -0
  3. package/dist/__tests__/components/seo-char-count.test.d.ts.map +1 -0
  4. package/dist/__tests__/components/seo-char-count.test.js +25 -0
  5. package/dist/__tests__/components/seo-char-count.test.js.map +1 -0
  6. package/dist/__tests__/lib/page-editor-service.test.js +12 -0
  7. package/dist/__tests__/lib/page-editor-service.test.js.map +1 -1
  8. package/dist/__tests__/lib/post-editor-service.test.js +4 -0
  9. package/dist/__tests__/lib/post-editor-service.test.js.map +1 -1
  10. package/dist/__tests__/views/seo-settings.render.test.js +1 -1
  11. package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
  12. package/dist/actuate-admin.css +1 -1
  13. package/dist/components/MediaPickerModal.d.ts.map +1 -1
  14. package/dist/components/MediaPickerModal.js +3 -1
  15. package/dist/components/MediaPickerModal.js.map +1 -1
  16. package/dist/components/SEOPanel.d.ts +1 -0
  17. package/dist/components/SEOPanel.d.ts.map +1 -1
  18. package/dist/components/SEOPanel.js +1 -1
  19. package/dist/components/SEOPanel.js.map +1 -1
  20. package/dist/components/seo/SeoCharCount.d.ts +15 -0
  21. package/dist/components/seo/SeoCharCount.d.ts.map +1 -0
  22. package/dist/components/seo/SeoCharCount.js +25 -0
  23. package/dist/components/seo/SeoCharCount.js.map +1 -0
  24. package/dist/components/seo/SeoEditorDrawer.d.ts.map +1 -1
  25. package/dist/components/seo/SeoEditorDrawer.js +3 -1
  26. package/dist/components/seo/SeoEditorDrawer.js.map +1 -1
  27. package/dist/fields/SlugField.d.ts.map +1 -1
  28. package/dist/fields/SlugField.js +6 -2
  29. package/dist/fields/SlugField.js.map +1 -1
  30. package/dist/lib/page-editor-service.d.ts.map +1 -1
  31. package/dist/lib/page-editor-service.js +6 -0
  32. package/dist/lib/page-editor-service.js.map +1 -1
  33. package/dist/lib/post-editor-service.d.ts.map +1 -1
  34. package/dist/lib/post-editor-service.js +6 -0
  35. package/dist/lib/post-editor-service.js.map +1 -1
  36. package/dist/lib/seo-service.d.ts +3 -1
  37. package/dist/lib/seo-service.d.ts.map +1 -1
  38. package/dist/lib/seo-service.js.map +1 -1
  39. package/dist/views/DocumentEdit.d.ts.map +1 -1
  40. package/dist/views/DocumentEdit.js +1 -0
  41. package/dist/views/DocumentEdit.js.map +1 -1
  42. package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
  43. package/dist/views/page-editor/PageSettingsModal.js +12 -9
  44. package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
  45. package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -1
  46. package/dist/views/post-editor/PostFieldsModal.js +12 -9
  47. package/dist/views/post-editor/PostFieldsModal.js.map +1 -1
  48. package/package.json +2 -2
  49. package/src/__tests__/components/seo-char-count.test.tsx +27 -0
  50. package/src/__tests__/lib/page-editor-service.test.ts +14 -0
  51. package/src/__tests__/lib/post-editor-service.test.ts +9 -0
  52. package/src/__tests__/views/seo-settings.render.test.tsx +1 -1
  53. package/src/components/MediaPickerModal.tsx +5 -1
  54. package/src/components/SEOPanel.tsx +9 -0
  55. package/src/components/seo/SeoCharCount.tsx +44 -0
  56. package/src/components/seo/SeoEditorDrawer.tsx +27 -1
  57. package/src/fields/SlugField.tsx +6 -2
  58. package/src/lib/page-editor-service.ts +6 -0
  59. package/src/lib/post-editor-service.ts +6 -0
  60. package/src/lib/seo-service.ts +9 -1
  61. package/src/views/DocumentEdit.tsx +1 -0
  62. package/src/views/page-editor/PageSettingsModal.tsx +33 -14
  63. package/src/views/post-editor/PostFieldsModal.tsx +33 -14
@@ -76,6 +76,7 @@ export function DocumentEdit({ collectionSlug, documentId, config, onNavigate, }
76
76
  'metaTitle',
77
77
  'metaDescription',
78
78
  'focusKeyphrase',
79
+ 'keyTakeaway',
79
80
  'canonical',
80
81
  'robotsPolicy',
81
82
  'noIndex',
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAe,MAAM,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EACL,aAAa,EACb,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAStC,MAAM,UAAU,YAAY,CAAC,EAC3B,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,GACQ;IAClB,MAAM,KAAK,GAAG,CAAC,UAAU,CAAA;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAA;IAC7D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAA;IAC3E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,EAAE,CAAC,CAAA;IACnD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAU,EAAE,CAAC,CAAA;IACjE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAA;IACtF,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAAG,QAAQ,CACtE,EAAE,CACH,CAAA;IACD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,OAAO,CAAC,CAAA;IAC3D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACrF,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,CAAA;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;QACzD,CAAC,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,CAAA;IAEjC,MAAM,YAAY,GAAG,MAAM,EAAE,MAAM,CAAA;IACnC,MAAM,aAAa,GACjB,YAAY,EAAE,OAAO;QACnB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAgB,EAAE,EAAE,CAAC,CAAC;YAC3E,IAAI;YACJ,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACpE,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,SAAS,GACb,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,IAAI,UAAU,EAAE,SAAS,KAAK,SAAS,CAAC,CAAA;IAElG,MAAM,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxF,MAAM,MAAM,GAAU,UAAU,EAAE,MAAM;QACtC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,UAAU,CAAC,MAAM;YACnB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAC7F,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,eAAe,GAAG,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,OAAO,CAAA;IAChE,MAAM,YAAY,GAAG,KAAK;QACxB,CAAC,CAAC,OAAO,UAAU,EAAE,MAAM,EAAE,QAAQ,IAAI,cAAc,EAAE;QACzD,CAAC,CAAC,QAAQ,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,EAAE,CAAA;IAEnD,MAAM,OAAO,GACX,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;IAEhF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAClD,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;YAC3B,YAAY,EAAE,CAAA;QAChB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,MAAM,OAAO,GAAG,CAAC,CAAoB,EAAE,EAAE;YACvC,CAAC,CAAC,cAAc,EAAE,CAAA;QACpB,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAClE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,MAAM,UAAU,GAAsB;QACpC,WAAW;QACX,iBAAiB;QACjB,gBAAgB;QAChB,aAAa;QACb,WAAW;QACX,cAAc;QACd,SAAS;QACT,UAAU;QACV,SAAS;QACT,eAAe;QACf,SAAS;QACT,cAAc;QACd,oBAAoB;QACpB,cAAc;QACd,eAAe;QACf,YAAY;KACb,CAAA;IAED,KAAK,UAAU,YAAY;QACzB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAM,gBAAgB,cAAc,IAAI,UAAU,EAAE,CAAC,CAAA;QAC7E,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAA;YACpB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YACxE,MAAM,MAAM,GAAG;gBACb,GAAG,OAAO;gBACV,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;gBACjC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;aAC/B,CAAA;YACD,SAAS,CAAC,MAAM,CAAC,CAAA;YACjB,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACxB,YAAY,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,CAAA;YACnC,cAAc,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;YACvC,uBAAuB,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,CAAA;YAEzD,MAAM,SAAS,GAAY,EAAE,CAAA;YAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC/B,CAAC;oBAAC,SAAiB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;YACD,UAAU,CAAC,SAAS,CAAC,CAAA;YACrB,iBAAiB,CAAC,SAAS,CAAC,CAAA;YAE5B,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAiC,CAAA;gBACxD,oBAAoB,CAAC,MAAM,CAAC,CAAA;gBAC5B,2BAA2B,CAAC,MAAM,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACrB,KAAK,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,UAAU,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAU;QACjD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,UAAU,UAAU;QACvB,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACjF,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,EAAE,CAAA;QAC3D,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,GAAG,GAAG,MAAM,MAAM,CAAM,gBAAgB,cAAc,EAAE,EAAE;oBAC9D,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAA;gBACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;oBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAA;oBAC1B,gBAAgB,CAAC,MAAM,CAAC,CAAA;oBACxB,iBAAiB,CAAC,OAAO,CAAC,CAAA;oBAC1B,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;oBAC9C,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;wBACxB,UAAU,CAAC,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC,CAAA;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAM,gBAAgB,cAAc,IAAI,UAAU,EAAE,EAAE;oBAC5E,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAA;gBACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;oBAC9B,gBAAgB,CAAC,MAAM,CAAC,CAAA;oBACxB,iBAAiB,CAAC,OAAO,CAAC,CAAA;oBAC1B,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;oBAC9C,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM;wBAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IAED,KAAK,UAAU,aAAa;QAC1B,IAAI,KAAK;YAAE,OAAM;QACjB,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACjF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAM,gBAAgB,cAAc,IAAI,UAAU,EAAE,EAAE;YAC5E,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;SACvF,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;YACnC,YAAY,CAAC,WAAW,CAAC,CAAA;YACzB,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACxB,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC1B,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IAED,KAAK,UAAU,eAAe;QAC5B,IAAI,KAAK;YAAE,OAAM;QACjB,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACjF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAM,gBAAgB,cAAc,IAAI,UAAU,EAAE,EAAE;YAC5E,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;SACnF,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;YACrC,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACxB,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC1B,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;QAChD,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IAED,KAAK,UAAU,eAAe;QAC5B,IAAI,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QAChC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAM,gBAAgB,cAAc,EAAE,EAAE;YAC9D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,MAAM;gBACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;gBAC1D,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS;aACtD,CAAC;SACH,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAA;YAC1B,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;gBACxB,UAAU,CAAC,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC9B,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACrF,CAAA;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAC7C,CAAC,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9D,CAAA;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC9B,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAC/E,CAAA;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAEjC,MAAM,WAAW,GACf,SAAS,KAAK,WAAW;QACvB,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,SAAS,KAAK,WAAW;YACzB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,+BAA+B,CAAA;IAEvC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,cAAK,SAAS,EAAC,gDAAgD,YAC7D,KAAC,OAAO,IAAC,SAAS,EAAC,oCAAoC,GAAG,GACtD,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACtC,aAAI,SAAS,EAAC,sBAAsB,YAAE,YAAY,GAAM,EACxD,eACE,SAAS,EAAE,2EAA2E,WAAW,EAAE,YAElG,SAAS,GACL,EACN,UAAU,IAAI,KAAC,iBAAiB,IAAC,UAAU,EAAE,UAAU,GAAI,EAC3D,OAAO,IAAI,eAAM,SAAS,EAAC,oCAAoC,gCAAuB,IACnF,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACxC,SAAS,EAAC,uJAAuJ,EACjK,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,aAEnD,WAAW,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAC,GAAG,IAAC,SAAS,EAAC,SAAS,GAAG,eAEpE,EACR,CAAC,KAAK,IAAI,CACT,8BACE,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACrC,SAAS,EAAC,uJAAuJ,EACjK,KAAK,EAAC,mDAAmD,aAEzD,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,GAAG,qBAEvB,EACT,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EACpC,SAAS,EAAC,uJAAuJ,EACjK,KAAK,EAAC,iBAAiB,aAEvB,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,eAEtB,EACT,kBACE,OAAO,EAAE,eAAe,EACxB,SAAS,EAAC,uJAAuJ,EACjK,KAAK,EAAC,yBAAyB,aAE/B,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,iBAErB,IACR,CACJ,IACG,IACF,EAEN,eAAK,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,aACzD,eAAK,SAAS,EAAC,WAAW,aACvB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,eAAK,SAAS,EAAC,sGAAsG,aACnH,cAAK,SAAS,EAAC,0EAA0E,YACvF,KAAC,aAAa,IAAC,SAAS,EAAC,uBAAuB,GAAG,GAC/C,EACN,aAAI,SAAS,EAAC,wCAAwC,4CAEjD,EACL,YAAG,SAAS,EAAC,uBAAuB,2DAA+C,IAC/E,CACP,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,uCAAuC,aACpD,cAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAC9B,KAAC,aAAa,IAEZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAHhD,KAAK,CAAC,IAAI,CAIf,CACH,CAAC,GACE,EAEN,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,+DAA+D,aAC5E,aAAI,SAAS,EAAC,kBAAkB,uBAAY,EAC5C,eAAK,SAAS,EAAC,WAAW,aACvB,CAAC,KAAK,IAAI,SAAS,KAAK,OAAO,IAAI,CAClC,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,wBAGR,CACV,EACA,CAAC,KAAK,IAAI,SAAS,KAAK,WAAW,IAAI,CACtC,KAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,0BAGR,CACV,EACA,CAAC,KAAK,IAAI,CACT,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EACpC,SAAS,EAAC,yKAAyK,aAEnL,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,GAAG,EAC/B,WAAW,IAAI,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,IACzD,CACV,EACA,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC,IAAI,CAClD,eAAK,SAAS,EAAC,wFAAwF,aACpG,WAAW,IAAI,CACd,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,gBACzB,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,IAC7C,CACP,EACA,oBAAoB,IAAI,CACvB,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,OAAO,IAAC,SAAS,EAAC,aAAa,GAAG,kBACtB,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,cAAc,EAAE,IACxD,CACP,IACG,CACP,IACG,IACF,EAEL,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,eAAK,SAAS,EAAC,+DAA+D,aAC5E,aAAI,SAAS,EAAC,kBAAkB,yBAAc,EAC7C,aAAa,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CACjC,cAAsB,SAAS,EAAC,MAAM,YACpC,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,GACrD,IALM,KAAK,CAAC,IAAI,CAMd,CACP,CAAC,IACE,CACP,EAED,KAAC,QAAQ,IACP,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EACpD,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,EAAE,OAAO,GACxB,EAED,SAAS,IAAI,CACZ,eAAK,SAAS,EAAC,+DAA+D,aAC5E,aAAI,SAAS,EAAC,kBAAkB,uBAAY,EAC5C,YAAG,SAAS,EAAC,6CAA6C,mFAEtD,EACJ,cAAK,SAAS,EAAC,WAAW,YACvB,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7B,0BACE,KAAC,iBAAiB,IAChB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAC3C,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;wEAChB,oBAAoB,CAAC,CAAC,IAAI,EAAE,EAAE;4EAC5B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA;4EACxB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gFACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;4EACzB,CAAC;iFAAM,CAAC;gFACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;4EAC1B,CAAC;4EACD,OAAO,IAAI,CAAA;wEACb,CAAC,CAAC,CAAA;oEACJ,CAAC,EACD,UAAU,EAAE,MAAM,CAAC,UAAU,EAC7B,QAAQ,EACN,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;wEAC7B,CAAC,CAAC,6CAA6C;wEAC/C,CAAC,CAAC,SAAS,GAEf,EACD,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CACjC,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;wEACZ,oBAAoB,CAAC,CAAC,IAAI,EAAE,EAAE;4EAC5B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA;4EACxB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;4EACxB,OAAO,IAAI,CAAA;wEACb,CAAC,CAAC,CAAA;oEACJ,CAAC,EACD,SAAS,EAAC,oDAAoD,qDAGvD,CACV,KApCO,MAAM,CAAC,IAAI,CAqCf,CACP,CAAC,GACE,IACF,CACP,IACG,IACF,CACP,EAED,eAAK,SAAS,EAAC,sHAAsH,aACnI,KAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,uBAEpE,EACT,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,mBAAgB,MAAM,aAClF,KAAC,IAAI,IAAC,SAAS,EAAC,gBAAgB,GAAG,EAClC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,IAC3B,IACL,IACF,EAEL,WAAW,IAAI,CACd,KAAC,WAAW,IACV,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,GACpC,CACH,IACG,EAEL,CAAC,KAAK,IAAI,UAAU,IAAI,CACvB,KAAC,cAAc,IACb,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;oBAClB,MAAM,YAAY,GAAG,IAA2B,CAAA;oBAChD,SAAS,CAAC,YAAY,CAAC,CAAA;oBACvB,gBAAgB,CAAC,YAAY,CAAC,CAAA;gBAChC,CAAC,GACD,CACH,EAEA,CAAC,KAAK,IAAI,UAAU,IAAI,CACvB,KAAC,qBAAqB,IACpB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,EAC1C,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;oBACpB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACzB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;oBAChC,uBAAuB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;gBACpD,CAAC,GACD,CACH,EAEA,CAAC,KAAK,IAAI,UAAU,IAAI,CACvB,KAAC,sBAAsB,IACrB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,MAAM,EAAE,OAAO,EACxB,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,cAAc,EAClD,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,GACtC,CACH,IACG,CACP,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAC7C;AAcD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,GACP,EAAE,sBAAsB,2CAuHxB"}
1
+ {"version":3,"file":"PageSettingsModal.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAOlE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAC7C;AAQD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,GACP,EAAE,sBAAsB,2CAyIxB"}
@@ -1,17 +1,17 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useEffect, useState } from 'react';
4
+ import { normalizeSlug, validateSlug } from '@actuate-media/cms-core/client';
4
5
  import { Modal } from '../../components/ui/Modal.js';
5
6
  import { Button } from '../../components/ui/Button.js';
7
+ import { SeoCharCount } from '../../components/seo/SeoCharCount.js';
8
+ const SEO_TITLE_MIN = 30;
9
+ const SEO_TITLE_MAX = 60;
10
+ const SEO_DESC_MIN = 120;
11
+ const SEO_DESC_MAX = 160;
6
12
  const LABEL = 'text-foreground mb-1 block text-xs font-medium';
7
13
  const INPUT = 'border-input bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none';
8
- function slugify(value) {
9
- return value
10
- .toLowerCase()
11
- .trim()
12
- .replace(/[^a-z0-9]+/g, '-')
13
- .replace(/^-+|-+$/g, '');
14
- }
14
+ const slugify = normalizeSlug;
15
15
  /** Edits page-level fields: title, slug, path, and SEO. */
16
16
  export function PageSettingsModal({ open, page, canEdit, onClose, onSave, }) {
17
17
  const [title, setTitle] = useState(page.title);
@@ -40,13 +40,16 @@ export function PageSettingsModal({ open, page, canEdit, onClose, onSave, }) {
40
40
  setPath(s ? `/${s}` : '');
41
41
  }
42
42
  }
43
+ const slugError = validateSlug(slug);
43
44
  function handleSave() {
45
+ if (slugError)
46
+ return;
44
47
  onSave({ title, slug, path: path || (slug ? `/${slug}` : '/'), seoTitle, seoDescription });
45
48
  onClose();
46
49
  }
47
- return (_jsx(Modal, { open: open, onClose: onClose, title: "Page settings", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit, children: "Done" })] }), children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "ps-slug", children: "Slug" }), _jsx("input", { id: "ps-slug", className: INPUT, value: slug, disabled: !canEdit, onChange: (e) => {
50
+ return (_jsx(Modal, { open: open, onClose: onClose, title: "Page settings", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit || Boolean(slugError), children: "Done" })] }), children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "ps-slug", children: "Slug" }), _jsx("input", { id: "ps-slug", className: INPUT, value: slug, disabled: !canEdit, "aria-invalid": Boolean(slugError), "aria-describedby": slugError ? 'ps-slug-error' : undefined, onChange: (e) => {
48
51
  setSlugTouched(true);
49
52
  setSlug(slugify(e.target.value));
50
- } })] }), _jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-path", children: ["Path ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-path", className: INPUT, value: path, disabled: !canEdit, placeholder: "/about/story", onChange: (e) => setPath(e.target.value) })] })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "ps-seo-title", children: "SEO title" }), _jsx("input", { id: "ps-seo-title", className: INPUT, value: seoTitle, disabled: !canEdit, onChange: (e) => setSeoTitle(e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "ps-seo-desc", children: "SEO description" }), _jsx("textarea", { id: "ps-seo-desc", className: `${INPUT} min-h-[64px] resize-y`, value: seoDescription, disabled: !canEdit, onChange: (e) => setSeoDescription(e.target.value) })] })] }) }));
53
+ } }), slugError && (_jsx("p", { id: "ps-slug-error", className: "text-destructive mt-1 text-xs", children: slugError }))] }), _jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "ps-path", children: ["Path ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "ps-path", className: INPUT, value: path, disabled: !canEdit, placeholder: "/about/story", onChange: (e) => setPath(e.target.value) })] })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "ps-seo-title", children: "SEO title" }), _jsx(SeoCharCount, { value: seoTitle, min: SEO_TITLE_MIN, max: SEO_TITLE_MAX })] }), _jsx("input", { id: "ps-seo-title", className: INPUT, value: seoTitle, disabled: !canEdit, placeholder: title || 'Defaults to the page title', onChange: (e) => setSeoTitle(e.target.value) })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "ps-seo-desc", children: "SEO description" }), _jsx(SeoCharCount, { value: seoDescription, min: SEO_DESC_MIN, max: SEO_DESC_MAX })] }), _jsx("textarea", { id: "ps-seo-desc", className: `${INPUT} min-h-[64px] resize-y`, value: seoDescription, disabled: !canEdit, placeholder: "Summarize the page for search results (120\u2013160 characters)", onChange: (e) => setSeoDescription(e.target.value) })] })] }) }));
51
54
  }
52
55
  //# sourceMappingURL=PageSettingsModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageSettingsModal.js","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PageSettingsModal.js","sourceRoot":"","sources":["../../../src/views/page-editor/PageSettingsModal.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PostFieldsModal.d.ts","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,CAAA;IACpD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAC7C;AAcD,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE,oBAAoB,2CAoOtB"}
1
+ {"version":3,"file":"PostFieldsModal.d.ts","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAOlE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,CAAA;IACpD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAC7C;AAQD,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE,oBAAoB,2CAsPtB"}
@@ -1,20 +1,20 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useEffect, useState } from 'react';
4
+ import { normalizeSlug, validateSlug } from '@actuate-media/cms-core/client';
4
5
  import { Modal } from '../../components/ui/Modal.js';
5
6
  import { Button } from '../../components/ui/Button.js';
6
7
  import { MediaPickerModal } from '../../components/MediaPickerModal.js';
7
8
  import { TagInput } from '../../components/TagInput.js';
8
9
  import { RichTextField } from '../../fields/RichTextField.js';
10
+ import { SeoCharCount } from '../../components/seo/SeoCharCount.js';
11
+ const SEO_TITLE_MIN = 30;
12
+ const SEO_TITLE_MAX = 60;
13
+ const SEO_DESC_MIN = 120;
14
+ const SEO_DESC_MAX = 160;
9
15
  const LABEL = 'text-foreground mb-1 block text-xs font-medium';
10
16
  const INPUT = 'border-input bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none';
11
- function slugify(value) {
12
- return value
13
- .toLowerCase()
14
- .trim()
15
- .replace(/[^a-z0-9]+/g, '-')
16
- .replace(/^-+|-+$/g, '');
17
- }
17
+ const slugify = normalizeSlug;
18
18
  /** Edits post-level fields: title, slug, excerpt, featured image, category, tags, body, SEO. */
19
19
  export function PostFieldsModal({ open, post, canEdit, fields, onClose, onSave, }) {
20
20
  const [title, setTitle] = useState(post.title);
@@ -53,14 +53,17 @@ export function PostFieldsModal({ open, post, canEdit, fields, onClose, onSave,
53
53
  if (!slugTouched)
54
54
  setSlug(slugify(next));
55
55
  }
56
+ const slugError = validateSlug(slug);
56
57
  function handleSave() {
58
+ if (slugError)
59
+ return;
57
60
  onSave({ title, slug, excerpt, featuredImage, category, tags, body, seoTitle, seoDescription });
58
61
  onClose();
59
62
  }
60
- return (_jsxs(Modal, { open: open, onClose: onClose, title: "Post details", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit, children: "Done" })] }), children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-slug", children: ["Slug ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-slug", className: INPUT, value: slug, disabled: !canEdit, onChange: (e) => {
63
+ return (_jsxs(Modal, { open: open, onClose: onClose, title: "Post details", actions: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: onClose, children: "Cancel" }), _jsx(Button, { variant: "primary", onClick: handleSave, disabled: !canEdit || Boolean(slugError), children: "Done" })] }), children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-title", children: ["Title ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-title", className: INPUT, value: title, disabled: !canEdit, onChange: (e) => handleTitle(e.target.value) })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { children: [_jsxs("label", { className: LABEL, htmlFor: "pf-slug", children: ["Slug ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "pf-slug", className: INPUT, value: slug, disabled: !canEdit, "aria-invalid": Boolean(slugError), "aria-describedby": slugError ? 'pf-slug-error' : undefined, onChange: (e) => {
61
64
  setSlugTouched(true);
62
65
  setSlug(slugify(e.target.value));
63
- } })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-category", children: "Category" }), categoryOptions ? (_jsxs("select", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, onChange: (e) => setCategory(e.target.value), children: [_jsx("option", { value: "", children: "No category" }), categoryOptions.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))), category && !categoryOptions.some((o) => o.value === category) && (_jsx("option", { value: category, children: category }))] })) : (_jsx("input", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, placeholder: "e.g. Product", onChange: (e) => setCategory(e.target.value) }))] })] }), hasTags && (_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-tags", children: "Tags" }), _jsx(TagInput, { id: "pf-tags", value: tags, onChange: setTags, collection: post.postType, field: "tags", disabled: !canEdit, maxTags: tagsField?.maxRows })] })), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-excerpt", children: "Excerpt" }), _jsx("textarea", { id: "pf-excerpt", className: `${INPUT} min-h-[60px] resize-y`, value: excerpt, disabled: !canEdit, placeholder: "A short summary shown in listings and the header.", onChange: (e) => setExcerpt(e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-image", children: "Featured image" }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { id: "pf-image", className: `${INPUT} flex-1`, value: featuredImage, disabled: !canEdit, placeholder: "https://\u2026 or pick from the media library", onChange: (e) => setFeaturedImage(e.target.value) }), _jsx("button", { type: "button", disabled: !canEdit, onClick: () => setMediaOpen(true), className: "bg-accent text-foreground border-border hover:bg-accent/80 shrink-0 rounded-md border px-3 py-1.5 text-xs font-medium disabled:opacity-50", children: "Browse" })] }), featuredImage && (_jsx("div", { className: "border-border bg-muted mt-2 overflow-hidden rounded-md border", children: _jsx("img", { src: featuredImage, alt: "", className: "h-28 w-full object-cover" }) }))] }), _jsx("div", { children: _jsx(RichTextField, { label: "Body", value: body, onChange: canEdit ? setBody : () => { }, helpText: "Rendered by the Article Body section when its source is set to the post Body field." }) }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-seo-title", children: "SEO title" }), _jsx("input", { id: "pf-seo-title", className: INPUT, value: seoTitle, disabled: !canEdit, onChange: (e) => setSeoTitle(e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-seo-desc", children: "SEO description" }), _jsx("textarea", { id: "pf-seo-desc", className: `${INPUT} min-h-[60px] resize-y`, value: seoDescription, disabled: !canEdit, onChange: (e) => setSeoDescription(e.target.value) })] })] }), _jsx(MediaPickerModal, { open: mediaOpen, onClose: () => setMediaOpen(false), onSelect: (url) => {
66
+ } }), slugError && (_jsx("p", { id: "pf-slug-error", className: "text-destructive mt-1 text-xs", children: slugError }))] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-category", children: "Category" }), categoryOptions ? (_jsxs("select", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, onChange: (e) => setCategory(e.target.value), children: [_jsx("option", { value: "", children: "No category" }), categoryOptions.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))), category && !categoryOptions.some((o) => o.value === category) && (_jsx("option", { value: category, children: category }))] })) : (_jsx("input", { id: "pf-category", className: INPUT, value: category, disabled: !canEdit, placeholder: "e.g. Product", onChange: (e) => setCategory(e.target.value) }))] })] }), hasTags && (_jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-tags", children: "Tags" }), _jsx(TagInput, { id: "pf-tags", value: tags, onChange: setTags, collection: post.postType, field: "tags", disabled: !canEdit, maxTags: tagsField?.maxRows })] })), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-excerpt", children: "Excerpt" }), _jsx("textarea", { id: "pf-excerpt", className: `${INPUT} min-h-[60px] resize-y`, value: excerpt, disabled: !canEdit, placeholder: "A short summary shown in listings and the header.", onChange: (e) => setExcerpt(e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: LABEL, htmlFor: "pf-image", children: "Featured image" }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { id: "pf-image", className: `${INPUT} flex-1`, value: featuredImage, disabled: !canEdit, placeholder: "https://\u2026 or pick from the media library", onChange: (e) => setFeaturedImage(e.target.value) }), _jsx("button", { type: "button", disabled: !canEdit, onClick: () => setMediaOpen(true), className: "bg-accent text-foreground border-border hover:bg-accent/80 shrink-0 rounded-md border px-3 py-1.5 text-xs font-medium disabled:opacity-50", children: "Browse" })] }), featuredImage && (_jsx("div", { className: "border-border bg-muted mt-2 overflow-hidden rounded-md border", children: _jsx("img", { src: featuredImage, alt: "", className: "h-28 w-full object-cover" }) }))] }), _jsx("div", { children: _jsx(RichTextField, { label: "Body", value: body, onChange: canEdit ? setBody : () => { }, helpText: "Rendered by the Article Body section when its source is set to the post Body field." }) }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "pf-seo-title", children: "SEO title" }), _jsx(SeoCharCount, { value: seoTitle, min: SEO_TITLE_MIN, max: SEO_TITLE_MAX })] }), _jsx("input", { id: "pf-seo-title", className: INPUT, value: seoTitle, disabled: !canEdit, placeholder: title || 'Defaults to the post title', onChange: (e) => setSeoTitle(e.target.value) })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-1 flex items-center justify-between", children: [_jsx("label", { className: `${LABEL} mb-0`, htmlFor: "pf-seo-desc", children: "SEO description" }), _jsx(SeoCharCount, { value: seoDescription, min: SEO_DESC_MIN, max: SEO_DESC_MAX })] }), _jsx("textarea", { id: "pf-seo-desc", className: `${INPUT} min-h-[60px] resize-y`, value: seoDescription, disabled: !canEdit, placeholder: excerpt || 'Summarize the post for search results (120–160 characters)', onChange: (e) => setSeoDescription(e.target.value) })] })] }), _jsx(MediaPickerModal, { open: mediaOpen, onClose: () => setMediaOpen(false), onSelect: (url) => {
64
67
  setFeaturedImage(url);
65
68
  setMediaOpen(false);
66
69
  }, accept: "image/*" })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"PostFieldsModal.js","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostFieldsModal.js","sourceRoot":"","sources":["../../../src/views/post-editor/PostFieldsModal.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-admin",
3
- "version": "0.49.4",
3
+ "version": "0.50.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -89,7 +89,7 @@
89
89
  "tailwindcss": "^4.0.0",
90
90
  "typescript": "^5.7.0",
91
91
  "vitest": "^4.1.0",
92
- "@actuate-media/cms-core": "0.66.0",
92
+ "@actuate-media/cms-core": "0.67.0",
93
93
  "@actuate-media/component-blocks": "0.2.1"
94
94
  },
95
95
  "scripts": {
@@ -0,0 +1,27 @@
1
+ // @vitest-environment happy-dom
2
+ import { describe, expect, it } from 'vitest'
3
+ import { render, screen } from '@testing-library/react'
4
+ import { SeoCharCount } from '../../components/seo/SeoCharCount.js'
5
+
6
+ describe('SeoCharCount', () => {
7
+ it('shows a neutral empty state', () => {
8
+ render(<SeoCharCount value="" min={30} max={60} />)
9
+ expect(screen.getByText('0/60')).toBeTruthy()
10
+ })
11
+
12
+ it('marks a value within the ideal range as good', () => {
13
+ render(<SeoCharCount value={'x'.repeat(40)} min={30} max={60} />)
14
+ expect(screen.getByText(/40\/60 · good/)).toBeTruthy()
15
+ })
16
+
17
+ it('flags a value over the max as too long (destructive)', () => {
18
+ const { container } = render(<SeoCharCount value={'x'.repeat(70)} min={30} max={60} />)
19
+ expect(screen.getByText(/70\/60 · too long/)).toBeTruthy()
20
+ expect(container.querySelector('.text-destructive')).toBeTruthy()
21
+ })
22
+
23
+ it('hints to aim for the range when below min', () => {
24
+ render(<SeoCharCount value={'x'.repeat(10)} min={30} max={60} />)
25
+ expect(screen.getByText(/aim for 30–60/)).toBeTruthy()
26
+ })
27
+ })
@@ -146,6 +146,20 @@ describe('validatePage', () => {
146
146
  const { errors } = validatePage(basePage([]), false)
147
147
  expect(errors.some((e) => e.includes('visible section'))).toBe(false)
148
148
  })
149
+
150
+ it('rejects an invalid slug (mirrors the server publish gate)', () => {
151
+ const page = basePage([])
152
+ page.slug = 'About Us!'
153
+ const { errors } = validatePage(page, false)
154
+ expect(errors.some((e) => /slug/i.test(e))).toBe(true)
155
+ })
156
+
157
+ it('rejects a reserved slug', () => {
158
+ const page = basePage([])
159
+ page.slug = 'admin'
160
+ const { errors } = validatePage(page, false)
161
+ expect(errors.some((e) => /reserved/i.test(e))).toBe(true)
162
+ })
149
163
  })
150
164
 
151
165
  describe('section type registry', () => {
@@ -52,6 +52,15 @@ describe('validatePost', () => {
52
52
  expect(r.errors).toContain('Post slug is required.')
53
53
  })
54
54
 
55
+ it('rejects an invalid or reserved slug (mirrors the server publish gate)', () => {
56
+ expect(
57
+ validatePost(basePost({ slug: 'Hello World' }), false).errors.some((e) => /slug/i.test(e)),
58
+ ).toBe(true)
59
+ expect(
60
+ validatePost(basePost({ slug: 'api' }), false).errors.some((e) => /reserved/i.test(e)),
61
+ ).toBe(true)
62
+ })
63
+
55
64
  it('does not run section validation for draft saves', () => {
56
65
  const r = validatePost(
57
66
  basePost({
@@ -39,7 +39,7 @@ const cmsApi = vi.fn(async (endpoint: string, options?: { method?: string }) =>
39
39
  if (endpoint === '/seo/sitemap/status' && method === 'GET') {
40
40
  return {
41
41
  data: {
42
- sitemapUrl: 'https://acme.test/api/cms/sitemap.xml',
42
+ sitemapUrl: 'https://acme.test/sitemap.xml',
43
43
  lastGeneratedAt: '2026-01-02T03:04:05.000Z',
44
44
  pagesIncluded: 12,
45
45
  pagesExcluded: 1,
@@ -14,6 +14,8 @@ interface MediaItem {
14
14
  storageKey: string
15
15
  /** Normalized public URL from the media list endpoint (preferred for display). */
16
16
  url?: string
17
+ /** Curated alt text from the media library (normalized as `altTag`). */
18
+ altTag?: string
17
19
  mimeType: string
18
20
  fileSize: number
19
21
  width?: number
@@ -118,7 +120,9 @@ export function MediaPickerModal({
118
120
  width: item.width,
119
121
  height: item.height,
120
122
  })
121
- onSelect(url, item.filename)
123
+ // Prefer the asset's curated alt text from the library so inserted images
124
+ // carry meaningful alt instead of a filename. Callers can still override.
125
+ onSelect(url, item.altTag?.trim() || item.filename)
122
126
  onClose()
123
127
  }
124
128
 
@@ -26,6 +26,7 @@ export interface SEOData {
26
26
  metaTitle?: string
27
27
  metaDescription?: string
28
28
  focusKeyphrase?: string
29
+ keyTakeaway?: string
29
30
  canonical?: string
30
31
  robotsPolicy?:
31
32
  | 'inherit'
@@ -762,6 +763,14 @@ export function SEOPanel({
762
763
  onChange={(v) => update({ focusKeyphrase: v })}
763
764
  placeholder="Primary keyword or phrase"
764
765
  />
766
+ <TextareaField
767
+ label="Key Takeaway"
768
+ value={seoData.keyTakeaway ?? ''}
769
+ onChange={(v) => update({ keyTakeaway: v })}
770
+ placeholder="One or two sentences AI answer engines can quote"
771
+ charCount={(seoData.keyTakeaway ?? '').length}
772
+ charTarget="(ideal: under 240)"
773
+ />
765
774
  <InputField
766
775
  label="Canonical URL"
767
776
  value={seoData.canonical ?? ''}
@@ -0,0 +1,44 @@
1
+ 'use client'
2
+
3
+ import { Check, AlertTriangle } from 'lucide-react'
4
+
5
+ export interface SeoCharCountProps {
6
+ value: string
7
+ /** Recommended minimum length (inclusive). */
8
+ min: number
9
+ /** Recommended/hard maximum length (inclusive). */
10
+ max: number
11
+ }
12
+
13
+ /**
14
+ * A length counter with an accessible quality band for SEO fields. Color is
15
+ * always paired with an icon + label so meaning is never conveyed by color
16
+ * alone (WCAG). "Good" = within [min, max]; "long" (over max) is the only
17
+ * destructive state; below min is a neutral hint.
18
+ */
19
+ export function SeoCharCount({ value, min, max }: SeoCharCountProps) {
20
+ const len = value.trim().length
21
+ const empty = len === 0
22
+ const long = len > max
23
+ const good = !empty && len >= min && len <= max
24
+
25
+ const tone = long ? 'text-destructive' : 'text-muted-foreground'
26
+ const label = empty
27
+ ? `0/${max}`
28
+ : long
29
+ ? `${len}/${max} · too long`
30
+ : good
31
+ ? `${len}/${max} · good`
32
+ : `${len}/${max} · aim for ${min}–${max}`
33
+
34
+ return (
35
+ <span className={`inline-flex items-center gap-1 text-xs ${tone}`}>
36
+ {long ? (
37
+ <AlertTriangle size={12} aria-hidden="true" />
38
+ ) : good ? (
39
+ <Check size={12} aria-hidden="true" />
40
+ ) : null}
41
+ {label}
42
+ </span>
43
+ )
44
+ }
@@ -16,7 +16,15 @@ import { SeoLoading, SeoErrorState, btnPrimary, btnSecondary, gradeMeta } from '
16
16
  const META_TITLE_MAX = 60
17
17
  const META_DESC_MAX = 160
18
18
 
19
- type AiField = 'metaTitle' | 'metaDescription' | 'ogTitle' | 'ogDescription' | 'focusKeyword'
19
+ type AiField =
20
+ | 'metaTitle'
21
+ | 'metaDescription'
22
+ | 'ogTitle'
23
+ | 'ogDescription'
24
+ | 'focusKeyword'
25
+ | 'keyTakeaway'
26
+
27
+ const KEY_TAKEAWAY_MAX = 240
20
28
 
21
29
  function CharCount({ value, max }: { value: string; max: number }) {
22
30
  const over = value.length > max
@@ -100,6 +108,7 @@ export function SeoEditorDrawer({
100
108
  metaDescription: rec.metaDescription ?? '',
101
109
  canonicalUrl: rec.canonicalUrl ?? '',
102
110
  focusKeyword: rec.focusKeyword ?? '',
111
+ keyTakeaway: rec.keyTakeaway ?? '',
103
112
  ogTitle: rec.ogTitle ?? '',
104
113
  ogDescription: rec.ogDescription ?? '',
105
114
  noindex: rec.noindex,
@@ -248,6 +257,23 @@ export function SeoEditorDrawer({
248
257
  />
249
258
  </Field>
250
259
 
260
+ <Field
261
+ label="Key takeaway"
262
+ hint={
263
+ <span className="flex items-center gap-2">
264
+ <CharCount value={form.keyTakeaway ?? ''} max={KEY_TAKEAWAY_MAX} />
265
+ {aiButton('keyTakeaway')}
266
+ </span>
267
+ }
268
+ >
269
+ <textarea
270
+ className={`${inputCls} min-h-16 resize-y`}
271
+ value={form.keyTakeaway ?? ''}
272
+ onChange={(e) => update({ keyTakeaway: e.target.value })}
273
+ placeholder="One or two sentences AI answer engines can quote — what is this page about?"
274
+ />
275
+ </Field>
276
+
251
277
  <Field label="Canonical URL">
252
278
  <input
253
279
  className={inputCls}
@@ -11,11 +11,15 @@ export interface SlugFieldProps {
11
11
  helpText?: string
12
12
  }
13
13
 
14
+ // Mirrors `normalizeSlug` in @actuate-media/cms-core so the live-edited value
15
+ // matches what the server will accept (lowercase alphanumerics + single
16
+ // hyphens; underscores and other punctuation are collapsed to hyphens).
14
17
  function toSlug(text: string): string {
15
18
  return text
16
19
  .toLowerCase()
17
- .replace(/[^\w\s-]/g, '')
18
- .replace(/[\s_]+/g, '-')
20
+ .normalize('NFKD')
21
+ .replace(/[\u0300-\u036f]/g, '')
22
+ .replace(/[^a-z0-9]+/g, '-')
19
23
  .replace(/^-+|-+$/g, '')
20
24
  }
21
25
 
@@ -33,6 +33,7 @@ import {
33
33
  validateSectionContent,
34
34
  type PageSection,
35
35
  } from '@actuate-media/cms-core/page-sections'
36
+ import { validateSlug } from '@actuate-media/cms-core/client'
36
37
 
37
38
  import { missingCollectionFields } from './collection-schema.js'
38
39
 
@@ -108,6 +109,11 @@ export function validatePage(page: EditorPage, forPublish = false): ValidationRe
108
109
  if (isBlank(page.title)) errors.push('Page title is required.')
109
110
  if (isBlank(page.path)) errors.push('Page path is required.')
110
111
 
112
+ // Mirror the server publish gate so an invalid/reserved slug surfaces in the
113
+ // validation summary rather than only as a toast after the publish attempt.
114
+ const slugError = validateSlug(page.slug)
115
+ if (slugError) errors.push(slugError)
116
+
111
117
  if (forPublish) {
112
118
  const visible = page.sections.filter((s) => s.visible)
113
119
  if (visible.length === 0) {
@@ -41,6 +41,7 @@ import {
41
41
  type PageSection,
42
42
  type PostHeaderConfig,
43
43
  } from '@actuate-media/cms-core/page-sections'
44
+ import { validateSlug } from '@actuate-media/cms-core/client'
44
45
 
45
46
  export type { PageSection, PostHeaderConfig } from '@actuate-media/cms-core/page-sections'
46
47
 
@@ -139,6 +140,11 @@ export function validatePost(post: EditorPost, forPublish = false): ValidationRe
139
140
  if (isBlank(post.title)) errors.push('Post title is required.')
140
141
  if (isBlank(post.slug)) errors.push('Post slug is required.')
141
142
 
143
+ // Mirror the server publish gate so an invalid/reserved slug surfaces in the
144
+ // validation summary rather than only as a toast after the publish attempt.
145
+ const slugError = validateSlug(post.slug)
146
+ if (slugError) errors.push(slugError)
147
+
142
148
  if (forPublish) {
143
149
  const visible = post.sections.filter((s) => s.visible)
144
150
  // Unmanaged (externally-managed) sections have no registered field schema,
@@ -150,6 +150,7 @@ export interface SeoContentRecord {
150
150
  metaTitle: string | null
151
151
  metaDescription: string | null
152
152
  focusKeyword: string | null
153
+ keyTakeaway: string | null
153
154
  ogTitle: string | null
154
155
  ogDescription: string | null
155
156
  ogImageId: string | null
@@ -190,6 +191,7 @@ export interface SeoFieldPayload {
190
191
  metaDescription?: string
191
192
  canonicalUrl?: string
192
193
  focusKeyword?: string
194
+ keyTakeaway?: string
193
195
  ogTitle?: string
194
196
  ogDescription?: string
195
197
  ogImage?: string
@@ -620,7 +622,13 @@ function isAiUnavailable(status?: number): boolean {
620
622
  }
621
623
 
622
624
  export async function generateSeoField(
623
- field: 'metaTitle' | 'metaDescription' | 'ogTitle' | 'ogDescription' | 'focusKeyword',
625
+ field:
626
+ | 'metaTitle'
627
+ | 'metaDescription'
628
+ | 'ogTitle'
629
+ | 'ogDescription'
630
+ | 'focusKeyword'
631
+ | 'keyTakeaway',
624
632
  context: { entityType: string; entityId: string },
625
633
  ): Promise<SeoAiResult> {
626
634
  const res = await cmsApi<SeoAiResult>('/ai/seo/generate-field', {
@@ -114,6 +114,7 @@ export function DocumentEdit({
114
114
  'metaTitle',
115
115
  'metaDescription',
116
116
  'focusKeyphrase',
117
+ 'keyTakeaway',
117
118
  'canonical',
118
119
  'robotsPolicy',
119
120
  'noIndex',