@xeplr/ui-factory 1.7.2 → 1.7.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xeplr/ui-factory",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
4
4
  "description": "Design data-entry screens on @xeplr/ui-canvas, save them as JSON, run them as auto-saving forms with lists of saved records — built for Claude to draft and people to refine",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -84,7 +84,7 @@ export default function FlowDesignerSample({ ctrl, step, events, catalog, tab, o
84
84
  onChange={(e) => ctrl.setStep(step.stepKey, { label: e.target.value })}
85
85
  aria-label="Step name"
86
86
  />
87
- <span className="xeplr-factory-fd-step-screen">Shows <code>{screenName(ctrl, step.screen)}</code></span>
87
+ <span className="xeplr-factory-fd-step-screen">Shows the form “{screenName(ctrl, step.screen)}”</span>
88
88
  <button type="button" className="xeplr-factory-fd-remove" onClick={() => ctrl.removeStep(step.stepKey)}>Remove step</button>
89
89
  </div>
90
90
  <div className="xeplr-factory-fd-tabs" role="tablist">
@@ -239,7 +239,7 @@ function EventsPanel({ step, events, catalog }) {
239
239
 
240
240
  /** Where this step goes once its screen is saved: a screen, a function's choice, or the end. */
241
241
  function NavigationPanel({ step, ctrl, catalog }) {
242
- const nav = navigationOfStep(ctrl, step)
242
+ const nav = ctrl.navigationOf(step)
243
243
  const others = ctrl.flow.steps.filter((s) => s.stepKey !== step.stepKey)
244
244
  const deciders = catalog.forEvent(DECIDE_EVENT)
245
245
  const set = (patch) => ctrl.setNavigation(step.stepKey, { ...nav, ...patch })
@@ -338,10 +338,6 @@ function NavigationPanel({ step, ctrl, catalog }) {
338
338
  )
339
339
  }
340
340
 
341
- function navigationOfStep(ctrl, step) {
342
- return ctrl.navigationOf(step)
343
- }
344
-
345
341
  /** "→ Contract", "→ routeByAmount decides", "Finishes" — under each step in the list. */
346
342
  function nextInWords(ctrl, step) {
347
343
  const nav = ctrl.navigationOf(step)
@@ -349,6 +345,9 @@ function nextInWords(ctrl, step) {
349
345
  if (nav.mode === 'decide') return nav.decide ? `→ ${nav.decide} decides` : '→ a function decides'
350
346
  if (nav.mode === 'branches') return `→ ${step.transitions.length} branches`
351
347
  if (nav.mode === 'end') return 'Finishes the journey'
348
+ // No arrows on the LAST step is the engine's own end of the journey.
349
+ const last = ctrl.flow.steps[ctrl.flow.steps.length - 1]
350
+ if (last && last.stepKey === step.stepKey) return 'Finishes the journey'
352
351
  return 'Where next?'
353
352
  }
354
353
 
@@ -575,7 +575,6 @@
575
575
  .xeplr-factory-fd-step-name { font-size: 18px; font-weight: 650; background: transparent; border-color: transparent; padding: 4px 8px; margin-left: -8px; min-width: 220px; }
576
576
  .xeplr-factory-fd-step-name:hover { border-color: var(--xf-border); }
577
577
  .xeplr-factory-fd-step-screen { color: var(--xf-muted); }
578
- .xeplr-factory-fd-step-screen code { color: var(--xf-ink); }
579
578
  .xeplr-factory-fd-remove { margin-left: auto; font: inherit; font-size: 12px; color: var(--xf-danger); background: none; border: none; cursor: pointer; padding: 4px 6px; border-radius: 6px; }
580
579
  .xeplr-factory-fd-remove:hover { background: color-mix(in srgb, var(--xf-danger) 10%, transparent); }
581
580
  .xeplr-factory-fd-tabs { display: flex; gap: 4px; padding: 10px 20px 0; border-bottom: 1px solid var(--xf-border); }