Commit Graph

457 Commits

Author SHA1 Message Date
robonen eefd7abf83 feat(primitives): media-editor components, category reorg, perf + type cleanup
Reorganize components into category folders (forms/canvas/overlays/etc.); add the
media-editor headless family (timeline, curve-editor, waveform, crop, color
picker, etc.); apply perf fixes (O(1) collection lookups, plain-object drag
state, gesture-leak teardown, shallowRef color state, rect caching) and replace
source `any` with proper types.
2026-06-15 16:54:29 +07:00
robonen 661a55719e perf(primitives): add performance audit report and vitest bench baselines
Library-wide Vue+V8 perf/leak audit (PERF_AUDIT.md) plus bench baselines for the
hot-path modules (timeline, curve-editor, spline, pointer-drag, collection, etc.).
2026-06-15 16:54:28 +07:00
robonen 263c32002f feat(writekit): rename @robonen/editor to @robonen/writekit
Rename the rich-text editor package and all Editor* exports to Writekit*;
remove the old vue/editor tree.
2026-06-15 16:54:06 +07:00
robonen 55e78786d6 fix(extract): improve rawExampleText function to trim trailing whitespace more effectively 2026-06-10 16:32:00 +07:00
robonen a39d93a6a4 Merge branch 'master' into docs 2026-06-10 16:24:41 +07:00
robonen 45cf3d78da feat(ci): add sentinel job to aggregate matrix results and ensure all checks pass 2026-06-10 16:23:03 +07:00
robonen 9375304e1a feat(navigation-menu): enhance context handling and lifecycle management 2026-06-10 16:16:12 +07:00
robonen 225c3b8530 Merge pull request #142 from robonen/docs
feat(storage): enhance useStorageAsync with cross-instance sync and e…
2026-06-10 15:13:40 +07:00
robonen a82f5f2dfd feat(storage): enhance useStorageAsync with cross-instance sync and event handling 2026-06-10 15:09:46 +07:00
robonen 98e243dc04 Merge pull request #141 from robonen/docs
feat(forms): add useMaskedField and useMaskedInput composables for in…
2026-06-09 13:58:53 +07:00
robonen 07937e26db feat(forms): add useMaskedField and useMaskedInput composables for input masking 2026-06-09 13:54:52 +07:00
renovate[bot] a0154dabf5 chore(deps): update all non-major dependencies (#120)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-09 01:15:28 +00:00
robonen 088970ba27 Merge pull request #140 from robonen/docs
Docs
2026-06-08 21:32:16 +07:00
robonen 6de7c72fb3 fix(docs): shorten TMPDIR on macOS so the dev server's vite-node socket fits
Nuxt's dev vite-node IPC uses a unix socket under $TMPDIR. macOS's default /var/folders/… tmp dir pushes the path to ~110 chars, past the ~104-char sun_path limit, so every request 500s with 'connect EINVAL'. Point $TMPDIR at /tmp on darwin (guarded; other platforms untouched) before the builder generates the socket path.
2026-06-08 21:11:53 +07:00
robonen 53c725d3b2 docs(editor): richer playground (drag, multiplayer, live output) + drop contenteditable outline
Reworks the editor playground into a tabbed showcase:
- Rich text & blocks: drag-to-reorder handles, bubble/slash menus, and a live output panel (block/word counts, selection readout, document JSON).
- Multiplayer: two CRDT replicas synced over an in-memory channel with remote cursors, an in-sync indicator, and a Connected/Offline toggle that demonstrates divergence → convergence.
Also removes the focus outline on the contenteditable (outline: none on the editable surface).
2026-06-08 21:02:30 +07:00
robonen a5b3c165d4 Merge pull request #139 from robonen/docs
docs(editor): add an interactive editor playground
2026-06-08 20:45:33 +07:00
robonen 024685e265 docs(editor): add an interactive editor playground
A live @robonen/editor instance (default registry) as a doc section at /editor/playground: a reactive formatting toolbar, the bubble/slash menus, and a sample document exercising every block and mark — styled with the docs design tokens and wrapped in <ClientOnly> for SSR. Links it from the editor intro.
2026-06-08 20:37:51 +07:00
robonen 3ba4af1ac4 Merge pull request #137 from robonen/docs
Docs
2026-06-08 17:46:03 +07:00
robonen f4cc6e45eb test(vue): avoid CSS-wide keyword as a custom-property value in useCssVar test
Setting a custom property to 'initial' (a CSS-wide keyword) computes to the guaranteed-invalid value, so getComputedStyle returns '' — correct per spec and now implemented by jsdom 29 (the deps bump from jsdom 28). Use a normal token ('start') so the read returns the value.
2026-06-08 17:32:29 +07:00
robonen d88fe9f9ab chore: gitignore vitest failure attachments
vitest browser mode writes failure-capture PNGs into .vitest-attachments/; keep them out of git (a tracked one was already being cleaned up in primitives).
2026-06-08 17:22:38 +07:00
robonen f335c7db61 test(editor): wait for async selectionchange in cross-block selection test
selectionchange is dispatched on a macrotask, so awaiting nextTick (microtasks) didn't wait for the editor to sync the native selection into the model — the assertion saw the initial selection. Poll with vi.waitFor instead. (Surfaced now that per-package CI runs editor's browser tests, which the root vitest projects list omitted.)
2026-06-08 17:20:40 +07:00
robonen 73e701a2c5 chore: update all deps 2026-06-08 17:11:14 +07:00
robonen 4458744dcf ci: run playwright install in the package context
playwright is a direct devDep of @robonen/primitives and @robonen/editor, not the root, so 'pnpm exec playwright' couldn't resolve the CLI in CI's strict install (Command "playwright" not found). Run it via 'pnpm --filter <pkg> exec' so the package's node_modules/.bin is on PATH.
2026-06-08 16:53:25 +07:00
robonen f40cc55497 ci: run build, lint and test in parallel per package
Replace the single monorepo CI job with a dynamic matrix: a discover job enumerates workspace packages, then one job per package builds it (with its workspace deps), lints and tests in parallel (fail-fast: false). Chromium is installed only for the browser-mode suites (primitives, editor). Adds a 'test' script to @robonen/docs so its suite runs under the per-package model (the root vitest projects list isn't used by CI anymore).
2026-06-08 16:50:34 +07:00
robonen 9d78f63e56 ci: install Playwright Chromium before running tests
vue/primitives runs vitest in browser mode (instances: chromium), so 'pnpm test' launches Playwright Chromium — which the CI runner doesn't have, failing the run after all 3320 tests pass. Add 'playwright install --with-deps chromium' before the test step in both CI and publish workflows.
2026-06-08 16:39:18 +07:00
robonen 67ca9252b7 fix(docs): use replaceAll in the doc-section TOC slug helper
Satisfies unicorn/prefer-string-replace-all (global-regex replace -> replaceAll).
2026-06-08 16:28:52 +07:00
robonen c2252a2a5c chore(eslint): exclude docs-site content from linting
Per-composable demos (demo.vue) and hand-authored doc sections (docs/*.vue) are unpublished docs-site content co-located in packages for the extractor. Ignore **/docs/** and **/demo.vue: they aren't library source, and non-Vue packages can't parse .vue at all (parse error in configs/eslint).
2026-06-08 16:28:52 +07:00
robonen 27f7a0f00e fix(docs): update NODE_VERSION to 24.x in CI and publish workflows 2026-06-08 16:11:27 +07:00
robonen 5c33ed36a4 fix(docs): resolve @robonen/* workspace imports from source
The docs build pulls composables (via demos) and doc sections into its bundle, which transitively import workspace packages like @robonen/platform/multi. Aliasing each @robonen/* package to its src means the build no longer requires every package's dist to be built first, fixing CI where dists are absent.
2026-06-08 16:05:19 +07:00
robonen 8586b2be1e Merge branch 'master' into docs
# Conflicts:
#	pnpm-lock.yaml
2026-06-08 15:59:16 +07:00
robonen 13de500d11 chore: update lockfile, root vitest config, and mcp config 2026-06-08 15:52:03 +07:00
robonen 53f2d7ceef docs: add package introductions and the @robonen/crdt guide
An intro.vue landing for all 12 packages, plus a multi-section crdt guide (Concepts, Primitives, Replication & Sync, and an interactive convergence Playground).
2026-06-08 15:52:03 +07:00
robonen 09433415b6 feat(docs): doc-sections system, crdt package, MCP server, and responsive fixes
Adds a hand-authored .vue doc-sections system (intro + guide pages per package, #docs/sections map, sidebar Guide group, client-side TOC), registers @robonen/crdt, renders demos client-only, base64-encodes the server-metadata virtual, plus the MCP docs endpoint and responsive/overflow fixes across pages and tables.
2026-06-08 15:52:03 +07:00
robonen def1db8b6c fix(primitives): component fixes and test cleanup 2026-06-08 15:51:30 +07:00
robonen 9ef8125965 chore(editor): view, selection-bridge, and type fixes 2026-06-08 15:51:30 +07:00
robonen e83f10fe32 docs(vue): add interactive demo for every composable
A beautiful, SSR-safe demo.vue next to each composable, auto-discovered by the docs extractor and rendered client-only on each composable's page.
2026-06-08 15:51:16 +07:00
robonen 59e995d0b5 feat(vue): expand @robonen/vue composable collection
Composables, tests, category barrels, and README for @robonen/vue.
2026-06-08 15:51:16 +07:00
robonen 9a912f7a77 fix(core): update encoding QR constants and fetch utils 2026-06-08 15:50:59 +07:00
robonen 74fbd0c005 feat(stdlib): add immutable array ops, deep set, and isEqual comparator
Adds arrays/{move,insert,swap,remove}, collections/set, and comparators/isEqual (NaN/Date/RegExp/Map/Set/cycle-safe), wired into the barrels.
2026-06-08 15:50:59 +07:00
robonen 4678a372b1 chore(eslint): update shared presets and config exports 2026-06-08 15:50:59 +07:00
robonen 5c583b64a4 chore: update pnpm-lock.yaml for eslint toolchain + typescript 2026-06-07 16:30:27 +07:00
robonen 96ac895f7a chore(docs): eslint migration + extractor updates
Migrate docs to eslint flat config (build-script console override); doc
extractor points at configs/eslint.
2026-06-07 16:30:14 +07:00
robonen 23a2795523 chore(stories): eslint/tsconfig migration
Migrate Storybook package to eslint flat config + composite tsconfig.
2026-06-07 16:30:05 +07:00
robonen 09272dffeb feat(editor): eslint/tsconfig migration + type fixes
@robonen/editor: migrate to eslint flat config + composite tsconfig; fix
convergence test type annotations.
2026-06-07 16:30:05 +07:00
robonen 626fbc70d8 fix(primitives): eslint/tsconfig migration, asChild refactor, type fixes
- Migrate to eslint flat config + composite tsconfig.
- Complete the asChild→as="template" refactor (remove asChild prop + :as-child
  bindings across components, matching Primitive's slot model).
- Fix test type errors and source type-safety (useGraceArea hull/point math,
  FocusScope/util ref typing).

Note: ~53 vue-tsc errors remain (HTML attr/event passthrough typing on
transparent wrapper components + a couple of duplicate-export naming
collisions) — not gated by CI (build/lint/test green); pending a
component-attribute-typing design decision.
2026-06-07 16:29:56 +07:00
robonen c7644ade69 fix(vue): eslint/tsconfig migration + resolve type errors
@robonen/vue (toolkit): migrate to eslint flat config + composite tsconfig;
fix composable + test type errors (writable computed returns, null guards,
overload-compatible signatures, typed test helpers) — all type-level.
2026-06-07 16:29:39 +07:00
robonen e6919de29e chore(platform): eslint/tsconfig migration + browser utils
Migrate to eslint flat config and composite tsconfig; browser/multi updates
(hideOthers, focusScope).
2026-06-07 16:29:28 +07:00
robonen da8d137be4 chore(encoding): eslint/tsconfig migration
Migrate to eslint flat config (qr-code.ts override for the mask-penalty
sliding-window) and composite tsconfig.
2026-06-07 16:29:27 +07:00
robonen a7e668ced8 feat(fetch): plugin system + eslint/tsconfig migration
- Add fetch plugin API (definePlugin, plugins) with type-level option flow.
- Migrate to eslint flat config and composite tsconfig.
2026-06-07 16:29:18 +07:00
robonen 96f4cba4a8 feat(stdlib): new modules + eslint/tsconfig migration
- Add array/async/etc. modules and type tests; migrate to eslint flat config
  and composite tsconfig (vitest typecheck enabled).
- Fix PubSub.emit to snapshot listeners before iterating (stable EventEmitter
  semantics; avoids invoking listeners added during the same emit).
2026-06-07 16:29:08 +07:00