@actuate-media/cms-admin 0.66.0 → 0.68.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 (244) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +36 -9
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/__tests__/components/inspector-pane.test.d.ts +2 -0
  6. package/dist/__tests__/components/inspector-pane.test.d.ts.map +1 -0
  7. package/dist/__tests__/components/inspector-pane.test.js +31 -0
  8. package/dist/__tests__/components/inspector-pane.test.js.map +1 -0
  9. package/dist/__tests__/hooks/useIdleLogout.test.d.ts +2 -0
  10. package/dist/__tests__/hooks/useIdleLogout.test.d.ts.map +1 -0
  11. package/dist/__tests__/hooks/useIdleLogout.test.js +64 -0
  12. package/dist/__tests__/hooks/useIdleLogout.test.js.map +1 -0
  13. package/dist/__tests__/lib/pages-tree.test.d.ts +2 -0
  14. package/dist/__tests__/lib/pages-tree.test.d.ts.map +1 -0
  15. package/dist/__tests__/lib/pages-tree.test.js +173 -0
  16. package/dist/__tests__/lib/pages-tree.test.js.map +1 -0
  17. package/dist/__tests__/lib/post-types-service.test.d.ts +2 -0
  18. package/dist/__tests__/lib/post-types-service.test.d.ts.map +1 -0
  19. package/dist/__tests__/lib/post-types-service.test.js +88 -0
  20. package/dist/__tests__/lib/post-types-service.test.js.map +1 -0
  21. package/dist/__tests__/views/collection-list-nav.render.test.js +43 -5
  22. package/dist/__tests__/views/collection-list-nav.render.test.js.map +1 -1
  23. package/dist/__tests__/views/dashboard.test.js +7 -3
  24. package/dist/__tests__/views/dashboard.test.js.map +1 -1
  25. package/dist/__tests__/views/forms-list.render.test.js +25 -6
  26. package/dist/__tests__/views/forms-list.render.test.js.map +1 -1
  27. package/dist/__tests__/views/media-seo-audit.render.test.d.ts +2 -0
  28. package/dist/__tests__/views/media-seo-audit.render.test.d.ts.map +1 -0
  29. package/dist/__tests__/views/media-seo-audit.render.test.js +102 -0
  30. package/dist/__tests__/views/media-seo-audit.render.test.js.map +1 -0
  31. package/dist/__tests__/views/onboarding-block.render.test.d.ts +2 -0
  32. package/dist/__tests__/views/onboarding-block.render.test.d.ts.map +1 -0
  33. package/dist/__tests__/views/onboarding-block.render.test.js +146 -0
  34. package/dist/__tests__/views/onboarding-block.render.test.js.map +1 -0
  35. package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts +2 -0
  36. package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts.map +1 -0
  37. package/dist/__tests__/views/page-builder-sections-panel.render.test.js +121 -0
  38. package/dist/__tests__/views/page-builder-sections-panel.render.test.js.map +1 -0
  39. package/dist/__tests__/views/page-templates.render.test.d.ts +2 -0
  40. package/dist/__tests__/views/page-templates.render.test.d.ts.map +1 -0
  41. package/dist/__tests__/views/page-templates.render.test.js +105 -0
  42. package/dist/__tests__/views/page-templates.render.test.js.map +1 -0
  43. package/dist/__tests__/views/pages-list-view.test.js +77 -1
  44. package/dist/__tests__/views/pages-list-view.test.js.map +1 -1
  45. package/dist/__tests__/views/post-type-editor.render.test.d.ts +2 -0
  46. package/dist/__tests__/views/post-type-editor.render.test.d.ts.map +1 -0
  47. package/dist/__tests__/views/post-type-editor.render.test.js +102 -0
  48. package/dist/__tests__/views/post-type-editor.render.test.js.map +1 -0
  49. package/dist/__tests__/views/security-settings.render.test.js +85 -4
  50. package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
  51. package/dist/__tests__/views/seo-content-pane.render.test.d.ts +2 -0
  52. package/dist/__tests__/views/seo-content-pane.render.test.d.ts.map +1 -0
  53. package/dist/__tests__/views/seo-content-pane.render.test.js +117 -0
  54. package/dist/__tests__/views/seo-content-pane.render.test.js.map +1 -0
  55. package/dist/actuate-admin.css +1 -1
  56. package/dist/components/collections/EntryDetailPane.d.ts +10 -0
  57. package/dist/components/collections/EntryDetailPane.d.ts.map +1 -0
  58. package/dist/components/collections/EntryDetailPane.js +92 -0
  59. package/dist/components/collections/EntryDetailPane.js.map +1 -0
  60. package/dist/components/forms/FieldsPanel.js +1 -1
  61. package/dist/components/forms/FieldsPanel.js.map +1 -1
  62. package/dist/components/forms/FormSchemaPane.d.ts +8 -0
  63. package/dist/components/forms/FormSchemaPane.d.ts.map +1 -0
  64. package/dist/components/forms/FormSchemaPane.js +95 -0
  65. package/dist/components/forms/FormSchemaPane.js.map +1 -0
  66. package/dist/components/script-tags/ScriptTagEditorPane.d.ts +26 -0
  67. package/dist/components/script-tags/ScriptTagEditorPane.d.ts.map +1 -0
  68. package/dist/components/script-tags/ScriptTagEditorPane.js +160 -0
  69. package/dist/components/script-tags/ScriptTagEditorPane.js.map +1 -0
  70. package/dist/components/seo/SeoEditorPane.d.ts +9 -0
  71. package/dist/components/seo/SeoEditorPane.d.ts.map +1 -0
  72. package/dist/components/seo/SeoEditorPane.js +175 -0
  73. package/dist/components/seo/SeoEditorPane.js.map +1 -0
  74. package/dist/components/ui/Badge.d.ts +1 -1
  75. package/dist/components/ui/Button.d.ts +1 -1
  76. package/dist/components/ui/InspectorPane.d.ts +51 -0
  77. package/dist/components/ui/InspectorPane.d.ts.map +1 -0
  78. package/dist/components/ui/InspectorPane.js +42 -0
  79. package/dist/components/ui/InspectorPane.js.map +1 -0
  80. package/dist/components/ui/StatusBadge.d.ts +1 -1
  81. package/dist/components/ui/index.d.ts +2 -0
  82. package/dist/components/ui/index.d.ts.map +1 -1
  83. package/dist/components/ui/index.js +1 -0
  84. package/dist/components/ui/index.js.map +1 -1
  85. package/dist/hooks/useIdleLogout.d.ts +18 -0
  86. package/dist/hooks/useIdleLogout.d.ts.map +1 -0
  87. package/dist/hooks/useIdleLogout.js +66 -0
  88. package/dist/hooks/useIdleLogout.js.map +1 -0
  89. package/dist/lib/api.d.ts +1 -0
  90. package/dist/lib/api.d.ts.map +1 -1
  91. package/dist/lib/api.js +7 -1
  92. package/dist/lib/api.js.map +1 -1
  93. package/dist/lib/page-editor-service.d.ts +11 -2
  94. package/dist/lib/page-editor-service.d.ts.map +1 -1
  95. package/dist/lib/page-editor-service.js +8 -2
  96. package/dist/lib/page-editor-service.js.map +1 -1
  97. package/dist/lib/pages-tree.d.ts +44 -0
  98. package/dist/lib/pages-tree.d.ts.map +1 -0
  99. package/dist/lib/pages-tree.js +106 -0
  100. package/dist/lib/pages-tree.js.map +1 -0
  101. package/dist/lib/post-types-service.d.ts +44 -0
  102. package/dist/lib/post-types-service.d.ts.map +1 -0
  103. package/dist/lib/post-types-service.js +83 -0
  104. package/dist/lib/post-types-service.js.map +1 -0
  105. package/dist/views/CollectionList.d.ts.map +1 -1
  106. package/dist/views/CollectionList.js +23 -4
  107. package/dist/views/CollectionList.js.map +1 -1
  108. package/dist/views/Dashboard.d.ts.map +1 -1
  109. package/dist/views/Dashboard.js +31 -2
  110. package/dist/views/Dashboard.js.map +1 -1
  111. package/dist/views/Forms.d.ts.map +1 -1
  112. package/dist/views/Forms.js +25 -21
  113. package/dist/views/Forms.js.map +1 -1
  114. package/dist/views/MediaBrowser.d.ts.map +1 -1
  115. package/dist/views/MediaBrowser.js +28 -2
  116. package/dist/views/MediaBrowser.js.map +1 -1
  117. package/dist/views/MediaSeoAudit.d.ts +25 -0
  118. package/dist/views/MediaSeoAudit.d.ts.map +1 -0
  119. package/dist/views/MediaSeoAudit.js +97 -0
  120. package/dist/views/MediaSeoAudit.js.map +1 -0
  121. package/dist/views/Pages/PagesListView.d.ts.map +1 -1
  122. package/dist/views/Pages/PagesListView.js +90 -10
  123. package/dist/views/Pages/PagesListView.js.map +1 -1
  124. package/dist/views/Pages/PagesTreeTable.d.ts +35 -0
  125. package/dist/views/Pages/PagesTreeTable.d.ts.map +1 -0
  126. package/dist/views/Pages/PagesTreeTable.js +28 -0
  127. package/dist/views/Pages/PagesTreeTable.js.map +1 -0
  128. package/dist/views/Posts/PostTypeEditor.d.ts +16 -0
  129. package/dist/views/Posts/PostTypeEditor.d.ts.map +1 -0
  130. package/dist/views/Posts/PostTypeEditor.js +159 -0
  131. package/dist/views/Posts/PostTypeEditor.js.map +1 -0
  132. package/dist/views/Posts/PostTypesView.d.ts +3 -2
  133. package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
  134. package/dist/views/Posts/PostTypesView.js +1 -1
  135. package/dist/views/Posts/PostTypesView.js.map +1 -1
  136. package/dist/views/ScriptTags.d.ts +5 -1
  137. package/dist/views/ScriptTags.d.ts.map +1 -1
  138. package/dist/views/ScriptTags.js +32 -7
  139. package/dist/views/ScriptTags.js.map +1 -1
  140. package/dist/views/dashboard/OnboardingBlock.d.ts +29 -0
  141. package/dist/views/dashboard/OnboardingBlock.d.ts.map +1 -0
  142. package/dist/views/dashboard/OnboardingBlock.js +71 -0
  143. package/dist/views/dashboard/OnboardingBlock.js.map +1 -0
  144. package/dist/views/page-builder/BuilderSectionsPanel.d.ts +20 -0
  145. package/dist/views/page-builder/BuilderSectionsPanel.d.ts.map +1 -0
  146. package/dist/views/page-builder/BuilderSectionsPanel.js +105 -0
  147. package/dist/views/page-builder/BuilderSectionsPanel.js.map +1 -0
  148. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
  149. package/dist/views/page-builder/PageBuilder.js +51 -2
  150. package/dist/views/page-builder/PageBuilder.js.map +1 -1
  151. package/dist/views/page-builder/PageTemplates.d.ts.map +1 -1
  152. package/dist/views/page-builder/PageTemplates.js +113 -6
  153. package/dist/views/page-builder/PageTemplates.js.map +1 -1
  154. package/dist/views/page-editor/PageSectionEditor.d.ts +7 -1
  155. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  156. package/dist/views/page-editor/PageSectionEditor.js +3 -3
  157. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  158. package/dist/views/page-editor/PageSettingsModal.d.ts +1 -1
  159. package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
  160. package/dist/views/page-editor/PageSettingsModal.js +42 -3
  161. package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
  162. package/dist/views/seo/ContentTab.d.ts.map +1 -1
  163. package/dist/views/seo/ContentTab.js +22 -6
  164. package/dist/views/seo/ContentTab.js.map +1 -1
  165. package/dist/views/settings/AccessProtectionCard.d.ts +5 -1
  166. package/dist/views/settings/AccessProtectionCard.d.ts.map +1 -1
  167. package/dist/views/settings/AccessProtectionCard.js +13 -10
  168. package/dist/views/settings/AccessProtectionCard.js.map +1 -1
  169. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  170. package/dist/views/settings/SecurityTab.js +3 -3
  171. package/dist/views/settings/SecurityTab.js.map +1 -1
  172. package/dist/views/settings/SessionPolicyCard.d.ts +1 -2
  173. package/dist/views/settings/SessionPolicyCard.d.ts.map +1 -1
  174. package/dist/views/settings/SessionPolicyCard.js +12 -5
  175. package/dist/views/settings/SessionPolicyCard.js.map +1 -1
  176. package/dist/views/settings/useSecuritySettings.d.ts +13 -1
  177. package/dist/views/settings/useSecuritySettings.d.ts.map +1 -1
  178. package/dist/views/settings/useSecuritySettings.js +47 -4
  179. package/dist/views/settings/useSecuritySettings.js.map +1 -1
  180. package/package.json +2 -2
  181. package/src/AdminRoot.tsx +43 -10
  182. package/src/__tests__/components/inspector-pane.test.tsx +64 -0
  183. package/src/__tests__/hooks/useIdleLogout.test.tsx +86 -0
  184. package/src/__tests__/lib/pages-tree.test.ts +197 -0
  185. package/src/__tests__/lib/post-types-service.test.ts +112 -0
  186. package/src/__tests__/views/collection-list-nav.render.test.tsx +51 -5
  187. package/src/__tests__/views/dashboard.test.tsx +7 -3
  188. package/src/__tests__/views/forms-list.render.test.tsx +34 -6
  189. package/src/__tests__/views/media-seo-audit.render.test.tsx +117 -0
  190. package/src/__tests__/views/onboarding-block.render.test.tsx +193 -0
  191. package/src/__tests__/views/page-builder-sections-panel.render.test.tsx +138 -0
  192. package/src/__tests__/views/page-templates.render.test.tsx +142 -0
  193. package/src/__tests__/views/pages-list-view.test.tsx +93 -1
  194. package/src/__tests__/views/post-type-editor.render.test.tsx +116 -0
  195. package/src/__tests__/views/security-settings.render.test.tsx +111 -4
  196. package/src/__tests__/views/seo-content-pane.render.test.tsx +142 -0
  197. package/src/components/collections/EntryDetailPane.tsx +182 -0
  198. package/src/components/forms/FieldsPanel.tsx +3 -1
  199. package/src/components/forms/FormSchemaPane.tsx +192 -0
  200. package/src/components/script-tags/ScriptTagEditorPane.tsx +474 -0
  201. package/src/components/seo/SeoEditorPane.tsx +533 -0
  202. package/src/components/ui/InspectorPane.tsx +129 -0
  203. package/src/components/ui/index.ts +10 -0
  204. package/src/hooks/useIdleLogout.ts +77 -0
  205. package/src/lib/api.ts +8 -2
  206. package/src/lib/page-editor-service.ts +16 -2
  207. package/src/lib/pages-tree.ts +145 -0
  208. package/src/lib/post-types-service.ts +129 -0
  209. package/src/views/CollectionList.tsx +158 -110
  210. package/src/views/Dashboard.tsx +238 -196
  211. package/src/views/Forms.tsx +154 -126
  212. package/src/views/MediaBrowser.tsx +641 -511
  213. package/src/views/MediaSeoAudit.tsx +320 -0
  214. package/src/views/Pages/PagesListView.tsx +352 -183
  215. package/src/views/Pages/PagesTreeTable.tsx +339 -0
  216. package/src/views/Posts/PostTypeEditor.tsx +568 -0
  217. package/src/views/Posts/PostTypesView.tsx +5 -4
  218. package/src/views/ScriptTags.tsx +204 -129
  219. package/src/views/dashboard/OnboardingBlock.tsx +233 -0
  220. package/src/views/page-builder/BuilderSectionsPanel.tsx +304 -0
  221. package/src/views/page-builder/PageBuilder.tsx +69 -2
  222. package/src/views/page-builder/PageTemplates.tsx +340 -57
  223. package/src/views/page-editor/PageSectionEditor.tsx +9 -2
  224. package/src/views/page-editor/PageSettingsModal.tsx +75 -2
  225. package/src/views/seo/ContentTab.tsx +113 -80
  226. package/src/views/settings/AccessProtectionCard.tsx +83 -53
  227. package/src/views/settings/SecurityTab.tsx +23 -2
  228. package/src/views/settings/SessionPolicyCard.tsx +45 -9
  229. package/src/views/settings/useSecuritySettings.ts +78 -22
  230. package/dist/components/forms/FormSchemaDrawer.d.ts +0 -9
  231. package/dist/components/forms/FormSchemaDrawer.d.ts.map +0 -1
  232. package/dist/components/forms/FormSchemaDrawer.js +0 -99
  233. package/dist/components/forms/FormSchemaDrawer.js.map +0 -1
  234. package/dist/components/seo/SeoEditorDrawer.d.ts +0 -8
  235. package/dist/components/seo/SeoEditorDrawer.d.ts.map +0 -1
  236. package/dist/components/seo/SeoEditorDrawer.js +0 -172
  237. package/dist/components/seo/SeoEditorDrawer.js.map +0 -1
  238. package/dist/views/ScriptTagEditor.d.ts +0 -6
  239. package/dist/views/ScriptTagEditor.d.ts.map +0 -1
  240. package/dist/views/ScriptTagEditor.js +0 -111
  241. package/dist/views/ScriptTagEditor.js.map +0 -1
  242. package/src/components/forms/FormSchemaDrawer.tsx +0 -192
  243. package/src/components/seo/SeoEditorDrawer.tsx +0 -529
  244. package/src/views/ScriptTagEditor.tsx +0 -353
@@ -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;
@@ -0,0 +1,51 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Design-system inline split-pane pattern: a list that shrinks while a
4
+ * fixed-width editor/detail pane slides in beside it (Script Tags 420px,
5
+ * Entries 400px, Forms 390px, SEO Content 380px in the handoff).
6
+ *
7
+ * Compose as:
8
+ *
9
+ * <SplitPaneLayout>
10
+ * <SplitPaneList>…table…</SplitPaneList>
11
+ * <InspectorPane open={!!selected} width={420} aria-label="Edit script">
12
+ * <InspectorPaneHeader onClose={close}>…</InspectorPaneHeader>
13
+ * <InspectorPaneBody>…sections…</InspectorPaneBody>
14
+ * <InspectorPaneFooter>…save…</InspectorPaneFooter>
15
+ * </InspectorPane>
16
+ * </SplitPaneLayout>
17
+ */
18
+ export declare function SplitPaneLayout({ children, className, }: {
19
+ children: ReactNode;
20
+ className?: string;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function SplitPaneList({ children, className, }: {
23
+ children: ReactNode;
24
+ className?: string;
25
+ }): import("react/jsx-runtime").JSX.Element;
26
+ export interface InspectorPaneProps {
27
+ open: boolean;
28
+ /** Outer shell width in px when open (inner card fills it minus 12px gutters). */
29
+ width: number;
30
+ children: ReactNode;
31
+ 'aria-label': string;
32
+ }
33
+ export declare function InspectorPane({ open, width, children, 'aria-label': ariaLabel, }: InspectorPaneProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function InspectorPaneHeader({ children, onClose, closeLabel, }: {
35
+ children: ReactNode;
36
+ onClose: () => void;
37
+ closeLabel?: string;
38
+ }): import("react/jsx-runtime").JSX.Element;
39
+ export declare function InspectorPaneBody({ children }: {
40
+ children: ReactNode;
41
+ }): import("react/jsx-runtime").JSX.Element;
42
+ /** Bordered section with the design's uppercase 10.5px section title. */
43
+ export declare function InspectorPaneSection({ title, subtitle, children, }: {
44
+ title?: string;
45
+ subtitle?: string;
46
+ children: ReactNode;
47
+ }): import("react/jsx-runtime").JSX.Element;
48
+ export declare function InspectorPaneFooter({ children }: {
49
+ children: ReactNode;
50
+ }): import("react/jsx-runtime").JSX.Element;
51
+ //# sourceMappingURL=InspectorPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorPane.d.ts","sourceRoot":"","sources":["../../../src/components/ui/InspectorPane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAEA;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAEA;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,SAAS,GACxB,EAAE,kBAAkB,2CAiBpB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,UAA0B,GAC3B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,2CAcA;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAEtE;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,CAAA;CACpB,2CAcA;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAExE"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { X } from 'lucide-react';
4
+ /**
5
+ * Design-system inline split-pane pattern: a list that shrinks while a
6
+ * fixed-width editor/detail pane slides in beside it (Script Tags 420px,
7
+ * Entries 400px, Forms 390px, SEO Content 380px in the handoff).
8
+ *
9
+ * Compose as:
10
+ *
11
+ * <SplitPaneLayout>
12
+ * <SplitPaneList>…table…</SplitPaneList>
13
+ * <InspectorPane open={!!selected} width={420} aria-label="Edit script">
14
+ * <InspectorPaneHeader onClose={close}>…</InspectorPaneHeader>
15
+ * <InspectorPaneBody>…sections…</InspectorPaneBody>
16
+ * <InspectorPaneFooter>…save…</InspectorPaneFooter>
17
+ * </InspectorPane>
18
+ * </SplitPaneLayout>
19
+ */
20
+ export function SplitPaneLayout({ children, className, }) {
21
+ return _jsx("div", { className: `flex min-h-0 flex-1 overflow-hidden ${className ?? ''}`, children: children });
22
+ }
23
+ export function SplitPaneList({ children, className, }) {
24
+ return _jsx("div", { className: `min-w-0 flex-1 overflow-y-auto ${className ?? ''}`, children: children });
25
+ }
26
+ export function InspectorPane({ open, width, children, 'aria-label': ariaLabel, }) {
27
+ return (_jsx("div", { className: "shrink-0 overflow-hidden bg-[var(--bg)] motion-safe:transition-[width] motion-safe:duration-200", style: { width: open ? width : 0 }, "aria-hidden": !open, children: _jsx("div", { role: "region", "aria-label": ariaLabel, className: "my-3 mr-3 ml-4 flex h-[calc(100%-24px)] flex-col overflow-hidden rounded-[var(--r)] border border-[var(--bdr)] bg-[var(--sb)] shadow-[var(--shd2)]", style: { width: width - 28 }, children: open ? children : null }) }));
28
+ }
29
+ export function InspectorPaneHeader({ children, onClose, closeLabel = 'Close panel', }) {
30
+ return (_jsxs("div", { className: "flex items-start gap-2 border-b border-[var(--bdr)] px-4 py-3.5", children: [_jsx("div", { className: "min-w-0 flex-1", children: children }), _jsx("button", { type: "button", onClick: onClose, "aria-label": closeLabel, className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[6px] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:bg-[var(--bg)] hover:text-[var(--txt)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(X, { size: 16 }) })] }));
31
+ }
32
+ export function InspectorPaneBody({ children }) {
33
+ return _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: children });
34
+ }
35
+ /** Bordered section with the design's uppercase 10.5px section title. */
36
+ export function InspectorPaneSection({ title, subtitle, children, }) {
37
+ return (_jsxs("div", { className: "border-b border-[var(--bdr)] px-4 py-3.5 last:border-b-0", children: [title && (_jsxs("div", { className: "mb-2.5 flex items-baseline gap-2", children: [_jsx("span", { className: "text-[10.5px] font-semibold tracking-[0.6px] text-[var(--muted)] uppercase", children: title }), subtitle && _jsx("span", { className: "text-[11px] text-[var(--muted)]", children: subtitle })] })), children] }));
38
+ }
39
+ export function InspectorPaneFooter({ children }) {
40
+ return _jsx("div", { className: "border-t border-[var(--bdr)] px-4 py-3.5", children: children });
41
+ }
42
+ //# sourceMappingURL=InspectorPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InspectorPane.js","sourceRoot":"","sources":["../../../src/components/ui/InspectorPane.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,uCAAuC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,kCAAkC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AAC9F,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,SAAS,GACJ;IACnB,OAAO,CACL,cACE,SAAS,EAAC,iGAAiG,EAC3G,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,iBACrB,CAAC,IAAI,YAElB,cACE,IAAI,EAAC,QAAQ,gBACD,SAAS,EACrB,SAAS,EAAC,oJAAoJ,EAC9J,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,YAE3B,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GACnB,GACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,UAAU,GAAG,aAAa,GAK3B;IACC,OAAO,CACL,eAAK,SAAS,EAAC,iEAAiE,aAC9E,cAAK,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAO,EAChD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,UAAU,EACtB,SAAS,EAAC,mQAAmQ,YAE7Q,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAA2B;IACrE,OAAO,cAAK,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAO,CAAA;AACzE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,QAAQ,GAKT;IACC,OAAO,CACL,eAAK,SAAS,EAAC,0DAA0D,aACtE,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAM,SAAS,EAAC,4EAA4E,YACzF,KAAK,GACD,EACN,QAAQ,IAAI,eAAM,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAQ,IAC5E,CACP,EACA,QAAQ,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA2B;IACvE,OAAO,cAAK,SAAS,EAAC,0CAA0C,YAAE,QAAQ,GAAO,CAAA;AACnF,CAAC"}
@@ -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;
@@ -36,6 +36,8 @@ export { StatPill } from './StatPill.js';
36
36
  export type { StatPillProps } from './StatPill.js';
37
37
  export { RowActions, RowActionButton } from './RowActions.js';
38
38
  export type { RowActionButtonProps } from './RowActions.js';
39
+ export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
40
+ export type { InspectorPaneProps } from './InspectorPane.js';
39
41
  export { formControlBase, formControlState } from './form-control.js';
40
42
  export { CommandPalette } from './CommandPalette.js';
41
43
  export type { CommandPaletteProps } from './CommandPalette.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC9E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACnE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export { StatusBadge, statusBadgeVariants } from './StatusBadge.js';
17
17
  export { FilterPill } from './FilterPill.js';
18
18
  export { StatPill } from './StatPill.js';
19
19
  export { RowActions, RowActionButton } from './RowActions.js';
20
+ export { SplitPaneLayout, SplitPaneList, InspectorPane, InspectorPaneHeader, InspectorPaneBody, InspectorPaneSection, InspectorPaneFooter, } from './InspectorPane.js';
20
21
  export { formControlBase, formControlState } from './form-control.js';
21
22
  export { CommandPalette } from './CommandPalette.js';
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE7D,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Signs the user out after `timeoutMs` of no user activity, when enabled by
3
+ * the Settings → Security "Idle auto-logout" policy.
4
+ *
5
+ * Deliberately lightweight: activity events only stamp a ref (no state, no
6
+ * re-renders), and a single coarse interval compares the last-activity stamp
7
+ * against the deadline. Returning to a hidden tab re-checks immediately via
8
+ * `visibilitychange`, so a tab left overnight logs out as soon as it's seen
9
+ * (or at the next interval tick) rather than staying signed in.
10
+ *
11
+ * All listeners and the interval are torn down on unmount or when disabled.
12
+ */
13
+ export declare function useIdleLogout(options: {
14
+ enabled: boolean;
15
+ timeoutMs: number;
16
+ onIdle: () => void;
17
+ }): void;
18
+ //# sourceMappingURL=useIdleLogout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIdleLogout.d.ts","sourceRoot":"","sources":["../../src/hooks/useIdleLogout.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,GAAG,IAAI,CAqDP"}
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+ import { 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.
8
+ *
9
+ * Deliberately lightweight: activity events only stamp a ref (no state, no
10
+ * re-renders), and a single coarse interval compares the last-activity stamp
11
+ * against the deadline. Returning to a hidden tab re-checks immediately via
12
+ * `visibilitychange`, so a tab left overnight logs out as soon as it's seen
13
+ * (or at the next interval tick) rather than staying signed in.
14
+ *
15
+ * All listeners and the interval are torn down on unmount or when disabled.
16
+ */
17
+ export function useIdleLogout(options) {
18
+ const { enabled, timeoutMs } = options;
19
+ // Keep the latest callback without re-subscribing listeners on every render.
20
+ const onIdleRef = useRef(options.onIdle);
21
+ onIdleRef.current = options.onIdle;
22
+ useEffect(() => {
23
+ if (!enabled || timeoutMs <= 0 || typeof window === 'undefined')
24
+ return;
25
+ let lastActivity = Date.now();
26
+ let fired = false;
27
+ const markActivity = () => {
28
+ lastActivity = Date.now();
29
+ };
30
+ const checkIdle = () => {
31
+ if (fired)
32
+ return;
33
+ if (Date.now() - lastActivity >= timeoutMs) {
34
+ fired = true;
35
+ onIdleRef.current();
36
+ }
37
+ };
38
+ // Passive listeners — activity stamping must never block scrolling/typing.
39
+ const activityEvents = [
40
+ 'pointermove',
41
+ 'pointerdown',
42
+ 'keydown',
43
+ 'scroll',
44
+ 'touchstart',
45
+ ];
46
+ for (const event of activityEvents) {
47
+ window.addEventListener(event, markActivity, { passive: true });
48
+ }
49
+ // A tab becoming visible again is NOT user activity — check whether the
50
+ // deadline passed while it was hidden and log out immediately if so.
51
+ const onVisibility = () => {
52
+ if (document.visibilityState === 'visible')
53
+ checkIdle();
54
+ };
55
+ document.addEventListener('visibilitychange', onVisibility);
56
+ const interval = window.setInterval(checkIdle, Math.min(CHECK_INTERVAL_MS, timeoutMs));
57
+ return () => {
58
+ for (const event of activityEvents) {
59
+ window.removeEventListener(event, markActivity);
60
+ }
61
+ document.removeEventListener('visibilitychange', onVisibility);
62
+ window.clearInterval(interval);
63
+ };
64
+ }, [enabled, timeoutMs]);
65
+ }
66
+ //# sourceMappingURL=useIdleLogout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIdleLogout.js","sourceRoot":"","sources":["../../src/hooks/useIdleLogout.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEhC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,OAI7B;IACC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IACtC,6EAA6E;IAC7E,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QAEvE,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,IAAI,KAAK,GAAG,KAAK,CAAA;QAEjB,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC,CAAA;QAED,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,IAAI,KAAK;gBAAE,OAAM;YACjB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,IAAI,SAAS,EAAE,CAAC;gBAC3C,KAAK,GAAG,IAAI,CAAA;gBACZ,SAAS,CAAC,OAAO,EAAE,CAAA;YACrB,CAAC;QACH,CAAC,CAAA;QAED,2EAA2E;QAC3E,MAAM,cAAc,GAAG;YACrB,aAAa;YACb,aAAa;YACb,SAAS;YACT,QAAQ;YACR,YAAY;SACJ,CAAA;QACV,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC;QAED,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,SAAS,EAAE,CAAA;QACzD,CAAC,CAAA;QACD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAA;QAE3D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAA;QAEtF,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;YACjD,CAAC;YACD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAA;YAC9D,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAC1B,CAAC"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,UAAU,CAAA;AAE/B,IAAI,QAAQ,GAAG,YAAY,CAAA;AAE3B,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,QAAQ,GAAG,IAAI,CAAA;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,CAAA;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACrE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,IAAI,YAAY,GAAyB,IAAI,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,YAAY,EAAE;QAAE,OAAM;IAC1B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAA;IACrC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,mEAAmE;QACrE,CAAC;gBAAS,CAAC;YACT,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IACpD,OAAO,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAA;IAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IACpD,OAAO,GAAG,QAAQ,GAAG,SAAS,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAA;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,UAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAA;IACvD,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,YAAY,QAAQ,CAAA;IAEtF,MAAM,OAAO,GAA2B;QACtC,GAAG,CAAE,OAAO,CAAC,OAAkC,IAAI,EAAE,CAAC;KACvD,CAAA;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;IAC9C,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IACtD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,sBAAsB;QACtB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACpB,MAAM,eAAe,EAAE,CAAA;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;QAC3B,IAAI,IAAI;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;QAC7E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAE/C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;QACtF,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IACnF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ export interface EditorPage {
9
9
  slug: string;
10
10
  path: string;
11
11
  status: PageStatus;
12
+ /**
13
+ * Parent page for the tree hierarchy (`data.parentPageId`), or null for
14
+ * a top-level page. Preselected when arriving via "Add sub-page"
15
+ * (`/pages/new?parent=<id>`); editable in Page settings.
16
+ */
17
+ parentPageId: string | null;
12
18
  sections: PageSection[];
13
19
  seoTitle: string;
14
20
  seoDescription: string;
@@ -48,6 +54,9 @@ export declare function createPage(page: EditorPage): Promise<EditorPage>;
48
54
  export declare function savePageDraft(page: EditorPage): Promise<EditorPage>;
49
55
  /** Publish: persist the latest content and flip status to PUBLISHED. */
50
56
  export declare function publishPage(page: EditorPage): Promise<EditorPage>;
51
- /** A blank page scaffold for `/pages/new`. */
52
- export declare function emptyPage(): EditorPage;
57
+ /**
58
+ * A blank page scaffold for `/pages/new`. `parentPageId` is preset when
59
+ * the flow was entered via "Add sub-page" in the Pages tree view.
60
+ */
61
+ export declare function emptyPage(parentPageId?: string | null): EditorPage;
53
62
  //# sourceMappingURL=page-editor-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-editor-service.d.ts","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAGjB,KAAK,WAAW,EACjB,MAAM,uCAAuC,CAAA;AAK9C,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAIxE,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAEzE,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAEvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,gBAAgB,CAoCnF;AAoBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AA6CD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI5E;AAgCD,wDAAwD;AACxD,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAOtE;AAED,iDAAiD;AACjD,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQzE;AAED,wEAAwE;AACxE,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAUvE;AAED,8CAA8C;AAC9C,wBAAgB,SAAS,IAAI,UAAU,CActC"}
1
+ {"version":3,"file":"page-editor-service.d.ts","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAGjB,KAAK,WAAW,EACjB,MAAM,uCAAuC,CAAA;AAK9C,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAIxE,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAEzE,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAEvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,gBAAgB,CAoCnF;AAoBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAE3D;AA+CD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI5E;AAkCD,wDAAwD;AACxD,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAOtE;AAED,iDAAiD;AACjD,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAQzE;AAED,wEAAwE;AACxE,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAUvE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,UAAU,CAexE"}
@@ -108,6 +108,7 @@ function rowToEditorPage(doc) {
108
108
  slug,
109
109
  path: typeof data.path === 'string' && data.path ? data.path : slug ? `/${slug}` : '/',
110
110
  status: doc.status ?? 'DRAFT',
111
+ parentPageId: typeof data.parentPageId === 'string' && data.parentPageId ? data.parentPageId : null,
111
112
  // Preserve unknown (externally-managed) sections so the editor can show
112
113
  // them read-only and round-trip them on save instead of dropping them.
113
114
  sections: coerceSectionsCore(data.sections, { onUnknown: 'preserve' }),
@@ -135,6 +136,7 @@ function toWriteBody(page, extra) {
135
136
  title: page.title,
136
137
  slug: page.slug,
137
138
  path: page.path,
139
+ parentPageId: page.parentPageId,
138
140
  // Unmanaged sections are part of `page.sections`, so they round-trip on
139
141
  // every save (no data loss). Strip the derived `unmanaged` marker — it is
140
142
  // recomputed from the registry on read, so persisting it would only stale.
@@ -180,14 +182,18 @@ export async function publishPage(page) {
180
182
  throw new Error(res.error ?? 'Failed to publish page');
181
183
  return rowToEditorPage(res.data);
182
184
  }
183
- /** A blank page scaffold for `/pages/new`. */
184
- export function emptyPage() {
185
+ /**
186
+ * A blank page scaffold for `/pages/new`. `parentPageId` is preset when
187
+ * the flow was entered via "Add sub-page" in the Pages tree view.
188
+ */
189
+ export function emptyPage(parentPageId = null) {
185
190
  return {
186
191
  id: null,
187
192
  title: '',
188
193
  slug: '',
189
194
  path: '',
190
195
  status: 'DRAFT',
196
+ parentPageId,
191
197
  sections: [],
192
198
  seoTitle: '',
193
199
  seoDescription: '',
@@ -1 +1 @@
1
- {"version":3,"file":"page-editor-service.js","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-editor-service.js","sourceRoot":"","sources":["../../src/lib/page-editor-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Page hierarchy resolution for the Pages tree view.
3
+ *
4
+ * Parent resolution strategy (in priority order):
5
+ * 1. `parentPageId` — explicit link, used when it points at a page that
6
+ * exists in the set (and isn't the page itself).
7
+ * 2. Path-prefix derivation — for rows without a usable `parentPageId`,
8
+ * the longest existing path prefix wins: "/about/team" becomes a child
9
+ * of the page whose path is "/about". Missing intermediate levels are
10
+ * skipped ("/a/b/c" with no "/a/b" attaches to "/a"). The root path
11
+ * "/" is never treated as a prefix parent, so top-level pages stay
12
+ * siblings of the homepage.
13
+ *
14
+ * Safety guarantees:
15
+ * - Orphans (parent id not in the set) become roots.
16
+ * - Cycles (a → b → a) are broken deterministically: walking up from each
17
+ * page in input order, the edge that closes a cycle is severed and that
18
+ * page becomes a root. Every page appears in the tree exactly once.
19
+ * - Sibling ordering is stable: title (locale-aware), then path.
20
+ *
21
+ * Pure functions — no network, no React — so the view and the unit tests
22
+ * share one implementation.
23
+ */
24
+ import type { Page } from './pages-service.js';
25
+ export interface PageTreeNode {
26
+ page: Page;
27
+ children: PageTreeNode[];
28
+ }
29
+ /** One visible row of the flattened tree table. */
30
+ export interface PageTreeRow {
31
+ page: Page;
32
+ depth: number;
33
+ hasChildren: boolean;
34
+ }
35
+ /** Build the parent/child hierarchy for the tree view. Returns root nodes. */
36
+ export declare function buildPageTree(pages: Page[]): PageTreeNode[];
37
+ /**
38
+ * Flatten the tree into visible rows: children render only when their
39
+ * parent's id is in `expanded`.
40
+ */
41
+ export declare function flattenPageTree(nodes: PageTreeNode[], expanded: Set<string>): PageTreeRow[];
42
+ /** Default expand state: every root node that has children starts open. */
43
+ export declare function defaultExpandedIds(roots: PageTreeNode[]): Set<string>;
44
+ //# sourceMappingURL=pages-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages-tree.d.ts","sourceRoot":"","sources":["../../src/lib/pages-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,YAAY,EAAE,CAAA;CACzB;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB;AAgCD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAsD3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,CAW3F;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAErE"}
@@ -0,0 +1,106 @@
1
+ function normalizePath(path) {
2
+ let p = path.trim();
3
+ if (!p.startsWith('/'))
4
+ p = `/${p}`;
5
+ p = p.replace(/\/{2,}/g, '/');
6
+ if (p.length > 1)
7
+ p = p.replace(/\/+$/, '');
8
+ return p;
9
+ }
10
+ /**
11
+ * Longest existing path-prefix parent, or null. Only prefixes with at
12
+ * least one segment count — "/" (the homepage) is never a derived parent.
13
+ */
14
+ function derivePathParent(page, idByPath) {
15
+ const segments = normalizePath(page.path).split('/').filter(Boolean);
16
+ for (let i = segments.length - 1; i >= 1; i--) {
17
+ const prefix = `/${segments.slice(0, i).join('/')}`;
18
+ const candidate = idByPath.get(prefix);
19
+ if (candidate !== undefined && candidate !== page.id)
20
+ return candidate;
21
+ }
22
+ return null;
23
+ }
24
+ function compareSiblings(a, b) {
25
+ return (a.page.title.localeCompare(b.page.title) ||
26
+ a.page.path.localeCompare(b.page.path) ||
27
+ a.page.id.localeCompare(b.page.id));
28
+ }
29
+ /** Build the parent/child hierarchy for the tree view. Returns root nodes. */
30
+ export function buildPageTree(pages) {
31
+ const byId = new Map();
32
+ for (const p of pages)
33
+ byId.set(p.id, p);
34
+ // First occurrence wins on duplicate paths, keeping resolution stable
35
+ // with respect to input order.
36
+ const idByPath = new Map();
37
+ for (const p of pages) {
38
+ const norm = normalizePath(p.path);
39
+ if (!idByPath.has(norm))
40
+ idByPath.set(norm, p.id);
41
+ }
42
+ const parentOf = new Map();
43
+ for (const p of pages) {
44
+ const explicit = p.parentPageId && p.parentPageId !== p.id && byId.has(p.parentPageId) ? p.parentPageId : null;
45
+ parentOf.set(p.id, explicit ?? derivePathParent(p, idByPath));
46
+ }
47
+ // Cycle guard: walk each page's ancestor chain; the edge that revisits a
48
+ // seen node is severed, rooting that page. Deterministic in input order.
49
+ for (const p of pages) {
50
+ const seen = new Set([p.id]);
51
+ let cur = p.id;
52
+ for (;;) {
53
+ const parent = parentOf.get(cur) ?? null;
54
+ if (parent === null)
55
+ break;
56
+ if (seen.has(parent)) {
57
+ parentOf.set(cur, null);
58
+ break;
59
+ }
60
+ seen.add(parent);
61
+ cur = parent;
62
+ }
63
+ }
64
+ const nodeById = new Map();
65
+ for (const p of pages)
66
+ nodeById.set(p.id, { page: p, children: [] });
67
+ const roots = [];
68
+ for (const p of pages) {
69
+ const node = nodeById.get(p.id);
70
+ const parentId = parentOf.get(p.id) ?? null;
71
+ const parentNode = parentId !== null ? nodeById.get(parentId) : undefined;
72
+ if (parentNode)
73
+ parentNode.children.push(node);
74
+ else
75
+ roots.push(node);
76
+ }
77
+ const sortRecursive = (nodes) => {
78
+ nodes.sort(compareSiblings);
79
+ for (const n of nodes)
80
+ sortRecursive(n.children);
81
+ };
82
+ sortRecursive(roots);
83
+ return roots;
84
+ }
85
+ /**
86
+ * Flatten the tree into visible rows: children render only when their
87
+ * parent's id is in `expanded`.
88
+ */
89
+ export function flattenPageTree(nodes, expanded) {
90
+ const rows = [];
91
+ const walk = (list, depth) => {
92
+ for (const node of list) {
93
+ const hasChildren = node.children.length > 0;
94
+ rows.push({ page: node.page, depth, hasChildren });
95
+ if (hasChildren && expanded.has(node.page.id))
96
+ walk(node.children, depth + 1);
97
+ }
98
+ };
99
+ walk(nodes, 0);
100
+ return rows;
101
+ }
102
+ /** Default expand state: every root node that has children starts open. */
103
+ export function defaultExpandedIds(roots) {
104
+ return new Set(roots.filter((n) => n.children.length > 0).map((n) => n.page.id));
105
+ }
106
+ //# sourceMappingURL=pages-tree.js.map