cortena-ui 1.4.2 → 1.5.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 (133) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +149 -1
  3. package/dist/a2ui/views.js +2 -2
  4. package/dist/agent-chat/a2ui-block.d.ts +60 -0
  5. package/dist/agent-chat/a2ui-block.js +69 -0
  6. package/dist/agent-chat/a2ui-block.js.map +1 -0
  7. package/dist/agent-chat/agui-client.d.ts +40 -0
  8. package/dist/agent-chat/agui-client.js +251 -0
  9. package/dist/agent-chat/agui-client.js.map +1 -0
  10. package/dist/agent-chat/bridge.d.ts +109 -0
  11. package/dist/agent-chat/bridge.js +349 -0
  12. package/dist/agent-chat/bridge.js.map +1 -0
  13. package/dist/agent-chat/session.d.ts +58 -0
  14. package/dist/agent-chat/session.js +249 -0
  15. package/dist/agent-chat/session.js.map +1 -0
  16. package/dist/agent-chat/store.d.ts +67 -0
  17. package/dist/agent-chat/store.js +548 -0
  18. package/dist/agent-chat/store.js.map +1 -0
  19. package/dist/agent-chat/types.d.ts +187 -0
  20. package/dist/agent-chat/types.js +17 -0
  21. package/dist/agent-chat/types.js.map +1 -0
  22. package/dist/agent-chat.d.ts +10 -0
  23. package/dist/agent-chat.js +10 -0
  24. package/dist/components/admin-permissions/admin-permissions.d.ts +66 -0
  25. package/dist/components/admin-permissions/admin-permissions.js +101 -0
  26. package/dist/components/admin-permissions/admin-permissions.js.map +1 -0
  27. package/dist/components/admin-permissions/context.d.ts +70 -0
  28. package/dist/components/admin-permissions/context.js +258 -0
  29. package/dist/components/admin-permissions/context.js.map +1 -0
  30. package/dist/components/admin-permissions/index.d.ts +10 -0
  31. package/dist/components/admin-permissions/licence.d.ts +15 -0
  32. package/dist/components/admin-permissions/licence.js +78 -0
  33. package/dist/components/admin-permissions/licence.js.map +1 -0
  34. package/dist/components/admin-permissions/matrix.d.ts +20 -0
  35. package/dist/components/admin-permissions/matrix.js +191 -0
  36. package/dist/components/admin-permissions/matrix.js.map +1 -0
  37. package/dist/components/admin-permissions/members.d.ts +18 -0
  38. package/dist/components/admin-permissions/members.js +185 -0
  39. package/dist/components/admin-permissions/members.js.map +1 -0
  40. package/dist/components/admin-permissions/role-assignment.d.ts +35 -0
  41. package/dist/components/admin-permissions/role-assignment.js +174 -0
  42. package/dist/components/admin-permissions/role-assignment.js.map +1 -0
  43. package/dist/components/admin-permissions/roles.d.ts +25 -0
  44. package/dist/components/admin-permissions/roles.js +168 -0
  45. package/dist/components/admin-permissions/roles.js.map +1 -0
  46. package/dist/components/admin-permissions/types.d.ts +152 -0
  47. package/dist/components/admin-permissions/types.js +63 -0
  48. package/dist/components/admin-permissions/types.js.map +1 -0
  49. package/dist/components/agent-chat-popup.d.ts +29 -0
  50. package/dist/components/agent-chat-popup.js +188 -0
  51. package/dist/components/agent-chat-popup.js.map +1 -0
  52. package/dist/components/agent-chat.d.ts +143 -0
  53. package/dist/components/agent-chat.js +578 -0
  54. package/dist/components/agent-chat.js.map +1 -0
  55. package/dist/components/app-shell.d.ts +126 -0
  56. package/dist/components/app-shell.js +297 -0
  57. package/dist/components/app-shell.js.map +1 -0
  58. package/dist/components/badge.d.ts +1 -1
  59. package/dist/components/button-link.js +1 -1
  60. package/dist/components/button.d.ts +2 -2
  61. package/dist/components/checkbox.d.ts +1 -1
  62. package/dist/components/combobox.d.ts +1 -1
  63. package/dist/components/combobox.js +1 -1
  64. package/dist/components/consent-screen.d.ts +65 -0
  65. package/dist/components/consent-screen.js +123 -0
  66. package/dist/components/consent-screen.js.map +1 -0
  67. package/dist/components/data-table/data-table.d.ts +15 -1
  68. package/dist/components/data-table/data-table.js +18 -4
  69. package/dist/components/data-table/data-table.js.map +1 -1
  70. package/dist/components/data-table/index.d.ts +4 -4
  71. package/dist/components/data-table/parts.d.ts +27 -3
  72. package/dist/components/data-table/parts.js +175 -55
  73. package/dist/components/data-table/parts.js.map +1 -1
  74. package/dist/components/data-table/types.d.ts +61 -0
  75. package/dist/components/data-table/use-data-table.js +91 -6
  76. package/dist/components/data-table/use-data-table.js.map +1 -1
  77. package/dist/components/data-table/use-server-source.js +119 -28
  78. package/dist/components/data-table/use-server-source.js.map +1 -1
  79. package/dist/components/help-panel.d.ts +131 -0
  80. package/dist/components/help-panel.js +545 -0
  81. package/dist/components/help-panel.js.map +1 -0
  82. package/dist/components/login-screen.d.ts +127 -0
  83. package/dist/components/login-screen.js +339 -0
  84. package/dist/components/login-screen.js.map +1 -0
  85. package/dist/components/session-guard.d.ts +268 -0
  86. package/dist/components/session-guard.js +632 -0
  87. package/dist/components/session-guard.js.map +1 -0
  88. package/dist/components/toast.d.ts +1 -1
  89. package/dist/core.d.ts +5 -1
  90. package/dist/core.js +11 -7
  91. package/dist/data-table.d.ts +13 -4
  92. package/dist/data-table.js +10 -2
  93. package/dist/hooks/use-cortena-theme.js +49 -3
  94. package/dist/hooks/use-cortena-theme.js.map +1 -1
  95. package/dist/index.d.ts +17 -4
  96. package/dist/index.js +21 -8
  97. package/dist/markdown.d.ts +2 -1
  98. package/dist/markdown.js +2 -1
  99. package/package.json +16 -4
  100. package/src/agent-chat/a2ui-block.ts +118 -0
  101. package/src/agent-chat/agui-client.ts +405 -0
  102. package/src/agent-chat/bridge.ts +433 -0
  103. package/src/agent-chat/session.ts +392 -0
  104. package/src/agent-chat/store.ts +738 -0
  105. package/src/agent-chat/types.ts +213 -0
  106. package/src/components/admin-permissions/admin-permissions.tsx +130 -0
  107. package/src/components/admin-permissions/context.tsx +376 -0
  108. package/src/components/admin-permissions/index.tsx +32 -0
  109. package/src/components/admin-permissions/licence.tsx +84 -0
  110. package/src/components/admin-permissions/matrix.tsx +257 -0
  111. package/src/components/admin-permissions/members.tsx +204 -0
  112. package/src/components/admin-permissions/role-assignment.tsx +239 -0
  113. package/src/components/admin-permissions/roles.tsx +169 -0
  114. package/src/components/admin-permissions/types.ts +231 -0
  115. package/src/components/agent-chat-popup.tsx +289 -0
  116. package/src/components/agent-chat.tsx +843 -0
  117. package/src/components/app-shell.tsx +502 -0
  118. package/src/components/consent-screen.tsx +239 -0
  119. package/src/components/data-table/data-table.tsx +36 -0
  120. package/src/components/data-table/index.tsx +6 -1
  121. package/src/components/data-table/parts.tsx +223 -47
  122. package/src/components/data-table/types.ts +68 -0
  123. package/src/components/data-table/use-data-table.ts +152 -4
  124. package/src/components/data-table/use-server-source.ts +150 -12
  125. package/src/components/help-panel.tsx +765 -0
  126. package/src/components/login-screen.tsx +479 -0
  127. package/src/components/session-guard.tsx +1071 -0
  128. package/src/entries/agent-chat.ts +113 -0
  129. package/src/entries/core.ts +8 -0
  130. package/src/entries/data-table.ts +41 -0
  131. package/src/entries/markdown.ts +25 -0
  132. package/src/hooks/use-cortena-theme.ts +63 -4
  133. package/src/index.ts +6 -0
package/dist/index.js CHANGED
@@ -3,22 +3,27 @@ import { cn } from "./lib/cn.js";
3
3
  import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "./components/accordion.js";
4
4
  import { Alert, AlertDescription, AlertIcon, AlertTitle, alertVariants } from "./components/alert.js";
5
5
  import { Avatar, AvatarFallback, AvatarImage } from "./components/avatar.js";
6
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./components/dropdown-menu.js";
7
+ import { DEFAULT_THEME_STORAGE_KEY, THEME_MESSAGE_TYPE, applyStoredTheme, applyTheme, getThemeInitScript, readStoredTheme, themeFromBackground, themeFromMessage, themeInitScript, useCortenaTheme } from "./hooks/use-cortena-theme.js";
8
+ import { AppShell, BottomRightCluster, BrandMark, HelpButton, ThemeToggle, documentTitle } from "./components/app-shell.js";
9
+ import { Button, buttonVariants } from "./components/button.js";
10
+ import { Input, inputClassName } from "./components/input.js";
11
+ import { Label, labelVariants } from "./components/label.js";
12
+ import { Spinner } from "./components/spinner.js";
13
+ import { AuthScreen, GoogleMark, LoginScreen, MicrosoftMark, httpsLogoUrl } from "./components/login-screen.js";
6
14
  import { Badge, badgeVariants } from "./components/badge.js";
7
15
  import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/breadcrumb.js";
8
- import { Button, buttonVariants } from "./components/button.js";
9
16
  import { ButtonLink } from "./components/button-link.js";
10
17
  import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./components/card.js";
11
18
  import { Checkbox } from "./components/checkbox.js";
12
19
  import { Chip, chipVariants } from "./components/chip.js";
13
- import { Input, inputClassName } from "./components/input.js";
14
20
  import { Combobox, ComboboxChip, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, useComboboxFilter } from "./components/combobox.js";
15
21
  import { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from "./components/dialog.js";
16
22
  import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandSeparator, CommandShortcut } from "./components/command.js";
17
- import { DEFAULT_THEME_STORAGE_KEY, THEME_MESSAGE_TYPE, applyStoredTheme, applyTheme, getThemeInitScript, readStoredTheme, themeFromBackground, themeFromMessage, themeInitScript, useCortenaTheme } from "./hooks/use-cortena-theme.js";
18
- import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./components/dropdown-menu.js";
23
+ import { ConsentScreen } from "./components/consent-screen.js";
24
+ import { DEFAULT_SESSION_POLICY, SESSION_CHANNEL_NAME, SessionExpiryDialog, SessionGuard, decodeSessionClaims, formatCountdown, useSessionGuard } from "./components/session-guard.js";
19
25
  import { EmptyState } from "./components/empty-state.js";
20
26
  import { ErrorBanner } from "./components/error-banner.js";
21
- import { Label, labelVariants } from "./components/label.js";
22
27
  import { Field, FieldContent, FieldControl, FieldDescription, FieldError, FieldGroup, FieldLabel, Fieldset, FieldsetLegend, fieldVariants } from "./components/field.js";
23
28
  import { Kbd } from "./components/kbd.js";
24
29
  import { Skeleton } from "./components/skeleton.js";
@@ -33,7 +38,6 @@ import { Segmented } from "./components/segmented.js";
33
38
  import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "./components/select.js";
34
39
  import { Separator } from "./components/separator.js";
35
40
  import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, sheetVariants } from "./components/sheet.js";
36
- import { Spinner } from "./components/spinner.js";
37
41
  import { StatusDot } from "./components/status-dot.js";
38
42
  import { Switch } from "./components/switch.js";
39
43
  import { Tabs, TabsContent, TabsIndicator, TabsList, TabsTrigger } from "./components/tabs.js";
@@ -47,10 +51,18 @@ import { DatePicker, DateRangePicker, formatDateDefault } from "./components/dat
47
51
  import { Dropzone, FileList, formatFileSize } from "./components/dropzone.js";
48
52
  import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useForm, useFormField, zodResolver } from "./components/form.js";
49
53
  import { downloadCsv, downloadExcel, toCsv, toSheet } from "./components/data-table/export.js";
50
- import { DataTableColumnHeader, DataTableExportMenu, DataTableFacetedFilter, DataTablePagination, DataTableToolbar, DataTableViewOptions } from "./components/data-table/parts.js";
54
+ import { DataTableColumnHeader, DataTableExportMenu, DataTableFacetedFilter, DataTablePagination, DataTableRefresh, DataTableToolbar, DataTableViewOptions } from "./components/data-table/parts.js";
51
55
  import { createColumnHelper, dataTableFeatures } from "./components/data-table/features.js";
52
56
  import { useDataTable } from "./components/data-table/use-data-table.js";
53
57
  import { DataTable, DataTableView } from "./components/data-table/data-table.js";
58
+ import { ADMIN_ROUTES, ADMIN_ROUTE_LABELS, adminErrorMessage, effectiveRolesOf, sourceGroupOf } from "./components/admin-permissions/types.js";
59
+ import { AdminPermissionsProvider, useAdminPermissions } from "./components/admin-permissions/context.js";
60
+ import { AdminLicenceScreen } from "./components/admin-permissions/licence.js";
61
+ import { AdminMatrix } from "./components/admin-permissions/matrix.js";
62
+ import { DirectRoles, EffectiveRoles, RoleAssignmentDialog } from "./components/admin-permissions/role-assignment.js";
63
+ import { AdminMembers } from "./components/admin-permissions/members.js";
64
+ import { AdminRoles } from "./components/admin-permissions/roles.js";
65
+ import { AdminPermissions } from "./components/admin-permissions/admin-permissions.js";
54
66
  import { VIZ_SERIES_COUNT, chartScales, resolveColor, resolveVizSeries, toHex, vizSeriesVars, vizVar } from "./components/chart/tokens.js";
55
67
  import { ChartContainer, ChartEmpty, ChartError, ChartLegendContent, ChartLoading, ChartTooltipContent, seriesColor, useChart } from "./components/chart/container.js";
56
68
  import { NIVO_TYPES, RECHARTS_TYPES, chartEngine } from "./components/chart/types.js";
@@ -58,9 +70,10 @@ import { Chart } from "./components/chart/chart.js";
58
70
  import { ChartLegend, ChartTooltip } from "./components/chart/recharts-parts.js";
59
71
  import { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, ComposedChart, Funnel, FunnelChart, LabelList, Line, LineChart, Pie, PieChart, PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart, RechartsLegend, RechartsTooltip, ReferenceLine, ResponsiveContainer, Scatter, ScatterChart, XAxis, YAxis } from "./components/chart/index.js";
60
72
  import { Markdown, markdownSanitizeSchema } from "./components/markdown.js";
73
+ import { HelpHotkeys, HelpPanel, helpPanelSlot, httpDocumentUrl, parseHelpDocument, resolveHelpTarget, useHelpHotkeys } from "./components/help-panel.js";
61
74
  import { A2UIErrorCard } from "./a2ui/views.js";
62
75
  import { A2UI_CATALOGUE_ID, catalogueNames, defaultCatalogue } from "./a2ui/catalogue.js";
63
76
  import { A2UI_DEFAULT_SURFACE_ID, A2UI_VERSION, foldMessages, getAtPointer, isDataBinding, parseA2UIMessages, pointerSegments, readAction, readChildren, readComponent, resolvePointer, resolveValue, setAtPointer } from "./a2ui/message.js";
64
77
  import { A2UIRenderer } from "./a2ui/renderer.js";
65
78
  import { SortableHandle, SortableList, arrayMove } from "./components/sortable-list.js";
66
- export { A2UIErrorCard, A2UIRenderer, A2UI_CATALOGUE_ID, A2UI_DEFAULT_SURFACE_ID, A2UI_VERSION, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertIcon, AlertTitle, Area, AreaChart, Avatar, AvatarFallback, AvatarImage, Badge, Bar, BarChart, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonLink, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CartesianGrid, Cell, Chart, ChartContainer, ChartEmpty, ChartError, ChartLegend, ChartLegendContent, ChartLoading, ChartTooltip, ChartTooltipContent, Checkbox, Chip, Combobox, ComboboxChip, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandSeparator, CommandShortcut, ComposedChart, DEFAULT_THEME_STORAGE_KEY, DataTable, DataTableColumnHeader, DataTableExportMenu, DataTableFacetedFilter, DataTablePagination, DataTableToolbar, DataTableView, DataTableViewOptions, DateField, DatePicker, DateRangePicker, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, EmptyState, ErrorBanner, Field, FieldContent, FieldControl, FieldDescription, FieldError, FieldGroup, FieldLabel, Fieldset, FieldsetLegend, FileList, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Funnel, FunnelChart, Input, Kbd, Label, LabelList, Line, LineChart, LoadingSkeleton, Markdown, NIVO_TYPES, PageHeader, Pie, PieChart, PolarAngleAxis, PolarGrid, PolarRadiusAxis, Popover, PopoverClose, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RECHARTS_TYPES, Radar, RadarChart, RadioGroup, RadioGroupItem, RechartsLegend, RechartsTooltip, ReferenceLine, ResponsiveContainer, Scatter, ScatterChart, ScrollArea, ScrollBar, SectionCard, Segmented, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SortableHandle, SortableList, Spinner, StatusDot, Switch, THEME_MESSAGE_TYPE, Tabs, TabsContent, TabsIndicator, TabsList, TabsTrigger, Textarea, Toast, Toaster, Toolbar, ToolbarEnd, ToolbarSeparator, ToolbarStart, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIZ_SERIES_COUNT, XAxis, YAxis, alertVariants, applyStoredTheme, applyTheme, arrayMove, badgeVariants, buttonVariants, catalogueNames, chartEngine, chartScales, chipVariants, cn, createColumnHelper, dataTableFeatures, defaultCatalogue, downloadCsv, downloadExcel, fieldVariants, foldMessages, formatDateDefault, formatDateISO, formatDateLong, formatDateShort, formatFileSize, formatRelative, getAtPointer, getThemeInitScript, inputClassName, isDataBinding, labelVariants, markdownSanitizeSchema, parseA2UIMessages, parseDateDefault, parseDateISO, pointerSegments, readAction, readChildren, readComponent, readStoredTheme, resolveColor, resolvePointer, resolveValue, resolveVizSeries, seriesColor, setAtPointer, sheetVariants, textareaClassName, themeFromBackground, themeFromMessage, themeInitScript, toCsv, toHex, toSheet, toastVariants, useChart, useComboboxFilter, useCortenaTheme, useDataTable, useForm, useFormField, useToast, vizSeriesVars, vizVar, zodResolver };
79
+ export { A2UIErrorCard, A2UIRenderer, A2UI_CATALOGUE_ID, A2UI_DEFAULT_SURFACE_ID, A2UI_VERSION, ADMIN_ROUTES, ADMIN_ROUTE_LABELS, Accordion, AccordionContent, AccordionItem, AccordionTrigger, AdminLicenceScreen, AdminMatrix, AdminMembers, AdminPermissions, AdminPermissionsProvider, AdminRoles, Alert, AlertDescription, AlertIcon, AlertTitle, AppShell, Area, AreaChart, AuthScreen, Avatar, AvatarFallback, AvatarImage, Badge, Bar, BarChart, BottomRightCluster, BrandMark, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonLink, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CartesianGrid, Cell, Chart, ChartContainer, ChartEmpty, ChartError, ChartLegend, ChartLegendContent, ChartLoading, ChartTooltip, ChartTooltipContent, Checkbox, Chip, Combobox, ComboboxChip, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandSeparator, CommandShortcut, ComposedChart, ConsentScreen, DEFAULT_SESSION_POLICY, DEFAULT_THEME_STORAGE_KEY, DataTable, DataTableColumnHeader, DataTableExportMenu, DataTableFacetedFilter, DataTablePagination, DataTableRefresh, DataTableToolbar, DataTableView, DataTableViewOptions, DateField, DatePicker, DateRangePicker, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectRoles, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, EffectiveRoles, EmptyState, ErrorBanner, Field, FieldContent, FieldControl, FieldDescription, FieldError, FieldGroup, FieldLabel, Fieldset, FieldsetLegend, FileList, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Funnel, FunnelChart, GoogleMark, HelpButton, HelpHotkeys, HelpPanel, Input, Kbd, Label, LabelList, Line, LineChart, LoadingSkeleton, LoginScreen, Markdown, MicrosoftMark, NIVO_TYPES, PageHeader, Pie, PieChart, PolarAngleAxis, PolarGrid, PolarRadiusAxis, Popover, PopoverClose, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger, Progress, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, RECHARTS_TYPES, Radar, RadarChart, RadioGroup, RadioGroupItem, RechartsLegend, RechartsTooltip, ReferenceLine, ResponsiveContainer, RoleAssignmentDialog, SESSION_CHANNEL_NAME, Scatter, ScatterChart, ScrollArea, ScrollBar, SectionCard, Segmented, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, SessionExpiryDialog, SessionGuard, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SortableHandle, SortableList, Spinner, StatusDot, Switch, THEME_MESSAGE_TYPE, Tabs, TabsContent, TabsIndicator, TabsList, TabsTrigger, Textarea, ThemeToggle, Toast, Toaster, Toolbar, ToolbarEnd, ToolbarSeparator, ToolbarStart, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIZ_SERIES_COUNT, XAxis, YAxis, adminErrorMessage, alertVariants, applyStoredTheme, applyTheme, arrayMove, badgeVariants, buttonVariants, catalogueNames, chartEngine, chartScales, chipVariants, cn, createColumnHelper, dataTableFeatures, decodeSessionClaims, defaultCatalogue, documentTitle, downloadCsv, downloadExcel, effectiveRolesOf, fieldVariants, foldMessages, formatCountdown, formatDateDefault, formatDateISO, formatDateLong, formatDateShort, formatFileSize, formatRelative, getAtPointer, getThemeInitScript, helpPanelSlot, httpDocumentUrl, httpsLogoUrl, inputClassName, isDataBinding, labelVariants, markdownSanitizeSchema, parseA2UIMessages, parseDateDefault, parseDateISO, parseHelpDocument, pointerSegments, readAction, readChildren, readComponent, readStoredTheme, resolveColor, resolveHelpTarget, resolvePointer, resolveValue, resolveVizSeries, seriesColor, setAtPointer, sheetVariants, sourceGroupOf, textareaClassName, themeFromBackground, themeFromMessage, themeInitScript, toCsv, toHex, toSheet, toastVariants, useAdminPermissions, useChart, useComboboxFilter, useCortenaTheme, useDataTable, useForm, useFormField, useHelpHotkeys, useSessionGuard, useToast, vizSeriesVars, vizVar, zodResolver };
@@ -1,3 +1,4 @@
1
1
  "use client";
2
2
  import { CodeRendererProps, Markdown, MarkdownComponents as Components, MarkdownProps, markdownSanitizeSchema } from "./components/markdown.js";
3
- export { type CodeRendererProps, Markdown, type Components as MarkdownComponents, type MarkdownProps, markdownSanitizeSchema };
3
+ import { HelpDocument, HelpHotkeys, HelpHotkeysOptions, HelpHotkeysProps, HelpPanel, HelpPanelProps, HelpPanelSlotConfig, HelpRoute, HelpSection, HelpSource, helpPanelSlot, httpDocumentUrl, parseHelpDocument, resolveHelpTarget, useHelpHotkeys } from "./components/help-panel.js";
4
+ export { type CodeRendererProps, type HelpDocument, HelpHotkeys, type HelpHotkeysOptions, type HelpHotkeysProps, HelpPanel, type HelpPanelProps, type HelpPanelSlotConfig, type HelpRoute, type HelpSection, type HelpSource, Markdown, type Components as MarkdownComponents, type MarkdownProps, helpPanelSlot, httpDocumentUrl, markdownSanitizeSchema, parseHelpDocument, resolveHelpTarget, useHelpHotkeys };
package/dist/markdown.js CHANGED
@@ -1,3 +1,4 @@
1
1
  "use client";
2
2
  import { Markdown, markdownSanitizeSchema } from "./components/markdown.js";
3
- export { Markdown, markdownSanitizeSchema };
3
+ import { HelpHotkeys, HelpPanel, helpPanelSlot, httpDocumentUrl, parseHelpDocument, resolveHelpTarget, useHelpHotkeys } from "./components/help-panel.js";
4
+ export { HelpHotkeys, HelpPanel, Markdown, helpPanelSlot, httpDocumentUrl, markdownSanitizeSchema, parseHelpDocument, resolveHelpTarget, useHelpHotkeys };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "cortena-ui",
3
- "version": "1.4.2",
4
- "description": "Cortena UI — the shared React component library for cortenaweb and every Cortena extension. shadcn over Base UI, styled entirely from cortena-design tokens.",
5
- "license": "UNLICENSED",
3
+ "version": "1.5.0",
4
+ "description": "Cortena UI \u2014 the shared React component library for cortenaweb and every Cortena extension. shadcn over Base UI, styled entirely from cortena-design tokens.",
5
+ "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/AscendendenceAI/cortena-design.git",
@@ -16,6 +16,7 @@
16
16
  "node": ">=22"
17
17
  },
18
18
  "files": [
19
+ "LICENSE",
19
20
  "dist",
20
21
  "src",
21
22
  "README.md"
@@ -53,6 +54,10 @@
53
54
  "types": "./dist/sortable-list.d.ts",
54
55
  "default": "./dist/sortable-list.js"
55
56
  },
57
+ "./agent-chat": {
58
+ "types": "./dist/agent-chat.d.ts",
59
+ "default": "./dist/agent-chat.js"
60
+ },
56
61
  "./styles.css": "./src/styles/index.css",
57
62
  "./package.json": "./package.json"
58
63
  },
@@ -69,8 +74,9 @@
69
74
  "bundle:probe": "node scripts/bundle-probe.mjs"
70
75
  },
71
76
  "peerDependencies": {
77
+ "@ag-ui/client": "^0.0.59",
72
78
  "@tanstack/react-query": "^5.0.0",
73
- "cortena-design": ">=3.2.0",
79
+ "cortena-design": ">=3.4.0",
74
80
  "react": "^19.0.0",
75
81
  "react-dom": "^19.0.0",
76
82
  "zod": "^3.25.0 || ^4.0.0"
@@ -108,6 +114,7 @@
108
114
  "tw-animate-css": "^1.4.0"
109
115
  },
110
116
  "devDependencies": {
117
+ "@ag-ui/client": "^0.0.59",
111
118
  "@tailwindcss/vite": "^4.3.3",
112
119
  "@tanstack/react-query": "^5.102.8",
113
120
  "@types/node": "^22.20.1",
@@ -130,5 +137,10 @@
130
137
  },
131
138
  "publishConfig": {
132
139
  "access": "public"
140
+ },
141
+ "peerDependenciesMeta": {
142
+ "@ag-ui/client": {
143
+ "optional": true
144
+ }
133
145
  }
134
146
  }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * A2UI blocks as the chat carries them.
3
+ *
4
+ * Ported from `cortena-shared/src/a2ui/block.ts` (Cortena monorepo, DESIGN-35).
5
+ * `cortena-shared` is not published, so the parts this package needs are copied
6
+ * rather than imported; keep the two in step when either changes.
7
+ *
8
+ * An agent draws UI by writing a ```a2ui fenced block, cortenacore strips it out
9
+ * of the prose, and it reaches the client on a channel of its own — a
10
+ * `CUSTOM cortena.a2ui` event on the AG-UI transport. Both the streaming bubble
11
+ * and the finished message carry the result here, so the bubble has exactly one
12
+ * thing to render and no markdown to parse.
13
+ *
14
+ * Nothing in this module knows about React: the `messages` array is handed to
15
+ * `<A2UIRenderer message={...} />` verbatim, and folding a surface, validating a
16
+ * component and drawing it are the renderer's job.
17
+ */
18
+
19
+ /** One block, as the transport delivers it. */
20
+ export interface A2UIChatBlock {
21
+ /**
22
+ * Accumulation key: the surface id the payload names, or a key private to the
23
+ * block when it names none. Two blocks with the same key are two pushes to one
24
+ * surface and fold together.
25
+ */
26
+ surfaceId: string;
27
+ /** A2UI messages, in arrival order. */
28
+ messages: unknown[];
29
+ /** Where the block came from: assistant text, or a `canvas` tool push. */
30
+ source?: "text" | "canvas";
31
+ /** Assistant message the block belonged to, when the transport knows it. */
32
+ messageId?: string;
33
+ /** Set when the fence never closed or its body did not parse. */
34
+ error?: string;
35
+ /** The raw fence body; only present with `error`. */
36
+ raw?: string;
37
+ }
38
+
39
+ function isRecord(value: unknown): value is Record<string, unknown> {
40
+ return typeof value === "object" && value !== null && !Array.isArray(value);
41
+ }
42
+
43
+ /** Read one block out of an unknown wire value; `null` when it is not one. */
44
+ export function readA2UIBlock(value: unknown): A2UIChatBlock | null {
45
+ if (!isRecord(value)) {
46
+ return null;
47
+ }
48
+ const messages = Array.isArray(value.messages) ? value.messages : [];
49
+ const surfaceId =
50
+ typeof value.surfaceId === "string" && value.surfaceId ? value.surfaceId : "@default";
51
+ const error = typeof value.error === "string" && value.error ? value.error : undefined;
52
+ if (messages.length === 0 && !error) {
53
+ return null;
54
+ }
55
+ return {
56
+ surfaceId,
57
+ messages,
58
+ ...(value.source === "canvas" || value.source === "text" ? { source: value.source } : {}),
59
+ ...(typeof value.messageId === "string" && value.messageId
60
+ ? { messageId: value.messageId }
61
+ : {}),
62
+ ...(error ? { error } : {}),
63
+ ...(typeof value.raw === "string" ? { raw: value.raw } : {}),
64
+ };
65
+ }
66
+
67
+ /**
68
+ * Pull the `a2ui` content parts out of a chat event message.
69
+ *
70
+ * A client that does not know the type ignores it, which is what lets the same
71
+ * message shape carry blocks to a reader that cannot draw them.
72
+ */
73
+ export function extractA2UIBlocks(
74
+ message?: { content?: Array<Record<string, unknown>> } | null,
75
+ ): A2UIChatBlock[] {
76
+ const blocks: A2UIChatBlock[] = [];
77
+ for (const part of message?.content ?? []) {
78
+ if (!isRecord(part) || part.type !== "a2ui") {
79
+ continue;
80
+ }
81
+ const block = readA2UIBlock(part.a2ui ?? part);
82
+ if (block) {
83
+ blocks.push(block);
84
+ }
85
+ }
86
+ return foldA2UIBlocks(blocks);
87
+ }
88
+
89
+ /**
90
+ * Fold blocks that share a surface id into one, concatenating their messages.
91
+ *
92
+ * An agent that streams a surface writes the shell, then the rows, then a
93
+ * correction — three fences naming one surface. The renderer folds a message
94
+ * list onto a surface, so handing it the concatenation renders the finished
95
+ * surface; handing it three separate blocks would draw the shell three times.
96
+ */
97
+ export function foldA2UIBlocks(blocks: readonly A2UIChatBlock[]): A2UIChatBlock[] {
98
+ const byId = new Map<string, A2UIChatBlock>();
99
+ const order: string[] = [];
100
+ for (const block of blocks) {
101
+ const existing = byId.get(block.surfaceId);
102
+ if (!existing) {
103
+ byId.set(block.surfaceId, { ...block, messages: [...block.messages] });
104
+ order.push(block.surfaceId);
105
+ continue;
106
+ }
107
+ existing.messages.push(...block.messages);
108
+ // The first failure is the one worth showing: later ones are usually the
109
+ // same malformed payload arriving again.
110
+ if (block.error && !existing.error) {
111
+ existing.error = block.error;
112
+ if (block.raw !== undefined) {
113
+ existing.raw = block.raw;
114
+ }
115
+ }
116
+ }
117
+ return order.map((id) => byId.get(id)!).filter(Boolean);
118
+ }