@conduction/nextcloud-vue 2.132.0 → 2.134.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 (107) hide show
  1. package/dist/esm/components/CnActionButtons/CnActionButtons.vue.js +1 -1
  2. package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js +14 -0
  3. package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +5 -4
  5. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
  6. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue.js +9 -0
  7. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue.js.map +1 -0
  8. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue2.js +237 -0
  9. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue2.js.map +1 -0
  10. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue3.js +103 -0
  11. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue3.js.map +1 -0
  12. package/dist/esm/components/CnConditionListEditor/conditionOperators.js +121 -0
  13. package/dist/esm/components/CnConditionListEditor/conditionOperators.js.map +1 -0
  14. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +12 -0
  15. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  16. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +1 -1
  17. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  18. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
  19. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +85 -10
  20. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
  21. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +60 -36
  22. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
  23. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +8 -1
  24. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  25. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  26. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue.js +1 -1
  27. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue2.js +10 -0
  28. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue2.js.map +1 -1
  29. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue3.js.map +1 -1
  30. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue.js +1 -1
  31. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js +46 -7
  32. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js.map +1 -1
  33. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js +1 -1
  34. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue.js +1 -1
  36. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js +258 -6
  37. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js +283 -131
  39. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js.map +1 -1
  40. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  41. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +42 -2
  42. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  43. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  44. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  45. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +1 -1
  46. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  47. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  48. package/dist/esm/dialogs/CnPartyAddDialog.vue.js +9 -0
  49. package/dist/esm/dialogs/CnPartyAddDialog.vue.js.map +1 -0
  50. package/dist/esm/dialogs/CnPartyAddDialog.vue2.js +184 -0
  51. package/dist/esm/dialogs/CnPartyAddDialog.vue2.js.map +1 -0
  52. package/dist/esm/dialogs/CnPartyAddDialog.vue3.js +168 -0
  53. package/dist/esm/dialogs/CnPartyAddDialog.vue3.js.map +1 -0
  54. package/dist/esm/index.js +2 -0
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/l10n/en.json.js +27 -1
  57. package/dist/esm/l10n/en.json.js.map +1 -1
  58. package/dist/esm/l10n/nl.json.js +27 -1
  59. package/dist/esm/l10n/nl.json.js.map +1 -1
  60. package/dist/esm/library-style.js +1 -1
  61. package/dist/esm/nextcloud-vue.css +353 -217
  62. package/dist/esm/store/plugins/liveUpdates.js +13 -4
  63. package/dist/esm/store/plugins/liveUpdates.js.map +1 -1
  64. package/dist/esm/store/useObjectStore.js +28 -5
  65. package/dist/esm/store/useObjectStore.js.map +1 -1
  66. package/dist/esm/utils/detailActionModel.js +6 -0
  67. package/dist/esm/utils/detailActionModel.js.map +1 -1
  68. package/dist/esm/utils/listLenses.js +20 -1
  69. package/dist/esm/utils/listLenses.js.map +1 -1
  70. package/dist/esm/utils/objectParties.js +79 -1
  71. package/dist/esm/utils/objectParties.js.map +1 -1
  72. package/dist/esm/utils/objectRows.js +59 -0
  73. package/dist/esm/utils/objectRows.js.map +1 -0
  74. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  75. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  76. package/dist/nextcloud-vue.cjs.js +7460 -5803
  77. package/dist/nextcloud-vue.cjs.js.map +2 -2
  78. package/dist/nextcloud-vue.css +353 -217
  79. package/l10n/en.json +27 -1
  80. package/l10n/nl.json +27 -1
  81. package/package.json +1 -1
  82. package/src/components/CnActionButtons/CnActionButtons.vue +15 -0
  83. package/src/components/CnConditionListEditor/CnConditionListEditor.vue +346 -0
  84. package/src/components/CnConditionListEditor/conditionOperators.js +126 -0
  85. package/src/components/CnConditionListEditor/index.js +17 -0
  86. package/src/components/CnDetailPage/CnDetailPage.md +1 -0
  87. package/src/components/CnDetailPage/CnDetailPage.vue +13 -1
  88. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +105 -12
  89. package/src/components/CnIndexPage/CnIndexPage.vue +8 -1
  90. package/src/components/CnIntegrationWidget/CnIntegrationWidget.vue +10 -0
  91. package/src/components/CnNcWidgetWidget/CnNcWidgetWidget.vue +47 -8
  92. package/src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue +401 -3
  93. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +42 -2
  94. package/src/components/CnTabsWidget/CnTabsWidget.vue +1 -1
  95. package/src/components/index.js +1 -0
  96. package/src/css/look-board-index.css +6 -0
  97. package/src/css/look-board.css +35 -7
  98. package/src/dialogs/CnPartyAddDialog.vue +309 -0
  99. package/src/index.js +2 -0
  100. package/src/schemas/app-manifest-v2.schema.json +17 -1
  101. package/src/store/plugins/liveUpdates.js +13 -4
  102. package/src/store/useObjectStore.js +28 -5
  103. package/src/utils/detailActionModel.js +6 -0
  104. package/src/utils/listLenses.js +20 -1
  105. package/src/utils/objectParties.js +78 -0
  106. package/src/utils/objectRows.js +55 -0
  107. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"useObjectStore.js","sources":["../../../src/store/useObjectStore.js"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { toRaw } from 'vue'\nimport { reportDiagnosticOnce, trackedFetch } from '../utils/diagnostics.js'\nimport { discardResponseBody } from '../utils/discardResponseBody.js'\nimport { genericError, networkError, parseResponseError } from '../utils/errors.js'\nimport { normalizeFacets } from '../utils/facets.js'\nimport { buildHeaders, buildQueryString, capitalize, prefixUrl } from '../utils/headers.js'\nimport { extractId } from '../utils/id.js'\nimport { readLensReports } from '../utils/lensAvailability.js'\nimport { dispatchObjectCreated } from '../utils/walkthroughSignals.js'\nimport { mergePluginActions, mergePluginGetters, mergePluginState } from './pluginMerge.js'\nimport { liveUpdatesPlugin } from './plugins/liveUpdates.js'\n\n/**\n * Generic Pinia store for OpenRegister object CRUD operations.\n *\n * Provides a unified interface for managing objects across registers and schemas.\n * Apps register their object types with schema/register IDs, then use type slugs\n * for all operations. Supports plugins for sub-resources (files, audit trails, etc.).\n *\n * @example\n * // Basic usage (CRUD only)\n * import { useObjectStore } from '@conduction/nextcloud-vue'\n * const store = useObjectStore()\n *\n * @example\n * // With plugins\n * import { createObjectStore, filesPlugin, auditTrailsPlugin } from '@conduction/nextcloud-vue'\n * const useMyStore = createObjectStore('object', {\n * plugins: [filesPlugin(), auditTrailsPlugin()],\n * })\n */\n\nconst DEFAULT_STORE_ID = 'conduction-objects'\nconst DEFAULT_BASE_URL = '/apps/openregister/api/objects'\n\n// Coalesces concurrent identical fetch-by-id requests into a single network\n// call: callers asking for an object already in flight share the pending\n// promise instead of firing a duplicate request. The entry clears once the\n// request settles. Module-scoped (not reactive state) so it never triggers\n// re-renders.\n//\n// The key is `${storeId}::${type}::${id}`, NOT the URL alone: the resolved\n// store write target is `objects[type][id]` on a specific store instance, and\n// each `_requestObject` writes only its own store. Coalescing across different\n// stores (e.g. the library default store vs an app's own createObjectStore)\n// or different type slugs would let one caller's request satisfy another whose\n// cache then never gets written — leaving that store's `objects[type][id]`\n// empty. Keying by (store, type, id) dedupes only truly-identical operations.\nconst _inflightObjectFetches = new Map()\n\n// ── Base state ──────────────────────────────────────────────────────────\n\nfunction baseState(baseUrl = DEFAULT_BASE_URL) {\n\t// Prefix here, at the ONE place every store instance passes through, rather\n\t// than at the factory: `createObjectStore({ baseUrl })` used to hand a\n\t// consumer-supplied path straight through unprefixed, so an app that\n\t// pointed the store at its own API (`/apps/portaliq/api/objects`) got the\n\t// bare form and 404'd on an instance without pretty URLs — while the\n\t// library default was prefixed and worked. prefixUrl is idempotent, so the\n\t// already-prefixed default survives unchanged.\n\tconst prefixedBaseUrl = prefixUrl(baseUrl)\n\treturn {\n\t\t/** @type {{string: {schema: string, register: string}}} */\n\t\tobjectTypeRegistry: {},\n\t\t/** @type {{string: Array}} */\n\t\tcollections: {},\n\t\t/** @type {{string: {string: object}}} */\n\t\tobjects: {},\n\t\t/** @type {{string: boolean}} */\n\t\tloading: {},\n\t\t/** @type {{string: import('../utils/errors.js').ApiError|null}} */\n\t\terrors: {},\n\t\t/** @type {{string: {total: number, page: number, pages: number, limit: number}}} */\n\t\tpagination: {},\n\t\t/** @type {{string: string}} */\n\t\tsearchTerms: {},\n\t\t/** @type {{string: object|null}} */\n\t\tschemas: {},\n\t\t/** @type {{string: object|null}} */\n\t\tregisters: {},\n\t\t/**\n\t\t * Facet data per type for CnIndexSidebar:\n\t\t * `{ fieldName: { values: [{ value, count?, label? }] } }`. `count` and\n\t\t * `label` are omitted when the bucket did not carry them.\n\t\t *\n\t\t * @type {{string: object}}\n\t\t */\n\t\tfacets: {},\n\t\t/**\n\t\t * Personal-lens reports of the latest collection response per type:\n\t\t * the body's `@self.lenses` (`{ recent: { available, reason } }`),\n\t\t * `{}` when it carried none. Written with the rows, so it always\n\t\t * describes the page on screen.\n\t\t *\n\t\t * @type {{string: object}}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-a-list-response-carries-the-report-of-the-lenses-it-was-asked-for\n\t\t */\n\t\tlenses: {},\n\t\t/** @type {{baseUrl: string, organisationUuidGetter: (() => string|null)|null, languageGetter: (() => string|null)|null, targetLanguageGetter: (() => string|null)|null}} */\n\t\t_options: {\n\t\t\tbaseUrl: prefixedBaseUrl,\n\t\t\torganisationUuidGetter: null,\n\t\t\tlanguageGetter: null,\n\t\t\ttargetLanguageGetter: null,\n\t\t},\n\t\t/**\n\t\t * Active tenant UUID — written by `setActiveTenantOrganisation()`\n\t\t * and read by `_resolveOrganisationUuid()` when no\n\t\t * `organisationUuidGetter` was passed to the factory.\n\t\t * `null` means \"no tenant header on outgoing requests\".\n\t\t *\n\t\t * @type {string|null}\n\t\t */\n\t\tactiveTenantOrganisationUuid: null,\n\t}\n}\n\n// ── Base getters ────────────────────────────────────────────────────────\n\nconst baseGetters = {\n\t/**\n\t * Get all registered object type slugs.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {string[]}\n\t */\n\tobjectTypes: (state) => Object.keys(state.objectTypeRegistry),\n\n\t/**\n\t * Get the collection array for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => Array}\n\t */\n\tgetCollection: (state) => (type) => state.collections[type] || [],\n\n\t/**\n\t * Get a single cached object by type and ID.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string, id: string) => object|null}\n\t */\n\tgetObject: (state) => (type, id) => state.objects[type]?.[id] || null,\n\n\t/**\n\t * Alias for getObject — check cache without fetching.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string, id: string) => object|null}\n\t */\n\tgetCachedObject: (state) => (type, id) => state.objects[type]?.[id] || null,\n\n\t/**\n\t * Check if a type is currently loading.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => boolean}\n\t */\n\tisLoading: (state) => (type) => state.loading[type] || false,\n\n\t/**\n\t * Get the current error for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => ApiError|null}\n\t */\n\tgetError: (state) => (type) => state.errors[type] || null,\n\n\t/**\n\t * Get pagination state for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => {total, page, pages, limit}}\n\t */\n\tgetPagination: (state) => (type) => state.pagination[type] || { total: 0, page: 1, pages: 1, limit: 20 },\n\n\t/**\n\t * Get the current search term for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => string}\n\t */\n\tgetSearchTerm: (state) => (type) => state.searchTerms[type] || '',\n\n\t/**\n\t * Get a cached schema for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => object|null}\n\t */\n\tgetSchema: (state) => (type) => state.schemas[type] || null,\n\n\t/**\n\t * Get a cached register for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => object|null}\n\t */\n\tgetRegister: (state) => (type) => state.registers[type] || null,\n\n\t/**\n\t * Get facet data for a type (CnIndexSidebar-compatible format).\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => object}\n\t */\n\tgetFacets: (state) => (type) => state.facets[type] || {},\n\tgetLenses: (state) => (type) => state.lenses[type] || {},\n}\n\n// ── Base actions ────────────────────────────────────────────────────────\n\nconst baseActions = {\n\t/**\n\t * Configure the store with custom options.\n\t * Call once before using the store if you need a custom base URL.\n\t *\n\t * @param {object} options Configuration options\n\t * @param {string} [options.baseUrl] Custom base URL for API calls\n\t */\n\tconfigure(options) {\n\t\tObject.assign(this._options, options)\n\t},\n\n\t/**\n\t * Create a standard object type slug.\n\t *\n\t * takes a unspecified number of props and joins them from first to left with a `-`.\n\t * However it is recommended to give it 1 register and 1 schema in that order.\n\t *\n\t * @param {unknown} params - unspecified number of props\n\t * @return {string}\n\t */\n\tcreateObjectTypeSlug(...params) {\n\t\tconst contentIds = params.map((x) => extractId(x))\n\n\t\treturn contentIds.join('-')\n\t},\n\n\t/**\n\t * Register an object type for CRUD operations.\n\t *\n\t * The optional fourth argument allows callers to supply canonical OR slugs\n\t * at registration time, avoiding a lazy fetch on first `subscribe()` call.\n\t * Omitting it is fully back-compatible — slugs default to `null` and are\n\t * lazily resolved by liveUpdatesPlugin when needed.\n\t *\n\t * @param {string} slug Short name for the type (e.g. 'client', 'case')\n\t * @param {string} schemaId OpenRegister schema ID\n\t * @param {string} registerId OpenRegister register ID\n\t * @param {object} [slugs] Optional slug hints for live-updates transport\n\t * @param {string|null} [slugs.registerSlug] Canonical register slug (e.g. 'zaken')\n\t * @param {string|null} [slugs.schemaSlug] Canonical schema slug (e.g. 'meldingen')\n\t * @param {string} [slugs.collectionUrl] Endpoint `fetchCollection` lists from instead of `/register/schema`; every other call keeps the pair URL\n\t */\n\tregisterObjectType(slug, schemaId, registerId, slugs = {}) {\n\t\tconst { registerSlug = null, schemaSlug = null, collectionUrl = null } = slugs\n\t\t// Replace entire objects so Vue 2 reactivity detects the change\n\t\t// (Vue 2 cannot track new properties added to existing reactive objects)\n\t\tthis.objectTypeRegistry = {\n\t\t\t...this.objectTypeRegistry,\n\t\t\t[slug]: {\n\t\t\t\tschema: schemaId,\n\t\t\t\tregister: registerId,\n\t\t\t\tregisterSlug,\n\t\t\t\tschemaSlug,\n\t\t\t\t...(collectionUrl ? { collectionUrl } : {}),\n\t\t\t},\n\t\t}\n\t\tthis.collections = { ...this.collections, [slug]: [] }\n\t\tthis.objects = { ...this.objects, [slug]: {} }\n\t\tthis.loading = { ...this.loading, [slug]: false }\n\t\tthis.errors = { ...this.errors, [slug]: null }\n\t\tthis.pagination = { ...this.pagination, [slug]: { total: 0, page: 1, pages: 1, limit: 20 } }\n\t\tthis.searchTerms = { ...this.searchTerms, [slug]: '' }\n\t\tthis.schemas = { ...this.schemas, [slug]: null }\n\t\tthis.registers = { ...this.registers, [slug]: null }\n\t\tthis.facets = { ...this.facets, [slug]: {} }\n\t\tthis.lenses = { ...this.lenses, [slug]: {} }\n\t},\n\n\t/**\n\t * Give a registered type a second schema path segment to try once when\n\t * its own answers 404 (see `_fetchWithSchemaFallback`). Set by\n\t * `resolveObjectOpType` for a schema title it kebab-cased, with the\n\t * title as written. A type that is not registered is left alone.\n\t *\n\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-schema-title-falls-back-to-its-written-form\n\t * @param {string} slug The type slug\n\t * @param {string} schema The fallback schema path segment\n\t */\n\tsetSchemaFallback(slug, schema) {\n\t\tconst config = this.objectTypeRegistry[slug]\n\t\tif (!config || typeof schema !== 'string' || schema === '') {\n\t\t\treturn\n\t\t}\n\t\tthis.objectTypeRegistry = {\n\t\t\t...this.objectTypeRegistry,\n\t\t\t[slug]: { ...config, schemaFallback: schema },\n\t\t}\n\t},\n\n\t/**\n\t * Unregister an object type and clean up all its state.\n\t *\n\t * @param {string} slug The type slug to unregister\n\t */\n\tunregisterObjectType(slug) {\n\t\tconst omit = (obj, key) => {\n\t\t\tconst { [key]: _, ...rest } = obj\n\t\t\treturn rest\n\t\t}\n\t\tthis.objectTypeRegistry = omit(this.objectTypeRegistry, slug)\n\t\tthis.collections = omit(this.collections, slug)\n\t\tthis.objects = omit(this.objects, slug)\n\t\tthis.loading = omit(this.loading, slug)\n\t\tthis.errors = omit(this.errors, slug)\n\t\tthis.pagination = omit(this.pagination, slug)\n\t\tthis.searchTerms = omit(this.searchTerms, slug)\n\t\tthis.schemas = omit(this.schemas, slug)\n\t\tthis.registers = omit(this.registers, slug)\n\t\tthis.facets = omit(this.facets, slug)\n\t\tthis.lenses = omit(this.lenses, slug)\n\t},\n\n\t/**\n\t * Get the type config or throw if not registered.\n\t *\n\t * @param {string} type The type slug\n\t * @return {{schema: string, register: string}} Type configuration\n\t * @throws {Error} If the type is not registered\n\t */\n\t_getTypeConfig(type) {\n\t\tconst config = this.objectTypeRegistry[type]\n\t\tif (!config) {\n\t\t\tthrow new Error(`Object type \"${type}\" is not registered in the store. Call registerObjectType('${type}', schemaId, registerId) first.`)\n\t\t}\n\t\treturn config\n\t},\n\n\t/**\n\t * Resolve the active organisation UUID for the next outgoing request.\n\t *\n\t * Resolution order (multi-tenancy-context):\n\t * 1. `_options.organisationUuidGetter()` — when set at store init.\n\t * 2. `activeTenantOrganisationUuid` — written by `setActiveTenantOrganisation`.\n\t * 3. `null` — no tenant header is stamped.\n\t *\n\t * Errors thrown by a custom getter are caught and downgraded to\n\t * `null` so a buggy getter never breaks an outbound request.\n\t *\n\t * @return {string|null}\n\t */\n\t_resolveOrganisationUuid() {\n\t\tconst getter = this._options.organisationUuidGetter\n\t\tif (typeof getter === 'function') {\n\t\t\ttry {\n\t\t\t\tconst v = getter()\n\t\t\t\treturn typeof v === 'string' && v.length > 0 ? v : null\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t}\n\t\treturn this.activeTenantOrganisationUuid || null\n\t},\n\n\t/**\n\t * Resolve the active read-side language for the next outgoing request.\n\t *\n\t * Wired via `createObjectStore(id, { languageGetter })`. When set, the\n\t * resolved value is appended to read URLs as `?_lang=<value>` so OR's\n\t * `i18n-api-language-negotiation` contract returns the localised\n\t * projection. A null/empty getter return — or a throwing getter — is\n\t * downgraded to `null` and the query parameter is skipped.\n\t *\n\t * @return {string|null}\n\t */\n\t_resolveLanguage() {\n\t\tconst getter = this._options.languageGetter\n\t\tif (typeof getter !== 'function') {\n\t\t\treturn null\n\t\t}\n\t\ttry {\n\t\t\tconst v = getter()\n\t\t\treturn typeof v === 'string' && v.length > 0 ? v : null\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Resolve the active write-side target language for the next outgoing\n\t * request.\n\t *\n\t * Wired via `createObjectStore(id, { targetLanguageGetter })`. When set,\n\t * the resolved value is stamped on writes as\n\t * `X-Translation-Target-Language: <value>` so OR's `i18n-source-of-truth`\n\t * contract authors the payload into `_translations[<value>]` instead\n\t * of overwriting the canonical source row. A null/empty return — or a\n\t * throwing getter — is downgraded to `null` and the header is skipped.\n\t *\n\t * @return {string|null}\n\t */\n\t_resolveTargetLanguage() {\n\t\tconst getter = this._options.targetLanguageGetter\n\t\tif (typeof getter !== 'function') {\n\t\t\treturn null\n\t\t}\n\t\ttry {\n\t\t\tconst v = getter()\n\t\t\treturn typeof v === 'string' && v.length > 0 ? v : null\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Build outbound headers stamped with the active tenant UUID, if any,\n\t * and the active write-side target language, if any.\n\t * Plugins MUST call this helper (not the bare `buildHeaders()` import)\n\t * so a single store instance stamps the same UUID + target language on\n\t * every request.\n\t *\n\t * @param {string} [contentType] Content-Type header value\n\t * @return {object} Headers object for use with fetch()\n\t */\n\t_buildHeaders(contentType = 'application/json') {\n\t\treturn buildHeaders({\n\t\t\tcontentType,\n\t\t\torganisationUuid: this._resolveOrganisationUuid() || undefined,\n\t\t\ttargetLanguage: this._resolveTargetLanguage() || undefined,\n\t\t})\n\t},\n\n\t/**\n\t * Set the active tenant organisation. Stamps `X-OpenRegister-Organisation`\n\t * on every subsequent outgoing request and clears the in-memory\n\t * `collections` + `objects` caches so a re-fetch hits the new tenant.\n\t *\n\t * No-op when the new UUID equals the currently-active one.\n\t *\n\t * @param {string|null} uuid The new tenant UUID\n\t */\n\tsetActiveTenantOrganisation(uuid) {\n\t\tconst next = (typeof uuid === 'string' && uuid.length > 0) ? uuid : null\n\t\tif (this.activeTenantOrganisationUuid === next) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.activeTenantOrganisationUuid = next\n\n\t\t// Cache reset — by tenant the same object slug can refer to a\n\t\t// completely different row set, so old cache entries are wrong.\n\t\tthis.collections = {}\n\t\tthis.objects = {}\n\t\tthis.facets = {}\n\t\tthis.lenses = {}\n\t\tthis.pagination = {}\n\t\t// Errors + loading flags are per-fetch and don't need a reset.\n\t},\n\n\t/**\n\t * Build the API URL for a type and optional object ID.\n\t *\n\t * When a `languageGetter` is wired and returns a non-empty string the\n\t * URL stamps `?_lang=<value>` so OR returns the localised projection\n\t * per the `i18n-api-language-negotiation` contract. Callers that\n\t * subsequently append their own `buildQueryString(params)` MUST use\n\t * `_buildUrlWithParams(type, params, id)` instead so the two query\n\t * strings reconcile cleanly.\n\t *\n\t * @param {string} type The type slug\n\t * @param {string|null} [id] Optional object ID\n\t * @param {string|null} [schema] Schema path segment to use instead of the type's own\n\t * @return {string} Full API URL path\n\t */\n\t_buildUrl(type, id = null, schema = null) {\n\t\tconst config = this._getTypeConfig(type)\n\t\tlet url = `${this._options.baseUrl}/${config.register}/${schema ?? config.schema}`\n\t\tif (id) {\n\t\t\turl += `/${id}`\n\t\t}\n\t\tconst lang = this._resolveLanguage()\n\t\tif (lang) {\n\t\t\turl += buildQueryString({ _lang: lang })\n\t\t}\n\t\treturn url\n\t},\n\n\t/**\n\t * Build the API URL for a type, an optional object ID, and an extra\n\t * params object that's already destined for `buildQueryString`. The\n\t * helper merges the active `languageGetter` value (when set) into the\n\t * params bag so the two query strings produce a single, well-formed\n\t * URL (instead of duplicating `?_lang=`).\n\t *\n\t * @param {string} type The type slug\n\t * @param {object} [params] Extra query parameters\n\t * @param {string|null} [id] Optional object ID\n\t * @param {string|null} [schema] Schema path segment to use instead of the type's own\n\t * @return {string} Full API URL path including query string\n\t */\n\t_buildUrlWithParams(type, params = {}, id = null, schema = null) {\n\t\tconst config = this._getTypeConfig(type)\n\t\tlet url = `${this._options.baseUrl}/${config.register}/${schema ?? config.schema}`\n\t\tif (id) {\n\t\t\turl += `/${id}`\n\t\t}\n\t\tconst lang = this._resolveLanguage()\n\t\tconst merged = lang ? { ...params, _lang: lang } : params\n\t\turl += buildQueryString(merged)\n\t\treturn url\n\t},\n\n\t/**\n\t * Build the list URL for a type registered with a `collectionUrl`. `_order`\n\t * goes in the bracket form (`_order[key]=dir`) every PHP endpoint parses.\n\t *\n\t * @param {object} config The type config\n\t * @param {object} [params] Query parameters\n\t * @return {string} Full URL including query string\n\t */\n\t_buildCollectionUrl(config, params = {}) {\n\t\tconst { _order: order, ...rest } = params\n\t\tconst merged = { ...rest }\n\t\tif (order && typeof order === 'object') {\n\t\t\tfor (const [key, dir] of Object.entries(order)) {\n\t\t\t\tmerged[`_order[${key}]`] = dir\n\t\t\t}\n\t\t}\n\t\tconst lang = this._resolveLanguage()\n\t\tif (lang) {\n\t\t\tmerged._lang = lang\n\t\t}\n\t\tconst url = prefixUrl(config.collectionUrl)\n\t\tconst query = buildQueryString(merged)\n\t\treturn query && url.includes('?') ? url + '&' + query.slice(1) : url + query\n\t},\n\n\t/**\n\t * Fetch for a type, retrying ONCE with its `schemaFallback` when the\n\t * schema path segment answers 404. A type without a fallback (every type\n\t * not registered by `resolveObjectOpType` for a kebab-cased title) makes\n\t * exactly the one request it always made. When the retry succeeds the\n\t * fallback becomes the type's schema, so later calls go straight to it;\n\t * when it does not, the first answer is returned and nothing changes.\n\t *\n\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-schema-title-falls-back-to-its-written-form\n\t * @param {string} type The type slug\n\t * @param {function((string|null)): string} makeUrl Builds the URL; called with\n\t * null for the type's own schema, or with the fallback segment.\n\t * @param {object} init The fetch options.\n\t * @return {Promise<Response>} The response to use.\n\t */\n\tasync _fetchWithSchemaFallback(type, makeUrl, init) {\n\t\t// `makeUrl` wraps `_buildUrl` / `_buildUrlWithParams`, so `url` is built\n\t\t// from the prefixed `_options.baseUrl` like every other request here.\n\t\tlet url = makeUrl(null)\n\t\tconst response = await trackedFetch(url, init)\n\t\tif (!response || response.status !== 404) {\n\t\t\treturn response\n\t\t}\n\t\tconst config = this.objectTypeRegistry[type]\n\t\tconst fallback = config && config.schemaFallback\n\t\tif (!fallback || String(fallback) === String(config.schema)) {\n\t\t\treturn response\n\t\t}\n\t\tlet retry\n\t\ttry {\n\t\t\turl = makeUrl(fallback)\n\t\t\tretry = await trackedFetch(url, init)\n\t\t} catch {\n\t\t\treturn response\n\t\t}\n\t\tif (!retry || !retry.ok) {\n\t\t\tdiscardResponseBody(retry)\n\t\t\treturn response\n\t\t}\n\t\tdiscardResponseBody(response)\n\t\tconst { schemaFallback: _, ...rest } = config\n\t\tthis.objectTypeRegistry = {\n\t\t\t...this.objectTypeRegistry,\n\t\t\t[type]: { ...rest, schema: fallback },\n\t\t}\n\t\treturn retry\n\t},\n\n\t/**\n\t * Clear the error state for a type.\n\t *\n\t * @param {string} type The type slug\n\t */\n\tclearError(type) {\n\t\tthis.errors = { ...this.errors, [type]: null }\n\t},\n\n\t/**\n\t * Set the search term for a type.\n\t *\n\t * @param {string} type The type slug\n\t * @param {string} term The search term\n\t */\n\tsetSearchTerm(type, term) {\n\t\tthis.searchTerms = { ...this.searchTerms, [type]: term }\n\t},\n\n\t/**\n\t * Clear the search term for a type.\n\t *\n\t * @param {string} type The type slug\n\t */\n\tclearSearchTerm(type) {\n\t\tthis.searchTerms = { ...this.searchTerms, [type]: '' }\n\t},\n\n\t/**\n\t * Fetch the schema definition for a registered type.\n\t * Uses cache — only fetches once per type per session.\n\t *\n\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-schema-title-falls-back-to-its-written-form\n\t * @param {string} type The registered type slug\n\t * @return {Promise<object|null>} The schema object or null on error\n\t */\n\tasync fetchSchema(type) {\n\t\tconst config = this._getTypeConfig(type)\n\n\t\tif (this.schemas[type]) {\n\t\t\treturn this.schemas[type]\n\t\t}\n\n\t\ttry {\n\t\t\t// A slug is NOT a namespace: the same schema slug can exist in\n\t\t\t// several registers on one instance, and the bare endpoint resolves\n\t\t\t// it instance-wide — a colliding slug then silently serves another\n\t\t\t// app's schema into this app's forms. Scope the lookup to the\n\t\t\t// page's own register whenever one is configured; a backend that\n\t\t\t// does not yet know the parameter ignores it (today's behaviour).\n\t\t\tconst registerScope = config.register\n\t\t\t\t? `?register=${encodeURIComponent(config.register)}`\n\t\t\t\t: ''\n\t\t\t// Through the schema fallback like every objects-API call: a type\n\t\t\t// resolveObjectOpType registered from a title (`APInvoice` ->\n\t\t\t// `ap-invoice`) retries once with the title as written on a 404.\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => prefixUrl(`/apps/openregister/api/schemas/${schema ?? config.schema}${registerScope}`),\n\t\t\t\t{ method: 'GET', headers: this._buildHeaders() },\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// #573: a schema 404 is routine (the app registered a type with\n\t\t\t\t// no schema behind it), but returning here without touching the\n\t\t\t\t// body leaves the request in flight for the life of the page and\n\t\t\t\t// `networkidle` never arrives.\n\t\t\t\tdiscardResponseBody(response)\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\treportDiagnosticOnce(`binding|missing-schema|${type}`, { kind: 'binding', problem: 'missing-schema', register: String(config.register || ''), schema: String(config.schema || ''), property: null, where: null })\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst schema = await response.json()\n\t\t\tthis.schemas = { ...this.schemas, [type]: schema }\n\t\t\treturn schema\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Fetch the register definition for a registered type.\n\t * Uses cache — only fetches once per type per session.\n\t *\n\t * @param {string} type The registered type slug\n\t * @return {Promise<object|null>} The register object or null on error\n\t */\n\tasync fetchRegister(type) {\n\t\tconst config = this._getTypeConfig(type)\n\n\t\tif (this.registers[type]) {\n\t\t\treturn this.registers[type]\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await trackedFetch(\n\t\t\t\tprefixUrl(`/apps/openregister/api/registers/${config.register}`),\n\t\t\t\t{ method: 'GET', headers: this._buildHeaders() },\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// Same leak as fetchSchema above (#573) — same shape, same fix.\n\t\t\t\tdiscardResponseBody(response)\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\treportDiagnosticOnce(`binding|missing-register|${type}`, { kind: 'binding', problem: 'missing-register', register: String(config.register || ''), schema: String(config.schema || ''), property: null, where: null })\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst register = await response.json()\n\t\t\tthis.registers = { ...this.registers, [type]: register }\n\t\t\treturn register\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Fetch a collection of objects for a registered type.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {object} [params] Query parameters (_limit, _page, _search, _order, filters)\n\t * @param {object} [options] Call options\n\t * @param {{error?: object|null}} [options.outcome] Opt-in sink for THIS call's own result: `error` is set to the error it records on `errors[type]`, or `null` on success. Unlike `errors[type]`, which every call for the type shares, a later call cannot overwrite it.\n\t * @param {boolean} [options.append] Add the fetched page after the rows already stored instead of replacing them. Dropped when the stored rows are no longer the page before it, or when `options.isCurrent()` returns false (the query changed meanwhile).\n\t * @param {() => boolean} [options.isCurrent] With `append`: asked once the page arrives; false drops it.\n\t * @return {Promise<Array>} The fetched collection (also stored in state)\n\t */\n\tasync fetchCollection(type, params = {}, options = {}) {\n\t\tconst outcome = (options && typeof options.outcome === 'object' && options.outcome) || null\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\t// Auto-include _facets=extend when schema has facetable properties\n\t\t\tconst fetchParams = { ...params }\n\t\t\tif (!fetchParams._facets) {\n\t\t\t\tconst schema = this.schemas[type]\n\t\t\t\tconst hasFacetable = schema\n\t\t\t\t\t&& schema.properties\n\t\t\t\t\t&& Object.values(schema.properties).some((p) => p.facetable)\n\t\t\t\tif (hasFacetable) {\n\t\t\t\t\tfetchParams._facets = 'extend'\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst config = this._getTypeConfig(type)\n\t\t\tconst init = { method: 'GET', headers: this._buildHeaders() }\n\t\t\tconst response = config.collectionUrl\n\t\t\t\t? await trackedFetch(this._buildCollectionUrl(config, fetchParams), init)\n\t\t\t\t: await this._fetchWithSchemaFallback(\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\t(schema) => this._buildUrlWithParams(type, fetchParams, null, schema),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst failure = await parseResponseError(response, type)\n\t\t\t\tthis.errors = { ...this.errors, [type]: failure }\n\t\t\t\tif (outcome) {\n\t\t\t\t\toutcome.error = failure\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error fetching ${type} collection:`, failure)\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\tconst results = data.results || data\n\t\t\tconst append = options?.append === true\n\n\t\t\tconst stale = append && (\n\t\t\t\tNumber(this.pagination[type]?.page || 1) !== Number(params._page || 1) - 1\n\t\t\t\t|| (typeof options.isCurrent === 'function' && !options.isCurrent())\n\t\t\t)\n\t\t\tif (stale) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tthis.collections = {\n\t\t\t\t...this.collections,\n\t\t\t\t[type]: append ? [...(this.collections[type] || []), ...results] : results,\n\t\t\t}\n\t\t\t// Why a personal lens came back empty, if it says (openregister#4514).\n\t\t\tthis.lenses = { ...this.lenses, [type]: readLensReports(data) }\n\t\t\tthis.pagination = {\n\t\t\t\t...this.pagination,\n\t\t\t\t[type]: {\n\t\t\t\t\ttotal: data.total || (append ? this.collections[type].length : results.length),\n\t\t\t\t\tpage: data.page || 1,\n\t\t\t\t\tpages: data.pages || 1,\n\t\t\t\t\tlimit: params._limit || 20,\n\t\t\t\t},\n\t\t\t}\n\n\t\t\t// Parse facet data from API response and transform to CnIndexSidebar format\n\t\t\tif (data.facets) {\n\t\t\t\tconst transformed = normalizeFacets(data.facets)\n\t\t\t\tthis.facets = { ...this.facets, [type]: transformed }\n\t\t\t}\n\n\t\t\tif (outcome) {\n\t\t\t\toutcome.error = null\n\t\t\t}\n\t\t\treturn results\n\t\t} catch (error) {\n\t\t\tconst failure = error.name === 'TypeError'\n\t\t\t\t? networkError(error)\n\t\t\t\t: genericError(error)\n\t\t\tthis.errors = { ...this.errors, [type]: failure }\n\t\t\tif (outcome) {\n\t\t\t\toutcome.error = failure\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error fetching ${type} collection:`, error)\n\t\t\treturn []\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Fetch a collection of objects WITHOUT touching `collections[type]` /\n\t * `pagination[type]` / `loading[type]` / `errors[type]`.\n\t *\n\t * `fetchCollection` and this method share a `type` slug keyed only by\n\t * register+schema, not by query — so a caller fetching the SAME type\n\t * with different params (e.g. a reference-field picker loading option\n\t * results, unfiltered and unpaged) would otherwise clobber the state a\n\t * self-fetch `CnIndexPage` for that exact type is reactively bound to.\n\t * That collision is real whenever a schema references itself (a case's\n\t * \"Parent case\" field pointing back at `case`): opening the create\n\t * dialog silently overwrote the open list's rows and count with the\n\t * picker's own result set. Use this for any lookup whose results are\n\t * not meant to drive a list view.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {object} [params] Query parameters (_limit, _page, _search, _order, filters)\n\t * @return {Promise<Array>} The fetched results, never written to store state\n\t */\n\tasync fetchCollectionForOptions(type, params = {}) {\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => this._buildUrlWithParams(type, params, null, schema),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tdiscardResponseBody(response)\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\treturn data.results || data\n\t\t} catch {\n\t\t\treturn []\n\t\t}\n\t},\n\n\t/**\n\t * Fetch a single object by type and ID.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object ID or UUID\n\t * @param {object} [options] Read options\n\t * @param {string[]} [options.extend] Values for `_extend[]` (e.g. `['@self.can']`), for markers OpenRegister returns only on request\n\t * @return {Promise<object|null>} The fetched object (also cached in state)\n\t */\n\tasync fetchObject(type, id, options = {}) {\n\t\tconst extend = Array.isArray(options && options.extend) ? options.extend.filter((e) => typeof e === 'string' && e !== '') : []\n\t\tconst url = extend.length > 0\n\t\t\t? this._buildUrlWithParams(type, { _extend: extend }, id)\n\t\t\t: this._buildUrl(type, id)\n\t\t// Share a single in-flight request across concurrent callers asking\n\t\t// for the same object on this store, instead of firing a duplicate\n\t\t// network call. Scoped to (store, type, id) so it never starves a\n\t\t// different store's cache — see `_inflightObjectFetches` above.\n\t\tconst key = `${this.$id}::${type}::${id}${extend.length > 0 ? '::' + extend.join(',') : ''}`\n\t\tconst existing = _inflightObjectFetches.get(key)\n\t\tif (existing) {\n\t\t\treturn existing\n\t\t}\n\t\tconst request = this._requestObject(type, id, url, extend)\n\t\t_inflightObjectFetches.set(key, request)\n\t\ttry {\n\t\t\treturn await request\n\t\t} finally {\n\t\t\t_inflightObjectFetches.delete(key)\n\t\t}\n\t},\n\n\t/**\n\t * Perform the actual fetch-by-id network request and cache the result.\n\t * Wrapped by `fetchObject`, which de-duplicates concurrent calls.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object id\n\t * @param {string} url The pre-built request URL\n\t * @param {string[]} [extend] The `_extend[]` values the URL carries (kept on a schema-fallback retry)\n\t * @return {Promise<object|null>} The object or null on error\n\t */\n\tasync _requestObject(type, id, url, extend = []) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => (schema === null\n\t\t\t\t\t? url\n\t\t\t\t\t: (extend.length > 0 ? this._buildUrlWithParams(type, { _extend: extend }, id, schema) : this._buildUrl(type, id, schema))),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// A 404 on a fetch-by-id is an EXPECTED answer, not a fault:\n\t\t\t\t// asking whether an object exists is how a consumer finds out\n\t\t\t\t// that it does not. scholiq's credential-verification page is\n\t\t\t\t// built on exactly that question, so an unknown or revoked id is\n\t\t\t\t// the designed path — and the page renders the invalid state\n\t\t\t\t// correctly while this line failed its \"no fatal JS errors\" e2e\n\t\t\t\t// check, which the app has no way to suppress (#612).\n\t\t\t\t//\n\t\t\t\t// The outcome is already recorded in `this.errors[type]` for the\n\t\t\t\t// component to render, so the console write adds nothing the\n\t\t\t\t// consumer can act on. The same guard is on the sub-resource\n\t\t\t\t// path in createSubResourcePlugin / useSubResource; this is the\n\t\t\t\t// single-object path it missed, and it is the one that shipped\n\t\t\t\t// the message scholiq actually sees.\n\t\t\t\t//\n\t\t\t\t// Genuine faults (5xx, 403, …) still surface, and now say WHAT\n\t\t\t\t// went wrong: `parseResponseError` returns a reactive proxy,\n\t\t\t\t// which the console renders as an unreadable `Proxy(Object)`.\n\t\t\t\tif (response.status !== 404) {\n\t\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Error fetching ${type}/${id}: ${response.status} ${response.statusText}`,\n\t\t\t\t\t\ttoRaw(this.errors[type]),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\n\t\t\tthis.objects = {\n\t\t\t\t...this.objects,\n\t\t\t\t[type]: { ...(this.objects[type] || {}), [id]: data },\n\t\t\t}\n\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error fetching ${type}/${id}:`, error)\n\t\t\treturn null\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Update only some keys of an object: a PATCH carrying `changes`, so every\n\t * key the caller did not send keeps its stored value. The saved object\n\t * replaces the cached one.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object id\n\t * @param {object} changes The keys to write, with their new values\n\t * @return {Promise<object|null>} The saved object or null on error\n\t * @spec openspec/changes/forms-save-edited-keys/specs/object-store/spec.md#requirement-an-edit-writes-only-the-keys-it-changed\n\t */\n\tasync patchObject(type, id, changes) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => this._buildUrl(type, id, schema),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PATCH',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\tbody: JSON.stringify(changes || {}),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error saving ${type}:`, this.errors[type])\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\tconst savedId = data.id || id\n\t\t\tthis.objects = {\n\t\t\t\t...this.objects,\n\t\t\t\t[type]: { ...(this.objects[type] || {}), [savedId]: data },\n\t\t\t}\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error saving ${type}:`, error)\n\t\t\treturn null\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Create or update an object. Uses POST for new objects, PUT for updates.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {object} objectData The object data (include `id` for updates)\n\t * @return {Promise<object|null>} The saved object or null on error\n\t */\n\tasync saveObject(type, objectData) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst isUpdate = !!objectData.id\n\t\t\tconst method = isUpdate ? 'PUT' : 'POST'\n\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => (isUpdate\n\t\t\t\t\t? this._buildUrl(type, objectData.id, schema)\n\t\t\t\t\t: this._buildUrl(type, null, schema)),\n\t\t\t\t{\n\t\t\t\t\tmethod,\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\tbody: JSON.stringify(objectData),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error saving ${type}:`, this.errors[type])\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\tconst savedId = data.id || objectData.id\n\n\t\t\tthis.objects = {\n\t\t\t\t...this.objects,\n\t\t\t\t[type]: { ...(this.objects[type] || {}), [savedId]: data },\n\t\t\t}\n\n\t\t\t// Every create through the store lets an `advanceOn:\n\t\t\t// object-created` walkthrough step advance, whichever form made it.\n\t\t\tif (!isUpdate) {\n\t\t\t\tconst config = this.objectTypeRegistry[type] || {}\n\t\t\t\tdispatchObjectCreated({ register: config.registerSlug || config.register, schema: config.schemaSlug || config.schema, object: data })\n\t\t\t}\n\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error saving ${type}:`, error)\n\t\t\treturn null\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Delete an object by type and ID.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object ID\n\t * @return {Promise<boolean>} True if deleted successfully\n\t */\n\tasync deleteObject(type, id) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => this._buildUrl(type, id, schema),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error deleting ${type}/${id}:`, this.errors[type])\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// A successful DELETE's body is never read either (#573) — same\n\t\t\t// in-flight request, just on the happy path.\n\t\t\tdiscardResponseBody(response)\n\n\t\t\tif (this.objects[type]) {\n\t\t\t\tconst { [id]: _, ...remaining } = this.objects[type]\n\t\t\t\tthis.objects = { ...this.objects, [type]: remaining }\n\t\t\t}\n\t\t\tif (this.collections[type]) {\n\t\t\t\tthis.collections = {\n\t\t\t\t\t...this.collections,\n\t\t\t\t\t[type]: this.collections[type].filter((obj) => obj.id !== id),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error deleting ${type}/${id}:`, error)\n\t\t\treturn false\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Delete multiple objects by type and IDs in parallel.\n\t * Each delete is run via Promise.all; partial success is reported so the UI can show which succeeded or failed.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string[]} ids Array of object IDs to delete\n\t * @return {Promise<{ successfulIds: string[], failedIds: string[] }>} Result with successful and failed IDs\n\t */\n\tasync deleteObjects(type, ids) {\n\t\tconst result = { successfulIds: [], failedIds: [] }\n\t\tif (!ids?.length) {\n\t\t\treturn result\n\t\t}\n\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst runOne = async (id) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst url = this._buildUrl(type, id)\n\t\t\t\t\tconst response = await trackedFetch(url, {\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\t})\n\t\t\t\t\t// Only the status is used, so nothing ever reads the body\n\t\t\t\t\t// (#573). A bulk delete of N objects would otherwise leave N\n\t\t\t\t\t// requests in flight.\n\t\t\t\t\tdiscardResponseBody(response)\n\t\t\t\t\treturn { id, success: response.ok }\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\t\tconsole.error(`Error deleting ${type}/${id}:`, error)\n\t\t\t\t\treturn { id, success: false }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst outcomes = await Promise.all(ids.map(runOne))\n\t\t\tfor (const { id, success } of outcomes) {\n\t\t\t\tif (success) {\n\t\t\t\t\tresult.successfulIds.push(id)\n\t\t\t\t} else {\n\t\t\t\t\tresult.failedIds.push(id)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.successfulIds.length > 0) {\n\t\t\t\tconst successSet = new Set(result.successfulIds)\n\t\t\t\tif (this.objects[type]) {\n\t\t\t\t\tconst remaining = {}\n\t\t\t\t\tfor (const [k, v] of Object.entries(this.objects[type])) {\n\t\t\t\t\t\tif (!successSet.has(k)) {\n\t\t\t\t\t\t\tremaining[k] = v\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.objects = { ...this.objects, [type]: remaining }\n\t\t\t\t}\n\t\t\t\tif (this.collections[type]) {\n\t\t\t\t\tthis.collections = {\n\t\t\t\t\t\t...this.collections,\n\t\t\t\t\t\t[type]: this.collections[type].filter((obj) => !successSet.has(obj.id)),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.failedIds.length > 0) {\n\t\t\t\tthis.errors = {\n\t\t\t\t\t...this.errors,\n\t\t\t\t\t[type]: genericError(new Error(`Failed to delete ${result.failedIds.length} item(s)`)),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Batch-resolve references by fetching multiple objects by their IDs.\n\t * Uses the cache first, only fetches uncached objects.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string[]} ids Array of object IDs to resolve\n\t * @return {Promise<{[key: string]: object}>} Map of id -> object\n\t */\n\tasync resolveReferences(type, ids) {\n\t\tif (!ids || ids.length === 0) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst uniqueIds = [...new Set(ids.filter(Boolean))]\n\t\tconst result = {}\n\t\tconst toFetch = []\n\n\t\tfor (const id of uniqueIds) {\n\t\t\tconst cached = this.objects[type]?.[id]\n\t\t\tif (cached) {\n\t\t\t\tresult[id] = cached\n\t\t\t} else {\n\t\t\t\ttoFetch.push(id)\n\t\t\t}\n\t\t}\n\n\t\tif (toFetch.length > 0) {\n\t\t\tconst fetches = toFetch.map(async (id) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst url = this._buildUrl(type, id)\n\t\t\t\t\tconst response = await trackedFetch(url, {\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\t})\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\tconst data = await response.json()\n\t\t\t\t\t\tthis.objects = {\n\t\t\t\t\t\t\t...this.objects,\n\t\t\t\t\t\t\t[type]: { ...(this.objects[type] || {}), [id]: data },\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[id] = data\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Non-blocking — leave unresolved\n\t\t\t\t}\n\t\t\t})\n\t\t\tawait Promise.all(fetches)\n\t\t}\n\n\t\treturn result\n\t},\n}\n\n// ── Store factory ───────────────────────────────────────────────────────\n\n/**\n * Create the object store definition with a given store ID and optional plugins.\n *\n * Plugins are merged into the store at definition time. Each plugin provides\n * additional state, getters, and actions (e.g. for sub-resources like files,\n * audit trails, relations).\n *\n * @param {string} storeId Pinia store identifier\n * @param {Array} [plugins] Array of plugin definitions\n * @param {string} [baseUrl] Base API URL override\n * @param {object} [extraOptions] Factory-level getters (organisationUuidGetter, languageGetter, targetLanguageGetter)\n * @return {() => object} Pinia store composable\n */\nfunction defineObjectStore(storeId, plugins = [], baseUrl = DEFAULT_BASE_URL, extraOptions = {}) {\n\tconst pluginState = mergePluginState(plugins)\n\tconst pluginGetters = mergePluginGetters(plugins)\n\tconst pluginActions = mergePluginActions(plugins)\n\tconst setupPlugins = plugins.filter((p) => typeof p.setup === 'function')\n\tconst initialized = new WeakSet()\n\tconst factoryOrganisationUuidGetter = typeof extraOptions.organisationUuidGetter === 'function'\n\t\t? extraOptions.organisationUuidGetter\n\t\t: null\n\tconst factoryLanguageGetter = typeof extraOptions.languageGetter === 'function'\n\t\t? extraOptions.languageGetter\n\t\t: null\n\tconst factoryTargetLanguageGetter = typeof extraOptions.targetLanguageGetter === 'function'\n\t\t? extraOptions.targetLanguageGetter\n\t\t: null\n\n\tconst useStore = defineStore(storeId, {\n\t\tstate: () => {\n\t\t\tconst base = baseState(baseUrl)\n\t\t\tif (factoryOrganisationUuidGetter) {\n\t\t\t\tbase._options.organisationUuidGetter = factoryOrganisationUuidGetter\n\t\t\t}\n\t\t\tif (factoryLanguageGetter) {\n\t\t\t\tbase._options.languageGetter = factoryLanguageGetter\n\t\t\t}\n\t\t\tif (factoryTargetLanguageGetter) {\n\t\t\t\tbase._options.targetLanguageGetter = factoryTargetLanguageGetter\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\t...pluginState,\n\t\t\t}\n\t\t},\n\n\t\tgetters: {\n\t\t\t...baseGetters,\n\t\t\t...pluginGetters,\n\t\t},\n\n\t\tactions: {\n\t\t\t...baseActions,\n\t\t\t...pluginActions,\n\n\t\t\t/**\n\t\t\t * Clear all sub-resource data from active plugins.\n\t\t\t * Calls each plugin's clear method (e.g. clearFiles, clearAuditTrails).\n\t\t\t */\n\t\t\tclearAllSubResources() {\n\t\t\t\tfor (const plugin of plugins) {\n\t\t\t\t\tconst clearFn = `clear${capitalize(plugin.name)}`\n\t\t\t\t\tif (typeof this[clearFn] === 'function') {\n\t\t\t\t\t\tthis[clearFn]()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t})\n\n\tif (setupPlugins.length === 0) {\n\t\treturn useStore\n\t}\n\n\treturn function useObjectStoreWithSetup(pinia) {\n\t\tconst store = useStore(pinia)\n\t\tif (!initialized.has(store)) {\n\t\t\tinitialized.add(store)\n\t\t\tfor (const plugin of setupPlugins) {\n\t\t\t\tplugin.setup(store)\n\t\t\t}\n\t\t}\n\t\treturn store\n\t}\n}\n\n/**\n * Default object store instance with ID 'conduction-objects'.\n *\n * Ships with `liveUpdatesPlugin` installed (manifest-live-updates): the\n * library's manifest-driven pages (CnIndexPage self-fetch, CnDetailPage\n * schema-driven, CnPageRenderer) all resolve THIS store, so it needs the\n * `subscribe`/`unsubscribe` actions for their auto-subscriptions to engage —\n * mirroring `createObjectStore`'s default-on behaviour (live-updates-default-on).\n * The plugin is fully inert until the first `subscribe()` call: no notify_push\n * probe, no websocket, no polling timers, no fetch-dedup wrapping.\n *\n * @example\n * import { useObjectStore } from '@conduction/nextcloud-vue'\n * const store = useObjectStore()\n */\nexport const useObjectStore = defineObjectStore(DEFAULT_STORE_ID, [liveUpdatesPlugin()], prefixUrl(DEFAULT_BASE_URL))\n\n/**\n * Factory function to create an object store with a custom Pinia store ID\n * and optional plugins for sub-resources.\n *\n * @param {string} storeId Custom Pinia store identifier\n * @param {object} [options] Configuration options\n * @param {Array} [options.plugins] Array of sub-resource plugins\n * @param {string} [options.baseUrl] Base API URL override\n * @param {boolean|object} [options.liveUpdates] Live-updates plugin control. The\n * `liveUpdatesPlugin` is installed BY DEFAULT on every store created via this\n * factory. It is fully inert until the first `store.subscribe()` call: no\n * websocket connection attempt, no polling timers, and no request-dedup\n * wrapping happen before that. Pass `false` to opt out entirely (the store\n * then has no `subscribe`/`unsubscribe` actions and no `liveStatus` state).\n * Pass an options object (e.g. `{ pollIntervalCollection: 15000 }`) to\n * configure the default-installed plugin. When `options.plugins` already\n * contains a `liveUpdatesPlugin(...)` instance, that explicit instance wins\n * and no second copy is installed (dedupe by plugin name `'liveUpdates'`).\n * The default instance is installed BEFORE `options.plugins`, so on name\n * collisions (a consumer plugin defining `subscribe`, `unsubscribe`, or\n * live state keys) the consumer plugin keeps priority.\n * See the `live-updates-default-on` change.\n * @param {() => string|null} [options.organisationUuidGetter] When set, every\n * request stamps `X-OpenRegister-Organisation: <uuid>` for multi-tenancy.\n * See the `multi-tenancy-context` change.\n * @param {() => string|null} [options.languageGetter] When set, every read URL\n * stamps `?_lang=<bcp47>` so OR returns the localised projection per the\n * `i18n-api-language-negotiation` contract. Returning `null` or an empty\n * string skips the parameter. A throwing getter is downgraded to `null`.\n * See the `i18n-language-negotiation-getters` change.\n * @param {() => string|null} [options.targetLanguageGetter] When set, every\n * write request stamps `X-Translation-Target-Language: <bcp47>` so OR\n * authors the payload into `_translations[<bcp47>]` instead of overwriting\n * the canonical source row, per the `i18n-source-of-truth` contract.\n * Returning `null` or an empty string skips the header. A throwing getter\n * is downgraded to `null`.\n * See the `i18n-language-negotiation-getters` change.\n * @return {() => object} Pinia store composable\n *\n * @example\n * // Basic (backwards compatible)\n * const useMyStore = createObjectStore('object')\n *\n * @example\n * // With plugins\n * import { filesPlugin, auditTrailsPlugin } from '@conduction/nextcloud-vue'\n * const useMyStore = createObjectStore('object', {\n * plugins: [filesPlugin(), auditTrailsPlugin()],\n * })\n *\n * @example\n * // With custom baseUrl\n * const useMyStore = createObjectStore('object', {\n * baseUrl: '/apps/myapp/api/objects',\n * })\n *\n * @example\n * // With i18n language negotiation (i18n-language-negotiation-getters)\n * import { useUserLanguage } from './composables/useUserLanguage.js'\n * const userLang = useUserLanguage()\n * const useMyStore = createObjectStore('object', {\n * languageGetter: () => userLang.value, // read stamps ?_lang=\n * targetLanguageGetter: () => userLang.value, // write stamps X-Translation-Target-Language\n * })\n */\nexport function createObjectStore(storeId, options = {}) {\n\tconst plugins = [...(options.plugins || [])]\n\n\t// Default-on live updates (live-updates-default-on):\n\t// install liveUpdatesPlugin unless the consumer opted out with\n\t// `liveUpdates: false`, or already passed their own instance (dedupe\n\t// by plugin name so explicit usage keeps working without a double\n\t// install). The plugin is inert until the first subscribe() call.\n\t//\n\t// The default instance is UNSHIFTED before options.plugins: plugin\n\t// merge order is later-wins (Object.assign), so consumer plugins keep\n\t// collision priority — a consumer plugin that defines its own\n\t// `subscribe`/`unsubscribe` action or `liveStatus` state overrides\n\t// the default install instead of being silently overridden by it.\n\tconst hasExplicitLiveUpdates = plugins.some((p) => p && p.name === 'liveUpdates')\n\tif (options.liveUpdates !== false && !hasExplicitLiveUpdates) {\n\t\tconst liveOpts = (typeof options.liveUpdates === 'object' && options.liveUpdates !== null)\n\t\t\t? options.liveUpdates\n\t\t\t: {}\n\t\tplugins.unshift(liveUpdatesPlugin(liveOpts))\n\t}\n\n\treturn defineObjectStore(\n\t\tstoreId,\n\t\tplugins,\n\t\toptions.baseUrl || prefixUrl(DEFAULT_BASE_URL),\n\t\t{\n\t\t\torganisationUuidGetter: options.organisationUuidGetter || null,\n\t\t\tlanguageGetter: options.languageGetter || null,\n\t\t\ttargetLanguageGetter: options.targetLanguageGetter || null,\n\t\t},\n\t)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useObjectStore.js","sources":["../../../src/store/useObjectStore.js"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { toRaw } from 'vue'\nimport { reportDiagnosticOnce, trackedFetch } from '../utils/diagnostics.js'\nimport { discardResponseBody } from '../utils/discardResponseBody.js'\nimport { genericError, networkError, parseResponseError } from '../utils/errors.js'\nimport { normalizeFacets } from '../utils/facets.js'\nimport { buildHeaders, buildQueryString, capitalize, prefixUrl } from '../utils/headers.js'\nimport { extractId } from '../utils/id.js'\nimport { readLensReports } from '../utils/lensAvailability.js'\nimport { dispatchObjectCreated } from '../utils/walkthroughSignals.js'\nimport { mergePluginActions, mergePluginGetters, mergePluginState } from './pluginMerge.js'\nimport { liveUpdatesPlugin } from './plugins/liveUpdates.js'\n\n/**\n * Generic Pinia store for OpenRegister object CRUD operations.\n *\n * Provides a unified interface for managing objects across registers and schemas.\n * Apps register their object types with schema/register IDs, then use type slugs\n * for all operations. Supports plugins for sub-resources (files, audit trails, etc.).\n *\n * @example\n * // Basic usage (CRUD only)\n * import { useObjectStore } from '@conduction/nextcloud-vue'\n * const store = useObjectStore()\n *\n * @example\n * // With plugins\n * import { createObjectStore, filesPlugin, auditTrailsPlugin } from '@conduction/nextcloud-vue'\n * const useMyStore = createObjectStore('object', {\n * plugins: [filesPlugin(), auditTrailsPlugin()],\n * })\n */\n\nconst DEFAULT_STORE_ID = 'conduction-objects'\nconst DEFAULT_BASE_URL = '/apps/openregister/api/objects'\n\n// Coalesces concurrent identical fetch-by-id requests into a single network\n// call: callers asking for an object already in flight share the pending\n// promise instead of firing a duplicate request. The entry clears once the\n// request settles. Module-scoped (not reactive state) so it never triggers\n// re-renders.\n//\n// The key is `${storeId}::${type}::${id}`, NOT the URL alone: the resolved\n// store write target is `objects[type][id]` on a specific store instance, and\n// each `_requestObject` writes only its own store. Coalescing across different\n// stores (e.g. the library default store vs an app's own createObjectStore)\n// or different type slugs would let one caller's request satisfy another whose\n// cache then never gets written — leaving that store's `objects[type][id]`\n// empty. Keying by (store, type, id) dedupes only truly-identical operations.\nconst _inflightObjectFetches = new Map()\n\n// ── Base state ──────────────────────────────────────────────────────────\n\nfunction baseState(baseUrl = DEFAULT_BASE_URL) {\n\t// Prefix here, at the ONE place every store instance passes through, rather\n\t// than at the factory: `createObjectStore({ baseUrl })` used to hand a\n\t// consumer-supplied path straight through unprefixed, so an app that\n\t// pointed the store at its own API (`/apps/portaliq/api/objects`) got the\n\t// bare form and 404'd on an instance without pretty URLs — while the\n\t// library default was prefixed and worked. prefixUrl is idempotent, so the\n\t// already-prefixed default survives unchanged.\n\tconst prefixedBaseUrl = prefixUrl(baseUrl)\n\treturn {\n\t\t/** @type {{string: {schema: string, register: string}}} */\n\t\tobjectTypeRegistry: {},\n\t\t/** @type {{string: Array}} */\n\t\tcollections: {},\n\t\t/** @type {{string: {string: object}}} */\n\t\tobjects: {},\n\t\t/** @type {{string: boolean}} */\n\t\tloading: {},\n\t\t/** @type {{string: import('../utils/errors.js').ApiError|null}} */\n\t\terrors: {},\n\t\t/** @type {{string: {total: number, page: number, pages: number, limit: number}}} */\n\t\tpagination: {},\n\t\t/** @type {{string: string}} */\n\t\tsearchTerms: {},\n\t\t/** @type {{string: object|null}} */\n\t\tschemas: {},\n\t\t/** @type {{string: object|null}} */\n\t\tregisters: {},\n\t\t/**\n\t\t * Facet data per type for CnIndexSidebar:\n\t\t * `{ fieldName: { values: [{ value, count?, label? }] } }`. `count` and\n\t\t * `label` are omitted when the bucket did not carry them.\n\t\t *\n\t\t * @type {{string: object}}\n\t\t */\n\t\tfacets: {},\n\t\t/**\n\t\t * Personal-lens reports of the latest collection response per type:\n\t\t * the body's `@self.lenses` (`{ recent: { available, reason } }`),\n\t\t * `{}` when it carried none. Written with the rows, so it always\n\t\t * describes the page on screen.\n\t\t *\n\t\t * @type {{string: object}}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-a-list-response-carries-the-report-of-the-lenses-it-was-asked-for\n\t\t */\n\t\tlenses: {},\n\t\t/** @type {{baseUrl: string, organisationUuidGetter: (() => string|null)|null, languageGetter: (() => string|null)|null, targetLanguageGetter: (() => string|null)|null}} */\n\t\t_options: {\n\t\t\tbaseUrl: prefixedBaseUrl,\n\t\t\torganisationUuidGetter: null,\n\t\t\tlanguageGetter: null,\n\t\t\ttargetLanguageGetter: null,\n\t\t},\n\t\t/**\n\t\t * Active tenant UUID — written by `setActiveTenantOrganisation()`\n\t\t * and read by `_resolveOrganisationUuid()` when no\n\t\t * `organisationUuidGetter` was passed to the factory.\n\t\t * `null` means \"no tenant header on outgoing requests\".\n\t\t *\n\t\t * @type {string|null}\n\t\t */\n\t\tactiveTenantOrganisationUuid: null,\n\t}\n}\n\n// ── Base getters ────────────────────────────────────────────────────────\n\nconst baseGetters = {\n\t/**\n\t * Get all registered object type slugs.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {string[]}\n\t */\n\tobjectTypes: (state) => Object.keys(state.objectTypeRegistry),\n\n\t/**\n\t * Get the collection array for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => Array}\n\t */\n\tgetCollection: (state) => (type) => state.collections[type] || [],\n\n\t/**\n\t * Get a single cached object by type and ID.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string, id: string) => object|null}\n\t */\n\tgetObject: (state) => (type, id) => state.objects[type]?.[id] || null,\n\n\t/**\n\t * Alias for getObject — check cache without fetching.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string, id: string) => object|null}\n\t */\n\tgetCachedObject: (state) => (type, id) => state.objects[type]?.[id] || null,\n\n\t/**\n\t * Check if a type is currently loading.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => boolean}\n\t */\n\tisLoading: (state) => (type) => state.loading[type] || false,\n\n\t/**\n\t * Get the current error for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => ApiError|null}\n\t */\n\tgetError: (state) => (type) => state.errors[type] || null,\n\n\t/**\n\t * Get pagination state for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => {total, page, pages, limit}}\n\t */\n\tgetPagination: (state) => (type) => state.pagination[type] || { total: 0, page: 1, pages: 1, limit: 20 },\n\n\t/**\n\t * Get the current search term for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => string}\n\t */\n\tgetSearchTerm: (state) => (type) => state.searchTerms[type] || '',\n\n\t/**\n\t * Get a cached schema for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => object|null}\n\t */\n\tgetSchema: (state) => (type) => state.schemas[type] || null,\n\n\t/**\n\t * Get a cached register for a type.\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => object|null}\n\t */\n\tgetRegister: (state) => (type) => state.registers[type] || null,\n\n\t/**\n\t * Get facet data for a type (CnIndexSidebar-compatible format).\n\t *\n\t * @param {object} state Pinia state\n\t * @return {(type: string) => object}\n\t */\n\tgetFacets: (state) => (type) => state.facets[type] || {},\n\tgetLenses: (state) => (type) => state.lenses[type] || {},\n}\n\n// ── Base actions ────────────────────────────────────────────────────────\n\nconst baseActions = {\n\t/**\n\t * Configure the store with custom options.\n\t * Call once before using the store if you need a custom base URL.\n\t *\n\t * @param {object} options Configuration options\n\t * @param {string} [options.baseUrl] Custom base URL for API calls\n\t */\n\tconfigure(options) {\n\t\tObject.assign(this._options, options)\n\t},\n\n\t/**\n\t * Create a standard object type slug.\n\t *\n\t * takes a unspecified number of props and joins them from first to left with a `-`.\n\t * However it is recommended to give it 1 register and 1 schema in that order.\n\t *\n\t * @param {unknown} params - unspecified number of props\n\t * @return {string}\n\t */\n\tcreateObjectTypeSlug(...params) {\n\t\tconst contentIds = params.map((x) => extractId(x))\n\n\t\treturn contentIds.join('-')\n\t},\n\n\t/**\n\t * Register an object type for CRUD operations.\n\t *\n\t * The optional fourth argument allows callers to supply canonical OR slugs\n\t * at registration time, avoiding a lazy fetch on first `subscribe()` call.\n\t * Omitting it is fully back-compatible — slugs default to `null` and are\n\t * lazily resolved by liveUpdatesPlugin when needed.\n\t *\n\t * @param {string} slug Short name for the type (e.g. 'client', 'case')\n\t * @param {string} schemaId OpenRegister schema ID\n\t * @param {string} registerId OpenRegister register ID\n\t * @param {object} [slugs] Optional slug hints for live-updates transport\n\t * @param {string|null} [slugs.registerSlug] Canonical register slug (e.g. 'zaken')\n\t * @param {string|null} [slugs.schemaSlug] Canonical schema slug (e.g. 'meldingen')\n\t * @param {string} [slugs.collectionUrl] Endpoint `fetchCollection` lists from instead of `/register/schema`; every other call keeps the pair URL\n\t */\n\tregisterObjectType(slug, schemaId, registerId, slugs = {}) {\n\t\tconst { registerSlug = null, schemaSlug = null, collectionUrl = null } = slugs\n\t\t// Replace entire objects so Vue 2 reactivity detects the change\n\t\t// (Vue 2 cannot track new properties added to existing reactive objects)\n\t\tthis.objectTypeRegistry = {\n\t\t\t...this.objectTypeRegistry,\n\t\t\t[slug]: {\n\t\t\t\tschema: schemaId,\n\t\t\t\tregister: registerId,\n\t\t\t\tregisterSlug,\n\t\t\t\tschemaSlug,\n\t\t\t\t...(collectionUrl ? { collectionUrl } : {}),\n\t\t\t},\n\t\t}\n\t\tthis.collections = { ...this.collections, [slug]: [] }\n\t\tthis.objects = { ...this.objects, [slug]: {} }\n\t\tthis.loading = { ...this.loading, [slug]: false }\n\t\tthis.errors = { ...this.errors, [slug]: null }\n\t\tthis.pagination = { ...this.pagination, [slug]: { total: 0, page: 1, pages: 1, limit: 20 } }\n\t\tthis.searchTerms = { ...this.searchTerms, [slug]: '' }\n\t\tthis.schemas = { ...this.schemas, [slug]: null }\n\t\tthis.registers = { ...this.registers, [slug]: null }\n\t\tthis.facets = { ...this.facets, [slug]: {} }\n\t\tthis.lenses = { ...this.lenses, [slug]: {} }\n\t},\n\n\t/**\n\t * Give a registered type a second schema path segment to try once when\n\t * its own answers 404 (see `_fetchWithSchemaFallback`). Set by\n\t * `resolveObjectOpType` for a schema title it kebab-cased, with the\n\t * title as written. A type that is not registered is left alone.\n\t *\n\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-schema-title-falls-back-to-its-written-form\n\t * @param {string} slug The type slug\n\t * @param {string} schema The fallback schema path segment\n\t */\n\tsetSchemaFallback(slug, schema) {\n\t\tconst config = this.objectTypeRegistry[slug]\n\t\tif (!config || typeof schema !== 'string' || schema === '') {\n\t\t\treturn\n\t\t}\n\t\tthis.objectTypeRegistry = {\n\t\t\t...this.objectTypeRegistry,\n\t\t\t[slug]: { ...config, schemaFallback: schema },\n\t\t}\n\t},\n\n\t/**\n\t * Unregister an object type and clean up all its state.\n\t *\n\t * @param {string} slug The type slug to unregister\n\t */\n\tunregisterObjectType(slug) {\n\t\tconst omit = (obj, key) => {\n\t\t\tconst { [key]: _, ...rest } = obj\n\t\t\treturn rest\n\t\t}\n\t\tthis.objectTypeRegistry = omit(this.objectTypeRegistry, slug)\n\t\tthis.collections = omit(this.collections, slug)\n\t\tthis.objects = omit(this.objects, slug)\n\t\tthis.loading = omit(this.loading, slug)\n\t\tthis.errors = omit(this.errors, slug)\n\t\tthis.pagination = omit(this.pagination, slug)\n\t\tthis.searchTerms = omit(this.searchTerms, slug)\n\t\tthis.schemas = omit(this.schemas, slug)\n\t\tthis.registers = omit(this.registers, slug)\n\t\tthis.facets = omit(this.facets, slug)\n\t\tthis.lenses = omit(this.lenses, slug)\n\t},\n\n\t/**\n\t * Get the type config or throw if not registered.\n\t *\n\t * @param {string} type The type slug\n\t * @return {{schema: string, register: string}} Type configuration\n\t * @throws {Error} If the type is not registered\n\t */\n\t_getTypeConfig(type) {\n\t\tconst config = this.objectTypeRegistry[type]\n\t\tif (!config) {\n\t\t\tthrow new Error(`Object type \"${type}\" is not registered in the store. Call registerObjectType('${type}', schemaId, registerId) first.`)\n\t\t}\n\t\treturn config\n\t},\n\n\t/**\n\t * Resolve the active organisation UUID for the next outgoing request.\n\t *\n\t * Resolution order (multi-tenancy-context):\n\t * 1. `_options.organisationUuidGetter()` — when set at store init.\n\t * 2. `activeTenantOrganisationUuid` — written by `setActiveTenantOrganisation`.\n\t * 3. `null` — no tenant header is stamped.\n\t *\n\t * Errors thrown by a custom getter are caught and downgraded to\n\t * `null` so a buggy getter never breaks an outbound request.\n\t *\n\t * @return {string|null}\n\t */\n\t_resolveOrganisationUuid() {\n\t\tconst getter = this._options.organisationUuidGetter\n\t\tif (typeof getter === 'function') {\n\t\t\ttry {\n\t\t\t\tconst v = getter()\n\t\t\t\treturn typeof v === 'string' && v.length > 0 ? v : null\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t}\n\t\treturn this.activeTenantOrganisationUuid || null\n\t},\n\n\t/**\n\t * Resolve the active read-side language for the next outgoing request.\n\t *\n\t * Wired via `createObjectStore(id, { languageGetter })`. When set, the\n\t * resolved value is appended to read URLs as `?_lang=<value>` so OR's\n\t * `i18n-api-language-negotiation` contract returns the localised\n\t * projection. A null/empty getter return — or a throwing getter — is\n\t * downgraded to `null` and the query parameter is skipped.\n\t *\n\t * @return {string|null}\n\t */\n\t_resolveLanguage() {\n\t\tconst getter = this._options.languageGetter\n\t\tif (typeof getter !== 'function') {\n\t\t\treturn null\n\t\t}\n\t\ttry {\n\t\t\tconst v = getter()\n\t\t\treturn typeof v === 'string' && v.length > 0 ? v : null\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Resolve the active write-side target language for the next outgoing\n\t * request.\n\t *\n\t * Wired via `createObjectStore(id, { targetLanguageGetter })`. When set,\n\t * the resolved value is stamped on writes as\n\t * `X-Translation-Target-Language: <value>` so OR's `i18n-source-of-truth`\n\t * contract authors the payload into `_translations[<value>]` instead\n\t * of overwriting the canonical source row. A null/empty return — or a\n\t * throwing getter — is downgraded to `null` and the header is skipped.\n\t *\n\t * @return {string|null}\n\t */\n\t_resolveTargetLanguage() {\n\t\tconst getter = this._options.targetLanguageGetter\n\t\tif (typeof getter !== 'function') {\n\t\t\treturn null\n\t\t}\n\t\ttry {\n\t\t\tconst v = getter()\n\t\t\treturn typeof v === 'string' && v.length > 0 ? v : null\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Build outbound headers stamped with the active tenant UUID, if any,\n\t * and the active write-side target language, if any.\n\t * Plugins MUST call this helper (not the bare `buildHeaders()` import)\n\t * so a single store instance stamps the same UUID + target language on\n\t * every request.\n\t *\n\t * @param {string} [contentType] Content-Type header value\n\t * @return {object} Headers object for use with fetch()\n\t */\n\t_buildHeaders(contentType = 'application/json') {\n\t\treturn buildHeaders({\n\t\t\tcontentType,\n\t\t\torganisationUuid: this._resolveOrganisationUuid() || undefined,\n\t\t\ttargetLanguage: this._resolveTargetLanguage() || undefined,\n\t\t})\n\t},\n\n\t/**\n\t * Set the active tenant organisation. Stamps `X-OpenRegister-Organisation`\n\t * on every subsequent outgoing request and clears the in-memory\n\t * `collections` + `objects` caches so a re-fetch hits the new tenant.\n\t *\n\t * No-op when the new UUID equals the currently-active one.\n\t *\n\t * @param {string|null} uuid The new tenant UUID\n\t */\n\tsetActiveTenantOrganisation(uuid) {\n\t\tconst next = (typeof uuid === 'string' && uuid.length > 0) ? uuid : null\n\t\tif (this.activeTenantOrganisationUuid === next) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.activeTenantOrganisationUuid = next\n\n\t\t// Cache reset — by tenant the same object slug can refer to a\n\t\t// completely different row set, so old cache entries are wrong.\n\t\tthis.collections = {}\n\t\tthis.objects = {}\n\t\tthis.facets = {}\n\t\tthis.lenses = {}\n\t\tthis.pagination = {}\n\t\t// Errors + loading flags are per-fetch and don't need a reset.\n\t},\n\n\t/**\n\t * Build the API URL for a type and optional object ID.\n\t *\n\t * When a `languageGetter` is wired and returns a non-empty string the\n\t * URL stamps `?_lang=<value>` so OR returns the localised projection\n\t * per the `i18n-api-language-negotiation` contract. Callers that\n\t * subsequently append their own `buildQueryString(params)` MUST use\n\t * `_buildUrlWithParams(type, params, id)` instead so the two query\n\t * strings reconcile cleanly.\n\t *\n\t * @param {string} type The type slug\n\t * @param {string|null} [id] Optional object ID\n\t * @param {string|null} [schema] Schema path segment to use instead of the type's own\n\t * @return {string} Full API URL path\n\t */\n\t_buildUrl(type, id = null, schema = null) {\n\t\tconst config = this._getTypeConfig(type)\n\t\tlet url = `${this._options.baseUrl}/${config.register}/${schema ?? config.schema}`\n\t\tif (id) {\n\t\t\turl += `/${id}`\n\t\t}\n\t\tconst lang = this._resolveLanguage()\n\t\tif (lang) {\n\t\t\turl += buildQueryString({ _lang: lang })\n\t\t}\n\t\treturn url\n\t},\n\n\t/**\n\t * Build the API URL for a type, an optional object ID, and an extra\n\t * params object that's already destined for `buildQueryString`. The\n\t * helper merges the active `languageGetter` value (when set) into the\n\t * params bag so the two query strings produce a single, well-formed\n\t * URL (instead of duplicating `?_lang=`).\n\t *\n\t * @param {string} type The type slug\n\t * @param {object} [params] Extra query parameters\n\t * @param {string|null} [id] Optional object ID\n\t * @param {string|null} [schema] Schema path segment to use instead of the type's own\n\t * @return {string} Full API URL path including query string\n\t */\n\t_buildUrlWithParams(type, params = {}, id = null, schema = null) {\n\t\tconst config = this._getTypeConfig(type)\n\t\tlet url = `${this._options.baseUrl}/${config.register}/${schema ?? config.schema}`\n\t\tif (id) {\n\t\t\turl += `/${id}`\n\t\t}\n\t\tconst lang = this._resolveLanguage()\n\t\tconst merged = lang ? { ...params, _lang: lang } : params\n\t\turl += buildQueryString(merged)\n\t\treturn url\n\t},\n\n\t/**\n\t * Build the list URL for a type registered with a `collectionUrl`. `_order`\n\t * goes in the bracket form (`_order[key]=dir`) every PHP endpoint parses.\n\t *\n\t * @param {object} config The type config\n\t * @param {object} [params] Query parameters\n\t * @return {string} Full URL including query string\n\t */\n\t_buildCollectionUrl(config, params = {}) {\n\t\tconst { _order: order, ...rest } = params\n\t\tconst merged = { ...rest }\n\t\tif (order && typeof order === 'object') {\n\t\t\tfor (const [key, dir] of Object.entries(order)) {\n\t\t\t\tmerged[`_order[${key}]`] = dir\n\t\t\t}\n\t\t}\n\t\tconst lang = this._resolveLanguage()\n\t\tif (lang) {\n\t\t\tmerged._lang = lang\n\t\t}\n\t\tconst url = prefixUrl(config.collectionUrl)\n\t\tconst query = buildQueryString(merged)\n\t\treturn query && url.includes('?') ? url + '&' + query.slice(1) : url + query\n\t},\n\n\t/**\n\t * Fetch for a type, retrying ONCE with its `schemaFallback` when the\n\t * schema path segment answers 404. A type without a fallback (every type\n\t * not registered by `resolveObjectOpType` for a kebab-cased title) makes\n\t * exactly the one request it always made. When the retry succeeds the\n\t * fallback becomes the type's schema, so later calls go straight to it;\n\t * when it does not, the first answer is returned and nothing changes.\n\t *\n\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-schema-title-falls-back-to-its-written-form\n\t * @param {string} type The type slug\n\t * @param {function((string|null)): string} makeUrl Builds the URL; called with\n\t * null for the type's own schema, or with the fallback segment.\n\t * @param {object} init The fetch options.\n\t * @return {Promise<Response>} The response to use.\n\t */\n\tasync _fetchWithSchemaFallback(type, makeUrl, init) {\n\t\t// `makeUrl` wraps `_buildUrl` / `_buildUrlWithParams`, so `url` is built\n\t\t// from the prefixed `_options.baseUrl` like every other request here.\n\t\tlet url = makeUrl(null)\n\t\tconst response = await trackedFetch(url, init)\n\t\tif (!response || response.status !== 404) {\n\t\t\treturn response\n\t\t}\n\t\tconst config = this.objectTypeRegistry[type]\n\t\tconst fallback = config && config.schemaFallback\n\t\tif (!fallback || String(fallback) === String(config.schema)) {\n\t\t\treturn response\n\t\t}\n\t\tlet retry\n\t\ttry {\n\t\t\turl = makeUrl(fallback)\n\t\t\tretry = await trackedFetch(url, init)\n\t\t} catch {\n\t\t\treturn response\n\t\t}\n\t\tif (!retry || !retry.ok) {\n\t\t\tdiscardResponseBody(retry)\n\t\t\treturn response\n\t\t}\n\t\tdiscardResponseBody(response)\n\t\tconst { schemaFallback: _, ...rest } = config\n\t\tthis.objectTypeRegistry = {\n\t\t\t...this.objectTypeRegistry,\n\t\t\t[type]: { ...rest, schema: fallback },\n\t\t}\n\t\treturn retry\n\t},\n\n\t/**\n\t * Clear the error state for a type.\n\t *\n\t * @param {string} type The type slug\n\t */\n\tclearError(type) {\n\t\tthis.errors = { ...this.errors, [type]: null }\n\t},\n\n\t/**\n\t * Set the search term for a type.\n\t *\n\t * @param {string} type The type slug\n\t * @param {string} term The search term\n\t */\n\tsetSearchTerm(type, term) {\n\t\tthis.searchTerms = { ...this.searchTerms, [type]: term }\n\t},\n\n\t/**\n\t * Clear the search term for a type.\n\t *\n\t * @param {string} type The type slug\n\t */\n\tclearSearchTerm(type) {\n\t\tthis.searchTerms = { ...this.searchTerms, [type]: '' }\n\t},\n\n\t/**\n\t * Fetch the schema definition for a registered type.\n\t * Uses cache — only fetches once per type per session.\n\t *\n\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-schema-title-falls-back-to-its-written-form\n\t * @param {string} type The registered type slug\n\t * @return {Promise<object|null>} The schema object or null on error\n\t */\n\tasync fetchSchema(type) {\n\t\tconst config = this._getTypeConfig(type)\n\n\t\tif (this.schemas[type]) {\n\t\t\treturn this.schemas[type]\n\t\t}\n\n\t\ttry {\n\t\t\t// A slug is NOT a namespace: the same schema slug can exist in\n\t\t\t// several registers on one instance, and the bare endpoint resolves\n\t\t\t// it instance-wide — a colliding slug then silently serves another\n\t\t\t// app's schema into this app's forms. Scope the lookup to the\n\t\t\t// page's own register whenever one is configured; a backend that\n\t\t\t// does not yet know the parameter ignores it (today's behaviour).\n\t\t\tconst registerScope = config.register\n\t\t\t\t? `?register=${encodeURIComponent(config.register)}`\n\t\t\t\t: ''\n\t\t\t// Through the schema fallback like every objects-API call: a type\n\t\t\t// resolveObjectOpType registered from a title (`APInvoice` ->\n\t\t\t// `ap-invoice`) retries once with the title as written on a 404.\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => prefixUrl(`/apps/openregister/api/schemas/${schema ?? config.schema}${registerScope}`),\n\t\t\t\t{ method: 'GET', headers: this._buildHeaders() },\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// #573: a schema 404 is routine (the app registered a type with\n\t\t\t\t// no schema behind it), but returning here without touching the\n\t\t\t\t// body leaves the request in flight for the life of the page and\n\t\t\t\t// `networkidle` never arrives.\n\t\t\t\tdiscardResponseBody(response)\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\treportDiagnosticOnce(`binding|missing-schema|${type}`, { kind: 'binding', problem: 'missing-schema', register: String(config.register || ''), schema: String(config.schema || ''), property: null, where: null })\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst schema = await response.json()\n\t\t\tthis.schemas = { ...this.schemas, [type]: schema }\n\t\t\treturn schema\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Fetch the register definition for a registered type.\n\t * Uses cache — only fetches once per type per session.\n\t *\n\t * @param {string} type The registered type slug\n\t * @return {Promise<object|null>} The register object or null on error\n\t */\n\tasync fetchRegister(type) {\n\t\tconst config = this._getTypeConfig(type)\n\n\t\tif (this.registers[type]) {\n\t\t\treturn this.registers[type]\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await trackedFetch(\n\t\t\t\tprefixUrl(`/apps/openregister/api/registers/${config.register}`),\n\t\t\t\t{ method: 'GET', headers: this._buildHeaders() },\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// Same leak as fetchSchema above (#573) — same shape, same fix.\n\t\t\t\tdiscardResponseBody(response)\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\treportDiagnosticOnce(`binding|missing-register|${type}`, { kind: 'binding', problem: 'missing-register', register: String(config.register || ''), schema: String(config.schema || ''), property: null, where: null })\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst register = await response.json()\n\t\t\tthis.registers = { ...this.registers, [type]: register }\n\t\t\treturn register\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t},\n\n\t/**\n\t * Fetch a collection of objects for a registered type.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {object} [params] Query parameters (_limit, _page, _search, _order, filters)\n\t * @param {object} [options] Call options\n\t * @param {{error?: object|null}} [options.outcome] Opt-in sink for THIS call's own result: `error` is set to the error it records on `errors[type]`, or `null` on success. Unlike `errors[type]`, which every call for the type shares, a later call cannot overwrite it.\n\t * @param {boolean} [options.append] Add the fetched page after the rows already stored instead of replacing them. Dropped when the stored rows are no longer the page before it, or when `options.isCurrent()` returns false (the query changed meanwhile).\n\t * @param {() => boolean} [options.isCurrent] With `append`: asked once the page arrives; false drops it.\n\t * @return {Promise<Array>} The fetched collection (also stored in state, unless a newer non-append fetch for the type started meanwhile)\n\t * @spec openspec/changes/list-keeps-its-newest-query/specs/list-keeps-its-newest-query/spec.md#requirement-the-newest-list-query-decides-what-the-list-shows\n\t */\n\tasync fetchCollection(type, params = {}, options = {}) {\n\t\tconst outcome = (options && typeof options.outcome === 'object' && options.outcome) || null\n\t\tconst append = options?.append === true\n\t\t// Responses can arrive out of order; only the newest query for the\n\t\t// type may write the list. An append page belongs to the query before it.\n\t\tconst currentQuery = this.__currentCollectionQuery || (this.__currentCollectionQuery = {})\n\t\tif (!append) {\n\t\t\tcurrentQuery[type] = JSON.stringify(params)\n\t\t}\n\t\tconst query = currentQuery[type]\n\t\tconst superseded = () => currentQuery[type] !== query\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\t// Auto-include _facets=extend when schema has facetable properties\n\t\t\tconst fetchParams = { ...params }\n\t\t\tif (!fetchParams._facets) {\n\t\t\t\tconst schema = this.schemas[type]\n\t\t\t\tconst hasFacetable = schema\n\t\t\t\t\t&& schema.properties\n\t\t\t\t\t&& Object.values(schema.properties).some((p) => p.facetable)\n\t\t\t\tif (hasFacetable) {\n\t\t\t\t\tfetchParams._facets = 'extend'\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst config = this._getTypeConfig(type)\n\t\t\tconst init = { method: 'GET', headers: this._buildHeaders() }\n\t\t\tconst response = config.collectionUrl\n\t\t\t\t? await trackedFetch(this._buildCollectionUrl(config, fetchParams), init)\n\t\t\t\t: await this._fetchWithSchemaFallback(\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\t(schema) => this._buildUrlWithParams(type, fetchParams, null, schema),\n\t\t\t\t\t\tinit,\n\t\t\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst failure = await parseResponseError(response, type)\n\t\t\t\tif (outcome) {\n\t\t\t\t\toutcome.error = failure\n\t\t\t\t}\n\t\t\t\tif (superseded()) {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t\tthis.errors = { ...this.errors, [type]: failure }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error fetching ${type} collection:`, failure)\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\tconst results = data.results || data\n\n\t\t\tif (superseded()) {\n\t\t\t\tif (outcome) {\n\t\t\t\t\toutcome.error = null\n\t\t\t\t}\n\t\t\t\treturn append ? [] : results\n\t\t\t}\n\t\t\tconst stale = append && (\n\t\t\t\tNumber(this.pagination[type]?.page || 1) !== Number(params._page || 1) - 1\n\t\t\t\t|| (typeof options.isCurrent === 'function' && !options.isCurrent())\n\t\t\t)\n\t\t\tif (stale) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tthis.collections = {\n\t\t\t\t...this.collections,\n\t\t\t\t[type]: append ? [...(this.collections[type] || []), ...results] : results,\n\t\t\t}\n\t\t\t// Why a personal lens came back empty, if it says (openregister#4514).\n\t\t\tthis.lenses = { ...this.lenses, [type]: readLensReports(data) }\n\t\t\tthis.pagination = {\n\t\t\t\t...this.pagination,\n\t\t\t\t[type]: {\n\t\t\t\t\ttotal: data.total || (append ? this.collections[type].length : results.length),\n\t\t\t\t\tpage: data.page || 1,\n\t\t\t\t\tpages: data.pages || 1,\n\t\t\t\t\tlimit: params._limit || 20,\n\t\t\t\t},\n\t\t\t}\n\n\t\t\t// Parse facet data from API response and transform to CnIndexSidebar format\n\t\t\tif (data.facets) {\n\t\t\t\tconst transformed = normalizeFacets(data.facets)\n\t\t\t\tthis.facets = { ...this.facets, [type]: transformed }\n\t\t\t}\n\n\t\t\tif (outcome) {\n\t\t\t\toutcome.error = null\n\t\t\t}\n\t\t\treturn results\n\t\t} catch (error) {\n\t\t\tconst failure = error.name === 'TypeError'\n\t\t\t\t? networkError(error)\n\t\t\t\t: genericError(error)\n\t\t\tif (outcome) {\n\t\t\t\toutcome.error = failure\n\t\t\t}\n\t\t\tif (superseded()) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tthis.errors = { ...this.errors, [type]: failure }\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error fetching ${type} collection:`, error)\n\t\t\treturn []\n\t\t} finally {\n\t\t\tif (!superseded()) {\n\t\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Fetch a collection of objects WITHOUT touching `collections[type]` /\n\t * `pagination[type]` / `loading[type]` / `errors[type]`.\n\t *\n\t * `fetchCollection` and this method share a `type` slug keyed only by\n\t * register+schema, not by query — so a caller fetching the SAME type\n\t * with different params (e.g. a reference-field picker loading option\n\t * results, unfiltered and unpaged) would otherwise clobber the state a\n\t * self-fetch `CnIndexPage` for that exact type is reactively bound to.\n\t * That collision is real whenever a schema references itself (a case's\n\t * \"Parent case\" field pointing back at `case`): opening the create\n\t * dialog silently overwrote the open list's rows and count with the\n\t * picker's own result set. Use this for any lookup whose results are\n\t * not meant to drive a list view.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {object} [params] Query parameters (_limit, _page, _search, _order, filters)\n\t * @return {Promise<Array>} The fetched results, never written to store state\n\t */\n\tasync fetchCollectionForOptions(type, params = {}) {\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => this._buildUrlWithParams(type, params, null, schema),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tdiscardResponseBody(response)\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\treturn data.results || data\n\t\t} catch {\n\t\t\treturn []\n\t\t}\n\t},\n\n\t/**\n\t * Fetch a single object by type and ID.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object ID or UUID\n\t * @param {object} [options] Read options\n\t * @param {string[]} [options.extend] Values for `_extend[]` (e.g. `['@self.can']`), for markers OpenRegister returns only on request\n\t * @return {Promise<object|null>} The fetched object (also cached in state)\n\t */\n\tasync fetchObject(type, id, options = {}) {\n\t\tconst extend = Array.isArray(options && options.extend) ? options.extend.filter((e) => typeof e === 'string' && e !== '') : []\n\t\tconst url = extend.length > 0\n\t\t\t? this._buildUrlWithParams(type, { _extend: extend }, id)\n\t\t\t: this._buildUrl(type, id)\n\t\t// Share a single in-flight request across concurrent callers asking\n\t\t// for the same object on this store, instead of firing a duplicate\n\t\t// network call. Scoped to (store, type, id) so it never starves a\n\t\t// different store's cache — see `_inflightObjectFetches` above.\n\t\tconst key = `${this.$id}::${type}::${id}${extend.length > 0 ? '::' + extend.join(',') : ''}`\n\t\tconst existing = _inflightObjectFetches.get(key)\n\t\tif (existing) {\n\t\t\treturn existing\n\t\t}\n\t\tconst request = this._requestObject(type, id, url, extend)\n\t\t_inflightObjectFetches.set(key, request)\n\t\ttry {\n\t\t\treturn await request\n\t\t} finally {\n\t\t\t_inflightObjectFetches.delete(key)\n\t\t}\n\t},\n\n\t/**\n\t * Perform the actual fetch-by-id network request and cache the result.\n\t * Wrapped by `fetchObject`, which de-duplicates concurrent calls.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object id\n\t * @param {string} url The pre-built request URL\n\t * @param {string[]} [extend] The `_extend[]` values the URL carries (kept on a schema-fallback retry)\n\t * @return {Promise<object|null>} The object or null on error\n\t */\n\tasync _requestObject(type, id, url, extend = []) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => (schema === null\n\t\t\t\t\t? url\n\t\t\t\t\t: (extend.length > 0 ? this._buildUrlWithParams(type, { _extend: extend }, id, schema) : this._buildUrl(type, id, schema))),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// A 404 on a fetch-by-id is an EXPECTED answer, not a fault:\n\t\t\t\t// asking whether an object exists is how a consumer finds out\n\t\t\t\t// that it does not. scholiq's credential-verification page is\n\t\t\t\t// built on exactly that question, so an unknown or revoked id is\n\t\t\t\t// the designed path — and the page renders the invalid state\n\t\t\t\t// correctly while this line failed its \"no fatal JS errors\" e2e\n\t\t\t\t// check, which the app has no way to suppress (#612).\n\t\t\t\t//\n\t\t\t\t// The outcome is already recorded in `this.errors[type]` for the\n\t\t\t\t// component to render, so the console write adds nothing the\n\t\t\t\t// consumer can act on. The same guard is on the sub-resource\n\t\t\t\t// path in createSubResourcePlugin / useSubResource; this is the\n\t\t\t\t// single-object path it missed, and it is the one that shipped\n\t\t\t\t// the message scholiq actually sees.\n\t\t\t\t//\n\t\t\t\t// Genuine faults (5xx, 403, …) still surface, and now say WHAT\n\t\t\t\t// went wrong: `parseResponseError` returns a reactive proxy,\n\t\t\t\t// which the console renders as an unreadable `Proxy(Object)`.\n\t\t\t\tif (response.status !== 404) {\n\t\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Error fetching ${type}/${id}: ${response.status} ${response.statusText}`,\n\t\t\t\t\t\ttoRaw(this.errors[type]),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\n\t\t\tthis.objects = {\n\t\t\t\t...this.objects,\n\t\t\t\t[type]: { ...(this.objects[type] || {}), [id]: data },\n\t\t\t}\n\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error fetching ${type}/${id}:`, error)\n\t\t\treturn null\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Update only some keys of an object: a PATCH carrying `changes`, so every\n\t * key the caller did not send keeps its stored value. The saved object\n\t * replaces the cached one.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object id\n\t * @param {object} changes The keys to write, with their new values\n\t * @return {Promise<object|null>} The saved object or null on error\n\t * @spec openspec/changes/forms-save-edited-keys/specs/object-store/spec.md#requirement-an-edit-writes-only-the-keys-it-changed\n\t */\n\tasync patchObject(type, id, changes) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => this._buildUrl(type, id, schema),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PATCH',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\tbody: JSON.stringify(changes || {}),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error saving ${type}:`, this.errors[type])\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\tconst savedId = data.id || id\n\t\t\tthis.objects = {\n\t\t\t\t...this.objects,\n\t\t\t\t[type]: { ...(this.objects[type] || {}), [savedId]: data },\n\t\t\t}\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error saving ${type}:`, error)\n\t\t\treturn null\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Create or update an object. Uses POST for new objects, PUT for updates.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {object} objectData The object data (include `id` for updates)\n\t * @return {Promise<object|null>} The saved object or null on error\n\t */\n\tasync saveObject(type, objectData) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst isUpdate = !!objectData.id\n\t\t\tconst method = isUpdate ? 'PUT' : 'POST'\n\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => (isUpdate\n\t\t\t\t\t? this._buildUrl(type, objectData.id, schema)\n\t\t\t\t\t: this._buildUrl(type, null, schema)),\n\t\t\t\t{\n\t\t\t\t\tmethod,\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\tbody: JSON.stringify(objectData),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error saving ${type}:`, this.errors[type])\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst data = await response.json()\n\t\t\tconst savedId = data.id || objectData.id\n\n\t\t\tthis.objects = {\n\t\t\t\t...this.objects,\n\t\t\t\t[type]: { ...(this.objects[type] || {}), [savedId]: data },\n\t\t\t}\n\n\t\t\t// Every create through the store lets an `advanceOn:\n\t\t\t// object-created` walkthrough step advance, whichever form made it.\n\t\t\tif (!isUpdate) {\n\t\t\t\tconst config = this.objectTypeRegistry[type] || {}\n\t\t\t\tdispatchObjectCreated({ register: config.registerSlug || config.register, schema: config.schemaSlug || config.schema, object: data })\n\t\t\t}\n\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error saving ${type}:`, error)\n\t\t\treturn null\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Delete an object by type and ID.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string} id The object ID\n\t * @return {Promise<boolean>} True if deleted successfully\n\t */\n\tasync deleteObject(type, id) {\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst response = await this._fetchWithSchemaFallback(\n\t\t\t\ttype,\n\t\t\t\t(schema) => this._buildUrl(type, id, schema),\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthis.errors = { ...this.errors, [type]: await parseResponseError(response, type) }\n\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\tconsole.error(`Error deleting ${type}/${id}:`, this.errors[type])\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// A successful DELETE's body is never read either (#573) — same\n\t\t\t// in-flight request, just on the happy path.\n\t\t\tdiscardResponseBody(response)\n\n\t\t\tif (this.objects[type]) {\n\t\t\t\tconst { [id]: _, ...remaining } = this.objects[type]\n\t\t\t\tthis.objects = { ...this.objects, [type]: remaining }\n\t\t\t}\n\t\t\tif (this.collections[type]) {\n\t\t\t\tthis.collections = {\n\t\t\t\t\t...this.collections,\n\t\t\t\t\t[type]: this.collections[type].filter((obj) => obj.id !== id),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\tthis.errors = {\n\t\t\t\t...this.errors,\n\t\t\t\t[type]: error.name === 'TypeError'\n\t\t\t\t\t? networkError(error)\n\t\t\t\t\t: genericError(error),\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\tconsole.error(`Error deleting ${type}/${id}:`, error)\n\t\t\treturn false\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Delete multiple objects by type and IDs in parallel.\n\t * Each delete is run via Promise.all; partial success is reported so the UI can show which succeeded or failed.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string[]} ids Array of object IDs to delete\n\t * @return {Promise<{ successfulIds: string[], failedIds: string[] }>} Result with successful and failed IDs\n\t */\n\tasync deleteObjects(type, ids) {\n\t\tconst result = { successfulIds: [], failedIds: [] }\n\t\tif (!ids?.length) {\n\t\t\treturn result\n\t\t}\n\n\t\tthis.loading = { ...this.loading, [type]: true }\n\t\tthis.errors = { ...this.errors, [type]: null }\n\n\t\ttry {\n\t\t\tconst runOne = async (id) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst url = this._buildUrl(type, id)\n\t\t\t\t\tconst response = await trackedFetch(url, {\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\t})\n\t\t\t\t\t// Only the status is used, so nothing ever reads the body\n\t\t\t\t\t// (#573). A bulk delete of N objects would otherwise leave N\n\t\t\t\t\t// requests in flight.\n\t\t\t\t\tdiscardResponseBody(response)\n\t\t\t\t\treturn { id, success: response.ok }\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// eslint-disable-next-line no-console -- diagnostic for a failure this code already degrades from\n\t\t\t\t\tconsole.error(`Error deleting ${type}/${id}:`, error)\n\t\t\t\t\treturn { id, success: false }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst outcomes = await Promise.all(ids.map(runOne))\n\t\t\tfor (const { id, success } of outcomes) {\n\t\t\t\tif (success) {\n\t\t\t\t\tresult.successfulIds.push(id)\n\t\t\t\t} else {\n\t\t\t\t\tresult.failedIds.push(id)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.successfulIds.length > 0) {\n\t\t\t\tconst successSet = new Set(result.successfulIds)\n\t\t\t\tif (this.objects[type]) {\n\t\t\t\t\tconst remaining = {}\n\t\t\t\t\tfor (const [k, v] of Object.entries(this.objects[type])) {\n\t\t\t\t\t\tif (!successSet.has(k)) {\n\t\t\t\t\t\t\tremaining[k] = v\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.objects = { ...this.objects, [type]: remaining }\n\t\t\t\t}\n\t\t\t\tif (this.collections[type]) {\n\t\t\t\t\tthis.collections = {\n\t\t\t\t\t\t...this.collections,\n\t\t\t\t\t\t[type]: this.collections[type].filter((obj) => !successSet.has(obj.id)),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result.failedIds.length > 0) {\n\t\t\t\tthis.errors = {\n\t\t\t\t\t...this.errors,\n\t\t\t\t\t[type]: genericError(new Error(`Failed to delete ${result.failedIds.length} item(s)`)),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result\n\t\t} finally {\n\t\t\tthis.loading = { ...this.loading, [type]: false }\n\t\t}\n\t},\n\n\t/**\n\t * Batch-resolve references by fetching multiple objects by their IDs.\n\t * Uses the cache first, only fetches uncached objects.\n\t *\n\t * @param {string} type The registered type slug\n\t * @param {string[]} ids Array of object IDs to resolve\n\t * @return {Promise<{[key: string]: object}>} Map of id -> object\n\t */\n\tasync resolveReferences(type, ids) {\n\t\tif (!ids || ids.length === 0) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst uniqueIds = [...new Set(ids.filter(Boolean))]\n\t\tconst result = {}\n\t\tconst toFetch = []\n\n\t\tfor (const id of uniqueIds) {\n\t\t\tconst cached = this.objects[type]?.[id]\n\t\t\tif (cached) {\n\t\t\t\tresult[id] = cached\n\t\t\t} else {\n\t\t\t\ttoFetch.push(id)\n\t\t\t}\n\t\t}\n\n\t\tif (toFetch.length > 0) {\n\t\t\tconst fetches = toFetch.map(async (id) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst url = this._buildUrl(type, id)\n\t\t\t\t\tconst response = await trackedFetch(url, {\n\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\theaders: this._buildHeaders(),\n\t\t\t\t\t})\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\tconst data = await response.json()\n\t\t\t\t\t\tthis.objects = {\n\t\t\t\t\t\t\t...this.objects,\n\t\t\t\t\t\t\t[type]: { ...(this.objects[type] || {}), [id]: data },\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[id] = data\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Non-blocking — leave unresolved\n\t\t\t\t}\n\t\t\t})\n\t\t\tawait Promise.all(fetches)\n\t\t}\n\n\t\treturn result\n\t},\n}\n\n// ── Store factory ───────────────────────────────────────────────────────\n\n/**\n * Create the object store definition with a given store ID and optional plugins.\n *\n * Plugins are merged into the store at definition time. Each plugin provides\n * additional state, getters, and actions (e.g. for sub-resources like files,\n * audit trails, relations).\n *\n * @param {string} storeId Pinia store identifier\n * @param {Array} [plugins] Array of plugin definitions\n * @param {string} [baseUrl] Base API URL override\n * @param {object} [extraOptions] Factory-level getters (organisationUuidGetter, languageGetter, targetLanguageGetter)\n * @return {() => object} Pinia store composable\n */\nfunction defineObjectStore(storeId, plugins = [], baseUrl = DEFAULT_BASE_URL, extraOptions = {}) {\n\tconst pluginState = mergePluginState(plugins)\n\tconst pluginGetters = mergePluginGetters(plugins)\n\tconst pluginActions = mergePluginActions(plugins)\n\tconst setupPlugins = plugins.filter((p) => typeof p.setup === 'function')\n\tconst initialized = new WeakSet()\n\tconst factoryOrganisationUuidGetter = typeof extraOptions.organisationUuidGetter === 'function'\n\t\t? extraOptions.organisationUuidGetter\n\t\t: null\n\tconst factoryLanguageGetter = typeof extraOptions.languageGetter === 'function'\n\t\t? extraOptions.languageGetter\n\t\t: null\n\tconst factoryTargetLanguageGetter = typeof extraOptions.targetLanguageGetter === 'function'\n\t\t? extraOptions.targetLanguageGetter\n\t\t: null\n\n\tconst useStore = defineStore(storeId, {\n\t\tstate: () => {\n\t\t\tconst base = baseState(baseUrl)\n\t\t\tif (factoryOrganisationUuidGetter) {\n\t\t\t\tbase._options.organisationUuidGetter = factoryOrganisationUuidGetter\n\t\t\t}\n\t\t\tif (factoryLanguageGetter) {\n\t\t\t\tbase._options.languageGetter = factoryLanguageGetter\n\t\t\t}\n\t\t\tif (factoryTargetLanguageGetter) {\n\t\t\t\tbase._options.targetLanguageGetter = factoryTargetLanguageGetter\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\t...pluginState,\n\t\t\t}\n\t\t},\n\n\t\tgetters: {\n\t\t\t...baseGetters,\n\t\t\t...pluginGetters,\n\t\t},\n\n\t\tactions: {\n\t\t\t...baseActions,\n\t\t\t...pluginActions,\n\n\t\t\t/**\n\t\t\t * Clear all sub-resource data from active plugins.\n\t\t\t * Calls each plugin's clear method (e.g. clearFiles, clearAuditTrails).\n\t\t\t */\n\t\t\tclearAllSubResources() {\n\t\t\t\tfor (const plugin of plugins) {\n\t\t\t\t\tconst clearFn = `clear${capitalize(plugin.name)}`\n\t\t\t\t\tif (typeof this[clearFn] === 'function') {\n\t\t\t\t\t\tthis[clearFn]()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t})\n\n\tif (setupPlugins.length === 0) {\n\t\treturn useStore\n\t}\n\n\treturn function useObjectStoreWithSetup(pinia) {\n\t\tconst store = useStore(pinia)\n\t\tif (!initialized.has(store)) {\n\t\t\tinitialized.add(store)\n\t\t\tfor (const plugin of setupPlugins) {\n\t\t\t\tplugin.setup(store)\n\t\t\t}\n\t\t}\n\t\treturn store\n\t}\n}\n\n/**\n * Default object store instance with ID 'conduction-objects'.\n *\n * Ships with `liveUpdatesPlugin` installed (manifest-live-updates): the\n * library's manifest-driven pages (CnIndexPage self-fetch, CnDetailPage\n * schema-driven, CnPageRenderer) all resolve THIS store, so it needs the\n * `subscribe`/`unsubscribe` actions for their auto-subscriptions to engage —\n * mirroring `createObjectStore`'s default-on behaviour (live-updates-default-on).\n * The plugin is fully inert until the first `subscribe()` call: no notify_push\n * probe, no websocket, no polling timers, no fetch-dedup wrapping.\n *\n * @example\n * import { useObjectStore } from '@conduction/nextcloud-vue'\n * const store = useObjectStore()\n */\nexport const useObjectStore = defineObjectStore(DEFAULT_STORE_ID, [liveUpdatesPlugin()], prefixUrl(DEFAULT_BASE_URL))\n\n/**\n * Factory function to create an object store with a custom Pinia store ID\n * and optional plugins for sub-resources.\n *\n * @param {string} storeId Custom Pinia store identifier\n * @param {object} [options] Configuration options\n * @param {Array} [options.plugins] Array of sub-resource plugins\n * @param {string} [options.baseUrl] Base API URL override\n * @param {boolean|object} [options.liveUpdates] Live-updates plugin control. The\n * `liveUpdatesPlugin` is installed BY DEFAULT on every store created via this\n * factory. It is fully inert until the first `store.subscribe()` call: no\n * websocket connection attempt, no polling timers, and no request-dedup\n * wrapping happen before that. Pass `false` to opt out entirely (the store\n * then has no `subscribe`/`unsubscribe` actions and no `liveStatus` state).\n * Pass an options object (e.g. `{ pollIntervalCollection: 15000 }`) to\n * configure the default-installed plugin. When `options.plugins` already\n * contains a `liveUpdatesPlugin(...)` instance, that explicit instance wins\n * and no second copy is installed (dedupe by plugin name `'liveUpdates'`).\n * The default instance is installed BEFORE `options.plugins`, so on name\n * collisions (a consumer plugin defining `subscribe`, `unsubscribe`, or\n * live state keys) the consumer plugin keeps priority.\n * See the `live-updates-default-on` change.\n * @param {() => string|null} [options.organisationUuidGetter] When set, every\n * request stamps `X-OpenRegister-Organisation: <uuid>` for multi-tenancy.\n * See the `multi-tenancy-context` change.\n * @param {() => string|null} [options.languageGetter] When set, every read URL\n * stamps `?_lang=<bcp47>` so OR returns the localised projection per the\n * `i18n-api-language-negotiation` contract. Returning `null` or an empty\n * string skips the parameter. A throwing getter is downgraded to `null`.\n * See the `i18n-language-negotiation-getters` change.\n * @param {() => string|null} [options.targetLanguageGetter] When set, every\n * write request stamps `X-Translation-Target-Language: <bcp47>` so OR\n * authors the payload into `_translations[<bcp47>]` instead of overwriting\n * the canonical source row, per the `i18n-source-of-truth` contract.\n * Returning `null` or an empty string skips the header. A throwing getter\n * is downgraded to `null`.\n * See the `i18n-language-negotiation-getters` change.\n * @return {() => object} Pinia store composable\n *\n * @example\n * // Basic (backwards compatible)\n * const useMyStore = createObjectStore('object')\n *\n * @example\n * // With plugins\n * import { filesPlugin, auditTrailsPlugin } from '@conduction/nextcloud-vue'\n * const useMyStore = createObjectStore('object', {\n * plugins: [filesPlugin(), auditTrailsPlugin()],\n * })\n *\n * @example\n * // With custom baseUrl\n * const useMyStore = createObjectStore('object', {\n * baseUrl: '/apps/myapp/api/objects',\n * })\n *\n * @example\n * // With i18n language negotiation (i18n-language-negotiation-getters)\n * import { useUserLanguage } from './composables/useUserLanguage.js'\n * const userLang = useUserLanguage()\n * const useMyStore = createObjectStore('object', {\n * languageGetter: () => userLang.value, // read stamps ?_lang=\n * targetLanguageGetter: () => userLang.value, // write stamps X-Translation-Target-Language\n * })\n */\nexport function createObjectStore(storeId, options = {}) {\n\tconst plugins = [...(options.plugins || [])]\n\n\t// Default-on live updates (live-updates-default-on):\n\t// install liveUpdatesPlugin unless the consumer opted out with\n\t// `liveUpdates: false`, or already passed their own instance (dedupe\n\t// by plugin name so explicit usage keeps working without a double\n\t// install). The plugin is inert until the first subscribe() call.\n\t//\n\t// The default instance is UNSHIFTED before options.plugins: plugin\n\t// merge order is later-wins (Object.assign), so consumer plugins keep\n\t// collision priority — a consumer plugin that defines its own\n\t// `subscribe`/`unsubscribe` action or `liveStatus` state overrides\n\t// the default install instead of being silently overridden by it.\n\tconst hasExplicitLiveUpdates = plugins.some((p) => p && p.name === 'liveUpdates')\n\tif (options.liveUpdates !== false && !hasExplicitLiveUpdates) {\n\t\tconst liveOpts = (typeof options.liveUpdates === 'object' && options.liveUpdates !== null)\n\t\t\t? options.liveUpdates\n\t\t\t: {}\n\t\tplugins.unshift(liveUpdatesPlugin(liveOpts))\n\t}\n\n\treturn defineObjectStore(\n\t\tstoreId,\n\t\tplugins,\n\t\toptions.baseUrl || prefixUrl(DEFAULT_BASE_URL),\n\t\t{\n\t\t\torganisationUuidGetter: options.organisationUuidGetter || null,\n\t\t\tlanguageGetter: options.languageGetter || null,\n\t\t\ttargetLanguageGetter: options.targetLanguageGetter || null,\n\t\t},\n\t)\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { variantForColor } from './headerFieldChips.js';
2
+ import { isObjectRowsSpec, objectRowsOf } from './objectRows.js';
2
3
  import { readPath } from './readPath.js';
3
4
  import { evaluateVisibleWhenLocal } from './visibleWhen.js';
4
5
 
@@ -336,6 +337,7 @@ function pillLook(look) {
336
337
  * @param {object|null} object The record.
337
338
  * @return {number|null} The count, or null when the tab declares none.
338
339
  * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-tab-counts-and-overflow
340
+ * @spec openspec/changes/record-list-object-rows/specs/record-list/spec.md#requirement-a-tab-can-count-the-rows-its-record-holds
339
341
  */
340
342
  function resolveTabCount(tab, object) {
341
343
  if (!tab || typeof tab !== 'object') {
@@ -344,6 +346,10 @@ function resolveTabCount(tab, object) {
344
346
  if (typeof tab.count === 'number' && Number.isFinite(tab.count)) {
345
347
  return tab.count
346
348
  }
349
+ // `countObjectRows`: the rows the record holds where it points, as a record list's `objectRows`.
350
+ if (isObjectRowsSpec(tab.countObjectRows)) {
351
+ return objectRowsOf(object, tab.countObjectRows).length
352
+ }
347
353
  if (typeof tab.countField !== 'string' || tab.countField === '') {
348
354
  const counts = object && typeof object === 'object' && object['@self'] && object['@self'].unreadCounts;
349
355
  const key = tab.unreadKey || tab.id || tab.widgetId;