@tribepad/themis 1.2.0 → 1.3.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 +14 -0
- package/dist/elements/PageTitle/PageTitle.d.ts +33 -0
- package/dist/elements/PageTitle/PageTitle.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitle.styles.d.ts +33 -0
- package/dist/elements/PageTitle/PageTitle.styles.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitle.types.d.ts +181 -0
- package/dist/elements/PageTitle/PageTitle.types.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitleActions.d.ts +13 -0
- package/dist/elements/PageTitle/PageTitleActions.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitleBreadcrumbs.d.ts +13 -0
- package/dist/elements/PageTitle/PageTitleBreadcrumbs.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitleContext.d.ts +7 -0
- package/dist/elements/PageTitle/PageTitleContext.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitleDescription.d.ts +9 -0
- package/dist/elements/PageTitle/PageTitleDescription.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitleHeading.d.ts +12 -0
- package/dist/elements/PageTitle/PageTitleHeading.d.ts.map +1 -0
- package/dist/elements/PageTitle/PageTitleTabs.d.ts +11 -0
- package/dist/elements/PageTitle/PageTitleTabs.d.ts.map +1 -0
- package/dist/elements/PageTitle/index.d.ts +11 -0
- package/dist/elements/PageTitle/index.d.ts.map +1 -0
- package/dist/elements/PageTitle/index.js +3 -0
- package/dist/elements/PageTitle/index.js.map +1 -0
- package/dist/elements/PageTitle/index.mjs +3 -0
- package/dist/elements/PageTitle/index.mjs.map +1 -0
- package/dist/elements/index.d.ts +2 -0
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -1
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/index.mjs +1 -1
- package/dist/elements/index.mjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -1
- package/src/elements/PageTitle/PageTitle.stories.tsx +288 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.3.0] - 2026-04-21
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **PageTitle** — accessible page header for listing and landing pages (WCAG 2.2 target).
|
|
12
|
+
Compound API: `PageTitle.Breadcrumbs`, `PageTitle.Heading`, `PageTitle.Description`, `PageTitle.Actions`, `PageTitle.Tabs`.
|
|
13
|
+
- Two variants — `default` (light card) and `feature` (primary gradient).
|
|
14
|
+
- Semantic `<header>` root (no `role="banner"` — reserved for the site-level landmark).
|
|
15
|
+
- `<h1>` by default via `PageTitle.Heading`; override to `h2`/`h3` via `as` prop when the page's primary heading lives elsewhere. Dev-mode warning if multiple `<h1>`s land on the page.
|
|
16
|
+
- `PageTitle.Breadcrumbs` is items-driven (renders Themis `Breadcrumbs` internally) so the `<nav aria-label="Breadcrumb">` + `aria-current="page"` semantics are always correct.
|
|
17
|
+
- Feature variant applies a full-opacity foreground override to breadcrumb links, separators, and focus ring so they remain visible over the gradient without opacity hacks.
|
|
18
|
+
- Responsive column-to-row layout; 400% zoom reflow supported.
|
|
19
|
+
- RTL: gradient direction flips via `rtl:` modifier.
|
|
20
|
+
- AAA contrast of the feature gradient depends on the tenant's `--primary` token; contrast guardrails belong to the theme validator, not this component.
|
|
21
|
+
|
|
8
22
|
## [1.2.0] - 2026-04-21
|
|
9
23
|
|
|
10
24
|
### Added
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PageTitleProps } from './PageTitle.types';
|
|
2
|
+
/**
|
|
3
|
+
* PageTitle compound component with dot-syntax sub-components.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* <PageTitle variant="feature">
|
|
8
|
+
* <PageTitle.Breadcrumbs
|
|
9
|
+
* items={[
|
|
10
|
+
* { id: 'home', label: 'Dashboard', href: '/' },
|
|
11
|
+
* { id: 'forms', label: 'Forms' },
|
|
12
|
+
* ]}
|
|
13
|
+
* linkComponent={Link}
|
|
14
|
+
* />
|
|
15
|
+
* <PageTitle.Heading>Forms</PageTitle.Heading>
|
|
16
|
+
* <PageTitle.Description>
|
|
17
|
+
* Build and manage reusable forms for applications, interviews, screening,
|
|
18
|
+
* and onboarding.
|
|
19
|
+
* </PageTitle.Description>
|
|
20
|
+
* <PageTitle.Actions>
|
|
21
|
+
* <Button size="md" leadingIcon={<Plus />}>Create Form</Button>
|
|
22
|
+
* </PageTitle.Actions>
|
|
23
|
+
* </PageTitle>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare const PageTitle: import("react").ForwardRefExoticComponent<PageTitleProps & import("react").RefAttributes<HTMLElement>> & {
|
|
27
|
+
Breadcrumbs: import("react").ForwardRefExoticComponent<import("./PageTitle.types").PageTitleBreadcrumbsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
28
|
+
Heading: import("react").ForwardRefExoticComponent<import("./PageTitle.types").PageTitleHeadingProps & import("react").RefAttributes<HTMLHeadingElement>>;
|
|
29
|
+
Description: import("react").ForwardRefExoticComponent<import("./PageTitle.types").PageTitleDescriptionProps & import("react").RefAttributes<HTMLParagraphElement>>;
|
|
30
|
+
Actions: import("react").ForwardRefExoticComponent<import("./PageTitle.types").PageTitleActionsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
31
|
+
Tabs: import("react").ForwardRefExoticComponent<import("./PageTitle.types").PageTitleTabsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=PageTitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitle.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitle.tsx"],"names":[],"mappings":"AA6DA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA+FxD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,SAAS;;;;;;CAMpB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PageTitle CVA variants.
|
|
3
|
+
*
|
|
4
|
+
* Colour strategy
|
|
5
|
+
* - Default: `var(--content-background)` + `var(--content-foreground)`
|
|
6
|
+
* (standard card surface; description uses `var(--menu-muted)`).
|
|
7
|
+
* - Feature: branded gradient `var(--primary)` → darkened; all text uses
|
|
8
|
+
* `var(--primary-foreground)` at full opacity (no `/70` modifiers).
|
|
9
|
+
* Gradient direction flips in RTL so the visual weight stays at the
|
|
10
|
+
* reading end.
|
|
11
|
+
*
|
|
12
|
+
* AAA contrast of the feature variant's gradient depends on the tenant's
|
|
13
|
+
* `--primary` value. Tenant-specific contrast guardrails live in the
|
|
14
|
+
* theme validator, not here — this component renders whatever the tenant
|
|
15
|
+
* theme supplies.
|
|
16
|
+
*/
|
|
17
|
+
export declare const pageTitleRootVariants: (props?: ({
|
|
18
|
+
variant?: "default" | "feature" | null | undefined;
|
|
19
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
20
|
+
export declare const pageTitleRowVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
21
|
+
export declare const pageTitleBodyVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
22
|
+
export declare const pageTitleHeadingVariants: (props?: ({
|
|
23
|
+
variant?: "default" | "feature" | null | undefined;
|
|
24
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
25
|
+
export declare const pageTitleDescriptionVariants: (props?: ({
|
|
26
|
+
variant?: "default" | "feature" | null | undefined;
|
|
27
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
28
|
+
export declare const pageTitleBreadcrumbsVariants: (props?: ({
|
|
29
|
+
variant?: "default" | "feature" | null | undefined;
|
|
30
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
31
|
+
export declare const pageTitleActionsVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
32
|
+
export declare const pageTitleTabsVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
33
|
+
//# sourceMappingURL=PageTitle.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitle.styles.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitle.styles.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAMH,eAAO,MAAM,qBAAqB;;8EAgBjC,CAAC;AAMF,eAAO,MAAM,oBAAoB,oFAEhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,oFAEjC,CAAC;AAMF,eAAO,MAAM,wBAAwB;;8EAapC,CAAC;AAMF,eAAO,MAAM,4BAA4B;;8EAaxC,CAAC;AAMF,eAAO,MAAM,4BAA4B;;8EAmBvC,CAAC;AAMH,eAAO,MAAM,wBAAwB,oFAEpC,CAAC;AAMF,eAAO,MAAM,qBAAqB,oFAEjC,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ElementType, ReactNode } from 'react';
|
|
3
|
+
import { type BreadcrumbItemData } from '../Breadcrumbs/Breadcrumbs.types';
|
|
4
|
+
/**
|
|
5
|
+
* PageTitle variants.
|
|
6
|
+
*
|
|
7
|
+
* - `default` — light card background with dark text. Inner pages, editor contexts.
|
|
8
|
+
* - `feature` — branded gradient background with light text. Top-level landings.
|
|
9
|
+
*
|
|
10
|
+
* Extension policy: add new variants by (1) extending this enum, (2) adding the
|
|
11
|
+
* CVA variant in `PageTitle.styles`, (3) wiring context-aware sub-component
|
|
12
|
+
* classes. Do NOT add visual props (gradient, border, shadow) at the root level
|
|
13
|
+
* — extend through a named variant.
|
|
14
|
+
*/
|
|
15
|
+
export declare const PageTitleVariantSchema: z.ZodEnum<{
|
|
16
|
+
default: "default";
|
|
17
|
+
feature: "feature";
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Heading tag override for `PageTitle.Heading`.
|
|
21
|
+
*
|
|
22
|
+
* Default is `h1`. Callers should override to `h2` when `PageTitle` is not the
|
|
23
|
+
* page's primary heading (e.g. inside an editor that owns its own `<h1>`).
|
|
24
|
+
*/
|
|
25
|
+
export declare const PageTitleHeadingLevelSchema: z.ZodEnum<{
|
|
26
|
+
h1: "h1";
|
|
27
|
+
h2: "h2";
|
|
28
|
+
h3: "h3";
|
|
29
|
+
}>;
|
|
30
|
+
export declare const PageTitlePropsSchema: z.ZodObject<{
|
|
31
|
+
className: z.ZodOptional<z.ZodString>;
|
|
32
|
+
id: z.ZodOptional<z.ZodString>;
|
|
33
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
34
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
35
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
36
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
37
|
+
off: "off";
|
|
38
|
+
polite: "polite";
|
|
39
|
+
assertive: "assertive";
|
|
40
|
+
}>>;
|
|
41
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
42
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
43
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
44
|
+
variant: z.ZodOptional<z.ZodEnum<{
|
|
45
|
+
default: "default";
|
|
46
|
+
feature: "feature";
|
|
47
|
+
}>>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export interface PageTitleProps {
|
|
50
|
+
children: ReactNode;
|
|
51
|
+
/** Visual treatment. @default "default" */
|
|
52
|
+
variant?: 'default' | 'feature';
|
|
53
|
+
className?: string;
|
|
54
|
+
id?: string;
|
|
55
|
+
'aria-label'?: string;
|
|
56
|
+
'aria-labelledby'?: string;
|
|
57
|
+
'data-testid'?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare const PageTitleHeadingPropsSchema: z.ZodObject<{
|
|
60
|
+
className: z.ZodOptional<z.ZodString>;
|
|
61
|
+
id: z.ZodOptional<z.ZodString>;
|
|
62
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
63
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
64
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
65
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
66
|
+
off: "off";
|
|
67
|
+
polite: "polite";
|
|
68
|
+
assertive: "assertive";
|
|
69
|
+
}>>;
|
|
70
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
71
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
72
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
73
|
+
as: z.ZodOptional<z.ZodEnum<{
|
|
74
|
+
h1: "h1";
|
|
75
|
+
h2: "h2";
|
|
76
|
+
h3: "h3";
|
|
77
|
+
}>>;
|
|
78
|
+
}, z.core.$strip>;
|
|
79
|
+
export interface PageTitleHeadingProps {
|
|
80
|
+
children: ReactNode;
|
|
81
|
+
/** Heading level. @default "h1" */
|
|
82
|
+
as?: 'h1' | 'h2' | 'h3';
|
|
83
|
+
className?: string;
|
|
84
|
+
id?: string;
|
|
85
|
+
'data-testid'?: string;
|
|
86
|
+
}
|
|
87
|
+
export declare const PageTitleDescriptionPropsSchema: z.ZodObject<{
|
|
88
|
+
className: z.ZodOptional<z.ZodString>;
|
|
89
|
+
id: z.ZodOptional<z.ZodString>;
|
|
90
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
91
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
92
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
93
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
94
|
+
off: "off";
|
|
95
|
+
polite: "polite";
|
|
96
|
+
assertive: "assertive";
|
|
97
|
+
}>>;
|
|
98
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
99
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
100
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
101
|
+
}, z.core.$strip>;
|
|
102
|
+
export interface PageTitleDescriptionProps {
|
|
103
|
+
children: ReactNode;
|
|
104
|
+
className?: string;
|
|
105
|
+
id?: string;
|
|
106
|
+
'data-testid'?: string;
|
|
107
|
+
}
|
|
108
|
+
export declare const PageTitleBreadcrumbsPropsSchema: z.ZodObject<{
|
|
109
|
+
className: z.ZodOptional<z.ZodString>;
|
|
110
|
+
children: z.ZodOptional<z.ZodAny>;
|
|
111
|
+
id: z.ZodOptional<z.ZodString>;
|
|
112
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
113
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
114
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
115
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
116
|
+
off: "off";
|
|
117
|
+
polite: "polite";
|
|
118
|
+
assertive: "assertive";
|
|
119
|
+
}>>;
|
|
120
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
121
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
122
|
+
items: z.ZodArray<z.ZodObject<{
|
|
123
|
+
id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
124
|
+
label: z.ZodString;
|
|
125
|
+
href: z.ZodOptional<z.ZodString>;
|
|
126
|
+
icon: z.ZodOptional<z.ZodCustom<ReactNode, ReactNode>>;
|
|
127
|
+
isDisabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
128
|
+
}, z.core.$strip>>;
|
|
129
|
+
linkComponent: z.ZodOptional<z.ZodCustom<ElementType, ElementType>>;
|
|
130
|
+
}, z.core.$strip>;
|
|
131
|
+
export interface PageTitleBreadcrumbsProps {
|
|
132
|
+
items: BreadcrumbItemData[];
|
|
133
|
+
/** Polymorphic link component (e.g. next/link). @default "a" */
|
|
134
|
+
linkComponent?: ElementType;
|
|
135
|
+
className?: string;
|
|
136
|
+
'data-testid'?: string;
|
|
137
|
+
'aria-label'?: string;
|
|
138
|
+
}
|
|
139
|
+
export declare const PageTitleActionsPropsSchema: z.ZodObject<{
|
|
140
|
+
className: z.ZodOptional<z.ZodString>;
|
|
141
|
+
id: z.ZodOptional<z.ZodString>;
|
|
142
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
143
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
144
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
145
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
146
|
+
off: "off";
|
|
147
|
+
polite: "polite";
|
|
148
|
+
assertive: "assertive";
|
|
149
|
+
}>>;
|
|
150
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
151
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
152
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
153
|
+
}, z.core.$strip>;
|
|
154
|
+
export interface PageTitleActionsProps {
|
|
155
|
+
children: ReactNode;
|
|
156
|
+
className?: string;
|
|
157
|
+
'data-testid'?: string;
|
|
158
|
+
}
|
|
159
|
+
export declare const PageTitleTabsPropsSchema: z.ZodObject<{
|
|
160
|
+
className: z.ZodOptional<z.ZodString>;
|
|
161
|
+
id: z.ZodOptional<z.ZodString>;
|
|
162
|
+
'aria-label': z.ZodOptional<z.ZodString>;
|
|
163
|
+
'aria-labelledby': z.ZodOptional<z.ZodString>;
|
|
164
|
+
'aria-describedby': z.ZodOptional<z.ZodString>;
|
|
165
|
+
'aria-live': z.ZodOptional<z.ZodEnum<{
|
|
166
|
+
off: "off";
|
|
167
|
+
polite: "polite";
|
|
168
|
+
assertive: "assertive";
|
|
169
|
+
}>>;
|
|
170
|
+
'aria-hidden': z.ZodOptional<z.ZodBoolean>;
|
|
171
|
+
'data-testid': z.ZodOptional<z.ZodString>;
|
|
172
|
+
children: z.ZodCustom<ReactNode, ReactNode>;
|
|
173
|
+
}, z.core.$strip>;
|
|
174
|
+
export interface PageTitleTabsProps {
|
|
175
|
+
children: ReactNode;
|
|
176
|
+
className?: string;
|
|
177
|
+
'data-testid'?: string;
|
|
178
|
+
}
|
|
179
|
+
export type PageTitleVariant = z.infer<typeof PageTitleVariantSchema>;
|
|
180
|
+
export type PageTitleHeadingLevel = z.infer<typeof PageTitleHeadingLevelSchema>;
|
|
181
|
+
//# sourceMappingURL=PageTitle.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitle.types.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitle.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAErG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB;;;EAAiC,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;EAA6B,CAAC;AAMtE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;iBAG/B,CAAC;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;iBAGtC,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;iBAE1C,CAAC;AAEH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;iBAG1C,CAAC;AAEH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,gEAAgE;IAChE,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;iBAEtC,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAEnC,CAAC;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PageTitleActionsProps } from './PageTitle.types';
|
|
2
|
+
/**
|
|
3
|
+
* PageTitle.Actions
|
|
4
|
+
*
|
|
5
|
+
* Container for page-level primary actions (typically Themis `Button`s).
|
|
6
|
+
* Actions wrap on narrow viewports so 400%-zoom reflow stays intact.
|
|
7
|
+
*
|
|
8
|
+
* WCAG 2.2 AAA 2.5.8 Target Size — Button children in this slot must be
|
|
9
|
+
* `size="md"` or larger (44×44 minimum). The compound does not enforce this
|
|
10
|
+
* but documents the expectation.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PageTitleActions: import("react").ForwardRefExoticComponent<PageTitleActionsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
//# sourceMappingURL=PageTitleActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitleActions.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitleActions.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,kHAiB5B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PageTitleBreadcrumbsProps } from './PageTitle.types';
|
|
2
|
+
/**
|
|
3
|
+
* PageTitle.Breadcrumbs
|
|
4
|
+
*
|
|
5
|
+
* Items-driven breadcrumb trail for the page header. Renders a Themis
|
|
6
|
+
* `<Breadcrumbs>` internally so the surrounding `<nav aria-label="Breadcrumb">`
|
|
7
|
+
* and `aria-current="page"` semantics are always correct.
|
|
8
|
+
*
|
|
9
|
+
* On the `feature` variant, applies a full-opacity colour override so link and
|
|
10
|
+
* separator text clear the gradient without relying on reduced-opacity hacks.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PageTitleBreadcrumbs: import("react").ForwardRefExoticComponent<PageTitleBreadcrumbsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
//# sourceMappingURL=PageTitleBreadcrumbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitleBreadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitleBreadcrumbs.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,sHAoBhC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PageTitleVariant } from './PageTitle.types';
|
|
2
|
+
export interface PageTitleContextValue {
|
|
3
|
+
variant: PageTitleVariant;
|
|
4
|
+
}
|
|
5
|
+
export declare const PageTitleContext: import("react").Context<PageTitleContextValue | null>;
|
|
6
|
+
export declare function usePageTitleContext(): PageTitleContextValue;
|
|
7
|
+
//# sourceMappingURL=PageTitleContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitleContext.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitleContext.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,uDAAoD,CAAC;AAElF,wBAAgB,mBAAmB,IAAI,qBAAqB,CAM3D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PageTitleDescriptionProps } from './PageTitle.types';
|
|
2
|
+
/**
|
|
3
|
+
* PageTitle.Description
|
|
4
|
+
*
|
|
5
|
+
* Full-opacity supporting copy below the heading. No `opacity-*` or `/70`
|
|
6
|
+
* modifier — visual hierarchy is weight/size only.
|
|
7
|
+
*/
|
|
8
|
+
export declare const PageTitleDescription: import("react").ForwardRefExoticComponent<PageTitleDescriptionProps & import("react").RefAttributes<HTMLParagraphElement>>;
|
|
9
|
+
//# sourceMappingURL=PageTitleDescription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitleDescription.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitleDescription.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,4HAiBhC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PageTitleHeadingProps } from './PageTitle.types';
|
|
2
|
+
/**
|
|
3
|
+
* PageTitle.Heading
|
|
4
|
+
*
|
|
5
|
+
* Renders an `<h1>` by default. Use `as="h2"` or `as="h3"` when `PageTitle` is
|
|
6
|
+
* not the page's primary heading (e.g. inside an editor that already owns the
|
|
7
|
+
* page-level `<h1>`).
|
|
8
|
+
*
|
|
9
|
+
* Dev-mode check warns if multiple `<h1>`s land on the page.
|
|
10
|
+
*/
|
|
11
|
+
export declare const PageTitleHeading: import("react").ForwardRefExoticComponent<PageTitleHeadingProps & import("react").RefAttributes<HTMLHeadingElement>>;
|
|
12
|
+
//# sourceMappingURL=PageTitleHeading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitleHeading.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitleHeading.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,sHAgC5B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PageTitleTabsProps } from './PageTitle.types';
|
|
2
|
+
/**
|
|
3
|
+
* PageTitle.Tabs
|
|
4
|
+
*
|
|
5
|
+
* Optional tabs region that renders below the title row. Consumers place
|
|
6
|
+
* Themis `<Tabs>` (or any tablist) inside. Renders full-width on all
|
|
7
|
+
* viewports; sits inside the `<header>` landmark so tabs read as part of
|
|
8
|
+
* the page header.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PageTitleTabs: import("react").ForwardRefExoticComponent<PageTitleTabsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
11
|
+
//# sourceMappingURL=PageTitleTabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageTitleTabs.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/PageTitleTabs.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,+GAgBzB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { PageTitle } from './PageTitle';
|
|
2
|
+
export { PageTitleBreadcrumbs } from './PageTitleBreadcrumbs';
|
|
3
|
+
export { PageTitleHeading } from './PageTitleHeading';
|
|
4
|
+
export { PageTitleDescription } from './PageTitleDescription';
|
|
5
|
+
export { PageTitleActions } from './PageTitleActions';
|
|
6
|
+
export { PageTitleTabs } from './PageTitleTabs';
|
|
7
|
+
export { usePageTitleContext, type PageTitleContextValue } from './PageTitleContext';
|
|
8
|
+
export { pageTitleRootVariants, pageTitleRowVariants, pageTitleBodyVariants, pageTitleHeadingVariants, pageTitleDescriptionVariants, pageTitleBreadcrumbsVariants, pageTitleActionsVariants, pageTitleTabsVariants, } from './PageTitle.styles';
|
|
9
|
+
export { PageTitlePropsSchema, PageTitleHeadingPropsSchema, PageTitleDescriptionPropsSchema, PageTitleBreadcrumbsPropsSchema, PageTitleActionsPropsSchema, PageTitleTabsPropsSchema, PageTitleVariantSchema, PageTitleHeadingLevelSchema, } from './PageTitle.types';
|
|
10
|
+
export type { PageTitleProps, PageTitleHeadingProps, PageTitleDescriptionProps, PageTitleBreadcrumbsProps, PageTitleActionsProps, PageTitleTabsProps, PageTitleVariant, PageTitleHeadingLevel, } from './PageTitle.types';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PageTitle/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGrF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,+BAA+B,EAC/B,+BAA+B,EAC/B,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),zod=require('zod'),classVarianceAuthority=require('class-variance-authority'),lucideReact=require('lucide-react'),reactAriaComponents=require('react-aria-components'),jsxRuntime=require('react/jsx-runtime');function l(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var j=react.createContext(null);function v(){let e=react.useContext(j);if(!e)throw new Error("PageTitle compound components must be used within <PageTitle>");return e}var h=zod.z.object({className:zod.z.string().optional(),children:zod.z.any().optional(),id:zod.z.string().optional(),"aria-label":zod.z.string().optional(),"aria-labelledby":zod.z.string().optional(),"aria-describedby":zod.z.string().optional(),"aria-live":zod.z.enum(["off","polite","assertive"]).optional(),"aria-hidden":zod.z.boolean().optional(),"data-testid":zod.z.string().optional()});var Z=zod.z.object({id:zod.z.union([zod.z.string(),zod.z.number()]),label:zod.z.string(),href:zod.z.string().optional(),icon:zod.z.custom().optional(),isDisabled:zod.z.boolean().optional().default(false)}),rt=zod.z.union([zod.z.literal("chevron"),zod.z.literal("slash"),zod.z.custom()]);h.extend({items:zod.z.array(Z),separator:rt.optional().default("chevron"),maxItems:zod.z.number().int().positive().optional().default(4),itemsBeforeCollapse:zod.z.number().int().nonnegative().optional().default(1),itemsAfterCollapse:zod.z.number().int().positive().optional().default(2),linkComponent:zod.z.custom().optional(),isDisabled:zod.z.boolean().optional().default(false)});var J=classVarianceAuthority.cva("z-50 min-w-[8rem] overflow-hidden rounded-md border border-[var(--menu-border)] bg-[var(--menu-background)] text-[var(--menu-foreground)] shadow-md p-1",{variants:{variant:{default:""}},defaultVariants:{variant:"default"}}),k=classVarianceAuthority.cva("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 min-h-[44px] data-[focused]:bg-[var(--menu-accent)] data-[focused]:text-[var(--menu-accent-foreground)] data-[pressed]:bg-[var(--menu-accent)] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:""}},defaultVariants:{variant:"default"}});function Q(e){if(typeof e=="function"||typeof e=="object")return e?.displayName}var Ie=react.forwardRef(({defaultOpen:e=false,isOpen:t,onOpenChange:a,children:r},o)=>{if(process.env.NODE_ENV!=="production"){let n=react.Children.toArray(r),s=n.some(p=>react.isValidElement(p)&&(p.type===H||Q(p.type)==="DropdownTrigger")),u=n.some(p=>react.isValidElement(p)&&(p.type===C||Q(p.type)==="DropdownMenu"));if(!s||!u)throw new Error("Dropdown requires exactly one Dropdown.Trigger and one Dropdown.Menu as children")}return jsxRuntime.jsx(reactAriaComponents.MenuTrigger,{defaultOpen:e,isOpen:t,onOpenChange:a,children:r})});Ie.displayName="Dropdown";var H=react.forwardRef(({children:e,...t},a)=>react.isValidElement(e)?react.cloneElement(e,{...t,slot:"trigger"}):jsxRuntime.jsx(reactAriaComponents.Button,{ref:a,...t,children:e}));H.displayName="DropdownTrigger";var C=react.forwardRef(({align:e="start",side:t="bottom",className:a,children:r,...o},n)=>{let s=`${t} ${e}`;return jsxRuntime.jsx(reactAriaComponents.Popover,{placement:s,className:"data-[entering]:motion-safe:animate-in data-[entering]:motion-safe:fade-in-0 data-[entering]:motion-safe:slide-in-from-top-2 data-[entering]:[animation-duration:250ms] data-[entering]:[animation-timing-function:cubic-bezier(0.16,1,0.3,1)] data-[exiting]:motion-safe:animate-out data-[exiting]:motion-safe:fade-out-0 data-[exiting]:motion-safe:slide-out-to-top-2 data-[exiting]:[animation-duration:150ms]",children:jsxRuntime.jsx(reactAriaComponents.Menu,{className:l(J({variant:"default"}),a),...o,children:r})})});C.displayName="DropdownMenu";var X=react.forwardRef(({children:e,onAction:t,isDisabled:a=false,shortcut:r,icon:o,iconRight:n,className:s,"aria-label":u,...p},m)=>{let f=react.Children.toArray(e),c=x=>react.isValidElement(x)&&(x.type===C||Q(x.type)==="DropdownMenu"),g=f.some(c),P=f.filter(x=>!c(x)),w=f.find(c);return g&&w?jsxRuntime.jsxs(reactAriaComponents.SubmenuTrigger,{children:[jsxRuntime.jsxs(reactAriaComponents.MenuItem,{"aria-label":u,className:l(k({variant:"default"}),s),...p,children:[o&&jsxRuntime.jsx("span",{className:"mr-2",children:o}),jsxRuntime.jsx("span",{className:"flex-1",children:P}),jsxRuntime.jsx(lucideReact.ChevronRight,{className:"ml-auto h-4 w-4","aria-hidden":"true"})]}),w]}):jsxRuntime.jsxs(reactAriaComponents.MenuItem,{onAction:t,isDisabled:a,"aria-label":u,className:l(k({variant:"default"}),s),...p,children:[o&&jsxRuntime.jsx("span",{className:"mr-2",children:o}),jsxRuntime.jsx("span",{className:"flex-1",children:e}),n&&jsxRuntime.jsx("span",{className:"ml-auto",children:n}),r&&jsxRuntime.jsx("kbd",{className:"ml-auto pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border border-[var(--border)] bg-[var(--accent-background)] px-1.5 font-mono text-[10px] font-medium text-[var(--menu-muted)] opacity-100",children:r})]})});X.displayName="DropdownItem";var ee=react.memo(react.forwardRef(({className:e,...t},a)=>jsxRuntime.jsx(reactAriaComponents.Separator,{className:l("-mx-1 my-1 h-px bg-[var(--accent-background)]",e),...t})));ee.displayName="DropdownSeparator";var te=react.memo(react.forwardRef(({children:e,className:t,...a},r)=>jsxRuntime.jsx(reactAriaComponents.Header,{className:l("px-2 py-1.5 text-sm font-semibold text-[var(--menu-muted)]",t),...a,children:e})));te.displayName="DropdownLabel";var S=Object.assign(Ie,{Trigger:H,Menu:C,Item:X,Separator:ee,Label:te});var ae=classVarianceAuthority.cva("inline-flex justify-center min-h-[44px] min-w-[44px] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50",{variants:{fullWidth:{true:"w-full",false:""},inVerticalGroup:{true:"items-stretch",false:"items-center"}},defaultVariants:{fullWidth:false,inVerticalGroup:false}}),re=classVarianceAuthority.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background motion-safe:transition-transform motion-safe:duration-200 motion-safe:[transition-timing-function:cubic-bezier(0.34,1.56,0.64,1)] motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 relative cursor-pointer",{variants:{variant:{default:"bg-[var(--primary-action)] text-[var(--primary-action-foreground)] shadow-md hover:bg-[var(--primary-action-hover)] hover:-translate-y-1",destructive:"bg-[var(--destructive-background)] text-[var(--destructive-foreground)] shadow-md hover:bg-[var(--destructive-background-hover,var(--destructive-background))] motion-safe:hover:btn-warn-shake",outline:"border border-[var(--input-border)] bg-[var(--page-background)] hover:bg-[var(--input-border)]",secondary:"bg-[var(--secondary)] text-[var(--secondary-foreground)] shadow-md hover:bg-[var(--secondary-hover,var(--secondary))]",ghost:"hover:bg-[var(--accent)] hover:text-[var(--accent-foreground)]",link:"text-[var(--text-link)] underline underline-offset-4 hover:bg-[var(--accent)] hover:text-[var(--text-link-hover)]"},fullWidth:{true:"w-full",false:""},visualSize:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3 text-xs",lg:"h-11 rounded-md px-8",icon:"h-10 w-10",dot:"h-5 w-5 rounded-full p-0 min-h-0 min-w-0"},paywall:{true:"!bg-[var(--paywall)] !text-[var(--paywall-foreground)] !shadow-md hover:!bg-[var(--paywall)]/90 !cursor-not-allowed !border-transparent",false:""}},defaultVariants:{variant:"default",visualSize:"default",paywall:false}});var oe="data-[pressed]:scale-[0.97]";var ne="data-[hovered]:shadow-md";var L="hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground",_="hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";var Le=react.createContext(null);Le.displayName="ButtonGroupContext";function _e(){return react.useContext(Le)}var Me=react.createContext(null);Me.displayName="ButtonGroupItemContext";function Ge(){return react.useContext(Me)}classVarianceAuthority.cva("inline-flex items-center gap-0",{variants:{orientation:{horizontal:"flex-row",vertical:"flex-col w-full"}},defaultVariants:{orientation:"horizontal"}});var ze=classVarianceAuthority.cva("",{variants:{orientation:{horizontal:"min-w-[44px]",vertical:"flex min-h-[44px]"},position:{first:"",middle:"",last:"",only:""}},compoundVariants:[{orientation:"horizontal",position:"first",className:"rounded-r-none border-r-0"},{orientation:"horizontal",position:"middle",className:"rounded-none border-r-0"},{orientation:"horizontal",position:"last",className:"rounded-l-none"},{orientation:"vertical",position:"first",className:"rounded-b-none border-b-0"},{orientation:"vertical",position:"middle",className:"rounded-none border-b-0"},{orientation:"vertical",position:"last",className:"rounded-t-none"}],defaultVariants:{orientation:"horizontal",position:"only"}});classVarianceAuthority.cva("bg-[var(--border)]",{variants:{orientation:{horizontal:"w-px h-6 mx-1",vertical:"h-px w-full my-1"}},defaultVariants:{orientation:"horizontal"}});var M=react.memo(react.forwardRef(({className:e,buttonVisualClassName:t,variant:a,size:r,visualSize:o,fullWidth:n,loading:s=false,loadingText:u="Loading...",shortcut:p,children:m,isDisabled:f,paywall:c=false,paywallRedirect:g,paywallDescription:P,onPress:w,...x},je)=>{let De=react.useId(),E=_e(),Ne=Ge(),Ze=a??E?.variant??"default",Je=r??E?.size,Ke=f??E?.isDisabled??false,we=E?.orientation==="vertical",Ve=n||we,Qe=Ne?ze({orientation:E?.orientation??"horizontal",position:Ne.position}):"",q=o??Je??"default";return process.env.NODE_ENV!=="production"&&(q==="dot"||q==="icon")&&!x["aria-label"]&&!m&&console.warn('[Button] visualSize="dot" or "icon" requires aria-label when no visible text is provided (WCAG 1.1.1)'),jsxRuntime.jsx(reactAriaComponents.Button,{ref:je,isDisabled:Ke||s||void 0,"aria-disabled":c?true:void 0,"aria-describedby":c?De:void 0,onPress:R=>{if(c){g&&window.open(g,"_blank","noopener,noreferrer");return}w?.(R);},className:l(ae({fullWidth:Ve,inVerticalGroup:we}),e),...x,children:R=>jsxRuntime.jsxs("span",{className:l(re({variant:Ze,visualSize:q,paywall:c,fullWidth:Ve}),Qe,t,oe,ne,L,_),"data-pressed":R.isPressed||void 0,children:[s&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(lucideReact.Loader2,{className:"motion-safe:animate-spin","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:"sr-only","aria-live":"polite",children:u})]}),!s&&m,c&&jsxRuntime.jsx(lucideReact.Zap,{"data-testid":"zap-icon","aria-hidden":"true",className:"ml-1"}),c&&jsxRuntime.jsxs("span",{id:De,className:"sr-only",children:["Premium feature: ",P||"Upgrade required to access this feature"]}),R.isFocusVisible&&p&&jsxRuntime.jsx("kbd",{className:"ml-auto hidden text-xs opacity-60 lg:inline",children:p})]})})}));M.displayName="Button";var Oe=classVarianceAuthority.cva("flex items-center flex-wrap",{variants:{},defaultVariants:{}}),$e=classVarianceAuthority.cva("flex flex-wrap items-center gap-1 break-words text-sm text-[var(--menu-muted)]",{variants:{},defaultVariants:{}}),G=classVarianceAuthority.cva("inline-flex items-center gap-1",{variants:{},defaultVariants:{}}),de=classVarianceAuthority.cva("inline-flex items-center gap-2 min-h-[44px] pr-2 rounded-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",{variants:{state:{default:["text-[var(--menu-muted)]","hover:text-[var(--content-foreground)]","hover:underline underline-offset-4"].join(" "),current:"text-[var(--content-foreground)] font-medium pointer-events-none",disabled:"text-[var(--menu-muted)] opacity-50 cursor-not-allowed pointer-events-none"}},defaultVariants:{state:"default"}}),me=classVarianceAuthority.cva("text-[var(--menu-muted)]",{variants:{type:{chevron:"[&>svg]:h-4 [&>svg]:w-4",slash:"mx-2",custom:""}},defaultVariants:{type:"chevron"}}),Nt=classVarianceAuthority.cva("inline-flex items-center justify-center min-h-[44px] min-w-[44px] rounded-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 hover:bg-[var(--accent)]",{variants:{},defaultVariants:{}});function Ye(e,t){return e===t-1}function wt(e,t,a,r){if(e.length<=t||a+r>=e.length)return null;let o=e.slice(0,a),n=e.slice(-r),s=e.slice(a,e.length-r);return {before:o,collapsed:s,after:n}}function z({separator:e}){return e==="chevron"?jsxRuntime.jsx("li",{role:"presentation","aria-hidden":"true",className:me({type:"chevron"}),children:jsxRuntime.jsx(lucideReact.ChevronRight,{})}):e==="slash"?jsxRuntime.jsx("li",{role:"presentation","aria-hidden":"true",className:me({type:"slash"}),children:"/"}):jsxRuntime.jsx("li",{role:"presentation","aria-hidden":"true",className:me({type:"custom"}),children:e})}function ce({item:e,isCurrent:t,linkComponent:a="a",isGroupDisabled:r}){let o=r||e.isDisabled,n=t?"current":o?"disabled":"default";return t?jsxRuntime.jsxs("span",{className:de({state:"current"}),"aria-current":"page",children:[e.icon&&jsxRuntime.jsx("span",{"aria-hidden":"true",children:e.icon}),e.label]}):e.href?jsxRuntime.jsxs(a,{href:e.href,className:de({state:n}),"aria-disabled":o||void 0,children:[e.icon&&jsxRuntime.jsx("span",{"aria-hidden":"true",children:e.icon}),e.label]}):jsxRuntime.jsxs("span",{className:de({state:o?"disabled":"default"}),"aria-disabled":o||void 0,children:[e.icon&&jsxRuntime.jsx("span",{"aria-hidden":"true",children:e.icon}),e.label]})}function Vt({items:e,linkComponent:t="a",isGroupDisabled:a}){return jsxRuntime.jsxs(S,{defaultOpen:false,children:[jsxRuntime.jsx(S.Trigger,{children:jsxRuntime.jsx(M,{variant:"ghost",size:"icon",className:Nt(),"aria-label":"More breadcrumbs",children:jsxRuntime.jsx(lucideReact.MoreHorizontal,{className:"h-4 w-4"})})}),jsxRuntime.jsx(S.Menu,{align:"start",side:"bottom",children:e.map(r=>jsxRuntime.jsx(S.Item,{isDisabled:a||r.isDisabled,children:jsxRuntime.jsxs(t,{href:r.href,className:"flex flex-1 items-center gap-2",children:[r.icon&&jsxRuntime.jsx("span",{"aria-hidden":"true",children:r.icon}),r.label]})},r.id))})]})}var O=react.forwardRef(({items:e,separator:t="chevron",maxItems:a=4,itemsBeforeCollapse:r=1,itemsAfterCollapse:o=2,linkComponent:n,isDisabled:s,className:u,"aria-label":p="Breadcrumb",...m},f)=>{if(!e||e.length===0)return null;let c=wt(e,a,r,o);return c?jsxRuntime.jsx("nav",{ref:f,"aria-label":p,className:l(Oe(),u),...m,children:jsxRuntime.jsxs("ol",{className:$e(),children:[c.before.map(g=>jsxRuntime.jsxs(react.Fragment,{children:[jsxRuntime.jsx("li",{className:G(),children:jsxRuntime.jsx(ce,{item:g,isCurrent:false,linkComponent:n,isGroupDisabled:s})}),jsxRuntime.jsx(z,{separator:t})]},g.id)),jsxRuntime.jsx("li",{className:G(),children:jsxRuntime.jsx(Vt,{items:c.collapsed,linkComponent:n,isGroupDisabled:s})}),jsxRuntime.jsx(z,{separator:t}),c.after.map((g,P)=>{let w=P===c.after.length-1,x=e.length-c.after.length+P;return jsxRuntime.jsxs(react.Fragment,{children:[jsxRuntime.jsx("li",{className:G(),children:jsxRuntime.jsx(ce,{item:g,isCurrent:Ye(x,e.length),linkComponent:n,isGroupDisabled:s})}),!w&&jsxRuntime.jsx(z,{separator:t})]},g.id)})]})}):jsxRuntime.jsx("nav",{ref:f,"aria-label":p,className:l(Oe(),u),...m,children:jsxRuntime.jsx("ol",{className:$e(),children:e.map((g,P)=>jsxRuntime.jsxs(react.Fragment,{children:[jsxRuntime.jsx("li",{className:G(),children:jsxRuntime.jsx(ce,{item:g,isCurrent:Ye(P,e.length),linkComponent:n,isGroupDisabled:s})}),P<e.length-1&&jsxRuntime.jsx(z,{separator:t})]},g.id))})})});O.displayName="Breadcrumbs";var ue=classVarianceAuthority.cva("flex flex-col gap-5 border-b border-[var(--border)] p-4",{variants:{variant:{default:"bg-[var(--content-background)]",feature:["bg-[linear-gradient(to_right,var(--primary),color-mix(in_oklch,var(--primary),black_60%))]","rtl:bg-[linear-gradient(to_left,var(--primary),color-mix(in_oklch,var(--primary),black_60%))]"].join(" ")}},defaultVariants:{variant:"default"}}),fe=classVarianceAuthority.cva("flex w-full flex-col gap-5 sm:flex-row sm:items-center sm:justify-between"),ge=classVarianceAuthority.cva("flex min-w-0 flex-1 flex-col gap-2"),be=classVarianceAuthority.cva("text-[28px] font-semibold leading-none tracking-tight",{variants:{variant:{default:"text-[var(--content-foreground)]",feature:"text-[var(--primary-foreground)]"}},defaultVariants:{variant:"default"}}),ve=classVarianceAuthority.cva("text-base leading-normal",{variants:{variant:{default:"text-[var(--menu-muted)]",feature:"text-[var(--primary-foreground)]"}},defaultVariants:{variant:"default"}}),xe=classVarianceAuthority.cva("flex w-full",{variants:{variant:{default:"",feature:["[&_a]:text-[var(--primary-foreground)]","[&_a:hover]:text-[var(--primary-foreground)]","[&_[aria-current=page]]:text-[var(--primary-foreground)]","[&_[role=presentation]]:text-[var(--primary-foreground)]","[&_:focus-visible]:ring-[var(--primary-foreground)]"].join(" ")}},defaultVariants:{variant:"default"}}),Te=classVarianceAuthority.cva("flex shrink-0 flex-wrap items-center gap-2"),Pe=classVarianceAuthority.cva("flex w-full");var $=react.forwardRef(function({items:t,linkComponent:a,className:r,"data-testid":o,"aria-label":n},s){let{variant:u}=v();return jsxRuntime.jsx("div",{ref:s,className:l(xe({variant:u}),r),"data-testid":o??"page-title-breadcrumbs",children:jsxRuntime.jsx(O,{items:t,linkComponent:a,"aria-label":n})})});$.displayName="PageTitle.Breadcrumbs";var Y=react.forwardRef(function({as:t="h1",children:a,className:r,id:o,"data-testid":n},s){let{variant:u}=v();react.useEffect(()=>{if(process.env.NODE_ENV!=="production"&&t==="h1"){let f=document.querySelectorAll("h1").length;f>1&&console.warn(`[PageTitle] Multiple <h1> elements detected on the page (${f}). Each page should have exactly one <h1>. Pass \`as="h2"\` when PageTitle is not the primary page heading.`);}},[t]);let p=l(be({variant:u}),r),m={ref:s,id:o,className:p,"data-testid":n??"page-title-heading"};return t==="h2"?jsxRuntime.jsx("h2",{...m,children:a}):t==="h3"?jsxRuntime.jsx("h3",{...m,children:a}):jsxRuntime.jsx("h1",{...m,children:a})});Y.displayName="PageTitle.Heading";var F=react.forwardRef(function({children:t,className:a,id:r,"data-testid":o},n){let{variant:s}=v();return jsxRuntime.jsx("p",{ref:n,id:r,className:l(ve({variant:s}),a),"data-testid":o??"page-title-description",children:t})});F.displayName="PageTitle.Description";var W=react.forwardRef(function({children:t,className:a,"data-testid":r},o){return v(),jsxRuntime.jsx("div",{ref:o,className:l(Te(),a),"data-testid":r??"page-title-actions",children:t})});W.displayName="PageTitle.Actions";var U=react.forwardRef(function({children:t,className:a,"data-testid":r},o){return v(),jsxRuntime.jsx("div",{ref:o,className:l(Pe(),a),"data-testid":r??"page-title-tabs",children:t})});U.displayName="PageTitle.Tabs";var zt={"PageTitle.Breadcrumbs":"breadcrumbs","PageTitle.Heading":"heading","PageTitle.Description":"description","PageTitle.Actions":"actions","PageTitle.Tabs":"tabs"};function Ot(e){let t={breadcrumbs:null,heading:null,description:null,actions:null,tabs:null,other:[]};return react.Children.forEach(e,a=>{if(!react.isValidElement(a)){a!=null&&a!==false&&t.other.push(a);return}let r=a.type,o=typeof r=="string"?void 0:r?.displayName,n=o?zt[o]:void 0;n?t[n]=a:t.other.push(a);}),t}var We=react.forwardRef(function({children:t,variant:a="default",className:r,id:o,"aria-label":n,"aria-labelledby":s,"data-testid":u="page-title"},p){let m=Ot(t),f=react.useMemo(()=>({variant:a}),[a]);return jsxRuntime.jsx(j.Provider,{value:f,children:jsxRuntime.jsxs("header",{ref:p,id:o,className:l(ue({variant:a}),r),"aria-label":n,"aria-labelledby":s,"data-testid":u,"data-page-title-variant":a,children:[m.breadcrumbs,jsxRuntime.jsxs("div",{className:fe(),children:[jsxRuntime.jsxs("div",{className:ge(),children:[m.heading,m.description,m.other]}),m.actions]}),m.tabs]})})});We.displayName="PageTitle";var $t=Object.assign(We,{Breadcrumbs:$,Heading:Y,Description:F,Actions:W,Tabs:U});var Ue=zod.z.enum(["default","feature"]),qe=zod.z.enum(["h1","h2","h3"]),Ft=h.extend({children:zod.z.custom(),variant:Ue.optional()}),Wt=h.extend({children:zod.z.custom(),as:qe.optional()}),Ut=h.extend({children:zod.z.custom()}),qt=h.extend({items:zod.z.array(Z),linkComponent:zod.z.custom().optional()}),jt=h.extend({children:zod.z.custom()}),Zt=h.extend({children:zod.z.custom()});exports.PageTitle=$t;exports.PageTitleActions=W;exports.PageTitleActionsPropsSchema=jt;exports.PageTitleBreadcrumbs=$;exports.PageTitleBreadcrumbsPropsSchema=qt;exports.PageTitleDescription=F;exports.PageTitleDescriptionPropsSchema=Ut;exports.PageTitleHeading=Y;exports.PageTitleHeadingLevelSchema=qe;exports.PageTitleHeadingPropsSchema=Wt;exports.PageTitlePropsSchema=Ft;exports.PageTitleTabs=U;exports.PageTitleTabsPropsSchema=Zt;exports.PageTitleVariantSchema=Ue;exports.pageTitleActionsVariants=Te;exports.pageTitleBodyVariants=ge;exports.pageTitleBreadcrumbsVariants=xe;exports.pageTitleDescriptionVariants=ve;exports.pageTitleHeadingVariants=be;exports.pageTitleRootVariants=ue;exports.pageTitleRowVariants=fe;exports.pageTitleTabsVariants=Pe;exports.usePageTitleContext=v;//# sourceMappingURL=index.js.map
|
|
3
|
+
//# sourceMappingURL=index.js.map
|