Commit Graph

446 Commits

Author SHA1 Message Date
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
robonen 008d85a8fd feat(crdt): add @robonen/crdt package
Hand-built CRDT primitives: Lamport clock + version vectors, op-log,
LWW register/map, RGA sequence, fractional indexing, marks store, sync
encode, and doc/replica. Includes eslint flat config + composite tsconfig.
2026-06-07 16:28:58 +07:00
robonen 70a8678743 chore: workspace eslint catalog, typescript dev dep, monorepo skill
- pnpm-workspace catalog: replace oxlint with eslint ^10.4.1.
- Add typescript dev dep (root) so vitest typecheck (stdlib) resolves tsc.
- Root vitest projects: configs/oxlint → configs/eslint.
- Update monorepo skill + add component-test-auditor agent.
2026-06-07 16:28:20 +07:00
robonen 7693b49253 chore(configs): migrate oxlint→eslint presets, refactor tsconfig
- Replace @robonen/oxlint with @robonen/eslint (composable ESLint flat-config
  presets: base, typescript, vue, vitest, imports, node, stylistic).
- Plugins bundled as deps: typescript-eslint, eslint-plugin-vue,
  @vitest/eslint-plugin, eslint-plugin-import-x, eslint-plugin-n,
  eslint-plugin-unicorn, @stylistic/eslint-plugin.
- @robonen/tsconfig: add base/dom/node/vue configs for composite project refs.
2026-06-07 16:28:10 +07:00
renovate[bot] d3429dad2b chore(deps): update pnpm.catalog.default vitest to v4.1.0 [security] (#135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-05 01:10:16 +00:00
robonen 1d3efa5028 feat(primitives): add menu, dropdown-menu, context-menu, and menubar primitives
Implements WAI-ARIA APG-compliant headless menu primitive families:

- menu: base primitive with MenuRoot, MenuContent, MenuItem,
  MenuCheckboxItem, MenuRadioGroup/Item, MenuSub, and helpers
- dropdown-menu: DropdownMenuRoot with trigger anchoring
- context-menu: ContextMenuRoot with right-click virtual anchor
- menubar: MenubarRoot with keyboard navigation between menus

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 18:48:43 +07:00
robonen 333a18cbaf refactor(presence): enhance slot handling and attribute forwarding 2026-03-26 17:19:31 +07:00
robonen fe527daad1 Merge pull request #130 from robonen/copilot/add-fetch-wrapper-optimization
feat(core): add @robonen/fetch — type-safe fetch wrapper with V8-optimised internals
2026-03-26 16:12:10 +07:00
robonen 1db475c982 refactor(core/fetch): optimize perfomance, improve types 2026-03-26 16:10:19 +07:00
robonen 4876e04ceb Merge remote-tracking branch 'origin/master' into copilot/add-fetch-wrapper-optimization
# Conflicts:
#	core/stdlib/src/async/tryIt/index.ts
#	pnpm-lock.yaml
#	pnpm-workspace.yaml
2026-03-26 06:32:03 +07:00
robonen b144a8bdd3 Merge pull request #89 from robonen/feat/stdlib/retry
feat(core/stdlib): add retry function
2026-03-26 06:29:21 +07:00
robonen 6b4ddc9733 refactor(retry): simplify error handling in retry tests and ensure consistent promise rejection handling 2026-03-26 06:28:09 +07:00