@espressif/dashboard-ui-components 1.1.0 → 1.1.2
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 +184 -0
- package/dist/{chunk-IT5T6Y4V.js → chunk-J7YNQMAC.js} +1 -1
- package/dist/{chunk-E6IO2DVV.js → chunk-MOYKF2ZC.js} +12 -0
- package/dist/chunk-WK4PTIOA.js +488 -0
- package/dist/common/index.js +2 -2
- package/dist/components/index.d.ts +6 -3
- package/dist/components/index.js +1 -1
- package/dist/index.js +3 -3
- package/dist/layouts/index.js +1 -1
- package/package.json +2 -1
- package/src/styles/globals.css +1 -1
- package/dist/chunk-WCCSASYX.js +0 -488
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here. The format is based on
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres
|
|
5
|
+
to [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- `DataTable`: `noResultsAction` renders a call-to-action (e.g. an "Add device"
|
|
11
|
+
button) below the description in the empty state — the missing piece for the
|
|
12
|
+
common "no users found, create user" pattern. Alongside it, `noResultsHeading`
|
|
13
|
+
and `noResultsDescription` now accept `ReactNode` as well as `string`, and
|
|
14
|
+
`noResultsIllustration` / `hideNoResultsIllustration` let you swap or drop the
|
|
15
|
+
empty-state graphic. Purely additive: existing string usages keep working
|
|
16
|
+
unchanged, and the default illustration/heading/description stay the same when
|
|
17
|
+
nothing is passed.
|
|
18
|
+
|
|
19
|
+
## [1.1.1] - 2026-08-04
|
|
20
|
+
|
|
21
|
+
A patch release with no API changes: a much smaller published bundle, a wider default
|
|
22
|
+
sidebar, and a fix to the internal release script. No component props were added,
|
|
23
|
+
removed or renamed.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- `.webp` is now a recognised asset type: declared in the ambient asset typings and
|
|
27
|
+
inlined by the build, so `import bg from './x.webp'` behaves like the other image
|
|
28
|
+
formats.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- `EntryLayout`'s default background ships as WebP instead of JPEG — the same artwork at
|
|
32
|
+
the same 1836×1092 dimensions, but **~338 KB smaller in the published bundle**. The
|
|
33
|
+
asset is inlined as a data URL, so it accounted for ~523 KB base64-encoded before and
|
|
34
|
+
~186 KB now. Apps that pass their own `backgroundImage` are unaffected either way.
|
|
35
|
+
- Default `--espd-sidebar-width` raised from `256px` to `288px`, giving nested sidebar
|
|
36
|
+
items and longer group labels more room before they truncate. This is a visual change
|
|
37
|
+
for apps that use the default; redeclare the token after the styles import to keep the
|
|
38
|
+
old width.
|
|
39
|
+
|
|
40
|
+
### Internal
|
|
41
|
+
Nothing in this section affects the published package — it covers the release tooling and
|
|
42
|
+
the demo app, neither of which ships to consumers.
|
|
43
|
+
|
|
44
|
+
- Release script: the version-bump and promote MRs are no longer merged the instant they
|
|
45
|
+
are created. GitLab computes mergeability asynchronously, and merging into that window
|
|
46
|
+
answers a bare `405 Method Not Allowed` — which is what broke the `v1.1.0` release
|
|
47
|
+
after eleven releases won the race by luck. The script now polls
|
|
48
|
+
`detailed_merge_status` until the MR is actually mergeable, retries `405`/`409` a few
|
|
49
|
+
times, and bails out immediately on the states that need a human (conflicts, drafts,
|
|
50
|
+
unresolved threads, missing approvals). Timeout and poll interval are tunable via
|
|
51
|
+
`RELEASE_MERGE_TIMEOUT` and `RELEASE_MERGE_POLL_INTERVAL`; failures now print the last
|
|
52
|
+
status GitLab reported instead of only the HTTP code.
|
|
53
|
+
- Demo app: a search field in the header that jumps to any component page, with a `⌘K` /
|
|
54
|
+
`Ctrl K` shortcut to focus it. Matching is substring-based rather than cmdk's default
|
|
55
|
+
fuzzy scoring, so "tab" ranks `Tabs` first instead of burying it under subsequence
|
|
56
|
+
matches, and hyphens are ignored so "datatable" finds `data-table`.
|
|
57
|
+
|
|
58
|
+
## [1.1.0] - 2026-08-03
|
|
59
|
+
|
|
60
|
+
A maintenance release: one new component, a few new props, and fixes to the sidebar,
|
|
61
|
+
inputs, scrollable sections and data table. No breaking changes — existing code keeps
|
|
62
|
+
working as before.
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
- **`RequirementList`** — a new component that shows which conditions a value meets and
|
|
66
|
+
which it does not: a green check for met items, a muted hollow circle for the rest.
|
|
67
|
+
Built for password rules under an `InputPassword`, but not password-specific. Three
|
|
68
|
+
sizes, and updates are announced to screen readers as the user types.
|
|
69
|
+
- `Alert`: `dismissible` adds a close button that hides the alert, with `onDismiss` to
|
|
70
|
+
react to it and `dismissLabel` for the accessible label. It sits alongside any actions
|
|
71
|
+
you already pass instead of replacing them.
|
|
72
|
+
- `MonospaceContent`: `mask` hides the value behind dots — for API keys, passwords and
|
|
73
|
+
similar secrets — with an eye toggle to reveal it. Copying always copies the real
|
|
74
|
+
value. Set `allowUnmask={false}` to keep it hidden for good. Masking is a UI guard,
|
|
75
|
+
not a security boundary: the value is still in the page.
|
|
76
|
+
- `CopiableText`: `actions` adds your own controls next to the copy button, and
|
|
77
|
+
`alwaysShowActions` keeps them visible instead of only on hover.
|
|
78
|
+
- `SectionCard`: `truncateSecondaryText={false}` lets the secondary text wrap over as
|
|
79
|
+
many lines as it needs, instead of being cut to one line with a tooltip.
|
|
80
|
+
- `DataTable`: `pageSizeOptions` sets the page sizes offered in the selector, so it can
|
|
81
|
+
match what your API accepts. Defaults to the page sizes used until now (exported as
|
|
82
|
+
`DEFAULT_PAGE_SIZE_OPTIONS`); pass `[]` to hide the selector.
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
- `Input`: add-ons now combine with icons, floating labels and the character counter —
|
|
86
|
+
previously only one of them showed at a time, and the password show/hide toggle
|
|
87
|
+
disappeared when an add-on was used. The counter and a trailing icon no longer
|
|
88
|
+
overlap, and both helper texts are read out correctly by screen readers.
|
|
89
|
+
- `Sidebar`: the selected item is now clearly highlighted, and stays recognisable when
|
|
90
|
+
the sidebar is collapsed. Icons are one consistent size everywhere (items, groups,
|
|
91
|
+
chevrons and row actions), rows line up at equal height, nested items are indented
|
|
92
|
+
more clearly, long group labels truncate instead of growing the row, and items with
|
|
93
|
+
no icon show a small neutral dot instead of an initials avatar.
|
|
94
|
+
- `Sidebar`: selection no longer bleeds between sibling pages whose paths share a
|
|
95
|
+
prefix — on `/components/input-password`, `/components/input` stays unselected.
|
|
96
|
+
Sub-pages still highlight their parent item.
|
|
97
|
+
- `ScrollableSections`: on mobile the section picker now stays pinned to the top while
|
|
98
|
+
you scroll, and picking a section no longer leaves its heading hidden behind the
|
|
99
|
+
picker. Long tab labels wrap instead of overflowing the column, and the active-tab
|
|
100
|
+
highlight repositions itself correctly after a resize.
|
|
101
|
+
- `DataTable`: the page-size selector is hidden when no `onPageSizeChange` handler is
|
|
102
|
+
given — it used to be shown even though picking a size did nothing. A current page
|
|
103
|
+
size outside the offered list also stays selectable.
|
|
104
|
+
- `SectionCard`: the header icon is aligned to the middle of the header, and very long
|
|
105
|
+
words wrap instead of spilling out of the card.
|
|
106
|
+
|
|
107
|
+
## [1.0.0] - 2026-07-31
|
|
108
|
+
|
|
109
|
+
First public npm release.
|
|
110
|
+
|
|
111
|
+
### Added
|
|
112
|
+
- `MarkdownContent`: renders a markdown string using the library's own primitives
|
|
113
|
+
(`Typography`, `Code`, `Link`, `Table`, `Separator`), with GitHub-flavoured markdown
|
|
114
|
+
via `remark-gfm` and heading anchors via `rehype-slug`. Raw HTML in the source is
|
|
115
|
+
escaped rather than parsed, so no sanitizer is involved and embedded HTML does not
|
|
116
|
+
render. `react-markdown`, `remark-gfm` and `rehype-slug` are regular dependencies —
|
|
117
|
+
external to the bundle, but installed with the package, so consumers need no extra
|
|
118
|
+
install step.
|
|
119
|
+
- `AppLogo` preset `rainmaker-classic` (light/dark × full/minimal assets), also
|
|
120
|
+
selectable as `WorkspaceLayout` / `EntryLayout` `appName`.
|
|
121
|
+
- `Sidebar`: on mobile the sheet header now has a close button, and tapping a menu
|
|
122
|
+
item closes the sheet after navigating.
|
|
123
|
+
- Apache-2.0 `LICENSE`, `NOTICE`, and `THIRD-PARTY-NOTICES.md`.
|
|
124
|
+
- SPDX license headers (`SPDX-FileCopyrightText` + `SPDX-License-Identifier:
|
|
125
|
+
Apache-2.0`) on all source files, and `publishConfig.access: "public"` —
|
|
126
|
+
aligning with Espressif's other open-source TypeScript SDKs
|
|
127
|
+
(e.g. `@espressif/rainmaker-base-sdk`).
|
|
128
|
+
|
|
129
|
+
### Changed
|
|
130
|
+
- Standardized the copyright holder to **`Espressif Systems (Shanghai) CO LTD`**
|
|
131
|
+
across `LICENSE`, `NOTICE`, and `package.json` `author`, matching the wording
|
|
132
|
+
used in Espressif's other public repositories.
|
|
133
|
+
- **BREAKING:** minimum supported runtime for consumers raised to **Node.js 20.19**
|
|
134
|
+
(`engines.node: ">=20.19.0"`), driven by the `shiki@4` alignment below. The `npm`
|
|
135
|
+
constraint was dropped from `engines` entirely — it only ever affected consumers.
|
|
136
|
+
- Published to **public npm** under `@espressif` (previously internal GitLab
|
|
137
|
+
registry only).
|
|
138
|
+
- Font stack now relies on `--font-sans`; consumers supply their own typeface.
|
|
139
|
+
- `shiki` runtime dependency aligned to `^4` (matches the tested version). This is
|
|
140
|
+
what sets the Node 20.19 floor.
|
|
141
|
+
|
|
142
|
+
### Security
|
|
143
|
+
- `postcss` updated to `8.5.25` — fixes path traversal in previous-source-map
|
|
144
|
+
auto-loading ([GHSA-r28c-9q8g-f849](https://github.com/advisories/GHSA-r28c-9q8g-f849),
|
|
145
|
+
high). Build-time dependency; the published bundle is unaffected.
|
|
146
|
+
- `esbuild` pinned to `^0.28.1` via `overrides` — fixes arbitrary file read in the
|
|
147
|
+
esbuild dev server on Windows
|
|
148
|
+
([GHSA-g7r4-m6w7-qqqr](https://github.com/advisories/GHSA-g7r4-m6w7-qqqr), low).
|
|
149
|
+
The override exists because `tsup@8.5.1` still caps `esbuild` at `^0.27.0`; remove
|
|
150
|
+
it once tsup widens that range.
|
|
151
|
+
|
|
152
|
+
### Removed
|
|
153
|
+
- **BREAKING:** the `CustomIcon` component and its exports
|
|
154
|
+
(`CustomIcon`, `customIconRegistry`, `customIconIds`, `CustomIconProps`,
|
|
155
|
+
`CustomIconId`). It only rendered third-party brand logos; use
|
|
156
|
+
[`lucide-react`](https://lucide.dev) (already a dependency) or your own SVGs
|
|
157
|
+
instead.
|
|
158
|
+
- **BREAKING:** bundled font binaries (Maison Neue, Trueno) and the `--font-*`
|
|
159
|
+
Tailwind families for them. Set `--font-sans` in your app to choose a typeface.
|
|
160
|
+
|
|
161
|
+
### Internal
|
|
162
|
+
Repository and CI changes only — no effect on the published package.
|
|
163
|
+
|
|
164
|
+
- CI: `test` job (build, typecheck, unit tests) on the `node:24.18` image.
|
|
165
|
+
- CI: dual-publish — the same tarball is published to public npm and the
|
|
166
|
+
internal GitLab registry from one tag pipeline.
|
|
167
|
+
- Development toolchain pinned to **Node 24.18.1 / npm 11.16.0** via `.nvmrc` and
|
|
168
|
+
`.node-version`, with a `devEngines` floor of Node `>=24.18.0` / npm `>=11.16.0`.
|
|
169
|
+
`npm ci` and `npm run *` fail with `EBADDEVENGINES` below that floor. The floor is
|
|
170
|
+
a minor below the pinned version because Docker publishes Node patch image tags a
|
|
171
|
+
few days after the Node release. This is a contributor requirement only and does
|
|
172
|
+
not constrain consumers.
|
|
173
|
+
- Install-script review policy: `esbuild` and `fsevents` are recorded in
|
|
174
|
+
`allowScripts` as the only dependencies permitted to run install scripts.
|
|
175
|
+
|
|
176
|
+
## Earlier releases
|
|
177
|
+
|
|
178
|
+
Versions up to and including 0.10.1 were distributed via the internal GitLab
|
|
179
|
+
npm Package Registry only.
|
|
180
|
+
|
|
181
|
+
`0.11.0` was published briefly to verify the release pipeline end to end and was
|
|
182
|
+
unpublished from public npm; it is not a supported version. `1.0.0` is the first
|
|
183
|
+
supported public release. See the package's
|
|
184
|
+
[npm versions](https://www.npmjs.com/package/@espressif/dashboard-ui-components?activeTab=versions).
|
|
@@ -38474,6 +38474,9 @@ function DataTableBody({
|
|
|
38474
38474
|
pageSize,
|
|
38475
38475
|
noResultsHeading,
|
|
38476
38476
|
noResultsDescription,
|
|
38477
|
+
noResultsAction,
|
|
38478
|
+
noResultsIllustration,
|
|
38479
|
+
hideNoResultsIllustration,
|
|
38477
38480
|
onRowClick,
|
|
38478
38481
|
showBorder = false,
|
|
38479
38482
|
tableRowClassName,
|
|
@@ -38496,6 +38499,9 @@ function DataTableBody({
|
|
|
38496
38499
|
{
|
|
38497
38500
|
heading: noResultsHeading,
|
|
38498
38501
|
description: noResultsDescription,
|
|
38502
|
+
action: noResultsAction,
|
|
38503
|
+
illustration: noResultsIllustration,
|
|
38504
|
+
hideIllustration: hideNoResultsIllustration,
|
|
38499
38505
|
className: "border-0 shadow-none"
|
|
38500
38506
|
}
|
|
38501
38507
|
) }) }) }) });
|
|
@@ -38551,6 +38557,9 @@ function DataTable({
|
|
|
38551
38557
|
columnVisibilityLabel = "Columns",
|
|
38552
38558
|
noResultsHeading = "No results",
|
|
38553
38559
|
noResultsDescription = "No results found. Try adjusting your search or filter to find what you're looking for.",
|
|
38560
|
+
noResultsAction,
|
|
38561
|
+
noResultsIllustration,
|
|
38562
|
+
hideNoResultsIllustration,
|
|
38554
38563
|
pageLabel,
|
|
38555
38564
|
previousLabel = "Previous",
|
|
38556
38565
|
nextLabel = "Next",
|
|
@@ -38690,6 +38699,9 @@ function DataTable({
|
|
|
38690
38699
|
pageSize,
|
|
38691
38700
|
noResultsHeading,
|
|
38692
38701
|
noResultsDescription,
|
|
38702
|
+
noResultsAction,
|
|
38703
|
+
noResultsIllustration,
|
|
38704
|
+
hideNoResultsIllustration,
|
|
38693
38705
|
onRowClick,
|
|
38694
38706
|
showBorder,
|
|
38695
38707
|
tableRowClassName,
|