@neuronection/assistant-ui 0.14.0 → 0.16.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 +56 -0
- package/README.md +2 -0
- package/dist/about.d.ts +4 -0
- package/dist/about.js +1 -1
- package/dist/chip-input.d.ts +2 -0
- package/dist/chip-input.js +1 -1
- package/dist/chunk-3IXMZ6KG.js +439 -0
- package/dist/chunk-3IXMZ6KG.js.map +1 -0
- package/dist/chunk-535TM7SK.js +119 -0
- package/dist/chunk-535TM7SK.js.map +1 -0
- package/dist/{chunk-TPLQL62V.js → chunk-HIRR2F4R.js} +42 -5
- package/dist/chunk-HIRR2F4R.js.map +1 -0
- package/dist/{chunk-7RTSSBBR.js → chunk-INMAUGBK.js} +39 -63
- package/dist/chunk-INMAUGBK.js.map +1 -0
- package/dist/{chunk-UIUALJNR.js → chunk-PSFJN7WH.js} +12 -7
- package/dist/chunk-PSFJN7WH.js.map +1 -0
- package/dist/{chunk-JWAX2AOO.js → chunk-XSJ3TWWZ.js} +43 -3
- package/dist/chunk-XSJ3TWWZ.js.map +1 -0
- package/dist/{chunk-WA7Q4TTA.js → chunk-YIGLULRG.js} +3 -3
- package/dist/{chunk-WA7Q4TTA.js.map → chunk-YIGLULRG.js.map} +1 -1
- package/dist/context-menu.js +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +9 -7
- package/dist/index.js.map +1 -1
- package/dist/menu.d.ts +7 -1
- package/dist/menu.js +1 -1
- package/dist/scale-slider.js +1 -1
- package/dist/sidebar-nav.d.ts +66 -0
- package/dist/sidebar-nav.js +3 -0
- package/dist/sidebar-nav.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/user-menu.d.ts +30 -0
- package/dist/user-menu.js +3 -0
- package/dist/user-menu.js.map +1 -0
- package/package.json +9 -1
- package/dist/chunk-7RTSSBBR.js.map +0 -1
- package/dist/chunk-JWAX2AOO.js.map +0 -1
- package/dist/chunk-TPLQL62V.js.map +0 -1
- package/dist/chunk-UIUALJNR.js.map +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Menu, MenuTrigger, MenuContent, MenuSeparator, MenuCheckboxItem, MenuItem } from './chunk-XSJ3TWWZ.js';
|
|
2
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function deriveInitials(name) {
|
|
7
|
+
if (!name) return "";
|
|
8
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
9
|
+
if (parts.length === 0) return "";
|
|
10
|
+
const first = parts[0]?.charAt(0) ?? "";
|
|
11
|
+
const last = parts.length > 1 ? parts[parts.length - 1]?.charAt(0) ?? "" : "";
|
|
12
|
+
return (first + last).toUpperCase();
|
|
13
|
+
}
|
|
14
|
+
function UserGlyph() {
|
|
15
|
+
return /* @__PURE__ */ jsxs(
|
|
16
|
+
"svg",
|
|
17
|
+
{
|
|
18
|
+
viewBox: "0 0 24 24",
|
|
19
|
+
fill: "none",
|
|
20
|
+
stroke: "currentColor",
|
|
21
|
+
strokeWidth: "2",
|
|
22
|
+
strokeLinecap: "round",
|
|
23
|
+
strokeLinejoin: "round",
|
|
24
|
+
className: "size-4",
|
|
25
|
+
"aria-hidden": true,
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "8", r: "4" }),
|
|
28
|
+
/* @__PURE__ */ jsx("path", { d: "M4 21c0-4 3.6-6 8-6s8 2 8 6" })
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
var UserMenu = React.forwardRef(
|
|
34
|
+
function UserMenu2({
|
|
35
|
+
name,
|
|
36
|
+
email,
|
|
37
|
+
avatarUrl,
|
|
38
|
+
initials,
|
|
39
|
+
items,
|
|
40
|
+
onItemSelect,
|
|
41
|
+
align = "end",
|
|
42
|
+
labels,
|
|
43
|
+
className
|
|
44
|
+
}, ref) {
|
|
45
|
+
const disc = initials ?? deriveInitials(name);
|
|
46
|
+
const hasIdentity = name !== void 0 || email !== void 0;
|
|
47
|
+
return /* @__PURE__ */ jsx("div", { ref, "data-as": "user-menu", className: cn("inline-flex", className), children: /* @__PURE__ */ jsxs(Menu, { children: [
|
|
48
|
+
/* @__PURE__ */ jsxs(
|
|
49
|
+
MenuTrigger,
|
|
50
|
+
{
|
|
51
|
+
type: "button",
|
|
52
|
+
"aria-label": labels?.openMenu ?? "Open user menu",
|
|
53
|
+
"aria-haspopup": "menu",
|
|
54
|
+
className: "flex cursor-pointer items-center gap-2.5 rounded-full p-1 pr-3 transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]",
|
|
55
|
+
children: [
|
|
56
|
+
avatarUrl ? /* @__PURE__ */ jsx(
|
|
57
|
+
"img",
|
|
58
|
+
{
|
|
59
|
+
src: avatarUrl,
|
|
60
|
+
alt: "",
|
|
61
|
+
className: "size-8 shrink-0 rounded-full object-cover"
|
|
62
|
+
}
|
|
63
|
+
) : /* @__PURE__ */ jsx(
|
|
64
|
+
"span",
|
|
65
|
+
{
|
|
66
|
+
"aria-hidden": true,
|
|
67
|
+
className: "flex size-8 shrink-0 items-center justify-center rounded-full bg-[var(--as-primary)] text-xs font-bold text-[var(--as-primary-fg)]",
|
|
68
|
+
children: disc || /* @__PURE__ */ jsx(UserGlyph, {})
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
name || email ? /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col text-left leading-tight", children: [
|
|
72
|
+
name ? /* @__PURE__ */ jsx("span", { className: "max-w-40 truncate text-sm font-medium text-[var(--as-fg)]", children: name }) : null,
|
|
73
|
+
email ? /* @__PURE__ */ jsx("span", { className: "max-w-40 truncate text-xs text-[var(--as-muted-fg)]", children: email }) : null
|
|
74
|
+
] }) : null
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ jsxs(MenuContent, { align, sideOffset: 8, className: "min-w-48", children: [
|
|
79
|
+
hasIdentity ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
80
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col px-2 py-1.5", children: [
|
|
81
|
+
name ? /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-bold text-[var(--as-fg)]", children: name }) : null,
|
|
82
|
+
email ? /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-[var(--as-muted-fg)]", children: email }) : null
|
|
83
|
+
] }),
|
|
84
|
+
/* @__PURE__ */ jsx(MenuSeparator, {})
|
|
85
|
+
] }) : null,
|
|
86
|
+
items.map(
|
|
87
|
+
(item) => item.checked !== void 0 ? /* @__PURE__ */ jsx(
|
|
88
|
+
MenuCheckboxItem,
|
|
89
|
+
{
|
|
90
|
+
icon: item.icon,
|
|
91
|
+
danger: item.tone === "danger",
|
|
92
|
+
disabled: item.disabled,
|
|
93
|
+
pending: item.pending,
|
|
94
|
+
checked: item.checked,
|
|
95
|
+
onSelect: () => onItemSelect(item.id),
|
|
96
|
+
children: item.label
|
|
97
|
+
},
|
|
98
|
+
item.id
|
|
99
|
+
) : /* @__PURE__ */ jsx(
|
|
100
|
+
MenuItem,
|
|
101
|
+
{
|
|
102
|
+
icon: item.icon,
|
|
103
|
+
danger: item.tone === "danger",
|
|
104
|
+
disabled: item.disabled,
|
|
105
|
+
pending: item.pending,
|
|
106
|
+
onSelect: () => onItemSelect(item.id),
|
|
107
|
+
children: item.label
|
|
108
|
+
},
|
|
109
|
+
item.id
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
] })
|
|
113
|
+
] }) });
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
export { UserMenu };
|
|
118
|
+
//# sourceMappingURL=chunk-535TM7SK.js.map
|
|
119
|
+
//# sourceMappingURL=chunk-535TM7SK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/user-menu/UserMenu.tsx"],"names":["UserMenu"],"mappings":"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","file":"chunk-535TM7SK.js","sourcesContent":["import * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport {\n Menu,\n MenuCheckboxItem,\n MenuContent,\n MenuItem,\n MenuSeparator,\n MenuTrigger,\n} from '../menu/Menu'\nimport { cn } from '../../lib/utils'\n\nexport interface UserMenuItem {\n id: string\n label: string\n icon?: LucideIcon\n tone?: 'default' | 'danger'\n disabled?: boolean\n pending?: boolean\n /** Renders as a checkable item (aria-checked) — e.g. theme/language toggles. */\n checked?: boolean\n}\n\nexport interface UserMenuProps {\n name?: string\n email?: string\n avatarUrl?: string\n /** Fallback disc text when no avatarUrl; derived from `name` when omitted. */\n initials?: string\n items: UserMenuItem[]\n onItemSelect: (id: string) => void\n align?: 'start' | 'end'\n labels?: { openMenu?: string }\n className?: string\n}\n\nfunction deriveInitials(name?: string): string {\n if (!name) return ''\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n const first = parts[0]?.charAt(0) ?? ''\n const last = parts.length > 1 ? (parts[parts.length - 1]?.charAt(0) ?? '') : ''\n return (first + last).toUpperCase()\n}\n\nfunction UserGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4\"\n aria-hidden\n >\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 21c0-4 3.6-6 8-6s8 2 8 6\" />\n </svg>\n )\n}\n\nexport const UserMenu = React.forwardRef<HTMLDivElement, UserMenuProps>(\n function UserMenu(\n {\n name,\n email,\n avatarUrl,\n initials,\n items,\n onItemSelect,\n align = 'end',\n labels,\n className,\n },\n ref,\n ) {\n const disc = initials ?? deriveInitials(name)\n const hasIdentity = name !== undefined || email !== undefined\n\n return (\n <div ref={ref} data-as=\"user-menu\" className={cn('inline-flex', className)}>\n <Menu>\n <MenuTrigger\n type=\"button\"\n aria-label={labels?.openMenu ?? 'Open user menu'}\n aria-haspopup=\"menu\"\n className=\"flex cursor-pointer items-center gap-2.5 rounded-full p-1 pr-3 transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n {avatarUrl ? (\n <img\n src={avatarUrl}\n alt=\"\"\n className=\"size-8 shrink-0 rounded-full object-cover\"\n />\n ) : (\n <span\n aria-hidden\n className=\"flex size-8 shrink-0 items-center justify-center rounded-full bg-[var(--as-primary)] text-xs font-bold text-[var(--as-primary-fg)]\"\n >\n {disc || <UserGlyph />}\n </span>\n )}\n {name || email ? (\n <span className=\"flex min-w-0 flex-col text-left leading-tight\">\n {name ? (\n <span className=\"max-w-40 truncate text-sm font-medium text-[var(--as-fg)]\">\n {name}\n </span>\n ) : null}\n {email ? (\n <span className=\"max-w-40 truncate text-xs text-[var(--as-muted-fg)]\">\n {email}\n </span>\n ) : null}\n </span>\n ) : null}\n </MenuTrigger>\n <MenuContent align={align} sideOffset={8} className=\"min-w-48\">\n {hasIdentity ? (\n <>\n <div className=\"flex flex-col px-2 py-1.5\">\n {name ? (\n <span className=\"truncate text-sm font-bold text-[var(--as-fg)]\">\n {name}\n </span>\n ) : null}\n {email ? (\n <span className=\"truncate text-xs text-[var(--as-muted-fg)]\">\n {email}\n </span>\n ) : null}\n </div>\n <MenuSeparator />\n </>\n ) : null}\n {items.map((item) =>\n item.checked !== undefined ? (\n <MenuCheckboxItem\n key={item.id}\n icon={item.icon}\n danger={item.tone === 'danger'}\n disabled={item.disabled}\n pending={item.pending}\n checked={item.checked}\n onSelect={() => onItemSelect(item.id)}\n >\n {item.label}\n </MenuCheckboxItem>\n ) : (\n <MenuItem\n key={item.id}\n icon={item.icon}\n danger={item.tone === 'danger'}\n disabled={item.disabled}\n pending={item.pending}\n onSelect={() => onItemSelect(item.id)}\n >\n {item.label}\n </MenuItem>\n ),\n )}\n </MenuContent>\n </Menu>\n </div>\n )\n },\n)\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { X } from 'lucide-react';
|
|
3
|
+
import { X, Plus } from 'lucide-react';
|
|
4
4
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
function escapeRegex(value) {
|
|
@@ -14,12 +14,16 @@ var ChipInput = React.forwardRef(
|
|
|
14
14
|
separators = [","],
|
|
15
15
|
inputLabel = "Add",
|
|
16
16
|
removeLabel = "Remove",
|
|
17
|
+
addLabel,
|
|
18
|
+
hint,
|
|
17
19
|
disabled = false,
|
|
18
20
|
className,
|
|
19
21
|
...props
|
|
20
22
|
}, ref) {
|
|
21
23
|
const [draft, setDraft] = React.useState("");
|
|
22
24
|
const inputRef = React.useRef(null);
|
|
25
|
+
const hintId = React.useId();
|
|
26
|
+
const hasDraft = draft.trim().length > 0;
|
|
23
27
|
const commit = (raw) => {
|
|
24
28
|
const separatorPattern = new RegExp(
|
|
25
29
|
`[${separators.map(escapeRegex).join("")}\\n\\r]`
|
|
@@ -60,6 +64,7 @@ var ChipInput = React.forwardRef(
|
|
|
60
64
|
{
|
|
61
65
|
ref,
|
|
62
66
|
"data-as": "chip-input",
|
|
67
|
+
"data-pending": hasDraft || void 0,
|
|
63
68
|
role: "group",
|
|
64
69
|
onClick: () => {
|
|
65
70
|
if (!disabled) inputRef.current?.focus();
|
|
@@ -110,9 +115,41 @@ var ChipInput = React.forwardRef(
|
|
|
110
115
|
if (draft.trim()) commit(draft);
|
|
111
116
|
},
|
|
112
117
|
placeholder: value.length === 0 ? placeholder : "",
|
|
113
|
-
|
|
118
|
+
"aria-describedby": hint ? hintId : void 0,
|
|
119
|
+
className: cn(
|
|
120
|
+
"min-w-24 flex-1 bg-transparent text-sm text-[var(--as-fg)] outline-none placeholder:text-[var(--as-muted-fg)]",
|
|
121
|
+
hasDraft && "rounded-[calc(var(--as-radius-sm)-2px)] border border-dashed border-[var(--as-primary)] bg-[color-mix(in_srgb,var(--as-primary)_8%,transparent)] px-2 py-0.5"
|
|
122
|
+
)
|
|
114
123
|
}
|
|
115
|
-
)
|
|
124
|
+
),
|
|
125
|
+
hint ? /* @__PURE__ */ jsx(
|
|
126
|
+
"span",
|
|
127
|
+
{
|
|
128
|
+
id: hintId,
|
|
129
|
+
"data-as": "chip-input-hint",
|
|
130
|
+
className: "w-full text-xs text-[var(--as-muted-fg)]",
|
|
131
|
+
children: hint
|
|
132
|
+
}
|
|
133
|
+
) : null,
|
|
134
|
+
addLabel ? /* @__PURE__ */ jsxs(
|
|
135
|
+
"button",
|
|
136
|
+
{
|
|
137
|
+
type: "button",
|
|
138
|
+
disabled: disabled || !draft.trim(),
|
|
139
|
+
"aria-label": addLabel,
|
|
140
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
141
|
+
onClick: (event) => {
|
|
142
|
+
event.stopPropagation();
|
|
143
|
+
commit(draft);
|
|
144
|
+
inputRef.current?.focus();
|
|
145
|
+
},
|
|
146
|
+
className: "inline-flex shrink-0 items-center gap-1 rounded-[calc(var(--as-radius-sm)-2px)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] px-2 py-0.5 text-xs font-medium text-[var(--as-fg)] transition-colors hover:border-[var(--as-primary)] hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50",
|
|
147
|
+
children: [
|
|
148
|
+
/* @__PURE__ */ jsx(Plus, { className: "size-3", "aria-hidden": true }),
|
|
149
|
+
addLabel
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
) : null
|
|
116
153
|
]
|
|
117
154
|
}
|
|
118
155
|
);
|
|
@@ -120,5 +157,5 @@ var ChipInput = React.forwardRef(
|
|
|
120
157
|
);
|
|
121
158
|
|
|
122
159
|
export { ChipInput };
|
|
123
|
-
//# sourceMappingURL=chunk-
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
160
|
+
//# sourceMappingURL=chunk-HIRR2F4R.js.map
|
|
161
|
+
//# sourceMappingURL=chunk-HIRR2F4R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/chip-input/ChipInput.tsx"],"names":["ChipInput"],"mappings":"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","file":"chunk-HIRR2F4R.js","sourcesContent":["import * as React from 'react'\nimport { Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface ChipInputProps\n extends Omit<React.ComponentProps<'div'>, 'onChange'> {\n value: string[]\n onChange: (value: string[]) => void\n placeholder?: string\n separators?: string[]\n inputLabel?: string\n removeLabel?: string\n addLabel?: string\n hint?: string\n disabled?: boolean\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nexport const ChipInput = React.forwardRef<HTMLDivElement, ChipInputProps>(\n function ChipInput(\n {\n value,\n onChange,\n placeholder,\n separators = [','],\n inputLabel = 'Add',\n removeLabel = 'Remove',\n addLabel,\n hint,\n disabled = false,\n className,\n ...props\n },\n ref,\n ) {\n const [draft, setDraft] = React.useState('')\n const inputRef = React.useRef<HTMLInputElement>(null)\n const hintId = React.useId()\n const hasDraft = draft.trim().length > 0\n\n const commit = (raw: string) => {\n const separatorPattern = new RegExp(\n `[${separators.map(escapeRegex).join('')}\\\\n\\\\r]`,\n )\n const existing = new Set(value.map((chip) => chip.toLowerCase()))\n const next = [...value]\n for (const part of raw.split(separatorPattern)) {\n const trimmed = part.trim()\n if (trimmed && !existing.has(trimmed.toLowerCase())) {\n next.push(trimmed)\n existing.add(trimmed.toLowerCase())\n }\n }\n if (next.length !== value.length) {\n onChange(next)\n }\n setDraft('')\n }\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' || separators.includes(event.key)) {\n event.preventDefault()\n commit(draft)\n } else if (event.key === 'Backspace' && draft === '' && value.length > 0) {\n event.preventDefault()\n onChange(value.slice(0, -1))\n }\n }\n\n const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault()\n const text = event.clipboardData.getData('text')\n commit(`${draft}${text}`)\n }\n\n const removeAt = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n return (\n <div\n ref={ref}\n data-as=\"chip-input\"\n data-pending={hasDraft || undefined}\n role=\"group\"\n onClick={() => {\n if (!disabled) inputRef.current?.focus()\n }}\n className={cn(\n 'flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-2.5 py-1.5 text-sm outline-none transition-colors focus-within:border-[var(--as-focus-ring)] focus-within:ring-2 focus-within:ring-[var(--as-focus-ring)]',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n {...props}\n >\n {value.map((chip, index) => (\n <span\n key={`${chip}-${index}`}\n className=\"inline-flex items-center gap-1 rounded-[calc(var(--as-radius-sm)-2px)] bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] py-0.5 pl-2.5 pr-1.5 text-xs font-medium text-[var(--as-primary)]\"\n >\n {chip}\n <button\n type=\"button\"\n disabled={disabled}\n aria-label={`${removeLabel} ${chip}`}\n onClick={(event) => {\n event.stopPropagation()\n removeAt(index)\n }}\n className=\"cursor-pointer rounded-full opacity-70 transition-colors hover:text-[var(--as-danger)] hover:opacity-100 focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none\"\n >\n <X className=\"size-3\" aria-hidden />\n </button>\n </span>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n aria-label={inputLabel}\n disabled={disabled}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onBlur={() => {\n if (draft.trim()) commit(draft)\n }}\n placeholder={value.length === 0 ? placeholder : ''}\n aria-describedby={hint ? hintId : undefined}\n className={cn(\n 'min-w-24 flex-1 bg-transparent text-sm text-[var(--as-fg)] outline-none placeholder:text-[var(--as-muted-fg)]',\n hasDraft &&\n 'rounded-[calc(var(--as-radius-sm)-2px)] border border-dashed border-[var(--as-primary)] bg-[color-mix(in_srgb,var(--as-primary)_8%,transparent)] px-2 py-0.5',\n )}\n />\n {hint ? (\n <span\n id={hintId}\n data-as=\"chip-input-hint\"\n className=\"w-full text-xs text-[var(--as-muted-fg)]\"\n >\n {hint}\n </span>\n ) : null}\n {addLabel ? (\n <button\n type=\"button\"\n disabled={disabled || !draft.trim()}\n aria-label={addLabel}\n onMouseDown={(event) => event.preventDefault()}\n onClick={(event) => {\n event.stopPropagation()\n commit(draft)\n inputRef.current?.focus()\n }}\n className=\"inline-flex shrink-0 items-center gap-1 rounded-[calc(var(--as-radius-sm)-2px)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] px-2 py-0.5 text-xs font-medium text-[var(--as-fg)] transition-colors hover:border-[var(--as-primary)] hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <Plus className=\"size-3\" aria-hidden />\n {addLabel}\n </button>\n ) : null}\n </div>\n )\n },\n)\n"]}
|
|
@@ -290,12 +290,12 @@ var FamilyBadge = React2.forwardRef(
|
|
|
290
290
|
const linkExtras = "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]";
|
|
291
291
|
const header = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
292
292
|
/* @__PURE__ */ jsx(Mark, { size: 56, theme }),
|
|
293
|
-
member.href
|
|
293
|
+
member.href ? /* @__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
294
|
member.tagline ? /* @__PURE__ */ jsx("span", { className: "text-sm leading-relaxed text-[var(--as-muted-fg)]", children: member.tagline }) : null,
|
|
295
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
296
|
] });
|
|
297
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
|
|
298
|
+
member.href ? /* @__PURE__ */ jsx(
|
|
299
299
|
"a",
|
|
300
300
|
{
|
|
301
301
|
href: member.href,
|
|
@@ -366,7 +366,7 @@ var TechChips = React2.forwardRef(
|
|
|
366
366
|
return /* @__PURE__ */ jsx("div", { ref, "data-as": "tech-chips", className: cn(className), ...props, children: /* @__PURE__ */ jsx(ChipList, { items: cleaned, variant: "neutral" }) });
|
|
367
367
|
}
|
|
368
368
|
);
|
|
369
|
-
var rowBase = "group flex w-full items-center gap-
|
|
369
|
+
var rowBase = "group flex w-full items-center gap-2.5 rounded-[var(--as-radius)] px-2.5 py-2 text-left no-underline transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]";
|
|
370
370
|
var SponsorCard = React2.forwardRef(
|
|
371
371
|
function SponsorCard2({
|
|
372
372
|
channels,
|
|
@@ -374,6 +374,7 @@ var SponsorCard = React2.forwardRef(
|
|
|
374
374
|
description = "This project is free and open source. Contributions directly fund servers, maintenance and new development.",
|
|
375
375
|
footnote = "Every contribution keeps the project independent and free.",
|
|
376
376
|
channelsLabel = "Ways to support",
|
|
377
|
+
columns = "auto",
|
|
377
378
|
icon,
|
|
378
379
|
heading: Heading = "h2",
|
|
379
380
|
className,
|
|
@@ -387,45 +388,43 @@ var SponsorCard = React2.forwardRef(
|
|
|
387
388
|
ref,
|
|
388
389
|
"data-as": "sponsor-card",
|
|
389
390
|
className: cn(
|
|
390
|
-
"
|
|
391
|
+
"flex flex-col gap-3 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface)] p-4",
|
|
391
392
|
className
|
|
392
393
|
),
|
|
393
394
|
...props,
|
|
394
395
|
children: [
|
|
395
|
-
/* @__PURE__ */
|
|
396
|
-
|
|
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",
|
|
396
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
397
|
+
/* @__PURE__ */ jsxs(
|
|
398
|
+
Heading,
|
|
405
399
|
{
|
|
406
|
-
"
|
|
407
|
-
className: "flex
|
|
408
|
-
children:
|
|
400
|
+
"data-as": "sponsor-title",
|
|
401
|
+
className: "flex items-center gap-2 text-base font-bold leading-tight tracking-tight text-[var(--as-fg)]",
|
|
402
|
+
children: [
|
|
403
|
+
icon ?? /* @__PURE__ */ jsx(
|
|
404
|
+
Heart,
|
|
405
|
+
{
|
|
406
|
+
"aria-hidden": true,
|
|
407
|
+
className: "size-[18px] shrink-0 fill-[var(--as-danger)] text-[var(--as-danger)]"
|
|
408
|
+
}
|
|
409
|
+
),
|
|
410
|
+
title
|
|
411
|
+
]
|
|
409
412
|
}
|
|
410
413
|
),
|
|
411
|
-
/* @__PURE__ */
|
|
412
|
-
|
|
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
|
-
] })
|
|
414
|
+
description ? /* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-[var(--as-muted-fg)]", children: description }) : null,
|
|
415
|
+
footnote ? /* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-[var(--as-muted-fg)]", children: footnote }) : null
|
|
422
416
|
] }),
|
|
423
417
|
/* @__PURE__ */ jsx(
|
|
424
418
|
"ul",
|
|
425
419
|
{
|
|
426
420
|
"data-as": "sponsor-channels",
|
|
427
421
|
"aria-label": channelsLabel,
|
|
428
|
-
className:
|
|
422
|
+
className: cn(
|
|
423
|
+
"grid list-none gap-1.5",
|
|
424
|
+
columns === "auto" && "grid-cols-1 sm:grid-cols-2",
|
|
425
|
+
columns === 1 && "grid-cols-1",
|
|
426
|
+
columns === 2 && "grid-cols-2"
|
|
427
|
+
),
|
|
429
428
|
children: channels.map((channel) => {
|
|
430
429
|
const Icon = channel.icon ?? Heart;
|
|
431
430
|
const external = channel.external !== false;
|
|
@@ -439,7 +438,7 @@ var SponsorCard = React2.forwardRef(
|
|
|
439
438
|
"data-as-highlight": channel.highlight ? "true" : void 0,
|
|
440
439
|
className: cn(
|
|
441
440
|
rowBase,
|
|
442
|
-
channel.highlight ? "
|
|
441
|
+
channel.highlight ? "border border-[color-mix(in_srgb,var(--as-primary)_40%,transparent)] hover:border-[var(--as-primary)]" : "border border-[var(--as-border)] bg-[var(--as-surface-raised)] hover:border-[var(--as-primary)]"
|
|
443
442
|
),
|
|
444
443
|
children: [
|
|
445
444
|
/* @__PURE__ */ jsx(
|
|
@@ -447,10 +446,10 @@ var SponsorCard = React2.forwardRef(
|
|
|
447
446
|
{
|
|
448
447
|
"aria-hidden": true,
|
|
449
448
|
className: cn(
|
|
450
|
-
"flex size-
|
|
451
|
-
channel.highlight ? "
|
|
449
|
+
"flex size-7 shrink-0 items-center justify-center rounded-[var(--as-radius-sm)]",
|
|
450
|
+
channel.highlight ? "text-[var(--as-primary)]" : "bg-[var(--as-secondary)] text-[var(--as-secondary-fg)]"
|
|
452
451
|
),
|
|
453
|
-
children: /* @__PURE__ */ jsx(Icon, { className: "size-
|
|
452
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
|
|
454
453
|
}
|
|
455
454
|
),
|
|
456
455
|
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
@@ -458,32 +457,19 @@ var SponsorCard = React2.forwardRef(
|
|
|
458
457
|
"span",
|
|
459
458
|
{
|
|
460
459
|
className: cn(
|
|
461
|
-
"
|
|
462
|
-
channel.highlight ? "text-[var(--as-primary
|
|
460
|
+
"truncate text-sm",
|
|
461
|
+
channel.highlight ? "font-semibold text-[var(--as-primary)]" : "font-medium text-[var(--as-fg)]"
|
|
463
462
|
),
|
|
464
463
|
children: channel.name
|
|
465
464
|
}
|
|
466
465
|
),
|
|
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
|
|
466
|
+
channel.description ? /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--as-muted-fg)]", children: channel.description }) : null
|
|
477
467
|
] }),
|
|
478
468
|
/* @__PURE__ */ jsx(
|
|
479
|
-
|
|
469
|
+
ArrowUpRight,
|
|
480
470
|
{
|
|
481
471
|
"aria-hidden": true,
|
|
482
|
-
className:
|
|
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" })
|
|
472
|
+
className: "size-4 shrink-0 text-[var(--as-muted-fg)] transition-colors group-hover:text-[var(--as-primary)]"
|
|
487
473
|
}
|
|
488
474
|
)
|
|
489
475
|
]
|
|
@@ -492,16 +478,6 @@ var SponsorCard = React2.forwardRef(
|
|
|
492
478
|
})
|
|
493
479
|
}
|
|
494
480
|
),
|
|
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
481
|
children
|
|
506
482
|
]
|
|
507
483
|
}
|
|
@@ -624,5 +600,5 @@ var AboutPanel = React2.forwardRef(
|
|
|
624
600
|
);
|
|
625
601
|
|
|
626
602
|
export { AboutCard, AboutFooterLine, AboutLinkList, AboutNote, AboutPanel, FamilyBadge, SponsorCard, TechChips };
|
|
627
|
-
//# sourceMappingURL=chunk-
|
|
628
|
-
//# sourceMappingURL=chunk-
|
|
603
|
+
//# sourceMappingURL=chunk-INMAUGBK.js.map
|
|
604
|
+
//# sourceMappingURL=chunk-INMAUGBK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/about/AboutCard.tsx","../src/components/about/AboutLinkList.tsx","../src/components/about/AboutNote.tsx","../src/components/about/AboutFooterLine.tsx","../src/components/about/FamilyBadge.tsx","../src/components/about/TechChips.tsx","../src/components/about/SponsorCard.tsx","../src/components/about/AboutPanel.tsx"],"names":["React","AboutCard","jsxs","jsx","AboutLinkList","React3","AboutNote","React4","AboutFooterLine","React5","FamilyBadge","ArrowUpRight","React6","TechChips","React7","SponsorCard","marks","React8","AboutPanel"],"mappings":"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","file":"chunk-INMAUGBK.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { Card, CardContent, CardHeader } from '../card/Card'\n\nexport interface AboutCardProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n icon?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n heading?: 'h2' | 'h3' | 'h4'\n}\n\nexport const AboutCard = React.forwardRef<HTMLDivElement, AboutCardProps>(\n function AboutCard({ icon, title, description, heading = 'h2', className, children, ...props }, ref) {\n const Title = heading\n return (\n <Card ref={ref} data-as=\"about-card\" className={cn('h-fit', className)} {...props}>\n <CardHeader className=\"flex-row items-center gap-3\">\n {icon ? (\n <span\n aria-hidden\n 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\"\n >\n {icon}\n </span>\n ) : null}\n <div className=\"flex flex-col gap-1\">\n <Title\n data-as=\"card-title\"\n className=\"font-semibold leading-none tracking-tight\"\n >\n {title}\n </Title>\n {description ? (\n <p className=\"text-sm text-[var(--as-muted-fg)]\">{description}</p>\n ) : null}\n </div>\n </CardHeader>\n {children ? <CardContent>{children}</CardContent> : null}\n </Card>\n )\n },\n)\n","import * as React from 'react'\nimport { ArrowUpRight, Check, Copy, Link2 } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface AboutLinkItem {\n href?: string\n label: React.ReactNode\n subtitle?: React.ReactNode\n icon?: React.ComponentType<{ className?: string }>\n external?: boolean\n group?: React.ReactNode\n copyValue?: string\n copyLabel?: string\n copiedLabel?: string\n}\n\nexport interface AboutLinkListProps extends React.ComponentProps<'ul'> {\n links: ReadonlyArray<AboutLinkItem>\n}\n\nconst rowClass =\n '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)]'\n\nconst tileClass =\n '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'\n\ninterface CopyRowProps {\n value: string\n icon?: React.ComponentType<{ className?: string }>\n label?: React.ReactNode\n subtitle?: React.ReactNode\n copyLabel?: string\n copiedLabel?: string\n}\n\nconst CopyRow = ({\n value,\n icon: Icon = Link2,\n label,\n subtitle,\n copyLabel = 'Copy to clipboard',\n copiedLabel = 'Copied!',\n}: CopyRowProps) => {\n const [copied, setCopied] = React.useState(false)\n React.useEffect(() => {\n if (!copied) return\n const timeout = setTimeout(() => setCopied(false), 2000)\n return () => clearTimeout(timeout)\n }, [copied])\n const onCopy = () => {\n void navigator.clipboard?.writeText(value).then(() => setCopied(true))\n }\n return (\n <button\n type=\"button\"\n onClick={onCopy}\n data-as=\"about-copy-row\"\n aria-label={`${typeof label === 'string' ? label : copyLabel} — ${copyLabel}`}\n className={rowClass}\n >\n <span aria-hidden className={tileClass}>\n <Icon className=\"size-5\" />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-[var(--as-fg)] transition-colors group-hover:text-[var(--as-primary)]\">\n {label}\n </span>\n <span className=\"block truncate text-xs text-[var(--as-muted-fg)]\">\n {copied ? copiedLabel : subtitle}\n </span>\n </span>\n {copied ? (\n <Check aria-hidden className=\"size-4 shrink-0 text-[var(--as-success)]\" />\n ) : (\n <Copy\n aria-hidden\n className=\"size-4 shrink-0 text-[var(--as-muted-fg)] opacity-0 transition-opacity group-hover:opacity-100\"\n />\n )}\n </button>\n )\n}\n\nexport const AboutLinkList = React.forwardRef<HTMLUListElement, AboutLinkListProps>(\n function AboutLinkList({ links, className, ...props }, ref) {\n let lastGroup: React.ReactNode | undefined\n return (\n <ul\n ref={ref}\n data-as=\"about-link-list\"\n className={cn('flex flex-col gap-0.5', className)}\n {...props}\n >\n {links.map((link, index) => {\n const Icon = link.icon ?? Link2\n const external = link.external !== false\n const heading =\n link.group !== undefined && link.group !== lastGroup ? link.group : null\n lastGroup = link.group\n return (\n <li key={index}>\n {heading !== null ? (\n <p\n className={cn(\n 'mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-[var(--as-muted-fg)]',\n index > 0 && 'mt-4',\n )}\n >\n {heading}\n </p>\n ) : null}\n {link.copyValue && !link.href ? (\n <CopyRow\n value={link.copyValue}\n icon={link.icon}\n label={link.label}\n subtitle={link.subtitle}\n copyLabel={link.copyLabel}\n copiedLabel={link.copiedLabel}\n />\n ) : (\n <a\n href={link.href}\n {...(external ? { target: '_blank', rel: 'noreferrer' } : {})}\n className={rowClass}\n >\n <span aria-hidden className={tileClass}>\n <Icon className=\"size-5\" />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-[var(--as-fg)] transition-colors group-hover:text-[var(--as-primary)]\">\n {link.label}\n </span>\n {link.subtitle ? (\n <span className=\"block truncate text-xs text-[var(--as-muted-fg)]\">\n {link.subtitle}\n </span>\n ) : null}\n </span>\n {external ? (\n <ArrowUpRight\n aria-hidden\n className=\"size-4 shrink-0 text-[var(--as-muted-fg)] opacity-60 transition-opacity group-hover:opacity-100\"\n />\n ) : null}\n </a>\n )}\n </li>\n )\n })}\n </ul>\n )\n },\n)\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\nconst noteStyles = cva(\n 'rounded-[var(--as-radius-lg)] border p-5 text-sm leading-relaxed',\n {\n variants: {\n tone: {\n 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)]',\n warning:\n '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))]',\n },\n },\n defaultVariants: {\n tone: 'info',\n },\n },\n)\n\nexport interface AboutNoteProps\n extends Omit<React.ComponentProps<'div'>, 'title'>,\n VariantProps<typeof noteStyles> {\n title?: React.ReactNode\n}\n\nexport const AboutNote = React.forwardRef<HTMLDivElement, AboutNoteProps>(\n function AboutNote({ tone, title, className, children, ...props }, ref) {\n return (\n <div ref={ref} data-as=\"about-note\" data-as-tone={tone} className={cn(noteStyles({ tone }), className)} {...props}>\n {title ? <p className=\"mb-1.5 font-semibold uppercase tracking-wider\">{title}</p> : null}\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface AboutFooterLineProps extends React.ComponentProps<'p'> {\n version?: string\n copyright?: React.ReactNode\n}\n\nexport const AboutFooterLine = React.forwardRef<\n HTMLParagraphElement,\n AboutFooterLineProps\n>(function AboutFooterLine({ version, copyright, className, children, ...props }, ref) {\n return (\n <p\n ref={ref}\n data-as=\"about-footer-line\"\n className={cn('text-center text-xs text-[var(--as-muted-fg)]', className)}\n {...props}\n >\n {version ? <span>{version}</span> : null}\n {version && (copyright || children) ? <br /> : null}\n {copyright ?? children}\n </p>\n )\n})\n","import * as React from 'react'\nimport { ArrowUpRight, Globe } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport type { LogoTheme } from '../logo/Logo'\nimport { NeuronectionMark } from '../logo/NeuronectionMark'\nimport { NeuronectionWordmark } from '../logo/NeuronectionWordmark'\nimport { CareerMark } from '../logo/CareerMark'\nimport { HealthMark } from '../logo/HealthMark'\nimport { StudyMark } from '../logo/StudyMark'\n\nconst GitHubGlyph = ({ className }: { className?: string }) => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden className={className}>\n <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\" />\n </svg>\n)\n\nexport type FamilyApp = 'health' | 'career' | 'study'\n\nexport interface FamilyMember {\n app: FamilyApp\n name: string\n tagline?: string\n href?: string\n github?: string\n website?: string\n}\n\nexport interface FamilyCreator {\n name: React.ReactNode\n role?: React.ReactNode\n href?: string\n}\n\nexport interface FamilyBadgeProps extends Omit<React.ComponentProps<'div'>, 'title'> {\n current: FamilyApp\n members?: ReadonlyArray<FamilyMember>\n creator?: FamilyCreator\n creatorLabel?: string\n hubUrl?: string\n label?: string\n blurb?: React.ReactNode\n ctaLabel?: string\n currentLabel?: string\n githubLabel?: string\n websiteLabel?: string\n theme?: LogoTheme\n}\n\nconst marks = {\n health: HealthMark,\n career: CareerMark,\n study: StudyMark,\n} as const\n\nconst defaultMembers: Record<FamilyApp, { name: string; tagline: string; href: string; github: string; website?: string }> = {\n health: {\n name: 'Health Assistant',\n tagline: 'Self-hosted, privacy-first health records with AI insights',\n href: 'https://neuronection.com/en/health/',\n github: 'https://github.com/health-assistant-io/health-assistant',\n website: 'https://health-assistant.io',\n },\n career: {\n name: 'Career Assistant',\n tagline: 'Open-source career explorer with transparent AI matching',\n href: 'https://neuronection.com/en/career/',\n github: 'https://github.com/neuronection/career-assistant',\n },\n study: {\n name: 'Study Assistant',\n tagline: 'Local-first study workbench that runs in your browser',\n href: 'https://neuronection.com/en/study/',\n github: 'https://github.com/neuronection/study-assistant',\n },\n}\n\nconst defaultOrder: FamilyApp[] = ['health', 'career', 'study']\n\nconst defaultBlurb =\n 'Neuronection is a family of open-source, self-hosted AI assistants — 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.'\n\nexport const FamilyBadge = React.forwardRef<HTMLDivElement, FamilyBadgeProps>(\n function FamilyBadge(\n {\n current,\n members,\n creator,\n creatorLabel = 'Created by',\n hubUrl = 'https://neuronection.com',\n label = 'Part of the Neuronection family',\n blurb = defaultBlurb,\n ctaLabel = 'Visit neuronection.com',\n currentLabel = 'Current app',\n githubLabel = 'GitHub',\n websiteLabel = 'Website',\n theme = 'light',\n className,\n ...props\n },\n ref,\n ) {\n const list = members ?? defaultOrder.map((app) => ({ app, ...defaultMembers[app] }))\n return (\n <section\n ref={ref}\n data-as=\"family-badge\"\n aria-label={label}\n className={cn(\n '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',\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-x-6 gap-y-4\">\n <a\n href={hubUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={label}\n 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)]\"\n >\n <NeuronectionMark size={44} theme={theme} />\n <NeuronectionWordmark size={24} theme={theme} />\n </a>\n <a\n href={hubUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n data-as=\"family-cta\"\n 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)]\"\n >\n {ctaLabel}\n <span\n aria-hidden\n 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)]\"\n >\n <ArrowUpRight className=\"size-4\" />\n </span>\n </a>\n </div>\n\n {blurb ? (\n <p className=\"max-w-2xl text-base leading-relaxed text-[var(--as-muted-fg)]\">\n {blurb}\n </p>\n ) : null}\n\n <ul className=\"grid grid-cols-1 gap-x-3 gap-y-4 sm:grid-cols-3\">\n {list.map((member) => {\n const Mark = marks[member.app]\n const isCurrent = member.app === current\n const card = cn(\n '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)]',\n isCurrent\n ? 'border-[var(--as-primary)] bg-[color-mix(in_srgb,var(--as-primary)_7%,transparent)] ring-2 ring-[var(--as-primary)]'\n : 'border-[var(--as-border)] bg-[var(--as-muted)] hover:border-[var(--as-primary)]',\n )\n const linkExtras =\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]'\n const header = (\n <>\n <Mark size={56} theme={theme} />\n {member.href ? (\n <span className=\"text-base font-bold leading-snug text-[var(--as-primary)] underline decoration-transparent underline-offset-4 transition-colors group-hover:decoration-current\">\n {member.name}\n </span>\n ) : (\n <span className=\"text-base font-bold leading-snug text-[var(--as-fg)]\">\n {member.name}\n </span>\n )}\n {member.tagline ? (\n <span className=\"text-sm leading-relaxed text-[var(--as-muted-fg)]\">\n {member.tagline}\n </span>\n ) : null}\n {isCurrent ? (\n <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)]\">\n {currentLabel}\n </span>\n ) : null}\n </>\n )\n return (\n <li key={member.app} data-current={isCurrent ? 'true' : undefined} className=\"flex\">\n <div className={cn(card, 'w-full')}>\n {member.href ? (\n <a\n href={member.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn('flex flex-1 flex-col items-center gap-2.5', linkExtras)}\n >\n {header}\n </a>\n ) : (\n <div className=\"flex flex-1 flex-col items-center gap-2.5\">{header}</div>\n )}\n {member.github || member.website ? (\n <div className=\"mt-5 flex items-center justify-center gap-2 border-t border-[var(--as-border)] pt-4\">\n {member.github ? (\n <a\n href={member.github}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${member.name} on GitHub`}\n 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)]\"\n >\n <GitHubGlyph className=\"size-4\" />\n {githubLabel}\n </a>\n ) : null}\n {member.website ? (\n <a\n href={member.website}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={`${member.name} website`}\n 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)]\"\n >\n <Globe aria-hidden className=\"size-4\" />\n {websiteLabel}\n </a>\n ) : null}\n </div>\n ) : null}\n </div>\n </li>\n )\n })}\n </ul>\n\n {creator ? (\n <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)]\">\n <span>{creatorLabel}</span>\n {creator.href ? (\n <a\n href={creator.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n 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)]\"\n >\n {creator.name}\n </a>\n ) : (\n <span className=\"font-semibold text-[var(--as-fg)]\">{creator.name}</span>\n )}\n {creator.role ? <span>· {creator.role}</span> : null}\n </p>\n ) : null}\n </section>\n )\n },\n)\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { ChipList } from '../chip-list/ChipList'\n\nexport interface TechChipsProps extends React.ComponentProps<'div'> {\n items: ReadonlyArray<string | null | undefined>\n}\n\nexport const TechChips = React.forwardRef<HTMLDivElement, TechChipsProps>(\n function TechChips({ items, className, ...props }, ref) {\n const cleaned = items.filter((item): item is string => Boolean(item))\n if (cleaned.length === 0) return null\n return (\n <div ref={ref} data-as=\"tech-chips\" className={cn(className)} {...props}>\n <ChipList items={cleaned} variant=\"neutral\" />\n </div>\n )\n },\n)\n","import * as React from 'react'\nimport { ArrowUpRight, Heart } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface SponsorChannel {\n id: string\n name: React.ReactNode\n href: string\n description?: React.ReactNode\n icon?: React.ComponentType<{ className?: string }>\n external?: boolean\n highlight?: boolean\n}\n\nexport interface SponsorCardProps\n extends Omit<React.ComponentProps<'section'>, 'title'> {\n channels: ReadonlyArray<SponsorChannel>\n title?: React.ReactNode\n description?: React.ReactNode\n footnote?: React.ReactNode\n channelsLabel?: string\n /** Channel list columns. `auto` = one column below the `sm` viewport\n * breakpoint, two above; `1`/`2` force a count (use `1` inside narrow\n * surfaces like modals — breakpoints track the viewport, not the card). */\n columns?: 'auto' | 1 | 2\n icon?: React.ReactNode\n heading?: 'h2' | 'h3' | 'h4'\n}\n\nconst rowBase =\n 'group flex w-full items-center gap-2.5 rounded-[var(--as-radius)] px-2.5 py-2 text-left no-underline transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-primary)]'\n\nexport const SponsorCard = React.forwardRef<HTMLElement, SponsorCardProps>(\n function SponsorCard(\n {\n channels,\n title = 'Support this project',\n description = 'This project is free and open source. Contributions directly fund servers, maintenance and new development.',\n footnote = 'Every contribution keeps the project independent and free.',\n channelsLabel = 'Ways to support',\n columns = 'auto',\n icon,\n heading: Heading = 'h2',\n className,\n children,\n ...props\n },\n ref,\n ) {\n if (channels.length === 0) return null\n return (\n <section\n ref={ref}\n data-as=\"sponsor-card\"\n className={cn(\n 'flex flex-col gap-3 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface)] p-4',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-w-0 flex-col gap-1\">\n <Heading\n data-as=\"sponsor-title\"\n className=\"flex items-center gap-2 text-base font-bold leading-tight tracking-tight text-[var(--as-fg)]\"\n >\n {icon ?? (\n <Heart\n aria-hidden\n className=\"size-[18px] shrink-0 fill-[var(--as-danger)] text-[var(--as-danger)]\"\n />\n )}\n {title}\n </Heading>\n {description ? (\n <p className=\"text-xs leading-relaxed text-[var(--as-muted-fg)]\">\n {description}\n </p>\n ) : null}\n {footnote ? (\n <p className=\"text-xs leading-relaxed text-[var(--as-muted-fg)]\">\n {footnote}\n </p>\n ) : null}\n </div>\n\n <ul\n data-as=\"sponsor-channels\"\n aria-label={channelsLabel}\n className={cn(\n 'grid list-none gap-1.5',\n columns === 'auto' && 'grid-cols-1 sm:grid-cols-2',\n columns === 1 && 'grid-cols-1',\n columns === 2 && 'grid-cols-2',\n )}\n >\n {channels.map((channel) => {\n const Icon = channel.icon ?? Heart\n const external = channel.external !== false\n return (\n <li key={channel.id}>\n <a\n href={channel.href}\n {...(external ? { target: '_blank', rel: 'noreferrer' } : {})}\n data-as=\"sponsor-channel\"\n data-as-channel={channel.id}\n data-as-highlight={channel.highlight ? 'true' : undefined}\n className={cn(\n rowBase,\n channel.highlight\n ? 'border border-[color-mix(in_srgb,var(--as-primary)_40%,transparent)] hover:border-[var(--as-primary)]'\n : 'border border-[var(--as-border)] bg-[var(--as-surface-raised)] hover:border-[var(--as-primary)]',\n )}\n >\n <span\n aria-hidden\n className={cn(\n 'flex size-7 shrink-0 items-center justify-center rounded-[var(--as-radius-sm)]',\n channel.highlight\n ? 'text-[var(--as-primary)]'\n : 'bg-[var(--as-secondary)] text-[var(--as-secondary-fg)]',\n )}\n >\n <Icon className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n 'truncate text-sm',\n channel.highlight\n ? 'font-semibold text-[var(--as-primary)]'\n : 'font-medium text-[var(--as-fg)]',\n )}\n >\n {channel.name}\n </span>\n {channel.description ? (\n <span className=\"block truncate text-xs text-[var(--as-muted-fg)]\">\n {channel.description}\n </span>\n ) : null}\n </span>\n <ArrowUpRight\n aria-hidden\n className=\"size-4 shrink-0 text-[var(--as-muted-fg)] transition-colors group-hover:text-[var(--as-primary)]\"\n />\n </a>\n </li>\n )\n })}\n </ul>\n\n {children}\n </section>\n )\n },\n)\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { Badge } from '../badge/Badge'\nimport { CareerMark } from '../logo/CareerMark'\nimport { HealthMark } from '../logo/HealthMark'\nimport { StudyMark } from '../logo/StudyMark'\nimport type { LogoTheme } from '../logo/Logo'\nimport { AboutCard } from './AboutCard'\nimport { AboutFooterLine } from './AboutFooterLine'\nimport { AboutLinkList, type AboutLinkItem } from './AboutLinkList'\nimport { AboutNote } from './AboutNote'\nimport { FamilyBadge, type FamilyApp, type FamilyMember } from './FamilyBadge'\nimport {\n SponsorCard,\n type SponsorChannel,\n} from './SponsorCard'\nimport { TechChips } from './TechChips'\n\nexport interface AboutCreator {\n name: React.ReactNode\n role?: React.ReactNode\n href?: string\n links?: ReadonlyArray<AboutLinkItem>\n}\n\nexport interface AboutLicense {\n name: string\n href?: string\n}\n\nexport interface AboutNoteContent {\n tone?: 'info' | 'warning'\n title?: React.ReactNode\n children: React.ReactNode\n}\n\nexport interface AboutSponsorContent {\n channels: ReadonlyArray<SponsorChannel>\n title?: React.ReactNode\n description?: React.ReactNode\n footnote?: React.ReactNode\n channelsLabel?: string\n}\n\nexport interface AboutPanelProps extends React.ComponentProps<'div'> {\n appName: string\n familyCurrent?: FamilyApp\n logo?: React.ReactNode\n tagline?: React.ReactNode\n description?: React.ReactNode\n version?: string\n license?: AboutLicense\n licenseTitle?: string\n licenseLinkLabel?: string\n links?: ReadonlyArray<AboutLinkItem>\n linksTitle?: string\n creator?: AboutCreator\n creatorTitle?: string\n tech?: ReadonlyArray<string>\n techTitle?: string\n note?: AboutNoteContent\n sponsor?: AboutSponsorContent\n familyMembers?: ReadonlyArray<FamilyMember>\n hubUrl?: string\n familyLabel?: string\n familyBlurb?: React.ReactNode\n familyCtaLabel?: string\n familyCurrentLabel?: string\n theme?: LogoTheme\n copyright?: React.ReactNode\n}\n\nconst marks = {\n health: HealthMark,\n career: CareerMark,\n study: StudyMark,\n} as const\n\nexport const AboutPanel = React.forwardRef<HTMLDivElement, AboutPanelProps>(\n function AboutPanel(\n {\n appName,\n familyCurrent,\n logo,\n tagline,\n description,\n version,\n license,\n licenseTitle = 'License & open source',\n licenseLinkLabel = 'Read license',\n links,\n linksTitle = 'Links',\n creator,\n creatorTitle = 'Created by',\n tech,\n techTitle = 'Built with',\n note,\n sponsor,\n familyMembers,\n hubUrl,\n familyLabel,\n familyBlurb,\n familyCtaLabel,\n familyCurrentLabel,\n theme = 'light',\n copyright,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const DefaultMark = familyCurrent ? marks[familyCurrent] : null\n return (\n <div\n ref={ref}\n data-as=\"about-panel\"\n className={cn('flex w-full flex-col gap-6', className)}\n {...props}\n >\n <section className=\"flex items-start gap-5\">\n {logo ?? (DefaultMark ? <DefaultMark size={72} theme={theme} /> : null)}\n <div className=\"flex flex-col gap-1.5 pt-1\">\n <div className=\"flex flex-wrap items-center gap-2.5\">\n <h1 className=\"text-2xl font-bold tracking-tight text-[var(--as-fg)]\">\n {appName}\n </h1>\n {version ? (\n <Badge variant=\"outline\" data-as=\"about-version\">\n v{version}\n </Badge>\n ) : null}\n </div>\n {tagline ? (\n <p className=\"text-sm font-medium text-[var(--as-muted-fg)]\">{tagline}</p>\n ) : null}\n {description ? (\n <p className=\"max-w-2xl text-sm leading-relaxed text-[var(--as-muted-fg)]\">\n {description}\n </p>\n ) : null}\n </div>\n </section>\n\n {creator || license || links?.length ? (\n <section className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n {creator && !familyCurrent ? (\n <AboutCard title={creatorTitle}>\n <p className=\"font-semibold text-[var(--as-fg)]\">{creator.name}</p>\n {creator.role ? (\n <p className=\"mb-3 text-sm text-[var(--as-muted-fg)]\">{creator.role}</p>\n ) : null}\n {creator.links?.length ? <AboutLinkList links={creator.links} /> : null}\n </AboutCard>\n ) : null}\n {license ? (\n <AboutCard title={licenseTitle}>\n <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\">\n <span className=\"font-semibold text-[var(--as-fg)]\">{license.name}</span>\n {license.href ? (\n <a\n href={license.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n 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)]\"\n >\n {licenseLinkLabel}\n </a>\n ) : null}\n </div>\n </AboutCard>\n ) : null}\n {links?.length ? (\n <AboutCard title={linksTitle}>\n <AboutLinkList links={links} />\n </AboutCard>\n ) : null}\n </section>\n ) : null}\n\n {sponsor ? (\n <SponsorCard\n channels={sponsor.channels}\n title={sponsor.title}\n description={sponsor.description}\n footnote={sponsor.footnote}\n channelsLabel={sponsor.channelsLabel}\n />\n ) : null}\n\n {tech?.length ? (\n <AboutCard title={techTitle}>\n <TechChips items={tech} />\n </AboutCard>\n ) : null}\n\n {note ? (\n <AboutNote tone={note.tone} title={note.title}>\n {note.children}\n </AboutNote>\n ) : null}\n\n {familyCurrent ? (\n <FamilyBadge\n current={familyCurrent}\n members={familyMembers}\n creator={\n creator\n ? { name: creator.name, role: creator.role, href: creator.href }\n : undefined\n }\n creatorLabel={creatorTitle}\n hubUrl={hubUrl}\n label={familyLabel}\n blurb={familyBlurb}\n ctaLabel={familyCtaLabel}\n currentLabel={familyCurrentLabel}\n theme={theme}\n />\n ) : null}\n\n {version || copyright ? (\n <AboutFooterLine version={version} copyright={copyright} />\n ) : null}\n\n {children}\n </div>\n )\n },\n)\n"]}
|
|
@@ -52,6 +52,7 @@ var ScaleSlider = React.forwardRef(
|
|
|
52
52
|
if (clamped !== numericValue) onChange(clamped);
|
|
53
53
|
};
|
|
54
54
|
const showLabels = Boolean(lowLabel || highLabel);
|
|
55
|
+
const progress = numericValue === null ? 0 : Math.max(0, Math.min(100, (numericValue - min) / (max - min) * 100));
|
|
55
56
|
return /* @__PURE__ */ jsxs(
|
|
56
57
|
"div",
|
|
57
58
|
{
|
|
@@ -67,7 +68,7 @@ var ScaleSlider = React.forwardRef(
|
|
|
67
68
|
type: "range",
|
|
68
69
|
"aria-label": ariaLabel,
|
|
69
70
|
className: cn(
|
|
70
|
-
"
|
|
71
|
+
"flex-1 cursor-pointer",
|
|
71
72
|
disabled && "cursor-not-allowed opacity-50"
|
|
72
73
|
),
|
|
73
74
|
min,
|
|
@@ -75,7 +76,11 @@ var ScaleSlider = React.forwardRef(
|
|
|
75
76
|
step,
|
|
76
77
|
value: sliderValue,
|
|
77
78
|
disabled,
|
|
78
|
-
onChange: handleSlider
|
|
79
|
+
onChange: handleSlider,
|
|
80
|
+
style: {
|
|
81
|
+
"--as-slider-color": thumbColor,
|
|
82
|
+
"--as-slider-progress": `${progress}%`
|
|
83
|
+
}
|
|
79
84
|
}
|
|
80
85
|
),
|
|
81
86
|
showInput ? /* @__PURE__ */ jsx(
|
|
@@ -95,9 +100,9 @@ var ScaleSlider = React.forwardRef(
|
|
|
95
100
|
}
|
|
96
101
|
) : null
|
|
97
102
|
] }),
|
|
98
|
-
showLabels ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-
|
|
99
|
-
/* @__PURE__ */ jsx("span", {
|
|
100
|
-
/* @__PURE__ */ jsx("span", {
|
|
103
|
+
showLabels ? /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-xs font-medium", children: [
|
|
104
|
+
/* @__PURE__ */ jsx("span", { className: "text-[var(--as-muted-fg)]", children: lowLabel }),
|
|
105
|
+
/* @__PURE__ */ jsx("span", { className: "text-[var(--as-muted-fg)]", children: highLabel })
|
|
101
106
|
] }) : null
|
|
102
107
|
]
|
|
103
108
|
}
|
|
@@ -106,5 +111,5 @@ var ScaleSlider = React.forwardRef(
|
|
|
106
111
|
);
|
|
107
112
|
|
|
108
113
|
export { ScaleSlider, scaleColorForValue };
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-PSFJN7WH.js.map
|
|
115
|
+
//# sourceMappingURL=chunk-PSFJN7WH.js.map
|