@object-ui/plugin-calendar 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 +2791 -0
- package/README.md +158 -45
- package/dist/CalendarView.d.ts.map +1 -1
- package/dist/ObjectCalendar.d.ts +64 -15
- package/dist/ObjectCalendar.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +687 -560
- package/dist/index.umd.cjs +1 -1
- package/package.json +15 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,2796 @@
|
|
|
1
1
|
# @object-ui/plugin-calendar
|
|
2
2
|
|
|
3
|
+
## 17.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2124d04: A standalone `object-calendar` honours `navigation: { mode: 'page' }`, and a `navigation` block written without `mode`, by opening the record page (objectui#11293).
|
|
8
|
+
|
|
9
|
+
An event click under either spelling used to open nothing on a calendar no parent view navigates for, and the `navigation` input description of the `object-calendar` and `calendar` registrations warned about it. The shared `useNavigationOverlay` now hands that click to the record navigator the host publishes, and the console publishes one on its custom pages, record pages and list views. The description drops the warning and says where `page` goes: through the host's record navigator, and nowhere under a host that publishes none. An overlay mode still keeps the click from a parent view's handlers, and any other mode still hands it to them.
|
|
10
|
+
- 7c3df8f: A non-grid view's fetch now carries a platform row ceiling, and crossing it is
|
|
11
|
+
never silent (objectui#7210, maintainer ruling a′, 2026-09-02).
|
|
12
|
+
|
|
13
|
+
Before this, `ObjectGantt`, `ObjectCalendar`, `ObjectMap` and `ObjectTree` each
|
|
14
|
+
issued a `find` with **no `$top` at all**, so the request returned the entire
|
|
15
|
+
filtered result set. At the 186 rows the card was filed from that is invisible;
|
|
16
|
+
on an object with 100k scheduled rows it is the whole table into the browser,
|
|
17
|
+
and nothing an author could write — `pagination.pageSize` included — could
|
|
18
|
+
bound a request that never carried a cap to begin with.
|
|
19
|
+
|
|
20
|
+
**What changed.** Those four fetches now ask for `NON_GRID_ROW_CEILING_TOP`
|
|
21
|
+
rows, draw at most `NON_GRID_ROW_CEILING` of them, and when the result set was
|
|
22
|
+
larger they render a footnote naming both numbers, verbatim as it renders:
|
|
23
|
+
*"Showing the first 2000 of 41234 records. Narrow the filter."* Below the
|
|
24
|
+
ceiling nothing changes: the full set draws and no footnote appears.
|
|
25
|
+
|
|
26
|
+
The four view packages take a **minor**, not a patch: a result set above the
|
|
27
|
+
ceiling is no longer drawn in full, which is a behaviour break whatever the
|
|
28
|
+
fixed group does to the released version number.
|
|
29
|
+
|
|
30
|
+
**The ceiling is a platform constant, not an authorable key** — `2000`, exported
|
|
31
|
+
from `@object-ui/react` as `NON_GRID_ROW_CEILING`. An authored `limit` or
|
|
32
|
+
`dataSource: { limit }` still does not reach these queries, by the same ruling;
|
|
33
|
+
three alternatives were rejected with it (a documentation note only — still the
|
|
34
|
+
whole table; truncating at `pageSize` — silent, and a complete schedule capped
|
|
35
|
+
at one page; an authorable `maxRows` — a new permanent key every author sets).
|
|
36
|
+
|
|
37
|
+
**Why 2,000.** One constant for all four, so the binding view sets it. Measured
|
|
38
|
+
in this repo's jsdom lane: gantt, calendar and map hold their DOM flat as rows
|
|
39
|
+
grow (virtualised task list; four events per day cell; auto-clustering above
|
|
40
|
+
100 markers), while `ObjectTree` flattens every expanded node into the document
|
|
41
|
+
at a linear **5.2 DOM elements per record** with no virtualisation. 2,000 rows
|
|
42
|
+
is where the worst of the four lands at ~10,400 elements — an order of
|
|
43
|
+
magnitude above Lighthouse's "excessive DOM size" warning, and still ~10x the
|
|
44
|
+
real application result set this card came from.
|
|
45
|
+
|
|
46
|
+
New exports on `@object-ui/react`: `NON_GRID_ROW_CEILING`,
|
|
47
|
+
`NON_GRID_ROW_CEILING_TOP`, `applyNonGridRowCeiling`, `NonGridRowCeilingNote`
|
|
48
|
+
and the type `NonGridCeilingResult`. Two new `common.*` i18n keys carry the
|
|
49
|
+
footnote copy in all ten packs.
|
|
50
|
+
- b041b9c: `@object-ui/core` publishes `resolveRecordSourceObjectName`, the ONE reader for "which
|
|
51
|
+
object is this block bound to".
|
|
52
|
+
|
|
53
|
+
Six view plugins each spelled that resolution locally — `ObjectCalendar` twice,
|
|
54
|
+
`ObjectGantt`, `ObjectTree` twice, `ObjectMap`, `ObjectGrid` — and had drifted: three
|
|
55
|
+
wrote `?? schema.objectName`, one `|| ''`, one `: undefined`, one an `'object' in
|
|
56
|
+
dataConfig` test. They now delegate to one function that states the published
|
|
57
|
+
record-source ladder `77cb489b4` declared (`data`, then `staticData`, then `objectName`) once.
|
|
58
|
+
|
|
59
|
+
**No behaviour changes.** Each site's pre-collapse expression is transcribed verbatim
|
|
60
|
+
into `record-source.behaviourNeutrality-7627.test.ts` and asserted equal to its
|
|
61
|
+
post-collapse spelling across the whole contract-valid input matrix — both bindings
|
|
62
|
+
present, data only, `objectName` only, empty `objectName`, empty `data.object`, the
|
|
63
|
+
`api` / `value` / `staticData` / array-shorthand providers, and nothing bound.
|
|
64
|
+
|
|
65
|
+
**Two questions stay two questions.** `normalizeListViewSchema`'s gap-fill (#7477,
|
|
66
|
+
ruling B, landed as `00d2fa682`) is untouched and is NOT re-pointed at the new reader: it answers
|
|
67
|
+
how `objectName` gets POPULATED when absent, where an already-present `objectName` wins.
|
|
68
|
+
The new reader answers which object a block RESOLVES, where the `data` block wins — the
|
|
69
|
+
order declared on both published faces in `@object-ui/types` and pinned by
|
|
70
|
+
`objectql-record-source-refinement-6939.test.ts`. Merging them would silently override
|
|
71
|
+
one standing ruling or the other.
|
|
72
|
+
|
|
73
|
+
**`ObjectGantt`'s `persistLayoutKey` is deliberately excluded** and keeps its inverted
|
|
74
|
+
order, with an in-place comment saying why: its receiver is a localStorage key
|
|
75
|
+
(`gantt-layout:KEY:filters`), not a record source, so re-pointing it would orphan every
|
|
76
|
+
saved layout and filter-chip set of a view carrying both bindings. Two more sites the
|
|
77
|
+
finding listed are not object-name readers at all and were struck: `ObjectGantt`'s
|
|
78
|
+
refresh-handler predicate (`object` OR `api`) and `plugin-dashboard`'s `isObjectProvider`
|
|
79
|
+
type-guard over a widget's `data`.
|
|
80
|
+
|
|
81
|
+
`useSettledSchema`'s doc comment stops prescribing the hand-written ladder at all four
|
|
82
|
+
lines that taught it, so the copies cannot re-seed from the hook that replaced them.
|
|
83
|
+
- 7ef3867: Retire the `filter.calendar` configuration spelling on `object-calendar` (objectui#7711).
|
|
84
|
+
|
|
85
|
+
**Breaking, deliberately.** `getCalendarConfig` no longer probes `schema.filter` for a
|
|
86
|
+
`calendar` key. A calendar whose configuration was written as
|
|
87
|
+
`filter: { calendar: { startDateField: … } }` no longer resolves a configuration at all
|
|
88
|
+
and now renders the component's existing "Calendar configuration required" refusal
|
|
89
|
+
screen. Write the configuration under
|
|
90
|
+
the declared `calendar` container instead — the read for it already existed, directly
|
|
91
|
+
below the retired arm.
|
|
92
|
+
|
|
93
|
+
`filter` is the query filter and nothing else. `@objectstack/spec`'s
|
|
94
|
+
`ComponentPropsMap['object-calendar']` declares `calendar` as the configuration
|
|
95
|
+
container and `filter` as the base query filter, and admits no `filter.calendar`
|
|
96
|
+
spelling; the renderer nevertheless read the config out of the filter FIRST, and the
|
|
97
|
+
comment on the canonical read below called *that* one the "backward compatibility"
|
|
98
|
+
branch — the contract inverted in a source comment. The arm and the comment are both
|
|
99
|
+
gone. No compatibility rung and no deprecation window, per AGENTS.md #0.1: a tolerant
|
|
100
|
+
fallback fossilizes the wrong convention into a second de-facto contract.
|
|
101
|
+
|
|
102
|
+
**The bug this closes is not only the retired spelling.** One authored key was being
|
|
103
|
+
read twice with two incompatible meanings. `filter: { calendar: 'team' }` — a
|
|
104
|
+
legitimate condition on a field literally named `calendar` — was returned as the
|
|
105
|
+
`CalendarConfig` while the same object still went to `$filter` on the wire. `'team'` is
|
|
106
|
+
truthy, so the refusal screen did not fire either: `startDateField` destructured off a
|
|
107
|
+
string is `undefined`, every record fell into "unscheduled", and the grid rendered empty
|
|
108
|
+
while the author's declared `calendar` block sat unread. Such a filter now reaches
|
|
109
|
+
`$filter` untouched and the declared container is what configures the calendar.
|
|
110
|
+
|
|
111
|
+
The calendar twin of the `filter.map` retirement in objectui#4034, with one measured
|
|
112
|
+
difference: there is no `Array.prototype.calendar`, so `'calendar' in schema.filter` was
|
|
113
|
+
never true for an array-shaped filter the way `'map' in schema.filter` was true for
|
|
114
|
+
every one of them. Only an object-shaped filter with an own `calendar` key ever reached
|
|
115
|
+
the retired arm, and the calendar answers the loss of a configuration with a named
|
|
116
|
+
refusal on screen rather than the map's silent fallback to default field names — so this
|
|
117
|
+
retirement carries no dev-time diagnostic rider.
|
|
118
|
+
|
|
119
|
+
**Migration.** A census of this repo found **zero** authored `filter: { calendar: … }`
|
|
120
|
+
sites (both the object-literal and JSON spellings, with positive controls and a planted
|
|
121
|
+
fixture proving the search fires).
|
|
122
|
+
|
|
123
|
+
Also in this change: the `calendarConfig` memo's dependency list drops `schema.filter`,
|
|
124
|
+
which the function no longer reads, and gains the three flat keys it does read but the
|
|
125
|
+
list never named — `startDateField`, `endDateField` and `allDayField`. Dropping `filter`
|
|
126
|
+
removed an accidental co-trigger that used to pick those up whenever a filter changed
|
|
127
|
+
alongside them.
|
|
128
|
+
- 0ead1f6: Declare the `filter` input on every `object-kanban` / `object-calendar`
|
|
129
|
+
registration (objectui#7712) — the html tier stops reporting `unknown-prop` on a
|
|
130
|
+
key the spec declares and both renderers read.
|
|
131
|
+
|
|
132
|
+
`ObjectKanban.tsx` sends the authored key to the query as `$filter: schema.filter`
|
|
133
|
+
and `ObjectCalendar.tsx` does the same, and `@objectstack/spec`'s
|
|
134
|
+
`ComponentPropsMap` declares `filter` on both blocks (measured: `safeParse`
|
|
135
|
+
accepts it, and refuses an undeclared key by name on the same call). But none of
|
|
136
|
+
the four registrations that publish those two renderers listed `filter` in
|
|
137
|
+
`inputs`, and `sdui-parser`'s `validateTree` reports `unknown-prop` for every key
|
|
138
|
+
no `inputs` entry claims. So an author writing the one spelling that WORKS was
|
|
139
|
+
told it was unknown — objectui#6678's shape, where a correct write draws the same
|
|
140
|
+
diagnostic as a write that does nothing. That is worse than an inert key: it
|
|
141
|
+
actively punishes the correct behaviour, and the honest response to it is to
|
|
142
|
+
delete working metadata.
|
|
143
|
+
|
|
144
|
+
ADR-0049 enforce-or-remove resolves toward **declare**, not remove: the key has
|
|
145
|
+
live readers on both ends, so the registrations were the side that was wrong. The
|
|
146
|
+
declaration is `type: 'array'` on all four, matching the `filter` that
|
|
147
|
+
`object-grid`'s `GRID_QUERY_INPUTS` and `object-metric` already publish, and it is
|
|
148
|
+
writable as one shape only because objectui#7711 landed first and retired the
|
|
149
|
+
object-shaped `filter.calendar` spelling — `filter` is the query filter and
|
|
150
|
+
nothing else.
|
|
151
|
+
|
|
152
|
+
Declared per key against the spec rather than derived from the
|
|
153
|
+
`ElementDataSourceMapping` sitting beside these registrations, even though that
|
|
154
|
+
mapping already asserts `filter` is a live query key. Measured, that derivation
|
|
155
|
+
would be wrong: the kanban mapping also carries `limit`, and the spec's strict
|
|
156
|
+
`ComponentPropsMap['object-kanban']` **rejects** `limit` by name, so emitting it
|
|
157
|
+
would publish a key the save gate refuses.
|
|
158
|
+
|
|
159
|
+
⚠️ Note for whoever meets this class next: `check:react-blocks-declaration-parity`
|
|
160
|
+
runs manifest → spec, one direction. A key the SPEC declares and the manifest
|
|
161
|
+
omits is structurally outside what that ratchet measures, so fixing these four
|
|
162
|
+
registrations does **not** make the next omission loud. Making that ratchet
|
|
163
|
+
bidirectional is its own card.
|
|
164
|
+
- edea22a: **BREAKING** — `SchemaRendererProvider`'s `dataSource` prop, and the context
|
|
165
|
+
type every `useSchemaContext()` consumer reads back, are the published
|
|
166
|
+
`DataSource` contract instead of `any`.
|
|
167
|
+
|
|
168
|
+
**FROM** `dataSource={anything}` **TO** `dataSource={adapter}` — a `DataSource`
|
|
169
|
+
from `@object-ui/types`, or `null` / `undefined` when the host has no adapter
|
|
170
|
+
bound.
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
// before — compiled, and failed at runtime on the first find()
|
|
174
|
+
<SchemaRendererProvider dataSource={'not-an-adapter'}>
|
|
175
|
+
// before — compiled, and no reader can do anything with it
|
|
176
|
+
<SchemaRendererProvider dataSource={{}}>
|
|
177
|
+
// after
|
|
178
|
+
<SchemaRendererProvider dataSource={adapter}> // a DataSource
|
|
179
|
+
<SchemaRendererProvider dataSource={undefined}> // "I have no adapter"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Both sites are typed `DataSource | null | undefined` — the spelling
|
|
183
|
+
`useSettledSchema` in this same package already used. The two absences are part
|
|
184
|
+
of the contract, not a weakening of it: a Studio preview, a `kind:'react'` page
|
|
185
|
+
rendered before the host's adapter connects, and a widget probe driving
|
|
186
|
+
`apiFetch` alone all render with nothing bound, and every reader in the tree
|
|
187
|
+
already guards for it. What the union refuses is everything that is not an
|
|
188
|
+
adapter: a string, an empty object, a plain data bag, a partial adapter missing
|
|
189
|
+
a required member.
|
|
190
|
+
|
|
191
|
+
The measured cost, both halves, because the two `any`s have different blast
|
|
192
|
+
radii (measured separately on `origin/main`, whole-repo type-check over the 33
|
|
193
|
+
packages that depend on `@object-ui/react`):
|
|
194
|
+
|
|
195
|
+
- the **context type** — the `any` that reaches every `useSchemaContext()`
|
|
196
|
+
reader — reds **7 diagnostics at 7 sites in 4 packages**, all of them
|
|
197
|
+
production code or a mocked module factory.
|
|
198
|
+
- the **provider prop** — the injection points — reds **52 diagnostics at 27
|
|
199
|
+
sites in 11 packages**, all but one of them test doubles.
|
|
200
|
+
|
|
201
|
+
That ordering is the reverse of the prediction on the card: the context `any`
|
|
202
|
+
was expected to be the expensive one because it infects the whole tree, and it
|
|
203
|
+
is the cheap one, because every reader in the tree already guarded and none of
|
|
204
|
+
them ever reached past `find` / `getObjectSchema`. The prop is the expensive
|
|
205
|
+
one, because the injection points are overwhelmingly test doubles that were
|
|
206
|
+
never complete adapters. The full accounting is on objectui#7912.
|
|
207
|
+
|
|
208
|
+
Two runtime behaviours change, both in the "no adapter" direction and both
|
|
209
|
+
strictly closer to what the surrounding code already intended:
|
|
210
|
+
|
|
211
|
+
- `@object-ui/components`' `kind:'react'` page passed an empty object as its
|
|
212
|
+
"no adapter yet" stand-in. An empty object is TRUTHY, so it walked past every
|
|
213
|
+
`if (!dataSource)` guard written to catch exactly that state and failed later,
|
|
214
|
+
at the call. It now passes the absent adapter itself, so the guard fires where
|
|
215
|
+
it was meant to. The module-constant identity that stand-in existed for is
|
|
216
|
+
preserved: `null` is a primitive, so the provider's memo is unaffected.
|
|
217
|
+
- `@object-ui/plugin-calendar`, `@object-ui/plugin-gantt` and
|
|
218
|
+
`@object-ui/plugin-kanban` collapse a `null` adapter from the context to
|
|
219
|
+
`undefined` before handing it to their widget, whose prop declares the single
|
|
220
|
+
spelling `dataSource?: DataSource`.
|
|
221
|
+
|
|
222
|
+
Nothing else moves at runtime: no value flowing through this key changes, and
|
|
223
|
+
no data path is touched. A TypeScript consumer outside this repo that handed
|
|
224
|
+
this prop something other than an adapter now gets a compile error naming the
|
|
225
|
+
key (TS2322 / TS2739 / TS2740), which is why the FROM/TO is spelled out above.
|
|
226
|
+
|
|
227
|
+
Five `as any` reads of this context in `@object-ui/fields` are gone — they were
|
|
228
|
+
redundant the moment the seam became honest — and `LookupField`'s local
|
|
229
|
+
re-declaration of the imported context as a `Context` of `any`, which laundered
|
|
230
|
+
its `dataSource` read while looking typed, is gone with them. Both directions of
|
|
231
|
+
the contract are pinned against the real compiler in
|
|
232
|
+
`SchemaRendererContext.dataSourceType.pin.test.ts`, and the card's planted
|
|
233
|
+
documentation probe (a bare string in `packages/react/README.md`'s provider
|
|
234
|
+
example) now fails `pnpm check:doc-snippets`, where it used to exit 0 with zero
|
|
235
|
+
diagnostics.
|
|
236
|
+
|
|
237
|
+
objectui#7912.
|
|
238
|
+
- f84760f: `object-calendar` now READS the `allDayField` it already resolved (objectui#8026).
|
|
239
|
+
|
|
240
|
+
**The defect.** `getCalendarConfig` put `allDayField` into the `CalendarConfig` it
|
|
241
|
+
returns, and the memo that builds that config named the key among its dependencies —
|
|
242
|
+
but the events pass destructured four keys and computed the flag as `!endDate`. An
|
|
243
|
+
author who wrote `calendar: { allDayField: 'is_all_day' }` therefore got the flag
|
|
244
|
+
derived from whether the record happened to carry an end date, and a record with a
|
|
245
|
+
real end date that IS flagged all-day rendered as an ordinary timed event, with no
|
|
246
|
+
diagnostic. The value was arriving: `ListView`'s `collectViewFields` already collects
|
|
247
|
+
this field into the fetch, and `ObjectView`'s `calendarViewOptions` forwards the
|
|
248
|
+
authored `calendar` block verbatim.
|
|
249
|
+
|
|
250
|
+
**No default field name — the deliberate divergence from `calendar-view`.** The
|
|
251
|
+
sibling `calendar-view` renderer spells `schema.allDayField || 'allDay'`.
|
|
252
|
+
`object-calendar` does **not** take that default, and an unauthored `allDayField`
|
|
253
|
+
changes nothing: the existing `!endDate` inference stands, so every calendar that
|
|
254
|
+
never declared the key renders exactly as before. The sibling's five field-name
|
|
255
|
+
defaults describe the canonical authored EVENT shape a `calendar-view` node carries
|
|
256
|
+
in its `data`; `object-calendar` draws ObjectQL records of a business object, where
|
|
257
|
+
nothing makes `allDay` a field name — and this renderer honours none of those five
|
|
258
|
+
defaults, refusing rather than guessing when `startDateField` is absent
|
|
259
|
+
(objectui#7029). Importing one of the five would put the last fabricated field
|
|
260
|
+
binding back into the renderer whose refusal screen exists to refuse guessing.
|
|
261
|
+
|
|
262
|
+
**Behaviour change, scoped.** Only calendars that DID author `allDayField` change,
|
|
263
|
+
and they change in the direction the declaration asked for. Where the key is
|
|
264
|
+
declared it is now the whole answer: a record whose flag is absent or false is not
|
|
265
|
+
all-day, because letting the inference run behind a declared key would silently
|
|
266
|
+
overrule the author.
|
|
267
|
+
|
|
268
|
+
**Not spec surface.** `@objectstack/spec`'s `CalendarConfigSchema` is a strict object
|
|
269
|
+
of four keys and refuses `allDayField` by name — the same way it refuses objectui's
|
|
270
|
+
own sanctioned `defaultView`. The key rides objectui's deliberate `.passthrough()` on
|
|
271
|
+
the `CalendarConfig` mirror in `@object-ui/types`, whose comment names it: "the
|
|
272
|
+
renderers grow config knobs ahead of the protocol (calendar's `allDayField`, for
|
|
273
|
+
one), and stripping them here would silently disable a shipped capability." Nothing
|
|
274
|
+
in this change widens any accept set.
|
|
275
|
+
|
|
276
|
+
**Correction, 2026-10-01 (objectui#8831).** The "Not spec surface" paragraph above is false against `@objectstack/spec` 17.5.0, which this same release installs. That release's `CalendarConfigSchema` declares five keys, `allDayField` among them, and accepts it. It still refuses `defaultView`. The key no longer rides the `.passthrough()` of the `CalendarConfig` mirror in `@object-ui/types`: that mirror derives from the spec schema, so `allDayField` is now a declared member of it. objectui#11073's bump to 17.5.0 made the paragraph false, not this entry and not objectui#8831. The paragraphs about the renderer still hold: `object-calendar` takes no default field name for `allDayField`, and a declared one is the whole answer.
|
|
277
|
+
- 35e6366: Declare the `sort` input on both `object-calendar` registrations
|
|
278
|
+
(objectui#8171) — the html tier stops reporting `unknown-prop` on a key the spec
|
|
279
|
+
declares and `ObjectCalendar` already reads.
|
|
280
|
+
|
|
281
|
+
objectui#7712's defect, one key over. `ObjectCalendar.tsx` lowers the authored
|
|
282
|
+
key onto its own query as `$orderby: convertSortToQueryParams(schema.sort)`, and
|
|
283
|
+
`@objectstack/spec`'s `ComponentPropsMap['object-calendar']` declares `sort`
|
|
284
|
+
(measured on 17.2.0: `safeParse({ objectName, sort })` returns `success: true`,
|
|
285
|
+
while the same strict schema on the same call refuses `bogusProp` by name — that
|
|
286
|
+
control is what makes the acceptance a verdict). But neither of the two
|
|
287
|
+
registrations that publish this renderer — `plugin-calendar:object-calendar` and
|
|
288
|
+
`view:calendar` — listed `sort` in `inputs`, and `sdui-parser`'s `validateTree`
|
|
289
|
+
reports `unknown-prop` for every key no `inputs` entry claims. So an author
|
|
290
|
+
writing the one spelling that WORKS was told it was unknown — objectui#6678's
|
|
291
|
+
shape, where a correct write draws the same diagnostic as a write that does
|
|
292
|
+
nothing.
|
|
293
|
+
|
|
294
|
+
ADR-0049 enforce-or-remove resolves toward **declare**, not remove: the key has
|
|
295
|
+
live readers on both ends, so the registrations were the side that was wrong.
|
|
296
|
+
Declared `type: 'array'`, matching the `filter` entry objectui#7712 put beside
|
|
297
|
+
it and the `sort` that `object-grid`'s `GRID_QUERY_INPUTS` publishes — measured,
|
|
298
|
+
that arm is the repo-wide convention for this key, all seven existing `sort`
|
|
299
|
+
declarations write it.
|
|
300
|
+
|
|
301
|
+
⛔ Not derived from the `ElementDataSourceMapping` sitting six lines above,
|
|
302
|
+
which already asserts `sort: true`. That structure maps query keys for
|
|
303
|
+
`ElementDataSourceGate`; it is not an authoring declaration, and objectui#7712
|
|
304
|
+
measured why a mechanical derivation would be wrong — kanban's mapping also
|
|
305
|
+
carries `limit`, which the spec refuses by name.
|
|
306
|
+
|
|
307
|
+
⚠️ Carried forward from objectui#7712, because it stays true here:
|
|
308
|
+
`check:react-blocks-declaration-parity` runs manifest → spec, one direction. A
|
|
309
|
+
key the SPEC declares and the manifest omits is structurally outside what that
|
|
310
|
+
ratchet measures, so declaring this key does **not** make the next omission
|
|
311
|
+
loud. Making that ratchet bidirectional is objectui#8176.
|
|
312
|
+
|
|
313
|
+
Rider carried by the same change, because objectui#8212 landed first: the
|
|
314
|
+
console's `registry-inputs-spec-parity` ledger is updated in step with the
|
|
315
|
+
declaration — the `object-calendar.sort` unpublished-key exemption is deleted
|
|
316
|
+
(its cover expires the moment the key is declared), the shrink-only objectui#8176
|
|
317
|
+
backlog ceiling drops 16 to 15, and `sort` gets a `MEMBER_PINS` entry rather than
|
|
318
|
+
a member-pin exemption. `MEMBER_PIN_EXEMPTION_CEILING` is untouched by this
|
|
319
|
+
change; it read 62 at the commit that wrote this paragraph (`35e63669d6`,
|
|
320
|
+
2026-09-07), and that reading is dated on purpose — see the closing note.
|
|
321
|
+
|
|
322
|
+
⚠️ That member pin is deliberately NOT the identity-forwarding shape the two
|
|
323
|
+
`filter` pins use. `ObjectCalendar.tsx` writes
|
|
324
|
+
`$orderby: convertSortToQueryParams(schema.sort)`, which builds a new
|
|
325
|
+
`field -> direction` map, so this key is lowered rather than passed through and
|
|
326
|
+
`toBe` on `$orderby` is false about it. The pin asserts what is READ inside a
|
|
327
|
+
member instead — `field`, `order`, an omitted `order` meaning ascending, and a
|
|
328
|
+
member with no usable `field` dropped rather than invented.
|
|
329
|
+
|
|
330
|
+
No version bump is declared for `@object-ui/console`: its only edit here is that
|
|
331
|
+
test file's ledger data, which publishes nothing.
|
|
332
|
+
|
|
333
|
+
⚠️ Closing note, written while this declaration was still pending
|
|
334
|
+
(objectui#9781) — why the `MEMBER_PIN_EXEMPTION_CEILING` reading above is DATED
|
|
335
|
+
rather than corrected. The sentence was authored as
|
|
336
|
+
"`MEMBER_PIN_EXEMPTION_CEILING` is untouched at 62", and both of its halves
|
|
337
|
+
were true at `35e63669d6`: this change did not touch that constant, and 62 was
|
|
338
|
+
its value there. "Is untouched" is a closed statement about THIS change and
|
|
339
|
+
cannot rot, so it is kept as written. "At 62" is an absolute reading of a
|
|
340
|
+
SHARED constant, which somebody ELSE's change falsifies — objectui#8071 slice 1
|
|
341
|
+
(`240c605939`, 2026-09-09) lowered it 62 -> 58, and later slices of that issue
|
|
342
|
+
moved it again while this declaration sat pending.
|
|
343
|
+
|
|
344
|
+
⛔ The reading is deliberately NOT restated at whatever that constant reads
|
|
345
|
+
today: today's number is true today and false again at the next slice, so
|
|
346
|
+
writing it would be this same defect authored a second time. ⇒ The rule this
|
|
347
|
+
repair carries, and the line between this paragraph and every sibling changeset
|
|
348
|
+
in the family: state your OWN change's bounded transition ("lowers 62 to 58",
|
|
349
|
+
"follows 31 to 28 in the same change", "drops 37 to 33") or state that you did
|
|
350
|
+
not touch the constant, and ⛔ never state what its value currently is. The
|
|
351
|
+
first is a finished fact about something the author controlled; the second is a
|
|
352
|
+
live claim about a world the author does not.
|
|
353
|
+
- 0ea7054: Remove 37 runtime dependencies that no file in the declaring package consumes, and gate
|
|
354
|
+
the direction so the next one cannot land (objectui#8198).
|
|
355
|
+
|
|
356
|
+
`check:phantom-deps` judges imports that are not declared; nothing judged the reverse,
|
|
357
|
+
so a declaration could outlive its last consumer indefinitely. That is what happened to
|
|
358
|
+
`recharts` in `@object-ui/components` after objectui#7397 deleted its only importer — it
|
|
359
|
+
was removed by hand on objectui#7625, and nothing would have reported the next one. The
|
|
360
|
+
new `pnpm check:unused-deps` asks the reverse question over `dependencies` and
|
|
361
|
+
`optionalDependencies` of every released package.
|
|
362
|
+
|
|
363
|
+
**Potentially breaking, for consumers relying on hoisting.** Nothing these packages ship
|
|
364
|
+
changes: their Vite `external` predicates are path-based and never read `dependencies`,
|
|
365
|
+
so no built artifact moves. What changes is the install graph — a project that imports
|
|
366
|
+
one of the removed packages while depending only on the ObjectUI package that used to
|
|
367
|
+
drag it in will no longer resolve it. Declare it directly; that is the correct
|
|
368
|
+
dependency edge in either case. The removals, by package:
|
|
369
|
+
|
|
370
|
+
- `@object-ui/plugin-designer`: `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities`, `@object-ui/fields`
|
|
371
|
+
- `@object-ui/plugin-chatbot`: `react-markdown`, `react-syntax-highlighter`, `remark-gfm` (and the orphaned `@types/react-syntax-highlighter`)
|
|
372
|
+
- `@object-ui/plugin-report`: `@object-ui/plugin-grid`, `clsx`, `react-i18next`, `tailwind-merge`
|
|
373
|
+
- `@object-ui/plugin-map`: `@objectstack/spec`, `lucide-react`, `zod`
|
|
374
|
+
- `@object-ui/runner`: `class-variance-authority`, `clsx`, `tailwind-merge`
|
|
375
|
+
- `@object-ui/core`: `lodash`, `zod`
|
|
376
|
+
- `@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
|
|
377
|
+
- `@object-ui/plugin-dashboard`: `clsx`, `tailwind-merge`, and the same `react-dom` defect
|
|
378
|
+
- `@object-ui/plugin-ai`: `@object-ui/react`, `clsx`, `tailwind-merge`
|
|
379
|
+
- `@object-ui/fields`: `clsx`, `tailwind-merge`
|
|
380
|
+
- `@object-ui/console`: `@object-ui/react-runtime`, `sucrase`
|
|
381
|
+
- `@object-ui/auth`: `@object-ui/types`
|
|
382
|
+
- `@object-ui/plugin-calendar`: `@object-ui/fields`
|
|
383
|
+
- `@object-ui/plugin-editor`, `@object-ui/plugin-markdown`: `@object-ui/react`
|
|
384
|
+
- `@object-ui/react`: `react-hook-form`
|
|
385
|
+
|
|
386
|
+
Every one was verified by a whole-package grep before removal — the name appeared nowhere
|
|
387
|
+
under the package but its own manifest and CHANGELOG — and the whole workspace builds,
|
|
388
|
+
type-checks and tests green afterwards.
|
|
389
|
+
- 91facae: **Breaking behaviour change — a view block now honours only the `data` spelling its published row declares.**
|
|
390
|
+
|
|
391
|
+
Maintainer ruling, decision batch #83 (2026-09-08), verbatim 「8348 以协议为准」: the contract decides. What `os validate` and the save gate refuse under `data`, the renderer refuses too. The shared record-source ladder (`resolveRecordSourceConfig` in `@object-ui/core`) now takes the arm the calling block's row declares, and rung 1 applies only on that arm.
|
|
392
|
+
|
|
393
|
+
⚠️ **`object-calendar` documents authored against the tolerated spelling stop rendering those rows.** The ladder falls past `data` to `staticData`, then to `objectName` — so such a calendar queries its object instead, or draws nothing when it names neither. This is accepted, with no transition window and no staged deprecation (the standing 2026-08-27 posture).
|
|
394
|
+
|
|
395
|
+
**Per block — what the published row says, and what actually moves:**
|
|
396
|
+
|
|
397
|
+
- **`object-calendar`** — row: `ComponentPropsMap['object-calendar'].data` is `z.array(z.unknown())` ("Pre-fetched records — skips the internal fetch"). A record-source **config object** under `data` — `{ provider: 'value', items }`, `{ provider: 'object', object }`, `{ provider: 'api', … }` — is no longer honoured, and this is a real end-to-end change: that object had exactly one carrier into the block, so an authored calendar written that way now queries its object (or draws nothing) instead of drawing the authored rows. There is no longer an api-provider branch to reach here. An **array** under `data` is unchanged, as are `staticData` and `objectName`.
|
|
398
|
+
- **`object-grid`** — row: the `ViewData` union, whose own description says "the bare-array shortcut is refused". `getDataConfig`'s `Array.isArray(schema.data)` head is removed, so the array is no longer a record source at the ladder. ⛔ Measured: this is **not** an end-to-end change for a node rendered through `SchemaRenderer`. An authored `data` array also arrives on the **props channel** (`SchemaRenderer` spreads node keys as props; `ObjectGrid`'s `passedData` lifts an array at higher priority), so such a grid still drew its rows when this landed. The removal took the second read, not the last one; objectui#9571 closed the props carrier afterwards.
|
|
399
|
+
- **`object-map`** — no `ComponentPropsMap` row existed when this landed; the governing row was this repo's own `ObjectMapSchema.data`, `ViewDataSchema.optional()` (the protocol row has since been published, and is the `ViewData` union too). Its array-shorthand head is removed on the same terms, with the same measured caveat at the time: through `SchemaRenderer` the props channel still drew an authored array, until objectui#9571. `data: { provider: 'value', items }` and `staticData` are unchanged.
|
|
400
|
+
- **`object-gantt`** — no `ComponentPropsMap` row when this landed; the governing row was `ObjectGanttSchema.data`, `ViewDataSchema.optional()` (the protocol row has since been published, and is the `ViewData` union too). A bare array under `data` is no longer a record source. Nothing observable moves: this block never lifted one, the array carried no `provider` and matched no fetch branch, and its renderer forwards no host props.
|
|
401
|
+
- **`object-tree`** — **unchanged by this change.** When it landed, no published face declared a `data` row for this block: not `ComponentPropsMap`, not `ObjectTreeSchema` (which declares `objectName` required and no `data`), not its registration `inputs`. Neither arm of the ruling reached it, so its rung 1 kept its previous behaviour and the block was reported rather than guessed at. Once the protocol published `ComponentPropsMap['object-tree']`, the tree moved to the `ViewData` arm too — see the separate `object-tree` entry for objectui#8348.
|
|
402
|
+
|
|
403
|
+
The `data` **prop** — the pre-fetched rows a host such as `ObjectView` or `ListView` passes down — is a different carrier and is untouched on every block. That it is also reachable from an authored node key, because `SchemaRenderer` spreads node keys as props, is what limits the grid and map halves above; it is reported on objectui#8348 rather than changed here.
|
|
404
|
+
- 474797d: **BREAKING** — the calendar date aliases `dateField` and `endField` are retired
|
|
405
|
+
at both faces (objectui#8355). They are now **declared refusals**: an authored
|
|
406
|
+
value is rejected **by name**, at its own key path, pointed at `startDateField` /
|
|
407
|
+
`endDateField`.
|
|
408
|
+
|
|
409
|
+
**FROM** `calendar: { dateField, endField }` — accepted in silence, read by
|
|
410
|
+
`ObjectCalendar`'s alias ladder — **TO** a by-name refusal at validation, with
|
|
411
|
+
`startDateField` / `endDateField` as the only spellings that bind the axis.
|
|
412
|
+
|
|
413
|
+
```ts
|
|
414
|
+
// before — parsed green, drew a calendar
|
|
415
|
+
{ type: 'list-view', objectName: 'task', calendar: { dateField: 'kickoff', endField: 'wrapup' } }
|
|
416
|
+
// after — refused at validation, naming the canonical keys
|
|
417
|
+
{ type: 'list-view', objectName: 'task', calendar: { startDateField: 'kickoff', endDateField: 'wrapup' } }
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**The refusal an author now meets**, verbatim from the arms' own messages (one
|
|
421
|
+
string per arm feeds both the parse-time issue and the `.describe()` metadata):
|
|
422
|
+
|
|
423
|
+
```text
|
|
424
|
+
Unrecognized key(s) on this calendar configuration: `dateField`. Did you mean
|
|
425
|
+
`dateField` → `startDateField`? `dateField` and `endField` are the pre-#2231
|
|
426
|
+
objectui spellings of the calendar date axis, retired at both faces by
|
|
427
|
+
objectui#8355. `@objectstack/spec` spells the axis `startDateField` and
|
|
428
|
+
`endDateField` only. ⚠️ This package accepted BOTH legacy spellings green until
|
|
429
|
+
that retirement — they rode a `.passthrough()` straight through
|
|
430
|
+
`safeValidateSchema` into `ListView`'s calendar branch, which flattened them onto
|
|
431
|
+
the generated `object-calendar` node where the renderer's alias ladder read them.
|
|
432
|
+
That ladder is gone, so the key is refused here instead of being kept and then
|
|
433
|
+
ignored. Write `startDateField` for the event start. Kept rather than refused, an
|
|
434
|
+
authored `dateField` binds nothing: the calendar falls through to "Calendar
|
|
435
|
+
configuration required", a screen that names the canonical keys and never the key
|
|
436
|
+
you wrote.
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
⚠️ **The consequence clause is per key, because the two spellings fail
|
|
440
|
+
differently.** `endField` gets the same stem and this tail instead — measured on
|
|
441
|
+
the renderer, not assumed:
|
|
442
|
+
|
|
443
|
+
```text
|
|
444
|
+
…Write `endDateField` for the event end. Kept rather than refused, an authored
|
|
445
|
+
`endField` fails even more quietly than its sibling: a calendar that also carries
|
|
446
|
+
a start binding still DRAWS, and only the end of every event is silently dropped.
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
On the flat node face the surface noun is `this object-calendar node`. ⚠️ **The
|
|
450
|
+
element's own `calendar` container carries a different tail for `dateField`**,
|
|
451
|
+
because it fails differently and was measured doing so: `getCalendarConfig` reads
|
|
452
|
+
that container WHOLE, so a retired spelling there never reaches the refusal
|
|
453
|
+
screen — the calendar mounts and simply places nothing, every record landing
|
|
454
|
+
under "Unscheduled". `endField` keeps one clause, because it reads the same on
|
|
455
|
+
both.
|
|
456
|
+
|
|
457
|
+
```text
|
|
458
|
+
…Write `startDateField` for the event start. Kept rather than refused, an
|
|
459
|
+
authored `dateField` fails without even reaching that refusal screen: this
|
|
460
|
+
container is read WHOLE, so the calendar still mounts and simply places nothing —
|
|
461
|
+
every record ends up under "Unscheduled" with no date to draw it on.
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**ADR-0087 disposition — D2 tombstone, no conversion entry and no migration
|
|
465
|
+
prescription.** The keys stay DECLARED and unwritable rather than being deleted,
|
|
466
|
+
which is the whole of the ruling: every calendar block here ends `.passthrough()`
|
|
467
|
+
and `BaseSchema` does too, so a deleted key is not refused — it is KEPT
|
|
468
|
+
unexamined and then ignored. Nothing in `@objectstack/spec` converts these two
|
|
469
|
+
(the protocol never declared either: `CalendarConfigSchema` is a strict object of
|
|
470
|
+
`startDateField` / `endDateField` / `titleField` / `colorField`, measured on the
|
|
471
|
+
installed pin 17.4.0 with a nonsense-key control on the same call), so there is
|
|
472
|
+
no ledger entry to register and no `objectstack migrate meta` step to ship. The
|
|
473
|
+
channel that reaches an author is the validator, and it now names the key and the
|
|
474
|
+
remedy on all five authoring surfaces this vocabulary has: a list view's
|
|
475
|
+
`calendar` block and its legacy `options.calendar` twin, a named view's two
|
|
476
|
+
nestings under `listViews`, the flat `object-calendar` node face, and that
|
|
477
|
+
element's own `calendar` container. ⚠️ Stated as five surfaces rather than
|
|
478
|
+
"every author" on purpose: a host that builds the node in TypeScript and hands it
|
|
479
|
+
to `SchemaRenderer` never parses the mirror at all — `SchemaRenderer` runs the
|
|
480
|
+
structural core validator, which is dev-only and names no key — so the compiler
|
|
481
|
+
is that population's channel, not this one.
|
|
482
|
+
|
|
483
|
+
⚠️ **Dated note, 2026-09-28 — a named view's `options.calendar` nesting is no longer
|
|
484
|
+
judged inside — objectui#7928.** Later in this same release `ObjectViewSchema.listViews`
|
|
485
|
+
became the protocol's strict `ObjectListViewSchema` record, by reference, and that
|
|
486
|
+
record refuses a named view's `options` bag whole (`unrecognized_keys` at
|
|
487
|
+
`listViews.KEY`, naming `options`). So an alias written under
|
|
488
|
+
`listViews.KEY.options.calendar` no longer draws an issue naming the key or the remedy.
|
|
489
|
+
The named view's `calendar` block still does: the protocol refuses the alias there as an
|
|
490
|
+
unrecognized key, and this entry's check adds the pointer at the key beside it. A stored
|
|
491
|
+
body that `@object-ui/app-shell`'s `ViewPreview` relays has its `options.calendar` folded
|
|
492
|
+
onto the `calendar` block first (`foldStoredListOptions`). The list view's two nestings
|
|
493
|
+
and both `object-calendar` surfaces are unchanged; `calendar-date-alias-refusal-8355.test.ts`
|
|
494
|
+
in `@object-ui/types` re-derives each surface. `.changeset/7928-listviews-by-reference-fold.md`
|
|
495
|
+
(PR objectui#10821) states what ships; the text above is kept as the reading of this change.
|
|
496
|
+
|
|
497
|
+
⚠️ **Why this is `minor` and not `major`.** This repository forbids `major` in a
|
|
498
|
+
changeset: the fixed release group's major tracks `@objectstack`'s, so any
|
|
499
|
+
`major` here would push all of it off that cadence
|
|
500
|
+
(`scripts/check-changeset-no-major.mjs` enforces it). objectui's own breaking
|
|
501
|
+
changes ship as `minor` with the break spelled out, which is what this entry is.
|
|
502
|
+
|
|
503
|
+
**What broke silently before, and why the two halves ship together.** An earlier
|
|
504
|
+
attempt removed the renderer's alias ladder on its own. The producer kept
|
|
505
|
+
spreading the authored block flat onto the generated `object-calendar` node, so
|
|
506
|
+
the alias still arrived, nothing read it, and the author met a generic "Calendar
|
|
507
|
+
configuration required" screen naming keys they had not written. A live authoring
|
|
508
|
+
path stopped rendering with every gate green (recorded on objectui#8651). The
|
|
509
|
+
refusal at the declaration is what turns that silence into a loud, by-name
|
|
510
|
+
failure — so the ladder removal, the producer strip and the tombstones are one
|
|
511
|
+
change and must stay one.
|
|
512
|
+
|
|
513
|
+
**The four moving parts:**
|
|
514
|
+
|
|
515
|
+
- `@object-ui/types` — `aliasKeyRefusal()` arms on the view-level `calendar`
|
|
516
|
+
block, on the legacy `options.calendar` nesting (a check, since an open record
|
|
517
|
+
declares no member — `custom` there, `invalid_type` at the declared slot), on
|
|
518
|
+
the flat `object-calendar` node face, and on that element's own `calendar`
|
|
519
|
+
container; plus a `.check()` on `ObjectViewSchema` for a named view's two
|
|
520
|
+
nestings. `z.input` of each arm is `undefined`, so the TypeScript face carries
|
|
521
|
+
`dateField?: never` / `endField?: never` and `tsc` refuses the key at the
|
|
522
|
+
authoring site as well.
|
|
523
|
+
- `@object-ui/plugin-calendar` — `getCalendarConfig` reads the declared
|
|
524
|
+
spellings only; the `CalendarAliasRungs` cast target and both read sites are
|
|
525
|
+
gone, and the config memo's dependency list loses the two entries with them.
|
|
526
|
+
- `@object-ui/plugin-list` — the `calendar` branch destructures the two
|
|
527
|
+
spellings out of the merged block and spreads only the remainder onto the node,
|
|
528
|
+
exactly as the kanban branch strips its own stray `groupBy` (objectui#8365).
|
|
529
|
+
- `@object-ui/plugin-view` — **the SECOND route**, and the reason this entry
|
|
530
|
+
moved four packages rather than three. `generateViewSchema` runs when no host
|
|
531
|
+
supplied `renderListView` — the authored `object-view` element — so a named
|
|
532
|
+
view never passes through `ListView`. Its calendar branch spread the authored
|
|
533
|
+
block raw, so removing the renderer's ladder turned a document that DREW into
|
|
534
|
+
one that shows "Calendar configuration required" and nothing else. Measured end
|
|
535
|
+
to end before the fix was written. It now strips the two spellings like its
|
|
536
|
+
sibling, and the `ObjectViewSchema` check is what makes an authored alias loud
|
|
537
|
+
there instead of mute.
|
|
538
|
+
|
|
539
|
+
⚠️ **`ObjectViewSchema.listViews` stays UNMIRRORED, and this entry does not
|
|
540
|
+
change that.** That key waits on a maintainer decision about its VALUE TYPE —
|
|
541
|
+
neither the spec's strict `ObjectListViewSchema` nor the local `NamedListView`
|
|
542
|
+
can be the declared value without losing documented behaviour or enforcing 43
|
|
543
|
+
unread members. A `.check()` decides none of it: it declares no value type, puts
|
|
544
|
+
no key in the object's `shape`, requires no `columns`, and refuses neither an
|
|
545
|
+
undeclared key nor the legacy `options` bag. It judges exactly the two spellings
|
|
546
|
+
this entry retires, at the two nestings the producer merges — with pins on each
|
|
547
|
+
of those non-effects.
|
|
548
|
+
|
|
549
|
+
⚠️ **Dated note, 2026-09-28 — `listViews` has since been mirrored — objectui#7928.** Later
|
|
550
|
+
in this same release the maintainer's ruling A chose the value type this paragraph waits
|
|
551
|
+
on: `ObjectViewSchema.listViews` is now `@objectstack/spec`'s own
|
|
552
|
+
`ViewSchema.shape.listViews`, a record of the strict `ObjectListViewSchema`, by reference
|
|
553
|
+
on both faces. It is in the object's `shape`, a named view needs `columns`, and the
|
|
554
|
+
record refuses an undeclared key and the legacy `options` bag whole. The named-view check
|
|
555
|
+
described here and in the `@object-ui/types` bullet above now reads the protocol's own
|
|
556
|
+
refusal at `listViews.KEY.calendar` and adds the pointer at the key; it no longer walks
|
|
557
|
+
the `options.calendar` nesting, so "a named view's two nestings" and "at the two nestings
|
|
558
|
+
the producer merges" now hold for the `calendar` block only.
|
|
559
|
+
`.changeset/7928-listviews-by-reference-fold.md` (PR objectui#10821) states what ships;
|
|
560
|
+
the text above is kept as the reading of this change.
|
|
561
|
+
|
|
562
|
+
⛔ **Not a producer-side fold.** Normalising `dateField` to `startDateField` in
|
|
563
|
+
`ListView` (option A) was put to the director seat and refused as the end state:
|
|
564
|
+
it keeps a second spelling alive at the producer, which is the lenient alias
|
|
565
|
+
AGENTS.md #0.1 names. The aliased view therefore produces **no** date binding,
|
|
566
|
+
and the author is told why at the door instead.
|
|
567
|
+
|
|
568
|
+
⚠️ **Upstream's refusal suggests the wrong canonical key for `dateField`, and it
|
|
569
|
+
is a typo-distance suggester rather than a declaration.** Re-derived by running
|
|
570
|
+
the installed pin (`@objectstack/spec` 17.4.0), with controls in the same pass:
|
|
571
|
+
`CalendarConfigSchema`'s `strictObject` options carry `surface` and `history` and
|
|
572
|
+
no `aliases` entry, so the protocol declares nothing about either spelling. The
|
|
573
|
+
"Did you mean `dateField` → `endDateField`?" an author meets is a fallback
|
|
574
|
+
`findClosestMatches` Levenshtein suggestion budgeted `max(2, floor(len/3))`:
|
|
575
|
+
`endDateField` is 3 edits from `dateField` and inside its budget of 3, while
|
|
576
|
+
`startDateField` is 5 and outside it — and `endField`, budgeted 2, reaches
|
|
577
|
+
nothing, which is why it and a nonsense control key both draw no suggestion at
|
|
578
|
+
all. A one-character typo of the canonical key does resolve to `startDateField`,
|
|
579
|
+
so the suggester is working as designed; it simply has no opinion to offer about
|
|
580
|
+
a legacy alias.
|
|
581
|
+
|
|
582
|
+
⇒ **nothing upstream says `dateField` means the end of an event.** The hazard is
|
|
583
|
+
author-facing rather than contractual: someone who copies that suggestion writes
|
|
584
|
+
`endDateField` and binds the END of an event to the date they meant as the START,
|
|
585
|
+
which every layer accepts. Every objectui read site folds this spelling onto the
|
|
586
|
+
**start** — the retired ladder did, `normalizeListViewSchema`'s `timeline` fold
|
|
587
|
+
does, `resolveTimelineDateBinding` documents it as "the pre-#2231 alias for
|
|
588
|
+
`startDateField`", and this package has published "Deprecated alias for
|
|
589
|
+
startDateField" for releases. So these arms name `startDateField` and a control
|
|
590
|
+
pin holds that line. The remedy upstream needs is an explicit `aliases` (or
|
|
591
|
+
`guidance`) entry for the two spellings so the suggester never answers for them;
|
|
592
|
+
that is upstream's formatter, on upstream's card, and is not fixed here.
|
|
593
|
+
|
|
594
|
+
⛔ **The timeline alias is NOT retired by this change.** `timeline.dateField`
|
|
595
|
+
stays a live, accepted alias with live consumers (`normalizeListViewSchema` folds
|
|
596
|
+
it onto `startDateField`, `ObjectView` reads it, and app-shell pins that it still
|
|
597
|
+
renders). The card's own boundaries put the map / gantt / timeline / kanban
|
|
598
|
+
ladders on their own cards; a pin in `@object-ui/types` asserts the timeline
|
|
599
|
+
spelling still parses green, so a later sweep has to say so rather than carrying
|
|
600
|
+
it in silently.
|
|
601
|
+
|
|
602
|
+
**Pinned** by `calendar-date-alias-refusal-8355.test.ts` (`@object-ui/types`, all
|
|
603
|
+
five surfaces, the per-surface consequence split, the compile-time face, and the
|
|
604
|
+
structural guard that `listViews` stays out of the object's `shape`),
|
|
605
|
+
`ListView.calendarAliasRefused-8355.test.tsx` (`@object-ui/plugin-list`) and
|
|
606
|
+
`ObjectView.calendarAliasRefused-8355.test.tsx` (`@object-ui/plugin-view`) — both
|
|
607
|
+
reading the node their producer really emits through a spy registration, which is
|
|
608
|
+
the only census that can see a key arriving through a spread — and the inverted
|
|
609
|
+
ledger rows in `calendarUnionReads-8651.test.tsx` (`@object-ui/plugin-calendar`).
|
|
610
|
+
|
|
611
|
+
⚠️ **Dated note, 2026-09-28 — a named view now refuses `timeline.dateField`, and the
|
|
612
|
+
shape guard is inverted — objectui#7928.** Later in this same release the protocol's
|
|
613
|
+
strict named-view record refuses `timeline.dateField` on a named view as an unrecognized
|
|
614
|
+
key; the `list-view` route still accepts it, and that route is the one the timeline pin
|
|
615
|
+
reads. The structural guard in `calendar-date-alias-refusal-8355.test.ts` now asserts
|
|
616
|
+
the opposite of "`listViews` stays out of the object's shape": `listViews` is a member
|
|
617
|
+
of `ObjectViewSchema.shape`. `.changeset/7928-listviews-by-reference-fold.md` (PR
|
|
618
|
+
objectui#10821) states what ships; the text above is kept as the reading of this change.
|
|
619
|
+
- d79f525: `navigation` is declared on the `object-kanban` and `object-calendar` blocks, by reference to `@objectstack/spec` (objectui#8652). This is the objectui half of the maintainer ruling on that card: the spec declares the key on both element entries from 17.5.0, and objectui now mirrors it.
|
|
620
|
+
|
|
621
|
+
- `@object-ui/types`: `ObjectKanbanSchema.navigation` and `ObjectCalendarSchema.navigation` are declared on both published faces with the spec's `NavigationConfig` type — the same type the grid, view, gantt and map schemas use. Until now the key was admitted and never examined: `navigation: { mode: 'not-a-mode' }` passed both faces while the spec refused it. It is now refused at `navigation.mode`, and a member the spec does not declare inside the block is refused too. A parse adds no default to the block, so a board or calendar without the key still opens a record in a drawer.
|
|
622
|
+
- `@object-ui/plugin-kanban`: the `object-kanban` registration publishes `navigation` in its `inputs`, so the designer offers it.
|
|
623
|
+
- `@object-ui/plugin-calendar`: the `object-calendar` and `calendar` registrations publish `navigation` in their `inputs`, and `ObjectCalendar` reads the key without a cast.
|
|
624
|
+
|
|
625
|
+
What a click does with each member is unchanged. `page`, and a block written without `mode` (which resolves to `page`), open the record page through the record navigator the host publishes (objectui#11293); under a host that publishes none, such as an embedded renderer, they still open nothing. The published input descriptions say so.
|
|
626
|
+
- a984600: Honour `filter`, `sort` and the platform row ceiling on a calendar's and a map's
|
|
627
|
+
inline (`provider: 'value'`) data (objectui#9061) — the port of objectui#8769's
|
|
628
|
+
repair off `ObjectGantt`.
|
|
629
|
+
|
|
630
|
+
**The defect was fail-open.** Both renderers' fetch effect short-circuited the
|
|
631
|
+
inline provider: it set the authored rows and returned BEFORE the adapter query,
|
|
632
|
+
which is the one site in each file that lowers `schema.filter` to `$filter`,
|
|
633
|
+
`schema.sort` to `$orderby` and the objectui#7210 ceiling to `$top`. So an
|
|
634
|
+
inline calendar or map that declared a `filter` drew **every** authored row, with
|
|
635
|
+
no diagnostic. The key that was dropped is the key that NARROWS, which is why
|
|
636
|
+
this matters: the view answered a wider question than the author asked. Nothing
|
|
637
|
+
was exposed that was not already in the authored schema — this is a correctness
|
|
638
|
+
defect, not a data-access one.
|
|
639
|
+
|
|
640
|
+
**What changed.** Each renderer resolves a `ValueDataSource` for the inline
|
|
641
|
+
provider and issues the same query the `object` arm issues. The `api` arm is
|
|
642
|
+
untouched, and no dependency array moves. `ValueDataSource` already implements
|
|
643
|
+
`$filter` / `$orderby` / `$skip` / `$top` / `$select` over its own array, so no
|
|
644
|
+
filter combinator was written for this change.
|
|
645
|
+
|
|
646
|
+
**Behaviour you may notice.**
|
|
647
|
+
|
|
648
|
+
- An authored `filter` / `sort` now narrows and orders inline rows. Every
|
|
649
|
+
spelling reaches it: `data: { provider: 'value', items }` and `staticData` on
|
|
650
|
+
both renderers, plus the map's bare-array `data` shorthand.
|
|
651
|
+
- The row ceiling now applies to inline rows: past 2,000 drawn rows the view
|
|
652
|
+
draws 2,000 and shows the footnote naming both numbers, as it already did for
|
|
653
|
+
fetched rows. It is applied to the **filtered** set, so a large inline array
|
|
654
|
+
that a `filter` cuts below the ceiling draws every matching row and stays
|
|
655
|
+
quiet. Rows a host passes down through the `data` React prop are still never
|
|
656
|
+
capped — those are not ours to cap.
|
|
657
|
+
- Inline rows now reach the view as the adapter's own deep copy rather than as
|
|
658
|
+
the authored array's object identities. Code comparing a row handed to
|
|
659
|
+
`onEventClick` / `onMarkerClick` against the authored array with `===` needs
|
|
660
|
+
`id` equality instead.
|
|
661
|
+
- That copy is a JSON round-trip, so inline rows must be JSON-serializable.
|
|
662
|
+
A record graph carrying a back-reference, or a `BigInt` id, now renders an
|
|
663
|
+
error panel instead of the view. `ObjectGantt` has refused the same input
|
|
664
|
+
since before objectui#8769; `ObjectMap` did not, and pinned that it need not
|
|
665
|
+
(objectui#6018). ⚠️ That pin is left RED and untouched in this change — see
|
|
666
|
+
the pull request body.
|
|
667
|
+
- 7098eed: One record-overlay shell: all five list-type renderers honour all four overlay
|
|
668
|
+
`navigation.mode` values (objectui#9299, director seat decision batch #128 item
|
|
669
|
+
1, 2026-09-13).
|
|
670
|
+
|
|
671
|
+
`ObjectGantt`, `ObjectKanban` and `ObjectCalendar` rendered one drawer for every
|
|
672
|
+
authored mode — `modal`, `split` and `popover` silently WERE the drawer, with no
|
|
673
|
+
diagnostic. `RecordDetailDrawer`'s payload is extracted into the new
|
|
674
|
+
`RecordDetailPanel` (shell-free by construction) and mounted through the shared
|
|
675
|
+
`NavigationOverlay`, which is what `ObjectGrid` and `ObjectTree` already used.
|
|
676
|
+
|
|
677
|
+
User-visible on published surfaces:
|
|
678
|
+
|
|
679
|
+
- **`modal` / `split` / `popover` now do what they say** on the gantt, the
|
|
680
|
+
kanban and the calendar.
|
|
681
|
+
- **`split` renders.** Each renderer passes its own view as `mainContent`, so
|
|
682
|
+
the board / calendar / chart / tree / grid sits beside the record panel.
|
|
683
|
+
Authored `split` used to render NOTHING on `ObjectTree` — and, measured while
|
|
684
|
+
fixing this, on `ObjectGrid` too.
|
|
685
|
+
- **`popover` is anchored to the element the user clicked** — row, node, bar,
|
|
686
|
+
card, event — instead of degrading to a centred dialog. It was honoured on no
|
|
687
|
+
surface before.
|
|
688
|
+
- **Drawer chrome converges** on the shared shell's header (breadcrumb title,
|
|
689
|
+
close, optional expand) for the three renderers that brought their own.
|
|
690
|
+
- **Drawer widths carry over, they are not reset.** The two drag-resize
|
|
691
|
+
implementations become one: a width persisted under the retired
|
|
692
|
+
`objectui.drawerWidth.OBJECT` is read once, written forward to
|
|
693
|
+
`ov:drawer-width:OBJECT` and removed. One key per object across every view
|
|
694
|
+
type. The default width is unchanged at every viewport (objectui#6584); an
|
|
695
|
+
authored width below `min(60vw, 880px)` now widens to it, which is the shell's
|
|
696
|
+
long-standing policy on grid and tree.
|
|
697
|
+
- **Richer record body on grid and tree** — typed widgets, declared labels,
|
|
698
|
+
honoured `hidden` — wherever the object declares its fields. With nothing
|
|
699
|
+
declared those two renderers keep their own value-inference reading, which is
|
|
700
|
+
what preserves the locale-aware date fallback (objectui#4541), the localized
|
|
701
|
+
empty placeholder (objectui#8491) and the `format` hint (objectui#8920); the
|
|
702
|
+
overlay shell is the shared one on that path too.
|
|
703
|
+
|
|
704
|
+
New published API: `RecordDetailPanel`, `buildRecordDetailFields`,
|
|
705
|
+
`RECORD_OVERLAY_DEFAULT_WIDTH` (`@object-ui/plugin-detail`);
|
|
706
|
+
`useOverlayAnchor`, `recordOverlayWidthStorageKey`,
|
|
707
|
+
`legacyRecordDrawerWidthKey` and the `popoverAnchorRef` / `legacyStorageKey`
|
|
708
|
+
props on `NavigationOverlay` (`@object-ui/components`). `RecordDetailDrawer`
|
|
709
|
+
keeps its props and is now a thin wrapper over the shared shell. ⛔ No spec
|
|
710
|
+
change.
|
|
711
|
+
- 502eb58: The row/card click props on the view components now declare the modifier
|
|
712
|
+
payload they have always been invoked with (objectui#9357).
|
|
713
|
+
|
|
714
|
+
`useNavigationOverlay`'s `handleClick` invokes the handler it is given with two
|
|
715
|
+
arguments — the record, and an optional modifier payload (`metaKey` / `ctrlKey`
|
|
716
|
+
/ `button`) a host needs to implement Cmd/Ctrl/middle-click. objectui#9360 made
|
|
717
|
+
the hook's own option say so. These components pass a host-supplied prop
|
|
718
|
+
straight into that option, so the value a host writes against them is invoked
|
|
719
|
+
with two arguments too — and every one of these props declared only the record.
|
|
720
|
+
The payload was therefore invisible on the one line a host reads, exactly as it
|
|
721
|
+
had been on the hook.
|
|
722
|
+
|
|
723
|
+
Thirteen declarations across nine packages now name both parameters:
|
|
724
|
+
|
|
725
|
+
- `ObjectGridComponentProps.onRowClick`
|
|
726
|
+
- `ObjectKanbanComponentProps.onRowClick` (its sibling `onCardClick`, the other
|
|
727
|
+
arm of the same fallback, already declared both)
|
|
728
|
+
- `KanbanRendererProps.schema.onCardClick`
|
|
729
|
+
- `ObjectCalendar`, `ObjectGantt`, `ObjectMap`, `ObjectTree`: `onRowClick`
|
|
730
|
+
- `ObjectTimeline`: `onRowClick` and `onItemClick`, the two arms of one fallback
|
|
731
|
+
- `ListView.onRowClick`
|
|
732
|
+
- `ObjectGallery`: `onRowClick` and `onCardClick`, likewise two arms of one
|
|
733
|
+
- `RelatedList.onRowClick`
|
|
734
|
+
|
|
735
|
+
**Source-compatible, and with no refused class.** A one-parameter handler is
|
|
736
|
+
still assignable to the widened signature, and a handler written against the
|
|
737
|
+
widened signature was already assignable to the narrow one — its minimum
|
|
738
|
+
argument count is still one. The second parameter is spelled `any` rather than
|
|
739
|
+
`HandleClickModifiers`, which is the difference that matters for callers: the
|
|
740
|
+
hook's own option names that interface and therefore refuses a handler whose
|
|
741
|
+
second parameter is annotated narrower (objectui#9360 documents that class and
|
|
742
|
+
the one-line remedy). These faces refuse nothing. A host that discovered the
|
|
743
|
+
payload from the implementation and annotated it `React.MouseEvent` — which is
|
|
744
|
+
what actually arrives — keeps compiling. `any` is also the spelling
|
|
745
|
+
`ObjectKanbanSchema.onCardClick` already carries for this same payload
|
|
746
|
+
(objectui#9341) and the one `BaseSchema`'s own `onClick` / `onChange` /
|
|
747
|
+
`onSubmit` use, and it is forced on the published twins in `@object-ui/types`,
|
|
748
|
+
which may not name a type that lives in a package depending on them.
|
|
749
|
+
|
|
750
|
+
**Runtime behaviour is unchanged.** Nothing is newly called and nothing newly
|
|
751
|
+
passes an argument; only the declarations move.
|
|
752
|
+
|
|
753
|
+
Three declarations that share the name and the shape are deliberately NOT
|
|
754
|
+
widened, because the value flowing through them is not invoked with the
|
|
755
|
+
payload: `VirtualGrid.onRowClick`, whose second parameter is a row index;
|
|
756
|
+
`ManageViewsDialog.onRowClick`, which receives a view id; and the `data-table`
|
|
757
|
+
family (`DataTableSchema.onRowClick`, `ObjectDataTableSchema.onRowClick`),
|
|
758
|
+
whose renderer invokes with one argument. Widening those would have declared a
|
|
759
|
+
payload that never arrives.
|
|
760
|
+
- ab856ed: **`resolveRecordSourceConfig`'s `data` parameter now follows the arm it is already told, instead of contradicting it.**
|
|
761
|
+
|
|
762
|
+
The shared record-source ladder in `@object-ui/core` takes a REQUIRED `dataArm` argument precisely because blocks declare `data` differently — its own docblock says there is no repo-wide default, "because the answer differs per block and a default is how the second de-facto contract got in" (ruling objectui#8348, decision batch #83, 「8348 以协议为准」). Its parameter nevertheless declared a flat `data?: ViewData` — a discriminated union over four strict OBJECT arms, with no array member — while its rung-1 predicate `authoredDataIsOnTheDeclaredArm` takes `unknown` and admits an ARRAY on the `'array'` arm. The declaration contradicted the contract the same function documents and implements.
|
|
763
|
+
|
|
764
|
+
The `data` member is now `AuthoredRecordSourceData<Arm>`, a new exported conditional type keyed on the arm:
|
|
765
|
+
|
|
766
|
+
- `'view-data'` → `ViewData`. **Unchanged** — this is what the flat declaration said, and it was right for the three blocks on this arm (`object-grid`, `object-map`, `object-gantt`).
|
|
767
|
+
- `'array'` → `unknown[]`, the shape `ComponentPropsMap['object-calendar'].data` declares (`z.array(z.unknown()).optional()`, "Pre-fetched records").
|
|
768
|
+
- `'undeclared'` → `unknown`, since no published face declares a `data` row for such a block and rung 1 keeps its pre-8348 verbatim behaviour there.
|
|
769
|
+
|
|
770
|
+
⚠️ **Type-level only — no runtime accept set moves.** Nothing in the ladder's body changed: `authoredDataIsOnTheDeclaredArm` still takes `unknown` and still decides rung 1 on the value's KIND, so every resolved config — including the off-arm ones that fall through to `staticData` and then `objectName` — is what it was. The emitted JavaScript of both packages is unchanged by this card.
|
|
771
|
+
|
|
772
|
+
⚠️ **One compile-time refusal is new**, and it is the half that keeps this from being a mere widening: a caller that declares a `ViewData` provider block under `data` while passing `'array'` no longer type-checks. That document was already refused at runtime by objectui#8348, and by `os validate` and the save gate before that; only the signature still accepted it. A caller that holds the arm as a `RecordSourceDataArm` variable rather than a literal is unaffected — the conditional type distributes to `unknown` there, which a set of literal-armed overloads would not have done.
|
|
773
|
+
|
|
774
|
+
`@object-ui/plugin-calendar` loses the cast that stood in for the missing declaration: `ObjectCalendar`'s ladder call passed `data: schema.data as ViewData | undefined`, in a comment reporting an upstream defect in `@object-ui/core`. The three members are still passed one by one — they are what the ladder documents itself as reading — but the member is now `data: schema.data`, and `packages/plugin-calendar` type-checks green without the assertion.
|
|
775
|
+
|
|
776
|
+
Two stale docblock passages in `record-source.ts` and `record-source-config.behaviourNeutrality-7632.test.ts` explained `ObjectCalendar`'s retired `'data' in schema` guard by the props union `ObjectGridSchema | CalendarSchema`, which objectui#8651 retired — `ObjectCalendarComponentProps.schema` is the published `ObjectCalendarSchema` today. Both now say that the clause is history rather than a reading anyone can re-derive from `main`.
|
|
777
|
+
- 51e144e: fix(plugin-calendar): type `ObjectCalendar` at the published `object-calendar` schema, and declare the `calendar` container
|
|
778
|
+
|
|
779
|
+
`ObjectCalendarComponentProps.schema` was the union `ObjectGridSchema | CalendarSchema` — a grid's schema, plus a plugin-local interface absent from this package's barrel. Neither arm is the schema of the element this renderer is registered as. Measured with the TypeScript checker: of the fifteen keys the renderer reads off the node, seven were undeclared on that union and had to be read through a cast, while five more resolved only through `ObjectGridSchema`'s index signature and were therefore typed `any` — admitted, never examined. `ObjectCalendarSchema` already declared eleven of the fifteen.
|
|
780
|
+
|
|
781
|
+
- `ObjectCalendarComponentProps.schema` is now `ObjectCalendarSchema`. **Breaking for a React host that passed an `object-grid` node or a `type: 'calendar'` literal to `ObjectCalendar`** — neither was ever a node this renderer is registered for. `ObjectCalendarProps`, the deprecated alias, follows it.
|
|
782
|
+
- `ObjectCalendarSchema.calendar` is declared on both published faces. The spec declares the KEY; it does **not** declare its shape — `ComponentPropsMap['object-calendar'].calendar` is `z.unknown().optional()` and accepts anything at that position — so the member list is objectui's own: the four `CalendarConfigSchema` names plus objectui's `allDayField`, which is what the renderer reads out of the block. The container keeps `.passthrough()`, so no KEY that parsed before is refused — an unexamined key inside the block still parses, and so do `calendar.dateField` and `calendar.defaultView`. What is new is VALUE validation: `calendar: 42` and `calendar: { startDateField: 42 }` are refused where both were admitted unexamined.
|
|
783
|
+
- `@object-ui/types` now exports the type `ObjectCalendarBlockConfig`, so that published member has a name an importer can write.
|
|
784
|
+
- ⚠️ The `dateField` / `endField` alias rungs in `getCalendarConfig` are **kept**, and routed to the producer. An earlier revision of this change retired them on a census that was false: `ListView` flattens an authored `calendar` block onto the node it emits, and `resolveTimelineDateBinding` in that same file documents `dateField` as the pre-#2231 alias for `startDateField` and honours it — so a view authored that way renders today and would have drawn "Calendar configuration required". (objectui's own `ListViewSchema` also accepts `calendar.dateField`, but only weakly: that block is `.passthrough()` and admits nonsense too, so the load-bearing half is the producer and the read site, not the accept.) No behaviour changes for either spelling. The alias question already has a carrier — objectui#8355, open and undecided — and the producer-side remedy belongs in `ListView`'s calendar branch.
|
|
785
|
+
|
|
786
|
+
**Correction, 2026-10-01 (objectui#8831).** Two statements in this entry are false against the tree this release ships, for two different reasons.
|
|
787
|
+
|
|
788
|
+
- "the four `CalendarConfigSchema` names plus objectui's `allDayField`": `@objectstack/spec` 17.5.0, which this same release installs, declares all five on `CalendarConfigSchema`, so the container's members are the spec's five. objectui#11073's bump made this false, not this entry and not objectui#8831. What the same bullet says about the spec at this position still holds on 17.5.0: `ComponentPropsMap['object-calendar'].calendar` declares the key but not its shape, and accepts `calendar: 42`.
|
|
789
|
+
- "and so do `calendar.dateField`", and the ⚠️ bullet's "The `dateField` / `endField` alias rungs in `getCalendarConfig` are **kept**": objectui#8355 retired both rungs in this same release. `getCalendarConfig` no longer reads either spelling, and the container refuses `calendar.dateField` and `calendar.endField` by name (see objectui#8355's own entry). objectui#8355 made these false, not objectui#11073 and not objectui#8831. An unexamined key and `calendar.defaultView` still parse inside the block, and the value validation this entry adds (`calendar: 42` and `calendar: { startDateField: 42 }` are refused) still holds.
|
|
790
|
+
|
|
791
|
+
### Patch Changes
|
|
792
|
+
|
|
793
|
+
- afb2284: `ObjectCalendar`'s user-visible copy now reaches the locale packs. The component
|
|
794
|
+
was already i18n-aware — it imports and calls both translation hooks — and a set
|
|
795
|
+
of English sentences sat beside those calls as literals, so a non-English session
|
|
796
|
+
read a half-translated calendar: the unscheduled label and the two write-failure
|
|
797
|
+
toasts in its own language, and the loading screen, the error screen, the refusal
|
|
798
|
+
screen, the pull-to-refresh affordance, the whole quick-create dialog and the
|
|
799
|
+
record overlay's fallback title in English (objectui#10031).
|
|
800
|
+
|
|
801
|
+
Every one of those now reads a key. Two of them reuse keys the packs already
|
|
802
|
+
carried (`common.cancel`, `common.create`), one reuses `calendar.newEvent`, and
|
|
803
|
+
twelve are new under `calendar.`.
|
|
804
|
+
|
|
805
|
+
**The hook is chosen per site by one criterion, which the file already stated for
|
|
806
|
+
its existing call:** `useSafeTranslate`'s `tt(key, fallback)` passes no options to
|
|
807
|
+
i18next and therefore cannot fill a hole, so the two sentences that carry one —
|
|
808
|
+
the error prefix and the quick-create date line — read their key through
|
|
809
|
+
`useObjectTranslation`'s `t()` with an inline default, and every hole-free string
|
|
810
|
+
uses `tt()`.
|
|
811
|
+
|
|
812
|
+
**⚠️ A key added to `en` is not an `en`-only change in this repo**, and that is
|
|
813
|
+
worth stating because the cheap route looks available: the English fallback does
|
|
814
|
+
carry the English text at the call site, but the key-set invariant is a
|
|
815
|
+
pack-vs-pack one — every pack defines every `en` key — so it is answered by the
|
|
816
|
+
locale packs, not by the call site. All ten packs therefore carry the twelve new
|
|
817
|
+
keys, with real translations rather than the English value. The instrument that
|
|
818
|
+
says so is `all-locales-key-parity.test.ts`; `pnpm check:i18n-drift` prints which
|
|
819
|
+
of the two owns an addition.
|
|
820
|
+
|
|
821
|
+
**One rendered English string moved**: the loading placeholder's three ASCII full
|
|
822
|
+
stops became the typographic ellipsis, because its sentence is now a pack value
|
|
823
|
+
and `ellipsis-glyph-3878.test.ts` holds every pack value to U+2026. The refusal
|
|
824
|
+
screen's copy is byte-identical to what it rendered before, which is what keeps
|
|
825
|
+
the five suites that pin it green.
|
|
826
|
+
- 875ee61: fix(plugin-calendar, plugin-map, plugin-gantt): the registrations' `inputs` agree with the record-source rule
|
|
827
|
+
|
|
828
|
+
All three blocks read their records from one of `data`, `staticData` and
|
|
829
|
+
`objectName` (in that order), and their `@object-ui/types` zod schemas enforce
|
|
830
|
+
"one of the three" through `requireRecordSource`. The designer-facing `inputs`
|
|
831
|
+
on the registrations disagreed with that rule in two ways:
|
|
832
|
+
|
|
833
|
+
- `object-calendar` and `calendar` still declared `objectName` as required, so
|
|
834
|
+
the html tier's validator reported a `missing-required-prop` error on a
|
|
835
|
+
calendar authored on `staticData` or `data`, which the schema accepts and the
|
|
836
|
+
renderer draws. `objectName` is now declared without `required`, and its
|
|
837
|
+
description states the rule, as objectui#7470 did for map and gantt
|
|
838
|
+
(objectui#10392).
|
|
839
|
+
- `object-map`, `map` and `object-gantt` did not declare `data` or
|
|
840
|
+
`staticData`, so the validator reported a block authored on either as an
|
|
841
|
+
unknown prop. At this change both were declared on all three, on the schema's
|
|
842
|
+
own arms: `data` is a `{ provider, … }` data-source configuration (an object,
|
|
843
|
+
so a bare array there draws a type diagnostic, matching the schema), and
|
|
844
|
+
`staticData` is an array of records. Each description says what the renderer
|
|
845
|
+
does with the key, including that the map does not implement the `api`
|
|
846
|
+
provider (objectui#10394).
|
|
847
|
+
|
|
848
|
+
⚠️ **Dated note, 2026-09-25 — the bare `map` registration has since been
|
|
849
|
+
retired — objectui#10393.** Later in this same release `@object-ui/plugin-map`
|
|
850
|
+
stopped registering the bare `map` key (and its namespaced twin `view:map`),
|
|
851
|
+
so `map` declares nothing: a node authored `"type": "map"` resolves no
|
|
852
|
+
renderer, and the html tier reports it as `unknown-component`. The
|
|
853
|
+
`object-map` and `object-gantt` registrations keep both inputs exactly as
|
|
854
|
+
described above. The rest of this entry is kept as the reading of this
|
|
855
|
+
change; the objectui#10393 entry states what ships.
|
|
856
|
+
|
|
857
|
+
The renderers' read order and the zod schemas are unchanged. The
|
|
858
|
+
`@object-ui/plugin-gantt` README sentence that listed the registration's inputs
|
|
859
|
+
is updated.
|
|
860
|
+
|
|
861
|
+
**Correction, 2026-10-01 (objectui#11117).** "One of the three" now has an exception on all
|
|
862
|
+
three blocks: a block that declares none of them is accepted when its `dataSource.object` names
|
|
863
|
+
the object, because the registration's `ElementDataSourceGate` lands that name on `objectName`.
|
|
864
|
+
The `objectName` input description now says so.
|
|
865
|
+
- e5f4343: Four more date faces now follow the display locale, not the UI language (objectui#10442).
|
|
866
|
+
|
|
867
|
+
Each one takes its locale from `useDisplayLocale()` instead of the UI language. With an English UI and
|
|
868
|
+
a `de-CH` display locale, a date that used to read `3/4/2020` now reads `4.3.2020`. With no display
|
|
869
|
+
locale declared, the display locale falls back to the UI language, so these dates render as before.
|
|
870
|
+
|
|
871
|
+
- `data-table` (`@object-ui/components`): the ISO date and datetime cells.
|
|
872
|
+
- The record page's History tab (`@object-ui/app-shell`): the `date` and `datetime` values in each
|
|
873
|
+
field diff.
|
|
874
|
+
- `ResourceWorkload` (`@object-ui/plugin-gantt`): the column labels and the cell tooltips. With no
|
|
875
|
+
language at all it used to fall through to the machine's locale; it now gets the display locale's
|
|
876
|
+
own last resort.
|
|
877
|
+
- `CalendarView` (`@object-ui/plugin-calendar`): the default locale for the header, the weekday
|
|
878
|
+
columns and the day cells. An explicit `locale` prop still wins over the display locale.
|
|
879
|
+
- 4a3d500: `object-calendar` re-reads its events when the data-invalidation bus (`notifyDataChanged` from `@object-ui/react`) reports a change to the object it queries (objectui#10572). A write that bypasses the data source — a page action over raw HTTP, a flow, a server action — fires no `onMutation`, so a calendar on a page used to show it only when the whole page was remounted. Inline and external events are still the host's to refresh.
|
|
880
|
+
- d435e96: fix(plugin-calendar): a failed load no longer keeps `ObjectCalendar` on its error screen after a later load succeeds (objectui#10663)
|
|
881
|
+
|
|
882
|
+
`ObjectCalendar` set `error` when its fetch failed, and the render returns the
|
|
883
|
+
error screen early whenever `error` is set. Nothing ever cleared it. Every later
|
|
884
|
+
load that succeeded still wrote its events, but the calendar stayed on the error
|
|
885
|
+
screen until it remounted. Since objectui#10572 the calendar re-reads on every
|
|
886
|
+
data-invalidation event, so one failed background re-read was enough.
|
|
887
|
+
|
|
888
|
+
The current run of the fetch now clears the error when it commits rows, on each
|
|
889
|
+
of its commit branches: those rows answer the current query, so the earlier
|
|
890
|
+
failure no longer describes the screen. This is the rule objectui#10578 set for
|
|
891
|
+
`ObjectGantt`. The clear sits inside the run's existing `isMounted` guard, so a
|
|
892
|
+
superseded run cannot clear the current run's error. The error is not cleared
|
|
893
|
+
when a run starts; it stays until rows land.
|
|
894
|
+
|
|
895
|
+
Rows a parent hands over through `data` clear it too, beside the row-ceiling
|
|
896
|
+
reset that already sits there for the same reason: those rows are not the query
|
|
897
|
+
that failed.
|
|
898
|
+
|
|
899
|
+
A failed background re-read is still reported: the calendar has no silent mode,
|
|
900
|
+
so it shows the error screen rather than keeping the last good events, and the
|
|
901
|
+
next re-read that succeeds takes the screen back.
|
|
902
|
+
- f9c06ef: Every data node that sends its own authored `filter` into a query now resolves the spec's context tokens first (objectui#10666). With `filter: [['owner', '=', '{current_user_id}']]` these nodes used to send the literal token; they now send the signed-in user's id, and `{current_org_id}` resolves to the active organization:
|
|
903
|
+
|
|
904
|
+
- `object-calendar`, `object-map` and `object-tree`, on both the object query and the inline (`provider: 'value'`) query;
|
|
905
|
+
- `object-gantt`, `object-kanban` and `object-timeline`;
|
|
906
|
+
- `record:related_list` and `record:line_items`, where the node's own filter is combined with the parent-record condition;
|
|
907
|
+
- the `element:repeater`, `element:number` (both the `aggregate` filter and the `find` fallback) and `element:record_picker` page elements.
|
|
908
|
+
|
|
909
|
+
`list-view`, `object-grid` and `object-gallery` already did this, and are unchanged.
|
|
910
|
+
|
|
911
|
+
**New in `@object-ui/react`: `useResolvedFilter(filter, scope)`.** Pass it a node's authored filter and `useFilterScope()`. It resolves the filter through `@object-ui/core`'s shared `resolveFilterPlaceholders` and holds the result: re-rendering with an equal filter (even one rebuilt inline on every render) hands back the same value, so a fetch effect keyed on it does not run again, while a structurally different filter or a change of signed-in user or organization resolves again. A filter with no token to resolve is handed back as the value you passed in. The hold is the one `list-view` and `object-gallery` used privately; `plugin-list` now imports it from here, and no second copy remains in that package.
|
|
912
|
+
|
|
913
|
+
What changes for an app:
|
|
914
|
+
|
|
915
|
+
- A filter with no placeholders reaches the query as before, unchanged.
|
|
916
|
+
- Nodes that re-queried whenever the host rebuilt an equal filter inline (`object-calendar`, `object-gantt`, `object-kanban`, `object-map`, `object-tree`) no longer issue those redundant queries.
|
|
917
|
+
- Date macros such as `{today}` in these nodes' own filters are now resolved in the browser's local time, as they already are for `list-view`, `object-grid` and `object-view`. Before, they reached the server as literals, and the server resolved them in the tenant's time zone.
|
|
918
|
+
|
|
919
|
+
`@object-ui/types`: the `filter` docblocks on `ObjectMapSchema`, `ObjectTreeSchema`, `ObjectGanttSchema`, `ObjectCalendarSchema`, `ObjectKanbanSchema`, `ObjectChartSchema` and `ObjectGallerySchema` (and the matching zod descriptions) no longer say the filter is forwarded verbatim; they say its context tokens are resolved first. No type changes.
|
|
920
|
+
- 1659f14: The calendar's quick-create dialog now formats its date with the same locale as the month grid (objectui#10668).
|
|
921
|
+
|
|
922
|
+
`ObjectCalendar`'s quick-create dialog used its `locale` prop as is. When no host passed one, that was
|
|
923
|
+
`undefined`, so the dialog's date and time followed the machine's locale while the grid beside it
|
|
924
|
+
followed the display locale. The dialog now uses the grid's rule: an explicit `locale` prop still wins,
|
|
925
|
+
and otherwise the dialog reads `useDisplayLocale()`. With an English UI and a `de-CH` display locale,
|
|
926
|
+
clicking 18 March now opens a dialog reading `On 18. März 2020`.
|
|
927
|
+
- 13220af: fix(plugin-calendar): `CalendarView`'s header date popover reads the same locale as its grids (objectui#10747)
|
|
928
|
+
|
|
929
|
+
`CalendarView` formats its header and its month, week and day grids with one
|
|
930
|
+
locale: an explicit `locale` (an `object-calendar` node's authored `locale`
|
|
931
|
+
arrives this way), else the display locale. The header's date popover mounted
|
|
932
|
+
`Calendar` with no locale, so it read the display locale even when the grids
|
|
933
|
+
read another one. Under an `en-US` display locale with `locale: 'de-CH'`, the
|
|
934
|
+
header read `März 2020` and the popover under it read `March 2020` over
|
|
935
|
+
`Su Mo Tu …`.
|
|
936
|
+
|
|
937
|
+
The popover now passes its grids' locale to `Calendar` as `localeTag`, so both
|
|
938
|
+
faces read `März 2020`, and the popover's week starts on Monday. With no
|
|
939
|
+
`locale`, both read the display locale, as before. This package takes no
|
|
940
|
+
date-fns dependency: the tag is resolved inside `@object-ui/components`.
|
|
941
|
+
- c5ec15c: fix: every `Calendar` picker opens on its selected date's month, not today's (objectui#10799)
|
|
942
|
+
|
|
943
|
+
react-day-picker opens on `month`, else `defaultMonth`, else today, and
|
|
944
|
+
`selected` does not move it. Five `Calendar` mounts passed `selected` only, so
|
|
945
|
+
a value outside the current month opened the picker on today's month: with
|
|
946
|
+
the calendar on 4 March 2020 and today in September 2026, the header of
|
|
947
|
+
`CalendarView` read `March 2020` while the popover under it opened on
|
|
948
|
+
`September 2026`, with no selected day in view.
|
|
949
|
+
|
|
950
|
+
Each mount now passes its first selected day as `defaultMonth`:
|
|
951
|
+
|
|
952
|
+
- `CalendarView`'s header date popover (`@object-ui/plugin-calendar`) opens on
|
|
953
|
+
the date the header names, and follows Previous / Next between opens;
|
|
954
|
+
- `ui:calendar` opens on its day in `single` mode, on the first valid listed
|
|
955
|
+
day in `multiple` mode (an entry that is not a date is skipped) and on `from`
|
|
956
|
+
in `range` mode. It reads that month once, when it mounts: a value that
|
|
957
|
+
changes afterwards does not move the month it shows;
|
|
958
|
+
- the form date picker (`date-picker`) and `DatePicker` open on their value;
|
|
959
|
+
- the dashboard date filter's custom-range calendar
|
|
960
|
+
(`@object-ui/plugin-dashboard`) opens on the range's `from`.
|
|
961
|
+
|
|
962
|
+
With no value, each still opens on today. react-day-picker throws on an
|
|
963
|
+
invalid `defaultMonth`, so a day that names no instant is not passed as one: an
|
|
964
|
+
unparseable `ui:calendar` day, a range `from` that does not parse, and an
|
|
965
|
+
invalid `Date` a host hands `CalendarView` each open on today, as before. The
|
|
966
|
+
two date pickers are unchanged in this respect: an invalid value already fails
|
|
967
|
+
in their trigger's label, before any calendar mounts. The `Calendar` primitive
|
|
968
|
+
itself is unchanged.
|
|
969
|
+
- 6650259: fix(plugin-calendar): a day event moved across a DST change writes the days it was dropped on (objectui#10866, slice 4)
|
|
970
|
+
|
|
971
|
+
- **plugin-calendar.** At this change the month grid moved each date of an event by the milliseconds between two local midnights, the grabbed cell's and the drop cell's, and a date-only value is read at local midnight of its day. So when a DST change lay between one of an event's dates and where it landed, but not between the two cells (or the other way round), that date came back an hour off local midnight; at 23:00 of the day before, the write took the day before. Under `America/Los_Angeles` a span of `date` fields moved across November 1st or March 8th could be written a day short at its start or its end. A move of an event whose start, and end when it has one, are both stored calendar days now writes each `date` field as its stored day moved by the whole days the grid moved it. Every other write is unchanged: a `datetime` field still writes the instant the grid hands back, and at this change the grid's own arithmetic does not change.
|
|
972
|
+
|
|
973
|
+
⚠️ **Dated note, 2026-09-29 — the month grid now moves by calendar days — objectui#11005.** Later in this same release the month grid moves a value by the calendar days between the grabbed cell and the drop cell and keeps its time of day, for a move and for a drag of a span's end, so a 10:00 `datetime` stays at 10:00 across a DST change. A `date` value read at local midnight of its day then comes back at local midnight of the day it was dropped on, so the repair described above is removed and a moved `date` field is written as that local day, which is the same day the repair wrote. The rest of this entry is kept as the reading of this change; the objectui#11005 entry states what ships.
|
|
974
|
+
- **plugin-gantt, types.** The business `timeZone` prose (`GanttConfig.timeZone`, `GanttViewProps.timeZone` and `makeTzShift`) said persisted data stays real instants. A `date` field under a zoned chart has been written as a calendar day since this card's first slice; at this change the prose says so, and says that near a DST change of the chart's zone or the viewer's the shim can place a day's midnight an hour early, onto the day before. Documentation only.
|
|
975
|
+
|
|
976
|
+
⚠️ **Dated note, 2026-09-29 — a zoned chart reads and writes a day exactly on a DST change — objectui#10866, slice 5.** Later in this same release `ObjectGantt` inverts the shim exactly for a date-only day, so a stored day is drawn from its own midnight and a drop writes the day it was dropped on, on a DST change of the chart's zone or the viewer's too. The `GanttConfig.timeZone` and `GanttViewProps.timeZone` prose no longer says a day can land on the day before, and `makeTzShift`'s says a day does not take the shim's round trip. The rest of this entry is kept as the reading of this change; the slice-5 entry states what ships.
|
|
977
|
+
- **core.** The `DATEADD` / `DATEDIFF` / `DATEFORMAT` docblock names how a mixed `DATEDIFF`, one day and one instant, reads each argument when it counts months or years. Comment only.
|
|
978
|
+
- 4f8b7f8: fix(plugin-calendar,plugin-gantt): a stored date-only day shows on that day in every viewer zone, and a `date` field is written back as a calendar day (objectui#10866, slice 1)
|
|
979
|
+
|
|
980
|
+
The calendar and the gantt read a record's `YYYY-MM-DD` value with the engine's own `Date` parse, which reads it as UTC midnight. West of UTC a task due on the 5th therefore showed on the 4th, in both views. Moving it then wrote `toISOString()` into the field: a UTC instant stored in a `Field.date`.
|
|
981
|
+
|
|
982
|
+
- **Reads.** Every date-only read in the two plugins now goes through `toDisplayDate` from `@object-ui/core`, which reads the value at local midnight of the day it names. In the calendar these are the object calendar's event start and end, and the `calendar-view` node's events and its authored `currentDate`. In the gantt they are the task start, end and baselines, a marker authored as a day, and the day typed into the inline editor. A value with a time keeps its instant.
|
|
983
|
+
- **Writes.** A calendar drop, a calendar quick-create and a gantt drag now write a field declared `date` as the local calendar day, `yyyy-MM-dd`. A `datetime` field keeps its instant. When no object schema is available to say which type a field is, the stored value's own shape decides, which is the same split the read makes; a calendar quick-create has no stored value, so there it still writes the instant.
|
|
984
|
+
- **Gantt `timeZone`.** A chart with a business `timeZone` re-bases every instant into that zone. A date-only day is not re-based: its bar and its marker stand on that day of the chart's calendar for every viewer, and a drop writes the day of the chart's calendar that the bar was dropped on.
|
|
985
|
+
- **Gantt working calendar.** `skipWeekends` / `holidays` now count the chart's own calendar days (local midnight, the same keys the day columns already folded by) rather than UTC days. The UTC floor put a rescheduled successor on the previous day in every zone except UTC once date-only values read as local days. `@object-ui/types` updates the `holidays` description to match.
|
|
986
|
+
|
|
987
|
+
The timeline, charts, formula date functions and i18n helpers are later slices of objectui#10866.
|
|
988
|
+
- f9b6dfe: fix(plugin-calendar): a month-grid move keeps the wall-clock time across a DST change (objectui#11005)
|
|
989
|
+
|
|
990
|
+
The month grid moved an event by the milliseconds between the grabbed cell's local midnight and the drop cell's. Across a DST change that span is 23 or 25 hours. Under `America/Los_Angeles`, a 10:00 event moved onto or off November 1st or March 8th landed at 09:00 or 11:00. A span starting at local midnight, grabbed on a later day and moved, started at 23:00 of the day before the one it was dropped on. The calendar's own month-view quick-create writes such local-midnight instants.
|
|
991
|
+
|
|
992
|
+
- **Move.** The grid now counts the calendar days between the grabbed cell and the drop cell and moves the start and the end by that many days on the local calendar. Each keeps its hours, minutes, seconds and milliseconds, so a 10:00 event stays at 10:00 on the day it is dropped on, whatever DST change lies between. This deliberately changes the instant a drag writes into a `datetime` field; what a `datetime` field stores and how it is read are unchanged. In a zone without DST every day is 24 hours, so a move writes what it wrote before.
|
|
993
|
+
- **Drag of a span's end.** The right-edge handle moves the end by calendar days the same way. It already kept the end's hours, minutes and seconds; it now keeps its milliseconds too.
|
|
994
|
+
- **`date` fields.** A `date` value is read at local midnight of its day, so it now comes back at local midnight of the day it was dropped on, and `ObjectCalendar` writes that local day. The `ObjectCalendar` repair from objectui#10866, which moved a day event's stored day by the whole days the grid moved it, is removed: every day move it pinned writes the same day without it.
|
|
995
|
+
- The week and day views are unchanged. Their time grid places a moved event at its snapped time on the drop day's own clock, not by a day delta.
|
|
996
|
+
- 2a1779f: fix(plugin-calendar): a week or day view move keeps the event's own length and grab point (objectui#11037)
|
|
997
|
+
|
|
998
|
+
The week and day views draw an event that crosses midnight as one piece per day, clipped at midnight, and a short event as a piece at least 15 minutes tall. A move took its length and its grab offset from the grabbed piece. So a 22:00 to 02:00 event dragged by its first piece to 10:00 was handed to `onEventDrop` as 10:00 to 12:00, and `ObjectCalendar`'s default drop handler writes what it is handed. Grabbed by its second piece, the event's start went where its midnight had been grabbed. A 5-minute event came back 15 minutes long.
|
|
999
|
+
|
|
1000
|
+
- **Length.** A move now keeps the event's own `end - start`, as elapsed time, so a `datetime` event keeps its real length. On the night a DST change falls in, the wall clock shows that length an hour longer or shorter: a 4-hour event placed at 22:00 on the night the clocks fall back reads 22:00 to 01:00.
|
|
1001
|
+
- **Grab point.** The grabbed point's offset is measured from the event's own start, so the point under the pointer stays under the pointer. A 22:00 to 02:00 event grabbed at its own 00:00 and dropped at 10:00 is written 08:00 to 12:00.
|
|
1002
|
+
- **Crossing midnight.** An event that crosses midnight is placed where it is dropped, so it can stay overnight; before, it was held to end by midnight of the drop day. An event drawn wholly inside one day is still held inside the drop day, as before.
|
|
1003
|
+
- The drag preview is labelled with the whole event's times and drawn over the part of it that falls on the drop day.
|
|
1004
|
+
- An event with no end is still handed an end one hour after its new start. All-day and date-only events sit in the all-day row, which has no drag, so nothing about them changes. The month grid and the resize handles are unchanged.
|
|
1005
|
+
- 3e71a98: fix(plugin-calendar): a week or day resize of an overnight event keeps its other edge (objectui#11060)
|
|
1006
|
+
|
|
1007
|
+
The week and day views draw an event that crosses midnight as one piece per
|
|
1008
|
+
day, clipped at midnight, and a short event as a piece at least 15 minutes
|
|
1009
|
+
tall. The top resize handle sits on the event's first piece and the bottom
|
|
1010
|
+
handle on its last. A resize rebuilt both edges on the grabbed piece's day,
|
|
1011
|
+
the untouched one from that piece's clipped bound. So a 22:00 to 02:00 event
|
|
1012
|
+
resized by its top handle to 21:00 was written 21:00 to 00:00, losing the two
|
|
1013
|
+
hours past midnight, and resized by its bottom handle to 03:00 was written
|
|
1014
|
+
00:00 to 03:00, its start moved to midnight. A press and release on the top
|
|
1015
|
+
handle without moving cut the end to midnight too, and a 5-minute event resized
|
|
1016
|
+
by its top handle came back ending 15 minutes after its old start.
|
|
1017
|
+
|
|
1018
|
+
The top handle now changes only the start and the bottom handle only the end.
|
|
1019
|
+
The other edge is the event's own instant, handed to `onEventDrop` unchanged.
|
|
1020
|
+
The dragged edge is placed as before, at the pointer's row on the grabbed
|
|
1021
|
+
piece's day, snapped, and held one slot away from the kept edge wherever that
|
|
1022
|
+
edge falls. The preview while dragging is labelled with the whole event's
|
|
1023
|
+
times. A same-day event resizes exactly as before.
|
|
1024
|
+
- 0e6e76b: fix(plugin-gantt, plugin-calendar): the `objectName` input description names the `dataSource.object` binding (objectui#11117)
|
|
1025
|
+
|
|
1026
|
+
The designer-facing `objectName` input on `object-gantt` and `object-calendar` (and
|
|
1027
|
+
`view:calendar`, which shares the calendar's list) said the block's schema refuses a block that
|
|
1028
|
+
declares none of `data`, `staticData` and `objectName`. Since objectui#11117 the schema also
|
|
1029
|
+
accepts a block whose `dataSource.object` names the object, because the registration's
|
|
1030
|
+
`ElementDataSourceGate` lands that name on `objectName` before the renderer reads the node. The
|
|
1031
|
+
sentence now says so. No input's name, type, `required` flag or shape changed. (`object-map`'s
|
|
1032
|
+
input already names the binding: objectui#10859 batch 5 rewrote it.)
|
|
1033
|
+
|
|
1034
|
+
The `plugin-gantt` and `plugin-kanban` READMEs carry the same correction.
|
|
1035
|
+
- 6cd5ae3: The `object-calendar` / `calendar` `navigation` input description said `openNewTab: true` "outranks the mode". That does not hold for `none`: `useNavigationOverlay` checks `mode === 'none'` before `openNewTab`, so `{ mode: 'none', openNewTab: true }` opens nothing. The description in `src/index.tsx` now says `openNewTab` outranks every mode except `none` (objectui#11168 slice 5, from objectui#8652).
|
|
1036
|
+
|
|
1037
|
+
`src/__tests__/calendarNavigationMembers-8652.test.tsx` pins both halves: `openNewTab` beside each overlay mode opens a new tab and no overlay, and beside `none` it opens nothing. Behaviour is unchanged.
|
|
1038
|
+
- 39f4309: Published typings from every `vite-plugin-dts` package now carry an explicit extension on
|
|
1039
|
+
every relative specifier, and a type error in the declaration build now fails the build
|
|
1040
|
+
instead of being printed and ignored (objectui#5439, objectui#5483).
|
|
1041
|
+
|
|
1042
|
+
**Consumers on `moduleResolution: nodenext` or `node16` may see NEW type errors, and that
|
|
1043
|
+
is the fix working.** These packages re-export mostly through NAMED re-exports —
|
|
1044
|
+
`export { useObjectChat } from './useObjectChat'`. TypeScript could not follow the
|
|
1045
|
+
extensionless hop, but it still DECLARED the name, so the symbol resolved to a silent
|
|
1046
|
+
`any`. Nothing errored; consumers simply got no types. With the extension emitted, the
|
|
1047
|
+
symbol carries its real type, and any call site that was relying on the `any` now type
|
|
1048
|
+
checks for the first time. This is the mode that produced the 21 residual `TS7006` on
|
|
1049
|
+
`@object-ui/app-shell` reported against objectui#5365 — a type hole that opened quietly,
|
|
1050
|
+
unlike objectui#5365's own `export * from './ui'` packages where the same defect surfaced
|
|
1051
|
+
immediately as `TS2305: has no exported member`.
|
|
1052
|
+
|
|
1053
|
+
410 extensionless relative specifiers across 19 packages were emitted before this change;
|
|
1054
|
+
the count is now 0 in all 22 packages that build typings through `vite-plugin-dts`.
|
|
1055
|
+
`@object-ui/fields` was already clean — its sources write explicit `.js` specifiers — and
|
|
1056
|
+
is wired so it stays that way.
|
|
1057
|
+
|
|
1058
|
+
The second half changes no emitted output today: 22/22 packages built green unmodified, so
|
|
1059
|
+
making the declaration step's exit code honest turns nothing red. It changes what a FUTURE
|
|
1060
|
+
regression does — print and exit 0, versus fail the build.
|
|
1061
|
+
- 3e853c9: Let a producer-marked refusal reach the drag-write surfaces (objectui#5902).
|
|
1062
|
+
|
|
1063
|
+
The kanban card-move toast, the calendar drag-to-reschedule toast and the OCC
|
|
1064
|
+
conflict dialog each substituted a generic string for a refusal the producer had
|
|
1065
|
+
marked as user-facing (`userMessage`), so a user was told "Save failed" where the
|
|
1066
|
+
application author had written a sentence addressed to them. All three now read
|
|
1067
|
+
the marking through the shared `declaredUserMessage` reader, which covers both
|
|
1068
|
+
places the adapter boundary parks it — the typed member on
|
|
1069
|
+
`ConcurrentUpdateError` and the details bag on `DataApiValidationError`.
|
|
1070
|
+
|
|
1071
|
+
Nothing unmarked changes: the reader answers `null` for it, so every existing
|
|
1072
|
+
generic substitution — including the localized "not authorized" message that
|
|
1073
|
+
keeps raw server diagnostics away from end users — still governs unmarked
|
|
1074
|
+
refusals exactly as before.
|
|
1075
|
+
|
|
1076
|
+
The two toasts substitute; the conflict dialog augments. Its description also
|
|
1077
|
+
explains what the destructive "Overwrite" button does, which is affordance copy
|
|
1078
|
+
that surface owns rather than a refusal message, so the marking leads and that
|
|
1079
|
+
paragraph stays.
|
|
1080
|
+
- 7975f2d: A standalone `object-calendar` bound to an object now queries WITH its `$expand`, so
|
|
1081
|
+
lookup / master_detail / user / tree fields render the related record instead of a raw
|
|
1082
|
+
foreign-key id (objectui#6453).
|
|
1083
|
+
|
|
1084
|
+
`ObjectCalendar`'s fetch effect built its expand set from a ref assigned in the render body
|
|
1085
|
+
(`objectSchemaRef.current = objectSchema`) and left `objectSchema` out of its dependency
|
|
1086
|
+
list. That bought the effect exactly one run per mount and paid for it with the expansion,
|
|
1087
|
+
permanently: on that one run the ref was still `null`, `buildExpandFields` saw no fields,
|
|
1088
|
+
the query went out with no `$expand` at all, and nothing re-ran the effect when the schema
|
|
1089
|
+
landed. Only the standalone calendar reached this path — one hosted by `ObjectView` or
|
|
1090
|
+
`ListView` receives its rows as `data`, which objectui#6419 already covers.
|
|
1091
|
+
|
|
1092
|
+
The ref is replaced by a settled-and-keyed resolution (`{ key, def } | null`) that GATES the
|
|
1093
|
+
record query, the third member of the family after objectui#6271 (`ObjectKanban`) and
|
|
1094
|
+
objectui#6419 (`ObjectView`). Measured on this component rather than inherited: gated, the
|
|
1095
|
+
calendar issues one query carrying `$expand` in every latency profile; the alternative of
|
|
1096
|
+
adding `objectSchema` to the dependency list issued two, and when the schema read was the
|
|
1097
|
+
slower of the two it painted raw ids, reverted to the "Loading calendar..." placeholder,
|
|
1098
|
+
then swapped — a three-step paint the correct rows do not arrive any later than.
|
|
1099
|
+
|
|
1100
|
+
The gate is on the schema read having SETTLED, never on a truthy schema: an adapter that
|
|
1101
|
+
exposes no `getObjectSchema`, and a read that throws, both settle with nothing and the
|
|
1102
|
+
calendar still queries (unexpanded) rather than waiting forever. An inline `value` data set
|
|
1103
|
+
is deliberately not gated — it issues no metadata read, so there would be no resolution to
|
|
1104
|
+
wait for.
|
|
1105
|
+
- f9653ae: Re-key the load-bearing fetch effects in `ObjectMap`, `ObjectCalendar` and
|
|
1106
|
+
`ObjectGantt` onto the primitive fields they actually read off `dataConfig`
|
|
1107
|
+
(`provider` / `object` / `items`) instead of the whole memoised `dataConfig`
|
|
1108
|
+
object (objectui#6592, the deferred half of objectui#6270/PR #6591).
|
|
1109
|
+
`ObjectTree` is a census member too but is deferred out of this change — see
|
|
1110
|
+
the PR body — because its own fetch effects are the surface of PR #6696
|
|
1111
|
+
(objectui#6481), open at the same time.
|
|
1112
|
+
|
|
1113
|
+
`useMemo` carries no semantic guarantee — React is permitted to discard a
|
|
1114
|
+
memo cache and recompute even when its dependency array compares equal to
|
|
1115
|
+
the previous render, and the local `getDataConfig(schema)` helper each of
|
|
1116
|
+
these renderers carries builds a fresh `{ provider, object }` /
|
|
1117
|
+
`{ provider, items }` wrapper object on every call. So a fetch effect keyed
|
|
1118
|
+
on `dataConfig` itself was correct only for as long as that identity
|
|
1119
|
+
happened to survive a discard: a recompute alone (no author or caller
|
|
1120
|
+
action) was enough to re-run the effect and issue an extra
|
|
1121
|
+
`dataSource.find` / `dataSource.getObjectSchema` call. Keying the effects
|
|
1122
|
+
on the primitives instead makes a cache discard a no-op, restoring
|
|
1123
|
+
`useMemo` to a pure optimisation.
|
|
1124
|
+
|
|
1125
|
+
`ObjectGantt`'s `effectiveDataSource` memo deliberately keeps `dataConfig`
|
|
1126
|
+
as a dependency (`resolveDataSource` needs the whole provider-shaped
|
|
1127
|
+
value — the `api` provider's `read`/`write` request config cannot be
|
|
1128
|
+
flattened to a fixed primitive list the way `object`/`value` can), so its
|
|
1129
|
+
`reload()` fetch is decoupled from the redundant direct `dataConfig`
|
|
1130
|
+
dependency but not from `effectiveDataSource`'s own; for the `object`/`value`
|
|
1131
|
+
providers `resolveDataSource` returns its `fallback`/a fresh
|
|
1132
|
+
`ValueDataSource` respectively rather than reading further into the config,
|
|
1133
|
+
which is enough for the two fetch effects to observe no extra call under a
|
|
1134
|
+
recomputed-but-equivalent `dataConfig` in the common case.
|
|
1135
|
+
|
|
1136
|
+
No behaviour change for a schema whose `useMemo` caches survive normally;
|
|
1137
|
+
the effects are unaffected by React discarding one.
|
|
1138
|
+
- 3beef6d: The spec's `dataSource` element binding is now DECLARED by the blocks that read
|
|
1139
|
+
it, so the html tier stops reporting the one working saved-view spelling as
|
|
1140
|
+
`unknown-prop` (objectui#6678).
|
|
1141
|
+
|
|
1142
|
+
`PageComponentSchema.dataSource` — `{ object, view, filter, sort, limit }` — is
|
|
1143
|
+
the one spelling that resolves a saved view for an object-bound block. It works,
|
|
1144
|
+
and it drew the identical `unknown-prop` warning as the two spellings that do
|
|
1145
|
+
nothing (`viewName`, `view`), because `validateTree` looks a prop up in the
|
|
1146
|
+
block's declared `inputs` and no registration declared this key. On the tier
|
|
1147
|
+
built to accept AI-authored pages, where the diagnostic IS the contract, the
|
|
1148
|
+
only signal pointed away from the key that works.
|
|
1149
|
+
|
|
1150
|
+
Adopting the maintainer ruling of 2026-08-29 — option B **in the injection
|
|
1151
|
+
form**:
|
|
1152
|
+
|
|
1153
|
+
- `ELEMENT_DATA_SOURCE_INPUT` is the single declaration, in `@object-ui/core`
|
|
1154
|
+
beside the binding's own semantics; `Registry.register` emits it for any
|
|
1155
|
+
registration whose renderer passed through the new `elementDataSourceBlock()`
|
|
1156
|
+
seam. One mechanism, one copy — not a hand-kept declaration per block, which is
|
|
1157
|
+
the shape that drifts and that a new block forgets. The seam lives in
|
|
1158
|
+
`@object-ui/core` and is re-exported by `@object-ui/react` beside
|
|
1159
|
+
`ElementDataSourceGate` for discoverability; call sites take the core import,
|
|
1160
|
+
because a registration runs at module scope and this repo's suites partially
|
|
1161
|
+
mock `@object-ui/react`.
|
|
1162
|
+
- Seventeen renderers, in thirteen files across twelve packages, reach the seam
|
|
1163
|
+
and now publish the key to the save gate, the parser whitelist, the generated
|
|
1164
|
+
JSX authoring types and the block list. The card named nine blocks; the tree
|
|
1165
|
+
also has `plugin-grid`, `plugin-timeline`, two further `plugin-form` blocks and
|
|
1166
|
+
`element:record_picker` — nothing was hand-listed, so the mechanism covered
|
|
1167
|
+
them. `element:record_picker` consumes the gate's HOOK and status panels rather
|
|
1168
|
+
than the wrapper tag (its object lives under `properties`), and was found by a
|
|
1169
|
+
render probe rather than by reading sources.
|
|
1170
|
+
- `dataSource` on a block that does NOT read it (`flex`, `card`) still reports
|
|
1171
|
+
`unknown-prop`. Adding the key to `sdui-parser`'s `BASE_PROPS` was refused for
|
|
1172
|
+
exactly this reason — that set mirrors `BaseSchema`, and silencing the key
|
|
1173
|
+
everywhere would make the diagnostic lie in the other direction.
|
|
1174
|
+
- New `check:element-data-source-declaration` fails any source that consumes the
|
|
1175
|
+
gate without reaching the seam, so a block added tomorrow cannot forget.
|
|
1176
|
+
|
|
1177
|
+
Behaviour of the binding itself is unchanged — this is a declaration, not a
|
|
1178
|
+
resolution change. The saved view still resolves its columns, and an
|
|
1179
|
+
unresolvable `view` still fails loudly rather than widening to the object's full
|
|
1180
|
+
scope.
|
|
1181
|
+
|
|
1182
|
+
The spec/registry parity gates (repo-wide and the `record:related_list` per-block
|
|
1183
|
+
pin) now derive their accepted set from the WHOLE node contract rather than from
|
|
1184
|
+
`ComponentPropsMap[type]` alone. `PageComponentSchema` accepts and keeps
|
|
1185
|
+
`dataSource` on a page-component node — it is a node-level key, a sibling of
|
|
1186
|
+
`type` and `className`, not a per-block prop — so the gates' previous complaint
|
|
1187
|
+
was measurably wrong. Derived from the spec, not exempted, and both still
|
|
1188
|
+
discriminate against an invented key.
|
|
1189
|
+
- 7c3df8f: The settled-schema convergence, and the gantt's duplicate query gated
|
|
1190
|
+
(objectui#7225, maintainer ruling B, 2026-09-02).
|
|
1191
|
+
|
|
1192
|
+
`useSettledSchema` was extracted and published in PR #6690 with exactly **one**
|
|
1193
|
+
non-test adopter (`ObjectTree`, the component that had an actual defect —
|
|
1194
|
+
objectui#6481's unkeyed latch). `ObjectKanban`, `plugin-view/ObjectView` and
|
|
1195
|
+
`ObjectCalendar` kept their own hand copies of the same shape, so a published
|
|
1196
|
+
export was owed compatibility forever **and** the duplication it was named for
|
|
1197
|
+
stayed. All three now call the hook.
|
|
1198
|
+
|
|
1199
|
+
The migration is a pure deduplication with no behaviour delta — the hook was
|
|
1200
|
+
extracted *from* these three shapes, so each becomes a one-line call.
|
|
1201
|
+
`ObjectCalendar`, which objectui#6482 named as the obstacle, fits via the
|
|
1202
|
+
recipe the hook's own doc comment prescribes for it by name: pass the data
|
|
1203
|
+
source as `undefined` for a render that must not read metadata
|
|
1204
|
+
(`hasInlineData ? undefined : dataSource`), so "inline value data set" is
|
|
1205
|
+
expressed as "there is no source to read from" rather than as a second enable
|
|
1206
|
+
flag. GATE PLACEMENT stays local in all three, which is what #6482 ruled and
|
|
1207
|
+
what made the calendar's obstacle a non-obstacle: it was about the gate half.
|
|
1208
|
+
|
|
1209
|
+
**One observable change:** `ObjectKanban`'s rejected definition read now logs
|
|
1210
|
+
on `console.error` with a `[useSettledSchema]` prefix instead of
|
|
1211
|
+
`console.warn`. Its test spy moves with it, and now asserts on the channel
|
|
1212
|
+
rather than merely silencing it.
|
|
1213
|
+
|
|
1214
|
+
**The gantt's duplicate query is gated** (ask 2 of the card; #6482's
|
|
1215
|
+
undischarged half). `ObjectGantt` listed `objectSchema` in `reload`'s
|
|
1216
|
+
dependency list, so every load issued two unbounded queries — the first with no
|
|
1217
|
+
`$expand` at all. Measured on this component across three latency profiles, the
|
|
1218
|
+
cost is not the mild "round trip bought and thrown away": when the metadata
|
|
1219
|
+
read is the slower of the two, which is the common case on a cold
|
|
1220
|
+
`MetadataCache`, the user sees the full three-step paint — raw foreign-key ids,
|
|
1221
|
+
back to the loading placeholder, then the expanded rows. It now issues one
|
|
1222
|
+
query, already expanded.
|
|
1223
|
+
|
|
1224
|
+
Gating the gantt required its schema resolution to settle on EVERY exit
|
|
1225
|
+
(objectui#7232): the hand-rolled effect returned without settling on
|
|
1226
|
+
`!effectiveDataSource`, on `!resource` and in its `catch` — harmless while
|
|
1227
|
+
nothing waited on it, and a chart that never loads once something does.
|
|
1228
|
+
`useSettledSchema` settles on all three by construction, which is what makes
|
|
1229
|
+
the gate safe; both exits are pinned.
|
|
1230
|
+
|
|
1231
|
+
⛔ Gating is not capping. The row ceiling on these fetches is objectui#7210's
|
|
1232
|
+
separate ruling, in its own commit on the same branch.
|
|
1233
|
+
- 6411def: FLS-gate the `$expand` projection at the five remaining build sites (objectui#7230).
|
|
1234
|
+
|
|
1235
|
+
objectui#7215 / PR #7229 gated `$expand` at the two projection sites in its scope
|
|
1236
|
+
(`ObjectGrid`, `ListView`). The helper is reached from more places than that. This
|
|
1237
|
+
closes the five that were left: `ObjectCalendar`, `ObjectGantt`, `RecordDetailView`,
|
|
1238
|
+
`DetailView`, and `ObjectDataTable` (which builds its own whitelist in
|
|
1239
|
+
`computeLookupExpand` rather than calling `buildExpandFields`).
|
|
1240
|
+
|
|
1241
|
+
**Three of them pass no column list at all**, which makes them the sharp ones:
|
|
1242
|
+
`buildExpandFields` reads an absent column list as "no column restriction" and falls
|
|
1243
|
+
back to **every declared relation on the object**, denied ones included. So a standalone
|
|
1244
|
+
calendar, a gantt, and every record page in the console asked the server to resolve the
|
|
1245
|
+
object's full relation set by default rather than by configuration.
|
|
1246
|
+
|
|
1247
|
+
**`DetailView` was input-gated, and that is the defect rather than the fix.** Its column
|
|
1248
|
+
list is already FLS-filtered field by field, which is exactly the route PR #7229 measured
|
|
1249
|
+
as unsound: an emptied column list reads as "no column restriction", so a detail view
|
|
1250
|
+
whose authored fields are all denied had its `$expand` **widened** from the relations it
|
|
1251
|
+
asked for to every relation the object declares. The principal who may read least was
|
|
1252
|
+
asking for the most.
|
|
1253
|
+
|
|
1254
|
+
**Reproduced before it was fixed**, as a failing test per site.
|
|
1255
|
+
|
|
1256
|
+
**Grading, measured rather than assumed.** Against ObjectStack's own server this is
|
|
1257
|
+
defence-in-depth, exactly as objectui#6898 and #7215 are: `plugin-security`'s
|
|
1258
|
+
`FieldMasker.maskRecord` deletes every unreadable key from each returned row and
|
|
1259
|
+
objectql's expand path writes the resolved record back under that same key, so one
|
|
1260
|
+
statement removes the expanded object and the bare id alike; the expansion sub-read is
|
|
1261
|
+
itself gated (`__expandRead` takes the referenced object's full CRUD + RLS + FLS
|
|
1262
|
+
treatment). It is load-bearing for any backend that does not strip, and the
|
|
1263
|
+
client-request side is real regardless.
|
|
1264
|
+
|
|
1265
|
+
**Nothing a permitted view did stops working.** The gate judges each helper's OUTPUT,
|
|
1266
|
+
which contains only the object's declared reference-bearing fields, so the "`checkField`
|
|
1267
|
+
answers false for an undeclared key" trap cannot be reached and derived / host-joined
|
|
1268
|
+
columns are untouched. An unanswered permission policy filters nothing. Neither
|
|
1269
|
+
`buildExpandFields` nor `computeLookupExpand` is changed.
|
|
1270
|
+
- e75f4c9: `colorField` now means the same thing in the gantt, the calendar and the timeline
|
|
1271
|
+
(objectui#7243).
|
|
1272
|
+
|
|
1273
|
+
**The inversion this fixes.** `gantt.colorField` is documented as "field that drives the
|
|
1274
|
+
bar color", and the renderer passed the stored value straight into the bar's
|
|
1275
|
+
`backgroundColor`. Pointing the key at a select field therefore emitted
|
|
1276
|
+
`backgroundColor: "open"` — not a colour, so the browser dropped the declaration and
|
|
1277
|
+
every bar rendered identically. OMITTING the key was strictly better: the absent-key
|
|
1278
|
+
branch derived a real colour per status. Declaring the documented key was worse than not
|
|
1279
|
+
declaring it, with no error, warning or console message either way.
|
|
1280
|
+
|
|
1281
|
+
The same key also meant three different things across the three lenses: the timeline
|
|
1282
|
+
resolved the field's authored option `color`, the calendar hashed the raw value onto a
|
|
1283
|
+
fixed palette, and the gantt emitted the raw value. An author colouring three views by
|
|
1284
|
+
one field got three unrelated results, one of which was no colour at all.
|
|
1285
|
+
|
|
1286
|
+
**The ladder.** `@object-ui/core` gains `createFieldColorResolver` — the timeline's
|
|
1287
|
+
resolver, lifted so all three call it:
|
|
1288
|
+
|
|
1289
|
+
1. the field's own option `color` for the record's value;
|
|
1290
|
+
2. else the value itself when it already IS a colour literal (`#rgb`, `#rrggbb`,
|
|
1291
|
+
`#rrggbbaa`, `rgb(...)`, `hsl(...)`);
|
|
1292
|
+
3. else each renderer's own last rung, which is deliberately NOT shared — the gantt
|
|
1293
|
+
derives a semantic-token hex (a bar must be painted), the calendar keeps its
|
|
1294
|
+
theme-aware 8-stop hash (a soft tint, not a solid fill), the timeline draws its
|
|
1295
|
+
default marker.
|
|
1296
|
+
|
|
1297
|
+
**What changes for authors.** A gantt or calendar whose `colorField` points at a select
|
|
1298
|
+
field with authored option colours now paints those colours. A gantt value that is
|
|
1299
|
+
neither an option colour nor a colour literal now derives a colour instead of emitting
|
|
1300
|
+
an invalid CSS value — including a palette NAME (`red`), which now resolves to that
|
|
1301
|
+
palette's hex, the behaviour the key's own contract has always promised ("hex or
|
|
1302
|
+
semantic name") and the one `borderColorField` already had. `gantt.borderColorField`
|
|
1303
|
+
takes rung 1 as well, so an authored option colour reaches the alert stroke; it keeps
|
|
1304
|
+
today's behaviour otherwise and deliberately gains no derivation rung, since the stroke
|
|
1305
|
+
is opt-in and deriving one for every record would draw an alert on records that have
|
|
1306
|
+
none.
|
|
1307
|
+
|
|
1308
|
+
Calendars whose `colorField` points at a plain categorical field are unchanged: that
|
|
1309
|
+
value still reaches `CalendarView`'s deterministic hash exactly as before. The timeline
|
|
1310
|
+
is unchanged apart from accepting the 8-digit `#rrggbbaa` hex spelling the calendar
|
|
1311
|
+
already accepted.
|
|
1312
|
+
- b8fc1e2: fix(plugin-calendar): the all-day lane header reads the same string with or without an I18nProvider
|
|
1313
|
+
|
|
1314
|
+
`CalendarView`'s `DEFAULT_TRANSLATIONS` table — the `defaults` map behind its
|
|
1315
|
+
`createSafeTranslation` factory — spelled `calendar.allDay` as `all-day`, while
|
|
1316
|
+
all ten locale packs carry the key and `en` spells it `All Day`. Since
|
|
1317
|
+
`createSafeTranslation` serves that table only when no `I18nProvider` is
|
|
1318
|
+
mounted, the same lane header rendered `all-day` in a standalone embed and
|
|
1319
|
+
`All Day` inside the console. The table now matches the pack, so both paths
|
|
1320
|
+
render one string.
|
|
1321
|
+
|
|
1322
|
+
The table entry was the only one of the seven that disagreed with its `en`
|
|
1323
|
+
value, and the packs predate it by three months — the drift was an oversight,
|
|
1324
|
+
not a compact spelling chosen for the 56px gutter (both strings are seven
|
|
1325
|
+
characters wide).
|
|
1326
|
+
|
|
1327
|
+
Also removes the dead `t('calendar.allDay') === 'calendar.allDay'` ternary that
|
|
1328
|
+
guarded the lane header: the factory's provider-less arm returns `defaults[key]`
|
|
1329
|
+
before it could ever return the bare key, and with a provider the merged
|
|
1330
|
+
resources always carry `calendar.allDay`, so its lowercase branch was
|
|
1331
|
+
unreachable from either side.
|
|
1332
|
+
- c6198c2: **Breaking for authored metadata:** `ComponentInput.label`, `ComponentInput.defaultValue` and
|
|
1333
|
+
`ComponentInput.advanced` are RETIRED on both faces (objectui#7493 item ① and objectui#7781;
|
|
1334
|
+
maintainer ruling A of 2026-09-06, immediate, no deprecation window; ADR-0049 enforce-or-remove).
|
|
1335
|
+
They are the three keys the manifest serializer does not forward, and nothing read them on any
|
|
1336
|
+
publication or consumption path.
|
|
1337
|
+
|
|
1338
|
+
No manifest ever published them, so no consumer could ever have read them. `sdui-parser`'s
|
|
1339
|
+
serializer (`packages/sdui-parser/src/index.ts`) forwards exactly seven keys per input — `name`,
|
|
1340
|
+
`type`, `of`, `required`, `enum`, `binding`, `description` — so a value authored under any of the three
|
|
1341
|
+
never reached `sdui.manifest.json`, the generated JSX `.d.ts`, or a diagnostic; its boundary type
|
|
1342
|
+
has no slot for them; the registry's data-source seam reads `name` only; and neither the designer
|
|
1343
|
+
nor the app-shell inspectors consult registry `inputs` at all. A structural census over every
|
|
1344
|
+
`inputs:` array in the repository (re-measured on this change's merge-base, `name` 951 and `type`
|
|
1345
|
+
951 as the controls) counted the writes: `label` 908, `defaultValue` 245, `advanced` 9 — written on
|
|
1346
|
+
nearly every registration, read by nothing.
|
|
1347
|
+
|
|
1348
|
+
FROM → TO, per key — all three **TOMBSTONED, not removed**, because the route was measured on
|
|
1349
|
+
the built face before it was chosen: `ComponentInputSchema` is a non-strict `z.object`, and an
|
|
1350
|
+
undeclared key parses GREEN and is silently STRIPPED, so a deletion would have swallowed 1,162
|
|
1351
|
+
authored values in silence. The tombstone is what makes the refusal loud and by name.
|
|
1352
|
+
|
|
1353
|
+
- `label?: string` → `label?: never` on the interface, `retirementTombstone()` on the Zod mirror.
|
|
1354
|
+
Migration: delete the key. An input is identified by its `name` on every path that reaches it;
|
|
1355
|
+
nothing ever rendered a label for it.
|
|
1356
|
+
- `defaultValue?: any` → `defaultValue?: never` / `retirementTombstone()`. Migration: delete the
|
|
1357
|
+
key. The renderer's own fallback read IS the default; tell the author about it in `description`,
|
|
1358
|
+
which IS published. (Tightening the type to `unknown` was ruled out: it closes no error class,
|
|
1359
|
+
since nothing reads the value.)
|
|
1360
|
+
- `advanced?: boolean` → `advanced?: never` / `retirementTombstone()`. Migration: delete the key.
|
|
1361
|
+
No designer surface ever hid an "advanced" input; there is nothing to write instead.
|
|
1362
|
+
|
|
1363
|
+
The retirement kit: `?: never` on `ComponentInput` (`packages/types/src/base.ts`), so authoring one
|
|
1364
|
+
is a `tsc` error at the registration site; `retirementTombstone()` on `ComponentInputSchema`
|
|
1365
|
+
(`packages/types/src/zod/base.zod.ts`), so an authored value is REFUSED at parse time with
|
|
1366
|
+
`code: 'invalid_type'`, the key named in the issue `path`, and the migration note as the message
|
|
1367
|
+
(one string, both channels). Pinned in
|
|
1368
|
+
`packages/types/src/__tests__/component-input-retired-keys-7493.test.ts`, which also holds a
|
|
1369
|
+
tree-scoped absence census over every `inputs:` array under `packages/**` and `apps/**`.
|
|
1370
|
+
|
|
1371
|
+
Accept-set change, stated plainly for reviewers: a document that sets any of the three keys on a
|
|
1372
|
+
`ComponentInput` used to parse GREEN (the value was then dropped by the serializer) and now parses
|
|
1373
|
+
RED. Every in-repo authoring site — 1,199 keys across 110 registration files, the three standalone
|
|
1374
|
+
`ComponentInput[]` arrays and the two named input arrays `tsc` found included — is deleted in the same change, as the ruling's split rule
|
|
1375
|
+
requires; the `WidgetRegistry` seam no longer copies the widget-manifest values onto the synthesized
|
|
1376
|
+
`ComponentInput` (they fed nothing), and the data-source declaration `ELEMENT_DATA_SOURCE_INPUT`
|
|
1377
|
+
drops its `label`. The patch entries on the other packages record exactly that: their registrations
|
|
1378
|
+
stop authoring inert keys, with no runtime or published-manifest change.
|
|
1379
|
+
|
|
1380
|
+
The nine test files that read `defaultValue` off a registration were re-pinned against the
|
|
1381
|
+
renderer's ACTUAL default (its own fallback read, or the `defaultProps` it ships) instead of the
|
|
1382
|
+
declaration that went away; two assertions that only restated the shadow default were dropped with
|
|
1383
|
+
the reason on the line.
|
|
1384
|
+
|
|
1385
|
+
The in-repo zero is what was measured. Whether anything OUTSIDE this repository writes these keys
|
|
1386
|
+
is not measurable from here (the objectui#5674 limit); converting such a write from a silent drop
|
|
1387
|
+
into a named refusal is exactly what the tombstones buy. `WidgetInput`'s own `label` /
|
|
1388
|
+
`defaultValue` / `advanced` (the widget-manifest face) stay declared and writable — nothing has
|
|
1389
|
+
ruled on that face; that it now has no reader either is recorded as objectui#7911.
|
|
1390
|
+
- ce2aaef: One shared record-source ladder, five plugins delegate.
|
|
1391
|
+
|
|
1392
|
+
`@object-ui/core` publishes `resolveRecordSourceConfig(schema)` — the ONE implementation
|
|
1393
|
+
of the ruled three-rung record source ladder: `data` first, then `staticData` wrapped as
|
|
1394
|
+
`{ provider: 'value', items }`, then `objectName` folded to `{ provider: 'object' }`, and
|
|
1395
|
+
`null` when nothing is bound. It is the PRODUCER whose output the reader
|
|
1396
|
+
`resolveRecordSourceObjectName` (`b041b9c0c`) consumes, and it now sits beside it in the same module.
|
|
1397
|
+
|
|
1398
|
+
That ladder is published contract on both faces — `packages/types/src/objectql.ts` and its
|
|
1399
|
+
zod mirror both ship `.describe()` strings naming `getDataConfig`'s order (`77cb489b4`,
|
|
1400
|
+
maintainer ruling 2026-09-02), pinned by `objectql-record-source-refinement-6939.test.ts` —
|
|
1401
|
+
and it was hand-copied into five plugin components with no gate holding them together. A
|
|
1402
|
+
change to the ruled order had five edit sites and nothing that noticed a missed one; that
|
|
1403
|
+
is the AGENTS.md #0.1 drift class.
|
|
1404
|
+
|
|
1405
|
+
**No behaviour changes.** `ObjectCalendar`, `ObjectGantt` and `ObjectTree` now call the
|
|
1406
|
+
shared reader directly. `ObjectGrid` and `ObjectMap` keep their own bare-array `data`
|
|
1407
|
+
shorthand as a documented head above the shared call and are otherwise unchanged.
|
|
1408
|
+
`record-source-config.behaviourNeutrality-7632.test.ts` transcribes all five pre-collapse
|
|
1409
|
+
bodies verbatim and asserts the post-collapse spelling agrees with each across the whole
|
|
1410
|
+
input matrix, so a later edit to the shared reader that moves any site turns red.
|
|
1411
|
+
|
|
1412
|
+
**Two divergences were measured rather than assumed, and both are preserved.**
|
|
1413
|
+
|
|
1414
|
+
`ObjectCalendar`'s `'data' in schema && schema.data` guards existed because its parameter was
|
|
1415
|
+
at that time the union `ObjectGridSchema | CalendarSchema`, whose `CalendarSchema` arm declared
|
|
1416
|
+
neither key. (objectui#8651 has since re-pointed that parameter at the published
|
|
1417
|
+
`ObjectCalendarSchema`, so the union is gone; the CONCLUSION below — that the guard had no
|
|
1418
|
+
runtime effect and removing it is behaviour-neutral — is unaffected.)
|
|
1419
|
+
That is a TypeScript narrowing device with no runtime effect — an absent property reads
|
|
1420
|
+
`undefined`, falsy either way — so the guard could never change which rung is taken. The
|
|
1421
|
+
shared reader's optional-property parameter accepts the union directly, and the
|
|
1422
|
+
equivalence is pinned on a fixture that really lacks both keys rather than argued.
|
|
1423
|
+
|
|
1424
|
+
`ObjectGrid` and `ObjectMap` normalize a bare-array `data` to `{ provider: 'value', items }`;
|
|
1425
|
+
`ObjectCalendar`, `ObjectGantt` and `ObjectTree` do not, and return the array verbatim. That
|
|
1426
|
+
is a real divergence on off-contract input — `ViewData` is a discriminated union over object
|
|
1427
|
+
variants, so an array under `data` cannot be published. It is NOT unified here: the shared
|
|
1428
|
+
rung stays contract-strict and the two sites keep the head locally, the same way `b041b9c0c`
|
|
1429
|
+
left the off-contract `{ provider: 'object' }` tails at their sites. Both sides of the fork are
|
|
1430
|
+
pinned, so neither folding the head in nor deleting it as redundant can happen silently.
|
|
1431
|
+
|
|
1432
|
+
`ObjectTree`'s copy took `schema: any`; it now goes through the shared reader's typed
|
|
1433
|
+
parameter. Types are erased at runtime, so nothing it resolves moves.
|
|
1434
|
+
- 2ce2612: A record-page URL now names the object the clicked rows actually came from, in
|
|
1435
|
+
`ObjectTree` and `ObjectCalendar`.
|
|
1436
|
+
|
|
1437
|
+
`useNavigationOverlay` builds `/{objectName}/record/{id}` out of whatever it is handed,
|
|
1438
|
+
and both components handed it the bare top-level `schema.objectName` while resolving
|
|
1439
|
+
their own rows through the ruled record-source ladder (`data`, then
|
|
1440
|
+
`staticData`, then `objectName`). `77cb489b4` published `objectName` as that ladder's
|
|
1441
|
+
THIRD RUNG and not as a parallel "page object" concept, so a block has exactly one
|
|
1442
|
+
record source — and a row fetched through `data.object` whose click built
|
|
1443
|
+
`/{schema.objectName}/record/{id}` named a record that the URL's own object does not
|
|
1444
|
+
contain.
|
|
1445
|
+
|
|
1446
|
+
Two shapes change, both toward the object the rows came from:
|
|
1447
|
+
|
|
1448
|
+
- a block carrying **both** bindings navigated to the top-level key and now navigates to
|
|
1449
|
+
`data.object`;
|
|
1450
|
+
- a **data-only** block had no name to build a URL from at all, so the hook took its
|
|
1451
|
+
`/{id}` leg — an unrouted path that paints a blank page — and now builds the routed
|
|
1452
|
+
record URL.
|
|
1453
|
+
|
|
1454
|
+
`ObjectCalendar` is where the divergence was plainest: on one click it resolved the
|
|
1455
|
+
detail drawer through the ladder and the navigation URL through the top-level key. The
|
|
1456
|
+
URL now reuses the very `schemaObjectName` that already keys the calendar's record query
|
|
1457
|
+
and its `$expand` derivation, so query, drawer and URL agree by construction.
|
|
1458
|
+
|
|
1459
|
+
**Nothing else moves.** Both converted sites keep a site-local `?? schema.objectName`
|
|
1460
|
+
tail for the off-contract `data: { provider: 'object' }` that carries no `object`
|
|
1461
|
+
(`ViewDataSchema` declares it required) — the same tail `ObjectTree`'s `headerObjectName`
|
|
1462
|
+
already carries, and the same conservatism `b041b9c0c` applied when it published the
|
|
1463
|
+
shared reader. `useNavigationOverlay`'s own signature is unchanged: it still takes an
|
|
1464
|
+
`objectName`, and only what callers hand it has changed.
|
|
1465
|
+
|
|
1466
|
+
The hook's `@example` stops prescribing `objectName: schema.objectName`. That prose is
|
|
1467
|
+
why there were copies to convert at all — component authors copied the divergence out of
|
|
1468
|
+
the documentation, correctly, as written — so it now points at
|
|
1469
|
+
`resolveRecordSourceObjectName` and says explicitly that a caller with no data config
|
|
1470
|
+
has nothing above rung three and should keep passing `schema.objectName`.
|
|
1471
|
+
|
|
1472
|
+
`ObjectKanban` is deliberately **not** converted: it has no data config, no
|
|
1473
|
+
`getDataConfig`, and its `data` is a raw row array rather than a `ViewData` binding, so
|
|
1474
|
+
`schema.objectName` already IS its record source and its board, drawer and URL already
|
|
1475
|
+
agree.
|
|
1476
|
+
- 5e5d6b2: `ObjectCalendar`'s refusal screen now states a remedy an author can act on, on every
|
|
1477
|
+
door it is reachable from (objectui#8170).
|
|
1478
|
+
|
|
1479
|
+
It used to read "Calendar configuration required. Please specify startDateField and
|
|
1480
|
+
titleField." The first clause was right and is unchanged. The second was wrong twice:
|
|
1481
|
+
|
|
1482
|
+
**It demanded an optional key.** `@objectstack/spec`'s `CalendarConfigSchema` is a
|
|
1483
|
+
strict object whose ONE required key is `startDateField`. Re-measured on the installed
|
|
1484
|
+
17.4.0, three legs via `CalendarConfigSchema.safeParse` from `@objectstack/spec/ui`:
|
|
1485
|
+
`{}` and `{ titleField: 't' }` both fail `invalid_type` at `startDateField`, and
|
|
1486
|
+
`{ startDateField: 'd' }` parses clean. The spec's own note on that schema names this
|
|
1487
|
+
renderer as the reason — `resolveTitle` takes an explicit `titleField` when present and
|
|
1488
|
+
otherwise resolves through the ADR-0079 record display-name chain, so the screen was
|
|
1489
|
+
asking for a key the component neither needs nor reads.
|
|
1490
|
+
|
|
1491
|
+
**It named keys without saying where they go, which is unactionable on an interface
|
|
1492
|
+
page.** That surface's `interfaceConfig` has no calendar slot at all — it reads
|
|
1493
|
+
`columns`, `sort`, `filterBy`, `userFilters`, `appearance`, `addRecord`, `userActions`,
|
|
1494
|
+
`showRecordCount`, `source`, `sourceView`, `buttons` and `recordAction`, and no calendar
|
|
1495
|
+
key — so the only lever there is `sourceView`, which the screen never mentioned. The
|
|
1496
|
+
refusal was honest about the binding and dishonest about the remedy.
|
|
1497
|
+
|
|
1498
|
+
The new copy names the one required key, says the title resolves without `titleField`,
|
|
1499
|
+
points at the view's `calendar` block as the place both doors read the binding from, and
|
|
1500
|
+
states the interface page's indirection outright.
|
|
1501
|
+
|
|
1502
|
+
**Why the wording is door-COMPLETE rather than door-AWARE.** Two producers emit an
|
|
1503
|
+
`object-calendar` node — the calendar branches of `plugin-list`'s `ListView` and
|
|
1504
|
+
`plugin-view`'s `ObjectView` — and app-shell reaches the first from both its `ObjectView`
|
|
1505
|
+
(object-view door) and `InterfaceListPage` (interface-page door). Every one of them hands
|
|
1506
|
+
the component the same shared `baseProps` bag plus whichever declared binding keys exist:
|
|
1507
|
+
nothing on the node names the door. A door-aware screen therefore needs a newly declared
|
|
1508
|
+
prop threaded through four packages, and inferring the door from whether the object
|
|
1509
|
+
carries a date field only correlates with it — `InterfaceListPage`'s deriver runs solely
|
|
1510
|
+
when `calendar` is whitelisted in `appearance.allowedVisualizations` — which is the
|
|
1511
|
+
"the gate and the seam must answer one question" failure this repo has recorded on `map`,
|
|
1512
|
+
`chart` and `kanban` already.
|
|
1513
|
+
|
|
1514
|
+
The first clause is unchanged on purpose: five suites pin this screen with
|
|
1515
|
+
`/Calendar configuration required/i`, and `@object-ui/types`' calendar alias tombstones
|
|
1516
|
+
assert on the same phrase. Only the clause that was wrong moves. The new second clause is
|
|
1517
|
+
pinned in `ObjectCalendar.refusalRemedy-8170.test.tsx`, together with the runtime control
|
|
1518
|
+
that makes its claim checkable: a calendar with a date binding and no `titleField` renders
|
|
1519
|
+
real record titles.
|
|
1520
|
+
- 2d80456: `object-kanban` / `view:kanban` and `object-calendar` / `view:calendar` now DECLARE seven
|
|
1521
|
+
spec-carried keys their renderers already honoured, so the html tier stops reporting working
|
|
1522
|
+
metadata as `unknown-prop` (objectui#8201, the backlog objectui#8176 exposed).
|
|
1523
|
+
|
|
1524
|
+
Board: `groupBy`, `cardTitle`, `titleField`, `swimlaneField`, `coverImageField`.
|
|
1525
|
+
Calendar: `defaultView` (the spec's three-member enum) and `locale`.
|
|
1526
|
+
|
|
1527
|
+
No renderer behaviour changes — every one of these keys was already read and already acted on;
|
|
1528
|
+
what changes is that authoring tools can now discover them and the save gate agrees with the
|
|
1529
|
+
validator. Both tags of each block now spread ONE shared `inputs` list, so the two published
|
|
1530
|
+
surfaces cannot drift apart by hand-copy.
|
|
1531
|
+
- 289d146: `object-calendar` / `view:calendar` now DECLARE the last three spec-carried keys the renderer
|
|
1532
|
+
already honoured — `data`, `staticData` and `loading` — so the html tier stops reporting working
|
|
1533
|
+
metadata as `unknown-prop`. Each declared description names the POSITION the key is honoured at:
|
|
1534
|
+
`data` replaces the calendar's own query, `staticData` is read below `data` and above `objectName`,
|
|
1535
|
+
and `loading` is honoured only alongside an array `data` (objectui#8314, slice 2b of
|
|
1536
|
+
objectui#8201). Every `object-calendar` key the spec declares is now discoverable.
|
|
1537
|
+
- 5058336: `object-calendar` is taught with its `calendar` block, not with flat field-name keys (objectstack-ai/objectui#8831).
|
|
1538
|
+
|
|
1539
|
+
`@objectstack/spec` refuses `startDateField`, `endDateField`, `titleField`, `colorField` and `allDayField` written flat on an `object-calendar` node, and its diagnostic prescribes `calendar: { startDateField, endDateField, titleField, colorField, allDayField }`. Since 17.5.0 the spec's `CalendarConfigSchema` declares all five, `allDayField` included. objectui's published faces still taught the flat spelling as something to write, so an author who followed them was refused at publish.
|
|
1540
|
+
|
|
1541
|
+
- `@object-ui/plugin-calendar`: both `object-calendar` examples in the README write the five keys inside `calendar`, and the README says what the flat spelling is: the runtime handoff `ObjectView` and `ListView` emit, which `getCalendarConfig` reads only when the node has no `calendar` block. The five-key sentence for `calendar-view` stays and now says it is about that element: `CalendarViewSchema` has no `calendar` block, so the flat keys are its only spelling.
|
|
1542
|
+
- `@object-ui/types`: the `.describe()` text and the TypeScript docblocks of `ObjectCalendarSchema`'s five flat members call them the read-only handoff and point at `calendar.KEY`. The `calendar` member's text calls the block the authored spelling. The `allDayField` member of the `calendar` block no longer calls the key objectui-local, because 17.5.0 declares it.
|
|
1543
|
+
|
|
1544
|
+
Descriptions and documentation only. No accept set moves: the flat members stay declared on both faces, with the same types, because the renderer still reads them.
|
|
1545
|
+
- 708f271: fix(plugin-calendar): the month gridcell's accessible name follows the resolved locale
|
|
1546
|
+
|
|
1547
|
+
`MonthView`'s day gridcell built its `aria-label` with
|
|
1548
|
+
`toLocaleDateString("default", …)` — the literal `"default"` means the *machine's*
|
|
1549
|
+
locale — while the weekday column headers one row above were already formatted with
|
|
1550
|
+
the component's resolved `locale`. A screen-reader user on a non-`en` session
|
|
1551
|
+
therefore heard the column headers in their own language and every date in whatever
|
|
1552
|
+
locale the runtime happened to be set to.
|
|
1553
|
+
|
|
1554
|
+
Both branches of that label (with events and without) now use the same resolved
|
|
1555
|
+
`locale` the headers use. No locale pack, key or translation is involved — this is
|
|
1556
|
+
which tag the `Intl` call is handed.
|
|
1557
|
+
- 76ae729: `README.md`'s "Schema API / CalendarView" block described a `CalendarViewSchema`
|
|
1558
|
+
that does not exist. Measured against the interface itself
|
|
1559
|
+
(`packages/types/src/complex.ts`) and its zod mirror: `events` — the schema's
|
|
1560
|
+
only required key besides `type` — was published as `events?`, so a reader
|
|
1561
|
+
following the README omits it and TypeScript rejects the node; `defaultDate` was
|
|
1562
|
+
`string` where the schema says `string | Date`; and `onDateClick` was listed as a
|
|
1563
|
+
schema key when it is a `CalendarViewProps` **component** prop, sending readers
|
|
1564
|
+
to a different package's surface for a key `calendar-view` does not have (the
|
|
1565
|
+
schema's key is `onDateChange`). The block also listed 6 of the schema's 13 keys
|
|
1566
|
+
with nothing saying it was a summary (objectui#5045).
|
|
1567
|
+
|
|
1568
|
+
The block now carries the requiredness the schema declares, names itself a
|
|
1569
|
+
partial summary of `CalendarViewSchema`, and adds the author-facing
|
|
1570
|
+
`defaultView` / `view` / `views` / `editable` / `date`. It also states plainly
|
|
1571
|
+
what the registered `calendar-view` renderer actually reads — it builds events
|
|
1572
|
+
from the node's `data` array and drops an authored `events` key (objectui#4433) —
|
|
1573
|
+
so the corrected requiredness does not itself become a new wrong instruction.
|
|
1574
|
+
|
|
1575
|
+
This is a documentation fix to a file `plugin-calendar` publishes to npm, which
|
|
1576
|
+
is why it carries a version: the npm landing page only picks up the correction
|
|
1577
|
+
on a release. No behaviour, export, type, or `dist` byte changes. The pin test
|
|
1578
|
+
added alongside it publishes nothing.
|
|
1579
|
+
- bc5870c: fix(plugin-calendar): a record with no date is no longer placed on today
|
|
1580
|
+
|
|
1581
|
+
`ObjectCalendar` mapped a record whose declared `startDateField` carried no
|
|
1582
|
+
value to `new Date()` — the current moment — so it rendered on today's cell as
|
|
1583
|
+
an ordinary event, indistinguishable from a real one. The `isNaN` guard six
|
|
1584
|
+
lines below could not catch it by construction: a no-argument `new Date()` is
|
|
1585
|
+
always valid, so the absent-value case became a well-formed lie *before* the
|
|
1586
|
+
check that would have caught it.
|
|
1587
|
+
|
|
1588
|
+
The fabricating arm is deleted. Such records now leave the grid entirely and
|
|
1589
|
+
appear in a collapsed "Unscheduled (N)" area below the calendar — a visible
|
|
1590
|
+
count and an expandable list, with no invented date and no scheduling UI. The
|
|
1591
|
+
`isNaN` filter keeps its original job for values that are present but
|
|
1592
|
+
unparseable: absent and malformed stay two distinguishable outcomes.
|
|
1593
|
+
`allDay: !endDate` now applies only to records that have a start, so a record
|
|
1594
|
+
with no dates at all is unscheduled rather than silently all-day; a record with
|
|
1595
|
+
a start and no end still renders all-day exactly as before.
|
|
1596
|
+
|
|
1597
|
+
Adds `calendar.unscheduled` to all ten locale packs.
|
|
1598
|
+
- f47d94c: `@object-ui/plugin-calendar` now exports the `CalendarView` component's runtime event
|
|
1599
|
+
type as **`CalendarViewEvent`**, and keeps `CalendarEvent` as a **`@deprecated` alias**
|
|
1600
|
+
of it. **Non-breaking:** the alias is a working re-export denoting the same type, so
|
|
1601
|
+
code importing `CalendarEvent` from this package keeps compiling unchanged — nothing is
|
|
1602
|
+
removed and no behaviour changes.
|
|
1603
|
+
|
|
1604
|
+
Why: `@object-ui/types` exports its own `CalendarEvent`, the AUTHORING event
|
|
1605
|
+
(`id: string`, `start` / `end` accept ISO strings with `end` required, plus
|
|
1606
|
+
`description`), while this package's was the runtime event (`id: string | number`,
|
|
1607
|
+
`start: Date`, `end?: Date`). Neither is assignable to the other, and IDE auto-import
|
|
1608
|
+
chose between the two identical names essentially at random — the wrong pick surfaced as
|
|
1609
|
+
a remote `TS2322` about `Date` rather than as a wrong import, which is how this package's
|
|
1610
|
+
own README example stayed uncompilable through an earlier import-path fix. The authoring
|
|
1611
|
+
type keeps the canonical `CalendarEvent` name; the runtime type gets the self-describing
|
|
1612
|
+
one (objectui#5044, following the `ObjectCalendarProps` -> `ObjectCalendarComponentProps`
|
|
1613
|
+
rename in objectui#4650).
|
|
1614
|
+
|
|
1615
|
+
Write `CalendarViewEvent` in new code.
|
|
1616
|
+
- 065bba7: `CalendarViewSchema` (TS interface and zod mirror) converges on the registered
|
|
1617
|
+
`calendar-view` renderer's measured read set (objectui#5667, maintainer ruling
|
|
1618
|
+
option A — the renderer is authoritative).
|
|
1619
|
+
|
|
1620
|
+
**Breaking for consumers of the published type** (deliberate; per-repo policy
|
|
1621
|
+
breaking changes ship as `minor` — the fixed group's `major` tracks
|
|
1622
|
+
`@objectstack`):
|
|
1623
|
+
|
|
1624
|
+
- Nine inert keys are retired: `events` (the interface's only required key,
|
|
1625
|
+
which the renderer deliberately drops — objectui#4433), `defaultView`,
|
|
1626
|
+
`defaultDate`, `date`, `views`, `editable`, `onEventCreate`,
|
|
1627
|
+
`onEventUpdate`, `onDateChange`. None had a read site on the authored-node
|
|
1628
|
+
path and no measured app authors them (ADR-0049 enforce-or-remove).
|
|
1629
|
+
- The type now declares what the renderer actually reads: `data`, `titleField`,
|
|
1630
|
+
`startDateField`, `endDateField`, `allDayField`, `colorField`, `view`,
|
|
1631
|
+
`currentDate`, `allowCreate`, `className`, plus the two host-only function
|
|
1632
|
+
hatches it forwards (`onEventClick`, `onViewChange`).
|
|
1633
|
+
- Practical radius, measured: `BaseSchema` carries an index signature and the
|
|
1634
|
+
zod `BaseSchema` is `.passthrough()`, so nodes still authoring retired keys
|
|
1635
|
+
neither fail to compile nor get rejected at validation — they are simply no
|
|
1636
|
+
longer declared, documented, or type-checked. The material accept change is
|
|
1637
|
+
that zod no longer **requires** `events`: a `{ "type": "calendar-view" }`
|
|
1638
|
+
node without it now validates (previously the one key validation demanded
|
|
1639
|
+
was the one key guaranteed to do nothing).
|
|
1640
|
+
|
|
1641
|
+
Runtime renderer behaviour is unchanged. `@object-ui/plugin-calendar`'s README
|
|
1642
|
+
and `content/docs/api/schema-reference.md` are repaired to the converged
|
|
1643
|
+
surface in the same change, so no copy of the old contradiction survives.
|
|
1644
|
+
- f760064: Localize every accessible name `CalendarView` authors itself.
|
|
1645
|
+
|
|
1646
|
+
The component hard-coded the accessible names of its own landmarks and controls
|
|
1647
|
+
in English, so no locale pack could reach them. A screen-reader user on a
|
|
1648
|
+
translated console heard "Calendar" and "Calendar grid" — the only names those
|
|
1649
|
+
two landmarks have — plus the toolbar buttons and both resize grips, in English,
|
|
1650
|
+
while every sighted string beside them was translated.
|
|
1651
|
+
|
|
1652
|
+
All of them now resolve through the `createSafeTranslation` hook the component
|
|
1653
|
+
already used for its visible copy, and the keys land in all ten locale packs
|
|
1654
|
+
under `calendar.a11y`. Two of the repaired strings were English frames wrapped
|
|
1655
|
+
around already-localized data (the current-date button and the day gridcell's
|
|
1656
|
+
event count); those are now pack-owned sentences whose translations can put the
|
|
1657
|
+
date and the count where each language's grammar wants them, and the gridcell's
|
|
1658
|
+
count is a plural family with a base key so the categories a pack does not
|
|
1659
|
+
enumerate resolve in its own language rather than falling through to English.
|
|
1660
|
+
- fb336df: Move `lucide-react` from `^1.31.0` to `^1.43.0` in every package that declares it, and
|
|
1661
|
+
repair what the jump breaks, so icons resolved from a STRING keep drawing a glyph.
|
|
1662
|
+
|
|
1663
|
+
Measured once against the installed 1.43.0 artifact when this change was made; nothing in
|
|
1664
|
+
the repository re-derives these readings. Across the jump lucide removes no runtime export,
|
|
1665
|
+
no public type name and no `lucide-react/dynamic.mjs` name, and every name this repository
|
|
1666
|
+
imports from `lucide-react` resolves. Exactly one key leaves the runtime `icons` record:
|
|
1667
|
+
`Trash2`, retired in favour of `trash`.
|
|
1668
|
+
|
|
1669
|
+
What a user sees change:
|
|
1670
|
+
|
|
1671
|
+
- Icons the lazy icon seam draws (`resolveIcon`, objectui#9251) get their path data again.
|
|
1672
|
+
lucide 1.43.0 icon modules export their path data inside `__iconData` and no longer
|
|
1673
|
+
export `__iconNode`; the seam now reads both. Reading only `__iconNode` against 1.43.0
|
|
1674
|
+
leaves every such glyph an empty box, with nothing thrown or logged.
|
|
1675
|
+
- `DetailView`'s delete action and three schema-catalog examples spell their icon
|
|
1676
|
+
`trash`, not `trash-2`, so they keep resolving. The glyph is unchanged: 1.43.0's `trash`
|
|
1677
|
+
path data is byte-identical to the `trash-2` path data of 1.31.0 and 1.35.0. Anything
|
|
1678
|
+
that already authored `trash` now draws that same artwork, because lucide moved it under
|
|
1679
|
+
the `trash` name; a few other glyphs were also redrawn upstream.
|
|
1680
|
+
- Icons imported as COMPONENTS carry lucide 1.43.0's own classes: one class per declared
|
|
1681
|
+
alias (a spinner renders `class="lucide lucide-loader-circle lucide-loader-2 ..."`), and
|
|
1682
|
+
no longer the class lucide used to derive from the PascalCase key where that differs
|
|
1683
|
+
(`ArrowDown01` no longer carries `lucide-arrow-down01`). The canonical
|
|
1684
|
+
`lucide-<icon name>` class is still there, so a `.lucide-loader-circle` selector still
|
|
1685
|
+
matches.
|
|
1686
|
+
- Icons resolved from a STRING through the seam keep the classes they had: `lucide`, the
|
|
1687
|
+
canonical `lucide-<icon name>` class and the key-derived class. They do not carry
|
|
1688
|
+
lucide's per-alias classes. That is a maintainer ruling (objectui#8941, option C): the
|
|
1689
|
+
alias list lives only inside each lazily loaded icon module, and it was not moved into
|
|
1690
|
+
the eager name list. A selector that targets an alias class matches a component-imported
|
|
1691
|
+
icon and not a string-resolved one. This also dates the example in the objectui#9251
|
|
1692
|
+
entry: `trash-2` no longer resolves as a string, so no seam-drawn glyph carries
|
|
1693
|
+
`lucide-trash2 lucide-trash-2`; a digit-bearing name that still resolves, such as
|
|
1694
|
+
`arrow-down-0-1`, carries `lucide-arrow-down01 lucide-arrow-down-0-1`.
|
|
1695
|
+
- Updated dependencies [cd2cb41]
|
|
1696
|
+
- Updated dependencies [7b10bef]
|
|
1697
|
+
- Updated dependencies [97abedc]
|
|
1698
|
+
- Updated dependencies [b46c58f]
|
|
1699
|
+
- Updated dependencies [a507334]
|
|
1700
|
+
- Updated dependencies [ad694ac]
|
|
1701
|
+
- Updated dependencies [6f96fca]
|
|
1702
|
+
- Updated dependencies [afb2284]
|
|
1703
|
+
- Updated dependencies [3ac2de8]
|
|
1704
|
+
- Updated dependencies [0aacecc]
|
|
1705
|
+
- Updated dependencies [28b0658]
|
|
1706
|
+
- Updated dependencies [63f4f92]
|
|
1707
|
+
- Updated dependencies [777fca2]
|
|
1708
|
+
- Updated dependencies [c131d9e]
|
|
1709
|
+
- Updated dependencies [5f00ff4]
|
|
1710
|
+
- Updated dependencies [c9e073a]
|
|
1711
|
+
- Updated dependencies [7b395d8]
|
|
1712
|
+
- Updated dependencies [0879812]
|
|
1713
|
+
- Updated dependencies [588380d]
|
|
1714
|
+
- Updated dependencies [8cedb0d]
|
|
1715
|
+
- Updated dependencies [6ce001a]
|
|
1716
|
+
- Updated dependencies [162621b]
|
|
1717
|
+
- Updated dependencies [b06c3de]
|
|
1718
|
+
- Updated dependencies [0d379f5]
|
|
1719
|
+
- Updated dependencies [4c6f549]
|
|
1720
|
+
- Updated dependencies [6cc910b]
|
|
1721
|
+
- Updated dependencies [061f5e8]
|
|
1722
|
+
- Updated dependencies [879ecac]
|
|
1723
|
+
- Updated dependencies [c2dabf0]
|
|
1724
|
+
- Updated dependencies [2dd4d3f]
|
|
1725
|
+
- Updated dependencies [e686f4d]
|
|
1726
|
+
- Updated dependencies [4ab4f1b]
|
|
1727
|
+
- Updated dependencies [fa5fbd9]
|
|
1728
|
+
- Updated dependencies [5f44cc6]
|
|
1729
|
+
- Updated dependencies [b57107d]
|
|
1730
|
+
- Updated dependencies [e3ea4f9]
|
|
1731
|
+
- Updated dependencies [fd6f5da]
|
|
1732
|
+
- Updated dependencies [bb5d4ee]
|
|
1733
|
+
- Updated dependencies [dc666f7]
|
|
1734
|
+
- Updated dependencies [3335767]
|
|
1735
|
+
- Updated dependencies [8b1f066]
|
|
1736
|
+
- Updated dependencies [af243c1]
|
|
1737
|
+
- Updated dependencies [cff4b77]
|
|
1738
|
+
- Updated dependencies [961ceaa]
|
|
1739
|
+
- Updated dependencies [f3f4e4c]
|
|
1740
|
+
- Updated dependencies [a05c350]
|
|
1741
|
+
- Updated dependencies [1dbb993]
|
|
1742
|
+
- Updated dependencies [2b5f509]
|
|
1743
|
+
- Updated dependencies [808f339]
|
|
1744
|
+
- Updated dependencies [6cf5999]
|
|
1745
|
+
- Updated dependencies [274e14a]
|
|
1746
|
+
- Updated dependencies [8c10f4f]
|
|
1747
|
+
- Updated dependencies [90dac98]
|
|
1748
|
+
- Updated dependencies [6096f20]
|
|
1749
|
+
- Updated dependencies [544aca2]
|
|
1750
|
+
- Updated dependencies [ea02938]
|
|
1751
|
+
- Updated dependencies [a14fb23]
|
|
1752
|
+
- Updated dependencies [ae98f1d]
|
|
1753
|
+
- Updated dependencies [f98eddf]
|
|
1754
|
+
- Updated dependencies [ce6bd99]
|
|
1755
|
+
- Updated dependencies [a5b08c9]
|
|
1756
|
+
- Updated dependencies [86982ac]
|
|
1757
|
+
- Updated dependencies [cdefa2a]
|
|
1758
|
+
- Updated dependencies [cc4366d]
|
|
1759
|
+
- Updated dependencies [0961d5e]
|
|
1760
|
+
- Updated dependencies [6276478]
|
|
1761
|
+
- Updated dependencies [5e67837]
|
|
1762
|
+
- Updated dependencies [ff14e29]
|
|
1763
|
+
- Updated dependencies [9b28151]
|
|
1764
|
+
- Updated dependencies [64563a9]
|
|
1765
|
+
- Updated dependencies [1a5003f]
|
|
1766
|
+
- Updated dependencies [09ab32b]
|
|
1767
|
+
- Updated dependencies [8acc51b]
|
|
1768
|
+
- Updated dependencies [ea9d17f]
|
|
1769
|
+
- Updated dependencies [45362a3]
|
|
1770
|
+
- Updated dependencies [2a943bf]
|
|
1771
|
+
- Updated dependencies [d999617]
|
|
1772
|
+
- Updated dependencies [93a689d]
|
|
1773
|
+
- Updated dependencies [4357a27]
|
|
1774
|
+
- Updated dependencies [e5f4343]
|
|
1775
|
+
- Updated dependencies [3261e64]
|
|
1776
|
+
- Updated dependencies [f5178a2]
|
|
1777
|
+
- Updated dependencies [2ad3671]
|
|
1778
|
+
- Updated dependencies [8740e86]
|
|
1779
|
+
- Updated dependencies [d22b37b]
|
|
1780
|
+
- Updated dependencies [9cbe4db]
|
|
1781
|
+
- Updated dependencies [1daf477]
|
|
1782
|
+
- Updated dependencies [3d614ea]
|
|
1783
|
+
- Updated dependencies [6c2f3c5]
|
|
1784
|
+
- Updated dependencies [fb13e85]
|
|
1785
|
+
- Updated dependencies [c2d8659]
|
|
1786
|
+
- Updated dependencies [e0f8202]
|
|
1787
|
+
- Updated dependencies [ac2d6f1]
|
|
1788
|
+
- Updated dependencies [9fbbb17]
|
|
1789
|
+
- Updated dependencies [c3a26cc]
|
|
1790
|
+
- Updated dependencies [a66e58e]
|
|
1791
|
+
- Updated dependencies [d89492c]
|
|
1792
|
+
- Updated dependencies [9a5f998]
|
|
1793
|
+
- Updated dependencies [9327397]
|
|
1794
|
+
- Updated dependencies [17cc3a3]
|
|
1795
|
+
- Updated dependencies [02e6d36]
|
|
1796
|
+
- Updated dependencies [4758b33]
|
|
1797
|
+
- Updated dependencies [4758b33]
|
|
1798
|
+
- Updated dependencies [8848ce4]
|
|
1799
|
+
- Updated dependencies [f905090]
|
|
1800
|
+
- Updated dependencies [9c78ebe]
|
|
1801
|
+
- Updated dependencies [9c78ebe]
|
|
1802
|
+
- Updated dependencies [12809a5]
|
|
1803
|
+
- Updated dependencies [9c78ebe]
|
|
1804
|
+
- Updated dependencies [12809a5]
|
|
1805
|
+
- Updated dependencies [7afc81d]
|
|
1806
|
+
- Updated dependencies [f9c06ef]
|
|
1807
|
+
- Updated dependencies [93a5585]
|
|
1808
|
+
- Updated dependencies [5ad3b88]
|
|
1809
|
+
- Updated dependencies [21eb61a]
|
|
1810
|
+
- Updated dependencies [f9d772b]
|
|
1811
|
+
- Updated dependencies [97b6c21]
|
|
1812
|
+
- Updated dependencies [26ca2ad]
|
|
1813
|
+
- Updated dependencies [41ae65b]
|
|
1814
|
+
- Updated dependencies [184cfe1]
|
|
1815
|
+
- Updated dependencies [baac95a]
|
|
1816
|
+
- Updated dependencies [13220af]
|
|
1817
|
+
- Updated dependencies [29b45f6]
|
|
1818
|
+
- Updated dependencies [39b8d51]
|
|
1819
|
+
- Updated dependencies [17b323e]
|
|
1820
|
+
- Updated dependencies [b956e69]
|
|
1821
|
+
- Updated dependencies [33e58d8]
|
|
1822
|
+
- Updated dependencies [256b4c9]
|
|
1823
|
+
- Updated dependencies [c5ec15c]
|
|
1824
|
+
- Updated dependencies [fec3b1a]
|
|
1825
|
+
- Updated dependencies [b8e0941]
|
|
1826
|
+
- Updated dependencies [0c50f18]
|
|
1827
|
+
- Updated dependencies [285e36b]
|
|
1828
|
+
- Updated dependencies [1dae95a]
|
|
1829
|
+
- Updated dependencies [e32dae1]
|
|
1830
|
+
- Updated dependencies [30b11ad]
|
|
1831
|
+
- Updated dependencies [4aebea0]
|
|
1832
|
+
- Updated dependencies [f976774]
|
|
1833
|
+
- Updated dependencies [3d6badf]
|
|
1834
|
+
- Updated dependencies [25cb364]
|
|
1835
|
+
- Updated dependencies [a60539b]
|
|
1836
|
+
- Updated dependencies [de1b879]
|
|
1837
|
+
- Updated dependencies [c6678b1]
|
|
1838
|
+
- Updated dependencies [0638322]
|
|
1839
|
+
- Updated dependencies [e3782d2]
|
|
1840
|
+
- Updated dependencies [db0beb2]
|
|
1841
|
+
- Updated dependencies [997ce38]
|
|
1842
|
+
- Updated dependencies [ae0b9d3]
|
|
1843
|
+
- Updated dependencies [ad1785c]
|
|
1844
|
+
- Updated dependencies [3b469c8]
|
|
1845
|
+
- Updated dependencies [990a2d6]
|
|
1846
|
+
- Updated dependencies [37140f4]
|
|
1847
|
+
- Updated dependencies [1c84036]
|
|
1848
|
+
- Updated dependencies [1c84036]
|
|
1849
|
+
- Updated dependencies [6650259]
|
|
1850
|
+
- Updated dependencies [4f8b7f8]
|
|
1851
|
+
- Updated dependencies [9e6619f]
|
|
1852
|
+
- Updated dependencies [f6ae5e2]
|
|
1853
|
+
- Updated dependencies [eb97ce6]
|
|
1854
|
+
- Updated dependencies [7343376]
|
|
1855
|
+
- Updated dependencies [b2683a2]
|
|
1856
|
+
- Updated dependencies [dded788]
|
|
1857
|
+
- Updated dependencies [b45d463]
|
|
1858
|
+
- Updated dependencies [54a7830]
|
|
1859
|
+
- Updated dependencies [f3135a4]
|
|
1860
|
+
- Updated dependencies [b5696d3]
|
|
1861
|
+
- Updated dependencies [3f9d926]
|
|
1862
|
+
- Updated dependencies [e978ed5]
|
|
1863
|
+
- Updated dependencies [6a7f24e]
|
|
1864
|
+
- Updated dependencies [b3c96d6]
|
|
1865
|
+
- Updated dependencies [8d0ca91]
|
|
1866
|
+
- Updated dependencies [c30c8dd]
|
|
1867
|
+
- Updated dependencies [244d516]
|
|
1868
|
+
- Updated dependencies [deca847]
|
|
1869
|
+
- Updated dependencies [ac15833]
|
|
1870
|
+
- Updated dependencies [ac15833]
|
|
1871
|
+
- Updated dependencies [e2dffc9]
|
|
1872
|
+
- Updated dependencies [328abeb]
|
|
1873
|
+
- Updated dependencies [dd0d78f]
|
|
1874
|
+
- Updated dependencies [24d3e65]
|
|
1875
|
+
- Updated dependencies [95a7c8d]
|
|
1876
|
+
- Updated dependencies [e227156]
|
|
1877
|
+
- Updated dependencies [cc4e476]
|
|
1878
|
+
- Updated dependencies [92970c4]
|
|
1879
|
+
- Updated dependencies [d570eaa]
|
|
1880
|
+
- Updated dependencies [4b742f4]
|
|
1881
|
+
- Updated dependencies [42687ba]
|
|
1882
|
+
- Updated dependencies [6cd8f66]
|
|
1883
|
+
- Updated dependencies [24a0f14]
|
|
1884
|
+
- Updated dependencies [797a30f]
|
|
1885
|
+
- Updated dependencies [27ae632]
|
|
1886
|
+
- Updated dependencies [b4075c0]
|
|
1887
|
+
- Updated dependencies [9b85600]
|
|
1888
|
+
- Updated dependencies [e327c89]
|
|
1889
|
+
- Updated dependencies [2eaf5be]
|
|
1890
|
+
- Updated dependencies [bf7ab35]
|
|
1891
|
+
- Updated dependencies [99878d8]
|
|
1892
|
+
- Updated dependencies [3c13675]
|
|
1893
|
+
- Updated dependencies [63ab761]
|
|
1894
|
+
- Updated dependencies [0eb9f36]
|
|
1895
|
+
- Updated dependencies [ae582b7]
|
|
1896
|
+
- Updated dependencies [62d6f56]
|
|
1897
|
+
- Updated dependencies [51c2949]
|
|
1898
|
+
- Updated dependencies [a4b017e]
|
|
1899
|
+
- Updated dependencies [8732846]
|
|
1900
|
+
- Updated dependencies [559a2e2]
|
|
1901
|
+
- Updated dependencies [db11afd]
|
|
1902
|
+
- Updated dependencies [154075a]
|
|
1903
|
+
- Updated dependencies [582edef]
|
|
1904
|
+
- Updated dependencies [19f484f]
|
|
1905
|
+
- Updated dependencies [0a78a20]
|
|
1906
|
+
- Updated dependencies [615346d]
|
|
1907
|
+
- Updated dependencies [75dcc81]
|
|
1908
|
+
- Updated dependencies [55a12a8]
|
|
1909
|
+
- Updated dependencies [edfcf5a]
|
|
1910
|
+
- Updated dependencies [0a3e540]
|
|
1911
|
+
- Updated dependencies [c021b35]
|
|
1912
|
+
- Updated dependencies [f61dab1]
|
|
1913
|
+
- Updated dependencies [b0a05dd]
|
|
1914
|
+
- Updated dependencies [dd5ff19]
|
|
1915
|
+
- Updated dependencies [54997ff]
|
|
1916
|
+
- Updated dependencies [81f8498]
|
|
1917
|
+
- Updated dependencies [a782fa7]
|
|
1918
|
+
- Updated dependencies [1d6a23d]
|
|
1919
|
+
- Updated dependencies [0645133]
|
|
1920
|
+
- Updated dependencies [76e9df0]
|
|
1921
|
+
- Updated dependencies [0ecaa7d]
|
|
1922
|
+
- Updated dependencies [b24f93a]
|
|
1923
|
+
- Updated dependencies [6158e4c]
|
|
1924
|
+
- Updated dependencies [cff8641]
|
|
1925
|
+
- Updated dependencies [3f61eef]
|
|
1926
|
+
- Updated dependencies [c27b575]
|
|
1927
|
+
- Updated dependencies [84b275c]
|
|
1928
|
+
- Updated dependencies [0e6e76b]
|
|
1929
|
+
- Updated dependencies [bf43afa]
|
|
1930
|
+
- Updated dependencies [385ebc5]
|
|
1931
|
+
- Updated dependencies [858eafb]
|
|
1932
|
+
- Updated dependencies [a8c5509]
|
|
1933
|
+
- Updated dependencies [c2a8d23]
|
|
1934
|
+
- Updated dependencies [f4ed238]
|
|
1935
|
+
- Updated dependencies [0ffc423]
|
|
1936
|
+
- Updated dependencies [3cc4fe5]
|
|
1937
|
+
- Updated dependencies [cd5b19a]
|
|
1938
|
+
- Updated dependencies [cd5b19a]
|
|
1939
|
+
- Updated dependencies [17dc167]
|
|
1940
|
+
- Updated dependencies [20d23be]
|
|
1941
|
+
- Updated dependencies [20d23be]
|
|
1942
|
+
- Updated dependencies [2e3da72]
|
|
1943
|
+
- Updated dependencies [1263e40]
|
|
1944
|
+
- Updated dependencies [e6bc087]
|
|
1945
|
+
- Updated dependencies [9419df1]
|
|
1946
|
+
- Updated dependencies [8bab157]
|
|
1947
|
+
- Updated dependencies [a7557a7]
|
|
1948
|
+
- Updated dependencies [7d074ba]
|
|
1949
|
+
- Updated dependencies [6158e4c]
|
|
1950
|
+
- Updated dependencies [6158e4c]
|
|
1951
|
+
- Updated dependencies [52aad5c]
|
|
1952
|
+
- Updated dependencies [18d1a0a]
|
|
1953
|
+
- Updated dependencies [e420df3]
|
|
1954
|
+
- Updated dependencies [7fed09d]
|
|
1955
|
+
- Updated dependencies [58da8ae]
|
|
1956
|
+
- Updated dependencies [a8b9889]
|
|
1957
|
+
- Updated dependencies [138ad45]
|
|
1958
|
+
- Updated dependencies [138ad45]
|
|
1959
|
+
- Updated dependencies [5262f7d]
|
|
1960
|
+
- Updated dependencies [6aa029b]
|
|
1961
|
+
- Updated dependencies [2124d04]
|
|
1962
|
+
- Updated dependencies [be52115]
|
|
1963
|
+
- Updated dependencies [770cc5b]
|
|
1964
|
+
- Updated dependencies [1a88ce2]
|
|
1965
|
+
- Updated dependencies [a1a44d6]
|
|
1966
|
+
- Updated dependencies [e0a9c67]
|
|
1967
|
+
- Updated dependencies [5638529]
|
|
1968
|
+
- Updated dependencies [5638529]
|
|
1969
|
+
- Updated dependencies [d0fba91]
|
|
1970
|
+
- Updated dependencies [c476be0]
|
|
1971
|
+
- Updated dependencies [c82ff39]
|
|
1972
|
+
- Updated dependencies [6c3da53]
|
|
1973
|
+
- Updated dependencies [31987bd]
|
|
1974
|
+
- Updated dependencies [3c3ce15]
|
|
1975
|
+
- Updated dependencies [063119f]
|
|
1976
|
+
- Updated dependencies [e100589]
|
|
1977
|
+
- Updated dependencies [304f611]
|
|
1978
|
+
- Updated dependencies [e46ee77]
|
|
1979
|
+
- Updated dependencies [f9c8c4e]
|
|
1980
|
+
- Updated dependencies [6e9c8d2]
|
|
1981
|
+
- Updated dependencies [9547063]
|
|
1982
|
+
- Updated dependencies [3f6efd6]
|
|
1983
|
+
- Updated dependencies [55d18c6]
|
|
1984
|
+
- Updated dependencies [c4ab6d0]
|
|
1985
|
+
- Updated dependencies [0e9058b]
|
|
1986
|
+
- Updated dependencies [c4ab6d0]
|
|
1987
|
+
- Updated dependencies [5988b6b]
|
|
1988
|
+
- Updated dependencies [6158e4c]
|
|
1989
|
+
- Updated dependencies [00ccdf7]
|
|
1990
|
+
- Updated dependencies [9d9ed54]
|
|
1991
|
+
- Updated dependencies [4a1adb7]
|
|
1992
|
+
- Updated dependencies [4a1adb7]
|
|
1993
|
+
- Updated dependencies [4a1adb7]
|
|
1994
|
+
- Updated dependencies [50c73fe]
|
|
1995
|
+
- Updated dependencies [ca3de72]
|
|
1996
|
+
- Updated dependencies [83e3f83]
|
|
1997
|
+
- Updated dependencies [401611b]
|
|
1998
|
+
- Updated dependencies [2c0ddf2]
|
|
1999
|
+
- Updated dependencies [4abc0aa]
|
|
2000
|
+
- Updated dependencies [f560ded]
|
|
2001
|
+
- Updated dependencies [f560ded]
|
|
2002
|
+
- Updated dependencies [2b188fa]
|
|
2003
|
+
- Updated dependencies [b654d4e]
|
|
2004
|
+
- Updated dependencies [f68e0a0]
|
|
2005
|
+
- Updated dependencies [aea682a]
|
|
2006
|
+
- Updated dependencies [fcdc8ec]
|
|
2007
|
+
- Updated dependencies [2d576e4]
|
|
2008
|
+
- Updated dependencies [8366acc]
|
|
2009
|
+
- Updated dependencies [95e58a3]
|
|
2010
|
+
- Updated dependencies [9d7419b]
|
|
2011
|
+
- Updated dependencies [fc7db05]
|
|
2012
|
+
- Updated dependencies [fc7db05]
|
|
2013
|
+
- Updated dependencies [9ed8d0f]
|
|
2014
|
+
- Updated dependencies [c73cdb5]
|
|
2015
|
+
- Updated dependencies [6f5719e]
|
|
2016
|
+
- Updated dependencies [b34cc14]
|
|
2017
|
+
- Updated dependencies [ab18797]
|
|
2018
|
+
- Updated dependencies [d0097af]
|
|
2019
|
+
- Updated dependencies [432882b]
|
|
2020
|
+
- Updated dependencies [64dae8e]
|
|
2021
|
+
- Updated dependencies [b06e374]
|
|
2022
|
+
- Updated dependencies [06a8af5]
|
|
2023
|
+
- Updated dependencies [6a91586]
|
|
2024
|
+
- Updated dependencies [a04d7c6]
|
|
2025
|
+
- Updated dependencies [5ccc500]
|
|
2026
|
+
- Updated dependencies [f3c2bb0]
|
|
2027
|
+
- Updated dependencies [978507b]
|
|
2028
|
+
- Updated dependencies [778138e]
|
|
2029
|
+
- Updated dependencies [9801765]
|
|
2030
|
+
- Updated dependencies [9cebfca]
|
|
2031
|
+
- Updated dependencies [460575f]
|
|
2032
|
+
- Updated dependencies [d796c8d]
|
|
2033
|
+
- Updated dependencies [594704f]
|
|
2034
|
+
- Updated dependencies [d3995fe]
|
|
2035
|
+
- Updated dependencies [1b1d772]
|
|
2036
|
+
- Updated dependencies [d88e20f]
|
|
2037
|
+
- Updated dependencies [f66072d]
|
|
2038
|
+
- Updated dependencies [2d7304d]
|
|
2039
|
+
- Updated dependencies [636b236]
|
|
2040
|
+
- Updated dependencies [4172589]
|
|
2041
|
+
- Updated dependencies [d6d8fb9]
|
|
2042
|
+
- Updated dependencies [64d624d]
|
|
2043
|
+
- Updated dependencies [053fdc8]
|
|
2044
|
+
- Updated dependencies [41b7ce3]
|
|
2045
|
+
- Updated dependencies [ae476b8]
|
|
2046
|
+
- Updated dependencies [39f4309]
|
|
2047
|
+
- Updated dependencies [95bad12]
|
|
2048
|
+
- Updated dependencies [d2fb6ef]
|
|
2049
|
+
- Updated dependencies [7cd3987]
|
|
2050
|
+
- Updated dependencies [ee3b878]
|
|
2051
|
+
- Updated dependencies [e304a4e]
|
|
2052
|
+
- Updated dependencies [fda49e5]
|
|
2053
|
+
- Updated dependencies [490d9a9]
|
|
2054
|
+
- Updated dependencies [1117414]
|
|
2055
|
+
- Updated dependencies [6d63cd0]
|
|
2056
|
+
- Updated dependencies [fc62bb4]
|
|
2057
|
+
- Updated dependencies [41df893]
|
|
2058
|
+
- Updated dependencies [0cba1b7]
|
|
2059
|
+
- Updated dependencies [7c96c94]
|
|
2060
|
+
- Updated dependencies [4da5109]
|
|
2061
|
+
- Updated dependencies [00f3eb5]
|
|
2062
|
+
- Updated dependencies [1ec291c]
|
|
2063
|
+
- Updated dependencies [453dbaa]
|
|
2064
|
+
- Updated dependencies [95f8704]
|
|
2065
|
+
- Updated dependencies [f8cdbf2]
|
|
2066
|
+
- Updated dependencies [69a2163]
|
|
2067
|
+
- Updated dependencies [24e027e]
|
|
2068
|
+
- Updated dependencies [2c3cd1b]
|
|
2069
|
+
- Updated dependencies [e176053]
|
|
2070
|
+
- Updated dependencies [e30ed15]
|
|
2071
|
+
- Updated dependencies [90665e0]
|
|
2072
|
+
- Updated dependencies [8d3a529]
|
|
2073
|
+
- Updated dependencies [5ac2e2c]
|
|
2074
|
+
- Updated dependencies [194fae1]
|
|
2075
|
+
- Updated dependencies [63d54dd]
|
|
2076
|
+
- Updated dependencies [7e19d03]
|
|
2077
|
+
- Updated dependencies [b08b7eb]
|
|
2078
|
+
- Updated dependencies [1e946c9]
|
|
2079
|
+
- Updated dependencies [546ddf7]
|
|
2080
|
+
- Updated dependencies [864154e]
|
|
2081
|
+
- Updated dependencies [b023625]
|
|
2082
|
+
- Updated dependencies [75bd83d]
|
|
2083
|
+
- Updated dependencies [44d075b]
|
|
2084
|
+
- Updated dependencies [40c479a]
|
|
2085
|
+
- Updated dependencies [b4393e5]
|
|
2086
|
+
- Updated dependencies [971d387]
|
|
2087
|
+
- Updated dependencies [ee851c3]
|
|
2088
|
+
- Updated dependencies [6414dfd]
|
|
2089
|
+
- Updated dependencies [a8d5c71]
|
|
2090
|
+
- Updated dependencies [905b21f]
|
|
2091
|
+
- Updated dependencies [88e9109]
|
|
2092
|
+
- Updated dependencies [2c45966]
|
|
2093
|
+
- Updated dependencies [db3a600]
|
|
2094
|
+
- Updated dependencies [3a3db76]
|
|
2095
|
+
- Updated dependencies [0d723a3]
|
|
2096
|
+
- Updated dependencies [0c95d3d]
|
|
2097
|
+
- Updated dependencies [3e4fa2c]
|
|
2098
|
+
- Updated dependencies [b5b928a]
|
|
2099
|
+
- Updated dependencies [6fd2cf7]
|
|
2100
|
+
- Updated dependencies [5fa06c4]
|
|
2101
|
+
- Updated dependencies [52a43de]
|
|
2102
|
+
- Updated dependencies [195052f]
|
|
2103
|
+
- Updated dependencies [e4559d1]
|
|
2104
|
+
- Updated dependencies [2c71482]
|
|
2105
|
+
- Updated dependencies [129bcc5]
|
|
2106
|
+
- Updated dependencies [d3005f7]
|
|
2107
|
+
- Updated dependencies [1e7fe0a]
|
|
2108
|
+
- Updated dependencies [a26b9e4]
|
|
2109
|
+
- Updated dependencies [5ef9c4f]
|
|
2110
|
+
- Updated dependencies [46f0bb4]
|
|
2111
|
+
- Updated dependencies [06b82b8]
|
|
2112
|
+
- Updated dependencies [8ec11e1]
|
|
2113
|
+
- Updated dependencies [6f81384]
|
|
2114
|
+
- Updated dependencies [22ba927]
|
|
2115
|
+
- Updated dependencies [f8c70f4]
|
|
2116
|
+
- Updated dependencies [5d3a2d1]
|
|
2117
|
+
- Updated dependencies [8f1d995]
|
|
2118
|
+
- Updated dependencies [b362c1b]
|
|
2119
|
+
- Updated dependencies [f9c34df]
|
|
2120
|
+
- Updated dependencies [dddb942]
|
|
2121
|
+
- Updated dependencies [00c665e]
|
|
2122
|
+
- Updated dependencies [29754cf]
|
|
2123
|
+
- Updated dependencies [d7de534]
|
|
2124
|
+
- Updated dependencies [3c2b6f7]
|
|
2125
|
+
- Updated dependencies [6e88630]
|
|
2126
|
+
- Updated dependencies [b84dc18]
|
|
2127
|
+
- Updated dependencies [ac8abb0]
|
|
2128
|
+
- Updated dependencies [9d86e1d]
|
|
2129
|
+
- Updated dependencies [3a5817f]
|
|
2130
|
+
- Updated dependencies [99a3c2d]
|
|
2131
|
+
- Updated dependencies [5961030]
|
|
2132
|
+
- Updated dependencies [f24de8b]
|
|
2133
|
+
- Updated dependencies [c8ea8af]
|
|
2134
|
+
- Updated dependencies [9602dc8]
|
|
2135
|
+
- Updated dependencies [3777538]
|
|
2136
|
+
- Updated dependencies [3190414]
|
|
2137
|
+
- Updated dependencies [4e480f5]
|
|
2138
|
+
- Updated dependencies [38a123c]
|
|
2139
|
+
- Updated dependencies [299102e]
|
|
2140
|
+
- Updated dependencies [30c73cd]
|
|
2141
|
+
- Updated dependencies [830ed58]
|
|
2142
|
+
- Updated dependencies [d7acad6]
|
|
2143
|
+
- Updated dependencies [45a9aeb]
|
|
2144
|
+
- Updated dependencies [713db46]
|
|
2145
|
+
- Updated dependencies [c71e14d]
|
|
2146
|
+
- Updated dependencies [bf3a03c]
|
|
2147
|
+
- Updated dependencies [cb55718]
|
|
2148
|
+
- Updated dependencies [748494b]
|
|
2149
|
+
- Updated dependencies [5967be0]
|
|
2150
|
+
- Updated dependencies [831be72]
|
|
2151
|
+
- Updated dependencies [29cb85b]
|
|
2152
|
+
- Updated dependencies [3e028c8]
|
|
2153
|
+
- Updated dependencies [d0889e2]
|
|
2154
|
+
- Updated dependencies [ce503e5]
|
|
2155
|
+
- Updated dependencies [f20dcf0]
|
|
2156
|
+
- Updated dependencies [12402a9]
|
|
2157
|
+
- Updated dependencies [aff3d7a]
|
|
2158
|
+
- Updated dependencies [4ca30d0]
|
|
2159
|
+
- Updated dependencies [7a5da14]
|
|
2160
|
+
- Updated dependencies [fff9645]
|
|
2161
|
+
- Updated dependencies [9c3b7ce]
|
|
2162
|
+
- Updated dependencies [2c1c967]
|
|
2163
|
+
- Updated dependencies [9486ac6]
|
|
2164
|
+
- Updated dependencies [9486ac6]
|
|
2165
|
+
- Updated dependencies [4d5f9b4]
|
|
2166
|
+
- Updated dependencies [d6ceb8d]
|
|
2167
|
+
- Updated dependencies [dc4365c]
|
|
2168
|
+
- Updated dependencies [e321d52]
|
|
2169
|
+
- Updated dependencies [969ba84]
|
|
2170
|
+
- Updated dependencies [4c68077]
|
|
2171
|
+
- Updated dependencies [7977ff9]
|
|
2172
|
+
- Updated dependencies [3beef6d]
|
|
2173
|
+
- Updated dependencies [06b8c42]
|
|
2174
|
+
- Updated dependencies [46b9bc9]
|
|
2175
|
+
- Updated dependencies [45ac2cb]
|
|
2176
|
+
- Updated dependencies [b97790a]
|
|
2177
|
+
- Updated dependencies [dbd5194]
|
|
2178
|
+
- Updated dependencies [7c9b044]
|
|
2179
|
+
- Updated dependencies [d47de51]
|
|
2180
|
+
- Updated dependencies [3fe6463]
|
|
2181
|
+
- Updated dependencies [b392674]
|
|
2182
|
+
- Updated dependencies [4f3a1e2]
|
|
2183
|
+
- Updated dependencies [31ab372]
|
|
2184
|
+
- Updated dependencies [846889b]
|
|
2185
|
+
- Updated dependencies [2acd8e1]
|
|
2186
|
+
- Updated dependencies [26896c6]
|
|
2187
|
+
- Updated dependencies [a439e16]
|
|
2188
|
+
- Updated dependencies [67fc3b0]
|
|
2189
|
+
- Updated dependencies [33a3b3c]
|
|
2190
|
+
- Updated dependencies [b87f15b]
|
|
2191
|
+
- Updated dependencies [9409eb9]
|
|
2192
|
+
- Updated dependencies [045d20b]
|
|
2193
|
+
- Updated dependencies [a2d2515]
|
|
2194
|
+
- Updated dependencies [c18d099]
|
|
2195
|
+
- Updated dependencies [adb2a86]
|
|
2196
|
+
- Updated dependencies [03380aa]
|
|
2197
|
+
- Updated dependencies [4562ea5]
|
|
2198
|
+
- Updated dependencies [3619792]
|
|
2199
|
+
- Updated dependencies [3561bd2]
|
|
2200
|
+
- Updated dependencies [bf97b98]
|
|
2201
|
+
- Updated dependencies [320374d]
|
|
2202
|
+
- Updated dependencies [b0d308d]
|
|
2203
|
+
- Updated dependencies [40f34b4]
|
|
2204
|
+
- Updated dependencies [bd0376d]
|
|
2205
|
+
- Updated dependencies [8063bcb]
|
|
2206
|
+
- Updated dependencies [b74a859]
|
|
2207
|
+
- Updated dependencies [d4493fd]
|
|
2208
|
+
- Updated dependencies [240b80f]
|
|
2209
|
+
- Updated dependencies [77cb489]
|
|
2210
|
+
- Updated dependencies [bfaa158]
|
|
2211
|
+
- Updated dependencies [777e5c6]
|
|
2212
|
+
- Updated dependencies [0c386dd]
|
|
2213
|
+
- Updated dependencies [9e37d9b]
|
|
2214
|
+
- Updated dependencies [5ad86dd]
|
|
2215
|
+
- Updated dependencies [16a725f]
|
|
2216
|
+
- Updated dependencies [c4326fe]
|
|
2217
|
+
- Updated dependencies [4dfdcc3]
|
|
2218
|
+
- Updated dependencies [6a449fc]
|
|
2219
|
+
- Updated dependencies [446d93d]
|
|
2220
|
+
- Updated dependencies [ecd9cb2]
|
|
2221
|
+
- Updated dependencies [98d4108]
|
|
2222
|
+
- Updated dependencies [0e3b3be]
|
|
2223
|
+
- Updated dependencies [a29ae2d]
|
|
2224
|
+
- Updated dependencies [220c18d]
|
|
2225
|
+
- Updated dependencies [eeb6c2f]
|
|
2226
|
+
- Updated dependencies [00d3f09]
|
|
2227
|
+
- Updated dependencies [4388f71]
|
|
2228
|
+
- Updated dependencies [0b1ac58]
|
|
2229
|
+
- Updated dependencies [c93b4d5]
|
|
2230
|
+
- Updated dependencies [c1fe272]
|
|
2231
|
+
- Updated dependencies [3cab570]
|
|
2232
|
+
- Updated dependencies [8ad218d]
|
|
2233
|
+
- Updated dependencies [3e41187]
|
|
2234
|
+
- Updated dependencies [5f78953]
|
|
2235
|
+
- Updated dependencies [639114c]
|
|
2236
|
+
- Updated dependencies [639114c]
|
|
2237
|
+
- Updated dependencies [1490691]
|
|
2238
|
+
- Updated dependencies [1f31d3a]
|
|
2239
|
+
- Updated dependencies [d1842ab]
|
|
2240
|
+
- Updated dependencies [854cba3]
|
|
2241
|
+
- Updated dependencies [78ca238]
|
|
2242
|
+
- Updated dependencies [d8ec8d6]
|
|
2243
|
+
- Updated dependencies [351eb31]
|
|
2244
|
+
- Updated dependencies [866cd1d]
|
|
2245
|
+
- Updated dependencies [20c04b2]
|
|
2246
|
+
- Updated dependencies [01c9023]
|
|
2247
|
+
- Updated dependencies [48c19bd]
|
|
2248
|
+
- Updated dependencies [a6d8b8d]
|
|
2249
|
+
- Updated dependencies [4b5bb95]
|
|
2250
|
+
- Updated dependencies [b652514]
|
|
2251
|
+
- Updated dependencies [adbda1b]
|
|
2252
|
+
- Updated dependencies [adbda1b]
|
|
2253
|
+
- Updated dependencies [8952395]
|
|
2254
|
+
- Updated dependencies [e2b3826]
|
|
2255
|
+
- Updated dependencies [a338037]
|
|
2256
|
+
- Updated dependencies [0348bc9]
|
|
2257
|
+
- Updated dependencies [e8c553b]
|
|
2258
|
+
- Updated dependencies [2e32ed4]
|
|
2259
|
+
- Updated dependencies [3ed3eec]
|
|
2260
|
+
- Updated dependencies [7c3df8f]
|
|
2261
|
+
- Updated dependencies [a4514e8]
|
|
2262
|
+
- Updated dependencies [6411def]
|
|
2263
|
+
- Updated dependencies [db3896c]
|
|
2264
|
+
- Updated dependencies [b9f5ff1]
|
|
2265
|
+
- Updated dependencies [e75f4c9]
|
|
2266
|
+
- Updated dependencies [19f1639]
|
|
2267
|
+
- Updated dependencies [4704aa4]
|
|
2268
|
+
- Updated dependencies [47547d0]
|
|
2269
|
+
- Updated dependencies [1bee5d0]
|
|
2270
|
+
- Updated dependencies [63a8828]
|
|
2271
|
+
- Updated dependencies [b61d7d8]
|
|
2272
|
+
- Updated dependencies [858cd72]
|
|
2273
|
+
- Updated dependencies [cfc9b6d]
|
|
2274
|
+
- Updated dependencies [dc0a60b]
|
|
2275
|
+
- Updated dependencies [554f2b6]
|
|
2276
|
+
- Updated dependencies [72f55c9]
|
|
2277
|
+
- Updated dependencies [26e06d7]
|
|
2278
|
+
- Updated dependencies [669d71b]
|
|
2279
|
+
- Updated dependencies [ed27d7c]
|
|
2280
|
+
- Updated dependencies [52c8cf7]
|
|
2281
|
+
- Updated dependencies [2ceb43a]
|
|
2282
|
+
- Updated dependencies [7cdd2b9]
|
|
2283
|
+
- Updated dependencies [52c8cf7]
|
|
2284
|
+
- Updated dependencies [3399704]
|
|
2285
|
+
- Updated dependencies [02fe257]
|
|
2286
|
+
- Updated dependencies [71a4a53]
|
|
2287
|
+
- Updated dependencies [7bf244b]
|
|
2288
|
+
- Updated dependencies [f0bb9fa]
|
|
2289
|
+
- Updated dependencies [81a2eb1]
|
|
2290
|
+
- Updated dependencies [caa0cd3]
|
|
2291
|
+
- Updated dependencies [caa0cd3]
|
|
2292
|
+
- Updated dependencies [20cb8db]
|
|
2293
|
+
- Updated dependencies [25c7d58]
|
|
2294
|
+
- Updated dependencies [00d2fa6]
|
|
2295
|
+
- Updated dependencies [77b2a18]
|
|
2296
|
+
- Updated dependencies [c6198c2]
|
|
2297
|
+
- Updated dependencies [721d1e0]
|
|
2298
|
+
- Updated dependencies [c2f0f48]
|
|
2299
|
+
- Updated dependencies [1237ae4]
|
|
2300
|
+
- Updated dependencies [2f61238]
|
|
2301
|
+
- Updated dependencies [51eb515]
|
|
2302
|
+
- Updated dependencies [c354ce5]
|
|
2303
|
+
- Updated dependencies [8fe8e5c]
|
|
2304
|
+
- Updated dependencies [feac439]
|
|
2305
|
+
- Updated dependencies [9ae871d]
|
|
2306
|
+
- Updated dependencies [efbd566]
|
|
2307
|
+
- Updated dependencies [2a5bf45]
|
|
2308
|
+
- Updated dependencies [9587fc9]
|
|
2309
|
+
- Updated dependencies [e62c44e]
|
|
2310
|
+
- Updated dependencies [daf9d57]
|
|
2311
|
+
- Updated dependencies [fe8f451]
|
|
2312
|
+
- Updated dependencies [23b9958]
|
|
2313
|
+
- Updated dependencies [c15d7ec]
|
|
2314
|
+
- Updated dependencies [5d0876c]
|
|
2315
|
+
- Updated dependencies [f7ace0a]
|
|
2316
|
+
- Updated dependencies [b041b9c]
|
|
2317
|
+
- Updated dependencies [ce2aaef]
|
|
2318
|
+
- Updated dependencies [544ecba]
|
|
2319
|
+
- Updated dependencies [2ce2612]
|
|
2320
|
+
- Updated dependencies [bc640ec]
|
|
2321
|
+
- Updated dependencies [1e215c4]
|
|
2322
|
+
- Updated dependencies [da6e191]
|
|
2323
|
+
- Updated dependencies [3e377c9]
|
|
2324
|
+
- Updated dependencies [a3eb5d0]
|
|
2325
|
+
- Updated dependencies [4ce14f1]
|
|
2326
|
+
- Updated dependencies [aef97e5]
|
|
2327
|
+
- Updated dependencies [2af1fa7]
|
|
2328
|
+
- Updated dependencies [c14d3a0]
|
|
2329
|
+
- Updated dependencies [a137d0c]
|
|
2330
|
+
- Updated dependencies [caf477f]
|
|
2331
|
+
- Updated dependencies [f6375da]
|
|
2332
|
+
- Updated dependencies [967e5d8]
|
|
2333
|
+
- Updated dependencies [c907a9c]
|
|
2334
|
+
- Updated dependencies [a4611b3]
|
|
2335
|
+
- Updated dependencies [20316ba]
|
|
2336
|
+
- Updated dependencies [d3499b3]
|
|
2337
|
+
- Updated dependencies [91f9276]
|
|
2338
|
+
- Updated dependencies [309c75e]
|
|
2339
|
+
- Updated dependencies [c9f9bae]
|
|
2340
|
+
- Updated dependencies [18897a4]
|
|
2341
|
+
- Updated dependencies [8b7ea39]
|
|
2342
|
+
- Updated dependencies [a915064]
|
|
2343
|
+
- Updated dependencies [dcbf0b2]
|
|
2344
|
+
- Updated dependencies [52cac38]
|
|
2345
|
+
- Updated dependencies [93fea2e]
|
|
2346
|
+
- Updated dependencies [1422a92]
|
|
2347
|
+
- Updated dependencies [d05fe17]
|
|
2348
|
+
- Updated dependencies [a480f79]
|
|
2349
|
+
- Updated dependencies [f08d1a8]
|
|
2350
|
+
- Updated dependencies [64a252d]
|
|
2351
|
+
- Updated dependencies [786bc91]
|
|
2352
|
+
- Updated dependencies [75fca96]
|
|
2353
|
+
- Updated dependencies [7ca6ddd]
|
|
2354
|
+
- Updated dependencies [f1cd290]
|
|
2355
|
+
- Updated dependencies [5a41ce7]
|
|
2356
|
+
- Updated dependencies [8d50bc2]
|
|
2357
|
+
- Updated dependencies [604476d]
|
|
2358
|
+
- Updated dependencies [d1bebb0]
|
|
2359
|
+
- Updated dependencies [95bf128]
|
|
2360
|
+
- Updated dependencies [335abea]
|
|
2361
|
+
- Updated dependencies [edea22a]
|
|
2362
|
+
- Updated dependencies [0f5cadf]
|
|
2363
|
+
- Updated dependencies [4f9f1ee]
|
|
2364
|
+
- Updated dependencies [66e8b2a]
|
|
2365
|
+
- Updated dependencies [aa083cd]
|
|
2366
|
+
- Updated dependencies [12b5992]
|
|
2367
|
+
- Updated dependencies [b93e245]
|
|
2368
|
+
- Updated dependencies [c842594]
|
|
2369
|
+
- Updated dependencies [290de37]
|
|
2370
|
+
- Updated dependencies [1cfdff8]
|
|
2371
|
+
- Updated dependencies [e1c27e4]
|
|
2372
|
+
- Updated dependencies [8c8da45]
|
|
2373
|
+
- Updated dependencies [8cd8eb5]
|
|
2374
|
+
- Updated dependencies [cf1d29e]
|
|
2375
|
+
- Updated dependencies [1bd79c8]
|
|
2376
|
+
- Updated dependencies [af9e957]
|
|
2377
|
+
- Updated dependencies [b1030c7]
|
|
2378
|
+
- Updated dependencies [c974edf]
|
|
2379
|
+
- Updated dependencies [592402e]
|
|
2380
|
+
- Updated dependencies [ad852b6]
|
|
2381
|
+
- Updated dependencies [6778809]
|
|
2382
|
+
- Updated dependencies [7fb22a1]
|
|
2383
|
+
- Updated dependencies [ad66d79]
|
|
2384
|
+
- Updated dependencies [0758bd8]
|
|
2385
|
+
- Updated dependencies [ee4d19f]
|
|
2386
|
+
- Updated dependencies [37149ec]
|
|
2387
|
+
- Updated dependencies [496d31d]
|
|
2388
|
+
- Updated dependencies [0ea7054]
|
|
2389
|
+
- Updated dependencies [9a853f2]
|
|
2390
|
+
- Updated dependencies [cb847fd]
|
|
2391
|
+
- Updated dependencies [ee70287]
|
|
2392
|
+
- Updated dependencies [3e98e13]
|
|
2393
|
+
- Updated dependencies [a695f50]
|
|
2394
|
+
- Updated dependencies [fc32921]
|
|
2395
|
+
- Updated dependencies [4eaa835]
|
|
2396
|
+
- Updated dependencies [8f9d87a]
|
|
2397
|
+
- Updated dependencies [b1777ae]
|
|
2398
|
+
- Updated dependencies [24845c4]
|
|
2399
|
+
- Updated dependencies [6f864cf]
|
|
2400
|
+
- Updated dependencies [24d1edd]
|
|
2401
|
+
- Updated dependencies [645087c]
|
|
2402
|
+
- Updated dependencies [33f4a19]
|
|
2403
|
+
- Updated dependencies [6e9a3d4]
|
|
2404
|
+
- Updated dependencies [4a292d2]
|
|
2405
|
+
- Updated dependencies [5323168]
|
|
2406
|
+
- Updated dependencies [841dd2b]
|
|
2407
|
+
- Updated dependencies [3014fc0]
|
|
2408
|
+
- Updated dependencies [dacb402]
|
|
2409
|
+
- Updated dependencies [846cec0]
|
|
2410
|
+
- Updated dependencies [91facae]
|
|
2411
|
+
- Updated dependencies [b38014e]
|
|
2412
|
+
- Updated dependencies [e2feb13]
|
|
2413
|
+
- Updated dependencies [474797d]
|
|
2414
|
+
- Updated dependencies [704e695]
|
|
2415
|
+
- Updated dependencies [9dcc545]
|
|
2416
|
+
- Updated dependencies [d7fecfb]
|
|
2417
|
+
- Updated dependencies [c13d39e]
|
|
2418
|
+
- Updated dependencies [a407bd6]
|
|
2419
|
+
- Updated dependencies [317dbce]
|
|
2420
|
+
- Updated dependencies [309728c]
|
|
2421
|
+
- Updated dependencies [e6ec217]
|
|
2422
|
+
- Updated dependencies [aa08d7e]
|
|
2423
|
+
- Updated dependencies [3a43a15]
|
|
2424
|
+
- Updated dependencies [868e825]
|
|
2425
|
+
- Updated dependencies [f76f436]
|
|
2426
|
+
- Updated dependencies [ce45a03]
|
|
2427
|
+
- Updated dependencies [7cf6f38]
|
|
2428
|
+
- Updated dependencies [fd9c50a]
|
|
2429
|
+
- Updated dependencies [421544b]
|
|
2430
|
+
- Updated dependencies [5cc8c28]
|
|
2431
|
+
- Updated dependencies [fb01022]
|
|
2432
|
+
- Updated dependencies [e9d9212]
|
|
2433
|
+
- Updated dependencies [ecfb693]
|
|
2434
|
+
- Updated dependencies [40a7c53]
|
|
2435
|
+
- Updated dependencies [abc1b18]
|
|
2436
|
+
- Updated dependencies [81a51db]
|
|
2437
|
+
- Updated dependencies [67749c7]
|
|
2438
|
+
- Updated dependencies [507b61b]
|
|
2439
|
+
- Updated dependencies [512c84b]
|
|
2440
|
+
- Updated dependencies [c300267]
|
|
2441
|
+
- Updated dependencies [fb3a101]
|
|
2442
|
+
- Updated dependencies [d4733f2]
|
|
2443
|
+
- Updated dependencies [7c9145f]
|
|
2444
|
+
- Updated dependencies [1570eac]
|
|
2445
|
+
- Updated dependencies [f391ede]
|
|
2446
|
+
- Updated dependencies [f5cfbbd]
|
|
2447
|
+
- Updated dependencies [f5cfbbd]
|
|
2448
|
+
- Updated dependencies [8b532cb]
|
|
2449
|
+
- Updated dependencies [64c3cdd]
|
|
2450
|
+
- Updated dependencies [4d65991]
|
|
2451
|
+
- Updated dependencies [c42554e]
|
|
2452
|
+
- Updated dependencies [555b4ec]
|
|
2453
|
+
- Updated dependencies [1ccfc23]
|
|
2454
|
+
- Updated dependencies [542718f]
|
|
2455
|
+
- Updated dependencies [7f27bc5]
|
|
2456
|
+
- Updated dependencies [0a174f3]
|
|
2457
|
+
- Updated dependencies [cc00c59]
|
|
2458
|
+
- Updated dependencies [676f677]
|
|
2459
|
+
- Updated dependencies [f95b140]
|
|
2460
|
+
- Updated dependencies [541ce4e]
|
|
2461
|
+
- Updated dependencies [6479086]
|
|
2462
|
+
- Updated dependencies [d79f525]
|
|
2463
|
+
- Updated dependencies [d1865d2]
|
|
2464
|
+
- Updated dependencies [ab77513]
|
|
2465
|
+
- Updated dependencies [55ba3ff]
|
|
2466
|
+
- Updated dependencies [0b138da]
|
|
2467
|
+
- Updated dependencies [f1190b0]
|
|
2468
|
+
- Updated dependencies [561abef]
|
|
2469
|
+
- Updated dependencies [ef52001]
|
|
2470
|
+
- Updated dependencies [6a4680b]
|
|
2471
|
+
- Updated dependencies [c3a4273]
|
|
2472
|
+
- Updated dependencies [abf710d]
|
|
2473
|
+
- Updated dependencies [093af32]
|
|
2474
|
+
- Updated dependencies [6df26f0]
|
|
2475
|
+
- Updated dependencies [1bd1be7]
|
|
2476
|
+
- Updated dependencies [d234fa9]
|
|
2477
|
+
- Updated dependencies [adf5812]
|
|
2478
|
+
- Updated dependencies [e36acd4]
|
|
2479
|
+
- Updated dependencies [5058336]
|
|
2480
|
+
- Updated dependencies [2f6b2bf]
|
|
2481
|
+
- Updated dependencies [2028b31]
|
|
2482
|
+
- Updated dependencies [16a1a51]
|
|
2483
|
+
- Updated dependencies [63601ab]
|
|
2484
|
+
- Updated dependencies [c372b29]
|
|
2485
|
+
- Updated dependencies [152f0a7]
|
|
2486
|
+
- Updated dependencies [8693b85]
|
|
2487
|
+
- Updated dependencies [e82dad1]
|
|
2488
|
+
- Updated dependencies [58b7b3d]
|
|
2489
|
+
- Updated dependencies [e77a003]
|
|
2490
|
+
- Updated dependencies [84defab]
|
|
2491
|
+
- Updated dependencies [681d3f1]
|
|
2492
|
+
- Updated dependencies [969d4f2]
|
|
2493
|
+
- Updated dependencies [88561fd]
|
|
2494
|
+
- Updated dependencies [f3bc481]
|
|
2495
|
+
- Updated dependencies [b79aac2]
|
|
2496
|
+
- Updated dependencies [93fc0e7]
|
|
2497
|
+
- Updated dependencies [0601af1]
|
|
2498
|
+
- Updated dependencies [a4b723f]
|
|
2499
|
+
- Updated dependencies [2b10ca0]
|
|
2500
|
+
- Updated dependencies [7db4a81]
|
|
2501
|
+
- Updated dependencies [19a0b0e]
|
|
2502
|
+
- Updated dependencies [526fc11]
|
|
2503
|
+
- Updated dependencies [f8e3e9a]
|
|
2504
|
+
- Updated dependencies [b9d47ec]
|
|
2505
|
+
- Updated dependencies [3b6bc69]
|
|
2506
|
+
- Updated dependencies [6214db6]
|
|
2507
|
+
- Updated dependencies [6732df4]
|
|
2508
|
+
- Updated dependencies [fe9e0d0]
|
|
2509
|
+
- Updated dependencies [63fb72c]
|
|
2510
|
+
- Updated dependencies [804831c]
|
|
2511
|
+
- Updated dependencies [9f5c017]
|
|
2512
|
+
- Updated dependencies [c271413]
|
|
2513
|
+
- Updated dependencies [279e48e]
|
|
2514
|
+
- Updated dependencies [4784bb3]
|
|
2515
|
+
- Updated dependencies [8700d6d]
|
|
2516
|
+
- Updated dependencies [8db2a0f]
|
|
2517
|
+
- Updated dependencies [689953a]
|
|
2518
|
+
- Updated dependencies [30443fb]
|
|
2519
|
+
- Updated dependencies [8d3dbb2]
|
|
2520
|
+
- Updated dependencies [efc1c9c]
|
|
2521
|
+
- Updated dependencies [7d6439c]
|
|
2522
|
+
- Updated dependencies [da45e6b]
|
|
2523
|
+
- Updated dependencies [7533465]
|
|
2524
|
+
- Updated dependencies [835f0f3]
|
|
2525
|
+
- Updated dependencies [6d5db7b]
|
|
2526
|
+
- Updated dependencies [a9d97be]
|
|
2527
|
+
- Updated dependencies [ed35b44]
|
|
2528
|
+
- Updated dependencies [e6040ef]
|
|
2529
|
+
- Updated dependencies [9ba7e9c]
|
|
2530
|
+
- Updated dependencies [729e851]
|
|
2531
|
+
- Updated dependencies [96919a4]
|
|
2532
|
+
- Updated dependencies [345e24a]
|
|
2533
|
+
- Updated dependencies [3bc1bb4]
|
|
2534
|
+
- Updated dependencies [20b507a]
|
|
2535
|
+
- Updated dependencies [2e471dc]
|
|
2536
|
+
- Updated dependencies [6748587]
|
|
2537
|
+
- Updated dependencies [be50942]
|
|
2538
|
+
- Updated dependencies [775e079]
|
|
2539
|
+
- Updated dependencies [7e8b3c0]
|
|
2540
|
+
- Updated dependencies [53374dc]
|
|
2541
|
+
- Updated dependencies [f6fb83f]
|
|
2542
|
+
- Updated dependencies [2049b03]
|
|
2543
|
+
- Updated dependencies [2bf34f7]
|
|
2544
|
+
- Updated dependencies [15b33ae]
|
|
2545
|
+
- Updated dependencies [7cbc724]
|
|
2546
|
+
- Updated dependencies [4a94c38]
|
|
2547
|
+
- Updated dependencies [7098eed]
|
|
2548
|
+
- Updated dependencies [3df7c5c]
|
|
2549
|
+
- Updated dependencies [fb91ac9]
|
|
2550
|
+
- Updated dependencies [fb91ac9]
|
|
2551
|
+
- Updated dependencies [641fb55]
|
|
2552
|
+
- Updated dependencies [8524372]
|
|
2553
|
+
- Updated dependencies [7cbefa5]
|
|
2554
|
+
- Updated dependencies [72d6587]
|
|
2555
|
+
- Updated dependencies [a272a4f]
|
|
2556
|
+
- Updated dependencies [55f39ee]
|
|
2557
|
+
- Updated dependencies [502eb58]
|
|
2558
|
+
- Updated dependencies [0ce32d5]
|
|
2559
|
+
- Updated dependencies [0970a0e]
|
|
2560
|
+
- Updated dependencies [e427e9c]
|
|
2561
|
+
- Updated dependencies [bbc9dc3]
|
|
2562
|
+
- Updated dependencies [02f1813]
|
|
2563
|
+
- Updated dependencies [1ef89c0]
|
|
2564
|
+
- Updated dependencies [ba0b61a]
|
|
2565
|
+
- Updated dependencies [ba0b61a]
|
|
2566
|
+
- Updated dependencies [ba0b61a]
|
|
2567
|
+
- Updated dependencies [ac716ff]
|
|
2568
|
+
- Updated dependencies [697aabc]
|
|
2569
|
+
- Updated dependencies [f0f3cd5]
|
|
2570
|
+
- Updated dependencies [ab856ed]
|
|
2571
|
+
- Updated dependencies [20f3e65]
|
|
2572
|
+
- Updated dependencies [bbba098]
|
|
2573
|
+
- Updated dependencies [87af769]
|
|
2574
|
+
- Updated dependencies [3be720e]
|
|
2575
|
+
- Updated dependencies [80a0ecd]
|
|
2576
|
+
- Updated dependencies [43c0d17]
|
|
2577
|
+
- Updated dependencies [c3df43a]
|
|
2578
|
+
- Updated dependencies [d16d0e9]
|
|
2579
|
+
- Updated dependencies [bbe57fd]
|
|
2580
|
+
- Updated dependencies [272a530]
|
|
2581
|
+
- Updated dependencies [462bafb]
|
|
2582
|
+
- Updated dependencies [1779e8d]
|
|
2583
|
+
- Updated dependencies [f7fcc2c]
|
|
2584
|
+
- Updated dependencies [f0f4d6c]
|
|
2585
|
+
- Updated dependencies [4128188]
|
|
2586
|
+
- Updated dependencies [b253c4e]
|
|
2587
|
+
- Updated dependencies [78a9c67]
|
|
2588
|
+
- Updated dependencies [4a7ef0d]
|
|
2589
|
+
- Updated dependencies [4598f6d]
|
|
2590
|
+
- Updated dependencies [dea17b4]
|
|
2591
|
+
- Updated dependencies [89bb77a]
|
|
2592
|
+
- Updated dependencies [06611e4]
|
|
2593
|
+
- Updated dependencies [44152c4]
|
|
2594
|
+
- Updated dependencies [3939545]
|
|
2595
|
+
- Updated dependencies [0ee6e31]
|
|
2596
|
+
- Updated dependencies [66abbde]
|
|
2597
|
+
- Updated dependencies [dc3893d]
|
|
2598
|
+
- Updated dependencies [1bbaa16]
|
|
2599
|
+
- Updated dependencies [6ee259a]
|
|
2600
|
+
- Updated dependencies [7649f43]
|
|
2601
|
+
- Updated dependencies [d0f52e4]
|
|
2602
|
+
- Updated dependencies [e708426]
|
|
2603
|
+
- Updated dependencies [33e1697]
|
|
2604
|
+
- Updated dependencies [3b6d53b]
|
|
2605
|
+
- Updated dependencies [a017617]
|
|
2606
|
+
- Updated dependencies [276d174]
|
|
2607
|
+
- Updated dependencies [2982ed9]
|
|
2608
|
+
- Updated dependencies [741864f]
|
|
2609
|
+
- Updated dependencies [a8198de]
|
|
2610
|
+
- Updated dependencies [0c789a4]
|
|
2611
|
+
- Updated dependencies [05a49f2]
|
|
2612
|
+
- Updated dependencies [b234a84]
|
|
2613
|
+
- Updated dependencies [a78cd37]
|
|
2614
|
+
- Updated dependencies [5ea623e]
|
|
2615
|
+
- Updated dependencies [dc49246]
|
|
2616
|
+
- Updated dependencies [5eabe86]
|
|
2617
|
+
- Updated dependencies [ca5d671]
|
|
2618
|
+
- Updated dependencies [32bf2d6]
|
|
2619
|
+
- Updated dependencies [ff0c384]
|
|
2620
|
+
- Updated dependencies [af4fb29]
|
|
2621
|
+
- Updated dependencies [c698a81]
|
|
2622
|
+
- Updated dependencies [ff5ef1c]
|
|
2623
|
+
- Updated dependencies [befd40c]
|
|
2624
|
+
- Updated dependencies [905913c]
|
|
2625
|
+
- Updated dependencies [9a97800]
|
|
2626
|
+
- Updated dependencies [6358a2d]
|
|
2627
|
+
- Updated dependencies [6bca0e4]
|
|
2628
|
+
- Updated dependencies [81c0bc4]
|
|
2629
|
+
- Updated dependencies [3c76801]
|
|
2630
|
+
- Updated dependencies [d06fba8]
|
|
2631
|
+
- Updated dependencies [60500cb]
|
|
2632
|
+
- Updated dependencies [2fcefb9]
|
|
2633
|
+
- Updated dependencies [77f846a]
|
|
2634
|
+
- Updated dependencies [bc5870c]
|
|
2635
|
+
- Updated dependencies [b55a346]
|
|
2636
|
+
- Updated dependencies [065bba7]
|
|
2637
|
+
- Updated dependencies [f760064]
|
|
2638
|
+
- Updated dependencies [dd19463]
|
|
2639
|
+
- Updated dependencies [6791717]
|
|
2640
|
+
- Updated dependencies [8ea3bee]
|
|
2641
|
+
- Updated dependencies [100547e]
|
|
2642
|
+
- Updated dependencies [3a58149]
|
|
2643
|
+
- Updated dependencies [6d1c155]
|
|
2644
|
+
- Updated dependencies [d7573b3]
|
|
2645
|
+
- Updated dependencies [bf3edfe]
|
|
2646
|
+
- Updated dependencies [2c8474c]
|
|
2647
|
+
- Updated dependencies [6ce89da]
|
|
2648
|
+
- Updated dependencies [0e05aac]
|
|
2649
|
+
- Updated dependencies [ae61ad4]
|
|
2650
|
+
- Updated dependencies [5aed9e4]
|
|
2651
|
+
- Updated dependencies [83c77dc]
|
|
2652
|
+
- Updated dependencies [3c9fca3]
|
|
2653
|
+
- Updated dependencies [18a8e7d]
|
|
2654
|
+
- Updated dependencies [e7957ab]
|
|
2655
|
+
- Updated dependencies [f7e34ca]
|
|
2656
|
+
- Updated dependencies [e719ebd]
|
|
2657
|
+
- Updated dependencies [516583b]
|
|
2658
|
+
- Updated dependencies [f9e4f91]
|
|
2659
|
+
- Updated dependencies [6ef48b1]
|
|
2660
|
+
- Updated dependencies [fa429cf]
|
|
2661
|
+
- Updated dependencies [ed8df3e]
|
|
2662
|
+
- Updated dependencies [fe76ece]
|
|
2663
|
+
- Updated dependencies [8b446f5]
|
|
2664
|
+
- Updated dependencies [8e74b27]
|
|
2665
|
+
- Updated dependencies [7102b20]
|
|
2666
|
+
- Updated dependencies [8ebd57f]
|
|
2667
|
+
- Updated dependencies [617707a]
|
|
2668
|
+
- Updated dependencies [c40f3b8]
|
|
2669
|
+
- Updated dependencies [58770f3]
|
|
2670
|
+
- Updated dependencies [aefe428]
|
|
2671
|
+
- Updated dependencies [485f096]
|
|
2672
|
+
- Updated dependencies [7357447]
|
|
2673
|
+
- Updated dependencies [199d31b]
|
|
2674
|
+
- Updated dependencies [b655a9d]
|
|
2675
|
+
- Updated dependencies [3e01cb5]
|
|
2676
|
+
- Updated dependencies [7138bc1]
|
|
2677
|
+
- Updated dependencies [cef27e2]
|
|
2678
|
+
- Updated dependencies [4e8622b]
|
|
2679
|
+
- Updated dependencies [dffd752]
|
|
2680
|
+
- Updated dependencies [06973aa]
|
|
2681
|
+
- Updated dependencies [50798f3]
|
|
2682
|
+
- Updated dependencies [6a576c9]
|
|
2683
|
+
- Updated dependencies [0b12a33]
|
|
2684
|
+
- Updated dependencies [105f3c5]
|
|
2685
|
+
- Updated dependencies [3ccd9e8]
|
|
2686
|
+
- Updated dependencies [689b979]
|
|
2687
|
+
- Updated dependencies [c70f865]
|
|
2688
|
+
- Updated dependencies [e546222]
|
|
2689
|
+
- Updated dependencies [fd13f52]
|
|
2690
|
+
- Updated dependencies [d7bd274]
|
|
2691
|
+
- Updated dependencies [98c3a74]
|
|
2692
|
+
- Updated dependencies [fffa30d]
|
|
2693
|
+
- Updated dependencies [ebce5a3]
|
|
2694
|
+
- Updated dependencies [fb336df]
|
|
2695
|
+
- Updated dependencies [6c1b105]
|
|
2696
|
+
- Updated dependencies [4dc80d0]
|
|
2697
|
+
- Updated dependencies [9d9040d]
|
|
2698
|
+
- Updated dependencies [20e317c]
|
|
2699
|
+
- Updated dependencies [0fce2ef]
|
|
2700
|
+
- Updated dependencies [42df928]
|
|
2701
|
+
- Updated dependencies [0e2ddd4]
|
|
2702
|
+
- Updated dependencies [b7479ab]
|
|
2703
|
+
- Updated dependencies [9850c6e]
|
|
2704
|
+
- Updated dependencies [de570cc]
|
|
2705
|
+
- Updated dependencies [b2ea297]
|
|
2706
|
+
- Updated dependencies [5b5a5c3]
|
|
2707
|
+
- Updated dependencies [14582b8]
|
|
2708
|
+
- Updated dependencies [51e144e]
|
|
2709
|
+
- Updated dependencies [19cbf10]
|
|
2710
|
+
- Updated dependencies [7e50e84]
|
|
2711
|
+
- Updated dependencies [ab92940]
|
|
2712
|
+
- Updated dependencies [a691c0b]
|
|
2713
|
+
- Updated dependencies [0b1326d]
|
|
2714
|
+
- Updated dependencies [1e66879]
|
|
2715
|
+
- Updated dependencies [c5200f0]
|
|
2716
|
+
- Updated dependencies [af3861f]
|
|
2717
|
+
- Updated dependencies [2a79e84]
|
|
2718
|
+
- Updated dependencies [2609812]
|
|
2719
|
+
- Updated dependencies [515f171]
|
|
2720
|
+
- Updated dependencies [1f4e029]
|
|
2721
|
+
- Updated dependencies [4f14ad7]
|
|
2722
|
+
- Updated dependencies [258d264]
|
|
2723
|
+
- Updated dependencies [cac64b3]
|
|
2724
|
+
- Updated dependencies [17fbbaf]
|
|
2725
|
+
- Updated dependencies [d8cf1cb]
|
|
2726
|
+
- Updated dependencies [0d1e702]
|
|
2727
|
+
- Updated dependencies [b03ba3a]
|
|
2728
|
+
- Updated dependencies [0068348]
|
|
2729
|
+
- Updated dependencies [641543f]
|
|
2730
|
+
- Updated dependencies [8a44390]
|
|
2731
|
+
- Updated dependencies [8033ad1]
|
|
2732
|
+
- Updated dependencies [fa140b8]
|
|
2733
|
+
- Updated dependencies [71cba28]
|
|
2734
|
+
- Updated dependencies [190fbd0]
|
|
2735
|
+
- Updated dependencies [c00bf28]
|
|
2736
|
+
- Updated dependencies [23705b7]
|
|
2737
|
+
- Updated dependencies [93127bd]
|
|
2738
|
+
- Updated dependencies [f2158ec]
|
|
2739
|
+
- Updated dependencies [759606e]
|
|
2740
|
+
- Updated dependencies [fd8dace]
|
|
2741
|
+
- Updated dependencies [72ffc34]
|
|
2742
|
+
- Updated dependencies [a51fa0c]
|
|
2743
|
+
- Updated dependencies [51f3d8d]
|
|
2744
|
+
- Updated dependencies [bf28341]
|
|
2745
|
+
- Updated dependencies [78cbdb5]
|
|
2746
|
+
- Updated dependencies [b7543a9]
|
|
2747
|
+
- Updated dependencies [6c6cee7]
|
|
2748
|
+
- Updated dependencies [42887e0]
|
|
2749
|
+
- Updated dependencies [83fe6e7]
|
|
2750
|
+
- Updated dependencies [d1ab06f]
|
|
2751
|
+
- Updated dependencies [38a9568]
|
|
2752
|
+
- Updated dependencies [f90b8fb]
|
|
2753
|
+
- Updated dependencies [91783c4]
|
|
2754
|
+
- Updated dependencies [982885d]
|
|
2755
|
+
- Updated dependencies [dba7d84]
|
|
2756
|
+
- Updated dependencies [ca39427]
|
|
2757
|
+
- Updated dependencies [bd09957]
|
|
2758
|
+
- Updated dependencies [5a07e67]
|
|
2759
|
+
- Updated dependencies [2d36552]
|
|
2760
|
+
- Updated dependencies [45d8288]
|
|
2761
|
+
- Updated dependencies [b2437a7]
|
|
2762
|
+
- Updated dependencies [f157423]
|
|
2763
|
+
- Updated dependencies [7a90afd]
|
|
2764
|
+
- Updated dependencies [eddc1dd]
|
|
2765
|
+
- Updated dependencies [490f482]
|
|
2766
|
+
- Updated dependencies [27308c5]
|
|
2767
|
+
- Updated dependencies [8689166]
|
|
2768
|
+
- Updated dependencies [c9327c9]
|
|
2769
|
+
- Updated dependencies [920165d]
|
|
2770
|
+
- Updated dependencies [9101be5]
|
|
2771
|
+
- Updated dependencies [f53a8d0]
|
|
2772
|
+
- Updated dependencies [30266cf]
|
|
2773
|
+
- Updated dependencies [968dc1e]
|
|
2774
|
+
- Updated dependencies [57f9b07]
|
|
2775
|
+
- Updated dependencies [3c73d99]
|
|
2776
|
+
- Updated dependencies [d91aed9]
|
|
2777
|
+
- Updated dependencies [ed71d9e]
|
|
2778
|
+
- Updated dependencies [7776fc2]
|
|
2779
|
+
- Updated dependencies [e76634c]
|
|
2780
|
+
- Updated dependencies [c86185e]
|
|
2781
|
+
- Updated dependencies [fb96ecb]
|
|
2782
|
+
- Updated dependencies [1170ed1]
|
|
2783
|
+
- Updated dependencies [92814db]
|
|
2784
|
+
- Updated dependencies [4d73b07]
|
|
2785
|
+
- @object-ui/plugin-detail@17.7.0
|
|
2786
|
+
- @object-ui/react@17.7.0
|
|
2787
|
+
- @object-ui/core@17.7.0
|
|
2788
|
+
- @object-ui/types@17.7.0
|
|
2789
|
+
- @object-ui/i18n@17.7.0
|
|
2790
|
+
- @object-ui/components@17.7.0
|
|
2791
|
+
- @object-ui/mobile@17.7.0
|
|
2792
|
+
- @object-ui/permissions@17.7.0
|
|
2793
|
+
|
|
3
2794
|
## 17.6.0
|
|
4
2795
|
|
|
5
2796
|
### Patch Changes
|