@actuate-media/cms-admin 0.67.0 → 0.69.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 (180) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +59 -15
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/__tests__/hooks/useIdleLogout.test.d.ts +2 -0
  6. package/dist/__tests__/hooks/useIdleLogout.test.d.ts.map +1 -0
  7. package/dist/__tests__/hooks/useIdleLogout.test.js +119 -0
  8. package/dist/__tests__/hooks/useIdleLogout.test.js.map +1 -0
  9. package/dist/__tests__/lib/post-types-service.test.d.ts +2 -0
  10. package/dist/__tests__/lib/post-types-service.test.d.ts.map +1 -0
  11. package/dist/__tests__/lib/post-types-service.test.js +88 -0
  12. package/dist/__tests__/lib/post-types-service.test.js.map +1 -0
  13. package/dist/__tests__/router/query-string.test.d.ts +2 -0
  14. package/dist/__tests__/router/query-string.test.d.ts.map +1 -0
  15. package/dist/__tests__/router/query-string.test.js +44 -0
  16. package/dist/__tests__/router/query-string.test.js.map +1 -0
  17. package/dist/__tests__/views/collection-list-nav.render.test.js +43 -5
  18. package/dist/__tests__/views/collection-list-nav.render.test.js.map +1 -1
  19. package/dist/__tests__/views/forms-list.render.test.js +25 -6
  20. package/dist/__tests__/views/forms-list.render.test.js.map +1 -1
  21. package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts +2 -0
  22. package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts.map +1 -0
  23. package/dist/__tests__/views/page-builder-sections-panel.render.test.js +121 -0
  24. package/dist/__tests__/views/page-builder-sections-panel.render.test.js.map +1 -0
  25. package/dist/__tests__/views/page-templates.render.test.d.ts +2 -0
  26. package/dist/__tests__/views/page-templates.render.test.d.ts.map +1 -0
  27. package/dist/__tests__/views/page-templates.render.test.js +105 -0
  28. package/dist/__tests__/views/page-templates.render.test.js.map +1 -0
  29. package/dist/__tests__/views/post-type-editor.render.test.d.ts +2 -0
  30. package/dist/__tests__/views/post-type-editor.render.test.d.ts.map +1 -0
  31. package/dist/__tests__/views/post-type-editor.render.test.js +102 -0
  32. package/dist/__tests__/views/post-type-editor.render.test.js.map +1 -0
  33. package/dist/__tests__/views/security-settings.render.test.js +85 -4
  34. package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
  35. package/dist/__tests__/views/seo-content-pane.render.test.d.ts +2 -0
  36. package/dist/__tests__/views/seo-content-pane.render.test.d.ts.map +1 -0
  37. package/dist/__tests__/views/seo-content-pane.render.test.js +117 -0
  38. package/dist/__tests__/views/seo-content-pane.render.test.js.map +1 -0
  39. package/dist/__tests__/views/users-selected-deeplink.render.test.d.ts +2 -0
  40. package/dist/__tests__/views/users-selected-deeplink.render.test.d.ts.map +1 -0
  41. package/dist/__tests__/views/users-selected-deeplink.render.test.js +91 -0
  42. package/dist/__tests__/views/users-selected-deeplink.render.test.js.map +1 -0
  43. package/dist/actuate-admin.css +1 -1
  44. package/dist/components/collections/EntryDetailPane.d.ts +10 -0
  45. package/dist/components/collections/EntryDetailPane.d.ts.map +1 -0
  46. package/dist/components/collections/EntryDetailPane.js +92 -0
  47. package/dist/components/collections/EntryDetailPane.js.map +1 -0
  48. package/dist/components/forms/FieldsPanel.js +1 -1
  49. package/dist/components/forms/FieldsPanel.js.map +1 -1
  50. package/dist/components/forms/FormSchemaPane.d.ts +8 -0
  51. package/dist/components/forms/FormSchemaPane.d.ts.map +1 -0
  52. package/dist/components/forms/FormSchemaPane.js +95 -0
  53. package/dist/components/forms/FormSchemaPane.js.map +1 -0
  54. package/dist/components/seo/SeoEditorPane.d.ts +9 -0
  55. package/dist/components/seo/SeoEditorPane.d.ts.map +1 -0
  56. package/dist/components/seo/SeoEditorPane.js +175 -0
  57. package/dist/components/seo/SeoEditorPane.js.map +1 -0
  58. package/dist/components/ui/Badge.d.ts +1 -1
  59. package/dist/components/ui/Button.d.ts +1 -1
  60. package/dist/components/ui/StatusBadge.d.ts +1 -1
  61. package/dist/hooks/useIdleLogout.d.ts +33 -0
  62. package/dist/hooks/useIdleLogout.d.ts.map +1 -0
  63. package/dist/hooks/useIdleLogout.js +99 -0
  64. package/dist/hooks/useIdleLogout.js.map +1 -0
  65. package/dist/lib/api.d.ts +1 -0
  66. package/dist/lib/api.d.ts.map +1 -1
  67. package/dist/lib/api.js +7 -1
  68. package/dist/lib/api.js.map +1 -1
  69. package/dist/lib/post-types-service.d.ts +44 -0
  70. package/dist/lib/post-types-service.d.ts.map +1 -0
  71. package/dist/lib/post-types-service.js +83 -0
  72. package/dist/lib/post-types-service.js.map +1 -0
  73. package/dist/router/index.d.ts +7 -0
  74. package/dist/router/index.d.ts.map +1 -1
  75. package/dist/router/index.js +23 -4
  76. package/dist/router/index.js.map +1 -1
  77. package/dist/views/CollectionList.d.ts.map +1 -1
  78. package/dist/views/CollectionList.js +23 -4
  79. package/dist/views/CollectionList.js.map +1 -1
  80. package/dist/views/Forms.d.ts.map +1 -1
  81. package/dist/views/Forms.js +25 -21
  82. package/dist/views/Forms.js.map +1 -1
  83. package/dist/views/MediaBrowser.d.ts +4 -1
  84. package/dist/views/MediaBrowser.d.ts.map +1 -1
  85. package/dist/views/MediaBrowser.js +27 -5
  86. package/dist/views/MediaBrowser.js.map +1 -1
  87. package/dist/views/Posts/PostTypeEditor.d.ts +16 -0
  88. package/dist/views/Posts/PostTypeEditor.d.ts.map +1 -0
  89. package/dist/views/Posts/PostTypeEditor.js +159 -0
  90. package/dist/views/Posts/PostTypeEditor.js.map +1 -0
  91. package/dist/views/Posts/PostTypesView.d.ts +3 -2
  92. package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
  93. package/dist/views/Posts/PostTypesView.js +1 -1
  94. package/dist/views/Posts/PostTypesView.js.map +1 -1
  95. package/dist/views/SEO.d.ts.map +1 -1
  96. package/dist/views/SEO.js +2 -1
  97. package/dist/views/SEO.js.map +1 -1
  98. package/dist/views/Settings.d.ts +4 -1
  99. package/dist/views/Settings.d.ts.map +1 -1
  100. package/dist/views/Settings.js +4 -3
  101. package/dist/views/Settings.js.map +1 -1
  102. package/dist/views/Users.d.ts +4 -1
  103. package/dist/views/Users.d.ts.map +1 -1
  104. package/dist/views/Users.js +22 -2
  105. package/dist/views/Users.js.map +1 -1
  106. package/dist/views/page-builder/BuilderSectionsPanel.d.ts +20 -0
  107. package/dist/views/page-builder/BuilderSectionsPanel.d.ts.map +1 -0
  108. package/dist/views/page-builder/BuilderSectionsPanel.js +105 -0
  109. package/dist/views/page-builder/BuilderSectionsPanel.js.map +1 -0
  110. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
  111. package/dist/views/page-builder/PageBuilder.js +51 -2
  112. package/dist/views/page-builder/PageBuilder.js.map +1 -1
  113. package/dist/views/page-builder/PageTemplates.d.ts.map +1 -1
  114. package/dist/views/page-builder/PageTemplates.js +113 -6
  115. package/dist/views/page-builder/PageTemplates.js.map +1 -1
  116. package/dist/views/seo/ContentTab.d.ts.map +1 -1
  117. package/dist/views/seo/ContentTab.js +22 -6
  118. package/dist/views/seo/ContentTab.js.map +1 -1
  119. package/dist/views/settings/AccessProtectionCard.d.ts +5 -1
  120. package/dist/views/settings/AccessProtectionCard.d.ts.map +1 -1
  121. package/dist/views/settings/AccessProtectionCard.js +13 -10
  122. package/dist/views/settings/AccessProtectionCard.js.map +1 -1
  123. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  124. package/dist/views/settings/SecurityTab.js +5 -4
  125. package/dist/views/settings/SecurityTab.js.map +1 -1
  126. package/dist/views/settings/SessionPolicyCard.d.ts +1 -2
  127. package/dist/views/settings/SessionPolicyCard.d.ts.map +1 -1
  128. package/dist/views/settings/SessionPolicyCard.js +12 -5
  129. package/dist/views/settings/SessionPolicyCard.js.map +1 -1
  130. package/dist/views/settings/useSecuritySettings.d.ts +13 -1
  131. package/dist/views/settings/useSecuritySettings.d.ts.map +1 -1
  132. package/dist/views/settings/useSecuritySettings.js +47 -4
  133. package/dist/views/settings/useSecuritySettings.js.map +1 -1
  134. package/package.json +2 -2
  135. package/src/AdminRoot.tsx +88 -18
  136. package/src/__tests__/hooks/useIdleLogout.test.tsx +188 -0
  137. package/src/__tests__/lib/post-types-service.test.ts +112 -0
  138. package/src/__tests__/router/query-string.test.ts +54 -0
  139. package/src/__tests__/views/collection-list-nav.render.test.tsx +51 -5
  140. package/src/__tests__/views/forms-list.render.test.tsx +34 -6
  141. package/src/__tests__/views/page-builder-sections-panel.render.test.tsx +138 -0
  142. package/src/__tests__/views/page-templates.render.test.tsx +142 -0
  143. package/src/__tests__/views/post-type-editor.render.test.tsx +116 -0
  144. package/src/__tests__/views/security-settings.render.test.tsx +111 -4
  145. package/src/__tests__/views/seo-content-pane.render.test.tsx +142 -0
  146. package/src/__tests__/views/users-selected-deeplink.render.test.tsx +102 -0
  147. package/src/components/collections/EntryDetailPane.tsx +182 -0
  148. package/src/components/forms/FieldsPanel.tsx +3 -1
  149. package/src/components/forms/FormSchemaPane.tsx +192 -0
  150. package/src/components/seo/SeoEditorPane.tsx +533 -0
  151. package/src/hooks/useIdleLogout.ts +129 -0
  152. package/src/lib/api.ts +8 -2
  153. package/src/lib/post-types-service.ts +129 -0
  154. package/src/router/index.ts +25 -4
  155. package/src/views/CollectionList.tsx +158 -110
  156. package/src/views/Forms.tsx +154 -126
  157. package/src/views/MediaBrowser.tsx +28 -5
  158. package/src/views/Posts/PostTypeEditor.tsx +568 -0
  159. package/src/views/Posts/PostTypesView.tsx +5 -4
  160. package/src/views/SEO.tsx +2 -1
  161. package/src/views/Settings.tsx +7 -2
  162. package/src/views/Users.tsx +23 -2
  163. package/src/views/page-builder/BuilderSectionsPanel.tsx +304 -0
  164. package/src/views/page-builder/PageBuilder.tsx +69 -2
  165. package/src/views/page-builder/PageTemplates.tsx +340 -57
  166. package/src/views/seo/ContentTab.tsx +113 -80
  167. package/src/views/settings/AccessProtectionCard.tsx +83 -53
  168. package/src/views/settings/SecurityTab.tsx +25 -3
  169. package/src/views/settings/SessionPolicyCard.tsx +45 -9
  170. package/src/views/settings/useSecuritySettings.ts +78 -22
  171. package/dist/components/forms/FormSchemaDrawer.d.ts +0 -9
  172. package/dist/components/forms/FormSchemaDrawer.d.ts.map +0 -1
  173. package/dist/components/forms/FormSchemaDrawer.js +0 -99
  174. package/dist/components/forms/FormSchemaDrawer.js.map +0 -1
  175. package/dist/components/seo/SeoEditorDrawer.d.ts +0 -8
  176. package/dist/components/seo/SeoEditorDrawer.d.ts.map +0 -1
  177. package/dist/components/seo/SeoEditorDrawer.js +0 -172
  178. package/dist/components/seo/SeoEditorDrawer.js.map +0 -1
  179. package/src/components/forms/FormSchemaDrawer.tsx +0 -192
  180. package/src/components/seo/SeoEditorDrawer.tsx +0 -529
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsPanel.js","sourceRoot":"","sources":["../../../src/components/forms/FieldsPanel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AACH,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,GAEX,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,WAAW,EACX,2BAA2B,GAC5B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjE,MAAM,WAAW,GAA8C;IAC7D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;IAC/C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACtC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE;IACvC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE;IAC7C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE;CACjD,CAAA;AAED,MAAM,YAAY,GAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;AAExE,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,MAAM;IACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;IACvF,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,cAAc,GAMf;IACC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAE/D,MAAM,OAAO,GAAG,UAAU,CACxB,SAAS,CAAC,aAAa,EAAE,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,EACnE,SAAS,CAAC,cAAc,EAAE,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,CAAC,CAC7E,CAAA;IAED,SAAS,aAAa,CAAC,KAAmB;QACxC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAC9B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;YAAE,OAAM;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3C,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACvC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,OAAM;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,KAAM,CAAC,CAAA;QAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,SAAS,WAAW,CAAC,EAAU,EAAE,KAAyB;QACxD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,SAAS,WAAW,CAAC,EAAU;QAC7B,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC3C,IAAI,SAAS,KAAK,EAAE;YAAE,YAAY,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,SAAS,QAAQ;QACf,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QACnB,MAAM,IAAI,GAAc;YACtB,EAAE;YACF,KAAK,EAAE,WAAW;YAClB,GAAG,EAAE,SAAS,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,MAAM,CAAC,MAAM;SACzB,CAAA;QACD,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;QAC3B,YAAY,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACvB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,KAAC,eAAe,IACd,KAAK,EAAC,eAAe,EACrB,WAAW,EAAC,mDAAmD,GAC/D,CACH,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,YACvF,KAAC,eAAe,IAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,2BAA2B,YACpF,aAAI,SAAS,EAAC,WAAW,YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,KAAC,gBAAgB,IAEf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,EAAE,EAC/B,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAC/E,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EACjD,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,IANhC,KAAK,CAAC,EAAE,CAOb,CACH,CAAC,GACC,GACW,GACP,CACd,EAED,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,+KAA+K,aAEzL,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,wBAAe,iBAEjC,IACL,CACP,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,KAAK,EACL,OAAO,EACP,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,QAAQ,GAQT;IACC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;QAC3F,EAAE,EAAE,KAAK,CAAC,EAAE;KACb,CAAC,CAAA;IACF,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,UAAU;QACV,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;KACpC,CAAA;IACD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEtD,OAAO,CACL,aAAI,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,YAC/B,eACE,SAAS,EAAE,2CAA2C,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,aAEhI,eAAK,SAAS,EAAC,qCAAqC,aAClD,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6JAA6J,gBAC3J,mBAAmB,KAAK,CAAC,KAAK,EAAE,KACxC,UAAU,KACV,SAAS,YAEb,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,wBAAe,GACzC,EAET,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,kDAAkD,mBAC7C,OAAO,YAEtB,gBAAM,SAAS,EAAC,SAAS,aACvB,eAAM,SAAS,EAAC,oDAAoD,YACjE,KAAK,CAAC,KAAK,IAAI,YAAY,GACvB,EACP,eAAM,SAAS,EAAC,wDAAwD,YACrE,KAAK,CAAC,GAAG,GACL,IACF,GACA,EAET,KAAC,cAAc,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,EACnC,KAAK,CAAC,QAAQ,IAAI,CACjB,eAAM,SAAS,EAAC,wFAAwF,yBAEjG,CACR,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,0IAA0I,gBACxI,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,YAE7D,KAAC,WAAW,IACV,SAAS,EAAE,gCAAgC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,wBAExE,GACK,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,2IAA2I,gBACzI,UAAU,KAAK,CAAC,KAAK,EAAE,YAEnC,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,wBAAe,GACnC,IACL,EAEL,OAAO,IAAI,CACV,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,GAClB,CACH,IACG,GACH,CACN,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,GAMT;IACC,MAAM,KAAK,GAAG,KAAK,EAAE,CAAA;IACrB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAExE,OAAO,CACL,eAAK,SAAS,EAAC,4CAA4C,aACzD,eAAK,SAAS,EAAC,uCAAuC,aACpD,KAAC,OAAO,IAAC,KAAK,EAAC,OAAO,YACpB,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACd,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;gCAC5B,iEAAiE;gCACjE,iDAAiD;gCACjD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gCACvC,MAAM,KAAK,GAAuB,EAAE,KAAK,EAAE,CAAA;gCAC3C,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oCAC7D,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;gCAC/B,CAAC;gCACD,QAAQ,CAAC,KAAK,CAAC,CAAA;4BACjB,CAAC,EACD,SAAS,EAAC,0KAA0K,GACpL,GACM,EACV,KAAC,OAAO,IACN,KAAK,EAAC,KAAK,EACX,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,SAAS,YAEhF,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,CAAC,GAAG,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAC9D,SAAS,EAAC,oLAAoL,GAC9L,GACM,EACV,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,YACnB,iBACE,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAsB,EAAE,CAAC,EACpE,SAAS,EAAC,0KAA0K,YAEnL,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,iBAAsB,KAAK,EAAE,CAAC,CAAC,KAAK,YACjC,CAAC,CAAC,KAAK,IADG,CAAC,CAAC,KAAK,CAEX,CACV,CAAC,GACK,GACD,EACV,KAAC,OAAO,IAAC,KAAK,EAAC,aAAa,YAC1B,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,EAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAC1D,SAAS,EAAC,0KAA0K,GACpL,GACM,IACN,EAEN,KAAC,OAAO,IAAC,KAAK,EAAC,WAAW,YACxB,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EACvD,SAAS,EAAC,0KAA0K,GACpL,GACM,EAET,YAAY,IAAI,CACf,KAAC,OAAO,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,cAAc,YAC1C,mBACE,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,QAAQ,CAAC;wBACP,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;6BACpB,KAAK,CAAC,IAAI,CAAC;6BACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;6BAC1B,MAAM,CAAC,OAAO,CAAC;6BACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;qBACzD,CAAC,EAEJ,SAAS,EAAC,0KAA0K,GACpL,GACM,CACX,EAED,eAAK,SAAS,EAAC,mCAAmC,aAChD,gBAAO,OAAO,EAAE,KAAK,EAAE,SAAS,EAAC,qCAAqC,yBAE9D,EACR,KAAC,MAAM,IACL,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,KAAK,CAAC,QAAQ,EACvB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,qBAChC,KAAK,GACtB,IACE,IACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EACf,KAAK,EACL,IAAI,EACJ,QAAQ,GAKT;IACC,OAAO,CACL,iBAAO,SAAS,EAAC,OAAO,aACtB,eAAM,SAAS,EAAC,sDAAsD,YAAE,KAAK,GAAQ,EACpF,QAAQ,EACR,IAAI,IAAI,eAAM,SAAS,EAAC,iCAAiC,YAAE,IAAI,GAAQ,IAClE,CACT,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"FieldsPanel.js","sourceRoot":"","sources":["../../../src/components/forms/FieldsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { FormListItem } from '../../lib/forms-service.js';
2
+ export declare function FormSchemaPane({ form, onClose, onSaved, }: {
3
+ form: FormListItem;
4
+ onClose: () => void;
5
+ /** Called after a schema/settings change so the list can refetch. */
6
+ onSaved?: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=FormSchemaPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSchemaPane.d.ts","sourceRoot":"","sources":["../../../src/components/forms/FormSchemaPane.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAiB9D,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,OAAO,GACR,EAAE;IACD,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,2CAoJA"}
@@ -0,0 +1,95 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * Form Schema pane — inline inspector opened from the Forms list "Schema"
5
+ * action (design's 390px schema panel; previously the `FormSchemaDrawer`
6
+ * overlay). Four tabs: Fields (versioned schema editor), Embed (public
7
+ * snippets + domain restrictions), Notifications (email settings),
8
+ * Integrations (CRM webhooks / Zapier).
9
+ *
10
+ * Saving the Fields tab creates a new schema version server-side; existing
11
+ * submissions keep referencing the version they were captured against, so
12
+ * historical entries never break when the schema changes.
13
+ */
14
+ import * as Tabs from '@radix-ui/react-tabs';
15
+ import { useEffect, useState } from 'react';
16
+ import { toast } from 'sonner';
17
+ import { fetchFormSchema, saveFormSchema } from '../../lib/forms-service.js';
18
+ import { emitFormsChanged } from '../../lib/forms-events.js';
19
+ import { ConfirmDialog } from '../ui/ConfirmDialog.js';
20
+ import { InspectorPaneBody, InspectorPaneFooter, InspectorPaneHeader } from '../ui/InspectorPane.js';
21
+ import { FieldsPanel } from './FieldsPanel.js';
22
+ import { EmbedPanel } from './EmbedPanel.js';
23
+ import { NotificationsPanel } from './NotificationsPanel.js';
24
+ import { WebhooksPanel } from './WebhooksPanel.js';
25
+ import { FormsErrorState, FormsLoading, btnPrimary } from './primitives.js';
26
+ const TABS = [
27
+ { id: 'fields', label: 'Fields' },
28
+ { id: 'embed', label: 'Embed' },
29
+ { id: 'notifications', label: 'Notifications' },
30
+ { id: 'integrations', label: 'Integrations' },
31
+ ];
32
+ export function FormSchemaPane({ form, onClose, onSaved, }) {
33
+ const [tab, setTab] = useState('fields');
34
+ const [fields, setFields] = useState([]);
35
+ const [loading, setLoading] = useState(false);
36
+ const [error, setError] = useState(null);
37
+ const [dirty, setDirty] = useState(false);
38
+ const [saving, setSaving] = useState(false);
39
+ const [confirmDiscard, setConfirmDiscard] = useState(false);
40
+ const formId = form.id;
41
+ const hasSubmissions = (form.totalEntries ?? 0) > 0;
42
+ useEffect(() => {
43
+ setTab('fields');
44
+ setDirty(false);
45
+ setLoading(true);
46
+ setError(null);
47
+ let active = true;
48
+ fetchFormSchema(formId)
49
+ .then((schema) => {
50
+ if (active)
51
+ setFields(schema.fields);
52
+ })
53
+ .catch((e) => {
54
+ if (active)
55
+ setError(e instanceof Error ? e.message : 'Failed to load schema');
56
+ })
57
+ .finally(() => {
58
+ if (active)
59
+ setLoading(false);
60
+ });
61
+ return () => {
62
+ active = false;
63
+ };
64
+ }, [formId]);
65
+ function handleFieldsChange(next) {
66
+ setFields(next);
67
+ setDirty(true);
68
+ }
69
+ async function handleSave() {
70
+ setSaving(true);
71
+ const res = await saveFormSchema(formId, fields.map((f, i) => ({ ...f, sortOrder: i })));
72
+ setSaving(false);
73
+ if (res.error) {
74
+ toast.error(res.error);
75
+ return;
76
+ }
77
+ setDirty(false);
78
+ toast.success('Schema saved.');
79
+ emitFormsChanged();
80
+ onSaved?.();
81
+ }
82
+ function requestClose() {
83
+ if (dirty) {
84
+ setConfirmDiscard(true);
85
+ return;
86
+ }
87
+ onClose();
88
+ }
89
+ return (_jsxs(_Fragment, { children: [_jsxs(InspectorPaneHeader, { onClose: requestClose, closeLabel: "Close schema panel", children: [_jsx("div", { className: "truncate text-[13.5px] font-semibold text-[var(--txt)]", children: form.name }), _jsxs("div", { className: "mt-0.5 truncate font-mono text-[11.5px] text-[var(--muted)]", children: ["/", form.slug] })] }), _jsxs(Tabs.Root, { value: tab, onValueChange: setTab, className: "flex min-h-0 flex-1 flex-col", children: [_jsx(Tabs.List, { className: "flex shrink-0 gap-0.5 overflow-x-auto border-b border-[var(--bdr)] px-2", "aria-label": "Form schema sections", children: TABS.map((t) => (_jsx(Tabs.Trigger, { value: t.id, className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary focus-visible:ring-ring -mb-px border-b-2 border-transparent px-2.5 py-2 text-[12.5px] font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:outline-none", children: t.label }, t.id))) }), _jsx(InspectorPaneBody, { children: _jsxs("div", { className: "px-4 py-3.5", children: [_jsx(Tabs.Content, { value: "fields", tabIndex: -1, children: loading ? (_jsx(FormsLoading, { label: "Loading schema\u2026" })) : error ? (_jsx(FormsErrorState, { message: error, onRetry: () => setTab('fields') })) : (_jsx(FieldsPanel, { fields: fields, onChange: handleFieldsChange, hasSubmissions: hasSubmissions })) }), _jsx(Tabs.Content, { value: "embed", tabIndex: -1, children: _jsx(EmbedPanel, { formId: formId, slug: form.slug, status: form.status }) }), _jsx(Tabs.Content, { value: "notifications", tabIndex: -1, children: _jsx(NotificationsPanel, { formId: formId, onChanged: onSaved }) }), _jsx(Tabs.Content, { value: "integrations", tabIndex: -1, children: _jsx(WebhooksPanel, { formId: formId, formSlug: form.slug }) })] }) }), tab === 'fields' && (_jsx(InspectorPaneFooter, { children: _jsx("button", { type: "button", className: `${btnPrimary} w-full`, onClick: () => void handleSave(), disabled: saving || loading, children: saving ? 'Saving…' : 'Save Schema' }) }))] }), _jsx(ConfirmDialog, { open: confirmDiscard, onClose: () => setConfirmDiscard(false), onConfirm: () => {
90
+ setDirty(false);
91
+ setConfirmDiscard(false);
92
+ onClose();
93
+ }, title: "Discard unsaved changes?", description: "You have unsaved schema changes. Closing now will discard them.", confirmLabel: "Discard", cancelLabel: "Keep editing", destructive: true })] }));
94
+ }
95
+ //# sourceMappingURL=FormSchemaPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSchemaPane.js","sourceRoot":"","sources":["../../../src/components/forms/FormSchemaPane.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface SeoEditorPaneProps {
2
+ entityType: string;
3
+ entityId: string;
4
+ onClose: () => void;
5
+ /** Called after a successful save so the list can refetch. */
6
+ onSaved?: () => void;
7
+ }
8
+ export declare function SeoEditorPane({ entityType, entityId, onClose, onSaved }: SeoEditorPaneProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=SeoEditorPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeoEditorPane.d.ts","sourceRoot":"","sources":["../../../src/components/seo/SeoEditorPane.tsx"],"names":[],"mappings":"AAqHA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CAuZ3F"}
@@ -0,0 +1,175 @@
1
+ 'use client';
2
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * Inline SEO editor pane — design-parity replacement for the old
5
+ * `SeoEditorDrawer` overlay. Rendered inside an `<InspectorPane>` beside the
6
+ * Content SEO list (380px in the handoff). Same fields, validation, AI
7
+ * assists, and `updateSeoFields` save path as the drawer; only the
8
+ * presentation pattern changed.
9
+ */
10
+ import { cloneElement, isValidElement, useEffect, useId, useState } from 'react';
11
+ import { Sparkles, Check, Loader2, Wand2 } from 'lucide-react';
12
+ import { toast } from 'sonner';
13
+ import { fetchSeoContentRecord, updateSeoFields, generateSeoField, SEO_SCHEMA_TYPES, } from '../../lib/seo-service.js';
14
+ import { fixBrandVoiceContent } from '../../lib/brand-voice-client.js';
15
+ import { BrandVoiceAlignmentBadge } from '../BrandVoiceAlignmentBadge.js';
16
+ import { InspectorPaneBody, InspectorPaneFooter, InspectorPaneHeader, InspectorPaneSection, } from '../ui/InspectorPane.js';
17
+ import { Toggle } from '../ui/Toggle.js';
18
+ import { SeoLoading, SeoErrorState, gradeMeta } from './primitives.js';
19
+ const META_TITLE_MAX = 60;
20
+ const META_DESC_MAX = 160;
21
+ const KEY_TAKEAWAY_MAX = 240;
22
+ const LLMS_DESC_MAX = 160;
23
+ function seoBrandChannel(field) {
24
+ if (field === 'metaDescription' || field === 'ogDescription')
25
+ return 'meta_description';
26
+ return undefined;
27
+ }
28
+ const inputCls = 'w-full rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] px-2.5 py-1.5 text-[12.5px] text-[var(--txt)] placeholder:text-[var(--muted)] focus:border-[var(--acc)] focus:outline-none';
29
+ function CharCount({ value, max }) {
30
+ const over = value.length > max;
31
+ return (_jsxs("span", { className: `text-[11px] ${over ? 'text-[var(--err)]' : 'text-[var(--muted)]'}`, children: [value.length, "/", max] }));
32
+ }
33
+ function PaneField({ label, children, hint, }) {
34
+ // Associate the visible label with its control for screen readers. We inject
35
+ // a generated id onto the single child input/textarea (unless it already has
36
+ // one) and point the <label htmlFor> at it.
37
+ const generatedId = useId();
38
+ let control = children;
39
+ if (isValidElement(children) && children.props.id == null) {
40
+ control = cloneElement(children, { id: generatedId });
41
+ }
42
+ const controlId = isValidElement(control) ? control.props.id : undefined;
43
+ return (_jsxs("div", { className: "mb-3 last:mb-0", children: [_jsxs("div", { className: "mb-1 flex items-center justify-between gap-2", children: [_jsx("label", { htmlFor: controlId, className: "text-[11.5px] font-medium text-[var(--sub)]", children: label }), hint] }), control] }));
44
+ }
45
+ function PaneToggleRow({ label, hint, checked, onCheckedChange, }) {
46
+ return (_jsxs("div", { className: "flex items-center justify-between gap-3 py-1.5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-[12.5px] font-medium text-[var(--txt)]", children: label }), _jsx("div", { className: "text-[11px] text-[var(--muted)]", children: hint })] }), _jsx(Toggle, { checked: checked, onCheckedChange: onCheckedChange, "aria-label": label })] }));
47
+ }
48
+ export function SeoEditorPane({ entityType, entityId, onClose, onSaved }) {
49
+ const [record, setRecord] = useState(null);
50
+ const [loading, setLoading] = useState(true);
51
+ const [error, setError] = useState(null);
52
+ const [saving, setSaving] = useState(false);
53
+ const [aiBusy, setAiBusy] = useState(null);
54
+ const [aiFixBusy, setAiFixBusy] = useState(null);
55
+ const [aiAlignments, setAiAlignments] = useState({});
56
+ const [form, setForm] = useState({});
57
+ useEffect(() => {
58
+ let alive = true;
59
+ setLoading(true);
60
+ setError(null);
61
+ fetchSeoContentRecord(entityType, entityId)
62
+ .then((rec) => {
63
+ if (!alive)
64
+ return;
65
+ if (!rec) {
66
+ setError('Could not load this record.');
67
+ return;
68
+ }
69
+ setRecord(rec);
70
+ setForm({
71
+ metaTitle: rec.metaTitle ?? '',
72
+ metaDescription: rec.metaDescription ?? '',
73
+ canonicalUrl: rec.canonicalUrl ?? '',
74
+ focusKeyword: rec.focusKeyword ?? '',
75
+ keyTakeaway: rec.keyTakeaway ?? '',
76
+ ogTitle: rec.ogTitle ?? '',
77
+ ogDescription: rec.ogDescription ?? '',
78
+ structuredDataType: rec.structuredDataType ?? 'WebPage',
79
+ noindex: rec.noindex,
80
+ nofollow: rec.nofollow,
81
+ llmsInclude: rec.llmsInclude ?? 'AUTO',
82
+ llmsDescription: rec.llmsDescription ?? '',
83
+ llmsSection: rec.llmsSection ?? '',
84
+ llmsOptional: rec.llmsOptional ?? false,
85
+ });
86
+ })
87
+ .catch((e) => alive && setError(e instanceof Error ? e.message : 'Failed to load'))
88
+ .finally(() => alive && setLoading(false));
89
+ return () => {
90
+ alive = false;
91
+ };
92
+ }, [entityType, entityId]);
93
+ const update = (patch) => setForm((f) => ({ ...f, ...patch }));
94
+ async function handleAiGenerate(field) {
95
+ setAiBusy(field);
96
+ try {
97
+ const result = await generateSeoField(field, { entityType, entityId });
98
+ if (result.unavailable) {
99
+ toast.error('AI is not configured. Add an AI provider to enable suggestions.');
100
+ return;
101
+ }
102
+ if (result.text) {
103
+ update({ [field]: result.text });
104
+ if (result.brandAlignment) {
105
+ setAiAlignments((prev) => ({ ...prev, [field]: result.brandAlignment }));
106
+ }
107
+ toast.success('AI suggestion applied — review before saving.');
108
+ }
109
+ else {
110
+ toast.error('No suggestion was returned.');
111
+ }
112
+ }
113
+ catch {
114
+ toast.error('AI request failed.');
115
+ }
116
+ finally {
117
+ setAiBusy(null);
118
+ }
119
+ }
120
+ async function handleAiFix(field) {
121
+ const text = form[field] ?? '';
122
+ if (!text.trim())
123
+ return;
124
+ setAiFixBusy(field);
125
+ try {
126
+ const res = await fixBrandVoiceContent({
127
+ content: text,
128
+ channel: seoBrandChannel(field),
129
+ });
130
+ if (!res.ok || !res.result) {
131
+ toast.error(res.error ?? 'Could not fix copy for brand voice.');
132
+ return;
133
+ }
134
+ update({ [field]: res.result.text });
135
+ setAiAlignments((prev) => ({ ...prev, [field]: res.result.afterScore }));
136
+ toast.success('Copy adjusted to match brand voice.');
137
+ }
138
+ finally {
139
+ setAiFixBusy(null);
140
+ }
141
+ }
142
+ function alignmentRow(field) {
143
+ const alignment = aiAlignments[field];
144
+ if (!alignment)
145
+ return null;
146
+ const fixing = aiFixBusy === field;
147
+ return (_jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-2", children: [_jsx(BrandVoiceAlignmentBadge, { alignment: alignment, compact: true }), alignment.score < 85 && (_jsxs("button", { type: "button", onClick: () => void handleAiFix(field), disabled: fixing || aiBusy !== null, className: "inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-[11.5px] font-medium text-[var(--acc)] transition-colors duration-[var(--motion-fast)] hover:bg-[var(--acc-l)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:opacity-60", children: [fixing ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", "aria-hidden": true })) : (_jsx(Wand2, { className: "h-3.5 w-3.5", "aria-hidden": true })), "Fix for brand voice"] }))] }));
148
+ }
149
+ async function handleSave() {
150
+ setSaving(true);
151
+ const res = await updateSeoFields(entityType, entityId, form);
152
+ setSaving(false);
153
+ if (res.error) {
154
+ toast.error(res.error);
155
+ return;
156
+ }
157
+ toast.success('SEO fields saved.');
158
+ onSaved?.();
159
+ }
160
+ const title = form.metaTitle || record?.title || 'Untitled';
161
+ const desc = form.metaDescription || 'No meta description set. Search engines may generate one.';
162
+ const url = record?.url ?? '';
163
+ function aiButton(field) {
164
+ return (_jsxs("button", { type: "button", onClick: () => void handleAiGenerate(field), disabled: aiBusy !== null, className: "inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[11px] font-medium text-[var(--acc)] transition-colors duration-[var(--motion-fast)] hover:bg-[var(--acc-l)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:opacity-60", children: [_jsx(Sparkles, { className: `h-3 w-3 ${aiBusy === field ? 'animate-pulse' : ''}`, "aria-hidden": true }), aiBusy === field ? 'Generating…' : 'AI Generate'] }));
165
+ }
166
+ return (_jsxs(_Fragment, { children: [_jsxs(InspectorPaneHeader, { onClose: onClose, closeLabel: "Close SEO editor", children: [_jsx("div", { className: "truncate text-[13.5px] font-semibold text-[var(--txt)]", children: record?.title ?? 'Edit SEO' }), url && _jsx("div", { className: "mt-0.5 truncate text-[11.5px] text-[var(--muted)]", children: url })] }), _jsx(InspectorPaneBody, { children: loading ? (_jsx("div", { className: "px-4 py-3.5", children: _jsx(SeoLoading, {}) })) : error ? (_jsx("div", { className: "px-4 py-3.5", children: _jsx(SeoErrorState, { message: error }) })) : record ? (_jsxs(_Fragment, { children: [_jsx(InspectorPaneSection, { title: "Google Preview", children: _jsxs("div", { className: "rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] p-3", children: [_jsx("p", { className: "truncate text-[11.5px] text-[var(--suc)]", children: url }), _jsx("p", { className: "text-[15px] leading-snug text-[var(--acc)]", children: title }), _jsx("p", { className: "line-clamp-2 text-[12px] text-[var(--sub)]", children: desc })] }) }), _jsxs(InspectorPaneSection, { title: "Meta Tags", children: [_jsx(PaneField, { label: "Meta title", hint: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(CharCount, { value: form.metaTitle ?? '', max: META_TITLE_MAX }), aiButton('metaTitle')] }), children: _jsx("input", { className: inputCls, value: form.metaTitle ?? '', onChange: (e) => update({ metaTitle: e.target.value }), placeholder: "Page title for search results" }) }), _jsx(PaneField, { label: "Meta description", hint: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(CharCount, { value: form.metaDescription ?? '', max: META_DESC_MAX }), aiButton('metaDescription')] }), children: _jsx("textarea", { className: `${inputCls} min-h-20 resize-y`, value: form.metaDescription ?? '', onChange: (e) => update({ metaDescription: e.target.value }), placeholder: "Short summary shown under the title in search results" }) }), alignmentRow('metaDescription')] }), _jsxs(InspectorPaneSection, { title: "Focus Keyword", children: [_jsx(PaneField, { label: "Target keyword", hint: aiButton('focusKeyword'), children: _jsx("input", { className: inputCls, value: form.focusKeyword ?? '', onChange: (e) => update({ focusKeyword: e.target.value }), placeholder: "Primary keyword this page targets" }) }), _jsx(PaneField, { label: "Key takeaway", hint: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(CharCount, { value: form.keyTakeaway ?? '', max: KEY_TAKEAWAY_MAX }), aiButton('keyTakeaway')] }), children: _jsx("textarea", { className: `${inputCls} min-h-16 resize-y`, value: form.keyTakeaway ?? '', onChange: (e) => update({ keyTakeaway: e.target.value }), placeholder: "One or two sentences AI answer engines can quote \u2014 what is this page about?" }) })] }), _jsxs(InspectorPaneSection, { title: "Open Graph", subtitle: "Social sharing", children: [_jsx(PaneField, { label: "OG title", hint: aiButton('ogTitle'), children: _jsx("input", { className: inputCls, value: form.ogTitle ?? '', onChange: (e) => update({ ogTitle: e.target.value }), placeholder: form.metaTitle || 'Title when shared on social media' }) }), _jsx(PaneField, { label: "OG description", hint: aiButton('ogDescription'), children: _jsx("textarea", { className: `${inputCls} min-h-16 resize-y`, value: form.ogDescription ?? '', onChange: (e) => update({ ogDescription: e.target.value }), placeholder: form.metaDescription || 'Description when shared on social media' }) }), alignmentRow('ogDescription'), _jsxs("div", { className: "mt-3 overflow-hidden rounded-[7px] border border-[var(--bdr)]", children: [record.ogImage ? (
167
+ // eslint-disable-next-line @next/next/no-img-element
168
+ _jsx("img", { src: record.ogImage, alt: `Social preview for ${record.title}`, className: "aspect-[1200/630] w-full bg-[var(--bg)] object-cover" })) : (_jsx("div", { className: "flex aspect-[1200/630] w-full items-center justify-center bg-[var(--bg)] text-[12px] text-[var(--muted)]", children: "No OG image set" })), _jsxs("div", { className: "p-2.5", children: [_jsx("p", { className: "truncate text-[10.5px] text-[var(--muted)] uppercase", children: url.replace(/^https?:\/\//, '').split('/')[0] }), _jsx("p", { className: "truncate text-[12.5px] font-medium text-[var(--txt)]", children: form.ogTitle || title }), _jsx("p", { className: "line-clamp-1 text-[12px] text-[var(--sub)]", children: form.ogDescription || desc })] })] })] }), _jsxs(InspectorPaneSection, { title: "Technical SEO", children: [_jsx(PaneField, { label: "Canonical URL", children: _jsx("input", { className: inputCls, value: form.canonicalUrl ?? '', onChange: (e) => update({ canonicalUrl: e.target.value }), placeholder: url || 'https://example.com/page' }) }), !form.canonicalUrl?.trim() && url ? (_jsxs("p", { className: "mb-3 text-[11px] text-[var(--muted)]", children: ["Auto-canonical: ", record.canonicalUrl ?? url] })) : null, _jsx(PaneField, { label: "Schema type", children: _jsx("select", { className: inputCls, value: form.structuredDataType ?? 'WebPage', onChange: (e) => update({ structuredDataType: e.target.value }), children: SEO_SCHEMA_TYPES.map((t) => (_jsx("option", { value: t, children: t }, t))) }) }), _jsx(PaneToggleRow, { label: "No-index", hint: "Hide this page from search engines", checked: !!form.noindex, onCheckedChange: (v) => update({ noindex: v }) }), _jsx(PaneToggleRow, { label: "No-follow", hint: "Tell crawlers not to follow links on this page", checked: !!form.nofollow, onCheckedChange: (v) => update({ nofollow: v }) })] }), _jsxs(InspectorPaneSection, { title: "AI Discovery", subtitle: "llms.txt", children: [_jsxs("p", { className: "mb-3 text-[11px] text-[var(--muted)]", children: ["Controls how this page appears in the curated ", _jsx("code", { children: "llms.txt" }), " guide that AI agents read. It does not affect search ranking."] }), _jsx(PaneField, { label: "Include in llms.txt", children: _jsxs("select", { className: inputCls, value: form.llmsInclude ?? 'AUTO', onChange: (e) => update({ llmsInclude: e.target.value }), children: [_jsx("option", { value: "AUTO", children: "Auto \u2014 include when eligible" }), _jsx("option", { value: "ALWAYS", children: "Always \u2014 pin it in" }), _jsx("option", { value: "NEVER", children: "Never \u2014 exclude" })] }) }), _jsx(PaneField, { label: "Agent description", hint: _jsx(CharCount, { value: form.llmsDescription ?? '', max: LLMS_DESC_MAX }), children: _jsx("textarea", { className: `${inputCls} min-h-16 resize-y`, value: form.llmsDescription ?? '', onChange: (e) => update({ llmsDescription: e.target.value }), placeholder: form.keyTakeaway ||
169
+ form.metaDescription ||
170
+ 'One line for an AI agent — what this page covers and why it matters.' }) }), _jsx(PaneField, { label: "Section", children: _jsx("input", { className: inputCls, value: form.llmsSection ?? '', onChange: (e) => update({ llmsSection: e.target.value }), placeholder: "Defaults to the content type" }) }), _jsx(PaneToggleRow, { label: "Optional", hint: "Group under \u201COptional\u201D \u2014 agents skip these first when context is tight", checked: !!form.llmsOptional, onCheckedChange: (v) => update({ llmsOptional: v }) })] }), _jsx(InspectorPaneSection, { children: (() => {
171
+ const meta = gradeMeta(record.seoGrade);
172
+ return (_jsxs("div", { className: `flex items-center gap-2 rounded-[7px] px-3 py-2 text-[12.5px] ${meta.bg} ${meta.text}`, children: [_jsx(Check, { className: "h-4 w-4 shrink-0", "aria-hidden": true }), _jsxs("span", { children: ["Current SEO score: ", _jsx("span", { className: "font-medium", children: record.seoScore }), " (", meta.label, ")"] })] }));
173
+ })() })] })) : null }), _jsx(InspectorPaneFooter, { children: _jsx("button", { type: "button", onClick: () => void handleSave(), disabled: saving || loading || !!error, className: "w-full rounded-[7px] bg-[var(--acc)] px-3 py-2 text-[13px] font-semibold text-white transition-colors duration-[var(--motion-fast)] hover:opacity-90 focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50", children: saving ? 'Saving…' : 'Save Changes' }) })] }));
174
+ }
175
+ //# sourceMappingURL=SeoEditorPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeoEditorPane.js","sourceRoot":"","sources":["../../../src/components/seo/SeoEditorPane.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { HTMLAttributes, ReactNode } from 'react';
2
2
  import { type VariantProps } from '../../lib/cv.js';
3
3
  declare const badge: (props?: ({
4
- tone?: "warning" | "info" | "primary" | "danger" | "neutral" | "success" | undefined;
4
+ tone?: "warning" | "info" | "success" | "danger" | "neutral" | "primary" | undefined;
5
5
  size?: "sm" | "md" | "lg" | undefined;
6
6
  } & {
7
7
  class?: string | false | null | undefined;
@@ -1,7 +1,7 @@
1
1
  import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
2
  import { type VariantProps } from '../../lib/cv.js';
3
3
  declare const button: (props?: ({
4
- variant?: "link" | "primary" | "secondary" | "danger" | "ghost" | "outline" | undefined;
4
+ variant?: "link" | "danger" | "primary" | "secondary" | "ghost" | "outline" | undefined;
5
5
  size?: "sm" | "md" | "lg" | "icon" | "xs" | undefined;
6
6
  } & {
7
7
  class?: string | false | null | undefined;
@@ -8,7 +8,7 @@ import { type VariantProps } from '../../lib/cv.js';
8
8
  * do not roll per-view status pills.
9
9
  */
10
10
  declare const statusBadge: (props?: ({
11
- tone?: "warning" | "info" | "muted" | "danger" | "neutral" | "success" | undefined;
11
+ tone?: "warning" | "info" | "muted" | "success" | "danger" | "neutral" | undefined;
12
12
  } & {
13
13
  class?: string | false | null | undefined;
14
14
  className?: string | false | null | undefined;
@@ -0,0 +1,33 @@
1
+ export interface UseIdleLogoutOptions {
2
+ enabled: boolean;
3
+ timeoutMs: number;
4
+ onIdle: () => void;
5
+ /**
6
+ * How long before the idle deadline to fire `onWarn` (so the UI can show a
7
+ * "you're about to be signed out" prompt). Ignored unless `onWarn` is set
8
+ * or when it doesn't fit inside `timeoutMs`.
9
+ */
10
+ warningMs?: number;
11
+ /** Fired once when the session enters the warning window. */
12
+ onWarn?: () => void;
13
+ /** Fired when activity resumes after `onWarn` (dismiss the prompt). */
14
+ onWarnCancelled?: () => void;
15
+ }
16
+ /**
17
+ * Signs the user out after `timeoutMs` of no user activity, when enabled by
18
+ * the Settings → Security "Idle auto-logout" policy. Optionally fires a
19
+ * warning `warningMs` before the deadline so the UI can offer a
20
+ * "Stay signed in" action (the returned `stayActive` resets the clock).
21
+ *
22
+ * Deliberately lightweight: activity events only stamp a ref (no state, no
23
+ * re-renders), and a single coarse interval compares the last-activity stamp
24
+ * against the deadline. Returning to a hidden tab re-checks immediately via
25
+ * `visibilitychange`, so a tab left overnight logs out as soon as it's seen
26
+ * (or at the next interval tick) rather than staying signed in.
27
+ *
28
+ * All listeners and the interval are torn down on unmount or when disabled.
29
+ */
30
+ export declare function useIdleLogout(options: UseIdleLogoutOptions): {
31
+ stayActive: () => void;
32
+ };
33
+ //# sourceMappingURL=useIdleLogout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIdleLogout.d.ts","sourceRoot":"","sources":["../../src/hooks/useIdleLogout.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CA2FvF"}
@@ -0,0 +1,99 @@
1
+ 'use client';
2
+ import { useCallback, useEffect, useRef } from 'react';
3
+ /** How often the idle checker wakes up to compare against the deadline. */
4
+ const CHECK_INTERVAL_MS = 30_000;
5
+ /**
6
+ * Signs the user out after `timeoutMs` of no user activity, when enabled by
7
+ * the Settings → Security "Idle auto-logout" policy. Optionally fires a
8
+ * warning `warningMs` before the deadline so the UI can offer a
9
+ * "Stay signed in" action (the returned `stayActive` resets the clock).
10
+ *
11
+ * Deliberately lightweight: activity events only stamp a ref (no state, no
12
+ * re-renders), and a single coarse interval compares the last-activity stamp
13
+ * against the deadline. Returning to a hidden tab re-checks immediately via
14
+ * `visibilitychange`, so a tab left overnight logs out as soon as it's seen
15
+ * (or at the next interval tick) rather than staying signed in.
16
+ *
17
+ * All listeners and the interval are torn down on unmount or when disabled.
18
+ */
19
+ export function useIdleLogout(options) {
20
+ const { enabled, timeoutMs, warningMs } = options;
21
+ // Keep the latest callbacks without re-subscribing listeners on every render.
22
+ const onIdleRef = useRef(options.onIdle);
23
+ onIdleRef.current = options.onIdle;
24
+ const onWarnRef = useRef(options.onWarn);
25
+ onWarnRef.current = options.onWarn;
26
+ const onWarnCancelledRef = useRef(options.onWarnCancelled);
27
+ onWarnCancelledRef.current = options.onWarnCancelled;
28
+ // The effect re-assigns this so `stayActive` always resets the live timer.
29
+ const resetRef = useRef(() => undefined);
30
+ useEffect(() => {
31
+ if (!enabled || timeoutMs <= 0 || typeof window === 'undefined') {
32
+ resetRef.current = () => undefined;
33
+ return;
34
+ }
35
+ let lastActivity = Date.now();
36
+ let fired = false;
37
+ let warned = false;
38
+ // Only meaningful when a warn callback exists and the window fits.
39
+ const effectiveWarningMs = onWarnRef.current && warningMs && warningMs > 0 && warningMs < timeoutMs ? warningMs : 0;
40
+ const markActivity = () => {
41
+ lastActivity = Date.now();
42
+ if (warned && !fired) {
43
+ warned = false;
44
+ onWarnCancelledRef.current?.();
45
+ }
46
+ };
47
+ resetRef.current = markActivity;
48
+ const checkIdle = () => {
49
+ if (fired)
50
+ return;
51
+ const idleFor = Date.now() - lastActivity;
52
+ if (idleFor >= timeoutMs) {
53
+ fired = true;
54
+ onIdleRef.current();
55
+ return;
56
+ }
57
+ if (effectiveWarningMs > 0 && !warned && idleFor >= timeoutMs - effectiveWarningMs) {
58
+ warned = true;
59
+ onWarnRef.current?.();
60
+ }
61
+ };
62
+ // Passive listeners — activity stamping must never block scrolling/typing.
63
+ const activityEvents = [
64
+ 'pointermove',
65
+ 'pointerdown',
66
+ 'keydown',
67
+ 'scroll',
68
+ 'touchstart',
69
+ ];
70
+ for (const event of activityEvents) {
71
+ window.addEventListener(event, markActivity, { passive: true });
72
+ }
73
+ // A tab becoming visible again is NOT user activity — check whether the
74
+ // deadline passed while it was hidden and log out immediately if so.
75
+ const onVisibility = () => {
76
+ if (document.visibilityState === 'visible')
77
+ checkIdle();
78
+ };
79
+ document.addEventListener('visibilitychange', onVisibility);
80
+ // Tick often enough to hit the warning window, not just the deadline.
81
+ const tick = effectiveWarningMs > 0
82
+ ? Math.min(CHECK_INTERVAL_MS, timeoutMs, effectiveWarningMs)
83
+ : Math.min(CHECK_INTERVAL_MS, timeoutMs);
84
+ const interval = window.setInterval(checkIdle, tick);
85
+ return () => {
86
+ resetRef.current = () => undefined;
87
+ for (const event of activityEvents) {
88
+ window.removeEventListener(event, markActivity);
89
+ }
90
+ document.removeEventListener('visibilitychange', onVisibility);
91
+ window.clearInterval(interval);
92
+ };
93
+ }, [enabled, timeoutMs, warningMs]);
94
+ const stayActive = useCallback(() => {
95
+ resetRef.current();
96
+ }, []);
97
+ return { stayActive };
98
+ }
99
+ //# sourceMappingURL=useIdleLogout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIdleLogout.js","sourceRoot":"","sources":["../../src/hooks/useIdleLogout.ts"],"names":[],"mappings":"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"}
package/dist/lib/api.d.ts CHANGED
@@ -11,6 +11,7 @@ export declare function ensureCsrfToken(): Promise<void>;
11
11
  export declare function cmsApi<T = unknown>(endpoint: string, options?: RequestInit): Promise<{
12
12
  data?: T;
13
13
  error?: string;
14
+ code?: string;
14
15
  status: number;
15
16
  }>;
16
17
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,QAEtC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAmBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAcD,wBAAsB,MAAM,CAAC,CAAC,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCvD"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,QAEtC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAmBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAcD,wBAAsB,MAAM,CAAC,CAAC,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA4CtE"}
package/dist/lib/api.js CHANGED
@@ -87,7 +87,13 @@ export async function cmsApi(endpoint, options = {}) {
87
87
  const res = await fetch(url, { ...options, headers, credentials: 'include' });
88
88
  const json = await res.json().catch(() => ({}));
89
89
  if (!res.ok) {
90
- return { error: json.error || `Request failed (${res.status})`, status: res.status };
90
+ return {
91
+ error: json.error || `Request failed (${res.status})`,
92
+ // Machine-readable error discriminator (e.g. IP_LOCKOUT_RISK) set by
93
+ // guard responses so callers can branch without parsing the message.
94
+ code: typeof json.code === 'string' ? json.code : undefined,
95
+ status: res.status,
96
+ };
91
97
  }
92
98
  return { data: json.data ?? json, status: res.status };
93
99
  }