@interopio/iocd-cli 1.0.3 → 1.1.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 (41) hide show
  1. package/README.md +28 -2
  2. package/changelog.md +9 -0
  3. package/dist/cli.js +2 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/apps.command.js +83 -0
  6. package/dist/commands/apps.command.js.map +1 -1
  7. package/dist/commands/index.js +3 -1
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/skills.command.js +56 -0
  10. package/dist/commands/skills.command.js.map +1 -0
  11. package/dist/services/skills.service.js +178 -0
  12. package/dist/services/skills.service.js.map +1 -0
  13. package/dist/services/template.service.js +141 -9
  14. package/dist/services/template.service.js.map +1 -1
  15. package/dist/services/test-infrastructure.service.js +7 -17
  16. package/dist/services/test-infrastructure.service.js.map +1 -1
  17. package/dist/templates/ioconnect-desktop/README.md +28 -2
  18. package/dist/templates/launchpad/apps/launchpad/.gitignore.template +23 -1
  19. package/dist/templates/launchpad/apps/launchpad/.prettierignore +3 -0
  20. package/dist/templates/launchpad/apps/launchpad/.prettierrc +6 -0
  21. package/dist/templates/launchpad/apps/launchpad/README.md +220 -0
  22. package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +1 -1
  23. package/dist/templates/launchpad/apps/launchpad/index.html +13 -14
  24. package/dist/templates/launchpad/apps/launchpad/package.json +17 -9
  25. package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +31 -37
  26. package/dist/templates/launchpad/apps/launchpad/src/components/launchpad.tsx +37 -0
  27. package/dist/templates/launchpad/apps/launchpad/src/{app → constants}/constants.ts +2 -1
  28. package/dist/templates/launchpad/apps/launchpad/src/main.tsx +1 -3
  29. package/dist/templates/launchpad/apps/launchpad/src/styles.css +2 -17
  30. package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -8
  31. package/dist/templates/launchpad/apps/launchpad/vite-env.d.ts +1 -0
  32. package/dist/templates/launchpad/apps/launchpad/vite.config.ts +8 -3
  33. package/dist/templates/tests/tests/package.json +1 -1
  34. package/dist/utils/template-update.js +6 -0
  35. package/dist/utils/template-update.js.map +1 -0
  36. package/package.json +3 -1
  37. package/dist/templates/launchpad/apps/launchpad/package-lock.json +0 -2778
  38. package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +0 -11
  39. package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +0 -212
  40. package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +0 -51
  41. package/dist/templates/tests/tests/package-lock.json +0 -8441
@@ -11,6 +11,8 @@ const error_handler_1 = require("../utils/error.handler");
11
11
  const fs_extra_1 = __importDefault(require("fs-extra"));
12
12
  const config_service_1 = require("./config/config.service");
13
13
  const path_1 = require("../utils/path");
14
+ class TemplateRestoreError extends Error {
15
+ }
14
16
  /**
15
17
  * TemplateService handles the generation of io.Connect Desktop projects using a modular template system.
16
18
  *
@@ -42,9 +44,14 @@ const path_1 = require("../utils/path");
42
44
  */
43
45
  class TemplateService {
44
46
  logger = logger_1.Logger.getInstance("template.service");
47
+ rootDir;
45
48
  templatesPath;
46
- constructor() {
47
- this.templatesPath = (0, node_path_1.join)(__dirname, "../templates");
49
+ renamePath;
50
+ constructor(options = {}) {
51
+ this.rootDir = options.rootDir ?? path_1.PathUtils.getRootDir();
52
+ this.templatesPath =
53
+ options.templatesPath ?? (0, node_path_1.join)(__dirname, "../templates");
54
+ this.renamePath = options.renamePath ?? node_fs_1.renameSync;
48
55
  }
49
56
  /**
50
57
  * Get the path to embedded templates
@@ -124,7 +131,8 @@ class TemplateService {
124
131
  });
125
132
  }
126
133
  const templatePath = (0, node_path_1.join)(this.templatesPath, templateName);
127
- const autoIncludedApplications = this.getAvailableApplicationTemplates()
134
+ const autoIncludedApplications = this.getAvailableTemplates()
135
+ .map(templateName => this.getTemplateInfo(templateName))
128
136
  .filter(template => template.autoInclude === true)
129
137
  .map(template => template.name);
130
138
  const templateApplications = [
@@ -181,9 +189,132 @@ class TemplateService {
181
189
  templateApplications: [appName],
182
190
  initialComponents: [],
183
191
  });
184
- await this.processApplicationsTemplates("./", variables, [appName]);
192
+ await this.processApplicationsTemplates(this.rootDir, variables, [appName]);
185
193
  this.logger.info(`Template application ${appName} added successfully`);
186
194
  }
195
+ async updateTemplateApplication(appName) {
196
+ this.logger.info(`Updating template application: ${appName}`);
197
+ try {
198
+ if (!this.templateExists(appName)) {
199
+ throw new error_handler_1.CLIError(`Template '${appName}' not found`, {
200
+ code: error_handler_1.ErrorCode.NOT_FOUND,
201
+ suggestions: ["Check available templates with: iocd apps list"],
202
+ });
203
+ }
204
+ const templateInfo = this.getTemplateInfo(appName);
205
+ if (templateInfo.type !== "application") {
206
+ throw new error_handler_1.CLIError(`Template '${appName}' is not an application template`, { code: error_handler_1.ErrorCode.VALIDATION_ERROR });
207
+ }
208
+ const templateAppsRoot = (0, node_path_1.join)(this.templatesPath, appName, "apps");
209
+ if (!(0, node_fs_1.existsSync)(templateAppsRoot)) {
210
+ throw new error_handler_1.CLIError(`Template application '${appName}' doesn't contain an apps directory`, { code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR });
211
+ }
212
+ const appDirectories = (0, node_fs_1.readdirSync)(templateAppsRoot, {
213
+ withFileTypes: true,
214
+ })
215
+ .filter(entry => entry.isDirectory())
216
+ .map(entry => entry.name);
217
+ if (appDirectories.length === 0) {
218
+ throw new error_handler_1.CLIError(`Template application '${appName}' doesn't contain an app`, { code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR });
219
+ }
220
+ const destinations = appDirectories.map(directory => (0, node_path_1.join)(this.rootDir, "apps", directory));
221
+ const missingDestination = destinations.find(destination => !(0, node_fs_1.existsSync)(destination));
222
+ if (missingDestination) {
223
+ throw new error_handler_1.CLIError(`Template application '${appName}' is not installed at '${missingDestination}'`, {
224
+ code: error_handler_1.ErrorCode.NOT_FOUND,
225
+ suggestions: [`Add it first with: iocd apps add ${appName}`],
226
+ });
227
+ }
228
+ const variables = this.getProjectTemplateVariables(appName);
229
+ const stagingParent = (0, node_path_1.join)(this.rootDir, ".iocd-cli", "temp");
230
+ (0, node_fs_1.mkdirSync)(stagingParent, { recursive: true });
231
+ const stagingRoot = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)(stagingParent, `template-${appName}-`));
232
+ const nextRoot = (0, node_path_1.join)(stagingRoot, "next");
233
+ const previousRoot = (0, node_path_1.join)(stagingRoot, "previous");
234
+ (0, node_fs_1.mkdirSync)(nextRoot, { recursive: true });
235
+ (0, node_fs_1.mkdirSync)(previousRoot, { recursive: true });
236
+ let preserveStaging = false;
237
+ try {
238
+ for (const directory of appDirectories) {
239
+ const source = (0, node_path_1.join)(templateAppsRoot, directory);
240
+ const stagedApp = (0, node_path_1.join)(nextRoot, directory);
241
+ this.logger.debug(`Staging template application from '${source}' to '${stagedApp}'.`);
242
+ (0, node_fs_1.mkdirSync)(stagedApp, { recursive: true });
243
+ await this.copyTemplateFiles(source, stagedApp, variables);
244
+ }
245
+ this.publishTemplateApplications(appDirectories, destinations, nextRoot, previousRoot);
246
+ }
247
+ catch (error) {
248
+ preserveStaging = error instanceof TemplateRestoreError;
249
+ throw error;
250
+ }
251
+ finally {
252
+ if (preserveStaging) {
253
+ this.logger.warn(`Preserving template update staging directory for recovery: ${stagingRoot}`);
254
+ }
255
+ else {
256
+ (0, node_fs_1.rmSync)(stagingRoot, { recursive: true, force: true });
257
+ }
258
+ }
259
+ this.logger.info(`Template application ${appName} updated successfully`);
260
+ }
261
+ catch (error) {
262
+ this.logger.error(`Failed to update template application '${appName}'.`, error);
263
+ throw error;
264
+ }
265
+ }
266
+ publishTemplateApplications(appDirectories, destinations, nextRoot, previousRoot) {
267
+ const movedPrevious = [];
268
+ const publishedDestinations = [];
269
+ try {
270
+ for (let index = 0; index < appDirectories.length; index += 1) {
271
+ const directory = appDirectories[index];
272
+ const destination = destinations[index];
273
+ const previous = (0, node_path_1.join)(previousRoot, directory);
274
+ this.logger.debug(`Moving existing template application directory from '${destination}' to '${previous}'.`);
275
+ this.renamePath(destination, previous);
276
+ movedPrevious.push({ previous, destination });
277
+ }
278
+ for (let index = 0; index < appDirectories.length; index += 1) {
279
+ const directory = appDirectories[index];
280
+ const destination = destinations[index];
281
+ this.renamePath((0, node_path_1.join)(nextRoot, directory), destination);
282
+ publishedDestinations.push(destination);
283
+ this.logger.debug(`Published updated template application directory: ${destination}`);
284
+ }
285
+ }
286
+ catch (error) {
287
+ this.logger.warn("Template application publication failed; restoring the previous application files.");
288
+ for (const destination of publishedDestinations.reverse()) {
289
+ (0, node_fs_1.rmSync)(destination, { recursive: true, force: true });
290
+ }
291
+ try {
292
+ for (const { previous, destination } of movedPrevious.reverse()) {
293
+ if ((0, node_fs_1.existsSync)(previous)) {
294
+ this.renamePath(previous, destination);
295
+ }
296
+ }
297
+ }
298
+ catch (restoreError) {
299
+ throw new TemplateRestoreError(`Template application update failed and the previous application could not be restored. Previous files remain under '${previousRoot}'. Update error: ${error.message}. Restore error: ${restoreError.message}`);
300
+ }
301
+ throw error;
302
+ }
303
+ }
304
+ getProjectTemplateVariables(appName) {
305
+ const config = config_service_1.ConfigManager.config;
306
+ return this.prepareTemplateVariables({
307
+ productSlug: config.productSlug,
308
+ productName: config.productName,
309
+ productDescription: config.productDescription,
310
+ company: config.company,
311
+ copyright: config.copyright,
312
+ version: config.version,
313
+ targetDirectory: this.rootDir,
314
+ templateApplications: [appName],
315
+ initialComponents: [],
316
+ });
317
+ }
187
318
  /** Adds initialComponents to the iocd.cli.config.json -> components.list object in the target directory */
188
319
  updateComponentsConfig(targetDirectory, initialComponents, componentSource) {
189
320
  // Try root directory first
@@ -317,8 +448,8 @@ class TemplateService {
317
448
  (0, node_fs_1.writeFileSync)(targetPath, targetContent, "utf-8");
318
449
  this.logger.debug(`Copied and processed: ${(0, node_path_1.relative)(process.cwd(), targetPath)}`);
319
450
  }
320
- copyFileNoReplacement(source, destination) {
321
- fs_extra_1.default.copyFile(source, destination);
451
+ async copyFileNoReplacement(source, destination) {
452
+ await fs_extra_1.default.copyFile(source, destination);
322
453
  }
323
454
  /**
324
455
  * Process feature-specific templates
@@ -330,10 +461,11 @@ class TemplateService {
330
461
  this.logger.warn(`Application template '${application}' not found in templates directory`);
331
462
  continue;
332
463
  }
333
- // Verify it's a application template
464
+ // Verify it's a project feature template.
334
465
  const templateInfo = this.getTemplateInfo(application);
335
- if (templateInfo.type !== "application") {
336
- this.logger.warn(`Template '${application}' is not a application template, skipping`);
466
+ if (templateInfo.type !== "application" &&
467
+ templateInfo.type !== "tests") {
468
+ this.logger.warn(`Template '${application}' is not a project feature template, skipping`);
337
469
  continue;
338
470
  }
339
471
  this.logger.debug(`Processing application template: ${application}`);
@@ -1 +1 @@
1
- {"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"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"}
@@ -5,16 +5,22 @@ const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
6
  const child_process_1 = require("child_process");
7
7
  const path_2 = require("../utils/path");
8
+ const skills_service_1 = require("./skills.service");
8
9
  class TestInfrastructureService {
9
10
  rootDir;
10
11
  testsDir;
11
12
  templateDir;
13
+ skillsService;
12
14
  runNpm;
13
15
  constructor(options = {}) {
14
16
  this.rootDir = options.rootDir ?? path_2.PathUtils.getRootDir();
15
17
  this.testsDir = options.testsDir ?? path_2.PathUtils.getTestsDir();
16
18
  this.templateDir =
17
19
  options.templateDir ?? (0, path_1.join)(__dirname, "../templates/tests");
20
+ this.skillsService = new skills_service_1.SkillsService({
21
+ rootDir: this.rootDir,
22
+ sourceDir: options.skillsSourceDir ?? (0, path_1.join)(this.templateDir, ".agents", "skills"),
23
+ });
18
24
  this.runNpm = options.runNpm ?? this.runNpmCommand.bind(this);
19
25
  }
20
26
  async setup() {
@@ -22,19 +28,14 @@ class TestInfrastructureService {
22
28
  if ((0, fs_1.existsSync)(this.testsDir)) {
23
29
  throw new Error(`The tests directory already exists at '${this.testsDir}'. Back up or remove it, then run 'iocd test setup' again.`);
24
30
  }
25
- const skillDir = this.getSkillDir();
26
- const skillAlreadyExists = (0, fs_1.existsSync)(skillDir);
27
31
  try {
28
32
  (0, fs_1.mkdirSync)(this.testsDir, { recursive: true });
29
33
  this.copyDirectory((0, path_1.join)(this.templateDir, "tests"), this.testsDir, true);
30
- this.copySkill(false);
31
34
  await this.validateInstallation();
35
+ this.skillsService.installMissing();
32
36
  }
33
37
  catch (error) {
34
38
  (0, fs_1.rmSync)(this.testsDir, { recursive: true, force: true });
35
- if (!skillAlreadyExists) {
36
- (0, fs_1.rmSync)(skillDir, { recursive: true, force: true });
37
- }
38
39
  throw new Error(`Test infrastructure setup failed and the created files were removed: ${error.message}`);
39
40
  }
40
41
  }
@@ -61,17 +62,6 @@ class TestInfrastructureService {
61
62
  throw new Error(`The tests directory must resolve inside the seed root. '${this.testsDir}' escapes '${this.rootDir}'. Set 'testsDirectory' to a path within the project.`);
62
63
  }
63
64
  }
64
- getSkillDir() {
65
- return (0, path_1.join)(this.rootDir, ".agents", "skills", "iocd-wdio-testing");
66
- }
67
- copySkill(overwrite) {
68
- const source = (0, path_1.join)(this.templateDir, ".agents", "skills", "iocd-wdio-testing");
69
- const destination = this.getSkillDir();
70
- if (!(0, fs_1.existsSync)(source) || (!overwrite && (0, fs_1.existsSync)(destination))) {
71
- return;
72
- }
73
- this.copyDirectory(source, destination, overwrite);
74
- }
75
65
  copyDirectory(source, destination, overwrite) {
76
66
  (0, fs_1.mkdirSync)(destination, { recursive: true });
77
67
  for (const entry of (0, fs_1.readdirSync)(source, { withFileTypes: true })) {
@@ -1 +1 @@
1
- {"version":3,"file":"test-infrastructure.service.js","sourceRoot":"","sources":["../../src/services/test-infrastructure.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-infrastructure.service.js","sourceRoot":"","sources":["../../src/services/test-infrastructure.service.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@
27
27
  - [Testing](#testing)
28
28
  - [Running Tests](#running-tests)
29
29
  - [Writing Tests](#writing-tests)
30
+ - [Updating Coding Agent Skills](#updating-coding-agent-skills)
30
31
  - [Building for Production](#building-for-production-1)
31
32
  - [Build Commands](#build-commands)
32
33
  - [Build Output](#build-output)
@@ -336,8 +337,22 @@ Template applications can be selected during project creation or added later:
336
337
  # Add template application
337
338
  iocd apps add workspaces
338
339
 
339
- # List available templates
340
- iocd apps list --available
340
+ # List installed and available templates
341
+ iocd apps list
342
+
343
+ # Update one template application
344
+ iocd apps update workspaces
345
+ ```
346
+
347
+ Updating a template application permanently deletes its existing app directory and
348
+ copies the current template shipped by the CLI. This removes all customizations and
349
+ other files in that directory. Commit or copy your work before running the command.
350
+ The CLI displays this warning and asks for confirmation before deleting anything.
351
+
352
+ For an intentional non-interactive update, use `--yes` to skip the confirmation:
353
+
354
+ ```bash
355
+ iocd apps update workspaces --yes
341
356
  ```
342
357
 
343
358
  **Available templates:**
@@ -480,6 +495,17 @@ describe('io.Connect Desktop Application', () => {
480
495
 
481
496
  Add your test files to the `tests/` directory. They'll run automatically in CI/CD pipelines.
482
497
 
498
+ ### Updating Coding Agent Skills
499
+
500
+ The CLI ships coding agent skills in `.agents/skills/`. After updating
501
+ `@interopio/iocd-cli`, replace all CLI-managed skills with their current versions:
502
+
503
+ ```bash
504
+ npx iocd skills update
505
+ ```
506
+
507
+ The command overwrites skills shipped by the CLI and preserves other skills in the project.
508
+
483
509
  ---
484
510
 
485
511
  ## Building for Production
@@ -1 +1,23 @@
1
- public/modals-ui/
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.js
7
+
8
+ # testing
9
+ /coverage
10
+
11
+ # production
12
+ /build
13
+
14
+ # misc
15
+ .DS_Store
16
+ .env.local
17
+ .env.development.local
18
+ .env.test.local
19
+ .env.production.local
20
+
21
+ npm-debug.log*
22
+ yarn-debug.log*
23
+ yarn-error.log*
@@ -0,0 +1,3 @@
1
+ node_modules
2
+ dist
3
+ build
@@ -0,0 +1,6 @@
1
+ {
2
+ "semi": true,
3
+ "tabWidth": 2,
4
+ "trailingComma": "es5",
5
+ "printWidth": 100
6
+ }
@@ -0,0 +1,220 @@
1
+ # Launchpad App for io.Connect Desktop
2
+
3
+ Template for creating a custom desktop Launchpad app for **io.Connect Desktop**, built on top of the
4
+ `IOLaunchpadDesktop` feature exported by [`@interopio/components-react`](https://www.npmjs.com/package/@interopio/components-react). Clone
5
+ this app and customize only the pieces you need — everything else keeps working out of the box.
6
+
7
+ ## Prerequisites
8
+
9
+ **io.Connect Desktop** is required, since this app only configures the `desktop` factory (see
10
+ [src/constants/constants.ts](src/constants/constants.ts)).
11
+
12
+ ## Setup
13
+
14
+ - Run `npm install` to install all dependencies.
15
+ - Run `npm run start` to start the app (dev server runs on `http://localhost:4242` by default, see
16
+ [vite.config.ts](vite.config.ts)).
17
+ - Point your io.Connect Desktop configuration's Launchpad/System application entry to this app's URL, then start
18
+ io.Connect Desktop to see your customized Launchpad. Refer to your io.Connect Desktop version's documentation for
19
+ the exact application-definition file and property to update.
20
+ - Run `npm run build` to produce a production build in `dist/`.
21
+ - Start **io.Connect Desktop** to start using and modifying your Launchpad App.
22
+
23
+ ## How it's wired
24
+
25
+ `src/components/launchpad.tsx` wires up the required providers around a single `<Launchpad />` component. You
26
+ don't need to pass a `components` prop at all - `<Launchpad />` already renders a fully working default header
27
+ (`DragHandle` + `LogoButton` before search, `ExtendedArea` + `NotificationsButton` + `MainContextMenu` after
28
+ search) out of the box:
29
+
30
+ ```tsx
31
+ import {
32
+ ThemeProvider,
33
+ PlatformPrefsProvider,
34
+ IOActivePanelRenderer,
35
+ IODownloadManager,
36
+ IOLaunchpadDesktop,
37
+ IONotifications,
38
+ } from "@interopio/components-react";
39
+
40
+ const { LaunchpadProvider, LaunchpadBodyPopupProvider, PanelPopupProvider, Launchpad } = IOLaunchpadDesktop;
41
+ const { NotificationsProvider } = IONotifications;
42
+ const { DownloadManagerProvider } = IODownloadManager;
43
+ const { PanelManagerProvider } = IOActivePanelRenderer;
44
+
45
+ function LaunchpadWrapper() {
46
+ return (
47
+ <ThemeProvider>
48
+ <PlatformPrefsProvider>
49
+ <NotificationsProvider>
50
+ <DownloadManagerProvider>
51
+ <PanelManagerProvider>
52
+ <LaunchpadProvider>
53
+ <LaunchpadBodyPopupProvider>
54
+ <PanelPopupProvider>
55
+ <Launchpad />
56
+ </PanelPopupProvider>
57
+ </LaunchpadBodyPopupProvider>
58
+ </LaunchpadProvider>
59
+ </PanelManagerProvider>
60
+ </DownloadManagerProvider>
61
+ </NotificationsProvider>
62
+ </PlatformPrefsProvider>
63
+ </ThemeProvider>
64
+ );
65
+ }
66
+ ```
67
+
68
+ All customization happens through the `components` prop of `<Launchpad />` - you shouldn't need to touch the
69
+ provider chain above.
70
+
71
+ ## Customization
72
+
73
+ ### 1. Replacing the default io.Connect Desktop Launchpad with a custom implementation
74
+
75
+ For details on how io.Connect Desktop discovers and loads a custom Launchpad app, see the
76
+ [Launchpad documentation](https://docs.interop.io/desktop/capabilities/launcher/index.html#launchpad).
77
+
78
+
79
+ ### 2. The `components` prop
80
+
81
+ `<Launchpad components={{ ... }} />` forwards straight to the native `IOLaunchpad.ContentsContainer`, so it only
82
+ accepts `header` (`BeforeSearch` / `AfterSearch`) and `sections` - there's no per-piece override system.
83
+ `DragHandle`, `LogoButton`, `NotificationsButton`, `MainContextMenu`, `ExtendedArea` are exported standalone so you
84
+ compose them yourself into `header.BeforeSearch` / `AfterSearch`, as shown above.
85
+
86
+ > **Tip:** define `BeforeSearch` / `AfterSearch` (and the `components` object) **outside** your component's render
87
+ > function (module scope), or memoize them. Passing a brand-new inline function on every render forces
88
+ > `<Launchpad />` to remount that zone on every render - wasteful in general, and it can also break in-flight
89
+ > async work started by a piece inside it (e.g. opening the docked search popup).
90
+
91
+ ### 3. Default `BeforeSearch` / `AfterSearch`
92
+
93
+ `<Launchpad />` fills in `header.BeforeSearch` / `AfterSearch` with its own defaults whenever you don't specify
94
+ them, so there are 3 possible outcomes per zone:
95
+
96
+ 1. **Omitted** (key not present, or `undefined`) - the library default renders (`DragHandle` + `LogoButton` for
97
+ `BeforeSearch`; `ExtendedArea` + `NotificationsButton` + `MainContextMenu` for `AfterSearch`).
98
+ 2. **Explicitly empty** (e.g. `BeforeSearch: () => null`) - the default is overridden and nothing renders in that
99
+ zone.
100
+ 3. **A real custom component** - that component renders in place of the default.
101
+
102
+ ```tsx
103
+ // 1. Omitted - renders the library defaults
104
+ <Launchpad />;
105
+
106
+ // 2. Explicitly empty - hides the zone entirely
107
+ <Launchpad components={{ header: { AfterSearch: () => null } }} />;
108
+
109
+ // 3. Custom component - fully replaces the zone
110
+ function CustomBeforeSearch() {
111
+ return <MyCustomLogo />;
112
+ }
113
+
114
+ <Launchpad components={{ header: { BeforeSearch: CustomBeforeSearch } }} />;
115
+ ```
116
+
117
+ ### 4. Removing a piece
118
+
119
+ Since `header.BeforeSearch` / `AfterSearch` **fully replace** the zone, just omit a piece from your composition to
120
+ hide it - e.g. hide the notifications bell:
121
+
122
+ ```tsx
123
+ function AfterSearch() {
124
+ return (
125
+ <>
126
+ <ExtendedArea />
127
+ <MainContextMenu />
128
+ </>
129
+ );
130
+ }
131
+ ```
132
+
133
+ ### 5. Passing your own component
134
+
135
+ Compose your own implementation alongside (or instead of) the default pieces:
136
+
137
+ ```tsx
138
+ function MyMainContextMenu() {
139
+ return <button onClick={() => console.log("clicked!")}>⋮</button>;
140
+ }
141
+
142
+ function AfterSearch() {
143
+ return (
144
+ <>
145
+ <ExtendedArea />
146
+ <NotificationsButton />
147
+ <MyMainContextMenu />
148
+ </>
149
+ );
150
+ }
151
+ ```
152
+
153
+ ### 6. Overriding `BeforeSearch` / `AfterSearch`
154
+
155
+ Pass `components.header` to fully replace either zone with something entirely custom:
156
+
157
+ ```tsx
158
+ function CustomBeforeSearch() {
159
+ return <MyCustomLogo />;
160
+ }
161
+
162
+ function CustomAfterSearch() {
163
+ return <MyCustomButton />;
164
+ }
165
+
166
+ const launchpadComponents = { header: { BeforeSearch: CustomBeforeSearch, AfterSearch: CustomAfterSearch } };
167
+
168
+ <Launchpad components={launchpadComponents} />;
169
+ ```
170
+
171
+ Since `header.BeforeSearch` / `AfterSearch` **fully replace** the zone, if you just want to add something
172
+ alongside the defaults, import the default pieces (they're also exported standalone) and compose them yourself:
173
+
174
+ ```tsx
175
+ import { IOLaunchpadDesktop } from "@interopio/components-react";
176
+
177
+ const { DragHandle, LogoButton } = IOLaunchpadDesktop;
178
+
179
+ function CustomBeforeSearch() {
180
+ return (
181
+ <>
182
+ <DragHandle />
183
+ <LogoButton />
184
+ <MyExtraBadge />
185
+ </>
186
+ );
187
+ }
188
+
189
+ const launchpadComponents = { header: { BeforeSearch: CustomBeforeSearch } };
190
+ ```
191
+
192
+ ### 7. Customizing the `LogoButton`
193
+
194
+ `LogoButton` itself accepts `icon`, `iconSrc`, and `onClick` props, so you don't need to replace it entirely just
195
+ to change the logo or its click behavior:
196
+
197
+ ```tsx
198
+ import { IOLaunchpadDesktop } from "@interopio/components-react";
199
+
200
+ const { DragHandle, LogoButton } = IOLaunchpadDesktop;
201
+
202
+ function BeforeSearch() {
203
+ return (
204
+ <>
205
+ <DragHandle />
206
+ <LogoButton iconSrc="/my-logo.png" onClick={() => console.log("logo clicked")} />
207
+ </>
208
+ );
209
+ }
210
+ ```
211
+
212
+ - `icon` — an icon variant name (ignored if `iconSrc` is set); defaults to `"logo"`.
213
+ - `iconSrc` — a custom image URL/data-URI to render instead of `icon`.
214
+ - `onClick` — replaces the default collapse/popup-toggle behavior; drag-to-move still works either way.
215
+
216
+ ### 7. `ExtendedArea` visibility
217
+
218
+ `ExtendedArea` self-guards: it renders `null` unless the Launchpad is both docked and the
219
+ `LAUNCHPAD_SHOW_EXTENDED_AREA` platform pref is enabled, so it's safe to always include it in `AfterSearch` - it
220
+ simply won't render anything otherwise.
@@ -9,7 +9,7 @@
9
9
  "autoInjectAPI": {
10
10
  "enabled": true
11
11
  },
12
- "url": "http://localhost:5178/",
12
+ "url": "http://localhost:4242/",
13
13
  "mode": "frameless",
14
14
  "showInTaskbar": true,
15
15
  "hasSizeAreas": true,