@object-ui/plugin-designer 17.6.0 → 17.7.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,2384 @@
1
1
  # @object-ui/plugin-designer
2
2
 
3
+ ## 17.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 37140f4: refactor(plugin-designer)!: retire four builder-chrome node type keys (objectui#10859, batch 8 phase 2b)
8
+
9
+ **BREAKING (authoring):** the plugin no longer registers `app-creation-wizard`, `navigation-designer`, `dashboard-editor` or `branding-editor` (and with them their `plugin-designer:` keys). `objectui validate` refused each at `type`, and none appears as a node type anywhere in this repository, its examples or objectstack. A node authored with one of these types now renders the "Unknown component type" panel. `AppCreationWizard`, `NavigationDesigner`, `DashboardEditor` and `BrandingEditor` stay named exports.
10
+
11
+ Migration:
12
+
13
+ - `{ "type": "app-creation-wizard", … }` → mount `AppCreationWizard` directly;
14
+ - `{ "type": "navigation-designer", … }` → mount `NavigationDesigner` directly;
15
+ - `{ "type": "dashboard-editor", … }` → mount `DashboardEditor` directly;
16
+ - `{ "type": "branding-editor", … }` → mount `BrandingEditor` directly.
17
+
18
+ **Clause-②: yes** — registrations leave the runtime (narrowing), released as `minor` with this banner.
19
+ - e6bc087: feat: a `doc` navigation entry (ADR-0046) validates and draws as a link into the docs portal
20
+
21
+ `@objectstack/spec` 17.5.0 added a tenth navigation item type, `doc` — `{ type: 'doc', book }`
22
+ opens a book, `{ type: 'doc', doc }` opens one page, both opens that page in that book's
23
+ context. `objectui validate` refused it: `NavigationItemTypeSchema` was a hand-written list of
24
+ the nine older types, while the TypeScript `NavigationItemType`, derived from the spec, already
25
+ carried `doc`. And no renderer drew one — `resolveHref` had no `doc` branch, so the entry
26
+ rendered as a dead `#` link.
27
+
28
+ - **`@object-ui/types`** — `NavigationItemTypeSchema` is now read off the discriminator of the
29
+ spec's navigation union instead of hand-listed, so it gains `doc`. A `doc` entry is judged by
30
+ the spec's own `DocNavItemSchema`: it accepts exactly what the spec accepts — at least one of
31
+ `book` / `doc`, a doc NAME (a filename or a path is refused), a snake_case `id`, and the closed
32
+ key set of the spec's `doc` arm — and refuses an empty `label` as every sibling type does. The
33
+ parsed entry is never rewritten. `NavigationEntryItem` gains the spec-derived `book` and `doc`
34
+ members. An unknown `type` is now refused with `invalid_union` at `type` (was `invalid_value`),
35
+ the code the spec's own union answers with.
36
+ - **`@object-ui/layout`** — `resolveHref` sends a `doc` entry to the console docs portal under
37
+ its `basePath`: `/docs/DOC`, `/docs/BOOK` or `/docs/BOOK/DOC`. An unlabelled `doc`
38
+ entry shows the page it opens, else the book. It is gated by the same base keys as its
39
+ siblings (`visible`, `requiredPermissions`, `requiresObject`, `requiresService`); the book
40
+ audience gate stays the server's. The mobile tab bar links it the same way.
41
+ - **`@object-ui/app-shell`** — the app designer's preview keys its navigation kinds by
42
+ `NavigationItemType`, so a `doc` entry is drawn with its target and route instead of being
43
+ dropped (label-less) or badged `untyped`.
44
+ - **`@object-ui/plugin-designer`** — `NAV_TYPE_META` drops the `| 'doc'` key that bridged the
45
+ spec pin lag; it is keyed by `NavigationItemType` alone.
46
+ - **`@object-ui/console`** — the docs portal resolves a path segment that is a book's NAME
47
+ rather than its `slug` — what a `{ type: 'doc', book }` entry links to — and redirects to
48
+ the book's canonical slug URL: `/docs/NAME` opens the book, `/docs/NAME/DOC` reads that page
49
+ with the book's sidebar. It is looked up after a book's slug and an installed doc's name, so
50
+ every URL that resolved before answers as it did; only former "Documentation not found"
51
+ answers change.
52
+ - 1563d3e: The Field Designer's drawer no longer offers `select` as a field type for a new field, or as a type
53
+ to change an existing non-choice field into.
54
+
55
+ The drawer has no options editor, and `MetadataFieldsPage` saves every change at once, so a
56
+ picklist created there could only be a choice with nothing to choose, which the object write guard
57
+ now holds client-side (objectui#11253, the objectui half of the ruling on objectstack#20827). The
58
+ type returns once the drawer can author options.
59
+
60
+ BREAKING (behaviour, released as `minor` per this repository's version policy): a host that relied
61
+ on the drawer to create picklists loses that path until the drawer gains an options editor. An
62
+ existing `select` field keeps its own type in the drawer, so editing it shows and writes back what it
63
+ is, options included. The list's type filter still offers every type.
64
+ - 5988b6b: The page and report designers, and all three canvases, draw the members their node declarations always carried and they never read. Every designer registration's `inputs` now lists the members its component reads (objectui#11434).
65
+
66
+ **BREAKING (rendering)** — a report field element draws its `dataBinding` and no longer reads `properties.field`. The designer writes `dataBinding` itself now: a new field element is born bound to `field_name`, and the property panel's **Data binding** entry edits it on every element type. Migration: move a saved element's `properties.field` to its `dataBinding`. `@object-ui/types` refuses the old key by name in the same release.
67
+
68
+ **All three canvases.** `canvas.backgroundColor` is drawn on the page, data-model and process canvases. The colour is published as a CSS custom property and painted by a static utility (the styling rule's author-declared-colour carve-out), so a theme can still override it.
69
+
70
+ **Page designer.**
71
+
72
+ - A component's `children` are drawn inside it, positioned within it, and indented under it in the component tree. Selecting, editing, moving, copying and deleting all reach nested components.
73
+ - A `locked` component cannot be dragged or deleted on the canvas, and shows a lock. No delete path removes it: its own delete button is withheld, and Delete / Backspace and the toolbar's **Delete selected** delete only the unlocked rest of a selection. A parent that holds a locked component anywhere inside it is kept too, because deleting it would take the locked one with it.
74
+ - A component with `visible: false` is drawn faded, with a dashed edge and a hidden marker, so it can still be found.
75
+ - `zIndex` orders overlapping components.
76
+ - The property panel offers **Visible**, **Locked** and **Z-index**.
77
+ - The palette draws each category's `icon` and each item's `icon` (any Lucide name; an item without one keeps the generic "add" glyph), and an item's `preview` as a thumbnail.
78
+
79
+ **Report designer.**
80
+
81
+ - An element draws its `format`: weight, style, alignment, colours, font, border and padding on its content, and `numberFormat` / `dateFormat` beside its binding. Every value goes through a CSS custom property and a static utility.
82
+ - A section draws its `groupField` in its label (`by FIELD`), and a page-break rule across its top when `pageBreakBefore` is set.
83
+ - The page draws its four `margins` as a dashed guide.
84
+
85
+ **Registration inputs.**
86
+
87
+ - `page-designer` adds `palette` and `propertyEditor`.
88
+ - `data-model-designer` adds `canvas` and `showRelationshipLabels`.
89
+ - `process-designer` adds `version`, `lanes` and `canvas`.
90
+ - `report-designer` adds `pageSize` and `orientation` (enumerated), and `margins`.
91
+ - Every designer row that was typed `code` is now declared by its value's kind: `page-designer` `canvas` (object) and `components`, `data-model-designer` `entities` / `relationships`, `process-designer` `nodes` / `edges`, `report-designer` `sections`, `object-manager` `objects` and `field-designer` `fields` (each an array). A `code` row is judged as a string, so a legal value drew `type-mismatch` ("expected a string"); none does now.
92
+
93
+ Each was a member the component already read. The html-tier page compiler, which builds its manifest from every known registration, warned it off as an `unknown-prop`. Each added row declares the kind its value has (`array`, `object`, `enum` or `string`), so a legal value draws no `type-mismatch` either. `object-manager` and `field-designer` already listed theirs.
94
+ - 0e9058b: The data-model and process designers draw the members their node declarations always carried and they never read (objectui#11434).
95
+
96
+ **Data-model designer.**
97
+
98
+ - Each field row draws its `label` beside the name, a `UQ` badge when `unique`, and its `defaultValue` after the type (as JSON, so a string is quoted and `null` shows), with the field's `description` and default as the row's tooltip.
99
+ - Each relationship line runs from the row of its `sourceField` to the row of its `targetField`, edge to edge, instead of centre to centre whatever the fields said. Cards whose columns overlap are joined on their right edges by a curve. A field name the entity does not declare anchors at the entity header, and the line's tooltip says which name was not found.
100
+ - A relationship's `deleteBehavior` is drawn beside its label and in the line's tooltip. Renaming a field on the canvas renames it in every relationship that names it, so its line stays on the row.
101
+ - The card's header and rows have fixed heights now, so the lines can be anchored at them.
102
+
103
+ **Process designer.**
104
+
105
+ - The toolbar draws the process `version` beside its name.
106
+ - Each lane in `lanes` is drawn as a band around the nodes its `nodeIds` names, labelled with its `label` and `role`, under the flows and the nodes.
107
+ - A flow draws its `condition` in brackets, and BPMN's slash marker at its source when it `isDefault`.
108
+ - The property panel of a selected node offers its `assignee` and `dueDate` on a user task, its `script` on a script task, either on any node that already carries a value, and each entry of its `properties` under its key, with a control for the value's type.
109
+
110
+ Nothing in the components' props changed: `ProcessDesignerProps` already declared `version` and `lanes`, and the rest are members of the records the props already took.
111
+ - c4ab6d0: **BREAKING (TypeScript props)** — `DataModelDesignerProps.autoLayout` and `ReportDesignerProps.previewMode` are removed, and the `data-model-designer` registration no longer publishes `autoLayout` as an input (objectui#11434).
112
+
113
+ Neither prop was ever read: `DataModelDesigner` arranges entities only when the toolbar's Auto Layout button is pressed, and `ReportDesigner` has no preview mode. `@object-ui/types` retires the matching node members in the same release, so the component face, the registration and both node faces now agree.
114
+
115
+ **Migration.**
116
+
117
+ - `<DataModelDesigner autoLayout />`: drop the prop; use the toolbar's Auto Layout button. The package README's example no longer passes it.
118
+ - `<ReportDesigner previewMode />`: drop the prop; for a chrome-free, non-editable layout pass `readOnly`, `showToolbar={false}` and `showPropertyPanel={false}`.
119
+
120
+ The Field Designer's defaults map also drops the labels `appDesigner.fieldDesigner.validationRules` and `appDesigner.fieldDesigner.addRule`, which named an editor that was never built (see the `@object-ui/i18n` note of this release). Nothing renders differently.
121
+ - 864154e: The Field Designer no longer offers a formula-expression textarea, and no designer write
122
+ path emits a `formula` key (objectui#6043).
123
+
124
+ **This is a behaviour change on an authoring surface: a control is removed.** A field's
125
+ `type` may still be set to `formula` — that is a valid spec `FieldType` and stays in the
126
+ palette — but the expression itself is no longer authored here. Authors write formula
127
+ expressions in metadata-admin's field inspector, where they are checked.
128
+
129
+ The control wrote `formula`, which is not in `FieldSchema`'s accept set. Measured against
130
+ the installed `@objectstack/spec` 17.2.0:
131
+
132
+ ```
133
+ FieldSchema.safeParse({ type:'formula', label:'Tax', formula:'price * quantity' })
134
+ => success = false
135
+ => unrecognized_keys ['formula'] "Did you mean `formula` -> `expression`?"
136
+ ```
137
+
138
+ so `PUT /api/v1/meta/object/:name` returned a hard 422 `INVALID_METADATA` — and because
139
+ the key was then stored, it blocked **every later save of that object**, not just the one
140
+ that introduced it.
141
+
142
+ **The key was deliberately NOT renamed to the spec's `expression`.** `FieldSchema` judges
143
+ the key name and never the expression LANGUAGE — measured, it accepts
144
+ `expression: 'price * quantity'` and even `expression: '!!!not cel at all!!!'`; only the
145
+ empty string is refused. Spec `expression` is CEL rooted at `record`
146
+ (`record.amount * 0.1`), whereas this control's own placeholder taught `price * quantity`
147
+ — bare field refs, which under the scope formulas bind evaluate to null silently. A rename
148
+ would therefore have converted a loud, immediate 422 into a formula that saves clean and
149
+ then quietly computes nothing, which is strictly worse than the bug it appears to fix.
150
+
151
+ Making refusals loud *in the control* would need CEL lint, autocomplete and `returnType`
152
+ inference — that is `CelPredicateField`, which lives in `@object-ui/app-shell`, and
153
+ app-shell depends on `@object-ui/plugin-designer`, so it cannot be imported back without a
154
+ dependency cycle. Growing a second formula-authoring surface inside plugin-designer is a
155
+ feature, not this fix. `returnType` is likewise not authored here: it is only derivable by
156
+ inferring the CEL result type, and with no expression control there is nothing to infer
157
+ from.
158
+
159
+ `formula` joins the retired-key tombstone in `MetadataFieldsPage`, so an object already
160
+ carrying the key is stripped clean on its next save instead of staying blocked forever —
161
+ which matters more than usual here, because with the control gone an author would
162
+ otherwise have no way left to clear it. It is dropped rather than migrated to `expression`,
163
+ for the same reason the rename was refused. A `expression` authored in metadata-admin is
164
+ **not** touched: it is a real `FieldSchema` key and rides through the designer's
165
+ round-trip untouched.
166
+
167
+ Also removes the now-unreachable `formula` read/write from
168
+ `views/metadata-admin/previews/object-fields-bridge.ts`, which was a third emit site for
169
+ the key that neither the card nor the parity gate named.
170
+
171
+ The `formula` entry is removed from `check-designer-field-key-parity.mjs`'s
172
+ `KNOWN_UNPARSEABLE_KEYS` ledger, which ratchets in both directions — a resolved key that
173
+ left a stale entry behind would be as red as a new offender.
174
+ - d18a0d3: Object-level metadata payloads no longer emit the three keys `ObjectSchema` refuses by
175
+ name — **group**, **sortOrder** and **relationships** (objectui#6223).
176
+
177
+ Measured against the installed `@objectstack/spec` 17.2.0, whose `ObjectSchema` accept set
178
+ is 42 keys:
179
+
180
+ ```
181
+ const base = { name: 'account', label: 'Account', fields: { n: { type: 'text', label: 'N' } } };
182
+
183
+ ObjectSchema.safeParse(base) => success = true (control)
184
+ ObjectSchema.safeParse({ ...base, isSystem: true }) => success = true (control)
185
+ ObjectSchema.safeParse({ ...base, pluralLabel: 'A' }) => success = true (control)
186
+
187
+ ObjectSchema.safeParse({ ...base, group: 'Sales' }) => unrecognized_keys ["group"]
188
+ ObjectSchema.safeParse({ ...base, sortOrder: 3 }) => unrecognized_keys ["sortOrder"]
189
+ ObjectSchema.safeParse({ ...base, relationships: [ … ] }) => unrecognized_keys ["relationships"]
190
+ ```
191
+
192
+ The two controls are what make that a key-by-key result rather than a schema refusing
193
+ everything. Each key was resolved on its own, as the objectui#5761 family ruling requires:
194
+
195
+ - **group** — the Object Manager's grouping is a UI-only display category. The spec has no
196
+ object-level grouping key (`fieldGroups` groups the fields *inside* one object), so the
197
+ grouping control and its column stay, and the value is now DERIVED from the spec key that
198
+ is accepted (`isSystem`) instead of round-tripped. `MetadataObjectsPage` also strips a
199
+ `group` already stored by an earlier build, because its save-back spreads the server
200
+ document verbatim and would otherwise keep re-sending it forever.
201
+ - **sortOrder** — what populated it was the array index the converter happened to be at,
202
+ i.e. the order the list was already in. The declaration is removed from the object
203
+ payload. The field-level `sortOrder` is a different key with a different card
204
+ (objectui#6045) and is untouched.
205
+ - **relationships** — the spec models relationships on the FIELD (`reference` /
206
+ `master_detail`, plus object-level `indexes`). The object payload stops declaring and
207
+ sending an object-level relationship array; what the designer should author for a
208
+ relationship is a data-model question this change does not settle.
209
+
210
+ **Breaking for TypeScript consumers of `ObjectMetadataPayload`** (exported from app-shell):
211
+ the three properties are gone from the published type, so code that set them stops
212
+ compiling. That is the point — setting any of them produced a payload the metadata route
213
+ refuses. `ObjectDefinition` (the designer's UI model) is unchanged and still carries all
214
+ three.
215
+
216
+ The parity gate built for objectui#5761 now has a **second oracle**: every shape in
217
+ `PAYLOAD_SHAPES` names the schema that judges it, `ObjectSchema` alongside `FieldSchema`,
218
+ and reach is resolved within an oracle rather than across one — `group` is a legal
219
+ `FieldSchema` key and a refused `ObjectSchema` key at the same time. That extension found a
220
+ fourth object-level key (`enabled`, objectui#6238) and a value-level rejection the key-name
221
+ check cannot see (`fields` sent as an array where the spec wants a map, objectui#6240);
222
+ both are filed and ledgered rather than fixed here.
223
+ - 1cca678: Retire the dashboard-**root** `title` read across all five surfaces (objectui#7509,
224
+ maintainer ruling 2026-09-04, decision batch #29, option C, under ADR-0049).
225
+
226
+ **What changes for an operator.** A stored dashboard whose header came from a legacy
227
+ root `title` now shows its `label`. `label` is the only header source, then the raw
228
+ `name`.
229
+
230
+ Per surface:
231
+
232
+ - Console dashboard page (`DashboardView`) — header falls to `label`, then `name`.
233
+ - Standalone dashboard embed (`DashboardRenderer`) — `header` shows `label`; a document
234
+ with no `label` now shows no header title at all.
235
+ - The `dashboard-grid` SDUI component (`DashboardGridLayout`) — heading falls to
236
+ `label`, then the generic `Dashboard`.
237
+ - Studio dashboard designer (`DashboardEditor` preview panel, `DashboardDesignPage`
238
+ heading) — both fall to `label`, then `name` / the generic heading.
239
+
240
+ **Why now.** `@objectstack/spec`'s `DashboardSchema` refuses a root `title` **by name**
241
+ (`unrecognized_keys(title)`), and the save route answers `422 INVALID_METADATA` — so no
242
+ authored dashboard can acquire the key, and what retires is compatibility with documents
243
+ stored before that refusal existed. Until now five surfaces read the legacy spelling
244
+ independently, which meant a legacy document could show one header in the console and a
245
+ different one in the designer. One spelling now answers everywhere.
246
+
247
+ **Migration.** `label` is REQUIRED on `DashboardSchema`, so a spec-valid stored dashboard
248
+ already carries it and needs no change — it simply starts showing that `label` instead of
249
+ the legacy `title`. A document carrying `title` and no `label` was already invalid; give
250
+ it a `label`. No in-repo document needed migrating: a sweep of all 627 tracked JSON found
251
+ 9 dashboard-shaped nodes, and the 6 carrying a root `title` are `type: 'dashboard'`
252
+ component examples that declare no `header`, so none of them rendered a header title
253
+ either before or after.
254
+
255
+ **Not affected: widget titles.** `DashboardWidget.title` is a different, spec-**declared**
256
+ key (the spec's `I18nLabel`) on a different receiver, and is untouched — widget headings,
257
+ the designer's widget-title input and its per-locale write path all behave exactly as
258
+ before. Root and widget arms were separated by receiver, and the retirement's pins carry
259
+ widget-level controls on every surface for that reason.
260
+
261
+ ⚠️ **Dated note, 2026-10-02 — the `dashboard-grid` node key is retired — objectui#10859.**
262
+ Later in this same release objectui#10859 batch 8 (phase 2b) unregistered the `dashboard-grid`
263
+ node key, so `DashboardGridLayout` is no longer an SDUI component; the heading rule above holds
264
+ for it wherever a host mounts it directly. The rest of this entry is kept as the reading of this
265
+ change.
266
+ - bdb4dbd: A half-filled relationship field stays in the client and is never PUT (objectui#7714,
267
+ maintainer ruling on objectui#7122 item 4, 2026-09-05).
268
+
269
+ **Breaking, deliberately, and stated rather than implied.** Both metadata writers —
270
+ `MetadataService.saveFields` / `saveObject` in `@object-ui/app-shell`, and
271
+ `MetadataFieldsPage` in `@object-ui/plugin-designer` — now REFUSE a `lookup` or
272
+ `master_detail` field whose `reference` is missing, empty, blank or not a string. A
273
+ caller that previously got a PUT now gets a thrown error and **no request at all**. The
274
+ refusal is raised while the wire `fields` map is being built, so nothing is sent and
275
+ nothing is partially applied.
276
+
277
+ **Why the draft may not leave the client.** `@objectstack/spec` 17.3.0 turned
278
+ `reference` from prose into a hard requirement on relationship types (a `custom`
279
+ refinement at path `reference`). Driven against a real 17.3.0 backend in a running
280
+ designer: creating a `lookup` and leaving its target empty PUT the whole object,
281
+ came back `422 INVALID_METADATA` at `fields.<name>.reference` — and then the NEXT
282
+ edit, to a different and already-saved field, was refused identically, because the
283
+ half-filled draft rides along inside the same document. The author sees that later
284
+ edit rendered as applied while the server has none of it, and the only escape that
285
+ does not require noticing the lookup is a reload, which discards the work. An editing
286
+ session's half-finished state belongs to the client, not to the metadata store.
287
+
288
+ ⛔ **Not** "strip the incomplete field from the body and report a successful save".
289
+ That shows the author a field the server never received — the silent-drop shape
290
+ objectstack#4001 closed.
291
+
292
+ **The whitespace row follows the contract; it is not a local opinion.** The predicate
293
+ is `typeof reference === 'string' && reference.trim() !== ''`. It was a declared
294
+ divergence when written — 17.3.0's objectstack#13632 refinement spelled its emptiness test as an
295
+ equality against `''`, so the spec accepted `reference: ' '` while these writers
296
+ refused it. objectstack#16920 applies that test to the TRIMMED value, so the spec now
297
+ refuses the identical shape under the same `custom` issue at the same `reference`
298
+ path, and the divergence note is retired (objectui#8621). Whitespace names no object
299
+ at either end (the spec's own `ObjectSchema.fields` key grammar
300
+ `/^[a-z_][a-z0-9_]*$/` admits no whitespace-bearing name), so admitting it would only
301
+ move the identical failure past the PUT and into a stored document, where it surfaces
302
+ with no field named. ⚠️ objectstack#16920 is an unreleased `minor` upstream and this
303
+ repo's pin is `@objectstack/spec` 17.3.0, which predates it — so until the pin moves,
304
+ these writers are still the only thing refusing `' '` here, and they refuse it at
305
+ editor time either way, before the PUT rather than at the publish gate.
306
+
307
+ The refusal message diagnoses which of the four states it found — absent, empty,
308
+ non-string (`invalid_type`, a value of the wrong kind rather than a missing target),
309
+ or blank — because the repair and the consequence differ per state.
310
+
311
+ `minor` rather than `major` per `AGENTS.md`: objectui's major tracks `@objectstack`'s,
312
+ so objectui's own breaking changes ship as `minor` with the breaking semantics stated.
313
+ - 0ea7054: Remove 37 runtime dependencies that no file in the declaring package consumes, and gate
314
+ the direction so the next one cannot land (objectui#8198).
315
+
316
+ `check:phantom-deps` judges imports that are not declared; nothing judged the reverse,
317
+ so a declaration could outlive its last consumer indefinitely. That is what happened to
318
+ `recharts` in `@object-ui/components` after objectui#7397 deleted its only importer — it
319
+ was removed by hand on objectui#7625, and nothing would have reported the next one. The
320
+ new `pnpm check:unused-deps` asks the reverse question over `dependencies` and
321
+ `optionalDependencies` of every released package.
322
+
323
+ **Potentially breaking, for consumers relying on hoisting.** Nothing these packages ship
324
+ changes: their Vite `external` predicates are path-based and never read `dependencies`,
325
+ so no built artifact moves. What changes is the install graph — a project that imports
326
+ one of the removed packages while depending only on the ObjectUI package that used to
327
+ drag it in will no longer resolve it. Declare it directly; that is the correct
328
+ dependency edge in either case. The removals, by package:
329
+
330
+ - `@object-ui/plugin-designer`: `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities`, `@object-ui/fields`
331
+ - `@object-ui/plugin-chatbot`: `react-markdown`, `react-syntax-highlighter`, `remark-gfm` (and the orphaned `@types/react-syntax-highlighter`)
332
+ - `@object-ui/plugin-report`: `@object-ui/plugin-grid`, `clsx`, `react-i18next`, `tailwind-merge`
333
+ - `@object-ui/plugin-map`: `@objectstack/spec`, `lucide-react`, `zod`
334
+ - `@object-ui/runner`: `class-variance-authority`, `clsx`, `tailwind-merge`
335
+ - `@object-ui/core`: `lodash`, `zod`
336
+ - `@object-ui/layout`: `clsx`, `tailwind-merge`, and `react-dom` — which it pinned at an exact version in `dependencies` while also declaring it as a peer range, i.e. a library hard-depending on the renderer it asks its host to supply
337
+ - `@object-ui/plugin-dashboard`: `clsx`, `tailwind-merge`, and the same `react-dom` defect
338
+ - `@object-ui/plugin-ai`: `@object-ui/react`, `clsx`, `tailwind-merge`
339
+ - `@object-ui/fields`: `clsx`, `tailwind-merge`
340
+ - `@object-ui/console`: `@object-ui/react-runtime`, `sucrase`
341
+ - `@object-ui/auth`: `@object-ui/types`
342
+ - `@object-ui/plugin-calendar`: `@object-ui/fields`
343
+ - `@object-ui/plugin-editor`, `@object-ui/plugin-markdown`: `@object-ui/react`
344
+ - `@object-ui/react`: `react-hook-form`
345
+
346
+ Every one was verified by a whole-package grep before removal — the name appeared nowhere
347
+ under the package but its own manifest and CHANGELOG — and the whole workspace builds,
348
+ type-checks and tests green afterwards.
349
+ - 9662aca: Apply the object-metadata write invariant at the write DOORS instead of at the writers.
350
+
351
+ objectui#7714 ruled that a half-filled relationship stays client-side and the PUT body never
352
+ carries one without a non-empty `reference`, and implemented that ruling by naming the two
353
+ writers it knew of. The identical defect was then reproduced on a third (fixed in `9073cf018`); a
354
+ sweep found nine more. The doors — the three places in this repo that actually PUT `/meta/:type/:name` —
355
+ now apply the invariant themselves, so every writer is covered without any list of writers
356
+ existing anywhere, and a new door is caught by a gate that derives the door set from the
357
+ tree rather than restating it.
358
+
359
+ Behaviour change for consumers: `MetadataClient.save('object', …)` now throws BEFORE issuing
360
+ the request when the body carries a relationship field with a missing, empty or whitespace-only
361
+ `reference`. The same document is refused by the server with a 422 on `fields.NAME.reference`,
362
+ so nothing that previously succeeded now fails — the refusal moves earlier, names the field,
363
+ and leaves the draft in the client instead of wedging every later save of that object. Writes
364
+ of every other metadata type are untouched.
365
+
366
+ New export from `@object-ui/data-objectstack`: `assertObjectMetadataWritable`,
367
+ `RELATIONSHIP_TYPES_REQUIRING_REFERENCE` and `OBJECT_METADATA_TYPE`.
368
+ - 7dc31bb: **`MetadataFieldsPage` no longer rewrites a stored field type it cannot author.**
369
+
370
+ `toDesignerType` mapped every type outside `DESIGNER_FIELD_TYPES` to `'text'` on the
371
+ READ path, and `fromDesignerField` emitted the designer's type on the write path — so
372
+ relabelling one field rewrote every other field whose type this designer does not
373
+ author, on the same PUT. `text` is a legal spec type, so the save succeeded, the
374
+ designer redrew the fields as text, and nothing reported it; restoring a field required
375
+ knowing what its type used to be.
376
+
377
+ The census: `DESIGNER_FIELD_TYPES` has 27 members, `FieldType` in `@objectstack/spec`
378
+ 17.3.0 declares 49, and all 27 are a subset of the 49. The 22 in the difference were
379
+ each a distinct data-loss case — `secret`, `richtext`, `toggle`, `multiselect`, `radio`,
380
+ `checkboxes`, `master_detail`, `tree`, `user`, `avatar`, `video`, `audio`, `summary`,
381
+ `composite`, `repeater`, `record`, `json`, `signature`, `qrcode`, `progress`, `tags`,
382
+ `vector`.
383
+
384
+ A field whose stored type is outside the designer's set is now carried through the
385
+ save verbatim — the mechanism this page already used one level down, where unknown
386
+ per-field KEYS survive via `carryOver` — and is listed on the page read-only, showing
387
+ its real stored type, instead of being drawn as an editable `text` field. Types inside
388
+ the set are unchanged: still editable, and a type change the author makes is still
389
+ honoured. A stored type in NEITHER vocabulary is carried through too, so an unknown
390
+ type produces a loud 422 naming the field rather than a silent rewrite.
391
+
392
+ Two behaviour changes worth naming:
393
+
394
+ - Fields with a carried-through type are no longer editable or deletable from this
395
+ page — including deleting them, which was previously possible only because they had
396
+ already been misrepresented as text. Use metadata-admin to change them.
397
+ - An object holding a target-less stored `master_detail` used to save from this page by
398
+ flattening the field to `text` and losing the relationship. That field now reaches
399
+ the existing relationship-target guard with its real type and is refused by name
400
+ before the PUT. `@objectstack/spec` 17.3.0 requires `reference` on `master_detail`,
401
+ so such a document's PUT answers 422 regardless; refusing here names the field and
402
+ leaves the stored relationship intact.
403
+
404
+ ### Patch Changes
405
+
406
+ - 1dbb993: fix(plugin-designer): the Navigation Designer has an entry for the spec's `doc` navigation item type
407
+
408
+ objectstack#19789 added a `doc` member to the spec's navigation item union (an
409
+ item that targets a book and/or a doc). `NAV_TYPE_META` in `NavigationDesigner`
410
+ is keyed by that spec-derived union, so objectui stopped compiling against
411
+ `@objectstack/spec` built from objectstack `main`, and every row reads its badge,
412
+ colour and icon from that map. The map now has a `doc` entry (a `BookOpen` icon,
413
+ its own colour and the `appDesigner.navTypeDoc` label key). The key has an
414
+ English fallback in the designer's defaults and a translation in all ten locale
415
+ packs.
416
+
417
+ The map is typed `Record<NavigationItemType | 'doc', ...>` so it compiles both
418
+ against the pinned `@objectstack/spec`, which predates `doc`, and against
419
+ objectstack `main`. The `| 'doc'` goes away at the pin bump that ships `doc`.
420
+ `doc` is not added to the quick-add buttons: an empty `doc` item fails the spec's
421
+ book-or-doc requirement, and authoring one is objectui#10188.
422
+ - 557abc2: fix(app-shell, plugin-designer): three more forms keep the required `*` out of the control's accessible name
423
+
424
+ A flow screen's input fields (`ScreenView`), the metadata-admin `SchemaForm` and
425
+ the `AppCreationWizard` basic step each drew the required marker as a bare `*`
426
+ inside the label that names the control. A screen reader therefore announced
427
+ "Title *" instead of "Title", and none of those controls reported that it was
428
+ required.
429
+
430
+ The marker is now `aria-hidden`, the rule `ActionParamDialog` and `FormPage`
431
+ already follow (objectui#3299, objectui#10178): the `*` is for sighted users, and
432
+ the requirement is announced as `aria-required` on the control. Each marker also
433
+ carries `data-required-marker="true"`, the same locator the shared form
434
+ renderer's marker uses.
435
+
436
+ - `ScreenView`: every field control (text, number, email, date, textarea,
437
+ checkbox and select) carries `aria-required` when the field is required.
438
+ - `SchemaForm`: the marker is hidden in the default row, in the boolean row, and
439
+ in a grid repeater's column header, which names every cell below it. The
440
+ controls `SchemaForm` renders itself (select, switch, number and text inputs,
441
+ textarea, the comma-separated list input and the JSON editor) carry
442
+ `aria-required` from the same flag that draws the marker.
443
+ - Metadata-admin widgets: `WidgetProps` gains an optional `required` member, and
444
+ `SchemaForm` passes the same flag to a registered widget, in a row and in a
445
+ grid cell. Ten of the eleven `labelling: 'control'` widgets put it on their
446
+ control as `aria-required`: `ref:object`, `ref:component`, `object-selector`,
447
+ `field-selector`, `field-ref`, `view-ref`, `icon`, `color-input`,
448
+ `string-tags` and `secret`. `filter-builder` does not, because its control is
449
+ a plain button, where ARIA does not allow `aria-required`.
450
+ - Colour picker: `ColorVariantPicker` takes an optional `required` and puts
451
+ `aria-required` on its radio group, and the `color-picker` widget passes the
452
+ field's flag through. Its other callers pass nothing, so they are unchanged.
453
+ - `AppCreationWizard`: the App name and Title inputs carry `aria-required`.
454
+
455
+ Native `required` is not added anywhere, so no browser validation appears beside
456
+ each form's own required check.
457
+ - 25cb364: The Studio's app wizard saves an app the platform accepts, and the app favicon has one
458
+ spelling, `branding.favicon` (objectui#10842).
459
+
460
+ **Creating an app is no longer refused.** The console's "create app" and "edit app" pages save through
461
+ `client.meta.saveItem('app', …)`, and the platform judges that document with
462
+ `@objectstack/spec`'s strict `AppSchema`. `wizardDraftToAppSchema` wrote four top-level keys the
463
+ spec does not declare (`type`, `title`, `favicon` and `layout`), so the save was refused with
464
+ `422 INVALID_METADATA` (`unrecognized_keys`). It now writes only declared keys: the draft's
465
+ title as `label`, the logo and favicon inside `branding`, and no `type` or `layout`. The spec
466
+ has no app layout, so the wizard's layout choice is not saved.
467
+
468
+ - `@object-ui/types` — **breaking:** `wizardDraftToAppSchema` now returns the app document
469
+ (the spec's `App` shape, with objectui's `NavigationItem[]` as `navigation`) instead of an
470
+ `AppComponentSchema` renderer node. It has no `type`, `title`, top-level `favicon` or `layout`.
471
+ Code that read `result.title` reads `result.label`. Code that fed the result to
472
+ `AppSchemaRenderer` builds the renderer node itself (`type: 'app'`, `title`).
473
+ - `@object-ui/types` — **breaking:** `AppComponentSchema.favicon` is now `never` on the
474
+ TypeScript face, and the zod mirror refuses a top-level `favicon` by name, answering "Did you
475
+ mean `favicon` → `branding`?". This is the objectui#10827 rule that retired the top-level
476
+ `logo`: the spec refuses the key, and the console reads only `branding.favicon`.
477
+ - `@object-ui/layout`: `AppSchemaRenderer` puts `branding.favicon` on the tab. It read the
478
+ top-level `favicon` before, and never `branding.favicon`.
479
+ - `@object-ui/plugin-designer`: `EditAppPage` keeps the keys the wizard does not maintain, but
480
+ only keys the spec's `AppSchema` declares, read from that schema. A row stored before the
481
+ schema closed is served with the old wizard's top-level keys, and echoing them made every
482
+ edit of such an app fail the same way. Its pre-fill no longer falls back onto a top-level
483
+ `logo`, `favicon` or `title`; it reads `branding.logo`, `branding.favicon` and `label`.
484
+
485
+ Migration: move a top-level `favicon` URL to `branding: { favicon: '…' }`.
486
+
487
+ ⚠️ **Dated note, 2026-09-28 — the wizard has no layout choice — objectui#10867.**
488
+ Later in this same release the wizard's Layout control was removed, with `AppWizardDraft.layout`, so there is no
489
+ layout choice left to not save. The rest of this entry still holds.
490
+ - 7343376: fix(types,plugin-designer)!: the Studio app wizard saves a document the platform accepts, and an edit keeps the stored `accentColor` (objectui#10867)
491
+
492
+ ⚠️ **BREAKING (authoring)**, marked `minor` under this repository's version-alignment rule (a `major` in the fixed group would move all of it off the `@objectstack` major). Two published `@object-ui/types` members narrow: a navigation separator no longer takes a `label`, and `AppWizardDraft.layout` is removed. A TypeScript literal that writes either no longer compiles. `NavigationItem` is now a union type alias, not an interface. So code that reads `label` off an unnarrowed `NavigationItem` into a `string` slot (its type is now `string | undefined`; objectui#11299, in the same release, widens it to the spec's `I18nLabel` or `undefined`, see `.changeset/11299-types-nav-label-locale-map.md`) also stops compiling, as does code that spreads an entry-only key onto one, and an `interface` that `extends NavigationItem` or augments it (extend `NavigationEntryItem` instead). `objectui validate` now refuses a separator `label` too: the zod mirror's `NavigationItemSchema` refuses every key on a separator that the spec's separator does not declare. The four `appDesigner` layout keys also leave the published `@object-ui/i18n` packs and `DESIGNER_DEFAULT_TRANSLATIONS`, so an application that calls `t()` with one of them now renders the raw key (unless the call passes a `defaultValue`).
493
+
494
+ **Clause-②: yes (narrowing)** — the separator arm of `NavigationItem` loses `label`, and `AppWizardDraft` loses `layout`.
495
+
496
+ - **A separator carries only `type`, `id` and `order`.** `@objectstack/spec`'s separator branch declares exactly those keys, and its `AppSchema` refuses anything else. `NavigationItem` required a `label` on every item, so the wizard's "Add separator" wrote `{ id, type: 'separator', label: '' }`, and the console's create-app and edit-app saves were refused with `422 INVALID_METADATA` (`unrecognized_keys` `['label']` at `navigation.N`). `NavigationItem` is now a union of two arms, discriminated by `type`. `NavigationEntryItem` holds every other nav type and keeps its required `label`. `NavigationSeparatorItem` admits `type`, `id` and `order`, and every other entry key is `?: never` on it. Both arms are exported. Reading an entry-only key off an unnarrowed item still compiles, but its type now includes `undefined` (a `label` is `string | undefined`; objectui#11299, in the same release, makes it the spec's `I18nLabel` or `undefined`, see `.changeset/11299-types-nav-label-locale-map.md`), so passing it where a `string` is required does not. Narrow on `item.type === 'separator'` before relying on `label`. `menuItemToNavigationItem` maps a legacy separator to `{ id, type: 'separator' }` and drops its label. `spec-derived-unions.test.ts` no longer pins the separator `label` as a blocker. It asserts, at both spec tiers, that the separator arm admits the spec separator's keys and no others.
497
+ - **`@object-ui/plugin-designer`: the wizard and `NavigationDesigner` write a separator as `{ id, type }`.** `NavigationDesigner` no longer writes a `label` onto a new separator, and its label, icon and visibility patchers skip one.
498
+ - **`@object-ui/layout` narrows on the separator arm; nothing it renders changes.** `resolveNavItemLabel` answers `''` for every separator. A stored separator carrying a non-empty `label`, which `menuItemToNavigationItem` produced before this change, used to resolve to that label. No renderer asks it for a separator's label. The mobile bottom nav's leaf list, which already skipped separators, is now typed as entries.
499
+ - **`@object-ui/app-shell` narrows the same way; nothing it renders changes.** `useNavPins` registers a favorite only for an entry and leaves a separator as it is, and the Studio sidebar's navigation walk passes a separator through unchanged.
500
+ - **`@object-ui/plugin-designer`: `EditAppPage` keeps the stored branding.** The wizard maintains the logo, primary colour and favicon, and its `branding` replaced the stored block, so a stored `accentColor` was dropped on every edit. The console reads that key. The save now keeps every stored `branding` key the spec's `AppBrandingSchema` declares, read from that schema. The wizard's values win for the keys it maintains. A stored key the spec does not declare is still left out.
501
+ - **The wizard's Layout control is removed, with `AppWizardDraft.layout`.** The spec declares no app `layout`, no console surface reads one, and since objectui#10842 the save wrote none. The control persisted nothing. `EditAppPage` no longer reads a stored `layout` into the draft. The Basic Info step's description now reads "Name, title, and icon".
502
+ - **`@object-ui/i18n`:** the four `appDesigner` layout keys (`layout`, `layoutSidebar`, `layoutHeader` and `layoutEmpty`) are removed from all ten packs, and `appDesigner.stepBasicDesc` no longer names a layout.
503
+
504
+ **Migration:** write a separator as `{ id, type: 'separator' }`, with an optional `order`. Remove `layout` from any `AppWizardDraft` you build. Code that spreads an entry-only key (`label`, `visible`, `requiredPermissions` and the rest) onto a value typed `NavigationItem` narrows it first (`item.type !== 'separator'`) or types it `NavigationEntryItem`: the separator arm refuses those keys. `AppComponentSchema.layout`, the renderer node's own layout strategy, is a different member and is unchanged.
505
+
506
+ Pinned in `packages/types/src/__tests__/app-wizard-separator-layout-10867.test.ts` and `packages/plugin-designer/src/__tests__/AppWizard.specDocument-10867.test.tsx`.
507
+ - 44b67da: fix(plugin-designer): editing an app keeps its stored navigation (objectui#10894)
508
+
509
+ **Clause-②: no** — an edit stops destroying stored navigation. No declared type, accepted key or published surface moves.
510
+
511
+ The console's "edit app" page (`EditAppPage`) loads the stored app into `AppCreationWizard`. Leaving the wizard's Objects step replaced the draft's `navigation` with one generated object entry per selected object, and every edit passes through that step. So any edit, even a title change, saved a stored `[object, separator, group, url]` tree as `[object]`. It dropped every separator, group (with its children) and `url` / `dashboard` / `page` / `report` / `component` / `action` entry, and each object entry's own label, icon and order, with no warning.
512
+
513
+ - **Leaving the Objects step no longer replaces the navigation.** An empty navigation (the create path) is still filled with one object entry per selected object. A non-empty one is merged:
514
+ - a newly selected object gets an object entry, appended at the end;
515
+ - the object entries of a deselected object are dropped, at the top level or inside a group. The group keeps its place and its other children, even when that leaves it with none;
516
+ - every other entry is kept as stored, in its position. That includes each object entry's label, icon and order, and an object entry for an object the Objects step does not list.
517
+ - **`EditAppPage` counts an object as selected when the stored navigation has an object entry for it at the top level or inside a group, at any depth.** It counted only top-level entries, so a grouped object showed as unselected.
518
+ - The same merge applies on the create path once the author has shaped the navigation. Going back to the Objects step and forward again keeps the added separators, groups and links, and the order.
519
+
520
+ Pinned in `packages/plugin-designer/src/__tests__/EditAppPage.keepsNavigation-10894.test.tsx`.
521
+ - 8741cb7: fix(app-shell,plugin-designer): the designer's nav surfaces name a nav entry with no `label` the way the console draws it (objectui#11196)
522
+
523
+ A navigation entry's `label` is optional: an entry without one shows, at render time, the current
524
+ label of what it opens. The console's sidebar, `nav:menu`, command palette and search already draw
525
+ it that way, and the platform now writes such entries (the console's navigation sync, for every
526
+ page and dashboard). The designer surfaces read the raw label instead, so the same entry showed as
527
+ `(unnamed)` in the app preview, as a positional `Item N` card on the nav canvas, by its positional
528
+ selection id in the app nav inspector, by its target's internal name (or, for a group, a blank
529
+ heading) in the Studio Interfaces rail, and as a blank row in the Navigation Designer and the app
530
+ wizard's Navigation step.
531
+
532
+ Every one of those surfaces now asks the runtime's own rule, `resolveNavItemLabel` from
533
+ `@object-ui/layout`; none keeps a second copy of it. In app-shell the preview, the canvas, the
534
+ inspector and the Studio rail pass the console's own target resolver, so a label-less entry shows its target's current
535
+ label (a rename shows on the next render), else the target's machine name, else the entry's `id`.
536
+ The app wizard's Navigation step hands the rule its own object list, so a label-less object entry
537
+ there shows the object's label. The Navigation Designer is handed bare items and no metadata, so it
538
+ shows the rule's machine-name rung (`pageName`, `dashboardName`, `objectName`, …), which is what the
539
+ console shows for a page.
540
+
541
+ Editing keeps inheritance intact. The canvas's inline rename and the inspector's Label field show
542
+ the inherited text as a placeholder, never as a stored value: leaving an entry untouched keeps it
543
+ label-less, and typing writes an author label. Emptying the inspector's Label field restores
544
+ inheritance by removing the `label` key, never by writing `''`; for a locale-map label it drops only
545
+ the designer locale's own entry. The inspector also stops reading `title` and `name`, which are not
546
+ nav-item keys, as the label, and a locale-map label there now shows its text instead of
547
+ `[object Object]` and keeps every other language when edited.
548
+
549
+ `@object-ui/plugin-designer` now depends on `@object-ui/layout`, which it did not before.
550
+ - cb2f6fb: fix(app-shell,plugin-designer): standard navigation entries are written with no `label`, never with a copy of their target's text (objectui#11201)
551
+
552
+ A navigation entry's `label` is optional. An entry without one shows, at render time, the current
553
+ label of what it opens, in the viewer's language. A present label is shown as written. The
554
+ platform's own producers of standard entries now leave the label out, so the entry keeps following
555
+ its target:
556
+
557
+ - Studio's Create app with "add objects" seeds one entry per package object. Each entry used to
558
+ store the object's label, or its machine name for a draft or unlabelled object.
559
+ - Binding an object to a placeholder entry in the Studio's nav-item panel used to replace the
560
+ placeholder with the object's label. It now removes the placeholder. A label the author typed, and
561
+ a locale-map label, are kept.
562
+ - The app wizard's generated object entries used to store the object's plural label, else its
563
+ label, and the create and edit pages hand the wizard the machine name for an unlabelled object.
564
+ An entry now stores a label only when the object declares a plural label, and only when that
565
+ plural label differs from both the object's label and its machine name.
566
+
567
+ The console's navigation sync already writes page and dashboard entries this way. Stored navigation
568
+ is not converted.
569
+ - 770cc5b: chore(plugin-designer): follow `@object-ui/layout`'s and `@object-ui/types`' navigation label changes (objectui#11299)
570
+
571
+ - `@object-ui/layout` removed the three unused resolver arguments of
572
+ `resolveNavItemLabel`, so the app creation wizard's preview of an unlabelled
573
+ navigation entry now calls it as `resolveNavItemLabel(item, undefined, targetLabel)`.
574
+ - `@object-ui/types` now types a navigation entry's `label` as the spec's `I18nLabel`
575
+ (a string or an inline locale map), so the navigation designer's inline rename reads
576
+ the label through a helper that takes both: a string, and objectui's keyed
577
+ reference, start the draft as before, and an inline locale map starts it empty, as it
578
+ already did.
579
+
580
+ What either component shows is unchanged.
581
+ - d893290: `MetadataFieldsPage` shows the per-field prescription when the spec refuses a save, not only the refusal headline (objectui#11302).
582
+
583
+ A field the spec refuses (for example a name like `Bad Name`, or `__proto__`) made the page show only the 422's headline, "object/NAME failed spec validation: N issues — …", while the sentence telling the author what to do ("Field names must be lowercase snake_case", "Rename the key") rode in the error's structured issues and never reached the screen. The page now renders its errors through `formatMetadataError` from `@object-ui/data-objectstack`, the same reader the Studio surfaces use: one line per issue, naming the field and the fix. Every other failure still shows its own message.
584
+ - 6e9c8d2: fix: the widget width / height editors write a whole four-number `layout` (objectui#11388)
585
+
586
+ The three dashboard widget width / height editors (Studio's widget inspector in
587
+ `@object-ui/app-shell`, `DashboardWithConfig` in `@object-ui/plugin-dashboard` and
588
+ `DashboardEditor` in `@object-ui/plugin-designer`) each spread the one edited
589
+ dimension onto the widget's possibly-absent `layout` and cast the result past the
590
+ declared four-number type. On a widget with no `layout`, which is how Studio adds
591
+ one, they stored `{ w }` or `{ h }`, and `@objectstack/spec`'s widget `layout`
592
+ refuses that box at `x`, `y` and the other dimension.
593
+
594
+ `@object-ui/types` gains two exports on its main entry:
595
+
596
+ - `defaultWidgetPlacement(index)`: the box the dashboard grid auto-places the
597
+ widget at that position of `widgets[]` in when it has no `layout`, the fallback
598
+ the spec's widget `layout` states (`x: (i % 4) * 3`, `y: Math.floor(i / 4) * 4`,
599
+ `w: 3`, `h: 4`).
600
+ - `completeWidgetLayout(layout, patch, placement)`: the whole box after an edit,
601
+ each coordinate taken from the edit, else from the stored `layout`, else from
602
+ the placement.
603
+
604
+ All three editors now write through `completeWidgetLayout`, seeding from
605
+ `defaultWidgetPlacement` for the widget's index, and the casts are gone, so the
606
+ compiler judges each write. A widget that has a `layout` keeps its `x` and `y`.
607
+ The width and height inputs (and `DashboardWithConfig`'s sliders) show the same
608
+ completed box, so a widget with no `layout` now shows the auto-placed 3 × 4 where
609
+ it showed 1 × 1, and the dimension an edit leaves alone is the one on screen.
610
+ `DashboardGridLayout` places a widget with no `layout` through
611
+ `defaultWidgetPlacement`, with no change to where it lands.
612
+
613
+ `DashboardWithConfig`'s `onWidgetSave` payload keeps its flattened `layoutW` /
614
+ `layoutH` shape. For a widget with no `layout` that the author did not resize,
615
+ the two values it carries are now the auto-placed 3 and 4, not 1 and 1.
616
+ - 9d7419b: The dashboard editor reads a `widgets[]` entry by the slot's element type, `DashboardComponentSchema['widgets'][number]`, in its widget card, its property panel, its preview and its measure probe (objectui#11514). `@object-ui/types` no longer lets the slot's component arm stand in for `DashboardWidgetSchema`, and these reads annotated entries with that interface. Type-only: nothing the editor renders, offers or writes changes.
617
+ - 39f4309: Published typings from every `vite-plugin-dts` package now carry an explicit extension on
618
+ every relative specifier, and a type error in the declaration build now fails the build
619
+ instead of being printed and ignored (objectui#5439, objectui#5483).
620
+
621
+ **Consumers on `moduleResolution: nodenext` or `node16` may see NEW type errors, and that
622
+ is the fix working.** These packages re-export mostly through NAMED re-exports —
623
+ `export { useObjectChat } from './useObjectChat'`. TypeScript could not follow the
624
+ extensionless hop, but it still DECLARED the name, so the symbol resolved to a silent
625
+ `any`. Nothing errored; consumers simply got no types. With the extension emitted, the
626
+ symbol carries its real type, and any call site that was relying on the `any` now type
627
+ checks for the first time. This is the mode that produced the 21 residual `TS7006` on
628
+ `@object-ui/app-shell` reported against objectui#5365 — a type hole that opened quietly,
629
+ unlike objectui#5365's own `export * from './ui'` packages where the same defect surfaced
630
+ immediately as `TS2305: has no exported member`.
631
+
632
+ 410 extensionless relative specifiers across 19 packages were emitted before this change;
633
+ the count is now 0 in all 22 packages that build typings through `vite-plugin-dts`.
634
+ `@object-ui/fields` was already clean — its sources write explicit `.js` specifiers — and
635
+ is wired so it stays that way.
636
+
637
+ The second half changes no emitted output today: 22/22 packages built green unmodified, so
638
+ making the declaration step's exit code honest turns nothing red. It changes what a FUTURE
639
+ regression does — print and exit 0, versus fail the build.
640
+ - 2cf69e4: The field designer now reads and writes a lookup field's relationship target under the
641
+ spec's spelling `reference` (objectui#6041), in both directions.
642
+
643
+ `referenceTo` is not in `FieldSchema`'s accept set. Measured against the installed
644
+ `@objectstack/spec` 17.2.0, through the whole object document that
645
+ `PUT /api/v1/meta/object/:name` validates:
646
+
647
+ ```
648
+ ObjectSchema.safeParse({ …, fields: { rel: { type: 'lookup', label: 'Owner',
649
+ referenceTo: 'user' } } })
650
+ => success = false
651
+ => unrecognized_keys at ["fields","rel"] keys=["referenceTo"]
652
+ "Did you mean `referenceTo` -> `reference`?"
653
+ ```
654
+
655
+ so authoring a lookup field through the designer returned a hard 422 `INVALID_METADATA`,
656
+ and — because the key is then stored — blocked **every subsequent save** of that object,
657
+ with nothing in the UI to say which key did it.
658
+
659
+ The read direction was broken symmetrically and is the half that would have survived a
660
+ write-only fix: `toDesignerField` read `raw.referenceTo` while a spec-parsed server sends
661
+ `reference`, so every already-saved lookup field loaded into the designer with an **empty
662
+ reference box**. Both wire-bound payload shapes move — `FieldMetadataPayload`
663
+ (`MetadataService.toFieldPayload`) and `ServerFieldSchema`
664
+ (`MetadataFieldsPage.fromDesignerField`).
665
+
666
+ `referenceTo` also joins `RETIRED_FIELD_KEYS`. Renaming the emit sites alone does not
667
+ unblock an object whose stored fields already carry the misspelling: `carryOver` spreads
668
+ the previous server def verbatim, so the key would ride straight back out to the same 422.
669
+ The designer's in-memory `DesignerFieldDefinition` keeps `referenceTo` — that is the
670
+ internal prop name every other UI surface in this repo already uses (`LookupField`,
671
+ `filter-builder`, `ObjectChart`, `ListView`, `UserFilters`), it reaches no wire-bound
672
+ shape, and the parity gate classifies it as `uiOnly` rather than a violation.
673
+
674
+ No behavioural change for a half-filled draft: the spec's prose calls `reference`
675
+ "required for relationship types", but that is not enforced by the zod parse at 17.2.0 —
676
+ `{ type: 'lookup', label: 'L' }` parses green at field level and through `ObjectSchema`,
677
+ and `undefined` is dropped by `JSON.stringify` under either spelling, so the wire bytes
678
+ are identical before and after.
679
+ - 2cf69e4: The field designer now reads the system-field marker under the spec's spelling `system`,
680
+ and never hands `isSystem` back to the metadata API (objectui#6044).
681
+
682
+ `isSystem` is not in `FieldSchema`'s accept set. Measured against the installed
683
+ `@objectstack/spec` 17.2.0:
684
+
685
+ ```
686
+ FieldSchema.safeParse({ type: 'text', label: 'L', isSystem: true })
687
+ => success = false
688
+ => unrecognized_keys keys=["isSystem"] "Did you mean `isSystem` -> `system`?"
689
+ ```
690
+
691
+ Two defects, one misspelling, and they are two different sites.
692
+
693
+ **The read was dead** — the quieter and worse half. `toDesignerField` read `raw.isSystem`
694
+ while a spec-parsed server sends `system`, so the flag was always `undefined`. Nothing went
695
+ red, because the flag is optional and `undefined` is a valid "not a system field". But it is
696
+ load-bearing: `FieldDesigner` refuses to delete a system field and disables its name and
697
+ type inputs, so with the read dead `organization_id`, `created_at` and friends presented as
698
+ ordinary editable, **deletable** business fields.
699
+
700
+ **The write had no emit site at all.** `fromDesignerField` never names `isSystem`; its only
701
+ route out is the verbatim `...carryOver(prev)` spread, so a stored misspelling round-tripped
702
+ back to `PUT /api/v1/meta/object/:name` as a hard 422 `INVALID_METADATA` that blocks every
703
+ later save. The repair is a `RETIRED_FIELD_KEYS` tombstone rather than a renamed line — and
704
+ it is deliberately paired with the read fix, never a substitute for it: stripping alone would
705
+ close the 422 and fossilize the dead detection. The spec spelling `system` is not stripped,
706
+ so a server-injected flag rides through untouched and feeds the read.
707
+
708
+ `app-shell`'s `FieldMetadataPayload` never declared the key, so `toFieldPayload` had nothing
709
+ to fix. The designer's in-memory `DesignerFieldDefinition` keeps `isSystem`: it reaches no
710
+ wire-bound shape and the parity gate classifies it as `uiOnly`.
711
+ - 00c665e: `appDesigner.fieldDesigner.formula` is retired — one row removed from each of the ten
712
+ locale packs plus the designer defaults map, 11 lines, zero readers (objectui#6310).
713
+
714
+ objectui#6043 retired the Field Designer's formula-expression textarea, which was the
715
+ key's only call site (`FieldDesigner.tsx`, the `{ name: 'formula', label:
716
+ t('appDesigner.fieldDesigner.formula') }` field descriptor). The value outlived it in
717
+ eleven places: `DESIGNER_DEFAULT_TRANSLATIONS` in
718
+ `packages/plugin-designer/src/hooks/useDesignerTranslation.ts`, and the `appDesigner >
719
+ fieldDesigner > formula` leaf of `packages/i18n/src/locales/{en,de,es,fr,pt,ru,ja,ko,zh,ar}.ts`.
720
+
721
+ Removed under objectui#4658's evidence standard, re-measured on this branch rather than
722
+ inherited from the card: zero `t()`/`tt()` call sites, no dynamic template head that could
723
+ reach it (`appDesigner.fieldDesigner.typeCategory.` is the namespace's only one), and its
724
+ sole textual occurrence anywhere in the repo was the defaults-map row this change removes
725
+ with it — so the key goes from NEEDS-REVIEW to no footprint at all.
726
+
727
+ The map and all ten packs move in one commit, which is what keeps
728
+ `defaults-maps-mirror-en-pack` green: that gate fails a map row whose key the `en` pack
729
+ lacks, and `all-locales-key-parity` fails a pack left behind.
730
+
731
+ Not touched: `designer.field.formula` (`'Formula (CEL)'`) in
732
+ `packages/app-shell/src/views/metadata-admin/i18n.ts`, a different and live key belonging
733
+ to metadata-admin's `ObjectFieldInspector` — the surface that still authors formula
734
+ expressions.
735
+
736
+ `packages/i18n/src/__tests__/appDesigner-fieldDesigner-formula-retired-6310.test.ts` pins the
737
+ removal by name, following the four prior retirements (objectui#4145, objectui#4392,
738
+ objectui#4730, objectui#5504). Every i18n gate here runs call site → key, so none of them can
739
+ see a dead key come BACK into the packs: the reverse sweep that found this one is report-only
740
+ by design, `all-locales-key-parity` is fully satisfied by ten packs agreeing on a dead key, and
741
+ `check:i18n-drift` only fires when a value changes. Reverse-verified rather than asserted —
742
+ reviving the row in all ten packs turns exactly that one case red, naming each pack, while the
743
+ parity gate and the defaults-map mirror stay green.
744
+ - 73e8c33: The Field Designer builds an object's `fields` map by defining own properties and refuses
745
+ the three field lists a name-keyed map cannot carry (objectui#6489). `MetadataFieldsPage`
746
+ keyed the map by blind assignment — `nextFields[f.name] = fromDesignerField(…)` inside a
747
+ bare `for` loop — which failed silently in three directions, all measured on the installed
748
+ `@objectstack/spec` 17.2.0:
749
+
750
+ - **A field named `__proto__` never reached the wire.** `map['__proto__'] = def` invokes the
751
+ prototype setter instead of creating a key, so the field vanished from the serialised PUT
752
+ body. `__proto__` matches `ObjectSchema.fields`' key rule `/^[a-z_][a-z0-9_]*$/`, so the
753
+ spec stood ready to accept the field the client had thrown away. The map is now built
754
+ through `Object.fromEntries`, which defines an own property.
755
+ - **A nameless field was stored under the literal key `"undefined"`.** Measured:
756
+ `ObjectSchema.safeParse` with `fields: { undefined: … }` returns `success = true`, so the
757
+ document parsed, persisted, and had no reader anywhere. It is now refused before the
758
+ request.
759
+ - **Two fields sharing a name collapsed into one entry.** A designer list carrying two
760
+ `amount` fields PUT a single entry, the later silently replacing the earlier. Also refused
761
+ before the request.
762
+
763
+ Both refusals raise before `client.save`, so a refused list issues no PUT at all, and the
764
+ message lands in the page's existing error surface naming the offending index — the caller
765
+ is fire-and-forget (`void handleFieldsChange(next)`), so throwing past it would show the
766
+ author nothing.
767
+
768
+ This is the plugin-designer port of the refusals objectui#6240 landed in the sibling object
769
+ writer (app-shell's `MetadataService.toFieldsMap`), down to the wording, so the two writers
770
+ of the objectui#5761 parity family cannot drift. `fromDesignerField`'s carry-over semantics
771
+ are untouched.
772
+ - b49f9a1: `MetadataObjectsPage` keys its object-name lookups as own entries, so deleting an object
773
+ named `constructor` (or `__proto__`) from the Object Manager actually deletes it
774
+ (objectui#6522).
775
+
776
+ Both name lookups in the page were plain object literals filled by assignment, and the
777
+ consequential one was a READ. The delete scan asked `!nextByName[name]`, which for an
778
+ object named `constructor` answered out of `Object.prototype` with the `Object` function —
779
+ truthy — so the deletion read as "still present" and `client.reset('object', …)` never
780
+ fired. Not a refusal: the row disappeared from the manager, no error was shown, the save
781
+ reported success, and the object was still there after the next reload. Measured against
782
+ the installed `@objectstack/spec`, `ObjectSchema` pins object names to
783
+ `/^[a-z_][a-z0-9_]*$/` and accepts both `constructor` and `__proto__` — those two are
784
+ exactly the intersection with `Object.prototype`'s own names, so both are storable and
785
+ neither was deletable.
786
+
787
+ The second lookup, one function over, failed on the WRITE instead: `byName[item.name] =
788
+ item` for an object named `__proto__` invoked the prototype setter rather than creating a
789
+ key, so the object never became an own property, never reached the Object Manager at all,
790
+ and left its payload on the lookup's prototype chain for later name lookups to answer out
791
+ of. Both are now `Map`s — neither container is ever serialised, only its values are, so a
792
+ `Map` fits where the sibling `MetadataFieldsPage` fields map (which IS the PUT body) needs
793
+ `Object.fromEntries`.
794
+
795
+ Keying only. Nameless and duplicate entries behave exactly as before: this page writes
796
+ per-object, so the refusal semantics objectui#6489 added to the fields map are a separate
797
+ question and are deliberately not ported here.
798
+ - 3e028c8: One tombstone registry for the designer seam's retired field keys
799
+ (objectui#6527). Three independently maintained `RETIRED_FIELD_KEYS` literals
800
+ — the metadata-admin read door (`object-fields-io.ts`), `MetadataService`'s
801
+ carry-over and `MetadataFieldsPage`'s carry-over — become derivations from a
802
+ single registry in `@object-ui/types` (`RETIRED_FIELD_KEY_TOMBSTONES` +
803
+ `retiredFieldKeysFor(site)`), naming each retired key, the card that retired
804
+ it, and its PER-SITE applicability.
805
+
806
+ Per-site behaviour is unchanged — this is a consolidation, and each site's
807
+ effective strip set is pinned equal to its pre-consolidation literal. The two
808
+ deliberate asymmetries a naive union would have destroyed are now recorded as
809
+ data and pinned:
810
+
811
+ - `formula` stays stripped by the two write-side carry-overs and is NOT
812
+ stripped by the read door — ruled on objectui#6526 (option B): the
813
+ `ObjectFieldInspector` migration path (objectui#6043) stands, and the
814
+ registry test makes that ruling mechanical.
815
+ - `sortOrder` stays a single-site strip at `MetadataService`'s carry-over,
816
+ now explicitly recorded as the registry's one DEFENSIVE entry (objectui#6045
817
+ measured that no shipped writer ever populated a field-level one).
818
+ - c6198c2: **Breaking for authored metadata:** `ComponentInput.label`, `ComponentInput.defaultValue` and
819
+ `ComponentInput.advanced` are RETIRED on both faces (objectui#7493 item ① and objectui#7781;
820
+ maintainer ruling A of 2026-09-06, immediate, no deprecation window; ADR-0049 enforce-or-remove).
821
+ They are the three keys the manifest serializer does not forward, and nothing read them on any
822
+ publication or consumption path.
823
+
824
+ No manifest ever published them, so no consumer could ever have read them. `sdui-parser`'s
825
+ serializer (`packages/sdui-parser/src/index.ts`) forwards exactly seven keys per input — `name`,
826
+ `type`, `of`, `required`, `enum`, `binding`, `description` — so a value authored under any of the three
827
+ never reached `sdui.manifest.json`, the generated JSX `.d.ts`, or a diagnostic; its boundary type
828
+ has no slot for them; the registry's data-source seam reads `name` only; and neither the designer
829
+ nor the app-shell inspectors consult registry `inputs` at all. A structural census over every
830
+ `inputs:` array in the repository (re-measured on this change's merge-base, `name` 951 and `type`
831
+ 951 as the controls) counted the writes: `label` 908, `defaultValue` 245, `advanced` 9 — written on
832
+ nearly every registration, read by nothing.
833
+
834
+ FROM → TO, per key — all three **TOMBSTONED, not removed**, because the route was measured on
835
+ the built face before it was chosen: `ComponentInputSchema` is a non-strict `z.object`, and an
836
+ undeclared key parses GREEN and is silently STRIPPED, so a deletion would have swallowed 1,162
837
+ authored values in silence. The tombstone is what makes the refusal loud and by name.
838
+
839
+ - `label?: string` → `label?: never` on the interface, `retirementTombstone()` on the Zod mirror.
840
+ Migration: delete the key. An input is identified by its `name` on every path that reaches it;
841
+ nothing ever rendered a label for it.
842
+ - `defaultValue?: any` → `defaultValue?: never` / `retirementTombstone()`. Migration: delete the
843
+ key. The renderer's own fallback read IS the default; tell the author about it in `description`,
844
+ which IS published. (Tightening the type to `unknown` was ruled out: it closes no error class,
845
+ since nothing reads the value.)
846
+ - `advanced?: boolean` → `advanced?: never` / `retirementTombstone()`. Migration: delete the key.
847
+ No designer surface ever hid an "advanced" input; there is nothing to write instead.
848
+
849
+ The retirement kit: `?: never` on `ComponentInput` (`packages/types/src/base.ts`), so authoring one
850
+ is a `tsc` error at the registration site; `retirementTombstone()` on `ComponentInputSchema`
851
+ (`packages/types/src/zod/base.zod.ts`), so an authored value is REFUSED at parse time with
852
+ `code: 'invalid_type'`, the key named in the issue `path`, and the migration note as the message
853
+ (one string, both channels). Pinned in
854
+ `packages/types/src/__tests__/component-input-retired-keys-7493.test.ts`, which also holds a
855
+ tree-scoped absence census over every `inputs:` array under `packages/**` and `apps/**`.
856
+
857
+ Accept-set change, stated plainly for reviewers: a document that sets any of the three keys on a
858
+ `ComponentInput` used to parse GREEN (the value was then dropped by the serializer) and now parses
859
+ RED. Every in-repo authoring site — 1,199 keys across 110 registration files, the three standalone
860
+ `ComponentInput[]` arrays and the two named input arrays `tsc` found included — is deleted in the same change, as the ruling's split rule
861
+ requires; the `WidgetRegistry` seam no longer copies the widget-manifest values onto the synthesized
862
+ `ComponentInput` (they fed nothing), and the data-source declaration `ELEMENT_DATA_SOURCE_INPUT`
863
+ drops its `label`. The patch entries on the other packages record exactly that: their registrations
864
+ stop authoring inert keys, with no runtime or published-manifest change.
865
+
866
+ The nine test files that read `defaultValue` off a registration were re-pinned against the
867
+ renderer's ACTUAL default (its own fallback read, or the `defaultProps` it ships) instead of the
868
+ declaration that went away; two assertions that only restated the shadow default were dropped with
869
+ the reason on the line.
870
+
871
+ The in-repo zero is what was measured. Whether anything OUTSIDE this repository writes these keys
872
+ is not measurable from here (the objectui#5674 limit); converting such a write from a silent drop
873
+ into a named refusal is exactly what the tombstones buy. `WidgetInput`'s own `label` /
874
+ `defaultValue` / `advanced` (the widget-manifest face) stay declared and writable — nothing has
875
+ ruled on that face; that it now has no reader either is recorded as objectui#7911.
876
+ - 3f4b458: fix(plugin-designer): read a lookup's target under the retired `referenceTo` spelling too
877
+
878
+ `MetadataFieldsPage`'s read door (`toDesignerField`) read the spec spelling
879
+ `reference` and nothing else, while its carry-over strips `referenceTo` from the
880
+ stored definition. A field whose target survives only as the pre-objectui#6041
881
+ `referenceTo` therefore read as target-less, the strip removed the stored value,
882
+ and the field reached the wire as a `lookup` with no target — saving silently at
883
+ `@objectstack/spec` 17.2.0 and answering `422 INVALID_METADATA` at
884
+ `fields.NAME.reference` against 17.3.0, with nothing naming which field.
885
+
886
+ The read door now reads `reference` and falls back to `referenceTo`. That is a
887
+ pure rename: `FieldSchema`'s own alias map renames `referenceTo` onto
888
+ `reference` and both spellings carry one object machine name, so no value
889
+ changes shape on the way through — unlike the `formula` alias, where the rename
890
+ was refused because the two sides carry different value grammars
891
+ (objectui#6043).
892
+
893
+ objectui#7714's guard is untouched and still refuses a relationship field with
894
+ no usable target under either spelling, by name, before the PUT.
895
+ - c5c0e2a: Per-row operation gating for `ObjectGrid`, and the Field Designer stops drawing a
896
+ delete action it refuses to run (objectui#8674).
897
+
898
+ **The defect.** `FieldDesigner`'s `handleDelete` returned early on `field.isSystem` —
899
+ before the confirm dialog — while the affordance was wired at the GRID level
900
+ (`onDelete={readOnly ? undefined : handleDelete}`). `ObjectGrid` takes one grid-level
901
+ `onDelete` and derives `{ update: !!onEdit, delete: !!onDelete }`, so the row action
902
+ was drawn for every row: clicking delete on a system field produced no dialog, no
903
+ toast and no console message. `readOnly` was honest in the same component (the
904
+ callback is withheld, so no button is drawn); `isSystem` drew the button and dropped
905
+ the click. The two states differed in the code and did not differ on screen.
906
+
907
+ **`@object-ui/plugin-grid` — new, additive, opt-in.** `ObjectGridComponentProps`
908
+ gains `rowOperations?: (record) => { update?: boolean; delete?: boolean }`, with the
909
+ new `ObjectGridRowOperations` type exported from the package root. It speaks the same
910
+ `update` / `delete` vocabulary the authored `operations` block speaks, resolved for
911
+ one row instead of for the grid, and it is an INTERSECTION like every layer around it
912
+ (the ADR-0103 lifecycle bucket, the object's `userActions`, the server's effective API
913
+ operations, the principal's own grant, the record-level explain verdict): `false`
914
+ withholds, and nothing it returns can re-open what those closed. A caller that passes
915
+ no predicate renders exactly what it rendered before — measured, not asserted: the
916
+ rendered DOM of a no-predicate grid is byte-identical across this change, and every
917
+ other `<ObjectGrid>` call site in the repository is such a caller.
918
+
919
+ It is a function value, so no metadata document can hold it and none is invited to:
920
+ like the nine `on*` callbacks it sits beside, it is a renderer prop and not an
921
+ authorable key.
922
+
923
+ **`@object-ui/plugin-designer` — the first caller, and the user-visible fix.** The
924
+ Field Designer passes the predicate, so a system field's row no longer offers Delete
925
+ at all. Edit is untouched: the drawer still opens for a system field, with `name` and
926
+ `type` disabled exactly as before — `isSystem` has never meant "this row is
927
+ untouchable". The guard inside `handleDelete` stays as a second line for direct
928
+ callers of the prop value, but it is no longer the only refusal.
929
+ - db0e9d3: fix(plugin-designer): the dashboard editor's type picker no longer turns a multi-measure widget into a type the widget door refuses (objectui#8894)
930
+
931
+ `@objectstack/spec` 17.5.0 refuses a second measure on a metric-family widget. The
932
+ dashboard editor authors no measures, but a dashboard it opens carries them, and its
933
+ type picker could turn a stored `bar` over two measures into a `metric` that publish
934
+ then refused — a refusal `DashboardDesignPage`'s save swallows. The picker now asks
935
+ objectui's `DashboardWidgetSchema` (which re-attaches the spec's own check) before it
936
+ offers a type: a type the door refuses this widget's measures under is a disabled
937
+ option, and a change to it writes nothing. A stored widget the door already refuses
938
+ keeps its type and shows the door's own message under the picker. A widget with one
939
+ measure, or none, is offered every type as before.
940
+ - a5abc0c: Correct the user-visible refusal banner that told authors a blank relationship
941
+ target would be accepted by the installed `@objectstack/spec` (objectui#8897).
942
+
943
+ `MetadataService` and `MetadataFieldsPage` both refuse a `lookup` /
944
+ `master_detail` field whose `reference` trims to empty, and both explained the
945
+ refusal by saying the spec **accepts** the value, "so the PUT would succeed and
946
+ the failure would surface later and further away". That was measured and true at
947
+ `@objectstack/spec` 17.3.0. The pin is 17.4.0 (objectui#8772), which carries
948
+ objectstack#16920 — the emptiness test now applies to the TRIMMED value — so
949
+ against the artifact this repo actually installs, the PUT would **not** succeed.
950
+ The product was asserting to authors something the installed artifact
951
+ contradicts.
952
+
953
+ Measured on the installed 17.4.0 artifact, with controls in the same run:
954
+
955
+ FieldSchema.safeParse({ type:'lookup', label:'L', reference:' ' })
956
+ => success = false, custom at ["reference"]
957
+ ObjectSchema.safeParse({ …, fields:{ rel:{ …, reference:' ' } } })
958
+ => success = false, custom at ["fields","rel","reference"]
959
+ controls: reference:'account' and reference:' account ' both ACCEPTED
960
+
961
+ The banner now names the trim the contract applies — which is what still tells a
962
+ blank target apart from an empty one now that both are refused — and promises
963
+ the 422 it previously had to withhold. The verbatim pin on that sentence moved
964
+ with it, in the same commit.
965
+
966
+ ⛔ **The guard's predicate is byte-identical.** objectui#8621 ruled it stays for
967
+ its own reason: it refuses at EDITOR time, before the PUT, naming the field while
968
+ it is still on screen. Only its stated *reason* was wrong.
969
+
970
+ ⛔ Statements about **when** the contract changed ("17.3.0 made `reference` a
971
+ hard requirement", "at 17.2.0 the requirement was prose only") are permanently
972
+ true and were not touched; only statements about **what is installed** were.
973
+ - 7b2fe4d: The Object Manager stops drawing a delete action it refuses to run
974
+ (objectui#9219) — objectui#8674's defect, one component over.
975
+
976
+ **The defect.** `ObjectManager`'s `handleDelete` returned early on
977
+ `obj.isSystem`, before the confirm dialog, while the affordance was wired at the
978
+ GRID level (`onDelete={readOnly ? undefined : handleDelete}`) — one callback,
979
+ drawn identically for every row. So a system-object row carried a delete entry
980
+ whose click produced no dialog, no toast and no console message. That row is on
981
+ screen by DEFAULT: `showSystemObjects` defaults to true and the component
982
+ filters system objects out only when it is false. `readOnly` was honest in the
983
+ same component (the callback is withheld, so nothing is drawn); `isSystem` drew
984
+ the entry and swallowed the click. The two states differed in the code and did
985
+ not differ on screen.
986
+
987
+ **The fix.** `ObjectManager` now passes `rowOperations`, the per-row narrowing
988
+ objectui#8674 added to `ObjectGrid`, answering `{ delete: !!obj &&
989
+ !obj.isSystem }` for each row — the same three lines the Field Designer got.
990
+ A system object's row no longer offers Delete at all; an unresolvable row is
991
+ withheld too, because `handleDelete` returns early on a missed lookup and
992
+ offering delete there would reproduce this very defect.
993
+
994
+ Edit is untouched. `isSystem` disables the `name` input inside the edit form and
995
+ has never meant "this row is untouchable", so the modal still opens for a system
996
+ object exactly as before. The guard inside `handleDelete` also stays, as a
997
+ second line for anyone invoking that published prop value directly — it is just
998
+ no longer the only refusal.
999
+
1000
+ **Why `patch`.** No API surface moves: no prop, type, export or signature is
1001
+ added, changed or removed, and `rowOperations` is a prop `ObjectGrid` already
1002
+ published. The only user-visible change is that an entry which never did
1003
+ anything — the click was dropped before the dialog — is no longer drawn, so
1004
+ nothing a caller could have depended on stops working. This is the level the
1005
+ merged sibling repair declared for the same defect in the same package.
1006
+ - a78cd37: Dates and numbers across the console and the plugins format in the session's
1007
+ display locale instead of the machine's (objectui#9909).
1008
+
1009
+ Every one of these faces handed `Intl` — directly, or through a formatter called
1010
+ without one — either no locale tag or an explicit `undefined`, which is not "the
1011
+ user's locale": it is the locale of the machine the browser runs on, which is
1012
+ neither of this repository's two locale channels.
1013
+ A German or Spanish session therefore read, beside a translated label, a date or
1014
+ an amount grouped and decimal-marked the machine's way — and an amount with
1015
+ inverted separators does not read as unformatted, it reads as a different
1016
+ number. They now go through `useDisplayLocale()` (tenant regional default, then
1017
+ the active UI language, then `'en'`), and a plain helper takes that tag from its
1018
+ caller. The surfaces:
1019
+
1020
+ - **`@object-ui/fields`** — `GridField`'s numeric and currency cells (list mode
1021
+ and computed columns) and both total cells. The same cell helper's date branch
1022
+ already used the display locale, so a single grid row read two conventions at
1023
+ once.
1024
+ - **`@object-ui/plugin-charts`** — ISO-date x-axis ticks, compact y-axis ticks,
1025
+ the single-value face, spec `format` strings and the tooltip value.
1026
+ - **`@object-ui/app-shell`** — the organization invitations, members and
1027
+ accept-invitation dates; marketplace version dates; the AI conversation row's
1028
+ older-than-a-week date and its tooltip; the build-debug token count; the
1029
+ record approvals timeline; and the metadata-admin audit, history, external
1030
+ datasource snapshot, schema-browser row estimate, flow-run start and job
1031
+ next-fire faces. The audit, history and flow-run panels format these in the
1032
+ DISPLAY locale, not in the `locale` prop they take for their UI strings
1033
+ (`AuditPanel` defaults that prop to `'en-US'`; `HistoryPanel` and
1034
+ `FlowRunsPanel` leave it optional).
1035
+ - **`@object-ui/console`** — the approvals inbox's timestamp tooltips, amounts
1036
+ and payload summary; the audit log's timestamp column; the flow runs table and
1037
+ its run detail.
1038
+ - **`@object-ui/components`** — the export dialog's record counts and the debug
1039
+ panel's event times.
1040
+ - **`@object-ui/plugin-form`** — the analytics submission count, the
1041
+ master-detail subtotal / tax / total stack and the edit-conflict dialog's
1042
+ "their save" time.
1043
+ - **`@object-ui/plugin-chatbot`** — the approvals inbox's past-30-days date and
1044
+ the times stamped on local-mode chat messages (the user's and the
1045
+ auto-response).
1046
+ - **`@object-ui/plugin-dashboard`** — the record-count badge, and the currency
1047
+ and date-format branches of `renderFieldValue`, which was handed the display
1048
+ locale and spent it only on its percent branch.
1049
+ - **`@object-ui/plugin-grid`** — the record-detail panel's inferred currency
1050
+ value and the mobile card's amount line, siblings of date cells already on the
1051
+ display locale.
1052
+ - **`@object-ui/plugin-designer`** — `VersionHistory`'s version times.
1053
+
1054
+ A host that mounts one of the components that newly read the display locale with
1055
+ NO `I18nProvider` now gets react-i18next's once-per-module `NO_I18NEXT_INSTANCE`
1056
+ notice in the console on the first such mount; the faces still render, in the
1057
+ channel's `'en'` last resort, and mounting an `I18nProvider` (as the console
1058
+ does) avoids the notice.
1059
+
1060
+ **Additive API** (nothing that compiled before stops compiling):
1061
+
1062
+ - `@object-ui/types`: `ValidationContext` gains an optional `locale`. At this
1063
+ change, the `@object-ui/core` validation engine prints the `date_min` /
1064
+ `date_max` bound in it; omitted, `Intl` follows the runtime default, as
1065
+ `formatDisplayNumber` already declares for a caller with no locale in hand.
1066
+
1067
+ ⚠️ **Dated note, 2026-09-25 — that engine (`ValidationEngine`) is removed from
1068
+ `@object-ui/core` by a later change; `ValidationContext.locale` stays declared in
1069
+ `@object-ui/types`, and at that change nothing in `@object-ui/core` reads it —
1070
+ objectui#7659.**
1071
+
1072
+ ⚠️ **Dated note, 2026-09-27 — `ValidationContext` itself is removed from
1073
+ `@object-ui/types` by a later change, with the rest of the Phase 3.5
1074
+ validation types it belonged to, so the `locale` member this entry adds no
1075
+ longer exists — objectui#10719.**
1076
+ - `@object-ui/plugin-report`: `exportReport`, `exportAsHTML` and `exportAsPDF`
1077
+ take a trailing optional `locale` for the exported file's "Generated:" time,
1078
+ and `LiveExportOptions` gains an optional `locale` that `exportWithLiveData`
1079
+ forwards. Omitted, the time uses the display channel's own last resort
1080
+ (`'en'`), never the machine's locale. `ReportViewer` passes the session's
1081
+ display locale. The locale is deliberately NOT a `ReportExportConfig` member:
1082
+ that type is authored report metadata, and a display locale belongs to the
1083
+ session.
1084
+
1085
+ **One census, repository-wide.** `plugin-detail`'s machine-locale census pin
1086
+ (objectui#9786) is now a single test, `machineLocaleCensus-9909.test.ts` in
1087
+ `@object-ui/i18n`, covering every workspace package whose manifest depends on
1088
+ `@object-ui/i18n`. It refuses any call site that passes nothing, `undefined`,
1089
+ the `'default'` pseudo-tag (a subtag no locale data answers, so `Intl` resolves
1090
+ it to the machine's locale) or a hard-coded tag, unless the site is declared
1091
+ with its reason — for example the `catch` fallback for a tag `Intl` itself
1092
+ rejected, or an ISO formatter feeding `<input type="date">`. Each declared site
1093
+ is counted exactly, so deleting one without its entry is refused too. The
1094
+ per-package pin it replaces is deleted. The runtime tripwire that observes the
1095
+ argument each locale-taking call (`Intl` constructors, `Date` and `Number`
1096
+ `toLocale*`) actually receives moved into the private `@object-ui/test-support`
1097
+ package, and every surface above is pinned with it: the same data under two
1098
+ declared locales must render differently, NO locale-taking call may receive the
1099
+ machine's locale (nothing, `undefined` or `'default'`), and the surface's own
1100
+ calls must receive the declared tag. A call carrying another declared tag, such
1101
+ as the `'en'` of the session's UI language, is tolerated by design: only the
1102
+ machine's locale is the defect.
1103
+ - 4db5989: A widget title stored as an inline per-locale map is editable again in both dashboard
1104
+ authoring surfaces, and a save writes back only the active locale's entry
1105
+ (objectui#5428).
1106
+
1107
+ `@objectstack/spec` widened `I18nLabel` from `string` to `string | Record` at
1108
+ 17.0.0-rc.6, so a stored widget title may be an inline per-locale map while both
1109
+ authoring panels edit a title in ONE single-line input. Writing the input's value back
1110
+ as the whole value would collapse every other locale on the first keystroke, so both
1111
+ surfaces took the same conservative branch: show a map-valued title resolved, and make
1112
+ it READ-ONLY.
1113
+
1114
+ That branch could not lose data, but it rested on a premise the spec had already
1115
+ invalidated — "nothing can reach this path from stored metadata yet, `I18nLabel` was
1116
+ plain `string` through rc.5" — stated sixty lines below a comment in the same file
1117
+ documenting the rc.6 widening that makes a stored map reachable. Both could not hold.
1118
+ The pinned spec is 17.0.0. What the read-only branch did in practice from rc.6 onward
1119
+ was not protect an unreachable path: it denied an author the ability to edit a widget
1120
+ title in their own locale.
1121
+
1122
+ objectui#5301's maintainer ruling settled the write rule for the sibling surface — a
1123
+ save replaces only the active locale's entry and preserves the others — and
1124
+ `@object-ui/i18n` ships it as `setLocalized`, co-located with `pickLocalized` because
1125
+ the read and the write have to agree. Both panels now adopt it:
1126
+
1127
+ - `@object-ui/plugin-designer`'s `DashboardEditor` widget property panel;
1128
+ - `@object-ui/app-shell`'s `DashboardWidgetInspector` in metadata-admin.
1129
+
1130
+ A plain-string title keeps saving as a plain string, so the common path is unchanged.
1131
+ An edit made in a locale the stored map does not carry ADDS an entry under that locale
1132
+ rather than overwriting the entry the display fell back to.
1133
+
1134
+ The pins are preservation pins, not "the input is editable" pins: at both surfaces a
1135
+ keystroke on a map-valued title must leave every other locale's entry byte-identical.
1136
+ Reverse-verified by mutating each write back to the flattening form and confirming those
1137
+ assertions go red at both surfaces.
1138
+
1139
+ Not a multi-locale editor: an author still reaches only the entry for the locale they
1140
+ are in. Authoring every locale from one panel remains an open product question. The
1141
+ stale deferrals both comments carried pointed at objectui#4163, which closed as
1142
+ completed on 2026-08-15 while the placeholders were still in the tree; they are replaced
1143
+ with the rule that is actually in force rather than re-pointed at another tracker.
1144
+ - f7e34ca: Close the dashboard widget `type` vocabulary, and admit `metric-card` as objectui's own component extension.
1145
+
1146
+ `DashboardWidgetSchema.type` was `string` on the TypeScript interface and `z.string()` in the Zod twin — an unbounded hatch. A typo'd family, a chart type the spec retired, and a component type nothing registers all type-checked and validated, surfacing only as the renderer's red `OBJUI-001` panel at runtime.
1147
+
1148
+ It is now the CLOSED `DashboardWidgetTypeName` / `DashboardWidgetTypeSchema`: the spec's own `ChartTypeSchema` families **by reference**, plus two named, closed objectui extension sets — `DASHBOARD_WIDGET_TYPE_EXTENSIONS` (`list`, `custom`: objectui-only widget families) and `DASHBOARD_COMPONENT_WIDGET_TYPES` (`metric-card`: an objectui SDUI **component** type the widget slot holds directly, per the maintainer ruling of 2026-08-14 — objectui's own component enum, explicitly not the spec widget enum).
1149
+
1150
+ Three drifts the closure surfaced and this change fixes: the dashboard designer's palette offered `grid`, which is not a widget family in either contract and was refused at publish; the metadata-admin widget inspector and the designer both wrote an unvalidated `string` from their select boxes; and a `@object-ui/types` fixture pinned `bar-chart`, a `plugin-charts` component type, on a dataset-bound widget that could never render as one.
1151
+
1152
+ ⚠️ **Dated note, 2026-10-02 — `metric-card` is no widget type — objectui#11483.** At this change, `DashboardWidgetTypeName` / `DashboardWidgetTypeSchema` were the spec's families plus two objectui sets, `DASHBOARD_WIDGET_TYPE_EXTENSIONS` and `DASHBOARD_COMPONENT_WIDGET_TYPES`; now they are the spec's families plus `DASHBOARD_WIDGET_TYPE_EXTENSIONS` only. A `metric-card` in the widget slot is read by the slot's component arm alone, which requires its `value`. `DASHBOARD_COMPONENT_WIDGET_TYPES` still lists `metric-card` as that arm's `type`, and `DashboardWidgetSchema['type']` on the TypeScript face still reads it. `.changeset/11483-metric-card-needs-value.md` states what ships. The rest of this entry is kept as the reading of this change.
1153
+
1154
+ ⚠️ **Dated note, 2026-10-03 — the TypeScript widget arm no longer reads `metric-card` — objectui#11514.** At the 2026-10-02 note above, `DashboardWidgetSchema['type']` on the TypeScript face still read `metric-card`, because that interface was the read type of every `widgets[]` entry. Now it is `DashboardWidgetTypeName` alone: an entry is read by the slot's element type, and only the component arm names `metric-card`. `.changeset/11514-types-widget-arm-type.md` states what ships. The rest of this entry is kept as the reading of this change.
1155
+ - fb336df: Move `lucide-react` from `^1.31.0` to `^1.43.0` in every package that declares it, and
1156
+ repair what the jump breaks, so icons resolved from a STRING keep drawing a glyph.
1157
+
1158
+ Measured once against the installed 1.43.0 artifact when this change was made; nothing in
1159
+ the repository re-derives these readings. Across the jump lucide removes no runtime export,
1160
+ no public type name and no `lucide-react/dynamic.mjs` name, and every name this repository
1161
+ imports from `lucide-react` resolves. Exactly one key leaves the runtime `icons` record:
1162
+ `Trash2`, retired in favour of `trash`.
1163
+
1164
+ What a user sees change:
1165
+
1166
+ - Icons the lazy icon seam draws (`resolveIcon`, objectui#9251) get their path data again.
1167
+ lucide 1.43.0 icon modules export their path data inside `__iconData` and no longer
1168
+ export `__iconNode`; the seam now reads both. Reading only `__iconNode` against 1.43.0
1169
+ leaves every such glyph an empty box, with nothing thrown or logged.
1170
+ - `DetailView`'s delete action and three schema-catalog examples spell their icon
1171
+ `trash`, not `trash-2`, so they keep resolving. The glyph is unchanged: 1.43.0's `trash`
1172
+ path data is byte-identical to the `trash-2` path data of 1.31.0 and 1.35.0. Anything
1173
+ that already authored `trash` now draws that same artwork, because lucide moved it under
1174
+ the `trash` name; a few other glyphs were also redrawn upstream.
1175
+ - Icons imported as COMPONENTS carry lucide 1.43.0's own classes: one class per declared
1176
+ alias (a spinner renders `class="lucide lucide-loader-circle lucide-loader-2 ..."`), and
1177
+ no longer the class lucide used to derive from the PascalCase key where that differs
1178
+ (`ArrowDown01` no longer carries `lucide-arrow-down01`). The canonical
1179
+ `lucide-<icon name>` class is still there, so a `.lucide-loader-circle` selector still
1180
+ matches.
1181
+ - Icons resolved from a STRING through the seam keep the classes they had: `lucide`, the
1182
+ canonical `lucide-<icon name>` class and the key-derived class. They do not carry
1183
+ lucide's per-alias classes. That is a maintainer ruling (objectui#8941, option C): the
1184
+ alias list lives only inside each lazily loaded icon module, and it was not moved into
1185
+ the eager name list. A selector that targets an alias class matches a component-imported
1186
+ icon and not a string-resolved one. This also dates the example in the objectui#9251
1187
+ entry: `trash-2` no longer resolves as a string, so no seam-drawn glyph carries
1188
+ `lucide-trash2 lucide-trash-2`; a digit-bearing name that still resolves, such as
1189
+ `arrow-down-0-1`, carries `lucide-arrow-down01 lucide-arrow-down-0-1`.
1190
+ - 93127bd: Keep a relationship target stored only as the retired `referenceTo` spelling (objectui#8896)
1191
+
1192
+ Two field-IO sites deleted the retired `referenceTo` key without keeping its
1193
+ value, so an object whose lookup or master-detail target survived only under the
1194
+ pre-objectui#6041 spelling lost the target on the way through:
1195
+
1196
+ - The Field Designer's carried-through half (fields whose stored type the
1197
+ designer cannot author, `7dc31bb8d`) re-emits the stored document verbatim
1198
+ with no read door in front of it. The strip took the target and the relationship
1199
+ guard then refused the whole object's save — including a save the author
1200
+ triggered by editing an entirely different field, on a page that renders the
1201
+ offending field read-only, so its "Pick the target object" advice named a
1202
+ control that does not exist there.
1203
+ - The object designer's single read door for `draft.fields` deleted the target on
1204
+ load, leaving the target editor empty and committing the loss on the next save.
1205
+
1206
+ Both sites now lift the value onto the spec spelling `reference` before dropping
1207
+ the retired key. The retired key still never reaches the wire, a live `reference`
1208
+ is never overwritten by a stale legacy value, and a field with no usable target
1209
+ under either spelling is still refused.
1210
+ - Updated dependencies [7b10bef]
1211
+ - Updated dependencies [97abedc]
1212
+ - Updated dependencies [b46c58f]
1213
+ - Updated dependencies [a507334]
1214
+ - Updated dependencies [ad694ac]
1215
+ - Updated dependencies [6f96fca]
1216
+ - Updated dependencies [afb2284]
1217
+ - Updated dependencies [3759c56]
1218
+ - Updated dependencies [cd7b728]
1219
+ - Updated dependencies [3ac2de8]
1220
+ - Updated dependencies [0aacecc]
1221
+ - Updated dependencies [63f4f92]
1222
+ - Updated dependencies [777fca2]
1223
+ - Updated dependencies [c131d9e]
1224
+ - Updated dependencies [5f00ff4]
1225
+ - Updated dependencies [c9e073a]
1226
+ - Updated dependencies [142fdfd]
1227
+ - Updated dependencies [7b395d8]
1228
+ - Updated dependencies [185079b]
1229
+ - Updated dependencies [0879812]
1230
+ - Updated dependencies [8cedb0d]
1231
+ - Updated dependencies [162621b]
1232
+ - Updated dependencies [e026e15]
1233
+ - Updated dependencies [4c6f549]
1234
+ - Updated dependencies [80c5412]
1235
+ - Updated dependencies [6cc910b]
1236
+ - Updated dependencies [061f5e8]
1237
+ - Updated dependencies [2dd4d3f]
1238
+ - Updated dependencies [b809375]
1239
+ - Updated dependencies [6099dd8]
1240
+ - Updated dependencies [e686f4d]
1241
+ - Updated dependencies [a04b06d]
1242
+ - Updated dependencies [4ab4f1b]
1243
+ - Updated dependencies [fa5fbd9]
1244
+ - Updated dependencies [d6a1a80]
1245
+ - Updated dependencies [88a4ef6]
1246
+ - Updated dependencies [b57107d]
1247
+ - Updated dependencies [e3ea4f9]
1248
+ - Updated dependencies [9ec8ceb]
1249
+ - Updated dependencies [0651e7a]
1250
+ - Updated dependencies [bb5d4ee]
1251
+ - Updated dependencies [dc666f7]
1252
+ - Updated dependencies [3335767]
1253
+ - Updated dependencies [8b1f066]
1254
+ - Updated dependencies [af243c1]
1255
+ - Updated dependencies [d5cb261]
1256
+ - Updated dependencies [cff4b77]
1257
+ - Updated dependencies [961ceaa]
1258
+ - Updated dependencies [f3f4e4c]
1259
+ - Updated dependencies [a05c350]
1260
+ - Updated dependencies [1dbb993]
1261
+ - Updated dependencies [2b5f509]
1262
+ - Updated dependencies [808f339]
1263
+ - Updated dependencies [6cf5999]
1264
+ - Updated dependencies [274e14a]
1265
+ - Updated dependencies [8c10f4f]
1266
+ - Updated dependencies [90dac98]
1267
+ - Updated dependencies [6096f20]
1268
+ - Updated dependencies [544aca2]
1269
+ - Updated dependencies [ea02938]
1270
+ - Updated dependencies [a14fb23]
1271
+ - Updated dependencies [ae98f1d]
1272
+ - Updated dependencies [f98eddf]
1273
+ - Updated dependencies [ce6bd99]
1274
+ - Updated dependencies [a5b08c9]
1275
+ - Updated dependencies [86982ac]
1276
+ - Updated dependencies [cdefa2a]
1277
+ - Updated dependencies [c3025ea]
1278
+ - Updated dependencies [0961d5e]
1279
+ - Updated dependencies [6276478]
1280
+ - Updated dependencies [5e67837]
1281
+ - Updated dependencies [ff14e29]
1282
+ - Updated dependencies [9b28151]
1283
+ - Updated dependencies [64563a9]
1284
+ - Updated dependencies [1a5003f]
1285
+ - Updated dependencies [09ab32b]
1286
+ - Updated dependencies [8acc51b]
1287
+ - Updated dependencies [ea9d17f]
1288
+ - Updated dependencies [cc139d8]
1289
+ - Updated dependencies [45362a3]
1290
+ - Updated dependencies [2a943bf]
1291
+ - Updated dependencies [93a689d]
1292
+ - Updated dependencies [4357a27]
1293
+ - Updated dependencies [e5f4343]
1294
+ - Updated dependencies [3261e64]
1295
+ - Updated dependencies [f5178a2]
1296
+ - Updated dependencies [2ad3671]
1297
+ - Updated dependencies [8740e86]
1298
+ - Updated dependencies [6ea68e6]
1299
+ - Updated dependencies [d22b37b]
1300
+ - Updated dependencies [1daf477]
1301
+ - Updated dependencies [3d614ea]
1302
+ - Updated dependencies [6c2f3c5]
1303
+ - Updated dependencies [fb13e85]
1304
+ - Updated dependencies [c2d8659]
1305
+ - Updated dependencies [e0f8202]
1306
+ - Updated dependencies [cc07476]
1307
+ - Updated dependencies [f99f9cd]
1308
+ - Updated dependencies [ac2d6f1]
1309
+ - Updated dependencies [4a3d500]
1310
+ - Updated dependencies [9fbbb17]
1311
+ - Updated dependencies [c3a26cc]
1312
+ - Updated dependencies [a66e58e]
1313
+ - Updated dependencies [d89492c]
1314
+ - Updated dependencies [9a5f998]
1315
+ - Updated dependencies [0c3f70a]
1316
+ - Updated dependencies [9327397]
1317
+ - Updated dependencies [17cc3a3]
1318
+ - Updated dependencies [41dcbd5]
1319
+ - Updated dependencies [02e6d36]
1320
+ - Updated dependencies [4758b33]
1321
+ - Updated dependencies [4758b33]
1322
+ - Updated dependencies [5c61e52]
1323
+ - Updated dependencies [f905090]
1324
+ - Updated dependencies [9c78ebe]
1325
+ - Updated dependencies [9c78ebe]
1326
+ - Updated dependencies [12809a5]
1327
+ - Updated dependencies [9c78ebe]
1328
+ - Updated dependencies [12809a5]
1329
+ - Updated dependencies [1ea21c4]
1330
+ - Updated dependencies [7afc81d]
1331
+ - Updated dependencies [f9c06ef]
1332
+ - Updated dependencies [ee6f6c6]
1333
+ - Updated dependencies [b526480]
1334
+ - Updated dependencies [5ad3b88]
1335
+ - Updated dependencies [be0ad00]
1336
+ - Updated dependencies [f9d772b]
1337
+ - Updated dependencies [bf14b64]
1338
+ - Updated dependencies [4345558]
1339
+ - Updated dependencies [704e05b]
1340
+ - Updated dependencies [97b6c21]
1341
+ - Updated dependencies [c58b8e4]
1342
+ - Updated dependencies [26ca2ad]
1343
+ - Updated dependencies [cf00ea8]
1344
+ - Updated dependencies [41ae65b]
1345
+ - Updated dependencies [baac95a]
1346
+ - Updated dependencies [0896838]
1347
+ - Updated dependencies [13220af]
1348
+ - Updated dependencies [29b45f6]
1349
+ - Updated dependencies [39b8d51]
1350
+ - Updated dependencies [17b323e]
1351
+ - Updated dependencies [b956e69]
1352
+ - Updated dependencies [f812f37]
1353
+ - Updated dependencies [b32e7de]
1354
+ - Updated dependencies [33e58d8]
1355
+ - Updated dependencies [256b4c9]
1356
+ - Updated dependencies [c5ec15c]
1357
+ - Updated dependencies [fec3b1a]
1358
+ - Updated dependencies [b8e0941]
1359
+ - Updated dependencies [0c50f18]
1360
+ - Updated dependencies [1dae95a]
1361
+ - Updated dependencies [e32dae1]
1362
+ - Updated dependencies [ed76b1b]
1363
+ - Updated dependencies [30b11ad]
1364
+ - Updated dependencies [4aebea0]
1365
+ - Updated dependencies [f976774]
1366
+ - Updated dependencies [3d6badf]
1367
+ - Updated dependencies [25cb364]
1368
+ - Updated dependencies [a60539b]
1369
+ - Updated dependencies [de1b879]
1370
+ - Updated dependencies [c6678b1]
1371
+ - Updated dependencies [0638322]
1372
+ - Updated dependencies [e3782d2]
1373
+ - Updated dependencies [db0beb2]
1374
+ - Updated dependencies [997ce38]
1375
+ - Updated dependencies [ae0b9d3]
1376
+ - Updated dependencies [ad1785c]
1377
+ - Updated dependencies [3b469c8]
1378
+ - Updated dependencies [e3782d2]
1379
+ - Updated dependencies [990a2d6]
1380
+ - Updated dependencies [37140f4]
1381
+ - Updated dependencies [37140f4]
1382
+ - Updated dependencies [ad1785c]
1383
+ - Updated dependencies [1c84036]
1384
+ - Updated dependencies [1c84036]
1385
+ - Updated dependencies [6650259]
1386
+ - Updated dependencies [4f8b7f8]
1387
+ - Updated dependencies [9e6619f]
1388
+ - Updated dependencies [f6ae5e2]
1389
+ - Updated dependencies [eb97ce6]
1390
+ - Updated dependencies [7343376]
1391
+ - Updated dependencies [b2683a2]
1392
+ - Updated dependencies [dded788]
1393
+ - Updated dependencies [b45d463]
1394
+ - Updated dependencies [54a7830]
1395
+ - Updated dependencies [f3135a4]
1396
+ - Updated dependencies [b5696d3]
1397
+ - Updated dependencies [3f9d926]
1398
+ - Updated dependencies [e978ed5]
1399
+ - Updated dependencies [6a7f24e]
1400
+ - Updated dependencies [b3c96d6]
1401
+ - Updated dependencies [8d0ca91]
1402
+ - Updated dependencies [c30c8dd]
1403
+ - Updated dependencies [244d516]
1404
+ - Updated dependencies [deca847]
1405
+ - Updated dependencies [ac15833]
1406
+ - Updated dependencies [ac15833]
1407
+ - Updated dependencies [e2dffc9]
1408
+ - Updated dependencies [328abeb]
1409
+ - Updated dependencies [dd0d78f]
1410
+ - Updated dependencies [24d3e65]
1411
+ - Updated dependencies [95a7c8d]
1412
+ - Updated dependencies [e227156]
1413
+ - Updated dependencies [cc4e476]
1414
+ - Updated dependencies [8aa68b1]
1415
+ - Updated dependencies [92970c4]
1416
+ - Updated dependencies [d570eaa]
1417
+ - Updated dependencies [4b742f4]
1418
+ - Updated dependencies [42687ba]
1419
+ - Updated dependencies [6cd8f66]
1420
+ - Updated dependencies [24a0f14]
1421
+ - Updated dependencies [797a30f]
1422
+ - Updated dependencies [27ae632]
1423
+ - Updated dependencies [0bc5c5a]
1424
+ - Updated dependencies [b4075c0]
1425
+ - Updated dependencies [9b85600]
1426
+ - Updated dependencies [e327c89]
1427
+ - Updated dependencies [2eaf5be]
1428
+ - Updated dependencies [bf7ab35]
1429
+ - Updated dependencies [99878d8]
1430
+ - Updated dependencies [3c13675]
1431
+ - Updated dependencies [63ab761]
1432
+ - Updated dependencies [7e4fa1b]
1433
+ - Updated dependencies [d0ae5d0]
1434
+ - Updated dependencies [0eb9f36]
1435
+ - Updated dependencies [ae582b7]
1436
+ - Updated dependencies [51c2949]
1437
+ - Updated dependencies [a4b017e]
1438
+ - Updated dependencies [8732846]
1439
+ - Updated dependencies [559a2e2]
1440
+ - Updated dependencies [db11afd]
1441
+ - Updated dependencies [154075a]
1442
+ - Updated dependencies [582edef]
1443
+ - Updated dependencies [19f484f]
1444
+ - Updated dependencies [0a78a20]
1445
+ - Updated dependencies [615346d]
1446
+ - Updated dependencies [75dcc81]
1447
+ - Updated dependencies [55a12a8]
1448
+ - Updated dependencies [edfcf5a]
1449
+ - Updated dependencies [0a3e540]
1450
+ - Updated dependencies [c021b35]
1451
+ - Updated dependencies [f61dab1]
1452
+ - Updated dependencies [b0a05dd]
1453
+ - Updated dependencies [dd5ff19]
1454
+ - Updated dependencies [54997ff]
1455
+ - Updated dependencies [81f8498]
1456
+ - Updated dependencies [a782fa7]
1457
+ - Updated dependencies [1d6a23d]
1458
+ - Updated dependencies [0645133]
1459
+ - Updated dependencies [76e9df0]
1460
+ - Updated dependencies [0ecaa7d]
1461
+ - Updated dependencies [b24f93a]
1462
+ - Updated dependencies [6158e4c]
1463
+ - Updated dependencies [cff8641]
1464
+ - Updated dependencies [3100bef]
1465
+ - Updated dependencies [c27b575]
1466
+ - Updated dependencies [3fa1938]
1467
+ - Updated dependencies [84b275c]
1468
+ - Updated dependencies [0e6e76b]
1469
+ - Updated dependencies [bf43afa]
1470
+ - Updated dependencies [385ebc5]
1471
+ - Updated dependencies [1923d35]
1472
+ - Updated dependencies [858eafb]
1473
+ - Updated dependencies [263dcd7]
1474
+ - Updated dependencies [a8c5509]
1475
+ - Updated dependencies [c2a8d23]
1476
+ - Updated dependencies [0ffc423]
1477
+ - Updated dependencies [3cc4fe5]
1478
+ - Updated dependencies [cd5b19a]
1479
+ - Updated dependencies [cd5b19a]
1480
+ - Updated dependencies [17dc167]
1481
+ - Updated dependencies [17dc167]
1482
+ - Updated dependencies [20d23be]
1483
+ - Updated dependencies [20d23be]
1484
+ - Updated dependencies [2e3da72]
1485
+ - Updated dependencies [1263e40]
1486
+ - Updated dependencies [e6bc087]
1487
+ - Updated dependencies [1ccb5ba]
1488
+ - Updated dependencies [9419df1]
1489
+ - Updated dependencies [c18a075]
1490
+ - Updated dependencies [8bab157]
1491
+ - Updated dependencies [a7557a7]
1492
+ - Updated dependencies [7d074ba]
1493
+ - Updated dependencies [6158e4c]
1494
+ - Updated dependencies [6158e4c]
1495
+ - Updated dependencies [52aad5c]
1496
+ - Updated dependencies [18d1a0a]
1497
+ - Updated dependencies [7fed09d]
1498
+ - Updated dependencies [1563d3e]
1499
+ - Updated dependencies [b149617]
1500
+ - Updated dependencies [58da8ae]
1501
+ - Updated dependencies [a8b9889]
1502
+ - Updated dependencies [138ad45]
1503
+ - Updated dependencies [138ad45]
1504
+ - Updated dependencies [5262f7d]
1505
+ - Updated dependencies [6aa029b]
1506
+ - Updated dependencies [6aa029b]
1507
+ - Updated dependencies [2124d04]
1508
+ - Updated dependencies [be52115]
1509
+ - Updated dependencies [be52115]
1510
+ - Updated dependencies [770cc5b]
1511
+ - Updated dependencies [770cc5b]
1512
+ - Updated dependencies [d893290]
1513
+ - Updated dependencies [1a88ce2]
1514
+ - Updated dependencies [a1a44d6]
1515
+ - Updated dependencies [e0a9c67]
1516
+ - Updated dependencies [5638529]
1517
+ - Updated dependencies [5638529]
1518
+ - Updated dependencies [5638529]
1519
+ - Updated dependencies [d0fba91]
1520
+ - Updated dependencies [c476be0]
1521
+ - Updated dependencies [c82ff39]
1522
+ - Updated dependencies [6c3da53]
1523
+ - Updated dependencies [31987bd]
1524
+ - Updated dependencies [3c3ce15]
1525
+ - Updated dependencies [063119f]
1526
+ - Updated dependencies [5ad9f5d]
1527
+ - Updated dependencies [e100589]
1528
+ - Updated dependencies [304f611]
1529
+ - Updated dependencies [e46ee77]
1530
+ - Updated dependencies [f9c8c4e]
1531
+ - Updated dependencies [6e9c8d2]
1532
+ - Updated dependencies [7728c67]
1533
+ - Updated dependencies [9547063]
1534
+ - Updated dependencies [3f6efd6]
1535
+ - Updated dependencies [55d18c6]
1536
+ - Updated dependencies [c4ab6d0]
1537
+ - Updated dependencies [0e9058b]
1538
+ - Updated dependencies [c4ab6d0]
1539
+ - Updated dependencies [5988b6b]
1540
+ - Updated dependencies [6158e4c]
1541
+ - Updated dependencies [00ccdf7]
1542
+ - Updated dependencies [9d9ed54]
1543
+ - Updated dependencies [9d1c0bf]
1544
+ - Updated dependencies [4a1adb7]
1545
+ - Updated dependencies [4a1adb7]
1546
+ - Updated dependencies [4a1adb7]
1547
+ - Updated dependencies [50c73fe]
1548
+ - Updated dependencies [ca3de72]
1549
+ - Updated dependencies [83e3f83]
1550
+ - Updated dependencies [401611b]
1551
+ - Updated dependencies [2c0ddf2]
1552
+ - Updated dependencies [4abc0aa]
1553
+ - Updated dependencies [f560ded]
1554
+ - Updated dependencies [f560ded]
1555
+ - Updated dependencies [2b188fa]
1556
+ - Updated dependencies [b654d4e]
1557
+ - Updated dependencies [f68e0a0]
1558
+ - Updated dependencies [aea682a]
1559
+ - Updated dependencies [fcdc8ec]
1560
+ - Updated dependencies [fcdc8ec]
1561
+ - Updated dependencies [2d576e4]
1562
+ - Updated dependencies [8366acc]
1563
+ - Updated dependencies [95e58a3]
1564
+ - Updated dependencies [9d7419b]
1565
+ - Updated dependencies [fc7db05]
1566
+ - Updated dependencies [9ed8d0f]
1567
+ - Updated dependencies [c73cdb5]
1568
+ - Updated dependencies [6f5719e]
1569
+ - Updated dependencies [072b7e8]
1570
+ - Updated dependencies [b0bf413]
1571
+ - Updated dependencies [dbd1081]
1572
+ - Updated dependencies [2f54dca]
1573
+ - Updated dependencies [d0097af]
1574
+ - Updated dependencies [9c74902]
1575
+ - Updated dependencies [432882b]
1576
+ - Updated dependencies [64dae8e]
1577
+ - Updated dependencies [b06e374]
1578
+ - Updated dependencies [06a8af5]
1579
+ - Updated dependencies [6a91586]
1580
+ - Updated dependencies [a04d7c6]
1581
+ - Updated dependencies [5ccc500]
1582
+ - Updated dependencies [f3c2bb0]
1583
+ - Updated dependencies [978507b]
1584
+ - Updated dependencies [778138e]
1585
+ - Updated dependencies [9801765]
1586
+ - Updated dependencies [9cebfca]
1587
+ - Updated dependencies [460575f]
1588
+ - Updated dependencies [d796c8d]
1589
+ - Updated dependencies [594704f]
1590
+ - Updated dependencies [d3995fe]
1591
+ - Updated dependencies [1b1d772]
1592
+ - Updated dependencies [d88e20f]
1593
+ - Updated dependencies [2d7304d]
1594
+ - Updated dependencies [062943f]
1595
+ - Updated dependencies [993f312]
1596
+ - Updated dependencies [636b236]
1597
+ - Updated dependencies [4172589]
1598
+ - Updated dependencies [d6d8fb9]
1599
+ - Updated dependencies [64d624d]
1600
+ - Updated dependencies [053fdc8]
1601
+ - Updated dependencies [41b7ce3]
1602
+ - Updated dependencies [ae476b8]
1603
+ - Updated dependencies [67a87d9]
1604
+ - Updated dependencies [39f4309]
1605
+ - Updated dependencies [95bad12]
1606
+ - Updated dependencies [d2fb6ef]
1607
+ - Updated dependencies [7cd3987]
1608
+ - Updated dependencies [ee3b878]
1609
+ - Updated dependencies [e304a4e]
1610
+ - Updated dependencies [fda49e5]
1611
+ - Updated dependencies [94e2fa7]
1612
+ - Updated dependencies [490d9a9]
1613
+ - Updated dependencies [fc62bb4]
1614
+ - Updated dependencies [41df893]
1615
+ - Updated dependencies [0cba1b7]
1616
+ - Updated dependencies [3e853c9]
1617
+ - Updated dependencies [00f3eb5]
1618
+ - Updated dependencies [1ec291c]
1619
+ - Updated dependencies [453dbaa]
1620
+ - Updated dependencies [95f8704]
1621
+ - Updated dependencies [f8cdbf2]
1622
+ - Updated dependencies [69a2163]
1623
+ - Updated dependencies [24e027e]
1624
+ - Updated dependencies [2c3cd1b]
1625
+ - Updated dependencies [e176053]
1626
+ - Updated dependencies [e30ed15]
1627
+ - Updated dependencies [17ccec9]
1628
+ - Updated dependencies [90665e0]
1629
+ - Updated dependencies [8d3a529]
1630
+ - Updated dependencies [5ac2e2c]
1631
+ - Updated dependencies [194fae1]
1632
+ - Updated dependencies [7e19d03]
1633
+ - Updated dependencies [beccf1c]
1634
+ - Updated dependencies [b08b7eb]
1635
+ - Updated dependencies [1e946c9]
1636
+ - Updated dependencies [546ddf7]
1637
+ - Updated dependencies [864154e]
1638
+ - Updated dependencies [b023625]
1639
+ - Updated dependencies [75bd83d]
1640
+ - Updated dependencies [7a72422]
1641
+ - Updated dependencies [44d075b]
1642
+ - Updated dependencies [40c479a]
1643
+ - Updated dependencies [5173a5e]
1644
+ - Updated dependencies [971d387]
1645
+ - Updated dependencies [ee851c3]
1646
+ - Updated dependencies [6414dfd]
1647
+ - Updated dependencies [a8d5c71]
1648
+ - Updated dependencies [905b21f]
1649
+ - Updated dependencies [88e9109]
1650
+ - Updated dependencies [2c45966]
1651
+ - Updated dependencies [db3a600]
1652
+ - Updated dependencies [3a3db76]
1653
+ - Updated dependencies [0d723a3]
1654
+ - Updated dependencies [0c95d3d]
1655
+ - Updated dependencies [3e4fa2c]
1656
+ - Updated dependencies [b5b928a]
1657
+ - Updated dependencies [6fd2cf7]
1658
+ - Updated dependencies [5fa06c4]
1659
+ - Updated dependencies [52a43de]
1660
+ - Updated dependencies [195052f]
1661
+ - Updated dependencies [e4559d1]
1662
+ - Updated dependencies [2c71482]
1663
+ - Updated dependencies [129bcc5]
1664
+ - Updated dependencies [c9a7252]
1665
+ - Updated dependencies [5f19b92]
1666
+ - Updated dependencies [a26b9e4]
1667
+ - Updated dependencies [5ef9c4f]
1668
+ - Updated dependencies [e0b289d]
1669
+ - Updated dependencies [46f0bb4]
1670
+ - Updated dependencies [2da6441]
1671
+ - Updated dependencies [3b9c774]
1672
+ - Updated dependencies [06b82b8]
1673
+ - Updated dependencies [8ec11e1]
1674
+ - Updated dependencies [6f81384]
1675
+ - Updated dependencies [22ba927]
1676
+ - Updated dependencies [f8c70f4]
1677
+ - Updated dependencies [5d3a2d1]
1678
+ - Updated dependencies [c38162d]
1679
+ - Updated dependencies [8f1d995]
1680
+ - Updated dependencies [b362c1b]
1681
+ - Updated dependencies [5127378]
1682
+ - Updated dependencies [f9c34df]
1683
+ - Updated dependencies [dddb942]
1684
+ - Updated dependencies [00c665e]
1685
+ - Updated dependencies [29754cf]
1686
+ - Updated dependencies [d7de534]
1687
+ - Updated dependencies [3c2b6f7]
1688
+ - Updated dependencies [6e88630]
1689
+ - Updated dependencies [b84dc18]
1690
+ - Updated dependencies [ac8abb0]
1691
+ - Updated dependencies [9d86e1d]
1692
+ - Updated dependencies [3a5817f]
1693
+ - Updated dependencies [99a3c2d]
1694
+ - Updated dependencies [1c19722]
1695
+ - Updated dependencies [5961030]
1696
+ - Updated dependencies [faa863d]
1697
+ - Updated dependencies [fd814d6]
1698
+ - Updated dependencies [f24de8b]
1699
+ - Updated dependencies [c8ea8af]
1700
+ - Updated dependencies [9602dc8]
1701
+ - Updated dependencies [3190414]
1702
+ - Updated dependencies [4e480f5]
1703
+ - Updated dependencies [38a123c]
1704
+ - Updated dependencies [299102e]
1705
+ - Updated dependencies [30c73cd]
1706
+ - Updated dependencies [c4987fb]
1707
+ - Updated dependencies [f55d666]
1708
+ - Updated dependencies [f241a4d]
1709
+ - Updated dependencies [830ed58]
1710
+ - Updated dependencies [d7acad6]
1711
+ - Updated dependencies [45a9aeb]
1712
+ - Updated dependencies [713db46]
1713
+ - Updated dependencies [c71e14d]
1714
+ - Updated dependencies [bf3a03c]
1715
+ - Updated dependencies [cb55718]
1716
+ - Updated dependencies [748494b]
1717
+ - Updated dependencies [5967be0]
1718
+ - Updated dependencies [831be72]
1719
+ - Updated dependencies [29cb85b]
1720
+ - Updated dependencies [3e028c8]
1721
+ - Updated dependencies [d0889e2]
1722
+ - Updated dependencies [ce503e5]
1723
+ - Updated dependencies [f20dcf0]
1724
+ - Updated dependencies [12402a9]
1725
+ - Updated dependencies [aff3d7a]
1726
+ - Updated dependencies [4ca30d0]
1727
+ - Updated dependencies [7a5da14]
1728
+ - Updated dependencies [fff9645]
1729
+ - Updated dependencies [9c3b7ce]
1730
+ - Updated dependencies [2c1c967]
1731
+ - Updated dependencies [9486ac6]
1732
+ - Updated dependencies [9486ac6]
1733
+ - Updated dependencies [4d5f9b4]
1734
+ - Updated dependencies [d6ceb8d]
1735
+ - Updated dependencies [dc4365c]
1736
+ - Updated dependencies [e321d52]
1737
+ - Updated dependencies [969ba84]
1738
+ - Updated dependencies [4c68077]
1739
+ - Updated dependencies [7977ff9]
1740
+ - Updated dependencies [4ac3769]
1741
+ - Updated dependencies [3beef6d]
1742
+ - Updated dependencies [06b8c42]
1743
+ - Updated dependencies [46b9bc9]
1744
+ - Updated dependencies [19f3637]
1745
+ - Updated dependencies [9bd08fe]
1746
+ - Updated dependencies [b97790a]
1747
+ - Updated dependencies [dbd5194]
1748
+ - Updated dependencies [7c9b044]
1749
+ - Updated dependencies [d47de51]
1750
+ - Updated dependencies [3fe6463]
1751
+ - Updated dependencies [b392674]
1752
+ - Updated dependencies [4f3a1e2]
1753
+ - Updated dependencies [31ab372]
1754
+ - Updated dependencies [846889b]
1755
+ - Updated dependencies [2acd8e1]
1756
+ - Updated dependencies [26896c6]
1757
+ - Updated dependencies [67fc3b0]
1758
+ - Updated dependencies [fab4802]
1759
+ - Updated dependencies [33a3b3c]
1760
+ - Updated dependencies [b87f15b]
1761
+ - Updated dependencies [f07b976]
1762
+ - Updated dependencies [045d20b]
1763
+ - Updated dependencies [a2d2515]
1764
+ - Updated dependencies [c18d099]
1765
+ - Updated dependencies [adb2a86]
1766
+ - Updated dependencies [503cd8b]
1767
+ - Updated dependencies [03380aa]
1768
+ - Updated dependencies [d9a0490]
1769
+ - Updated dependencies [f9984c0]
1770
+ - Updated dependencies [9700dd9]
1771
+ - Updated dependencies [4562ea5]
1772
+ - Updated dependencies [3619792]
1773
+ - Updated dependencies [3561bd2]
1774
+ - Updated dependencies [bf97b98]
1775
+ - Updated dependencies [320374d]
1776
+ - Updated dependencies [b0d308d]
1777
+ - Updated dependencies [1349400]
1778
+ - Updated dependencies [40f34b4]
1779
+ - Updated dependencies [8063bcb]
1780
+ - Updated dependencies [b74a859]
1781
+ - Updated dependencies [d4493fd]
1782
+ - Updated dependencies [240b80f]
1783
+ - Updated dependencies [77cb489]
1784
+ - Updated dependencies [bfaa158]
1785
+ - Updated dependencies [777e5c6]
1786
+ - Updated dependencies [0c386dd]
1787
+ - Updated dependencies [9e37d9b]
1788
+ - Updated dependencies [5ad86dd]
1789
+ - Updated dependencies [16a725f]
1790
+ - Updated dependencies [4dfdcc3]
1791
+ - Updated dependencies [6a449fc]
1792
+ - Updated dependencies [ce986aa]
1793
+ - Updated dependencies [446d93d]
1794
+ - Updated dependencies [ecd9cb2]
1795
+ - Updated dependencies [98d4108]
1796
+ - Updated dependencies [0e3b3be]
1797
+ - Updated dependencies [512bc90]
1798
+ - Updated dependencies [a29ae2d]
1799
+ - Updated dependencies [220c18d]
1800
+ - Updated dependencies [00d3f09]
1801
+ - Updated dependencies [4388f71]
1802
+ - Updated dependencies [0b1ac58]
1803
+ - Updated dependencies [c93b4d5]
1804
+ - Updated dependencies [c1fe272]
1805
+ - Updated dependencies [3cab570]
1806
+ - Updated dependencies [8ad218d]
1807
+ - Updated dependencies [3e41187]
1808
+ - Updated dependencies [5f78953]
1809
+ - Updated dependencies [639114c]
1810
+ - Updated dependencies [639114c]
1811
+ - Updated dependencies [639114c]
1812
+ - Updated dependencies [1490691]
1813
+ - Updated dependencies [1f31d3a]
1814
+ - Updated dependencies [d1842ab]
1815
+ - Updated dependencies [78ca238]
1816
+ - Updated dependencies [d8ec8d6]
1817
+ - Updated dependencies [351eb31]
1818
+ - Updated dependencies [866cd1d]
1819
+ - Updated dependencies [20c04b2]
1820
+ - Updated dependencies [84ffdbc]
1821
+ - Updated dependencies [a276480]
1822
+ - Updated dependencies [01c9023]
1823
+ - Updated dependencies [48c19bd]
1824
+ - Updated dependencies [a6d8b8d]
1825
+ - Updated dependencies [4b5bb95]
1826
+ - Updated dependencies [b652514]
1827
+ - Updated dependencies [adbda1b]
1828
+ - Updated dependencies [adbda1b]
1829
+ - Updated dependencies [adbda1b]
1830
+ - Updated dependencies [8952395]
1831
+ - Updated dependencies [e2b3826]
1832
+ - Updated dependencies [0348bc9]
1833
+ - Updated dependencies [e8c553b]
1834
+ - Updated dependencies [2e32ed4]
1835
+ - Updated dependencies [3ed3eec]
1836
+ - Updated dependencies [7c3df8f]
1837
+ - Updated dependencies [67dadd6]
1838
+ - Updated dependencies [e21308e]
1839
+ - Updated dependencies [a4514e8]
1840
+ - Updated dependencies [db3896c]
1841
+ - Updated dependencies [b9f5ff1]
1842
+ - Updated dependencies [e75f4c9]
1843
+ - Updated dependencies [19f1639]
1844
+ - Updated dependencies [4704aa4]
1845
+ - Updated dependencies [47547d0]
1846
+ - Updated dependencies [1bee5d0]
1847
+ - Updated dependencies [63a8828]
1848
+ - Updated dependencies [858cd72]
1849
+ - Updated dependencies [cfc9b6d]
1850
+ - Updated dependencies [554f2b6]
1851
+ - Updated dependencies [72f55c9]
1852
+ - Updated dependencies [26e06d7]
1853
+ - Updated dependencies [669d71b]
1854
+ - Updated dependencies [6a99bb2]
1855
+ - Updated dependencies [2d3fe73]
1856
+ - Updated dependencies [ed27d7c]
1857
+ - Updated dependencies [7dedec6]
1858
+ - Updated dependencies [52c8cf7]
1859
+ - Updated dependencies [2ceb43a]
1860
+ - Updated dependencies [0809f8a]
1861
+ - Updated dependencies [7cdd2b9]
1862
+ - Updated dependencies [52c8cf7]
1863
+ - Updated dependencies [3399704]
1864
+ - Updated dependencies [71a4a53]
1865
+ - Updated dependencies [7bf244b]
1866
+ - Updated dependencies [f0bb9fa]
1867
+ - Updated dependencies [81a2eb1]
1868
+ - Updated dependencies [caa0cd3]
1869
+ - Updated dependencies [caa0cd3]
1870
+ - Updated dependencies [20cb8db]
1871
+ - Updated dependencies [25c7d58]
1872
+ - Updated dependencies [00d2fa6]
1873
+ - Updated dependencies [77b2a18]
1874
+ - Updated dependencies [c6198c2]
1875
+ - Updated dependencies [721d1e0]
1876
+ - Updated dependencies [c2f0f48]
1877
+ - Updated dependencies [1237ae4]
1878
+ - Updated dependencies [2f61238]
1879
+ - Updated dependencies [51eb515]
1880
+ - Updated dependencies [c354ce5]
1881
+ - Updated dependencies [8fe8e5c]
1882
+ - Updated dependencies [feac439]
1883
+ - Updated dependencies [9ae871d]
1884
+ - Updated dependencies [efbd566]
1885
+ - Updated dependencies [2a5bf45]
1886
+ - Updated dependencies [9587fc9]
1887
+ - Updated dependencies [e62c44e]
1888
+ - Updated dependencies [daf9d57]
1889
+ - Updated dependencies [23b9958]
1890
+ - Updated dependencies [c15d7ec]
1891
+ - Updated dependencies [5d0876c]
1892
+ - Updated dependencies [f7ace0a]
1893
+ - Updated dependencies [b041b9c]
1894
+ - Updated dependencies [ce2aaef]
1895
+ - Updated dependencies [544ecba]
1896
+ - Updated dependencies [2ce2612]
1897
+ - Updated dependencies [bc640ec]
1898
+ - Updated dependencies [1e215c4]
1899
+ - Updated dependencies [da6e191]
1900
+ - Updated dependencies [3e377c9]
1901
+ - Updated dependencies [a3eb5d0]
1902
+ - Updated dependencies [4ce14f1]
1903
+ - Updated dependencies [aef97e5]
1904
+ - Updated dependencies [2af1fa7]
1905
+ - Updated dependencies [c14d3a0]
1906
+ - Updated dependencies [a137d0c]
1907
+ - Updated dependencies [caf477f]
1908
+ - Updated dependencies [f6375da]
1909
+ - Updated dependencies [967e5d8]
1910
+ - Updated dependencies [c907a9c]
1911
+ - Updated dependencies [a4611b3]
1912
+ - Updated dependencies [20316ba]
1913
+ - Updated dependencies [d3499b3]
1914
+ - Updated dependencies [91f9276]
1915
+ - Updated dependencies [309c75e]
1916
+ - Updated dependencies [c9f9bae]
1917
+ - Updated dependencies [18897a4]
1918
+ - Updated dependencies [8b7ea39]
1919
+ - Updated dependencies [a915064]
1920
+ - Updated dependencies [dcbf0b2]
1921
+ - Updated dependencies [52cac38]
1922
+ - Updated dependencies [93fea2e]
1923
+ - Updated dependencies [53ded82]
1924
+ - Updated dependencies [1422a92]
1925
+ - Updated dependencies [d05fe17]
1926
+ - Updated dependencies [a480f79]
1927
+ - Updated dependencies [f08d1a8]
1928
+ - Updated dependencies [64a252d]
1929
+ - Updated dependencies [786bc91]
1930
+ - Updated dependencies [75fca96]
1931
+ - Updated dependencies [7ca6ddd]
1932
+ - Updated dependencies [f1cd290]
1933
+ - Updated dependencies [5a41ce7]
1934
+ - Updated dependencies [8d50bc2]
1935
+ - Updated dependencies [604476d]
1936
+ - Updated dependencies [d1bebb0]
1937
+ - Updated dependencies [95bf128]
1938
+ - Updated dependencies [335abea]
1939
+ - Updated dependencies [edea22a]
1940
+ - Updated dependencies [0f5cadf]
1941
+ - Updated dependencies [4f9f1ee]
1942
+ - Updated dependencies [66e8b2a]
1943
+ - Updated dependencies [aa083cd]
1944
+ - Updated dependencies [12b5992]
1945
+ - Updated dependencies [b93e245]
1946
+ - Updated dependencies [c842594]
1947
+ - Updated dependencies [290de37]
1948
+ - Updated dependencies [e1c27e4]
1949
+ - Updated dependencies [8c8da45]
1950
+ - Updated dependencies [8cd8eb5]
1951
+ - Updated dependencies [cf1d29e]
1952
+ - Updated dependencies [1bd79c8]
1953
+ - Updated dependencies [af9e957]
1954
+ - Updated dependencies [b1030c7]
1955
+ - Updated dependencies [c974edf]
1956
+ - Updated dependencies [ad852b6]
1957
+ - Updated dependencies [6778809]
1958
+ - Updated dependencies [7fb22a1]
1959
+ - Updated dependencies [ad66d79]
1960
+ - Updated dependencies [0758bd8]
1961
+ - Updated dependencies [ee4d19f]
1962
+ - Updated dependencies [496d31d]
1963
+ - Updated dependencies [f57ca75]
1964
+ - Updated dependencies [0ea7054]
1965
+ - Updated dependencies [9a853f2]
1966
+ - Updated dependencies [cb847fd]
1967
+ - Updated dependencies [ee70287]
1968
+ - Updated dependencies [3e98e13]
1969
+ - Updated dependencies [a695f50]
1970
+ - Updated dependencies [fc32921]
1971
+ - Updated dependencies [4eaa835]
1972
+ - Updated dependencies [8f9d87a]
1973
+ - Updated dependencies [b1777ae]
1974
+ - Updated dependencies [24845c4]
1975
+ - Updated dependencies [6f864cf]
1976
+ - Updated dependencies [f4abff4]
1977
+ - Updated dependencies [24d1edd]
1978
+ - Updated dependencies [645087c]
1979
+ - Updated dependencies [33f4a19]
1980
+ - Updated dependencies [6e9a3d4]
1981
+ - Updated dependencies [4a292d2]
1982
+ - Updated dependencies [5323168]
1983
+ - Updated dependencies [841dd2b]
1984
+ - Updated dependencies [3014fc0]
1985
+ - Updated dependencies [dacb402]
1986
+ - Updated dependencies [846cec0]
1987
+ - Updated dependencies [91facae]
1988
+ - Updated dependencies [b38014e]
1989
+ - Updated dependencies [474797d]
1990
+ - Updated dependencies [704e695]
1991
+ - Updated dependencies [a407bd6]
1992
+ - Updated dependencies [317dbce]
1993
+ - Updated dependencies [309728c]
1994
+ - Updated dependencies [c03d03b]
1995
+ - Updated dependencies [aa08d7e]
1996
+ - Updated dependencies [3a43a15]
1997
+ - Updated dependencies [868e825]
1998
+ - Updated dependencies [f76f436]
1999
+ - Updated dependencies [ce45a03]
2000
+ - Updated dependencies [421544b]
2001
+ - Updated dependencies [fb01022]
2002
+ - Updated dependencies [e9d9212]
2003
+ - Updated dependencies [ecfb693]
2004
+ - Updated dependencies [40a7c53]
2005
+ - Updated dependencies [abc1b18]
2006
+ - Updated dependencies [81a51db]
2007
+ - Updated dependencies [67749c7]
2008
+ - Updated dependencies [507b61b]
2009
+ - Updated dependencies [270f282]
2010
+ - Updated dependencies [512c84b]
2011
+ - Updated dependencies [c300267]
2012
+ - Updated dependencies [fb3a101]
2013
+ - Updated dependencies [d4733f2]
2014
+ - Updated dependencies [7c9145f]
2015
+ - Updated dependencies [1570eac]
2016
+ - Updated dependencies [f391ede]
2017
+ - Updated dependencies [f5cfbbd]
2018
+ - Updated dependencies [f5cfbbd]
2019
+ - Updated dependencies [8b532cb]
2020
+ - Updated dependencies [64c3cdd]
2021
+ - Updated dependencies [4d65991]
2022
+ - Updated dependencies [c42554e]
2023
+ - Updated dependencies [555b4ec]
2024
+ - Updated dependencies [1ccfc23]
2025
+ - Updated dependencies [542718f]
2026
+ - Updated dependencies [7f27bc5]
2027
+ - Updated dependencies [0a174f3]
2028
+ - Updated dependencies [676f677]
2029
+ - Updated dependencies [0febe1a]
2030
+ - Updated dependencies [6fda1a9]
2031
+ - Updated dependencies [f95b140]
2032
+ - Updated dependencies [541ce4e]
2033
+ - Updated dependencies [6479086]
2034
+ - Updated dependencies [d79f525]
2035
+ - Updated dependencies [d1865d2]
2036
+ - Updated dependencies [c5c0e2a]
2037
+ - Updated dependencies [9662aca]
2038
+ - Updated dependencies [55ba3ff]
2039
+ - Updated dependencies [baf3776]
2040
+ - Updated dependencies [c489260]
2041
+ - Updated dependencies [f1190b0]
2042
+ - Updated dependencies [8fda009]
2043
+ - Updated dependencies [fd9bf26]
2044
+ - Updated dependencies [561abef]
2045
+ - Updated dependencies [ef52001]
2046
+ - Updated dependencies [b8a0068]
2047
+ - Updated dependencies [6a4680b]
2048
+ - Updated dependencies [c3a4273]
2049
+ - Updated dependencies [c5faf06]
2050
+ - Updated dependencies [abf710d]
2051
+ - Updated dependencies [093af32]
2052
+ - Updated dependencies [1bd1be7]
2053
+ - Updated dependencies [d234fa9]
2054
+ - Updated dependencies [adf5812]
2055
+ - Updated dependencies [e36acd4]
2056
+ - Updated dependencies [5058336]
2057
+ - Updated dependencies [2f6b2bf]
2058
+ - Updated dependencies [60e1f80]
2059
+ - Updated dependencies [2028b31]
2060
+ - Updated dependencies [63601ab]
2061
+ - Updated dependencies [c372b29]
2062
+ - Updated dependencies [152f0a7]
2063
+ - Updated dependencies [8693b85]
2064
+ - Updated dependencies [bbf068d]
2065
+ - Updated dependencies [e82dad1]
2066
+ - Updated dependencies [58b7b3d]
2067
+ - Updated dependencies [84defab]
2068
+ - Updated dependencies [681d3f1]
2069
+ - Updated dependencies [969d4f2]
2070
+ - Updated dependencies [358aff8]
2071
+ - Updated dependencies [f3bc481]
2072
+ - Updated dependencies [b79aac2]
2073
+ - Updated dependencies [93fc0e7]
2074
+ - Updated dependencies [a4b723f]
2075
+ - Updated dependencies [2b10ca0]
2076
+ - Updated dependencies [7db4a81]
2077
+ - Updated dependencies [19a0b0e]
2078
+ - Updated dependencies [526fc11]
2079
+ - Updated dependencies [f8e3e9a]
2080
+ - Updated dependencies [b9d47ec]
2081
+ - Updated dependencies [3b6bc69]
2082
+ - Updated dependencies [6214db6]
2083
+ - Updated dependencies [6732df4]
2084
+ - Updated dependencies [fe9e0d0]
2085
+ - Updated dependencies [63fb72c]
2086
+ - Updated dependencies [0b8c638]
2087
+ - Updated dependencies [804831c]
2088
+ - Updated dependencies [279e48e]
2089
+ - Updated dependencies [8700d6d]
2090
+ - Updated dependencies [8db2a0f]
2091
+ - Updated dependencies [689953a]
2092
+ - Updated dependencies [30443fb]
2093
+ - Updated dependencies [8d3dbb2]
2094
+ - Updated dependencies [efc1c9c]
2095
+ - Updated dependencies [da45e6b]
2096
+ - Updated dependencies [7533465]
2097
+ - Updated dependencies [835f0f3]
2098
+ - Updated dependencies [a9d97be]
2099
+ - Updated dependencies [ed35b44]
2100
+ - Updated dependencies [9ba7e9c]
2101
+ - Updated dependencies [729e851]
2102
+ - Updated dependencies [96919a4]
2103
+ - Updated dependencies [345e24a]
2104
+ - Updated dependencies [20b507a]
2105
+ - Updated dependencies [2e471dc]
2106
+ - Updated dependencies [6748587]
2107
+ - Updated dependencies [be50942]
2108
+ - Updated dependencies [775e079]
2109
+ - Updated dependencies [7e8b3c0]
2110
+ - Updated dependencies [53374dc]
2111
+ - Updated dependencies [f6fb83f]
2112
+ - Updated dependencies [2049b03]
2113
+ - Updated dependencies [2bf34f7]
2114
+ - Updated dependencies [15b33ae]
2115
+ - Updated dependencies [7ec600d]
2116
+ - Updated dependencies [7cbc724]
2117
+ - Updated dependencies [4a94c38]
2118
+ - Updated dependencies [7098eed]
2119
+ - Updated dependencies [3df7c5c]
2120
+ - Updated dependencies [fb91ac9]
2121
+ - Updated dependencies [fb91ac9]
2122
+ - Updated dependencies [641fb55]
2123
+ - Updated dependencies [8524372]
2124
+ - Updated dependencies [7cbefa5]
2125
+ - Updated dependencies [03370ce]
2126
+ - Updated dependencies [72d6587]
2127
+ - Updated dependencies [a272a4f]
2128
+ - Updated dependencies [55f39ee]
2129
+ - Updated dependencies [502eb58]
2130
+ - Updated dependencies [0ce32d5]
2131
+ - Updated dependencies [0970a0e]
2132
+ - Updated dependencies [e427e9c]
2133
+ - Updated dependencies [bbc9dc3]
2134
+ - Updated dependencies [02f1813]
2135
+ - Updated dependencies [1ef89c0]
2136
+ - Updated dependencies [ba0b61a]
2137
+ - Updated dependencies [ba0b61a]
2138
+ - Updated dependencies [ac716ff]
2139
+ - Updated dependencies [f0f3cd5]
2140
+ - Updated dependencies [ab856ed]
2141
+ - Updated dependencies [20f3e65]
2142
+ - Updated dependencies [bbba098]
2143
+ - Updated dependencies [87af769]
2144
+ - Updated dependencies [3be720e]
2145
+ - Updated dependencies [43c0d17]
2146
+ - Updated dependencies [c3df43a]
2147
+ - Updated dependencies [d16d0e9]
2148
+ - Updated dependencies [bbe57fd]
2149
+ - Updated dependencies [272a530]
2150
+ - Updated dependencies [1779e8d]
2151
+ - Updated dependencies [f7fcc2c]
2152
+ - Updated dependencies [f0f4d6c]
2153
+ - Updated dependencies [6df9141]
2154
+ - Updated dependencies [3e4f632]
2155
+ - Updated dependencies [4128188]
2156
+ - Updated dependencies [269880a]
2157
+ - Updated dependencies [b253c4e]
2158
+ - Updated dependencies [78a9c67]
2159
+ - Updated dependencies [4a7ef0d]
2160
+ - Updated dependencies [4598f6d]
2161
+ - Updated dependencies [dea17b4]
2162
+ - Updated dependencies [89bb77a]
2163
+ - Updated dependencies [06611e4]
2164
+ - Updated dependencies [44152c4]
2165
+ - Updated dependencies [3939545]
2166
+ - Updated dependencies [66abbde]
2167
+ - Updated dependencies [dc3893d]
2168
+ - Updated dependencies [20b5e36]
2169
+ - Updated dependencies [1bbaa16]
2170
+ - Updated dependencies [6ee259a]
2171
+ - Updated dependencies [7649f43]
2172
+ - Updated dependencies [63bf47d]
2173
+ - Updated dependencies [5a311a3]
2174
+ - Updated dependencies [99c4eb8]
2175
+ - Updated dependencies [e708426]
2176
+ - Updated dependencies [3b6d53b]
2177
+ - Updated dependencies [276d174]
2178
+ - Updated dependencies [19d1f24]
2179
+ - Updated dependencies [8f37c4e]
2180
+ - Updated dependencies [62597c5]
2181
+ - Updated dependencies [2982ed9]
2182
+ - Updated dependencies [741864f]
2183
+ - Updated dependencies [58d65c5]
2184
+ - Updated dependencies [8813335]
2185
+ - Updated dependencies [509f8ed]
2186
+ - Updated dependencies [de5d400]
2187
+ - Updated dependencies [31d34cb]
2188
+ - Updated dependencies [a8198de]
2189
+ - Updated dependencies [0c789a4]
2190
+ - Updated dependencies [05a49f2]
2191
+ - Updated dependencies [76f1543]
2192
+ - Updated dependencies [b234a84]
2193
+ - Updated dependencies [a78cd37]
2194
+ - Updated dependencies [5ea623e]
2195
+ - Updated dependencies [9f7e846]
2196
+ - Updated dependencies [5eabe86]
2197
+ - Updated dependencies [ca5d671]
2198
+ - Updated dependencies [32bf2d6]
2199
+ - Updated dependencies [ff0c384]
2200
+ - Updated dependencies [af4fb29]
2201
+ - Updated dependencies [c698a81]
2202
+ - Updated dependencies [ff5ef1c]
2203
+ - Updated dependencies [befd40c]
2204
+ - Updated dependencies [9a97800]
2205
+ - Updated dependencies [6bca0e4]
2206
+ - Updated dependencies [81c0bc4]
2207
+ - Updated dependencies [3c76801]
2208
+ - Updated dependencies [b2e85a9]
2209
+ - Updated dependencies [60500cb]
2210
+ - Updated dependencies [d5c1f52]
2211
+ - Updated dependencies [c7cd2b6]
2212
+ - Updated dependencies [b2065e7]
2213
+ - Updated dependencies [2fcefb9]
2214
+ - Updated dependencies [77f846a]
2215
+ - Updated dependencies [bc5870c]
2216
+ - Updated dependencies [b55a346]
2217
+ - Updated dependencies [065bba7]
2218
+ - Updated dependencies [f760064]
2219
+ - Updated dependencies [dd19463]
2220
+ - Updated dependencies [6791717]
2221
+ - Updated dependencies [8ea3bee]
2222
+ - Updated dependencies [100547e]
2223
+ - Updated dependencies [3a58149]
2224
+ - Updated dependencies [6d1c155]
2225
+ - Updated dependencies [d7573b3]
2226
+ - Updated dependencies [bf3edfe]
2227
+ - Updated dependencies [2c8474c]
2228
+ - Updated dependencies [6ce89da]
2229
+ - Updated dependencies [0e05aac]
2230
+ - Updated dependencies [ae61ad4]
2231
+ - Updated dependencies [5aed9e4]
2232
+ - Updated dependencies [83c77dc]
2233
+ - Updated dependencies [3c9fca3]
2234
+ - Updated dependencies [18a8e7d]
2235
+ - Updated dependencies [e7957ab]
2236
+ - Updated dependencies [f7e34ca]
2237
+ - Updated dependencies [e719ebd]
2238
+ - Updated dependencies [516583b]
2239
+ - Updated dependencies [f9e4f91]
2240
+ - Updated dependencies [6ef48b1]
2241
+ - Updated dependencies [fa429cf]
2242
+ - Updated dependencies [ed8df3e]
2243
+ - Updated dependencies [b470e91]
2244
+ - Updated dependencies [fe76ece]
2245
+ - Updated dependencies [8b446f5]
2246
+ - Updated dependencies [8e74b27]
2247
+ - Updated dependencies [7102b20]
2248
+ - Updated dependencies [8ebd57f]
2249
+ - Updated dependencies [617707a]
2250
+ - Updated dependencies [c40f3b8]
2251
+ - Updated dependencies [58770f3]
2252
+ - Updated dependencies [aefe428]
2253
+ - Updated dependencies [485f096]
2254
+ - Updated dependencies [7357447]
2255
+ - Updated dependencies [199d31b]
2256
+ - Updated dependencies [9e22085]
2257
+ - Updated dependencies [b655a9d]
2258
+ - Updated dependencies [8e67cc4]
2259
+ - Updated dependencies [c574dfb]
2260
+ - Updated dependencies [02f48b6]
2261
+ - Updated dependencies [3e01cb5]
2262
+ - Updated dependencies [7138bc1]
2263
+ - Updated dependencies [cef27e2]
2264
+ - Updated dependencies [4e8622b]
2265
+ - Updated dependencies [dffd752]
2266
+ - Updated dependencies [06973aa]
2267
+ - Updated dependencies [50798f3]
2268
+ - Updated dependencies [6a576c9]
2269
+ - Updated dependencies [105f3c5]
2270
+ - Updated dependencies [3ccd9e8]
2271
+ - Updated dependencies [689b979]
2272
+ - Updated dependencies [c269ed9]
2273
+ - Updated dependencies [c70f865]
2274
+ - Updated dependencies [e546222]
2275
+ - Updated dependencies [fd13f52]
2276
+ - Updated dependencies [d7bd274]
2277
+ - Updated dependencies [98c3a74]
2278
+ - Updated dependencies [fffa30d]
2279
+ - Updated dependencies [ebce5a3]
2280
+ - Updated dependencies [fb336df]
2281
+ - Updated dependencies [9d9040d]
2282
+ - Updated dependencies [20e317c]
2283
+ - Updated dependencies [425762e]
2284
+ - Updated dependencies [0fce2ef]
2285
+ - Updated dependencies [42df928]
2286
+ - Updated dependencies [8e00bfd]
2287
+ - Updated dependencies [8d37efb]
2288
+ - Updated dependencies [584eeca]
2289
+ - Updated dependencies [0e2ddd4]
2290
+ - Updated dependencies [73a3c89]
2291
+ - Updated dependencies [b7479ab]
2292
+ - Updated dependencies [9850c6e]
2293
+ - Updated dependencies [9118a31]
2294
+ - Updated dependencies [de570cc]
2295
+ - Updated dependencies [b2ea297]
2296
+ - Updated dependencies [5b5a5c3]
2297
+ - Updated dependencies [14582b8]
2298
+ - Updated dependencies [51e144e]
2299
+ - Updated dependencies [19cbf10]
2300
+ - Updated dependencies [ab92940]
2301
+ - Updated dependencies [a691c0b]
2302
+ - Updated dependencies [0b1326d]
2303
+ - Updated dependencies [1e66879]
2304
+ - Updated dependencies [c5200f0]
2305
+ - Updated dependencies [af3861f]
2306
+ - Updated dependencies [515f171]
2307
+ - Updated dependencies [1f4e029]
2308
+ - Updated dependencies [83ec618]
2309
+ - Updated dependencies [4f14ad7]
2310
+ - Updated dependencies [7b43319]
2311
+ - Updated dependencies [258d264]
2312
+ - Updated dependencies [4d963a2]
2313
+ - Updated dependencies [cac64b3]
2314
+ - Updated dependencies [8033ad1]
2315
+ - Updated dependencies [fa140b8]
2316
+ - Updated dependencies [71cba28]
2317
+ - Updated dependencies [190fbd0]
2318
+ - Updated dependencies [c00bf28]
2319
+ - Updated dependencies [93127bd]
2320
+ - Updated dependencies [f2158ec]
2321
+ - Updated dependencies [759606e]
2322
+ - Updated dependencies [fd8dace]
2323
+ - Updated dependencies [72ffc34]
2324
+ - Updated dependencies [a51fa0c]
2325
+ - Updated dependencies [51f3d8d]
2326
+ - Updated dependencies [bf28341]
2327
+ - Updated dependencies [78cbdb5]
2328
+ - Updated dependencies [b7543a9]
2329
+ - Updated dependencies [6c6cee7]
2330
+ - Updated dependencies [42887e0]
2331
+ - Updated dependencies [83fe6e7]
2332
+ - Updated dependencies [d1ab06f]
2333
+ - Updated dependencies [591bf27]
2334
+ - Updated dependencies [38a9568]
2335
+ - Updated dependencies [f90b8fb]
2336
+ - Updated dependencies [91783c4]
2337
+ - Updated dependencies [982885d]
2338
+ - Updated dependencies [dba7d84]
2339
+ - Updated dependencies [ca39427]
2340
+ - Updated dependencies [43ca9d5]
2341
+ - Updated dependencies [bd09957]
2342
+ - Updated dependencies [5a07e67]
2343
+ - Updated dependencies [2d36552]
2344
+ - Updated dependencies [45d8288]
2345
+ - Updated dependencies [b2437a7]
2346
+ - Updated dependencies [f157423]
2347
+ - Updated dependencies [7a90afd]
2348
+ - Updated dependencies [ba306e3]
2349
+ - Updated dependencies [eddc1dd]
2350
+ - Updated dependencies [490f482]
2351
+ - Updated dependencies [27308c5]
2352
+ - Updated dependencies [8689166]
2353
+ - Updated dependencies [c9327c9]
2354
+ - Updated dependencies [920165d]
2355
+ - Updated dependencies [26a2238]
2356
+ - Updated dependencies [9101be5]
2357
+ - Updated dependencies [f53a8d0]
2358
+ - Updated dependencies [5d79faf]
2359
+ - Updated dependencies [968dc1e]
2360
+ - Updated dependencies [57f9b07]
2361
+ - Updated dependencies [3c73d99]
2362
+ - Updated dependencies [d91aed9]
2363
+ - Updated dependencies [ed71d9e]
2364
+ - Updated dependencies [7776fc2]
2365
+ - Updated dependencies [e76634c]
2366
+ - Updated dependencies [c86185e]
2367
+ - Updated dependencies [fb96ecb]
2368
+ - Updated dependencies [1170ed1]
2369
+ - Updated dependencies [f75810e]
2370
+ - Updated dependencies [92814db]
2371
+ - Updated dependencies [4d73b07]
2372
+ - @object-ui/react@17.7.0
2373
+ - @object-ui/core@17.7.0
2374
+ - @object-ui/types@17.7.0
2375
+ - @object-ui/i18n@17.7.0
2376
+ - @object-ui/components@17.7.0
2377
+ - @object-ui/plugin-grid@17.7.0
2378
+ - @object-ui/layout@17.7.0
2379
+ - @object-ui/plugin-form@17.7.0
2380
+ - @object-ui/data-objectstack@17.7.0
2381
+
3
2382
  ## 17.6.0
4
2383
 
5
2384
  ### Minor Changes