@umituz/web-dashboard 4.6.4 → 4.6.5
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/web-dashboard",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.5",
|
|
4
4
|
"description": "Installable app skeleton for the fleet — layouts, auth, onboarding, analytics (dependency-free SVG charts), calendar, i18n injection, permissions/session/module registry; ships its own udb-* stylesheet and --u-* tokens",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { renderToString } from 'react-dom/server';
|
|
3
|
+
import { PageHeader } from './PageHeader';
|
|
4
|
+
|
|
5
|
+
describe('PageHeader markup smoke', () => {
|
|
6
|
+
it('renders kicker before title and omits it when undefined', () => {
|
|
7
|
+
const html = renderToString(
|
|
8
|
+
<PageHeader kicker="Customer area" title="Policies" subtitle="Your coverage at a glance" />,
|
|
9
|
+
);
|
|
10
|
+
const kickerAt = html.indexOf('udb-pageheader__kicker');
|
|
11
|
+
const titleAt = html.indexOf('udb-pageheader__title');
|
|
12
|
+
expect(kickerAt).toBeGreaterThan(-1);
|
|
13
|
+
expect(kickerAt).toBeLessThan(titleAt);
|
|
14
|
+
expect(html).toContain('Customer area');
|
|
15
|
+
|
|
16
|
+
const bare = renderToString(<PageHeader title="Policies" />);
|
|
17
|
+
expect(bare).not.toContain('udb-pageheader__kicker');
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('renders actions and breadcrumb nodes in their slots', () => {
|
|
21
|
+
const html = renderToString(
|
|
22
|
+
<PageHeader
|
|
23
|
+
title="Claims"
|
|
24
|
+
breadcrumbs={<a href="/policies">Policies</a>}
|
|
25
|
+
actions={<button type="button">New claim</button>}
|
|
26
|
+
/>,
|
|
27
|
+
);
|
|
28
|
+
expect(html).toContain('udb-pageheader__breadcrumbs');
|
|
29
|
+
expect(html).toContain('udb-pageheader__actions');
|
|
30
|
+
expect(html).toContain('New claim');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -6,6 +6,7 @@ export interface PageHeaderCrumb {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export interface PageHeaderProps {
|
|
9
|
+
kicker?: ReactNode;
|
|
9
10
|
title?: ReactNode;
|
|
10
11
|
subtitle?: ReactNode;
|
|
11
12
|
description?: ReactNode;
|
|
@@ -17,7 +18,7 @@ export interface PageHeaderProps {
|
|
|
17
18
|
const isCrumbList = (value: ReactNode | readonly PageHeaderCrumb[]): value is readonly PageHeaderCrumb[] =>
|
|
18
19
|
Array.isArray(value) && value.every((item) => typeof item === "object" && item !== null && "label" in item);
|
|
19
20
|
|
|
20
|
-
export const PageHeader = ({ title, subtitle, description, breadcrumbs, actions, className }: PageHeaderProps) => {
|
|
21
|
+
export const PageHeader = ({ kicker, title, subtitle, description, breadcrumbs, actions, className }: PageHeaderProps) => {
|
|
21
22
|
const crumbNode =
|
|
22
23
|
breadcrumbs === undefined
|
|
23
24
|
? undefined
|
|
@@ -32,6 +33,7 @@ export const PageHeader = ({ title, subtitle, description, breadcrumbs, actions,
|
|
|
32
33
|
<div className={`udb-pageheader${className ? ` ${className}` : ""}`}>
|
|
33
34
|
{crumbNode !== undefined && <div className="udb-pageheader__breadcrumbs">{crumbNode}</div>}
|
|
34
35
|
<div className="udb-pageheader__main">
|
|
36
|
+
{kicker !== undefined && <p className="udb-pageheader__kicker">{kicker}</p>}
|
|
35
37
|
{title !== undefined && <h1 className="udb-pageheader__title">{title}</h1>}
|
|
36
38
|
{(subtitle ?? description) !== undefined && (
|
|
37
39
|
<p className="udb-pageheader__subtitle">{subtitle ?? description}</p>
|
package/src/styles/dashboard.css
CHANGED
|
@@ -3196,6 +3196,15 @@
|
|
|
3196
3196
|
min-width: 0;
|
|
3197
3197
|
}
|
|
3198
3198
|
|
|
3199
|
+
.udb-pageheader__kicker {
|
|
3200
|
+
margin: 0 0 0.25rem;
|
|
3201
|
+
font-size: 0.6875rem;
|
|
3202
|
+
font-weight: 600;
|
|
3203
|
+
letter-spacing: 0.08em;
|
|
3204
|
+
text-transform: uppercase;
|
|
3205
|
+
color: var(--color-muted-foreground);
|
|
3206
|
+
}
|
|
3207
|
+
|
|
3199
3208
|
.udb-pageheader__title {
|
|
3200
3209
|
margin: 0;
|
|
3201
3210
|
font-size: 1.375rem;
|