@opentabs-dev/opentabs-plugin-excel-online 0.0.74
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/README.md +159 -0
- package/dist/adapter.iife.js +15273 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/excel-api.d.ts +24 -0
- package/dist/excel-api.d.ts.map +1 -0
- package/dist/excel-api.js +130 -0
- package/dist/excel-api.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/add-named-item.d.ts +14 -0
- package/dist/tools/add-named-item.d.ts.map +1 -0
- package/dist/tools/add-named-item.js +29 -0
- package/dist/tools/add-named-item.js.map +1 -0
- package/dist/tools/add-table-column.d.ts +13 -0
- package/dist/tools/add-table-column.d.ts.map +1 -0
- package/dist/tools/add-table-column.js +29 -0
- package/dist/tools/add-table-column.js.map +1 -0
- package/dist/tools/add-table-row.d.ts +12 -0
- package/dist/tools/add-table-row.d.ts.map +1 -0
- package/dist/tools/add-table-row.js +26 -0
- package/dist/tools/add-table-row.js.map +1 -0
- package/dist/tools/add-worksheet.d.ts +12 -0
- package/dist/tools/add-worksheet.d.ts.map +1 -0
- package/dist/tools/add-worksheet.js +24 -0
- package/dist/tools/add-worksheet.js.map +1 -0
- package/dist/tools/calculate-workbook.d.ts +11 -0
- package/dist/tools/calculate-workbook.d.ts.map +1 -0
- package/dist/tools/calculate-workbook.js +28 -0
- package/dist/tools/calculate-workbook.js.map +1 -0
- package/dist/tools/clear-range.d.ts +13 -0
- package/dist/tools/clear-range.d.ts.map +1 -0
- package/dist/tools/clear-range.js +24 -0
- package/dist/tools/clear-range.js.map +1 -0
- package/dist/tools/create-chart.d.ts +21 -0
- package/dist/tools/create-chart.d.ts.map +1 -0
- package/dist/tools/create-chart.js +36 -0
- package/dist/tools/create-chart.js.map +1 -0
- package/dist/tools/create-table.d.ts +14 -0
- package/dist/tools/create-table.d.ts.map +1 -0
- package/dist/tools/create-table.js +28 -0
- package/dist/tools/create-table.js.map +1 -0
- package/dist/tools/delete-chart.d.ts +8 -0
- package/dist/tools/delete-chart.d.ts.map +1 -0
- package/dist/tools/delete-chart.js +23 -0
- package/dist/tools/delete-chart.js.map +1 -0
- package/dist/tools/delete-range.d.ts +12 -0
- package/dist/tools/delete-range.d.ts.map +1 -0
- package/dist/tools/delete-range.js +24 -0
- package/dist/tools/delete-range.js.map +1 -0
- package/dist/tools/delete-table-row.d.ts +8 -0
- package/dist/tools/delete-table-row.d.ts.map +1 -0
- package/dist/tools/delete-table-row.js +25 -0
- package/dist/tools/delete-table-row.js.map +1 -0
- package/dist/tools/delete-table.d.ts +7 -0
- package/dist/tools/delete-table.d.ts.map +1 -0
- package/dist/tools/delete-table.js +22 -0
- package/dist/tools/delete-table.js.map +1 -0
- package/dist/tools/delete-worksheet.d.ts +7 -0
- package/dist/tools/delete-worksheet.d.ts.map +1 -0
- package/dist/tools/delete-worksheet.js +22 -0
- package/dist/tools/delete-worksheet.js.map +1 -0
- package/dist/tools/evaluate-formula.d.ts +9 -0
- package/dist/tools/evaluate-formula.d.ts.map +1 -0
- package/dist/tools/evaluate-formula.js +44 -0
- package/dist/tools/evaluate-formula.js.map +1 -0
- package/dist/tools/get-current-user.d.ts +9 -0
- package/dist/tools/get-current-user.d.ts.map +1 -0
- package/dist/tools/get-current-user.js +25 -0
- package/dist/tools/get-current-user.js.map +1 -0
- package/dist/tools/get-range.d.ts +16 -0
- package/dist/tools/get-range.d.ts.map +1 -0
- package/dist/tools/get-range.js +22 -0
- package/dist/tools/get-range.js.map +1 -0
- package/dist/tools/get-table-columns.d.ts +11 -0
- package/dist/tools/get-table-columns.d.ts.map +1 -0
- package/dist/tools/get-table-columns.js +21 -0
- package/dist/tools/get-table-columns.js.map +1 -0
- package/dist/tools/get-table-rows.d.ts +10 -0
- package/dist/tools/get-table-rows.d.ts.map +1 -0
- package/dist/tools/get-table-rows.js +21 -0
- package/dist/tools/get-table-rows.js.map +1 -0
- package/dist/tools/get-used-range.d.ts +15 -0
- package/dist/tools/get-used-range.d.ts.map +1 -0
- package/dist/tools/get-used-range.js +21 -0
- package/dist/tools/get-used-range.js.map +1 -0
- package/dist/tools/get-workbook-info.d.ts +9 -0
- package/dist/tools/get-workbook-info.d.ts.map +1 -0
- package/dist/tools/get-workbook-info.js +29 -0
- package/dist/tools/get-workbook-info.js.map +1 -0
- package/dist/tools/insert-range.d.ts +20 -0
- package/dist/tools/insert-range.d.ts.map +1 -0
- package/dist/tools/insert-range.js +23 -0
- package/dist/tools/insert-range.js.map +1 -0
- package/dist/tools/list-charts.d.ts +14 -0
- package/dist/tools/list-charts.d.ts.map +1 -0
- package/dist/tools/list-charts.js +21 -0
- package/dist/tools/list-charts.js.map +1 -0
- package/dist/tools/list-named-items.d.ts +10 -0
- package/dist/tools/list-named-items.d.ts.map +1 -0
- package/dist/tools/list-named-items.js +19 -0
- package/dist/tools/list-named-items.js.map +1 -0
- package/dist/tools/list-tables.d.ts +13 -0
- package/dist/tools/list-tables.d.ts.map +1 -0
- package/dist/tools/list-tables.js +25 -0
- package/dist/tools/list-tables.js.map +1 -0
- package/dist/tools/list-worksheets.d.ts +10 -0
- package/dist/tools/list-worksheets.d.ts.map +1 -0
- package/dist/tools/list-worksheets.js +19 -0
- package/dist/tools/list-worksheets.js.map +1 -0
- package/dist/tools/schemas.d.ts +150 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +111 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/sort-range.d.ts +13 -0
- package/dist/tools/sort-range.d.ts.map +1 -0
- package/dist/tools/sort-range.js +43 -0
- package/dist/tools/sort-range.js.map +1 -0
- package/dist/tools/update-range.d.ts +19 -0
- package/dist/tools/update-range.d.ts.map +1 -0
- package/dist/tools/update-range.js +41 -0
- package/dist/tools/update-range.js.map +1 -0
- package/dist/tools/update-worksheet.d.ts +19 -0
- package/dist/tools/update-worksheet.d.ts.map +1 -0
- package/dist/tools/update-worksheet.js +32 -0
- package/dist/tools/update-worksheet.js.map +1 -0
- package/dist/tools.json +1781 -0
- package/package.json +55 -0
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# opentabs-plugin-excel-online
|
|
2
|
+
|
|
3
|
+
OpenTabs plugin for Microsoft Excel Online
|
|
4
|
+
|
|
5
|
+
## Project Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
excel-online/
|
|
9
|
+
├── package.json # Plugin metadata (name, opentabs field, dependencies)
|
|
10
|
+
├── icon.svg # Optional custom icon (square SVG, max 8KB)
|
|
11
|
+
├── icon-inactive.svg # Optional manual inactive icon override
|
|
12
|
+
├── src/
|
|
13
|
+
│ ├── index.ts # Plugin class (extends OpenTabsPlugin)
|
|
14
|
+
│ └── tools/ # One file per tool (using defineTool)
|
|
15
|
+
│ └── example.ts
|
|
16
|
+
└── dist/ # Build output (generated)
|
|
17
|
+
├── adapter.iife.js # Bundled adapter injected into matching tabs
|
|
18
|
+
└── tools.json # Tool schemas for MCP registration
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Configuration
|
|
22
|
+
|
|
23
|
+
Plugin metadata is defined in `package.json` under the `opentabs` field:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"name": "opentabs-plugin-excel-online",
|
|
28
|
+
"main": "dist/adapter.iife.js",
|
|
29
|
+
"opentabs": {
|
|
30
|
+
"displayName": "Excel Online",
|
|
31
|
+
"description": "OpenTabs plugin for Microsoft Excel Online",
|
|
32
|
+
"urlPatterns": ["*://*.excel.cloud.microsoft/*"]
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- **`main`** — entry point for the bundled adapter IIFE
|
|
38
|
+
- **`opentabs.displayName`** — human-readable name shown in the side panel
|
|
39
|
+
- **`opentabs.description`** — short description of what the plugin does
|
|
40
|
+
- **`opentabs.urlPatterns`** — Chrome match patterns for tabs where the adapter is injected
|
|
41
|
+
|
|
42
|
+
## Custom Icons
|
|
43
|
+
|
|
44
|
+
By default, the side panel shows a colored letter avatar for your plugin. To use a custom icon, place an `icon.svg` file in the plugin root (next to `package.json`):
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
excel-online/
|
|
48
|
+
├── package.json
|
|
49
|
+
├── icon.svg ← custom icon (optional)
|
|
50
|
+
├── icon-inactive.svg ← manual inactive override (optional, requires icon.svg)
|
|
51
|
+
├── src/
|
|
52
|
+
│ └── ...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**How it works:**
|
|
56
|
+
|
|
57
|
+
- `opentabs-plugin build` reads `icon.svg`, validates it, auto-generates a grayscale inactive variant, and embeds both in `dist/tools.json`
|
|
58
|
+
- To override the auto-generated inactive icon, provide `icon-inactive.svg` (must use only grayscale colors)
|
|
59
|
+
- If no `icon.svg` is provided, the letter avatar is used automatically
|
|
60
|
+
|
|
61
|
+
**Icon requirements:**
|
|
62
|
+
|
|
63
|
+
- Square SVG with a `viewBox` attribute (e.g., `viewBox="0 0 32 32"`)
|
|
64
|
+
- Maximum 8 KB file size
|
|
65
|
+
- No embedded `<image>`, `<script>`, or event handler attributes (`onclick`, etc.)
|
|
66
|
+
- Manual `icon-inactive.svg` must use only achromatic (grayscale) colors
|
|
67
|
+
|
|
68
|
+
## Development
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install
|
|
72
|
+
npm run build # tsc && opentabs-plugin build
|
|
73
|
+
npm run dev # watch mode (tsc --watch + opentabs-plugin build --watch)
|
|
74
|
+
npm run type-check # tsc --noEmit
|
|
75
|
+
npm run lint # biome
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Adding Tools
|
|
79
|
+
|
|
80
|
+
Create a new file in `src/tools/` using `defineTool`:
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import { z } from 'zod';
|
|
84
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
85
|
+
|
|
86
|
+
export const myTool = defineTool({
|
|
87
|
+
name: 'my_tool',
|
|
88
|
+
displayName: 'My Tool',
|
|
89
|
+
description: 'What this tool does',
|
|
90
|
+
icon: 'wrench',
|
|
91
|
+
input: z.object({ /* ... */ }),
|
|
92
|
+
output: z.object({ /* ... */ }),
|
|
93
|
+
handle: async (params) => {
|
|
94
|
+
// Tool implementation runs in the browser tab context
|
|
95
|
+
return { /* ... */ };
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Then register it in `src/index.ts` by adding it to the `tools` array.
|
|
101
|
+
|
|
102
|
+
## Authentication
|
|
103
|
+
|
|
104
|
+
Plugin tools run in the browser tab context, so they can read auth tokens directly from the page. The SDK provides utilities for the most common patterns:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { getLocalStorage, getCookie, getPageGlobal } from '@opentabs-dev/plugin-sdk';
|
|
108
|
+
|
|
109
|
+
// localStorage — most common
|
|
110
|
+
const token = getLocalStorage('token');
|
|
111
|
+
|
|
112
|
+
// Cookies — session tokens, JWTs
|
|
113
|
+
const session = getCookie('session_id');
|
|
114
|
+
|
|
115
|
+
// Page globals — SPA boot data (e.g., window.__APP_STATE__)
|
|
116
|
+
const appState = getPageGlobal('__APP_STATE__');
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Iframe fallback:** Some apps (e.g., Discord) delete `window.localStorage` after boot. `getLocalStorage` automatically tries a hidden same-origin iframe fallback before returning `null`, so you don't need to handle this case manually.
|
|
120
|
+
|
|
121
|
+
**SPA hydration:** Auth tokens may not be available immediately on page load. Implement polling in `isReady()` to wait until the app has hydrated before your tools run. See the comments in `src/index.ts` for an example polling pattern.
|
|
122
|
+
|
|
123
|
+
## Shared Schemas
|
|
124
|
+
|
|
125
|
+
When 3 or more tools share the same input or output shape, extract common Zod schemas into a shared file to avoid duplication:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
// src/schemas/channel.ts
|
|
129
|
+
import { z } from 'zod';
|
|
130
|
+
|
|
131
|
+
export const channelSchema = z.object({
|
|
132
|
+
id: z.string().describe('Channel ID'),
|
|
133
|
+
name: z.string().describe('Channel name'),
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
export type Channel = z.infer<typeof channelSchema>;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Then import and reuse in your tools:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
// src/tools/list-channels.ts
|
|
143
|
+
import { channelSchema } from '../schemas/channel.js';
|
|
144
|
+
|
|
145
|
+
export const listChannels = defineTool({
|
|
146
|
+
name: 'list_channels',
|
|
147
|
+
displayName: 'List Channels',
|
|
148
|
+
description: 'List all available channels',
|
|
149
|
+
icon: 'list',
|
|
150
|
+
input: z.object({}),
|
|
151
|
+
output: z.object({ channels: z.array(channelSchema) }),
|
|
152
|
+
handle: async () => {
|
|
153
|
+
// ...
|
|
154
|
+
return { channels: [] };
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
This keeps your tool schemas DRY and makes it easy to evolve shared types in one place.
|