gitextract_7ext8lh9/ ├── .changeset/ │ ├── README.md │ ├── config.json │ ├── large-snails-crash.md │ └── tame-snails-sneeze.md ├── .cursor/ │ ├── environment.json │ ├── install.sh │ └── rules/ │ └── project.mdc ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ └── feature-request.yml │ ├── agents/ │ │ └── ripple.agent.md │ ├── copilot-instructions.md │ └── workflows/ │ ├── ci.yml │ ├── copilot-setup-steps.yml │ ├── livecodes-post-comment.yml │ ├── livecodes-preview.yml │ ├── pkg.pr.new.yml │ ├── provenance.yml │ ├── release.yml │ ├── rulesync.yml │ ├── vsix-manual.yml │ └── vsix.yml ├── .gitignore ├── .livecodes/ │ └── playground.json ├── .prettierignore ├── .prettierrc ├── .rulesync/ │ └── rules/ │ └── project.md ├── .vscode/ │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── AGENTS.md ├── CLAUDE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── GEMINI.md ├── LICENSE ├── README.md ├── assets/ │ └── Ripple.tmbundle/ │ ├── README.md │ ├── Syntaxes/ │ │ └── ripple.tmLanguage │ └── info.plist ├── grammars/ │ ├── textmate/ │ │ ├── info.plist │ │ └── ripple.tmLanguage.json │ └── tree-sitter/ │ ├── .gitignore │ ├── Cargo.toml │ ├── LICENSE │ ├── README.md │ ├── binding.gyp │ ├── bindings/ │ │ └── node/ │ │ └── binding.cc │ ├── grammar.js │ ├── package.json │ ├── queries/ │ │ ├── brackets.scm │ │ ├── folds.scm │ │ ├── highlights.scm │ │ ├── indents.nvim.scm │ │ ├── indents.scm │ │ ├── indents.zed.scm │ │ ├── injections.scm │ │ ├── locals.scm │ │ ├── outline.scm │ │ └── textobjects.scm │ ├── src/ │ │ ├── grammar.json │ │ ├── node-types.json │ │ ├── parser.c │ │ ├── scanner.c │ │ └── tree_sitter/ │ │ ├── alloc.h │ │ ├── array.h │ │ └── parser.h │ ├── test/ │ │ └── corpus/ │ │ ├── components.txt │ │ ├── control-flow.txt │ │ ├── javascript.txt │ │ ├── jsx.txt │ │ ├── main.txt │ │ └── reactivity.txt │ └── tree-sitter.json ├── package.json ├── packages/ │ ├── adapter/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.js │ │ │ └── rpc.js │ │ ├── tests/ │ │ │ ├── index.test.js │ │ │ └── types.test.js │ │ ├── tsconfig.json │ │ └── types/ │ │ ├── index.d.ts │ │ └── rpc.d.ts │ ├── adapter-bun/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.js │ │ ├── tests/ │ │ │ ├── serve.test.js │ │ │ └── types.test.js │ │ ├── tsconfig.json │ │ └── types/ │ │ └── index.d.ts │ ├── adapter-node/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.js │ │ ├── tests/ │ │ │ ├── serve.test.js │ │ │ └── types.test.js │ │ ├── tsconfig.json │ │ └── types/ │ │ └── index.d.ts │ ├── adapter-vercel/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── adapt.js │ │ │ ├── bin/ │ │ │ │ └── adapt.js │ │ │ └── index.js │ │ ├── tests/ │ │ │ ├── adapt.test.js │ │ │ └── types.test.js │ │ ├── tsconfig.json │ │ └── types/ │ │ └── index.d.ts │ ├── cli/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── commands/ │ │ │ │ └── create.js │ │ │ ├── constants.js │ │ │ ├── index.js │ │ │ └── lib/ │ │ │ ├── is-folder-empty.js │ │ │ ├── package-manager.js │ │ │ ├── project-creator.js │ │ │ ├── prompts.js │ │ │ ├── templates.js │ │ │ └── validation.js │ │ ├── tests/ │ │ │ ├── integration/ │ │ │ │ ├── cli.test.js │ │ │ │ └── project-creator.test.js │ │ │ └── unit/ │ │ │ ├── prompts.test.js │ │ │ ├── templates.test.js │ │ │ └── validation.test.js │ │ ├── tsconfig.json │ │ ├── tsdown.config.js │ │ └── vitest.config.js │ ├── compat-react/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.js │ │ ├── tests/ │ │ │ ├── client.d.ts │ │ │ ├── index.test.ripple │ │ │ └── setup.js │ │ ├── tsconfig.json │ │ └── types/ │ │ └── index.d.ts │ ├── create-ripple/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.js │ │ ├── tsconfig.json │ │ └── tsdown.config.js │ ├── eslint-parser/ │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── loader.ts │ │ ├── tsconfig.json │ │ └── tsdown.config.js │ ├── eslint-plugin/ │ │ ├── .npmignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── rules/ │ │ │ ├── control-flow-jsx.ts │ │ │ ├── no-introspect-in-modules.ts │ │ │ ├── no-module-scope-track.ts │ │ │ ├── no-return-in-component.ts │ │ │ ├── prefer-oninput.ts │ │ │ ├── unbox-tracked-values.ts │ │ │ └── valid-for-of-key.ts │ │ ├── tests/ │ │ │ └── rules/ │ │ │ ├── control-flow-jsx.test.ts │ │ │ ├── no-introspect-in-modules.test.ts │ │ │ ├── no-module-scope-track.test.ts │ │ │ ├── no-return-in-component.test.ts │ │ │ ├── prefer-oninput.test.ts │ │ │ ├── unbox-tracked-values.test.ts │ │ │ └── valid-for-of-key.test.ts │ │ ├── tsconfig.json │ │ ├── tsdown.config.js │ │ └── vitest.config.ts │ ├── intellij-plugin/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── package.json │ │ ├── settings.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── ripple_ts/ │ │ │ └── intellij_plugin/ │ │ │ ├── RippleCommenter.kt │ │ │ ├── RippleFileType.kt │ │ │ ├── RippleIcons.kt │ │ │ ├── RippleLanguage.kt │ │ │ ├── RippleLanguageServer.kt │ │ │ ├── RippleLspServerDescriptor.kt │ │ │ ├── RippleLspServerSupportProvider.kt │ │ │ └── RippleTextMateBundleProvider.kt │ │ └── resources/ │ │ ├── META-INF/ │ │ │ ├── plugin.xml │ │ │ └── ripple-lsp.xml │ │ └── lsp-version.txt │ ├── language-server/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bin/ │ │ │ └── language-server.js │ │ ├── index.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── autoInsertPlugin.js │ │ │ ├── compileErrorDiagnosticPlugin.js │ │ │ ├── completionPlugin.js │ │ │ ├── definitionPlugin.js │ │ │ ├── documentHighlightPlugin.js │ │ │ ├── hoverPlugin.js │ │ │ ├── server.js │ │ │ ├── typescriptDiagnosticPlugin.js │ │ │ ├── typescriptService.js │ │ │ └── utils.js │ │ └── tsconfig.json │ ├── nvim-plugin/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── lua/ │ │ │ └── ripple/ │ │ │ ├── init.lua │ │ │ ├── lsp.lua │ │ │ └── treesitter.lua │ │ ├── package.json │ │ ├── plugin/ │ │ │ └── ripple.lua │ │ └── queries/ │ │ └── ripple/ │ │ ├── brackets.scm │ │ ├── folds.scm │ │ ├── highlights.scm │ │ ├── indents.scm │ │ ├── injections.scm │ │ ├── locals.scm │ │ ├── outline.scm │ │ └── textobjects.scm │ ├── prettier-plugin/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.js │ │ │ └── index.test.js │ │ ├── tsconfig.json │ │ └── vitest-extensions.d.ts │ ├── ripple/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── shims/ │ │ │ └── rollup-estree-types.d.ts │ │ ├── src/ │ │ │ ├── compiler/ │ │ │ │ ├── comment-utils.js │ │ │ │ ├── errors.js │ │ │ │ ├── identifier-utils.js │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── phases/ │ │ │ │ │ ├── 1-parse/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── style.js │ │ │ │ │ ├── 2-analyze/ │ │ │ │ │ │ ├── css-analyze.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── prune.js │ │ │ │ │ │ └── validation.js │ │ │ │ │ └── 3-transform/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── segments.js │ │ │ │ │ ├── server/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── stylesheet.js │ │ │ │ ├── scope.js │ │ │ │ ├── source-map-utils.js │ │ │ │ ├── types/ │ │ │ │ │ ├── acorn.d.ts │ │ │ │ │ ├── estree-jsx.d.ts │ │ │ │ │ ├── estree.d.ts │ │ │ │ │ ├── import.d.ts │ │ │ │ │ ├── index.d.ts │ │ │ │ │ ├── parse.d.ts │ │ │ │ │ └── rpc.d.ts │ │ │ │ └── utils.js │ │ │ ├── constants.js │ │ │ ├── helpers.d.ts │ │ │ ├── html-tree-validation.js │ │ │ ├── jsx-runtime.d.ts │ │ │ ├── jsx-runtime.js │ │ │ ├── runtime/ │ │ │ │ ├── array.js │ │ │ │ ├── create-subscriber.js │ │ │ │ ├── date.js │ │ │ │ ├── index-client.js │ │ │ │ ├── index-server.js │ │ │ │ ├── internal/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ ├── bindings.js │ │ │ │ │ │ ├── blocks.js │ │ │ │ │ │ ├── compat.js │ │ │ │ │ │ ├── composite.js │ │ │ │ │ │ ├── constants.js │ │ │ │ │ │ ├── context.js │ │ │ │ │ │ ├── css.js │ │ │ │ │ │ ├── events.js │ │ │ │ │ │ ├── for.js │ │ │ │ │ │ ├── head.js │ │ │ │ │ │ ├── hmr.js │ │ │ │ │ │ ├── html.js │ │ │ │ │ │ ├── hydration.js │ │ │ │ │ │ ├── if.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── operations.js │ │ │ │ │ │ ├── portal.js │ │ │ │ │ │ ├── render.js │ │ │ │ │ │ ├── rpc.js │ │ │ │ │ │ ├── runtime.js │ │ │ │ │ │ ├── script.js │ │ │ │ │ │ ├── switch.js │ │ │ │ │ │ ├── template.js │ │ │ │ │ │ ├── try.js │ │ │ │ │ │ ├── types.d.ts │ │ │ │ │ │ └── utils.js │ │ │ │ │ └── server/ │ │ │ │ │ ├── context.js │ │ │ │ │ ├── css-registry.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── rpc.js │ │ │ │ │ └── types.d.ts │ │ │ │ ├── map.js │ │ │ │ ├── media-query.js │ │ │ │ ├── object.js │ │ │ │ ├── proxy.js │ │ │ │ ├── reactive-value.js │ │ │ │ ├── set.js │ │ │ │ ├── url-search-params.js │ │ │ │ └── url.js │ │ │ ├── server/ │ │ │ │ └── index.js │ │ │ └── utils/ │ │ │ ├── ast.js │ │ │ ├── builders.js │ │ │ ├── escaping.js │ │ │ ├── events.js │ │ │ ├── hashing.js │ │ │ ├── normalize_css_property_name.js │ │ │ ├── patterns.js │ │ │ └── sanitize_template_string.js │ │ ├── tests/ │ │ │ ├── client/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ ├── computed-properties.test.ripple.snap │ │ │ │ │ ├── for.test.ripple.snap │ │ │ │ │ ├── html.test.ripple.snap │ │ │ │ │ └── tracked-expression.test.ripple.snap │ │ │ │ ├── _etc.test.ripple │ │ │ │ ├── array/ │ │ │ │ │ ├── array.copy-within.test.ripple │ │ │ │ │ ├── array.derived.test.ripple │ │ │ │ │ ├── array.iteration.test.ripple │ │ │ │ │ ├── array.mutations.test.ripple │ │ │ │ │ ├── array.static.test.ripple │ │ │ │ │ └── array.to-methods.test.ripple │ │ │ │ ├── async-suspend.test.ripple │ │ │ │ ├── basic/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── basic.attributes.test.ripple.snap │ │ │ │ │ │ ├── basic.rendering.test.ripple.snap │ │ │ │ │ │ └── basic.text.test.ripple.snap │ │ │ │ │ ├── basic.attributes.test.ripple │ │ │ │ │ ├── basic.collections.test.ripple │ │ │ │ │ ├── basic.components.test.ripple │ │ │ │ │ ├── basic.errors.test.ripple │ │ │ │ │ ├── basic.events.test.ripple │ │ │ │ │ ├── basic.get-set.test.ripple │ │ │ │ │ ├── basic.hmr.test.ripple │ │ │ │ │ ├── basic.reactivity.test.ripple │ │ │ │ │ ├── basic.rendering.test.ripple │ │ │ │ │ ├── basic.styling.test.ripple │ │ │ │ │ └── basic.utilities.test.ripple │ │ │ │ ├── boundaries.test.ripple │ │ │ │ ├── compiler/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── compiler.assignments.test.ripple.snap │ │ │ │ │ │ └── compiler.typescript.test.ripple.snap │ │ │ │ │ ├── compiler.assignments.test.ripple │ │ │ │ │ ├── compiler.attributes.test.ripple │ │ │ │ │ ├── compiler.basic.test.ripple │ │ │ │ │ ├── compiler.regex.test.ripple │ │ │ │ │ ├── compiler.tracked-access.test.ripple │ │ │ │ │ ├── compiler.try-in-function.test.ripple │ │ │ │ │ └── compiler.typescript.test.ripple │ │ │ │ ├── composite/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ └── composite.render.test.ripple.snap │ │ │ │ │ ├── composite.dynamic-components.test.ripple │ │ │ │ │ ├── composite.generics.test.ripple │ │ │ │ │ ├── composite.props.test.ripple │ │ │ │ │ ├── composite.reactivity.test.ripple │ │ │ │ │ └── composite.render.test.ripple │ │ │ │ ├── computed-properties.test.ripple │ │ │ │ ├── context.test.ripple │ │ │ │ ├── css/ │ │ │ │ │ ├── global-additional-cases.test.ripple │ │ │ │ │ ├── global-advanced-selectors.test.ripple │ │ │ │ │ ├── global-at-rules.test.ripple │ │ │ │ │ ├── global-basic.test.ripple │ │ │ │ │ ├── global-classes-ids.test.ripple │ │ │ │ │ ├── global-combinators.test.ripple │ │ │ │ │ ├── global-complex-nesting.test.ripple │ │ │ │ │ ├── global-edge-cases.test.ripple │ │ │ │ │ ├── global-keyframes.test.ripple │ │ │ │ │ ├── global-nested.test.ripple │ │ │ │ │ ├── global-pseudo.test.ripple │ │ │ │ │ ├── global-scoping.test.ripple │ │ │ │ │ └── style-identifier.test.ripple │ │ │ │ ├── date.test.ripple │ │ │ │ ├── dynamic-elements.test.ripple │ │ │ │ ├── events.test.ripple │ │ │ │ ├── for.test.ripple │ │ │ │ ├── function-overload-import.ripple │ │ │ │ ├── function-overload.test.ripple │ │ │ │ ├── head.test.ripple │ │ │ │ ├── html.test.ripple │ │ │ │ ├── input-value.test.ripple │ │ │ │ ├── map.test.ripple │ │ │ │ ├── media-query.test.ripple │ │ │ │ ├── object.test.ripple │ │ │ │ ├── portal.test.ripple │ │ │ │ ├── ref.test.ripple │ │ │ │ ├── return.test.ripple │ │ │ │ ├── set.test.ripple │ │ │ │ ├── svg.test.ripple │ │ │ │ ├── switch.test.ripple │ │ │ │ ├── tracked-expression.test.ripple │ │ │ │ ├── try.test.ripple │ │ │ │ ├── tsconfig.json │ │ │ │ ├── typescript-generics.test.ripple │ │ │ │ ├── url/ │ │ │ │ │ ├── url.derived.test.ripple │ │ │ │ │ ├── url.parsing.test.ripple │ │ │ │ │ ├── url.partial-removal.test.ripple │ │ │ │ │ ├── url.reactivity.test.ripple │ │ │ │ │ └── url.serialization.test.ripple │ │ │ │ └── url-search-params/ │ │ │ │ ├── url-search-params.derived.test.ripple │ │ │ │ ├── url-search-params.initialization.test.ripple │ │ │ │ ├── url-search-params.iteration.test.ripple │ │ │ │ ├── url-search-params.mutation.test.ripple │ │ │ │ ├── url-search-params.retrieval.test.ripple │ │ │ │ ├── url-search-params.serialization.test.ripple │ │ │ │ └── url-search-params.tracked-url.test.ripple │ │ │ ├── client.d.ts │ │ │ ├── common.d.ts │ │ │ ├── hydration/ │ │ │ │ ├── basic.test.js │ │ │ │ ├── build-components.js │ │ │ │ ├── compiled/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ ├── basic.js │ │ │ │ │ │ ├── composite.js │ │ │ │ │ │ ├── events.js │ │ │ │ │ │ ├── for.js │ │ │ │ │ │ ├── head.js │ │ │ │ │ │ ├── hmr.js │ │ │ │ │ │ ├── html-in-template.js │ │ │ │ │ │ ├── html.js │ │ │ │ │ │ ├── if-children.js │ │ │ │ │ │ ├── if.js │ │ │ │ │ │ ├── mixed-control-flow.js │ │ │ │ │ │ ├── nested-control-flow.js │ │ │ │ │ │ ├── portal.js │ │ │ │ │ │ ├── reactivity.js │ │ │ │ │ │ ├── return.js │ │ │ │ │ │ ├── switch.js │ │ │ │ │ │ └── try.js │ │ │ │ │ └── server/ │ │ │ │ │ ├── basic.js │ │ │ │ │ ├── composite.js │ │ │ │ │ ├── events.js │ │ │ │ │ ├── for.js │ │ │ │ │ ├── head.js │ │ │ │ │ ├── hmr.js │ │ │ │ │ ├── html-in-template.js │ │ │ │ │ ├── html.js │ │ │ │ │ ├── if-children.js │ │ │ │ │ ├── if.js │ │ │ │ │ ├── mixed-control-flow.js │ │ │ │ │ ├── nested-control-flow.js │ │ │ │ │ ├── portal.js │ │ │ │ │ ├── reactivity.js │ │ │ │ │ ├── return.js │ │ │ │ │ ├── switch.js │ │ │ │ │ └── try.js │ │ │ │ ├── components/ │ │ │ │ │ ├── basic.ripple │ │ │ │ │ ├── composite.ripple │ │ │ │ │ ├── events.ripple │ │ │ │ │ ├── for.ripple │ │ │ │ │ ├── head.ripple │ │ │ │ │ ├── hmr.ripple │ │ │ │ │ ├── html-in-template.ripple │ │ │ │ │ ├── html.ripple │ │ │ │ │ ├── if-children.ripple │ │ │ │ │ ├── if.ripple │ │ │ │ │ ├── mixed-control-flow.ripple │ │ │ │ │ ├── nested-control-flow.ripple │ │ │ │ │ ├── portal.ripple │ │ │ │ │ ├── reactivity.ripple │ │ │ │ │ ├── return.ripple │ │ │ │ │ ├── switch.ripple │ │ │ │ │ └── try.ripple │ │ │ │ ├── composite.test.js │ │ │ │ ├── events.test.js │ │ │ │ ├── for.test.js │ │ │ │ ├── head.test.js │ │ │ │ ├── hmr.test.js │ │ │ │ ├── html-in-template.test.js │ │ │ │ ├── html.test.js │ │ │ │ ├── if-children.test.js │ │ │ │ ├── if.test.js │ │ │ │ ├── mixed-control-flow.test.js │ │ │ │ ├── nested-control-flow.test.js │ │ │ │ ├── portal.test.js │ │ │ │ ├── reactivity.test.js │ │ │ │ ├── return.test.js │ │ │ │ ├── switch.test.js │ │ │ │ ├── try.test.js │ │ │ │ └── tsconfig.json │ │ │ ├── hydration.d.ts │ │ │ ├── server/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── compiler.test.ripple.snap │ │ │ │ ├── await.test.ripple │ │ │ │ ├── basic.attributes.test.ripple │ │ │ │ ├── basic.components.test.ripple │ │ │ │ ├── basic.test.ripple │ │ │ │ ├── compiler.test.ripple │ │ │ │ ├── composite.props.test.ripple │ │ │ │ ├── composite.test.ripple │ │ │ │ ├── context.test.ripple │ │ │ │ ├── dynamic-elements.test.ripple │ │ │ │ ├── for.test.ripple │ │ │ │ ├── head.test.ripple │ │ │ │ ├── html-nesting-validation.test.ripple │ │ │ │ ├── if.test.ripple │ │ │ │ ├── return.test.ripple │ │ │ │ ├── streaming-ssr.test.ripple │ │ │ │ ├── style-identifier.test.ripple │ │ │ │ ├── switch.test.ripple │ │ │ │ ├── try.test.ripple │ │ │ │ └── tsconfig.json │ │ │ ├── server.d.ts │ │ │ ├── setup-client.js │ │ │ ├── setup-hydration.js │ │ │ ├── setup-server.js │ │ │ └── utils/ │ │ │ ├── escaping.test.js │ │ │ ├── events.test.js │ │ │ ├── normalize_css_property_name.test.js │ │ │ ├── patterns.test.js │ │ │ └── sanitize_template_string.test.js │ │ ├── tsconfig.json │ │ └── types/ │ │ ├── index.d.ts │ │ └── server.d.ts │ ├── rollup-plugin/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── index.js │ │ ├── package.json │ │ └── tsconfig.json │ ├── sublime-text-plugin/ │ │ ├── .gitignore │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── build.js │ │ └── src/ │ │ ├── .python-version │ │ ├── Ripple.sublime-settings │ │ ├── dependencies.json │ │ ├── language-server/ │ │ │ └── package.json │ │ └── plugin.py │ ├── tree-sitter/ │ │ └── build/ │ │ ├── Makefile │ │ ├── Release/ │ │ │ ├── .deps/ │ │ │ │ └── Release/ │ │ │ │ ├── obj.target/ │ │ │ │ │ └── tree_sitter_ripple_binding/ │ │ │ │ │ ├── bindings/ │ │ │ │ │ │ └── node/ │ │ │ │ │ │ └── binding.o.d │ │ │ │ │ └── src/ │ │ │ │ │ ├── parser.o.d │ │ │ │ │ └── scanner.o.d │ │ │ │ └── tree_sitter_ripple_binding.node.d │ │ │ ├── obj.target/ │ │ │ │ └── tree_sitter_ripple_binding/ │ │ │ │ ├── bindings/ │ │ │ │ │ └── node/ │ │ │ │ │ └── binding.o │ │ │ │ └── src/ │ │ │ │ ├── parser.o │ │ │ │ └── scanner.o │ │ │ └── tree_sitter_ripple_binding.node │ │ ├── binding.Makefile │ │ ├── config.gypi │ │ ├── gyp-mac-tool │ │ └── tree_sitter_ripple_binding.target.mk │ ├── typescript-plugin/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.js │ │ │ ├── language.js │ │ │ └── utils.js │ │ ├── tsconfig.json │ │ └── tsdown.config.js │ ├── vite-plugin/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── package.json │ │ ├── src/ │ │ │ ├── bin/ │ │ │ │ └── preview.js │ │ │ ├── constants.js │ │ │ ├── index.js │ │ │ ├── load-config.js │ │ │ ├── routes.js │ │ │ └── server/ │ │ │ ├── middleware.js │ │ │ ├── production.js │ │ │ ├── render-route.js │ │ │ ├── router.js │ │ │ ├── server-route.js │ │ │ └── virtual-entry.js │ │ ├── tsconfig.json │ │ └── types/ │ │ ├── index.d.ts │ │ └── production.d.ts │ ├── vscode-plugin/ │ │ ├── .gitignore │ │ ├── .vscodeignore │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── language-configuration.json │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── repack-vsix.js │ │ ├── src/ │ │ │ ├── extension.js │ │ │ └── server.js │ │ ├── tsconfig.json │ │ └── tsdown.config.js │ └── zed-plugin/ │ ├── .gitignore │ ├── Cargo.toml │ ├── DEVELOPMENT.md │ ├── LICENSE │ ├── README.md │ ├── extension.toml │ ├── languages/ │ │ └── ripple/ │ │ ├── brackets.scm │ │ ├── config.toml │ │ ├── folds.scm │ │ ├── highlights.scm │ │ ├── indents.scm │ │ ├── injections.scm │ │ ├── locals.scm │ │ ├── outline.scm │ │ └── textobjects.scm │ ├── package.json │ └── src/ │ └── lib.rs ├── playground/ │ ├── CHANGELOG.md │ ├── debug-mode.js │ ├── demo.css │ ├── eslint.config.js │ ├── index.html │ ├── package.json │ ├── ssr-dev.js │ ├── tsconfig.json │ └── vite.config.js ├── pnpm-workspace.yaml ├── rulesync.jsonc ├── scripts/ │ ├── collect-external-deps.js │ ├── copy-external-deps.js │ ├── copy-tree-sitter-queries.js │ ├── regenerate-textmate.js │ ├── remove.js │ └── transform-package.js ├── templates/ │ └── basic/ │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── README.md │ ├── eslint.config.js │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── App.ripple │ │ └── index.ts │ ├── tsconfig.json │ └── vite.config.js ├── tree-sitter ├── vitest.config.js ├── website/ │ ├── .vitepress/ │ │ ├── components/ │ │ │ ├── Code.vue │ │ │ ├── LiveCodes.vue │ │ │ ├── Playground.vue │ │ │ └── PlaygroundProps.ts │ │ ├── config.js │ │ └── theme/ │ │ ├── index.js │ │ └── styles.css │ ├── docs/ │ │ ├── best-practices.md │ │ ├── comparison.md │ │ ├── examples.ts │ │ ├── guide/ │ │ │ ├── application.md │ │ │ ├── bindings.md │ │ │ ├── components.md │ │ │ ├── control-flow.md │ │ │ ├── dom-refs.md │ │ │ ├── events.md │ │ │ ├── head-management.md │ │ │ ├── reactivity.md │ │ │ ├── state-management.md │ │ │ ├── styling.md │ │ │ └── syntax.md │ │ ├── introduction.md │ │ ├── libraries.md │ │ ├── quick-start.md │ │ └── troubleshooting.md │ ├── package.json │ ├── playground.md │ ├── public/ │ │ ├── 404.html │ │ ├── index.html │ │ ├── llms.txt │ │ ├── robots.txt │ │ └── sitemap.xml │ └── vercel.json └── website-new/ ├── CHANGELOG.md ├── api/ │ └── handler.js ├── docs/ │ ├── best-practices.md │ ├── comparison.md │ ├── examples.ts │ ├── guide/ │ │ ├── application.md │ │ ├── bindings.md │ │ ├── components.md │ │ ├── control-flow.md │ │ ├── dom-refs.md │ │ ├── events.md │ │ ├── head-management.md │ │ ├── reactivity.md │ │ ├── state-management.md │ │ ├── styling.md │ │ └── syntax.md │ ├── introduction.md │ ├── libraries.md │ ├── quick-start.md │ └── troubleshooting.md ├── index.html ├── package.json ├── playground.md ├── public/ │ ├── 404.html │ ├── llms.txt │ ├── robots.txt │ └── sitemap.xml ├── ripple.config.ts ├── src/ │ ├── components/ │ │ ├── actions.ripple │ │ ├── content.ripple │ │ ├── doc-badge.ripple │ │ ├── doc-callout.ripple │ │ ├── doc-code-block.ripple │ │ ├── doc-heading.ripple │ │ ├── docs-footer.ripple │ │ ├── docs-header.ripple │ │ ├── docs-layout.ripple │ │ ├── editor.ripple │ │ ├── header.ripple │ │ ├── layout.ripple │ │ └── sidebar.ripple │ ├── lib/ │ │ └── markdown.js │ ├── middlewares.ts │ ├── pages/ │ │ ├── 404.ripple │ │ ├── docs/ │ │ │ ├── best-practices.ripple │ │ │ ├── comparison.ripple │ │ │ ├── guide/ │ │ │ │ ├── application.ripple │ │ │ │ ├── bindings.ripple │ │ │ │ ├── components.ripple │ │ │ │ ├── control-flow.ripple │ │ │ │ ├── dom-refs.ripple │ │ │ │ ├── events.ripple │ │ │ │ ├── head-management.ripple │ │ │ │ ├── reactivity.ripple │ │ │ │ ├── state-management.ripple │ │ │ │ ├── styling.ripple │ │ │ │ └── syntax.ripple │ │ │ ├── introduction.ripple │ │ │ ├── libraries.ripple │ │ │ ├── quick-start.ripple │ │ │ └── troubleshooting.ripple │ │ └── index.ripple │ └── routes.ts ├── tsconfig.json ├── vercel.json └── vite.config.ts