Skip to content

Feat/UI lib#1

Open
matej21 wants to merge 16 commits intomainfrom
feat/ui-lib
Open

Feat/UI lib#1
matej21 wants to merge 16 commits intomainfrom
feat/ui-lib

Conversation

@matej21
Copy link
Copy Markdown
Member

@matej21 matej21 commented Mar 27, 2026

No description provided.

@matej21 matej21 force-pushed the feat/ui-lib branch 2 times, most recently from 1f2271c to cf70447 Compare March 30, 2026 15:07
matej21 and others added 16 commits April 1, 2026 16:52
Enable selective component overrides by replacing relative cross-component
imports with #bindx-ui/ subpath imports. A Vite plugin can intercept these
at build time to resolve local overrides or fall back to package defaults.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…omponent overrides

- Vite plugin intercepts #bindx-ui/ imports, resolves local overrides
  from user's src/ui/ directory, falls back to package defaults
- CLI tool (bindx-ui eject/restore/status/diff) for managing overrides
  with metadata tracking and version-aware status checks
- BindxUIDefaultsProvider context for global component default props
  with nested provider merging support

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…y, and defaults context

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The _internal/* package export didn't work because wildcard patterns
don't auto-resolve extensions. Instead, the plugin now resolves
fallback paths directly to source files in the package directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds a local Button override with border-red-500 to the example app
and verifies that package components (PersistButton) pick up the
override through the #bindx-ui/ import resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…r overrides

Split multi-component files into individual files for cherry-pick ejecting:

- ui/: extract CheckboxInput, RadioInput, SheetLayout into separate files
- form/: split inputs.tsx into InputField, TextareaField, CheckboxField,
  RadioEnumField individual files
- select/: split ui.tsx into input-ui, multi-select-ui, popover-ui
- datagrid/: split columns.tsx into columns/ subfolder (one per type),
  cells.tsx into cells/ subfolder, ui.tsx into ui/ subfolder
- upload/: split progress.tsx states, extract abort/dismiss buttons,
  split metadata.tsx by media type
- repeater/: split block-repeater into item, sortable, ui, add-button

Rename for consistency:
- Drop "Default" prefix: DefaultDataGrid → DataGrid, DefaultRepeater → Repeater
- Drop "DataGrid" prefix on columns: DataGridTextColumn → TextColumn
- DefaultSelectDataView → SelectDataView

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ompt

- backport command: retrieves base source via git refs, performs diff3
  three-way merge, handles fast paths (no changes, auto-update, etc.)
- --agent flag: generates structured prompt for AI-assisted merge
- --sync flag: updates metadata after agent completes merge
- diff upstream/local sub-commands: show targeted diffs against base
- Enhanced status: distinguishes upstream-only vs both-changed vs local-only
- Git helpers: store gitRef/gitPath in metadata at eject time
- Fix stale test assertions from component restructure

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- backport --agent --all: auto-updates unmodified components, generates
  batch summary prompt for merge-needed ones (inline if ≤5, summary if more)
- backport --skip: acknowledges upstream changes without merging, updates
  base ref so future backports use current upstream as new base
- Handle edge cases: upstream removed, local file missing, shallow clone,
  missing git ref — all reported in batch summary

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…owser test

The test was waiting for the container div (datagrid-example) which renders
immediately, then asserting datagrid-table exists — but that element only
appears after data loads inside DataViewNonEmpty. On slower CI, this races.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…shared CLI utils

- Replace execSync with execFileSync in git.ts, diff.ts, merge.ts, backport.ts
  to prevent shell injection via user-editable .bindx-ui.json metadata
- Update metadata after writing conflict markers in backport to prevent
  re-merging conflict content on subsequent runs
- Track metadata changes with a flag in backportAll to save when
  localHash === upstreamHash (not only when auto-updates occur)
- Extract hashContent, stripHeader, isExecError into shared utils.ts
- Skip findDependents for glob ejections where the pattern can't match imports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…re via block renderers

Core BlockRepeater.getSelection now discovers field dependencies directly
from block definitions by calling any callable properties (render, form)
with a collector proxy. This eliminates the need for UI-layer void proxy
hacks to force fields into the selection.

- Add optional staticRender to BlockDefinition for explicit collection
- Add collectBlockRenderers fallback for duck-typed render/form discovery
- Make children optional on BlockRepeaterProps (blocks can self-describe)
- Remove WithMeta exports — getSelection attached directly to components
- Simplify styled repeater staticRender to pure delegation to core
- Make withCollector staticRender parameter optional

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add data-testid attributes to headless block repeater example and
11 browser tests covering add/remove blocks, move operations,
empty state, and styled repeater rendering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… browser tests

Add explicit waitFor before assertions that depend on prior test state,
increase timeouts for slow CI, and use waitFor-based removal loop to
avoid fixed-sleep timeouts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…owser tests

- Wait for "No blocks yet" text (not just element existence) to handle
  slow data loading on CI
- Wait for move-down button disabled state (not just existence) to
  handle render timing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… browser tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tests assumed empty initial state but CI has seeded blocks. Rewrite to
be data-agnostic: count-based assertions, evalJs for DOM queries to
avoid strict-mode multi-match errors with agent-browser selectors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.

1 participant