26 Commits
Author SHA1 Message Date
tben f9fa9da091 Publish: Bugfix 2026-10-22 11:19:13 +01:00
tben b516084b69 Fire native change events from Input number steppers
Route stepper value changes through the native input setter and dispatch
input/change events so React onChange and DOM listeners see the update.
Read the live DOM value while holding a stepper so repeats don't lag.
2026-10-22 11:18:25 +01:00
tben 57e57863a9 Minor bugfixes 2026-10-22 05:03:40 +01:00
tben 844c6bad11 Fix Input validation, value handling and number steppers
Input:
- honour `invalidMessage` instead of always reporting "Value mismatch"
- don't let the mount value wipe an external `validity` prop, and don't
  force `isValid: true` on clear when `validity` is supplied
- sync controlled and programmatic values into `textarea` (the value
  effect had an empty branch that skipped textareas entirely)
- accept `defaultValue`/`value` of `0` and `""` (nil check, not truthiness)
- clear debounce/validation/change-handler timers on unmount
- type `wrapperProps` as `ComponentProps<"div">`
- let `labelProps.htmlFor` override the name link deterministically
- drop duplicated focus outline classes and the stale buttonDown guard
  that discarded edits made right after holding a stepper

NumberInputButtons:
- write through `setValue` so steppers work on controlled inputs and
  fire `onChange`
- clamp to both `min` and `max`, including `0` values, and respect `step`
- round float drift, ignore steps while a trailing decimal point is typed
- instance-scoped press timers with unmount cleanup; a held press no
  longer double-steps on the trailing click

Also adds a numberText stepper example to the dev playground.
2026-10-22 05:02:16 +01:00
tben d07cbb7c84 Don't crash Form's change handler outside a form
Form reads the closest form on every change. A field rendered through a
portal (a Modal) has no form ancestor in the DOM, so FormData(null) threw.
Change handlers now get an empty object instead.
2026-10-22 05:00:30 +01:00
tben 915c9a1be0 Remove large imports 2026-10-20 13:35:20 +01:00
tben 33808c2392 Add dev server. Update search select default commit mode 2026-10-19 04:40:26 +01:00
tben a2061f6208 Remove deprecated baseUrl from dev tsconfig 2026-10-19 04:39:33 +01:00
tben e989167e14 Fix SearchSelect dropdown not reopening after commit 2026-10-19 04:27:26 +01:00
tben 73a25f54c2 Add bunext playground for local component development
Runs at http://localhost:7010 via bun run dev. The playground imports the library from src through a committed symlink and tsconfig path alias, so component edits hot-reload without a build step. It has its own install root and is excluded from the published package.
2026-10-19 04:23:07 +01:00
tben 46049c5e15 First release 2026-10-18 10:46:23 +01:00
tbenandClaude Opus 5.5 cdeeb8201e Fix component bugs across hooks, elements, form, layout, editors and utils
- Hooks: per-instance timers in useReady; cleanup for useIntersectionObserver;
  useWebSocket no longer reconnects after unmount/refresh, drains the queue
  and dispatches non-JSON messages
- Modal/Popover/Dropdown: onClose only on close, Escape to close, no stray
  DOM props, hooks before early return, scrollbar-aware positioning,
  top-left/top-right dropdown positions
- Elements: Toast/Search/StarRating per-instance timers, Pagination labels
  and empty state, Breadcrumbs titles, LinkList dividers/props, segment-wise
  active-link matching (new utils/link-matches-path), Table object cells
- Form: Select with a default option is changeable, Input clear notifies
  controlled parents and copy works on textareas, Checkbox random label,
  NumberInputButtons runaway interval, upload prop/spread fixes
- Layout: Button disabled while loading, Stack gap and Span truncate via
  inline styles, Img fallbackImageSrc, className/JSDoc fixes
- Editors/MDX/AI: TinyMCE id/cleanup/stale handler/duplicate scripts,
  AceEditor debounce, markdown heights and frontmatter regex, last
  assistant message, AIPromptBlock prompt ref
- Utils: fetchApi headers/FormData/fetchOptions/no mutation, base64 file
  names and read errors, slugify underscore trim, serializeQuery zero values
- Tests for fetchApi, link matching, slugify and serializeQuery
- AGENTS.md updated for the package layout

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 10:45:46 +01:00
tbenandClaude Opus 5.5 11da9b89e7 Package library as @moduletrace/twui npm package
- Move components/ to src/ and compile to dist/ with tsc
- Add root barrel export plus deep-import subpath exports and base.css export
- Post-compile step: copy base.css, add .js import extensions, mark client modules
- Add publish.sh and .npmrc for the Gitea npm registry
- Fix type errors, guard TinyMCE env access, drop ace-builds type dependency
- Rename clashing props type names, remove Next.js scaffolding and unused deps

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 10:17:54 +01:00
tbenandClaude Opus 5.5 d19d412066 Updates
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 07:04:14 +01:00
tbenandClaude Opus 5.5 b61a5b1fb3 Updates
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:58:10 +01:00
tben 44088c5a9c Updates 2026-10-13 06:52:08 +01:00
tben 3dc9f12ad4 Updates 2026-10-01 08:02:47 +01:00
tben 6392457ffb Updates 2026-03-23 06:30:43 +01:00
tben a242869095 Updates 2026-03-12 15:57:58 +01:00
tben 2c101420cc Updates 2026-03-10 05:13:00 +01:00
tben 9f8527fc4d Updates 2026-03-08 17:03:10 +01:00
tben 358bfed988 Updates 2026-03-05 22:06:38 +01:00
tben 89e673bb59 Updates 2026-03-04 17:54:49 +01:00
tben 214937e166 Updates 2026-03-04 17:50:26 +01:00
tben a9660a4f1f Updates 2026-03-04 17:48:28 +01:00
tben db26e26495 Updates 2026-03-04 17:35:14 +01:00