@agent-native/toolkit 0.15.1 → 0.16.1

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 (60) hide show
  1. package/README.md +26 -0
  2. package/agent-native.eject.json +16 -0
  3. package/dist/composer/ComposerPlusMenu.d.ts.map +1 -1
  4. package/dist/composer/ComposerPlusMenu.js +29 -19
  5. package/dist/composer/ComposerPlusMenu.js.map +1 -1
  6. package/dist/composer/PromptComposer.d.ts +11 -1
  7. package/dist/composer/PromptComposer.d.ts.map +1 -1
  8. package/dist/composer/PromptComposer.js +2 -2
  9. package/dist/composer/PromptComposer.js.map +1 -1
  10. package/dist/composer/TiptapComposer.d.ts +30 -1
  11. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  12. package/dist/composer/TiptapComposer.js +255 -145
  13. package/dist/composer/TiptapComposer.js.map +1 -1
  14. package/dist/composer/TiptapComposer.spec.js +33 -1
  15. package/dist/composer/TiptapComposer.spec.js.map +1 -1
  16. package/dist/composer/index.d.ts +1 -0
  17. package/dist/composer/index.d.ts.map +1 -1
  18. package/dist/composer/index.js +1 -0
  19. package/dist/composer/index.js.map +1 -1
  20. package/dist/composer/model-selection.d.ts +12 -0
  21. package/dist/composer/model-selection.d.ts.map +1 -0
  22. package/dist/composer/model-selection.js +31 -0
  23. package/dist/composer/model-selection.js.map +1 -0
  24. package/dist/composer/model-selection.spec.d.ts +2 -0
  25. package/dist/composer/model-selection.spec.d.ts.map +1 -0
  26. package/dist/composer/model-selection.spec.js +38 -0
  27. package/dist/composer/model-selection.spec.js.map +1 -0
  28. package/dist/data-grid/DataGrid.d.ts +92 -0
  29. package/dist/data-grid/DataGrid.d.ts.map +1 -0
  30. package/dist/data-grid/DataGrid.js +315 -0
  31. package/dist/data-grid/DataGrid.js.map +1 -0
  32. package/dist/data-grid/DataGrid.spec.d.ts +2 -0
  33. package/dist/data-grid/DataGrid.spec.d.ts.map +1 -0
  34. package/dist/data-grid/DataGrid.spec.js +134 -0
  35. package/dist/data-grid/DataGrid.spec.js.map +1 -0
  36. package/dist/data-grid/index.d.ts +2 -0
  37. package/dist/data-grid/index.d.ts.map +1 -0
  38. package/dist/data-grid/index.js +2 -0
  39. package/dist/data-grid/index.js.map +1 -0
  40. package/dist/sharing/SharePrimitives.d.ts +14 -3
  41. package/dist/sharing/SharePrimitives.d.ts.map +1 -1
  42. package/dist/sharing/SharePrimitives.js +11 -3
  43. package/dist/sharing/SharePrimitives.js.map +1 -1
  44. package/dist/sharing/index.d.ts +1 -1
  45. package/dist/sharing/index.d.ts.map +1 -1
  46. package/dist/sharing/index.js +1 -1
  47. package/dist/sharing/index.js.map +1 -1
  48. package/package.json +15 -1
  49. package/src/composer/ComposerPlusMenu.tsx +122 -65
  50. package/src/composer/PromptComposer.tsx +21 -0
  51. package/src/composer/TiptapComposer.spec.ts +46 -0
  52. package/src/composer/TiptapComposer.tsx +721 -349
  53. package/src/composer/index.ts +6 -0
  54. package/src/composer/model-selection.spec.ts +45 -0
  55. package/src/composer/model-selection.ts +51 -0
  56. package/src/data-grid/DataGrid.spec.tsx +243 -0
  57. package/src/data-grid/DataGrid.tsx +754 -0
  58. package/src/data-grid/index.ts +15 -0
  59. package/src/sharing/SharePrimitives.tsx +47 -8
  60. package/src/sharing/index.ts +4 -0
@@ -0,0 +1,134 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { act } from "react";
4
+ import { createRoot } from "react-dom/client";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { DataGrid, dataGridColumnTemplate, } from "./index.js";
7
+ const columns = [
8
+ {
9
+ id: "name",
10
+ label: "Name",
11
+ width: 180,
12
+ getValue: (row) => row.name,
13
+ renderCell: ({ value }) => String(value ?? ""),
14
+ },
15
+ {
16
+ id: "status",
17
+ label: "Status",
18
+ width: 120,
19
+ getValue: (row) => row.status,
20
+ renderCell: ({ value }) => String(value ?? ""),
21
+ renderEditor: ({ value, onCommit }) => (_jsx("input", { "aria-label": "Status editor", defaultValue: String(value ?? ""), onKeyDown: (event) => {
22
+ if (event.key === "Enter")
23
+ onCommit(event.currentTarget.value);
24
+ } })),
25
+ },
26
+ ];
27
+ const rows = [
28
+ { id: "row-1", name: "First", status: "Open" },
29
+ { id: "row-2", name: "Second", status: "Closed" },
30
+ ];
31
+ describe("data-grid", () => {
32
+ it("builds a bounded template and includes the selection column only when requested", () => {
33
+ expect(dataGridColumnTemplate(columns, { name: 40 }, "none")).toBe("96px 120px");
34
+ expect(dataGridColumnTemplate(columns, { name: 220 }, "multiple")).toBe("40px 220px 120px");
35
+ });
36
+ describe("DataGrid", () => {
37
+ let container;
38
+ let root;
39
+ beforeEach(() => {
40
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
41
+ container = document.createElement("div");
42
+ document.body.appendChild(container);
43
+ root = createRoot(container);
44
+ });
45
+ afterEach(() => {
46
+ act(() => root.unmount());
47
+ container.remove();
48
+ vi.restoreAllMocks();
49
+ vi.unstubAllGlobals();
50
+ });
51
+ it("moves the active cell with arrows and commits an editor value", () => {
52
+ const onActiveCellChange = vi.fn();
53
+ const onCellCommit = vi.fn();
54
+ act(() => {
55
+ root.render(_jsx(DataGrid, { rows: rows, columns: columns, getRowId: (row) => row.id, onActiveCellChange: onActiveCellChange, onCellCommit: onCellCommit }));
56
+ });
57
+ const firstNameCell = container.querySelector('[data-data-grid-row-id="row-1"][data-data-grid-column-id="name"]');
58
+ expect(firstNameCell?.getAttribute("tabindex")).toBe("0");
59
+ act(() => {
60
+ firstNameCell?.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key: "ArrowRight" }));
61
+ });
62
+ expect(onActiveCellChange).toHaveBeenCalledWith({
63
+ rowId: "row-1",
64
+ columnId: "status",
65
+ editing: false,
66
+ });
67
+ const statusCell = container.querySelector('[data-data-grid-row-id="row-1"][data-data-grid-column-id="status"]');
68
+ act(() => {
69
+ statusCell?.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key: "Enter" }));
70
+ });
71
+ expect(container.querySelector('input[aria-label="Status editor"]')).not.toBeNull();
72
+ const input = container.querySelector('input[aria-label="Status editor"]');
73
+ expect(input).not.toBeNull();
74
+ if (input) {
75
+ input.value = "In progress";
76
+ act(() => {
77
+ input.dispatchEvent(new KeyboardEvent("keydown", { bubbles: true, key: "Enter" }));
78
+ });
79
+ }
80
+ expect(onCellCommit).toHaveBeenCalledWith({
81
+ row: rows[0],
82
+ rowIndex: 0,
83
+ column: columns[1],
84
+ previousValue: "Open",
85
+ value: "In progress",
86
+ });
87
+ });
88
+ it("supports controlled multi-row selection", () => {
89
+ const onSelectedRowIdsChange = vi.fn();
90
+ act(() => {
91
+ root.render(_jsx(DataGrid, { rows: rows, columns: columns, getRowId: (row) => row.id, selection: "multiple", onSelectedRowIdsChange: onSelectedRowIdsChange }));
92
+ });
93
+ const rowCheckbox = container.querySelector('[aria-label="Select row row-1"]');
94
+ act(() => rowCheckbox?.click());
95
+ expect(onSelectedRowIdsChange).toHaveBeenCalledTimes(1);
96
+ expect(Array.from(onSelectedRowIdsChange.mock.calls[0][0])).toEqual([
97
+ "row-1",
98
+ ]);
99
+ });
100
+ it("reports pointer-based column resizing through the app callback", () => {
101
+ const onColumnWidthsChange = vi.fn();
102
+ act(() => {
103
+ root.render(_jsx(DataGrid, { rows: rows, columns: columns, getRowId: (row) => row.id, onColumnWidthsChange: onColumnWidthsChange }));
104
+ });
105
+ const resizeHandle = container.querySelector('[aria-label="Resize name column"]');
106
+ expect(resizeHandle).not.toBeNull();
107
+ act(() => {
108
+ resizeHandle?.dispatchEvent(new PointerEvent("pointerdown", {
109
+ bubbles: true,
110
+ button: 0,
111
+ clientX: 100,
112
+ }));
113
+ document.dispatchEvent(new PointerEvent("pointermove", {
114
+ bubbles: true,
115
+ clientX: 180,
116
+ }));
117
+ document.dispatchEvent(new PointerEvent("pointerup", { bubbles: true, clientX: 180 }));
118
+ });
119
+ expect(onColumnWidthsChange).toHaveBeenLastCalledWith({ name: 260 });
120
+ });
121
+ it("lets an app own the outer header and body while sharing the grid template", () => {
122
+ const renderHeader = vi.fn(({ gridTemplateColumns }) => (_jsx("div", { "data-testid": "custom-header", style: { gridTemplateColumns } })));
123
+ const renderBody = vi.fn(({ gridTemplateColumns }) => (_jsx("div", { "data-testid": "custom-body", style: { gridTemplateColumns } })));
124
+ act(() => {
125
+ root.render(_jsx(DataGrid, { rows: rows, columns: columns, getRowId: (row) => row.id, renderHeader: renderHeader, renderBody: renderBody }));
126
+ });
127
+ expect(container.querySelector("[data-testid=custom-header]")).not.toBeNull();
128
+ expect(container.querySelector("[data-testid=custom-body]")).not.toBeNull();
129
+ expect(renderHeader).toHaveBeenCalledWith(expect.objectContaining({ gridTemplateColumns: "180px 120px" }));
130
+ expect(renderBody).toHaveBeenCalledWith(expect.objectContaining({ rows, columns }));
131
+ });
132
+ });
133
+ });
134
+ //# sourceMappingURL=DataGrid.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataGrid.spec.js","sourceRoot":"","sources":["../../src/data-grid/DataGrid.spec.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EACL,QAAQ,EACR,sBAAsB,GAEvB,MAAM,YAAY,CAAC;AAQpB,MAAM,OAAO,GAAmC;IAC9C;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;QAC3B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;KAC/C;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM;QAC7B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACrC,8BACa,eAAe,EAC1B,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EACjC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;oBAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC,GACD,CACH;KACF;CACF,CAAC;AAEF,MAAM,IAAI,GAAmB;IAC3B,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;IAC9C,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;CAClD,CAAC;AAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAChE,YAAY,CACb,CAAC;QACF,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CACrE,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,IAAI,SAAyB,CAAC;QAC9B,IAAI,IAAU,CAAC;QAEf,UAAU,CAAC,GAAG,EAAE;YACd,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;YAChD,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACb,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1B,SAAS,CAAC,MAAM,EAAE,CAAC;YACnB,EAAE,CAAC,eAAe,EAAE,CAAC;YACrB,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAE7B,GAAG,CAAC,GAAG,EAAE;gBACP,IAAI,CAAC,MAAM,CACT,KAAC,QAAQ,IACP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAC3C,kEAAkE,CACnE,CAAC;YACF,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE1D,GAAG,CAAC,GAAG,EAAE;gBACP,aAAa,EAAE,aAAa,CAC1B,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CACnE,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC;gBAC9C,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CACxC,oEAAoE,CACrE,CAAC;YACF,GAAG,CAAC,GAAG,EAAE;gBACP,UAAU,EAAE,aAAa,CACvB,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAC9D,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,CACJ,SAAS,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAC7D,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAEjB,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CACnC,mCAAmC,CACpC,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC;gBAC5B,GAAG,CAAC,GAAG,EAAE;oBACP,KAAK,CAAC,aAAa,CACjB,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAC9D,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC;gBACxC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;gBACZ,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClB,aAAa,EAAE,MAAM;gBACrB,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAEvC,GAAG,CAAC,GAAG,EAAE;gBACP,IAAI,CAAC,MAAM,CACT,KAAC,QAAQ,IACP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EACzB,SAAS,EAAC,UAAU,EACpB,sBAAsB,EAAE,sBAAsB,GAC9C,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CACzC,iCAAiC,CAClC,CAAC;YACF,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAClE,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,oBAAoB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAErC,GAAG,CAAC,GAAG,EAAE;gBACP,IAAI,CAAC,MAAM,CACT,KAAC,QAAQ,IACP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EACzB,oBAAoB,EAAE,oBAAoB,GAC1C,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAC1C,mCAAmC,CACpC,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAEpC,GAAG,CAAC,GAAG,EAAE;gBACP,YAAY,EAAE,aAAa,CACzB,IAAI,YAAY,CAAC,aAAa,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,CAAC;oBACT,OAAO,EAAE,GAAG;iBACb,CAAC,CACH,CAAC;gBACF,QAAQ,CAAC,aAAa,CACpB,IAAI,YAAY,CAAC,aAAa,EAAE;oBAC9B,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,GAAG;iBACb,CAAC,CACH,CAAC;gBACF,QAAQ,CAAC,aAAa,CACpB,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAC/D,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,oBAAoB,CAAC,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACnF,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CACtD,6BAAiB,eAAe,EAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,GAAI,CACpE,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CACpD,6BAAiB,aAAa,EAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,GAAI,CAClE,CAAC,CAAC;YAEH,GAAG,CAAC,GAAG,EAAE;gBACP,IAAI,CAAC,MAAM,CACT,KAAC,QAAQ,IACP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EACzB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,CACJ,SAAS,CAAC,aAAa,CAAC,6BAA6B,CAAC,CACvD,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,CACJ,SAAS,CAAC,aAAa,CAAC,2BAA2B,CAAC,CACrD,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACvC,MAAM,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC,CAChE,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DataGrid, clampDataGridColumnWidth, dataGridColumnTemplate, type DataGridActiveCell, type DataGridCellContext, type DataGridColumn, type DataGridCommitContext, type DataGridDirection, type DataGridEditorContext, type DataGridProps, type DataGridRowContext, type DataGridSelectionMode, type DataGridSlotContext, } from "./DataGrid.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-grid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DataGrid, clampDataGridColumnWidth, dataGridColumnTemplate, } from "./DataGrid.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-grid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,sBAAsB,GAWvB,MAAM,eAAe,CAAC"}
@@ -17,15 +17,26 @@ export interface ShareCopyRowProps {
17
17
  }
18
18
  /** Compact copy-only row. The underlying URL is deliberately not rendered. */
19
19
  export declare function ShareCopyRow({ value, label, description, disabled, className, copyLabel, copiedLabel, onCopy, }: ShareCopyRowProps): import("react").JSX.Element;
20
- export interface ShareAgentsSectionProps {
20
+ export interface ShareDisclosureSectionProps {
21
21
  children: ReactNode;
22
- label?: ReactNode;
22
+ label: ReactNode;
23
+ fallbackLabel?: string;
23
24
  defaultOpen?: boolean;
24
25
  open?: boolean;
25
26
  onOpenChange?: (open: boolean) => void;
26
27
  className?: string;
27
28
  contentClassName?: string;
28
29
  }
30
+ /** Shared expandable boundary for optional share-access details. */
31
+ export declare function ShareDisclosureSection({ children, label, fallbackLabel, defaultOpen, open, onOpenChange, className, contentClassName, }: ShareDisclosureSectionProps): import("react").JSX.Element;
32
+ export type ShareAgentsSectionProps = Omit<ShareDisclosureSectionProps, "label" | "fallbackLabel"> & {
33
+ label?: ReactNode;
34
+ };
29
35
  /** Shared expandable boundary for agent-readable sharing details. */
30
- export declare function ShareAgentsSection({ children, label, defaultOpen, open, onOpenChange, className, contentClassName, }: ShareAgentsSectionProps): import("react").JSX.Element;
36
+ export declare function ShareAgentsSection({ label, ...props }: ShareAgentsSectionProps): import("react").JSX.Element;
37
+ export type SharePeopleSectionProps = Omit<ShareDisclosureSectionProps, "label" | "fallbackLabel"> & {
38
+ label?: ReactNode;
39
+ };
40
+ /** Shared expandable boundary for individual people access. */
41
+ export declare function SharePeopleSection({ label, ...props }: SharePeopleSectionProps): import("react").JSX.Element;
31
42
  //# sourceMappingURL=SharePrimitives.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharePrimitives.d.ts","sourceRoot":"","sources":["../../src/sharing/SharePrimitives.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQnE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,iBAAiB,EACf,YAAY,GACZ,eAAe,GACf,eAAe,GACf,WAAW,GACX,UAAU,GACV,UAAU,GACV,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,MAAM,GACN,OAAO,CACV;IACC,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,kEAAkE;AAClE,eAAO,MAAM,YAAY,iHAmBxB,CAAC;AAGF,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;CACrE;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,WAAW,EACX,QAAgB,EAChB,SAAS,EACT,SAAkB,EAClB,WAAsB,EACtB,MAAM,GACP,EAAE,iBAAiB,+BAyCnB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,KAA2B,EAC3B,WAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,EAAE,uBAAuB,+BAgDzB"}
1
+ {"version":3,"file":"SharePrimitives.d.ts","sourceRoot":"","sources":["../../src/sharing/SharePrimitives.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQnE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,iBAAiB,EACf,YAAY,GACZ,eAAe,GACf,eAAe,GACf,WAAW,GACX,UAAU,GACV,UAAU,GACV,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,MAAM,GACN,OAAO,CACV;IACC,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,kEAAkE;AAClE,eAAO,MAAM,YAAY,iHAmBxB,CAAC;AAGF,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;CACrE;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,WAAW,EACX,QAAgB,EAChB,SAAS,EACT,SAAkB,EAClB,WAAsB,EACtB,MAAM,GACP,EAAE,iBAAiB,+BAyCnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,KAAK,EACL,aAA+B,EAC/B,WAAmB,EACnB,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,EAAE,2BAA2B,+BA+C7B;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,2BAA2B,EAC3B,OAAO,GAAG,eAAe,CAC1B,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,EACjC,KAA2B,EAC3B,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAQzB;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,2BAA2B,EAC3B,OAAO,GAAG,eAAe,CAC1B,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,EACjC,KAA4B,EAC5B,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAQzB"}
@@ -30,11 +30,11 @@ export function ShareCopyRow({ value, label, description, disabled = false, clas
30
30
  };
31
31
  return (_jsxs("div", { className: cn("flex items-center justify-between gap-3", className), children: [_jsxs("div", { className: "min-w-0", children: [label ? _jsx("div", { className: "text-sm font-medium", children: label }) : null, description ? (_jsx("div", { className: "text-xs text-muted-foreground", children: description })) : null] }), _jsx(ActionButton, { type: "button", emphasis: "outline", size: "compact", disabled: disabled, "aria-label": copied ? String(copiedLabel) : String(copyLabel), onPress: () => void handleCopy(), className: "h-9 shrink-0", children: copied ? copiedLabel : copyLabel })] }));
32
32
  }
33
- /** Shared expandable boundary for agent-readable sharing details. */
34
- export function ShareAgentsSection({ children, label = "Share with agents", defaultOpen = false, open, onOpenChange, className, contentClassName, }) {
33
+ /** Shared expandable boundary for optional share-access details. */
34
+ export function ShareDisclosureSection({ children, label, fallbackLabel = "Share details", defaultOpen = false, open, onOpenChange, className, contentClassName, }) {
35
35
  const [internalOpen, setInternalOpen] = useState(defaultOpen);
36
36
  const isOpen = open ?? internalOpen;
37
- const accessibleLabel = typeof label === "string" ? label : "Share with agents";
37
+ const accessibleLabel = typeof label === "string" ? label : fallbackLabel;
38
38
  const handleOpenChange = (nextOpen) => {
39
39
  if (open === undefined)
40
40
  setInternalOpen(nextOpen);
@@ -42,4 +42,12 @@ export function ShareAgentsSection({ children, label = "Share with agents", defa
42
42
  };
43
43
  return (_jsxs(Collapsible, { open: isOpen, onOpenChange: handleOpenChange, className: cn("overflow-hidden rounded-md border border-border", className), children: [_jsx(CollapsibleTrigger, { asChild: true, children: _jsx(ShareTrigger, { label: _jsxs(_Fragment, { children: [_jsx("span", { className: "min-w-0 truncate", children: label }), _jsx(IconChevronDown, { "aria-hidden": "true", className: cn("size-4 shrink-0 text-muted-foreground transition-transform", isOpen && "rotate-180") })] }), emphasis: "ghost", size: "default", "aria-label": accessibleLabel, title: accessibleLabel, "aria-expanded": isOpen, className: "flex min-h-10 w-full items-center justify-between gap-3 px-3 py-2 text-left text-sm font-medium hover:bg-muted/50 focus-visible:ring-inset" }) }), _jsx(CollapsibleContent, { className: cn("border-t border-border px-3 py-3", contentClassName), children: children })] }));
44
44
  }
45
+ /** Shared expandable boundary for agent-readable sharing details. */
46
+ export function ShareAgentsSection({ label = "Share with agents", ...props }) {
47
+ return (_jsx(ShareDisclosureSection, { ...props, label: label, fallbackLabel: "Share with agents" }));
48
+ }
49
+ /** Shared expandable boundary for individual people access. */
50
+ export function SharePeopleSection({ label = "People with access", ...props }) {
51
+ return (_jsx(ShareDisclosureSection, { ...props, label: label, fallbackLabel: "People with access" }));
52
+ }
45
53
  //# sourceMappingURL=SharePrimitives.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharePrimitives.js","sourceRoot":"","sources":["../../src/sharing/SharePrimitives.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SharePrimitives.js","sourceRoot":"","sources":["../../src/sharing/SharePrimitives.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { ShareAgentsSection, type ShareAgentsSectionProps, ShareCopyRow, type ShareCopyRowProps, ShareTrigger, type ShareTriggerProps, } from "./SharePrimitives.js";
1
+ export { ShareAgentsSection, type ShareAgentsSectionProps, ShareCopyRow, type ShareCopyRowProps, ShareDisclosureSection, type ShareDisclosureSectionProps, SharePeopleSection, type SharePeopleSectionProps, ShareTrigger, type ShareTriggerProps, } from "./SharePrimitives.js";
2
2
  export { VisibilityBadge, type VisibilityBadgeProps, } from "./VisibilityBadge.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sharing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,YAAY,EACZ,KAAK,iBAAiB,EACtB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sharing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,YAAY,EACZ,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC"}
@@ -1,3 +1,3 @@
1
- export { ShareAgentsSection, ShareCopyRow, ShareTrigger, } from "./SharePrimitives.js";
1
+ export { ShareAgentsSection, ShareCopyRow, ShareDisclosureSection, SharePeopleSection, ShareTrigger, } from "./SharePrimitives.js";
2
2
  export { VisibilityBadge, } from "./VisibilityBadge.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sharing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAElB,YAAY,EAEZ,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,GAEhB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sharing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAElB,YAAY,EAEZ,sBAAsB,EAEtB,kBAAkB,EAElB,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,GAEhB,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.15.1",
3
+ "version": "0.16.1",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -75,6 +75,20 @@
75
75
  "import": "./dist/dashboard/*.js",
76
76
  "default": "./dist/dashboard/*.js"
77
77
  },
78
+ "./data-grid": {
79
+ "types": "./dist/data-grid/index.d.ts",
80
+ "browser": "./dist/data-grid/index.js",
81
+ "development": "./dist/data-grid/index.js",
82
+ "import": "./dist/data-grid/index.js",
83
+ "default": "./dist/data-grid/index.js"
84
+ },
85
+ "./data-grid/*": {
86
+ "types": "./dist/data-grid/*.d.ts",
87
+ "browser": "./dist/data-grid/*.js",
88
+ "development": "./dist/data-grid/*.js",
89
+ "import": "./dist/data-grid/*.js",
90
+ "default": "./dist/data-grid/*.js"
91
+ },
78
92
  "./chat-history": {
79
93
  "types": "./dist/chat-history/index.d.ts",
80
94
  "browser": "./dist/chat-history/index.js",
@@ -11,6 +11,7 @@ import {
11
11
  IconLoader2,
12
12
  IconArrowLeft,
13
13
  IconX,
14
+ IconHelpCircle,
14
15
  } from "@tabler/icons-react";
15
16
  import React, {
16
17
  useState,
@@ -196,6 +197,39 @@ function formatAttachmentError(error: unknown, fallback: string): string {
196
197
  return error instanceof Error ? error.message : fallback;
197
198
  }
198
199
 
200
+ function MenuItemHelp({
201
+ label,
202
+ description,
203
+ }: {
204
+ label: string;
205
+ description?: string;
206
+ }) {
207
+ const normalizedDescription = description?.trim();
208
+ if (!normalizedDescription) return null;
209
+ return (
210
+ <Tooltip>
211
+ <TooltipTrigger asChild>
212
+ <span
213
+ role="img"
214
+ tabIndex={0}
215
+ aria-label={`${label}: ${normalizedDescription}`}
216
+ onClick={(event) => event.stopPropagation()}
217
+ className="flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
218
+ >
219
+ <IconHelpCircle
220
+ aria-hidden="true"
221
+ className="size-3"
222
+ strokeWidth={1.8}
223
+ />
224
+ </span>
225
+ </TooltipTrigger>
226
+ <TooltipContent side="right" className="max-w-xs">
227
+ {normalizedDescription}
228
+ </TooltipContent>
229
+ </Tooltip>
230
+ );
231
+ }
232
+
199
233
  function UploadOnlyAttachButton({
200
234
  onAttachmentError,
201
235
  }: Pick<ComposerPlusMenuProps, "onAttachmentError">) {
@@ -612,7 +646,11 @@ function ComposerPlusMenuFull({
612
646
  return (
613
647
  <div
614
648
  key={item.label}
615
- className={cn("relative", isSkill && "group/skill")}
649
+ className={cn(
650
+ "relative flex items-center hover:bg-accent/50",
651
+ isSkill && "group/skill",
652
+ isSkill && skillFlyoutOpen && "bg-accent/50",
653
+ )}
616
654
  onMouseEnter={(e) => {
617
655
  if (isSkill) {
618
656
  openSkillFlyout(e.currentTarget);
@@ -640,25 +678,25 @@ function ComposerPlusMenuFull({
640
678
  type="button"
641
679
  onClick={item.action}
642
680
  className={cn(
643
- "flex w-full items-center gap-2.5 px-3 py-2 text-start hover:bg-accent/50",
644
- isSkill && skillFlyoutOpen && "bg-accent/50",
681
+ "flex min-w-0 flex-1 items-center gap-2.5 px-3 py-2 text-start",
645
682
  )}
646
683
  >
647
684
  <span className="text-muted-foreground">{item.icon}</span>
648
- <div className="min-w-0 flex-1">
649
- <div className="text-[12px] font-medium text-foreground">
685
+ <span className="flex min-w-0 items-center gap-0.5">
686
+ <span className="min-w-0 truncate text-[12px] font-medium text-foreground">
650
687
  {item.label}
651
- </div>
652
- <div className="mt-0.5 text-[10px] text-muted-foreground/60">
653
- {item.desc}
654
- </div>
655
- </div>
656
- {isSkill && (
657
- <span className="ms-auto text-muted-foreground/60">
658
-
659
688
  </span>
660
- )}
689
+ <MenuItemHelp
690
+ label={item.label}
691
+ description={item.desc}
692
+ />
693
+ </span>
661
694
  </button>
695
+ {isSkill && (
696
+ <span className="me-3 ms-auto text-muted-foreground/60">
697
+
698
+ </span>
699
+ )}
662
700
  {isSkill && skillFlyoutOpen && (
663
701
  <div
664
702
  role="menu"
@@ -671,57 +709,76 @@ function ComposerPlusMenuFull({
671
709
  : "right-full mr-1",
672
710
  )}
673
711
  >
674
- <button
675
- type="button"
676
- onClick={() => {
677
- onSelectMode?.("skill");
678
- setSkillFlyoutOpen(false);
679
- setOpen(false);
680
- }}
681
- className="flex w-full items-center gap-2.5 px-3 py-2 text-start hover:bg-accent/50"
682
- >
683
- <span className="text-muted-foreground">
684
- <IconBulb className="h-3.5 w-3.5" />
685
- </span>
686
- <div className="min-w-0">
687
- <div className="text-[12px] font-medium text-foreground">
688
- {t("agentChat.composer.skill.createNew", {
689
- defaultValue: "Create new skill",
690
- })}
691
- </div>
692
- <div className="mt-0.5 text-[10px] text-muted-foreground/60">
693
- {t("agentChat.composer.skill.createDescription", {
694
- defaultValue:
695
- "Describe a skill and let the agent draft it",
696
- })}
697
- </div>
698
- </div>
699
- </button>
700
- <button
701
- type="button"
702
- onClick={() => {
703
- setSkillFlyoutOpen(false);
704
- skillFileInputRef.current?.click();
705
- }}
706
- className="flex w-full items-center gap-2.5 px-3 py-2 text-start hover:bg-accent/50"
707
- >
708
- <span className="text-muted-foreground">
709
- <IconUpload className="h-3.5 w-3.5" />
710
- </span>
711
- <div className="min-w-0">
712
- <div className="text-[12px] font-medium text-foreground">
713
- {t("agentChat.composer.skill.uploadFile", {
714
- defaultValue: "Upload skill file",
715
- })}
716
- </div>
717
- <div className="mt-0.5 text-[10px] text-muted-foreground/60">
718
- {t("agentChat.composer.skill.uploadDescription", {
719
- defaultValue:
720
- "Import an existing SKILL.md file",
721
- })}
722
- </div>
723
- </div>
724
- </button>
712
+ <div className="flex items-center hover:bg-accent/50">
713
+ <button
714
+ type="button"
715
+ onClick={() => {
716
+ onSelectMode?.("skill");
717
+ setSkillFlyoutOpen(false);
718
+ setOpen(false);
719
+ }}
720
+ className="flex min-w-0 flex-1 items-center gap-2.5 px-3 py-2 text-start"
721
+ >
722
+ <span className="text-muted-foreground">
723
+ <IconBulb className="h-3.5 w-3.5" />
724
+ </span>
725
+ <span className="flex min-w-0 items-center gap-0.5">
726
+ <span className="min-w-0 truncate text-[12px] font-medium text-foreground">
727
+ {t("agentChat.composer.skill.createNew", {
728
+ defaultValue: "Create new skill",
729
+ })}
730
+ </span>
731
+ <MenuItemHelp
732
+ label={t("agentChat.composer.skill.createNew", {
733
+ defaultValue: "Create new skill",
734
+ })}
735
+ description={t(
736
+ "agentChat.composer.skill.createDescription",
737
+ {
738
+ defaultValue:
739
+ "Describe a skill and let the agent draft it",
740
+ },
741
+ )}
742
+ />
743
+ </span>
744
+ </button>
745
+ </div>
746
+ <div className="flex items-center hover:bg-accent/50">
747
+ <button
748
+ type="button"
749
+ onClick={() => {
750
+ setSkillFlyoutOpen(false);
751
+ skillFileInputRef.current?.click();
752
+ }}
753
+ className="flex min-w-0 flex-1 items-center gap-2.5 px-3 py-2 text-start"
754
+ >
755
+ <span className="text-muted-foreground">
756
+ <IconUpload className="h-3.5 w-3.5" />
757
+ </span>
758
+ <span className="flex min-w-0 items-center gap-0.5">
759
+ <span className="min-w-0 truncate text-[12px] font-medium text-foreground">
760
+ {t("agentChat.composer.skill.uploadFile", {
761
+ defaultValue: "Upload skill file",
762
+ })}
763
+ </span>
764
+ <MenuItemHelp
765
+ label={t(
766
+ "agentChat.composer.skill.uploadFile",
767
+ {
768
+ defaultValue: "Upload skill file",
769
+ },
770
+ )}
771
+ description={t(
772
+ "agentChat.composer.skill.uploadDescription",
773
+ {
774
+ defaultValue:
775
+ "Import an existing SKILL.md file",
776
+ },
777
+ )}
778
+ />
779
+ </span>
780
+ </button>
781
+ </div>
725
782
  </div>
726
783
  )}
727
784
  </div>
@@ -47,6 +47,7 @@ import {
47
47
  import {
48
48
  DEFAULT_VOICE_DICTATION_ENABLED,
49
49
  TiptapComposer,
50
+ type ComposerAgentOption,
50
51
  type ComposerSubmitIntent,
51
52
  type TiptapComposerHandle,
52
53
  type TiptapComposerSubmitOptions,
@@ -99,6 +100,8 @@ export interface PromptComposerProps {
99
100
  preserveDraftOnSubmit?: boolean;
100
101
  /** Show the model selector (default: true). */
101
102
  showModelSelector?: boolean;
103
+ /** Controlled open state for hosts that resize around the model picker. */
104
+ modelSelectorOpen?: boolean;
102
105
  /** Show the legacy provider-level Auto model option (default: true). */
103
106
  showAutoModelOption?: boolean;
104
107
  /** Show the voice dictation button. Defaults to DEFAULT_VOICE_DICTATION_ENABLED. */
@@ -149,6 +152,14 @@ export interface PromptComposerProps {
149
152
  selectedEffort?: ReasoningEffort;
150
153
  onModelChange?: (model: string, engine: string) => void;
151
154
  onEffortChange?: (effort: ReasoningEffort) => void;
155
+ /** Local or hosted agent runtimes shown above the model list. */
156
+ availableAgents?: ComposerAgentOption[];
157
+ /** Selected agent runtime identifier. */
158
+ selectedAgent?: string;
159
+ /** Callback when the user picks an agent runtime. */
160
+ onAgentChange?: (agent: string) => void;
161
+ /** Called when the shared model picker opens or closes. */
162
+ onModelSelectorOpenChange?: (open: boolean) => void;
152
163
  /**
153
164
  * Enable server-backed model/provider status checks. Defaults off when the
154
165
  * host supplies model state and callbacks, otherwise on.
@@ -490,6 +501,7 @@ function PromptComposerInner({
490
501
  draftScope,
491
502
  preserveDraftOnSubmit = false,
492
503
  showModelSelector = true,
504
+ modelSelectorOpen,
493
505
  showAutoModelOption = true,
494
506
  voiceEnabled = DEFAULT_VOICE_DICTATION_ENABLED,
495
507
  attachmentsEnabled = true,
@@ -515,6 +527,10 @@ function PromptComposerInner({
515
527
  selectedEffort,
516
528
  onModelChange,
517
529
  onEffortChange,
530
+ availableAgents,
531
+ selectedAgent,
532
+ onAgentChange,
533
+ onModelSelectorOpenChange,
518
534
  modelStatusChecksEnabled,
519
535
  onTextChange,
520
536
  onConnectProvider,
@@ -687,12 +703,17 @@ function PromptComposerInner({
687
703
  onTextChange={onTextChange}
688
704
  draftScope={draftScope}
689
705
  selectedModel={composerModel}
706
+ modelSelectorOpen={modelSelectorOpen}
690
707
  selectedEffort={composerEffort}
691
708
  availableModels={composerModelGroups}
709
+ availableAgents={availableAgents}
710
+ selectedAgent={selectedAgent}
692
711
  showAutoModelOption={showAutoModelOption}
693
712
  modelListLoading={composerModelListLoading}
694
713
  onModelChange={handleModelChange}
695
714
  onEffortChange={handleEffortChange}
715
+ onAgentChange={onAgentChange}
716
+ onModelSelectorOpenChange={onModelSelectorOpenChange}
696
717
  providerConnectStatusEnabled={resolvedModelStatusChecksEnabled}
697
718
  onConnectProvider={onConnectProvider}
698
719
  onConnectLocalRuntime={onConnectLocalRuntime}