@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.
Files changed (62) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +5 -2
  3. package/dist/Logo-D8DEBUoL.d.ts +11 -0
  4. package/dist/about.d.ts +154 -0
  5. package/dist/about.js +3 -0
  6. package/dist/about.js.map +1 -0
  7. package/dist/badge.d.ts +1 -1
  8. package/dist/badge.js +1 -1
  9. package/dist/capability-chips.d.ts +19 -0
  10. package/dist/capability-chips.js +3 -0
  11. package/dist/capability-chips.js.map +1 -0
  12. package/dist/card.js +1 -1
  13. package/dist/chip-list.js +1 -1
  14. package/dist/chunk-7EG3AUTS.js +3 -0
  15. package/dist/chunk-7EG3AUTS.js.map +1 -0
  16. package/dist/chunk-7RTSSBBR.js +628 -0
  17. package/dist/chunk-7RTSSBBR.js.map +1 -0
  18. package/dist/chunk-A6RXCBJY.js +3 -0
  19. package/dist/chunk-A6RXCBJY.js.map +1 -0
  20. package/dist/chunk-CE7JZP67.js +3 -0
  21. package/dist/chunk-CE7JZP67.js.map +1 -0
  22. package/dist/{chunk-SKTLC2XY.js → chunk-F4DP4PIM.js} +2 -2
  23. package/dist/{chunk-SKTLC2XY.js.map → chunk-F4DP4PIM.js.map} +1 -1
  24. package/dist/chunk-HGJ5HINX.js +500 -0
  25. package/dist/chunk-HGJ5HINX.js.map +1 -0
  26. package/dist/{chunk-UWHUCQC6.js → chunk-LY2B3UJH.js} +10 -4
  27. package/dist/chunk-LY2B3UJH.js.map +1 -0
  28. package/dist/chunk-MLQAA2QV.js +68 -0
  29. package/dist/chunk-MLQAA2QV.js.map +1 -0
  30. package/dist/chunk-Q2JMEAKN.js +340 -0
  31. package/dist/chunk-Q2JMEAKN.js.map +1 -0
  32. package/dist/{chunk-BN3YHYYL.js → chunk-QUPGIPTT.js} +2 -2
  33. package/dist/{chunk-BN3YHYYL.js.map → chunk-QUPGIPTT.js.map} +1 -1
  34. package/dist/{chunk-OPTH3VUY.js → chunk-RI6CEWWF.js} +2 -2
  35. package/dist/chunk-RI6CEWWF.js.map +1 -0
  36. package/dist/{chunk-HSWSYEFQ.js → chunk-RYE5YCFF.js} +2 -2
  37. package/dist/{chunk-HSWSYEFQ.js.map → chunk-RYE5YCFF.js.map} +1 -1
  38. package/dist/chunk-VPLCX2A5.js +3 -0
  39. package/dist/chunk-VPLCX2A5.js.map +1 -0
  40. package/dist/chunk-XB7QWPHP.js +127 -0
  41. package/dist/chunk-XB7QWPHP.js.map +1 -0
  42. package/dist/connection-test-row.d.ts +4 -0
  43. package/dist/connection-test-row.js +1 -1
  44. package/dist/index.d.ts +7 -2
  45. package/dist/index.js +22 -18
  46. package/dist/index.js.map +1 -1
  47. package/dist/logo.d.ts +18 -0
  48. package/dist/logo.js +3 -0
  49. package/dist/logo.js.map +1 -0
  50. package/dist/model-picker.d.ts +2 -0
  51. package/dist/model-picker.js +1 -1
  52. package/dist/model-registry.d.ts +84 -0
  53. package/dist/model-registry.js +3 -0
  54. package/dist/model-registry.js.map +1 -0
  55. package/dist/styles.css +1 -1
  56. package/dist/task-assignment-picker.d.ts +20 -5
  57. package/dist/task-assignment-picker.js +1 -1
  58. package/package.json +19 -1
  59. package/dist/chunk-OPTH3VUY.js.map +0 -1
  60. package/dist/chunk-TN35RR2R.js +0 -92
  61. package/dist/chunk-TN35RR2R.js.map +0 -1
  62. package/dist/chunk-UWHUCQC6.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @neuronection/assistant-ui
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`e6a78cf`](https://github.com/neuronection/assistant-ui/commit/e6a78cfda0ccd3f8b4014e8d40f726803ae3c0e2) Thanks [@constLiakos](https://github.com/constLiakos)! - Add the `model-registry` module and the AI-settings patterns it composes. `ModelRegistry` renders provider cards with registered model rows and the remote model catalog behind a two-stage add: quick-add with the app-provided cap guess, or an expandable draft panel where label, capabilities, and reasoning effort are editable before confirming — the same panel doubles as the inline editor, so apps can retire their separate edit dialogs. Adds `CapabilityChips` (controlled cap toggle group / badge display with `minSelected`), a `variant="inline"` + `meta` option on `ConnectionTestRow` for embedding in app provider cards, and v2 additions to `TaskAssignmentPicker`: `requires`-based capability filtering of the row catalog, `sections` grouping, per-task fallback (secondary) model assignment, and a `renderMeta` slot. `ModelPickerModel` gains an optional `capabilities: string[]`. All additions are backward compatible; flat `TaskAssignmentPicker` usage is unchanged.
8
+
9
+ - [`44d22a7`](https://github.com/neuronection/assistant-ui/commit/44d22a7d3c346d56e4a9c75ffb96c33f0d8ecc20) Thanks [@constLiakos](https://github.com/constLiakos)! - Add `SponsorCard` to the about module and a `sponsor` prop on `AboutPanel`. Channels are data-driven (`SponsorChannel[]`), so apps can start with Buy Me a Coffee (`https://buymeacoffee.com/neuronection`) and add future funding methods without API changes. Highlighted channels render as primary CTAs; per-channel `data-as-channel="<id>"` hooks allow app-side brand theming.
10
+
11
+ ## 0.9.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [`71f029b`](https://github.com/neuronection/assistant-ui/commit/71f029b3193460db28293b811186a2f46516bf10) Thanks [@constLiakos](https://github.com/constLiakos)! - Add about module: a uniform family "about page" kit. `AboutPanel` composes hero (logo, name, tagline, version badge), creator/license/links cards, tech chips, a toned note (e.g. medical disclaimer), the `FamilyBadge` showcase and a version/copyright footer — all content via props so apps keep their i18n and data. `FamilyBadge` presents the Neuronection brand lockup (mark + wordmark), an open-source/self-hosted family blurb, a prominent hub CTA, and one tile per app (logo, name, tagline, links to its presentation page, GitHub and website where applicable) with the current app highlighted. Building blocks (`AboutCard`, `AboutLinkList`, `AboutNote`, `AboutFooterLine`, `FamilyBadge`, `TechChips`) are also exported individually.
16
+
17
+ - [`71f029b`](https://github.com/neuronection/assistant-ui/commit/71f029b3193460db28293b811186a2f46516bf10) Thanks [@constLiakos](https://github.com/constLiakos)! - Add logo module with inline brand marks for the Assistant family: `NeuronectionMark`, `NeuronectionWordmark`, `CareerMark`, `StudyMark`, `HealthMark`. All are theme-aware (`theme="light" | "dark"`, mirroring the hub artwork pairs), decorative and non-focusable by default, labeled via an optional `title` prop, sized via `size`, and use per-instance gradient ids so several marks can share a page. The wordmark also accepts `mono` for a `currentColor` fill. Brand artwork keeps its fixed fills as a deliberate exception to the semantic-token rule.
18
+
3
19
  ## 0.8.1
4
20
 
5
21
  ### Patch Changes
package/README.md CHANGED
@@ -84,8 +84,9 @@ files in the package's `dist/`. Visual reference:
84
84
  | `error-banner` / `undo-notice` / `empty-state` / `spinner` | presentational feedback: alert banner with `action` slot · undo toast · `EmptyState` · `Spinner` |
85
85
  | `info-button` / `field-label` / `copy-button` / `breadcrumbs` | `InfoButton` · `FieldLabel` · `CopyButton` (clipboard + copied state) · `Breadcrumbs` (SPA links via `linkComponent`) |
86
86
  | `ai-button` / `ai-actions-dropdown` / `ai-magic-fill` | AI affordances: ask-with-suggestions (controlled open, icon-only mode) · action menu + custom prompt · describe-in-words fill modal — API calls stay app-side |
87
- | `settings-shell` / `provider-form` / `connection-test-row` | `SettingsShell` (controlled two-pane nav) · `ProviderForm` (write-only API-key field) · `ConnectionTestRow` (idle/testing/ok/fail + latency) |
88
- | `model-picker` / `task-assignment-picker` | `ModelPicker` (grouped provider→model combobox, capability chips) · `TaskAssignmentPicker` (task → model mapping rows) |
87
+ | `settings-shell` / `provider-form` / `connection-test-row` | `SettingsShell` (controlled two-pane nav) · `ProviderForm` (write-only API-key field) · `ConnectionTestRow` (idle/testing/ok/fail + latency, `inline` variant + meta slot) |
88
+ | `model-picker` / `task-assignment-picker` / `capability-chips` | `ModelPicker` (grouped provider→model combobox, capability chips) · `TaskAssignmentPicker` (task → model mapping rows, capability-filtered, sections + fallback assignment, meta slot) · `CapabilityChips` (cap toggle group / badges, min-selected) |
89
+ | `model-registry` | `ModelRegistry` (provider cards → registered model rows + remote catalog with two-stage add: quick-add or expandable draft panel with editable label/caps/reasoning-effort; cap filter + search + add-all; add/edit are one panel) |
89
90
  | `upload-dropzone` / `file-card` / `file-queue` | file attachment surface: dropzone (block/row) · card (status, include toggle) · queue (summary + reorder) |
90
91
  | `marquee` | `useMarquee`, `MarqueeSurface`, `MarqueeBand` (rubber-band selection) |
91
92
  | `portal` / `theme-scope` / `tokens` | `Portal` · `ThemeScope` · token name lists + types |
@@ -99,6 +100,7 @@ no router — data in, events out.
99
100
 
100
101
  - [Adopting in an app](./docs/adoption.md) — the install/switchover recipe each family app follows (incl. the TW3 cascade notes)
101
102
  - [Theming](./docs/theming.md) — tokens, app themes, dark mode, styling hooks
103
+ - [Accessibility](./docs/accessibility.md) — the keyboard + ARIA contract per module (test-asserted)
102
104
  - [Adding a component](./docs/adding-a-component.md) — rules, checklist, required companions
103
105
  - [Local development](./docs/local-development.md) — live-test library changes in the family apps without publishing
104
106
  - [Publishing](./docs/publishing.md) — the Changesets release flow and CI setup
@@ -110,6 +112,7 @@ pnpm install
110
112
  pnpm dev # Ladle playground on :61000 (CSS watches alongside)
111
113
  pnpm test --watch
112
114
  pnpm verify # lint + typecheck + test + build
115
+ pnpm test:visual # Playwright screenshots of every story vs committed baselines
113
116
  ```
114
117
 
115
118
  Releases happen via [Changesets](./CONTRIBUTING.md) — CI publishes, never a
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+
3
+ type LogoTheme = 'light' | 'dark';
4
+ interface LogoProps extends Omit<React.ComponentProps<'svg'>, 'children'> {
5
+ size?: number | string;
6
+ theme?: LogoTheme;
7
+ title?: string;
8
+ }
9
+ declare const useLogoId: () => string;
10
+
11
+ export { type LogoProps as L, type LogoTheme as a, useLogoId as u };
@@ -0,0 +1,154 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import { a as LogoTheme } from './Logo-D8DEBUoL.js';
5
+
6
+ interface AboutCardProps extends Omit<React.ComponentProps<'div'>, 'title'> {
7
+ icon?: React.ReactNode;
8
+ title: React.ReactNode;
9
+ description?: React.ReactNode;
10
+ heading?: 'h2' | 'h3' | 'h4';
11
+ }
12
+ declare const AboutCard: React.ForwardRefExoticComponent<Omit<AboutCardProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+
14
+ interface AboutLinkItem {
15
+ href?: string;
16
+ label: React.ReactNode;
17
+ subtitle?: React.ReactNode;
18
+ icon?: React.ComponentType<{
19
+ className?: string;
20
+ }>;
21
+ external?: boolean;
22
+ group?: React.ReactNode;
23
+ copyValue?: string;
24
+ copyLabel?: string;
25
+ copiedLabel?: string;
26
+ }
27
+ interface AboutLinkListProps extends React.ComponentProps<'ul'> {
28
+ links: ReadonlyArray<AboutLinkItem>;
29
+ }
30
+ declare const AboutLinkList: React.ForwardRefExoticComponent<Omit<AboutLinkListProps, "ref"> & React.RefAttributes<HTMLUListElement>>;
31
+
32
+ declare const noteStyles: (props?: ({
33
+ tone?: "info" | "warning" | null | undefined;
34
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
35
+ interface AboutNoteProps extends Omit<React.ComponentProps<'div'>, 'title'>, VariantProps<typeof noteStyles> {
36
+ title?: React.ReactNode;
37
+ }
38
+ declare const AboutNote: React.ForwardRefExoticComponent<Omit<AboutNoteProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
39
+
40
+ interface AboutFooterLineProps extends React.ComponentProps<'p'> {
41
+ version?: string;
42
+ copyright?: React.ReactNode;
43
+ }
44
+ declare const AboutFooterLine: React.ForwardRefExoticComponent<Omit<AboutFooterLineProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
45
+
46
+ type FamilyApp = 'health' | 'career' | 'study';
47
+ interface FamilyMember {
48
+ app: FamilyApp;
49
+ name: string;
50
+ tagline?: string;
51
+ href?: string;
52
+ github?: string;
53
+ website?: string;
54
+ }
55
+ interface FamilyCreator {
56
+ name: React.ReactNode;
57
+ role?: React.ReactNode;
58
+ href?: string;
59
+ }
60
+ interface FamilyBadgeProps extends Omit<React.ComponentProps<'div'>, 'title'> {
61
+ current: FamilyApp;
62
+ members?: ReadonlyArray<FamilyMember>;
63
+ creator?: FamilyCreator;
64
+ creatorLabel?: string;
65
+ hubUrl?: string;
66
+ label?: string;
67
+ blurb?: React.ReactNode;
68
+ ctaLabel?: string;
69
+ currentLabel?: string;
70
+ githubLabel?: string;
71
+ websiteLabel?: string;
72
+ theme?: LogoTheme;
73
+ }
74
+ declare const FamilyBadge: React.ForwardRefExoticComponent<Omit<FamilyBadgeProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
75
+
76
+ interface TechChipsProps extends React.ComponentProps<'div'> {
77
+ items: ReadonlyArray<string | null | undefined>;
78
+ }
79
+ declare const TechChips: React.ForwardRefExoticComponent<Omit<TechChipsProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
80
+
81
+ interface SponsorChannel {
82
+ id: string;
83
+ name: React.ReactNode;
84
+ href: string;
85
+ description?: React.ReactNode;
86
+ icon?: React.ComponentType<{
87
+ className?: string;
88
+ }>;
89
+ external?: boolean;
90
+ highlight?: boolean;
91
+ }
92
+ interface SponsorCardProps extends Omit<React.ComponentProps<'section'>, 'title'> {
93
+ channels: ReadonlyArray<SponsorChannel>;
94
+ title?: React.ReactNode;
95
+ description?: React.ReactNode;
96
+ footnote?: React.ReactNode;
97
+ channelsLabel?: string;
98
+ icon?: React.ReactNode;
99
+ heading?: 'h2' | 'h3' | 'h4';
100
+ }
101
+ declare const SponsorCard: React.ForwardRefExoticComponent<Omit<SponsorCardProps, "ref"> & React.RefAttributes<HTMLElement>>;
102
+
103
+ interface AboutCreator {
104
+ name: React.ReactNode;
105
+ role?: React.ReactNode;
106
+ href?: string;
107
+ links?: ReadonlyArray<AboutLinkItem>;
108
+ }
109
+ interface AboutLicense {
110
+ name: string;
111
+ href?: string;
112
+ }
113
+ interface AboutNoteContent {
114
+ tone?: 'info' | 'warning';
115
+ title?: React.ReactNode;
116
+ children: React.ReactNode;
117
+ }
118
+ interface AboutSponsorContent {
119
+ channels: ReadonlyArray<SponsorChannel>;
120
+ title?: React.ReactNode;
121
+ description?: React.ReactNode;
122
+ footnote?: React.ReactNode;
123
+ channelsLabel?: string;
124
+ }
125
+ interface AboutPanelProps extends React.ComponentProps<'div'> {
126
+ appName: string;
127
+ familyCurrent?: FamilyApp;
128
+ logo?: React.ReactNode;
129
+ tagline?: React.ReactNode;
130
+ description?: React.ReactNode;
131
+ version?: string;
132
+ license?: AboutLicense;
133
+ licenseTitle?: string;
134
+ licenseLinkLabel?: string;
135
+ links?: ReadonlyArray<AboutLinkItem>;
136
+ linksTitle?: string;
137
+ creator?: AboutCreator;
138
+ creatorTitle?: string;
139
+ tech?: ReadonlyArray<string>;
140
+ techTitle?: string;
141
+ note?: AboutNoteContent;
142
+ sponsor?: AboutSponsorContent;
143
+ familyMembers?: ReadonlyArray<FamilyMember>;
144
+ hubUrl?: string;
145
+ familyLabel?: string;
146
+ familyBlurb?: React.ReactNode;
147
+ familyCtaLabel?: string;
148
+ familyCurrentLabel?: string;
149
+ theme?: LogoTheme;
150
+ copyright?: React.ReactNode;
151
+ }
152
+ declare const AboutPanel: React.ForwardRefExoticComponent<Omit<AboutPanelProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
153
+
154
+ export { AboutCard, type AboutCardProps, type AboutCreator, AboutFooterLine, type AboutFooterLineProps, type AboutLicense, type AboutLinkItem, AboutLinkList, type AboutLinkListProps, AboutNote, type AboutNoteContent, type AboutNoteProps, AboutPanel, type AboutPanelProps, type AboutSponsorContent, type FamilyApp, FamilyBadge, type FamilyBadgeProps, type FamilyCreator, type FamilyMember, SponsorCard, type SponsorCardProps, type SponsorChannel, TechChips, type TechChipsProps };
package/dist/about.js ADDED
@@ -0,0 +1,3 @@
1
+ export { AboutCard, AboutFooterLine, AboutLinkList, AboutNote, AboutPanel, FamilyBadge, SponsorCard, TechChips } from './chunk-7RTSSBBR.js';
2
+ //# sourceMappingURL=about.js.map
3
+ //# sourceMappingURL=about.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"about.js"}
package/dist/badge.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const badgeVariants: (props?: ({
6
- variant?: "default" | "secondary" | "outline" | "success" | "warning" | "danger" | "ai" | null | undefined;
6
+ variant?: "default" | "warning" | "success" | "danger" | "secondary" | "outline" | "ai" | null | undefined;
7
7
  } & class_variance_authority_types.ClassProp) | undefined) => string;
8
8
  interface BadgeProps extends React.ComponentProps<'span'>, VariantProps<typeof badgeVariants> {
9
9
  }
package/dist/badge.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Badge, badgeVariants } from './chunk-SKTLC2XY.js';
1
+ export { Badge, badgeVariants } from './chunk-F4DP4PIM.js';
2
2
  //# sourceMappingURL=badge.js.map
3
3
  //# sourceMappingURL=badge.js.map
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+
3
+ interface CapabilityDescriptor {
4
+ value: string;
5
+ label: string;
6
+ }
7
+ interface CapabilityChipsProps {
8
+ caps: CapabilityDescriptor[];
9
+ selected: string[];
10
+ onToggle?: (value: string) => void;
11
+ variant?: 'toggle' | 'badge';
12
+ minSelected?: number;
13
+ disabled?: boolean;
14
+ ariaLabel?: string;
15
+ className?: string;
16
+ }
17
+ declare const CapabilityChips: React.ForwardRefExoticComponent<CapabilityChipsProps & React.RefAttributes<HTMLDivElement>>;
18
+
19
+ export { CapabilityChips, type CapabilityChipsProps, type CapabilityDescriptor };
@@ -0,0 +1,3 @@
1
+ export { CapabilityChips } from './chunk-MLQAA2QV.js';
2
+ //# sourceMappingURL=capability-chips.js.map
3
+ //# sourceMappingURL=capability-chips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"capability-chips.js"}
package/dist/card.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-HSWSYEFQ.js';
1
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './chunk-RYE5YCFF.js';
2
2
  //# sourceMappingURL=card.js.map
3
3
  //# sourceMappingURL=card.js.map
package/dist/chip-list.js CHANGED
@@ -1,3 +1,3 @@
1
- export { ChipList } from './chunk-BN3YHYYL.js';
1
+ export { ChipList } from './chunk-QUPGIPTT.js';
2
2
  //# sourceMappingURL=chip-list.js.map
3
3
  //# sourceMappingURL=chip-list.js.map
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-7EG3AUTS.js.map
3
+ //# sourceMappingURL=chunk-7EG3AUTS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7EG3AUTS.js"}