@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 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).
@@ -1,4 +1,4 @@
1
- import { ProgressBar } from './chunk-E6IO2DVV.js';
1
+ import { ProgressBar } from './chunk-MOYKF2ZC.js';
2
2
  import { Card, CardContent } from './chunk-JPMN2UMF.js';
3
3
  import { Tooltip2 } from './chunk-34PXJOCS.js';
4
4
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -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,