Sitelet https://github.com/qoretechnologies/toolkit-react/pull/121
Skip to content

feat(form): export the bare ExpressionBuilder from the form barrel - #121

Merged
nickmazurenko merged 2 commits into
developfrom
feature/119_export-expression-builder
Sep 9, 2026
Merged

nickmazurenko merged 2 commits into
developfrom
feature/119_export-expression-builder

Conversation

@nickmazurenko

Copy link
Copy Markdown
Contributor

Closes #119.

Why

The library's own rule renders the ExpressionField shell at a root field and the bare ExpressionBuilder for nested operands — the June 11 "top-level re-wrap" decision in FIELD_STACK_REPORT.md. The barrel exported the shell and not the builder, so a host that mirrors the rule (qorus-ide's TemplateField fork, on qorus-ide#275) had to deep-import dist/components/form/expressions/builder: a dependency on the file layout rather than on the API.

What changed

  • src/components/form/index.tsx: export { ExpressionBuilder } and export type { IExpressionBuilderProps } next to the shell.
  • __tests__/formBarrelExports.test.ts: asserts both come from the barrel; fails if the export is removed.
  • design/IDE_INTEGRATION.md: one-line dated note under "the shell is the host's component".
  • Task file + index row per the repo workflow.
  • Version 0.10.52 → 0.10.53.

Verification

yarn precheck green: lint, unit (58 files / 920 tests, the new one included), build:test:prod. No visual surface — qlip should report zero changed snapshots.

Note

#120, filed alongside this, was closed as invalid: both operand mounts have forwarded expressions_url since the port; the symptom was on the qorus-ide side and is fixed there.

The library's own rule renders the ExpressionField shell at a root field
and the bare ExpressionBuilder for nested operands — the June 11
"top-level re-wrap" decision. The barrel exported the shell and not the
builder, so a host that mirrors the rule (qorus-ide's TemplateField fork)
had to deep-import dist/components/form/expressions/builder: a dependency
on the file layout rather than on the API.

Export it next to the shell, with its props type, and pin the barrel
surface with a unit test that fails if the export goes. Version 0.10.53.

Closes #119
The task workflow appends the landed sha to the task's status and the
dashboard row once a batch commits.
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

📦 Prerelease published for this PR:

@qoretechnologies/reqraft@0.10.53-pr.121.gaf1e48a

Install it in a consumer (updates package.json + lockfile):

yarn add @qoretechnologies/reqraft@0.10.53-pr.121.gaf1e48a

Published under the pr dist-tag — latest/beta are untouched. Repoint consumers to the released version once this PR merges.

@qlip-qore-technologies

Copy link
Copy Markdown

qlip visual regression

✅ No visual changes.

Review build 20260908-162158 in the dashboard →

@nickmazurenko
nickmazurenko merged commit 2e1dc9c into develop Sep 9, 2026
4 checks passed
@nickmazurenko
nickmazurenko deleted the feature/119_export-expression-builder branch September 9, 2026 11:06
davidnich added a commit that referenced this pull request Sep 23, 2026
…t widened

ts-toolkit #121 merged and published as 0.5.82, which is the release three local
type declarations here were waiting on.

The bump broke the typecheck, and the break was right. 0.5.82 widens
`IQorusExpressionSchema.return_type` from `TQorusType` to
`TQorusExpressionReturnType`, which admits `list<string>` and `hash<auto>` —
the server names a container's element type inline, so the narrower type was
refusing catalogue entries it is actually served. The local `IExpressionSchema`
now takes the return type from ts-toolkit rather than restating it, so the two
cannot drift apart again.

One local shape collapses: `IOptionFieldMessage` picked `when` / `unless` off
the local conditional-message type because the shared one carried neither, and
it carries both now.

Two deliberately do not. `IReqraftAllowedValue` keeps its own `tooltip` and
`title_actions` because they are WIDER than the shared ones on purpose: a form
schema has to survive the wire, so ts-toolkit's are JSON-pure, while reqraft
renders in React and lets a consumer hand it a live `React.ElementType`.
Collapsing onto the shared type would quietly take that away from every
consumer. The comments saying all three would collapse at 0.5.83 are corrected
to say which did and why the others did not.

`min_value` / `max_value` stay local too, for the ordinary reason: 0.5.82 added
the allowed-value and message members, but `IQorusFormFieldSchemaBase` still has
no numeric bound.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D5Az4yUufcJ5EFSvcBUamu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

expressions: the bare ExpressionBuilder is not exported from the package, only the shell is

1 participant