@kodaris/krubble-app-components 1.0.81 → 1.0.83

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.
@@ -6503,6 +6503,13 @@
6503
6503
  }
6504
6504
  /** Insert `/code ` into the composer and focus it, ready for the message. */
6505
6505
  _handleSkillSelect(skill) {
6506
+ // A global skill must be installed before it can be chosen — inserting /code
6507
+ // for one not enabled on this instance would just fail. `enabled` is only set
6508
+ // on global skills (false = not installed); org skills leave it undefined and
6509
+ // are always selectable. So an uninstalled global card click does nothing.
6510
+ if (skill.enabled === false) {
6511
+ return;
6512
+ }
6506
6513
  this._inputValue = `/${skill.code} `;
6507
6514
  this._saveState();
6508
6515
  this._skillMenuOpened = false;
@@ -7106,28 +7113,32 @@
7106
7113
  }
7107
7114
  return b `
7108
7115
  <div class="skill-browse__grid">
7109
- ${skills.map((skill) => {
7110
- // A global skill must be installed before it can be chosen — inserting
7111
- // /code for a skill not enabled on this instance would just fail. So an
7112
- // uninstalled global card does nothing on click; only its Install button
7113
- // is interactive.
7114
- const selectable = !global || !!skill.enabled;
7115
- return b `
7116
- <div
7117
- class="skill-card"
7118
- role=${selectable ? 'button' : A}
7119
- tabindex=${selectable ? 0 : A}
7120
- @click=${selectable ? () => this._handleSkillSelect(skill) : A}
7121
- @keydown=${selectable ? (e) => this._handleSkillCardKeydown(e, skill) : A}
7122
- >
7123
- <span class="skill-card__name">${skill.name}</span>
7124
- ${skill.description ? b `
7125
- <span class="skill-card__desc">${skill.description}</span>
7126
- ` : A}
7127
- ${global ? this._renderSkillToggle(skill) : A}
7128
- </div>
7129
- `;
7130
- })}
7116
+ ${skills.map((skill) => b `
7117
+ <div
7118
+ class="skill-card"
7119
+ role="button"
7120
+ tabindex="0"
7121
+ @click=${() => this._handleSkillSelect(skill)}
7122
+ @keydown=${(e) => this._handleSkillCardKeydown(e, skill)}
7123
+ >
7124
+ <span class="skill-card__name">${skill.name}</span>
7125
+ ${skill.description ? b `
7126
+ <span class="skill-card__desc">${skill.description}</span>
7127
+ ` : A}
7128
+ ${global ? b `
7129
+ <div class="skill-card__footer" @click=${this._stopFooterClick}>
7130
+ <span class="skill-card__price">Free</span>
7131
+ <kr-button
7132
+ class="skill-card__install-btn"
7133
+ size="small"
7134
+ variant=${skill.enabled ? 'outline' : 'flat'}
7135
+ color=${skill.enabled ? 'secondary' : 'primary'}
7136
+ @click=${(e) => this._handleGlobalSkillEnable(skill, e)}
7137
+ >${skill.enabled ? 'Uninstall' : 'Install'}</kr-button>
7138
+ </div>
7139
+ ` : A}
7140
+ </div>
7141
+ `)}
7131
7142
  </div>
7132
7143
  `;
7133
7144
  }
@@ -7135,31 +7146,6 @@
7135
7146
  _stopFooterClick(e) {
7136
7147
  e.stopPropagation();
7137
7148
  }
7138
- /**
7139
- * The install affordance on a global skill card: a footer row with an
7140
- * install/remove button. The button owns its own spinner via KRButton's
7141
- * showLoading()/showError() while the enable/disable request is in flight, so
7142
- * the async call has clear feedback. Clicks are stopped from bubbling so the
7143
- * button never also inserts the skill (the card body does that).
7144
- */
7145
- _renderSkillToggle(skill) {
7146
- const on = !!skill.enabled;
7147
- return b `
7148
- <div
7149
- class="skill-card__footer"
7150
- @click=${this._stopFooterClick}
7151
- >
7152
- <span class="skill-card__price">Free</span>
7153
- <kr-button
7154
- class="skill-card__install-btn"
7155
- size="small"
7156
- variant=${on ? 'outline' : 'flat'}
7157
- color=${on ? 'secondary' : 'primary'}
7158
- @click=${(e) => this._handleGlobalSkillEnable(skill, e)}
7159
- >${on ? 'Uninstall' : 'Install'}</kr-button>
7160
- </div>
7161
- `;
7162
- }
7163
7149
  /**
7164
7150
  * Render a user message, highlighting a leading `/skill-code` token (like the
7165
7151
  * way Claude highlights slash commands). The composer only inserts valid skill