@w6w/ui 0.2.11 → 0.2.55
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/CHANGELOG.md +139 -2
- package/README.md +28 -10
- package/dist/AppPicker.d.ts +12 -1
- package/dist/CanvasContextMenu.d.ts +19 -0
- package/dist/{CodeBlock-BqXDA35P.js → CodeBlock-C-oIIYfC.js} +1436 -555
- package/dist/CodeBlock-C-oIIYfC.js.map +1 -0
- package/dist/CodeBlock-CymlfyeA.cjs +15 -0
- package/dist/CodeBlock-CymlfyeA.cjs.map +1 -0
- package/dist/CodeEditor.d.ts +4 -1
- package/dist/ConditionEditor.d.ts +11 -0
- package/dist/JsonEditor.d.ts +12 -0
- package/dist/ParamCustomization.d.ts +5 -0
- package/dist/ParamsForm.d.ts +11 -3
- package/dist/RouterEditor.d.ts +5 -0
- package/dist/StepBuilderModal.d.ts +83 -13
- package/dist/StepNameEditor.d.ts +11 -0
- package/dist/StopEditor.d.ts +5 -0
- package/dist/TriggerFillForm.d.ts +14 -1
- package/dist/WebhookListenPanel.d.ts +28 -0
- package/dist/WorkflowConnections.d.ts +29 -0
- package/dist/WorkflowConnectionsPanel.d.ts +5 -0
- package/dist/WorkflowFlowEditor.d.ts +67 -8
- package/dist/assets/script-completion.worker-DDJKkj5M.js +8290 -0
- package/dist/assets/script-completion.worker-DDJKkj5M.js.map +1 -0
- package/dist/canvas-context-menu.d.ts +27 -0
- package/dist/code.cjs +1 -1
- package/dist/code.mjs +3 -4
- package/dist/code.mjs.map +1 -1
- package/dist/components/AnchoredFlyout.d.ts +7 -0
- package/dist/components/ColumnsEditor.d.ts +27 -0
- package/dist/components/Combobox.d.ts +12 -1
- package/dist/components/ConfirmModal.d.ts +3 -1
- package/dist/components/CsvPanel.d.ts +21 -0
- package/dist/components/DataEntryEditor.d.ts +38 -0
- package/dist/components/DataEntryList.d.ts +33 -0
- package/dist/components/DataStoreList.d.ts +33 -0
- package/dist/components/DataTableGrid.d.ts +46 -0
- package/dist/components/EventbriteTriggerPicker.d.ts +7 -0
- package/dist/components/ExecutionDetail.d.ts +17 -1
- package/dist/components/ExecutionList.d.ts +19 -1
- package/dist/components/ExecutionLogPanel.d.ts +61 -3
- package/dist/components/ExpressionEditorModal.d.ts +33 -10
- package/dist/components/ExpressionOptions.d.ts +101 -15
- package/dist/components/HtmlPreview.d.ts +7 -0
- package/dist/components/JsonTree.d.ts +32 -0
- package/dist/components/ResolvedParams.d.ts +6 -1
- package/dist/components/ResultViewer.d.ts +46 -0
- package/dist/components/ScriptBindingsNotice.d.ts +31 -0
- package/dist/components/ScriptCodeField.d.ts +13 -0
- package/dist/components/StepStatusPill.d.ts +7 -0
- package/dist/components/expression-authoring.d.ts +13 -0
- package/dist/components/expression-dom.d.ts +17 -2
- package/dist/components/expression-template.d.ts +25 -3
- package/dist/components/icons.d.ts +1 -1
- package/dist/components/json-compose.d.ts +53 -0
- package/dist/components/result-format.d.ts +13 -0
- package/dist/condition-editor.d.ts +44 -0
- package/dist/connection-app-meta-BEXlKBgV.cjs +22 -0
- package/dist/connection-app-meta-BEXlKBgV.cjs.map +1 -0
- package/dist/connection-app-meta-ZCPakGjD.js +12422 -0
- package/dist/connection-app-meta-ZCPakGjD.js.map +1 -0
- package/dist/data-stores/data-store-view.d.ts +371 -0
- package/dist/eventbrite-trigger-selection.d.ts +13 -0
- package/dist/flow-connect.d.ts +22 -16
- package/dist/flow-delete.d.ts +16 -0
- package/dist/flow-history.d.ts +75 -0
- package/dist/flow-layout.d.ts +13 -0
- package/dist/flow-loop-colors.d.ts +39 -0
- package/dist/flow-loop.d.ts +98 -0
- package/dist/flow-node-flags.d.ts +14 -0
- package/dist/flow-problems.d.ts +69 -0
- package/dist/flow-state.d.ts +20 -0
- package/dist/flow-types.d.ts +137 -9
- package/dist/flow-utils.d.ts +27 -13
- package/dist/flow.cjs +4 -2
- package/dist/flow.cjs.map +1 -1
- package/dist/flow.d.ts +9 -3
- package/dist/flow.mjs +4028 -1585
- package/dist/flow.mjs.map +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +30 -4
- package/dist/index.mjs +2559 -1287
- package/dist/index.mjs.map +1 -1
- package/dist/node-samples.d.ts +80 -0
- package/dist/output-shape.d.ts +30 -14
- package/dist/param-customization.d.ts +7 -0
- package/dist/provider.d.ts +119 -7
- package/dist/resolve-params.d.ts +45 -11
- package/dist/run-visuals.d.ts +14 -21
- package/dist/script-bindings.d.ts +63 -0
- package/dist/script-completion-service.d.ts +9 -0
- package/dist/script-completion.worker.d.ts +1 -0
- package/dist/script-completions.d.ts +2 -0
- package/dist/state-shape.d.ts +38 -0
- package/dist/step-preview-state.d.ts +155 -6
- package/dist/step-problems.d.ts +42 -12
- package/dist/test-inputs.d.ts +25 -0
- package/dist/trigger-registration.d.ts +28 -0
- package/dist/types.d.ts +70 -8
- package/dist/use-app-action-defs.d.ts +9 -1
- package/dist/use-test-input.d.ts +18 -0
- package/dist/workflow-connections.d.ts +78 -0
- package/package.json +16 -7
- package/src/code.css +60 -6
- package/src/styles/_canvas.scss +35 -0
- package/src/styles/_code-editor.scss +35 -0
- package/src/styles/_code.scss +6 -5
- package/src/styles/_connections.scss +64 -0
- package/src/styles/_copyable.scss +24 -0
- package/src/styles/_data-stores.scss +138 -0
- package/src/styles/_data-vars.scss +17 -6
- package/src/styles/_execution-history.scss +73 -0
- package/src/styles/_execution-log.scss +145 -1
- package/src/styles/_expression-modal.scss +106 -16
- package/src/styles/_fields.scss +11 -0
- package/src/styles/_flow.scss +166 -0
- package/src/styles/_fx.scss +3 -1
- package/src/styles/_incoming-state.scss +33 -0
- package/src/styles/_modal.scss +12 -0
- package/src/styles/_multiselect.scss +35 -0
- package/src/styles/_sections.scss +36 -0
- package/src/styles/_step-builder.scss +145 -0
- package/src/styles/_tester.scss +56 -0
- package/src/styles/_tokens.scss +27 -1
- package/src/styles.css +1347 -41
- package/src/styles.scss +2 -0
- package/dist/CodeBlock-BqXDA35P.js.map +0 -1
- package/dist/CodeBlock-CulfbnZD.cjs +0 -15
- package/dist/CodeBlock-CulfbnZD.cjs.map +0 -1
- package/dist/ConfirmModal-Ln99S9NT.js +0 -7919
- package/dist/ConfirmModal-Ln99S9NT.js.map +0 -1
- package/dist/ConfirmModal-fjHW5rN-.cjs +0 -14
- package/dist/ConfirmModal-fjHW5rN-.cjs.map +0 -1
- package/dist/Copyable-DA6eiU7w.cjs +0 -2
- package/dist/Copyable-DA6eiU7w.cjs.map +0 -1
- package/dist/Copyable-F4NTaG77.js +0 -847
- package/dist/Copyable-F4NTaG77.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,18 +3,155 @@
|
|
|
3
3
|
All notable changes to `@w6w/ui` are documented in this file.
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases are
|
|
6
|
-
tagged `vX.Y.Z` and published to npm by `.github/workflows/release.yml`; changes not yet released
|
|
6
|
+
tagged `ui-vX.Y.Z` in Studio and published to npm by `.github/workflows/release-ui.yml`; changes not yet released
|
|
7
7
|
accumulate under `[Unreleased]`. Entries below `[0.1.0]` predate the first npm release — see the
|
|
8
8
|
repo's git history for exact dates and commits.
|
|
9
9
|
|
|
10
|
-
## [
|
|
10
|
+
## [0.2.51]
|
|
11
11
|
|
|
12
|
+
- Fix GitHub Actions publication with npm 12 by explicitly identifying the tested tarball as a local file.
|
|
13
|
+
|
|
14
|
+
## [0.2.50]
|
|
15
|
+
|
|
16
|
+
- Move UI into the Studio workspace while preserving its npm package and MIT license.
|
|
17
|
+
- Add JSON parameter customization, Update object, and boolean and array condition controls.
|
|
18
|
+
- Open webhook setup immediately and defer document JSON validation until blur.
|
|
19
|
+
|
|
20
|
+
- A trigger's payload fields reach the expression picker. **trigger.event** and the trigger's own
|
|
21
|
+
row (`nodes.<trigger>.output`) now list the fields of the payload the trigger last ran with: a
|
|
22
|
+
Test this session, else the server's remembered sample (`node_samples`), so they survive a
|
|
23
|
+
reload. Before, a webhook or schedule entry showed only "Entire output" while every step after it
|
|
24
|
+
listed its fields. An app trigger's declared event fields still annotate and top up the list; a
|
|
25
|
+
Manual trigger's payload is its output only, since a manual run has no event.
|
|
26
|
+
`ExpressionOptions.eventOutputsFrom` now also takes `fresh` and `persisted`.
|
|
27
|
+
- An edited sample payload on a trigger's Test tab is remembered as it is typed and when the modal
|
|
28
|
+
closes, not only on **Test run**, so the header Run, ▶ on the node and the Run node modal run it
|
|
29
|
+
straight away. New `trackTestInputSave` / `testInputSavesSettled` (from `@w6w/ui`): every
|
|
30
|
+
remembered-input read now waits for a save still on the wire, so a Run pressed right after
|
|
31
|
+
closing the modal never reads the payload from before the edit.
|
|
32
|
+
- A webhook trigger's **Or test with a sample payload** section opens by itself when a saved
|
|
33
|
+
payload is loaded into it, so reopening the Test tab shows what ▶ Run will run with. Collapsed,
|
|
34
|
+
a loaded payload looked like none.
|
|
35
|
+
- The expression picker's Previous steps no longer offer a **Stop workflow**: it ends the run, so
|
|
36
|
+
no step after it reads its output (its static meta stays in the Metadata section). The node
|
|
37
|
+
builder's picker now scopes to the new node's own path once the node is wired in, as the step
|
|
38
|
+
editor's already did, so a step on the other side of an If (True/False) or on another Router
|
|
39
|
+
route is no longer offered either. Before, only a node inside a loop body was scoped, and every
|
|
40
|
+
other new node was offered every node in the workflow.
|
|
41
|
+
- Name a node while adding it. Once the node builder has added a node, its header shows the
|
|
42
|
+
node's name (its step id) with the same pencil the step editor has, prefilled with the generated
|
|
43
|
+
id and checked the same way (unique, no dot); Done creates the node under that name. Hosts pass
|
|
44
|
+
the graph's ids as `StepBuilderModal`'s new `stepIds`; `BuiltStep` gains an optional `id` (the
|
|
45
|
+
chosen name). The step editor's rename now also refuses a taken name with a message, through the
|
|
46
|
+
new `stepNameError` in `flow-utils`.
|
|
47
|
+
- If, Stop workflow and Router conditions take several rows. **+ Add condition** adds a row, each
|
|
48
|
+
row gets a remove button, and a selector joins them: **All of (AND)**, **Any of (OR)** or
|
|
49
|
+
**Exactly one of (XOR)**, saved as JSONLogic `and`, `or` and `@w6w/expr`'s `xor`. One row still
|
|
50
|
+
saves as a bare comparison; a nested group opens in the code view as before. The run log's
|
|
51
|
+
condition table names the combinator and shows the overall result.
|
|
52
|
+
- The workflow canvas has a right-click menu. On empty canvas: **Add node** and **Add trigger**,
|
|
53
|
+
which open the node builder (Add trigger on its Triggers tab) and place the step at the click. On
|
|
54
|
+
a node, or with nodes selected: **Duplicate** and **Delete** too, acting on the selection; Delete
|
|
55
|
+
takes the Delete key's selection confirm and is one undo step. Drawn with the canvas note menu's
|
|
56
|
+
styles, keyboard-driven (arrows, Home/End, Enter, Esc),
|
|
57
|
+
closed by an outside click, scroll, pan or zoom, greyed under `readOnly`. `StepBuilderModal`'s
|
|
58
|
+
`initialTab` also takes `"triggers"`. New real-browser gate: `pnpm test:workflow-context-menu`.
|
|
59
|
+
- Code views fill their box. In `JsonEditor`, `CodeEditor` and `YamlEditor` the code area now
|
|
60
|
+
covers the whole bordered box, also when only `minHeight` / `maxHeight` size it (the Data page's
|
|
61
|
+
Document modal, the default-height Script and YAML editors, the full-view JSON body). Before, the
|
|
62
|
+
gutter and the horizontal scrollbar stopped under the last line and the rest of the box was empty.
|
|
63
|
+
Taller content still scrolls inside the editor, and an explicit `height` is kept. New real-browser
|
|
64
|
+
gate: `pnpm test:code-editor-fill`.
|
|
65
|
+
- **Write to state** says which side is which. **Pick fields** and **Append** rows carry the column
|
|
66
|
+
headers **From this step output** → **To state key** (or **Append to state list**), an arrow and a
|
|
67
|
+
hint (`Copies output.<path> into state.<key>`), and use the Set data row style: the same inputs,
|
|
68
|
+
a trash `DeleteButton` and **+ Add field**. The left box is a free-text `Combobox` listing the
|
|
69
|
+
step's output fields. **Under a key** is labelled **To state key**. The stored `state` is unchanged.
|
|
70
|
+
- Test forms remember the last values used, server-side: the Run node modal, the step Test tab
|
|
71
|
+
(incoming state) and the trigger Test tab reopen PREFILLED with what that workflow + node last ran
|
|
72
|
+
with, after a success, a reload, another browser or the embed, and show a muted **last used
|
|
73
|
+
values · Clear** note. New optional `W6WApi.loadTestInputs` / `saveTestInput`
|
|
74
|
+
(`GET /workflows/:id/test-inputs`, `PUT /workflows/:id/nodes/:nodeId/test-input`), wired in
|
|
75
|
+
`createW6WApi`; a host without them keeps the step-test fixture prefill. Never in the workflow
|
|
76
|
+
definition (no dirty, no version); a literal typed into a `secret` param and sealed envelopes are
|
|
77
|
+
never remembered — bindings are. New exports `useRememberedTestInput`, `LastUsedNote`,
|
|
78
|
+
`findTestInput`, `rememberableInput`, `NodeTestInput`. 0.2.46.
|
|
79
|
+
- `ExpressionEditorModal` json-binding mode takes `startingState` for a workflow's starting state
|
|
80
|
+
(`Workflow.initialState`, evaluated once at run start): no Previous steps, State or Secrets in the
|
|
81
|
+
rail, Documents shown, an **Insert as Reference / Value** toggle (a value copies the source's
|
|
82
|
+
current sample in), clicks always compose into the object, an empty draft saves `undefined`, and
|
|
83
|
+
`jsonProblem` refuses a draft. It also takes `title`. `addRefToDraft` takes an optional literal
|
|
84
|
+
value. New `database` icon. `ExpressionEditorModal` is now exported from the root entry.
|
|
85
|
+
- The run state tree: a step's settings get **Write to state** (Off, Merge at root, Under a key, Pick
|
|
86
|
+
fields, Append; `FlowStep.state`, `FlowWorkflow.initialState`). The expression picker gains a
|
|
87
|
+
**State** section built before any run from the writers on the paths that reach the step (the old
|
|
88
|
+
"Workflow state" section is now "Previous steps"), and ƒx previews resolve `state.*` (`state`,
|
|
89
|
+
`var` and `vars` are one tree). The run log shows each step's state writes and "State after this
|
|
90
|
+
step" (`ExecutionLogStep.stateWrites` / `stateAfter`), and `findStateWriteProblems` (`@w6w/ui/flow`)
|
|
91
|
+
flags two parallel branches writing the same path. Script ƒx insertions read `run.*`.
|
|
92
|
+
- Ctrl/Cmd+Z undoes workflow edits to nodes, configuration, edges, connections and canvas layout.
|
|
93
|
+
Ctrl/Cmd+Shift+Z or Ctrl+Y redoes them. History keeps the latest 100 edits while the workflow is
|
|
94
|
+
open; test runs and learned output shapes stay intact, and text fields keep their own undo.
|
|
95
|
+
- A node's input takes any number of incoming edges: wiring a second trigger (or a second path)
|
|
96
|
+
into a node that already has one adds the edge instead of replacing the existing one. Only an
|
|
97
|
+
exact duplicate, or an edge into a trigger, is refused.
|
|
98
|
+
- A run's skipped steps say why: `ExecutionLogStep.skipReason` (`SkipReason`) shows "condition
|
|
99
|
+
false", "run stopped" or "disabled" beside the Skipped pill. A `not_on_path` step (on another
|
|
100
|
+
path, never part of the run) leaves the run log for a collapsed "N steps on other paths" footer
|
|
101
|
+
and gets no run paint on the canvas, nor do its edges.
|
|
102
|
+
- Run script reads data as code: a `{{ }}` in its code is converted to `state.nodes.<id>.output…`,
|
|
103
|
+
`vars.…` or `consts.…` (Python indexes them) when the step opens, behind a quiet note with
|
|
104
|
+
**Undo**; step chips and ƒx under the code insert those reads; the hint is one line plus a
|
|
105
|
+
collapsed "How to read data". **Input** moved under a collapsed "Custom input (advanced)"
|
|
106
|
+
section (open when set). A whole-value JSON param offers "Use the output of <step>" chips, and
|
|
107
|
+
the Test tab shows script code verbatim. `ResolvedParams` takes `literalKeys`; `CodeEditor`
|
|
108
|
+
takes `onCreateEditor`; a collapsible section param takes `openWhenSet`, a code param
|
|
109
|
+
`scriptReads`.
|
|
110
|
+
- A JSON param can be composed from references: the picker shows each step's outputs with their
|
|
111
|
+
metadata, a click inserts the reference at the cursor (adding to the draft, never replacing it),
|
|
112
|
+
a bound field renders as a chip, and the editor fills its pane.
|
|
113
|
+
- References save as `{{ }}` template strings, with `\{{` escaping a literal marker; a JSON param
|
|
114
|
+
binds a reference as a quoted `"{{ ref }}"`. Variables are offered under the `var.` root
|
|
115
|
+
(`vars.` still resolves), and account constants appear as a read-only Constants group under
|
|
116
|
+
`const.`.
|
|
117
|
+
- `ParamConfig.valueFormat: "csv"` lets a multiselect param store its choices as one
|
|
118
|
+
comma-separated string.
|
|
12
119
|
- `WorkflowFlowEditor` takes an optional `stepProblems` map (`StepProblems`, exported from `./flow`)
|
|
13
120
|
and paints a missing-connection error ring and tooltip on each affected app step, repainting live
|
|
14
121
|
when the map changes. The host owns detection; omitted, the canvas renders as before.
|
|
15
122
|
- The step panel's Setup tab labels a connection that is absent from the loaded list "Missing
|
|
16
123
|
connection — choose another", and a failed connections fetch "Couldn't load connections" instead
|
|
17
124
|
of treating it as missing.
|
|
125
|
+
- `Combobox` fills the field it is dropped into and grows to the ƒx button inside a `.w6w-fx-wrap`,
|
|
126
|
+
so the ƒx sits at the field's right end again everywhere the component is used (Setup Action,
|
|
127
|
+
dynamic-option and model-route params, flow-editor step actions, the action-test picker).
|
|
128
|
+
- New `ResultViewer`: a read-only result display that picks the view from the value's format — a
|
|
129
|
+
collapsible JSON tree, xml/markdown/html source, markdown through `Markdown`, and html rendered
|
|
130
|
+
ONLY inside a sandboxed `<iframe srcdoc>` (`HtmlPreview`, also exported) whose `srcdoc` opens with a
|
|
131
|
+
`default-src 'none'` CSP meta, so a vendor payload cannot run script and cannot read or reach this
|
|
132
|
+
page. Accepted residual: a reader's click on a link inside the preview navigates the frame itself —
|
|
133
|
+
a scriptless, same-origin-less document with no cookies, nothing more. Rendered/Source toggle for
|
|
134
|
+
html and markdown, one hover-revealed copy button, `detectResultFormat` / `resultCopyText` /
|
|
135
|
+
`RESULT_RENDER_MAX_CHARS` exported alongside. Source views stop being highlighted above 64 KiB, so a
|
|
136
|
+
multi-megabyte result renders instantly instead of stalling the pane. No existing pane adopts it yet.
|
|
137
|
+
ONLY inside a sandboxed `<iframe srcdoc>` (`HtmlPreview`, also exported) with a `default-src 'none'`
|
|
138
|
+
CSP, so vendor HTML cannot run script, read the page or make a request. Rendered/Source toggle for
|
|
139
|
+
html and markdown, one hover-revealed copy button, `detectResultFormat` / `resultCopyText` /
|
|
140
|
+
`RESULT_RENDER_MAX_CHARS` exported alongside.
|
|
141
|
+
- The six existing result panes now render through `ResultViewer`, so a JSON result is a collapsible
|
|
142
|
+
tree instead of wall-to-wall pretty-printed text and an HTML body is previewed in the sandboxed
|
|
143
|
+
iframe rather than shown as source: the step builder's inline test-run result and its test-run log
|
|
144
|
+
(request and response bodies), the flow editor's per-step Result and Metadata, both
|
|
145
|
+
`ActionTestForm` result panes, `TriggerFillForm`'s filled output state, and `ApiCallsPanel`'s
|
|
146
|
+
captured request/response bodies (headers stay plain). Error panes, log panes and header panes are
|
|
147
|
+
unchanged.
|
|
148
|
+
ONLY inside a sandboxed `<iframe srcdoc>` (`HtmlPreview`, also exported) with a `default-src 'none'`
|
|
149
|
+
CSP, so vendor HTML cannot run script, read the page or make a request. Rendered/Source toggle for
|
|
150
|
+
html and markdown, one hover-revealed copy button, `detectResultFormat` / `resultCopyText` /
|
|
151
|
+
`RESULT_RENDER_MAX_CHARS` exported alongside. No existing pane adopts it yet.
|
|
152
|
+
- The step modal's Test tab shows the step's newest stored run (success or failure) when reopened,
|
|
153
|
+
labelled with its time, until a new test replaces it; its Result and Metadata panes use
|
|
154
|
+
`ResultViewer`. Nothing about the result is written to the workflow document.
|
|
18
155
|
|
|
19
156
|
## [0.2.0]
|
|
20
157
|
|
package/README.md
CHANGED
|
@@ -38,15 +38,14 @@ npm install @w6w/ui react react-dom
|
|
|
38
38
|
are peer dependencies. The npm tarball ships compiled `dist/` (ESM + CJS + `.d.ts`), plus the
|
|
39
39
|
stylesheets; the CommonJS build needs Node 20.19+ / 22.12+ to `require()` the ESM-only `@w6w/expr`.
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
For development against unreleased source:
|
|
42
42
|
|
|
43
|
-
- **
|
|
44
|
-
|
|
45
|
-
uses (`studio` links `ui` this way).
|
|
43
|
+
- **Studio workspace source**: the app and embed resolve `@w6w/ui` to `packages/ui`
|
|
44
|
+
through the workspace override; published consumers install the npm package.
|
|
46
45
|
|
|
47
46
|
In this repo `main`/`module`/`types` and `exports` point at raw `.tsx` source under `./src`
|
|
48
47
|
(`publishConfig` switches them to `dist/` in the packed npm tarball, which `pnpm pack` applies), so
|
|
49
|
-
|
|
48
|
+
the workspace bundler compiles the package like your own code. Inside this repo
|
|
50
49
|
`@w6w/expr` resolves to the sibling `packages/core` checkout through the `w6w-source` export
|
|
51
50
|
condition (set in `tsconfig.json`, `vite.config.ts`, `.storybook/vite.config.ts`, the `test` script
|
|
52
51
|
and the `test/` rigs). Vite needs nothing extra; a few setups do — see the
|
|
@@ -54,11 +53,8 @@ and the `test/` rigs). Vite needs nothing extra; a few setups do — see the
|
|
|
54
53
|
|
|
55
54
|
- **Vite with a `link:` checkout**: studio sets `optimizeDeps.exclude: ["@w6w/ui"]` so edits are
|
|
56
55
|
picked up live.
|
|
57
|
-
- **SSR builds
|
|
58
|
-
|
|
59
|
-
source package needs its own entry). Next.js needs the equivalent, `transpilePackages`.
|
|
60
|
-
- **A linked checkout**: dedupe React (`resolve.dedupe: ["react", "react-dom"]`), or two copies
|
|
61
|
-
break hooks.
|
|
56
|
+
- **SSR builds consuming workspace source**: bundle the package rather than externalizing
|
|
57
|
+
raw TSX. Next.js supports this through `transpilePackages`.
|
|
62
58
|
|
|
63
59
|
## Usage
|
|
64
60
|
|
|
@@ -215,6 +211,10 @@ not pulled in automatically.
|
|
|
215
211
|
`ServerResourcesBadge`.
|
|
216
212
|
- **Connections**: `ConnectionList`, `ConnectionHeader`, `EditConnectionModal` (provider; needs
|
|
217
213
|
the optional `updateConnection` on the API client).
|
|
214
|
+
- **Data stores**: `DataStoreList`, `ColumnsEditor`, `CsvPanel` (all props-only), plus the pure
|
|
215
|
+
data-store helpers (cell parsing, row drafts, error placement) the same entrypoint exports.
|
|
216
|
+
- **Data store entries**: `DataEntryList`, `DataEntryEditor`, `DataTableGrid` (props-only; the host
|
|
217
|
+
owns drafts, queries, versions and delete confirmation).
|
|
218
218
|
|
|
219
219
|
Everything is exported from `@w6w/ui` except `WorkflowFlowEditor`, which is only in `@w6w/ui/flow`
|
|
220
220
|
(alongside a re-export of `ExpressionOptionsProvider`). `@w6w/ui/code` re-exports `CodeBlock` and
|
|
@@ -276,3 +276,21 @@ FSL.)
|
|
|
276
276
|
|
|
277
277
|
`@w6w/expr`, which this package depends on, is MIT too, as is `@w6w/types`, the shared model these
|
|
278
278
|
components' wire types mirror (`@w6w/ui` keeps its own local copy rather than depending on it).
|
|
279
|
+
|
|
280
|
+
## Workspace and releases
|
|
281
|
+
|
|
282
|
+
Source lives in `w6w-studio/packages/ui`, beside `packages/embed` and `packages/studio`.
|
|
283
|
+
Install from the Studio repository root with `pnpm install`; all three packages share its
|
|
284
|
+
lockfile. From that root, use `pnpm -C packages/ui build`, `test`, or `storybook`.
|
|
285
|
+
The published npm package remains `@w6w/ui` with the same exports and MIT license.
|
|
286
|
+
|
|
287
|
+
Publish through `.github/workflows/release-ui.yml` in **w6w-io/w6w-studio**: bump
|
|
288
|
+
`packages/ui/package.json`, commit, then tag `ui-vX.Y.Z`. A manual workflow dispatch
|
|
289
|
+
runs verification, tarball checks and consumer builds without publishing.
|
|
290
|
+
The workflow publishes the exact tested pnpm tarball using npm trusted publishing.
|
|
291
|
+
Before the first release from Studio, update @w6w/ui's npm trusted publisher to
|
|
292
|
+
repository `w6w-studio`, workflow `release-ui.yml` (the former `w6w-ui/release.yml`
|
|
293
|
+
identity no longer matches). No stored npm token is needed.
|
|
294
|
+
|
|
295
|
+
UI changes deploy with Studio through the repository's existing `studio-dispatch.yml`.
|
|
296
|
+
The old standalone UI checkout and its deploy workflow are no longer used.
|
package/dist/AppPicker.d.ts
CHANGED
|
@@ -26,6 +26,9 @@ export interface AppPickerProps {
|
|
|
26
26
|
emptyMessage?: string;
|
|
27
27
|
/** Render the search input. Defaults to `true`; the connected-apps list opts out. */
|
|
28
28
|
search?: boolean;
|
|
29
|
+
/** Controlled query for a shared search field outside the picker. */
|
|
30
|
+
searchValue?: string;
|
|
31
|
+
onSearchChange?: (value: string) => void;
|
|
29
32
|
/** Rendered beneath `emptyMessage` in the empty state (e.g. a "Browse all apps" button). */
|
|
30
33
|
emptyAction?: ReactNode;
|
|
31
34
|
/**
|
|
@@ -79,6 +82,14 @@ export interface AppPickerProps {
|
|
|
79
82
|
* Ignored when `apps` is supplied or the host has no `listAppsPage`.
|
|
80
83
|
*/
|
|
81
84
|
category?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Server-side "declares at least one trigger" filter for the bounded paged
|
|
87
|
+
* fetch (`GET /apps?hasTriggers=true`), forwarded to `listAppsPage` exactly
|
|
88
|
+
* like {@link category}: the page `total` is the FILTERED total, so the footer
|
|
89
|
+
* reads the server's `N of M`. Part of the query identity — changing it
|
|
90
|
+
* restarts the fetch. Ignored when `apps` is supplied or via a custom `loadPage`.
|
|
91
|
+
*/
|
|
92
|
+
hasTriggers?: boolean;
|
|
82
93
|
/**
|
|
83
94
|
* Server-side id allow-list (`GET /apps?ids=a,b&paged=true`) for the bounded
|
|
84
95
|
* paged fetch: the page `total` is the FILTERED total, so the footer reads
|
|
@@ -126,4 +137,4 @@ export interface AppPickerProps {
|
|
|
126
137
|
* with neither `listAppsPage` nor `listApps` settles into this same
|
|
127
138
|
* mode's existing empty state — no request, no throw.
|
|
128
139
|
*/
|
|
129
|
-
export declare function AppPicker({ onSelectApp, theme, filter, searchPlaceholder, emptyMessage, search, emptyAction, apps: providedApps, categoryFilter, providerFilter, bridgeSupport, category, ids, pageLimit, loadPage, }: AppPickerProps): import("react").JSX.Element;
|
|
140
|
+
export declare function AppPicker({ onSelectApp, theme, filter, searchPlaceholder, emptyMessage, search, searchValue, onSearchChange, emptyAction, apps: providedApps, categoryFilter, providerFilter, bridgeSupport, category, hasTriggers, ids, pageLimit, loadPage, }: AppPickerProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CanvasMenuAction, CanvasMenuItem } from './canvas-context-menu.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The workflow canvas's right-click menu. Positioned in the editor's own box (`x`/`y` are
|
|
4
|
+
* relative to it) so it inherits the editor's theme tokens, and drawn with the canvas
|
|
5
|
+
* note menu's classes rather than a look of its own.
|
|
6
|
+
*
|
|
7
|
+
* Keyboard: focus lands on the first item; ↑/↓ (and Home/End) move, Enter or Space runs
|
|
8
|
+
* the focused item, Esc or Tab closes. A greyed item stays focusable (`aria-disabled`, the
|
|
9
|
+
* menu pattern's rule) but does nothing. It closes on any pointer-down outside it and on
|
|
10
|
+
* a scroll anywhere; the editor closes it on a pan or zoom.
|
|
11
|
+
*/
|
|
12
|
+
export declare function CanvasContextMenu({ x, y, items, onAction, onClose, }: {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
items: CanvasMenuItem[];
|
|
16
|
+
onAction: (action: CanvasMenuAction) => void;
|
|
17
|
+
/** `restoreFocus` is true when the menu closed from the keyboard (Esc / Tab). */
|
|
18
|
+
onClose: (restoreFocus: boolean) => void;
|
|
19
|
+
}): import("react").JSX.Element;
|