@object-ui/plugin-timeline 17.6.0 → 18.0.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 +2739 -0
- package/README.md +57 -1
- package/dist/ObjectTimeline.d.ts +72 -9
- package/dist/ObjectTimeline.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +641 -398
- package/dist/index.umd.cjs +1 -1
- package/dist/renderHandoff.d.ts +63 -0
- package/dist/renderHandoff.d.ts.map +1 -0
- package/dist/renderer.d.ts +123 -19
- package/dist/renderer.d.ts.map +1 -1
- package/dist/useTimelineTranslation.d.ts.map +1 -1
- package/package.json +14 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,2744 @@
|
|
|
1
1
|
# @object-ui/plugin-timeline
|
|
2
2
|
|
|
3
|
+
## 18.0.0
|
|
4
|
+
|
|
5
|
+
### Dependency floors
|
|
6
|
+
|
|
7
|
+
Computed from `.objectstack-sha` `06cab4849a8a`: the earliest published `@objectstack/spec` that contains it is `18.0.0`.
|
|
8
|
+
|
|
9
|
+
- `@objectstack/spec` (`dependencies`): `^18.0.0-next.1` → `^18.0.0`
|
|
10
|
+
|
|
11
|
+
### Major Changes
|
|
12
|
+
|
|
13
|
+
- 6f3299f: objectui moves to major 18, following `@objectstack/*` from 17 to 18 (objectui#12334). objectui's major is not a count of its own breaking changes: it tracks the major of the `@objectstack/spec` its packages depend on, so that the same major means compatible across the two projects. These packages already declare `@objectstack/*` on the 18 line (objectui#12030), so every package in the fixed release group crosses to 18 together. It is the one `major` that rule admits: objectui's own breaking changes ship as `minor`, described in their entries.
|
|
14
|
+
|
|
15
|
+
The 18 line is released from Changesets pre mode on the `next` tag (`.changeset/pre.json`), as `@objectstack/*` 18 is: these releases are `18.0.0-next.N` on the npm `next` dist-tag, and they do not move `latest`. The first `18.0.0` on `latest` comes when `@objectstack` 18 is generally available and this repository leaves pre mode.
|
|
16
|
+
|
|
17
|
+
What a consumer must do to take it is in the `@objectstack/*` 18 entry of this release (objectui#12030): move its own `@objectstack/*` packages to the 18 line at the same time.
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- 9ca3cac: The calendar and the timeline start the week on the first day of the week of the user's locale (objectui#11675), instead of a fixed Sunday (calendar) and a fixed Monday (timeline). Under `en-US` both start on Sunday; under `en-GB` or `zh-CN` both start on Monday; under `ar-EG` both start on Saturday. There is no separate week-start setting: the first day comes from the locale the dates are already formatted with.
|
|
22
|
+
|
|
23
|
+
- **`@object-ui/i18n` exports `firstDayOfWeek(locale)` and its `WeekdayIndex` type.** It returns the first day of the week for a BCP-47 tag, numbered as `Date.prototype.getDay` numbers weekdays (0 is Sunday), which is also what react-day-picker's `weekStartsOn` takes. It reads the engine's `Intl.Locale` week info (`getWeekInfo()`, else the `weekInfo` accessor), including a `-u-fw-` keyword on the tag. Where the engine has neither, it reads CLDR's first-day table by the tag's region, or the region CLDR's likely subtags give it (`en` reads `US`, `zh` reads `CN`), and a region the table does not list reads Monday, CLDR's world default. A malformed tag throws the same `RangeError` that formatting a date with it would.
|
|
24
|
+
- **The calendar's weeks start on the locale's first day.** `CalendarView` (and `object-calendar` through it) reads the first day from its `locale` prop, else the display locale, and the month grid's rows, its weekday heads, the week view's columns, the header's week range, the day a span that wraps into a new row shows its title on, and the header's date popover all start there. The popover used to take date-fns's own week start for the tag, which is not CLDR's for every tag (date-fns reads `es-MX` as `es`, a Monday start, where CLDR starts Mexico's week on Sunday) and which read Sunday until the date-fns locale had loaded.
|
|
25
|
+
- **The object timeline's "This week" and "Next week" start on the display locale's first day.** The bucket bounds are also stepped on the local calendar now, so across a DST change the day after it is "Tomorrow" again, and the first day of next week no longer falls into "This week".
|
|
26
|
+
|
|
27
|
+
A host that relied on the calendar always starting on Sunday, or on the timeline's week always starting on Monday, now sees the locale's first day. The gantt variant's `week` axis is unchanged: it still counts plan weeks from the axis's first day.
|
|
28
|
+
- c910630: The timeline's unused "Overdue" bucket label is removed: `timeline.bucket.overdue` is gone from all ten language packs and from the timeline's built-in English defaults (objectui#11676).
|
|
29
|
+
|
|
30
|
+
Nothing has read the key since a past date on a timeline went under "Earlier". No timeline heads a group "Overdue": a date is overdue only when it is a due date and the record is still open, and a timeline declares neither fact. Overdue records are still marked where record state lives: the date cell's due treatment, the gantt's alert colour and conditional formatting.
|
|
31
|
+
|
|
32
|
+
**Narrowed public surface (`@object-ui/i18n`).** The exported `en` pack and the `TranslationKeys` type derived from it lose one member, `timeline.bucket.overdue`. Code that reads `en.timeline.bucket.overdue`, or passes that key to `t()` expecting a translation, has to drop it. This is released as `minor` under objectui's version policy, which keeps the major aligned with `@objectstack`. The date cell's "Overdue 3d" phrase is a different key, `fields.relativeDate.overdue`, and stays in every pack.
|
|
33
|
+
- ce464d9: An object-bound timeline no longer heads every past date "Overdue": a day before today goes under a neutral "Earlier" bucket, translated in every language (objectui#11676).
|
|
34
|
+
|
|
35
|
+
Without a `groupByField`, `ObjectTimeline` groups its entries into date buckets, and every day before today went under "Overdue", whatever the date meant. The showcase's Activity Timeline, bound to `created_at`, put all ten tasks under "Overdue", the two Done ones included. A creation date cannot be overdue, and a closed record cannot be either.
|
|
36
|
+
|
|
37
|
+
"Overdue" needs two facts: that the date is a due date, and that the record is still open. Nothing the timeline reads declares either one. The timeline configuration (`startDateField`, `endDateField`, `titleField`, `groupByField`, `colorField`, `scale`) names no due-date role, and no field option marks a closed state. So a past day is now "Earlier", and the timeline does not guess either fact from a field name or a status value. Today, Tomorrow, This week, Next week, Later and No date are unchanged.
|
|
38
|
+
|
|
39
|
+
**Widened public surface (`@object-ui/i18n`).** One new key in all ten language packs, `timeline.bucket.earlier`, so the exported `en` pack and the `TranslationKeys` type derived from it gain one member. The timeline no longer reads `timeline.bucket.overdue`, and this release also removes that key from every pack (the "Overdue" bucket label retirement entry). No component prop or exported type changes.
|
|
40
|
+
- c5406c2: Depend on the `@objectstack/*` 18 prerelease line (objectui#12030).
|
|
41
|
+
|
|
42
|
+
Every `@objectstack/*` range these packages declare in `dependencies` or `peerDependencies` moves from `^17.x` to `^18.0.0-next.0`, the `next` prerelease of `@objectstack/*` 18 (raised to `^18.0.0-next.1` by objectui#12370 before release).
|
|
43
|
+
|
|
44
|
+
**Breaking for consumers:** an install that resolves `@objectstack/spec` (or `@objectstack/client`, `@objectstack/formula`, `@objectstack/lint`) 17.x no longer satisfies these ranges. A consumer must move its own `@objectstack/*` packages to the 18 line, starting with `18.0.0-next.1` (objectui#12370), at the same time as it takes this release.
|
|
45
|
+
|
|
46
|
+
**objectui's own surface moves with it:**
|
|
47
|
+
|
|
48
|
+
- `element:record_picker`'s registration stops publishing the `object`, `filter`, `sort` and `limit` inputs, which spec 18 retires; a JSX page that writes one now gets `unknown-prop`.
|
|
49
|
+
- The `CapabilityMultiSelectField` widget's curated capability set (`@object-ui/fields`) follows spec 18: `manage_mailboxes` in, `manage_org_presentation` out.
|
|
50
|
+
- `element:number` and `element:repeater` nodes that bind no object are accepted, as spec 18's row and `PageComponentSchema` accept them; the two `ELEMENT_*_OBJECT_REQUIRED` refusals are gone.
|
|
51
|
+
|
|
52
|
+
**Retired with the spec:** `@objectstack/spec` 18 tombstones `object-grid`'s `defaultFilters` and refuses it by name, and `ObjectGrid` and `ObjectView` stop reading it (`table.defaultFilters` on an `object-view` included). A view that still carries it renders unfiltered: rename the key to `filter`, whose value is the same rule array.
|
|
53
|
+
- ff9df88: Depend on `@objectstack/*` `18.0.0-next.1` (objectui#12370).
|
|
54
|
+
|
|
55
|
+
Every `@objectstack/*` range these packages declare moves from `^18.0.0-next.0` to `^18.0.0-next.1`; the console and the runner bundle `18.0.0-next.1`. A consumer moves its own `@objectstack/*` packages to `18.0.0-next.1` with this release.
|
|
56
|
+
|
|
57
|
+
**Accept sets that narrow with it.** `@object-ui/types` validates page action rows and view data bindings through the spec's own rows, so its faces (`safeValidateSchema` and `StrictAnyComponentSchema`) now refuse what `18.0.0-next.1` refuses. Each was accepted on `18.0.0-next.0`:
|
|
58
|
+
|
|
59
|
+
- `onSuccess` on an `action:button` / `action:icon` row, or an `action:group` / `action:menu` member, whose executor is the `url`, `navigation`, `modal`, `flow` or `form` built-in, or that has no executor at all. Write the hop on an `api` or `script` action (or a host handler name), or drop it.
|
|
60
|
+
- `onSuccess` beside `operation: 'update'`, and an `onSuccess` block carrying a key outside `{ navigate, openIn }`.
|
|
61
|
+
- `actionType: 'navigation'` on a row (and `type: 'navigation'` on a container member): write `'url'`.
|
|
62
|
+
- A `url` executor's `target` that is not openable, judged on the executor the runner runs, including a row whose `name` selects it.
|
|
63
|
+
- A view `data` binding with `provider: 'api'`: bind the object or static rows; an API call is the page element's binding.
|
|
64
|
+
- 3fd8625: feat(plugin-list)!: the renderers stop reading the list-view keys every door refuses: the pre-#2231 aliases, `calendar.defaultView`, and the undeclared keys a per-kind block carries (objectui#6152, round 14)
|
|
65
|
+
|
|
66
|
+
Clause-②: no
|
|
67
|
+
|
|
68
|
+
**Changed (breaking for a stored view that carries a refused key).** Rounds 11 and 12 of
|
|
69
|
+
objectui#6152 closed the doors: `@object-ui/types`, `objectui validate` and `@objectstack/spec`'s
|
|
70
|
+
view write door refuse these keys on a list view's per-kind blocks, top-level and under the legacy
|
|
71
|
+
`options` bag. The renderers kept reading them, so a view stored before the doors closed still
|
|
72
|
+
rendered as written. They no longer read them, on every route that did: `normalizeListViewSchema`
|
|
73
|
+
(`@object-ui/core`), which folded the four aliases onto their spec keys before anything else read
|
|
74
|
+
the view, `ListView`, the object page's relay (`@object-ui/app-shell`), `ObjectView`'s own views
|
|
75
|
+
(`@object-ui/plugin-view`) and `ObjectTimeline`. A stored view that carries one of these keys still renders, without what the key
|
|
76
|
+
used to bind. Write the spec's key instead:
|
|
77
|
+
|
|
78
|
+
| stored key (either nesting) | what renders now | write instead |
|
|
79
|
+
| :--- | :--- | :--- |
|
|
80
|
+
| `kanban.groupField` | lanes as for a view that names none: the object's declared lifecycle field (`status` on an `object-view` element's own views) | `kanban.groupByField` |
|
|
81
|
+
| `kanban.cardFields` | cards show `kanban.columns`, or the view's own fields | `kanban.columns` |
|
|
82
|
+
| `gallery.imageField` | no cover binding: `ObjectGallery` tries `image`, and the Gallery view is not offered | `gallery.coverField` |
|
|
83
|
+
| `timeline.dateField`, and `calendar.dateField` read as a timeline axis | no timeline axis: the timeline's refusal names the keys to write, and the Timeline view is not offered | `timeline.startDateField` (or `calendar.startDateField`) |
|
|
84
|
+
| `calendar.defaultView` | the calendar opens on its own default view | nothing on a list view: the initial mode is the `object-calendar` element's flat `defaultView` |
|
|
85
|
+
| `kanban.swimlaneField` and any other undeclared kanban key | not drawn | nothing: the spec's kanban block has no swimlane |
|
|
86
|
+
| `tree.titleField` | the tree labels by `name` | `tree.labelField` |
|
|
87
|
+
| an undeclared key under `calendar`, `tree` or `gantt`, or anything under `options.grid` | not forwarded to the view | the block's declared key, or a top-level key of the view for a grid |
|
|
88
|
+
|
|
89
|
+
The declared keys keep their route: `kanban.summarizeField`, `calendar.colorField` and
|
|
90
|
+
`calendar.allDayField` are now read by name where the removed spreads used to carry them, and every
|
|
91
|
+
`gantt` key the spec declares reaches the gantt through a typed table that `tsc` keeps total. A
|
|
92
|
+
block key named like a node key (`objectName`, `filter`) can no longer override the node's own
|
|
93
|
+
value. `ListView`'s projection collectors stop asking the server for the fields these keys named.
|
|
94
|
+
|
|
95
|
+
**Not measured: production.** The census before this change (objectui#6152 round 13) found no
|
|
96
|
+
writer and no stored row carrying these keys in any repository corpus a seat can reach, with
|
|
97
|
+
positive controls; stored view and page metadata in deployments was not measured. A row that
|
|
98
|
+
carries one of these keys renders as the table says until it is re-saved with the key on the
|
|
99
|
+
right.
|
|
100
|
+
|
|
101
|
+
Not in this change: the legacy chart axes (`chart.xAxisField`, `yAxisFields`, `categoryField`,
|
|
102
|
+
`valueField`, `aggregation`), which `ListView` still reads until the next round on objectui#6152.
|
|
103
|
+
|
|
104
|
+
- `@object-ui/core`: `normalizeListViewSchema` returns a view whose only legacy vocabulary is one of
|
|
105
|
+
these nested aliases by reference, with the alias in place; it no longer removes it either.
|
|
106
|
+
- `@object-ui/types`: the refusal messages of these keys no longer say a stored view still renders
|
|
107
|
+
through the alias, and the kanban `groupBy` refusal no longer suggests the refused `groupField`.
|
|
108
|
+
|
|
109
|
+
**Note added 2026-10-09 (objectui#6152 round 15):** the legacy chart axes are no longer read either.
|
|
110
|
+
`ListView`, the object page and `ObjectView`'s own views read no `xAxisField`, `yAxisFields`,
|
|
111
|
+
`categoryField`, `valueField` or `aggregation` on a chart block, so a chart view that names no
|
|
112
|
+
`dataset` binds nothing and `ObjectChart` refuses it on screen; see
|
|
113
|
+
`.changeset/6152-list-view-legacy-chart-retired.md`.
|
|
114
|
+
- b403bb3: **`BaseSchema` no longer declares `[key: string]: any`** (objectui#8347, executing the objectui#7927 ruling: the TypeScript face is a contract). Every node type extends `BaseSchema`, so a node literal annotated with its node type now refuses a key that no declaration names, a misspelled key included, where it used to type it `any`. The correct spelling compiles as before.
|
|
115
|
+
|
|
116
|
+
**Clause-②: yes (narrowing)**, shipped as `minor` per this repository's version policy. The removal narrows the TypeScript authoring face of every node type; the `visibleWhen` change below widens both faces to the envelope the spec's own parse writes.
|
|
117
|
+
|
|
118
|
+
- **What does not move.** The zod faces keep their accept sets for every key but `visibleWhen`: the tolerant mirror is still `.passthrough()`, so `safeValidateSchema` keeps an undeclared key, and the derived strict face refuses it as before. `ComponentRendererProps`, the renderer props type, keeps its own index signature. Nothing a renderer draws changes.
|
|
119
|
+
- **The bound.** TypeScript runs its excess-property check only on a fresh object literal. A value that reached its annotation through a variable of a wider type is not re-checked.
|
|
120
|
+
- **`PartialSchema<T>` works as written.** With the signature gone, `keyof T` is the literal member union again, so the alias keeps `T`'s declared members, optional, with `type` required. While the signature stood it declared `type` alone (objectui#6397).
|
|
121
|
+
- **`BaseSchema.visibleWhen` is the spec's `EvaluatedExpressionInput`**, by reference: a predicate string, or the `{ dialect, source }` envelope. The zod twin takes `EvaluatedExpressionInputSchema`'s verdict without its transform, so a string parses to itself. A dialect-less envelope, an unknown dialect and a blank predicate are refused, as the spec refuses them. Both faces read `string` before, which refused the envelope a spec parse writes into this key.
|
|
122
|
+
- **`@object-ui/plugin-kanban`.** `ObjectKanban` reads the `sort` the element data-source gate writes through a read type private to the package. `ObjectKanbanSchema` still declares no `sort` (objectui#8174). Nothing drawn changes.
|
|
123
|
+
- **`@object-ui/plugin-timeline`.** `TimelineRenderSchema`, the `schema` prop type of the exported `TimelineRenderer`, gains one optional member: the `onItemClick` slot `ObjectTimeline` composes. That is a one-member optional widening of an exported prop type. `TimelineSchema`, the authoring face, still declares no `onItemClick`. Nothing drawn changes.
|
|
124
|
+
|
|
125
|
+
**Migration.** Where a literal stops compiling, the key is misspelled (fix it) or not declared on that node type (declare it on the type that reads it, by reference to the `@objectstack/spec` row, or remove it). Do not cast past the error. `props`, the legacy alias of `properties`, is not declared on the TypeScript face; the renderer still reads it, so write `properties`.
|
|
126
|
+
|
|
127
|
+
### Patch Changes
|
|
128
|
+
|
|
129
|
+
- c0862c1: The `object-gantt` `markers` input and the `object-timeline` `items` and `mapping` inputs open their descriptions with the `@objectstack/spec` 17.7.0 row's own describe text, which is true of these renderers (objectui#11168's rule, followed at objectui#11717). The renderer-specific sentences after it are unchanged.
|
|
130
|
+
- 206505c: An object timeline with a `groupByField` draws one group per value, headed by the value's display name (objectui#12104).
|
|
131
|
+
|
|
132
|
+
- **A lookup groups by the referenced record's name.** The timeline's own query expands every declared relation, so a lookup value arrives as the related record, and the group header used to read "[object Object]" for every row: a timeline grouped by an owner or an account drew one group. The group key now reads the field's display value through the same resolver the entry title and description use. A select field still groups by its option's label. An empty value groups under "Unassigned", and when no row has a display value the timeline keeps its date buckets. A lookup that arrives unexpanded groups under its id, which is what the title shows for it too.
|
|
133
|
+
- **A key's rows are gathered into one group.** Entries are sorted by start date, and a group used to end wherever the next entry had another value, so a field whose values alternate in date order (a channel, say) drew the same header many times. Each value now heads exactly one group. Groups appear in the order of their earliest entry, and entries stay in date order inside each group, so a timeline whose values were already contiguous renders as before.
|
|
134
|
+
|
|
135
|
+
Unchanged: a timeline with no `groupByField` (its date buckets), the horizontal timeline, which draws no groups and keeps its date order, and the group key of a multi-valued field (a multiselect, tags, or a lookup with `multiple`), which reads as before. Nothing is added to the package entry: no export, prop or language-pack key.
|
|
136
|
+
- 1e6d83b: Data-bound blocks title their "data source could not be resolved" panel in the page's language (objectui#12920, the family of objectui#12910). The panel shows when a block's `dataSource.view` names a view its object does not have. Each block's title now reads `@object-ui/i18n` through `useObjectTranslation`, with the `en` pack's value as the inline default, so a page with no `I18nProvider` draws the same English it drew before.
|
|
137
|
+
|
|
138
|
+
- **Plugin blocks.** `object-calendar`, `object-chart`, `object-metric`, `object-pivot`, `detail-view`, `record:related_list`, `object-form`, `embeddable-form`, `object-master-detail-form`, `record:line_items`, `object-gantt`, `object-grid`, `object-kanban`, `list-view`, `object-map` and `object-timeline` read one `element.KIND.sourceUnresolved` key per block kind. `object-metric` reads `element.number.sourceUnresolved`, the key `element:number` already reads for the same sentence. The three forms share `element.form.sourceUnresolved`. `record:related_list`'s panel for a failed `parentDataSource` read reads `element.relatedList.parentUnreadable` ("This related list’s parent record could not be read").
|
|
139
|
+
- **`@object-ui/react` panel defaults.** `ElementDataSourceErrorPanel` with no `title` reads `element.component.sourceUnresolved`, and `NoDataSourcePanel` with no `title` reads `element.component.noDataSource`. A passed `title` still wins, an empty string included. Props and markup do not change.
|
|
140
|
+
|
|
141
|
+
Clause-②: yes
|
|
142
|
+
|
|
143
|
+
The new keys in `@object-ui/i18n` widen its exported `TranslationKeys`. No prop, input or export of these packages changes.
|
|
144
|
+
- 5d77c09: feat(types)!: a list view's legacy `options` bag is the `@objectstack/spec` list overlay's bag by reference, `ListViewTimelineConfig` is the list view's own `timeline` block, and `ListViewGalleryConfig` is retired (objectui#6152, round 12)
|
|
145
|
+
|
|
146
|
+
Clause-②: no
|
|
147
|
+
|
|
148
|
+
**Narrowed (breaking), `@object-ui/types`.** `@objectstack/spec`'s authoring list view declares no
|
|
149
|
+
`options` bag. Its one home is the flattened list overlay on the view write door
|
|
150
|
+
(`VIEW_METADATA_MEMBERS.listOverlay`), where it is a strict object of the eight kinds that name a
|
|
151
|
+
block, each judged by its own list-view block with every key optional. `ListViewSchema.options` was
|
|
152
|
+
a record of `any` with three named refusals, so `ListViewSchema`, `AnyComponentSchema`,
|
|
153
|
+
`safeValidateSchema` (`objectui validate`), `StrictAnyComponentSchema` and the TypeScript
|
|
154
|
+
`ListViewSchema['options']` accepted what that door refuses. It is now that member's own bag, taken
|
|
155
|
+
by reference, with this package's `kanban`, `calendar`, `gallery` and `timeline` blocks in it, so
|
|
156
|
+
each named refusal gives the same message under `options.KIND` as under the top-level `KIND`. What is
|
|
157
|
+
refused now, and what to write instead:
|
|
158
|
+
|
|
159
|
+
- A key that is not one of the eight kinds is refused with the spec's own `unrecognized_keys` at
|
|
160
|
+
`options`. `options.grid` gets the spec's guidance: a grid has no per-kind block, so its settings
|
|
161
|
+
(`columns`, `sort`, `filter`, …) are top-level keys of the view. Remove it.
|
|
162
|
+
- An undeclared key in any kind (for example `options.kanban.swimlaneField`,
|
|
163
|
+
`options.timeline.descriptionField`, `options.tree.titleField`, `options.chart.xAxisField`) is
|
|
164
|
+
refused with the spec's own `unrecognized_keys` at that kind. Before this change it was kept and
|
|
165
|
+
never examined.
|
|
166
|
+
- `options.kanban.groupField` is refused by name: write `groupByField`.
|
|
167
|
+
- `options.kanban.cardFields` is refused by name: write `columns`.
|
|
168
|
+
- `options.gallery.imageField` is refused by name: write `coverField`.
|
|
169
|
+
- `options.timeline.dateField` is refused by name: write `startDateField`.
|
|
170
|
+
- `options.calendar.defaultView` is refused by name: the initial view mode is a member of the
|
|
171
|
+
`object-calendar` element (its flat `defaultView`), not of a list view's calendar block.
|
|
172
|
+
- `options.chart`'s legacy axes (`xAxisField`, `yAxisFields`, `categoryField`, `valueField`,
|
|
173
|
+
`aggregation`) are refused: write the dataset-bound block, `chart: { dataset, dimensions, values }`.
|
|
174
|
+
- A value of the wrong type (for example `options.kanban: 42`, or a number where a field name
|
|
175
|
+
belongs) is refused at its path.
|
|
176
|
+
|
|
177
|
+
The three refusals already in place (`options.kanban.groupBy`, objectui#8365;
|
|
178
|
+
`options.calendar.dateField` / `endField`, objectui#8355) keep their messages, and now report
|
|
179
|
+
`invalid_type` at the key, as the top-level blocks do, where they reported `custom`. Each kind is
|
|
180
|
+
`.partial()`, as the spec's bag is: the renderer reads the bag as a per-key underlay of the top-level
|
|
181
|
+
block, so a required member is not asked of it.
|
|
182
|
+
|
|
183
|
+
**Changed, `@object-ui/types`.** `ListViewTimelineConfig` is `NonNullable<ListViewSchema['timeline']>`:
|
|
184
|
+
the spec's list-view slot, strict and `.partial()`, with the legacy `dateField` refused by name
|
|
185
|
+
(write `startDateField`). It was the spec's `TimelineConfig` plus `dateField?: string` and a string
|
|
186
|
+
index signature of `any`, so a block with any key compiled.
|
|
187
|
+
|
|
188
|
+
**Retired, `@object-ui/types`.** The `ListViewGalleryConfig` type export is gone. Nothing in this
|
|
189
|
+
repository used it, and the spec has no element of that shape. Write the spec's `GalleryConfig`,
|
|
190
|
+
which this package re-exports.
|
|
191
|
+
|
|
192
|
+
**`@object-ui/app-shell`.** The object page's relay writes the spec's spellings into the bag it hands
|
|
193
|
+
`ListView`: `options.kanban.columns` where it wrote `cardFields`, no `options.gallery.imageField`
|
|
194
|
+
beside `coverField`, and no `options.timeline.descriptionField`. What renders does not change: the
|
|
195
|
+
board reads `columns` for its cards, the gallery reads `coverField` first, and nothing drew the
|
|
196
|
+
timeline's nested `descriptionField`.
|
|
197
|
+
|
|
198
|
+
**`@object-ui/plugin-list`.** `ListView`'s capability gate also reads `options.gallery.coverField`, so
|
|
199
|
+
a bag binding its cover under the spec's key offers the Gallery view; it read only the legacy
|
|
200
|
+
`imageField` there. The README's examples author the top-level per-kind blocks and a dataset-bound
|
|
201
|
+
chart, and no longer show the bag.
|
|
202
|
+
|
|
203
|
+
**`@object-ui/plugin-timeline`.** `ObjectTimeline`'s nested `schema.timeline` prop takes the new
|
|
204
|
+
`ListViewTimelineConfig`.
|
|
205
|
+
|
|
206
|
+
What did not move: the renderers' reads. `ListView` still merges each `options.KIND` under the
|
|
207
|
+
top-level block and still reads the legacy spellings, so a view stored before these doors closed
|
|
208
|
+
renders as before; only authored metadata meets the refusal.
|
|
209
|
+
|
|
210
|
+
**Note added 2026-10-09 (objectui#6152 round 14):** the renderers' reads have moved. `ListView`
|
|
211
|
+
still merges each `options.KIND` under the top-level block, but it reads each kind's declared keys
|
|
212
|
+
only: the legacy spellings, `options.grid` and the undeclared keys a bag carries are no longer read,
|
|
213
|
+
so a view stored with one of them renders without what that key used to bind; see
|
|
214
|
+
`.changeset/6152-list-view-readers-retired.md`. The legacy chart axes (`options.chart.xAxisField`
|
|
215
|
+
and the rest) are still read until the next round on objectui#6152.
|
|
216
|
+
|
|
217
|
+
**Note added 2026-10-09 (objectui#6152 round 15):** the legacy chart axes are no longer read, in the
|
|
218
|
+
bag or at the top level: a chart block that names no `dataset` binds nothing, and `ObjectChart`
|
|
219
|
+
refuses it on screen; see `.changeset/6152-list-view-legacy-chart-retired.md`.
|
|
220
|
+
- Updated dependencies [18d7b48]
|
|
221
|
+
- Updated dependencies [172acc3]
|
|
222
|
+
- Updated dependencies [f0496bd]
|
|
223
|
+
- Updated dependencies [c4c506b]
|
|
224
|
+
- Updated dependencies [9db9ff3]
|
|
225
|
+
- Updated dependencies [c096f03]
|
|
226
|
+
- Updated dependencies [d92b2a1]
|
|
227
|
+
- Updated dependencies [92f4e2b]
|
|
228
|
+
- Updated dependencies [b10c68e]
|
|
229
|
+
- Updated dependencies [bdc9049]
|
|
230
|
+
- Updated dependencies [e8c0b96]
|
|
231
|
+
- Updated dependencies [b92329c]
|
|
232
|
+
- Updated dependencies [2e818d0]
|
|
233
|
+
- Updated dependencies [fd060f0]
|
|
234
|
+
- Updated dependencies [fd060f0]
|
|
235
|
+
- Updated dependencies [8b14aec]
|
|
236
|
+
- Updated dependencies [2abec3a]
|
|
237
|
+
- Updated dependencies [9dfaca6]
|
|
238
|
+
- Updated dependencies [c000398]
|
|
239
|
+
- Updated dependencies [73b5d77]
|
|
240
|
+
- Updated dependencies [7b17705]
|
|
241
|
+
- Updated dependencies [fc3c2cc]
|
|
242
|
+
- Updated dependencies [f9f4a62]
|
|
243
|
+
- Updated dependencies [848ba0e]
|
|
244
|
+
- Updated dependencies [57d82cb]
|
|
245
|
+
- Updated dependencies [de96f3d]
|
|
246
|
+
- Updated dependencies [9ca3cac]
|
|
247
|
+
- Updated dependencies [c910630]
|
|
248
|
+
- Updated dependencies [ce464d9]
|
|
249
|
+
- Updated dependencies [e6dcd85]
|
|
250
|
+
- Updated dependencies [96fcf30]
|
|
251
|
+
- Updated dependencies [7a2c60b]
|
|
252
|
+
- Updated dependencies [834c559]
|
|
253
|
+
- Updated dependencies [22b503c]
|
|
254
|
+
- Updated dependencies [9fc68aa]
|
|
255
|
+
- Updated dependencies [d50f724]
|
|
256
|
+
- Updated dependencies [17acfbb]
|
|
257
|
+
- Updated dependencies [6be0f7a]
|
|
258
|
+
- Updated dependencies [89cc738]
|
|
259
|
+
- Updated dependencies [c0862c1]
|
|
260
|
+
- Updated dependencies [c0862c1]
|
|
261
|
+
- Updated dependencies [c0862c1]
|
|
262
|
+
- Updated dependencies [c0862c1]
|
|
263
|
+
- Updated dependencies [c0862c1]
|
|
264
|
+
- Updated dependencies [c0862c1]
|
|
265
|
+
- Updated dependencies [ded4494]
|
|
266
|
+
- Updated dependencies [d172f63]
|
|
267
|
+
- Updated dependencies [4c0de52]
|
|
268
|
+
- Updated dependencies [a80fef7]
|
|
269
|
+
- Updated dependencies [3bf8894]
|
|
270
|
+
- Updated dependencies [e06365c]
|
|
271
|
+
- Updated dependencies [1e1f09e]
|
|
272
|
+
- Updated dependencies [455c646]
|
|
273
|
+
- Updated dependencies [f34e877]
|
|
274
|
+
- Updated dependencies [f34e877]
|
|
275
|
+
- Updated dependencies [9844bbf]
|
|
276
|
+
- Updated dependencies [cef0eee]
|
|
277
|
+
- Updated dependencies [7ebff39]
|
|
278
|
+
- Updated dependencies [054fd84]
|
|
279
|
+
- Updated dependencies [5275d1f]
|
|
280
|
+
- Updated dependencies [7241a81]
|
|
281
|
+
- Updated dependencies [74add0c]
|
|
282
|
+
- Updated dependencies [aaba865]
|
|
283
|
+
- Updated dependencies [f1781be]
|
|
284
|
+
- Updated dependencies [fbad078]
|
|
285
|
+
- Updated dependencies [45d5853]
|
|
286
|
+
- Updated dependencies [4f4fc03]
|
|
287
|
+
- Updated dependencies [2312bd9]
|
|
288
|
+
- Updated dependencies [6d5eb34]
|
|
289
|
+
- Updated dependencies [c5406c2]
|
|
290
|
+
- Updated dependencies [c5406c2]
|
|
291
|
+
- Updated dependencies [d99b731]
|
|
292
|
+
- Updated dependencies [2571a3e]
|
|
293
|
+
- Updated dependencies [2a48bd4]
|
|
294
|
+
- Updated dependencies [8a55f0c]
|
|
295
|
+
- Updated dependencies [c7b30bd]
|
|
296
|
+
- Updated dependencies [20c6d35]
|
|
297
|
+
- Updated dependencies [417e245]
|
|
298
|
+
- Updated dependencies [69bca0a]
|
|
299
|
+
- Updated dependencies [023f00d]
|
|
300
|
+
- Updated dependencies [158c75d]
|
|
301
|
+
- Updated dependencies [7525045]
|
|
302
|
+
- Updated dependencies [5af42db]
|
|
303
|
+
- Updated dependencies [ce991bd]
|
|
304
|
+
- Updated dependencies [3c0f806]
|
|
305
|
+
- Updated dependencies [1071393]
|
|
306
|
+
- Updated dependencies [5f75cfa]
|
|
307
|
+
- Updated dependencies [6757a93]
|
|
308
|
+
- Updated dependencies [b7cd5c8]
|
|
309
|
+
- Updated dependencies [5330038]
|
|
310
|
+
- Updated dependencies [c9fc10b]
|
|
311
|
+
- Updated dependencies [dc6d28e]
|
|
312
|
+
- Updated dependencies [c0c2f79]
|
|
313
|
+
- Updated dependencies [0665c3b]
|
|
314
|
+
- Updated dependencies [d2500d8]
|
|
315
|
+
- Updated dependencies [e723f58]
|
|
316
|
+
- Updated dependencies [82bb1d5]
|
|
317
|
+
- Updated dependencies [f3d5408]
|
|
318
|
+
- Updated dependencies [b231607]
|
|
319
|
+
- Updated dependencies [b231607]
|
|
320
|
+
- Updated dependencies [466a219]
|
|
321
|
+
- Updated dependencies [6fb281d]
|
|
322
|
+
- Updated dependencies [54159d3]
|
|
323
|
+
- Updated dependencies [fa778e6]
|
|
324
|
+
- Updated dependencies [334f0cf]
|
|
325
|
+
- Updated dependencies [c08c933]
|
|
326
|
+
- Updated dependencies [92f979d]
|
|
327
|
+
- Updated dependencies [c4dd707]
|
|
328
|
+
- Updated dependencies [c4dd707]
|
|
329
|
+
- Updated dependencies [7578323]
|
|
330
|
+
- Updated dependencies [38bb373]
|
|
331
|
+
- Updated dependencies [923504f]
|
|
332
|
+
- Updated dependencies [5c2982a]
|
|
333
|
+
- Updated dependencies [97e7d4e]
|
|
334
|
+
- Updated dependencies [10aba37]
|
|
335
|
+
- Updated dependencies [5d3f437]
|
|
336
|
+
- Updated dependencies [51c661e]
|
|
337
|
+
- Updated dependencies [7af0ab3]
|
|
338
|
+
- Updated dependencies [b434f5f]
|
|
339
|
+
- Updated dependencies [9f282ef]
|
|
340
|
+
- Updated dependencies [fd4872f]
|
|
341
|
+
- Updated dependencies [f0532d8]
|
|
342
|
+
- Updated dependencies [cea429b]
|
|
343
|
+
- Updated dependencies [3092aca]
|
|
344
|
+
- Updated dependencies [82e5f53]
|
|
345
|
+
- Updated dependencies [d81e460]
|
|
346
|
+
- Updated dependencies [8106db1]
|
|
347
|
+
- Updated dependencies [068a540]
|
|
348
|
+
- Updated dependencies [ca45c6d]
|
|
349
|
+
- Updated dependencies [093d55b]
|
|
350
|
+
- Updated dependencies [b64fda3]
|
|
351
|
+
- Updated dependencies [a8051d6]
|
|
352
|
+
- Updated dependencies [72594f2]
|
|
353
|
+
- Updated dependencies [524136e]
|
|
354
|
+
- Updated dependencies [2b06a91]
|
|
355
|
+
- Updated dependencies [6f3299f]
|
|
356
|
+
- Updated dependencies [065a1cf]
|
|
357
|
+
- Updated dependencies [f2b17c6]
|
|
358
|
+
- Updated dependencies [52d6194]
|
|
359
|
+
- Updated dependencies [23bf859]
|
|
360
|
+
- Updated dependencies [1c72d77]
|
|
361
|
+
- Updated dependencies [2b4d3f1]
|
|
362
|
+
- Updated dependencies [d75f212]
|
|
363
|
+
- Updated dependencies [37db09f]
|
|
364
|
+
- Updated dependencies [ff9df88]
|
|
365
|
+
- Updated dependencies [70e843f]
|
|
366
|
+
- Updated dependencies [caac3b2]
|
|
367
|
+
- Updated dependencies [a2225f9]
|
|
368
|
+
- Updated dependencies [5c4deb5]
|
|
369
|
+
- Updated dependencies [a8e5b73]
|
|
370
|
+
- Updated dependencies [d9d9d98]
|
|
371
|
+
- Updated dependencies [c950345]
|
|
372
|
+
- Updated dependencies [21f9577]
|
|
373
|
+
- Updated dependencies [044f231]
|
|
374
|
+
- Updated dependencies [f8267df]
|
|
375
|
+
- Updated dependencies [9b82ced]
|
|
376
|
+
- Updated dependencies [3821a3a]
|
|
377
|
+
- Updated dependencies [3eb3ec1]
|
|
378
|
+
- Updated dependencies [92c2a69]
|
|
379
|
+
- Updated dependencies [646caea]
|
|
380
|
+
- Updated dependencies [1ffd6a2]
|
|
381
|
+
- Updated dependencies [5f8ecf6]
|
|
382
|
+
- Updated dependencies [8ed7e5a]
|
|
383
|
+
- Updated dependencies [6c4d00d]
|
|
384
|
+
- Updated dependencies [db8ce2f]
|
|
385
|
+
- Updated dependencies [726d8c9]
|
|
386
|
+
- Updated dependencies [f0e760a]
|
|
387
|
+
- Updated dependencies [a5bb7ac]
|
|
388
|
+
- Updated dependencies [f78efdd]
|
|
389
|
+
- Updated dependencies [8a8bcf3]
|
|
390
|
+
- Updated dependencies [f74638c]
|
|
391
|
+
- Updated dependencies [ef71a09]
|
|
392
|
+
- Updated dependencies [8614705]
|
|
393
|
+
- Updated dependencies [619e3f7]
|
|
394
|
+
- Updated dependencies [ca7a4c3]
|
|
395
|
+
- Updated dependencies [c9e6742]
|
|
396
|
+
- Updated dependencies [f62b6ff]
|
|
397
|
+
- Updated dependencies [608033b]
|
|
398
|
+
- Updated dependencies [611566b]
|
|
399
|
+
- Updated dependencies [efa9cb4]
|
|
400
|
+
- Updated dependencies [d66d7e8]
|
|
401
|
+
- Updated dependencies [15d8ca6]
|
|
402
|
+
- Updated dependencies [378896d]
|
|
403
|
+
- Updated dependencies [9d857c9]
|
|
404
|
+
- Updated dependencies [670ea10]
|
|
405
|
+
- Updated dependencies [ff215d9]
|
|
406
|
+
- Updated dependencies [71243db]
|
|
407
|
+
- Updated dependencies [a8add5c]
|
|
408
|
+
- Updated dependencies [33ee9de]
|
|
409
|
+
- Updated dependencies [4839f5c]
|
|
410
|
+
- Updated dependencies [a23e804]
|
|
411
|
+
- Updated dependencies [c7462e7]
|
|
412
|
+
- Updated dependencies [36e2f7b]
|
|
413
|
+
- Updated dependencies [ac59073]
|
|
414
|
+
- Updated dependencies [44cb469]
|
|
415
|
+
- Updated dependencies [e058d76]
|
|
416
|
+
- Updated dependencies [c999d4c]
|
|
417
|
+
- Updated dependencies [8df2608]
|
|
418
|
+
- Updated dependencies [5483297]
|
|
419
|
+
- Updated dependencies [ed43c79]
|
|
420
|
+
- Updated dependencies [260ef71]
|
|
421
|
+
- Updated dependencies [655e897]
|
|
422
|
+
- Updated dependencies [655e897]
|
|
423
|
+
- Updated dependencies [8d80845]
|
|
424
|
+
- Updated dependencies [69a408f]
|
|
425
|
+
- Updated dependencies [d2b21a1]
|
|
426
|
+
- Updated dependencies [5ff64ef]
|
|
427
|
+
- Updated dependencies [64acb7e]
|
|
428
|
+
- Updated dependencies [4ff5b6b]
|
|
429
|
+
- Updated dependencies [473e5a0]
|
|
430
|
+
- Updated dependencies [b279016]
|
|
431
|
+
- Updated dependencies [bb6c38c]
|
|
432
|
+
- Updated dependencies [26323c4]
|
|
433
|
+
- Updated dependencies [9753811]
|
|
434
|
+
- Updated dependencies [2727527]
|
|
435
|
+
- Updated dependencies [3da39ae]
|
|
436
|
+
- Updated dependencies [bc281f4]
|
|
437
|
+
- Updated dependencies [d637be3]
|
|
438
|
+
- Updated dependencies [2cfdc99]
|
|
439
|
+
- Updated dependencies [2cfdc99]
|
|
440
|
+
- Updated dependencies [1e6d83b]
|
|
441
|
+
- Updated dependencies [1e6d83b]
|
|
442
|
+
- Updated dependencies [6058bf8]
|
|
443
|
+
- Updated dependencies [c219165]
|
|
444
|
+
- Updated dependencies [a7ae252]
|
|
445
|
+
- Updated dependencies [fb501bc]
|
|
446
|
+
- Updated dependencies [30083da]
|
|
447
|
+
- Updated dependencies [7f9cc37]
|
|
448
|
+
- Updated dependencies [025130c]
|
|
449
|
+
- Updated dependencies [76f91f8]
|
|
450
|
+
- Updated dependencies [ea34d9b]
|
|
451
|
+
- Updated dependencies [8aa8e3e]
|
|
452
|
+
- Updated dependencies [024b7b6]
|
|
453
|
+
- Updated dependencies [cb80001]
|
|
454
|
+
- Updated dependencies [909c64e]
|
|
455
|
+
- Updated dependencies [9e7e1a5]
|
|
456
|
+
- Updated dependencies [2493e85]
|
|
457
|
+
- Updated dependencies [d0b9648]
|
|
458
|
+
- Updated dependencies [46dbf32]
|
|
459
|
+
- Updated dependencies [a928aaa]
|
|
460
|
+
- Updated dependencies [47508f3]
|
|
461
|
+
- Updated dependencies [61ed5ad]
|
|
462
|
+
- Updated dependencies [1b94d50]
|
|
463
|
+
- Updated dependencies [6f877f1]
|
|
464
|
+
- Updated dependencies [988aa9f]
|
|
465
|
+
- Updated dependencies [1ce0711]
|
|
466
|
+
- Updated dependencies [fb85637]
|
|
467
|
+
- Updated dependencies [9f1dd79]
|
|
468
|
+
- Updated dependencies [df71568]
|
|
469
|
+
- Updated dependencies [d11174a]
|
|
470
|
+
- Updated dependencies [2d8a8b7]
|
|
471
|
+
- Updated dependencies [cbac9d7]
|
|
472
|
+
- Updated dependencies [9eb1479]
|
|
473
|
+
- Updated dependencies [74e37aa]
|
|
474
|
+
- Updated dependencies [961b69f]
|
|
475
|
+
- Updated dependencies [52907d7]
|
|
476
|
+
- Updated dependencies [f466b0a]
|
|
477
|
+
- Updated dependencies [673a71c]
|
|
478
|
+
- Updated dependencies [616df65]
|
|
479
|
+
- Updated dependencies [58798ec]
|
|
480
|
+
- Updated dependencies [8803ca5]
|
|
481
|
+
- Updated dependencies [e70c21d]
|
|
482
|
+
- Updated dependencies [4b92c5a]
|
|
483
|
+
- Updated dependencies [06be396]
|
|
484
|
+
- Updated dependencies [3650d94]
|
|
485
|
+
- Updated dependencies [7c05f21]
|
|
486
|
+
- Updated dependencies [8cd4db4]
|
|
487
|
+
- Updated dependencies [daeb77f]
|
|
488
|
+
- Updated dependencies [eb4552e]
|
|
489
|
+
- Updated dependencies [3c3115e]
|
|
490
|
+
- Updated dependencies [55e90fd]
|
|
491
|
+
- Updated dependencies [9b75509]
|
|
492
|
+
- Updated dependencies [b13ea3c]
|
|
493
|
+
- Updated dependencies [d7e9e9a]
|
|
494
|
+
- Updated dependencies [cf62edf]
|
|
495
|
+
- Updated dependencies [0253416]
|
|
496
|
+
- Updated dependencies [5d77c09]
|
|
497
|
+
- Updated dependencies [3fd8625]
|
|
498
|
+
- Updated dependencies [1473757]
|
|
499
|
+
- Updated dependencies [d73d987]
|
|
500
|
+
- Updated dependencies [12ff256]
|
|
501
|
+
- Updated dependencies [26b0bd2]
|
|
502
|
+
- Updated dependencies [26b0bd2]
|
|
503
|
+
- Updated dependencies [d328698]
|
|
504
|
+
- Updated dependencies [d328698]
|
|
505
|
+
- Updated dependencies [b4e0787]
|
|
506
|
+
- Updated dependencies [088e0f7]
|
|
507
|
+
- Updated dependencies [78b07f4]
|
|
508
|
+
- Updated dependencies [f962cdc]
|
|
509
|
+
- Updated dependencies [b403bb3]
|
|
510
|
+
- Updated dependencies [8a25fee]
|
|
511
|
+
- Updated dependencies [4016370]
|
|
512
|
+
- Updated dependencies [12dc7b4]
|
|
513
|
+
- @object-ui/types@18.0.0
|
|
514
|
+
- @object-ui/components@18.0.0
|
|
515
|
+
- @object-ui/core@18.0.0
|
|
516
|
+
- @object-ui/i18n@18.0.0
|
|
517
|
+
- @object-ui/react@18.0.0
|
|
518
|
+
- @object-ui/permissions@18.0.0
|
|
519
|
+
- @object-ui/mobile@18.0.0
|
|
520
|
+
|
|
521
|
+
## 17.7.0
|
|
522
|
+
|
|
523
|
+
### Minor Changes
|
|
524
|
+
|
|
525
|
+
- 57a2bc2: Retire the undeclared timeline `metaFields` reads in both packages (objectui#10222).
|
|
526
|
+
|
|
527
|
+
The spec's `TimelineConfigSchema` is a strict object that declares no `metaFields` member and
|
|
528
|
+
refuses one, yet `ObjectTimeline` read it (through an `as any` cast) to pick the chip fields
|
|
529
|
+
beside each title, and `ListView` read it three times: two field collectors put the listed
|
|
530
|
+
fields into `$expand` / `$select`, and the status / priority auto-projection was skipped when
|
|
531
|
+
the list was present. All four reads are deleted.
|
|
532
|
+
|
|
533
|
+
**Behaviour change:** a stored interface-page view carrying `options.timeline.metaFields` falls
|
|
534
|
+
back to the default card labels (the built-in `status` / `priority` chips, limited to the fields
|
|
535
|
+
the object declares), and the fields that list named are no longer fetched for it. No such view
|
|
536
|
+
has been found; the stored rows are not censused. A timeline without the key renders and fetches
|
|
537
|
+
exactly what it did before, because `ListView` now projects `status` / `priority` for every
|
|
538
|
+
timeline view.
|
|
539
|
+
|
|
540
|
+
`cardFields` stays the reserved spelling if authored timeline chip fields are ever asked for;
|
|
541
|
+
nothing is declared.
|
|
542
|
+
- 6cd5ae3: `object-timeline` and `view:timeline` publish the ten `@objectstack/spec` 17.5.0 row keys their renderer honours, and `objectName` is no longer required (objectui#11168 slice 5, under objectui#11111 decision 3 = B).
|
|
543
|
+
|
|
544
|
+
- Both registrations in `src/index.tsx` now share one list, `OBJECT_TIMELINE_INPUTS`, which adds `timeline`, `limit`, `data`, `items`, `dateFormat`, `rowLabel`, `minDate`, `maxDate`, `descriptionField` and `mapping`. The page validator (`validateTree` in `@object-ui/sdui-parser`) reported each as `unknown-prop` while `ObjectTimeline` read it. It now accepts them.
|
|
545
|
+
- `objectName` drops `required: true`. A timeline drawn from `items`, `data` or a `bind` path issues no query, and the validator raised `missing-required-prop`, an error, on such a timeline, though the spec row declares `objectName` optional. Entry-click navigation still reads it, and the `objectName` and `navigation` descriptions say so: on a timeline that names no `objectName`, `page` opens nothing and `new_window` / `openNewTab: true` open a tab at a slash and the entry's `id` alone, not the record page (`src/__tests__/timelineNavigationMembers-8654.test.tsx`).
|
|
546
|
+
- Two values the spec row refuses are now reported where they were not: a `dateFormat` outside `short` / `long` / `iso` is an `invalid-enum` error (it was an `unknown-prop` warning), and a `data` that is not an array is a `type-mismatch` warning (it drew nothing).
|
|
547
|
+
- Each new description says what the renderer does with the key, as measured through `SchemaRenderer` in `src/__tests__/objectTimelineInputs-11168.test.tsx`. Where the spec row's own describe is true of the renderer, the description starts with it word for word.
|
|
548
|
+
- The `sort` description no longer opens with "Entry order". `ObjectTimeline` draws entries composed from records by their start date, so the key orders the query, not the rail.
|
|
549
|
+
- The JSDoc on `ObjectTimelineProps`'s `navigation` member states the mechanism as measured: an absent key takes `useNavigationOverlay`'s no-config branch, which calls only an `onNavigate` the timeline never passes, so it never reaches the host's record navigator. A block written without `mode` takes the `page` branch instead.
|
|
550
|
+
|
|
551
|
+
No renderer code changes, so nothing changes at render time. The README and the docs page describe the record source order and each key.
|
|
552
|
+
- e4559d1: `TimelineSchema` now declares the presentational keys the timeline renderer actually reads
|
|
553
|
+
(objectui#6170, maintainer ruling 2026-08-25 — the same family rule adopted on
|
|
554
|
+
objectui#6172: the exported type aligns to the measured authored + read set).
|
|
555
|
+
|
|
556
|
+
Before this, `TimelineSchema` declared `events` (required), `orientation` and `position`,
|
|
557
|
+
and nothing else. `TimelineRenderer` is annotated `schema: TimelineSchema` and reads nine
|
|
558
|
+
keys off that node — `variant`, `items`, `dateFormat`, `onItemClick`, `minDate`, `maxDate`,
|
|
559
|
+
`rowLabel`, `scale`, `timeScale` — and **none** of the three that were declared. The docs
|
|
560
|
+
property table and the registration's own designer `inputs` had agreed with the renderer
|
|
561
|
+
all along; only the exported type disagreed. It was invisible to `tsc` because `BaseSchema`
|
|
562
|
+
carries `[key: string]: any`, so every undeclared key resolved as `any` and the annotation
|
|
563
|
+
constrained nothing.
|
|
564
|
+
|
|
565
|
+
The most visible casualty was the docs page's own TypeScript example, which did not
|
|
566
|
+
compile: `Property 'events' is missing in type '{ type: "timeline"; variant: string; items:
|
|
567
|
+
… }' but required in type 'TimelineSchema'`. The page taught an authoring form its own
|
|
568
|
+
published type refused.
|
|
569
|
+
|
|
570
|
+
**Declared now** (TS interface and the `@object-ui/types/zod` mirror together): `variant`,
|
|
571
|
+
`items`, `dateFormat`, `scale`, `timeScale`, `rowLabel`, `minDate`, `maxDate`. `onItemClick`
|
|
572
|
+
is deliberately left undeclared — it is a runtime slot `ObjectTimeline` installs, and this
|
|
573
|
+
package keeps callback-shaped keys off the authored surface.
|
|
574
|
+
|
|
575
|
+
**`scale` is the canonical axis key.** It is `@objectstack/spec`'s `ui/TimelineConfig.json`
|
|
576
|
+
spelling and the one `resolveTimelineScale` reads first (`scale ?? timeScale`). The designer
|
|
577
|
+
now offers it, with all six buckets: `hour` / `quarter` / `year` have rendered correctly
|
|
578
|
+
since objectui#2942 but were offered by neither the designer (which listed three) nor the
|
|
579
|
+
exported type (which listed none), so they were authorable and undiscoverable. `timeScale`
|
|
580
|
+
stays as a deprecated alias so stored JSON keeps working; retiring it is routed separately.
|
|
581
|
+
|
|
582
|
+
**`events` is now optional.** It was required, which is why the documented authoring form
|
|
583
|
+
did not type-check. That widening is the only non-additive change here — strictly more
|
|
584
|
+
programs compile and strictly more input parses than before. `events`, `orientation` and
|
|
585
|
+
`position` remain declared and remain read by nothing; a timeline authored with `events`
|
|
586
|
+
still renders an empty rail. Their removal is a breaking narrowing of a published type and
|
|
587
|
+
is routed through ADR-0049 enforce-or-remove as its own change, not smuggled into this one.
|
|
588
|
+
|
|
589
|
+
Accept-set note for consumers: keys that previously resolved as `any` are now typed, so a
|
|
590
|
+
value the renderer never implemented — `variant: 'diagonal'`, `dateFormat: 'medieval'`,
|
|
591
|
+
`scale: 'fortnight'` — is a type error and a Zod rejection where it used to pass silently.
|
|
592
|
+
Nothing that renders today stops rendering. `BaseSchema`'s index signature is untouched, so
|
|
593
|
+
an undeclared key is still accepted by both halves (objectui#5155 / objectui#6269 own that
|
|
594
|
+
ceiling).
|
|
595
|
+
- 9d86e1d: Retire the `timeScale` alias on the timeline node — `scale` is the only axis spelling
|
|
596
|
+
(objectui#6355, maintainer ruling 2026-08-27).
|
|
597
|
+
|
|
598
|
+
**BREAKING for authored metadata.** `timeScale` was this renderer's pre-spec spelling of the
|
|
599
|
+
Gantt axis bucket. `scale` is canonical — it is `@objectstack/spec` `ui/TimelineConfig.json`'s
|
|
600
|
+
axis key and the key the renderer preferred (objectui#6170 ruling, 2026-08-25: `timeScale`
|
|
601
|
+
goes the alias-retirement route, not a silent second spelling). objectui#6355's ruling
|
|
602
|
+
retires it immediately, with no phased window, while the project is at startup stage.
|
|
603
|
+
|
|
604
|
+
**What breaks, and how you will find out.** A timeline document that spells `timeScale` is
|
|
605
|
+
now **refused**, loudly, at the authoring boundary:
|
|
606
|
+
|
|
607
|
+
- `TimelineSchema.timeScale` is declared `?: never` — writing it is a type error;
|
|
608
|
+
- the Zod twin declares `z.never().optional()` — parsing a document that carries the key
|
|
609
|
+
fails with `invalid_type` / `expected: never` on the `timeScale` path.
|
|
610
|
+
|
|
611
|
+
The fix is a rename: `timeScale` → `scale`. The accepted values are unchanged (`hour`,
|
|
612
|
+
`day`, `week`, `month`, `quarter`, `year`), so no value needs rewriting.
|
|
613
|
+
|
|
614
|
+
**Why a tombstone rather than deleting the key.** `BaseSchema` is `.passthrough()` on the
|
|
615
|
+
Zod side and carries `[key: string]: any` on the TS side, so an *undeclared* key is accepted
|
|
616
|
+
unvalidated by both halves. Deleting `timeScale` outright would have let the retired spelling
|
|
617
|
+
parse green and type-check green while the renderer no longer read it — the Gantt axis would
|
|
618
|
+
silently fall back to the `month` default, the chart would change bucket, and nothing would
|
|
619
|
+
error. That is the silent axis breakage objectui#2942 closed, running in the other direction,
|
|
620
|
+
and it is the specific outcome this retirement is shaped to prevent. Keeping the key declared
|
|
621
|
+
as `never` on both halves is what makes the removal audible. Absent stays valid on both, so a
|
|
622
|
+
document that never wrote the alias is untouched.
|
|
623
|
+
|
|
624
|
+
Also in this change:
|
|
625
|
+
|
|
626
|
+
- `resolveTimelineScale` drops the `?? schema.timeScale` fallback read; its parameter narrows
|
|
627
|
+
to `{ scale?: unknown }`.
|
|
628
|
+
- The designer drops its deprecated `timeScale` input. The `scale` input already offers all
|
|
629
|
+
six buckets.
|
|
630
|
+
- `ObjectTimeline` now emits the resolved axis under `scale` when it composes the schema it
|
|
631
|
+
hands to the renderer. It previously wrote the alias, which would have made **every**
|
|
632
|
+
object-bound Gantt fall through to the `month` default the moment the fallback read went —
|
|
633
|
+
silently, since that is a composed schema no author ever sees. Writing `scale` after the
|
|
634
|
+
spread also restores the precedence the surrounding code intends: a `timelineConfig.scale`
|
|
635
|
+
now actually beats a flat `schema.scale`, where under the alias the resolver's
|
|
636
|
+
`scale ?? timeScale` ordering let the flat key win.
|
|
637
|
+
- The two in-repo authors are migrated in the same change: the schema-catalog
|
|
638
|
+
`gantt-style-timeline.json` fixture and the registration's own `examples.gantt` block.
|
|
639
|
+
- Docs drop the `timeScale` row and gain a retirement callout;
|
|
640
|
+
`packages/components/.../TIMELINE.md`'s Gantt table now documents `scale` with the full
|
|
641
|
+
six-value vocabulary it has accepted since objectui#2942 (its row still claimed three).
|
|
642
|
+
|
|
643
|
+
Version note: `minor`, not `major`, per AGENTS.md §版本号策略 — objectui's major tracks the
|
|
644
|
+
`@objectstack` major and all publishable packages share one `fixed` group, so a breaking
|
|
645
|
+
narrowing is declared `minor` with the break spelled out here.
|
|
646
|
+
- 3a5817f: feat(types)!: a timeline item is a declared feed item or gantt row, judged against the shape `variant` selects
|
|
647
|
+
|
|
648
|
+
`TimelineSchema.items` declared an object whose keys were all open, on both the
|
|
649
|
+
TypeScript type and the zod mirror. An item written `{ title, date }` therefore
|
|
650
|
+
type-checked and validated, and its `date` was dropped without a word — a feed
|
|
651
|
+
item's date is `time`. A gantt row on a vertical timeline, or a timeline item on
|
|
652
|
+
a gantt timeline, validated too and drew an empty entry with no diagnostic. And
|
|
653
|
+
the strict authoring schema refused every real timeline item, the schema
|
|
654
|
+
catalog's own included, because an item that declares no keys closes to nothing.
|
|
655
|
+
|
|
656
|
+
The item is now declared (objectui#6356, maintainer ruling Q1 = A, Q2 = C):
|
|
657
|
+
|
|
658
|
+
- **Timeline item** (`variant` `vertical`, the default, or `horizontal`) — new
|
|
659
|
+
exported type `TimelineFeedItem`: `time`, `title`, `description`, `variant`,
|
|
660
|
+
`icon`, `content`, `className`. `title` is **required**.
|
|
661
|
+
- **Gantt row** (`variant: 'gantt'`) — new exported types `TimelineGanttItem`
|
|
662
|
+
(`label`, **required**, and optional `items`) and `TimelineGanttItemBar`
|
|
663
|
+
(`title`, `startDate`, `endDate`, `variant`, all optional; a bar date is a
|
|
664
|
+
string, a finite number or a `Date`).
|
|
665
|
+
- Item and bar `variant` is one of `default`, `success`, `warning`, `danger`,
|
|
666
|
+
`info` — new exported type `TimelineItemVariant`.
|
|
667
|
+
- The zod faces gain `TimelineFeedItemSchema`, `TimelineGanttItemSchema` and
|
|
668
|
+
`TimelineGanttItemBarSchema` on `@object-ui/types/zod`.
|
|
669
|
+
|
|
670
|
+
**Breaking, for authors (minor per this repository's version policy):**
|
|
671
|
+
|
|
672
|
+
- `TimelineSchema` validation now judges every item against the shape its
|
|
673
|
+
`variant` selects. A gantt row on a vertical or horizontal timeline, or a
|
|
674
|
+
timeline item on a gantt timeline, is refused, naming the missing `title` or
|
|
675
|
+
`label` and each key that belongs to the other shape. A timeline item with no
|
|
676
|
+
`title`, or a gantt row with no `label`, is refused.
|
|
677
|
+
- An item or bar `variant` outside the five is refused, and so is a bar date
|
|
678
|
+
that is not a string, a finite number or a `Date`.
|
|
679
|
+
- In TypeScript, an item literal carrying a key neither shape declares (for
|
|
680
|
+
example `date`, or `meta`) is an excess-property error. TypeScript cannot see
|
|
681
|
+
the parent's `variant`, so a gantt row on a feed timeline still type-checks;
|
|
682
|
+
validation is where that is refused.
|
|
683
|
+
- In TypeScript, an element of `TimelineSchema.items` is now the union
|
|
684
|
+
`TimelineFeedItem | TimelineGanttItem`, where it was an object with `unknown`
|
|
685
|
+
keys. Reading a key that only one shape declares needs the element narrowed
|
|
686
|
+
first — for example `'label' in item`.
|
|
687
|
+
- `color`, `group`, `meta`, `startDate` and `endDate` on a timeline item are
|
|
688
|
+
**not** authorable. `ObjectTimeline` composes them onto the items it maps from
|
|
689
|
+
records and the renderer still draws them; they are typed inside
|
|
690
|
+
`@object-ui/plugin-timeline` only, and the strict authoring schema refuses
|
|
691
|
+
them by name.
|
|
692
|
+
|
|
693
|
+
This supersedes two statements elsewhere in these release notes: the
|
|
694
|
+
objectui#7164 and objectui#7365 entries say a row's and a bar's own keys stay
|
|
695
|
+
undeclared and open and that feed timelines are untouched. Their refusals still
|
|
696
|
+
hold, at the same paths — a non-object item at `items[i]`, a non-array row
|
|
697
|
+
`items` at `items[i].items`, a non-object bar at `items[i].items[j]` — and on
|
|
698
|
+
the tolerant `TimelineSchema` a bar still accepts keys it does not declare (the
|
|
699
|
+
strict authoring schema refuses them by name), but the keys above are now
|
|
700
|
+
declared, and feed timelines are judged too.
|
|
701
|
+
|
|
702
|
+
`TimelineSchema` stays a zod object: its `.shape`, its place in
|
|
703
|
+
`DataDisplaySchema` and the `timeScale` / `body` / `children` refusals are
|
|
704
|
+
unchanged. Deriving from it with `.extend()` over an existing key now throws in
|
|
705
|
+
zod 4 (the node carries a refinement); use `.safeExtend()`, which keeps it.
|
|
706
|
+
|
|
707
|
+
`@object-ui/plugin-timeline` (**breaking at compile time, shipped as a
|
|
708
|
+
`minor`**): `TimelineRenderer` is a public export, and its `schema` prop is now
|
|
709
|
+
typed as the renderer's own input — the two declared item shapes above, plus the
|
|
710
|
+
item keys `ObjectTimeline` composes (`color`, `group`, `meta`, `startDate`,
|
|
711
|
+
`endDate`, `_data`, and any string as a composed item's `variant`) — rather than
|
|
712
|
+
as the authored `TimelineSchema` of before, whose items accepted any key. So an
|
|
713
|
+
object literal passed to the prop whose item carries a key neither shape
|
|
714
|
+
declares is now an excess-property error (TS2353), exactly as it is against
|
|
715
|
+
`TimelineSchema`: `schema={{ type: 'timeline', items: [{ title: 'T', date: 'x' }] }}`
|
|
716
|
+
type-checked before and does not now. Fix it at the item — a feed item's date is
|
|
717
|
+
`time`. What still type-checks against the prop: any value typed
|
|
718
|
+
`TimelineSchema`, an `items` array that is not written as a fresh literal (for
|
|
719
|
+
example an array of string-keyed records held in a variable), items that are
|
|
720
|
+
empty objects, and the composed keys above.
|
|
721
|
+
- 20cb8db: `ObjectTimeline` refuses an undeclared date axis instead of inventing one
|
|
722
|
+
(objectui#7459).
|
|
723
|
+
|
|
724
|
+
Steps ① and ② of the three-step sequence the maintainer ruled on 2026-09-01
|
|
725
|
+
(总监批 #28). House posture, on record with that ruling:
|
|
726
|
+
日期轴永不虚构 — a date axis is never fabricated.
|
|
727
|
+
|
|
728
|
+
`ObjectTimeline` resolved its date axis through five declared bindings and then
|
|
729
|
+
closed the chain with a sixth rung that was a bare literal field name nobody
|
|
730
|
+
has ever declared. A name therefore ALWAYS resolved: for a view that declared
|
|
731
|
+
no axis, every record read a key its object does not carry, every event landed
|
|
732
|
+
in the "No date" bucket, and the screen read as a timeline that had been built
|
|
733
|
+
and simply had nothing in it.
|
|
734
|
+
|
|
735
|
+
Two changes, shipped together because neither is observable alone:
|
|
736
|
+
|
|
737
|
+
- **The renderer now refuses.** An object-bound timeline with no declared date
|
|
738
|
+
axis renders a diagnostic naming every binding it accepts —
|
|
739
|
+
`timeline.startDateField`, `timeline.dateField`, `mapping.date`, and the two
|
|
740
|
+
deprecated flat spellings — instead of a chart. The twin of `ObjectGantt`'s
|
|
741
|
+
"Gantt configuration required" screen, in the shape `5f4514f7b` settled.
|
|
742
|
+
- **The invented sixth rung is gone**, which is the only thing that makes the
|
|
743
|
+
refusal reachable. Added while the floor stood, it would have been dead code;
|
|
744
|
+
retired without the refusal, it would have produced exactly the silent
|
|
745
|
+
"No date" outcome the ruling rejects.
|
|
746
|
+
|
|
747
|
+
**What changes for an author.** A view that declares a date axis is completely
|
|
748
|
+
unaffected — all five declared spellings resolve exactly as before, and a
|
|
749
|
+
timeline authored from literal `items` is never refused, since its items carry
|
|
750
|
+
their own dates and no field name is read for them. A view that declared no
|
|
751
|
+
axis anywhere, and was rendering an empty-looking timeline, now says so.
|
|
752
|
+
|
|
753
|
+
⚠️ Both premises were RE-MEASURED on the current tree before anything was
|
|
754
|
+
edited, rather than taken from the card: the renderer had no absent-axis
|
|
755
|
+
refusal (against a live control term that fires in the same file), and the
|
|
756
|
+
floor was still present and still spelled as reported. The pairing itself is
|
|
757
|
+
pinned — the refusal cases go red the moment the floor returns, including one
|
|
758
|
+
whose records carry a column that happens to be named `date`, where a returned
|
|
759
|
+
floor renders a convincing timeline rather than an empty one.
|
|
760
|
+
|
|
761
|
+
Refusal is distinguished from "renders an empty timeline" by asserting the
|
|
762
|
+
canvas is ABSENT, not merely event-free. The component's success surface is now
|
|
763
|
+
named (`data-testid="timeline-canvas"`) so that distinction can be measured;
|
|
764
|
+
every other terminal state of the component already named itself.
|
|
765
|
+
|
|
766
|
+
Step ③ of the ruling — the `'created_at'` floors on the two plugin faces —
|
|
767
|
+
stays for a later change (it landed as `04a67b9dc`) and is deliberately NOT in this change.
|
|
768
|
+
- 233a1b3: Declare the `filter` and `sort` inputs on the `object-map`, `object-gantt`,
|
|
769
|
+
`object-timeline` and `view:timeline` registrations (objectui#8220) — the html
|
|
770
|
+
tier stops reporting `unknown-prop` on two keys the spec declares and all three
|
|
771
|
+
renderers read.
|
|
772
|
+
|
|
773
|
+
objectui#7712's and objectui#8171's defect, three blocks over. `ObjectMap`,
|
|
774
|
+
`ObjectGantt` and `ObjectTimeline` each lower the authored keys onto their own
|
|
775
|
+
query — `$filter` (the authored `filter`, its context tokens resolved first) and
|
|
776
|
+
`$orderby: convertSortToQueryParams(schema.sort)` — but none of the four
|
|
777
|
+
registrations publishing those renderers listed either key in `inputs`, and
|
|
778
|
+
`sdui-parser`'s `validateTree` reports `unknown-prop` for every key no `inputs`
|
|
779
|
+
entry claims. An author writing the spelling that works was told it was unknown.
|
|
780
|
+
|
|
781
|
+
Unlike the kanban and calendar cases, these three blocks had no spec row when the
|
|
782
|
+
defect was filed, so declaring the keys then would have published an authoring
|
|
783
|
+
surface no contract backed. That order is now met on the installed package:
|
|
784
|
+
`@objectstack/spec` 17.5.0 maps `object-map`, `object-gantt` and `object-timeline`
|
|
785
|
+
in `ComponentPropsMap`, each row declaring `filter` as the `ViewFilterRule` array
|
|
786
|
+
and `sort` as the `SortItem` array. ADR-0049 enforce-or-remove therefore resolves
|
|
787
|
+
toward **declare**: both keys have live readers on both ends.
|
|
788
|
+
|
|
789
|
+
Both keys are declared `type: 'array'`. For `filter` that is the rule-array arm
|
|
790
|
+
`[{ field, operator, value }, ...]` and nothing else: the spec refuses the
|
|
791
|
+
MongoDB-style record form at all three doors, and with the key declared as an
|
|
792
|
+
array the html tier now refuses it too, as a `type-mismatch`, instead of passing
|
|
793
|
+
it as an unknown key. `sort` takes `[{ field, order }]`.
|
|
794
|
+
|
|
795
|
+
`view:timeline` declares the same pair as `object-timeline`: it is the same
|
|
796
|
+
renderer under a second tag, the `view:calendar` precedent. The map's and the
|
|
797
|
+
gantt's bare `view:` twins are already retired (objectui#10393, objectui#8008),
|
|
798
|
+
so four registrations carry the declaration, not six.
|
|
799
|
+
|
|
800
|
+
Pinned per plugin in `__tests__/queryKeysDeclared-8220.test.tsx`: the real
|
|
801
|
+
validator over a manifest built from the live registry, with an undeclared-key
|
|
802
|
+
control; the installed spec row's verdict on the same values; and a mount through
|
|
803
|
+
`SchemaRenderer` showing the rule array reach `$filter` and the sort items reach
|
|
804
|
+
`$orderby` on every tag.
|
|
805
|
+
|
|
806
|
+
Not changed here: the console's `registry-inputs-spec-parity` ledger. It does not
|
|
807
|
+
load these three plugins yet and books the blocks as unjudged, owed to
|
|
808
|
+
objectui#11168, so this change moves none of its rows.
|
|
809
|
+
|
|
810
|
+
**Note, 2026-10-02 (objectui#11168 slice 5, shipping in this same release).**
|
|
811
|
+
The last paragraph above says the console's `registry-inputs-spec-parity` gate
|
|
812
|
+
does not load these three plugins yet and books the blocks as unjudged. That no
|
|
813
|
+
longer holds for the release: objectui#11168 loaded all three in this same
|
|
814
|
+
release (`object-map` in slice 3, `object-gantt` in slice 4, `object-timeline`
|
|
815
|
+
in slice 5), so the gate judges each registration in both directions, and its
|
|
816
|
+
unjudged-block ledger books none of them. This change itself still moved none
|
|
817
|
+
of those rows.
|
|
818
|
+
- 9a853f2: Retire the legacy string `sort` clause: one spelling, the array
|
|
819
|
+
(objectui#8221) — `convertSortToQueryParams` now REFUSES `"name desc"` with a
|
|
820
|
+
diagnostic naming `[{ field: 'name', order: 'desc' }]`, instead of lowering it.
|
|
821
|
+
|
|
822
|
+
**BREAKING for `@object-ui/core` consumers — scored `minor`, not `major`, per
|
|
823
|
+
AGENTS.md 版本号策略** (every package is in one fixed group, so a `major` here
|
|
824
|
+
would carry all 39 off the `@objectstack` major this repo is pinned to). The
|
|
825
|
+
breaking semantics are stated below rather than encoded in the version.
|
|
826
|
+
|
|
827
|
+
Director ruling, decision batch #77 (2026-09-07), option B. Three faces
|
|
828
|
+
disagreed about one key: `@object-ui/core` implemented the string clause
|
|
829
|
+
on purpose (`sort-query.ts`, docblock and all), `content/docs/plugins/plugin-map.mdx`
|
|
830
|
+
taught it as `sort?: string | SortConfig[]`, and the html tier answered
|
|
831
|
+
`type-mismatch` for it because all seven `sort` registrations publish
|
|
832
|
+
`type: 'array'` alone — while `@objectstack/spec` refuses the string outright on
|
|
833
|
+
`element-record-picker`. Option A (per-block string arms) was rejected by name:
|
|
834
|
+
it would make one key mean different things on different blocks.
|
|
835
|
+
|
|
836
|
+
**What moves.** `convertSortToQueryParams(sort)` narrows from
|
|
837
|
+
`string | QuerySortEntry[]` to `QuerySortEntry[]`, and the three declarations
|
|
838
|
+
that published a string arm narrow with it — `ObjectGridSchema.sort`,
|
|
839
|
+
`ObjectMapSchema.sort` and `ObjectGanttSchema.sort`, in the TypeScript face AND
|
|
840
|
+
in the zod mirror, together, because a narrowing that left `z.string()` in the
|
|
841
|
+
mirror is the declared-vs-enforced split this change exists to close. The local
|
|
842
|
+
`sort` declarations on `LineItemsPanel`, `ObjectTimeline` and
|
|
843
|
+
`deriveRelatedLists`'s ListView input narrow the same way.
|
|
844
|
+
|
|
845
|
+
**What a string does now.** Types are erased, so the signature stops a string
|
|
846
|
+
only at compile time; authored JSON and stored `sys_metadata` rows still reach
|
|
847
|
+
the sink carrying `"name desc"`. Such a value is REFUSED — the query carries no
|
|
848
|
+
`$orderby` — and `console.error` names the array form, quotes what arrived and
|
|
849
|
+
states the consequence, once per spelling. A silent `undefined` was the one
|
|
850
|
+
outcome the ruling ruled out.
|
|
851
|
+
|
|
852
|
+
**Measured consequences you may see.** A related list that inherited its child
|
|
853
|
+
object's default list-view sort in the legacy spelling stops inheriting it (the
|
|
854
|
+
console says so). `@objectstack/spec@17.3.0` still ACCEPTS the string on
|
|
855
|
+
`ListViewSchema.sort` and on `RecordRelatedListProps.sort`, so such metadata is
|
|
856
|
+
still spec-legal today; the spec-side pull-back is its own card. Two surfaces
|
|
857
|
+
are deliberately untouched, because they are a DIFFERENT string dialect that
|
|
858
|
+
never reaches this sink: `record:related_list`'s `'field'` / `'-field'` form,
|
|
859
|
+
normalized by `RelatedList.normalizeSortSpec`, and `ListView.parseSortConfig`,
|
|
860
|
+
which reads the platform view record the spec still blesses.
|
|
861
|
+
|
|
862
|
+
Docs teach the array only: `content/docs/plugins/plugin-map.mdx`,
|
|
863
|
+
`content/docs/plugins/plugin-view.mdx` and `packages/plugin-view/README.md`.
|
|
864
|
+
- 95bd23c: `navigation` is declared on the `object-timeline` block, by reference to `@objectstack/spec` (objectui#8654). This is the timeline arm of the objectui#8652 maintainer ruling: the spec declares the key on the `object-timeline` element from 17.5.0, for the block standalone, and objectui now mirrors it.
|
|
865
|
+
|
|
866
|
+
- `ObjectTimelineProps['schema']` declares `navigation` with the spec's `NavigationConfig` type (`ViewNavigationConfig`), the type the grid, kanban and calendar schemas use. `ObjectTimeline` reads the key without a cast. `TimelineSchema` in `@object-ui/types` is unchanged: it describes the presentational rail, which does not read the key.
|
|
867
|
+
- The `object-timeline` and `view:timeline` registrations publish `navigation` in their `inputs`, so the designer offers it.
|
|
868
|
+
- An authored `{ "type": "object-timeline", "properties": { … } }` document was already judged by the spec row: a bad `mode` is refused at `properties.navigation.mode`, and a member the spec does not declare inside the block is refused. That is unchanged and now pinned.
|
|
869
|
+
|
|
870
|
+
What a click does with each member is unchanged. `drawer`, `modal` and `popover` open the entry's record in that overlay, and `new_window` or `openNewTab: true` opens the record page in a new tab. Three things open nothing on a timeline that no parent view navigates for: an absent key, `page` (also what a block without `mode` resolves to), and `split`. The published input description says so.
|
|
871
|
+
|
|
872
|
+
**Note, 2026-10-01 (objectui#11168 slice 3, shipping in this same release).**
|
|
873
|
+
The last paragraph above says `page`, and a block without `mode`, open nothing
|
|
874
|
+
on a timeline that no parent view navigates for, and that the published input
|
|
875
|
+
description says so. objectui#11293 changed that in this same release: a
|
|
876
|
+
`page` click with no `onNavigate` now goes to the record navigator the host
|
|
877
|
+
publishes, which the console publishes on its custom pages, record pages and
|
|
878
|
+
list views. Under such a host `page` and a block without `mode` open the record
|
|
879
|
+
page. They open nothing only under a host that publishes none, such as an
|
|
880
|
+
embedded renderer. The input description now says so (objectui#11168). An
|
|
881
|
+
absent key and `split` still open nothing.
|
|
882
|
+
|
|
883
|
+
**Note, 2026-10-02 (objectui#11168 slice 5, shipping in this same release).**
|
|
884
|
+
`objectName` is no longer required on `object-timeline` / `view:timeline`: a
|
|
885
|
+
timeline drawn from `items`, `data` or a `bind` path names none. On such a
|
|
886
|
+
timeline there is no record page. `page`, and a block without `mode`, open
|
|
887
|
+
nothing even under a host that publishes its record navigator, and
|
|
888
|
+
`new_window` or `openNewTab: true` open a tab at a slash and the entry's `id`
|
|
889
|
+
alone, not the record page. So "opens the record page in a new tab" above, and
|
|
890
|
+
"they open nothing only under a host that publishes none" in the earlier note,
|
|
891
|
+
hold for a timeline that names its `objectName`. The input description says
|
|
892
|
+
so.
|
|
893
|
+
- a9d97be: Close the numeric-falsy `SchemaNode` slot class: a slot may no longer guard itself
|
|
894
|
+
(objectui#9162, triage ruling 2026-09-12).
|
|
895
|
+
|
|
896
|
+
**What leaked.** `{schema.footer && <CardFooter>…</CardFooter>}` does not evaluate to
|
|
897
|
+
`false` when the slot is falsy — it evaluates to the **slot**, and React renders
|
|
898
|
+
numbers. A node slot's published zod face carries a `z.number()` arm
|
|
899
|
+
(`nodeUnionOptions`, `packages/types/src/zod/base.zod.ts`), so `footer: 0` is **legal
|
|
900
|
+
authored input**, and it painted a stray `0` into the DOM. `NaN` painted three
|
|
901
|
+
characters. The `&&` also short-circuits, so `renderChildren`'s own
|
|
902
|
+
`if (!children) return null` first leg was never reached — which is why the
|
|
903
|
+
objectui#8908 bridge repair could not cover any of these sites.
|
|
904
|
+
|
|
905
|
+
**Why a class fix and not N instance fixes.** This class was patched one instance at a
|
|
906
|
+
time three times — objectui#8331 (`DataTableSchema.emptyAction`), objectui#9033
|
|
907
|
+
(`header-bar`'s `rightContent`), and then objectui#9162's census found eleven more,
|
|
908
|
+
because objectui#9033's grep was keyed on the spelling of the **right** operand while
|
|
909
|
+
the trap depends only on the **left** one. Nineteen guards across eight files are
|
|
910
|
+
repaired here, and the construct that permits them is now refused mechanically.
|
|
911
|
+
|
|
912
|
+
**The one spelling, and the gate.** `renderChildren(slot)` is the guard for a bare
|
|
913
|
+
slot; the new `renderNodeSlot(slot, render)` is the guard for a slot wrapped in chrome
|
|
914
|
+
that must disappear with it. Both route through one exported predicate,
|
|
915
|
+
`isEmptyNodeSlot`. The new lint rule `object-ui/no-bare-node-slot-guard` refuses the
|
|
916
|
+
`&&` spelling, deriving its slot set per file from the file's own text — an expression
|
|
917
|
+
is a node slot there if that file hands it to `renderChildren`, `renderNodeSlot`,
|
|
918
|
+
`toRenderableSchema` or `<SchemaRenderer schema={…}>`. A twelfth slot is rendered
|
|
919
|
+
through one of those, so it is covered the moment it is written, with no list to keep
|
|
920
|
+
up to date.
|
|
921
|
+
|
|
922
|
+
**Why `minor`.** Two reasons, and neither is a contract break.
|
|
923
|
+
|
|
924
|
+
1. `@object-ui/components` gains public API: `renderNodeSlot` and `isEmptyNodeSlot` are
|
|
925
|
+
new exports. A new export is a `minor` on its own.
|
|
926
|
+
2. Published renderers change what they emit for two authored inputs. A node slot
|
|
927
|
+
authored `0` / `-0` / `NaN` stops painting that character — that is the defect, and
|
|
928
|
+
no author asked for it. A node slot authored `[]` no longer renders its empty chrome
|
|
929
|
+
(an empty `CardHeader` / `CardContent` / `CardFooter` / `DialogFooter` /
|
|
930
|
+
`SheetFooter` / `DrawerFooter` / `TableFooter`, or `plugin-detail`'s wrapping
|
|
931
|
+
`div`); the chrome now appears and disappears with its content. Measured across
|
|
932
|
+
`examples/`, `content/` and `apps/`: **zero** authored node slots carry a numeric
|
|
933
|
+
value, and the single authored `"children": []` is on `div`, which never had the
|
|
934
|
+
`&&` guard and is unaffected.
|
|
935
|
+
|
|
936
|
+
⛔ Deliberately **not** marked `**BREAKING**`: no authored input stops being accepted,
|
|
937
|
+
no export is removed, no key stops being read, and objectui#7105 is respected — the
|
|
938
|
+
declarations are untouched and node slots still relax the renderer. An author who
|
|
939
|
+
genuinely wants the character `0` writes `"0"` or a `text` node, both unchanged.
|
|
940
|
+
- 502eb58: The row/card click props on the view components now declare the modifier
|
|
941
|
+
payload they have always been invoked with (objectui#9357).
|
|
942
|
+
|
|
943
|
+
`useNavigationOverlay`'s `handleClick` invokes the handler it is given with two
|
|
944
|
+
arguments — the record, and an optional modifier payload (`metaKey` / `ctrlKey`
|
|
945
|
+
/ `button`) a host needs to implement Cmd/Ctrl/middle-click. objectui#9360 made
|
|
946
|
+
the hook's own option say so. These components pass a host-supplied prop
|
|
947
|
+
straight into that option, so the value a host writes against them is invoked
|
|
948
|
+
with two arguments too — and every one of these props declared only the record.
|
|
949
|
+
The payload was therefore invisible on the one line a host reads, exactly as it
|
|
950
|
+
had been on the hook.
|
|
951
|
+
|
|
952
|
+
Thirteen declarations across nine packages now name both parameters:
|
|
953
|
+
|
|
954
|
+
- `ObjectGridComponentProps.onRowClick`
|
|
955
|
+
- `ObjectKanbanComponentProps.onRowClick` (its sibling `onCardClick`, the other
|
|
956
|
+
arm of the same fallback, already declared both)
|
|
957
|
+
- `KanbanRendererProps.schema.onCardClick`
|
|
958
|
+
- `ObjectCalendar`, `ObjectGantt`, `ObjectMap`, `ObjectTree`: `onRowClick`
|
|
959
|
+
- `ObjectTimeline`: `onRowClick` and `onItemClick`, the two arms of one fallback
|
|
960
|
+
- `ListView.onRowClick`
|
|
961
|
+
- `ObjectGallery`: `onRowClick` and `onCardClick`, likewise two arms of one
|
|
962
|
+
- `RelatedList.onRowClick`
|
|
963
|
+
|
|
964
|
+
**Source-compatible, and with no refused class.** A one-parameter handler is
|
|
965
|
+
still assignable to the widened signature, and a handler written against the
|
|
966
|
+
widened signature was already assignable to the narrow one — its minimum
|
|
967
|
+
argument count is still one. The second parameter is spelled `any` rather than
|
|
968
|
+
`HandleClickModifiers`, which is the difference that matters for callers: the
|
|
969
|
+
hook's own option names that interface and therefore refuses a handler whose
|
|
970
|
+
second parameter is annotated narrower (objectui#9360 documents that class and
|
|
971
|
+
the one-line remedy). These faces refuse nothing. A host that discovered the
|
|
972
|
+
payload from the implementation and annotated it `React.MouseEvent` — which is
|
|
973
|
+
what actually arrives — keeps compiling. `any` is also the spelling
|
|
974
|
+
`ObjectKanbanSchema.onCardClick` already carries for this same payload
|
|
975
|
+
(objectui#9341) and the one `BaseSchema`'s own `onClick` / `onChange` /
|
|
976
|
+
`onSubmit` use, and it is forced on the published twins in `@object-ui/types`,
|
|
977
|
+
which may not name a type that lives in a package depending on them.
|
|
978
|
+
|
|
979
|
+
**Runtime behaviour is unchanged.** Nothing is newly called and nothing newly
|
|
980
|
+
passes an argument; only the declarations move.
|
|
981
|
+
|
|
982
|
+
Three declarations that share the name and the shape are deliberately NOT
|
|
983
|
+
widened, because the value flowing through them is not invoked with the
|
|
984
|
+
payload: `VirtualGrid.onRowClick`, whose second parameter is a row index;
|
|
985
|
+
`ManageViewsDialog.onRowClick`, which receives a view id; and the `data-table`
|
|
986
|
+
family (`DataTableSchema.onRowClick`, `ObjectDataTableSchema.onRowClick`),
|
|
987
|
+
whose renderer invokes with one argument. Widening those would have declared a
|
|
988
|
+
payload that never arrives.
|
|
989
|
+
|
|
990
|
+
### Patch Changes
|
|
991
|
+
|
|
992
|
+
- aa38e19: A timeline no longer crashes when its `titleField` or `descriptionField` names a lookup.
|
|
993
|
+
|
|
994
|
+
`ObjectTimeline` copied the raw `titleField` and `descriptionField` values onto each
|
|
995
|
+
item, and the renderer puts both in JSX. A lookup is a field like any other, and
|
|
996
|
+
`ObjectTimeline`'s own object fetch expands every declared relation, so a
|
|
997
|
+
lookup-typed title or description arrived as `{ id, name }`. React then threw
|
|
998
|
+
`Objects are not valid as a React child` as soon as the rows landed, and the whole
|
|
999
|
+
timeline failed to render.
|
|
1000
|
+
|
|
1001
|
+
The item mapping now derives the title and the description once, as display
|
|
1002
|
+
strings, through `@object-ui/core`'s `recordDisplayValueAt`, the resolver
|
|
1003
|
+
`ObjectMap` uses for the same two slots:
|
|
1004
|
+
|
|
1005
|
+
- an expanded lookup shows its display name;
|
|
1006
|
+
- a plain string, a number or a bare id shows as before;
|
|
1007
|
+
- a boolean shows as its string, where the old truthiness gate dropped `false` and
|
|
1008
|
+
drew an empty line for `true`;
|
|
1009
|
+
- a `0` shows inside its title or description line, where it used to be painted as
|
|
1010
|
+
a bare character beside it;
|
|
1011
|
+
- an empty or whitespace-only value, or an expanded record with no display name,
|
|
1012
|
+
shows no line, and surrounding whitespace is trimmed.
|
|
1013
|
+
|
|
1014
|
+
No schema or spec key changes. `ObjectTimeline.lookupDisplay-10530.test.tsx` pins
|
|
1015
|
+
each case above.
|
|
1016
|
+
- 02e6d36: Five more page blocks re-read when the data-invalidation bus (`notifyDataChanged` from `@object-ui/react`) reports a write to the object they read (objectui#10623). These blocks read neither `onMutation` nor the bus, so any write — through the data source or past it (a page action over raw HTTP, a flow, a server action) — showed only when something remounted them. Each fetch effect now names the `useDataInvalidation` nonce for its object; an unscoped change (`'*'`) matches too, and a change to another object does not.
|
|
1017
|
+
|
|
1018
|
+
- `@object-ui/plugin-timeline`: `object-timeline` re-reads its rows; a canvas that already shows rows stays mounted while the re-read runs.
|
|
1019
|
+
- `@object-ui/plugin-list`: `object-gallery` re-reads its cards; collapsed groups stay collapsed.
|
|
1020
|
+
- `@object-ui/plugin-map`: `object-map` re-reads the markers it is showing without its loading placeholder, so the map stays mounted and the camera stays where the user left it. If that re-read fails, the last markers stay on the map and the failure is logged to the console, as `ObjectGantt`'s background refresh does. A changed query still shows the placeholder and re-fits the camera, even when a bus event arrives with it. Two older faults in the same fetch are fixed as well: a slow earlier answer can no longer overwrite a newer one, and a load that succeeds now takes the map off an earlier error screen.
|
|
1021
|
+
- `@object-ui/components`: `element:number` re-reads its aggregate and `element:repeater` its rows.
|
|
1022
|
+
|
|
1023
|
+
Rows a host hands these blocks (`data`, `bind`, authored `items`, an inline `value` set) are still the host's to refresh; only the blocks' own queries follow the bus.
|
|
1024
|
+
- d435e96: fix(plugin-timeline): a failed load no longer keeps `ObjectTimeline` on its error screen after a later load succeeds (objectui#10663)
|
|
1025
|
+
|
|
1026
|
+
`ObjectTimeline` set `error` when its fetch failed, and the render returns the
|
|
1027
|
+
error screen early whenever `error` is set. Nothing ever cleared it. Every later
|
|
1028
|
+
load that succeeded still wrote its rows, but the timeline stayed on the error
|
|
1029
|
+
screen until it remounted. Since objectui#10623 the timeline re-reads on every
|
|
1030
|
+
data-invalidation event, so one failed background re-read was enough.
|
|
1031
|
+
|
|
1032
|
+
The current run of the fetch now clears the error when it commits rows: those
|
|
1033
|
+
rows answer the current query, so the earlier failure no longer describes the
|
|
1034
|
+
screen. This is the rule objectui#10578 set for `ObjectGantt`. The error is not
|
|
1035
|
+
cleared when a run starts; it stays until rows land.
|
|
1036
|
+
|
|
1037
|
+
Only the current run writes the error at all. A run that a newer one has
|
|
1038
|
+
superseded can no longer clear the current run's error, or put the error screen
|
|
1039
|
+
over the current run's rows.
|
|
1040
|
+
|
|
1041
|
+
A failed background re-read is still reported: the timeline has no silent mode,
|
|
1042
|
+
so it shows the error screen rather than keeping the last good rows, and the
|
|
1043
|
+
next re-read that succeeds takes the screen back.
|
|
1044
|
+
- 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:
|
|
1045
|
+
|
|
1046
|
+
- `object-calendar`, `object-map` and `object-tree`, on both the object query and the inline (`provider: 'value'`) query;
|
|
1047
|
+
- `object-gantt`, `object-kanban` and `object-timeline`;
|
|
1048
|
+
- `record:related_list` and `record:line_items`, where the node's own filter is combined with the parent-record condition;
|
|
1049
|
+
- the `element:repeater`, `element:number` (both the `aggregate` filter and the `find` fallback) and `element:record_picker` page elements.
|
|
1050
|
+
|
|
1051
|
+
`list-view`, `object-grid` and `object-gallery` already did this, and are unchanged.
|
|
1052
|
+
|
|
1053
|
+
**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.
|
|
1054
|
+
|
|
1055
|
+
What changes for an app:
|
|
1056
|
+
|
|
1057
|
+
- A filter with no placeholders reaches the query as before, unchanged.
|
|
1058
|
+
- 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.
|
|
1059
|
+
- 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.
|
|
1060
|
+
|
|
1061
|
+
`@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.
|
|
1062
|
+
- 93a5585: fix(plugin-timeline): an `object-timeline` block shows the rows of its current query, not an earlier answer that arrived late (objectui#10684)
|
|
1063
|
+
|
|
1064
|
+
`ObjectTimeline` numbers the runs of its fetch, but only its `error` writes read
|
|
1065
|
+
that number (objectui#10663). The rows and the loading flag were written by every
|
|
1066
|
+
run. When the query changed while a read was in flight (a new filter, sort or
|
|
1067
|
+
object, or a data-invalidation re-read), the earlier answer could arrive after
|
|
1068
|
+
the current one and replace the current rows. An earlier read that settled first
|
|
1069
|
+
also cleared the loading skeleton while the current read was still in flight.
|
|
1070
|
+
|
|
1071
|
+
Only the current run writes the rows and clears the loading flag now. An answer
|
|
1072
|
+
from a superseded run is dropped when it arrives. The current run still clears
|
|
1073
|
+
the loading flag on every exit, including a failed read.
|
|
1074
|
+
- e239161: docs(plugin-timeline): the README's "Schema-Driven Usage" example is now a document the validator accepts
|
|
1075
|
+
|
|
1076
|
+
The example spelled its node `component: 'timeline'`. Every node in the protocol
|
|
1077
|
+
is keyed by `type`, so `safeValidateSchema` — the call `objectui validate` makes —
|
|
1078
|
+
refused the document exactly as a reader would copy it (`invalid_union` at
|
|
1079
|
+
`type`), and rendering it painted the registry's "Unknown component type" panel
|
|
1080
|
+
instead of a timeline. The README ships in this package's tarball, so the wrong
|
|
1081
|
+
spelling was on the npm landing page (objectui#10824).
|
|
1082
|
+
|
|
1083
|
+
The node is now `type: 'timeline'`. The rest of the example already fits the item
|
|
1084
|
+
element objectui#6356 declared — a feed item with `time`, `title`, `description`
|
|
1085
|
+
and `variant` — so nothing else in it moves.
|
|
1086
|
+
|
|
1087
|
+
A new pin extracts that block from the README on every run and feeds it to
|
|
1088
|
+
`safeValidateSchema` and to the strict authoring face, so the example cannot drift
|
|
1089
|
+
from the schema again without a test going red. No source or behaviour change.
|
|
1090
|
+
- 200ceef: A `plugin-timeline:timeline` node no longer writes its own schema onto the
|
|
1091
|
+
page as HTML attributes (objectui#10841).
|
|
1092
|
+
|
|
1093
|
+
`TimelineRenderer` collected every prop it did not name and spread them onto
|
|
1094
|
+
the root element of each variant. Created through `SchemaRenderer`, that bag
|
|
1095
|
+
holds every node key left after `SchemaRenderer` strips its metadata keys, so
|
|
1096
|
+
the rendered timeline carried `items="[object Object]"`, `variant="vertical"`,
|
|
1097
|
+
`dateformat="long"` and, on a gantt, `scale` / `rowlabel` / `mindate` /
|
|
1098
|
+
`maxdate`. React also logged an unknown-prop warning for each camelCase key.
|
|
1099
|
+
The renderer reads all of those keys off `schema`, so nothing it draws
|
|
1100
|
+
changes.
|
|
1101
|
+
|
|
1102
|
+
The root now takes the same route as the converged renderers in
|
|
1103
|
+
`@object-ui/components`: the bag goes through `toDomProps`, the SDUI widget
|
|
1104
|
+
contract's DOM pass-through in `@object-ui/core`, and `style` is forwarded by
|
|
1105
|
+
name. That keeps the `data-obj-id` / `data-obj-type` locator, the
|
|
1106
|
+
`data-testid` an authored `testId` promises, the resolved `aria-*` / `role`,
|
|
1107
|
+
`id`, `tabIndex`, and the host event handlers that contract forwards
|
|
1108
|
+
(`dom-props.ts` declares the full set).
|
|
1109
|
+
|
|
1110
|
+
Dropped, and no longer on the root:
|
|
1111
|
+
|
|
1112
|
+
- every authored schema key;
|
|
1113
|
+
- the `disabled` attribute a disabled node used to put on the `ol` / `div`
|
|
1114
|
+
root, where it had no effect;
|
|
1115
|
+
- `name` / `label`, which `BaseSchema` declares but which have no effect on an
|
|
1116
|
+
`ol` / `div`;
|
|
1117
|
+
- an authored `title`, which the timeline node does not declare. It is a
|
|
1118
|
+
global HTML attribute, so dropping it removes the native tooltip it used to
|
|
1119
|
+
put on the root.
|
|
1120
|
+
|
|
1121
|
+
`ObjectTimeline` hands `TimelineRenderer` its schema alone, so the object-bound
|
|
1122
|
+
timeline is unchanged. The prop type is unchanged.
|
|
1123
|
+
- 9e6619f: fix(plugin-timeline,core): the timeline's gantt axis draws a stored date-only day on that day in every viewer zone, and the formula date functions do their day arithmetic on the UTC calendar, as the server does (objectui#10866, slice 3)
|
|
1124
|
+
|
|
1125
|
+
- **Timeline, gantt variant.** Every date string the gantt branch reads now goes through `toDisplayDate` from `@object-ui/core`, the step its bar tooltip already takes: in the axis headers, the extent computed from the rows, the bar positions, the validity check and the check that the start is not after the end. A date-only value is local midnight of the day it names, and a value with a time part keeps its instant, which the axis places at its local hour in the viewer's day. A number or a `Date` is an instant and is read as before. West of UTC the headers no longer read the day before: a day axis over October 5th to 7th reads Oct 5, Oct 6, Oct 7, and the schema catalog's `gantt-style-timeline.json` reads Jan 2024 to Apr 2024, where it read Dec 2023, Jan 2024, Mar 2024, Apr 2024 in Los Angeles. So the axis now agrees with the bar tooltip. The computed extent is printed as the viewer's calendar day. An empty plan's one-day axis is the viewer's today, where it was the UTC day. A bar date naming a day its month does not have, such as `2026-02-30`, is now refused by the render-time "not a valid date" message, where it was rolled into March and drawn there. `generateTimeScaleHeaders`, which the package exports, reads a date-only `minDate` / `maxDate` the same way.
|
|
1126
|
+
- **Formula date functions.** `DATEADD`, `DATEDIFF` and `DATEFORMAT` in `@object-ui/core` now do a calendar day's arithmetic on the UTC calendar. A date-only value naming a day its month has is read as UTC midnight of that day, as before, and is now moved and read with UTC setters and getters, so what the three answer for a day no longer depends on the viewer's zone. `DATEADD` hands such a day moved by days, months or years back as `YYYY-MM-DD`, where it gave an instant string. Its months clamp to the target month's last day, as the server's `addMonths` does: `DATEADD('2026-01-31', 1, 'month')` is `2026-02-28`, where it was `2026-03-03T00:00:00.000Z` in every zone, and a year from February 29th is February 28th. West of UTC, `DATEFORMAT('2026-09-01', 'YYYY-MM-DD')` no longer prints `2026-08-31`, `DATEDIFF` in months or years counts between the stored days rather than the days before them (`DATEDIFF('2026-08-31', '2026-09-01', 'month')` read 0), and a day added across a DST change no longer lands an hour off midnight. A value with a time part is unchanged: it is still moved and read in the viewer's zone and comes back as an instant, so `DATEFORMAT` still prints an instant's clock in the viewer's zone. So is a date-only value naming a day its month does not have, which the engine rolls forward as before. `TODAY()` is unchanged.
|
|
1127
|
+
- eb97ce6: fix(plugin-timeline,plugin-charts,i18n): a stored date-only day reads as that day in every viewer zone on the timeline, on a chart's date axis and in the published date helpers (objectui#10866, slice 2)
|
|
1128
|
+
|
|
1129
|
+
These readers parsed a `YYYY-MM-DD` value with the engine's own `Date` parse, which reads it as UTC midnight, so every viewer west of UTC saw the day before. Each now reads the value through `toDisplayDate` from `@object-ui/core`, which rebuilds a date-only value at local midnight of the day it names. A value with a time part keeps its instant.
|
|
1130
|
+
|
|
1131
|
+
- **Timeline.** The object timeline's date bucket, its sort and the item date the renderer prints read the value that way. West of UTC an item due today no longer sits under "Overdue", one due tomorrow no longer sits under "Today", and the `short` and `long` item faces print the stored day. The `iso` face prints a date-only value's day from local getters, and an instant's UTC day as before. A day its month does not have, such as `2026-02-30`, is no longer rolled into March: the item sits under "No date", sorts with the dateless items, and its `short` and `long` faces are the ones an unparsable value already had. An unparsable value now sorts with the dateless items too, and the `iso` face prints such a value as written where it used to throw. The gantt variant's axis headers, extent and bar positions are not changed here, so west of UTC its bar tooltip, which prints through the same item-date function, now names the stored day while the axis above it still reads the day before, until a later slice of objectui#10866.
|
|
1132
|
+
- **Charts.** A date-only category on the x axis reads `Sep 1` for `2026-09-01`, and `Sep 2026` on a month-grained axis, in every zone. When the display locale is a tag `Intl` refuses, the tick still prints the stored day: it reads the local-midnight value with local getters, because its `toISOString()` would name the day before east of UTC. An instant's fallback keeps its UTC day. A date-only category naming a day its month does not have falls back to the raw category, the face any other non-date category gets, instead of the rolled day.
|
|
1133
|
+
- **i18n helpers.** `formatDate`, `formatDateTime`, `formatRelativeTime` and `formatDateSpec` read a date-only string as the day it names: `formatDateTime` shows midnight of that day, and `formatRelativeTime` counts to the start of it. `formatDateSpec` applies its `timeZone` to an instant only, and formats a date-only value in the local zone, where the shared step's local midnight reads back as its day; a `timeZone` west of UTC no longer turns `2026-09-01` into August 31st for every viewer. All four return a day its month does not have as the raw string. `formatRelativeTime` now returns an unparsable value as its string, the face the other three already gave one, where it used to throw a `RangeError`.
|
|
1134
|
+
- 2fb0f9a: fix(plugin-timeline): a gantt-variant timeline draws its headers and bars on one continuous axis, so each bar lines up under its header (objectui#11079)
|
|
1135
|
+
|
|
1136
|
+
- **Bars now sit under their headers.** The header row was one equal-width column per unit from the first date to the last date inclusive, while the bars were measured on the span from the first date to the last date, one unit shorter. So every bar after the first sat off its column: on a day axis over October 5th to 7th, the bar starting on the 6th was drawn halfway across the chart under a column that starts at one third. Both are now drawn on one axis, from the start of the first unit to the end of the last. A bar that starts on a day, a month or a quarter begins exactly where that unit's header begins.
|
|
1137
|
+
- **Each header is as wide as its unit is long.** Hour, day and week columns are equal. A month column is as wide as its days, so February is narrower than January, and a quarter or a year is as wide as its days. Across a daylight-saving change a day column is 23 or 25 hours wide, as the day is.
|
|
1138
|
+
- **Each unit starts on its boundary.** A month axis from January 15th to April 10th now has an April column, and one from January 31st no longer skips February. `generateTimeScaleHeaders`, which the package exports, returns these labels.
|
|
1139
|
+
- A task that starts and ends at the same instant is a zero-width bar at that instant, as it already was on any plan with two distinct dates. A plan whose only dates were one such day used to draw that bar across the whole chart.
|
|
1140
|
+
- c27b575: fix(plugin-timeline,types): a gantt-variant timeline draws a date-only end through the end of that day (objectui#11112)
|
|
1141
|
+
|
|
1142
|
+
- **A date-only `endDate` is inclusive.** A bar authored `2024-01-01` to `2024-01-31` now fills January and ends exactly where the February column begins. It used to end at the start of January 31st, one day short of its column. A bar that starts and ends on the same day is now one day wide, where it was zero wide. An end with a time part, or given as a number or a `Date`, is still an instant, and the bar ends exactly there, so a task that starts and ends at the same instant is still a zero-width bar at that instant.
|
|
1143
|
+
- **The computed axis reaches the end of every bar.** On an `hour` axis, the axis a gantt computes from its bars now runs through the last day of a date-only end, and to the hour of an instant end. It used to stop after the first hour of the last day, so those bars ran off the chart. A `minDate` / `maxDate` the author pins is still exactly the author's range, and the other scales gain no column.
|
|
1144
|
+
- The bar tooltip still prints the end as authored.
|
|
1145
|
+
- `TimelineGanttItemBar.endDate` in `@object-ui/types` now documents the inclusive reading, on both the TypeScript type and its zod description. What it accepts is unchanged.
|
|
1146
|
+
- 858eafb: fix(plugin-gantt,core,plugin-timeline): both gantt surfaces read a date-only end inclusively through one core rule, and a drag writes the same day back (objectui#11141)
|
|
1147
|
+
|
|
1148
|
+
**A widening: `@object-ui/core` gains two exports**, `toDisplayEndDate(value)` and `toInclusiveEndDay(end)`, on its published entry beside `toDisplayDate` (the same file, `utils/date-display.ts`, re-exported by `export *`). Nothing else in `@object-ui/core` is added, removed, renamed or retyped.
|
|
1149
|
+
|
|
1150
|
+
- **A date-only end is inclusive on the object gantt too.** `ObjectGantt` read a stored end like a start, as the named day's local midnight, so every bar was drawn one day short and a successor starting the next day stood one day after its predecessor. The schema catalog's own plans drew that way. A task from `2024-01-01` to `2024-01-15` now runs through January 15th, and a successor starting `2024-01-16` begins exactly where it ends, as the timeline's gantt already drew it (objectui#11112). A task whose date-only start and end name the same day is now one day long, where it was a zero-length milestone. An end with a time part is still an instant, and the bar ends exactly there. Baseline ends read the same way.
|
|
1151
|
+
- **One rule, in `@object-ui/core`.** `toDisplayEndDate` reads an end: a date-only value becomes the start of the next day (a calendar day, so 23 or 25 hours across a DST change), and anything else is read as `toDisplayDate` reads it. `toInclusiveEndDay` is its exact inverse: it names the last day a span ending at an instant runs through. The timeline's gantt and `ObjectGantt` both read their ends through the first, so they cannot drift apart again. A day whose OWN midnight does not exist in the viewer's zone (`America/Santiago` on 2026-09-06, which starts at 01:00) now ends at the next day's midnight; the timeline used to end it at 01:00 of that next day. A day whose NEXT midnight does not exist (2026-09-05 there) still ends at the next day's first hour, as it did.
|
|
1152
|
+
- **A drag writes the day the bar runs through.** A dragged or resized bar whose end lands on a day's midnight writes the day before it into a date-only end field, so reading, dragging and writing a stored `2024-01-15` leaves `2024-01-15`. This also holds under a business `timeZone` whose clock skips a midnight. A `datetime` end still writes its instant.
|
|
1153
|
+
- **The view names that day.** `GanttView`'s End column, row date line, tooltip, drag preview and inline editor now name the last day a bar runs through, and the tooltip's day count includes it. Pressing Enter on an untouched row in the inline editor commits the end it started with. An end inside a day still names that day, and a zero-length task still names its own day. An embedder that passes `GanttView` a `Date` end directly now sees that end named as the last day the bar covers. A local-midnight end is named as the day before, which is where its bar already stopped.
|
|
1154
|
+
- With `autoZoomToFilter: false`, the pinned range ends on the last day any task runs through, and no longer adds an empty day column after it.
|
|
1155
|
+
- 20d23be: The `object-timeline` / `view:timeline` `navigation` input description had three wording errors, and all three are corrected (objectui#11168 slice 3, from the contract record on objectui#8654 and the one on PR #11335).
|
|
1156
|
+
|
|
1157
|
+
- The reason `split` opens nothing (the timeline hands the split shell no main panel) was attached to `page` and `none` as well. It now applies to `split` alone.
|
|
1158
|
+
- The description said `openNewTab: true` "outranks the mode". That does not hold for `none`, which is checked first, as `preventNavigation` is. The description now says `openNewTab` outranks every mode except `none`.
|
|
1159
|
+
- The description said `page`, and a block without `mode`, open nothing on a timeline no parent view navigates for. Since objectui#11293 they open the record page through the record navigator the host publishes (the console publishes one on its custom pages, record pages and list views), and they open nothing only under a host that publishes none. The description now says so. An absent key still opens nothing.
|
|
1160
|
+
|
|
1161
|
+
The README and the docs page's navigation table and callout are corrected the same way. Behaviour is unchanged.
|
|
1162
|
+
|
|
1163
|
+
**Note, 2026-10-02 (objectui#11168 slice 5, shipping in this same release).**
|
|
1164
|
+
"They open nothing only under a host that publishes none" above holds for a
|
|
1165
|
+
timeline that names its `objectName`. Slice 5 made `objectName` optional, and
|
|
1166
|
+
on a timeline that names none, `page` and a block without `mode` open nothing
|
|
1167
|
+
under any host, while `new_window` and `openNewTab: true` open a tab at a slash
|
|
1168
|
+
and the entry's `id` alone, not the record page. The description now says both.
|
|
1169
|
+
- 39f4309: Published typings from every `vite-plugin-dts` package now carry an explicit extension on
|
|
1170
|
+
every relative specifier, and a type error in the declaration build now fails the build
|
|
1171
|
+
instead of being printed and ignored (objectui#5439, objectui#5483).
|
|
1172
|
+
|
|
1173
|
+
**Consumers on `moduleResolution: nodenext` or `node16` may see NEW type errors, and that
|
|
1174
|
+
is the fix working.** These packages re-export mostly through NAMED re-exports —
|
|
1175
|
+
`export { useObjectChat } from './useObjectChat'`. TypeScript could not follow the
|
|
1176
|
+
extensionless hop, but it still DECLARED the name, so the symbol resolved to a silent
|
|
1177
|
+
`any`. Nothing errored; consumers simply got no types. With the extension emitted, the
|
|
1178
|
+
symbol carries its real type, and any call site that was relying on the `any` now type
|
|
1179
|
+
checks for the first time. This is the mode that produced the 21 residual `TS7006` on
|
|
1180
|
+
`@object-ui/app-shell` reported against objectui#5365 — a type hole that opened quietly,
|
|
1181
|
+
unlike objectui#5365's own `export * from './ui'` packages where the same defect surfaced
|
|
1182
|
+
immediately as `TS2305: has no exported member`.
|
|
1183
|
+
|
|
1184
|
+
410 extensionless relative specifiers across 19 packages were emitted before this change;
|
|
1185
|
+
the count is now 0 in all 22 packages that build typings through `vite-plugin-dts`.
|
|
1186
|
+
`@object-ui/fields` was already clean — its sources write explicit `.js` specifiers — and
|
|
1187
|
+
is wired so it stays that way.
|
|
1188
|
+
|
|
1189
|
+
The second half changes no emitted output today: 22/22 packages built green unmodified, so
|
|
1190
|
+
making the declaration step's exit code honest turns nothing red. It changes what a FUTURE
|
|
1191
|
+
regression does — print and exit 0, versus fail the build.
|
|
1192
|
+
- d813e8b: The bare `timeline` component key is now owned by DECLARATION rather than by
|
|
1193
|
+
module-evaluation order (objectui#6353).
|
|
1194
|
+
|
|
1195
|
+
`packages/plugin-timeline` registers the same short name twice —
|
|
1196
|
+
`plugin-timeline:timeline` (`src/renderer.tsx`, the presentational renderer) and
|
|
1197
|
+
`view:timeline` (`src/index.tsx`, the object-bound `ObjectTimelineRenderer`). Neither
|
|
1198
|
+
passed `skipFallback`, so under `Registry.register` both also claimed the **bare**
|
|
1199
|
+
`timeline` key and the last module to evaluate won it. `src/index.tsx` re-exports
|
|
1200
|
+
`./renderer` (line 300) before its own `import` (line 307), so the presentational one
|
|
1201
|
+
registered first and the object-bound one overwrote it.
|
|
1202
|
+
|
|
1203
|
+
The resolved outcome was the intended one and **does not change here**: `type:
|
|
1204
|
+
'timeline'` still renders `ObjectTimelineRenderer`, which delegates inward to the
|
|
1205
|
+
presentational renderer. What changes is that it is now decided rather than inherited.
|
|
1206
|
+
Reordering those two lines would previously have handed `type: 'timeline'` to the
|
|
1207
|
+
presentational renderer, which reads none of the object-bound keys (`object`, `filter`,
|
|
1208
|
+
`sort`, `limit`) — an authored timeline would have stopped fetching, with no error and
|
|
1209
|
+
no failing test. The registry's own collision guard names this remedy in its warning
|
|
1210
|
+
text; this applies it.
|
|
1211
|
+
|
|
1212
|
+
`src/renderer.tsx` now registers with `skipFallback: true`, so only `view:timeline`
|
|
1213
|
+
claims the bare key, in any evaluation order. The presentational renderer stays
|
|
1214
|
+
reachable under its explicit `plugin-timeline:timeline` key, which is the lookup a
|
|
1215
|
+
presentational host already uses — no consumer-visible resolution changes.
|
|
1216
|
+
|
|
1217
|
+
`src/__tests__/timeline-bare-key-ownership.test.ts` is the half that outlives the fix:
|
|
1218
|
+
it fails if the declaration is dropped, if a third registration starts claiming the bare
|
|
1219
|
+
key, or if resolution becomes order-dependent again. It reads both registrations' real
|
|
1220
|
+
declared metadata back out of the registry and replays them into a fresh `Registry` in
|
|
1221
|
+
**both** orders, so order-independence is a property under test rather than a property
|
|
1222
|
+
of the file the test happens to import.
|
|
1223
|
+
- f7ea89b: An object-bound timeline with `variant: 'gantt'` refuses loudly instead of
|
|
1224
|
+
throwing (objectui#6655).
|
|
1225
|
+
|
|
1226
|
+
The two timeline item shapes are not interchangeable, and this path crossed
|
|
1227
|
+
them. `ObjectTimeline` maps each record to a flat FEED item — one per record,
|
|
1228
|
+
no nested `items` — while the renderer's gantt branch reads a gantt ROW
|
|
1229
|
+
(`row.items[].startDate`). Every `row.items` was therefore `undefined`,
|
|
1230
|
+
`calculateDateRange` reduced an empty list, `Math.min()` over it was `Infinity`,
|
|
1231
|
+
and `new Date(Infinity).toISOString()` threw `RangeError: Invalid time value`
|
|
1232
|
+
mid-render. There was no guard and no diagnostic — the component simply threw.
|
|
1233
|
+
|
|
1234
|
+
Per the maintainer ruling of 2026-08-29, the object-bound path now rejects
|
|
1235
|
+
`variant: 'gantt'` with an author-facing diagnostic naming the limitation
|
|
1236
|
+
(object-bound timelines render the feed variants; gantt needs literal rows, each
|
|
1237
|
+
carrying its own nested items). Composing real gantt rows from records was
|
|
1238
|
+
considered and NOT adopted; that capability stays open and unruled.
|
|
1239
|
+
|
|
1240
|
+
The refusal keys on whether the items were AUTHORED, not on the variant alone,
|
|
1241
|
+
so a literal gantt is untouched — including the bare `timeline` key that this
|
|
1242
|
+
component answers, which is what the in-repo catalog fixture
|
|
1243
|
+
`plugin-timeline/gantt-style-timeline.json` uses. The feed variants
|
|
1244
|
+
(`vertical` / `horizontal`) and the presentational `TimelineRenderer` are
|
|
1245
|
+
unchanged.
|
|
1246
|
+
|
|
1247
|
+
Side effect the ruling asked for: the gantt-only axis this path composes
|
|
1248
|
+
(`timeline.scale ?? scale`) is no longer silently inert on the gantt variant —
|
|
1249
|
+
an author who set it is now told why it has no effect, rather than getting a
|
|
1250
|
+
crash.
|
|
1251
|
+
- 3beef6d: The spec's `dataSource` element binding is now DECLARED by the blocks that read
|
|
1252
|
+
it, so the html tier stops reporting the one working saved-view spelling as
|
|
1253
|
+
`unknown-prop` (objectui#6678).
|
|
1254
|
+
|
|
1255
|
+
`PageComponentSchema.dataSource` — `{ object, view, filter, sort, limit }` — is
|
|
1256
|
+
the one spelling that resolves a saved view for an object-bound block. It works,
|
|
1257
|
+
and it drew the identical `unknown-prop` warning as the two spellings that do
|
|
1258
|
+
nothing (`viewName`, `view`), because `validateTree` looks a prop up in the
|
|
1259
|
+
block's declared `inputs` and no registration declared this key. On the tier
|
|
1260
|
+
built to accept AI-authored pages, where the diagnostic IS the contract, the
|
|
1261
|
+
only signal pointed away from the key that works.
|
|
1262
|
+
|
|
1263
|
+
Adopting the maintainer ruling of 2026-08-29 — option B **in the injection
|
|
1264
|
+
form**:
|
|
1265
|
+
|
|
1266
|
+
- `ELEMENT_DATA_SOURCE_INPUT` is the single declaration, in `@object-ui/core`
|
|
1267
|
+
beside the binding's own semantics; `Registry.register` emits it for any
|
|
1268
|
+
registration whose renderer passed through the new `elementDataSourceBlock()`
|
|
1269
|
+
seam. One mechanism, one copy — not a hand-kept declaration per block, which is
|
|
1270
|
+
the shape that drifts and that a new block forgets. The seam lives in
|
|
1271
|
+
`@object-ui/core` and is re-exported by `@object-ui/react` beside
|
|
1272
|
+
`ElementDataSourceGate` for discoverability; call sites take the core import,
|
|
1273
|
+
because a registration runs at module scope and this repo's suites partially
|
|
1274
|
+
mock `@object-ui/react`.
|
|
1275
|
+
- Seventeen renderers, in thirteen files across twelve packages, reach the seam
|
|
1276
|
+
and now publish the key to the save gate, the parser whitelist, the generated
|
|
1277
|
+
JSX authoring types and the block list. The card named nine blocks; the tree
|
|
1278
|
+
also has `plugin-grid`, `plugin-timeline`, two further `plugin-form` blocks and
|
|
1279
|
+
`element:record_picker` — nothing was hand-listed, so the mechanism covered
|
|
1280
|
+
them. `element:record_picker` consumes the gate's HOOK and status panels rather
|
|
1281
|
+
than the wrapper tag (its object lives under `properties`), and was found by a
|
|
1282
|
+
render probe rather than by reading sources.
|
|
1283
|
+
- `dataSource` on a block that does NOT read it (`flex`, `card`) still reports
|
|
1284
|
+
`unknown-prop`. Adding the key to `sdui-parser`'s `BASE_PROPS` was refused for
|
|
1285
|
+
exactly this reason — that set mirrors `BaseSchema`, and silencing the key
|
|
1286
|
+
everywhere would make the diagnostic lie in the other direction.
|
|
1287
|
+
- New `check:element-data-source-declaration` fails any source that consumes the
|
|
1288
|
+
gate without reaching the seam, so a block added tomorrow cannot forget.
|
|
1289
|
+
|
|
1290
|
+
Behaviour of the binding itself is unchanged — this is a declaration, not a
|
|
1291
|
+
resolution change. The saved view still resolves its columns, and an
|
|
1292
|
+
unresolvable `view` still fails loudly rather than widening to the object's full
|
|
1293
|
+
scope.
|
|
1294
|
+
|
|
1295
|
+
The spec/registry parity gates (repo-wide and the `record:related_list` per-block
|
|
1296
|
+
pin) now derive their accepted set from the WHOLE node contract rather than from
|
|
1297
|
+
`ComponentPropsMap[type]` alone. `PageComponentSchema` accepts and keeps
|
|
1298
|
+
`dataSource` on a page-component node — it is a node-level key, a sibling of
|
|
1299
|
+
`type` and `className`, not a per-block prop — so the gates' previous complaint
|
|
1300
|
+
was measurably wrong. Derived from the spec, not exempted, and both still
|
|
1301
|
+
discriminate against an invented key.
|
|
1302
|
+
- 15b1776: A gantt timeline with an EMPTY literal `items` array renders a zero-row grid instead of
|
|
1303
|
+
throwing (objectui#6750).
|
|
1304
|
+
|
|
1305
|
+
`calculateDateRange` reduced the empty list with no guard: `allDates` is `[]`, `Math.min()`
|
|
1306
|
+
over no arguments is `Infinity`, and `new Date(Infinity).toISOString()` throws `RangeError:
|
|
1307
|
+
Invalid time value` during render. Both entry points crashed identically — `TimelineRenderer`
|
|
1308
|
+
given `{ variant: 'gantt', items: [] }`, and `ObjectTimeline` given the same schema (an
|
|
1309
|
+
authored empty array is truthy, so it passes straight through as authored items).
|
|
1310
|
+
|
|
1311
|
+
An empty gantt is the **ordinary empty state of a valid schema**, not a malformed document.
|
|
1312
|
+
Any author or generator that builds `items` from a collection emits `items: []` the moment
|
|
1313
|
+
the collection is empty — a filtered project list with no matches, a fresh workspace, a plan
|
|
1314
|
+
whose rows are yet to be added.
|
|
1315
|
+
|
|
1316
|
+
The fix covers the whole gantt branch in one pass rather than the one `throw`, because
|
|
1317
|
+
patching only the crash site moves it two stops down the same branch:
|
|
1318
|
+
|
|
1319
|
+
- `calculateDateRange` returns a one-day sentinel range anchored on today when the rows carry
|
|
1320
|
+
no dates at all. The span is one day — the smallest coherent range — because how much time
|
|
1321
|
+
an empty gantt should show is a question about what an empty gantt should look like, which
|
|
1322
|
+
this change deliberately does not answer.
|
|
1323
|
+
- `generateTimeScaleHeaders` needed no change, and that is a measured verdict rather than an
|
|
1324
|
+
assumption: a degenerate `min === max` range is not inverted, so the loop runs once and
|
|
1325
|
+
every scale emits exactly one bucket. The empty gantt therefore gets a real one-column axis,
|
|
1326
|
+
not a header row with zero cells.
|
|
1327
|
+
- `calculateBarDimensions` gains a `totalDuration === 0` guard. A zero-width axis — every task
|
|
1328
|
+
starting and ending on the same day, or an author pinning `minDate === maxDate` — divided
|
|
1329
|
+
`0 / 0` into `NaN`, and the bar was handed `left: NaN%; width: NaN%`. That is not a crash
|
|
1330
|
+
and not a visible error: the CSSOM rejects both declarations, so React left the element with
|
|
1331
|
+
no `style` attribute at all and the bar rendered unpositioned and zero-width. On a zero-width
|
|
1332
|
+
axis every task covers the whole of it by definition, so the guard returns `{ start: 0,
|
|
1333
|
+
width: 100 }`.
|
|
1334
|
+
|
|
1335
|
+
An author-pinned `minDate` / `maxDate` is untouched by the sentinel: the gantt branch resolves
|
|
1336
|
+
`schema.minDate || dateRange.minDate`, so a pinned range with `items: []` renders exactly that
|
|
1337
|
+
range with no rows in it — most likely what the author wanted, and free.
|
|
1338
|
+
|
|
1339
|
+
**No product judgment about what an empty gantt should look like.** "Do not crash" is a
|
|
1340
|
+
correctness floor; whether the empty case should become the repo's standard empty-state panel
|
|
1341
|
+
instead of a zero-row grid is a separate, still-open question, and substituting one here would
|
|
1342
|
+
have been taking a decision that was left open on purpose. objectui#6655's object-bound gantt
|
|
1343
|
+
refusal is also untouched and stays keyed on whether items were authored, which is precisely
|
|
1344
|
+
why it does not fire on this case.
|
|
1345
|
+
- 4f3a1e2: fix(plugin-timeline): refuse an unusable gantt date range with a diagnostic that names the offending value
|
|
1346
|
+
|
|
1347
|
+
A gantt whose date range cannot be used now renders a `role="alert"` diagnostic
|
|
1348
|
+
naming the value that made it unusable, instead of crashing or drawing a chart
|
|
1349
|
+
that is confidently wrong. Two input classes, which failed in opposite
|
|
1350
|
+
directions:
|
|
1351
|
+
|
|
1352
|
+
- A date that does not parse threw `RangeError: Invalid time value` mid-render —
|
|
1353
|
+
the same crash site objectui#6750 guarded for the empty list, on a different
|
|
1354
|
+
input. This covers a malformed value (`startDate: 'not-a-date'`), an absent
|
|
1355
|
+
one, and an unparseable `minDate` / `maxDate` pinned on the schema.
|
|
1356
|
+
- An inverted pinned range (`minDate` after `maxDate`) drew a bar at
|
|
1357
|
+
`left: 157.9%; width: -4.3%` under a header row with zero cells, with no
|
|
1358
|
+
error and no diagnostic.
|
|
1359
|
+
|
|
1360
|
+
Valid gantts, the empty-list sentinel from objectui#6750 and the degenerate
|
|
1361
|
+
`minDate === maxDate` axis are unchanged.
|
|
1362
|
+
- e661d63: fix(plugin-timeline): refuse a `null` gantt date instead of drawing it at the epoch
|
|
1363
|
+
|
|
1364
|
+
`new Date(null).getTime()` is `0`, not `NaN` — the Unix epoch, not an invalid
|
|
1365
|
+
date — so a `null` `startDate` / `endDate` passed the objectui#6759 parse guard
|
|
1366
|
+
and reached the arithmetic as `1970-01-01`. One row item with `endDate: null`
|
|
1367
|
+
drew a 649-column axis spanning 1970 to 2024 and a bar at
|
|
1368
|
+
`left: 100%; width: -100%`, with no error and no diagnostic; a `null`
|
|
1369
|
+
`startDate`, or both null, drew a bar with entirely plausible geometry on an
|
|
1370
|
+
axis anchored in 1970 — a chart a reader would believe.
|
|
1371
|
+
|
|
1372
|
+
A `null` row date now renders the same `role="alert"` diagnostic objectui#6759
|
|
1373
|
+
established, naming the authored path and spelling the value as `null`. This is
|
|
1374
|
+
consistency with that card rather than a new policy: it already refuses the same
|
|
1375
|
+
absence spelled `undefined` (an omitted `endDate`), and which of the two a
|
|
1376
|
+
document carries is decided by the record mapping upstream, not by the author.
|
|
1377
|
+
|
|
1378
|
+
Unchanged: a `minDate` / `maxDate` pinned as `null` is falsy, so the caller
|
|
1379
|
+
discards it and the rows' own range still renders; numeric timestamps and `Date`
|
|
1380
|
+
instances still render; objectui#6750's empty-list sentinel and every valid
|
|
1381
|
+
gantt are untouched.
|
|
1382
|
+
- 85f6a60: Gantt dates are now judged by TYPE: a `string`, a finite `number`, or a `Date`
|
|
1383
|
+
— anything else is refused (objectui#6781, maintainer ruling 2026-08-30).
|
|
1384
|
+
|
|
1385
|
+
**This is a reject-direction change. Metadata that renders a chart today can
|
|
1386
|
+
stop rendering one.** `new Date(x)` runs ToPrimitive on anything, so values that
|
|
1387
|
+
are not dates at all used to become instants silently. These now produce the
|
|
1388
|
+
same loud diagnostic #6759 and #6770 already use — an alert naming the authored
|
|
1389
|
+
path and the offending value — instead of a chart:
|
|
1390
|
+
|
|
1391
|
+
| authored gantt date — a row item's `startDate` / `endDate`, or a **truthy** `minDate` / `maxDate` pin | before | after |
|
|
1392
|
+
| --- | --- | --- |
|
|
1393
|
+
| `false` | a 649-column axis starting Jan 1970, bar `width: -100%`, no warning | refused, named |
|
|
1394
|
+
| `true` | the same 1970 axis | refused, named |
|
|
1395
|
+
| `['2024-01-01']` | drew a normal-looking chart | refused, named |
|
|
1396
|
+
| `[0]` | drew a chart dated to the **year 2000** | refused, named |
|
|
1397
|
+
| `{ toString() { return '2024-01-01' } }` | drew a normal-looking chart | refused, named |
|
|
1398
|
+
| a `bigint` or a `symbol` | threw an uncaught `TypeError` mid-render | refused, named |
|
|
1399
|
+
|
|
1400
|
+
**Falsy pins are not affected, and never were.** A `minDate` / `maxDate` of
|
|
1401
|
+
`false`, `0` or `''` is discarded by the renderer's existing truthy-only `||`
|
|
1402
|
+
before anything judges it: such a pin never produced a 1970 axis and it is not
|
|
1403
|
+
refused now — the chart simply uses the range computed from the rows, exactly as
|
|
1404
|
+
it did before. The before/after readings above are row-date readings.
|
|
1405
|
+
|
|
1406
|
+
**If your gantt stops drawing after this upgrade, the diagnostic names the exact
|
|
1407
|
+
authored path** (e.g. `items[0].items[0].endDate`). Fix it at the producer: emit
|
|
1408
|
+
a date string (`'2024-01-01'`), a millisecond timestamp (`1704067200000`), or a
|
|
1409
|
+
`Date`. A boolean or an object arriving in a date field means an upstream
|
|
1410
|
+
mapping picked the wrong column — the chart was drawing 1970 from it before, and
|
|
1411
|
+
that render was never right.
|
|
1412
|
+
|
|
1413
|
+
**`0` keeps working, deliberately.** It is a legitimate epoch timestamp — under
|
|
1414
|
+
a millisecond encoding an author who writes `0` means 1970-01-01 — so it is
|
|
1415
|
+
accepted and renders exactly as it did before. `NaN` and `Infinity` are refused,
|
|
1416
|
+
as they already were.
|
|
1417
|
+
|
|
1418
|
+
Unchanged for everyone else: valid string / numeric / `Date` dates draw the same
|
|
1419
|
+
axis and the same bar geometry, an empty gantt keeps its one-bucket sentinel,
|
|
1420
|
+
and `null` / absent dates keep the identical diagnostic they got before.
|
|
1421
|
+
- 7fc5c3c: Spell a refused gantt date by a RULE, not by `String`
|
|
1422
|
+
|
|
1423
|
+
`spellGanttDateValue` fills the `{{value}}` hole of the unusable-gantt-date
|
|
1424
|
+
alert, whose job is to name the value the author wrote. Its `String(value)`
|
|
1425
|
+
fallback was written when nothing but `[object Object]`-shaped values could
|
|
1426
|
+
reach it; `85f6a6097`'s type rule routes the whole non-date type space
|
|
1427
|
+
through it, and it failed three ways — measured on `b458300ca`:
|
|
1428
|
+
|
|
1429
|
+
- it **VANISHES**: `endDate: []` rendered "endDate is , which is not a valid
|
|
1430
|
+
date", the value gone from its own sentence;
|
|
1431
|
+
- it **LIES**: `['2024-01-01']` read as `2024-01-01` and `[0]` / `0n` as `0` —
|
|
1432
|
+
a text that IS a valid date, and a number that IS an accepted one (`0` is a
|
|
1433
|
+
kept gantt date), so the author was told a correct-looking value was invalid
|
|
1434
|
+
with no hint the wrapper was at fault;
|
|
1435
|
+
- it **THROWS**: `{ toString() { throw } }`, a throwing `Symbol.toStringTag`
|
|
1436
|
+
getter and `Object.create(null)` each crashed the render outright. #6759 built
|
|
1437
|
+
this helper "total by construction" and `85f6a6097` made that load-bearing, but the
|
|
1438
|
+
type gate only stopped `new Date` from throwing — `String(value)` handed
|
|
1439
|
+
control to author code one line later, so the crash class moved into the
|
|
1440
|
+
speller instead of going away.
|
|
1441
|
+
|
|
1442
|
+
The rule now recorded on the helper:
|
|
1443
|
+
|
|
1444
|
+
Spell the value when the LANGUAGE owns its spelling.
|
|
1445
|
+
Name its TYPE when producing text would run AUTHOR code.
|
|
1446
|
+
|
|
1447
|
+
Every primitive keeps a spelling fixed by the grammar, so it is spelled as the
|
|
1448
|
+
author typed it — including `bigint`, which gains its `n` (`0n`, no longer the
|
|
1449
|
+
accepted `0`). A `Date` uses `Date.prototype.toString.call`, byte-identical to
|
|
1450
|
+
`String` but not hijackable by a subclass. Everything else is named:
|
|
1451
|
+
`an array`, `a function`, `an object`, chosen with `Array.isArray` and `typeof`,
|
|
1452
|
+
which read no author-controlled property.
|
|
1453
|
+
|
|
1454
|
+
`JSON.stringify` is refuted, not overlooked: it throws on a `bigint` and on a
|
|
1455
|
+
cycle, which would put the crash class straight back. A bounded rendering is
|
|
1456
|
+
refused on the same ground — even an element count is not total, because
|
|
1457
|
+
`Array.isArray` is true of a Proxy whose `length` trap throws.
|
|
1458
|
+
|
|
1459
|
+
Which values are refused is unchanged (that is objectui#6781's ruling), the
|
|
1460
|
+
`undefined` / `null` / quoted-string spellings pinned by #6759 and #6770 do not
|
|
1461
|
+
move, the shared inverted-range diagnostic reads identically, and no new i18n
|
|
1462
|
+
key is added — the article rides in the existing `{{value}}` hole.
|
|
1463
|
+
- c17446a: Gantt date type gate: judge the `[[DateValue]]` slot, not the prototype chain
|
|
1464
|
+
(objectui#7027).
|
|
1465
|
+
|
|
1466
|
+
`isGanttDateType` asked `value instanceof Date`, which answers "does this
|
|
1467
|
+
inherit from `Date.prototype`?" and not "is this a `Date`?". An object that
|
|
1468
|
+
inherits the prototype without owning the internal slot passed the gate,
|
|
1469
|
+
reached `new Date(value)`, ran ToPrimitive, and threw
|
|
1470
|
+
`TypeError: Method Date.prototype.toString called on incompatible receiver` —
|
|
1471
|
+
uncaught, mid-render, so the author got a blank screen where #6781's named
|
|
1472
|
+
diagnostic belongs. Three spellings crashed on `main`, measured:
|
|
1473
|
+
`Object.create(Date.prototype)`, that impostor behind a `Proxy` that throws on
|
|
1474
|
+
every get, and a `Proxy` with a throwing `getPrototypeOf` trap (`instanceof` is
|
|
1475
|
+
not total on its own terms either).
|
|
1476
|
+
|
|
1477
|
+
Both sites now ask a total brand test that invokes the builtin
|
|
1478
|
+
`Date.prototype.getTime` with `.call`: it reads the receiver's `[[DateValue]]`
|
|
1479
|
+
slot and nothing else, so no author getter runs, no `Symbol.toStringTag` is
|
|
1480
|
+
consulted, and no proxy trap fires. The two brand tests the finding suggested
|
|
1481
|
+
were measured and rejected — `Object.prototype.toString.call` performs
|
|
1482
|
+
`Get(O, @@toStringTag)` unconditionally, and `Number.isFinite(value.getTime())`
|
|
1483
|
+
calls the author's `getTime`, which would refuse a real `Date` subclass by
|
|
1484
|
+
dying on it. Both are pinned as red rows.
|
|
1485
|
+
|
|
1486
|
+
No change to which values are accepted: #6781's accept set
|
|
1487
|
+
(`string | finite number | Date`) is untouched, `new Date(NaN)` still passes
|
|
1488
|
+
the type gate and is still refused by the parse check with its `Invalid Date`
|
|
1489
|
+
spelling, and every newly-refused value is one no authored document can carry
|
|
1490
|
+
(ObjectUI metadata is JSON, which cannot spell a prototype).
|
|
1491
|
+
- 20c04b2: A gantt timeline whose rows are malformed now refuses to draw, naming the row,
|
|
1492
|
+
instead of crashing the render (objectui#7164, maintainer ruling A+).
|
|
1493
|
+
|
|
1494
|
+
`TimelineRenderer`'s gantt branch used to read the authored rows twice — once
|
|
1495
|
+
defensively in `findUnusableGanttDate`, once bare in `calculateDateRange` — and
|
|
1496
|
+
every input in the gap threw a `TypeError` mid-render from ordinary JSON:
|
|
1497
|
+
`items: [null]`, a row whose `items` is `5` / `true` / `{}` / an array-like
|
|
1498
|
+
object, or `items` itself not an array. The three readers (the date scan, the
|
|
1499
|
+
range computation and the render loop) now consume ONE verdict from
|
|
1500
|
+
`classifyGanttRows`, and a malformed shape renders the existing `role="alert"`
|
|
1501
|
+
refusal through a new diagnostic key,
|
|
1502
|
+
`timeline.gantt.unusableRange.malformedRow` — "items[0] is null, which is not
|
|
1503
|
+
a row shape" — never the `malformedDate` copy, which named the wrong fault.
|
|
1504
|
+
The key lands in `en` and the nine sibling locale packs.
|
|
1505
|
+
|
|
1506
|
+
`@object-ui/types` (minor — the accept set narrows): `TimelineSchema.items` no
|
|
1507
|
+
longer declares `z.array(z.any())`. Every element must be an object, and a
|
|
1508
|
+
gantt row's own `items`, when present, must be an array, so `validate` refuses
|
|
1509
|
+
`items: [null]` and `items: [{ items: 5 }]` at authoring time — before they
|
|
1510
|
+
reach a renderer. Feed items (`vertical` / `horizontal`) carry no `items` key
|
|
1511
|
+
and parse exactly as before; every in-repo `type: 'timeline'` fixture parses
|
|
1512
|
+
green on both sides of the change. Rows with no bars (`items: []`, a row
|
|
1513
|
+
without `items`) stay the ordinary empty state and still draw.
|
|
1514
|
+
- e75f4c9: `colorField` now means the same thing in the gantt, the calendar and the timeline
|
|
1515
|
+
(objectui#7243).
|
|
1516
|
+
|
|
1517
|
+
**The inversion this fixes.** `gantt.colorField` is documented as "field that drives the
|
|
1518
|
+
bar color", and the renderer passed the stored value straight into the bar's
|
|
1519
|
+
`backgroundColor`. Pointing the key at a select field therefore emitted
|
|
1520
|
+
`backgroundColor: "open"` — not a colour, so the browser dropped the declaration and
|
|
1521
|
+
every bar rendered identically. OMITTING the key was strictly better: the absent-key
|
|
1522
|
+
branch derived a real colour per status. Declaring the documented key was worse than not
|
|
1523
|
+
declaring it, with no error, warning or console message either way.
|
|
1524
|
+
|
|
1525
|
+
The same key also meant three different things across the three lenses: the timeline
|
|
1526
|
+
resolved the field's authored option `color`, the calendar hashed the raw value onto a
|
|
1527
|
+
fixed palette, and the gantt emitted the raw value. An author colouring three views by
|
|
1528
|
+
one field got three unrelated results, one of which was no colour at all.
|
|
1529
|
+
|
|
1530
|
+
**The ladder.** `@object-ui/core` gains `createFieldColorResolver` — the timeline's
|
|
1531
|
+
resolver, lifted so all three call it:
|
|
1532
|
+
|
|
1533
|
+
1. the field's own option `color` for the record's value;
|
|
1534
|
+
2. else the value itself when it already IS a colour literal (`#rgb`, `#rrggbb`,
|
|
1535
|
+
`#rrggbbaa`, `rgb(...)`, `hsl(...)`);
|
|
1536
|
+
3. else each renderer's own last rung, which is deliberately NOT shared — the gantt
|
|
1537
|
+
derives a semantic-token hex (a bar must be painted), the calendar keeps its
|
|
1538
|
+
theme-aware 8-stop hash (a soft tint, not a solid fill), the timeline draws its
|
|
1539
|
+
default marker.
|
|
1540
|
+
|
|
1541
|
+
**What changes for authors.** A gantt or calendar whose `colorField` points at a select
|
|
1542
|
+
field with authored option colours now paints those colours. A gantt value that is
|
|
1543
|
+
neither an option colour nor a colour literal now derives a colour instead of emitting
|
|
1544
|
+
an invalid CSS value — including a palette NAME (`red`), which now resolves to that
|
|
1545
|
+
palette's hex, the behaviour the key's own contract has always promised ("hex or
|
|
1546
|
+
semantic name") and the one `borderColorField` already had. `gantt.borderColorField`
|
|
1547
|
+
takes rung 1 as well, so an authored option colour reaches the alert stroke; it keeps
|
|
1548
|
+
today's behaviour otherwise and deliberately gains no derivation rung, since the stroke
|
|
1549
|
+
is opt-in and deriving one for every record would draw an alert on records that have
|
|
1550
|
+
none.
|
|
1551
|
+
|
|
1552
|
+
Calendars whose `colorField` points at a plain categorical field are unchanged: that
|
|
1553
|
+
value still reaches `CalendarView`'s deterministic hash exactly as before. The timeline
|
|
1554
|
+
is unchanged apart from accepting the 8-digit `#rrggbbaa` hex spelling the calendar
|
|
1555
|
+
already accepted.
|
|
1556
|
+
- 0b6b295: Gantt: a row that is not an object is now refused instead of drawn as an empty,
|
|
1557
|
+
unlabelled row (objectui#7364). `items: [0]`, `items: ['x']`, `items: [true]`
|
|
1558
|
+
and `items: [[]]` used to render a blank row with no word to the author, while
|
|
1559
|
+
`validate` already refused every one of them at authoring time. The renderer now
|
|
1560
|
+
agrees with `validate`: the chart shows the existing
|
|
1561
|
+
`timeline.gantt.unusableRange.malformedRow` diagnostic, naming the row's path
|
|
1562
|
+
and value (for example `items[0] is 0, which is not a row shape`). No new i18n
|
|
1563
|
+
key and no locale pack change. Well-formed object rows, a row with no `items`
|
|
1564
|
+
key and a row whose `items` is `null` draw exactly as before.
|
|
1565
|
+
- d327b9c: FLS-gate the `$expand` projection at the seven remaining `buildExpandFields`
|
|
1566
|
+
call sites (objectui#7429).
|
|
1567
|
+
|
|
1568
|
+
objectui#7215 / PR #7229 gated the two projection sites in its scope
|
|
1569
|
+
(`ObjectGrid`, `ListView`). objectui#7230 / PR #7428 gated four more
|
|
1570
|
+
(`ObjectCalendar`, `ObjectGantt`, `RecordDetailView`, `DetailView`). This
|
|
1571
|
+
closes the seven that were left: `ObjectKanban`, `ObjectTree`, `ObjectView`
|
|
1572
|
+
(the non-grid record-fetch effect), `ObjectMap`, `ObjectGallery`,
|
|
1573
|
+
`ObjectTimeline`, and the metadata-admin `PagePreview`'s record-binding fetch.
|
|
1574
|
+
|
|
1575
|
+
**All seven pass no column list at all**, which makes every one of them the
|
|
1576
|
+
sharp shape: `buildExpandFields` reads an absent column list as "no column
|
|
1577
|
+
restriction" and falls back to **every declared relation on the object**,
|
|
1578
|
+
denied ones included. So each of these components asked the server to resolve
|
|
1579
|
+
the object's full relation set by default, not by configuration — the
|
|
1580
|
+
ordinary shape of each surface, not a corner of it.
|
|
1581
|
+
|
|
1582
|
+
**`PagePreview` is the one site where the judged principal is not the page's
|
|
1583
|
+
eventual audience.** It calls the browser's own `fetch` with
|
|
1584
|
+
`credentials: 'include'` rather than `DataSource.find`, so it runs under
|
|
1585
|
+
whichever session is loading the Studio preview. Gating on that same session's
|
|
1586
|
+
`usePermissions()` is still the correct principal: it is exactly the request
|
|
1587
|
+
the browser is about to make, on its own credentials, regardless of who later
|
|
1588
|
+
opens the published page.
|
|
1589
|
+
|
|
1590
|
+
**Reproduced before it was fixed**, as a failing test per site (and, for the
|
|
1591
|
+
two sites — `ObjectView`, `PagePreview` — where the gate was implemented
|
|
1592
|
+
before its test was run red, a reverse-verification: the gate was reverted,
|
|
1593
|
+
all four denial-and-set pins on each went red, and the two deferral/positive
|
|
1594
|
+
control pins stayed green, before the gate was restored).
|
|
1595
|
+
|
|
1596
|
+
**Grading, measured rather than assumed** — the same reading objectui#6898,
|
|
1597
|
+
#7215 and #7230 recorded: against ObjectStack's own server this is
|
|
1598
|
+
defence-in-depth, not a live disclosure. `plugin-security`'s
|
|
1599
|
+
`FieldMasker.maskRecord` deletes every unreadable key from each returned row
|
|
1600
|
+
and objectql's expand path writes the resolved record back under that same
|
|
1601
|
+
key, so one statement removes the expanded object and the bare id alike; the
|
|
1602
|
+
expansion sub-read is itself gated (the referenced object's full CRUD + RLS +
|
|
1603
|
+
FLS treatment, objectstack#7626). It is load-bearing for any backend that does
|
|
1604
|
+
not strip, and the client-request side is real regardless.
|
|
1605
|
+
|
|
1606
|
+
**Nothing a permitted view did stops working.** The gate judges each site's
|
|
1607
|
+
`buildExpandFields` OUTPUT, which contains only the object's declared
|
|
1608
|
+
reference-bearing fields, so the "`checkField` answers false for an
|
|
1609
|
+
undeclared key" trap cannot be reached. An unanswered permission policy
|
|
1610
|
+
filters nothing. `buildExpandFields` itself is unchanged.
|
|
1611
|
+
|
|
1612
|
+
`@object-ui/permissions` is added to `dependencies` for `plugin-kanban`,
|
|
1613
|
+
`plugin-tree`, `plugin-map`, `plugin-timeline`, and `plugin-view` — the fifth
|
|
1614
|
+
one objectui#7429's own dependency count missed (it named four); `plugin-list`
|
|
1615
|
+
and `app-shell` already had it.
|
|
1616
|
+
- c6198c2: **Breaking for authored metadata:** `ComponentInput.label`, `ComponentInput.defaultValue` and
|
|
1617
|
+
`ComponentInput.advanced` are RETIRED on both faces (objectui#7493 item ① and objectui#7781;
|
|
1618
|
+
maintainer ruling A of 2026-09-06, immediate, no deprecation window; ADR-0049 enforce-or-remove).
|
|
1619
|
+
They are the three keys the manifest serializer does not forward, and nothing read them on any
|
|
1620
|
+
publication or consumption path.
|
|
1621
|
+
|
|
1622
|
+
No manifest ever published them, so no consumer could ever have read them. `sdui-parser`'s
|
|
1623
|
+
serializer (`packages/sdui-parser/src/index.ts`) forwards exactly seven keys per input — `name`,
|
|
1624
|
+
`type`, `of`, `required`, `enum`, `binding`, `description` — so a value authored under any of the three
|
|
1625
|
+
never reached `sdui.manifest.json`, the generated JSX `.d.ts`, or a diagnostic; its boundary type
|
|
1626
|
+
has no slot for them; the registry's data-source seam reads `name` only; and neither the designer
|
|
1627
|
+
nor the app-shell inspectors consult registry `inputs` at all. A structural census over every
|
|
1628
|
+
`inputs:` array in the repository (re-measured on this change's merge-base, `name` 951 and `type`
|
|
1629
|
+
951 as the controls) counted the writes: `label` 908, `defaultValue` 245, `advanced` 9 — written on
|
|
1630
|
+
nearly every registration, read by nothing.
|
|
1631
|
+
|
|
1632
|
+
FROM → TO, per key — all three **TOMBSTONED, not removed**, because the route was measured on
|
|
1633
|
+
the built face before it was chosen: `ComponentInputSchema` is a non-strict `z.object`, and an
|
|
1634
|
+
undeclared key parses GREEN and is silently STRIPPED, so a deletion would have swallowed 1,162
|
|
1635
|
+
authored values in silence. The tombstone is what makes the refusal loud and by name.
|
|
1636
|
+
|
|
1637
|
+
- `label?: string` → `label?: never` on the interface, `retirementTombstone()` on the Zod mirror.
|
|
1638
|
+
Migration: delete the key. An input is identified by its `name` on every path that reaches it;
|
|
1639
|
+
nothing ever rendered a label for it.
|
|
1640
|
+
- `defaultValue?: any` → `defaultValue?: never` / `retirementTombstone()`. Migration: delete the
|
|
1641
|
+
key. The renderer's own fallback read IS the default; tell the author about it in `description`,
|
|
1642
|
+
which IS published. (Tightening the type to `unknown` was ruled out: it closes no error class,
|
|
1643
|
+
since nothing reads the value.)
|
|
1644
|
+
- `advanced?: boolean` → `advanced?: never` / `retirementTombstone()`. Migration: delete the key.
|
|
1645
|
+
No designer surface ever hid an "advanced" input; there is nothing to write instead.
|
|
1646
|
+
|
|
1647
|
+
The retirement kit: `?: never` on `ComponentInput` (`packages/types/src/base.ts`), so authoring one
|
|
1648
|
+
is a `tsc` error at the registration site; `retirementTombstone()` on `ComponentInputSchema`
|
|
1649
|
+
(`packages/types/src/zod/base.zod.ts`), so an authored value is REFUSED at parse time with
|
|
1650
|
+
`code: 'invalid_type'`, the key named in the issue `path`, and the migration note as the message
|
|
1651
|
+
(one string, both channels). Pinned in
|
|
1652
|
+
`packages/types/src/__tests__/component-input-retired-keys-7493.test.ts`, which also holds a
|
|
1653
|
+
tree-scoped absence census over every `inputs:` array under `packages/**` and `apps/**`.
|
|
1654
|
+
|
|
1655
|
+
Accept-set change, stated plainly for reviewers: a document that sets any of the three keys on a
|
|
1656
|
+
`ComponentInput` used to parse GREEN (the value was then dropped by the serializer) and now parses
|
|
1657
|
+
RED. Every in-repo authoring site — 1,199 keys across 110 registration files, the three standalone
|
|
1658
|
+
`ComponentInput[]` arrays and the two named input arrays `tsc` found included — is deleted in the same change, as the ruling's split rule
|
|
1659
|
+
requires; the `WidgetRegistry` seam no longer copies the widget-manifest values onto the synthesized
|
|
1660
|
+
`ComponentInput` (they fed nothing), and the data-source declaration `ELEMENT_DATA_SOURCE_INPUT`
|
|
1661
|
+
drops its `label`. The patch entries on the other packages record exactly that: their registrations
|
|
1662
|
+
stop authoring inert keys, with no runtime or published-manifest change.
|
|
1663
|
+
|
|
1664
|
+
The nine test files that read `defaultValue` off a registration were re-pinned against the
|
|
1665
|
+
renderer's ACTUAL default (its own fallback read, or the `defaultProps` it ships) instead of the
|
|
1666
|
+
declaration that went away; two assertions that only restated the shadow default were dropped with
|
|
1667
|
+
the reason on the line.
|
|
1668
|
+
|
|
1669
|
+
The in-repo zero is what was measured. Whether anything OUTSIDE this repository writes these keys
|
|
1670
|
+
is not measurable from here (the objectui#5674 limit); converting such a write from a silent drop
|
|
1671
|
+
into a named refusal is exactly what the tombstones buy. `WidgetInput`'s own `label` /
|
|
1672
|
+
`defaultValue` / `advanced` (the widget-manifest face) stay declared and writable — nothing has
|
|
1673
|
+
ruled on that face; that it now has no reader either is recorded as objectui#7911.
|
|
1674
|
+
- 37043cf: `ObjectTimeline` waits for the object definition instead of querying twice
|
|
1675
|
+
(objectui#7895).
|
|
1676
|
+
|
|
1677
|
+
It was the last member of the set objectui#6482 converged on the shared
|
|
1678
|
+
settled-schema gate — `ObjectKanban`, `ObjectView`, `ObjectCalendar` and
|
|
1679
|
+
`ObjectTree` were named there, `ObjectGantt` was ask 2 of objectui#7225 — and
|
|
1680
|
+
nothing marked it a deliberate exclusion. It still held the object definition in
|
|
1681
|
+
a local `useState` fed by its own metadata effect, and listed that definition in
|
|
1682
|
+
the record-fetch effect's dependency array.
|
|
1683
|
+
|
|
1684
|
+
**User-visible.** Every object-bound timeline load issued **two** `find` calls
|
|
1685
|
+
instead of one: the first before the definition landed, with `buildExpandFields`
|
|
1686
|
+
seeing no fields and therefore carrying no `$expand` at all, and a second one
|
|
1687
|
+
after. Whenever the metadata read is the slower of the two — the common case on
|
|
1688
|
+
a cold metadata cache — the second call is not merely a wasted round trip but a
|
|
1689
|
+
**three-step paint**: raw foreign-key ids, back to the loading skeleton (the
|
|
1690
|
+
effect's re-run calls `setLoading(true)` and `loading` is an early return), then
|
|
1691
|
+
the expanded rows. After this change the timeline paints once, from a query that
|
|
1692
|
+
already carries its expansion.
|
|
1693
|
+
|
|
1694
|
+
Measured on the component with an instrumented renderer, one mount per hold,
|
|
1695
|
+
`getObjectSchema` held 0/1/2/3/4/5/6/7/8/9/10/15/25/50/100 ms, with
|
|
1696
|
+
`ObjectCalendar` and `ObjectGantt` as positive controls in the same run: before,
|
|
1697
|
+
2 `find` calls with expand sets `[null, ['owner']]`, 1 paint at the readiness
|
|
1698
|
+
predicate and 3 late writes after it at every hold from +3 ms up; after, 1 `find`
|
|
1699
|
+
carrying `['owner']`, 1 paint, 0 late writes, and a first-paint time that tracks
|
|
1700
|
+
the hold (8 ms at +3, 30 ms at +25, 105 ms at +100) where before it was a flat
|
|
1701
|
+
3-7 ms at every hold. Both controls read 1 paint / 0 late writes before and
|
|
1702
|
+
after.
|
|
1703
|
+
|
|
1704
|
+
The resolution half is now `useSettledSchema` from `@object-ui/react`, which
|
|
1705
|
+
settles on **every** exit — no source, no `getObjectSchema`, no object name, and
|
|
1706
|
+
a read that threw alike. That is what makes the gate safe: the replaced effect
|
|
1707
|
+
returned without settling on all four, which cost nothing while nothing waited on
|
|
1708
|
+
it and would have held a gated query open forever. Pinned by
|
|
1709
|
+
`ObjectTimeline.fetchGate-7895.test.tsx`, including a timeline whose adapter
|
|
1710
|
+
exposes no `getObjectSchema` and one whose definition read rejects — both still
|
|
1711
|
+
query, unexpanded.
|
|
1712
|
+
|
|
1713
|
+
Unlike the two sibling conversions, the metadata read is **not** disabled for a
|
|
1714
|
+
timeline whose items were authored inline: this component also reads the
|
|
1715
|
+
definition's fields for option colours and field labels on that path, where no
|
|
1716
|
+
record query is issued at all.
|
|
1717
|
+
- dc49246: Refuse a row cap the contract already refuses before it reaches `$top`, at the
|
|
1718
|
+
three read points that still forwarded one — `object-kanban`, `object-timeline`
|
|
1719
|
+
and each `record:reference_rail` entry (objectui#9925).
|
|
1720
|
+
|
|
1721
|
+
Each of these blocks spelled its row cap as a bare `?? DEFAULT`. `??` rejects
|
|
1722
|
+
only `null` and `undefined`, so a value the contract refuses was not nullish and
|
|
1723
|
+
survived as a real fetch window: it reached the adapter as `$top: 0`, the block
|
|
1724
|
+
asked the server for nothing, and the empty board / empty rail / empty card
|
|
1725
|
+
named no cause. A negative went out the same way, and a non-integer became a
|
|
1726
|
+
fractional window.
|
|
1727
|
+
|
|
1728
|
+
All three now go through one resolver per site, mirroring the shape objectui#9853
|
|
1729
|
+
landed on `ObjectGrid` and objectui#9897 repeated on `ListView` — one resolver at
|
|
1730
|
+
every entry is what keeps the answer single. A refused value is dropped, the
|
|
1731
|
+
site's own default is used, and one `console.warn` names the block, the object
|
|
1732
|
+
and the value. The warning is conditional and deduped: an absent `limit` and a
|
|
1733
|
+
usable one both stay silent, and one declaration warns once rather than once per
|
|
1734
|
+
render.
|
|
1735
|
+
|
|
1736
|
+
This closes BOTH entrances into these blocks, which is why the repair is at the
|
|
1737
|
+
read point. Each block reads one key, and two authoring shapes fill it: a
|
|
1738
|
+
`dataSource` binding lowers a named view's `pagination.pageSize` into it, and a
|
|
1739
|
+
block with no binding at all carries the authored `limit` straight through. A
|
|
1740
|
+
repair at the lowering layer would close only the first.
|
|
1741
|
+
|
|
1742
|
+
Refusing these is not a renderer choosing a meaning. `@objectstack/spec` declares
|
|
1743
|
+
every one of these members a positive integer — `object-kanban`'s `limit`, the
|
|
1744
|
+
element data source `limit` a binding lowers into `object-timeline`'s, and the
|
|
1745
|
+
rail entry's own `limit` on `ReferenceRailEntrySchema`.
|
|
1746
|
+
|
|
1747
|
+
⛔ No fallback literal changed. Each site keeps the default it already
|
|
1748
|
+
documented; the rail's was spelled inline twice and is now one named constant so
|
|
1749
|
+
its two read points cannot drift.
|
|
1750
|
+
- Updated dependencies [7b10bef]
|
|
1751
|
+
- Updated dependencies [97abedc]
|
|
1752
|
+
- Updated dependencies [b46c58f]
|
|
1753
|
+
- Updated dependencies [a507334]
|
|
1754
|
+
- Updated dependencies [ad694ac]
|
|
1755
|
+
- Updated dependencies [6f96fca]
|
|
1756
|
+
- Updated dependencies [afb2284]
|
|
1757
|
+
- Updated dependencies [3ac2de8]
|
|
1758
|
+
- Updated dependencies [0aacecc]
|
|
1759
|
+
- Updated dependencies [63f4f92]
|
|
1760
|
+
- Updated dependencies [777fca2]
|
|
1761
|
+
- Updated dependencies [c131d9e]
|
|
1762
|
+
- Updated dependencies [5f00ff4]
|
|
1763
|
+
- Updated dependencies [c9e073a]
|
|
1764
|
+
- Updated dependencies [7b395d8]
|
|
1765
|
+
- Updated dependencies [0879812]
|
|
1766
|
+
- Updated dependencies [8cedb0d]
|
|
1767
|
+
- Updated dependencies [6ce001a]
|
|
1768
|
+
- Updated dependencies [162621b]
|
|
1769
|
+
- Updated dependencies [4c6f549]
|
|
1770
|
+
- Updated dependencies [6cc910b]
|
|
1771
|
+
- Updated dependencies [061f5e8]
|
|
1772
|
+
- Updated dependencies [2dd4d3f]
|
|
1773
|
+
- Updated dependencies [e686f4d]
|
|
1774
|
+
- Updated dependencies [4ab4f1b]
|
|
1775
|
+
- Updated dependencies [b57107d]
|
|
1776
|
+
- Updated dependencies [e3ea4f9]
|
|
1777
|
+
- Updated dependencies [bb5d4ee]
|
|
1778
|
+
- Updated dependencies [dc666f7]
|
|
1779
|
+
- Updated dependencies [3335767]
|
|
1780
|
+
- Updated dependencies [8b1f066]
|
|
1781
|
+
- Updated dependencies [af243c1]
|
|
1782
|
+
- Updated dependencies [cff4b77]
|
|
1783
|
+
- Updated dependencies [961ceaa]
|
|
1784
|
+
- Updated dependencies [f3f4e4c]
|
|
1785
|
+
- Updated dependencies [a05c350]
|
|
1786
|
+
- Updated dependencies [1dbb993]
|
|
1787
|
+
- Updated dependencies [2b5f509]
|
|
1788
|
+
- Updated dependencies [808f339]
|
|
1789
|
+
- Updated dependencies [6cf5999]
|
|
1790
|
+
- Updated dependencies [274e14a]
|
|
1791
|
+
- Updated dependencies [8c10f4f]
|
|
1792
|
+
- Updated dependencies [90dac98]
|
|
1793
|
+
- Updated dependencies [6096f20]
|
|
1794
|
+
- Updated dependencies [544aca2]
|
|
1795
|
+
- Updated dependencies [ea02938]
|
|
1796
|
+
- Updated dependencies [a14fb23]
|
|
1797
|
+
- Updated dependencies [ae98f1d]
|
|
1798
|
+
- Updated dependencies [f98eddf]
|
|
1799
|
+
- Updated dependencies [ce6bd99]
|
|
1800
|
+
- Updated dependencies [a5b08c9]
|
|
1801
|
+
- Updated dependencies [86982ac]
|
|
1802
|
+
- Updated dependencies [cdefa2a]
|
|
1803
|
+
- Updated dependencies [0961d5e]
|
|
1804
|
+
- Updated dependencies [6276478]
|
|
1805
|
+
- Updated dependencies [5e67837]
|
|
1806
|
+
- Updated dependencies [ff14e29]
|
|
1807
|
+
- Updated dependencies [9b28151]
|
|
1808
|
+
- Updated dependencies [64563a9]
|
|
1809
|
+
- Updated dependencies [1a5003f]
|
|
1810
|
+
- Updated dependencies [09ab32b]
|
|
1811
|
+
- Updated dependencies [8acc51b]
|
|
1812
|
+
- Updated dependencies [ea9d17f]
|
|
1813
|
+
- Updated dependencies [45362a3]
|
|
1814
|
+
- Updated dependencies [2a943bf]
|
|
1815
|
+
- Updated dependencies [93a689d]
|
|
1816
|
+
- Updated dependencies [4357a27]
|
|
1817
|
+
- Updated dependencies [e5f4343]
|
|
1818
|
+
- Updated dependencies [3261e64]
|
|
1819
|
+
- Updated dependencies [f5178a2]
|
|
1820
|
+
- Updated dependencies [2ad3671]
|
|
1821
|
+
- Updated dependencies [8740e86]
|
|
1822
|
+
- Updated dependencies [d22b37b]
|
|
1823
|
+
- Updated dependencies [1daf477]
|
|
1824
|
+
- Updated dependencies [3d614ea]
|
|
1825
|
+
- Updated dependencies [6c2f3c5]
|
|
1826
|
+
- Updated dependencies [fb13e85]
|
|
1827
|
+
- Updated dependencies [c2d8659]
|
|
1828
|
+
- Updated dependencies [e0f8202]
|
|
1829
|
+
- Updated dependencies [ac2d6f1]
|
|
1830
|
+
- Updated dependencies [9fbbb17]
|
|
1831
|
+
- Updated dependencies [c3a26cc]
|
|
1832
|
+
- Updated dependencies [a66e58e]
|
|
1833
|
+
- Updated dependencies [d89492c]
|
|
1834
|
+
- Updated dependencies [9a5f998]
|
|
1835
|
+
- Updated dependencies [9327397]
|
|
1836
|
+
- Updated dependencies [17cc3a3]
|
|
1837
|
+
- Updated dependencies [02e6d36]
|
|
1838
|
+
- Updated dependencies [4758b33]
|
|
1839
|
+
- Updated dependencies [4758b33]
|
|
1840
|
+
- Updated dependencies [f905090]
|
|
1841
|
+
- Updated dependencies [9c78ebe]
|
|
1842
|
+
- Updated dependencies [9c78ebe]
|
|
1843
|
+
- Updated dependencies [12809a5]
|
|
1844
|
+
- Updated dependencies [7afc81d]
|
|
1845
|
+
- Updated dependencies [f9c06ef]
|
|
1846
|
+
- Updated dependencies [5ad3b88]
|
|
1847
|
+
- Updated dependencies [f9d772b]
|
|
1848
|
+
- Updated dependencies [97b6c21]
|
|
1849
|
+
- Updated dependencies [26ca2ad]
|
|
1850
|
+
- Updated dependencies [41ae65b]
|
|
1851
|
+
- Updated dependencies [baac95a]
|
|
1852
|
+
- Updated dependencies [13220af]
|
|
1853
|
+
- Updated dependencies [29b45f6]
|
|
1854
|
+
- Updated dependencies [39b8d51]
|
|
1855
|
+
- Updated dependencies [17b323e]
|
|
1856
|
+
- Updated dependencies [b956e69]
|
|
1857
|
+
- Updated dependencies [33e58d8]
|
|
1858
|
+
- Updated dependencies [256b4c9]
|
|
1859
|
+
- Updated dependencies [c5ec15c]
|
|
1860
|
+
- Updated dependencies [fec3b1a]
|
|
1861
|
+
- Updated dependencies [b8e0941]
|
|
1862
|
+
- Updated dependencies [0c50f18]
|
|
1863
|
+
- Updated dependencies [1dae95a]
|
|
1864
|
+
- Updated dependencies [e32dae1]
|
|
1865
|
+
- Updated dependencies [30b11ad]
|
|
1866
|
+
- Updated dependencies [4aebea0]
|
|
1867
|
+
- Updated dependencies [f976774]
|
|
1868
|
+
- Updated dependencies [3d6badf]
|
|
1869
|
+
- Updated dependencies [25cb364]
|
|
1870
|
+
- Updated dependencies [a60539b]
|
|
1871
|
+
- Updated dependencies [de1b879]
|
|
1872
|
+
- Updated dependencies [c6678b1]
|
|
1873
|
+
- Updated dependencies [0638322]
|
|
1874
|
+
- Updated dependencies [e3782d2]
|
|
1875
|
+
- Updated dependencies [db0beb2]
|
|
1876
|
+
- Updated dependencies [997ce38]
|
|
1877
|
+
- Updated dependencies [ae0b9d3]
|
|
1878
|
+
- Updated dependencies [ad1785c]
|
|
1879
|
+
- Updated dependencies [3b469c8]
|
|
1880
|
+
- Updated dependencies [990a2d6]
|
|
1881
|
+
- Updated dependencies [1c84036]
|
|
1882
|
+
- Updated dependencies [1c84036]
|
|
1883
|
+
- Updated dependencies [6650259]
|
|
1884
|
+
- Updated dependencies [4f8b7f8]
|
|
1885
|
+
- Updated dependencies [9e6619f]
|
|
1886
|
+
- Updated dependencies [f6ae5e2]
|
|
1887
|
+
- Updated dependencies [eb97ce6]
|
|
1888
|
+
- Updated dependencies [7343376]
|
|
1889
|
+
- Updated dependencies [b2683a2]
|
|
1890
|
+
- Updated dependencies [dded788]
|
|
1891
|
+
- Updated dependencies [b45d463]
|
|
1892
|
+
- Updated dependencies [54a7830]
|
|
1893
|
+
- Updated dependencies [f3135a4]
|
|
1894
|
+
- Updated dependencies [b5696d3]
|
|
1895
|
+
- Updated dependencies [3f9d926]
|
|
1896
|
+
- Updated dependencies [e978ed5]
|
|
1897
|
+
- Updated dependencies [6a7f24e]
|
|
1898
|
+
- Updated dependencies [b3c96d6]
|
|
1899
|
+
- Updated dependencies [8d0ca91]
|
|
1900
|
+
- Updated dependencies [c30c8dd]
|
|
1901
|
+
- Updated dependencies [244d516]
|
|
1902
|
+
- Updated dependencies [deca847]
|
|
1903
|
+
- Updated dependencies [ac15833]
|
|
1904
|
+
- Updated dependencies [ac15833]
|
|
1905
|
+
- Updated dependencies [e2dffc9]
|
|
1906
|
+
- Updated dependencies [328abeb]
|
|
1907
|
+
- Updated dependencies [dd0d78f]
|
|
1908
|
+
- Updated dependencies [24d3e65]
|
|
1909
|
+
- Updated dependencies [95a7c8d]
|
|
1910
|
+
- Updated dependencies [e227156]
|
|
1911
|
+
- Updated dependencies [cc4e476]
|
|
1912
|
+
- Updated dependencies [92970c4]
|
|
1913
|
+
- Updated dependencies [d570eaa]
|
|
1914
|
+
- Updated dependencies [4b742f4]
|
|
1915
|
+
- Updated dependencies [42687ba]
|
|
1916
|
+
- Updated dependencies [6cd8f66]
|
|
1917
|
+
- Updated dependencies [24a0f14]
|
|
1918
|
+
- Updated dependencies [797a30f]
|
|
1919
|
+
- Updated dependencies [b4075c0]
|
|
1920
|
+
- Updated dependencies [9b85600]
|
|
1921
|
+
- Updated dependencies [e327c89]
|
|
1922
|
+
- Updated dependencies [2eaf5be]
|
|
1923
|
+
- Updated dependencies [bf7ab35]
|
|
1924
|
+
- Updated dependencies [99878d8]
|
|
1925
|
+
- Updated dependencies [3c13675]
|
|
1926
|
+
- Updated dependencies [63ab761]
|
|
1927
|
+
- Updated dependencies [0eb9f36]
|
|
1928
|
+
- Updated dependencies [ae582b7]
|
|
1929
|
+
- Updated dependencies [51c2949]
|
|
1930
|
+
- Updated dependencies [a4b017e]
|
|
1931
|
+
- Updated dependencies [8732846]
|
|
1932
|
+
- Updated dependencies [559a2e2]
|
|
1933
|
+
- Updated dependencies [db11afd]
|
|
1934
|
+
- Updated dependencies [154075a]
|
|
1935
|
+
- Updated dependencies [582edef]
|
|
1936
|
+
- Updated dependencies [19f484f]
|
|
1937
|
+
- Updated dependencies [0a78a20]
|
|
1938
|
+
- Updated dependencies [615346d]
|
|
1939
|
+
- Updated dependencies [75dcc81]
|
|
1940
|
+
- Updated dependencies [55a12a8]
|
|
1941
|
+
- Updated dependencies [edfcf5a]
|
|
1942
|
+
- Updated dependencies [0a3e540]
|
|
1943
|
+
- Updated dependencies [c021b35]
|
|
1944
|
+
- Updated dependencies [f61dab1]
|
|
1945
|
+
- Updated dependencies [b0a05dd]
|
|
1946
|
+
- Updated dependencies [dd5ff19]
|
|
1947
|
+
- Updated dependencies [54997ff]
|
|
1948
|
+
- Updated dependencies [81f8498]
|
|
1949
|
+
- Updated dependencies [a782fa7]
|
|
1950
|
+
- Updated dependencies [1d6a23d]
|
|
1951
|
+
- Updated dependencies [0645133]
|
|
1952
|
+
- Updated dependencies [76e9df0]
|
|
1953
|
+
- Updated dependencies [0ecaa7d]
|
|
1954
|
+
- Updated dependencies [b24f93a]
|
|
1955
|
+
- Updated dependencies [6158e4c]
|
|
1956
|
+
- Updated dependencies [cff8641]
|
|
1957
|
+
- Updated dependencies [c27b575]
|
|
1958
|
+
- Updated dependencies [84b275c]
|
|
1959
|
+
- Updated dependencies [0e6e76b]
|
|
1960
|
+
- Updated dependencies [bf43afa]
|
|
1961
|
+
- Updated dependencies [385ebc5]
|
|
1962
|
+
- Updated dependencies [858eafb]
|
|
1963
|
+
- Updated dependencies [a8c5509]
|
|
1964
|
+
- Updated dependencies [c2a8d23]
|
|
1965
|
+
- Updated dependencies [0ffc423]
|
|
1966
|
+
- Updated dependencies [3cc4fe5]
|
|
1967
|
+
- Updated dependencies [cd5b19a]
|
|
1968
|
+
- Updated dependencies [cd5b19a]
|
|
1969
|
+
- Updated dependencies [17dc167]
|
|
1970
|
+
- Updated dependencies [20d23be]
|
|
1971
|
+
- Updated dependencies [20d23be]
|
|
1972
|
+
- Updated dependencies [2e3da72]
|
|
1973
|
+
- Updated dependencies [1263e40]
|
|
1974
|
+
- Updated dependencies [e6bc087]
|
|
1975
|
+
- Updated dependencies [9419df1]
|
|
1976
|
+
- Updated dependencies [8bab157]
|
|
1977
|
+
- Updated dependencies [a7557a7]
|
|
1978
|
+
- Updated dependencies [7d074ba]
|
|
1979
|
+
- Updated dependencies [6158e4c]
|
|
1980
|
+
- Updated dependencies [6158e4c]
|
|
1981
|
+
- Updated dependencies [52aad5c]
|
|
1982
|
+
- Updated dependencies [18d1a0a]
|
|
1983
|
+
- Updated dependencies [7fed09d]
|
|
1984
|
+
- Updated dependencies [58da8ae]
|
|
1985
|
+
- Updated dependencies [a8b9889]
|
|
1986
|
+
- Updated dependencies [138ad45]
|
|
1987
|
+
- Updated dependencies [138ad45]
|
|
1988
|
+
- Updated dependencies [5262f7d]
|
|
1989
|
+
- Updated dependencies [6aa029b]
|
|
1990
|
+
- Updated dependencies [2124d04]
|
|
1991
|
+
- Updated dependencies [be52115]
|
|
1992
|
+
- Updated dependencies [770cc5b]
|
|
1993
|
+
- Updated dependencies [1a88ce2]
|
|
1994
|
+
- Updated dependencies [a1a44d6]
|
|
1995
|
+
- Updated dependencies [e0a9c67]
|
|
1996
|
+
- Updated dependencies [5638529]
|
|
1997
|
+
- Updated dependencies [5638529]
|
|
1998
|
+
- Updated dependencies [d0fba91]
|
|
1999
|
+
- Updated dependencies [c476be0]
|
|
2000
|
+
- Updated dependencies [c82ff39]
|
|
2001
|
+
- Updated dependencies [6c3da53]
|
|
2002
|
+
- Updated dependencies [31987bd]
|
|
2003
|
+
- Updated dependencies [3c3ce15]
|
|
2004
|
+
- Updated dependencies [063119f]
|
|
2005
|
+
- Updated dependencies [e100589]
|
|
2006
|
+
- Updated dependencies [304f611]
|
|
2007
|
+
- Updated dependencies [e46ee77]
|
|
2008
|
+
- Updated dependencies [f9c8c4e]
|
|
2009
|
+
- Updated dependencies [6e9c8d2]
|
|
2010
|
+
- Updated dependencies [9547063]
|
|
2011
|
+
- Updated dependencies [3f6efd6]
|
|
2012
|
+
- Updated dependencies [55d18c6]
|
|
2013
|
+
- Updated dependencies [c4ab6d0]
|
|
2014
|
+
- Updated dependencies [0e9058b]
|
|
2015
|
+
- Updated dependencies [c4ab6d0]
|
|
2016
|
+
- Updated dependencies [5988b6b]
|
|
2017
|
+
- Updated dependencies [6158e4c]
|
|
2018
|
+
- Updated dependencies [00ccdf7]
|
|
2019
|
+
- Updated dependencies [9d9ed54]
|
|
2020
|
+
- Updated dependencies [4a1adb7]
|
|
2021
|
+
- Updated dependencies [4a1adb7]
|
|
2022
|
+
- Updated dependencies [50c73fe]
|
|
2023
|
+
- Updated dependencies [ca3de72]
|
|
2024
|
+
- Updated dependencies [83e3f83]
|
|
2025
|
+
- Updated dependencies [401611b]
|
|
2026
|
+
- Updated dependencies [2c0ddf2]
|
|
2027
|
+
- Updated dependencies [4abc0aa]
|
|
2028
|
+
- Updated dependencies [f560ded]
|
|
2029
|
+
- Updated dependencies [2b188fa]
|
|
2030
|
+
- Updated dependencies [b654d4e]
|
|
2031
|
+
- Updated dependencies [f68e0a0]
|
|
2032
|
+
- Updated dependencies [aea682a]
|
|
2033
|
+
- Updated dependencies [fcdc8ec]
|
|
2034
|
+
- Updated dependencies [2d576e4]
|
|
2035
|
+
- Updated dependencies [8366acc]
|
|
2036
|
+
- Updated dependencies [95e58a3]
|
|
2037
|
+
- Updated dependencies [9d7419b]
|
|
2038
|
+
- Updated dependencies [fc7db05]
|
|
2039
|
+
- Updated dependencies [9ed8d0f]
|
|
2040
|
+
- Updated dependencies [c73cdb5]
|
|
2041
|
+
- Updated dependencies [6f5719e]
|
|
2042
|
+
- Updated dependencies [d0097af]
|
|
2043
|
+
- Updated dependencies [432882b]
|
|
2044
|
+
- Updated dependencies [64dae8e]
|
|
2045
|
+
- Updated dependencies [b06e374]
|
|
2046
|
+
- Updated dependencies [06a8af5]
|
|
2047
|
+
- Updated dependencies [6a91586]
|
|
2048
|
+
- Updated dependencies [a04d7c6]
|
|
2049
|
+
- Updated dependencies [5ccc500]
|
|
2050
|
+
- Updated dependencies [f3c2bb0]
|
|
2051
|
+
- Updated dependencies [978507b]
|
|
2052
|
+
- Updated dependencies [778138e]
|
|
2053
|
+
- Updated dependencies [9801765]
|
|
2054
|
+
- Updated dependencies [9cebfca]
|
|
2055
|
+
- Updated dependencies [460575f]
|
|
2056
|
+
- Updated dependencies [d796c8d]
|
|
2057
|
+
- Updated dependencies [594704f]
|
|
2058
|
+
- Updated dependencies [d3995fe]
|
|
2059
|
+
- Updated dependencies [1b1d772]
|
|
2060
|
+
- Updated dependencies [d88e20f]
|
|
2061
|
+
- Updated dependencies [2d7304d]
|
|
2062
|
+
- Updated dependencies [636b236]
|
|
2063
|
+
- Updated dependencies [4172589]
|
|
2064
|
+
- Updated dependencies [d6d8fb9]
|
|
2065
|
+
- Updated dependencies [64d624d]
|
|
2066
|
+
- Updated dependencies [053fdc8]
|
|
2067
|
+
- Updated dependencies [41b7ce3]
|
|
2068
|
+
- Updated dependencies [ae476b8]
|
|
2069
|
+
- Updated dependencies [39f4309]
|
|
2070
|
+
- Updated dependencies [95bad12]
|
|
2071
|
+
- Updated dependencies [d2fb6ef]
|
|
2072
|
+
- Updated dependencies [7cd3987]
|
|
2073
|
+
- Updated dependencies [ee3b878]
|
|
2074
|
+
- Updated dependencies [e304a4e]
|
|
2075
|
+
- Updated dependencies [fda49e5]
|
|
2076
|
+
- Updated dependencies [490d9a9]
|
|
2077
|
+
- Updated dependencies [fc62bb4]
|
|
2078
|
+
- Updated dependencies [41df893]
|
|
2079
|
+
- Updated dependencies [0cba1b7]
|
|
2080
|
+
- Updated dependencies [00f3eb5]
|
|
2081
|
+
- Updated dependencies [1ec291c]
|
|
2082
|
+
- Updated dependencies [453dbaa]
|
|
2083
|
+
- Updated dependencies [95f8704]
|
|
2084
|
+
- Updated dependencies [f8cdbf2]
|
|
2085
|
+
- Updated dependencies [69a2163]
|
|
2086
|
+
- Updated dependencies [24e027e]
|
|
2087
|
+
- Updated dependencies [2c3cd1b]
|
|
2088
|
+
- Updated dependencies [e176053]
|
|
2089
|
+
- Updated dependencies [e30ed15]
|
|
2090
|
+
- Updated dependencies [90665e0]
|
|
2091
|
+
- Updated dependencies [8d3a529]
|
|
2092
|
+
- Updated dependencies [5ac2e2c]
|
|
2093
|
+
- Updated dependencies [194fae1]
|
|
2094
|
+
- Updated dependencies [7e19d03]
|
|
2095
|
+
- Updated dependencies [b08b7eb]
|
|
2096
|
+
- Updated dependencies [1e946c9]
|
|
2097
|
+
- Updated dependencies [546ddf7]
|
|
2098
|
+
- Updated dependencies [864154e]
|
|
2099
|
+
- Updated dependencies [b023625]
|
|
2100
|
+
- Updated dependencies [75bd83d]
|
|
2101
|
+
- Updated dependencies [44d075b]
|
|
2102
|
+
- Updated dependencies [40c479a]
|
|
2103
|
+
- Updated dependencies [971d387]
|
|
2104
|
+
- Updated dependencies [ee851c3]
|
|
2105
|
+
- Updated dependencies [6414dfd]
|
|
2106
|
+
- Updated dependencies [a8d5c71]
|
|
2107
|
+
- Updated dependencies [905b21f]
|
|
2108
|
+
- Updated dependencies [88e9109]
|
|
2109
|
+
- Updated dependencies [2c45966]
|
|
2110
|
+
- Updated dependencies [db3a600]
|
|
2111
|
+
- Updated dependencies [3a3db76]
|
|
2112
|
+
- Updated dependencies [0d723a3]
|
|
2113
|
+
- Updated dependencies [0c95d3d]
|
|
2114
|
+
- Updated dependencies [3e4fa2c]
|
|
2115
|
+
- Updated dependencies [b5b928a]
|
|
2116
|
+
- Updated dependencies [6fd2cf7]
|
|
2117
|
+
- Updated dependencies [5fa06c4]
|
|
2118
|
+
- Updated dependencies [52a43de]
|
|
2119
|
+
- Updated dependencies [195052f]
|
|
2120
|
+
- Updated dependencies [e4559d1]
|
|
2121
|
+
- Updated dependencies [2c71482]
|
|
2122
|
+
- Updated dependencies [129bcc5]
|
|
2123
|
+
- Updated dependencies [a26b9e4]
|
|
2124
|
+
- Updated dependencies [5ef9c4f]
|
|
2125
|
+
- Updated dependencies [46f0bb4]
|
|
2126
|
+
- Updated dependencies [06b82b8]
|
|
2127
|
+
- Updated dependencies [8ec11e1]
|
|
2128
|
+
- Updated dependencies [6f81384]
|
|
2129
|
+
- Updated dependencies [22ba927]
|
|
2130
|
+
- Updated dependencies [f8c70f4]
|
|
2131
|
+
- Updated dependencies [5d3a2d1]
|
|
2132
|
+
- Updated dependencies [8f1d995]
|
|
2133
|
+
- Updated dependencies [b362c1b]
|
|
2134
|
+
- Updated dependencies [f9c34df]
|
|
2135
|
+
- Updated dependencies [dddb942]
|
|
2136
|
+
- Updated dependencies [00c665e]
|
|
2137
|
+
- Updated dependencies [29754cf]
|
|
2138
|
+
- Updated dependencies [d7de534]
|
|
2139
|
+
- Updated dependencies [3c2b6f7]
|
|
2140
|
+
- Updated dependencies [6e88630]
|
|
2141
|
+
- Updated dependencies [b84dc18]
|
|
2142
|
+
- Updated dependencies [ac8abb0]
|
|
2143
|
+
- Updated dependencies [9d86e1d]
|
|
2144
|
+
- Updated dependencies [3a5817f]
|
|
2145
|
+
- Updated dependencies [99a3c2d]
|
|
2146
|
+
- Updated dependencies [5961030]
|
|
2147
|
+
- Updated dependencies [f24de8b]
|
|
2148
|
+
- Updated dependencies [c8ea8af]
|
|
2149
|
+
- Updated dependencies [9602dc8]
|
|
2150
|
+
- Updated dependencies [3190414]
|
|
2151
|
+
- Updated dependencies [4e480f5]
|
|
2152
|
+
- Updated dependencies [38a123c]
|
|
2153
|
+
- Updated dependencies [299102e]
|
|
2154
|
+
- Updated dependencies [30c73cd]
|
|
2155
|
+
- Updated dependencies [830ed58]
|
|
2156
|
+
- Updated dependencies [d7acad6]
|
|
2157
|
+
- Updated dependencies [45a9aeb]
|
|
2158
|
+
- Updated dependencies [713db46]
|
|
2159
|
+
- Updated dependencies [c71e14d]
|
|
2160
|
+
- Updated dependencies [bf3a03c]
|
|
2161
|
+
- Updated dependencies [cb55718]
|
|
2162
|
+
- Updated dependencies [748494b]
|
|
2163
|
+
- Updated dependencies [5967be0]
|
|
2164
|
+
- Updated dependencies [831be72]
|
|
2165
|
+
- Updated dependencies [29cb85b]
|
|
2166
|
+
- Updated dependencies [3e028c8]
|
|
2167
|
+
- Updated dependencies [d0889e2]
|
|
2168
|
+
- Updated dependencies [ce503e5]
|
|
2169
|
+
- Updated dependencies [f20dcf0]
|
|
2170
|
+
- Updated dependencies [12402a9]
|
|
2171
|
+
- Updated dependencies [aff3d7a]
|
|
2172
|
+
- Updated dependencies [4ca30d0]
|
|
2173
|
+
- Updated dependencies [7a5da14]
|
|
2174
|
+
- Updated dependencies [fff9645]
|
|
2175
|
+
- Updated dependencies [9c3b7ce]
|
|
2176
|
+
- Updated dependencies [2c1c967]
|
|
2177
|
+
- Updated dependencies [9486ac6]
|
|
2178
|
+
- Updated dependencies [9486ac6]
|
|
2179
|
+
- Updated dependencies [4d5f9b4]
|
|
2180
|
+
- Updated dependencies [d6ceb8d]
|
|
2181
|
+
- Updated dependencies [dc4365c]
|
|
2182
|
+
- Updated dependencies [e321d52]
|
|
2183
|
+
- Updated dependencies [969ba84]
|
|
2184
|
+
- Updated dependencies [4c68077]
|
|
2185
|
+
- Updated dependencies [7977ff9]
|
|
2186
|
+
- Updated dependencies [3beef6d]
|
|
2187
|
+
- Updated dependencies [06b8c42]
|
|
2188
|
+
- Updated dependencies [46b9bc9]
|
|
2189
|
+
- Updated dependencies [45ac2cb]
|
|
2190
|
+
- Updated dependencies [b97790a]
|
|
2191
|
+
- Updated dependencies [dbd5194]
|
|
2192
|
+
- Updated dependencies [7c9b044]
|
|
2193
|
+
- Updated dependencies [d47de51]
|
|
2194
|
+
- Updated dependencies [3fe6463]
|
|
2195
|
+
- Updated dependencies [b392674]
|
|
2196
|
+
- Updated dependencies [4f3a1e2]
|
|
2197
|
+
- Updated dependencies [31ab372]
|
|
2198
|
+
- Updated dependencies [846889b]
|
|
2199
|
+
- Updated dependencies [2acd8e1]
|
|
2200
|
+
- Updated dependencies [26896c6]
|
|
2201
|
+
- Updated dependencies [67fc3b0]
|
|
2202
|
+
- Updated dependencies [33a3b3c]
|
|
2203
|
+
- Updated dependencies [b87f15b]
|
|
2204
|
+
- Updated dependencies [045d20b]
|
|
2205
|
+
- Updated dependencies [a2d2515]
|
|
2206
|
+
- Updated dependencies [c18d099]
|
|
2207
|
+
- Updated dependencies [adb2a86]
|
|
2208
|
+
- Updated dependencies [03380aa]
|
|
2209
|
+
- Updated dependencies [4562ea5]
|
|
2210
|
+
- Updated dependencies [3619792]
|
|
2211
|
+
- Updated dependencies [3561bd2]
|
|
2212
|
+
- Updated dependencies [bf97b98]
|
|
2213
|
+
- Updated dependencies [320374d]
|
|
2214
|
+
- Updated dependencies [b0d308d]
|
|
2215
|
+
- Updated dependencies [40f34b4]
|
|
2216
|
+
- Updated dependencies [8063bcb]
|
|
2217
|
+
- Updated dependencies [b74a859]
|
|
2218
|
+
- Updated dependencies [d4493fd]
|
|
2219
|
+
- Updated dependencies [240b80f]
|
|
2220
|
+
- Updated dependencies [77cb489]
|
|
2221
|
+
- Updated dependencies [bfaa158]
|
|
2222
|
+
- Updated dependencies [777e5c6]
|
|
2223
|
+
- Updated dependencies [0c386dd]
|
|
2224
|
+
- Updated dependencies [9e37d9b]
|
|
2225
|
+
- Updated dependencies [5ad86dd]
|
|
2226
|
+
- Updated dependencies [16a725f]
|
|
2227
|
+
- Updated dependencies [4dfdcc3]
|
|
2228
|
+
- Updated dependencies [6a449fc]
|
|
2229
|
+
- Updated dependencies [446d93d]
|
|
2230
|
+
- Updated dependencies [ecd9cb2]
|
|
2231
|
+
- Updated dependencies [98d4108]
|
|
2232
|
+
- Updated dependencies [0e3b3be]
|
|
2233
|
+
- Updated dependencies [a29ae2d]
|
|
2234
|
+
- Updated dependencies [220c18d]
|
|
2235
|
+
- Updated dependencies [00d3f09]
|
|
2236
|
+
- Updated dependencies [4388f71]
|
|
2237
|
+
- Updated dependencies [0b1ac58]
|
|
2238
|
+
- Updated dependencies [c93b4d5]
|
|
2239
|
+
- Updated dependencies [c1fe272]
|
|
2240
|
+
- Updated dependencies [3cab570]
|
|
2241
|
+
- Updated dependencies [8ad218d]
|
|
2242
|
+
- Updated dependencies [3e41187]
|
|
2243
|
+
- Updated dependencies [5f78953]
|
|
2244
|
+
- Updated dependencies [639114c]
|
|
2245
|
+
- Updated dependencies [639114c]
|
|
2246
|
+
- Updated dependencies [1490691]
|
|
2247
|
+
- Updated dependencies [1f31d3a]
|
|
2248
|
+
- Updated dependencies [d1842ab]
|
|
2249
|
+
- Updated dependencies [78ca238]
|
|
2250
|
+
- Updated dependencies [d8ec8d6]
|
|
2251
|
+
- Updated dependencies [351eb31]
|
|
2252
|
+
- Updated dependencies [866cd1d]
|
|
2253
|
+
- Updated dependencies [20c04b2]
|
|
2254
|
+
- Updated dependencies [01c9023]
|
|
2255
|
+
- Updated dependencies [48c19bd]
|
|
2256
|
+
- Updated dependencies [a6d8b8d]
|
|
2257
|
+
- Updated dependencies [4b5bb95]
|
|
2258
|
+
- Updated dependencies [b652514]
|
|
2259
|
+
- Updated dependencies [adbda1b]
|
|
2260
|
+
- Updated dependencies [adbda1b]
|
|
2261
|
+
- Updated dependencies [8952395]
|
|
2262
|
+
- Updated dependencies [e2b3826]
|
|
2263
|
+
- Updated dependencies [0348bc9]
|
|
2264
|
+
- Updated dependencies [e8c553b]
|
|
2265
|
+
- Updated dependencies [2e32ed4]
|
|
2266
|
+
- Updated dependencies [3ed3eec]
|
|
2267
|
+
- Updated dependencies [7c3df8f]
|
|
2268
|
+
- Updated dependencies [a4514e8]
|
|
2269
|
+
- Updated dependencies [db3896c]
|
|
2270
|
+
- Updated dependencies [b9f5ff1]
|
|
2271
|
+
- Updated dependencies [e75f4c9]
|
|
2272
|
+
- Updated dependencies [19f1639]
|
|
2273
|
+
- Updated dependencies [4704aa4]
|
|
2274
|
+
- Updated dependencies [47547d0]
|
|
2275
|
+
- Updated dependencies [1bee5d0]
|
|
2276
|
+
- Updated dependencies [858cd72]
|
|
2277
|
+
- Updated dependencies [cfc9b6d]
|
|
2278
|
+
- Updated dependencies [554f2b6]
|
|
2279
|
+
- Updated dependencies [72f55c9]
|
|
2280
|
+
- Updated dependencies [26e06d7]
|
|
2281
|
+
- Updated dependencies [669d71b]
|
|
2282
|
+
- Updated dependencies [ed27d7c]
|
|
2283
|
+
- Updated dependencies [52c8cf7]
|
|
2284
|
+
- Updated dependencies [2ceb43a]
|
|
2285
|
+
- Updated dependencies [7cdd2b9]
|
|
2286
|
+
- Updated dependencies [52c8cf7]
|
|
2287
|
+
- Updated dependencies [3399704]
|
|
2288
|
+
- Updated dependencies [71a4a53]
|
|
2289
|
+
- Updated dependencies [7bf244b]
|
|
2290
|
+
- Updated dependencies [f0bb9fa]
|
|
2291
|
+
- Updated dependencies [81a2eb1]
|
|
2292
|
+
- Updated dependencies [caa0cd3]
|
|
2293
|
+
- Updated dependencies [caa0cd3]
|
|
2294
|
+
- Updated dependencies [20cb8db]
|
|
2295
|
+
- Updated dependencies [25c7d58]
|
|
2296
|
+
- Updated dependencies [00d2fa6]
|
|
2297
|
+
- Updated dependencies [77b2a18]
|
|
2298
|
+
- Updated dependencies [c6198c2]
|
|
2299
|
+
- Updated dependencies [721d1e0]
|
|
2300
|
+
- Updated dependencies [c2f0f48]
|
|
2301
|
+
- Updated dependencies [1237ae4]
|
|
2302
|
+
- Updated dependencies [2f61238]
|
|
2303
|
+
- Updated dependencies [51eb515]
|
|
2304
|
+
- Updated dependencies [c354ce5]
|
|
2305
|
+
- Updated dependencies [8fe8e5c]
|
|
2306
|
+
- Updated dependencies [feac439]
|
|
2307
|
+
- Updated dependencies [9ae871d]
|
|
2308
|
+
- Updated dependencies [efbd566]
|
|
2309
|
+
- Updated dependencies [2a5bf45]
|
|
2310
|
+
- Updated dependencies [9587fc9]
|
|
2311
|
+
- Updated dependencies [e62c44e]
|
|
2312
|
+
- Updated dependencies [daf9d57]
|
|
2313
|
+
- Updated dependencies [23b9958]
|
|
2314
|
+
- Updated dependencies [c15d7ec]
|
|
2315
|
+
- Updated dependencies [5d0876c]
|
|
2316
|
+
- Updated dependencies [f7ace0a]
|
|
2317
|
+
- Updated dependencies [b041b9c]
|
|
2318
|
+
- Updated dependencies [ce2aaef]
|
|
2319
|
+
- Updated dependencies [544ecba]
|
|
2320
|
+
- Updated dependencies [2ce2612]
|
|
2321
|
+
- Updated dependencies [bc640ec]
|
|
2322
|
+
- Updated dependencies [1e215c4]
|
|
2323
|
+
- Updated dependencies [da6e191]
|
|
2324
|
+
- Updated dependencies [3e377c9]
|
|
2325
|
+
- Updated dependencies [a3eb5d0]
|
|
2326
|
+
- Updated dependencies [4ce14f1]
|
|
2327
|
+
- Updated dependencies [aef97e5]
|
|
2328
|
+
- Updated dependencies [2af1fa7]
|
|
2329
|
+
- Updated dependencies [c14d3a0]
|
|
2330
|
+
- Updated dependencies [a137d0c]
|
|
2331
|
+
- Updated dependencies [caf477f]
|
|
2332
|
+
- Updated dependencies [f6375da]
|
|
2333
|
+
- Updated dependencies [967e5d8]
|
|
2334
|
+
- Updated dependencies [c907a9c]
|
|
2335
|
+
- Updated dependencies [a4611b3]
|
|
2336
|
+
- Updated dependencies [20316ba]
|
|
2337
|
+
- Updated dependencies [d3499b3]
|
|
2338
|
+
- Updated dependencies [91f9276]
|
|
2339
|
+
- Updated dependencies [309c75e]
|
|
2340
|
+
- Updated dependencies [c9f9bae]
|
|
2341
|
+
- Updated dependencies [18897a4]
|
|
2342
|
+
- Updated dependencies [8b7ea39]
|
|
2343
|
+
- Updated dependencies [a915064]
|
|
2344
|
+
- Updated dependencies [dcbf0b2]
|
|
2345
|
+
- Updated dependencies [52cac38]
|
|
2346
|
+
- Updated dependencies [93fea2e]
|
|
2347
|
+
- Updated dependencies [1422a92]
|
|
2348
|
+
- Updated dependencies [d05fe17]
|
|
2349
|
+
- Updated dependencies [a480f79]
|
|
2350
|
+
- Updated dependencies [f08d1a8]
|
|
2351
|
+
- Updated dependencies [64a252d]
|
|
2352
|
+
- Updated dependencies [786bc91]
|
|
2353
|
+
- Updated dependencies [75fca96]
|
|
2354
|
+
- Updated dependencies [7ca6ddd]
|
|
2355
|
+
- Updated dependencies [f1cd290]
|
|
2356
|
+
- Updated dependencies [5a41ce7]
|
|
2357
|
+
- Updated dependencies [8d50bc2]
|
|
2358
|
+
- Updated dependencies [604476d]
|
|
2359
|
+
- Updated dependencies [d1bebb0]
|
|
2360
|
+
- Updated dependencies [95bf128]
|
|
2361
|
+
- Updated dependencies [335abea]
|
|
2362
|
+
- Updated dependencies [edea22a]
|
|
2363
|
+
- Updated dependencies [0f5cadf]
|
|
2364
|
+
- Updated dependencies [4f9f1ee]
|
|
2365
|
+
- Updated dependencies [66e8b2a]
|
|
2366
|
+
- Updated dependencies [aa083cd]
|
|
2367
|
+
- Updated dependencies [12b5992]
|
|
2368
|
+
- Updated dependencies [b93e245]
|
|
2369
|
+
- Updated dependencies [c842594]
|
|
2370
|
+
- Updated dependencies [290de37]
|
|
2371
|
+
- Updated dependencies [1cfdff8]
|
|
2372
|
+
- Updated dependencies [e1c27e4]
|
|
2373
|
+
- Updated dependencies [8c8da45]
|
|
2374
|
+
- Updated dependencies [8cd8eb5]
|
|
2375
|
+
- Updated dependencies [cf1d29e]
|
|
2376
|
+
- Updated dependencies [1bd79c8]
|
|
2377
|
+
- Updated dependencies [af9e957]
|
|
2378
|
+
- Updated dependencies [b1030c7]
|
|
2379
|
+
- Updated dependencies [c974edf]
|
|
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 [496d31d]
|
|
2387
|
+
- Updated dependencies [0ea7054]
|
|
2388
|
+
- Updated dependencies [9a853f2]
|
|
2389
|
+
- Updated dependencies [cb847fd]
|
|
2390
|
+
- Updated dependencies [ee70287]
|
|
2391
|
+
- Updated dependencies [3e98e13]
|
|
2392
|
+
- Updated dependencies [a695f50]
|
|
2393
|
+
- Updated dependencies [fc32921]
|
|
2394
|
+
- Updated dependencies [4eaa835]
|
|
2395
|
+
- Updated dependencies [8f9d87a]
|
|
2396
|
+
- Updated dependencies [b1777ae]
|
|
2397
|
+
- Updated dependencies [24845c4]
|
|
2398
|
+
- Updated dependencies [6f864cf]
|
|
2399
|
+
- Updated dependencies [24d1edd]
|
|
2400
|
+
- Updated dependencies [645087c]
|
|
2401
|
+
- Updated dependencies [33f4a19]
|
|
2402
|
+
- Updated dependencies [6e9a3d4]
|
|
2403
|
+
- Updated dependencies [4a292d2]
|
|
2404
|
+
- Updated dependencies [5323168]
|
|
2405
|
+
- Updated dependencies [841dd2b]
|
|
2406
|
+
- Updated dependencies [3014fc0]
|
|
2407
|
+
- Updated dependencies [dacb402]
|
|
2408
|
+
- Updated dependencies [846cec0]
|
|
2409
|
+
- Updated dependencies [91facae]
|
|
2410
|
+
- Updated dependencies [b38014e]
|
|
2411
|
+
- Updated dependencies [474797d]
|
|
2412
|
+
- Updated dependencies [704e695]
|
|
2413
|
+
- Updated dependencies [a407bd6]
|
|
2414
|
+
- Updated dependencies [317dbce]
|
|
2415
|
+
- Updated dependencies [309728c]
|
|
2416
|
+
- Updated dependencies [aa08d7e]
|
|
2417
|
+
- Updated dependencies [3a43a15]
|
|
2418
|
+
- Updated dependencies [868e825]
|
|
2419
|
+
- Updated dependencies [f76f436]
|
|
2420
|
+
- Updated dependencies [ce45a03]
|
|
2421
|
+
- Updated dependencies [421544b]
|
|
2422
|
+
- Updated dependencies [fb01022]
|
|
2423
|
+
- Updated dependencies [e9d9212]
|
|
2424
|
+
- Updated dependencies [ecfb693]
|
|
2425
|
+
- Updated dependencies [abc1b18]
|
|
2426
|
+
- Updated dependencies [81a51db]
|
|
2427
|
+
- Updated dependencies [67749c7]
|
|
2428
|
+
- Updated dependencies [507b61b]
|
|
2429
|
+
- Updated dependencies [512c84b]
|
|
2430
|
+
- Updated dependencies [c300267]
|
|
2431
|
+
- Updated dependencies [fb3a101]
|
|
2432
|
+
- Updated dependencies [d4733f2]
|
|
2433
|
+
- Updated dependencies [7c9145f]
|
|
2434
|
+
- Updated dependencies [1570eac]
|
|
2435
|
+
- Updated dependencies [f391ede]
|
|
2436
|
+
- Updated dependencies [f5cfbbd]
|
|
2437
|
+
- Updated dependencies [f5cfbbd]
|
|
2438
|
+
- Updated dependencies [8b532cb]
|
|
2439
|
+
- Updated dependencies [64c3cdd]
|
|
2440
|
+
- Updated dependencies [4d65991]
|
|
2441
|
+
- Updated dependencies [c42554e]
|
|
2442
|
+
- Updated dependencies [555b4ec]
|
|
2443
|
+
- Updated dependencies [1ccfc23]
|
|
2444
|
+
- Updated dependencies [542718f]
|
|
2445
|
+
- Updated dependencies [7f27bc5]
|
|
2446
|
+
- Updated dependencies [0a174f3]
|
|
2447
|
+
- Updated dependencies [676f677]
|
|
2448
|
+
- Updated dependencies [f95b140]
|
|
2449
|
+
- Updated dependencies [541ce4e]
|
|
2450
|
+
- Updated dependencies [6479086]
|
|
2451
|
+
- Updated dependencies [d79f525]
|
|
2452
|
+
- Updated dependencies [d1865d2]
|
|
2453
|
+
- Updated dependencies [55ba3ff]
|
|
2454
|
+
- Updated dependencies [f1190b0]
|
|
2455
|
+
- Updated dependencies [561abef]
|
|
2456
|
+
- Updated dependencies [ef52001]
|
|
2457
|
+
- Updated dependencies [6a4680b]
|
|
2458
|
+
- Updated dependencies [c3a4273]
|
|
2459
|
+
- Updated dependencies [abf710d]
|
|
2460
|
+
- Updated dependencies [093af32]
|
|
2461
|
+
- Updated dependencies [1bd1be7]
|
|
2462
|
+
- Updated dependencies [d234fa9]
|
|
2463
|
+
- Updated dependencies [adf5812]
|
|
2464
|
+
- Updated dependencies [e36acd4]
|
|
2465
|
+
- Updated dependencies [5058336]
|
|
2466
|
+
- Updated dependencies [2f6b2bf]
|
|
2467
|
+
- Updated dependencies [2028b31]
|
|
2468
|
+
- Updated dependencies [63601ab]
|
|
2469
|
+
- Updated dependencies [c372b29]
|
|
2470
|
+
- Updated dependencies [152f0a7]
|
|
2471
|
+
- Updated dependencies [8693b85]
|
|
2472
|
+
- Updated dependencies [e82dad1]
|
|
2473
|
+
- Updated dependencies [58b7b3d]
|
|
2474
|
+
- Updated dependencies [84defab]
|
|
2475
|
+
- Updated dependencies [681d3f1]
|
|
2476
|
+
- Updated dependencies [969d4f2]
|
|
2477
|
+
- Updated dependencies [f3bc481]
|
|
2478
|
+
- Updated dependencies [b79aac2]
|
|
2479
|
+
- Updated dependencies [93fc0e7]
|
|
2480
|
+
- Updated dependencies [a4b723f]
|
|
2481
|
+
- Updated dependencies [2b10ca0]
|
|
2482
|
+
- Updated dependencies [7db4a81]
|
|
2483
|
+
- Updated dependencies [19a0b0e]
|
|
2484
|
+
- Updated dependencies [526fc11]
|
|
2485
|
+
- Updated dependencies [f8e3e9a]
|
|
2486
|
+
- Updated dependencies [b9d47ec]
|
|
2487
|
+
- Updated dependencies [3b6bc69]
|
|
2488
|
+
- Updated dependencies [6214db6]
|
|
2489
|
+
- Updated dependencies [6732df4]
|
|
2490
|
+
- Updated dependencies [fe9e0d0]
|
|
2491
|
+
- Updated dependencies [63fb72c]
|
|
2492
|
+
- Updated dependencies [804831c]
|
|
2493
|
+
- Updated dependencies [279e48e]
|
|
2494
|
+
- Updated dependencies [8700d6d]
|
|
2495
|
+
- Updated dependencies [8db2a0f]
|
|
2496
|
+
- Updated dependencies [689953a]
|
|
2497
|
+
- Updated dependencies [30443fb]
|
|
2498
|
+
- Updated dependencies [8d3dbb2]
|
|
2499
|
+
- Updated dependencies [efc1c9c]
|
|
2500
|
+
- Updated dependencies [da45e6b]
|
|
2501
|
+
- Updated dependencies [7533465]
|
|
2502
|
+
- Updated dependencies [835f0f3]
|
|
2503
|
+
- Updated dependencies [a9d97be]
|
|
2504
|
+
- Updated dependencies [ed35b44]
|
|
2505
|
+
- Updated dependencies [9ba7e9c]
|
|
2506
|
+
- Updated dependencies [729e851]
|
|
2507
|
+
- Updated dependencies [96919a4]
|
|
2508
|
+
- Updated dependencies [345e24a]
|
|
2509
|
+
- Updated dependencies [20b507a]
|
|
2510
|
+
- Updated dependencies [2e471dc]
|
|
2511
|
+
- Updated dependencies [6748587]
|
|
2512
|
+
- Updated dependencies [be50942]
|
|
2513
|
+
- Updated dependencies [775e079]
|
|
2514
|
+
- Updated dependencies [7e8b3c0]
|
|
2515
|
+
- Updated dependencies [53374dc]
|
|
2516
|
+
- Updated dependencies [f6fb83f]
|
|
2517
|
+
- Updated dependencies [2049b03]
|
|
2518
|
+
- Updated dependencies [2bf34f7]
|
|
2519
|
+
- Updated dependencies [15b33ae]
|
|
2520
|
+
- Updated dependencies [7cbc724]
|
|
2521
|
+
- Updated dependencies [7098eed]
|
|
2522
|
+
- Updated dependencies [3df7c5c]
|
|
2523
|
+
- Updated dependencies [fb91ac9]
|
|
2524
|
+
- Updated dependencies [fb91ac9]
|
|
2525
|
+
- Updated dependencies [641fb55]
|
|
2526
|
+
- Updated dependencies [8524372]
|
|
2527
|
+
- Updated dependencies [7cbefa5]
|
|
2528
|
+
- Updated dependencies [72d6587]
|
|
2529
|
+
- Updated dependencies [a272a4f]
|
|
2530
|
+
- Updated dependencies [55f39ee]
|
|
2531
|
+
- Updated dependencies [0ce32d5]
|
|
2532
|
+
- Updated dependencies [0970a0e]
|
|
2533
|
+
- Updated dependencies [e427e9c]
|
|
2534
|
+
- Updated dependencies [bbc9dc3]
|
|
2535
|
+
- Updated dependencies [02f1813]
|
|
2536
|
+
- Updated dependencies [1ef89c0]
|
|
2537
|
+
- Updated dependencies [ba0b61a]
|
|
2538
|
+
- Updated dependencies [ba0b61a]
|
|
2539
|
+
- Updated dependencies [ac716ff]
|
|
2540
|
+
- Updated dependencies [f0f3cd5]
|
|
2541
|
+
- Updated dependencies [ab856ed]
|
|
2542
|
+
- Updated dependencies [20f3e65]
|
|
2543
|
+
- Updated dependencies [bbba098]
|
|
2544
|
+
- Updated dependencies [87af769]
|
|
2545
|
+
- Updated dependencies [3be720e]
|
|
2546
|
+
- Updated dependencies [43c0d17]
|
|
2547
|
+
- Updated dependencies [c3df43a]
|
|
2548
|
+
- Updated dependencies [d16d0e9]
|
|
2549
|
+
- Updated dependencies [bbe57fd]
|
|
2550
|
+
- Updated dependencies [272a530]
|
|
2551
|
+
- Updated dependencies [1779e8d]
|
|
2552
|
+
- Updated dependencies [f7fcc2c]
|
|
2553
|
+
- Updated dependencies [f0f4d6c]
|
|
2554
|
+
- Updated dependencies [4128188]
|
|
2555
|
+
- Updated dependencies [b253c4e]
|
|
2556
|
+
- Updated dependencies [78a9c67]
|
|
2557
|
+
- Updated dependencies [4a7ef0d]
|
|
2558
|
+
- Updated dependencies [4598f6d]
|
|
2559
|
+
- Updated dependencies [dea17b4]
|
|
2560
|
+
- Updated dependencies [89bb77a]
|
|
2561
|
+
- Updated dependencies [06611e4]
|
|
2562
|
+
- Updated dependencies [44152c4]
|
|
2563
|
+
- Updated dependencies [3939545]
|
|
2564
|
+
- Updated dependencies [0ee6e31]
|
|
2565
|
+
- Updated dependencies [66abbde]
|
|
2566
|
+
- Updated dependencies [dc3893d]
|
|
2567
|
+
- Updated dependencies [1bbaa16]
|
|
2568
|
+
- Updated dependencies [6ee259a]
|
|
2569
|
+
- Updated dependencies [7649f43]
|
|
2570
|
+
- Updated dependencies [e708426]
|
|
2571
|
+
- Updated dependencies [3b6d53b]
|
|
2572
|
+
- Updated dependencies [276d174]
|
|
2573
|
+
- Updated dependencies [2982ed9]
|
|
2574
|
+
- Updated dependencies [a8198de]
|
|
2575
|
+
- Updated dependencies [0c789a4]
|
|
2576
|
+
- Updated dependencies [05a49f2]
|
|
2577
|
+
- Updated dependencies [b234a84]
|
|
2578
|
+
- Updated dependencies [a78cd37]
|
|
2579
|
+
- Updated dependencies [5ea623e]
|
|
2580
|
+
- Updated dependencies [5eabe86]
|
|
2581
|
+
- Updated dependencies [ca5d671]
|
|
2582
|
+
- Updated dependencies [32bf2d6]
|
|
2583
|
+
- Updated dependencies [ff0c384]
|
|
2584
|
+
- Updated dependencies [af4fb29]
|
|
2585
|
+
- Updated dependencies [c698a81]
|
|
2586
|
+
- Updated dependencies [ff5ef1c]
|
|
2587
|
+
- Updated dependencies [befd40c]
|
|
2588
|
+
- Updated dependencies [9a97800]
|
|
2589
|
+
- Updated dependencies [6bca0e4]
|
|
2590
|
+
- Updated dependencies [81c0bc4]
|
|
2591
|
+
- Updated dependencies [3c76801]
|
|
2592
|
+
- Updated dependencies [60500cb]
|
|
2593
|
+
- Updated dependencies [2fcefb9]
|
|
2594
|
+
- Updated dependencies [77f846a]
|
|
2595
|
+
- Updated dependencies [bc5870c]
|
|
2596
|
+
- Updated dependencies [b55a346]
|
|
2597
|
+
- Updated dependencies [065bba7]
|
|
2598
|
+
- Updated dependencies [f760064]
|
|
2599
|
+
- Updated dependencies [dd19463]
|
|
2600
|
+
- Updated dependencies [6791717]
|
|
2601
|
+
- Updated dependencies [8ea3bee]
|
|
2602
|
+
- Updated dependencies [100547e]
|
|
2603
|
+
- Updated dependencies [3a58149]
|
|
2604
|
+
- Updated dependencies [6d1c155]
|
|
2605
|
+
- Updated dependencies [d7573b3]
|
|
2606
|
+
- Updated dependencies [bf3edfe]
|
|
2607
|
+
- Updated dependencies [2c8474c]
|
|
2608
|
+
- Updated dependencies [6ce89da]
|
|
2609
|
+
- Updated dependencies [0e05aac]
|
|
2610
|
+
- Updated dependencies [ae61ad4]
|
|
2611
|
+
- Updated dependencies [5aed9e4]
|
|
2612
|
+
- Updated dependencies [83c77dc]
|
|
2613
|
+
- Updated dependencies [3c9fca3]
|
|
2614
|
+
- Updated dependencies [18a8e7d]
|
|
2615
|
+
- Updated dependencies [e7957ab]
|
|
2616
|
+
- Updated dependencies [f7e34ca]
|
|
2617
|
+
- Updated dependencies [e719ebd]
|
|
2618
|
+
- Updated dependencies [516583b]
|
|
2619
|
+
- Updated dependencies [f9e4f91]
|
|
2620
|
+
- Updated dependencies [6ef48b1]
|
|
2621
|
+
- Updated dependencies [fa429cf]
|
|
2622
|
+
- Updated dependencies [ed8df3e]
|
|
2623
|
+
- Updated dependencies [fe76ece]
|
|
2624
|
+
- Updated dependencies [8b446f5]
|
|
2625
|
+
- Updated dependencies [8e74b27]
|
|
2626
|
+
- Updated dependencies [7102b20]
|
|
2627
|
+
- Updated dependencies [8ebd57f]
|
|
2628
|
+
- Updated dependencies [617707a]
|
|
2629
|
+
- Updated dependencies [c40f3b8]
|
|
2630
|
+
- Updated dependencies [58770f3]
|
|
2631
|
+
- Updated dependencies [aefe428]
|
|
2632
|
+
- Updated dependencies [485f096]
|
|
2633
|
+
- Updated dependencies [7357447]
|
|
2634
|
+
- Updated dependencies [199d31b]
|
|
2635
|
+
- Updated dependencies [b655a9d]
|
|
2636
|
+
- Updated dependencies [3e01cb5]
|
|
2637
|
+
- Updated dependencies [7138bc1]
|
|
2638
|
+
- Updated dependencies [cef27e2]
|
|
2639
|
+
- Updated dependencies [4e8622b]
|
|
2640
|
+
- Updated dependencies [dffd752]
|
|
2641
|
+
- Updated dependencies [06973aa]
|
|
2642
|
+
- Updated dependencies [50798f3]
|
|
2643
|
+
- Updated dependencies [6a576c9]
|
|
2644
|
+
- Updated dependencies [105f3c5]
|
|
2645
|
+
- Updated dependencies [3ccd9e8]
|
|
2646
|
+
- Updated dependencies [689b979]
|
|
2647
|
+
- Updated dependencies [c70f865]
|
|
2648
|
+
- Updated dependencies [e546222]
|
|
2649
|
+
- Updated dependencies [fd13f52]
|
|
2650
|
+
- Updated dependencies [d7bd274]
|
|
2651
|
+
- Updated dependencies [98c3a74]
|
|
2652
|
+
- Updated dependencies [fffa30d]
|
|
2653
|
+
- Updated dependencies [ebce5a3]
|
|
2654
|
+
- Updated dependencies [fb336df]
|
|
2655
|
+
- Updated dependencies [4dc80d0]
|
|
2656
|
+
- Updated dependencies [9d9040d]
|
|
2657
|
+
- Updated dependencies [20e317c]
|
|
2658
|
+
- Updated dependencies [0fce2ef]
|
|
2659
|
+
- Updated dependencies [42df928]
|
|
2660
|
+
- Updated dependencies [0e2ddd4]
|
|
2661
|
+
- Updated dependencies [b7479ab]
|
|
2662
|
+
- Updated dependencies [9850c6e]
|
|
2663
|
+
- Updated dependencies [de570cc]
|
|
2664
|
+
- Updated dependencies [b2ea297]
|
|
2665
|
+
- Updated dependencies [5b5a5c3]
|
|
2666
|
+
- Updated dependencies [14582b8]
|
|
2667
|
+
- Updated dependencies [51e144e]
|
|
2668
|
+
- Updated dependencies [19cbf10]
|
|
2669
|
+
- Updated dependencies [ab92940]
|
|
2670
|
+
- Updated dependencies [a691c0b]
|
|
2671
|
+
- Updated dependencies [0b1326d]
|
|
2672
|
+
- Updated dependencies [1e66879]
|
|
2673
|
+
- Updated dependencies [c5200f0]
|
|
2674
|
+
- Updated dependencies [af3861f]
|
|
2675
|
+
- Updated dependencies [2609812]
|
|
2676
|
+
- Updated dependencies [515f171]
|
|
2677
|
+
- Updated dependencies [1f4e029]
|
|
2678
|
+
- Updated dependencies [4f14ad7]
|
|
2679
|
+
- Updated dependencies [258d264]
|
|
2680
|
+
- Updated dependencies [cac64b3]
|
|
2681
|
+
- Updated dependencies [8033ad1]
|
|
2682
|
+
- Updated dependencies [fa140b8]
|
|
2683
|
+
- Updated dependencies [71cba28]
|
|
2684
|
+
- Updated dependencies [190fbd0]
|
|
2685
|
+
- Updated dependencies [c00bf28]
|
|
2686
|
+
- Updated dependencies [93127bd]
|
|
2687
|
+
- Updated dependencies [f2158ec]
|
|
2688
|
+
- Updated dependencies [759606e]
|
|
2689
|
+
- Updated dependencies [fd8dace]
|
|
2690
|
+
- Updated dependencies [72ffc34]
|
|
2691
|
+
- Updated dependencies [a51fa0c]
|
|
2692
|
+
- Updated dependencies [51f3d8d]
|
|
2693
|
+
- Updated dependencies [bf28341]
|
|
2694
|
+
- Updated dependencies [78cbdb5]
|
|
2695
|
+
- Updated dependencies [b7543a9]
|
|
2696
|
+
- Updated dependencies [6c6cee7]
|
|
2697
|
+
- Updated dependencies [42887e0]
|
|
2698
|
+
- Updated dependencies [83fe6e7]
|
|
2699
|
+
- Updated dependencies [d1ab06f]
|
|
2700
|
+
- Updated dependencies [38a9568]
|
|
2701
|
+
- Updated dependencies [f90b8fb]
|
|
2702
|
+
- Updated dependencies [91783c4]
|
|
2703
|
+
- Updated dependencies [982885d]
|
|
2704
|
+
- Updated dependencies [dba7d84]
|
|
2705
|
+
- Updated dependencies [ca39427]
|
|
2706
|
+
- Updated dependencies [bd09957]
|
|
2707
|
+
- Updated dependencies [5a07e67]
|
|
2708
|
+
- Updated dependencies [2d36552]
|
|
2709
|
+
- Updated dependencies [45d8288]
|
|
2710
|
+
- Updated dependencies [b2437a7]
|
|
2711
|
+
- Updated dependencies [f157423]
|
|
2712
|
+
- Updated dependencies [7a90afd]
|
|
2713
|
+
- Updated dependencies [eddc1dd]
|
|
2714
|
+
- Updated dependencies [490f482]
|
|
2715
|
+
- Updated dependencies [27308c5]
|
|
2716
|
+
- Updated dependencies [8689166]
|
|
2717
|
+
- Updated dependencies [c9327c9]
|
|
2718
|
+
- Updated dependencies [920165d]
|
|
2719
|
+
- Updated dependencies [9101be5]
|
|
2720
|
+
- Updated dependencies [f53a8d0]
|
|
2721
|
+
- Updated dependencies [30266cf]
|
|
2722
|
+
- Updated dependencies [968dc1e]
|
|
2723
|
+
- Updated dependencies [57f9b07]
|
|
2724
|
+
- Updated dependencies [3c73d99]
|
|
2725
|
+
- Updated dependencies [d91aed9]
|
|
2726
|
+
- Updated dependencies [ed71d9e]
|
|
2727
|
+
- Updated dependencies [7776fc2]
|
|
2728
|
+
- Updated dependencies [e76634c]
|
|
2729
|
+
- Updated dependencies [c86185e]
|
|
2730
|
+
- Updated dependencies [fb96ecb]
|
|
2731
|
+
- Updated dependencies [1170ed1]
|
|
2732
|
+
- Updated dependencies [92814db]
|
|
2733
|
+
- Updated dependencies [4d73b07]
|
|
2734
|
+
- @object-ui/react@17.7.0
|
|
2735
|
+
- @object-ui/core@17.7.0
|
|
2736
|
+
- @object-ui/types@17.7.0
|
|
2737
|
+
- @object-ui/i18n@17.7.0
|
|
2738
|
+
- @object-ui/components@17.7.0
|
|
2739
|
+
- @object-ui/mobile@17.7.0
|
|
2740
|
+
- @object-ui/permissions@17.7.0
|
|
2741
|
+
|
|
3
2742
|
## 17.6.0
|
|
4
2743
|
|
|
5
2744
|
### Patch Changes
|