canopycms 0.0.61-int.75 → 0.0.61

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 (271) hide show
  1. package/dist/ai/handler.js +1 -1
  2. package/dist/ai/handler.js.map +1 -1
  3. package/dist/api/assets.d.ts.map +1 -1
  4. package/dist/api/assets.js +36 -4
  5. package/dist/api/assets.js.map +1 -1
  6. package/dist/api/branch-status.d.ts.map +1 -1
  7. package/dist/api/branch-status.js +56 -0
  8. package/dist/api/branch-status.js.map +1 -1
  9. package/dist/api/branch-withdraw.d.ts.map +1 -1
  10. package/dist/api/branch-withdraw.js +14 -3
  11. package/dist/api/branch-withdraw.js.map +1 -1
  12. package/dist/api/branch.d.ts +31 -2
  13. package/dist/api/branch.d.ts.map +1 -1
  14. package/dist/api/branch.js +252 -13
  15. package/dist/api/branch.js.map +1 -1
  16. package/dist/api/content.d.ts.map +1 -1
  17. package/dist/api/content.js +12 -4
  18. package/dist/api/content.js.map +1 -1
  19. package/dist/api/entries.d.ts.map +1 -1
  20. package/dist/api/entries.js +11 -9
  21. package/dist/api/entries.js.map +1 -1
  22. package/dist/api/guards.d.ts.map +1 -1
  23. package/dist/api/guards.js +12 -5
  24. package/dist/api/guards.js.map +1 -1
  25. package/dist/api/permissions.d.ts +2 -2
  26. package/dist/api/permissions.d.ts.map +1 -1
  27. package/dist/api/permissions.js +51 -3
  28. package/dist/api/permissions.js.map +1 -1
  29. package/dist/api/reference-options.d.ts.map +1 -1
  30. package/dist/api/reference-options.js +10 -17
  31. package/dist/api/reference-options.js.map +1 -1
  32. package/dist/api/resolve-references.d.ts.map +1 -1
  33. package/dist/api/resolve-references.js +3 -1
  34. package/dist/api/resolve-references.js.map +1 -1
  35. package/dist/api/schema.d.ts.map +1 -1
  36. package/dist/api/schema.js +3 -2
  37. package/dist/api/schema.js.map +1 -1
  38. package/dist/api/settings-helpers.d.ts.map +1 -1
  39. package/dist/api/settings-helpers.js +6 -5
  40. package/dist/api/settings-helpers.js.map +1 -1
  41. package/dist/assets/pipeline.d.ts +11 -2
  42. package/dist/assets/pipeline.d.ts.map +1 -1
  43. package/dist/assets/pipeline.js +114 -2
  44. package/dist/assets/pipeline.js.map +1 -1
  45. package/dist/assets/transform-directives.d.ts +18 -0
  46. package/dist/assets/transform-directives.d.ts.map +1 -1
  47. package/dist/assets/transform-directives.js +18 -0
  48. package/dist/assets/transform-directives.js.map +1 -1
  49. package/dist/assets/transform.d.ts.map +1 -1
  50. package/dist/assets/transform.js +1 -10
  51. package/dist/assets/transform.js.map +1 -1
  52. package/dist/auth/types.d.ts +29 -0
  53. package/dist/auth/types.d.ts.map +1 -1
  54. package/dist/authorization/index.d.ts +1 -1
  55. package/dist/authorization/index.d.ts.map +1 -1
  56. package/dist/authorization/index.js +1 -1
  57. package/dist/authorization/index.js.map +1 -1
  58. package/dist/authorization/protected-branch.d.ts +75 -0
  59. package/dist/authorization/protected-branch.d.ts.map +1 -1
  60. package/dist/authorization/protected-branch.js +39 -0
  61. package/dist/authorization/protected-branch.js.map +1 -1
  62. package/dist/branch-registry.d.ts.map +1 -1
  63. package/dist/branch-registry.js +5 -1
  64. package/dist/branch-registry.js.map +1 -1
  65. package/dist/branch-schema-cache.d.ts.map +1 -1
  66. package/dist/branch-schema-cache.js +9 -0
  67. package/dist/branch-schema-cache.js.map +1 -1
  68. package/dist/build/generate-ai-content.js +1 -1
  69. package/dist/build/generate-ai-content.js.map +1 -1
  70. package/dist/cli/cli.js +1442 -828
  71. package/dist/cli/generate-ai-content.js +404 -136
  72. package/dist/cli/init.d.ts +8 -2
  73. package/dist/cli/init.d.ts.map +1 -1
  74. package/dist/cli/init.js +440 -151
  75. package/dist/cli/init.js.map +1 -1
  76. package/dist/cli/project-detect.d.ts +89 -0
  77. package/dist/cli/project-detect.d.ts.map +1 -0
  78. package/dist/cli/project-detect.js +240 -0
  79. package/dist/cli/project-detect.js.map +1 -0
  80. package/dist/cli/template-files/Dockerfile.cms.template +11 -6
  81. package/dist/cli/template-files/cdk-app.ts.template +82 -0
  82. package/dist/cli/template-files/cdk.json.template +9 -0
  83. package/dist/cli/template-files/cms-stack.ts.template +124 -0
  84. package/dist/cli/template-files/deploy-cms.yml.template +125 -13
  85. package/dist/cli/template-files/dockerignore.template +2 -1
  86. package/dist/cli/templates.d.ts +26 -2
  87. package/dist/cli/templates.d.ts.map +1 -1
  88. package/dist/cli/templates.js +36 -4
  89. package/dist/cli/templates.js.map +1 -1
  90. package/dist/config/schemas/config.d.ts +2 -3
  91. package/dist/config/schemas/config.d.ts.map +1 -1
  92. package/dist/config/schemas/config.js +21 -1
  93. package/dist/config/schemas/config.js.map +1 -1
  94. package/dist/config/validation.d.ts +9 -0
  95. package/dist/config/validation.d.ts.map +1 -1
  96. package/dist/config/validation.js +22 -12
  97. package/dist/config/validation.js.map +1 -1
  98. package/dist/content-reader.js +1 -1
  99. package/dist/content-reader.js.map +1 -1
  100. package/dist/content-store.d.ts +11 -0
  101. package/dist/content-store.d.ts.map +1 -1
  102. package/dist/content-store.js +2 -1
  103. package/dist/content-store.js.map +1 -1
  104. package/dist/dev-content-watcher.d.ts.map +1 -1
  105. package/dist/dev-content-watcher.js +4 -1
  106. package/dist/dev-content-watcher.js.map +1 -1
  107. package/dist/editor/BranchManager.d.ts +15 -0
  108. package/dist/editor/BranchManager.d.ts.map +1 -1
  109. package/dist/editor/BranchManager.js +43 -9
  110. package/dist/editor/BranchManager.js.map +1 -1
  111. package/dist/editor/CanopyEditor.d.ts.map +1 -1
  112. package/dist/editor/CanopyEditor.js +2 -2
  113. package/dist/editor/CanopyEditor.js.map +1 -1
  114. package/dist/editor/Editor.d.ts.map +1 -1
  115. package/dist/editor/Editor.js +110 -48
  116. package/dist/editor/Editor.js.map +1 -1
  117. package/dist/editor/admin/SystemHealthPanel.d.ts.map +1 -1
  118. package/dist/editor/admin/SystemHealthPanel.js +9 -8
  119. package/dist/editor/admin/SystemHealthPanel.js.map +1 -1
  120. package/dist/editor/components/EditorHeader.d.ts +6 -0
  121. package/dist/editor/components/EditorHeader.d.ts.map +1 -1
  122. package/dist/editor/components/EditorHeader.js +76 -23
  123. package/dist/editor/components/EditorHeader.js.map +1 -1
  124. package/dist/editor/components/EntryCreateModal.d.ts.map +1 -1
  125. package/dist/editor/components/EntryCreateModal.js +21 -6
  126. package/dist/editor/components/EntryCreateModal.js.map +1 -1
  127. package/dist/editor/context/SWRProvider.d.ts +31 -0
  128. package/dist/editor/context/SWRProvider.d.ts.map +1 -0
  129. package/dist/editor/context/SWRProvider.js +12 -0
  130. package/dist/editor/context/SWRProvider.js.map +1 -0
  131. package/dist/editor/context/index.d.ts +3 -0
  132. package/dist/editor/context/index.d.ts.map +1 -1
  133. package/dist/editor/context/index.js +3 -0
  134. package/dist/editor/context/index.js.map +1 -1
  135. package/dist/editor/editor-utils.d.ts.map +1 -1
  136. package/dist/editor/editor-utils.js +8 -2
  137. package/dist/editor/editor-utils.js.map +1 -1
  138. package/dist/editor/fields/ImageField.d.ts.map +1 -1
  139. package/dist/editor/fields/ImageField.js +27 -3
  140. package/dist/editor/fields/ImageField.js.map +1 -1
  141. package/dist/editor/fields/ReferenceField.d.ts.map +1 -1
  142. package/dist/editor/fields/ReferenceField.js +52 -31
  143. package/dist/editor/fields/ReferenceField.js.map +1 -1
  144. package/dist/editor/hooks/__test__/test-utils.d.ts +38 -3
  145. package/dist/editor/hooks/__test__/test-utils.d.ts.map +1 -1
  146. package/dist/editor/hooks/__test__/test-utils.js +50 -4
  147. package/dist/editor/hooks/__test__/test-utils.js.map +1 -1
  148. package/dist/editor/hooks/index.d.ts +4 -1
  149. package/dist/editor/hooks/index.d.ts.map +1 -1
  150. package/dist/editor/hooks/index.js +4 -1
  151. package/dist/editor/hooks/index.js.map +1 -1
  152. package/dist/editor/hooks/useBranchManager.d.ts +21 -1
  153. package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
  154. package/dist/editor/hooks/useBranchManager.js +68 -32
  155. package/dist/editor/hooks/useBranchManager.js.map +1 -1
  156. package/dist/editor/hooks/useBranchesData.d.ts +57 -0
  157. package/dist/editor/hooks/useBranchesData.d.ts.map +1 -0
  158. package/dist/editor/hooks/useBranchesData.js +69 -0
  159. package/dist/editor/hooks/useBranchesData.js.map +1 -0
  160. package/dist/editor/hooks/useCommentSystem.d.ts.map +1 -1
  161. package/dist/editor/hooks/useCommentSystem.js +24 -22
  162. package/dist/editor/hooks/useCommentSystem.js.map +1 -1
  163. package/dist/editor/hooks/useCommentsData.d.ts +29 -0
  164. package/dist/editor/hooks/useCommentsData.d.ts.map +1 -0
  165. package/dist/editor/hooks/useCommentsData.js +40 -0
  166. package/dist/editor/hooks/useCommentsData.js.map +1 -0
  167. package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
  168. package/dist/editor/hooks/useDraftManager.js +32 -18
  169. package/dist/editor/hooks/useDraftManager.js.map +1 -1
  170. package/dist/editor/hooks/useEntriesData.d.ts +35 -0
  171. package/dist/editor/hooks/useEntriesData.d.ts.map +1 -0
  172. package/dist/editor/hooks/useEntriesData.js +96 -0
  173. package/dist/editor/hooks/useEntriesData.js.map +1 -0
  174. package/dist/editor/hooks/useEntryManager.d.ts +8 -15
  175. package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
  176. package/dist/editor/hooks/useEntryManager.js +259 -117
  177. package/dist/editor/hooks/useEntryManager.js.map +1 -1
  178. package/dist/editor/hooks/usePermissionManager.d.ts +2 -2
  179. package/dist/editor/hooks/usePermissionManager.d.ts.map +1 -1
  180. package/dist/editor/hooks/usePermissionManager.js +11 -9
  181. package/dist/editor/hooks/usePermissionManager.js.map +1 -1
  182. package/dist/editor/hooks/useReferenceResolution.d.ts.map +1 -1
  183. package/dist/editor/hooks/useReferenceResolution.js +24 -1
  184. package/dist/editor/hooks/useReferenceResolution.js.map +1 -1
  185. package/dist/editor/media/MediaLibraryBody.d.ts.map +1 -1
  186. package/dist/editor/media/MediaLibraryBody.js +12 -2
  187. package/dist/editor/media/MediaLibraryBody.js.map +1 -1
  188. package/dist/editor/permission-manager/GroupSelector.d.ts.map +1 -1
  189. package/dist/editor/permission-manager/GroupSelector.js +7 -2
  190. package/dist/editor/permission-manager/GroupSelector.js.map +1 -1
  191. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +3 -3
  192. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts.map +1 -1
  193. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +1 -0
  194. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js.map +1 -1
  195. package/dist/editor/permission-manager/types.d.ts +6 -4
  196. package/dist/editor/permission-manager/types.d.ts.map +1 -1
  197. package/dist/editor/test-setup.js +8 -0
  198. package/dist/editor/test-setup.js.map +1 -1
  199. package/dist/git-manager.d.ts +126 -9
  200. package/dist/git-manager.d.ts.map +1 -1
  201. package/dist/git-manager.js +251 -27
  202. package/dist/git-manager.js.map +1 -1
  203. package/dist/github-service.d.ts.map +1 -1
  204. package/dist/github-service.js +13 -7
  205. package/dist/github-service.js.map +1 -1
  206. package/dist/http/handler.d.ts.map +1 -1
  207. package/dist/http/handler.js +8 -2
  208. package/dist/http/handler.js.map +1 -1
  209. package/dist/operating-mode/client-unsafe-strategy.d.ts.map +1 -1
  210. package/dist/operating-mode/client-unsafe-strategy.js +7 -8
  211. package/dist/operating-mode/client-unsafe-strategy.js.map +1 -1
  212. package/dist/operating-mode/deployment-name.d.ts +28 -0
  213. package/dist/operating-mode/deployment-name.d.ts.map +1 -0
  214. package/dist/operating-mode/deployment-name.js +78 -0
  215. package/dist/operating-mode/deployment-name.js.map +1 -0
  216. package/dist/operating-mode/index.d.ts +5 -1
  217. package/dist/operating-mode/index.d.ts.map +1 -1
  218. package/dist/operating-mode/index.js +7 -1
  219. package/dist/operating-mode/index.js.map +1 -1
  220. package/dist/operating-mode/types.d.ts +13 -3
  221. package/dist/operating-mode/types.d.ts.map +1 -1
  222. package/dist/paths/branch-name.d.ts +38 -0
  223. package/dist/paths/branch-name.d.ts.map +1 -1
  224. package/dist/paths/branch-name.js +46 -0
  225. package/dist/paths/branch-name.js.map +1 -1
  226. package/dist/paths/index.d.ts +1 -1
  227. package/dist/paths/index.d.ts.map +1 -1
  228. package/dist/paths/index.js +1 -1
  229. package/dist/paths/index.js.map +1 -1
  230. package/dist/reference-resolver.d.ts +6 -2
  231. package/dist/reference-resolver.d.ts.map +1 -1
  232. package/dist/reference-resolver.js +8 -1
  233. package/dist/reference-resolver.js.map +1 -1
  234. package/dist/schema/meta-loader.d.ts.map +1 -1
  235. package/dist/schema/meta-loader.js +10 -2
  236. package/dist/schema/meta-loader.js.map +1 -1
  237. package/dist/schema/schema-store.d.ts +11 -2
  238. package/dist/schema/schema-store.d.ts.map +1 -1
  239. package/dist/schema/schema-store.js +23 -11
  240. package/dist/schema/schema-store.js.map +1 -1
  241. package/dist/settings-workspace.d.ts +0 -15
  242. package/dist/settings-workspace.d.ts.map +1 -1
  243. package/dist/settings-workspace.js +97 -1
  244. package/dist/settings-workspace.js.map +1 -1
  245. package/dist/types.d.ts +63 -2
  246. package/dist/types.d.ts.map +1 -1
  247. package/dist/utils/debug.d.ts +11 -0
  248. package/dist/utils/debug.d.ts.map +1 -1
  249. package/dist/utils/debug.js +12 -1
  250. package/dist/utils/debug.js.map +1 -1
  251. package/dist/utils/git.d.ts +38 -0
  252. package/dist/utils/git.d.ts.map +1 -1
  253. package/dist/utils/git.js +69 -0
  254. package/dist/utils/git.js.map +1 -1
  255. package/dist/utils/logger.d.ts +71 -0
  256. package/dist/utils/logger.d.ts.map +1 -0
  257. package/dist/utils/logger.js +85 -0
  258. package/dist/utils/logger.js.map +1 -0
  259. package/dist/validation/entry-type-reference-validator.d.ts +33 -0
  260. package/dist/validation/entry-type-reference-validator.d.ts.map +1 -0
  261. package/dist/validation/entry-type-reference-validator.js +110 -0
  262. package/dist/validation/entry-type-reference-validator.js.map +1 -0
  263. package/dist/worker/cms-worker.d.ts +232 -3
  264. package/dist/worker/cms-worker.d.ts.map +1 -1
  265. package/dist/worker/cms-worker.js +856 -87
  266. package/dist/worker/cms-worker.js.map +1 -1
  267. package/dist/worker/log.d.ts +61 -0
  268. package/dist/worker/log.d.ts.map +1 -0
  269. package/dist/worker/log.js +74 -0
  270. package/dist/worker/log.js.map +1 -0
  271. package/package.json +3 -1
@@ -1,9 +1,8 @@
1
- import type { CollectionItem } from '../../api/entries';
2
1
  import type { EditorEntry, EditorCollection } from '../Editor';
3
2
  import type { LogicalPath } from '../../paths/types';
4
3
  import type { FormValue } from '../FormRenderer';
5
4
  import type { EntryFieldError } from '../../validation/entry-validator';
6
- import { type ApiClient } from '../context';
5
+ export { listAllEntries } from './useEntriesData';
7
6
  /**
8
7
  * Thrown by saveEntry when the API returns a non-200 response. Carries the
9
8
  * HTTP status so callers can distinguish conflict (409) and validation
@@ -15,19 +14,6 @@ export declare class SaveApiError extends Error {
15
14
  readonly fieldErrors?: EntryFieldError[] | undefined;
16
15
  constructor(status: number, serverMessage?: string, fieldErrors?: EntryFieldError[] | undefined);
17
16
  }
18
- /**
19
- * Fetch every entry on a branch by following the list endpoint's pagination
20
- * cursor. Deduped by logicalPath: the cursor is offset-based, so an item can
21
- * repeat across pages if content changes between requests.
22
- *
23
- * Exported for direct unit testing.
24
- */
25
- export declare function listAllEntries(apiClient: {
26
- entries: Pick<ApiClient['entries'], 'list'>;
27
- }, branch: string): Promise<{
28
- entries: CollectionItem[];
29
- truncated: boolean;
30
- }>;
31
17
  export interface UseEntryManagerOptions {
32
18
  initialEntries: EditorEntry[];
33
19
  initialSelectedId?: string;
@@ -45,6 +31,13 @@ export interface UseEntryManagerReturn {
45
31
  setEntries: (entries: EditorEntry[]) => void;
46
32
  collections: EditorCollection[];
47
33
  currentEntry: EditorEntry | undefined;
34
+ /**
35
+ * Entry-type schema names available on this branch, from the same schema
36
+ * fetch that builds `collections`/`entries`. Exposed here so Editor.tsx's
37
+ * schema-editor "available schemas" list doesn't need its own separate
38
+ * fetch of the same schema endpoint.
39
+ */
40
+ availableSchemas: string[];
48
41
  /** True while the first entry load for the current branch is in flight (initial load, per branch). */
49
42
  entriesInitializing: boolean;
50
43
  navigatorOpen: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useEntryManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useEntryManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useEntryManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useEntryManager.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
1
  import { useEffect, useMemo, useRef, useState } from 'react';
2
+ import useSWR, { useSWRConfig } from 'swr';
2
3
  import { notifications } from '@mantine/notifications';
3
- import { MAX_ENTRIES_PER_PAGE } from '../../api/entries-constants.js';
4
- import { buildEntriesFromListResponse, buildWritePayload, normalizeContentPayload, } from '../editor-utils.js';
4
+ import { buildWritePayload, normalizeContentPayload } from '../editor-utils.js';
5
5
  import { isDataOnlyFormat } from '../../utils/format.js';
6
+ import { getErrorMessage } from '../../utils/error.js';
6
7
  import { useApiClient } from '../context/index.js';
8
+ import { entriesKey, fetchEntriesAndSchema } from './useEntriesData.js';
9
+ // Re-exported so existing imports of `listAllEntries` from this module keep
10
+ // working -- the implementation lives in useEntriesData.ts alongside the
11
+ // other fetch/key/type pieces useEntryManager shares with the SWR layer.
12
+ export { listAllEntries } from './useEntriesData.js';
7
13
  /**
8
14
  * Thrown by saveEntry when the API returns a non-200 response. Carries the
9
15
  * HTTP status so callers can distinguish conflict (409) and validation
@@ -18,38 +24,13 @@ export class SaveApiError extends Error {
18
24
  this.name = 'SaveApiError';
19
25
  }
20
26
  }
21
- /** Page size for entry list requests — the server's per-page cap, imported to avoid drift. */
22
- const ENTRIES_PAGE_LIMIT = MAX_ENTRIES_PER_PAGE;
23
- /** Safety cap on pagination: 50 pages x 200 = 10,000 entries. */
24
- const MAX_ENTRY_PAGES = 50;
25
- /**
26
- * Fetch every entry on a branch by following the list endpoint's pagination
27
- * cursor. Deduped by logicalPath: the cursor is offset-based, so an item can
28
- * repeat across pages if content changes between requests.
29
- *
30
- * Exported for direct unit testing.
31
- */
32
- export async function listAllEntries(apiClient, branch) {
33
- const byPath = new Map();
34
- let cursor;
35
- for (let page = 0; page < MAX_ENTRY_PAGES; page++) {
36
- const result = await apiClient.entries.list({
37
- branch,
38
- limit: String(ENTRIES_PAGE_LIMIT),
39
- ...(cursor !== undefined ? { cursor } : {}),
40
- });
41
- if (!result.ok || !result.data)
42
- throw new Error(`Refresh failed: ${result.status}`);
43
- const data = result.data;
44
- for (const entry of data.entries)
45
- byPath.set(entry.logicalPath, entry);
46
- if (!data.pagination?.hasMore || !data.pagination.cursor) {
47
- return { entries: [...byPath.values()], truncated: false };
48
- }
49
- cursor = data.pagination.cursor;
50
- }
51
- return { entries: [...byPath.values()], truncated: true };
52
- }
27
+ // Module-level singletons for the derived-empty fallbacks. These must be
28
+ // referentially stable: `collectionByPath` and `currentEntry` memoize on them,
29
+ // and a fresh `[]` each render would invalidate both on every render while a
30
+ // branch's data is in flight. Never mutate them.
31
+ const EMPTY_ENTRIES = [];
32
+ const EMPTY_COLLECTIONS = [];
33
+ const EMPTY_SCHEMAS = [];
53
34
  /**
54
35
  * Custom hook for managing editor entries (CRUD operations).
55
36
  *
@@ -81,15 +62,43 @@ export async function listAllEntries(apiClient, branch) {
81
62
  */
82
63
  export function useEntryManager(options) {
83
64
  const apiClient = useApiClient();
84
- const [entriesState, setEntriesState] = useState(options.initialEntries);
85
- const [collectionsState, setCollectionsState] = useState(options.collections || []);
86
- // True while the first entry load for the current branch is in flight. Seeded from the
87
- // initial branch so it is already true on the first render (before the load effect runs),
88
- // which lets the empty editor pane / navigator show "Loading…" instead of briefly flashing
89
- // "Select an item…" / "No content". Reset per branch and cleared when the load settles, so a
90
- // genuinely empty branch falls back to the normal empty state rather than a stuck loader.
91
- // Distinct from the shared `setBusy` flag, which also covers saves/renames once content loads.
92
- const [entriesInitializing, setEntriesInitializing] = useState(() => Boolean(options.branchName));
65
+ const { mutate: globalMutate } = useSWRConfig();
66
+ // The fetched view of ONE branch, committed as a single record stamped with
67
+ // the branch it came from. Everything below derives from it and falls back to
68
+ // empty whenever the stamp doesn't match the branch currently being shown, so
69
+ // another branch's content is unrenderable by construction.
70
+ //
71
+ // This replaced three independent mirrors (entries/collections/
72
+ // availableSchemas), which were only ever reset by a SUCCESSFUL commit. Every
73
+ // early return in the commit effect below therefore left the previous
74
+ // branch's data on screen: no cached data yet for the new branch (the common
75
+ // case -- any first visit to a branch, for the whole duration of its fetch),
76
+ // or a stale SWR slot. The editor then auto-selected one of those stale
77
+ // entries (see the selection effect below), and a save could file its OCC
78
+ // token under one contentId and look it up under another, silently skipping
79
+ // conflict detection -- `content-store.ts` only compares mtimes when
80
+ // `expectedVersion !== undefined`, so the write became a blind overwrite.
81
+ // Deriving from a stamped record fixes that structurally instead of relying
82
+ // on every code path remembering to clear.
83
+ const [view, setView] = useState(() => ({
84
+ branch: options.branchName,
85
+ entries: options.initialEntries,
86
+ collections: options.collections ?? [],
87
+ availableSchemas: [],
88
+ }));
89
+ const isCurrentBranchView = view.branch === options.branchName;
90
+ const entriesState = isCurrentBranchView ? view.entries : EMPTY_ENTRIES;
91
+ const collectionsState = isCurrentBranchView ? view.collections : EMPTY_COLLECTIONS;
92
+ const availableSchemas = isCurrentBranchView ? view.availableSchemas : EMPTY_SCHEMAS;
93
+ // Exposed as `setEntries` (see the return value). Merges rather than
94
+ // replaces -- a bare record write would wipe `collections`/
95
+ // `availableSchemas` -- and never grafts another branch's collections under
96
+ // the current branch's stamp.
97
+ const setEntries = (entries) => {
98
+ setView((prev) => prev.branch === options.branchName
99
+ ? { ...prev, entries }
100
+ : { branch: options.branchName, entries, collections: [], availableSchemas: [] });
101
+ };
93
102
  // Initialize with prop value or empty (URL sync happens in effect after mount)
94
103
  const [selectedPath, setSelectedPath] = useState(options.initialSelectedId ?? '');
95
104
  const [navigatorOpen, setNavigatorOpen] = useState(false);
@@ -104,11 +113,71 @@ export function useEntryManager(options) {
104
113
  // ("modified by another editor") on save-after-switch, proven by e2e trace.
105
114
  const entryVersionsRef = useRef(new Map());
106
115
  const versionKey = (branch, contentId) => `${branch}:${contentId}`;
107
- // Monotonic token so a stale refresh (e.g. superseded by a branch switch) doesn't commit state
108
- const refreshSeqRef = useRef(0);
109
- // Separate token for the branch-change load below: a superseded load's `.finally`
110
- // must not clear the loading flags while the newer branch is still loading.
111
- const branchLoadSeqRef = useRef(0);
116
+ // PER-BRANCH monotonic tokens guarding every commit of the fetched
117
+ // `BranchView` record above, shared by BOTH the automatic SWR-backed load
118
+ // (below) and explicit `refreshEntries()` calls. Two maps, keyed by branch:
119
+ //
120
+ // - `claimed`: bumped the moment an attempt's request starts; the value is
121
+ // baked into that attempt's result tag.
122
+ // - `committed`: the tag seq currently REFLECTED IN STATE for that branch.
123
+ //
124
+ // The commit rule is `tag.seq >= committed(tag.branch)` -- "never move a
125
+ // branch's view backwards" -- NOT `tag.seq === claimed(tag.branch)`
126
+ // ("newest attempt wins"). The difference matters twice:
127
+ //
128
+ // 1. SWR replays a branch's CACHED tagged result when the user switches
129
+ // back to it, and the cached tag necessarily carries the seq claimed
130
+ // when that data was originally fetched. Under a newest-attempt rule
131
+ // (or a single GLOBAL counter, as originally shipped), any newer claim
132
+ // -- another branch's load with a global counter, or the switch-back's
133
+ // own revalidation with a per-branch one -- made the replayed,
134
+ // perfectly valid cache hit fail the check and never commit; when the
135
+ // switch back also landed inside SWR's dedupingInterval, no
136
+ // revalidation followed either, so the editor kept showing the
137
+ // PREVIOUS branch's entries under the new branch indefinitely. A
138
+ // replayed tag always passes the committed-seq rule (it was committed
139
+ // before, or is newer than what was).
140
+ // 2. On remount these refs reset to empty maps while SWR's cache (owned by
141
+ // the provider above this component) survives, so a replayed tag can
142
+ // carry a seq higher than anything this instance ever claimed -- still
143
+ // the newest data known for that branch, and still committable. Note the
144
+ // cache now belongs to `SWRProvider`'s own `provider` Map rather than
145
+ // SWR's module global, so "survives" means across remounts BELOW
146
+ // `CanopyEditor`; remounting `CanopyEditor` itself starts a fresh cache,
147
+ // which is the same empty-cache path as a first load.
148
+ //
149
+ // What the committed-seq rule gives up: when two same-branch attempts race
150
+ // and the OLDER response arrives second while the newer is still in
151
+ // flight, the older commits transiently and the newer overwrites it on
152
+ // settle (a sub-second flash of slightly-stale data, converging to the
153
+ // newest). A response older than what's already displayed is still
154
+ // rejected outright. Cross-branch bleed is prevented separately: every
155
+ // commit site checks the tag's branch against options.branchName at
156
+ // settle time.
157
+ const refreshSeqRef = useRef({
158
+ claimed: new Map(),
159
+ committed: new Map(),
160
+ });
161
+ const claimRefreshSeq = (branch) => {
162
+ const next = (refreshSeqRef.current.claimed.get(branch) ?? 0) + 1;
163
+ refreshSeqRef.current.claimed.set(branch, next);
164
+ return next;
165
+ };
166
+ const committedRefreshSeq = (branch) => refreshSeqRef.current.committed.get(branch) ?? 0;
167
+ // The branch currently shown, readable at SETTLE time from async closures
168
+ // that captured an older render's `options` (refreshEntries below runs
169
+ // across renders; its captured options.branchName goes stale the moment
170
+ // the user switches mid-flight, which is exactly when the check matters).
171
+ const currentBranchRef = useRef(options.branchName);
172
+ currentBranchRef.current = options.branchName;
173
+ const recordCommittedRefreshSeq = (branch, seq) => {
174
+ refreshSeqRef.current.committed.set(branch, seq);
175
+ // A commit also implies any future claim must outrank this tag, so a
176
+ // replayed high-seq tag (remount case above) keeps ordering coherent.
177
+ if ((refreshSeqRef.current.claimed.get(branch) ?? 0) < seq) {
178
+ refreshSeqRef.current.claimed.set(branch, seq);
179
+ }
180
+ };
112
181
  // Entry create modal state
113
182
  const [createModalOpen, setCreateModalOpen] = useState(false);
114
183
  const [createModalCollection, setCreateModalCollection] = useState(null);
@@ -204,49 +273,35 @@ export function useEntryManager(options) {
204
273
  }
205
274
  return normalizeContentPayload(result.data);
206
275
  };
276
+ // Explicit reload: always issues a fresh, independent fetch (never
277
+ // deduped/coalesced against an in-flight automatic load) so callers that
278
+ // just mutated content (save, create, rename, schema change) are
279
+ // guaranteed to see their own write reflected. Seq-guarded per the
280
+ // refreshSeqRef doc comment above; also warms the SWR cache for `branch`
281
+ // so a later automatic re-fetch of the same key (e.g. switching away and
282
+ // back) can reuse it instead of refetching.
207
283
  const refreshEntries = async (branch = options.branchName) => {
208
284
  if (!branch)
209
285
  return [];
210
- const seq = ++refreshSeqRef.current;
211
- // Fetch schema from schema API
212
- const schemaResult = await apiClient.schema.get({ branch });
213
- if (!schemaResult.ok || !schemaResult.data) {
214
- throw new Error(`Schema fetch failed: ${schemaResult.status}`);
215
- }
216
- // Hydrate wire flatSchema: resolve schemaRef → schema from entrySchemas dict
217
- const { entrySchemas } = schemaResult.data;
218
- const hydratedFlatSchema = schemaResult.data.flatSchema.map((item) => item.type === 'entry-type' ? { ...item, schema: entrySchemas[item.schemaRef] ?? [] } : item);
219
- // Build editor collections from hydrated flatSchema
220
- // Dynamic import: lazy-load heavier editor config; only needed after API data arrives
221
- const { buildEditorCollections } = await import('../editor-config.js');
222
- const collections = buildEditorCollections(hydratedFlatSchema);
223
- // Fetch ALL entries, following the pagination cursor
224
- const { entries: allEntries, truncated } = await listAllEntries(apiClient, branch);
225
- if (truncated) {
226
- console.warn(`Entry list truncated at ${MAX_ENTRY_PAGES * ENTRIES_PAGE_LIMIT} entries for branch "${branch}"`);
227
- notifications.show({
228
- title: 'Entry list truncated',
229
- message: `Showing the first ${(MAX_ENTRY_PAGES * ENTRIES_PAGE_LIMIT).toLocaleString()} entries.`,
230
- color: 'yellow',
231
- });
232
- }
233
- // Build entries with resolved schemas from flatSchema
234
- const refreshed = buildEntriesFromListResponse({
235
- response: {
236
- entries: allEntries,
237
- pagination: { hasMore: false, limit: ENTRIES_PAGE_LIMIT },
238
- },
239
- branchName: branch,
240
- resolvePreviewSrc: (entry) => options.resolvePreviewSrc(entry) ?? '',
241
- contentRoot: options.contentRoot || 'content',
242
- flatSchema: hydratedFlatSchema,
286
+ const seq = claimRefreshSeq(branch);
287
+ const fetched = await fetchEntriesAndSchema(apiClient, branch, {
288
+ resolvePreviewSrc: options.resolvePreviewSrc,
289
+ contentRoot: options.contentRoot,
243
290
  });
244
- // Commit collections + entries together, and only if no newer refresh started meanwhile
245
- if (seq === refreshSeqRef.current) {
246
- setCollectionsState(collections);
247
- setEntriesState(refreshed);
291
+ if (seq >= committedRefreshSeq(branch)) {
292
+ // Warm the SWR cache for this branch (it's this branch's own slot, so
293
+ // a later switch back can replay it), but only commit component state
294
+ // when the user is still ON this branch at settle time -- with
295
+ // per-branch seqs, a branch switch no longer advances the old
296
+ // branch's counter, so this check is what stops a late refresh of the
297
+ // switched-away branch from overwriting the new branch's view.
298
+ void globalMutate(entriesKey(branch), { fetched, seq, branch }, { revalidate: false });
299
+ if (branch === currentBranchRef.current) {
300
+ recordCommittedRefreshSeq(branch, seq);
301
+ setView({ branch, ...fetched });
302
+ }
248
303
  }
249
- return refreshed;
304
+ return fetched.entries;
250
305
  };
251
306
  /**
252
307
  * Open the create entry modal for the specified collection
@@ -355,39 +410,125 @@ export function useEntryManager(options) {
355
410
  options.setBusy(false);
356
411
  }
357
412
  };
358
- // Clear selection and refresh entries when branch changes (reactive pattern)
413
+ // Clear selection when branch changes (reactive pattern). Data loading
414
+ // itself is handled below by the SWR-backed fetch -- this effect only
415
+ // owns the "clear stale selection" side effect.
359
416
  useEffect(() => {
360
- if (options.branchName) {
361
- // On initial mount, preserve the initial selection from URL
362
- // On subsequent branch changes, clear selection
363
- if (isInitialMount.current) {
364
- isInitialMount.current = false;
365
- }
366
- else {
367
- setSelectedPath('');
368
- // Bound version-map growth across switches. Correctness no longer
369
- // depends on this clear: tokens are keyed by `${branch}:${contentId}`
370
- // (see entryVersionsRef), so a late response from the previous branch
371
- // can't poison the new branch's saves even if it lands after this.
372
- entryVersionsRef.current.clear();
373
- }
374
- // Refresh entries for new branch. Guard the cleanup with a per-branch-load
375
- // token: on a rapid A→B switch where A resolves after B starts, A's `.finally`
376
- // must not clear the loading flags while B is still in flight (which would
377
- // reintroduce the very flash entriesInitializing exists to prevent).
378
- const loadSeq = ++branchLoadSeqRef.current;
379
- options.setBusy(true);
380
- setEntriesInitializing(true);
381
- refreshEntries(options.branchName)
382
- .catch(console.error)
383
- .finally(() => {
384
- if (loadSeq !== branchLoadSeqRef.current)
385
- return;
386
- options.setBusy(false);
387
- setEntriesInitializing(false);
388
- });
417
+ if (!options.branchName)
418
+ return;
419
+ // On initial mount, preserve the initial selection from URL
420
+ // On subsequent branch changes, clear selection
421
+ if (isInitialMount.current) {
422
+ isInitialMount.current = false;
423
+ }
424
+ else {
425
+ setSelectedPath('');
426
+ // Bound version-map growth across switches. Correctness no longer
427
+ // depends on this clear: tokens are keyed by `${branch}:${contentId}`
428
+ // (see entryVersionsRef), so a late response from the previous branch
429
+ // can't poison the new branch's saves even if it lands after this.
430
+ entryVersionsRef.current.clear();
389
431
  }
390
432
  }, [options.branchName]);
433
+ // Automatic schema + entries load, keyed per branch. SWR dedupes
434
+ // concurrent mounts of the same key (e.g. React Strict Mode's double
435
+ // effect invoke) into a single request. `entriesSwrKey` is null when
436
+ // there's no branch yet, which pauses fetching entirely.
437
+ //
438
+ // The fetcher tags its result with a `refreshSeqRef` token the moment the
439
+ // underlying request actually starts, so this automatic load and any
440
+ // explicit `refreshEntries()` call race-guard against EACH OTHER through
441
+ // the same shared counter (see the doc comment on refreshSeqRef above) --
442
+ // not just against other automatic loads.
443
+ const entriesSwrKey = options.branchName ? entriesKey(options.branchName) : null;
444
+ const { data: taggedEntries, error: entriesError, isLoading: entriesIsLoading, isValidating: entriesIsValidating, } = useSWR(entriesSwrKey, () => {
445
+ // Claim the seq token synchronously, the instant the underlying request
446
+ // actually starts -- matching how the explicit refreshEntries() path
447
+ // claims it (before its first await) -- so races between the two are
448
+ // ordered by when each attempt STARTED, not by unrelated differences in
449
+ // how many microtask hops SWR's own dispatch machinery adds before the
450
+ // fetcher body runs.
451
+ const branch = options.branchName;
452
+ const seq = claimRefreshSeq(branch);
453
+ return fetchEntriesAndSchema(apiClient, branch, {
454
+ resolvePreviewSrc: options.resolvePreviewSrc,
455
+ contentRoot: options.contentRoot,
456
+ }).then((fetched) => ({ fetched, seq, branch }));
457
+ });
458
+ // Commit the current branch's tagged data -- both fresh settles AND SWR
459
+ // cache replays on a switch back to a previously visited branch (the
460
+ // effect re-runs on options.branchName so the replayed tag, whose object
461
+ // identity didn't change, still gets (re)committed). The seq comparison is
462
+ // the per-branch committed-seq rule -- see refreshSeqRef's doc comment for
463
+ // why it is not "newest claim wins" and why a global counter broke cached
464
+ // replays. The branch check keeps a tag from ever committing under a
465
+ // different branch's view.
466
+ useEffect(() => {
467
+ if (!taggedEntries)
468
+ return;
469
+ if (taggedEntries.branch !== options.branchName)
470
+ return;
471
+ if (taggedEntries.seq < committedRefreshSeq(taggedEntries.branch)) {
472
+ // The cached tag for the CURRENT branch is older than what this
473
+ // instance already displayed for it (e.g. a slow automatic load's
474
+ // settle overwrote the SWR slot after a newer explicit refresh
475
+ // committed). State already shows newer data, so don't regress it --
476
+ // but the SWR slot is stale now, so ask for a revalidation; inside
477
+ // the dedupingInterval nothing else would refresh this key.
478
+ void globalMutate(entriesKey(taggedEntries.branch));
479
+ return;
480
+ }
481
+ recordCommittedRefreshSeq(taggedEntries.branch, taggedEntries.seq);
482
+ setView({ branch: taggedEntries.branch, ...taggedEntries.fetched });
483
+ // Deps: only the tag and the current branch matter; the seq helpers and
484
+ // globalMutate are stable. (This file is plain .ts, so the
485
+ // react-hooks/exhaustive-deps rule isn't active here anyway -- same note
486
+ // as useCommentSystem.ts.)
487
+ }, [taggedEntries, options.branchName]);
488
+ // Mirrors the automatic load's in-flight state onto the shared busy flag.
489
+ // Explicit refreshEntries() calls intentionally do NOT toggle this (they
490
+ // never did, pre-SWR) -- callers that need a busy indicator around an
491
+ // explicit refresh (e.g. renameEntry) already bracket setBusy themselves.
492
+ useEffect(() => {
493
+ options.setBusy(entriesIsValidating);
494
+ }, [entriesIsValidating, options.setBusy]);
495
+ // True while the current branch's entries are not yet on screen. Lets the empty editor pane
496
+ // show "Loading…" instead of briefly flashing "Select an item…". Each branch has its own SWR
497
+ // cache slot, so this is naturally per-branch.
498
+ //
499
+ // `!isCurrentBranchView` is part of the condition, not just `isLoading`: SWR reports
500
+ // `isLoading: false` whenever ANY cached data exists for the key, and the committed record
501
+ // can also lag a settled fetch by a render. Without it there would be a window that is
502
+ // simultaneously "showing nothing" and "not loading".
503
+ //
504
+ // `!entriesError` is what keeps that window from becoming permanent. The provider sets
505
+ // `shouldRetryOnError: false`, so a failed load never resolves on its own: the stamp would
506
+ // never match, and the pane would sit at "Loading content…" forever with no retry
507
+ // affordance. On error we fall through to the normal empty state, and the effect below
508
+ // says what happened.
509
+ const entriesInitializing = Boolean(options.branchName) && !entriesError && (entriesIsLoading || !isCurrentBranchView);
510
+ // Surface a failed automatic load. The pre-SWR code showed a notification and logged once
511
+ // per failure; the SWR migration dropped that, and since `shouldRetryOnError` is false the
512
+ // failure is terminal until something else revalidates the key -- so without this the editor
513
+ // would just show an empty content tree with no explanation. Keyed by branch (switching
514
+ // branches can report a fresh failure) and cleared whenever there's no error, so returning
515
+ // to a branch that fails again still reports.
516
+ const notifiedErrorBranchRef = useRef(null);
517
+ useEffect(() => {
518
+ if (!entriesError || !options.branchName) {
519
+ notifiedErrorBranchRef.current = null;
520
+ return;
521
+ }
522
+ if (notifiedErrorBranchRef.current === options.branchName)
523
+ return;
524
+ notifiedErrorBranchRef.current = options.branchName;
525
+ console.error(entriesError);
526
+ notifications.show({
527
+ title: 'Could not load content',
528
+ message: getErrorMessage(entriesError),
529
+ color: 'red',
530
+ });
531
+ }, [entriesError, options.branchName]);
391
532
  // Validate selected entry when entries change
392
533
  useEffect(() => {
393
534
  // Skip validation if entries haven't loaded yet
@@ -428,9 +569,10 @@ export function useEntryManager(options) {
428
569
  selectedPath,
429
570
  setSelectedPath,
430
571
  entries: entriesState,
431
- setEntries: setEntriesState,
572
+ setEntries,
432
573
  collections: collectionsState,
433
574
  currentEntry,
575
+ availableSchemas,
434
576
  entriesInitializing,
435
577
  navigatorOpen,
436
578
  setNavigatorOpen,
@@ -1 +1 @@
1
- {"version":3,"file":"useEntryManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useEntryManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useEntryManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useEntryManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,KAAK,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAKtD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAEpE,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YACkB,MAAc,EAC9B,aAAsB,EACN,WAA+B;QAE/C,KAAK,CAAC,aAAa,IAAI,gBAAgB,MAAM,EAAE,CAAC,CAAA;QAJhC,WAAM,GAAN,MAAM,CAAQ;QAEd,gBAAW,GAAX,WAAW,CAAoB;QAG/C,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AA0DD,yEAAyE;AACzE,+EAA+E;AAC/E,6EAA6E;AAC7E,iDAAiD;AACjD,MAAM,aAAa,GAAkB,EAAE,CAAA;AACvC,MAAM,iBAAiB,GAAuB,EAAE,CAAA;AAChD,MAAM,aAAa,GAAa,EAAE,CAAA;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAAA;IAC/C,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,4DAA4D;IAC5D,EAAE;IACF,gEAAgE;IAChE,8EAA8E;IAC9E,sEAAsE;IACtE,6EAA6E;IAC7E,6EAA6E;IAC7E,wEAAwE;IACxE,0EAA0E;IAC1E,4EAA4E;IAC5E,qEAAqE;IACrE,0EAA0E;IAC1E,4EAA4E;IAC5E,2CAA2C;IAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAa,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,OAAO,CAAC,UAAU;QAC1B,OAAO,EAAE,OAAO,CAAC,cAAc;QAC/B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,gBAAgB,EAAE,EAAE;KACrB,CAAC,CAAC,CAAA;IACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,UAAU,CAAA;IAC9D,MAAM,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAA;IACvE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAA;IACnF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAA;IAEpF,qEAAqE;IACrE,4DAA4D;IAC5D,4EAA4E;IAC5E,8BAA8B;IAC9B,MAAM,UAAU,GAAG,CAAC,OAAsB,EAAE,EAAE;QAC5C,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,UAAU;YAChC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;YACtB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CACnF,CAAA;IACH,CAAC,CAAA;IAED,+EAA+E;IAC/E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;IACzF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACtC,gEAAgE;IAChE,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,gBAAgB,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAA;IAC/D,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAA;IAClF,mEAAmE;IACnE,0EAA0E;IAC1E,4EAA4E;IAC5E,EAAE;IACF,2EAA2E;IAC3E,0CAA0C;IAC1C,2EAA2E;IAC3E,EAAE;IACF,yEAAyE;IACzE,oEAAoE;IACpE,yDAAyD;IACzD,EAAE;IACF,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,kEAAkE;IAClE,yEAAyE;IACzE,+DAA+D;IAC/D,kEAAkE;IAClE,oEAAoE;IACpE,yEAAyE;IACzE,yCAAyC;IACzC,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,oEAAoE;IACpE,4EAA4E;IAC5E,yDAAyD;IACzD,EAAE;IACF,2EAA2E;IAC3E,oEAAoE;IACpE,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,uEAAuE;IACvE,oEAAoE;IACpE,eAAe;IACf,MAAM,aAAa,GAAG,MAAM,CAAmE;QAC7F,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,SAAS,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC,CAAA;IACF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAU,EAAE;QACjD,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACjE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAU,EAAE,CACrD,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClD,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACnD,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAA;IAC7C,MAAM,yBAAyB,GAAG,CAAC,MAAc,EAAE,GAAW,EAAQ,EAAE;QACtE,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChD,qEAAqE;QACrE,sEAAsE;QACtE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YAC3D,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChD,CAAC;IACH,CAAC,CAAA;IAED,2BAA2B;IAC3B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7D,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC,CAAA;IACjG,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC7E,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAErE,yEAAyE;IACzE,MAAM,eAAe,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IACnD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,eAAe,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC1D,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiC,CAAA;QACpD,MAAM,IAAI,GAAG,CAAC,WAA+B,EAAE,EAAE;YAC/C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAClB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;gBAClB,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QACD,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACtB,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEtB,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EACvD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B,CAAA;IAED,MAAM,SAAS,GAAG,KAAK,EAAE,KAAkB,EAAE,EAAE;QAC7C,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjD,CAAC;QACD,qEAAqE;QACrE,oEAAoE;QACpE,uDAAuD;QACvD,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAA;QACxC,uEAAuE;QACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAA;QACxF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1C,MAAM,EAAE,aAAa;YACrB,IAAI;SACL,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAChE,0CAA0C;QAC1C,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/F,CAAC;QACD,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,KAAK,EAAE,KAAkB,EAAE,KAAgB,EAAE,EAAE;QAC/D,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjD,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC/C,sEAAsE;QACtE,uEAAuE;QACvE,oBAAoB;QACpB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAA;QACxC,uEAAuE;QACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAA;QACxF,MAAM,WAAW,GAAyD;YACxE,MAAM,EAAE,aAAa;YACrB,IAAI;SACL,CAAA;QACD,IAAI,KAAK,CAAC,SAAS;YAAE,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QAC5D,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS;YACrC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1E,CAAC,CAAC,SAAS,CAAA;QACb,MAAM,SAAS,GAAqB;YAClC,GAAI,OAAuC;YAC3C,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QACpE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QACvF,kDAAkD;QAClD,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/F,CAAC;QACD,sFAAsF;QACtF,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAA;QAC1D,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,aAAa,CAAC,IAAI,CAAC;gBACjB,KAAK,EAAE,qBAAqB;gBAC5B,0EAA0E;gBAC1E,wEAAwE;gBACxE,OAAO,EAAE,kBAAkB;qBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CACzE;qBACA,IAAI,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,KAAK;gBAChB,eAAe,EAAE,IAAI;aACtB,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAA;IAED,mEAAmE;IACnE,yEAAyE;IACzE,iEAAiE;IACjE,mEAAmE;IACnE,yEAAyE;IACzE,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,OAAO,CAAC,UAAU,EAA0B,EAAE;QAC3F,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAA;QACtB,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE;YAC7D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAA;QACF,IAAI,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,sEAAsE;YACtE,sEAAsE;YACtE,+DAA+D;YAC/D,8DAA8D;YAC9D,sEAAsE;YACtE,+DAA+D;YAC/D,KAAK,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;YACtF,IAAI,MAAM,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBACxC,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBACtC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAA;IACxB,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,iBAAiB,GAAG,KAAK,EAAE,cAA2B,EAAE,CAAU,EAAE,EAAE;QAC1E,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjC,OAAM;QACR,CAAC;QAED,wBAAwB,CAAC,GAAG,CAAC,CAAA;QAC7B,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACzB,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,uBAAuB,GAAG,KAAK,EAAE,IAAY,EAAE,aAAqB,EAAE,EAAE;QAC5E,IAAI,CAAC,qBAAqB;YAAE,OAAM;QAElC,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAC5B,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAEzB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;YAC9F,MAAM,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAA;YAEnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;gBACtC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAyB,EAAE,IAAI,EAAE,EAAE,EAAE;gBACjD,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;YAElC,uEAAuE;YACvE,MAAM,IAAI,GAAG,GAAG,qBAAqB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAA;YACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAC1C;gBACE,MAAM,EAAE,OAAO,CAAC,UAAU;gBAC1B,IAAI;gBACJ,SAAS,EAAE,aAAa;aACzB,EACD,OAAsC,CACvC,CAAA;YAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrF,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAA;YACxC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YAEpE,kDAAkD;YAClD,2EAA2E;YAC3E,2EAA2E;YAC3E,kEAAkE;YAClE,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,qBAAqB,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAC1E,CAAA;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,+DAA+D;oBAC7D,cAAc,qBAAqB,CAAC,IAAI,SAAS,IAAI,EAAE,CAC1D,CAAA;YACH,CAAC;YACD,kBAAkB,CAAC,KAAK,CAAC,CAAA;YACzB,wBAAwB,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YACzE,mBAAmB,CAAC,YAAY,CAAC,CAAA;QACnC,CAAC;gBAAS,CAAC;YACT,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACzB,wBAAwB,CAAC,IAAI,CAAC,CAAA;QAC9B,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACzB,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAE,OAAe,EAAiB,EAAE;QACzE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,WAAW,CAChD;gBACE,MAAM,EAAE,OAAO,CAAC,UAAU;gBAC1B,IAAI;aACL,EACD,EAAE,OAAO,EAAE,CACZ,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrF,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;YAED,sEAAsE;YACtE,IAAI,YAAY,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACzC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtC,CAAC;YAED,uCAAuC;YACvC,MAAM,cAAc,EAAE,CAAA;YACtB,aAAa,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE,4BAA4B;gBACrC,KAAK,EAAE,OAAO;aACf,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YACzE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAC3D,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,uEAAuE;IACvE,sEAAsE;IACtE,gDAAgD;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAM;QAC/B,4DAA4D;QAC5D,gDAAgD;QAChD,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,cAAc,CAAC,OAAO,GAAG,KAAK,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,EAAE,CAAC,CAAA;YACnB,kEAAkE;YAClE,sEAAsE;YACtE,sEAAsE;YACtE,mEAAmE;YACnE,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAClC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAExB,iEAAiE;IACjE,qEAAqE;IACrE,qEAAqE;IACrE,yDAAyD;IACzD,EAAE;IACF,0EAA0E;IAC1E,qEAAqE;IACrE,yEAAyE;IACzE,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAChF,MAAM,EACJ,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,mBAAmB,GAClC,GAAG,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE;QAC7B,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,wEAAwE;QACxE,uEAAuE;QACvE,qBAAqB;QACrB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAA;QACjC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QACnC,OAAO,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE;YAC9C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,wEAAwE;IACxE,qEAAqE;IACrE,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,qEAAqE;IACrE,2BAA2B;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa;YAAE,OAAM;QAC1B,IAAI,aAAa,CAAC,MAAM,KAAK,OAAO,CAAC,UAAU;YAAE,OAAM;QACvD,IAAI,aAAa,CAAC,GAAG,GAAG,mBAAmB,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,gEAAgE;YAChE,kEAAkE;YAClE,+DAA+D;YAC/D,qEAAqE;YACrE,mEAAmE;YACnE,4DAA4D;YAC5D,KAAK,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QACD,yBAAyB,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;QAClE,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACnE,wEAAwE;QACxE,2DAA2D;QAC3D,yEAAyE;QACzE,2BAA2B;IAC7B,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAEvC,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAE1C,4FAA4F;IAC5F,6FAA6F;IAC7F,+CAA+C;IAC/C,EAAE;IACF,qFAAqF;IACrF,2FAA2F;IAC3F,uFAAuF;IACvF,sDAAsD;IACtD,EAAE;IACF,uFAAuF;IACvF,2FAA2F;IAC3F,kFAAkF;IAClF,uFAAuF;IACvF,sBAAsB;IACtB,MAAM,mBAAmB,GACvB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAE5F,0FAA0F;IAC1F,2FAA2F;IAC3F,6FAA6F;IAC7F,wFAAwF;IACxF,2FAA2F;IAC3F,8CAA8C;IAC9C,MAAM,sBAAsB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAC1D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACzC,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAA;YACrC,OAAM;QACR,CAAC;QACD,IAAI,sBAAsB,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU;YAAE,OAAM;QACjE,sBAAsB,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAA;QACnD,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAC3B,aAAa,CAAC,IAAI,CAAC;YACjB,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC;YACtC,KAAK,EAAE,KAAK;SACb,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAEtC,8CAA8C;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,gDAAgD;QAChD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAErC,kEAAkE;QAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;YAC/B,mEAAmE;YACnE,IAAI,eAAe,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5F,eAAe,CAAC,eAAe,CAAC,OAAQ,CAAC,CAAA;gBACzC,OAAM;YACR,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;YAAE,OAAM;QAE7D,2BAA2B;QAC3B,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAA;IAEhC,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QACzC,oDAAoD;QACpD,IAAI,CAAC,gBAAgB,CAAC,OAAO;YAAE,OAAM;QACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,OAAO;QACL,YAAY;QACZ,eAAe;QACf,OAAO,EAAE,YAAY;QACrB,UAAU;QACV,WAAW,EAAE,gBAAgB;QAC7B,YAAY;QACZ,gBAAgB;QAChB,mBAAmB;QACnB,aAAa;QACb,gBAAgB;QAChB,cAAc;QACd,iBAAiB;QACjB,WAAW;QACX,SAAS;QACT,SAAS;QACT,gBAAgB,EAAE,gBAAgB;QAClC,eAAe;QACf,qBAAqB;QACrB,gBAAgB;QAChB,mBAAmB;QACnB,uBAAuB;QACvB,gBAAgB;KACjB,CAAA;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { PathPermission } from '../../config';
2
- import type { GroupMetadata } from '../../auth/types';
2
+ import type { PermissionGroupOption } from '../../auth/types';
3
3
  export interface UsePermissionManagerOptions {
4
4
  /**
5
5
  * Whether the permission manager is currently open.
@@ -11,7 +11,7 @@ export interface UsePermissionManagerReturn {
11
11
  permissionsData: PathPermission[];
12
12
  permissionsLoading: boolean;
13
13
  handleSavePermissions: (permissions: PathPermission[]) => Promise<void>;
14
- handleListGroups: () => Promise<GroupMetadata[]>;
14
+ handleListGroups: () => Promise<PermissionGroupOption[]>;
15
15
  loadPermissions: () => Promise<void>;
16
16
  }
17
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/usePermissionManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGrD,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAChD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CA6E5B"}
1
+ {"version":3,"file":"usePermissionManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/usePermissionManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAG7D,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,qBAAqB,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,gBAAgB,EAAE,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAA;IACxD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CAiF5B"}
@@ -76,17 +76,19 @@ export function usePermissionManager(options) {
76
76
  throw err;
77
77
  }
78
78
  };
79
+ // Propagates failures instead of returning [] (matching loadPermissions and
80
+ // handleSavePermissions above). The generated client RESOLVES with the error
81
+ // envelope rather than throwing, so swallowing `!result.ok` into an empty
82
+ // array left useGroupsAndUsers' .catch unfired and groupLoadError null --
83
+ // an unreadable groups.json rendered as a silently empty picker with no
84
+ // warning, which is the same failure class listGroupsHandler's deliberate
85
+ // 500 exists to prevent.
79
86
  const handleListGroups = async () => {
80
- try {
81
- const result = await apiClient.permissions.listGroups();
82
- if (!result.ok)
83
- return [];
84
- return result.data?.groups ?? [];
85
- }
86
- catch (err) {
87
- console.error('Group list failed:', err);
88
- return [];
87
+ const result = await apiClient.permissions.listGroups();
88
+ if (!result.ok) {
89
+ throw new Error(result.error || 'Failed to load groups');
89
90
  }
91
+ return result.data?.groups ?? [];
90
92
  };
91
93
  // Load permissions when permission manager opens
92
94
  useEffect(() => {