@umriss-ui/dashboard 0.42.0 → 0.44.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
@@ -13,6 +13,27 @@ one section before an upgrade reads that one.
13
13
 
14
14
  The dashboard joins the other five packages' one number at its first version: they are released together, and a package without a change of its own still gets a heading for it.
15
15
 
16
+ ## 0.44.0 – Moves along (Oct. 2026)
17
+
18
+ No change of its own; the dashboard is released with the other five under one number.
19
+
20
+ ### Changed
21
+
22
+ - **The peer range on core moves to `^0.44.0`.**
23
+ - Migration: install the 0.44 version of `@umriss-ui/core` beside it.
24
+
25
+ ## 0.43.0 – What fills a widget (Oct. 2026)
26
+
27
+ ### Added
28
+
29
+ - **`Dashboard` takes a `ref`**, typed at its root `role="group"` (ADR-0068); at runtime it reached that element before.
30
+ - **The README says what fills a widget and who hears of a failure:** a chart and a schedule fill the body, a table stays within it with its toolbar and pager in view, a wrapper passes the height on with `height: 100%`; a widget whose content throws reaches React's `onCaughtError`, keeps its frame, and tries again when its size or options change.
31
+
32
+ ### Changed
33
+
34
+ - **The peer range on core moves to `^0.43.0`.**
35
+ - Migration: install the 0.43 version of `@umriss-ui/core` beside it.
36
+
16
37
  ## 0.42.0 – A widget scrolls what exceeds its size (Oct. 2026)
17
38
 
18
39
  ### Added
package/README.md CHANGED
@@ -60,6 +60,8 @@ const { Dashboard, WidgetType } = useDashboard({
60
60
  </Dashboard>;
61
61
  ```
62
62
 
63
+ `Dashboard` is an element: `ref`, `className`, `style` and the rest reach its root `role="group"`.
64
+
63
65
  - **A sequence, never coordinates (ADR-0064).** One stored arrangement is right
64
66
  at every width. A widget that does not fit its row starts the next, and the
65
67
  room it leaves stays free. Below the width at which a column would be too
@@ -69,6 +71,12 @@ const { Dashboard, WidgetType } = useDashboard({
69
71
  worded in English and German by the library; a type offers some of them. The
70
72
  height follows the size, never the content: what the content needs beyond
71
73
  the size scrolls inside the widget, and the keyboard reaches it.
74
+ - **A view fills its widget's body.** A chart and a schedule fill the body and
75
+ need no height of their own; a table stays within it, its toolbar and pager
76
+ in view, and its rows scroll. A wrapper of the application's own between the
77
+ body and the view passes the height on with `height: 100%`. A view whose floor
78
+ is taller than a size (a chart's 300 px, a schedule's 400 px) takes a lower one
79
+ through `style`'s `minHeight`, as the dispatcher's trends do.
72
80
  - **Editing is a mode and a draft.** "Edit" opens it; every change is a step
73
81
  that can be undone and redone; "Done" reports the whole arrangement once
74
82
  through `onViewChange`, "Cancel" puts it back, "Reset" steps to the default.
@@ -80,6 +88,13 @@ const { Dashboard, WidgetType } = useDashboard({
80
88
  - **A kept arrangement is read leniently.** A widget of a type that is gone
81
89
  falls out, a size a type no longer offers falls back to its starting size.
82
90
  A widget whose content throws keeps its frame and says so in a sentence.
91
+ - **A failed widget is reported and may be retried.** React's `onCaughtError`,
92
+ given to `createRoot` or to the application's root, receives the error of a
93
+ widget whose content throws; the other widgets render. A retry is an error
94
+ boundary of the application's own inside the content: it catches first, so the
95
+ dashboard's boundary never sees the error, and it can reset the application's
96
+ data layer. Without one, a widget gets another try by itself when its size or
97
+ its options change.
83
98
  - **The application's, not the library's:** where an arrangement is stored,
84
99
  which default a role gets, several dashboards, sharing, and what stands in a
85
100
  widget.
package/dist/dashboard.js CHANGED
@@ -346,7 +346,7 @@ function Mt({ view: s, editor: e, className: i, children: d, catalogue: v, ...y
346
346
  ] }, t.name);
347
347
  }) }) })
348
348
  ] }),
349
- D?.form && ne && /* @__PURE__ */ a(Ae, { open: !0, anchorRef: g, align: "end", onOpenChange: () => w(null), role: "dialog", ariaLabel: n.dashboardOptions, children: /* @__PURE__ */ a("div", { className: z.options, children: D.form({
349
+ D?.form && ne && /* @__PURE__ */ a(Ae, { open: !0, anchorRef: g, align: "end", onOpenChange: () => w(null), role: "dialog", "aria-label": n.dashboardOptions, children: /* @__PURE__ */ a("div", { className: z.options, children: D.form({
350
350
  options: ne.options,
351
351
  change: (t) => {
352
352
  e.step(Ue(ne.id, t)), $(n.dashboardOptionsChanged(Q(D, t)));
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { HTMLAttributes } from 'react';
2
2
  import { ReactNode } from 'react';
3
+ import { RefProp } from '@umriss-ui/core';
3
4
 
4
5
  /** What `useDashboard` takes. */
5
6
  export declare interface DashboardOptions {
@@ -48,7 +49,7 @@ export declare interface DashboardParts {
48
49
  }
49
50
 
50
51
  /** The props of `Dashboard`. */
51
- export declare interface DashboardProps extends HTMLAttributes<HTMLDivElement> {
52
+ export declare interface DashboardProps extends HTMLAttributes<HTMLDivElement>, RefProp<HTMLDivElement> {
52
53
  /** The `WidgetType`s of this dashboard. */
53
54
  children?: ReactNode;
54
55
  /** The `name`s of the widget types the catalogue lists.
package/docs/llms-full.md CHANGED
@@ -1,4 +1,4 @@
1
- # @umriss-ui/dashboard 0.42.0
1
+ # @umriss-ui/dashboard 0.44.0
2
2
 
3
3
  > React dashboard for data-dense applications - widgets a reader arranges, packed in order on twelve columns.
4
4
 
@@ -76,7 +76,7 @@ function TrendChart({ data, previous, labels = ["this week", "last week"] }: { d
76
76
  </Text>
77
77
  )}
78
78
  <div style={{ flex: "1 1 0", minHeight: 0 }}>
79
- <Chart ariaLabel={previous ? `${labels[0]} and ${labels[1]}` : labels[0]} padding={4} style={{ minHeight: 0, height: "100%" }}>
79
+ <Chart aria-label={previous ? `${labels[0]} and ${labels[1]}` : labels[0]} padding={4} style={{ minHeight: 0, height: "100%" }}>
80
80
  <XAxis value="i" domain="data" grid={false} tickFormat={() => ""} />
81
81
  <YAxis grid tickFormat={() => ""} />
82
82
  {previous && <Line value="before" name={labels[1]} color="var(--u-color-text-muted)" strokeWidth={1.25} dash={[3, 3]} markers="never" />}
@@ -468,7 +468,7 @@ function TrendChart({ data, previous, labels = ["this week", "last week"] }: { d
468
468
  </Text>
469
469
  )}
470
470
  <div style={{ flex: "1 1 0", minHeight: 0 }}>
471
- <Chart ariaLabel={previous ? `${labels[0]} and ${labels[1]}` : labels[0]} padding={4} style={{ minHeight: 0, height: "100%" }}>
471
+ <Chart aria-label={previous ? `${labels[0]} and ${labels[1]}` : labels[0]} padding={4} style={{ minHeight: 0, height: "100%" }}>
472
472
  <XAxis value="i" domain="data" grid={false} tickFormat={() => ""} />
473
473
  <YAxis grid tickFormat={() => ""} />
474
474
  {previous && <Line value="before" name={labels[1]} color="var(--u-color-text-muted)" strokeWidth={1.25} dash={[3, 3]} markers="never" />}
@@ -800,6 +800,7 @@ Every move, size, removal, addition, undo, redo, reset, "Done" and "Cancel" is a
800
800
  |---|---|---|---|
801
801
  | `children` | `ReactNode` | — | The `WidgetType`s of this dashboard.<br>Shown in: [The start screen of a dispatcher](#dashboard), [Your own component as a widget](#dashboard), [Headings that divide the dashboard](#dashboard) and 1 more |
802
802
  | `catalogue` | `ReadonlyArray<string>` | every declared type | The `name`s of the widget types the catalogue lists.<br>Shown in: [The start screen of a dispatcher](#dashboard) |
803
+ | `ref` | `Ref<HTMLDivElement> \| undefined` | — | Receives the component's root element. From `RefProp`. |
803
804
 
804
805
  Also takes every attribute of `<div>`.
805
806
 
@@ -870,7 +871,7 @@ Declares no props of its own.
870
871
  - Never: stacks of widgets that share one place, coordinates and free placement, a layout per breakpoint, dense packing ([ADR-0064](https://github.com/romanhaendler/umriss-ui/blob/main/docs/adr/0064-a-dashboard-a-user-arranges-is-a-sequence-on-fixed-columns.md)).
871
872
  - Where an arrangement is stored, which default a role gets, several dashboards and what stands in a widget are the application's.
872
873
 
873
- What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/dashboard-v0.42.0/docs/adr/0032-what-umriss-is-not.md).
874
+ What umriss deliberately does not build, and why: [ADR-0032](https://github.com/romanhaendler/umriss-ui/blob/dashboard-v0.44.0/docs/adr/0032-what-umriss-is-not.md).
874
875
 
875
876
  ## API index
876
877
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umriss-ui/dashboard",
3
- "version": "0.42.0",
3
+ "version": "0.44.0",
4
4
  "description": "React dashboard for data-dense applications - widgets a reader arranges, packed in order on twelve columns.",
5
5
  "license": "MIT",
6
6
  "author": "Roman Händler",
@@ -54,7 +54,7 @@
54
54
  }
55
55
  },
56
56
  "peerDependencies": {
57
- "@umriss-ui/core": "^0.42.0",
57
+ "@umriss-ui/core": "^0.44.0",
58
58
  "react": ">=19",
59
59
  "react-dom": ">=19"
60
60
  },
@@ -70,8 +70,8 @@
70
70
  "typescript": "^5.6.3",
71
71
  "vite": "^6.0.0",
72
72
  "vite-plugin-dts": "^4.3.0",
73
- "@umriss-ui/demo": "0.0.0",
74
- "@umriss-ui/core": "0.42.0"
73
+ "@umriss-ui/core": "0.44.0",
74
+ "@umriss-ui/demo": "0.0.0"
75
75
  },
76
76
  "scripts": {
77
77
  "props": "node --disable-warning=ExperimentalWarning --experimental-strip-types demo/props.ts",