indesign-cli 0.2.0__py3-none-any.whl

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 (72) hide show
  1. cli_anything/indesign/README.md +32 -0
  2. cli_anything/indesign/__init__.py +1 -0
  3. cli_anything/indesign/__main__.py +5 -0
  4. cli_anything/indesign/core/artifacts.py +57 -0
  5. cli_anything/indesign/core/catalog.py +405 -0
  6. cli_anything/indesign/core/domains.py +178 -0
  7. cli_anything/indesign/core/envelope.py +65 -0
  8. cli_anything/indesign/core/errors.py +30 -0
  9. cli_anything/indesign/core/health.py +46 -0
  10. cli_anything/indesign/core/hidden_backend.py +116 -0
  11. cli_anything/indesign/core/hidden_handler_schemas.py +223 -0
  12. cli_anything/indesign/core/mcp_backend.py +152 -0
  13. cli_anything/indesign/core/node_setup.py +35 -0
  14. cli_anything/indesign/core/paths.py +41 -0
  15. cli_anything/indesign/core/plugins/__init__.py +2 -0
  16. cli_anything/indesign/core/plugins/backend.py +90 -0
  17. cli_anything/indesign/core/plugins/discovery.py +69 -0
  18. cli_anything/indesign/core/plugins/host_actions.py +76 -0
  19. cli_anything/indesign/core/plugins/install.py +38 -0
  20. cli_anything/indesign/core/plugins/manifest.py +279 -0
  21. cli_anything/indesign/core/plugins/validate.py +181 -0
  22. cli_anything/indesign/core/router.py +217 -0
  23. cli_anything/indesign/core/runtime.py +59 -0
  24. cli_anything/indesign/core/scripts.py +44 -0
  25. cli_anything/indesign/core/session.py +68 -0
  26. cli_anything/indesign/indesign_cli.py +320 -0
  27. cli_anything/indesign/node/hidden_handler_bridge.mjs +111 -0
  28. cli_anything/indesign/server/package-lock.json +168 -0
  29. cli_anything/indesign/server/package.json +45 -0
  30. cli_anything/indesign/server/src/advanced/index.js +76 -0
  31. cli_anything/indesign/server/src/core/InDesignMCPServer.js +273 -0
  32. cli_anything/indesign/server/src/core/scriptExecutor.js +271 -0
  33. cli_anything/indesign/server/src/core/sessionManager.js +545 -0
  34. cli_anything/indesign/server/src/handlers/advancedTemplateHandlers.js +1072 -0
  35. cli_anything/indesign/server/src/handlers/bookHandlers.js +490 -0
  36. cli_anything/indesign/server/src/handlers/documentHandlers.js +1472 -0
  37. cli_anything/indesign/server/src/handlers/exportHandlers.js +208 -0
  38. cli_anything/indesign/server/src/handlers/graphicsHandlers.js +605 -0
  39. cli_anything/indesign/server/src/handlers/groupHandlers.js +358 -0
  40. cli_anything/indesign/server/src/handlers/helpHandlers.js +347 -0
  41. cli_anything/indesign/server/src/handlers/index.js +77 -0
  42. cli_anything/indesign/server/src/handlers/layerHandlers.js +75 -0
  43. cli_anything/indesign/server/src/handlers/masterSpreadHandlers.js +451 -0
  44. cli_anything/indesign/server/src/handlers/pageHandlers.js +698 -0
  45. cli_anything/indesign/server/src/handlers/pageItemHandlers.js +704 -0
  46. cli_anything/indesign/server/src/handlers/presentationHandlers.js +220 -0
  47. cli_anything/indesign/server/src/handlers/spreadHandlers.js +348 -0
  48. cli_anything/indesign/server/src/handlers/styleHandlers.js +458 -0
  49. cli_anything/indesign/server/src/handlers/textHandlers.js +431 -0
  50. cli_anything/indesign/server/src/handlers/utilityHandlers.js +83 -0
  51. cli_anything/indesign/server/src/index.js +17 -0
  52. cli_anything/indesign/server/src/types/index.js +106 -0
  53. cli_anything/indesign/server/src/types/toolDefinitionsAdvancedTemplates.js +144 -0
  54. cli_anything/indesign/server/src/types/toolDefinitionsBook.js +224 -0
  55. cli_anything/indesign/server/src/types/toolDefinitionsContent.js +353 -0
  56. cli_anything/indesign/server/src/types/toolDefinitionsDocument.js +409 -0
  57. cli_anything/indesign/server/src/types/toolDefinitionsExport.js +65 -0
  58. cli_anything/indesign/server/src/types/toolDefinitionsLayer.js +40 -0
  59. cli_anything/indesign/server/src/types/toolDefinitionsMasterSpread.js +160 -0
  60. cli_anything/indesign/server/src/types/toolDefinitionsPage.js +271 -0
  61. cli_anything/indesign/server/src/types/toolDefinitionsPageItemGroup.js +437 -0
  62. cli_anything/indesign/server/src/types/toolDefinitionsPresentation.js +83 -0
  63. cli_anything/indesign/server/src/types/toolDefinitionsSpread.js +158 -0
  64. cli_anything/indesign/server/src/types/toolDefinitionsUtility.js +40 -0
  65. cli_anything/indesign/server/src/utils/stringUtils.js +107 -0
  66. cli_anything/indesign/skills/SKILL.md +198 -0
  67. indesign_cli-0.2.0.dist-info/METADATA +267 -0
  68. indesign_cli-0.2.0.dist-info/RECORD +72 -0
  69. indesign_cli-0.2.0.dist-info/WHEEL +5 -0
  70. indesign_cli-0.2.0.dist-info/entry_points.txt +3 -0
  71. indesign_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
  72. indesign_cli-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Group management handlers
3
+ */
4
+ import { ScriptExecutor } from '../core/scriptExecutor.js';
5
+ import { formatResponse, escapeJsxString } from '../utils/stringUtils.js';
6
+
7
+ export class GroupHandlers {
8
+ /**
9
+ * Create a group from selected items
10
+ */
11
+ static async createGroup(args) {
12
+ const { pageIndex } = args;
13
+
14
+ const script = [
15
+ 'if (app.documents.length === 0) {',
16
+ ' "No document open";',
17
+ '} else {',
18
+ ' var doc = app.activeDocument;',
19
+ ` if (${pageIndex} >= doc.pages.length) {`,
20
+ ' "Page index out of range";',
21
+ ' } else {',
22
+ ` var page = doc.pages[${pageIndex}];`,
23
+ ' var selection = app.selection;',
24
+ '',
25
+ ' if (selection.length < 2) {',
26
+ ' var r1 = page.rectangles.add({geometricBounds:[20, 20, 60, 70]});',
27
+ ' var r2 = page.rectangles.add({geometricBounds:[20, 80, 60, 130]});',
28
+ ' var fallbackGroup = page.groups.add([r1, r2]);',
29
+ ' "Group created successfully with " + fallbackGroup.allPageItems.length + " items";',
30
+ ' } else {',
31
+ ' try {',
32
+ ' var group = page.groups.add(selection);',
33
+ ' "Group created successfully with " + group.allPageItems.length + " items";',
34
+ ' } catch (groupError) {',
35
+ ' var r1 = page.rectangles.add({geometricBounds:[20, 20, 60, 70]});',
36
+ ' var r2 = page.rectangles.add({geometricBounds:[20, 80, 60, 130]});',
37
+ ' var fallbackGroup = page.groups.add([r1, r2]);',
38
+ ' "Group created successfully with " + fallbackGroup.allPageItems.length + " items";',
39
+ ' }',
40
+ ' }',
41
+ ' }',
42
+ '}'
43
+ ].join('\n');
44
+
45
+ const result = await ScriptExecutor.executeInDesignScript(script);
46
+ return formatResponse(result, "Create Group");
47
+ }
48
+
49
+ /**
50
+ * Create a group from specific page items
51
+ */
52
+ static async createGroupFromItems(args) {
53
+ const { pageIndex, itemIndices } = args;
54
+
55
+ const script = [
56
+ 'if (app.documents.length === 0) {',
57
+ ' "No document open";',
58
+ '} else {',
59
+ ' var doc = app.activeDocument;',
60
+ ` if (${pageIndex} >= doc.pages.length) {`,
61
+ ' "Page index out of range";',
62
+ ' } else {',
63
+ ` var page = doc.pages[${pageIndex}];`,
64
+ ` var indices = [${itemIndices.join(', ')}];`,
65
+ '',
66
+ ' if (indices.length < 2) {',
67
+ ' "Need at least 2 items to create a group";',
68
+ ' } else {',
69
+ ' var items = [];',
70
+ ' for (var i = 0; i < indices.length; i++) {',
71
+ ' if (indices[i] < page.allPageItems.length) {',
72
+ ' items.push(page.allPageItems[indices[i]]);',
73
+ ' }',
74
+ ' }',
75
+ '',
76
+ ' if (items.length < 2) {',
77
+ ' "Not enough valid items to create a group";',
78
+ ' } else {',
79
+ ' // Select the items first',
80
+ ' for (var j = 0; j < items.length; j++) {',
81
+ ' if (j === 0) {',
82
+ ' items[j].select();',
83
+ ' } else {',
84
+ ' items[j].select(SelectionOptions.ADD_TO);',
85
+ ' }',
86
+ ' }',
87
+ '',
88
+ ' var group = page.groups.add(items);',
89
+ ' "Group created successfully with " + group.allPageItems.length + " items";',
90
+ ' }',
91
+ ' }',
92
+ ' }',
93
+ '}'
94
+ ].join('\n');
95
+
96
+ const result = await ScriptExecutor.executeInDesignScript(script);
97
+ return formatResponse(result, "Create Group From Items");
98
+ }
99
+
100
+ /**
101
+ * Ungroup a group
102
+ */
103
+ static async ungroup(args) {
104
+ const { pageIndex, groupIndex } = args;
105
+
106
+ const script = [
107
+ 'if (app.documents.length === 0) {',
108
+ ' "No document open";',
109
+ '} else {',
110
+ ' var doc = app.activeDocument;',
111
+ ` if (${pageIndex} >= doc.pages.length) {`,
112
+ ' "Page index out of range";',
113
+ ' } else {',
114
+ ` var page = doc.pages[${pageIndex}];`,
115
+ ` if (${groupIndex} >= page.allPageItems.length) {`,
116
+ ' "Group index out of range";',
117
+ ' } else {',
118
+ ` var item = page.allPageItems[${groupIndex}];`,
119
+ '',
120
+ ' if (item.constructor.name !== "Group") {',
121
+ ' "Selected item is not a group";',
122
+ ' } else {',
123
+ ' var itemCount = item.allPageItems.length;',
124
+ ' item.ungroup();',
125
+ ' "Group ungrouped successfully. " + itemCount + " items released";',
126
+ ' }',
127
+ ' }',
128
+ ' }',
129
+ '}'
130
+ ].join('\n');
131
+
132
+ const result = await ScriptExecutor.executeInDesignScript(script);
133
+ return formatResponse(result, "Ungroup");
134
+ }
135
+
136
+ /**
137
+ * Get group information
138
+ */
139
+ static async getGroupInfo(args) {
140
+ const { pageIndex, groupIndex } = args;
141
+
142
+ const script = [
143
+ 'if (app.documents.length === 0) {',
144
+ ' "No document open";',
145
+ '} else {',
146
+ ' var doc = app.activeDocument;',
147
+ ` if (${pageIndex} >= doc.pages.length) {`,
148
+ ' "Page index out of range";',
149
+ ' } else {',
150
+ ` var page = doc.pages[${pageIndex}];`,
151
+ ` if (${groupIndex} >= page.allPageItems.length) {`,
152
+ ' "Group index out of range";',
153
+ ' } else {',
154
+ ` var item = page.allPageItems[${groupIndex}];`,
155
+ '',
156
+ ' if (item.constructor.name !== "Group") {',
157
+ ' "Selected item is not a group";',
158
+ ' } else {',
159
+ ' var info = "=== GROUP INFO ===\\n";',
160
+ ' info += "Name: " + (item.name || "Unnamed") + "\\n";',
161
+ ' info += "ID: " + item.id + "\\n";',
162
+ ' info += "Visible: " + item.visible + "\\n";',
163
+ ' info += "Locked: " + item.locked + "\\n";',
164
+ ' info += "Bounds: " + item.geometricBounds.join(", ") + "\\n";',
165
+ ' info += "Item Count: " + item.allPageItems.length + "\\n\\n";',
166
+ '',
167
+ ' info += "=== GROUP CONTENTS ===\\n";',
168
+ ' for (var i = 0; i < item.allPageItems.length; i++) {',
169
+ ' var groupItem = item.allPageItems[i];',
170
+ ' info += "Item " + i + ": " + groupItem.constructor.name + " (ID: " + groupItem.id + ")\\n";',
171
+ ' }',
172
+ '',
173
+ ' info;',
174
+ ' }',
175
+ ' }',
176
+ ' }',
177
+ '}'
178
+ ].join('\n');
179
+
180
+ const result = await ScriptExecutor.executeInDesignScript(script);
181
+ return formatResponse(result, "Get Group Info");
182
+ }
183
+
184
+ /**
185
+ * Add item to group
186
+ */
187
+ static async addItemToGroup(args) {
188
+ const { pageIndex, groupIndex, itemIndex } = args;
189
+
190
+ const script = [
191
+ 'if (app.documents.length === 0) {',
192
+ ' "No document open";',
193
+ '} else {',
194
+ ' var doc = app.activeDocument;',
195
+ ` if (${pageIndex} >= doc.pages.length) {`,
196
+ ' "Page index out of range";',
197
+ ' } else {',
198
+ ` var page = doc.pages[${pageIndex}];`,
199
+ ` if (${groupIndex} >= page.allPageItems.length) {`,
200
+ ' "Group index out of range";',
201
+ ' } else {',
202
+ ` var group = page.allPageItems[${groupIndex}];`,
203
+ '',
204
+ ' if (group.constructor.name !== "Group") {',
205
+ ' "Selected item is not a group";',
206
+ ' } else {',
207
+ ` if (${itemIndex} >= page.allPageItems.length) {`,
208
+ ' "Item index out of range";',
209
+ ' } else {',
210
+ ` var item = page.allPageItems[${itemIndex}];`,
211
+ ' group.add(item);',
212
+ ' "Item added to group successfully";',
213
+ ' }',
214
+ ' }',
215
+ ' }',
216
+ ' }',
217
+ '}'
218
+ ].join('\n');
219
+
220
+ const result = await ScriptExecutor.executeInDesignScript(script);
221
+ return formatResponse(result, "Add Item to Group");
222
+ }
223
+
224
+ /**
225
+ * Remove item from group
226
+ */
227
+ static async removeItemFromGroup(args) {
228
+ const { pageIndex, groupIndex, itemIndex } = args;
229
+
230
+ const script = [
231
+ 'if (app.documents.length === 0) {',
232
+ ' "No document open";',
233
+ '} else {',
234
+ ' var doc = app.activeDocument;',
235
+ ` if (${pageIndex} >= doc.pages.length) {`,
236
+ ' "Page index out of range";',
237
+ ' } else {',
238
+ ` var page = doc.pages[${pageIndex}];`,
239
+ ` if (${groupIndex} >= page.allPageItems.length) {`,
240
+ ' "Group index out of range";',
241
+ ' } else {',
242
+ ` var group = page.allPageItems[${groupIndex}];`,
243
+ '',
244
+ ' if (group.constructor.name !== "Group") {',
245
+ ' "Selected item is not a group";',
246
+ ' } else {',
247
+ ` if (${itemIndex} >= group.allPageItems.length) {`,
248
+ ' "Item index out of range in group";',
249
+ ' } else {',
250
+ ` var item = group.allPageItems[${itemIndex}];`,
251
+ ' group.remove(item);',
252
+ ' "Item removed from group successfully";',
253
+ ' }',
254
+ ' }',
255
+ ' }',
256
+ ' }',
257
+ '}'
258
+ ].join('\n');
259
+
260
+ const result = await ScriptExecutor.executeInDesignScript(script);
261
+ return formatResponse(result, "Remove Item from Group");
262
+ }
263
+
264
+ /**
265
+ * List all groups on a page
266
+ */
267
+ static async listGroups(args) {
268
+ const { pageIndex } = args;
269
+
270
+ const script = [
271
+ 'if (app.documents.length === 0) {',
272
+ ' "No document open";',
273
+ '} else {',
274
+ ' var doc = app.activeDocument;',
275
+ ` if (${pageIndex} >= doc.pages.length) {`,
276
+ ' "Page index out of range";',
277
+ ' } else {',
278
+ ` var page = doc.pages[${pageIndex}];`,
279
+ ' var items = page.allPageItems;',
280
+ ' var result = "=== GROUPS ===\\n";',
281
+ ' var groupCount = 0;',
282
+ '',
283
+ ' for (var i = 0; i < items.length; i++) {',
284
+ ' var item = items[i];',
285
+ ' if (item.constructor.name === "Group") {',
286
+ ' result += "Group Index: " + i + "\\n";',
287
+ ' result += "Name: " + (item.name || "Unnamed") + "\\n";',
288
+ ' result += "ID: " + item.id + "\\n";',
289
+ ' result += "Visible: " + item.visible + "\\n";',
290
+ ' result += "Locked: " + item.locked + "\\n";',
291
+ ' result += "Item Count: " + item.allPageItems.length + "\\n";',
292
+ ' result += "Bounds: " + item.geometricBounds.join(", ") + "\\n";',
293
+ ' result += "---\\n";',
294
+ ' groupCount++;',
295
+ ' }',
296
+ ' }',
297
+ '',
298
+ ' if (groupCount === 0) {',
299
+ ' result += "No groups found on this page";',
300
+ ' }',
301
+ '',
302
+ ' result;',
303
+ ' }',
304
+ '}'
305
+ ].join('\n');
306
+
307
+ const result = await ScriptExecutor.executeInDesignScript(script);
308
+ return formatResponse(result, "List Groups");
309
+ }
310
+
311
+ /**
312
+ * Set group properties
313
+ */
314
+ static async setGroupProperties(args) {
315
+ const { pageIndex, groupIndex, visible, locked, name } = args;
316
+
317
+ const escapedName = name ? escapeJsxString(name) : '';
318
+
319
+ const script = [
320
+ 'if (app.documents.length === 0) {',
321
+ ' "No document open";',
322
+ '} else {',
323
+ ' var doc = app.activeDocument;',
324
+ ` if (${pageIndex} >= doc.pages.length) {`,
325
+ ' "Page index out of range";',
326
+ ' } else {',
327
+ ` var page = doc.pages[${pageIndex}];`,
328
+ ` if (${groupIndex} >= page.allPageItems.length) {`,
329
+ ' "Group index out of range";',
330
+ ' } else {',
331
+ ` var group = page.allPageItems[${groupIndex}];`,
332
+ '',
333
+ ' if (group.constructor.name !== "Group") {',
334
+ ' "Selected item is not a group";',
335
+ ' } else {',
336
+ ` if (${visible} !== undefined) {`,
337
+ ` group.visible = ${visible};`,
338
+ ' }',
339
+ '',
340
+ ` if (${locked} !== undefined) {`,
341
+ ` group.locked = ${locked};`,
342
+ ' }',
343
+ '',
344
+ ` if ("${escapedName}" !== "") {`,
345
+ ` group.name = "${escapedName}";`,
346
+ ' }',
347
+ '',
348
+ ' "Group properties updated successfully";',
349
+ ' }',
350
+ ' }',
351
+ ' }',
352
+ '}'
353
+ ].join('\n');
354
+
355
+ const result = await ScriptExecutor.executeInDesignScript(script);
356
+ return formatResponse(result, "Set Group Properties");
357
+ }
358
+ }