@object-ui/components 4.4.0 → 4.6.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,54 @@
1
1
  # @object-ui/components
2
2
 
3
+ ## 4.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3ee436d: feat(components): add `RelatedCountStore` runtime cache + `useRelatedCount`
8
+ hook (built on `useSyncExternalStore`, no new deps). Replaces
9
+ `PageTabsRenderer`'s local per-instance `derivedCounts` state with a
10
+ shared module-scoped store so multiple consumers of the same
11
+ object/parent pair share a single probe.
12
+
13
+ Wires `useBulkExecutor` to call `RelatedCountStore.invalidate(resource)`
14
+ after any successful bulk update/delete, so related-list badges on
15
+ parent records re-probe automatically on the next render instead of
16
+ showing stale counts.
17
+
18
+ ### Patch Changes
19
+
20
+ - @object-ui/types@4.6.0
21
+ - @object-ui/core@4.6.0
22
+ - @object-ui/i18n@4.6.0
23
+ - @object-ui/react@4.6.0
24
+
25
+ ## 4.5.0
26
+
27
+ ### Minor Changes
28
+
29
+ - 6b6afd1: `page:tabs` items now render their optional `icon` (lucide name) and `count`
30
+ badge after the label. Counts >= 1000 are shortened to compact form
31
+ (e.g. `1.2k`). Spec-aligned: `PageTabsItem.icon` and `PageTabsItem.count`.
32
+ - aa7855f: `page:tabs` now auto-derives count badges from any descendant `record:related_list`.
33
+
34
+ For every tab item whose `count` is not set explicitly, the renderer walks the tab's children (depth-first) to find the first `record:related_list` schema node and issues a `limit:1` find through the active `dataSource` to read the matching `total`. The badge appears in the tab strip without spec authors having to wire counts manually.
35
+
36
+ Behavior:
37
+ - Explicit `count` in the spec always wins.
38
+ - Probe is filtered by the parent record id via `relationshipField` when present (skipped until the parent record is loaded).
39
+ - Best-effort: a failed probe just omits the badge — no error surface.
40
+ - Cancellable on unmount.
41
+
42
+ ### Patch Changes
43
+
44
+ - 170d89f: PageTabsRenderer auto-count now descends into accordion (`properties.items`) and sums counts when a tab contains multiple `record:related_list` widgets — matches Salesforce "Related" tab semantics. Previously only the first list was probed (or none, if wrapped in an accordion).
45
+ - Updated dependencies [ab5e281]
46
+ - Updated dependencies [22fa558]
47
+ - @object-ui/types@4.5.0
48
+ - @object-ui/i18n@4.5.0
49
+ - @object-ui/core@4.5.0
50
+ - @object-ui/react@4.5.0
51
+
3
52
  ## 4.4.0
4
53
 
5
54
  ### Patch Changes
package/dist/index.css CHANGED
@@ -89,6 +89,7 @@
89
89
  --font-weight-bold: 700;
90
90
  --font-weight-extrabold: 800;
91
91
  --tracking-tight: -0.025em;
92
+ --tracking-wide: 0.025em;
92
93
  --tracking-wider: 0.05em;
93
94
  --tracking-widest: 0.1em;
94
95
  --leading-tight: 1.25;
@@ -396,6 +397,9 @@
396
397
  .right-4 {
397
398
  right: calc(var(--spacing) * 4);
398
399
  }
400
+ .right-12 {
401
+ right: calc(var(--spacing) * 12);
402
+ }
399
403
  .-bottom-12 {
400
404
  bottom: calc(var(--spacing) * -12);
401
405
  }
@@ -429,6 +433,9 @@
429
433
  .z-20 {
430
434
  z-index: 20;
431
435
  }
436
+ .z-30 {
437
+ z-index: 30;
438
+ }
432
439
  .z-50 {
433
440
  z-index: 50;
434
441
  }
@@ -549,6 +556,9 @@
549
556
  .mr-1 {
550
557
  margin-right: calc(var(--spacing) * 1);
551
558
  }
559
+ .mr-1\.5 {
560
+ margin-right: calc(var(--spacing) * 1.5);
561
+ }
552
562
  .mr-2 {
553
563
  margin-right: calc(var(--spacing) * 2);
554
564
  }
@@ -585,6 +595,9 @@
585
595
  .ml-1 {
586
596
  margin-left: calc(var(--spacing) * 1);
587
597
  }
598
+ .ml-1\.5 {
599
+ margin-left: calc(var(--spacing) * 1.5);
600
+ }
588
601
  .ml-2 {
589
602
  margin-left: calc(var(--spacing) * 2);
590
603
  }
@@ -1007,6 +1020,9 @@
1007
1020
  .w-\[450px\] {
1008
1021
  width: 450px;
1009
1022
  }
1023
+ .w-\[calc\(100vw-1rem\)\] {
1024
+ width: calc(100vw - 1rem);
1025
+ }
1010
1026
  .w-auto {
1011
1027
  width: auto;
1012
1028
  }
@@ -1022,6 +1038,9 @@
1022
1038
  .w-px {
1023
1039
  width: 1px;
1024
1040
  }
1041
+ .w-screen {
1042
+ width: 100vw;
1043
+ }
1025
1044
  .max-w-\(--skeleton-width\) {
1026
1045
  max-width: var(--skeleton-width);
1027
1046
  }
@@ -1112,6 +1131,9 @@
1112
1131
  .min-w-11 {
1113
1132
  min-width: calc(var(--spacing) * 11);
1114
1133
  }
1134
+ .min-w-\[1rem\] {
1135
+ min-width: 1rem;
1136
+ }
1115
1137
  .min-w-\[8rem\] {
1116
1138
  min-width: 8rem;
1117
1139
  }
@@ -1254,6 +1276,9 @@
1254
1276
  .touch-none {
1255
1277
  touch-action: none;
1256
1278
  }
1279
+ .resize {
1280
+ resize: both;
1281
+ }
1257
1282
  .resize-none {
1258
1283
  resize: none;
1259
1284
  }
@@ -2179,6 +2204,10 @@
2179
2204
  --tw-tracking: var(--tracking-tight);
2180
2205
  letter-spacing: var(--tracking-tight);
2181
2206
  }
2207
+ .tracking-wide {
2208
+ --tw-tracking: var(--tracking-wide);
2209
+ letter-spacing: var(--tracking-wide);
2210
+ }
2182
2211
  .tracking-wider {
2183
2212
  --tw-tracking: var(--tracking-wider);
2184
2213
  letter-spacing: var(--tracking-wider);
@@ -3242,6 +3271,16 @@
3242
3271
  }
3243
3272
  }
3244
3273
  }
3274
+ .hover\:bg-primary\/40 {
3275
+ &:hover {
3276
+ @media (hover: hover) {
3277
+ background-color: color-mix(in srgb, hsl(var(--primary)) 40%, transparent);
3278
+ @supports (color: color-mix(in lab, red, red)) {
3279
+ background-color: color-mix(in oklab, var(--color-primary) 40%, transparent);
3280
+ }
3281
+ }
3282
+ }
3283
+ }
3245
3284
  .hover\:bg-primary\/80 {
3246
3285
  &:hover {
3247
3286
  @media (hover: hover) {
@@ -3600,6 +3639,14 @@
3600
3639
  background-color: var(--color-muted);
3601
3640
  }
3602
3641
  }
3642
+ .active\:bg-primary\/60 {
3643
+ &:active {
3644
+ background-color: color-mix(in srgb, hsl(var(--primary)) 60%, transparent);
3645
+ @supports (color: color-mix(in lab, red, red)) {
3646
+ background-color: color-mix(in oklab, var(--color-primary) 60%, transparent);
3647
+ }
3648
+ }
3649
+ }
3603
3650
  .active\:bg-sidebar-accent {
3604
3651
  &:active {
3605
3652
  background-color: var(--color-sidebar-accent);
@@ -4385,6 +4432,11 @@
4385
4432
  margin-top: calc(var(--spacing) * 0);
4386
4433
  }
4387
4434
  }
4435
+ .sm\:block {
4436
+ @media (width >= 40rem) {
4437
+ display: block;
4438
+ }
4439
+ }
4388
4440
  .sm\:flex {
4389
4441
  @media (width >= 40rem) {
4390
4442
  display: flex;
@@ -4460,9 +4512,9 @@
4460
4512
  width: auto;
4461
4513
  }
4462
4514
  }
4463
- .sm\:max-w-2xl {
4515
+ .sm\:w-full {
4464
4516
  @media (width >= 40rem) {
4465
- max-width: var(--container-2xl);
4517
+ width: 100%;
4466
4518
  }
4467
4519
  }
4468
4520
  .sm\:max-w-3xl {
@@ -4480,6 +4532,16 @@
4480
4532
  max-width: 425px;
4481
4533
  }
4482
4534
  }
4535
+ .sm\:max-w-\[var\(--ov-w\)\] {
4536
+ @media (width >= 40rem) {
4537
+ max-width: var(--ov-w);
4538
+ }
4539
+ }
4540
+ .sm\:max-w-\[var\(--ov-w\,42rem\)\] {
4541
+ @media (width >= 40rem) {
4542
+ max-width: var(--ov-w,42rem);
4543
+ }
4544
+ }
4483
4545
  .sm\:max-w-lg {
4484
4546
  @media (width >= 40rem) {
4485
4547
  max-width: var(--container-lg);
@@ -5692,6 +5754,11 @@
5692
5754
  display: none;
5693
5755
  }
5694
5756
  }
5757
+ .\[\&\>button\:last-of-type\]\:hidden {
5758
+ &>button:last-of-type {
5759
+ display: none;
5760
+ }
5761
+ }
5695
5762
  .\[\&\>input\]\:flex-1 {
5696
5763
  &>input {
5697
5764
  flex: 1;