@neuronection/assistant-ui 0.8.1 → 0.10.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 +16 -0
- package/README.md +5 -2
- package/dist/Logo-D8DEBUoL.d.ts +11 -0
- package/dist/about.d.ts +154 -0
- package/dist/about.js +3 -0
- package/dist/about.js.map +1 -0
- package/dist/badge.d.ts +1 -1
- package/dist/badge.js +1 -1
- package/dist/capability-chips.d.ts +19 -0
- package/dist/capability-chips.js +3 -0
- package/dist/capability-chips.js.map +1 -0
- package/dist/card.js +1 -1
- package/dist/chip-list.js +1 -1
- package/dist/chunk-7EG3AUTS.js +3 -0
- package/dist/chunk-7EG3AUTS.js.map +1 -0
- package/dist/chunk-7RTSSBBR.js +628 -0
- package/dist/chunk-7RTSSBBR.js.map +1 -0
- package/dist/chunk-A6RXCBJY.js +3 -0
- package/dist/chunk-A6RXCBJY.js.map +1 -0
- package/dist/chunk-CE7JZP67.js +3 -0
- package/dist/chunk-CE7JZP67.js.map +1 -0
- package/dist/{chunk-SKTLC2XY.js → chunk-F4DP4PIM.js} +2 -2
- package/dist/{chunk-SKTLC2XY.js.map → chunk-F4DP4PIM.js.map} +1 -1
- package/dist/chunk-HGJ5HINX.js +500 -0
- package/dist/chunk-HGJ5HINX.js.map +1 -0
- package/dist/{chunk-UWHUCQC6.js → chunk-LY2B3UJH.js} +10 -4
- package/dist/chunk-LY2B3UJH.js.map +1 -0
- package/dist/chunk-MLQAA2QV.js +68 -0
- package/dist/chunk-MLQAA2QV.js.map +1 -0
- package/dist/chunk-Q2JMEAKN.js +340 -0
- package/dist/chunk-Q2JMEAKN.js.map +1 -0
- package/dist/{chunk-BN3YHYYL.js → chunk-QUPGIPTT.js} +2 -2
- package/dist/{chunk-BN3YHYYL.js.map → chunk-QUPGIPTT.js.map} +1 -1
- package/dist/{chunk-OPTH3VUY.js → chunk-RI6CEWWF.js} +2 -2
- package/dist/chunk-RI6CEWWF.js.map +1 -0
- package/dist/{chunk-HSWSYEFQ.js → chunk-RYE5YCFF.js} +2 -2
- package/dist/{chunk-HSWSYEFQ.js.map → chunk-RYE5YCFF.js.map} +1 -1
- package/dist/chunk-VPLCX2A5.js +3 -0
- package/dist/chunk-VPLCX2A5.js.map +1 -0
- package/dist/chunk-XB7QWPHP.js +127 -0
- package/dist/chunk-XB7QWPHP.js.map +1 -0
- package/dist/connection-test-row.d.ts +4 -0
- package/dist/connection-test-row.js +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +22 -18
- package/dist/index.js.map +1 -1
- package/dist/logo.d.ts +18 -0
- package/dist/logo.js +3 -0
- package/dist/logo.js.map +1 -0
- package/dist/model-picker.d.ts +2 -0
- package/dist/model-picker.js +1 -1
- package/dist/model-registry.d.ts +84 -0
- package/dist/model-registry.js +3 -0
- package/dist/model-registry.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/task-assignment-picker.d.ts +20 -5
- package/dist/task-assignment-picker.js +1 -1
- package/package.json +19 -1
- package/dist/chunk-OPTH3VUY.js.map +0 -1
- package/dist/chunk-TN35RR2R.js +0 -92
- package/dist/chunk-TN35RR2R.js.map +0 -1
- package/dist/chunk-UWHUCQC6.js.map +0 -1
|
@@ -0,0 +1,628 @@
|
|
|
1
|
+
import { NeuronectionMark, NeuronectionWordmark, StudyMark, CareerMark, HealthMark } from './chunk-Q2JMEAKN.js';
|
|
2
|
+
import { Card, CardHeader, CardContent } from './chunk-RYE5YCFF.js';
|
|
3
|
+
import { ChipList } from './chunk-QUPGIPTT.js';
|
|
4
|
+
import { Badge } from './chunk-F4DP4PIM.js';
|
|
5
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
6
|
+
import * as React2 from 'react';
|
|
7
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
8
|
+
import { Link2, ArrowUpRight, Globe, Heart, Check, Copy } from 'lucide-react';
|
|
9
|
+
import { cva } from 'class-variance-authority';
|
|
10
|
+
|
|
11
|
+
var AboutCard = React2.forwardRef(
|
|
12
|
+
function AboutCard2({ icon, title, description, heading = "h2", className, children, ...props }, ref) {
|
|
13
|
+
const Title = heading;
|
|
14
|
+
return /* @__PURE__ */ jsxs(Card, { ref, "data-as": "about-card", className: cn("h-fit", className), ...props, children: [
|
|
15
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "flex-row items-center gap-3", children: [
|
|
16
|
+
icon ? /* @__PURE__ */ jsx(
|
|
17
|
+
"span",
|
|
18
|
+
{
|
|
19
|
+
"aria-hidden": true,
|
|
20
|
+
className: "flex size-10 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-secondary)] text-[var(--as-secondary-fg)] [&_svg]:size-5",
|
|
21
|
+
children: icon
|
|
22
|
+
}
|
|
23
|
+
) : null,
|
|
24
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
25
|
+
/* @__PURE__ */ jsx(
|
|
26
|
+
Title,
|
|
27
|
+
{
|
|
28
|
+
"data-as": "card-title",
|
|
29
|
+
className: "font-semibold leading-none tracking-tight",
|
|
30
|
+
children: title
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
description ? /* @__PURE__ */ jsx("p", { className: "text-sm text-[var(--as-muted-fg)]", children: description }) : null
|
|
34
|
+
] })
|
|
35
|
+
] }),
|
|
36
|
+
children ? /* @__PURE__ */ jsx(CardContent, { children }) : null
|
|
37
|
+
] });
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
var rowClass = "group flex w-full items-center gap-3 rounded-[var(--as-radius)] p-2 text-left transition-colors hover:bg-[var(--as-muted)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]";
|
|
41
|
+
var tileClass = "flex size-10 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-secondary)] text-[var(--as-secondary-fg)] transition-colors group-hover:bg-[color-mix(in_srgb,var(--as-secondary-fg)_14%,transparent)] [&_svg]:size-5";
|
|
42
|
+
var CopyRow = ({
|
|
43
|
+
value,
|
|
44
|
+
icon: Icon = Link2,
|
|
45
|
+
label,
|
|
46
|
+
subtitle,
|
|
47
|
+
copyLabel = "Copy to clipboard",
|
|
48
|
+
copiedLabel = "Copied!"
|
|
49
|
+
}) => {
|
|
50
|
+
const [copied, setCopied] = React2.useState(false);
|
|
51
|
+
React2.useEffect(() => {
|
|
52
|
+
if (!copied) return;
|
|
53
|
+
const timeout = setTimeout(() => setCopied(false), 2e3);
|
|
54
|
+
return () => clearTimeout(timeout);
|
|
55
|
+
}, [copied]);
|
|
56
|
+
const onCopy = () => {
|
|
57
|
+
void navigator.clipboard?.writeText(value).then(() => setCopied(true));
|
|
58
|
+
};
|
|
59
|
+
return /* @__PURE__ */ jsxs(
|
|
60
|
+
"button",
|
|
61
|
+
{
|
|
62
|
+
type: "button",
|
|
63
|
+
onClick: onCopy,
|
|
64
|
+
"data-as": "about-copy-row",
|
|
65
|
+
"aria-label": `${typeof label === "string" ? label : copyLabel} \u2014 ${copyLabel}`,
|
|
66
|
+
className: rowClass,
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: tileClass, children: /* @__PURE__ */ jsx(Icon, { className: "size-5" }) }),
|
|
69
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
70
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-semibold text-[var(--as-fg)] transition-colors group-hover:text-[var(--as-primary)]", children: label }),
|
|
71
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--as-muted-fg)]", children: copied ? copiedLabel : subtitle })
|
|
72
|
+
] }),
|
|
73
|
+
copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-4 shrink-0 text-[var(--as-success)]" }) : /* @__PURE__ */ jsx(
|
|
74
|
+
Copy,
|
|
75
|
+
{
|
|
76
|
+
"aria-hidden": true,
|
|
77
|
+
className: "size-4 shrink-0 text-[var(--as-muted-fg)] opacity-0 transition-opacity group-hover:opacity-100"
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
};
|
|
84
|
+
var AboutLinkList = React2.forwardRef(
|
|
85
|
+
function AboutLinkList2({ links, className, ...props }, ref) {
|
|
86
|
+
let lastGroup;
|
|
87
|
+
return /* @__PURE__ */ jsx(
|
|
88
|
+
"ul",
|
|
89
|
+
{
|
|
90
|
+
ref,
|
|
91
|
+
"data-as": "about-link-list",
|
|
92
|
+
className: cn("flex flex-col gap-0.5", className),
|
|
93
|
+
...props,
|
|
94
|
+
children: links.map((link, index) => {
|
|
95
|
+
const Icon = link.icon ?? Link2;
|
|
96
|
+
const external = link.external !== false;
|
|
97
|
+
const heading = link.group !== void 0 && link.group !== lastGroup ? link.group : null;
|
|
98
|
+
lastGroup = link.group;
|
|
99
|
+
return /* @__PURE__ */ jsxs("li", { children: [
|
|
100
|
+
heading !== null ? /* @__PURE__ */ jsx(
|
|
101
|
+
"p",
|
|
102
|
+
{
|
|
103
|
+
className: cn(
|
|
104
|
+
"mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-[var(--as-muted-fg)]",
|
|
105
|
+
index > 0 && "mt-4"
|
|
106
|
+
),
|
|
107
|
+
children: heading
|
|
108
|
+
}
|
|
109
|
+
) : null,
|
|
110
|
+
link.copyValue && !link.href ? /* @__PURE__ */ jsx(
|
|
111
|
+
CopyRow,
|
|
112
|
+
{
|
|
113
|
+
value: link.copyValue,
|
|
114
|
+
icon: link.icon,
|
|
115
|
+
label: link.label,
|
|
116
|
+
subtitle: link.subtitle,
|
|
117
|
+
copyLabel: link.copyLabel,
|
|
118
|
+
copiedLabel: link.copiedLabel
|
|
119
|
+
}
|
|
120
|
+
) : /* @__PURE__ */ jsxs(
|
|
121
|
+
"a",
|
|
122
|
+
{
|
|
123
|
+
href: link.href,
|
|
124
|
+
...external ? { target: "_blank", rel: "noreferrer" } : {},
|
|
125
|
+
className: rowClass,
|
|
126
|
+
children: [
|
|
127
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: tileClass, children: /* @__PURE__ */ jsx(Icon, { className: "size-5" }) }),
|
|
128
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
129
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-semibold text-[var(--as-fg)] transition-colors group-hover:text-[var(--as-primary)]", children: link.label }),
|
|
130
|
+
link.subtitle ? /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--as-muted-fg)]", children: link.subtitle }) : null
|
|
131
|
+
] }),
|
|
132
|
+
external ? /* @__PURE__ */ jsx(
|
|
133
|
+
ArrowUpRight,
|
|
134
|
+
{
|
|
135
|
+
"aria-hidden": true,
|
|
136
|
+
className: "size-4 shrink-0 text-[var(--as-muted-fg)] opacity-60 transition-opacity group-hover:opacity-100"
|
|
137
|
+
}
|
|
138
|
+
) : null
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
] }, index);
|
|
143
|
+
})
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
var noteStyles = cva(
|
|
149
|
+
"rounded-[var(--as-radius-lg)] border p-5 text-sm leading-relaxed",
|
|
150
|
+
{
|
|
151
|
+
variants: {
|
|
152
|
+
tone: {
|
|
153
|
+
info: "border-[color-mix(in_srgb,var(--as-primary)_25%,transparent)] bg-[color-mix(in_srgb,var(--as-primary)_8%,transparent)] text-[var(--as-fg)]",
|
|
154
|
+
warning: "border-[color-mix(in_srgb,var(--as-warning)_35%,transparent)] bg-[color-mix(in_srgb,var(--as-warning)_12%,transparent)] text-[color-mix(in_srgb,var(--as-warning)_72%,var(--as-fg))]"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
defaultVariants: {
|
|
158
|
+
tone: "info"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
var AboutNote = React2.forwardRef(
|
|
163
|
+
function AboutNote2({ tone, title, className, children, ...props }, ref) {
|
|
164
|
+
return /* @__PURE__ */ jsxs("div", { ref, "data-as": "about-note", "data-as-tone": tone, className: cn(noteStyles({ tone }), className), ...props, children: [
|
|
165
|
+
title ? /* @__PURE__ */ jsx("p", { className: "mb-1.5 font-semibold uppercase tracking-wider", children: title }) : null,
|
|
166
|
+
children
|
|
167
|
+
] });
|
|
168
|
+
}
|
|
169
|
+
);
|
|
170
|
+
var AboutFooterLine = React2.forwardRef(function AboutFooterLine2({ version, copyright, className, children, ...props }, ref) {
|
|
171
|
+
return /* @__PURE__ */ jsxs(
|
|
172
|
+
"p",
|
|
173
|
+
{
|
|
174
|
+
ref,
|
|
175
|
+
"data-as": "about-footer-line",
|
|
176
|
+
className: cn("text-center text-xs text-[var(--as-muted-fg)]", className),
|
|
177
|
+
...props,
|
|
178
|
+
children: [
|
|
179
|
+
version ? /* @__PURE__ */ jsx("span", { children: version }) : null,
|
|
180
|
+
version && (copyright || children) ? /* @__PURE__ */ jsx("br", {}) : null,
|
|
181
|
+
copyright ?? children
|
|
182
|
+
]
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
var GitHubGlyph = ({ className }) => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": true, className, children: /* @__PURE__ */ jsx("path", { d: "M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.55 0-.27-.01-1.17-.02-2.12-3.2.7-3.88-1.36-3.88-1.36-.52-1.33-1.28-1.68-1.28-1.68-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.19 1.76 1.19 1.03 1.75 2.69 1.25 3.35.95.1-.74.4-1.25.72-1.53-2.55-.29-5.24-1.28-5.24-5.68 0-1.26.45-2.28 1.19-3.09-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.18 1.18a11.1 11.1 0 0 1 5.8 0c2.2-1.49 3.17-1.18 3.17-1.18.63 1.59.23 2.76.12 3.05.74.81 1.18 1.83 1.18 3.09 0 4.42-2.69 5.39-5.25 5.67.41.35.77 1.05.77 2.12 0 1.53-.01 2.76-.01 3.14 0 .3.2.67.8.55A11.51 11.51 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z" }) });
|
|
187
|
+
var marks = {
|
|
188
|
+
health: HealthMark,
|
|
189
|
+
career: CareerMark,
|
|
190
|
+
study: StudyMark
|
|
191
|
+
};
|
|
192
|
+
var defaultMembers = {
|
|
193
|
+
health: {
|
|
194
|
+
name: "Health Assistant",
|
|
195
|
+
tagline: "Self-hosted, privacy-first health records with AI insights",
|
|
196
|
+
href: "https://neuronection.com/en/health/",
|
|
197
|
+
github: "https://github.com/health-assistant-io/health-assistant",
|
|
198
|
+
website: "https://health-assistant.io"
|
|
199
|
+
},
|
|
200
|
+
career: {
|
|
201
|
+
name: "Career Assistant",
|
|
202
|
+
tagline: "Open-source career explorer with transparent AI matching",
|
|
203
|
+
href: "https://neuronection.com/en/career/",
|
|
204
|
+
github: "https://github.com/neuronection/career-assistant"
|
|
205
|
+
},
|
|
206
|
+
study: {
|
|
207
|
+
name: "Study Assistant",
|
|
208
|
+
tagline: "Local-first study workbench that runs in your browser",
|
|
209
|
+
href: "https://neuronection.com/en/study/",
|
|
210
|
+
github: "https://github.com/neuronection/study-assistant"
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
var defaultOrder = ["health", "career", "study"];
|
|
214
|
+
var defaultBlurb = "Neuronection is a family of open-source, self-hosted AI assistants \u2014 one connected ecosystem for life\u2019s important choices. Every assistant in the family shares the same principles: deeply structured data instead of text dumps, AI that explains its reasoning, and you in control of your information.";
|
|
215
|
+
var FamilyBadge = React2.forwardRef(
|
|
216
|
+
function FamilyBadge2({
|
|
217
|
+
current,
|
|
218
|
+
members,
|
|
219
|
+
creator,
|
|
220
|
+
creatorLabel = "Created by",
|
|
221
|
+
hubUrl = "https://neuronection.com",
|
|
222
|
+
label = "Part of the Neuronection family",
|
|
223
|
+
blurb = defaultBlurb,
|
|
224
|
+
ctaLabel = "Visit neuronection.com",
|
|
225
|
+
currentLabel = "Current app",
|
|
226
|
+
githubLabel = "GitHub",
|
|
227
|
+
websiteLabel = "Website",
|
|
228
|
+
theme = "light",
|
|
229
|
+
className,
|
|
230
|
+
...props
|
|
231
|
+
}, ref) {
|
|
232
|
+
const list = members ?? defaultOrder.map((app) => ({ app, ...defaultMembers[app] }));
|
|
233
|
+
return /* @__PURE__ */ jsxs(
|
|
234
|
+
"section",
|
|
235
|
+
{
|
|
236
|
+
ref,
|
|
237
|
+
"data-as": "family-badge",
|
|
238
|
+
"aria-label": label,
|
|
239
|
+
className: cn(
|
|
240
|
+
"flex flex-col gap-5 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface)] p-6 shadow-[var(--as-shadow-1)] sm:p-8",
|
|
241
|
+
className
|
|
242
|
+
),
|
|
243
|
+
...props,
|
|
244
|
+
children: [
|
|
245
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-6 gap-y-4", children: [
|
|
246
|
+
/* @__PURE__ */ jsxs(
|
|
247
|
+
"a",
|
|
248
|
+
{
|
|
249
|
+
href: hubUrl,
|
|
250
|
+
target: "_blank",
|
|
251
|
+
rel: "noreferrer",
|
|
252
|
+
"aria-label": label,
|
|
253
|
+
className: "flex items-center gap-3 rounded-[var(--as-radius)] p-1 transition-opacity hover:opacity-85 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]",
|
|
254
|
+
children: [
|
|
255
|
+
/* @__PURE__ */ jsx(NeuronectionMark, { size: 44, theme }),
|
|
256
|
+
/* @__PURE__ */ jsx(NeuronectionWordmark, { size: 24, theme })
|
|
257
|
+
]
|
|
258
|
+
}
|
|
259
|
+
),
|
|
260
|
+
/* @__PURE__ */ jsxs(
|
|
261
|
+
"a",
|
|
262
|
+
{
|
|
263
|
+
href: hubUrl,
|
|
264
|
+
target: "_blank",
|
|
265
|
+
rel: "noreferrer",
|
|
266
|
+
"data-as": "family-cta",
|
|
267
|
+
className: "group inline-flex items-center gap-2.5 rounded-full bg-[var(--as-primary)] py-2 pl-5 pr-2 text-sm font-semibold text-[var(--as-primary-fg)] shadow-[var(--as-shadow-2)] transition-shadow hover:shadow-[var(--as-shadow-3)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]",
|
|
268
|
+
children: [
|
|
269
|
+
ctaLabel,
|
|
270
|
+
/* @__PURE__ */ jsx(
|
|
271
|
+
"span",
|
|
272
|
+
{
|
|
273
|
+
"aria-hidden": true,
|
|
274
|
+
className: "flex size-7 items-center justify-center rounded-full bg-[color-mix(in_srgb,var(--as-primary-fg)_20%,transparent)] transition-colors group-hover:bg-[color-mix(in_srgb,var(--as-primary-fg)_32%,transparent)]",
|
|
275
|
+
children: /* @__PURE__ */ jsx(ArrowUpRight, { className: "size-4" })
|
|
276
|
+
}
|
|
277
|
+
)
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
)
|
|
281
|
+
] }),
|
|
282
|
+
blurb ? /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-base leading-relaxed text-[var(--as-muted-fg)]", children: blurb }) : null,
|
|
283
|
+
/* @__PURE__ */ jsx("ul", { className: "grid grid-cols-1 gap-x-3 gap-y-4 sm:grid-cols-3", children: list.map((member) => {
|
|
284
|
+
const Mark = marks[member.app];
|
|
285
|
+
const isCurrent = member.app === current;
|
|
286
|
+
const card = cn(
|
|
287
|
+
"group flex h-full flex-col rounded-[var(--as-radius)] border p-5 pt-6 text-center transition-[color,box-shadow] hover:shadow-[var(--as-shadow-2)]",
|
|
288
|
+
isCurrent ? "border-[var(--as-primary)] bg-[color-mix(in_srgb,var(--as-primary)_7%,transparent)] ring-2 ring-[var(--as-primary)]" : "border-[var(--as-border)] bg-[var(--as-muted)] hover:border-[var(--as-primary)]"
|
|
289
|
+
);
|
|
290
|
+
const linkExtras = "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]";
|
|
291
|
+
const header = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
292
|
+
/* @__PURE__ */ jsx(Mark, { size: 56, theme }),
|
|
293
|
+
member.href && !isCurrent ? /* @__PURE__ */ jsx("span", { className: "text-base font-bold leading-snug text-[var(--as-primary)] underline decoration-transparent underline-offset-4 transition-colors group-hover:decoration-current", children: member.name }) : /* @__PURE__ */ jsx("span", { className: "text-base font-bold leading-snug text-[var(--as-fg)]", children: member.name }),
|
|
294
|
+
member.tagline ? /* @__PURE__ */ jsx("span", { className: "text-sm leading-relaxed text-[var(--as-muted-fg)]", children: member.tagline }) : null,
|
|
295
|
+
isCurrent ? /* @__PURE__ */ jsx("span", { className: "mt-1 rounded-full bg-[var(--as-primary)] px-2.5 py-1 text-[11px] font-semibold uppercase tracking-wide text-[var(--as-primary-fg)]", children: currentLabel }) : null
|
|
296
|
+
] });
|
|
297
|
+
return /* @__PURE__ */ jsx("li", { "data-current": isCurrent ? "true" : void 0, className: "flex", children: /* @__PURE__ */ jsxs("div", { className: cn(card, "w-full"), children: [
|
|
298
|
+
member.href && !isCurrent ? /* @__PURE__ */ jsx(
|
|
299
|
+
"a",
|
|
300
|
+
{
|
|
301
|
+
href: member.href,
|
|
302
|
+
target: "_blank",
|
|
303
|
+
rel: "noreferrer",
|
|
304
|
+
className: cn("flex flex-1 flex-col items-center gap-2.5", linkExtras),
|
|
305
|
+
children: header
|
|
306
|
+
}
|
|
307
|
+
) : /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col items-center gap-2.5", children: header }),
|
|
308
|
+
member.github || member.website ? /* @__PURE__ */ jsxs("div", { className: "mt-5 flex items-center justify-center gap-2 border-t border-[var(--as-border)] pt-4", children: [
|
|
309
|
+
member.github ? /* @__PURE__ */ jsxs(
|
|
310
|
+
"a",
|
|
311
|
+
{
|
|
312
|
+
href: member.github,
|
|
313
|
+
target: "_blank",
|
|
314
|
+
rel: "noreferrer",
|
|
315
|
+
"aria-label": `${member.name} on GitHub`,
|
|
316
|
+
className: "inline-flex items-center gap-1.5 rounded-full border border-[var(--as-border)] bg-[var(--as-surface)] px-3.5 py-2 text-xs font-semibold text-[var(--as-muted-fg)] transition-colors hover:border-[var(--as-primary)] hover:text-[var(--as-primary)] focus-visible:border-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]",
|
|
317
|
+
children: [
|
|
318
|
+
/* @__PURE__ */ jsx(GitHubGlyph, { className: "size-4" }),
|
|
319
|
+
githubLabel
|
|
320
|
+
]
|
|
321
|
+
}
|
|
322
|
+
) : null,
|
|
323
|
+
member.website ? /* @__PURE__ */ jsxs(
|
|
324
|
+
"a",
|
|
325
|
+
{
|
|
326
|
+
href: member.website,
|
|
327
|
+
target: "_blank",
|
|
328
|
+
rel: "noreferrer",
|
|
329
|
+
"aria-label": `${member.name} website`,
|
|
330
|
+
className: "inline-flex items-center gap-1.5 rounded-full border border-[var(--as-border)] bg-[var(--as-surface)] px-3.5 py-2 text-xs font-semibold text-[var(--as-muted-fg)] transition-colors hover:border-[var(--as-primary)] hover:text-[var(--as-primary)] focus-visible:border-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]",
|
|
331
|
+
children: [
|
|
332
|
+
/* @__PURE__ */ jsx(Globe, { "aria-hidden": true, className: "size-4" }),
|
|
333
|
+
websiteLabel
|
|
334
|
+
]
|
|
335
|
+
}
|
|
336
|
+
) : null
|
|
337
|
+
] }) : null
|
|
338
|
+
] }) }, member.app);
|
|
339
|
+
}) }),
|
|
340
|
+
creator ? /* @__PURE__ */ jsxs("p", { className: "flex flex-wrap items-center justify-center gap-x-1.5 gap-y-1 border-t border-[var(--as-border)] pt-4 text-xs text-[var(--as-muted-fg)]", children: [
|
|
341
|
+
/* @__PURE__ */ jsx("span", { children: creatorLabel }),
|
|
342
|
+
creator.href ? /* @__PURE__ */ jsx(
|
|
343
|
+
"a",
|
|
344
|
+
{
|
|
345
|
+
href: creator.href,
|
|
346
|
+
target: "_blank",
|
|
347
|
+
rel: "noreferrer",
|
|
348
|
+
className: "rounded font-semibold text-[var(--as-fg)] transition-colors hover:text-[var(--as-primary)] hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]",
|
|
349
|
+
children: creator.name
|
|
350
|
+
}
|
|
351
|
+
) : /* @__PURE__ */ jsx("span", { className: "font-semibold text-[var(--as-fg)]", children: creator.name }),
|
|
352
|
+
creator.role ? /* @__PURE__ */ jsxs("span", { children: [
|
|
353
|
+
"\xB7 ",
|
|
354
|
+
creator.role
|
|
355
|
+
] }) : null
|
|
356
|
+
] }) : null
|
|
357
|
+
]
|
|
358
|
+
}
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
);
|
|
362
|
+
var TechChips = React2.forwardRef(
|
|
363
|
+
function TechChips2({ items, className, ...props }, ref) {
|
|
364
|
+
const cleaned = items.filter((item) => Boolean(item));
|
|
365
|
+
if (cleaned.length === 0) return null;
|
|
366
|
+
return /* @__PURE__ */ jsx("div", { ref, "data-as": "tech-chips", className: cn(className), ...props, children: /* @__PURE__ */ jsx(ChipList, { items: cleaned, variant: "neutral" }) });
|
|
367
|
+
}
|
|
368
|
+
);
|
|
369
|
+
var rowBase = "group flex w-full items-center gap-3 rounded-[var(--as-radius)] p-3.5 text-left no-underline transition-[color,box-shadow,border-color] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]";
|
|
370
|
+
var SponsorCard = React2.forwardRef(
|
|
371
|
+
function SponsorCard2({
|
|
372
|
+
channels,
|
|
373
|
+
title = "Support this project",
|
|
374
|
+
description = "This project is free and open source. Contributions directly fund servers, maintenance and new development.",
|
|
375
|
+
footnote = "Every contribution keeps the project independent and free.",
|
|
376
|
+
channelsLabel = "Ways to support",
|
|
377
|
+
icon,
|
|
378
|
+
heading: Heading = "h2",
|
|
379
|
+
className,
|
|
380
|
+
children,
|
|
381
|
+
...props
|
|
382
|
+
}, ref) {
|
|
383
|
+
if (channels.length === 0) return null;
|
|
384
|
+
return /* @__PURE__ */ jsxs(
|
|
385
|
+
"section",
|
|
386
|
+
{
|
|
387
|
+
ref,
|
|
388
|
+
"data-as": "sponsor-card",
|
|
389
|
+
className: cn(
|
|
390
|
+
"relative flex flex-col gap-4 overflow-hidden rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface)] p-6 shadow-[var(--as-shadow-1)]",
|
|
391
|
+
className
|
|
392
|
+
),
|
|
393
|
+
...props,
|
|
394
|
+
children: [
|
|
395
|
+
/* @__PURE__ */ jsx(
|
|
396
|
+
"div",
|
|
397
|
+
{
|
|
398
|
+
"aria-hidden": true,
|
|
399
|
+
className: "pointer-events-none absolute -right-12 -top-12 size-36 rounded-full bg-[var(--as-primary)] opacity-10 blur-2xl"
|
|
400
|
+
}
|
|
401
|
+
),
|
|
402
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex items-start gap-3.5", children: [
|
|
403
|
+
/* @__PURE__ */ jsx(
|
|
404
|
+
"span",
|
|
405
|
+
{
|
|
406
|
+
"aria-hidden": true,
|
|
407
|
+
className: "flex size-10 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[color-mix(in_srgb,var(--as-danger)_12%,transparent)] text-[var(--as-danger)] [&_svg]:size-5",
|
|
408
|
+
children: icon ?? /* @__PURE__ */ jsx(Heart, {})
|
|
409
|
+
}
|
|
410
|
+
),
|
|
411
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1.5 pt-0.5", children: [
|
|
412
|
+
/* @__PURE__ */ jsx(
|
|
413
|
+
Heading,
|
|
414
|
+
{
|
|
415
|
+
"data-as": "sponsor-title",
|
|
416
|
+
className: "text-base font-semibold leading-tight tracking-tight text-[var(--as-fg)]",
|
|
417
|
+
children: title
|
|
418
|
+
}
|
|
419
|
+
),
|
|
420
|
+
description ? /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-[var(--as-muted-fg)]", children: description }) : null
|
|
421
|
+
] })
|
|
422
|
+
] }),
|
|
423
|
+
/* @__PURE__ */ jsx(
|
|
424
|
+
"ul",
|
|
425
|
+
{
|
|
426
|
+
"data-as": "sponsor-channels",
|
|
427
|
+
"aria-label": channelsLabel,
|
|
428
|
+
className: "relative flex list-none flex-col gap-2",
|
|
429
|
+
children: channels.map((channel) => {
|
|
430
|
+
const Icon = channel.icon ?? Heart;
|
|
431
|
+
const external = channel.external !== false;
|
|
432
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
433
|
+
"a",
|
|
434
|
+
{
|
|
435
|
+
href: channel.href,
|
|
436
|
+
...external ? { target: "_blank", rel: "noreferrer" } : {},
|
|
437
|
+
"data-as": "sponsor-channel",
|
|
438
|
+
"data-as-channel": channel.id,
|
|
439
|
+
"data-as-highlight": channel.highlight ? "true" : void 0,
|
|
440
|
+
className: cn(
|
|
441
|
+
rowBase,
|
|
442
|
+
channel.highlight ? "bg-[var(--as-primary)] text-[var(--as-primary-fg)] shadow-[var(--as-shadow-2)] hover:bg-[var(--as-accent-strong)] hover:shadow-[var(--as-shadow-3)]" : "border border-[var(--as-border)] bg-[var(--as-surface-raised)] hover:border-[var(--as-primary)] hover:shadow-[var(--as-shadow-2)]"
|
|
443
|
+
),
|
|
444
|
+
children: [
|
|
445
|
+
/* @__PURE__ */ jsx(
|
|
446
|
+
"span",
|
|
447
|
+
{
|
|
448
|
+
"aria-hidden": true,
|
|
449
|
+
className: cn(
|
|
450
|
+
"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] transition-transform group-hover:scale-105 [&_svg]:size-[18px]",
|
|
451
|
+
channel.highlight ? "bg-[color-mix(in_srgb,var(--as-primary-fg)_18%,transparent)]" : "bg-[var(--as-secondary)] text-[var(--as-secondary-fg)]"
|
|
452
|
+
),
|
|
453
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "size-[18px]" })
|
|
454
|
+
}
|
|
455
|
+
),
|
|
456
|
+
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
457
|
+
/* @__PURE__ */ jsx(
|
|
458
|
+
"span",
|
|
459
|
+
{
|
|
460
|
+
className: cn(
|
|
461
|
+
"block truncate text-sm font-semibold",
|
|
462
|
+
channel.highlight ? "text-[var(--as-primary-fg)]" : "text-[var(--as-fg)]"
|
|
463
|
+
),
|
|
464
|
+
children: channel.name
|
|
465
|
+
}
|
|
466
|
+
),
|
|
467
|
+
channel.description ? /* @__PURE__ */ jsx(
|
|
468
|
+
"span",
|
|
469
|
+
{
|
|
470
|
+
className: cn(
|
|
471
|
+
"block truncate text-xs",
|
|
472
|
+
channel.highlight ? "text-[color-mix(in_srgb,var(--as-primary-fg)_78%,transparent)]" : "text-[var(--as-muted-fg)]"
|
|
473
|
+
),
|
|
474
|
+
children: channel.description
|
|
475
|
+
}
|
|
476
|
+
) : null
|
|
477
|
+
] }),
|
|
478
|
+
/* @__PURE__ */ jsx(
|
|
479
|
+
"span",
|
|
480
|
+
{
|
|
481
|
+
"aria-hidden": true,
|
|
482
|
+
className: cn(
|
|
483
|
+
"flex size-7 shrink-0 items-center justify-center rounded-full transition-all group-hover:scale-110",
|
|
484
|
+
channel.highlight ? "bg-[color-mix(in_srgb,var(--as-primary-fg)_20%,transparent)] group-hover:bg-[color-mix(in_srgb,var(--as-primary-fg)_32%,transparent)]" : "text-[var(--as-muted-fg)] group-hover:text-[var(--as-primary)]"
|
|
485
|
+
),
|
|
486
|
+
children: /* @__PURE__ */ jsx(ArrowUpRight, { className: "size-4" })
|
|
487
|
+
}
|
|
488
|
+
)
|
|
489
|
+
]
|
|
490
|
+
}
|
|
491
|
+
) }, channel.id);
|
|
492
|
+
})
|
|
493
|
+
}
|
|
494
|
+
),
|
|
495
|
+
footnote ? /* @__PURE__ */ jsxs("p", { className: "relative flex items-center gap-2 border-t border-[var(--as-border)] pt-4 text-xs leading-relaxed text-[var(--as-muted-fg)]", children: [
|
|
496
|
+
/* @__PURE__ */ jsx(
|
|
497
|
+
Heart,
|
|
498
|
+
{
|
|
499
|
+
"aria-hidden": true,
|
|
500
|
+
className: "size-3.5 shrink-0 fill-[var(--as-danger)] text-[var(--as-danger)]"
|
|
501
|
+
}
|
|
502
|
+
),
|
|
503
|
+
footnote
|
|
504
|
+
] }) : null,
|
|
505
|
+
children
|
|
506
|
+
]
|
|
507
|
+
}
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
);
|
|
511
|
+
var marks2 = {
|
|
512
|
+
health: HealthMark,
|
|
513
|
+
career: CareerMark,
|
|
514
|
+
study: StudyMark
|
|
515
|
+
};
|
|
516
|
+
var AboutPanel = React2.forwardRef(
|
|
517
|
+
function AboutPanel2({
|
|
518
|
+
appName,
|
|
519
|
+
familyCurrent,
|
|
520
|
+
logo,
|
|
521
|
+
tagline,
|
|
522
|
+
description,
|
|
523
|
+
version,
|
|
524
|
+
license,
|
|
525
|
+
licenseTitle = "License & open source",
|
|
526
|
+
licenseLinkLabel = "Read license",
|
|
527
|
+
links,
|
|
528
|
+
linksTitle = "Links",
|
|
529
|
+
creator,
|
|
530
|
+
creatorTitle = "Created by",
|
|
531
|
+
tech,
|
|
532
|
+
techTitle = "Built with",
|
|
533
|
+
note,
|
|
534
|
+
sponsor,
|
|
535
|
+
familyMembers,
|
|
536
|
+
hubUrl,
|
|
537
|
+
familyLabel,
|
|
538
|
+
familyBlurb,
|
|
539
|
+
familyCtaLabel,
|
|
540
|
+
familyCurrentLabel,
|
|
541
|
+
theme = "light",
|
|
542
|
+
copyright,
|
|
543
|
+
className,
|
|
544
|
+
children,
|
|
545
|
+
...props
|
|
546
|
+
}, ref) {
|
|
547
|
+
const DefaultMark = familyCurrent ? marks2[familyCurrent] : null;
|
|
548
|
+
return /* @__PURE__ */ jsxs(
|
|
549
|
+
"div",
|
|
550
|
+
{
|
|
551
|
+
ref,
|
|
552
|
+
"data-as": "about-panel",
|
|
553
|
+
className: cn("flex w-full flex-col gap-6", className),
|
|
554
|
+
...props,
|
|
555
|
+
children: [
|
|
556
|
+
/* @__PURE__ */ jsxs("section", { className: "flex items-start gap-5", children: [
|
|
557
|
+
logo ?? (DefaultMark ? /* @__PURE__ */ jsx(DefaultMark, { size: 72, theme }) : null),
|
|
558
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 pt-1", children: [
|
|
559
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2.5", children: [
|
|
560
|
+
/* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold tracking-tight text-[var(--as-fg)]", children: appName }),
|
|
561
|
+
version ? /* @__PURE__ */ jsxs(Badge, { variant: "outline", "data-as": "about-version", children: [
|
|
562
|
+
"v",
|
|
563
|
+
version
|
|
564
|
+
] }) : null
|
|
565
|
+
] }),
|
|
566
|
+
tagline ? /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-[var(--as-muted-fg)]", children: tagline }) : null,
|
|
567
|
+
description ? /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-sm leading-relaxed text-[var(--as-muted-fg)]", children: description }) : null
|
|
568
|
+
] })
|
|
569
|
+
] }),
|
|
570
|
+
creator || license || links?.length ? /* @__PURE__ */ jsxs("section", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [
|
|
571
|
+
creator && !familyCurrent ? /* @__PURE__ */ jsxs(AboutCard, { title: creatorTitle, children: [
|
|
572
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold text-[var(--as-fg)]", children: creator.name }),
|
|
573
|
+
creator.role ? /* @__PURE__ */ jsx("p", { className: "mb-3 text-sm text-[var(--as-muted-fg)]", children: creator.role }) : null,
|
|
574
|
+
creator.links?.length ? /* @__PURE__ */ jsx(AboutLinkList, { links: creator.links }) : null
|
|
575
|
+
] }) : null,
|
|
576
|
+
license ? /* @__PURE__ */ jsx(AboutCard, { title: licenseTitle, children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-muted)] px-4 py-3", children: [
|
|
577
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold text-[var(--as-fg)]", children: license.name }),
|
|
578
|
+
license.href ? /* @__PURE__ */ jsx(
|
|
579
|
+
"a",
|
|
580
|
+
{
|
|
581
|
+
href: license.href,
|
|
582
|
+
target: "_blank",
|
|
583
|
+
rel: "noreferrer",
|
|
584
|
+
className: "text-xs font-bold text-[var(--as-primary)] hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]",
|
|
585
|
+
children: licenseLinkLabel
|
|
586
|
+
}
|
|
587
|
+
) : null
|
|
588
|
+
] }) }) : null,
|
|
589
|
+
links?.length ? /* @__PURE__ */ jsx(AboutCard, { title: linksTitle, children: /* @__PURE__ */ jsx(AboutLinkList, { links }) }) : null
|
|
590
|
+
] }) : null,
|
|
591
|
+
sponsor ? /* @__PURE__ */ jsx(
|
|
592
|
+
SponsorCard,
|
|
593
|
+
{
|
|
594
|
+
channels: sponsor.channels,
|
|
595
|
+
title: sponsor.title,
|
|
596
|
+
description: sponsor.description,
|
|
597
|
+
footnote: sponsor.footnote,
|
|
598
|
+
channelsLabel: sponsor.channelsLabel
|
|
599
|
+
}
|
|
600
|
+
) : null,
|
|
601
|
+
tech?.length ? /* @__PURE__ */ jsx(AboutCard, { title: techTitle, children: /* @__PURE__ */ jsx(TechChips, { items: tech }) }) : null,
|
|
602
|
+
note ? /* @__PURE__ */ jsx(AboutNote, { tone: note.tone, title: note.title, children: note.children }) : null,
|
|
603
|
+
familyCurrent ? /* @__PURE__ */ jsx(
|
|
604
|
+
FamilyBadge,
|
|
605
|
+
{
|
|
606
|
+
current: familyCurrent,
|
|
607
|
+
members: familyMembers,
|
|
608
|
+
creator: creator ? { name: creator.name, role: creator.role, href: creator.href } : void 0,
|
|
609
|
+
creatorLabel: creatorTitle,
|
|
610
|
+
hubUrl,
|
|
611
|
+
label: familyLabel,
|
|
612
|
+
blurb: familyBlurb,
|
|
613
|
+
ctaLabel: familyCtaLabel,
|
|
614
|
+
currentLabel: familyCurrentLabel,
|
|
615
|
+
theme
|
|
616
|
+
}
|
|
617
|
+
) : null,
|
|
618
|
+
version || copyright ? /* @__PURE__ */ jsx(AboutFooterLine, { version, copyright }) : null,
|
|
619
|
+
children
|
|
620
|
+
]
|
|
621
|
+
}
|
|
622
|
+
);
|
|
623
|
+
}
|
|
624
|
+
);
|
|
625
|
+
|
|
626
|
+
export { AboutCard, AboutFooterLine, AboutLinkList, AboutNote, AboutPanel, FamilyBadge, SponsorCard, TechChips };
|
|
627
|
+
//# sourceMappingURL=chunk-7RTSSBBR.js.map
|
|
628
|
+
//# sourceMappingURL=chunk-7RTSSBBR.js.map
|