hmgr 0.0.23 → 0.0.24

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/gui/main.js CHANGED
@@ -819,10 +819,40 @@ function fensterOeffnen() {
819
819
  // fällt, was ins Ziel kommt, und zeigt je Bundle Beschreibung und Herkunft.
820
820
  var dskBundleBoxSichtbar = false;
821
821
  var dskBundleText = null;
822
+ // Aufklappbereich je Zeile (E92): zu vor dem Klick, danach sichtbar mit der ungekürzten
823
+ // Beschreibung; die Checkbox bleibt unberührt, der Dialog offen.
824
+ var dskKoerperVorher = null;
825
+ var dskKoerperNachher = null;
826
+ var dskKoerperText = null;
827
+ var dskAufklappZeileAngehakt = null;
828
+ var dskAufklappZeileGesperrt = null;
829
+ var dskAufklappAriaNachher = null;
830
+ var dskDialogOffenNachAufklappen = null;
831
+ var dskAufklappFreiAngehakt = null;
822
832
  if (dskKnopf) {
823
833
  dskKnopf.click();
824
834
  dskMarken = document.querySelector('#dsk-liste .wahlzeile .marken')?.textContent
825
835
  ?.replace(/\\s+/g, ' ').trim() ?? null;
836
+ var dskZeile = document.querySelector('#dsk-liste .wahlzeile:has(.aufklappknopf)');
837
+ var dskAufklapp = dskZeile?.querySelector('.aufklappknopf');
838
+ var dskKoerper = dskZeile?.querySelector('.wahlkoerper');
839
+ dskKoerperVorher = dskKoerper?.hidden ?? null;
840
+ dskAufklapp?.click();
841
+ dskKoerperNachher = dskKoerper?.hidden ?? null;
842
+ dskAufklappAriaNachher = dskAufklapp?.getAttribute('aria-expanded') ?? null;
843
+ dskKoerperText = dskKoerper?.textContent?.replace(/\\s+/g, ' ').trim() ?? null;
844
+ dskKoerper?.querySelector('p')?.click();
845
+ dskAufklappZeileAngehakt = dskZeile?.querySelector('input')?.checked ?? null;
846
+ dskAufklappZeileGesperrt = dskZeile?.querySelector('input')?.disabled ?? null;
847
+ dskDialogOffenNachAufklappen = document.getElementById('d-skills')?.open ?? null;
848
+ // Die Fixture-Zeile ist gesperrt (Link liegt schon), das beweist nichts über das Label:
849
+ // darum dieselbe Zeile entsperren, zu- und wieder aufklappen und in den Text klicken.
850
+ var dskEingabe = dskZeile?.querySelector('input');
851
+ if (dskEingabe) dskEingabe.disabled = false;
852
+ dskAufklapp?.click();
853
+ dskAufklapp?.click();
854
+ dskKoerper?.querySelector('p')?.click();
855
+ dskAufklappFreiAngehakt = dskEingabe?.checked ?? null;
826
856
  dskBundleBoxSichtbar = document.getElementById('dsk-bundlebox')?.hidden === false;
827
857
  dskBundleText = document.querySelector('#dsk-bundles .wahlzeile')?.textContent
828
858
  ?.replace(/\\s+/g, ' ').trim() ?? null;
@@ -1126,6 +1156,14 @@ function fensterOeffnen() {
1126
1156
  katalogDetails,
1127
1157
  katalogMarkenWarnend,
1128
1158
  dskMarken,
1159
+ dskKoerperVorher,
1160
+ dskKoerperNachher,
1161
+ dskKoerperText,
1162
+ dskAufklappZeileAngehakt,
1163
+ dskAufklappZeileGesperrt,
1164
+ dskAufklappAriaNachher,
1165
+ dskDialogOffenNachAufklappen,
1166
+ dskAufklappFreiAngehakt,
1129
1167
  dskBundleBoxSichtbar,
1130
1168
  dskBundleText,
1131
1169
  dzZieleText,
@@ -2300,6 +2300,53 @@
2300
2300
  return teile.join(' · ');
2301
2301
  }
2302
2302
 
2303
+ /** Aufklappbereich einer Wahlzeile im Skills-hinzufügen-Dialog (E92): ungekürzte description und
2304
+ die Frontmatter-Angaben aus E55. Der Knopf hängt am Label (absolut oben rechts, `txt` bekommt
2305
+ Platz dafür), der Körper als drittes Kind des Labels, damit er als Grid-Zeile über die volle
2306
+ Breite läuft. Der Zustand ist der Zustand von aria-expanded: er lebt nur, solange die Zeile
2307
+ lebt (je Dialog-Öffnung neu, immer zugeklappt), nicht in SKILL_OFFEN. Das Label schaltet
2308
+ sonst die Checkbox um, deshalb preventDefault auf Knopf und Körper. Ohne Beschreibung und
2309
+ ohne Details entsteht nichts. */
2310
+ function skillAufklappbereich(skill, label, txt, index) {
2311
+ var details = skillDetails(skill);
2312
+ if (!skill.beschreibung && details.length === 0) return;
2313
+ var koerperId = 'dsk-koerper-' + index;
2314
+ var knopf = e('button', 'aufklappknopf');
2315
+ knopf.type = 'button';
2316
+ knopf.setAttribute('aria-expanded', 'false');
2317
+ knopf.setAttribute('aria-controls', koerperId);
2318
+ knopf.setAttribute('aria-label', 'Beschreibung und Details zu ' + skill.name + ' ein- oder ausklappen');
2319
+ var pfeil = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
2320
+ pfeil.setAttribute('viewBox', '0 0 16 16');
2321
+ pfeil.setAttribute('class', 'akkordeonpfeil dunkel');
2322
+ pfeil.setAttribute('aria-hidden', 'true');
2323
+ pfeil.innerHTML = '<path d="M4 6.5 8 10.5 12 6.5"/>';
2324
+ knopf.appendChild(pfeil);
2325
+
2326
+ var koerper = e('div', 'wahlkoerper');
2327
+ koerper.id = koerperId;
2328
+ koerper.hidden = true;
2329
+ if (skill.beschreibung) koerper.appendChild(e('p', 'skilldetail skillbeschreibung', skill.beschreibung));
2330
+ details.forEach(function (d) {
2331
+ var zeile = e('p', 'skilldetail');
2332
+ zeile.appendChild(e('b', null, d.label + ': '));
2333
+ zeile.appendChild(document.createTextNode(d.text));
2334
+ koerper.appendChild(zeile);
2335
+ });
2336
+
2337
+ knopf.addEventListener('click', function (ev) {
2338
+ ev.preventDefault();
2339
+ var war = knopf.getAttribute('aria-expanded') === 'true';
2340
+ knopf.setAttribute('aria-expanded', war ? 'false' : 'true');
2341
+ koerper.hidden = war;
2342
+ });
2343
+ koerper.addEventListener('click', function (ev) { ev.preventDefault(); });
2344
+
2345
+ txt.classList.add('mitknopf');
2346
+ label.appendChild(knopf);
2347
+ label.appendChild(koerper);
2348
+ }
2349
+
2303
2350
  function oeffneSkillsHinzufuegen(z) {
2304
2351
  skillsKontext = { modus: 'einzeln', z: z };
2305
2352
  $('dsk-ziel').textContent = zielTitel(z);
@@ -2329,6 +2376,7 @@
2329
2376
  txt.appendChild(quelleSpanEl);
2330
2377
  if (schon) txt.appendChild(e('span', 'notiz', 'Hängt hier schon.'));
2331
2378
  label.appendChild(txt);
2379
+ skillAufklappbereich(skill, label, txt, i);
2332
2380
  box.appendChild(label);
2333
2381
  });
2334
2382
  fuelleBundleSektion(function (bundle) { return bundleHaengtIn([z], bundle); }, 1);
@@ -2374,6 +2422,7 @@
2374
2422
  txt.appendChild(e('span', 'notiz', 'Hängt schon in ' + (teile.length - fehltIn.length) + ' von ' + teile.length + ' Harnesses.'));
2375
2423
  }
2376
2424
  label.appendChild(txt);
2425
+ skillAufklappbereich(skill, label, txt, i);
2377
2426
  box.appendChild(label);
2378
2427
  });
2379
2428
  fuelleBundleSektion(function (bundle) { return bundleHaengtIn(teile, bundle); }, teile.length);
@@ -539,6 +539,15 @@ dialog::backdrop{background:rgba(9,45,37,.62)}
539
539
  .wahlzeile b{font-family:var(--schrift);font-weight:700;font-size:17px;letter-spacing:-.012em}
540
540
  .wahlzeile .mono{display:block;color:var(--tinte-weich);margin-top:3px}
541
541
  .wahlzeile .notiz{display:block;margin-top:8px;font-size:16px;color:var(--messing-satt);background:var(--messing-blass);border-left:3px solid var(--messing);padding:7px 10px;border-radius:0 2px 2px 0}
542
+ /* Aufklappbereich einer Wahlzeile im Skills-Dialog (E92). Der Knopf sitzt absolut oben rechts im Label
543
+ (die Zeile ist position:relative), die Textspalte lässt ihm Platz; der Körper ist ein eigenes
544
+ Grid-Kind über beide Spalten. Wie bei .zeile .skillkoerper braucht hidden eine eigene Regel. */
545
+ .wahlzeile .aufklappknopf{position:absolute;top:10px;right:10px}
546
+ .wahlzeile .mitknopf{padding-right:40px}
547
+ .wahlzeile .wahlkoerper{grid-column:1/-1;margin-top:2px;padding-top:12px;border-top:1px solid var(--strich-zart);cursor:text}
548
+ .wahlzeile .wahlkoerper[hidden]{display:none}
549
+ .wahlzeile .wahlkoerper b{font-size:inherit;font-weight:600;letter-spacing:normal}
550
+ .skillbeschreibung{white-space:pre-wrap}
542
551
  .nummer{
543
552
  font-family:var(--mono);font-size:16px;font-weight:500;width:28px;height:28px;flex:none;display:grid;
544
553
  place-items:center;border:1.5px solid var(--tinte);border-radius:50%;margin-top:1px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hmgr",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
4
4
  "description": "Harness Manager: Skills und Plugins für AI-Harnesses verwalten",
5
5
  "license": "MIT",
6
6
  "author": "Tim Kaufmann",