@nexub/patterns 1.0.0 → 1.2.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/dist/chunk-74JVLMLE.js +28 -0
- package/dist/chunk-7GYTYFUD.js +60 -0
- package/dist/chunk-AEYLZU3F.js +53 -0
- package/dist/chunk-AOE6GQSH.js +38 -0
- package/dist/chunk-EOA5C3Q4.js +27 -0
- package/dist/chunk-MXPRKZPB.js +43 -0
- package/dist/chunk-OTNHVOPC.js +23 -0
- package/dist/chunk-QMYBXQG4.js +69 -0
- package/dist/chunk-QSJUE24Y.js +112 -0
- package/dist/chunk-WQX5FFVK.js +97 -0
- package/dist/chunk-Y3TNGDKC.js +50 -0
- package/dist/chunk-YX7UO577.js +34 -0
- package/dist/components/ActivityFeed/index.js +7 -0
- package/dist/components/AppLauncher/index.js +7 -0
- package/dist/components/AuthCard/index.js +7 -0
- package/dist/components/FilterBar/index.js +7 -0
- package/dist/components/InfoList/index.js +7 -0
- package/dist/components/NotificationItem/index.js +7 -0
- package/dist/components/PlanCard/index.js +7 -0
- package/dist/components/SettingsLayout/index.js +9 -0
- package/dist/components/SettingsSection/index.js +7 -0
- package/dist/components/StatCard/index.js +7 -0
- package/dist/components/StepIndicator/index.js +7 -0
- package/dist/components/UserCard/index.js +7 -0
- package/dist/index.d.ts +63 -1
- package/dist/index.js +53 -330
- package/package.json +13 -13
- package/dist/index.cjs +0 -361
- package/dist/index.d.cts +0 -119
package/dist/index.d.ts
CHANGED
|
@@ -116,4 +116,66 @@ interface NotificationItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
116
116
|
}
|
|
117
117
|
declare const NotificationItem: React.ForwardRefExoticComponent<NotificationItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
interface AppLauncherApp {
|
|
120
|
+
id: string;
|
|
121
|
+
name: string;
|
|
122
|
+
href: string;
|
|
123
|
+
/** Tile image URL (e.g. `@nexub/brand/app-icon-account.svg`). Falls back to initials. */
|
|
124
|
+
icon?: string;
|
|
125
|
+
/** The app the user is in now. */
|
|
126
|
+
current?: boolean;
|
|
127
|
+
}
|
|
128
|
+
interface AppLauncherProps {
|
|
129
|
+
apps: AppLauncherApp[];
|
|
130
|
+
/** Client-side routing. When set, plain clicks call this instead of following `href`. */
|
|
131
|
+
onNavigate?: (app: AppLauncherApp) => void;
|
|
132
|
+
surface?: 'solid' | 'glass';
|
|
133
|
+
/** Accessible name of the trigger and the menu. */
|
|
134
|
+
label?: string;
|
|
135
|
+
className?: string;
|
|
136
|
+
}
|
|
137
|
+
declare const AppLauncher: React.ForwardRefExoticComponent<AppLauncherProps & React.RefAttributes<HTMLButtonElement>>;
|
|
138
|
+
|
|
139
|
+
interface SettingsLayoutItem {
|
|
140
|
+
id: string;
|
|
141
|
+
label: string;
|
|
142
|
+
icon?: React.ReactNode;
|
|
143
|
+
href: string;
|
|
144
|
+
}
|
|
145
|
+
interface SettingsLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onSelect'> {
|
|
146
|
+
/** Sections in the sidebar (and the phone menu). Each one is a page. */
|
|
147
|
+
items: SettingsLayoutItem[];
|
|
148
|
+
activeId?: string;
|
|
149
|
+
/** Router hook-in. When set, plain clicks call this instead of following `href`. */
|
|
150
|
+
onSelect?: (item: SettingsLayoutItem) => void;
|
|
151
|
+
/** Top bar, left: usually `<Logo product="Account" />`. */
|
|
152
|
+
logo?: React.ReactNode;
|
|
153
|
+
/** Top bar, right: theme switch, `<AppLauncher>`, account menu. */
|
|
154
|
+
actions?: React.ReactNode;
|
|
155
|
+
/** Page header. */
|
|
156
|
+
title?: React.ReactNode;
|
|
157
|
+
description?: React.ReactNode;
|
|
158
|
+
/** Accessible name of the section navigation. */
|
|
159
|
+
navLabel?: string;
|
|
160
|
+
}
|
|
161
|
+
interface SettingsLayoutSectionProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
162
|
+
title?: React.ReactNode;
|
|
163
|
+
description?: React.ReactNode;
|
|
164
|
+
}
|
|
165
|
+
interface SettingsRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
166
|
+
label: React.ReactNode;
|
|
167
|
+
/** Optional hint under the label. */
|
|
168
|
+
description?: React.ReactNode;
|
|
169
|
+
/** The current value, e.g. an email address. */
|
|
170
|
+
value?: React.ReactNode;
|
|
171
|
+
/** Usually a Button or Switch. */
|
|
172
|
+
action?: React.ReactNode;
|
|
173
|
+
}
|
|
174
|
+
/** Label | value | action. Stacks on phones. */
|
|
175
|
+
declare const SettingsRow: React.ForwardRefExoticComponent<SettingsRowProps & React.RefAttributes<HTMLDivElement>>;
|
|
176
|
+
declare const SettingsLayout: React.ForwardRefExoticComponent<SettingsLayoutProps & React.RefAttributes<HTMLDivElement>> & {
|
|
177
|
+
Section: React.ForwardRefExoticComponent<SettingsLayoutSectionProps & React.RefAttributes<HTMLElement>>;
|
|
178
|
+
Row: React.ForwardRefExoticComponent<SettingsRowProps & React.RefAttributes<HTMLDivElement>>;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export { ActivityFeed, type ActivityItemProps, AppLauncher, type AppLauncherApp, type AppLauncherProps, AuthCard, type AuthCardProps, FilterBar, type FilterBarProps, InfoList, type InfoListItemProps, type InfoListRootProps, NotificationItem, type NotificationItemProps, PlanCard, type PlanCardProps, SettingsLayout, type SettingsLayoutItem, type SettingsLayoutProps, type SettingsLayoutSectionProps, SettingsRow, type SettingsRowProps, SettingsSection, type SettingsSectionProps, StatCard, type StatCardProps, StepIndicator, type StepIndicatorProps, type StepIndicatorStep, UserCard, type UserCardProps };
|
package/dist/index.js
CHANGED
|
@@ -1,330 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
icon,
|
|
55
|
-
description,
|
|
56
|
-
className,
|
|
57
|
-
...props
|
|
58
|
-
}, ref) => {
|
|
59
|
-
const deltaColor = deltaType === "increase" ? "var(--color-success-500)" : deltaType === "decrease" ? "var(--color-error-500)" : "var(--color-text-muted)";
|
|
60
|
-
const DeltaIcon = deltaType === "increase" ? TrendingUp : deltaType === "decrease" ? TrendingDown : Minus;
|
|
61
|
-
return /* @__PURE__ */ jsxs(
|
|
62
|
-
"div",
|
|
63
|
-
{
|
|
64
|
-
ref,
|
|
65
|
-
className: cn(
|
|
66
|
-
"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-default)] p-6 flex flex-col gap-3",
|
|
67
|
-
className
|
|
68
|
-
),
|
|
69
|
-
...props,
|
|
70
|
-
children: [
|
|
71
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
72
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-[var(--color-text-muted)]", children: label }),
|
|
73
|
-
icon && /* @__PURE__ */ jsx("span", { className: "text-[var(--color-text-muted)]", children: icon })
|
|
74
|
-
] }),
|
|
75
|
-
/* @__PURE__ */ jsx("div", { className: "text-3xl font-bold tracking-tight text-[var(--color-text-primary)]", children: value }),
|
|
76
|
-
(delta || description) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
77
|
-
delta && /* @__PURE__ */ jsxs(
|
|
78
|
-
"span",
|
|
79
|
-
{
|
|
80
|
-
className: "inline-flex items-center gap-1 text-xs font-medium",
|
|
81
|
-
style: { color: deltaColor },
|
|
82
|
-
"data-delta-type": deltaType,
|
|
83
|
-
children: [
|
|
84
|
-
/* @__PURE__ */ jsx(DeltaIcon, { size: "xs", "aria-hidden": "true" }),
|
|
85
|
-
delta
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
),
|
|
89
|
-
description && /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--color-text-muted)]", children: description })
|
|
90
|
-
] })
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
StatCard.displayName = "StatCard";
|
|
97
|
-
var UserCard = React.forwardRef(
|
|
98
|
-
({
|
|
99
|
-
name,
|
|
100
|
-
role,
|
|
101
|
-
email,
|
|
102
|
-
avatarSrc,
|
|
103
|
-
avatarFallback,
|
|
104
|
-
actions,
|
|
105
|
-
size = "md",
|
|
106
|
-
className,
|
|
107
|
-
...props
|
|
108
|
-
}, ref) => {
|
|
109
|
-
return /* @__PURE__ */ jsxs(
|
|
110
|
-
"div",
|
|
111
|
-
{
|
|
112
|
-
ref,
|
|
113
|
-
className: cn(
|
|
114
|
-
"flex items-center gap-3 rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-default)] p-4",
|
|
115
|
-
className
|
|
116
|
-
),
|
|
117
|
-
...props,
|
|
118
|
-
children: [
|
|
119
|
-
/* @__PURE__ */ jsx(
|
|
120
|
-
Avatar,
|
|
121
|
-
{
|
|
122
|
-
size,
|
|
123
|
-
src: avatarSrc,
|
|
124
|
-
name,
|
|
125
|
-
fallback: avatarFallback
|
|
126
|
-
}
|
|
127
|
-
),
|
|
128
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 flex flex-col gap-0.5", children: [
|
|
129
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-[var(--color-text-primary)] truncate", children: name }),
|
|
130
|
-
role && /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--color-text-muted)] truncate", children: role }),
|
|
131
|
-
email && /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--color-text-secondary)] truncate", children: email })
|
|
132
|
-
] }),
|
|
133
|
-
actions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 shrink-0", children: actions })
|
|
134
|
-
]
|
|
135
|
-
}
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
);
|
|
139
|
-
UserCard.displayName = "UserCard";
|
|
140
|
-
function AuthCard({
|
|
141
|
-
logo,
|
|
142
|
-
title,
|
|
143
|
-
description,
|
|
144
|
-
children,
|
|
145
|
-
footer,
|
|
146
|
-
className
|
|
147
|
-
}) {
|
|
148
|
-
return /* @__PURE__ */ jsxs(
|
|
149
|
-
"div",
|
|
150
|
-
{
|
|
151
|
-
className: cn(
|
|
152
|
-
"mx-auto w-full max-w-[400px] flex flex-col gap-6",
|
|
153
|
-
className
|
|
154
|
-
),
|
|
155
|
-
children: [
|
|
156
|
-
logo && /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: logo }),
|
|
157
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 text-center", children: [
|
|
158
|
-
/* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold tracking-tight text-[var(--color-text-primary)]", children: title }),
|
|
159
|
-
description && /* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--color-text-muted)]", children: description })
|
|
160
|
-
] }),
|
|
161
|
-
/* @__PURE__ */ jsx("div", { className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-default)] p-6 flex flex-col gap-4", children }),
|
|
162
|
-
footer && /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center gap-2 text-sm text-[var(--color-text-muted)]", children: footer })
|
|
163
|
-
]
|
|
164
|
-
}
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
AuthCard.displayName = "AuthCard";
|
|
168
|
-
var SettingsSection = React.forwardRef(
|
|
169
|
-
({ title, description, actions, children, className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col gap-8", className), ...props, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6 md:flex-row md:gap-8", children: [
|
|
170
|
-
/* @__PURE__ */ jsxs("div", { className: "md:w-1/3 flex flex-col gap-1", children: [
|
|
171
|
-
/* @__PURE__ */ jsx("h2", { className: "text-base font-semibold text-[var(--color-text-primary)]", children: title }),
|
|
172
|
-
description && /* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--color-text-muted)]", children: description })
|
|
173
|
-
] }),
|
|
174
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col gap-4", children: [
|
|
175
|
-
children,
|
|
176
|
-
actions && /* @__PURE__ */ jsx("div", { className: "flex justify-end gap-2", children: actions })
|
|
177
|
-
] })
|
|
178
|
-
] }) })
|
|
179
|
-
);
|
|
180
|
-
SettingsSection.displayName = "SettingsSection";
|
|
181
|
-
var Root2 = React.forwardRef(
|
|
182
|
-
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
183
|
-
"dl",
|
|
184
|
-
{
|
|
185
|
-
ref,
|
|
186
|
-
className: cn("divide-y divide-[var(--color-border-default)]", className),
|
|
187
|
-
...props,
|
|
188
|
-
children
|
|
189
|
-
}
|
|
190
|
-
)
|
|
191
|
-
);
|
|
192
|
-
Root2.displayName = "InfoList.Root";
|
|
193
|
-
var Item2 = ({ label, value, className }) => /* @__PURE__ */ jsxs("div", { className: cn("flex items-center justify-between py-3 gap-4", className), children: [
|
|
194
|
-
/* @__PURE__ */ jsx("dt", { className: "text-sm text-[var(--color-text-muted)] shrink-0", children: label }),
|
|
195
|
-
/* @__PURE__ */ jsx("dd", { className: "text-sm font-medium text-[var(--color-text-primary)] text-right", children: value })
|
|
196
|
-
] });
|
|
197
|
-
Item2.displayName = "InfoList.Item";
|
|
198
|
-
var InfoList = { Root: Root2, Item: Item2 };
|
|
199
|
-
var PlanCard = React.forwardRef(
|
|
200
|
-
({
|
|
201
|
-
name,
|
|
202
|
-
price,
|
|
203
|
-
period,
|
|
204
|
-
description,
|
|
205
|
-
features,
|
|
206
|
-
cta,
|
|
207
|
-
onSelect,
|
|
208
|
-
highlighted = false,
|
|
209
|
-
badge,
|
|
210
|
-
className,
|
|
211
|
-
...props
|
|
212
|
-
}, ref) => /* @__PURE__ */ jsxs(
|
|
213
|
-
"div",
|
|
214
|
-
{
|
|
215
|
-
ref,
|
|
216
|
-
className: cn(
|
|
217
|
-
"relative flex flex-col gap-6 rounded-xl border bg-[var(--color-bg-default)] p-6",
|
|
218
|
-
highlighted ? "border-[var(--color-brand-primary-500)] shadow-lg ring-1 ring-[var(--color-brand-primary-500)]" : "border-[var(--color-border-default)]",
|
|
219
|
-
className
|
|
220
|
-
),
|
|
221
|
-
...props,
|
|
222
|
-
children: [
|
|
223
|
-
badge && /* @__PURE__ */ jsx("div", { className: "absolute -top-3 left-1/2 -translate-x-1/2", children: /* @__PURE__ */ jsx(Badge, { tone: "info", children: badge }) }),
|
|
224
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
225
|
-
/* @__PURE__ */ jsx("p", { className: "text-base font-semibold text-[var(--color-text-primary)]", children: name }),
|
|
226
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-1", children: [
|
|
227
|
-
/* @__PURE__ */ jsx("span", { className: "text-3xl font-bold text-[var(--color-text-primary)]", children: price }),
|
|
228
|
-
period && /* @__PURE__ */ jsx("span", { className: "text-sm text-[var(--color-text-muted)]", children: period })
|
|
229
|
-
] }),
|
|
230
|
-
description && /* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--color-text-muted)]", children: description })
|
|
231
|
-
] }),
|
|
232
|
-
/* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-2", children: features.map((feature) => /* @__PURE__ */ jsxs(
|
|
233
|
-
"li",
|
|
234
|
-
{
|
|
235
|
-
className: "flex items-center gap-2 text-sm text-[var(--color-text-secondary)]",
|
|
236
|
-
children: [
|
|
237
|
-
/* @__PURE__ */ jsx(Check, { size: "xs", className: "text-[var(--color-success-500)] shrink-0", "aria-hidden": "true" }),
|
|
238
|
-
feature
|
|
239
|
-
]
|
|
240
|
-
},
|
|
241
|
-
feature
|
|
242
|
-
)) }),
|
|
243
|
-
/* @__PURE__ */ jsx(
|
|
244
|
-
Button,
|
|
245
|
-
{
|
|
246
|
-
variant: highlighted ? "primary" : "outline",
|
|
247
|
-
className: "mt-auto w-full",
|
|
248
|
-
onClick: onSelect,
|
|
249
|
-
children: cta
|
|
250
|
-
}
|
|
251
|
-
)
|
|
252
|
-
]
|
|
253
|
-
}
|
|
254
|
-
)
|
|
255
|
-
);
|
|
256
|
-
PlanCard.displayName = "PlanCard";
|
|
257
|
-
var StepIndicator = React.forwardRef(
|
|
258
|
-
({ steps, currentStep, className, ...props }, ref) => /* @__PURE__ */ jsx("ol", { ref, className: cn("flex flex-col gap-0", className), ...props, children: steps.map((step, index) => {
|
|
259
|
-
const status = index < currentStep ? "complete" : index === currentStep ? "current" : "upcoming";
|
|
260
|
-
return /* @__PURE__ */ jsxs("li", { className: "relative flex gap-4 pb-6 last:pb-0", children: [
|
|
261
|
-
index < steps.length - 1 && /* @__PURE__ */ jsx(
|
|
262
|
-
"div",
|
|
263
|
-
{
|
|
264
|
-
className: "absolute left-4 top-8 h-full w-px bg-[var(--color-border-default)]",
|
|
265
|
-
"aria-hidden": "true"
|
|
266
|
-
}
|
|
267
|
-
),
|
|
268
|
-
/* @__PURE__ */ jsx(
|
|
269
|
-
"div",
|
|
270
|
-
{
|
|
271
|
-
className: cn(
|
|
272
|
-
"relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs font-semibold",
|
|
273
|
-
status === "complete" && "bg-[var(--color-brand-primary-500)] text-white",
|
|
274
|
-
status === "current" && "border-2 border-[var(--color-brand-primary-500)] text-[var(--color-brand-primary-500)] bg-[var(--color-bg-default)]",
|
|
275
|
-
status === "upcoming" && "border-2 border-[var(--color-border-default)] text-[var(--color-text-muted)] bg-[var(--color-bg-default)]"
|
|
276
|
-
),
|
|
277
|
-
"aria-current": status === "current" ? "step" : void 0,
|
|
278
|
-
children: status === "complete" ? /* @__PURE__ */ jsx(Check, { size: "xs", "aria-hidden": "true" }) : index + 1
|
|
279
|
-
}
|
|
280
|
-
),
|
|
281
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 pt-0.5", children: [
|
|
282
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[var(--color-text-primary)]", children: step.label }),
|
|
283
|
-
step.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--color-text-muted)]", children: step.description })
|
|
284
|
-
] })
|
|
285
|
-
] }, step.label);
|
|
286
|
-
}) })
|
|
287
|
-
);
|
|
288
|
-
StepIndicator.displayName = "StepIndicator";
|
|
289
|
-
var NotificationItem = React.forwardRef(
|
|
290
|
-
({ title, description, timestamp, read = false, icon, onDismiss, className, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
291
|
-
"div",
|
|
292
|
-
{
|
|
293
|
-
ref,
|
|
294
|
-
className: cn(
|
|
295
|
-
"flex items-start gap-3 p-3 rounded-lg transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
296
|
-
!read && "bg-[var(--color-bg-subtle)]",
|
|
297
|
-
className
|
|
298
|
-
),
|
|
299
|
-
...props,
|
|
300
|
-
children: [
|
|
301
|
-
!read && /* @__PURE__ */ jsx(
|
|
302
|
-
"span",
|
|
303
|
-
{
|
|
304
|
-
className: "mt-1.5 h-2 w-2 shrink-0 rounded-full bg-[var(--color-brand-primary-500)]",
|
|
305
|
-
"aria-label": "Unread"
|
|
306
|
-
}
|
|
307
|
-
),
|
|
308
|
-
icon && /* @__PURE__ */ jsx("div", { className: "shrink-0 mt-0.5", children: icon }),
|
|
309
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
310
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[var(--color-text-primary)] truncate", children: title }),
|
|
311
|
-
description && /* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--color-text-muted)] mt-0.5 line-clamp-2", children: description }),
|
|
312
|
-
timestamp && /* @__PURE__ */ jsx("time", { className: "text-xs text-[var(--color-text-muted)] mt-1 block", children: timestamp })
|
|
313
|
-
] }),
|
|
314
|
-
onDismiss && /* @__PURE__ */ jsx(
|
|
315
|
-
"button",
|
|
316
|
-
{
|
|
317
|
-
type: "button",
|
|
318
|
-
onClick: onDismiss,
|
|
319
|
-
"aria-label": "Dismiss notification",
|
|
320
|
-
className: "shrink-0 text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] p-1 rounded",
|
|
321
|
-
children: "\xD7"
|
|
322
|
-
}
|
|
323
|
-
)
|
|
324
|
-
]
|
|
325
|
-
}
|
|
326
|
-
)
|
|
327
|
-
);
|
|
328
|
-
NotificationItem.displayName = "NotificationItem";
|
|
329
|
-
|
|
330
|
-
export { ActivityFeed, AuthCard, FilterBar, InfoList, NotificationItem, PlanCard, SettingsSection, StatCard, StepIndicator, UserCard };
|
|
1
|
+
'use client';
|
|
2
|
+
import {
|
|
3
|
+
SettingsLayout,
|
|
4
|
+
SettingsRow
|
|
5
|
+
} from "./chunk-QSJUE24Y.js";
|
|
6
|
+
import {
|
|
7
|
+
SettingsSection
|
|
8
|
+
} from "./chunk-OTNHVOPC.js";
|
|
9
|
+
import {
|
|
10
|
+
StatCard
|
|
11
|
+
} from "./chunk-7GYTYFUD.js";
|
|
12
|
+
import {
|
|
13
|
+
StepIndicator
|
|
14
|
+
} from "./chunk-MXPRKZPB.js";
|
|
15
|
+
import {
|
|
16
|
+
UserCard
|
|
17
|
+
} from "./chunk-AEYLZU3F.js";
|
|
18
|
+
import {
|
|
19
|
+
AppLauncher
|
|
20
|
+
} from "./chunk-WQX5FFVK.js";
|
|
21
|
+
import {
|
|
22
|
+
ActivityFeed
|
|
23
|
+
} from "./chunk-YX7UO577.js";
|
|
24
|
+
import {
|
|
25
|
+
AuthCard
|
|
26
|
+
} from "./chunk-AOE6GQSH.js";
|
|
27
|
+
import {
|
|
28
|
+
FilterBar
|
|
29
|
+
} from "./chunk-EOA5C3Q4.js";
|
|
30
|
+
import {
|
|
31
|
+
InfoList
|
|
32
|
+
} from "./chunk-74JVLMLE.js";
|
|
33
|
+
import {
|
|
34
|
+
NotificationItem
|
|
35
|
+
} from "./chunk-Y3TNGDKC.js";
|
|
36
|
+
import {
|
|
37
|
+
PlanCard
|
|
38
|
+
} from "./chunk-QMYBXQG4.js";
|
|
39
|
+
export {
|
|
40
|
+
ActivityFeed,
|
|
41
|
+
AppLauncher,
|
|
42
|
+
AuthCard,
|
|
43
|
+
FilterBar,
|
|
44
|
+
InfoList,
|
|
45
|
+
NotificationItem,
|
|
46
|
+
PlanCard,
|
|
47
|
+
SettingsLayout,
|
|
48
|
+
SettingsRow,
|
|
49
|
+
SettingsSection,
|
|
50
|
+
StatCard,
|
|
51
|
+
StepIndicator,
|
|
52
|
+
UserCard
|
|
53
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexub/patterns",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Composite UI patterns for Nexub Design System — pre-built, production-ready layouts and widgets built on @nexub/react.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,19 +27,18 @@
|
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
29
|
"types": "./dist/index.d.ts",
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./package.json": "./package.json"
|
|
33
33
|
},
|
|
34
|
-
"main": "./dist/index.
|
|
34
|
+
"main": "./dist/index.js",
|
|
35
35
|
"types": "./dist/index.d.ts",
|
|
36
|
-
"module": "./dist/index.js",
|
|
37
36
|
"peerDependencies": {
|
|
38
37
|
"react": ">=18 <20",
|
|
39
38
|
"react-dom": ">=18 <20",
|
|
40
|
-
"@nexub/react": "
|
|
41
|
-
"@nexub/icons": "
|
|
42
|
-
"@nexub/tokens": "
|
|
39
|
+
"@nexub/react": "^1.2.0",
|
|
40
|
+
"@nexub/icons": "^1.2.0",
|
|
41
|
+
"@nexub/tokens": "^1.2.0"
|
|
43
42
|
},
|
|
44
43
|
"peerDependenciesMeta": {
|
|
45
44
|
"@nexub/icons": {
|
|
@@ -59,15 +58,16 @@
|
|
|
59
58
|
"tsup": "^8.3.5",
|
|
60
59
|
"typescript": "^5.6.3",
|
|
61
60
|
"vitest": "^2.1.8",
|
|
62
|
-
"@nexub/icons": "1.
|
|
63
|
-
"@nexub/react": "1.
|
|
64
|
-
"@nexub/tokens": "1.
|
|
61
|
+
"@nexub/icons": "1.2.0",
|
|
62
|
+
"@nexub/react": "1.2.0",
|
|
63
|
+
"@nexub/tokens": "1.2.0"
|
|
65
64
|
},
|
|
66
65
|
"scripts": {
|
|
67
66
|
"build": "tsup",
|
|
68
67
|
"dev": "tsup --watch",
|
|
69
68
|
"clean": "rm -rf dist",
|
|
70
69
|
"typecheck": "tsc --noEmit",
|
|
71
|
-
"test": "vitest run"
|
|
70
|
+
"test": "vitest run",
|
|
71
|
+
"lint": "eslint src"
|
|
72
72
|
}
|
|
73
73
|
}
|