@object-ui/layout 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 +2006 -0
- package/README.md +35 -6
- package/dist/AppSchemaRenderer.d.ts +5 -7
- package/dist/AppShell.d.ts +28 -1
- package/dist/NavigationRenderer.d.ts +205 -37
- package/dist/PageHeader.d.ts +7 -6
- package/dist/ResponsiveGrid.d.ts +53 -18
- package/dist/index.js +821 -723
- package/dist/index.umd.cjs +1 -1
- package/dist/navOrder.d.ts +18 -0
- package/package.json +10 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,2011 @@
|
|
|
1
1
|
# @object-ui/layout
|
|
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
|
+
- 9fc68aa: Screen readers can name and reach the controls of the view tab bar, the settings form, the sidebar menus, the table's selection column and the percent cell (objectui#11690). axe-core (wcag2a + wcag2aa) on an object list page and on a Setup settings page reported the faults below; each is fixed where it is produced and pinned by an axe run on that component.
|
|
22
|
+
|
|
23
|
+
- **View tab bar (`ViewTabBar`).** The "+" add-view button is named, through the existing `view.addView` key, and its tooltip reads the same translated words instead of a hard-coded "Add View". Each view is now a `<button>`; the current one carries `aria-current="true"`. The views were `role="tab"` elements with no `tablist`, and the active view's actions button sat inside its tab, so it was a control inside a control. That button is now the view button's sibling, still named "View actions for …" and still one Tab stop away. Tab roles could not hold it: a tab's content is presentational and a tablist may contain only tabs. These views never had the tabs keyboard model (arrow keys, a tab panel) either. Every view stays its own Tab stop. When the bar is not reorderable, as the console renders it, Enter or Space switches to the focused view. With drag-to-reorder on, Enter or Space on a view starts a keyboard drag instead, as it did before this change, so a view is switched to by click. The rename box is now outside the view button and is named through `view.rename`. With drag-to-reorder on, the sortable attributes describe the view as a button. Breaking for anything that queried the bar by `role="tab"` or `aria-selected`: query `data-testid="view-tab-ID"` or `aria-current` instead.
|
|
24
|
+
- **Settings form (`@object-ui/console`).** Each row's label is bound to its control, so text, number, password, textarea, JSON, colour, switch and select controls are named by it. Clicking a label now focuses or toggles its control. A radio group and a multiselect checkbox group are named by the row label too.
|
|
25
|
+
- **Sidebar menus (`NavigationRenderer`).** With drag-to-reorder on (the desktop default), every row was wrapped in a `<div>` between the menu's `<ul>` and its `<li>`. The sortable node is now the row's own `<li>`. A separator and a nested group inside a menu are now list items too: the separator's item is hidden from assistive tech, and a top-level group is unchanged.
|
|
26
|
+
- **Table selection column (`data-table`).** The select-all checkbox and each row's checkbox are named through the existing `table.selectAllRows` and `table.selectRow` keys.
|
|
27
|
+
- **Percent cell (`PercentCellRenderer`).** The progress bar is named by the formatted value beside it (`aria-labelledby`), so the name is in the viewer's locale.
|
|
28
|
+
|
|
29
|
+
No language-pack key, export or prop is added; every new name reads a key the packs already carried.
|
|
30
|
+
- c5406c2: Depend on the `@objectstack/*` 18 prerelease line (objectui#12030).
|
|
31
|
+
|
|
32
|
+
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).
|
|
33
|
+
|
|
34
|
+
**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.
|
|
35
|
+
|
|
36
|
+
**objectui's own surface moves with it:**
|
|
37
|
+
|
|
38
|
+
- `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`.
|
|
39
|
+
- The `CapabilityMultiSelectField` widget's curated capability set (`@object-ui/fields`) follows spec 18: `manage_mailboxes` in, `manage_org_presentation` out.
|
|
40
|
+
- `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.
|
|
41
|
+
|
|
42
|
+
**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.
|
|
43
|
+
- 8a55f0c: The console sidebar no longer lets a user drag the app's menu into a private order; the Pinned section is now the one place a user orders entries (objectui#12059). Arranging an app's navigation is Studio's job: the menu is drawn in the order authored for the app, and every user sees that order. This reverses objectui#11626, which had extended menu drag-to-reorder to grouped menus.
|
|
44
|
+
|
|
45
|
+
**`@object-ui/layout` (breaking, declared `minor` per the version policy).** `NavigationRenderer` retires `enableReorder` and `onReorder`, and with them every sortable path through the menu: no menu row draws a grip or carries a sortable role. `AppSchemaRenderer` retires the same two props, which only handed them through. Two props are added for the pinned section: `pinnedOrder` (the pinned entry ids in the user's order; the section draws in that order, an unnamed pinned entry following in menu order) and `onPinnedReorder` (makes the pinned rows sortable and receives the drawn ids in their new order). A pinned row is dragged by the row itself: no grip at rest, a grab cursor, and a line marking where the row will land. From the keyboard, with the row's link focused, Space picks it up, the arrow keys move it, Space drops it and Escape cancels; Enter still follows the link. The row's link stays a link and the row's one focus stop. The click a pointer drag ends with is not followed.
|
|
46
|
+
|
|
47
|
+
**`@object-ui/app-shell`.** The sidebar no longer reads or writes the per-user menu order it kept in localStorage (`objectui-nav-order-APP`); a key left from before is ignored. The pinned order is stored with the pins, in the `UserDataAdapter`-backed favorites, so it syncs across devices the way the pins do: it is the order of the `type: 'nav'` entries in the stored list. A new pin now joins the end of that order (a content favorite still goes first), and an unpin leaves the others in order. `useFavorites()` gains `reorderNavPins(navIds)`, which puts the named pins in a new order in the places they already hold, so a pin another app's sidebar draws and every content favorite stay put; `useNavPins()` gains `reorderPins(orderedIds)` over it, and its `pinnedIds` lists the pins in the user's order. At the nav-pin cap a new pin still joins the end and the earliest-pinned one rolls off. Pins made before this change are now drawn in their stored order, which is newest first (a pin used to be put at the front of the list), rather than in menu order, until the user drags them.
|
|
48
|
+
|
|
49
|
+
**`@object-ui/i18n` (breaking, declared `minor`).** `console.nav.dragToReorder`, the label of the retired menu grip, is removed from all ten packs. `view.dragToReorder` is a different key and stays.
|
|
50
|
+
|
|
51
|
+
**Clause-②: yes.** Published surface changes: `NavigationRendererProps` loses `enableReorder` / `onReorder` and gains `pinnedOrder` / `onPinnedReorder`; `AppSchemaRendererProps` loses `enableReorder` / `onReorder`; the return of `useFavorites()` gains `reorderNavPins`; the return of `useNavPins()` gains `reorderPins`; the `console.nav.dragToReorder` pack key leaves.
|
|
52
|
+
- ff9df88: Depend on `@objectstack/*` `18.0.0-next.1` (objectui#12370).
|
|
53
|
+
|
|
54
|
+
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.
|
|
55
|
+
|
|
56
|
+
**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`:
|
|
57
|
+
|
|
58
|
+
- `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.
|
|
59
|
+
- `onSuccess` beside `operation: 'update'`, and an `onSuccess` block carrying a key outside `{ navigate, openIn }`.
|
|
60
|
+
- `actionType: 'navigation'` on a row (and `type: 'navigation'` on a container member): write `'url'`.
|
|
61
|
+
- A `url` executor's `target` that is not openable, judged on the executor the runner runs, including a row whose `name` selects it.
|
|
62
|
+
- A view `data` binding with `provider: 'api'`: bind the object or static rows; an API call is the page element's binding.
|
|
63
|
+
- a8e5b73: Console sidebar: one Favorites section at the top, and one ⋯ menu on every entry (objectui#12427).
|
|
64
|
+
|
|
65
|
+
- **The ⋯ menu replaces the pin icon.** When you hover a navigation entry it shows one ⋯ trigger, and a right-click on the row opens the same menu. There is no pin icon any more. The menu's entries depend on what the entry is:
|
|
66
|
+
- Add to favorites / Remove from favorites always comes first. It writes the same pin as before, so the entry lands in the Favorites section at the top.
|
|
67
|
+
- Open in new tab and Copy link appear for an entry that goes somewhere. They use the address the row's own link renders, so a console served under a basename opens and copies a working link, and a URL off the console is used as it is.
|
|
68
|
+
- Design appears for an `object`, `dashboard` or `page` entry. It opens that target's designer on the metadata-admin route (`/apps/APP/metadata/TYPE/NAME`, which is where a page's Edit in studio button already goes). Only a workspace admin whose session may author metadata sees it.
|
|
69
|
+
- On a phone, navigation entries show no trigger, as they showed no pin icon before.
|
|
70
|
+
- **One Favorites section, at the top.** Favorites that are not navigation entries, such as an object or a record you starred, used to be a group after Recent, below the fold on a long menu. They are now rows of the Favorites section at the top, after the pinned entries. Each row shows its stored label and type icon and carries the same ⋯ menu, whose favorites entry removes it. Design shows for object, dashboard and page favorites, never for a record. Existing favorites appear there as stored: nothing in the favorites store changes and nothing is migrated. The console-home Starred group and the Home page are unchanged.
|
|
71
|
+
- **The page header's favorites entry is in its overflow menu.**
|
|
72
|
+
- The object list header no longer has a star. Its last control is now an icon-only ⋯ button ("More actions") whose menu holds Add to favorites / Remove from favorites. When the current app's navigation has an entry that opens this list, the entry pins that navigation entry, the same action as the sidebar's own menu. It writes one `nav:` favorite that lands in the Favorites section, and no second `object:` favorite. For an object the app does not list, it keeps an `object:` favorite.
|
|
73
|
+
- On a record page the same entry leads the header's ⋯ overflow, ahead of Share, and toggles the record favorite.
|
|
74
|
+
- **`NavigationRenderer` (`@object-ui/layout`) gets two additive props.**
|
|
75
|
+
- `renderItemAction(item, context)` is a host control drawn on every leaf and action row, in place of the pin action. `context` carries the row's `href`, `external`, `label` and `basePath` (type `NavItemActionContext`).
|
|
76
|
+
- `extraFavorites` takes host rows that are appended to the Favorites section after the pinned entries. The section renders when either kind of row is there.
|
|
77
|
+
- A host that passes neither keeps the pin action and a section of pinned entries only, with the pinned drag order unchanged.
|
|
78
|
+
- **Language packs.** Six new `console.nav` keys in all ten packs: `itemMenu`, `openInNewTab`, `copyLink`, `linkCopied`, `linkCopyFailed` and `design`. The list header's ⋯ button is named by `detail.moreActions`, the name the record header's ⋯ already has. The favorites entry reuses `common.addToFavorites` / `common.removeFromFavorites`. `sidebar.favorites`, the title of the removed group, is no longer read and leaves all ten packs.
|
|
79
|
+
- dcd1041: The console top bar is 48 px (`h-12`) in every frame, the height both approved console artboards draw (objectui#12639). It was 56 px (`h-14`).
|
|
80
|
+
|
|
81
|
+
- **One height everywhere.** `AppShell`'s header (inside every app), Home, the organization list and an organization's pages, the full-page assistant at `/ai` and the `/studio` landing all draw the same bar, so it no longer changes height on the way from Home into an app or onto an organization page. Studio's package builder keeps its own header, which was already 48 px from `sm` up.
|
|
82
|
+
- **The app sidebar follows the bar.** On desktop its column starts 48 px down and is the viewport's height less 48 px, so no gap opens between the bar and the sidebar.
|
|
83
|
+
- **The bar's contents are unchanged.** Its controls (the product mark, the app pill, the preview chip, the search field, the bell, help and the avatar) are 32 px or shorter, so each keeps its size.
|
|
84
|
+
|
|
85
|
+
No export, prop or type is added, removed or renamed. A host that renders `@object-ui/layout`'s `AppShell` gets the 48 px header too.
|
|
86
|
+
- 1b94d50: A navigation entry's API `dataSource` is read, and its `visible` sees the selected value as `data` (objectui#13029).
|
|
87
|
+
|
|
88
|
+
The spec lets a navigation entry declare `dataSource: { provider: 'api', read: { url }, path? }` (`BaseNavItemSchema.dataSource`). Only the entry's `visible` reads the value, as `data` (for example `data.total == 1`). The label, the target and `children` do not.
|
|
89
|
+
|
|
90
|
+
- `@object-ui/layout`: `VisibilityEvaluator` takes an optional second argument, the entry whose `visible` it judges. The item guard passes it on every path it serves: the rows, the derived area visibility and the Favorites section. The default evaluator reads no binding, so it hides an entry that declares one. An entry without the key renders as before.
|
|
91
|
+
- `@object-ui/app-shell`: the sidebar, the `nav:menu` block and the command palette share one `visible` evaluator. It reads each binding the app's navigation declares through the page element's reader (`readElementApi`, with the host's signed-in `apiFetch`). The entry is hidden while the read is pending, after it fails, when `path` selects nothing, or when the spec refuses the binding. An entry without the key is evaluated as before, with no request and no wait.
|
|
92
|
+
- `@object-ui/types`: the `dataSource` describe and doc on the navigation item now state what the console does with it. The accept set is unchanged.
|
|
93
|
+
- df71568: A navigation item's `visible` now takes `@objectstack/spec`'s `EvaluatedExpressionInputSchema` by reference, beside the boolean it already took (objectui#13075).
|
|
94
|
+
|
|
95
|
+
The spec types every navigation entry's `visible` as an evaluated expression input: a non-blank CEL string, or the `{ dialect, source }` envelope the spec's own parse produces. objectui's `NavigationItemSchema` typed it as `boolean | string`, so the two disagreed both ways. This changes what `NavigationItemSchema` (and so `objectui validate`) accepts:
|
|
96
|
+
|
|
97
|
+
- **Widened: the envelope is accepted.** `visible: { dialect: 'cel', source: "'org_admin' in current_user.positions" }` used to be refused. It parses now and is kept as written. The TypeScript type `NavigationItem['visible']` is `boolean | EvaluatedExpressionInput` (the spec's input type), so a typed literal can carry the envelope too.
|
|
98
|
+
- **Narrowed (breaking): a blank string is refused.** `visible: ''` and a whitespace-only string used to pass. They are refused now with the spec's own code (`invalid_union` at `visible`) and sentence. A blank `source` inside an envelope is refused at `visible.source`, as the spec refuses it. To show an entry to everyone, omit `visible`.
|
|
99
|
+
|
|
100
|
+
Unchanged: a non-blank string is still accepted and kept as a string (the validator does not rewrite it into an envelope), and `visible: true` / `false` are still accepted. The boolean is the one stated divergence from the spec on this key.
|
|
101
|
+
|
|
102
|
+
Code that reads `NavigationItem['visible']` and passes it on as `string | boolean` no longer compiles: widen that parameter to `NavigationItem['visible']`.
|
|
103
|
+
|
|
104
|
+
`@object-ui/layout` (minor): the exported `VisibilityEvaluator` type now takes `NavigationItem['visible']` instead of `string | boolean | undefined`, so an evaluator receives the envelope as authored. An evaluator a host passes in whose parameter is the old, narrower type no longer type-checks; widen it the same way. The runtime is unchanged: `NavigationRenderer` already handed the value through.
|
|
105
|
+
|
|
106
|
+
`@object-ui/app-shell` (patch): the shell's navigation gates (`useNavMemberGates` and the `nav:menu` block) take the widened type internally. No exported type changes, and the runtime is unchanged: `evaluateNavigationVisibility` already evaluated the envelope.
|
|
107
|
+
|
|
108
|
+
### Patch Changes
|
|
109
|
+
|
|
110
|
+
- b88937b: Drag-to-reorder of a grouped sidebar menu, within each level (objectui#11626), was retired before it was released. objectui#12059 removed every drag-to-reorder of the sidebar menu: an app's menu order is authored in Studio, and every user sees that order. Nothing of objectui#11626 ships, because objectui#12059 retires the menu reorder whole: `NavigationRenderer`'s `enableReorder` / `onReorder`, the menu drag grip, and the sidebar's per-user menu order in localStorage (`objectui-nav-order-APP`), each of which predates objectui#11626, are gone. The objectui#12059 changeset describes what replaced them: the pinned section is the one place a user orders entries.
|
|
111
|
+
- f114263: In the collapsed (icon-mode) sidebar, a click on an icon reaches its row again. Before, a hidden group label could take the click instead (objectui#12744).
|
|
112
|
+
|
|
113
|
+
The `SidebarGroupLabel` primitive hides a label in icon mode with `opacity-0` and `-mt-8` only. The invisible label stayed hit-testable and lay over the lower half of the row just above its group. A centre click on that row's icon landed on the label. A collapsible group's label toggled its group, the Recent label toggled Recent, and the row did not navigate.
|
|
114
|
+
|
|
115
|
+
The labels that sit below a row now take no pointer events while the primitive hides them. The condition is the primitive's own `group-data-[state=collapsed]:group-data-[collapsible=icon]:` variant:
|
|
116
|
+
|
|
117
|
+
- `@object-ui/layout`: `NavigationRenderer`'s collapsible group label, and its Favorites label (it sits below the Area switcher in a multi-area app);
|
|
118
|
+
- `@object-ui/app-shell`: `UnifiedSidebar`'s Recent label.
|
|
119
|
+
|
|
120
|
+
In the expanded sidebar nothing changes. A group's label still toggles its group by mouse and keyboard, and the Recent label still opens and closes Recent. The primitive itself is a Shadcn-synced file and is not edited: the class rides on the `className` each call site passes. Nothing is added to either package entry: no export, prop or type member.
|
|
121
|
+
- e43a162: In the collapsed (icon-mode) sidebar, a hidden group label is no longer a keyboard focus stop, and screen readers no longer announce it (objectui#12795). Before, Tab from the row above a collapsible group landed on the group's invisible label button, and Enter toggled a group the user could not see.
|
|
122
|
+
|
|
123
|
+
The `SidebarGroupLabel` primitive hides a label there by fading it to `opacity-0`, which left it in the tab order and the accessibility tree. `NavigationRenderer`'s collapsible group and Favorites labels, `AppSchemaRenderer`'s Area label and `SidebarNav`'s group labels now also take `visibility: hidden` under the primitive's own icon-mode condition. The label still fades out before it is hidden. Tab now moves from a group's last row straight to the next group's first row.
|
|
124
|
+
|
|
125
|
+
In the expanded sidebar and the mobile sheet nothing changes: every group label that took focus still does, and Enter still opens and closes its group. The primitive itself is a Shadcn-synced file and is not edited, and no export, prop or type member is added.
|
|
126
|
+
- d758f2f: Doc comment only. The `PageHeaderComponentProps` comment no longer says `@object-ui/app-shell` shares the name: the console's header props are now `ConsolePageHeaderProps`, so this package is the one authority for `PageHeaderComponentProps` (objectui#6349, batch 8). The type and its members are unchanged.
|
|
127
|
+
|
|
128
|
+
No runtime behaviour changes.
|
|
129
|
+
- Updated dependencies [18d7b48]
|
|
130
|
+
- Updated dependencies [172acc3]
|
|
131
|
+
- Updated dependencies [f0496bd]
|
|
132
|
+
- Updated dependencies [c4c506b]
|
|
133
|
+
- Updated dependencies [9db9ff3]
|
|
134
|
+
- Updated dependencies [c096f03]
|
|
135
|
+
- Updated dependencies [92f4e2b]
|
|
136
|
+
- Updated dependencies [b10c68e]
|
|
137
|
+
- Updated dependencies [bdc9049]
|
|
138
|
+
- Updated dependencies [2e818d0]
|
|
139
|
+
- Updated dependencies [fd060f0]
|
|
140
|
+
- Updated dependencies [8b14aec]
|
|
141
|
+
- Updated dependencies [2abec3a]
|
|
142
|
+
- Updated dependencies [9dfaca6]
|
|
143
|
+
- Updated dependencies [c000398]
|
|
144
|
+
- Updated dependencies [73b5d77]
|
|
145
|
+
- Updated dependencies [e6dcd85]
|
|
146
|
+
- Updated dependencies [96fcf30]
|
|
147
|
+
- Updated dependencies [7a2c60b]
|
|
148
|
+
- Updated dependencies [9fc68aa]
|
|
149
|
+
- Updated dependencies [d50f724]
|
|
150
|
+
- Updated dependencies [17acfbb]
|
|
151
|
+
- Updated dependencies [89cc738]
|
|
152
|
+
- Updated dependencies [c0862c1]
|
|
153
|
+
- Updated dependencies [c0862c1]
|
|
154
|
+
- Updated dependencies [c0862c1]
|
|
155
|
+
- Updated dependencies [c0862c1]
|
|
156
|
+
- Updated dependencies [c0862c1]
|
|
157
|
+
- Updated dependencies [4c0de52]
|
|
158
|
+
- Updated dependencies [a80fef7]
|
|
159
|
+
- Updated dependencies [e06365c]
|
|
160
|
+
- Updated dependencies [1e1f09e]
|
|
161
|
+
- Updated dependencies [455c646]
|
|
162
|
+
- Updated dependencies [f34e877]
|
|
163
|
+
- Updated dependencies [f34e877]
|
|
164
|
+
- Updated dependencies [9844bbf]
|
|
165
|
+
- Updated dependencies [cef0eee]
|
|
166
|
+
- Updated dependencies [7241a81]
|
|
167
|
+
- Updated dependencies [74add0c]
|
|
168
|
+
- Updated dependencies [aaba865]
|
|
169
|
+
- Updated dependencies [45d5853]
|
|
170
|
+
- Updated dependencies [4f4fc03]
|
|
171
|
+
- Updated dependencies [2312bd9]
|
|
172
|
+
- Updated dependencies [c5406c2]
|
|
173
|
+
- Updated dependencies [d99b731]
|
|
174
|
+
- Updated dependencies [2a48bd4]
|
|
175
|
+
- Updated dependencies [c7b30bd]
|
|
176
|
+
- Updated dependencies [69bca0a]
|
|
177
|
+
- Updated dependencies [023f00d]
|
|
178
|
+
- Updated dependencies [158c75d]
|
|
179
|
+
- Updated dependencies [7525045]
|
|
180
|
+
- Updated dependencies [5af42db]
|
|
181
|
+
- Updated dependencies [ce991bd]
|
|
182
|
+
- Updated dependencies [5f75cfa]
|
|
183
|
+
- Updated dependencies [b7cd5c8]
|
|
184
|
+
- Updated dependencies [5330038]
|
|
185
|
+
- Updated dependencies [c9fc10b]
|
|
186
|
+
- Updated dependencies [dc6d28e]
|
|
187
|
+
- Updated dependencies [c0c2f79]
|
|
188
|
+
- Updated dependencies [0665c3b]
|
|
189
|
+
- Updated dependencies [d2500d8]
|
|
190
|
+
- Updated dependencies [e723f58]
|
|
191
|
+
- Updated dependencies [f3d5408]
|
|
192
|
+
- Updated dependencies [b231607]
|
|
193
|
+
- Updated dependencies [466a219]
|
|
194
|
+
- Updated dependencies [6fb281d]
|
|
195
|
+
- Updated dependencies [334f0cf]
|
|
196
|
+
- Updated dependencies [c08c933]
|
|
197
|
+
- Updated dependencies [92f979d]
|
|
198
|
+
- Updated dependencies [c4dd707]
|
|
199
|
+
- Updated dependencies [c4dd707]
|
|
200
|
+
- Updated dependencies [923504f]
|
|
201
|
+
- Updated dependencies [5c2982a]
|
|
202
|
+
- Updated dependencies [97e7d4e]
|
|
203
|
+
- Updated dependencies [10aba37]
|
|
204
|
+
- Updated dependencies [5d3f437]
|
|
205
|
+
- Updated dependencies [7af0ab3]
|
|
206
|
+
- Updated dependencies [b434f5f]
|
|
207
|
+
- Updated dependencies [fd4872f]
|
|
208
|
+
- Updated dependencies [f0532d8]
|
|
209
|
+
- Updated dependencies [3092aca]
|
|
210
|
+
- Updated dependencies [82e5f53]
|
|
211
|
+
- Updated dependencies [d81e460]
|
|
212
|
+
- Updated dependencies [8106db1]
|
|
213
|
+
- Updated dependencies [093d55b]
|
|
214
|
+
- Updated dependencies [a8051d6]
|
|
215
|
+
- Updated dependencies [72594f2]
|
|
216
|
+
- Updated dependencies [524136e]
|
|
217
|
+
- Updated dependencies [6f3299f]
|
|
218
|
+
- Updated dependencies [f2b17c6]
|
|
219
|
+
- Updated dependencies [52d6194]
|
|
220
|
+
- Updated dependencies [23bf859]
|
|
221
|
+
- Updated dependencies [1c72d77]
|
|
222
|
+
- Updated dependencies [2b4d3f1]
|
|
223
|
+
- Updated dependencies [d75f212]
|
|
224
|
+
- Updated dependencies [ff9df88]
|
|
225
|
+
- Updated dependencies [70e843f]
|
|
226
|
+
- Updated dependencies [a2225f9]
|
|
227
|
+
- Updated dependencies [5c4deb5]
|
|
228
|
+
- Updated dependencies [c950345]
|
|
229
|
+
- Updated dependencies [21f9577]
|
|
230
|
+
- Updated dependencies [044f231]
|
|
231
|
+
- Updated dependencies [f8267df]
|
|
232
|
+
- Updated dependencies [3eb3ec1]
|
|
233
|
+
- Updated dependencies [1ffd6a2]
|
|
234
|
+
- Updated dependencies [5f8ecf6]
|
|
235
|
+
- Updated dependencies [726d8c9]
|
|
236
|
+
- Updated dependencies [ef71a09]
|
|
237
|
+
- Updated dependencies [619e3f7]
|
|
238
|
+
- Updated dependencies [c9e6742]
|
|
239
|
+
- Updated dependencies [f62b6ff]
|
|
240
|
+
- Updated dependencies [608033b]
|
|
241
|
+
- Updated dependencies [611566b]
|
|
242
|
+
- Updated dependencies [d66d7e8]
|
|
243
|
+
- Updated dependencies [15d8ca6]
|
|
244
|
+
- Updated dependencies [378896d]
|
|
245
|
+
- Updated dependencies [71243db]
|
|
246
|
+
- Updated dependencies [a8add5c]
|
|
247
|
+
- Updated dependencies [33ee9de]
|
|
248
|
+
- Updated dependencies [4839f5c]
|
|
249
|
+
- Updated dependencies [c7462e7]
|
|
250
|
+
- Updated dependencies [e058d76]
|
|
251
|
+
- Updated dependencies [c999d4c]
|
|
252
|
+
- Updated dependencies [8df2608]
|
|
253
|
+
- Updated dependencies [5483297]
|
|
254
|
+
- Updated dependencies [ed43c79]
|
|
255
|
+
- Updated dependencies [260ef71]
|
|
256
|
+
- Updated dependencies [655e897]
|
|
257
|
+
- Updated dependencies [655e897]
|
|
258
|
+
- Updated dependencies [69a408f]
|
|
259
|
+
- Updated dependencies [d2b21a1]
|
|
260
|
+
- Updated dependencies [5ff64ef]
|
|
261
|
+
- Updated dependencies [26323c4]
|
|
262
|
+
- Updated dependencies [9753811]
|
|
263
|
+
- Updated dependencies [bc281f4]
|
|
264
|
+
- Updated dependencies [d637be3]
|
|
265
|
+
- Updated dependencies [2cfdc99]
|
|
266
|
+
- Updated dependencies [1e6d83b]
|
|
267
|
+
- Updated dependencies [c219165]
|
|
268
|
+
- Updated dependencies [a7ae252]
|
|
269
|
+
- Updated dependencies [fb501bc]
|
|
270
|
+
- Updated dependencies [30083da]
|
|
271
|
+
- Updated dependencies [025130c]
|
|
272
|
+
- Updated dependencies [8aa8e3e]
|
|
273
|
+
- Updated dependencies [024b7b6]
|
|
274
|
+
- Updated dependencies [909c64e]
|
|
275
|
+
- Updated dependencies [9e7e1a5]
|
|
276
|
+
- Updated dependencies [2493e85]
|
|
277
|
+
- Updated dependencies [d0b9648]
|
|
278
|
+
- Updated dependencies [46dbf32]
|
|
279
|
+
- Updated dependencies [a928aaa]
|
|
280
|
+
- Updated dependencies [61ed5ad]
|
|
281
|
+
- Updated dependencies [1b94d50]
|
|
282
|
+
- Updated dependencies [988aa9f]
|
|
283
|
+
- Updated dependencies [fb85637]
|
|
284
|
+
- Updated dependencies [9f1dd79]
|
|
285
|
+
- Updated dependencies [df71568]
|
|
286
|
+
- Updated dependencies [d11174a]
|
|
287
|
+
- Updated dependencies [2d8a8b7]
|
|
288
|
+
- Updated dependencies [cbac9d7]
|
|
289
|
+
- Updated dependencies [616df65]
|
|
290
|
+
- Updated dependencies [4b92c5a]
|
|
291
|
+
- Updated dependencies [3650d94]
|
|
292
|
+
- Updated dependencies [8cd4db4]
|
|
293
|
+
- Updated dependencies [daeb77f]
|
|
294
|
+
- Updated dependencies [eb4552e]
|
|
295
|
+
- Updated dependencies [3c3115e]
|
|
296
|
+
- Updated dependencies [55e90fd]
|
|
297
|
+
- Updated dependencies [9b75509]
|
|
298
|
+
- Updated dependencies [b13ea3c]
|
|
299
|
+
- Updated dependencies [d7e9e9a]
|
|
300
|
+
- Updated dependencies [cf62edf]
|
|
301
|
+
- Updated dependencies [0253416]
|
|
302
|
+
- Updated dependencies [5d77c09]
|
|
303
|
+
- Updated dependencies [3fd8625]
|
|
304
|
+
- Updated dependencies [1473757]
|
|
305
|
+
- Updated dependencies [d73d987]
|
|
306
|
+
- Updated dependencies [12ff256]
|
|
307
|
+
- Updated dependencies [26b0bd2]
|
|
308
|
+
- Updated dependencies [26b0bd2]
|
|
309
|
+
- Updated dependencies [d328698]
|
|
310
|
+
- Updated dependencies [d328698]
|
|
311
|
+
- Updated dependencies [b4e0787]
|
|
312
|
+
- Updated dependencies [088e0f7]
|
|
313
|
+
- Updated dependencies [78b07f4]
|
|
314
|
+
- Updated dependencies [b403bb3]
|
|
315
|
+
- Updated dependencies [4016370]
|
|
316
|
+
- Updated dependencies [12dc7b4]
|
|
317
|
+
- @object-ui/types@18.0.0
|
|
318
|
+
- @object-ui/components@18.0.0
|
|
319
|
+
- @object-ui/core@18.0.0
|
|
320
|
+
- @object-ui/react@18.0.0
|
|
321
|
+
|
|
322
|
+
## 17.7.0
|
|
323
|
+
|
|
324
|
+
### Minor Changes
|
|
325
|
+
|
|
326
|
+
- d6a1a80: feat(layout): a host can hide a `doc` navigation entry the member may not read (objectui#10188)
|
|
327
|
+
|
|
328
|
+
`NavigationRenderer`, `AppSchemaRenderer` and `hasVisibleNavigationItems` take an optional
|
|
329
|
+
`checkDocTarget` — a `DocTargetChecker`, asked `{ book, doc }` for each `type: 'doc'` entry.
|
|
330
|
+
An entry it answers `false` for is not drawn, is not collected into Favorites, and does not
|
|
331
|
+
make its area count as visible: it joins the one guard statement the other item guards
|
|
332
|
+
already share. Without it, `doc` entries draw as before.
|
|
333
|
+
|
|
334
|
+
It is defence in depth. The server is the enforcer (ADR-0046 §6.7): its app read already
|
|
335
|
+
leaves out a `doc` entry the member may not read. This layer holds no audience rules, so the
|
|
336
|
+
host answers from the member's own doc / book reads. `DocNavTarget` and `DocTargetChecker` are
|
|
337
|
+
exported. `CapabilityChecker` is unchanged: it asks whether the runtime has a target, and this
|
|
338
|
+
checker asks whether the member may read it.
|
|
339
|
+
- ad1785c: refactor(layout)!: retire the `page-header` node type key; the header node is `page:header` (objectui#10859, batch 8 phase 2c)
|
|
340
|
+
|
|
341
|
+
**BREAKING (authoring):** `registerLayout()` no longer registers `PageHeader` under `page-header` (and with it `layout:page-header`). `objectui validate` already refused a `page-header` node at `type`, and nothing in this repository authored or emitted it. objectstack's `page-header-subtitle-alias` conversion renames the key `description` → `subtitle` on both header spellings and leaves the type to objectui. A `page-header` node now renders the "Unknown component type" panel. `PageHeader` stays a named export for JSX composition.
|
|
342
|
+
|
|
343
|
+
Migration, measured against `objectui validate` (`page:header` carries its props in `properties`):
|
|
344
|
+
|
|
345
|
+
- `{ "type": "page-header", "title": T, "subtitle": S }` → `{ "type": "page:header", "properties": { "title": T, "subtitle": S } }`;
|
|
346
|
+
- `actions` (action ids) → `properties.actions`, the same id array;
|
|
347
|
+
- `icon` has no `page:header` spelling: the contract refuses `properties.icon` by name (an ADR-0087 D2 tombstone). Drop it, or compose `PageHeader` in JSX, which still takes `icon`;
|
|
348
|
+
- `children` (the right-hand slot) has no `page:header` spelling: the contract refuses a node-level `children` by name, and `properties.children` as an unrecognized key. Put the buttons in `properties.actions` as action ids, or compose `PageHeader` in JSX, which still renders its `children`.
|
|
349
|
+
|
|
350
|
+
`registerLayout()` now registers four keys: `layout:page:card`, `responsive-grid`, `navigation-renderer` and `app-schema-renderer`.
|
|
351
|
+
|
|
352
|
+
**Clause-②: yes** — a registration leaves the runtime (narrowing), released as `minor` with this banner.
|
|
353
|
+
|
|
354
|
+
⚠️ **Dated note, 2026-10-02 — `responsive-grid` and `navigation-renderer` are retired too — objectui#11441.**
|
|
355
|
+
Later in this same release objectui#11441 (the maintainer's ruling, letters B / B) unregistered both, with their
|
|
356
|
+
`layout:` twins, so `registerLayout()` registers two keys: `layout:page:card` and `app-schema-renderer`. The rest of
|
|
357
|
+
this entry is kept as the reading of this change.
|
|
358
|
+
- e6bc087: feat: a `doc` navigation entry (ADR-0046) validates and draws as a link into the docs portal
|
|
359
|
+
|
|
360
|
+
`@objectstack/spec` 17.5.0 added a tenth navigation item type, `doc` — `{ type: 'doc', book }`
|
|
361
|
+
opens a book, `{ type: 'doc', doc }` opens one page, both opens that page in that book's
|
|
362
|
+
context. `objectui validate` refused it: `NavigationItemTypeSchema` was a hand-written list of
|
|
363
|
+
the nine older types, while the TypeScript `NavigationItemType`, derived from the spec, already
|
|
364
|
+
carried `doc`. And no renderer drew one — `resolveHref` had no `doc` branch, so the entry
|
|
365
|
+
rendered as a dead `#` link.
|
|
366
|
+
|
|
367
|
+
- **`@object-ui/types`** — `NavigationItemTypeSchema` is now read off the discriminator of the
|
|
368
|
+
spec's navigation union instead of hand-listed, so it gains `doc`. A `doc` entry is judged by
|
|
369
|
+
the spec's own `DocNavItemSchema`: it accepts exactly what the spec accepts — at least one of
|
|
370
|
+
`book` / `doc`, a doc NAME (a filename or a path is refused), a snake_case `id`, and the closed
|
|
371
|
+
key set of the spec's `doc` arm — and refuses an empty `label` as every sibling type does. The
|
|
372
|
+
parsed entry is never rewritten. `NavigationEntryItem` gains the spec-derived `book` and `doc`
|
|
373
|
+
members. An unknown `type` is now refused with `invalid_union` at `type` (was `invalid_value`),
|
|
374
|
+
the code the spec's own union answers with.
|
|
375
|
+
- **`@object-ui/layout`** — `resolveHref` sends a `doc` entry to the console docs portal under
|
|
376
|
+
its `basePath`: `/docs/DOC`, `/docs/BOOK` or `/docs/BOOK/DOC`. An unlabelled `doc`
|
|
377
|
+
entry shows the page it opens, else the book. It is gated by the same base keys as its
|
|
378
|
+
siblings (`visible`, `requiredPermissions`, `requiresObject`, `requiresService`); the book
|
|
379
|
+
audience gate stays the server's. The mobile tab bar links it the same way.
|
|
380
|
+
- **`@object-ui/app-shell`** — the app designer's preview keys its navigation kinds by
|
|
381
|
+
`NavigationItemType`, so a `doc` entry is drawn with its target and route instead of being
|
|
382
|
+
dropped (label-less) or badged `untyped`.
|
|
383
|
+
- **`@object-ui/plugin-designer`** — `NAV_TYPE_META` drops the `| 'doc'` key that bridged the
|
|
384
|
+
spec pin lag; it is keyed by `NavigationItemType` alone.
|
|
385
|
+
- **`@object-ui/console`** — the docs portal resolves a path segment that is a book's NAME
|
|
386
|
+
rather than its `slug` — what a `{ type: 'doc', book }` entry links to — and redirects to
|
|
387
|
+
the book's canonical slug URL: `/docs/NAME` opens the book, `/docs/NAME/DOC` reads that page
|
|
388
|
+
with the book's sidebar. It is looked up after a book's slug and an installed doc's name, so
|
|
389
|
+
every URL that resolved before answers as it did; only former "Documentation not found"
|
|
390
|
+
answers change.
|
|
391
|
+
- 770cc5b: feat(layout): a navigation label written as an inline locale map renders in the viewer's locale; three inert resolver props retire (objectui#11299)
|
|
392
|
+
|
|
393
|
+
**Breaking for a consumer that passes the retired props or calls `resolveNavItemLabel` with six arguments** — a compile error, never a silent change of what renders.
|
|
394
|
+
|
|
395
|
+
- **New: `NavigationRenderer`'s optional `locale` prop**, and a trailing `locale`
|
|
396
|
+
argument on `resolveNavItemLabel`. A present entry label written as an inline locale
|
|
397
|
+
map (`{ en: 'Accounts', 'zh-CN': '客户' }`) renders the entry for that locale, through
|
|
398
|
+
the spec's own `resolveI18nLabel`; when the map has no entry for it, that resolver's
|
|
399
|
+
fallback order applies. objectui#11201 rendered such a map's `en` entry for every
|
|
400
|
+
viewer; pass the viewer's language as `locale` to show theirs. Without `locale` the
|
|
401
|
+
map still reads its `en` entry. A plain-string label and an absent label are
|
|
402
|
+
unaffected.
|
|
403
|
+
- **Retired: `NavigationRenderer`'s `resolveObjectLabel`, `resolveDashboardLabel` and
|
|
404
|
+
`resolveViewLabel` props.** objectui#11201 stopped reading them and kept them as
|
|
405
|
+
no-ops; they are removed now. Delete them from your `NavigationRenderer` call. An
|
|
406
|
+
unlabelled entry's localized text comes from `resolveTargetLabel`, as before.
|
|
407
|
+
- **Changed signature: `resolveNavItemLabel(item, t?, targetLabel?, locale?)`.** The
|
|
408
|
+
2nd, 4th and 5th arguments (the same three resolvers) are gone. A call written
|
|
409
|
+
`resolveNavItemLabel(item, undefined, t, undefined, undefined, targetLabel)` becomes
|
|
410
|
+
`resolveNavItemLabel(item, t, targetLabel, locale)`.
|
|
411
|
+
|
|
412
|
+
Marked `minor`, not `major`: this repository's fixed release group follows the
|
|
413
|
+
`@objectstack` major, so a breaking change of its own is declared `minor` with the
|
|
414
|
+
break spelled out here.
|
|
415
|
+
- 9d1c0bf: refactor(layout)!: retire the `navigation-renderer` and `responsive-grid` node type keys; navigation is application metadata, and the breakpoint grid is `grid` (objectui#11441)
|
|
416
|
+
|
|
417
|
+
**BREAKING (authoring):** `registerLayout()` no longer registers `NavigationRenderer` under `navigation-renderer` or `ResponsiveGrid` under `responsive-grid` (and with them `layout:navigation-renderer` and `layout:responsive-grid`). This executes the maintainer's ruling on objectui#11441 (letters B / B) as one more batch of objectui#10859. `objectui validate` already refused both keys at `type`, and nothing in this repository or in objectstack authored or emitted either node. A node of either type now renders the "Unknown component type" panel. `registerLayout()` now registers two keys: `layout:page:card` and `app-schema-renderer`.
|
|
418
|
+
|
|
419
|
+
`NavigationRenderer` and `ResponsiveGrid` stay named exports for JSX composition. `NavigationRenderer` is what the console's sidebar and `AppSchemaRenderer` mount. `ResponsiveGrid` had no in-repo consumer other than the retired registration, and it stays because the same ruling keeps objectui#7580's vocabulary half: `BreakpointColumnMap` stays declared in this package as the type of its `columns` prop.
|
|
420
|
+
|
|
421
|
+
Migration, measured against `objectui validate` on both of its faces:
|
|
422
|
+
|
|
423
|
+
- `{ "type": "responsive-grid", "columns": C, "gap": G }` → `{ "type": "grid", "columns": C, "gap": G }`. `grid` accepts the same breakpoint `columns` object (`xs` … `2xl`) and a `gap` number, and refuses an unknown breakpoint key as an unrecognized key (`unrecognized_keys` on `columns`). Unlike `responsive-grid`, which drew `not-a-container` and rendered no authored child list, `grid` draws its `children`;
|
|
424
|
+
- `{ "type": "navigation-renderer", "items": I }` has no page-node replacement: navigation is application metadata. Put `I` in the app document's `navigation` (`{ "type": "app", "name": N, "navigation": I }` validates on both faces), and the shell draws it: the console's sidebar, or `AppSchemaRenderer` in JSX;
|
|
425
|
+
- `basePath` has no app-document spelling: the strict face refuses it as an unrecognized key. It belongs to the shell, as `AppSchemaRenderer`'s `basePath` prop.
|
|
426
|
+
|
|
427
|
+
**Clause-②: yes** — two registrations leave the runtime (narrowing), released as `minor` with this banner.
|
|
428
|
+
|
|
429
|
+
⚠️ **Dated note, 2026-10-02 — `grid` takes one of ten `gap` steps, not any number — objectui#11474.** At this change `grid` accepted any `gap` number; now it accepts one of 0, 1, 2, 3, 4, 5, 6, 8, 10 and 12, the steps the `grid` renderer maps, and `objectui validate` refuses any other `G` at `gap` on both faces with that set named: 7, 9, 11, a number above 12, a negative number or a fraction. For such a number `grid` drew no gap anyway, because the class it built at runtime is in no compiled stylesheet. So in the migration above `G` must be one of those ten steps; each step `ResponsiveGrid`'s own class map drew (0 to 6 and 8) is one of them. `.changeset/11474-layout-spacing-sets.md` states what ships. The rest of this entry is kept as the reading of this change.
|
|
430
|
+
|
|
431
|
+
⚠️ **Dated note, 2026-10-02 — `grid` takes column counts 1 to 12, not any number — objectui#11491.** At this change `grid` accepted any count in the breakpoint `columns` object; now each count is one of 1 to 12, the counts the `grid` renderer maps, and `objectui validate` refuses any other count in `C` at `columns` on both faces with that set named. For such a count `grid` drew no column class at that breakpoint anyway. So in the migration above every count in `C` must be one of 1 to 12; each count `ResponsiveGrid`'s own class map drew (1, 2, 3, 4, 6 and 12) is one of them. `.changeset/11491-grid-columns-set.md` states what ships. The rest of this entry is kept as the reading of this change.
|
|
432
|
+
- fcdc8ec: An `app-schema-renderer` node draws the app document it carries under `schema` (objectui#11494, triage ruling A).
|
|
433
|
+
|
|
434
|
+
**Breaking for a node that writes the app document's keys flat on itself** (shipped as `minor`, per this repository's version policy). `SchemaRenderer` hands every registered component the node itself as its `schema` prop, and `registerLayout()` registered `AppSchemaRenderer` directly, so the component took the node for its app document: a document nested under the node's `schema` key drew an empty shell, and only app keys written flat on the node (`navigation`, `title`, …), which no schema declares, drew. `registerLayout()` now registers the key against an adapter that hands `node.schema` to `AppSchemaRenderer`:
|
|
435
|
+
|
|
436
|
+
- `{ "type": "app-schema-renderer", "schema": { "type": "app", "name": "crm", "navigation": [ … ] } }` draws the document's branding and navigation.
|
|
437
|
+
- The same keys written flat on the node are no longer read. Move them under `schema`, with `"type": "app"`. No producer in objectui or objectstack authors them flat.
|
|
438
|
+
- A node without `schema` draws the shell with no branding and no navigation, as it did before.
|
|
439
|
+
|
|
440
|
+
Unchanged: `basePath` and `mobileNavMode` are read off the node, the registration's three declared `inputs`, and `AppSchemaRenderer` itself, whose JSX hosts pass `schema={appDocument}` directly. A node's `children` are still not rendered.
|
|
441
|
+
- 969ba84: Renderers for the `app:launcher` and `nav:menu` page blocks.
|
|
442
|
+
Phase 1 of the 2026-08-26 maintainer ruling on objectstack#12183 — the two
|
|
443
|
+
`PageComponentType` members that are purely metadata-driven, so nothing had to
|
|
444
|
+
ship before their renderers could. Phase 2 (`global:search` /
|
|
445
|
+
`global:notifications`) landed in `f99932a42` and set the pattern this
|
|
446
|
+
follows.
|
|
447
|
+
|
|
448
|
+
A page that declared either member drew a dashed box. The two symptoms were not
|
|
449
|
+
the same, which is worth recording because it decides what "fixed" looks like
|
|
450
|
+
for each:
|
|
451
|
+
|
|
452
|
+
- `nav:menu` is in `PALETTE_PLACEHOLDER_BLOCKS`, registered eagerly, so it drew
|
|
453
|
+
the literal "Component Placeholder" scaffold in every host.
|
|
454
|
+
- `app:launcher` is only in `PROTOCOL_COMPONENTS`, registered when a host opts
|
|
455
|
+
in via `registerPlaceholders()` — which just `apps/console` does. So it drew
|
|
456
|
+
the scaffold in the console and `SchemaRenderer`'s red OBJUI-001 "Unknown
|
|
457
|
+
component type" panel everywhere else.
|
|
458
|
+
|
|
459
|
+
Neither block adds a data layer — each mounts plumbing that was already live,
|
|
460
|
+
and neither issues a request or touches an adapter:
|
|
461
|
+
|
|
462
|
+
- `app:launcher` reads the metadata app registry (`useMetadata().apps`, which
|
|
463
|
+
`MetadataProvider` fetches eagerly) through the shared `filterActiveApps`
|
|
464
|
+
predicate, and draws it with `HomeAppsStrip` — the console's own launcher
|
|
465
|
+
grid — so an authored launcher and the Home launcher cannot drift into two
|
|
466
|
+
looks for one thing.
|
|
467
|
+
- `nav:menu` reads the active app's navigation tree from that same registry and
|
|
468
|
+
renders it as page content, taking every derived fact from `@object-ui/layout`:
|
|
469
|
+
hrefs from `resolveHref`, labels from `resolveNavItemLabel`, the active row
|
|
470
|
+
from `resolveActiveNavItem`, and the item-level guards (`visible`,
|
|
471
|
+
`requiredPermissions`, `requiresObject` / `requiresService`) in the order
|
|
472
|
+
`NavigationItemRenderer` applies them, wired to the same console providers
|
|
473
|
+
`UnifiedSidebar` wires them to. `action` items dispatch through
|
|
474
|
+
`useNavActionDispatch`, so framework#4509's "renders but dead-clicks" shape is
|
|
475
|
+
not reintroduced.
|
|
476
|
+
|
|
477
|
+
`nav:menu` does not mount `NavigationRenderer` itself: that renders through
|
|
478
|
+
`SidebarMenuButton`, whose `useSidebar()` throws outside the shell's
|
|
479
|
+
`SidebarProvider`, and a page block has to render standalone. `@object-ui/layout`
|
|
480
|
+
therefore exports `resolveNavItemLabel`, which was module-private — an additive
|
|
481
|
+
export with no behaviour change, so the sidebar and an authored menu cannot show
|
|
482
|
+
one nav entry under two names.
|
|
483
|
+
|
|
484
|
+
Both registrations publish **no** `inputs`: `ComponentPropsMap` declares an empty
|
|
485
|
+
shape for each, and both use `skipFallback: true` so neither claims the bare
|
|
486
|
+
`launcher` / `menu` keys. This does not change the Studio page palette —
|
|
487
|
+
`app:launcher` remains recorded there as a shell singleton, which is a palette
|
|
488
|
+
decision independent of whether a declared type renders.
|
|
489
|
+
|
|
490
|
+
Three new strings — the launcher's and the menu's accessible names, and the
|
|
491
|
+
menu's empty state — are declared under `console.nav` in `en.ts` and its nine
|
|
492
|
+
sibling packs. An inline `defaultValue` alone is not a fix: it renders English
|
|
493
|
+
at one call site and leaves the string untranslatable everywhere
|
|
494
|
+
(objectui#3517).
|
|
495
|
+
- e62c44e: Re-home the breakpoint layout vocabulary and delete the two dead responsive
|
|
496
|
+
implementations (objectui#7580, maintainer ruling 2026-09-04, option A).
|
|
497
|
+
|
|
498
|
+
**Breaking, deliberately, in one direction only.** `@objectstack/spec` retired its whole
|
|
499
|
+
`ui/responsive` vocabulary in objectstack#11027 — `ResponsiveConfigSchema`,
|
|
500
|
+
`BreakpointName`, `BreakpointColumnMapSchema` and `BreakpointOrderMapSchema` — on the
|
|
501
|
+
stated ground that the four types "had no other authorable carrier". That ground is
|
|
502
|
+
measurably false on the renderer side: `responsive-grid` is a REGISTERED SDUI component
|
|
503
|
+
whose authorable `columns` input is typed by `BreakpointColumnMap` and applied by
|
|
504
|
+
`resolveColumnClasses` on the render path, and `BreakpointName` types four live readers in
|
|
505
|
+
`@object-ui/mobile`. The tombstone's own return condition — the vocabulary "returns if and
|
|
506
|
+
when a renderer implements it" — is already met here, so the two types a renderer reads
|
|
507
|
+
are re-homed rather than retired.
|
|
508
|
+
|
|
509
|
+
What survives, under the same names and the same members:
|
|
510
|
+
|
|
511
|
+
- `BreakpointName` (`xs`…`2xl`) is now declared in `@object-ui/types` (`mobile.ts`) instead
|
|
512
|
+
of re-exported from the spec. **No consumer change**: same name, same six members, same
|
|
513
|
+
export sites on `@object-ui/types` and `@object-ui/mobile`. Only its provenance moved.
|
|
514
|
+
- `BreakpointColumnMap` is now declared in `@object-ui/layout` (`ResponsiveGrid.tsx`),
|
|
515
|
+
verbatim from the retired `$strict` schema: six optional column counts, no index
|
|
516
|
+
signature. `responsive-grid`'s `columns` input and its resolver are unchanged.
|
|
517
|
+
|
|
518
|
+
What is removed:
|
|
519
|
+
|
|
520
|
+
- `BreakpointOrderMap` (`@object-ui/layout`) — retired with the key, not re-homed. It had
|
|
521
|
+
no read point in the package; it was published only because the retired
|
|
522
|
+
`ResponsiveConfigSchema` paired it with the column map, so an author configuring `order`
|
|
523
|
+
needed the type. With the schema gone there is no order vocabulary for it to be the type
|
|
524
|
+
of, and re-declaring it would be the declare-without-enforce shape ADR-0049 removes.
|
|
525
|
+
- `useResponsiveConfig` (`@object-ui/mobile`), with its `SpecResponsiveConfig` and
|
|
526
|
+
`ResolvedResponsiveState` exports, and `ResponsiveProtocol` (`@object-ui/core`), with
|
|
527
|
+
`resolveResponsiveConfig` / `getVisibilityClasses` / `getColumnClasses` /
|
|
528
|
+
`getOrderClasses` / `shouldHideAtBreakpoint`. Both read the retired
|
|
529
|
+
`ResponsiveConfigSchema` and both were measured at zero callers (objectui#4773).
|
|
530
|
+
- `SpecResponsiveConfig` / `SpecBreakpointName` (`@object-ui/types`) — dead re-exports once
|
|
531
|
+
the two implementations above went, dropped rather than re-declared locally, the same
|
|
532
|
+
disposition the retired i18n names in that file already carry.
|
|
533
|
+
|
|
534
|
+
No behaviour is retired. The live per-breakpoint readers — `useBreakpoint`,
|
|
535
|
+
`ResponsiveContainer`, `BREAKPOINTS` / `BREAKPOINT_ORDER` / `getCurrentBreakpoint`, and
|
|
536
|
+
`responsive-grid` itself — are untouched.
|
|
537
|
+
|
|
538
|
+
**Sequencing.** objectui's next `@objectstack/spec` pin bump must carry `Blocked-by:`
|
|
539
|
+
objectui#7580: the retirement is merged upstream and unreleased, so this must land first.
|
|
540
|
+
|
|
541
|
+
⚠️ **Dated note, 2026-10-02 — the `responsive-grid` registration is retired — objectui#11441.**
|
|
542
|
+
Later in this same release the maintainer's ruling on objectui#11441 (letter B) unregistered `responsive-grid` (and
|
|
543
|
+
`layout:responsive-grid`). That ruling updates item 2 of this change's ruling: the vocabulary half stands, so
|
|
544
|
+
`BreakpointName` and `BreakpointColumnMap` stay declared here, and `ResponsiveGrid` stays a React export whose
|
|
545
|
+
`columns` prop `BreakpointColumnMap` types. The authorable breakpoint grid is the `grid` node with a breakpoint
|
|
546
|
+
`columns` object, which `BreakpointName` keys. The rest of this entry is kept as the reading of this change.
|
|
547
|
+
- 0ea7054: Remove 37 runtime dependencies that no file in the declaring package consumes, and gate
|
|
548
|
+
the direction so the next one cannot land (objectui#8198).
|
|
549
|
+
|
|
550
|
+
`check:phantom-deps` judges imports that are not declared; nothing judged the reverse,
|
|
551
|
+
so a declaration could outlive its last consumer indefinitely. That is what happened to
|
|
552
|
+
`recharts` in `@object-ui/components` after objectui#7397 deleted its only importer — it
|
|
553
|
+
was removed by hand on objectui#7625, and nothing would have reported the next one. The
|
|
554
|
+
new `pnpm check:unused-deps` asks the reverse question over `dependencies` and
|
|
555
|
+
`optionalDependencies` of every released package.
|
|
556
|
+
|
|
557
|
+
**Potentially breaking, for consumers relying on hoisting.** Nothing these packages ship
|
|
558
|
+
changes: their Vite `external` predicates are path-based and never read `dependencies`,
|
|
559
|
+
so no built artifact moves. What changes is the install graph — a project that imports
|
|
560
|
+
one of the removed packages while depending only on the ObjectUI package that used to
|
|
561
|
+
drag it in will no longer resolve it. Declare it directly; that is the correct
|
|
562
|
+
dependency edge in either case. The removals, by package:
|
|
563
|
+
|
|
564
|
+
- `@object-ui/plugin-designer`: `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities`, `@object-ui/fields`
|
|
565
|
+
- `@object-ui/plugin-chatbot`: `react-markdown`, `react-syntax-highlighter`, `remark-gfm` (and the orphaned `@types/react-syntax-highlighter`)
|
|
566
|
+
- `@object-ui/plugin-report`: `@object-ui/plugin-grid`, `clsx`, `react-i18next`, `tailwind-merge`
|
|
567
|
+
- `@object-ui/plugin-map`: `@objectstack/spec`, `lucide-react`, `zod`
|
|
568
|
+
- `@object-ui/runner`: `class-variance-authority`, `clsx`, `tailwind-merge`
|
|
569
|
+
- `@object-ui/core`: `lodash`, `zod`
|
|
570
|
+
- `@object-ui/layout`: `clsx`, `tailwind-merge`, and `react-dom` — which it pinned at an exact version in `dependencies` while also declaring it as a peer range, i.e. a library hard-depending on the renderer it asks its host to supply
|
|
571
|
+
- `@object-ui/plugin-dashboard`: `clsx`, `tailwind-merge`, and the same `react-dom` defect
|
|
572
|
+
- `@object-ui/plugin-ai`: `@object-ui/react`, `clsx`, `tailwind-merge`
|
|
573
|
+
- `@object-ui/fields`: `clsx`, `tailwind-merge`
|
|
574
|
+
- `@object-ui/console`: `@object-ui/react-runtime`, `sucrase`
|
|
575
|
+
- `@object-ui/auth`: `@object-ui/types`
|
|
576
|
+
- `@object-ui/plugin-calendar`: `@object-ui/fields`
|
|
577
|
+
- `@object-ui/plugin-editor`, `@object-ui/plugin-markdown`: `@object-ui/react`
|
|
578
|
+
- `@object-ui/react`: `react-hook-form`
|
|
579
|
+
|
|
580
|
+
Every one was verified by a whole-package grep before removal — the name appeared nowhere
|
|
581
|
+
under the package but its own manifest and CHANGELOG — and the whole workspace builds,
|
|
582
|
+
type-checks and tests green afterwards.
|
|
583
|
+
- a8198de: feat(types,layout,app-shell): a navigation entry with no `label` shows its target's current label, resolved at render time (objectui#9868)
|
|
584
|
+
|
|
585
|
+
`@objectstack/spec` 17.5.0 made a navigation entry's `label` optional on every
|
|
586
|
+
entry arm of its `NavigationItemSchema` (the separator still carries none), with
|
|
587
|
+
a declared semantic (the cloud#2021 letter-A ruling): absent ⇒ the entry
|
|
588
|
+
shows the CURRENT label of what it opens — the view's label when it names a
|
|
589
|
+
labelled view, else the object's / dashboard's label; present ⇒ rendered
|
|
590
|
+
verbatim. Nothing is stored for the absent case, so a renamed target shows its
|
|
591
|
+
new name on the next render.
|
|
592
|
+
|
|
593
|
+
- `@object-ui/types` (widening): `NavigationEntryItem.label` is optional, and
|
|
594
|
+
`NavigationItemSchema` accepts a label-less entry of every type the spec does,
|
|
595
|
+
filling nothing in at parse time. `id` is still required. An EMPTY label is
|
|
596
|
+
still refused — `''` is a present label that would render empty text — and the
|
|
597
|
+
message says to omit the key instead. `menuItemToNavigationItem` no longer
|
|
598
|
+
turns a missing legacy label into `''`.
|
|
599
|
+
- `@object-ui/layout` (additive public surface): `resolveNavItemLabel`
|
|
600
|
+
resolves an absent label through a new `resolveTargetLabel` resolver
|
|
601
|
+
(`NavigationRenderer` prop, types
|
|
602
|
+
`NavLabelTarget` / `NavTargetLabelResolver`), walking view → object /
|
|
603
|
+
dashboard, and falls back to the target's machine name (`viewName`,
|
|
604
|
+
`objectName`, `dashboardName`, `pageName`, `reportName`, `url`,
|
|
605
|
+
`componentRef`, the action name; a group shows its `id`). An authored label is
|
|
606
|
+
never replaced by the target's label, including one spelled like the machine
|
|
607
|
+
name. Action entries, the search filter and `AppSchemaRenderer`'s mobile tab
|
|
608
|
+
bar read the label through the same function, so an unlabelled entry no longer
|
|
609
|
+
throws there.
|
|
610
|
+
- `@object-ui/app-shell`: the sidebar, the `nav:menu` block, the ⌘K command
|
|
611
|
+
palette and the full-page search all name a nav entry through
|
|
612
|
+
`resolveNavItemLabel` with one hook over the metadata cache the shell already
|
|
613
|
+
holds (object schema, merged list views, dashboards) — no request per nav
|
|
614
|
+
entry. Read raw, a label-less entry drew a blank palette row searched as
|
|
615
|
+
`undefined`, and the search page listed it by its machine name.
|
|
616
|
+
Navigation sync stops writing `label: pageName` / `label: dashboardName` for an
|
|
617
|
+
unnamed page or dashboard; an author label is still written, and stored labels
|
|
618
|
+
are kept.
|
|
619
|
+
- 5ea623e: fix(sdui-parser,components,layout,types): containment is the declared `children` slot, not `isContainer` (objectui#9910)
|
|
620
|
+
|
|
621
|
+
`validateTree`'s `not-a-container` diagnostic now reads exactly one declaration:
|
|
622
|
+
an input named `children` in the component's registration `inputs`. Ten
|
|
623
|
+
registrations already carried such an input — `slot`-typed on `tooltip` and the
|
|
624
|
+
four `page:*` containers, `array`-typed on the five page kinds — and the
|
|
625
|
+
predicate reads the NAME, so both count. `isContainer` is no longer
|
|
626
|
+
consulted and is not a fallback — new exports `acceptsChildren` and
|
|
627
|
+
`CHILD_LIST_KEY` in `@object-ui/sdui-parser` spell the predicate, and the
|
|
628
|
+
retired `body` dialect follows the same reading.
|
|
629
|
+
|
|
630
|
+
Why: the flag was hand-kept and drifted from the renderers four times; after
|
|
631
|
+
objectui#6771 converged a dozen `schema.body` readers onto `children`, and with
|
|
632
|
+
objectui#6804 ruling the flag OFF for that population (it means layout
|
|
633
|
+
containment, and declaring it deletes a public tag from every react page's JSX
|
|
634
|
+
scope), the diagnostic landed FALSE on the one key `button`, `badge`, `alert`
|
|
635
|
+
and the `sidebar-*` parts render. The maintainer ruled declare-and-pin
|
|
636
|
+
(2026-09-24).
|
|
637
|
+
|
|
638
|
+
What is declared: every renderer under `@object-ui/components` and
|
|
639
|
+
`@object-ui/layout` that puts `schema.children` on the page — 65 registrations
|
|
640
|
+
measured bare plus `sidebar` and `sidebar-menu-button` in their provider
|
|
641
|
+
context — now declares the `children` slot; the 34 flow/inline HTML tags, the
|
|
642
|
+
seven sectioning tags, the layout primitives, `button` / `badge` / `alert` /
|
|
643
|
+
`toggle` (label and description fallbacks), `span` (read ahead of `value`),
|
|
644
|
+
`div`, `form`, `scroll-area`, the ten `sidebar-*` parts and `page-header`. Nine public blocks
|
|
645
|
+
gain the slot in `sdui.manifest.json`; a `slot` input emits no JSX attribute, so
|
|
646
|
+
the generated `.d.ts` is unchanged. `isContainer` is kept everywhere it was
|
|
647
|
+
declared and re-described on every published face (`ComponentMeta`,
|
|
648
|
+
`RuntimeWidgetManifest`, `ComponentMetaSchema`, the manifest types) as LAYOUT
|
|
649
|
+
containment — the react-page scope builder keeps reading it unchanged.
|
|
650
|
+
|
|
651
|
+
The runtime containment census is re-pointed from the flag to the input in both
|
|
652
|
+
directions (declared ⇔ actually renders, with named context probes for the
|
|
653
|
+
provider-scoped and portal renderers), `scripts/container-declaration-baseline.json`
|
|
654
|
+
is at zero, and a registration that is a layout container but renders no
|
|
655
|
+
authored list (`page:tabs`, `page:accordion`, `responsive-grid`) now draws the
|
|
656
|
+
TRUE `not-a-container` the flag used to silence.
|
|
657
|
+
|
|
658
|
+
⚠️ **Dated note, 2026-10-02 — `page-header` is retired — objectui#10859.**
|
|
659
|
+
Later in this same release objectui#10859 batch 8 (phase 2c) unregistered `@object-ui/layout`'s
|
|
660
|
+
`page-header` (and `layout:page-header`), so its `children` slot declaration left with it; authors write
|
|
661
|
+
`page:header`. The rest of this entry is kept as the reading of this change.
|
|
662
|
+
|
|
663
|
+
⚠️ **Dated note, 2026-10-02 — `responsive-grid` is retired — objectui#11441.**
|
|
664
|
+
Later in this same release objectui#11441 unregistered `@object-ui/layout`'s `responsive-grid` (and
|
|
665
|
+
`layout:responsive-grid`), so it no longer draws `not-a-container`: a node written with it renders the "Unknown
|
|
666
|
+
component type" panel. Authors write `grid` with a breakpoint `columns` object. The rest of this entry is kept as the
|
|
667
|
+
reading of this change.
|
|
668
|
+
|
|
669
|
+
⚠️ **Dated note, 2026-10-02 — the ten `sidebar-*` parts are retired — objectui#10859.**
|
|
670
|
+
Later in this same release objectui#10859 batch 8 (phase 2d) unregistered the ten `sidebar-*` parts, so their
|
|
671
|
+
`children` slot declarations left with them. `sidebar` keeps its declaration, and it now mounts its own provider
|
|
672
|
+
when none is above it, so the containment census measures it bare and its provider-scoped context probe is
|
|
673
|
+
gone, as is `sidebar-menu-button`'s. The rest of this entry is kept as the reading of this change.
|
|
674
|
+
- 73a3c89: Nav `visible`: an ancestor's predicate now reaches the whole subtree, and a group no longer outlives its children
|
|
675
|
+
|
|
676
|
+
The card reported that an app navigation item's `visible` CEL predicate was served to the
|
|
677
|
+
browser and then ignored, so the entry rendered for every user. That headline no longer
|
|
678
|
+
reproduces: measured on today's `main`, a leaf and a group whose predicate is `false` for the
|
|
679
|
+
session are both absent, and the same predicate evaluating `true` renders both — one run,
|
|
680
|
+
two sessions, asserted as a difference rather than as an absence. `evaluateVisibility`
|
|
681
|
+
routes the served `{ dialect, source }` envelope to the CEL engine, and `NavigationRenderer`
|
|
682
|
+
applies it per item.
|
|
683
|
+
|
|
684
|
+
Two paths into the same subtree did NOT apply it, and both are fixed here.
|
|
685
|
+
|
|
686
|
+
- **A pinned descendant escaped its hidden ancestor.** The Favorites section collects pinned
|
|
687
|
+
items by walking `children`, and that walk asked nothing about the node it was descending
|
|
688
|
+
through. So an author could gate a group with `visible`, watch the group disappear from the
|
|
689
|
+
tree, and still find a pinned entry from inside it rendered under Favorites — the predicate
|
|
690
|
+
evaluated, answered `false`, and changed nothing the excluded user could see. `visible`,
|
|
691
|
+
`requiredPermissions` and the `requiresObject` / `requiresService` capability gates all
|
|
692
|
+
leaked the same way, because the collection applied none of them. It now stops at a
|
|
693
|
+
gated-away node. A Favorites section whose every entry is gated away is no longer rendered
|
|
694
|
+
as a heading over an empty list.
|
|
695
|
+
|
|
696
|
+
- **A group whose children were all hidden rendered as an empty disclosure.** A labelled
|
|
697
|
+
collapsible that opens onto nothing is a dead affordance, and it contradicted
|
|
698
|
+
`hasVisibleNavigationItems` — the predicate the area switcher elects areas by, which already
|
|
699
|
+
scores such a group as contributing nothing and documents that it "can never disagree with
|
|
700
|
+
the rendered navigation". The renderer now asks that same predicate, so the sidebar and the
|
|
701
|
+
area list agree about what a user can reach. A group authored with no children at all
|
|
702
|
+
derives the same way, as it already did for area election.
|
|
703
|
+
|
|
704
|
+
The per-item guard sequence was written out twice and omitted once; it is now a single
|
|
705
|
+
`passesNavItemGuards` statement that `NavigationItemRenderer`, `hasVisibleNavigationItems`
|
|
706
|
+
and the Favorites collection share, so the three cannot drift again.
|
|
707
|
+
|
|
708
|
+
**Presentation, not authorization.** Hiding a nav entry is a UI affordance; the server still
|
|
709
|
+
enforces object and record permissions on every route an entry would have led to, and no
|
|
710
|
+
server-side check is touched. A user who types the URL directly gets the same answer as
|
|
711
|
+
before.
|
|
712
|
+
|
|
713
|
+
**Failure direction: fail-open, unchanged and now pinned.** A predicate that cannot be
|
|
714
|
+
evaluated still renders the entry, which is this tier's shipped policy. Hiding on error would
|
|
715
|
+
silently delete a user's navigation with no way to notice; showing on error leaves an entry
|
|
716
|
+
the server still refuses, and the unresolvable-predicate diagnostic still names the source.
|
|
717
|
+
|
|
718
|
+
### Patch Changes
|
|
719
|
+
|
|
720
|
+
- cd7b728: `useAppShellBranding` now puts the previous favicon back when the shell unmounts
|
|
721
|
+
(objectui#10040), the same way it already puts the previous tab title back
|
|
722
|
+
(objectui#8637).
|
|
723
|
+
|
|
724
|
+
The hook's effect makes two branded writes to the document: `document.title` and the
|
|
725
|
+
`href` of the page's icon link. The title write was scoped to the mount; the favicon
|
|
726
|
+
write was not, so a branded `favicon` stayed on the icon link after the shell went
|
|
727
|
+
away unless something else happened to re-apply an icon. In the console that something was
|
|
728
|
+
`FaviconSync`, which wrote the icon only when an operator favicon was configured (until
|
|
729
|
+
objectui#10379 removed that write) — so on a deployment without one, the icon link kept
|
|
730
|
+
a branded app's URL after the user left the app.
|
|
731
|
+
|
|
732
|
+
When `branding.favicon` is set and the page has an icon link (`#favicon`, otherwise
|
|
733
|
+
`link[rel="icon"]`), the hook now records that link and its `href` attribute before
|
|
734
|
+
writing the branded URL, and restores the recorded attribute in the same cleanup that
|
|
735
|
+
restores the title — so switching from one branded app to another and then leaving
|
|
736
|
+
puts back the icon from before the first one. The attribute is captured rather than
|
|
737
|
+
the `href` property, because the property resolves an empty `href=""` (the console's
|
|
738
|
+
icon link before an operator favicon exists) to the page's own URL; an icon link that
|
|
739
|
+
had no `href` attribute is left without one. A shell with no `favicon`, or a page with
|
|
740
|
+
no icon link, is untouched in both directions, and the hook still never creates an
|
|
741
|
+
icon link.
|
|
742
|
+
|
|
743
|
+
As with the title, the restore replays the captured value unconditionally: an icon
|
|
744
|
+
written by something else while the shell is mounted is overwritten when it unmounts.
|
|
745
|
+
- c58b8e4: `ResponsiveGrid`'s component docblock no longer attributes its column map to the
|
|
746
|
+
spec's retired `BreakpointColumnMapSchema` (objectstack#11027 retired it; objectui#7580
|
|
747
|
+
re-homed the six-key shape as this package's own `BreakpointColumnMap`). The docblock
|
|
748
|
+
now names that local type. Text only: no member is added and no behaviour changes.
|
|
749
|
+
- f976774: An app's `branding.logo` now shows in the console, and it is the only logo spelling
|
|
750
|
+
(objectui#10827).
|
|
751
|
+
|
|
752
|
+
**The console renders it.** The designer (`AppCreationWizard`, `BrandingEditor`) writes an
|
|
753
|
+
app's `branding.logo` and previews it, but nothing mounted in the console drew it. Its only
|
|
754
|
+
reader was `AppSidebar`, which was never mounted and has since been removed. `UnifiedSidebar`,
|
|
755
|
+
the console's sidebar, now reads the active app's `branding.logo` and shows it as an image in a
|
|
756
|
+
header at the top of the sidebar. The image's alt text is the app's label. An app without a
|
|
757
|
+
logo gets no header, so its sidebar looks the same as before. The header appears only inside
|
|
758
|
+
an app. On Home the sidebar's fallback app is not the screen's app, so no logo is shown there.
|
|
759
|
+
`AppShellBranding` is unchanged: objectui#4818 removed its `logo` key, and this change does not
|
|
760
|
+
add it back.
|
|
761
|
+
|
|
762
|
+
**One spelling — breaking for a top-level `logo`.** `@objectstack/spec` declares the app logo
|
|
763
|
+
only as `branding.logo` (a URL). Its app schema refuses a top-level `logo` and suggests
|
|
764
|
+
`branding`. objectui had a second spelling of its own: `AppComponentSchema.logo`, described as
|
|
765
|
+
"Logo URL or icon name". This change retires it:
|
|
766
|
+
|
|
767
|
+
- `@object-ui/types`: `AppComponentSchema.logo` is now `never` on the TypeScript face, and the
|
|
768
|
+
zod mirror refuses a top-level `logo` by name, answering "Did you mean `logo` → `branding`?".
|
|
769
|
+
It is a named refusal rather than a deletion because the node is `.passthrough()`, and a
|
|
770
|
+
deleted key would be kept without any error. `wizardDraftToAppSchema` no longer copies the
|
|
771
|
+
draft's logo to the top level. The logo goes into `branding` only.
|
|
772
|
+
- `@object-ui/layout`: `AppSchemaRenderer`'s default sidebar header draws `branding.logo` as
|
|
773
|
+
an image. This includes site-relative paths and `data:` URIs, which the old read skipped
|
|
774
|
+
because it drew an image only for values starting with `http`. The header's icon now comes
|
|
775
|
+
from the app's `icon`.
|
|
776
|
+
- `@object-ui/runner`: `LayoutRenderer`'s sidebar brand mark does the same. It draws
|
|
777
|
+
`branding.logo` as an image and takes an icon name from `icon`. It no longer guesses the kind
|
|
778
|
+
of value from a `/` or `.`.
|
|
779
|
+
|
|
780
|
+
Migration: move a top-level `logo` URL to `branding: { logo: '…' }`. An icon name that was
|
|
781
|
+
written as `logo` belongs in `icon`. The published 17.6.0 changelog entry that removed
|
|
782
|
+
`AppShellBranding.logo` says the top-level `logo` is "rendered directly by
|
|
783
|
+
`AppSchemaRenderer`'s default sidebar header". That is no longer true: the header reads
|
|
784
|
+
`branding.logo`.
|
|
785
|
+
- 25cb364: The Studio's app wizard saves an app the platform accepts, and the app favicon has one
|
|
786
|
+
spelling, `branding.favicon` (objectui#10842).
|
|
787
|
+
|
|
788
|
+
**Creating an app is no longer refused.** The console's "create app" and "edit app" pages save through
|
|
789
|
+
`client.meta.saveItem('app', …)`, and the platform judges that document with
|
|
790
|
+
`@objectstack/spec`'s strict `AppSchema`. `wizardDraftToAppSchema` wrote four top-level keys the
|
|
791
|
+
spec does not declare (`type`, `title`, `favicon` and `layout`), so the save was refused with
|
|
792
|
+
`422 INVALID_METADATA` (`unrecognized_keys`). It now writes only declared keys: the draft's
|
|
793
|
+
title as `label`, the logo and favicon inside `branding`, and no `type` or `layout`. The spec
|
|
794
|
+
has no app layout, so the wizard's layout choice is not saved.
|
|
795
|
+
|
|
796
|
+
- `@object-ui/types` — **breaking:** `wizardDraftToAppSchema` now returns the app document
|
|
797
|
+
(the spec's `App` shape, with objectui's `NavigationItem[]` as `navigation`) instead of an
|
|
798
|
+
`AppComponentSchema` renderer node. It has no `type`, `title`, top-level `favicon` or `layout`.
|
|
799
|
+
Code that read `result.title` reads `result.label`. Code that fed the result to
|
|
800
|
+
`AppSchemaRenderer` builds the renderer node itself (`type: 'app'`, `title`).
|
|
801
|
+
- `@object-ui/types` — **breaking:** `AppComponentSchema.favicon` is now `never` on the
|
|
802
|
+
TypeScript face, and the zod mirror refuses a top-level `favicon` by name, answering "Did you
|
|
803
|
+
mean `favicon` → `branding`?". This is the objectui#10827 rule that retired the top-level
|
|
804
|
+
`logo`: the spec refuses the key, and the console reads only `branding.favicon`.
|
|
805
|
+
- `@object-ui/layout`: `AppSchemaRenderer` puts `branding.favicon` on the tab. It read the
|
|
806
|
+
top-level `favicon` before, and never `branding.favicon`.
|
|
807
|
+
- `@object-ui/plugin-designer`: `EditAppPage` keeps the keys the wizard does not maintain, but
|
|
808
|
+
only keys the spec's `AppSchema` declares, read from that schema. A row stored before the
|
|
809
|
+
schema closed is served with the old wizard's top-level keys, and echoing them made every
|
|
810
|
+
edit of such an app fail the same way. Its pre-fill no longer falls back onto a top-level
|
|
811
|
+
`logo`, `favicon` or `title`; it reads `branding.logo`, `branding.favicon` and `label`.
|
|
812
|
+
|
|
813
|
+
Migration: move a top-level `favicon` URL to `branding: { favicon: '…' }`.
|
|
814
|
+
|
|
815
|
+
⚠️ **Dated note, 2026-09-28 — the wizard has no layout choice — objectui#10867.**
|
|
816
|
+
Later in this same release the wizard's Layout control was removed, with `AppWizardDraft.layout`, so there is no
|
|
817
|
+
layout choice left to not save. The rest of this entry still holds.
|
|
818
|
+
- 7343376: fix(types,plugin-designer)!: the Studio app wizard saves a document the platform accepts, and an edit keeps the stored `accentColor` (objectui#10867)
|
|
819
|
+
|
|
820
|
+
⚠️ **BREAKING (authoring)**, marked `minor` under this repository's version-alignment rule (a `major` in the fixed group would move all of it off the `@objectstack` major). Two published `@object-ui/types` members narrow: a navigation separator no longer takes a `label`, and `AppWizardDraft.layout` is removed. A TypeScript literal that writes either no longer compiles. `NavigationItem` is now a union type alias, not an interface. So code that reads `label` off an unnarrowed `NavigationItem` into a `string` slot (its type is now `string | undefined`; objectui#11299, in the same release, widens it to the spec's `I18nLabel` or `undefined`, see `.changeset/11299-types-nav-label-locale-map.md`) also stops compiling, as does code that spreads an entry-only key onto one, and an `interface` that `extends NavigationItem` or augments it (extend `NavigationEntryItem` instead). `objectui validate` now refuses a separator `label` too: the zod mirror's `NavigationItemSchema` refuses every key on a separator that the spec's separator does not declare. The four `appDesigner` layout keys also leave the published `@object-ui/i18n` packs and `DESIGNER_DEFAULT_TRANSLATIONS`, so an application that calls `t()` with one of them now renders the raw key (unless the call passes a `defaultValue`).
|
|
821
|
+
|
|
822
|
+
**Clause-②: yes (narrowing)** — the separator arm of `NavigationItem` loses `label`, and `AppWizardDraft` loses `layout`.
|
|
823
|
+
|
|
824
|
+
- **A separator carries only `type`, `id` and `order`.** `@objectstack/spec`'s separator branch declares exactly those keys, and its `AppSchema` refuses anything else. `NavigationItem` required a `label` on every item, so the wizard's "Add separator" wrote `{ id, type: 'separator', label: '' }`, and the console's create-app and edit-app saves were refused with `422 INVALID_METADATA` (`unrecognized_keys` `['label']` at `navigation.N`). `NavigationItem` is now a union of two arms, discriminated by `type`. `NavigationEntryItem` holds every other nav type and keeps its required `label`. `NavigationSeparatorItem` admits `type`, `id` and `order`, and every other entry key is `?: never` on it. Both arms are exported. Reading an entry-only key off an unnarrowed item still compiles, but its type now includes `undefined` (a `label` is `string | undefined`; objectui#11299, in the same release, makes it the spec's `I18nLabel` or `undefined`, see `.changeset/11299-types-nav-label-locale-map.md`), so passing it where a `string` is required does not. Narrow on `item.type === 'separator'` before relying on `label`. `menuItemToNavigationItem` maps a legacy separator to `{ id, type: 'separator' }` and drops its label. `spec-derived-unions.test.ts` no longer pins the separator `label` as a blocker. It asserts, at both spec tiers, that the separator arm admits the spec separator's keys and no others.
|
|
825
|
+
- **`@object-ui/plugin-designer`: the wizard and `NavigationDesigner` write a separator as `{ id, type }`.** `NavigationDesigner` no longer writes a `label` onto a new separator, and its label, icon and visibility patchers skip one.
|
|
826
|
+
- **`@object-ui/layout` narrows on the separator arm; nothing it renders changes.** `resolveNavItemLabel` answers `''` for every separator. A stored separator carrying a non-empty `label`, which `menuItemToNavigationItem` produced before this change, used to resolve to that label. No renderer asks it for a separator's label. The mobile bottom nav's leaf list, which already skipped separators, is now typed as entries.
|
|
827
|
+
- **`@object-ui/app-shell` narrows the same way; nothing it renders changes.** `useNavPins` registers a favorite only for an entry and leaves a separator as it is, and the Studio sidebar's navigation walk passes a separator through unchanged.
|
|
828
|
+
- **`@object-ui/plugin-designer`: `EditAppPage` keeps the stored branding.** The wizard maintains the logo, primary colour and favicon, and its `branding` replaced the stored block, so a stored `accentColor` was dropped on every edit. The console reads that key. The save now keeps every stored `branding` key the spec's `AppBrandingSchema` declares, read from that schema. The wizard's values win for the keys it maintains. A stored key the spec does not declare is still left out.
|
|
829
|
+
- **The wizard's Layout control is removed, with `AppWizardDraft.layout`.** The spec declares no app `layout`, no console surface reads one, and since objectui#10842 the save wrote none. The control persisted nothing. `EditAppPage` no longer reads a stored `layout` into the draft. The Basic Info step's description now reads "Name, title, and icon".
|
|
830
|
+
- **`@object-ui/i18n`:** the four `appDesigner` layout keys (`layout`, `layoutSidebar`, `layoutHeader` and `layoutEmpty`) are removed from all ten packs, and `appDesigner.stepBasicDesc` no longer names a layout.
|
|
831
|
+
|
|
832
|
+
**Migration:** write a separator as `{ id, type: 'separator' }`, with an optional `order`. Remove `layout` from any `AppWizardDraft` you build. Code that spreads an entry-only key (`label`, `visible`, `requiredPermissions` and the rest) onto a value typed `NavigationItem` narrows it first (`item.type !== 'separator'`) or types it `NavigationEntryItem`: the separator arm refuses those keys. `AppComponentSchema.layout`, the renderer node's own layout strategy, is a different member and is unchanged.
|
|
833
|
+
|
|
834
|
+
Pinned in `packages/types/src/__tests__/app-wizard-separator-layout-10867.test.ts` and `packages/plugin-designer/src/__tests__/AppWizard.specDocument-10867.test.tsx`.
|
|
835
|
+
- 1ccb5ba: fix(layout): a present navigation label renders as written, with no exception, and an inline locale-map label renders its text (objectui#11201)
|
|
836
|
+
|
|
837
|
+
A navigation entry's text now follows one rule. A present label is shown as written. An absent label
|
|
838
|
+
shows the current, localized label of what the entry opens.
|
|
839
|
+
|
|
840
|
+
- **Visible change.** An entry whose stored label is its target's machine name (for example
|
|
841
|
+
`account`, `sales_overview`) used to be translated, because the sidebar looked that text up as
|
|
842
|
+
the object's, view's or dashboard's name. It now shows the name as written, in every locale.
|
|
843
|
+
**To fix such an entry:** clear its label so it inherits the target's localized label, or set the
|
|
844
|
+
text you want shown. Stored navigation is not converted, and no notice is sent.
|
|
845
|
+
- An entry label written as an inline locale map (`{ en: 'Accounts', 'zh-CN': '客户' }`) used to
|
|
846
|
+
render as empty text. It now renders the map's text. objectui#11201 did not tell the sidebar the
|
|
847
|
+
viewer's locale, so it read the `en` entry, then `default`, then any entry; objectui#11299, in the
|
|
848
|
+
same release, gives the sidebar the viewer's locale (`.changeset/11299-layout-nav-label-locale.md`).
|
|
849
|
+
- `NavigationRenderer`'s `resolveObjectLabel`, `resolveDashboardLabel` and `resolveViewLabel` props,
|
|
850
|
+
and the matching arguments of `resolveNavItemLabel`, are no longer read. objectui#11201 still
|
|
851
|
+
accepted them, so no caller broke; objectui#11299, in the same release, removes them
|
|
852
|
+
(`.changeset/11299-layout-nav-label-locale.md`). An unlabelled entry's localized text comes from
|
|
853
|
+
`resolveTargetLabel`.
|
|
854
|
+
- c18a075: fix(layout): the mobile tab bar opens the same page as the sidebar (objectui#11211)
|
|
855
|
+
|
|
856
|
+
With `mobileNavMode: 'bottom_nav'`, `AppSchemaRenderer`'s bottom tab bar used to
|
|
857
|
+
build each tab's link itself, so some navigation entries opened a different page
|
|
858
|
+
there than in the sidebar:
|
|
859
|
+
|
|
860
|
+
- a record deep link (`recordId`) opened the object's list instead of the record;
|
|
861
|
+
- an entry with `filters` opened the list without its filter;
|
|
862
|
+
- an entry with `runAction` opened the list without running its action;
|
|
863
|
+
- a `metadata:*` component entry opened the generic component route instead of
|
|
864
|
+
the metadata page;
|
|
865
|
+
- a `page` entry dropped its `params`, and `recordMode: 'edit'` was ignored.
|
|
866
|
+
|
|
867
|
+
Every tab now links to exactly the page its sidebar row links to. Two related
|
|
868
|
+
behaviours follow the sidebar too: the highlighted tab is the one whose sidebar
|
|
869
|
+
row is highlighted (at most one tab lights, and a filtered or quick-action tab
|
|
870
|
+
lights on its own page), and a `url` entry with `target: '_blank'` opens in a
|
|
871
|
+
new browser tab.
|
|
872
|
+
- 5ad9f5d: fix(layout): the mobile tab bar draws only the entries its sidebar draws
|
|
873
|
+
|
|
874
|
+
`AppSchemaRenderer` with `mobileNavMode: 'bottom_nav'` drew its tab bar from the
|
|
875
|
+
navigation tree with no entry guard. An entry the author hid with `visible: false`,
|
|
876
|
+
or gated with `requiredPermissions` the viewer lacks, was hidden in the sidebar and
|
|
877
|
+
still drawn as a tab, and an `action` entry became a tab linking to the root. The
|
|
878
|
+
five-tab cap was applied before any guard, so a hidden entry also took the place of
|
|
879
|
+
one that should have shown.
|
|
880
|
+
|
|
881
|
+
The bar now asks the sidebar's own guard about every node, through
|
|
882
|
+
`hasVisibleNavigationItems` (the predicate the area list already uses, built on
|
|
883
|
+
`passesNavItemGuards`), with the same evaluator, permission checker, capability
|
|
884
|
+
checker and doc-target checker the sidebar gets. The guard runs before the cap, and a
|
|
885
|
+
group the viewer may not see takes its entries with it, as in the sidebar. An
|
|
886
|
+
`action` entry is drawn the sidebar's way, as a button that hands the whole item to
|
|
887
|
+
`onAction`, and is left off the bar when no `onAction` is wired, which is when the
|
|
888
|
+
sidebar hides it too.
|
|
889
|
+
|
|
890
|
+
These are UI visibility gates, not data access: a route behind a wrongly drawn tab
|
|
891
|
+
still answered with its own server-side checks.
|
|
892
|
+
- 7728c67: fix(layout): the mobile tab bar draws its tabs in the sidebar's order, and shows an entry's badge
|
|
893
|
+
|
|
894
|
+
`AppSchemaRenderer` with `mobileNavMode: 'bottom_nav'` drew its tab bar in authored
|
|
895
|
+
position and never read `order`. Two entries written `Zeta` (`order: 2`) then
|
|
896
|
+
`Ypsilon` (`order: 1`) came out `Ypsilon, Zeta` in the sidebar and `Zeta, Ypsilon` on
|
|
897
|
+
the bar. With more than five entries, the five-tab cap kept the first five by authored
|
|
898
|
+
position rather than the five the sidebar lists first.
|
|
899
|
+
|
|
900
|
+
The bar now sorts each level with the sidebar's own comparator before it flattens:
|
|
901
|
+
first the top level, then each group's children. The guard and the five-tab cap run
|
|
902
|
+
after the sort, so the five tabs are the first five entries the sidebar draws. The
|
|
903
|
+
comparator lives in one internal module, and the sidebar's two sort sites use it too.
|
|
904
|
+
It is not exported, so the package's public API does not change. An entry with no
|
|
905
|
+
`order` still sorts as `0`, and entries with equal `order` keep their authored order,
|
|
906
|
+
as in the sidebar before.
|
|
907
|
+
|
|
908
|
+
The bar also dropped an entry's `badge` and `badgeVariant`. It now draws them on the
|
|
909
|
+
tab with the same `Badge` component and the same variant the sidebar row uses.
|
|
910
|
+
- d9a0490: Correct the `AppShellBranding.title` doc comment. It read "Page title
|
|
911
|
+
suffix (sets document.title)" while `useAppShellBranding` assigns `document.title = title`
|
|
912
|
+
wholesale — nothing is appended; the caller composes the whole string (the console passes
|
|
913
|
+
`"App label — Product name"`). That comment ships in `dist/index.d.ts` and is the only
|
|
914
|
+
description a consumer sees on editor hover, so a reader who followed it passed a
|
|
915
|
+
suffix-only fragment and got a truncated title with no error. The comment now carries the
|
|
916
|
+
same wording as `content/docs/layout/app-shell.mdx`, and agrees with the `AppShellProps`
|
|
917
|
+
tables in the package README and `content/docs/guide/layout.md`. No runtime behaviour
|
|
918
|
+
changes; the wholesale assignment and the four-surface agreement are now pinned by tests.
|
|
919
|
+
- 63a8828: Record headers: give the title column a width floor so a wide action tail can no
|
|
920
|
+
longer starve it.
|
|
921
|
+
|
|
922
|
+
Two headers repeated the title/action width arbitration objectui#7244 fixed on
|
|
923
|
+
`page:header`. Both were measured in Chromium at a 799px viewport with three
|
|
924
|
+
labelled `record_header` actions, before and after:
|
|
925
|
+
|
|
926
|
+
| header | before | after |
|
|
927
|
+
| --- | --- | --- |
|
|
928
|
+
| `DetailView` (`type: 'detail'`, the header that renders when the host supplies no `page:header`) | h1 6.17px of a 218px title | 218.39px, tail wrapped to its own line |
|
|
929
|
+
| `PageHeader` (`@object-ui/layout`) | h1 170.59px of a 265px title | 751.00px, tail wrapped to its own line |
|
|
930
|
+
|
|
931
|
+
`DetailView` gets the precedent's two utilities, both `sm:`-scoped so the
|
|
932
|
+
sub-640px column layout is untouched: `sm:flex-wrap` on the row and
|
|
933
|
+
`sm:min-w-64` on the title column. The floor is one step above the precedent's
|
|
934
|
+
`sm:min-w-48` because this title column carries the 40px back button and a 12px
|
|
935
|
+
gap inside it, so 256px is what leaves the h1 the same ~192px readable floor.
|
|
936
|
+
|
|
937
|
+
`PageHeader`'s row already wrapped, so it needed only the floor — and that floor
|
|
938
|
+
is unconditional rather than `sm:`-scoped, because this row has no
|
|
939
|
+
breakpoint-scoped direction change and the squeeze measures worse just below
|
|
940
|
+
`sm` (639px: h1 10.59px of a 212px title). `min-w-48` replaces `min-w-0` rather
|
|
941
|
+
than joining it: an explicit min-width overrides a flex item's automatic
|
|
942
|
+
min-content minimum exactly as `min-w-0` did, so long titles still ellipsise
|
|
943
|
+
(measured at 799px: 751px rendered of a 1682px title, no horizontal overflow).
|
|
944
|
+
|
|
945
|
+
Wide viewports are unchanged: at 1440px both headers keep the tail on the
|
|
946
|
+
title's line with the title unclipped, before and after alike.
|
|
947
|
+
- c6198c2: **Breaking for authored metadata:** `ComponentInput.label`, `ComponentInput.defaultValue` and
|
|
948
|
+
`ComponentInput.advanced` are RETIRED on both faces (objectui#7493 item ① and objectui#7781;
|
|
949
|
+
maintainer ruling A of 2026-09-06, immediate, no deprecation window; ADR-0049 enforce-or-remove).
|
|
950
|
+
They are the three keys the manifest serializer does not forward, and nothing read them on any
|
|
951
|
+
publication or consumption path.
|
|
952
|
+
|
|
953
|
+
No manifest ever published them, so no consumer could ever have read them. `sdui-parser`'s
|
|
954
|
+
serializer (`packages/sdui-parser/src/index.ts`) forwards exactly seven keys per input — `name`,
|
|
955
|
+
`type`, `of`, `required`, `enum`, `binding`, `description` — so a value authored under any of the three
|
|
956
|
+
never reached `sdui.manifest.json`, the generated JSX `.d.ts`, or a diagnostic; its boundary type
|
|
957
|
+
has no slot for them; the registry's data-source seam reads `name` only; and neither the designer
|
|
958
|
+
nor the app-shell inspectors consult registry `inputs` at all. A structural census over every
|
|
959
|
+
`inputs:` array in the repository (re-measured on this change's merge-base, `name` 951 and `type`
|
|
960
|
+
951 as the controls) counted the writes: `label` 908, `defaultValue` 245, `advanced` 9 — written on
|
|
961
|
+
nearly every registration, read by nothing.
|
|
962
|
+
|
|
963
|
+
FROM → TO, per key — all three **TOMBSTONED, not removed**, because the route was measured on
|
|
964
|
+
the built face before it was chosen: `ComponentInputSchema` is a non-strict `z.object`, and an
|
|
965
|
+
undeclared key parses GREEN and is silently STRIPPED, so a deletion would have swallowed 1,162
|
|
966
|
+
authored values in silence. The tombstone is what makes the refusal loud and by name.
|
|
967
|
+
|
|
968
|
+
- `label?: string` → `label?: never` on the interface, `retirementTombstone()` on the Zod mirror.
|
|
969
|
+
Migration: delete the key. An input is identified by its `name` on every path that reaches it;
|
|
970
|
+
nothing ever rendered a label for it.
|
|
971
|
+
- `defaultValue?: any` → `defaultValue?: never` / `retirementTombstone()`. Migration: delete the
|
|
972
|
+
key. The renderer's own fallback read IS the default; tell the author about it in `description`,
|
|
973
|
+
which IS published. (Tightening the type to `unknown` was ruled out: it closes no error class,
|
|
974
|
+
since nothing reads the value.)
|
|
975
|
+
- `advanced?: boolean` → `advanced?: never` / `retirementTombstone()`. Migration: delete the key.
|
|
976
|
+
No designer surface ever hid an "advanced" input; there is nothing to write instead.
|
|
977
|
+
|
|
978
|
+
The retirement kit: `?: never` on `ComponentInput` (`packages/types/src/base.ts`), so authoring one
|
|
979
|
+
is a `tsc` error at the registration site; `retirementTombstone()` on `ComponentInputSchema`
|
|
980
|
+
(`packages/types/src/zod/base.zod.ts`), so an authored value is REFUSED at parse time with
|
|
981
|
+
`code: 'invalid_type'`, the key named in the issue `path`, and the migration note as the message
|
|
982
|
+
(one string, both channels). Pinned in
|
|
983
|
+
`packages/types/src/__tests__/component-input-retired-keys-7493.test.ts`, which also holds a
|
|
984
|
+
tree-scoped absence census over every `inputs:` array under `packages/**` and `apps/**`.
|
|
985
|
+
|
|
986
|
+
Accept-set change, stated plainly for reviewers: a document that sets any of the three keys on a
|
|
987
|
+
`ComponentInput` used to parse GREEN (the value was then dropped by the serializer) and now parses
|
|
988
|
+
RED. Every in-repo authoring site — 1,199 keys across 110 registration files, the three standalone
|
|
989
|
+
`ComponentInput[]` arrays and the two named input arrays `tsc` found included — is deleted in the same change, as the ruling's split rule
|
|
990
|
+
requires; the `WidgetRegistry` seam no longer copies the widget-manifest values onto the synthesized
|
|
991
|
+
`ComponentInput` (they fed nothing), and the data-source declaration `ELEMENT_DATA_SOURCE_INPUT`
|
|
992
|
+
drops its `label`. The patch entries on the other packages record exactly that: their registrations
|
|
993
|
+
stop authoring inert keys, with no runtime or published-manifest change.
|
|
994
|
+
|
|
995
|
+
The nine test files that read `defaultValue` off a registration were re-pinned against the
|
|
996
|
+
renderer's ACTUAL default (its own fallback read, or the `defaultProps` it ships) instead of the
|
|
997
|
+
declaration that went away; two assertions that only restated the shadow default were dropped with
|
|
998
|
+
the reason on the line.
|
|
999
|
+
|
|
1000
|
+
The in-repo zero is what was measured. Whether anything OUTSIDE this repository writes these keys
|
|
1001
|
+
is not measurable from here (the objectui#5674 limit); converting such a write from a silent drop
|
|
1002
|
+
into a named refusal is exactly what the tombstones buy. `WidgetInput`'s own `label` /
|
|
1003
|
+
`defaultValue` / `advanced` (the widget-manifest face) stay declared and writable — nothing has
|
|
1004
|
+
ruled on that face; that it now has no reader either is recorded as objectui#7911.
|
|
1005
|
+
- f4abff4: `@object-ui/layout` and `@object-ui/plugin-dashboard` no longer install a React of their
|
|
1006
|
+
own. `react` moves from `dependencies` to `devDependencies` at the same pin (`19.2.8`);
|
|
1007
|
+
`peerDependencies` is untouched, so both packages still ask their host for
|
|
1008
|
+
`^18.0.0 || ^19.0.0` (objectui#8303).
|
|
1009
|
+
|
|
1010
|
+
Both manifests were making two contradictory statements at once: asking the host for React
|
|
1011
|
+
as a peer, and pinning an exact React 19 of their own. The peer range is the one a consumer
|
|
1012
|
+
reads; the pin is the one their installer acts on. A consumer on React 18 therefore
|
|
1013
|
+
satisfied the peer range and **still** got a second, pinned React 19 pulled into their
|
|
1014
|
+
graph on these two packages' account. Two React copies in one tree is the classic cause of
|
|
1015
|
+
`Invalid hook call`, and the failure is not at install time — it is at first render, in the
|
|
1016
|
+
consumer's own component, with nothing pointing back at these manifests.
|
|
1017
|
+
|
|
1018
|
+
Re-measured on `origin/main` at `348725a7c` across all four `pnpm-workspace.yaml` globs
|
|
1019
|
+
(46 packages), rather than inherited from the card:
|
|
1020
|
+
|
|
1021
|
+
declares a react peer AND pins react in dependencies 2 layout, plugin-dashboard
|
|
1022
|
+
declares a react-dom peer AND pins it in dependencies 0 (objectui#8198 took that half)
|
|
1023
|
+
pins react in dependencies with NO react peer 5 runner, site, 3 examples
|
|
1024
|
+
|
|
1025
|
+
The last row is the control that keeps the fix narrow. Those five are applications that
|
|
1026
|
+
supply React rather than libraries that ask for it: one statement, not two, and correctly
|
|
1027
|
+
untouched. Against the 20+ sibling libraries the two packages fixed here were the only
|
|
1028
|
+
outliers, so this converges on the existing house shape — `app-shell`, `auth`,
|
|
1029
|
+
`collaboration`, `i18n`, `mobile` and `permissions` already carry `react` in
|
|
1030
|
+
`devDependencies` at exactly this pin.
|
|
1031
|
+
|
|
1032
|
+
`scripts/__tests__/react-peer-range-norm-3741.test.ts` gains the invariant so a regression
|
|
1033
|
+
goes red rather than being re-found by a consumer. That file already owns React manifest
|
|
1034
|
+
norms across the fixed version group, already walks the workspace globs, and already
|
|
1035
|
+
governs `react` + `react-dom`, so this is a second assertion on an existing guard rather
|
|
1036
|
+
than a new one. It asserts the CONTRADICTION, not "React in `dependencies`" — widening it
|
|
1037
|
+
further would go red on the five applications above for doing the right thing.
|
|
1038
|
+
|
|
1039
|
+
Two gates are green on this shape by construction and neither green was a reading of it.
|
|
1040
|
+
`check:unused-deps` asks whether a declared runtime dependency has a consumer, and `react`
|
|
1041
|
+
is imported by both packages — which is exactly why objectui#8198 could see and remove the
|
|
1042
|
+
`react-dom` half here and could not see this one. `check-changeset-presence.mjs` reads an
|
|
1043
|
+
eight-field allowlist that includes `peerDependencies` and deliberately excludes
|
|
1044
|
+
`dependencies`; its own docblock states the trade ("a runtime dependency bump can be just
|
|
1045
|
+
as user-visible as any of the eight, and this gate still does not see it"). This changeset
|
|
1046
|
+
is therefore owed by the house rule, not demanded by the gate.
|
|
1047
|
+
- 0febe1a: The console tab title no longer reverts to the bare product name after an in-app
|
|
1048
|
+
navigation (objectui#8637).
|
|
1049
|
+
|
|
1050
|
+
Two effects wrote `document.title` on different keys. The console's `BrandingSync`
|
|
1051
|
+
was keyed on `useLocation()` and assigned the bare product name on **every route
|
|
1052
|
+
change**; `useAppShellBranding` assigns the composed `"App label — Product name"`
|
|
1053
|
+
from an effect keyed on that string, so it fires when the title changes and not on
|
|
1054
|
+
navigation. Both run on the commit that mounts the shell, and the composed title
|
|
1055
|
+
wins — which is why the tab looked right and the defect stayed hidden. Navigating
|
|
1056
|
+
between two pages of the same app moved `location` and not the composed title, so
|
|
1057
|
+
only the route-keyed writer ran and the tab fell back to the bare product name.
|
|
1058
|
+
Measured in a real browser, not inferred.
|
|
1059
|
+
|
|
1060
|
+
The repair is one writer rather than two careful ones. `useAppShellBranding` now
|
|
1061
|
+
owns `document.title` for as long as a shell is mounted: it captures whatever the
|
|
1062
|
+
tab already said, writes `title` over it, and puts the captured string back when the
|
|
1063
|
+
shell unmounts or `title` changes. That is what let the console's route-keyed writer
|
|
1064
|
+
drop its title assignment entirely — it had doubled as the reset that took the app
|
|
1065
|
+
label back off the tab on the way out — and it became `FaviconSync`, which kept only
|
|
1066
|
+
the favicon write until objectui#10379 removed that too.
|
|
1067
|
+
|
|
1068
|
+
For hosts of `@object-ui/layout`: the forward assignment is unchanged, and a shell
|
|
1069
|
+
with no `title` still leaves the tab untouched in both directions. What is new is the
|
|
1070
|
+
restore, so a shell mounted over part of a route tree hands the title back on exit
|
|
1071
|
+
instead of stranding it. The restore replays the captured string unconditionally, so
|
|
1072
|
+
a surface that writes the tab title from **inside** a mounted shell has its value
|
|
1073
|
+
overwritten on unmount; keep such surfaces outside the shell.
|
|
1074
|
+
- fe76ece: The typings both packages publish now carry an explicit extension on every relative specifier, so a consumer on `moduleResolution: nodenext` can follow them.
|
|
1075
|
+
|
|
1076
|
+
`vite-plugin-dts` emits one declaration file per source file, and TypeScript
|
|
1077
|
+
copies a module specifier into the declaration verbatim. `export * from './ui'`
|
|
1078
|
+
therefore shipped extensionless in `dist/index.d.ts` — 21 such re-exports in
|
|
1079
|
+
`@object-ui/components`, 7 in `@object-ui/layout`, 128 across the two emitted
|
|
1080
|
+
trees. Node16/NodeNext resolution does not extension-search a relative
|
|
1081
|
+
specifier, so the compiler could follow none of the hops and every symbol they
|
|
1082
|
+
carried read as absent from the package:
|
|
1083
|
+
|
|
1084
|
+
```
|
|
1085
|
+
error TS2305: Module '"@object-ui/components"' has no exported member 'Badge'.
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
Measured on `@object-ui/app-shell`, the largest consumer and the one that pulls
|
|
1089
|
+
in both packages: 880 TS2305 across 162 files (864 from `components`, 16 from
|
|
1090
|
+
`layout`), plus 215 TS7006 as fallout from the imports that stopped resolving.
|
|
1091
|
+
On `@object-ui/fields`, 178 TS2305 and 57 TS7006. Both are zero now.
|
|
1092
|
+
|
|
1093
|
+
The emitted `.js` never had the defect — rolldown resolves the same specifier
|
|
1094
|
+
away — which is why `pnpm check:esm-specifiers`, whose verdict is about
|
|
1095
|
+
specifier-preserving `.js` builds, correctly never scanned either package. The
|
|
1096
|
+
fix is therefore in the declaration EMIT (`scripts/vite-dts-explicit-extensions.ts`,
|
|
1097
|
+
shared by both `vite.config.ts` files), not in the sources: the same source line
|
|
1098
|
+
produces a clean `.js` and a broken `.d.ts`, so no source edit can express the
|
|
1099
|
+
difference. The rewriter resolves each specifier against the source tree the
|
|
1100
|
+
output mirrors — a file hop becomes `./x.js`, a directory hop `./x/index.js` —
|
|
1101
|
+
throws on anything it cannot resolve, and after the build re-parses the emitted
|
|
1102
|
+
declarations to assert every relative specifier both carries an extension and
|
|
1103
|
+
names a file the build really emitted.
|
|
1104
|
+
|
|
1105
|
+
`packages/fields` takes the `nodenext` pin as a result — the same two lines
|
|
1106
|
+
`packages/react` has carried since objectui#4538 — so the property is enforced by
|
|
1107
|
+
the compiler on the consumer side rather than by review. `packages/app-shell`
|
|
1108
|
+
does not: it type-checks clean without the pin and still shows 23 errors with it,
|
|
1109
|
+
none of them from these two packages. That residue is filed separately.
|
|
1110
|
+
- fb336df: Move `lucide-react` from `^1.31.0` to `^1.43.0` in every package that declares it, and
|
|
1111
|
+
repair what the jump breaks, so icons resolved from a STRING keep drawing a glyph.
|
|
1112
|
+
|
|
1113
|
+
Measured once against the installed 1.43.0 artifact when this change was made; nothing in
|
|
1114
|
+
the repository re-derives these readings. Across the jump lucide removes no runtime export,
|
|
1115
|
+
no public type name and no `lucide-react/dynamic.mjs` name, and every name this repository
|
|
1116
|
+
imports from `lucide-react` resolves. Exactly one key leaves the runtime `icons` record:
|
|
1117
|
+
`Trash2`, retired in favour of `trash`.
|
|
1118
|
+
|
|
1119
|
+
What a user sees change:
|
|
1120
|
+
|
|
1121
|
+
- Icons the lazy icon seam draws (`resolveIcon`, objectui#9251) get their path data again.
|
|
1122
|
+
lucide 1.43.0 icon modules export their path data inside `__iconData` and no longer
|
|
1123
|
+
export `__iconNode`; the seam now reads both. Reading only `__iconNode` against 1.43.0
|
|
1124
|
+
leaves every such glyph an empty box, with nothing thrown or logged.
|
|
1125
|
+
- `DetailView`'s delete action and three schema-catalog examples spell their icon
|
|
1126
|
+
`trash`, not `trash-2`, so they keep resolving. The glyph is unchanged: 1.43.0's `trash`
|
|
1127
|
+
path data is byte-identical to the `trash-2` path data of 1.31.0 and 1.35.0. Anything
|
|
1128
|
+
that already authored `trash` now draws that same artwork, because lucide moved it under
|
|
1129
|
+
the `trash` name; a few other glyphs were also redrawn upstream.
|
|
1130
|
+
- Icons imported as COMPONENTS carry lucide 1.43.0's own classes: one class per declared
|
|
1131
|
+
alias (a spinner renders `class="lucide lucide-loader-circle lucide-loader-2 ..."`), and
|
|
1132
|
+
no longer the class lucide used to derive from the PascalCase key where that differs
|
|
1133
|
+
(`ArrowDown01` no longer carries `lucide-arrow-down01`). The canonical
|
|
1134
|
+
`lucide-<icon name>` class is still there, so a `.lucide-loader-circle` selector still
|
|
1135
|
+
matches.
|
|
1136
|
+
- Icons resolved from a STRING through the seam keep the classes they had: `lucide`, the
|
|
1137
|
+
canonical `lucide-<icon name>` class and the key-derived class. They do not carry
|
|
1138
|
+
lucide's per-alias classes. That is a maintainer ruling (objectui#8941, option C): the
|
|
1139
|
+
alias list lives only inside each lazily loaded icon module, and it was not moved into
|
|
1140
|
+
the eager name list. A selector that targets an alias class matches a component-imported
|
|
1141
|
+
icon and not a string-resolved one. This also dates the example in the objectui#9251
|
|
1142
|
+
entry: `trash-2` no longer resolves as a string, so no seam-drawn glyph carries
|
|
1143
|
+
`lucide-trash2 lucide-trash-2`; a digit-bearing name that still resolves, such as
|
|
1144
|
+
`arrow-down-0-1`, carries `lucide-arrow-down01 lucide-arrow-down-0-1`.
|
|
1145
|
+
- Updated dependencies [7b10bef]
|
|
1146
|
+
- Updated dependencies [97abedc]
|
|
1147
|
+
- Updated dependencies [b46c58f]
|
|
1148
|
+
- Updated dependencies [ad694ac]
|
|
1149
|
+
- Updated dependencies [6f96fca]
|
|
1150
|
+
- Updated dependencies [0aacecc]
|
|
1151
|
+
- Updated dependencies [777fca2]
|
|
1152
|
+
- Updated dependencies [c131d9e]
|
|
1153
|
+
- Updated dependencies [5f00ff4]
|
|
1154
|
+
- Updated dependencies [c9e073a]
|
|
1155
|
+
- Updated dependencies [7b395d8]
|
|
1156
|
+
- Updated dependencies [0879812]
|
|
1157
|
+
- Updated dependencies [8cedb0d]
|
|
1158
|
+
- Updated dependencies [162621b]
|
|
1159
|
+
- Updated dependencies [4c6f549]
|
|
1160
|
+
- Updated dependencies [6cc910b]
|
|
1161
|
+
- Updated dependencies [061f5e8]
|
|
1162
|
+
- Updated dependencies [2dd4d3f]
|
|
1163
|
+
- Updated dependencies [4ab4f1b]
|
|
1164
|
+
- Updated dependencies [e3ea4f9]
|
|
1165
|
+
- Updated dependencies [8b1f066]
|
|
1166
|
+
- Updated dependencies [af243c1]
|
|
1167
|
+
- Updated dependencies [cff4b77]
|
|
1168
|
+
- Updated dependencies [961ceaa]
|
|
1169
|
+
- Updated dependencies [f3f4e4c]
|
|
1170
|
+
- Updated dependencies [a05c350]
|
|
1171
|
+
- Updated dependencies [2b5f509]
|
|
1172
|
+
- Updated dependencies [808f339]
|
|
1173
|
+
- Updated dependencies [6cf5999]
|
|
1174
|
+
- Updated dependencies [274e14a]
|
|
1175
|
+
- Updated dependencies [8c10f4f]
|
|
1176
|
+
- Updated dependencies [90dac98]
|
|
1177
|
+
- Updated dependencies [6096f20]
|
|
1178
|
+
- Updated dependencies [544aca2]
|
|
1179
|
+
- Updated dependencies [ea02938]
|
|
1180
|
+
- Updated dependencies [a14fb23]
|
|
1181
|
+
- Updated dependencies [ae98f1d]
|
|
1182
|
+
- Updated dependencies [f98eddf]
|
|
1183
|
+
- Updated dependencies [ce6bd99]
|
|
1184
|
+
- Updated dependencies [a5b08c9]
|
|
1185
|
+
- Updated dependencies [86982ac]
|
|
1186
|
+
- Updated dependencies [cdefa2a]
|
|
1187
|
+
- Updated dependencies [0961d5e]
|
|
1188
|
+
- Updated dependencies [6276478]
|
|
1189
|
+
- Updated dependencies [ff14e29]
|
|
1190
|
+
- Updated dependencies [9b28151]
|
|
1191
|
+
- Updated dependencies [64563a9]
|
|
1192
|
+
- Updated dependencies [1a5003f]
|
|
1193
|
+
- Updated dependencies [09ab32b]
|
|
1194
|
+
- Updated dependencies [8acc51b]
|
|
1195
|
+
- Updated dependencies [93a689d]
|
|
1196
|
+
- Updated dependencies [e5f4343]
|
|
1197
|
+
- Updated dependencies [3261e64]
|
|
1198
|
+
- Updated dependencies [f5178a2]
|
|
1199
|
+
- Updated dependencies [2ad3671]
|
|
1200
|
+
- Updated dependencies [d22b37b]
|
|
1201
|
+
- Updated dependencies [1daf477]
|
|
1202
|
+
- Updated dependencies [3d614ea]
|
|
1203
|
+
- Updated dependencies [6c2f3c5]
|
|
1204
|
+
- Updated dependencies [fb13e85]
|
|
1205
|
+
- Updated dependencies [c2d8659]
|
|
1206
|
+
- Updated dependencies [e0f8202]
|
|
1207
|
+
- Updated dependencies [9fbbb17]
|
|
1208
|
+
- Updated dependencies [c3a26cc]
|
|
1209
|
+
- Updated dependencies [a66e58e]
|
|
1210
|
+
- Updated dependencies [d89492c]
|
|
1211
|
+
- Updated dependencies [9a5f998]
|
|
1212
|
+
- Updated dependencies [9327397]
|
|
1213
|
+
- Updated dependencies [17cc3a3]
|
|
1214
|
+
- Updated dependencies [02e6d36]
|
|
1215
|
+
- Updated dependencies [4758b33]
|
|
1216
|
+
- Updated dependencies [4758b33]
|
|
1217
|
+
- Updated dependencies [9c78ebe]
|
|
1218
|
+
- Updated dependencies [9c78ebe]
|
|
1219
|
+
- Updated dependencies [12809a5]
|
|
1220
|
+
- Updated dependencies [7afc81d]
|
|
1221
|
+
- Updated dependencies [f9c06ef]
|
|
1222
|
+
- Updated dependencies [5ad3b88]
|
|
1223
|
+
- Updated dependencies [f9d772b]
|
|
1224
|
+
- Updated dependencies [97b6c21]
|
|
1225
|
+
- Updated dependencies [26ca2ad]
|
|
1226
|
+
- Updated dependencies [41ae65b]
|
|
1227
|
+
- Updated dependencies [baac95a]
|
|
1228
|
+
- Updated dependencies [13220af]
|
|
1229
|
+
- Updated dependencies [29b45f6]
|
|
1230
|
+
- Updated dependencies [39b8d51]
|
|
1231
|
+
- Updated dependencies [17b323e]
|
|
1232
|
+
- Updated dependencies [b956e69]
|
|
1233
|
+
- Updated dependencies [33e58d8]
|
|
1234
|
+
- Updated dependencies [256b4c9]
|
|
1235
|
+
- Updated dependencies [c5ec15c]
|
|
1236
|
+
- Updated dependencies [fec3b1a]
|
|
1237
|
+
- Updated dependencies [b8e0941]
|
|
1238
|
+
- Updated dependencies [0c50f18]
|
|
1239
|
+
- Updated dependencies [1dae95a]
|
|
1240
|
+
- Updated dependencies [e32dae1]
|
|
1241
|
+
- Updated dependencies [30b11ad]
|
|
1242
|
+
- Updated dependencies [4aebea0]
|
|
1243
|
+
- Updated dependencies [f976774]
|
|
1244
|
+
- Updated dependencies [3d6badf]
|
|
1245
|
+
- Updated dependencies [25cb364]
|
|
1246
|
+
- Updated dependencies [a60539b]
|
|
1247
|
+
- Updated dependencies [de1b879]
|
|
1248
|
+
- Updated dependencies [c6678b1]
|
|
1249
|
+
- Updated dependencies [0638322]
|
|
1250
|
+
- Updated dependencies [e3782d2]
|
|
1251
|
+
- Updated dependencies [db0beb2]
|
|
1252
|
+
- Updated dependencies [997ce38]
|
|
1253
|
+
- Updated dependencies [ae0b9d3]
|
|
1254
|
+
- Updated dependencies [ad1785c]
|
|
1255
|
+
- Updated dependencies [3b469c8]
|
|
1256
|
+
- Updated dependencies [990a2d6]
|
|
1257
|
+
- Updated dependencies [1c84036]
|
|
1258
|
+
- Updated dependencies [1c84036]
|
|
1259
|
+
- Updated dependencies [6650259]
|
|
1260
|
+
- Updated dependencies [4f8b7f8]
|
|
1261
|
+
- Updated dependencies [9e6619f]
|
|
1262
|
+
- Updated dependencies [f6ae5e2]
|
|
1263
|
+
- Updated dependencies [7343376]
|
|
1264
|
+
- Updated dependencies [b2683a2]
|
|
1265
|
+
- Updated dependencies [dded788]
|
|
1266
|
+
- Updated dependencies [b45d463]
|
|
1267
|
+
- Updated dependencies [54a7830]
|
|
1268
|
+
- Updated dependencies [f3135a4]
|
|
1269
|
+
- Updated dependencies [b5696d3]
|
|
1270
|
+
- Updated dependencies [3f9d926]
|
|
1271
|
+
- Updated dependencies [e978ed5]
|
|
1272
|
+
- Updated dependencies [6a7f24e]
|
|
1273
|
+
- Updated dependencies [b3c96d6]
|
|
1274
|
+
- Updated dependencies [8d0ca91]
|
|
1275
|
+
- Updated dependencies [c30c8dd]
|
|
1276
|
+
- Updated dependencies [deca847]
|
|
1277
|
+
- Updated dependencies [328abeb]
|
|
1278
|
+
- Updated dependencies [dd0d78f]
|
|
1279
|
+
- Updated dependencies [24d3e65]
|
|
1280
|
+
- Updated dependencies [95a7c8d]
|
|
1281
|
+
- Updated dependencies [e227156]
|
|
1282
|
+
- Updated dependencies [cc4e476]
|
|
1283
|
+
- Updated dependencies [92970c4]
|
|
1284
|
+
- Updated dependencies [d570eaa]
|
|
1285
|
+
- Updated dependencies [4b742f4]
|
|
1286
|
+
- Updated dependencies [42687ba]
|
|
1287
|
+
- Updated dependencies [6cd8f66]
|
|
1288
|
+
- Updated dependencies [24a0f14]
|
|
1289
|
+
- Updated dependencies [797a30f]
|
|
1290
|
+
- Updated dependencies [b4075c0]
|
|
1291
|
+
- Updated dependencies [9b85600]
|
|
1292
|
+
- Updated dependencies [99878d8]
|
|
1293
|
+
- Updated dependencies [3c13675]
|
|
1294
|
+
- Updated dependencies [63ab761]
|
|
1295
|
+
- Updated dependencies [0eb9f36]
|
|
1296
|
+
- Updated dependencies [ae582b7]
|
|
1297
|
+
- Updated dependencies [a4b017e]
|
|
1298
|
+
- Updated dependencies [559a2e2]
|
|
1299
|
+
- Updated dependencies [db11afd]
|
|
1300
|
+
- Updated dependencies [154075a]
|
|
1301
|
+
- Updated dependencies [582edef]
|
|
1302
|
+
- Updated dependencies [19f484f]
|
|
1303
|
+
- Updated dependencies [0a78a20]
|
|
1304
|
+
- Updated dependencies [615346d]
|
|
1305
|
+
- Updated dependencies [75dcc81]
|
|
1306
|
+
- Updated dependencies [55a12a8]
|
|
1307
|
+
- Updated dependencies [edfcf5a]
|
|
1308
|
+
- Updated dependencies [0a3e540]
|
|
1309
|
+
- Updated dependencies [c021b35]
|
|
1310
|
+
- Updated dependencies [f61dab1]
|
|
1311
|
+
- Updated dependencies [b0a05dd]
|
|
1312
|
+
- Updated dependencies [dd5ff19]
|
|
1313
|
+
- Updated dependencies [81f8498]
|
|
1314
|
+
- Updated dependencies [a782fa7]
|
|
1315
|
+
- Updated dependencies [0645133]
|
|
1316
|
+
- Updated dependencies [76e9df0]
|
|
1317
|
+
- Updated dependencies [0ecaa7d]
|
|
1318
|
+
- Updated dependencies [b24f93a]
|
|
1319
|
+
- Updated dependencies [6158e4c]
|
|
1320
|
+
- Updated dependencies [c27b575]
|
|
1321
|
+
- Updated dependencies [84b275c]
|
|
1322
|
+
- Updated dependencies [0e6e76b]
|
|
1323
|
+
- Updated dependencies [bf43afa]
|
|
1324
|
+
- Updated dependencies [858eafb]
|
|
1325
|
+
- Updated dependencies [0ffc423]
|
|
1326
|
+
- Updated dependencies [3cc4fe5]
|
|
1327
|
+
- Updated dependencies [cd5b19a]
|
|
1328
|
+
- Updated dependencies [cd5b19a]
|
|
1329
|
+
- Updated dependencies [17dc167]
|
|
1330
|
+
- Updated dependencies [20d23be]
|
|
1331
|
+
- Updated dependencies [20d23be]
|
|
1332
|
+
- Updated dependencies [2e3da72]
|
|
1333
|
+
- Updated dependencies [1263e40]
|
|
1334
|
+
- Updated dependencies [e6bc087]
|
|
1335
|
+
- Updated dependencies [8bab157]
|
|
1336
|
+
- Updated dependencies [a7557a7]
|
|
1337
|
+
- Updated dependencies [7d074ba]
|
|
1338
|
+
- Updated dependencies [6158e4c]
|
|
1339
|
+
- Updated dependencies [6158e4c]
|
|
1340
|
+
- Updated dependencies [52aad5c]
|
|
1341
|
+
- Updated dependencies [18d1a0a]
|
|
1342
|
+
- Updated dependencies [7fed09d]
|
|
1343
|
+
- Updated dependencies [58da8ae]
|
|
1344
|
+
- Updated dependencies [a8b9889]
|
|
1345
|
+
- Updated dependencies [138ad45]
|
|
1346
|
+
- Updated dependencies [138ad45]
|
|
1347
|
+
- Updated dependencies [5262f7d]
|
|
1348
|
+
- Updated dependencies [6aa029b]
|
|
1349
|
+
- Updated dependencies [2124d04]
|
|
1350
|
+
- Updated dependencies [be52115]
|
|
1351
|
+
- Updated dependencies [770cc5b]
|
|
1352
|
+
- Updated dependencies [1a88ce2]
|
|
1353
|
+
- Updated dependencies [a1a44d6]
|
|
1354
|
+
- Updated dependencies [e0a9c67]
|
|
1355
|
+
- Updated dependencies [5638529]
|
|
1356
|
+
- Updated dependencies [5638529]
|
|
1357
|
+
- Updated dependencies [c476be0]
|
|
1358
|
+
- Updated dependencies [c82ff39]
|
|
1359
|
+
- Updated dependencies [6c3da53]
|
|
1360
|
+
- Updated dependencies [31987bd]
|
|
1361
|
+
- Updated dependencies [3c3ce15]
|
|
1362
|
+
- Updated dependencies [063119f]
|
|
1363
|
+
- Updated dependencies [e100589]
|
|
1364
|
+
- Updated dependencies [304f611]
|
|
1365
|
+
- Updated dependencies [e46ee77]
|
|
1366
|
+
- Updated dependencies [f9c8c4e]
|
|
1367
|
+
- Updated dependencies [6e9c8d2]
|
|
1368
|
+
- Updated dependencies [9547063]
|
|
1369
|
+
- Updated dependencies [3f6efd6]
|
|
1370
|
+
- Updated dependencies [c4ab6d0]
|
|
1371
|
+
- Updated dependencies [0e9058b]
|
|
1372
|
+
- Updated dependencies [5988b6b]
|
|
1373
|
+
- Updated dependencies [6158e4c]
|
|
1374
|
+
- Updated dependencies [00ccdf7]
|
|
1375
|
+
- Updated dependencies [9d9ed54]
|
|
1376
|
+
- Updated dependencies [4a1adb7]
|
|
1377
|
+
- Updated dependencies [50c73fe]
|
|
1378
|
+
- Updated dependencies [ca3de72]
|
|
1379
|
+
- Updated dependencies [83e3f83]
|
|
1380
|
+
- Updated dependencies [401611b]
|
|
1381
|
+
- Updated dependencies [2c0ddf2]
|
|
1382
|
+
- Updated dependencies [4abc0aa]
|
|
1383
|
+
- Updated dependencies [f560ded]
|
|
1384
|
+
- Updated dependencies [2b188fa]
|
|
1385
|
+
- Updated dependencies [b654d4e]
|
|
1386
|
+
- Updated dependencies [f68e0a0]
|
|
1387
|
+
- Updated dependencies [aea682a]
|
|
1388
|
+
- Updated dependencies [fcdc8ec]
|
|
1389
|
+
- Updated dependencies [2d576e4]
|
|
1390
|
+
- Updated dependencies [8366acc]
|
|
1391
|
+
- Updated dependencies [95e58a3]
|
|
1392
|
+
- Updated dependencies [9d7419b]
|
|
1393
|
+
- Updated dependencies [fc7db05]
|
|
1394
|
+
- Updated dependencies [9ed8d0f]
|
|
1395
|
+
- Updated dependencies [c73cdb5]
|
|
1396
|
+
- Updated dependencies [6f5719e]
|
|
1397
|
+
- Updated dependencies [64dae8e]
|
|
1398
|
+
- Updated dependencies [06a8af5]
|
|
1399
|
+
- Updated dependencies [6a91586]
|
|
1400
|
+
- Updated dependencies [a04d7c6]
|
|
1401
|
+
- Updated dependencies [5ccc500]
|
|
1402
|
+
- Updated dependencies [f3c2bb0]
|
|
1403
|
+
- Updated dependencies [978507b]
|
|
1404
|
+
- Updated dependencies [778138e]
|
|
1405
|
+
- Updated dependencies [9801765]
|
|
1406
|
+
- Updated dependencies [9cebfca]
|
|
1407
|
+
- Updated dependencies [460575f]
|
|
1408
|
+
- Updated dependencies [d796c8d]
|
|
1409
|
+
- Updated dependencies [1b1d772]
|
|
1410
|
+
- Updated dependencies [d88e20f]
|
|
1411
|
+
- Updated dependencies [2d7304d]
|
|
1412
|
+
- Updated dependencies [636b236]
|
|
1413
|
+
- Updated dependencies [4172589]
|
|
1414
|
+
- Updated dependencies [d6d8fb9]
|
|
1415
|
+
- Updated dependencies [64d624d]
|
|
1416
|
+
- Updated dependencies [053fdc8]
|
|
1417
|
+
- Updated dependencies [ae476b8]
|
|
1418
|
+
- Updated dependencies [39f4309]
|
|
1419
|
+
- Updated dependencies [95bad12]
|
|
1420
|
+
- Updated dependencies [d2fb6ef]
|
|
1421
|
+
- Updated dependencies [7cd3987]
|
|
1422
|
+
- Updated dependencies [ee3b878]
|
|
1423
|
+
- Updated dependencies [e304a4e]
|
|
1424
|
+
- Updated dependencies [fda49e5]
|
|
1425
|
+
- Updated dependencies [490d9a9]
|
|
1426
|
+
- Updated dependencies [fc62bb4]
|
|
1427
|
+
- Updated dependencies [41df893]
|
|
1428
|
+
- Updated dependencies [0cba1b7]
|
|
1429
|
+
- Updated dependencies [00f3eb5]
|
|
1430
|
+
- Updated dependencies [1ec291c]
|
|
1431
|
+
- Updated dependencies [453dbaa]
|
|
1432
|
+
- Updated dependencies [f8cdbf2]
|
|
1433
|
+
- Updated dependencies [69a2163]
|
|
1434
|
+
- Updated dependencies [24e027e]
|
|
1435
|
+
- Updated dependencies [2c3cd1b]
|
|
1436
|
+
- Updated dependencies [e176053]
|
|
1437
|
+
- Updated dependencies [e30ed15]
|
|
1438
|
+
- Updated dependencies [90665e0]
|
|
1439
|
+
- Updated dependencies [194fae1]
|
|
1440
|
+
- Updated dependencies [7e19d03]
|
|
1441
|
+
- Updated dependencies [1e946c9]
|
|
1442
|
+
- Updated dependencies [546ddf7]
|
|
1443
|
+
- Updated dependencies [864154e]
|
|
1444
|
+
- Updated dependencies [b023625]
|
|
1445
|
+
- Updated dependencies [75bd83d]
|
|
1446
|
+
- Updated dependencies [44d075b]
|
|
1447
|
+
- Updated dependencies [40c479a]
|
|
1448
|
+
- Updated dependencies [971d387]
|
|
1449
|
+
- Updated dependencies [ee851c3]
|
|
1450
|
+
- Updated dependencies [6414dfd]
|
|
1451
|
+
- Updated dependencies [a8d5c71]
|
|
1452
|
+
- Updated dependencies [905b21f]
|
|
1453
|
+
- Updated dependencies [88e9109]
|
|
1454
|
+
- Updated dependencies [2c45966]
|
|
1455
|
+
- Updated dependencies [db3a600]
|
|
1456
|
+
- Updated dependencies [3a3db76]
|
|
1457
|
+
- Updated dependencies [0d723a3]
|
|
1458
|
+
- Updated dependencies [0c95d3d]
|
|
1459
|
+
- Updated dependencies [3e4fa2c]
|
|
1460
|
+
- Updated dependencies [b5b928a]
|
|
1461
|
+
- Updated dependencies [6fd2cf7]
|
|
1462
|
+
- Updated dependencies [52a43de]
|
|
1463
|
+
- Updated dependencies [195052f]
|
|
1464
|
+
- Updated dependencies [e4559d1]
|
|
1465
|
+
- Updated dependencies [2c71482]
|
|
1466
|
+
- Updated dependencies [129bcc5]
|
|
1467
|
+
- Updated dependencies [a26b9e4]
|
|
1468
|
+
- Updated dependencies [5ef9c4f]
|
|
1469
|
+
- Updated dependencies [46f0bb4]
|
|
1470
|
+
- Updated dependencies [06b82b8]
|
|
1471
|
+
- Updated dependencies [8ec11e1]
|
|
1472
|
+
- Updated dependencies [6f81384]
|
|
1473
|
+
- Updated dependencies [22ba927]
|
|
1474
|
+
- Updated dependencies [f8c70f4]
|
|
1475
|
+
- Updated dependencies [8f1d995]
|
|
1476
|
+
- Updated dependencies [f9c34df]
|
|
1477
|
+
- Updated dependencies [dddb942]
|
|
1478
|
+
- Updated dependencies [29754cf]
|
|
1479
|
+
- Updated dependencies [d7de534]
|
|
1480
|
+
- Updated dependencies [3c2b6f7]
|
|
1481
|
+
- Updated dependencies [6e88630]
|
|
1482
|
+
- Updated dependencies [b84dc18]
|
|
1483
|
+
- Updated dependencies [ac8abb0]
|
|
1484
|
+
- Updated dependencies [9d86e1d]
|
|
1485
|
+
- Updated dependencies [3a5817f]
|
|
1486
|
+
- Updated dependencies [99a3c2d]
|
|
1487
|
+
- Updated dependencies [5961030]
|
|
1488
|
+
- Updated dependencies [f24de8b]
|
|
1489
|
+
- Updated dependencies [c8ea8af]
|
|
1490
|
+
- Updated dependencies [3190414]
|
|
1491
|
+
- Updated dependencies [4e480f5]
|
|
1492
|
+
- Updated dependencies [38a123c]
|
|
1493
|
+
- Updated dependencies [299102e]
|
|
1494
|
+
- Updated dependencies [30c73cd]
|
|
1495
|
+
- Updated dependencies [830ed58]
|
|
1496
|
+
- Updated dependencies [d7acad6]
|
|
1497
|
+
- Updated dependencies [45a9aeb]
|
|
1498
|
+
- Updated dependencies [713db46]
|
|
1499
|
+
- Updated dependencies [c71e14d]
|
|
1500
|
+
- Updated dependencies [bf3a03c]
|
|
1501
|
+
- Updated dependencies [cb55718]
|
|
1502
|
+
- Updated dependencies [748494b]
|
|
1503
|
+
- Updated dependencies [5967be0]
|
|
1504
|
+
- Updated dependencies [831be72]
|
|
1505
|
+
- Updated dependencies [29cb85b]
|
|
1506
|
+
- Updated dependencies [3e028c8]
|
|
1507
|
+
- Updated dependencies [d0889e2]
|
|
1508
|
+
- Updated dependencies [ce503e5]
|
|
1509
|
+
- Updated dependencies [f20dcf0]
|
|
1510
|
+
- Updated dependencies [12402a9]
|
|
1511
|
+
- Updated dependencies [aff3d7a]
|
|
1512
|
+
- Updated dependencies [4ca30d0]
|
|
1513
|
+
- Updated dependencies [7a5da14]
|
|
1514
|
+
- Updated dependencies [2c1c967]
|
|
1515
|
+
- Updated dependencies [9486ac6]
|
|
1516
|
+
- Updated dependencies [9486ac6]
|
|
1517
|
+
- Updated dependencies [4d5f9b4]
|
|
1518
|
+
- Updated dependencies [d6ceb8d]
|
|
1519
|
+
- Updated dependencies [dc4365c]
|
|
1520
|
+
- Updated dependencies [e321d52]
|
|
1521
|
+
- Updated dependencies [4c68077]
|
|
1522
|
+
- Updated dependencies [7977ff9]
|
|
1523
|
+
- Updated dependencies [3beef6d]
|
|
1524
|
+
- Updated dependencies [06b8c42]
|
|
1525
|
+
- Updated dependencies [46b9bc9]
|
|
1526
|
+
- Updated dependencies [b97790a]
|
|
1527
|
+
- Updated dependencies [7c9b044]
|
|
1528
|
+
- Updated dependencies [d47de51]
|
|
1529
|
+
- Updated dependencies [3fe6463]
|
|
1530
|
+
- Updated dependencies [31ab372]
|
|
1531
|
+
- Updated dependencies [846889b]
|
|
1532
|
+
- Updated dependencies [2acd8e1]
|
|
1533
|
+
- Updated dependencies [26896c6]
|
|
1534
|
+
- Updated dependencies [67fc3b0]
|
|
1535
|
+
- Updated dependencies [33a3b3c]
|
|
1536
|
+
- Updated dependencies [b87f15b]
|
|
1537
|
+
- Updated dependencies [045d20b]
|
|
1538
|
+
- Updated dependencies [a2d2515]
|
|
1539
|
+
- Updated dependencies [c18d099]
|
|
1540
|
+
- Updated dependencies [adb2a86]
|
|
1541
|
+
- Updated dependencies [03380aa]
|
|
1542
|
+
- Updated dependencies [4562ea5]
|
|
1543
|
+
- Updated dependencies [3619792]
|
|
1544
|
+
- Updated dependencies [3561bd2]
|
|
1545
|
+
- Updated dependencies [bf97b98]
|
|
1546
|
+
- Updated dependencies [b0d308d]
|
|
1547
|
+
- Updated dependencies [40f34b4]
|
|
1548
|
+
- Updated dependencies [8063bcb]
|
|
1549
|
+
- Updated dependencies [b74a859]
|
|
1550
|
+
- Updated dependencies [d4493fd]
|
|
1551
|
+
- Updated dependencies [240b80f]
|
|
1552
|
+
- Updated dependencies [77cb489]
|
|
1553
|
+
- Updated dependencies [bfaa158]
|
|
1554
|
+
- Updated dependencies [777e5c6]
|
|
1555
|
+
- Updated dependencies [0c386dd]
|
|
1556
|
+
- Updated dependencies [9e37d9b]
|
|
1557
|
+
- Updated dependencies [5ad86dd]
|
|
1558
|
+
- Updated dependencies [16a725f]
|
|
1559
|
+
- Updated dependencies [4dfdcc3]
|
|
1560
|
+
- Updated dependencies [6a449fc]
|
|
1561
|
+
- Updated dependencies [446d93d]
|
|
1562
|
+
- Updated dependencies [ecd9cb2]
|
|
1563
|
+
- Updated dependencies [98d4108]
|
|
1564
|
+
- Updated dependencies [0e3b3be]
|
|
1565
|
+
- Updated dependencies [a29ae2d]
|
|
1566
|
+
- Updated dependencies [00d3f09]
|
|
1567
|
+
- Updated dependencies [4388f71]
|
|
1568
|
+
- Updated dependencies [0b1ac58]
|
|
1569
|
+
- Updated dependencies [c93b4d5]
|
|
1570
|
+
- Updated dependencies [c1fe272]
|
|
1571
|
+
- Updated dependencies [3cab570]
|
|
1572
|
+
- Updated dependencies [8ad218d]
|
|
1573
|
+
- Updated dependencies [3e41187]
|
|
1574
|
+
- Updated dependencies [5f78953]
|
|
1575
|
+
- Updated dependencies [639114c]
|
|
1576
|
+
- Updated dependencies [1f31d3a]
|
|
1577
|
+
- Updated dependencies [d1842ab]
|
|
1578
|
+
- Updated dependencies [78ca238]
|
|
1579
|
+
- Updated dependencies [351eb31]
|
|
1580
|
+
- Updated dependencies [20c04b2]
|
|
1581
|
+
- Updated dependencies [48c19bd]
|
|
1582
|
+
- Updated dependencies [a6d8b8d]
|
|
1583
|
+
- Updated dependencies [4b5bb95]
|
|
1584
|
+
- Updated dependencies [b652514]
|
|
1585
|
+
- Updated dependencies [adbda1b]
|
|
1586
|
+
- Updated dependencies [adbda1b]
|
|
1587
|
+
- Updated dependencies [e2b3826]
|
|
1588
|
+
- Updated dependencies [2e32ed4]
|
|
1589
|
+
- Updated dependencies [3ed3eec]
|
|
1590
|
+
- Updated dependencies [7c3df8f]
|
|
1591
|
+
- Updated dependencies [b9f5ff1]
|
|
1592
|
+
- Updated dependencies [e75f4c9]
|
|
1593
|
+
- Updated dependencies [19f1639]
|
|
1594
|
+
- Updated dependencies [4704aa4]
|
|
1595
|
+
- Updated dependencies [47547d0]
|
|
1596
|
+
- Updated dependencies [1bee5d0]
|
|
1597
|
+
- Updated dependencies [858cd72]
|
|
1598
|
+
- Updated dependencies [cfc9b6d]
|
|
1599
|
+
- Updated dependencies [554f2b6]
|
|
1600
|
+
- Updated dependencies [72f55c9]
|
|
1601
|
+
- Updated dependencies [26e06d7]
|
|
1602
|
+
- Updated dependencies [669d71b]
|
|
1603
|
+
- Updated dependencies [ed27d7c]
|
|
1604
|
+
- Updated dependencies [52c8cf7]
|
|
1605
|
+
- Updated dependencies [2ceb43a]
|
|
1606
|
+
- Updated dependencies [7cdd2b9]
|
|
1607
|
+
- Updated dependencies [52c8cf7]
|
|
1608
|
+
- Updated dependencies [71a4a53]
|
|
1609
|
+
- Updated dependencies [7bf244b]
|
|
1610
|
+
- Updated dependencies [f0bb9fa]
|
|
1611
|
+
- Updated dependencies [81a2eb1]
|
|
1612
|
+
- Updated dependencies [caa0cd3]
|
|
1613
|
+
- Updated dependencies [caa0cd3]
|
|
1614
|
+
- Updated dependencies [25c7d58]
|
|
1615
|
+
- Updated dependencies [00d2fa6]
|
|
1616
|
+
- Updated dependencies [c6198c2]
|
|
1617
|
+
- Updated dependencies [721d1e0]
|
|
1618
|
+
- Updated dependencies [1237ae4]
|
|
1619
|
+
- Updated dependencies [2f61238]
|
|
1620
|
+
- Updated dependencies [51eb515]
|
|
1621
|
+
- Updated dependencies [c354ce5]
|
|
1622
|
+
- Updated dependencies [8fe8e5c]
|
|
1623
|
+
- Updated dependencies [feac439]
|
|
1624
|
+
- Updated dependencies [9ae871d]
|
|
1625
|
+
- Updated dependencies [efbd566]
|
|
1626
|
+
- Updated dependencies [9587fc9]
|
|
1627
|
+
- Updated dependencies [e62c44e]
|
|
1628
|
+
- Updated dependencies [daf9d57]
|
|
1629
|
+
- Updated dependencies [c15d7ec]
|
|
1630
|
+
- Updated dependencies [5d0876c]
|
|
1631
|
+
- Updated dependencies [f7ace0a]
|
|
1632
|
+
- Updated dependencies [b041b9c]
|
|
1633
|
+
- Updated dependencies [ce2aaef]
|
|
1634
|
+
- Updated dependencies [544ecba]
|
|
1635
|
+
- Updated dependencies [2ce2612]
|
|
1636
|
+
- Updated dependencies [bc640ec]
|
|
1637
|
+
- Updated dependencies [1e215c4]
|
|
1638
|
+
- Updated dependencies [da6e191]
|
|
1639
|
+
- Updated dependencies [3e377c9]
|
|
1640
|
+
- Updated dependencies [a3eb5d0]
|
|
1641
|
+
- Updated dependencies [4ce14f1]
|
|
1642
|
+
- Updated dependencies [aef97e5]
|
|
1643
|
+
- Updated dependencies [2af1fa7]
|
|
1644
|
+
- Updated dependencies [c14d3a0]
|
|
1645
|
+
- Updated dependencies [a137d0c]
|
|
1646
|
+
- Updated dependencies [caf477f]
|
|
1647
|
+
- Updated dependencies [f6375da]
|
|
1648
|
+
- Updated dependencies [967e5d8]
|
|
1649
|
+
- Updated dependencies [a4611b3]
|
|
1650
|
+
- Updated dependencies [20316ba]
|
|
1651
|
+
- Updated dependencies [d3499b3]
|
|
1652
|
+
- Updated dependencies [309c75e]
|
|
1653
|
+
- Updated dependencies [c9f9bae]
|
|
1654
|
+
- Updated dependencies [18897a4]
|
|
1655
|
+
- Updated dependencies [8b7ea39]
|
|
1656
|
+
- Updated dependencies [dcbf0b2]
|
|
1657
|
+
- Updated dependencies [52cac38]
|
|
1658
|
+
- Updated dependencies [93fea2e]
|
|
1659
|
+
- Updated dependencies [1422a92]
|
|
1660
|
+
- Updated dependencies [d05fe17]
|
|
1661
|
+
- Updated dependencies [a480f79]
|
|
1662
|
+
- Updated dependencies [f08d1a8]
|
|
1663
|
+
- Updated dependencies [64a252d]
|
|
1664
|
+
- Updated dependencies [786bc91]
|
|
1665
|
+
- Updated dependencies [75fca96]
|
|
1666
|
+
- Updated dependencies [7ca6ddd]
|
|
1667
|
+
- Updated dependencies [f1cd290]
|
|
1668
|
+
- Updated dependencies [5a41ce7]
|
|
1669
|
+
- Updated dependencies [8d50bc2]
|
|
1670
|
+
- Updated dependencies [604476d]
|
|
1671
|
+
- Updated dependencies [d1bebb0]
|
|
1672
|
+
- Updated dependencies [95bf128]
|
|
1673
|
+
- Updated dependencies [335abea]
|
|
1674
|
+
- Updated dependencies [edea22a]
|
|
1675
|
+
- Updated dependencies [0f5cadf]
|
|
1676
|
+
- Updated dependencies [4f9f1ee]
|
|
1677
|
+
- Updated dependencies [66e8b2a]
|
|
1678
|
+
- Updated dependencies [aa083cd]
|
|
1679
|
+
- Updated dependencies [12b5992]
|
|
1680
|
+
- Updated dependencies [b93e245]
|
|
1681
|
+
- Updated dependencies [c842594]
|
|
1682
|
+
- Updated dependencies [290de37]
|
|
1683
|
+
- Updated dependencies [8c8da45]
|
|
1684
|
+
- Updated dependencies [8cd8eb5]
|
|
1685
|
+
- Updated dependencies [cf1d29e]
|
|
1686
|
+
- Updated dependencies [1bd79c8]
|
|
1687
|
+
- Updated dependencies [af9e957]
|
|
1688
|
+
- Updated dependencies [b1030c7]
|
|
1689
|
+
- Updated dependencies [c974edf]
|
|
1690
|
+
- Updated dependencies [ad852b6]
|
|
1691
|
+
- Updated dependencies [7fb22a1]
|
|
1692
|
+
- Updated dependencies [ad66d79]
|
|
1693
|
+
- Updated dependencies [ee4d19f]
|
|
1694
|
+
- Updated dependencies [496d31d]
|
|
1695
|
+
- Updated dependencies [0ea7054]
|
|
1696
|
+
- Updated dependencies [9a853f2]
|
|
1697
|
+
- Updated dependencies [cb847fd]
|
|
1698
|
+
- Updated dependencies [ee70287]
|
|
1699
|
+
- Updated dependencies [3e98e13]
|
|
1700
|
+
- Updated dependencies [fc32921]
|
|
1701
|
+
- Updated dependencies [4eaa835]
|
|
1702
|
+
- Updated dependencies [8f9d87a]
|
|
1703
|
+
- Updated dependencies [b1777ae]
|
|
1704
|
+
- Updated dependencies [24845c4]
|
|
1705
|
+
- Updated dependencies [6f864cf]
|
|
1706
|
+
- Updated dependencies [24d1edd]
|
|
1707
|
+
- Updated dependencies [645087c]
|
|
1708
|
+
- Updated dependencies [33f4a19]
|
|
1709
|
+
- Updated dependencies [4a292d2]
|
|
1710
|
+
- Updated dependencies [5323168]
|
|
1711
|
+
- Updated dependencies [841dd2b]
|
|
1712
|
+
- Updated dependencies [3014fc0]
|
|
1713
|
+
- Updated dependencies [dacb402]
|
|
1714
|
+
- Updated dependencies [846cec0]
|
|
1715
|
+
- Updated dependencies [91facae]
|
|
1716
|
+
- Updated dependencies [b38014e]
|
|
1717
|
+
- Updated dependencies [474797d]
|
|
1718
|
+
- Updated dependencies [704e695]
|
|
1719
|
+
- Updated dependencies [a407bd6]
|
|
1720
|
+
- Updated dependencies [317dbce]
|
|
1721
|
+
- Updated dependencies [3a43a15]
|
|
1722
|
+
- Updated dependencies [868e825]
|
|
1723
|
+
- Updated dependencies [f76f436]
|
|
1724
|
+
- Updated dependencies [ce45a03]
|
|
1725
|
+
- Updated dependencies [421544b]
|
|
1726
|
+
- Updated dependencies [fb01022]
|
|
1727
|
+
- Updated dependencies [e9d9212]
|
|
1728
|
+
- Updated dependencies [ecfb693]
|
|
1729
|
+
- Updated dependencies [abc1b18]
|
|
1730
|
+
- Updated dependencies [81a51db]
|
|
1731
|
+
- Updated dependencies [67749c7]
|
|
1732
|
+
- Updated dependencies [507b61b]
|
|
1733
|
+
- Updated dependencies [512c84b]
|
|
1734
|
+
- Updated dependencies [c300267]
|
|
1735
|
+
- Updated dependencies [fb3a101]
|
|
1736
|
+
- Updated dependencies [d4733f2]
|
|
1737
|
+
- Updated dependencies [1570eac]
|
|
1738
|
+
- Updated dependencies [f391ede]
|
|
1739
|
+
- Updated dependencies [f5cfbbd]
|
|
1740
|
+
- Updated dependencies [f5cfbbd]
|
|
1741
|
+
- Updated dependencies [8b532cb]
|
|
1742
|
+
- Updated dependencies [64c3cdd]
|
|
1743
|
+
- Updated dependencies [4d65991]
|
|
1744
|
+
- Updated dependencies [c42554e]
|
|
1745
|
+
- Updated dependencies [555b4ec]
|
|
1746
|
+
- Updated dependencies [1ccfc23]
|
|
1747
|
+
- Updated dependencies [542718f]
|
|
1748
|
+
- Updated dependencies [7f27bc5]
|
|
1749
|
+
- Updated dependencies [0a174f3]
|
|
1750
|
+
- Updated dependencies [f95b140]
|
|
1751
|
+
- Updated dependencies [541ce4e]
|
|
1752
|
+
- Updated dependencies [6479086]
|
|
1753
|
+
- Updated dependencies [d79f525]
|
|
1754
|
+
- Updated dependencies [d1865d2]
|
|
1755
|
+
- Updated dependencies [f1190b0]
|
|
1756
|
+
- Updated dependencies [561abef]
|
|
1757
|
+
- Updated dependencies [6a4680b]
|
|
1758
|
+
- Updated dependencies [c3a4273]
|
|
1759
|
+
- Updated dependencies [abf710d]
|
|
1760
|
+
- Updated dependencies [093af32]
|
|
1761
|
+
- Updated dependencies [1bd1be7]
|
|
1762
|
+
- Updated dependencies [d234fa9]
|
|
1763
|
+
- Updated dependencies [adf5812]
|
|
1764
|
+
- Updated dependencies [e36acd4]
|
|
1765
|
+
- Updated dependencies [5058336]
|
|
1766
|
+
- Updated dependencies [2f6b2bf]
|
|
1767
|
+
- Updated dependencies [2028b31]
|
|
1768
|
+
- Updated dependencies [63601ab]
|
|
1769
|
+
- Updated dependencies [c372b29]
|
|
1770
|
+
- Updated dependencies [152f0a7]
|
|
1771
|
+
- Updated dependencies [8693b85]
|
|
1772
|
+
- Updated dependencies [e82dad1]
|
|
1773
|
+
- Updated dependencies [58b7b3d]
|
|
1774
|
+
- Updated dependencies [84defab]
|
|
1775
|
+
- Updated dependencies [681d3f1]
|
|
1776
|
+
- Updated dependencies [969d4f2]
|
|
1777
|
+
- Updated dependencies [f3bc481]
|
|
1778
|
+
- Updated dependencies [b79aac2]
|
|
1779
|
+
- Updated dependencies [93fc0e7]
|
|
1780
|
+
- Updated dependencies [a4b723f]
|
|
1781
|
+
- Updated dependencies [2b10ca0]
|
|
1782
|
+
- Updated dependencies [7db4a81]
|
|
1783
|
+
- Updated dependencies [19a0b0e]
|
|
1784
|
+
- Updated dependencies [526fc11]
|
|
1785
|
+
- Updated dependencies [f8e3e9a]
|
|
1786
|
+
- Updated dependencies [b9d47ec]
|
|
1787
|
+
- Updated dependencies [3b6bc69]
|
|
1788
|
+
- Updated dependencies [6214db6]
|
|
1789
|
+
- Updated dependencies [6732df4]
|
|
1790
|
+
- Updated dependencies [fe9e0d0]
|
|
1791
|
+
- Updated dependencies [63fb72c]
|
|
1792
|
+
- Updated dependencies [804831c]
|
|
1793
|
+
- Updated dependencies [279e48e]
|
|
1794
|
+
- Updated dependencies [8700d6d]
|
|
1795
|
+
- Updated dependencies [8db2a0f]
|
|
1796
|
+
- Updated dependencies [689953a]
|
|
1797
|
+
- Updated dependencies [30443fb]
|
|
1798
|
+
- Updated dependencies [8d3dbb2]
|
|
1799
|
+
- Updated dependencies [efc1c9c]
|
|
1800
|
+
- Updated dependencies [da45e6b]
|
|
1801
|
+
- Updated dependencies [7533465]
|
|
1802
|
+
- Updated dependencies [835f0f3]
|
|
1803
|
+
- Updated dependencies [a9d97be]
|
|
1804
|
+
- Updated dependencies [ed35b44]
|
|
1805
|
+
- Updated dependencies [9ba7e9c]
|
|
1806
|
+
- Updated dependencies [729e851]
|
|
1807
|
+
- Updated dependencies [96919a4]
|
|
1808
|
+
- Updated dependencies [345e24a]
|
|
1809
|
+
- Updated dependencies [20b507a]
|
|
1810
|
+
- Updated dependencies [2e471dc]
|
|
1811
|
+
- Updated dependencies [6748587]
|
|
1812
|
+
- Updated dependencies [be50942]
|
|
1813
|
+
- Updated dependencies [775e079]
|
|
1814
|
+
- Updated dependencies [7e8b3c0]
|
|
1815
|
+
- Updated dependencies [53374dc]
|
|
1816
|
+
- Updated dependencies [f6fb83f]
|
|
1817
|
+
- Updated dependencies [2049b03]
|
|
1818
|
+
- Updated dependencies [7cbc724]
|
|
1819
|
+
- Updated dependencies [7098eed]
|
|
1820
|
+
- Updated dependencies [3df7c5c]
|
|
1821
|
+
- Updated dependencies [fb91ac9]
|
|
1822
|
+
- Updated dependencies [fb91ac9]
|
|
1823
|
+
- Updated dependencies [641fb55]
|
|
1824
|
+
- Updated dependencies [8524372]
|
|
1825
|
+
- Updated dependencies [7cbefa5]
|
|
1826
|
+
- Updated dependencies [72d6587]
|
|
1827
|
+
- Updated dependencies [a272a4f]
|
|
1828
|
+
- Updated dependencies [55f39ee]
|
|
1829
|
+
- Updated dependencies [0ce32d5]
|
|
1830
|
+
- Updated dependencies [0970a0e]
|
|
1831
|
+
- Updated dependencies [e427e9c]
|
|
1832
|
+
- Updated dependencies [bbc9dc3]
|
|
1833
|
+
- Updated dependencies [02f1813]
|
|
1834
|
+
- Updated dependencies [1ef89c0]
|
|
1835
|
+
- Updated dependencies [ba0b61a]
|
|
1836
|
+
- Updated dependencies [ba0b61a]
|
|
1837
|
+
- Updated dependencies [ac716ff]
|
|
1838
|
+
- Updated dependencies [f0f3cd5]
|
|
1839
|
+
- Updated dependencies [ab856ed]
|
|
1840
|
+
- Updated dependencies [20f3e65]
|
|
1841
|
+
- Updated dependencies [bbba098]
|
|
1842
|
+
- Updated dependencies [87af769]
|
|
1843
|
+
- Updated dependencies [3be720e]
|
|
1844
|
+
- Updated dependencies [43c0d17]
|
|
1845
|
+
- Updated dependencies [c3df43a]
|
|
1846
|
+
- Updated dependencies [d16d0e9]
|
|
1847
|
+
- Updated dependencies [bbe57fd]
|
|
1848
|
+
- Updated dependencies [272a530]
|
|
1849
|
+
- Updated dependencies [1779e8d]
|
|
1850
|
+
- Updated dependencies [f7fcc2c]
|
|
1851
|
+
- Updated dependencies [f0f4d6c]
|
|
1852
|
+
- Updated dependencies [4128188]
|
|
1853
|
+
- Updated dependencies [b253c4e]
|
|
1854
|
+
- Updated dependencies [78a9c67]
|
|
1855
|
+
- Updated dependencies [4a7ef0d]
|
|
1856
|
+
- Updated dependencies [4598f6d]
|
|
1857
|
+
- Updated dependencies [dea17b4]
|
|
1858
|
+
- Updated dependencies [89bb77a]
|
|
1859
|
+
- Updated dependencies [06611e4]
|
|
1860
|
+
- Updated dependencies [3939545]
|
|
1861
|
+
- Updated dependencies [66abbde]
|
|
1862
|
+
- Updated dependencies [dc3893d]
|
|
1863
|
+
- Updated dependencies [1bbaa16]
|
|
1864
|
+
- Updated dependencies [6ee259a]
|
|
1865
|
+
- Updated dependencies [7649f43]
|
|
1866
|
+
- Updated dependencies [e708426]
|
|
1867
|
+
- Updated dependencies [3b6d53b]
|
|
1868
|
+
- Updated dependencies [276d174]
|
|
1869
|
+
- Updated dependencies [2982ed9]
|
|
1870
|
+
- Updated dependencies [a8198de]
|
|
1871
|
+
- Updated dependencies [0c789a4]
|
|
1872
|
+
- Updated dependencies [05a49f2]
|
|
1873
|
+
- Updated dependencies [b234a84]
|
|
1874
|
+
- Updated dependencies [a78cd37]
|
|
1875
|
+
- Updated dependencies [5ea623e]
|
|
1876
|
+
- Updated dependencies [5eabe86]
|
|
1877
|
+
- Updated dependencies [ca5d671]
|
|
1878
|
+
- Updated dependencies [32bf2d6]
|
|
1879
|
+
- Updated dependencies [ff0c384]
|
|
1880
|
+
- Updated dependencies [af4fb29]
|
|
1881
|
+
- Updated dependencies [ff5ef1c]
|
|
1882
|
+
- Updated dependencies [befd40c]
|
|
1883
|
+
- Updated dependencies [9a97800]
|
|
1884
|
+
- Updated dependencies [6bca0e4]
|
|
1885
|
+
- Updated dependencies [81c0bc4]
|
|
1886
|
+
- Updated dependencies [3c76801]
|
|
1887
|
+
- Updated dependencies [60500cb]
|
|
1888
|
+
- Updated dependencies [2fcefb9]
|
|
1889
|
+
- Updated dependencies [b55a346]
|
|
1890
|
+
- Updated dependencies [065bba7]
|
|
1891
|
+
- Updated dependencies [dd19463]
|
|
1892
|
+
- Updated dependencies [6791717]
|
|
1893
|
+
- Updated dependencies [100547e]
|
|
1894
|
+
- Updated dependencies [6d1c155]
|
|
1895
|
+
- Updated dependencies [d7573b3]
|
|
1896
|
+
- Updated dependencies [bf3edfe]
|
|
1897
|
+
- Updated dependencies [2c8474c]
|
|
1898
|
+
- Updated dependencies [0e05aac]
|
|
1899
|
+
- Updated dependencies [ae61ad4]
|
|
1900
|
+
- Updated dependencies [5aed9e4]
|
|
1901
|
+
- Updated dependencies [83c77dc]
|
|
1902
|
+
- Updated dependencies [18a8e7d]
|
|
1903
|
+
- Updated dependencies [e7957ab]
|
|
1904
|
+
- Updated dependencies [f7e34ca]
|
|
1905
|
+
- Updated dependencies [e719ebd]
|
|
1906
|
+
- Updated dependencies [516583b]
|
|
1907
|
+
- Updated dependencies [f9e4f91]
|
|
1908
|
+
- Updated dependencies [6ef48b1]
|
|
1909
|
+
- Updated dependencies [fa429cf]
|
|
1910
|
+
- Updated dependencies [ed8df3e]
|
|
1911
|
+
- Updated dependencies [fe76ece]
|
|
1912
|
+
- Updated dependencies [8b446f5]
|
|
1913
|
+
- Updated dependencies [8e74b27]
|
|
1914
|
+
- Updated dependencies [7102b20]
|
|
1915
|
+
- Updated dependencies [8ebd57f]
|
|
1916
|
+
- Updated dependencies [617707a]
|
|
1917
|
+
- Updated dependencies [58770f3]
|
|
1918
|
+
- Updated dependencies [aefe428]
|
|
1919
|
+
- Updated dependencies [485f096]
|
|
1920
|
+
- Updated dependencies [7357447]
|
|
1921
|
+
- Updated dependencies [199d31b]
|
|
1922
|
+
- Updated dependencies [b655a9d]
|
|
1923
|
+
- Updated dependencies [3e01cb5]
|
|
1924
|
+
- Updated dependencies [7138bc1]
|
|
1925
|
+
- Updated dependencies [cef27e2]
|
|
1926
|
+
- Updated dependencies [4e8622b]
|
|
1927
|
+
- Updated dependencies [dffd752]
|
|
1928
|
+
- Updated dependencies [06973aa]
|
|
1929
|
+
- Updated dependencies [50798f3]
|
|
1930
|
+
- Updated dependencies [105f3c5]
|
|
1931
|
+
- Updated dependencies [3ccd9e8]
|
|
1932
|
+
- Updated dependencies [689b979]
|
|
1933
|
+
- Updated dependencies [c70f865]
|
|
1934
|
+
- Updated dependencies [e546222]
|
|
1935
|
+
- Updated dependencies [fd13f52]
|
|
1936
|
+
- Updated dependencies [d7bd274]
|
|
1937
|
+
- Updated dependencies [98c3a74]
|
|
1938
|
+
- Updated dependencies [ebce5a3]
|
|
1939
|
+
- Updated dependencies [fb336df]
|
|
1940
|
+
- Updated dependencies [9d9040d]
|
|
1941
|
+
- Updated dependencies [0fce2ef]
|
|
1942
|
+
- Updated dependencies [42df928]
|
|
1943
|
+
- Updated dependencies [0e2ddd4]
|
|
1944
|
+
- Updated dependencies [b7479ab]
|
|
1945
|
+
- Updated dependencies [9850c6e]
|
|
1946
|
+
- Updated dependencies [b2ea297]
|
|
1947
|
+
- Updated dependencies [5b5a5c3]
|
|
1948
|
+
- Updated dependencies [14582b8]
|
|
1949
|
+
- Updated dependencies [51e144e]
|
|
1950
|
+
- Updated dependencies [ab92940]
|
|
1951
|
+
- Updated dependencies [a691c0b]
|
|
1952
|
+
- Updated dependencies [0b1326d]
|
|
1953
|
+
- Updated dependencies [af3861f]
|
|
1954
|
+
- Updated dependencies [515f171]
|
|
1955
|
+
- Updated dependencies [1f4e029]
|
|
1956
|
+
- Updated dependencies [4f14ad7]
|
|
1957
|
+
- Updated dependencies [258d264]
|
|
1958
|
+
- Updated dependencies [cac64b3]
|
|
1959
|
+
- Updated dependencies [8033ad1]
|
|
1960
|
+
- Updated dependencies [fa140b8]
|
|
1961
|
+
- Updated dependencies [71cba28]
|
|
1962
|
+
- Updated dependencies [190fbd0]
|
|
1963
|
+
- Updated dependencies [c00bf28]
|
|
1964
|
+
- Updated dependencies [93127bd]
|
|
1965
|
+
- Updated dependencies [f2158ec]
|
|
1966
|
+
- Updated dependencies [759606e]
|
|
1967
|
+
- Updated dependencies [72ffc34]
|
|
1968
|
+
- Updated dependencies [a51fa0c]
|
|
1969
|
+
- Updated dependencies [51f3d8d]
|
|
1970
|
+
- Updated dependencies [bf28341]
|
|
1971
|
+
- Updated dependencies [78cbdb5]
|
|
1972
|
+
- Updated dependencies [b7543a9]
|
|
1973
|
+
- Updated dependencies [6c6cee7]
|
|
1974
|
+
- Updated dependencies [42887e0]
|
|
1975
|
+
- Updated dependencies [83fe6e7]
|
|
1976
|
+
- Updated dependencies [d1ab06f]
|
|
1977
|
+
- Updated dependencies [f90b8fb]
|
|
1978
|
+
- Updated dependencies [91783c4]
|
|
1979
|
+
- Updated dependencies [982885d]
|
|
1980
|
+
- Updated dependencies [dba7d84]
|
|
1981
|
+
- Updated dependencies [ca39427]
|
|
1982
|
+
- Updated dependencies [bd09957]
|
|
1983
|
+
- Updated dependencies [5a07e67]
|
|
1984
|
+
- Updated dependencies [2d36552]
|
|
1985
|
+
- Updated dependencies [45d8288]
|
|
1986
|
+
- Updated dependencies [490f482]
|
|
1987
|
+
- Updated dependencies [27308c5]
|
|
1988
|
+
- Updated dependencies [8689166]
|
|
1989
|
+
- Updated dependencies [c9327c9]
|
|
1990
|
+
- Updated dependencies [920165d]
|
|
1991
|
+
- Updated dependencies [9101be5]
|
|
1992
|
+
- Updated dependencies [f53a8d0]
|
|
1993
|
+
- Updated dependencies [968dc1e]
|
|
1994
|
+
- Updated dependencies [57f9b07]
|
|
1995
|
+
- Updated dependencies [3c73d99]
|
|
1996
|
+
- Updated dependencies [d91aed9]
|
|
1997
|
+
- Updated dependencies [ed71d9e]
|
|
1998
|
+
- Updated dependencies [7776fc2]
|
|
1999
|
+
- Updated dependencies [e76634c]
|
|
2000
|
+
- Updated dependencies [c86185e]
|
|
2001
|
+
- Updated dependencies [1170ed1]
|
|
2002
|
+
- Updated dependencies [92814db]
|
|
2003
|
+
- Updated dependencies [4d73b07]
|
|
2004
|
+
- @object-ui/react@17.7.0
|
|
2005
|
+
- @object-ui/core@17.7.0
|
|
2006
|
+
- @object-ui/types@17.7.0
|
|
2007
|
+
- @object-ui/components@17.7.0
|
|
2008
|
+
|
|
3
2009
|
## 17.6.0
|
|
4
2010
|
|
|
5
2011
|
### Minor Changes
|