gitextract_9k73p22c/ ├── .editorconfig ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.md │ │ ├── common-issue.md │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── ci.yml │ ├── devtools-publish.yml │ ├── github-page-publish.yml │ └── npm-publish.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .prettierrc.js ├── CHANGELOG.md ├── CLAUDE.md ├── CONTRIBUTING.md ├── LICENSE ├── MAINTAINING.md ├── README.md ├── codecov.yml ├── docker/ │ ├── docker-compose-ci.yml │ └── docker-compose.yml ├── eslint.config.mjs ├── examples/ │ ├── CONTRIBUTING.md │ ├── README.md │ ├── nextjs-presence/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── App.css │ │ │ ├── api/ │ │ │ │ └── channels/ │ │ │ │ └── route.ts │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── RoomSelector.css │ │ │ ├── RoomSelector.tsx │ │ │ ├── RoomView.css │ │ │ ├── RoomView.tsx │ │ │ ├── SessionCounter.css │ │ │ └── SessionCounter.tsx │ │ ├── eslint.config.mjs │ │ ├── lib/ │ │ │ └── rooms.ts │ │ ├── next.config.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── nextjs-scheduler/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── Scheduler.tsx │ │ │ ├── layout.tsx │ │ │ ├── not-found.tsx │ │ │ ├── page.tsx │ │ │ ├── styles/ │ │ │ │ ├── calendar.css │ │ │ │ ├── globals.css │ │ │ │ └── page.module.css │ │ │ └── utils/ │ │ │ ├── handlePeers.ts │ │ │ ├── parseDate.ts │ │ │ └── types.ts │ │ ├── eslint.config.mjs │ │ ├── next.config.js │ │ ├── package.json │ │ └── tsconfig.json │ ├── nextjs-todolist/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app/ │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── TodoList.tsx │ │ │ └── ui/ │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ └── input.tsx │ │ ├── components.json │ │ ├── eslint.config.mjs │ │ ├── lib/ │ │ │ └── utils.ts │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ └── tsconfig.json │ ├── profile-stack/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── style.css │ │ ├── util.js │ │ └── vite.config.js │ ├── react-document-limit/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── components/ │ │ │ │ ├── ConnectionStatus.tsx │ │ │ │ ├── Counter.tsx │ │ │ │ ├── CounterNumber.tsx │ │ │ │ ├── IncrementButton.tsx │ │ │ │ └── Peers.tsx │ │ │ ├── hooks/ │ │ │ │ └── useDocumentSelector.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── react-flow/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── react-polling-playground/ │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── Leaderboard.tsx │ │ │ ├── StockDetail.tsx │ │ │ ├── StockRow.tsx │ │ │ ├── WritePostPage.tsx │ │ │ ├── main.tsx │ │ │ ├── stocks.ts │ │ │ ├── styles.css │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── react-revision/ │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── RevisionPanel.tsx │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── react-tldraw/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── CustomCursor.tsx │ │ │ ├── hooks/ │ │ │ │ ├── types.ts │ │ │ │ └── useMultiplayerState.ts │ │ │ ├── main.tsx │ │ │ ├── tldraw.d.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── react-todomvc/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── components/ │ │ │ │ ├── Footer.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── MainSection.tsx │ │ │ │ ├── TodoItem.tsx │ │ │ │ └── TodoTextInput.tsx │ │ │ ├── main.tsx │ │ │ ├── model.ts │ │ │ ├── todoReducer.ts │ │ │ ├── useTodoReducer.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ ├── simultaneous-cursors/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.jsx │ │ │ ├── components/ │ │ │ │ ├── ColoredIcon.jsx │ │ │ │ ├── Cursor.jsx │ │ │ │ ├── CursorSelections.css │ │ │ │ ├── CursorSelections.jsx │ │ │ │ ├── FullAnimation.jsx │ │ │ │ ├── PenCursor.jsx │ │ │ │ ├── SingleAnimation.jsx │ │ │ │ └── SingleAnimation.module.css │ │ │ ├── hooks/ │ │ │ │ └── useInterval.jsx │ │ │ └── main.jsx │ │ └── vite.config.js │ ├── vanilla-codemirror6/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── main.ts │ │ │ ├── network.ts │ │ │ ├── style.css │ │ │ ├── type.ts │ │ │ ├── utils.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.js │ ├── vanilla-document-limit/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── connection.ts │ │ │ ├── counter.ts │ │ │ ├── index.css │ │ │ ├── main.ts │ │ │ ├── peer.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── vanilla-prosemirror/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── main.ts │ │ │ ├── style.css │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.js │ ├── vanilla-quill/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── main.ts │ │ │ ├── network.ts │ │ │ ├── style.css │ │ │ ├── type.ts │ │ │ ├── utils.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.js │ └── vuejs-kanban/ │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── App.vue │ │ ├── assets/ │ │ │ └── main.css │ │ └── main.js │ └── vite.config.js ├── lint-staged.config.mjs ├── package.json ├── packages/ │ ├── devtools/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── content.ts │ │ │ ├── devtools/ │ │ │ │ ├── components/ │ │ │ │ │ ├── Code.tsx │ │ │ │ │ ├── Detail.tsx │ │ │ │ │ ├── JsonView.tsx │ │ │ │ │ ├── ResizableSeparator.tsx │ │ │ │ │ └── Tree.tsx │ │ │ │ ├── contexts/ │ │ │ │ │ ├── SelectedNode.tsx │ │ │ │ │ ├── SelectedPresence.tsx │ │ │ │ │ └── YorkieSource.tsx │ │ │ │ ├── icons/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── panel/ │ │ │ │ │ ├── code.css │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── slider.css │ │ │ │ │ └── styles.css │ │ │ │ └── tabs/ │ │ │ │ ├── Document.tsx │ │ │ │ ├── History.tsx │ │ │ │ └── Presence.tsx │ │ │ ├── popup/ │ │ │ │ └── index.tsx │ │ │ └── port.ts │ │ └── tsconfig.json │ ├── prosemirror/ │ │ ├── README.md │ │ ├── examples/ │ │ │ ├── basic.html │ │ │ ├── basic.ts │ │ │ ├── custom-schema.html │ │ │ ├── custom-schema.ts │ │ │ ├── index.html │ │ │ ├── style.css │ │ │ ├── tree-schema.html │ │ │ └── tree-schema.ts │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── setup-tree-schema.ts │ │ ├── src/ │ │ │ ├── binding.ts │ │ │ ├── convert.ts │ │ │ ├── cursor.ts │ │ │ ├── defaults.ts │ │ │ ├── diff.ts │ │ │ ├── index.ts │ │ │ ├── position.ts │ │ │ ├── selection-plugin.ts │ │ │ ├── sync.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ ├── integration/ │ │ │ │ └── split_merge_test.ts │ │ │ └── unit/ │ │ │ ├── convert_test.ts │ │ │ ├── custom_schema_test.ts │ │ │ ├── defaults_test.ts │ │ │ ├── diff_test.ts │ │ │ ├── helpers.ts │ │ │ ├── position_test.ts │ │ │ └── sync_test.ts │ │ ├── tsconfig.json │ │ ├── vite.build.ts │ │ ├── vite.config.ts │ │ └── vitest.config.ts │ ├── react/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── ChannelProvider.tsx │ │ │ ├── DocumentProvider.tsx │ │ │ ├── YorkieProvider.tsx │ │ │ ├── createChannelStore.ts │ │ │ ├── createDocumentStore.ts │ │ │ ├── createStore.ts │ │ │ ├── index.ts │ │ │ ├── shallowEqual.ts │ │ │ ├── usePeekChannel.ts │ │ │ ├── useSelector.ts │ │ │ └── useYorkieDoc.ts │ │ ├── test/ │ │ │ ├── integration/ │ │ │ │ └── integration.test.tsx │ │ │ ├── test-setup.ts │ │ │ └── unit/ │ │ │ ├── createDocumentSelector.test.tsx │ │ │ ├── useRevisions.test.tsx │ │ │ ├── useSelector.test.ts │ │ │ └── useYorkieDoc.test.ts │ │ ├── tsconfig.json │ │ ├── vite.config.js │ │ └── vitest.config.ts │ ├── schema/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── antlr/ │ │ │ ├── YorkieSchema.g4 │ │ │ ├── YorkieSchema.interp │ │ │ ├── YorkieSchema.tokens │ │ │ ├── YorkieSchemaLexer.interp │ │ │ ├── YorkieSchemaLexer.tokens │ │ │ ├── YorkieSchemaLexer.ts │ │ │ ├── YorkieSchemaListener.ts │ │ │ ├── YorkieSchemaParser.ts │ │ │ └── YorkieSchemaVisitor.ts │ │ ├── index.html │ │ ├── package.json │ │ ├── public/ │ │ │ └── style.css │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── main.ts │ │ │ ├── rulesets.ts │ │ │ ├── validator.ts │ │ │ └── vite-env.d.ts │ │ ├── test/ │ │ │ ├── ruleset.test.ts │ │ │ └── validator.test.ts │ │ ├── tsconfig.json │ │ ├── vite.build.ts │ │ └── vite.config.ts │ └── sdk/ │ ├── README.md │ ├── buf.gen.yaml │ ├── eslint.config.mjs │ ├── index.html │ ├── package.json │ ├── public/ │ │ ├── counter.html │ │ ├── devtool/ │ │ │ ├── network.js │ │ │ ├── object.css │ │ │ ├── object.js │ │ │ ├── text.css │ │ │ └── text.js │ │ ├── drawing.html │ │ ├── multi.html │ │ ├── presence.html │ │ ├── quill.css │ │ ├── quill.html │ │ ├── schema.html │ │ ├── style.css │ │ ├── tree-schema.html │ │ ├── whiteboard.css │ │ └── whiteboard.html │ ├── scripts/ │ │ └── update-examples.sh │ ├── src/ │ │ ├── api/ │ │ │ ├── converter.ts │ │ │ ├── revision.ts │ │ │ └── yorkie/ │ │ │ └── v1/ │ │ │ ├── resources.proto │ │ │ ├── resources_pb.ts │ │ │ ├── yorkie.proto │ │ │ └── yorkie_pb.ts │ │ ├── channel/ │ │ │ └── channel.ts │ │ ├── client/ │ │ │ ├── attachable.ts │ │ │ ├── attachment.ts │ │ │ ├── auth_interceptor.ts │ │ │ ├── client.ts │ │ │ ├── metric_interceptor.ts │ │ │ └── watch.ts │ │ ├── devtools/ │ │ │ ├── index.ts │ │ │ ├── protocol.ts │ │ │ └── types.ts │ │ ├── document/ │ │ │ ├── change/ │ │ │ │ ├── change.ts │ │ │ │ ├── change_id.ts │ │ │ │ ├── change_pack.ts │ │ │ │ ├── checkpoint.ts │ │ │ │ └── context.ts │ │ │ ├── crdt/ │ │ │ │ ├── array.ts │ │ │ │ ├── counter.ts │ │ │ │ ├── element.ts │ │ │ │ ├── element_rht.ts │ │ │ │ ├── gc.ts │ │ │ │ ├── hll.ts │ │ │ │ ├── object.ts │ │ │ │ ├── primitive.ts │ │ │ │ ├── rga_tree_list.ts │ │ │ │ ├── rga_tree_split.ts │ │ │ │ ├── rht.ts │ │ │ │ ├── root.ts │ │ │ │ ├── text.ts │ │ │ │ └── tree.ts │ │ │ ├── document.ts │ │ │ ├── history.ts │ │ │ ├── json/ │ │ │ │ ├── array.ts │ │ │ │ ├── counter.ts │ │ │ │ ├── element.ts │ │ │ │ ├── object.ts │ │ │ │ ├── strings.ts │ │ │ │ ├── text.ts │ │ │ │ └── tree.ts │ │ │ ├── operation/ │ │ │ │ ├── add_operation.ts │ │ │ │ ├── array_set_operation.ts │ │ │ │ ├── edit_operation.ts │ │ │ │ ├── increase_operation.ts │ │ │ │ ├── move_operation.ts │ │ │ │ ├── operation.ts │ │ │ │ ├── remove_operation.ts │ │ │ │ ├── set_operation.ts │ │ │ │ ├── style_operation.ts │ │ │ │ ├── tree_edit_operation.ts │ │ │ │ └── tree_style_operation.ts │ │ │ ├── presence/ │ │ │ │ ├── change.ts │ │ │ │ └── presence.ts │ │ │ ├── schema/ │ │ │ │ ├── content-expression.ts │ │ │ │ ├── ruleset_validator.ts │ │ │ │ └── tree-validator.ts │ │ │ ├── time/ │ │ │ │ ├── actor_id.ts │ │ │ │ ├── ticket.ts │ │ │ │ └── version_vector.ts │ │ │ └── yson/ │ │ │ ├── index.ts │ │ │ ├── parser.ts │ │ │ └── types.ts │ │ ├── util/ │ │ │ ├── comparator.ts │ │ │ ├── error.ts │ │ │ ├── index_tree.ts │ │ │ ├── llrb_tree.ts │ │ │ ├── logger.ts │ │ │ ├── number.ts │ │ │ ├── object.ts │ │ │ ├── observable.ts │ │ │ ├── resource.ts │ │ │ ├── splay_tree.ts │ │ │ ├── uuid.ts │ │ │ └── validator.ts │ │ └── yorkie.ts │ ├── test/ │ │ ├── bench/ │ │ │ ├── counter.bench.ts │ │ │ ├── document.bench.ts │ │ │ ├── editing-trace.json │ │ │ ├── splay_tree.bench.ts │ │ │ ├── text.bench.ts │ │ │ └── tree.bench.ts │ │ ├── helper/ │ │ │ ├── helper.ts │ │ │ └── vector_utils.ts │ │ ├── integration/ │ │ │ ├── array_test.ts │ │ │ ├── broadcast_test.ts │ │ │ ├── channel_polling_test.ts │ │ │ ├── channel_test.ts │ │ │ ├── client_test.ts │ │ │ ├── counter_test.ts │ │ │ ├── doc_presence_test.ts │ │ │ ├── document_limit_test.ts │ │ │ ├── document_polling_test.ts │ │ │ ├── document_schema_test.ts │ │ │ ├── document_test.ts │ │ │ ├── epoch_mismatch_test.ts │ │ │ ├── gc_test.ts │ │ │ ├── history_array_test.ts │ │ │ ├── history_text_test.ts │ │ │ ├── history_tree_split_test.ts │ │ │ ├── history_tree_test.ts │ │ │ ├── integration_helper.ts │ │ │ ├── object_test.ts │ │ │ ├── presence_test.ts │ │ │ ├── primitive_test.ts │ │ │ ├── revision_test.ts │ │ │ ├── snapshot_test.ts │ │ │ ├── text_test.ts │ │ │ ├── tree_concurrency_test.ts │ │ │ ├── tree_test.ts │ │ │ └── webhook_test.ts │ │ ├── unit/ │ │ │ ├── api/ │ │ │ │ └── converter_test.ts │ │ │ ├── channel/ │ │ │ │ └── channel_test.ts │ │ │ ├── document/ │ │ │ │ ├── crdt/ │ │ │ │ │ ├── counter_test.ts │ │ │ │ │ ├── element_rht_test.ts │ │ │ │ │ ├── primitive_test.ts │ │ │ │ │ ├── rht_test.ts │ │ │ │ │ ├── root_test.ts │ │ │ │ │ └── tree_test.ts │ │ │ │ ├── document_size_test.ts │ │ │ │ ├── document_test.ts │ │ │ │ ├── gc_test.ts │ │ │ │ ├── schema/ │ │ │ │ │ ├── content_expression_test.ts │ │ │ │ │ ├── tree_schema_integration_test.ts │ │ │ │ │ └── tree_validator_test.ts │ │ │ │ └── yson_test.ts │ │ │ ├── schema/ │ │ │ │ └── ruleset_validator_test.ts │ │ │ └── util/ │ │ │ ├── index_tree_test.ts │ │ │ ├── llrb_tree_test.ts │ │ │ ├── logger_test.ts │ │ │ └── splay_tree_test.ts │ │ ├── vitest.d.ts │ │ └── vitest.setup.ts │ ├── tsconfig.json │ ├── typedoc.json │ ├── vite.build.ts │ ├── vite.config.ts │ └── vitest.config.ts ├── pnpm-workspace.yaml └── scripts/ ├── setup.sh ├── tasks-archive.sh └── tasks-index.sh