@aexol/opencode-wizard 0.2.0 → 0.2.2

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/dist/tui.js CHANGED
@@ -193,16 +193,6 @@ const SkillsRows = props => {
193
193
  return _el$15;
194
194
  })();
195
195
  };
196
- const CatalogBullet = props => (() => {
197
- var _el$16 = _$createElement("text"),
198
- _el$17 = _$createTextNode(` - `);
199
- _$insertNode(_el$16, _el$17);
200
- _$setProp(_el$16, "wrapMode", "none");
201
- _$setProp(_el$16, "overflow", "hidden");
202
- _$insert(_el$16, () => props.value, null);
203
- _$effect(_$p => _$setProp(_el$16, "fg", props.theme.text, _$p));
204
- return _el$16;
205
- })();
206
196
  const getSkillDisplayName = skill => skill.artifactName || skill.skillName || skill.skillSlug;
207
197
  const getSkillDescription = skill => {
208
198
  if (skill.whenToUse) return skill.whenToUse;
@@ -239,6 +229,13 @@ const getSkillRowState = skill => {
239
229
  if (skill.contextKind === 'global') return 'global-scope';
240
230
  return 'project-scope';
241
231
  };
232
+ const getInstallableNotInstalledSkills = snapshot => {
233
+ const installableSkills = snapshot.installableCatalog?.skills ?? [];
234
+ if (installableSkills.length === 0) return [];
235
+ const activeSkillSlugs = new Set(snapshot.catalog?.skills.map(skill => skill.skillSlug) ?? []);
236
+ const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map(skill => skill.skillSlug));
237
+ return installableSkills.filter(skill => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug));
238
+ };
242
239
  const getErrorMessage = error => {
243
240
  if (error instanceof Error && error.message) return error.message;
244
241
  return 'Preference update failed. Check plugin auth/backend status and try again.';
@@ -248,113 +245,113 @@ const SkillCatalogRow = props => {
248
245
  const description = getSkillDescription(skill);
249
246
  const canUninstall = skill.assignmentSource === 'USER_GLOBAL' || skill.assignmentSource === 'USER_WORKSPACE';
250
247
  return (() => {
251
- var _el$18 = _$createElement("box"),
252
- _el$19 = _$createElement("box"),
253
- _el$20 = _$createElement("text"),
254
- _el$21 = _$createElement("b"),
255
- _el$22 = _$createTextNode(` (`),
256
- _el$24 = _$createTextNode(`)`),
257
- _el$25 = _$createElement("box"),
258
- _el$26 = _$createElement("text");
248
+ var _el$16 = _$createElement("box"),
249
+ _el$17 = _$createElement("box"),
250
+ _el$18 = _$createElement("text"),
251
+ _el$19 = _$createElement("b"),
252
+ _el$20 = _$createTextNode(` (`),
253
+ _el$22 = _$createTextNode(`)`),
254
+ _el$23 = _$createElement("box"),
255
+ _el$24 = _$createElement("text");
256
+ _$insertNode(_el$16, _el$17);
257
+ _$insertNode(_el$16, _el$24);
258
+ _$setProp(_el$16, "width", "100%");
259
+ _$setProp(_el$16, "flexDirection", "column");
260
+ _$setProp(_el$16, "overflow", "hidden");
261
+ _$setProp(_el$16, "marginBottom", 1);
262
+ _$insertNode(_el$17, _el$18);
263
+ _$insertNode(_el$17, _el$23);
264
+ _$setProp(_el$17, "width", "100%");
265
+ _$setProp(_el$17, "flexDirection", "row");
266
+ _$setProp(_el$17, "justifyContent", "space-between");
267
+ _$setProp(_el$17, "overflow", "hidden");
259
268
  _$insertNode(_el$18, _el$19);
260
- _$insertNode(_el$18, _el$26);
261
- _$setProp(_el$18, "width", "100%");
262
- _$setProp(_el$18, "flexDirection", "column");
269
+ _$insertNode(_el$18, _el$20);
270
+ _$insertNode(_el$18, _el$22);
271
+ _$setProp(_el$18, "wrapMode", "none");
263
272
  _$setProp(_el$18, "overflow", "hidden");
264
- _$setProp(_el$18, "marginBottom", 1);
265
- _$insertNode(_el$19, _el$20);
266
- _$insertNode(_el$19, _el$25);
267
- _$setProp(_el$19, "width", "100%");
268
- _$setProp(_el$19, "flexDirection", "row");
269
- _$setProp(_el$19, "justifyContent", "space-between");
270
- _$setProp(_el$19, "overflow", "hidden");
271
- _$insertNode(_el$20, _el$21);
272
- _$insertNode(_el$20, _el$22);
273
- _$insertNode(_el$20, _el$24);
274
- _$setProp(_el$20, "wrapMode", "none");
275
- _$setProp(_el$20, "overflow", "hidden");
276
- _$insert(_el$21, () => compactSkillName(getSkillDisplayName(skill)));
277
- _$insert(_el$20, () => getRowStateLabel(props.row), _el$24);
278
- _$setProp(_el$25, "flexDirection", "row");
279
- _$setProp(_el$25, "flexShrink", 0);
280
- _$insert(_el$25, (() => {
273
+ _$insert(_el$19, () => compactSkillName(getSkillDisplayName(skill)));
274
+ _$insert(_el$18, () => getRowStateLabel(props.row), _el$22);
275
+ _$setProp(_el$23, "flexDirection", "row");
276
+ _$setProp(_el$23, "flexShrink", 0);
277
+ _$insert(_el$23, (() => {
281
278
  var _c$ = _$memo(() => props.row.state === 'installable');
282
279
  return () => _c$() ? [(() => {
283
- var _el$27 = _$createElement("box"),
284
- _el$28 = _$createElement("text");
285
- _$insertNode(_el$27, _el$28);
286
- _$setProp(_el$27, "onMouseUp", () => props.onInstall(props.row, 'global'));
287
- _$setProp(_el$27, "flexShrink", 0);
288
- _$insertNode(_el$28, _$createTextNode(`GLOBAL SCOPE`));
280
+ var _el$25 = _$createElement("box"),
281
+ _el$26 = _$createElement("text");
282
+ _$insertNode(_el$25, _el$26);
283
+ _$setProp(_el$25, "onMouseUp", () => props.onInstall(props.row, 'global'));
284
+ _$setProp(_el$25, "flexShrink", 0);
285
+ _$insertNode(_el$26, _$createTextNode(`GLOBAL SCOPE`));
286
+ _$setProp(_el$26, "wrapMode", "none");
287
+ _$effect(_$p => _$setProp(_el$26, "fg", props.theme.textMuted, _$p));
288
+ return _el$25;
289
+ })(), (() => {
290
+ var _el$28 = _$createElement("text");
291
+ _$insertNode(_el$28, _$createTextNode(` / `));
289
292
  _$setProp(_el$28, "wrapMode", "none");
290
293
  _$effect(_$p => _$setProp(_el$28, "fg", props.theme.textMuted, _$p));
291
- return _el$27;
294
+ return _el$28;
292
295
  })(), (() => {
293
- var _el$30 = _$createElement("text");
294
- _$insertNode(_el$30, _$createTextNode(` / `));
295
- _$setProp(_el$30, "wrapMode", "none");
296
- _$effect(_$p => _$setProp(_el$30, "fg", props.theme.textMuted, _$p));
296
+ var _el$30 = _$createElement("box"),
297
+ _el$31 = _$createElement("text");
298
+ _$insertNode(_el$30, _el$31);
299
+ _$setProp(_el$30, "onMouseUp", () => props.onInstall(props.row, 'project'));
300
+ _$setProp(_el$30, "flexShrink", 0);
301
+ _$insertNode(_el$31, _$createTextNode(`PROJECT SCOPE`));
302
+ _$setProp(_el$31, "wrapMode", "none");
303
+ _$effect(_$p => _$setProp(_el$31, "fg", props.theme.textMuted, _$p));
297
304
  return _el$30;
298
- })(), (() => {
299
- var _el$32 = _$createElement("box"),
300
- _el$33 = _$createElement("text");
301
- _$insertNode(_el$32, _el$33);
302
- _$setProp(_el$32, "onMouseUp", () => props.onInstall(props.row, 'project'));
303
- _$setProp(_el$32, "flexShrink", 0);
304
- _$insertNode(_el$33, _$createTextNode(`PROJECT SCOPE`));
305
- _$setProp(_el$33, "wrapMode", "none");
306
- _$effect(_$p => _$setProp(_el$33, "fg", props.theme.textMuted, _$p));
307
- return _el$32;
308
305
  })()] : [(() => {
309
- var _el$35 = _$createElement("box"),
310
- _el$36 = _$createElement("text");
311
- _$insertNode(_el$35, _el$36);
312
- _$setProp(_el$35, "onMouseUp", () => props.onIgnore(props.row));
313
- _$setProp(_el$35, "flexShrink", 0);
314
- _$setProp(_el$36, "wrapMode", "none");
315
- _$insert(_el$36, () => props.row.ignored ? 'Unignore' : 'Ignore');
316
- _$effect(_$p => _$setProp(_el$36, "fg", props.theme.textMuted, _$p));
317
- return _el$35;
306
+ var _el$33 = _$createElement("box"),
307
+ _el$34 = _$createElement("text");
308
+ _$insertNode(_el$33, _el$34);
309
+ _$setProp(_el$33, "onMouseUp", () => props.onIgnore(props.row));
310
+ _$setProp(_el$33, "flexShrink", 0);
311
+ _$setProp(_el$34, "wrapMode", "none");
312
+ _$insert(_el$34, () => props.row.ignored ? 'Unignore' : 'Ignore');
313
+ _$effect(_$p => _$setProp(_el$34, "fg", props.theme.textMuted, _$p));
314
+ return _el$33;
318
315
  })(), canUninstall ? [(() => {
319
- var _el$37 = _$createElement("text");
320
- _$insertNode(_el$37, _$createTextNode(` / `));
321
- _$setProp(_el$37, "wrapMode", "none");
322
- _$effect(_$p => _$setProp(_el$37, "fg", props.theme.textMuted, _$p));
323
- return _el$37;
316
+ var _el$35 = _$createElement("text");
317
+ _$insertNode(_el$35, _$createTextNode(` / `));
318
+ _$setProp(_el$35, "wrapMode", "none");
319
+ _$effect(_$p => _$setProp(_el$35, "fg", props.theme.textMuted, _$p));
320
+ return _el$35;
324
321
  })(), (() => {
325
- var _el$39 = _$createElement("box"),
326
- _el$40 = _$createElement("text");
327
- _$insertNode(_el$39, _el$40);
328
- _$setProp(_el$39, "onMouseUp", () => props.onUninstall(props.row));
329
- _$setProp(_el$39, "flexShrink", 0);
330
- _$insertNode(_el$40, _$createTextNode(`Uninstall`));
331
- _$setProp(_el$40, "wrapMode", "none");
332
- _$effect(_$p => _$setProp(_el$40, "fg", props.theme.textMuted, _$p));
333
- return _el$39;
322
+ var _el$37 = _$createElement("box"),
323
+ _el$38 = _$createElement("text");
324
+ _$insertNode(_el$37, _el$38);
325
+ _$setProp(_el$37, "onMouseUp", () => props.onUninstall(props.row));
326
+ _$setProp(_el$37, "flexShrink", 0);
327
+ _$insertNode(_el$38, _$createTextNode(`Uninstall`));
328
+ _$setProp(_el$38, "wrapMode", "none");
329
+ _$effect(_$p => _$setProp(_el$38, "fg", props.theme.textMuted, _$p));
330
+ return _el$37;
334
331
  })()] : null];
335
332
  })());
336
- _$setProp(_el$26, "wrapMode", "none");
337
- _$setProp(_el$26, "overflow", "hidden");
338
- _$insert(_el$26, () => compactSkillMeta(getSkillMeta(skill, props.row.state)));
339
- _$insert(_el$18, description ? (() => {
340
- var _el$42 = _$createElement("text");
341
- _$setProp(_el$42, "wrapMode", "none");
342
- _$setProp(_el$42, "overflow", "hidden");
343
- _$insert(_el$42, () => compactSkillDescription(description));
344
- _$effect(_$p => _$setProp(_el$42, "fg", props.theme.text, _$p));
345
- return _el$42;
333
+ _$setProp(_el$24, "wrapMode", "none");
334
+ _$setProp(_el$24, "overflow", "hidden");
335
+ _$insert(_el$24, () => compactSkillMeta(getSkillMeta(skill, props.row.state)));
336
+ _$insert(_el$16, description ? (() => {
337
+ var _el$40 = _$createElement("text");
338
+ _$setProp(_el$40, "wrapMode", "none");
339
+ _$setProp(_el$40, "overflow", "hidden");
340
+ _$insert(_el$40, () => compactSkillDescription(description));
341
+ _$effect(_$p => _$setProp(_el$40, "fg", props.theme.text, _$p));
342
+ return _el$40;
346
343
  })() : null, null);
347
344
  _$effect(_p$ => {
348
345
  var _v$6 = props.row.ignored ? props.theme.textMuted : props.theme.text,
349
346
  _v$7 = props.theme.textMuted;
350
- _v$6 !== _p$.e && (_p$.e = _$setProp(_el$20, "fg", _v$6, _p$.e));
351
- _v$7 !== _p$.t && (_p$.t = _$setProp(_el$26, "fg", _v$7, _p$.t));
347
+ _v$6 !== _p$.e && (_p$.e = _$setProp(_el$18, "fg", _v$6, _p$.e));
348
+ _v$7 !== _p$.t && (_p$.t = _$setProp(_el$24, "fg", _v$7, _p$.t));
352
349
  return _p$;
353
350
  }, {
354
351
  e: undefined,
355
352
  t: undefined
356
353
  });
357
- return _el$18;
354
+ return _el$16;
358
355
  })();
359
356
  };
360
357
  const WizardSkillsDialogContent = props => {
@@ -363,43 +360,42 @@ const WizardSkillsDialogContent = props => {
363
360
  const currentStatus = props.status();
364
361
  if (currentStatus.kind === 'loading') {
365
362
  return (() => {
366
- var _el$43 = _$createElement("text");
367
- _$insertNode(_el$43, _$createTextNode(`Refreshing published skills…`));
363
+ var _el$41 = _$createElement("text");
364
+ _$insertNode(_el$41, _$createTextNode(`Refreshing published skills…`));
365
+ _$setProp(_el$41, "wrapMode", "none");
366
+ _$setProp(_el$41, "overflow", "hidden");
367
+ _$effect(_$p => _$setProp(_el$41, "fg", props.theme.textMuted, _$p));
368
+ return _el$41;
369
+ })();
370
+ }
371
+ if (currentStatus.kind === 'error') {
372
+ return (() => {
373
+ var _el$43 = _$createElement("text"),
374
+ _el$44 = _$createTextNode(`unavailable: `);
375
+ _$insertNode(_el$43, _el$44);
368
376
  _$setProp(_el$43, "wrapMode", "none");
369
377
  _$setProp(_el$43, "overflow", "hidden");
370
- _$effect(_$p => _$setProp(_el$43, "fg", props.theme.textMuted, _$p));
378
+ _$insert(_el$43, () => compactStatusMessage(currentStatus.message), null);
379
+ _$effect(_$p => _$setProp(_el$43, "fg", props.theme.warning, _$p));
371
380
  return _el$43;
372
381
  })();
373
382
  }
374
- if (currentStatus.kind === 'error') {
383
+ if (!currentStatus.snapshot.catalog) {
375
384
  return (() => {
376
385
  var _el$45 = _$createElement("text"),
377
- _el$46 = _$createTextNode(`unavailable: `);
386
+ _el$46 = _$createTextNode(`catalog `);
378
387
  _$insertNode(_el$45, _el$46);
379
388
  _$setProp(_el$45, "wrapMode", "none");
380
389
  _$setProp(_el$45, "overflow", "hidden");
381
- _$insert(_el$45, () => compactStatusMessage(currentStatus.message), null);
382
- _$effect(_$p => _$setProp(_el$45, "fg", props.theme.warning, _$p));
390
+ _$insert(_el$45, () => formatSkillsCatalogUnavailableMessage(currentStatus.snapshot), null);
391
+ _$effect(_$p => _$setProp(_el$45, "fg", props.theme.textMuted, _$p));
383
392
  return _el$45;
384
393
  })();
385
394
  }
386
- if (!currentStatus.snapshot.catalog) {
387
- return (() => {
388
- var _el$47 = _$createElement("text"),
389
- _el$48 = _$createTextNode(`catalog `);
390
- _$insertNode(_el$47, _el$48);
391
- _$setProp(_el$47, "wrapMode", "none");
392
- _$setProp(_el$47, "overflow", "hidden");
393
- _$insert(_el$47, () => formatSkillsCatalogUnavailableMessage(currentStatus.snapshot), null);
394
- _$effect(_$p => _$setProp(_el$47, "fg", props.theme.textMuted, _$p));
395
- return _el$47;
396
- })();
397
- }
398
395
  const {
399
396
  catalog
400
397
  } = currentStatus.snapshot;
401
- const activeSkillSlugs = new Set(catalog.skills.map(skill => skill.skillSlug));
402
- const ignoredSkillSlugs = new Set(currentStatus.snapshot.ignoredPublishedSkills.skills.map(skill => skill.skillSlug));
398
+ const installableNotInstalledSkills = getInstallableNotInstalledSkills(currentStatus.snapshot);
403
399
  const rows = [...catalog.skills.map(skill => ({
404
400
  skill,
405
401
  ignored: false,
@@ -408,7 +404,7 @@ const WizardSkillsDialogContent = props => {
408
404
  skill,
409
405
  ignored: true,
410
406
  state: getSkillRowState(skill)
411
- })), ...(currentStatus.snapshot.installableCatalog?.skills ?? []).filter(skill => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug)).map(skill => ({
407
+ })), ...installableNotInstalledSkills.map(skill => ({
412
408
  skill,
413
409
  ignored: false,
414
410
  state: 'installable'
@@ -429,66 +425,66 @@ const WizardSkillsDialogContent = props => {
429
425
  setPage(currentPage + 1);
430
426
  };
431
427
  return (() => {
432
- var _el$49 = _$createElement("box"),
433
- _el$50 = _$createElement("box"),
434
- _el$51 = _$createElement("text"),
435
- _el$52 = _$createElement("b"),
436
- _el$53 = _$createTextNode(` skills`),
437
- _el$54 = _$createTextNode(` · `),
438
- _el$55 = _$createTextNode(` GLOBAL SCOPE · `),
439
- _el$56 = _$createTextNode(` PROJECT SCOPE  · `),
440
- _el$57 = _$createTextNode(` USER SCOPE  · `),
441
- _el$58 = _$createTextNode(` ignored  · `),
442
- _el$59 = _$createTextNode(` installable`),
443
- _el$60 = _$createElement("text"),
444
- _el$61 = _$createTextNode(`page `),
445
- _el$62 = _$createTextNode(`/`),
428
+ var _el$47 = _$createElement("box"),
429
+ _el$48 = _$createElement("box"),
430
+ _el$49 = _$createElement("text"),
431
+ _el$50 = _$createElement("b"),
432
+ _el$51 = _$createTextNode(` skills`),
433
+ _el$52 = _$createTextNode(` · `),
434
+ _el$53 = _$createTextNode(` GLOBAL SCOPE · `),
435
+ _el$54 = _$createTextNode(` PROJECT SCOPE  · `),
436
+ _el$55 = _$createTextNode(` USER SCOPE  · `),
437
+ _el$56 = _$createTextNode(` ignored  · `),
438
+ _el$57 = _$createTextNode(` installable/not installed`),
439
+ _el$58 = _$createElement("text"),
440
+ _el$59 = _$createTextNode(`page `),
441
+ _el$60 = _$createTextNode(`/`),
442
+ _el$61 = _$createElement("box"),
443
+ _el$62 = _$createElement("box"),
446
444
  _el$63 = _$createElement("box"),
447
- _el$64 = _$createElement("box"),
448
- _el$65 = _$createElement("box"),
445
+ _el$64 = _$createElement("text"),
449
446
  _el$66 = _$createElement("text"),
450
- _el$68 = _$createElement("text"),
451
- _el$69 = _$createTextNode(` shown`),
452
- _el$70 = _$createElement("box"),
453
- _el$71 = _$createElement("text");
447
+ _el$67 = _$createTextNode(` shown`),
448
+ _el$68 = _$createElement("box"),
449
+ _el$69 = _$createElement("text");
450
+ _$insertNode(_el$47, _el$48);
451
+ _$insertNode(_el$47, _el$61);
452
+ _$insertNode(_el$47, _el$62);
453
+ _$setProp(_el$47, "width", "100%");
454
+ _$setProp(_el$47, "flexDirection", "column");
455
+ _$setProp(_el$47, "overflow", "hidden");
456
+ _$insertNode(_el$48, _el$49);
457
+ _$insertNode(_el$48, _el$58);
458
+ _$setProp(_el$48, "width", "100%");
459
+ _$setProp(_el$48, "flexDirection", "row");
460
+ _$setProp(_el$48, "justifyContent", "space-between");
461
+ _$setProp(_el$48, "overflow", "hidden");
454
462
  _$insertNode(_el$49, _el$50);
455
- _$insertNode(_el$49, _el$63);
456
- _$insertNode(_el$49, _el$64);
457
- _$setProp(_el$49, "width", "100%");
458
- _$setProp(_el$49, "flexDirection", "column");
463
+ _$insertNode(_el$49, _el$52);
464
+ _$insertNode(_el$49, _el$53);
465
+ _$insertNode(_el$49, _el$54);
466
+ _$insertNode(_el$49, _el$55);
467
+ _$insertNode(_el$49, _el$56);
468
+ _$insertNode(_el$49, _el$57);
469
+ _$setProp(_el$49, "wrapMode", "none");
459
470
  _$setProp(_el$49, "overflow", "hidden");
460
471
  _$insertNode(_el$50, _el$51);
461
- _$insertNode(_el$50, _el$60);
462
- _$setProp(_el$50, "width", "100%");
463
- _$setProp(_el$50, "flexDirection", "row");
464
- _$setProp(_el$50, "justifyContent", "space-between");
465
- _$setProp(_el$50, "overflow", "hidden");
466
- _$insertNode(_el$51, _el$52);
467
- _$insertNode(_el$51, _el$54);
468
- _$insertNode(_el$51, _el$55);
469
- _$insertNode(_el$51, _el$56);
470
- _$insertNode(_el$51, _el$57);
471
- _$insertNode(_el$51, _el$58);
472
- _$insertNode(_el$51, _el$59);
473
- _$setProp(_el$51, "wrapMode", "none");
474
- _$setProp(_el$51, "overflow", "hidden");
475
- _$insertNode(_el$52, _el$53);
476
- _$insert(_el$52, () => catalog.publishedSkillCount, _el$53);
477
- _$insert(_el$51, () => catalog.assignmentCounts.global, _el$55);
478
- _$insert(_el$51, () => catalog.assignmentCounts.project, _el$56);
479
- _$insert(_el$51, () => catalog.assignmentCounts.user, _el$57);
480
- _$insert(_el$51, () => currentStatus.snapshot.ignoredPublishedSkills.count, _el$58);
481
- _$insert(_el$51, () => currentStatus.snapshot.installableCatalog?.count ?? 0, _el$59);
482
- _$insertNode(_el$60, _el$61);
483
- _$insertNode(_el$60, _el$62);
484
- _$setProp(_el$60, "wrapMode", "none");
485
- _$insert(_el$60, currentPage + 1, _el$62);
486
- _$insert(_el$60, totalPages, null);
487
- _$setProp(_el$63, "width", "100%");
488
- _$setProp(_el$63, "flexDirection", "column");
489
- _$setProp(_el$63, "marginTop", 1);
490
- _$setProp(_el$63, "overflow", "hidden");
491
- _$insert(_el$63, () => visibleRows.map(row => _$createComponent(SkillCatalogRow, {
472
+ _$insert(_el$50, () => catalog.publishedSkillCount, _el$51);
473
+ _$insert(_el$49, () => catalog.assignmentCounts.global, _el$53);
474
+ _$insert(_el$49, () => catalog.assignmentCounts.project, _el$54);
475
+ _$insert(_el$49, () => catalog.assignmentCounts.user, _el$55);
476
+ _$insert(_el$49, () => currentStatus.snapshot.ignoredPublishedSkills.count, _el$56);
477
+ _$insert(_el$49, () => installableNotInstalledSkills.length, _el$57);
478
+ _$insertNode(_el$58, _el$59);
479
+ _$insertNode(_el$58, _el$60);
480
+ _$setProp(_el$58, "wrapMode", "none");
481
+ _$insert(_el$58, currentPage + 1, _el$60);
482
+ _$insert(_el$58, totalPages, null);
483
+ _$setProp(_el$61, "width", "100%");
484
+ _$setProp(_el$61, "flexDirection", "column");
485
+ _$setProp(_el$61, "marginTop", 1);
486
+ _$setProp(_el$61, "overflow", "hidden");
487
+ _$insert(_el$61, () => visibleRows.map(row => _$createComponent(SkillCatalogRow, {
492
488
  row: row,
493
489
  get theme() {
494
490
  return props.theme;
@@ -503,38 +499,38 @@ const WizardSkillsDialogContent = props => {
503
499
  return props.onUninstallSkill;
504
500
  }
505
501
  })));
506
- _$insertNode(_el$64, _el$65);
507
- _$insertNode(_el$64, _el$68);
508
- _$insertNode(_el$64, _el$70);
509
- _$setProp(_el$64, "width", "100%");
510
- _$setProp(_el$64, "flexDirection", "row");
511
- _$setProp(_el$64, "justifyContent", "space-between");
512
- _$setProp(_el$64, "overflow", "hidden");
513
- _$insertNode(_el$65, _el$66);
514
- _$setProp(_el$65, "onMouseUp", goBack);
515
- _$setProp(_el$65, "flexShrink", 0);
516
- _$insertNode(_el$66, _$createTextNode(`← Prev`));
502
+ _$insertNode(_el$62, _el$63);
503
+ _$insertNode(_el$62, _el$66);
504
+ _$insertNode(_el$62, _el$68);
505
+ _$setProp(_el$62, "width", "100%");
506
+ _$setProp(_el$62, "flexDirection", "row");
507
+ _$setProp(_el$62, "justifyContent", "space-between");
508
+ _$setProp(_el$62, "overflow", "hidden");
509
+ _$insertNode(_el$63, _el$64);
510
+ _$setProp(_el$63, "onMouseUp", goBack);
511
+ _$setProp(_el$63, "flexShrink", 0);
512
+ _$insertNode(_el$64, _$createTextNode(`← Prev`));
513
+ _$setProp(_el$64, "wrapMode", "none");
514
+ _$insertNode(_el$66, _el$67);
517
515
  _$setProp(_el$66, "wrapMode", "none");
516
+ _$setProp(_el$66, "overflow", "hidden");
517
+ _$insert(_el$66, () => visibleRows.length, _el$67);
518
518
  _$insertNode(_el$68, _el$69);
519
- _$setProp(_el$68, "wrapMode", "none");
520
- _$setProp(_el$68, "overflow", "hidden");
521
- _$insert(_el$68, () => visibleRows.length, _el$69);
522
- _$insertNode(_el$70, _el$71);
523
- _$setProp(_el$70, "onMouseUp", goForward);
524
- _$setProp(_el$70, "flexShrink", 0);
525
- _$insertNode(_el$71, _$createTextNode(`Next →`));
526
- _$setProp(_el$71, "wrapMode", "none");
519
+ _$setProp(_el$68, "onMouseUp", goForward);
520
+ _$setProp(_el$68, "flexShrink", 0);
521
+ _$insertNode(_el$69, _$createTextNode(`Next →`));
522
+ _$setProp(_el$69, "wrapMode", "none");
527
523
  _$effect(_p$ => {
528
524
  var _v$8 = props.theme.text,
529
525
  _v$9 = props.theme.textMuted,
530
526
  _v$0 = canGoBack ? props.theme.text : props.theme.textMuted,
531
527
  _v$1 = props.theme.textMuted,
532
528
  _v$10 = canGoForward ? props.theme.text : props.theme.textMuted;
533
- _v$8 !== _p$.e && (_p$.e = _$setProp(_el$51, "fg", _v$8, _p$.e));
534
- _v$9 !== _p$.t && (_p$.t = _$setProp(_el$60, "fg", _v$9, _p$.t));
535
- _v$0 !== _p$.a && (_p$.a = _$setProp(_el$66, "fg", _v$0, _p$.a));
536
- _v$1 !== _p$.o && (_p$.o = _$setProp(_el$68, "fg", _v$1, _p$.o));
537
- _v$10 !== _p$.i && (_p$.i = _$setProp(_el$71, "fg", _v$10, _p$.i));
529
+ _v$8 !== _p$.e && (_p$.e = _$setProp(_el$49, "fg", _v$8, _p$.e));
530
+ _v$9 !== _p$.t && (_p$.t = _$setProp(_el$58, "fg", _v$9, _p$.t));
531
+ _v$0 !== _p$.a && (_p$.a = _$setProp(_el$64, "fg", _v$0, _p$.a));
532
+ _v$1 !== _p$.o && (_p$.o = _$setProp(_el$66, "fg", _v$1, _p$.o));
533
+ _v$10 !== _p$.i && (_p$.i = _$setProp(_el$69, "fg", _v$10, _p$.i));
538
534
  return _p$;
539
535
  }, {
540
536
  e: undefined,
@@ -543,15 +539,15 @@ const WizardSkillsDialogContent = props => {
543
539
  o: undefined,
544
540
  i: undefined
545
541
  });
546
- return _el$49;
542
+ return _el$47;
547
543
  })();
548
544
  };
549
545
  return (() => {
550
- var _el$73 = _$createElement("box");
551
- _$setProp(_el$73, "width", "100%");
552
- _$setProp(_el$73, "flexDirection", "column");
553
- _$setProp(_el$73, "overflow", "hidden");
554
- _$insert(_el$73, _$createComponent(PreferenceActionNoticeRow, {
546
+ var _el$71 = _$createElement("box");
547
+ _$setProp(_el$71, "width", "100%");
548
+ _$setProp(_el$71, "flexDirection", "column");
549
+ _$setProp(_el$71, "overflow", "hidden");
550
+ _$insert(_el$71, _$createComponent(PreferenceActionNoticeRow, {
555
551
  get notice() {
556
552
  return props.actionNotice();
557
553
  },
@@ -559,19 +555,19 @@ const WizardSkillsDialogContent = props => {
559
555
  return props.theme;
560
556
  }
561
557
  }), null);
562
- _$insert(_el$73, content, null);
563
- return _el$73;
558
+ _$insert(_el$71, content, null);
559
+ return _el$71;
564
560
  })();
565
561
  };
566
562
  const PreferenceActionNoticeRow = props => {
567
563
  if (props.notice.kind === 'idle') return null;
568
564
  return (() => {
569
- var _el$74 = _$createElement("text");
570
- _$setProp(_el$74, "wrapMode", "none");
571
- _$setProp(_el$74, "overflow", "hidden");
572
- _$insert(_el$74, () => compactStatusMessage(props.notice.message));
573
- _$effect(_$p => _$setProp(_el$74, "fg", props.notice.kind === 'error' ? props.theme.warning : props.theme.textMuted, _$p));
574
- return _el$74;
565
+ var _el$72 = _$createElement("text");
566
+ _$setProp(_el$72, "wrapMode", "none");
567
+ _$setProp(_el$72, "overflow", "hidden");
568
+ _$insert(_el$72, () => compactStatusMessage(props.notice.message));
569
+ _$effect(_$p => _$setProp(_el$72, "fg", props.notice.kind === 'error' ? props.theme.warning : props.theme.textMuted, _$p));
570
+ return _el$72;
575
571
  })();
576
572
  };
577
573
  const ReadyRows = props => {
@@ -600,12 +596,12 @@ const ReadyRows = props => {
600
596
  })];
601
597
  if (!props.snapshot.catalog) {
602
598
  return (() => {
603
- var _el$75 = _$createElement("box");
604
- _$setProp(_el$75, "width", "100%");
605
- _$setProp(_el$75, "flexDirection", "column");
606
- _$setProp(_el$75, "overflow", "hidden");
607
- _$insert(_el$75, statusRows, null);
608
- _$insert(_el$75, _$createComponent(Row, {
599
+ var _el$73 = _$createElement("box");
600
+ _$setProp(_el$73, "width", "100%");
601
+ _$setProp(_el$73, "flexDirection", "column");
602
+ _$setProp(_el$73, "overflow", "hidden");
603
+ _$insert(_el$73, statusRows, null);
604
+ _$insert(_el$73, _$createComponent(Row, {
609
605
  label: "catalog",
610
606
  get value() {
611
607
  return formatSkillsCatalogUnavailableMessage(props.snapshot);
@@ -617,63 +613,28 @@ const ReadyRows = props => {
617
613
  return props.theme.text;
618
614
  }
619
615
  }), null);
620
- return _el$75;
616
+ return _el$73;
621
617
  })();
622
618
  }
623
- const counts = props.snapshot.catalog.assignmentCounts;
619
+ const installableNotInstalledCount = getInstallableNotInstalledSkills(props.snapshot).length;
620
+ const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable · ${props.snapshot.ignoredPublishedSkills.count} ignored · open for details`;
624
621
  return (() => {
625
- var _el$76 = _$createElement("box"),
626
- _el$77 = _$createElement("text");
627
- _$insertNode(_el$76, _el$77);
628
- _$setProp(_el$76, "width", "100%");
629
- _$setProp(_el$76, "flexDirection", "column");
630
- _$setProp(_el$76, "overflow", "hidden");
631
- _$insert(_el$76, statusRows, _el$77);
632
- _$insertNode(_el$77, _$createTextNode(`catalog:`));
633
- _$setProp(_el$77, "wrapMode", "none");
634
- _$setProp(_el$77, "overflow", "hidden");
635
- _$insert(_el$76, _$createComponent(CatalogBullet, {
636
- get value() {
637
- return `${props.snapshot.catalog.publishedSkillCount} loaded`;
638
- },
639
- get theme() {
640
- return props.theme;
641
- }
642
- }), null);
643
- _$insert(_el$76, _$createComponent(CatalogBullet, {
644
- get value() {
645
- return `${counts.global} GLOBAL SCOPE`;
646
- },
647
- get theme() {
648
- return props.theme;
649
- }
650
- }), null);
651
- _$insert(_el$76, _$createComponent(CatalogBullet, {
652
- get value() {
653
- return `${counts.project} PROJECT SCOPE`;
654
- },
655
- get theme() {
656
- return props.theme;
657
- }
658
- }), null);
659
- _$insert(_el$76, _$createComponent(CatalogBullet, {
660
- get value() {
661
- return `${counts.user} USER SCOPE`;
662
- },
663
- get theme() {
664
- return props.theme;
665
- }
666
- }), null);
667
- _$insert(_el$76, _$createComponent(CatalogBullet, {
668
- get value() {
669
- return `${props.snapshot.ignoredPublishedSkills.count} ignored`;
622
+ var _el$74 = _$createElement("box");
623
+ _$setProp(_el$74, "width", "100%");
624
+ _$setProp(_el$74, "flexDirection", "column");
625
+ _$setProp(_el$74, "overflow", "hidden");
626
+ _$insert(_el$74, statusRows, null);
627
+ _$insert(_el$74, _$createComponent(Row, {
628
+ label: "catalog",
629
+ value: catalogStatus,
630
+ get labelColor() {
631
+ return props.theme.textMuted;
670
632
  },
671
- get theme() {
672
- return props.theme;
633
+ get valueColor() {
634
+ return props.theme.text;
673
635
  }
674
636
  }), null);
675
- _$effect(_$p => _$setProp(_el$77, "fg", props.theme.textMuted, _$p));
676
- return _el$76;
637
+ return _el$74;
677
638
  })();
678
639
  };
679
640
  const WizardSkillsDialog = props => {
@@ -759,39 +720,39 @@ const WizardSkillsDialog = props => {
759
720
  props.api.ui?.dialog?.setSize?.('xlarge');
760
721
  });
761
722
  return (() => {
762
- var _el$79 = _$createElement("box"),
723
+ var _el$75 = _$createElement("box"),
724
+ _el$76 = _$createElement("box"),
725
+ _el$77 = _$createElement("text"),
726
+ _el$78 = _$createElement("b"),
763
727
  _el$80 = _$createElement("box"),
764
728
  _el$81 = _$createElement("text"),
765
- _el$82 = _$createElement("b"),
766
- _el$84 = _$createElement("box"),
767
- _el$85 = _$createElement("text"),
768
- _el$87 = _$createElement("box");
769
- _$insertNode(_el$79, _el$80);
770
- _$insertNode(_el$79, _el$87);
771
- _$setProp(_el$79, "width", "100%");
772
- _$setProp(_el$79, "flexDirection", "column");
773
- _$setProp(_el$79, "paddingLeft", 1);
774
- _$setProp(_el$79, "paddingRight", 1);
775
- _$setProp(_el$79, "paddingBottom", 1);
729
+ _el$83 = _$createElement("box");
730
+ _$insertNode(_el$75, _el$76);
731
+ _$insertNode(_el$75, _el$83);
732
+ _$setProp(_el$75, "width", "100%");
733
+ _$setProp(_el$75, "flexDirection", "column");
734
+ _$setProp(_el$75, "paddingLeft", 1);
735
+ _$setProp(_el$75, "paddingRight", 1);
736
+ _$setProp(_el$75, "paddingBottom", 1);
737
+ _$insertNode(_el$76, _el$77);
738
+ _$insertNode(_el$76, _el$80);
739
+ _$setProp(_el$76, "width", "100%");
740
+ _$setProp(_el$76, "flexDirection", "row");
741
+ _$setProp(_el$76, "justifyContent", "space-between");
742
+ _$setProp(_el$76, "overflow", "hidden");
743
+ _$insertNode(_el$77, _el$78);
744
+ _$setProp(_el$77, "wrapMode", "none");
745
+ _$setProp(_el$77, "overflow", "hidden");
746
+ _$insertNode(_el$78, _$createTextNode(`Wizard Skills`));
776
747
  _$insertNode(_el$80, _el$81);
777
- _$insertNode(_el$80, _el$84);
778
- _$setProp(_el$80, "width", "100%");
779
- _$setProp(_el$80, "flexDirection", "row");
780
- _$setProp(_el$80, "justifyContent", "space-between");
781
- _$setProp(_el$80, "overflow", "hidden");
782
- _$insertNode(_el$81, _el$82);
748
+ _$setProp(_el$80, "flexShrink", 0);
749
+ _$insertNode(_el$81, _$createTextNode(`Close`));
783
750
  _$setProp(_el$81, "wrapMode", "none");
784
- _$setProp(_el$81, "overflow", "hidden");
785
- _$insertNode(_el$82, _$createTextNode(`Wizard Skills`));
786
- _$insertNode(_el$84, _el$85);
787
- _$setProp(_el$84, "flexShrink", 0);
788
- _$insertNode(_el$85, _$createTextNode(`Close`));
789
- _$setProp(_el$85, "wrapMode", "none");
790
- _$setProp(_el$87, "width", "100%");
791
- _$setProp(_el$87, "flexDirection", "column");
792
- _$setProp(_el$87, "marginTop", 1);
793
- _$setProp(_el$87, "overflow", "hidden");
794
- _$insert(_el$87, _$createComponent(WizardSkillsDialogContent, {
751
+ _$setProp(_el$83, "width", "100%");
752
+ _$setProp(_el$83, "flexDirection", "column");
753
+ _$setProp(_el$83, "marginTop", 1);
754
+ _$setProp(_el$83, "overflow", "hidden");
755
+ _$insert(_el$83, _$createComponent(WizardSkillsDialogContent, {
795
756
  get status() {
796
757
  return props.status;
797
758
  },
@@ -807,16 +768,16 @@ const WizardSkillsDialog = props => {
807
768
  var _v$11 = theme().text,
808
769
  _v$12 = props.onClose,
809
770
  _v$13 = theme().textMuted;
810
- _v$11 !== _p$.e && (_p$.e = _$setProp(_el$81, "fg", _v$11, _p$.e));
811
- _v$12 !== _p$.t && (_p$.t = _$setProp(_el$84, "onMouseUp", _v$12, _p$.t));
812
- _v$13 !== _p$.a && (_p$.a = _$setProp(_el$85, "fg", _v$13, _p$.a));
771
+ _v$11 !== _p$.e && (_p$.e = _$setProp(_el$77, "fg", _v$11, _p$.e));
772
+ _v$12 !== _p$.t && (_p$.t = _$setProp(_el$80, "onMouseUp", _v$12, _p$.t));
773
+ _v$13 !== _p$.a && (_p$.a = _$setProp(_el$81, "fg", _v$13, _p$.a));
813
774
  return _p$;
814
775
  }, {
815
776
  e: undefined,
816
777
  t: undefined,
817
778
  a: undefined
818
779
  });
819
- return _el$79;
780
+ return _el$75;
820
781
  })();
821
782
  };
822
783
  const openWizardSkillsDialog = (api, status, refreshStatus) => {