Commit Graph

482 Commits

Author SHA1 Message Date
robonen 38c2cd5504 feat: enhance npm publish workflow with improved authentication and concurrency handling
Publish to NPM / Check version changes and publish (push) Successful in 11m13s
2026-07-31 04:54:09 +07:00
robonen c6b6b93e81 chore: update dependencies and package manager versions across projects
Publish to NPM / Check version changes and publish (push) Failing after 10m54s
2026-07-31 04:21:32 +07:00
robonen 53e831894a feat: enhance useVirtualList for dynamic item sizing and improved scrolling behavior
Publish to NPM / Check version changes and publish (push) Failing after 11m20s
2026-07-29 17:19:47 +07:00
robonen a8e5f63415 build: update version to 0.0.2
Publish to NPM / Check version changes and publish (push) Failing after 9m34s
2026-07-17 22:13:04 +07:00
robonen 1cab48ca48 fix(fetch): accept a named interface as request body without a cast
FetchOptions['body'] listed `Record<string, unknown>`, which a named interface
is not assignable to (interfaces carry no implicit index signature), so every
caller passing a typed body had to cast it. Widen the object member to `object`:
named interfaces and arrays now assign directly, `any` is not introduced, and
bare primitives (number/boolean) are still rejected. Runtime is unchanged — the
serializer already narrows the body with its own casts.

Guard it with a type test (src/types.test-d.ts, run under vitest --typecheck):
a named interface must assign to the body type and flow through the method
shortcuts with no cast, while bare primitives stay rejected. Enable typecheck
for the package's vitest project so the assertions are enforced by tsc.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 22:13:04 +07:00
robonen 8ea85c4aab Merge pull request 'chore(deps): update actions/checkout action to v7' (#7) from renovate/actions-checkout-7.x into master
Publish to NPM / Check version changes and publish (push) Successful in 10m28s
Reviewed-on: #7
2026-06-18 19:44:24 +00:00
Renovate Bot 151e106aa7 chore(deps): update actions/checkout action to v7
CI / @robonen/crdt (pull_request) Successful in 1m40s
CI / @robonen/docs (pull_request) Successful in 5m30s
CI / @robonen/encoding (pull_request) Successful in 1m42s
CI / @robonen/eslint (pull_request) Successful in 1m6s
CI / @robonen/fetch (pull_request) Successful in 1m14s
CI / @robonen/platform (pull_request) Successful in 1m21s
CI / @robonen/primitives (pull_request) Successful in 5m26s
CI / @robonen/primitives-playground (pull_request) Successful in 1m54s
CI / @robonen/renovate (pull_request) Successful in 54s
CI / @robonen/stdlib (pull_request) Successful in 1m36s
CI / @robonen/stories (pull_request) Successful in 2m10s
CI / @robonen/tsconfig (pull_request) Successful in 52s
CI / @robonen/tsdown (pull_request) Successful in 59s
CI / @robonen/vue (pull_request) Successful in 3m31s
CI / @robonen/writekit (pull_request) Successful in 4m35s
CI / @robonen/writekit-playground (pull_request) Successful in 1m56s
CI / CI (pull_request) Successful in 5s
2026-06-18 16:04:37 +00:00
robonen 655f30a658 test(scroll-area): improve glimpse type test for pointer interactions
Publish to NPM / Check version changes and publish (push) Successful in 11m30s
2026-06-18 03:17:25 +07:00
robonen ab6d8f6ce0 build: bump new versions
Publish to NPM / Check version changes and publish (push) Failing after 10m34s
2026-06-18 02:57:03 +07:00
robonen e73e8d2cdd chore: update dependencies and configurations across multiple packages
Publish to NPM / Check version changes and publish (push) Failing after 10m44s
2026-06-18 02:02:58 +07:00
robonen 6e70d4edd1 refactor(ci): replace dynamic package discovery with static package list
Publish to NPM / Check version changes and publish (push) Failing after 10m51s
2026-06-16 06:01:38 +07:00
robonen c8c9676d1e Merge pull request #148 from robonen/docs
Publish to NPM / Check version changes and publish (push) Failing after 2m26s
refactor(docs): remove unused broadcastedRef composable
2026-06-15 17:50:26 +07:00
robonen 91fa464d95 refactor(docs): remove unused broadcastedRef composable 2026-06-15 17:49:59 +07:00
robonen b24291ac3a Merge pull request #147 from robonen/docs
fix(docs): build workspace libs before the Nuxt build
2026-06-15 17:48:32 +07:00
robonen 98b76f46cf fix(docs): build workspace libs before the Nuxt build
The SFC type resolver resolves `@robonen/*` package imports (e.g. PrimitiveProps,
used in `defineProps<X extends PrimitiveProps>()`) via the package `exports` →
`dist/*.d.ts`, independently of the Vite source-alias. On a fresh checkout (CI /
Vercel) those dist files don't exist yet, so the compiler throws 'Failed to
resolve extends base type'. `build`/`generate` now run `build:deps` first.
2026-06-15 17:41:34 +07:00
robonen 0679160cb0 Merge pull request #146 from robonen/docs
Docs
2026-06-15 17:16:22 +07:00
robonen 4c8c3a396e chore(ci): migrate workflows from GitHub to Gitea; update lockfile 2026-06-15 16:55:23 +07:00
robonen 8adc2522c6 docs: site WIP, extractor type cleanup, tests preset; add broadcastedRef
Type the docs extractor's package.json parsing as unknown; comment the Vite
plugin version-skew cast; wire the tests preset; site/architecture WIP.
2026-06-15 16:55:22 +07:00
robonen be667df3d8 chore(stories): wire tests preset into lint config 2026-06-15 16:55:07 +07:00
robonen a147ec0730 docs(core): update crdt/encoding/fetch docs and lint config 2026-06-15 16:55:07 +07:00
robonen aa2938cb34 refactor(toolkit): type source any with proper types
Genuinely type composable any usages (useStepper/useStorage/useForm/
createEventHook/useSorted/etc.) as proper generics/unknown; keep idiomatic
any-function and overload-impl signatures with comments; skipped test -> .todo.
2026-06-15 16:55:07 +07:00
robonen 44848bc9e6 refactor(platform): type focusScope helper; browser updates 2026-06-15 16:54:51 +07:00
robonen 425a7bc6e7 refactor(stdlib): replace source any with unknown/generics
Type guards take `unknown`; walkers/comparators (get/set/isEqual) narrow via
casts; generic defaults and constraints tightened. Truly-idiomatic any-function
constraints and load-bearing type-level any are kept with explanatory comments.
2026-06-15 16:54:50 +07:00
robonen d6c6a62557 chore(eslint): add shared tests preset and relax no-console
A 'tests' preset exempts *.test/*.spec/*.bench files from the type-boundary rules
(no-explicit-any, no-unused-vars, no-new-array, no-extraneous-class); base now
allows intentional console.warn/error (stray console.log still flagged).
2026-06-15 16:54:50 +07:00
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 858cd8f8e0 Merge pull request #143 from robonen/docs
feat(navigation-menu): enhance context handling and lifecycle management
2026-06-10 16:36:24 +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