@floless/app 0.16.2 → 0.18.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.
@@ -95,6 +95,12 @@
95
95
  <span class="role" id="center-panel-role">transparency layer · read-mostly</span>
96
96
  </span>
97
97
  </div>
98
+ <div class="canvas-drop-target" id="canvas-drop-target" aria-hidden="true">
99
+ <div class="canvas-drop-icon" aria-hidden="true">⤓</div>
100
+ <div class="canvas-drop-label">Drop a .flo file to import</div>
101
+ <div class="canvas-drop-sub">The workflow installs and is added to your picker</div>
102
+ </div>
103
+ <input type="file" id="import-file" accept=".flo,.app,.flow,.aware" hidden>
98
104
  <div class="find-overlay" id="find-overlay">
99
105
  <input type="text" id="find-input" placeholder="Find agent…">
100
106
  <span class="find-count" id="find-count"></span>
@@ -229,6 +235,10 @@
229
235
  <span class="menu-label">Save inputs</span>
230
236
  <span class="menu-kbd">Ctrl+S</span>
231
237
  </button>
238
+ <button class="menu-item" data-action="import" role="menuitem">
239
+ <span class="menu-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M12 3v12m0 0-4-4m4 4 4-4"/><path d="M3 17v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2"/></svg></span>
240
+ <span class="menu-label">Import workflow…</span>
241
+ </button>
232
242
  <div class="menu-divider"></div>
233
243
  <button class="menu-item" data-action="find" role="menuitem">
234
244
  <span class="menu-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg></span>
@@ -347,7 +357,7 @@
347
357
 
348
358
  <div class="modal-backdrop" id="add-fav-modal">
349
359
  <div class="modal">
350
- <div class="modal-title">Save as Template</div>
360
+ <div class="modal-title" id="add-fav-title">Save as Template</div>
351
361
  <div class="modal-sub" id="add-fav-sub">Save this node as a reusable Template — usable in any workflow.</div>
352
362
  <div class="modal-field">
353
363
  <label for="fav-name">Name</label>
@@ -421,7 +421,9 @@
421
421
  if (btn) { btn.disabled = true; btn.textContent = 'Queueing…'; }
422
422
  try {
423
423
  const { request } = await api('/api/extensions/customize', { method: 'POST', body: JSON.stringify({ instruction }) });
424
- const line = bridge.instructionFor ? bridge.instructionFor(request) : instruction;
424
+ // Copy the MARKED form so a pasted ui-customize request is recognized, not run verbatim (#73).
425
+ const line = bridge.markedInstruction ? bridge.markedInstruction(request)
426
+ : bridge.instructionFor ? bridge.instructionFor(request) : instruction;
425
427
  const copied = bridge.copyToClipboard ? await bridge.copyToClipboard(line) : false;
426
428
  showToast(copied ? 'Queued for your terminal AI · copied to clipboard' : 'Queued for your terminal AI', 'ok');
427
429
  if (input) input.value = '';
@@ -544,14 +546,14 @@
544
546
  setTimeout(() => $cancel.focus(), 0);
545
547
  const done = (result) => {
546
548
  $resetModal.classList.remove('show');
547
- $confirm.onclick = $cancel.onclick = $resetModal.onclick = null;
549
+ $confirm.onclick = $cancel.onclick = $resetModal.onclick = $resetModal.onmousedown = null;
548
550
  document.removeEventListener('keydown', onKey, true);
549
551
  resolve(result);
550
552
  };
551
553
  const onKey = (e) => { if (e.key === 'Escape') { e.preventDefault(); done(false); } };
552
554
  $confirm.onclick = () => done(true);
553
555
  $cancel.onclick = () => done(false);
554
- $resetModal.onclick = (e) => { if (e.target === $resetModal) done(false); };
556
+ onBackdropDismiss($resetModal, () => done(false));
555
557
  document.addEventListener('keydown', onKey, true);
556
558
  });
557
559
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floless/app",
3
- "version": "0.16.2",
3
+ "version": "0.18.0",
4
4
  "type": "module",
5
5
  "description": "Thin localhost host for floless.app — serves web/ and shells the aware CLI. No engine, no LLM.",
6
6
  "bin": {