@object-ui/plugin-designer 17.2.0 → 17.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,425 @@
1
1
  # @object-ui/plugin-designer
2
2
 
3
+ ## 17.5.0
4
+
5
+ ### Patch Changes
6
+
7
+ - d0c3b26: Every plain `<button>` now declares its `type`. HTML defaults an untyped button to
8
+ `type="submit"`, so any of these buttons would submit the form it was composed into
9
+ instead of running its own handler — a real risk for renderers (`drawer`, `tree-view`,
10
+ `navigation-overlay`) whose placement inside a form is a JSON metadata decision. 114
11
+ sites were converted to `type="button"`; no site was a genuine submit button, and the
12
+ DOM is otherwise unchanged.
13
+
14
+ The defect class is now closed mechanically by a new `object-ui/button-has-type` ESLint
15
+ rule (error), so the next untyped button fails CI at write time rather than being found
16
+ by a fourth audit round (objectui#4045, closing the objectui#3344 family).
17
+
18
+ - abb0f81: A dashboard date filter's default has one spelling again — the bare preset name — and the `{ preset }` object becomes a documented legacy alias with a retirement window
19
+
20
+ `@objectstack/spec` 17.0.0-rc.6 added a cross-field refinement to `GlobalFilterSchema` holding a `type: 'date'` filter's `defaultValue` to three spellings: a preset NAME (`last_7_days`), an ISO date (`2026-01-15`), or a date-macro token (`{today}`). objectui's derived schema had widened `defaultValue` to `z.any()` and did not carry the refinement, so it accepted `{ preset: 'last_7_days' }` — metadata the platform refuses. That is the tolerant-consumer shape where the designer goes green and the save fails server-side, and it is now closed: the refinement is adopted, the widening is retired, and the object form is refused with the spec's own message.
21
+
22
+ Per the maintainer ruling on objectui#4165, the spec stays strict and the bare preset name is the single canonical spelling. `{ preset }` is handled as an ADR-0089 legacy alias rather than by a permanently tolerant schema: `liftLegacyGlobalFilterDefault` / `liftLegacyDashboardFilterDefaults` (new exports on `@object-ui/types`) convert it to the bare name, `@object-ui/core`'s `resolveDashboardFilterDefs` applies the lift when it reads a stored dashboard, and the console's dashboard designer applies it as the document enters the editable draft so the next save persists the canonical spelling. The retirement window is recorded at the read site: the alias may be removed in `@object-ui/types` 18.0.0, and every lift warns on the console so a surviving legacy document is visible rather than silently tolerated.
23
+
24
+ No stored dashboard has to change for this release. The lift means a document carrying the object form keeps loading and rendering exactly as before — measured, not assumed: a legacy declaration already resolved correctly, because `{ preset }` also happens to be the runtime value shape objectui's own date filters use, and that coincidence is why the object form went unnoticed for so long. What changes is that the declaration is now canonicalized on read and rewritten on save, so the two spellings converge instead of accreting.
25
+
26
+ The other two divergences in this schema — the bare-string `options` shorthand and the optional `optionsFrom.labelField` — are unaffected. Carrying the spec's refinement while keeping them needed a new composition: a refined object schema in zod 4 rejects `.extend()` and `.omit()` outright and types every `.safeExtend()` override as `never`, so objectui's schema now spreads the spec's shape and re-attaches the spec's object-level rules by delegating to the spec schema itself. Nothing restates the spec's grammar, and a refinement the spec adds later flows in with no change here.
27
+
28
+ - bb68488: An inline per-locale label now renders its locale's string at the thirteen read sites the `@objectstack/spec` 17.0.0-rc.6 bump exposed
29
+
30
+ rc.6 widened `I18nLabel` from `string` to `string | Record<string, string>`, so an author may write `label: { en: 'Owner', 'zh-CN': '负责人' }` anywhere the spec accepts a display label. PR #4169 repaired eight such sites; these thirteen were invisible to it because the five packages involved build through vite/rolldown, so `turbo run build` never type-checks their sources — only `turbo run type-check` does. All thirteen are now resolved through a shared resolver against a real locale, and `turbo run type-check` is 78/78 with zero errors.
31
+
32
+ | package | what an author can now write and see |
33
+ | ----------------------------- | --------------------------------------------------------------------------------------- |
34
+ | `@object-ui/layout` | `NavigationArea.label` — the sidebar area switcher's button and its tooltip |
35
+ | `@object-ui/plugin-list` | `ViewTab.label` — the inline pill row, and the mobile dropdown's trigger and menu items |
36
+ | `@object-ui/plugin-dashboard` | `DashboardWidget.title` — the widget card heading and its `title` attribute |
37
+ | `@object-ui/plugin-designer` | `DashboardWidget.title` — the widget card and the preview tile |
38
+ | `@object-ui/app-shell` | `ActionParam.label` **and** each `ActionParam.options[].label` |
39
+
40
+ **Patch, not minor, in every case: no public surface changes meaning.** Every entry above is a read site that previously could only be reached with a value the type system rejected, so no caller's working code changes behaviour. `@object-ui/app-shell` is the only package with an exported-type change and it is purely additive on the authoring side — `RawActionParam.label` and `RawActionParam.options[].label` widen to `I18nLabel` (they accept strictly more), `ResolveActionParamsContext` gains an optional `locale`, and the new `RawActionParamOption` names the authoring shape that was previously spelled with the resolved one. What `resolveActionParams` **emits** is unchanged: `ActionParamDef.label` and its options' labels are still plain `string`s.
41
+
42
+ Two consequences worth knowing:
43
+
44
+ - **The dashboard designer's title input is deliberately read-only for a map-valued title.** Resolving a per-locale map into a single-line input and writing `e.target.value` back would collapse every other locale on the first keystroke, so the write is guarded and an inline map survives an unrelated edit-and-save round trip untouched — the same conservative branch #4169 took for `DashboardWidgetInspector`. What Studio should actually offer for authoring a per-locale label is objectui#4163 part 2, which is unclaimed and pending design.
45
+ - **`@object-ui/layout` resolves at the spec's `en` default, not the viewer's language.** That package carries no i18n dependency by design (its whole i18n story is injection), and `AppSchemaRendererProps` exposes no locale to thread. The choice and what would change it are documented at the call site.
46
+
47
+ - e076fd5: Inline-edit toggle reads "Edit fields" without an I18nProvider, matching every locale pack
48
+
49
+ `DETAIL_DEFAULT_TRANSLATIONS` said `Edit fields inline` where all ten packs say
50
+ `Edit fields`, so `InlineEditSaveBar`'s toggle announced two different names for one
51
+ control — the map's on provider-less hosts (standalone embeds, the preview gallery),
52
+ the pack's in the console. The pack wins; the map row now mirrors it byte for byte.
53
+
54
+ The three ungated defaults maps (`plugin-detail`, `plugin-list`, `plugin-designer`) are
55
+ now compared key-by-key against the `en` pack by a new gate, generalizing the
56
+ collaboration-only precedent from objectui#3440. `LIST_DEFAULT_TRANSLATIONS` and
57
+ `DESIGNER_DEFAULT_TRANSLATIONS` are exported for it, as `DETAIL_DEFAULT_TRANSLATIONS`
58
+ and `COLLAB_DEFAULT_TRANSLATIONS` already were.
59
+
60
+ - dad805d: Six i18n keys no longer render as raw key strings on hosts with no `I18nProvider` (objectui#4396)
61
+
62
+ `detail.saving`, `list.resetSortToDefault`, `appDesigner.widgetProperties`, `appDesigner.addWidget`, `appDesigner.modeEdit` and `common.delete` were read through `createSafeTranslation` without a row in their hook's defaults table and without an inline `defaultValue` at the call site — the only two fallbacks that path has. On a provider-less host (standalone embedding, the preview gallery, host apps that never mount a provider) `fallbackT` therefore returned the key itself, so users saw `detail.saving` in the inline-edit save button, `list.resetSortToDefault` on the sort popover's reset control, `appDesigner.widgetProperties` as the dashboard inspector heading, `appDesigner.addWidget` as its toolbar label, `appDesigner.modeEdit` as a button's accessible name, and `common.delete` on the designer's destructive confirm.
63
+
64
+ Each key now has a row in its consumer hook's defaults table, byte-identical to the `en` pack value. No pack was edited, no key added, no call site changed.
65
+
66
+ - bb68488: Stop declaring 14 symbols under names `@objectstack/spec` owns at `17.0.0-rc.6`
67
+ (objectui#4167, objectstack#4115).
68
+
69
+ The rc.6 bump published nine names this repo already declared locally, on top of
70
+ four that predate it — `check:spec-symbols` reported all thirteen at once, and a
71
+ fourteenth (`GlobalFilterSchema`) appeared during the bump itself. Each was
72
+ triaged on its own rather than blanket-renamed, because the right answer differs
73
+ per symbol: five bind to the spec, three are renamed because the spec's
74
+ same-named export means something else, five arrive by derivation, and one is a
75
+ declared dialect with a written reason.
76
+
77
+ **Breaking for importers of `@object-ui/react`, `@object-ui/app-shell` and
78
+ `@object-ui/types`** — three exported names changed, because the spec exports the
79
+ same name for a _different_ thing:
80
+
81
+ | package | was | now | what the spec's same-named export actually is |
82
+ | :-------------------- | :----------------- | :----------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
83
+ | `react` / `app-shell` | `MetadataState` | `MetadataCacheState` | a metadata item's LIFECYCLE state — `'draft' \| 'active' \| 'deprecated' \| 'archived'` (`MetadataStateSchema`, `@objectstack/spec/system`) |
84
+ | `react` / `app-shell` | `resolveI18nLabel` | `resolveKeyedI18nLabel` | a resolver for the INLINE per-locale map (`{ en: 'Owner', 'zh-CN': '负责人' }`) against a BCP-47 locale |
85
+ | `types` | `DateRangePreset` | `FilterBuilderDateRangePreset` | the thirteen HISTORICAL dashboard filter-bar presets; this one is the filter-builder set, which adds eight FUTURE windows the dashboard schema rejects |
86
+
87
+ `resolveI18nLabel` is the one where the collision had already started costing
88
+ something. rc.6 widened `I18nLabel` from `string` to
89
+ `string | Record< string, string >`, so the same authored value now reaches
90
+ either resolver — and each answers wrongly, silently, for the other's input: the
91
+ keyed one returns `undefined` for `{ en: 'Owner' }` (no `key`, no
92
+ `defaultValue`), and the spec's reads `key` / `defaultValue` / `params` as locale
93
+ tags. The rc.6 bump PR met this and aliased the spec's import as
94
+ `resolveInlineI18nLabel` in five files, with hand-written comments at two of
95
+ them. That is a review convention, which is what objectstack#4115 exists to
96
+ replace with a rule — so `Keyed` is now the counterpart of that `Inline`, and the
97
+ name says which vocabulary it resolves at every call site.
98
+
99
+ **Eleven keep their names and are now imported or derived from the spec** instead
100
+ of re-declared: `DATE_RANGE_PRESETS`, `NavigationMode`, `AddressValue`,
101
+ `BreakpointColumnMap`, `BreakpointOrderMap`, `KanbanConfig`, `CalendarConfig`,
102
+ `GanttConfig`, plus the three renamed above at their new names.
103
+
104
+ **Four of the copies were losing information, not just duplicating it.**
105
+
106
+ - **`GanttConfig` declared six keys and called itself canonical; rc.6's
107
+ `GanttConfigSchema` declares seventeen.** The eleven it never mentioned —
108
+ `parentField`, `typeField`, `baselineStartField`, `baselineEndField`,
109
+ `groupByField`, `resourceView`, `assigneeField`, `effortField`, `capacity`,
110
+ `quickFilters`, `autoZoomToFilter` — are all read by
111
+ `plugin-gantt/src/ObjectGantt.tsx`, through a local `GanttConfigEx`
112
+ intersection that existed only because this type did not carry them. It now
113
+ derives from the spec, with `timeSegments` (shift segmentation) as the one
114
+ genuinely local extension; the schema is `$loose` upstream, so that key is
115
+ legal metadata rather than a second dialect.
116
+ - **`GanttConfig.tooltipFields` carried the comment "not part of the upstream
117
+ GanttConfigSchema".** It is, as of rc.6, so the key now arrives from the spec.
118
+ - **`AddressValue` declared five of the spec's seven parts** — `countryCode` and
119
+ `formatted` were missing, under a comment already claiming to be "the part
120
+ names of `AddressSchema`". The widget still renders five inputs; binding the
121
+ type stops it from asserting the platform cannot store the other two, and makes
122
+ the `{ ...address }` write-through say so.
123
+ - **`DATE_RANGE_PRESETS` was `Object.keys(PRESET_RANGES)`,** a third copy of a
124
+ vocabulary the spec extracted in objectstack#4614 precisely to collapse — its
125
+ own doc comment names this module as one of the three. It is now the spec's
126
+ array by reference, and the local date-macro bounds table is pinned complete
127
+ against it with `satisfies`, so a preset the schema gains without bounds here
128
+ is a compile error rather than a filter that validates clean and then selects
129
+ nothing.
130
+
131
+ `NavigationMode` was one hop from the spec already (`NavigationConfig['mode']`);
132
+ it is bound directly, with a both-directions type pin that it stays the same type
133
+ as the config's own `mode`. `KanbanConfig` / `CalendarConfig` /
134
+ `BreakpointColumnMap` / `BreakpointOrderMap` were exact hand copies of `$strict`
135
+ schemas and are now re-exports — "still exact" is the argument for binding them,
136
+ since a copy with nothing to protect can only drift.
137
+
138
+ `GlobalFilterSchema` is the one ALLOW entry. It is the same spread-composition
139
+ dialect as `SelectOptionSchema` next to it, and it collided only because rc.6's
140
+ new refinement forced `.extend()` to be respelled as a `.shape` spread — which
141
+ moved a derivation the guard could see into an object literal it deliberately
142
+ does not descend into. The dialect is unchanged and its three divergences are
143
+ pinned; which side moves on the refinement itself is objectui#4165.
144
+
145
+ `@objectstack/spec` moves from `devDependencies` to `dependencies` in
146
+ `@object-ui/layout`: its public type surface now references the spec.
147
+
148
+ - Updated dependencies [0e67b53]
149
+ - Updated dependencies [ceccdcf]
150
+ - Updated dependencies [d6e5124]
151
+ - Updated dependencies [debad27]
152
+ - Updated dependencies [dc2aa3e]
153
+ - Updated dependencies [ee66e2e]
154
+ - Updated dependencies [e2e6360]
155
+ - Updated dependencies [ee26e65]
156
+ - Updated dependencies [5900ac5]
157
+ - Updated dependencies [932cbcd]
158
+ - Updated dependencies [734d186]
159
+ - Updated dependencies [f650253]
160
+ - Updated dependencies [3d9769a]
161
+ - Updated dependencies [8f85f8b]
162
+ - Updated dependencies [7ffd616]
163
+ - Updated dependencies [d0c3b26]
164
+ - Updated dependencies [3fc2971]
165
+ - Updated dependencies [aca27fa]
166
+ - Updated dependencies [dde7283]
167
+ - Updated dependencies [f7c6430]
168
+ - Updated dependencies [4dadf0d]
169
+ - Updated dependencies [ae10a01]
170
+ - Updated dependencies [77d6f28]
171
+ - Updated dependencies [0f21348]
172
+ - Updated dependencies [d2e2caf]
173
+ - Updated dependencies [92876f0]
174
+ - Updated dependencies [f279deb]
175
+ - Updated dependencies [4b70d28]
176
+ - Updated dependencies [eb7f586]
177
+ - Updated dependencies [e901131]
178
+ - Updated dependencies [ebb4e0e]
179
+ - Updated dependencies [3a9021e]
180
+ - Updated dependencies [d9d3463]
181
+ - Updated dependencies [2a40f69]
182
+ - Updated dependencies [537a0d1]
183
+ - Updated dependencies [bec3e14]
184
+ - Updated dependencies [613b167]
185
+ - Updated dependencies [b4d3c22]
186
+ - Updated dependencies [1f9b905]
187
+ - Updated dependencies [8f60d73]
188
+ - Updated dependencies [cb13400]
189
+ - Updated dependencies [828549a]
190
+ - Updated dependencies [e1ade8f]
191
+ - Updated dependencies [bc64bfe]
192
+ - Updated dependencies [abb0f81]
193
+ - Updated dependencies [38ab505]
194
+ - Updated dependencies [51ab34e]
195
+ - Updated dependencies [24bb2de]
196
+ - Updated dependencies [0ca6096]
197
+ - Updated dependencies [3e19fe7]
198
+ - Updated dependencies [bb58d1d]
199
+ - Updated dependencies [433ff9f]
200
+ - Updated dependencies [5cc847c]
201
+ - Updated dependencies [e7663f2]
202
+ - Updated dependencies [fa21254]
203
+ - Updated dependencies [f565418]
204
+ - Updated dependencies [33c32bf]
205
+ - Updated dependencies [66fb4fa]
206
+ - Updated dependencies [b953a97]
207
+ - Updated dependencies [d7f3e30]
208
+ - Updated dependencies [6d641c9]
209
+ - Updated dependencies [479cc7b]
210
+ - Updated dependencies [7e4f0e5]
211
+ - Updated dependencies [a84385b]
212
+ - Updated dependencies [45e1949]
213
+ - Updated dependencies [51ac39f]
214
+ - Updated dependencies [5e514c4]
215
+ - Updated dependencies [92250d6]
216
+ - Updated dependencies [c1d939f]
217
+ - Updated dependencies [58bebf6]
218
+ - Updated dependencies [36310dc]
219
+ - Updated dependencies [52d878a]
220
+ - Updated dependencies [405e808]
221
+ - Updated dependencies [49ae9f4]
222
+ - Updated dependencies [a3ae404]
223
+ - Updated dependencies [4270c11]
224
+ - Updated dependencies [bfdf3d4]
225
+ - Updated dependencies [bb68488]
226
+ - Updated dependencies [c0f9a4b]
227
+ - Updated dependencies [b1e42d0]
228
+ - Updated dependencies [2459a3e]
229
+ - Updated dependencies [2776b11]
230
+ - Updated dependencies [ac853ce]
231
+ - Updated dependencies [fa51109]
232
+ - Updated dependencies [d6aa172]
233
+ - Updated dependencies [c32a8a1]
234
+ - Updated dependencies [fe52a04]
235
+ - Updated dependencies [d46f9b8]
236
+ - Updated dependencies [3f5f87c]
237
+ - Updated dependencies [605b747]
238
+ - Updated dependencies [2fea4d2]
239
+ - Updated dependencies [f5e1143]
240
+ - Updated dependencies [7f1cb33]
241
+ - Updated dependencies [f148a64]
242
+ - Updated dependencies [bb68488]
243
+ - Updated dependencies [2e3b0c0]
244
+ - Updated dependencies [9461dd3]
245
+ - Updated dependencies [78fa331]
246
+ - Updated dependencies [47f551b]
247
+ - Updated dependencies [31ab1ac]
248
+ - Updated dependencies [0082db8]
249
+ - Updated dependencies [b42558a]
250
+ - Updated dependencies [d2f6e6b]
251
+ - Updated dependencies [ab04728]
252
+ - Updated dependencies [85a3082]
253
+ - Updated dependencies [5bf09fd]
254
+ - Updated dependencies [06915b0]
255
+ - Updated dependencies [ff84b05]
256
+ - @object-ui/i18n@17.5.0
257
+ - @object-ui/react@17.5.0
258
+ - @object-ui/components@17.5.0
259
+ - @object-ui/core@17.5.0
260
+ - @object-ui/fields@17.5.0
261
+ - @object-ui/data-objectstack@17.5.0
262
+ - @object-ui/types@17.5.0
263
+ - @object-ui/plugin-grid@17.5.0
264
+ - @object-ui/plugin-form@17.5.0
265
+
266
+ ## 17.4.0
267
+
268
+ ### Patch Changes
269
+
270
+ - Updated dependencies [794c497]
271
+ - Updated dependencies [993336f]
272
+ - Updated dependencies [f0a625a]
273
+ - Updated dependencies [b5980f4]
274
+ - Updated dependencies [8aad9fd]
275
+ - Updated dependencies [6719877]
276
+ - Updated dependencies [56ff091]
277
+ - Updated dependencies [0186cdc]
278
+ - Updated dependencies [7864f03]
279
+ - Updated dependencies [ea41a59]
280
+ - Updated dependencies [0cbdca8]
281
+ - Updated dependencies [d229dfa]
282
+ - Updated dependencies [18c42c6]
283
+ - Updated dependencies [ecae400]
284
+ - Updated dependencies [4bc6c23]
285
+ - Updated dependencies [d3e738a]
286
+ - Updated dependencies [c3b01a7]
287
+ - Updated dependencies [f5f8744]
288
+ - Updated dependencies [8497579]
289
+ - Updated dependencies [f0c9a90]
290
+ - Updated dependencies [7ed3360]
291
+ - Updated dependencies [3765678]
292
+ - Updated dependencies [d83f6b3]
293
+ - Updated dependencies [5f08c05]
294
+ - Updated dependencies [69becd2]
295
+ - Updated dependencies [5e52495]
296
+ - Updated dependencies [0fa5e4d]
297
+ - Updated dependencies [b750823]
298
+ - Updated dependencies [5bfaabd]
299
+ - Updated dependencies [022002a]
300
+ - Updated dependencies [e06810e]
301
+ - Updated dependencies [ab3ad4f]
302
+ - Updated dependencies [65bb513]
303
+ - Updated dependencies [c97a45e]
304
+ - Updated dependencies [b19162d]
305
+ - Updated dependencies [c2fd122]
306
+ - Updated dependencies [1bd6faa]
307
+ - Updated dependencies [9154d9e]
308
+ - Updated dependencies [ac2139c]
309
+ - Updated dependencies [b14ab3a]
310
+ - Updated dependencies [e24d767]
311
+ - Updated dependencies [8c60819]
312
+ - Updated dependencies [aca561a]
313
+ - Updated dependencies [41d6022]
314
+ - Updated dependencies [e64a52e]
315
+ - Updated dependencies [844d17f]
316
+ - Updated dependencies [d8a0be4]
317
+ - Updated dependencies [48132f7]
318
+ - Updated dependencies [4dcd52a]
319
+ - Updated dependencies [42ae5c6]
320
+ - Updated dependencies [0ef9dfd]
321
+ - Updated dependencies [f4b97c8]
322
+ - Updated dependencies [1d723e3]
323
+ - Updated dependencies [0109f54]
324
+ - Updated dependencies [7e5bb5d]
325
+ - Updated dependencies [fbc23e0]
326
+ - Updated dependencies [6d762da]
327
+ - Updated dependencies [e6fdbdc]
328
+ - Updated dependencies [54233b1]
329
+ - Updated dependencies [c2ecbae]
330
+ - Updated dependencies [f9faa7d]
331
+ - Updated dependencies [97b63d7]
332
+ - Updated dependencies [14c59c0]
333
+ - Updated dependencies [aeb8424]
334
+ - Updated dependencies [6bb454a]
335
+ - Updated dependencies [1a33b1a]
336
+ - Updated dependencies [11c1e71]
337
+ - Updated dependencies [523be48]
338
+ - Updated dependencies [7e2b7e9]
339
+ - Updated dependencies [33526fd]
340
+ - Updated dependencies [32413ec]
341
+ - Updated dependencies [c1e1e6b]
342
+ - @object-ui/components@17.4.0
343
+ - @object-ui/react@17.4.0
344
+ - @object-ui/core@17.4.0
345
+ - @object-ui/fields@17.4.0
346
+ - @object-ui/i18n@17.4.0
347
+ - @object-ui/types@17.4.0
348
+ - @object-ui/plugin-grid@17.4.0
349
+ - @object-ui/plugin-form@17.4.0
350
+ - @object-ui/data-objectstack@17.4.0
351
+
352
+ ## 17.3.0
353
+
354
+ ### Patch Changes
355
+
356
+ - Updated dependencies [18cd432]
357
+ - Updated dependencies [b7165ce]
358
+ - Updated dependencies [532cf8b]
359
+ - Updated dependencies [680080a]
360
+ - Updated dependencies [a7651e6]
361
+ - Updated dependencies [d915c47]
362
+ - Updated dependencies [b71fc92]
363
+ - Updated dependencies [65516ba]
364
+ - Updated dependencies [94c5b7c]
365
+ - Updated dependencies [ca0fa8f]
366
+ - Updated dependencies [34595eb]
367
+ - Updated dependencies [3889ffb]
368
+ - Updated dependencies [5781fb1]
369
+ - Updated dependencies [7e2406a]
370
+ - Updated dependencies [9e9e9a9]
371
+ - Updated dependencies [19b8c9b]
372
+ - Updated dependencies [56409c2]
373
+ - Updated dependencies [042e09d]
374
+ - Updated dependencies [7d08c3f]
375
+ - Updated dependencies [9cbcbf4]
376
+ - Updated dependencies [85c4c9c]
377
+ - Updated dependencies [fd54c3e]
378
+ - Updated dependencies [4eeb932]
379
+ - Updated dependencies [6fe485b]
380
+ - Updated dependencies [5c856ec]
381
+ - Updated dependencies [23018cc]
382
+ - Updated dependencies [53811d1]
383
+ - Updated dependencies [68b6a28]
384
+ - Updated dependencies [0554e88]
385
+ - Updated dependencies [d915c47]
386
+ - Updated dependencies [f44d872]
387
+ - Updated dependencies [28b2e65]
388
+ - Updated dependencies [509104a]
389
+ - Updated dependencies [825bbe3]
390
+ - Updated dependencies [6195841]
391
+ - Updated dependencies [5dd0127]
392
+ - Updated dependencies [06632e9]
393
+ - Updated dependencies [a415684]
394
+ - Updated dependencies [a4cff5b]
395
+ - Updated dependencies [175bd79]
396
+ - Updated dependencies [5af2852]
397
+ - Updated dependencies [34d9169]
398
+ - Updated dependencies [5881a2c]
399
+ - Updated dependencies [9bc3709]
400
+ - Updated dependencies [f833d3a]
401
+ - Updated dependencies [30ae33a]
402
+ - Updated dependencies [a6ec93d]
403
+ - Updated dependencies [2a9513d]
404
+ - Updated dependencies [49f7449]
405
+ - Updated dependencies [71be406]
406
+ - Updated dependencies [d22ae31]
407
+ - Updated dependencies [c7ed4c3]
408
+ - Updated dependencies [2409e1d]
409
+ - Updated dependencies [789fe3e]
410
+ - Updated dependencies [f789c3b]
411
+ - Updated dependencies [a321fa4]
412
+ - Updated dependencies [8d8094a]
413
+ - @object-ui/core@17.3.0
414
+ - @object-ui/fields@17.3.0
415
+ - @object-ui/components@17.3.0
416
+ - @object-ui/types@17.3.0
417
+ - @object-ui/plugin-grid@17.3.0
418
+ - @object-ui/i18n@17.3.0
419
+ - @object-ui/react@17.3.0
420
+ - @object-ui/plugin-form@17.3.0
421
+ - @object-ui/data-objectstack@17.3.0
422
+
3
423
  ## 17.2.0
4
424
 
5
425
  ### Patch Changes
@@ -951,6 +1371,7 @@ undefined` — swallowing the very errors the command exists to print. Now reads
951
1371
  the Setup app → _All Metadata Types_.
952
1372
 
953
1373
  ### New: `@object-ui/app-shell` views/metadata-admin
1374
+
954
1375
  - **`MetadataDirectoryPage`** — auto-grouped tile directory by domain, with
955
1376
  free-text search, domain chips, and a _Writable only_ filter.
956
1377
  - **`MetadataResourceListPage` / `MetadataResourceEditPage` / `…CreatePage` / `…HistoryPage`** —
@@ -974,6 +1395,7 @@ undefined` — swallowing the very errors the command exists to print. Now reads
974
1395
  `t(key)` helper.
975
1396
 
976
1397
  ### New routing variant
1398
+
977
1399
  - App nav now supports `{ type: 'component', componentRef, params? }` items.
978
1400
  `AppContent` resolves them through the existing `ComponentRegistry`.
979
1401
  - Built-in components registered: `metadata:directory`, `metadata:resource`,
@@ -982,6 +1404,7 @@ undefined` — swallowing the very errors the command exists to print. Now reads
982
1404
  / page.
983
1405
 
984
1406
  ### Plugin-designer
1407
+
985
1408
  - Lazy-exported `ObjectManager`, `FieldDesigner`, `ObjectViewConfigurator`,
986
1409
  `DashboardEditor`, `PageCanvasEditor`, `MetadataObjectsPage`, and
987
1410
  `MetadataFieldsPage` so the engine can mount them on demand.
@@ -1002,6 +1425,7 @@ undefined` — swallowing the very errors the command exists to print. Now reads
1002
1425
 
1003
1426
  **`@object-ui/plugin-designer`** — two new route-ready pages that
1004
1427
  together close the "Data Model" management loop in the Setup app:
1428
+
1005
1429
  - `MetadataObjectsPage` — lists every object schema (via
1006
1430
  `MetadataClient.list('object')`), renders the existing
1007
1431
  `ObjectManager`, and persists edits/deletes through PUT/DELETE on
@@ -1572,6 +1996,7 @@ undefined` — swallowing the very errors the command exists to print. Now reads
1572
1996
  ### Patch Changes
1573
1997
 
1574
1998
  - 1b6dc64: fix: complete Tailwind v3→v4 migration cleanup
1999
+
1575
2000
  - Rename deprecated `flex-shrink-0` → `shrink-0` and `flex-grow-N` →
1576
2001
  `grow-N` (Tailwind v4 dropped the long-form aliases). Affects
1577
2002
  data-table, fields/index, FileField, ChatbotEnhanced,
@@ -1641,6 +2066,7 @@ undefined` — swallowing the very errors the command exists to print. Now reads
1641
2066
  Library builds (vite lib mode) now externalize every non-relative import instead of bundling third-party CJS dependencies into the published dist. This avoids inlined `require("react")` / `require("react-dom")` calls that cause `Calling \`require\` for "react" in an environment that doesn't expose the \`require\` function` runtime errors when consumer apps re-bundle the published dist.
1642
2067
 
1643
2068
  Specifically fixes:
2069
+
1644
2070
  - `@object-ui/plugin-dashboard` no longer inlines `react-grid-layout` (and its transitive `react-draggable` / `react-resizable` CJS bundles). `react-grid-layout` is now declared as a peer dependency so consumers install a single ESM-friendly copy.
1645
2071
  - `@object-ui/components`, `@object-ui/plugin-calendar`, `@object-ui/plugin-charts`, `@object-ui/plugin-designer` no longer inline `react-i18next` / `i18next` / `use-sync-external-store` CJS shims.
1646
2072
  - All plugin packages now use a unified `external: (id) => !/^[./]/.test(id) && !id.startsWith(__dirname)` rule, ensuring future additions of CJS deps are automatically externalized.
@@ -1711,24 +2137,29 @@ undefined` — swallowing the very errors the command exists to print. Now reads
1711
2137
  - a2d7023: End-user feature batch — forms, designer history, import/export, and PWA offline sync.
1712
2138
 
1713
2139
  **Forms (`@object-ui/fields`, `@object-ui/providers`)**
2140
+
1714
2141
  - `FileField`: native `<input capture="environment">` camera capture for mobile devices, plus a uploading-progress indicator driven by `UploadProvider`.
1715
2142
  - `ImageField`: per-image inline crop/rotate via the lazy-loaded `ImageCropperDialog` (canvas-based, zero new deps).
1716
2143
  - New `UploadProvider` in `@object-ui/providers` with pluggable adapters for S3 and Azure Blob (plus the default object-URL adapter for local previews). XHR-based with progress, abort, and retry.
1717
2144
  - `LookupField`: `lookup.dependsOn: string | string[]` to chain dependent lookups (e.g. State depends on Country); the trigger is gated until parent values are present and the OData `$filter` is built automatically.
1718
2145
 
1719
2146
  **Container-aware widget widths (`@object-ui/components`)**
2147
+
1720
2148
  - New `useResizeObserver(ref)` hook exposing `{ width, height }` of any element. SSR-safe; reads the initial size via `getBoundingClientRect`.
1721
2149
  - `plugin-gantt` and `plugin-kanban` now react to their container size instead of `window.innerWidth`, so they behave correctly inside split panels and dashboards.
1722
2150
 
1723
2151
  **Designer history (`@object-ui/plugin-designer`)**
2152
+
1724
2153
  - `useUndoRedo` (and therefore `useDesignerHistory`) gains `persistKey` + `storage` options to round-trip the undo/redo stack through `sessionStorage`, plus a `clearPersisted()` cleanup helper. Drafts now survive accidental tab refreshes.
1725
2154
  - New `<HistoryPanel>` component renders the timeline visually with one-click jump-to-checkpoint via the new `jumpTo(index)` API.
1726
2155
 
1727
2156
  **Import wizard (`@object-ui/plugin-grid`)**
2157
+
1728
2158
  - Saved column-mapping templates: name, save, re-apply, and delete via a new template bar in the mapping step. Persisted under `objectui:import-templates:${objectName}` (override via `templateStorageKey` / `templateStorage`).
1729
2159
  - Inline validation correction: cells with errors in the preview step are now editable; corrections feed straight into the import without requiring a re-upload, with green-bar status indicators for fixed rows.
1730
2160
 
1731
2161
  **PWA offline sync (`@object-ui/mobile`)**
2162
+
1732
2163
  - New `MemoryOfflineQueue` / `IndexedDbOfflineQueue` (`createOfflineQueue()` picks the best backend) backed by IndexedDB.
1733
2164
  - `createOfflineDataSource(inner, { queue })` wraps any DataSource so mutations issued while offline (or that fail with a network-style error) are queued and replayed in order on reconnect. Includes `replay()`, `drop()`, `clear()`, `pending()`, an `onChange` notifier, and an opt-in `resolveConflict` hook for stale-write conflicts.
1734
2165
  - New `useOfflineSync(source)` hook exposes `{ isOnline, pending, isReplaying, replay, drop, clear }` and auto-replays on the browser's `online` event.
package/README.md CHANGED
@@ -25,7 +25,7 @@ npm install @object-ui/plugin-designer
25
25
  **Peer Dependencies:**
26
26
  - `react` ^18.0.0 || ^19.0.0
27
27
  - `react-dom` ^18.0.0 || ^19.0.0
28
- - `@object-ui/core`
28
+ - `react-router-dom` ^6.0.0 || ^7.0.0
29
29
 
30
30
  ## Quick Start
31
31
 
@@ -129,17 +129,6 @@ const { zoom, pan, resetView } = useCanvasPanZoom();
129
129
  import { ConfirmDialog, Minimap, PropertyEditor, VersionHistory } from '@object-ui/plugin-designer';
130
130
  ```
131
131
 
132
- <!-- release-metadata:v3.3.0 -->
133
-
134
- ## Compatibility
135
-
136
- - **React:** 18.x or 19.x
137
- - **Node.js:** ≥ 18
138
- - **TypeScript:** ≥ 5.0 (strict mode)
139
- - **`@objectstack/spec`:** ^3.3.0
140
- - **`@objectstack/client`:** ^3.3.0
141
- - **Tailwind CSS:** ≥ 3.4 (for packages with UI)
142
-
143
132
  ## Links
144
133
 
145
134
  - 📚 [Documentation](https://www.objectui.org/docs/plugins/plugin-designer)
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardEditor.d.ts","sourceRoot":"","sources":["../src/DashboardEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,kBAAkB,CAAC;AAiCxF,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,MAAM,EAAE,wBAAwB,CAAC;IACjC,mCAAmC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACrD,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACtD,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACtD,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iEAAiE;IACjE,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACpD;AAwRD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAAE,wBAAwB,EAC1C,cAAc,GACf,EAAE,oBAAoB,qBAuStB;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"DashboardEditor.d.ts","sourceRoot":"","sources":["../src/DashboardEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,kBAAkB,CAAC;AAkCxF,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,MAAM,EAAE,wBAAwB,CAAC;IACjC,mCAAmC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACrD,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACtD,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACtD,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iEAAiE;IACjE,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACpD;AAmWD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,QAAgB,EAChB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAAE,wBAAwB,EAC1C,cAAc,GACf,EAAE,oBAAoB,qBAuStB;AAED,eAAe,eAAe,CAAC"}
@@ -5,6 +5,21 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ /**
9
+ * Default English translations for fallback when no I18nProvider is mounted.
10
+ *
11
+ * Every row whose key the `en` pack also defines must stay byte-identical to it,
12
+ * or the same control is labelled one way here and another in the console.
13
+ * Enforced since objectui#4401 by
14
+ * `app-shell/src/__tests__/defaults-maps-mirror-en-pack.test.tsx`.
15
+ *
16
+ * Exported for that gate — the same reason
17
+ * `DETAIL_DEFAULT_TRANSLATIONS` and `COLLAB_DEFAULT_TRANSLATIONS` are exported
18
+ * from their packages. The gate cannot live in `@object-ui/i18n` (that would
19
+ * invert the dependency, see `gantt-count-interpolation-4157.test.ts`), so it
20
+ * reads this map from downstream instead of parsing this file's text.
21
+ */
22
+ export declare const DESIGNER_DEFAULT_TRANSLATIONS: Record<string, string>;
8
23
  /**
9
24
  * Delegates to `@object-ui/i18n`'s `createSafeTranslation`; the local copy this
10
25
  * replaced wrapped the hook in try/catch (rules-of-hooks, objectui#2879).
@@ -1 +1 @@
1
- {"version":3,"file":"useDesignerTranslation.d.ts","sourceRoot":"","sources":["../../src/hooks/useDesignerTranslation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8LH;;;GAGG;AACH,eAAO,MAAM,sBAAsB;4BAnMlC,CAAC;;;;;CAsMD,CAAC"}
1
+ {"version":3,"file":"useDesignerTranslation.d.ts","sourceRoot":"","sources":["../../src/hooks/useDesignerTranslation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgMhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB;4BA9NlC,CAAC;;;;;CAiOD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -24,6 +24,7 @@ export { useConfirmDialog } from './hooks/useConfirmDialog';
24
24
  export { useClipboard } from './hooks/useClipboard';
25
25
  export { useMultiSelect } from './hooks/useMultiSelect';
26
26
  export { useCanvasPanZoom } from './hooks/useCanvasPanZoom';
27
+ export { DESIGNER_DEFAULT_TRANSLATIONS } from './hooks/useDesignerTranslation';
27
28
  export { ConfirmDialog } from './components/ConfirmDialog';
28
29
  export { Minimap } from './components/Minimap';
29
30
  export { PropertyEditor } from './components/PropertyEditor';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,GACd,CAAC;AAEF,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAM7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAOlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,GACd,CAAC;AAEF,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAM7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAOlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}