rip-lang 3.17.3 → 3.17.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -4,7 +4,7 @@
4
4
  "_route/counter.rip": "# Counter Page\n\nexport Counter = component\n count := @app.data.count or 0\n step := 1\n\n ~> @app.data.count = count\n\n increment: -> count += step\n decrement: -> count -= step\n reset: -> count = 0\n\n render\n div\n .page-header\n h1.page-title \"Counter\"\n p.page-subtitle \"Reactive state — persists across reload\"\n\n .card\n .counter-display \"#{count}\"\n\n .counter-controls\n button.btn @click: @decrement, \"- #{step}\"\n button.btn @click: @reset, \"Reset\"\n button.btn.btn-primary @click: @increment, \"+ #{step}\"\n\n .card\n .card-title \"Step Size\"\n .btn-group\n button.btn @click: (-> step = 1), \"1\"\n button.btn @click: (-> step = 5), \"5\"\n button.btn @click: (-> step = 10), \"10\"\n button.btn @click: (-> step = 100), \"100\"\n",
5
5
  "_route/index.rip": "# Home Page\n\nexport Home = component\n\n render\n div\n .page-header\n h1.page-title \"Rip App Framework\"\n p.page-subtitle \"Zero-build reactive web apps\"\n\n .feature-grid\n .feature-card\n .feature-icon \"🗂\"\n .feature-name \"Component Store\"\n .feature-desc \"Component source files loaded on demand. Compiled in the browser.\"\n\n .feature-card\n .feature-icon \"🔀\"\n .feature-name \"File-Based Router\"\n .feature-desc \"URLs map to components. Dynamic segments and nested layouts.\"\n\n .feature-card\n .feature-icon \"⚡\"\n .feature-name \"Reactive Stash\"\n .feature-desc \"Deep state tree with path navigation. Every property tracked.\"\n\n .feature-card\n .feature-icon \"🎯\"\n .feature-name \"Fine-Grained Rendering\"\n .feature-desc \"No virtual DOM. Direct DOM updates via reactive effects.\"\n",
6
6
  "_route/todos.rip": "# Todos Page\n\nexport Todos = component\n newTodo := ''\n todos := @app.data.todos or []\n nextId := (@app.data.nextId or 1)\n\n ~> @app.data.todos = todos\n ~> @app.data.nextId = nextId\n\n remaining ~= todos.filter((t) -> not t.done).length\n\n addTodo: ->\n if newTodo.trim()\n todos = [...todos, { id: nextId, text: newTodo.trim(), done: false }]\n nextId++\n newTodo = ''\n\n deleteTodo: (id) ->\n todos = todos.filter (t) -> t.id isnt id\n\n clearAll: ->\n todos = []\n\n handleKey: (e) ->\n if e.key is 'Enter'\n @addTodo()\n\n render\n div\n .page-header\n h1.page-title \"Todos\"\n p.page-subtitle \"List rendering and state management\"\n\n .card\n .todo-input-row\n input.input type: \"text\", value <=> newTodo, placeholder: \"What needs to be done?\", @keydown: @handleKey\n button.btn.btn-primary @click: @addTodo, \"Add\"\n\n ul.todo-list\n for todo in todos\n li.todo-item\n span.todo-text todo.text\n button.todo-delete @click: (=> @deleteTodo(todo.id)), \"x\"\n\n .todo-stats\n span \"#{remaining} remaining\"\n button.btn.btn-sm @click: @clearAll, \"Clear all\"\n",
7
- "_route/card.rip": "# Card — reusable content card component\n\nexport Card = component\n title =! \"\"\n\n render\n div.card\n if title\n h3 \"#{title}\"\n @children\n",
7
+ "_route/card.rip": "# Card — reusable content card component\n\nexport Card = component\n title =! \"\"\n\n render\n div.card\n if title\n h3 \"#{title}\"\n slot\n",
8
8
  "_route/about.rip": "# About Page — uses the Card component for content sections\n\nexport About = component\n\n render\n div\n .page-header\n h1.page-title \"About Rip App\"\n p.page-subtitle \"Zero-build reactive web apps!\"\n\n Card title: \"The Idea\"\n p \"Traditional frameworks build and bundle on the server, then ship static artifacts. Rip App ships the 40KB compiler to the browser instead. Components arrive as .rip source files, are compiled on demand, and render with fine-grained reactivity. No build step, no bundler, no configuration files.\"\n\n Card title: \"Two Keywords\"\n p \"The component model adds exactly two keywords to the Rip language: component and render. Everything else — reactive state (:=), computed values (~=), effects (~>), methods, lifecycle hooks — is standard Rip syntax that already exists.\"\n\n Card title: \"Architecture\"\n p \"Components live as source files in the unified stash. The Router maps URLs to components using file-based conventions (like Next.js). When you navigate, the Renderer compiles the matching .rip file and mounts the resulting component. Each reactive binding creates a direct DOM effect — no virtual DOM diffing.\"\n\n Card title: \"Stack\"\n .btn-group\n .stat\n span \"Compiler \"\n span.stat-value \"40KB\"\n .stat\n span \"Framework \"\n span.stat-value \"~8KB\"\n .stat\n span \"Build step \"\n span.stat-value \"None\"\n .stat\n span \"Dependencies \"\n span.stat-value \"Zero\"\n\n Card title: \"Modules\"\n p \"The framework lives in one file: app.rip. It uses Rip's built-in reactive primitives directly — the same signals that power := and ~= in components. Deep reactive stash with path navigation. Component store for source management. File-based router mapping URLs to components. Renderer that compiles and mounts components with layout support.\"\n",
9
9
  "_route/_layout.rip": "# Root Layout (with error boundary and navigation indicator)\n\nexport Layout = component\n errorMsg := null\n\n ~> localStorage.setItem '__rip_route', @router.path\n\n onError: (err) ->\n errorMsg = err.message\n\n render\n .app-layout\n nav.app-nav\n .nav-inner\n a.nav-brand \"Rip App\"\n .nav-links\n a.('nav-link', @router.path is '/' and 'active') href: \"#/\", \"Home\"\n a.('nav-link', @router.path is '/counter' and 'active') href: \"#counter\", \"Counter\"\n a.('nav-link', @router.path is '/todos' and 'active') href: \"#todos\", \"Todos\"\n a.('nav-link', @router.path is '/about' and 'active') href: \"#about\", \"About\"\n if @router.navigating\n span.nav-loading \"Loading...\"\n main.app-main\n if errorMsg\n .error-banner\n p \"Something went wrong: #{errorMsg}\"\n button.btn @click: (-> errorMsg = null), \"Dismiss\"\n #content\n"
10
10
  },
Binary file
@@ -32,7 +32,8 @@ cursor --install-extension ./print-latest.vsix
32
32
 
33
33
  <h2>Versions</h2>
34
34
  <ul>
35
- <li><a href="./print-1.0.15.vsix"><code>print-1.0.15.vsix</code></a></li>
35
+ <li><a href="./print-1.0.16.vsix"><code>print-1.0.16.vsix</code></a></li>
36
+ <li><a href="./print-1.0.15.vsix"><code>print-1.0.15.vsix</code></a></li>
36
37
  <li><a href="./print-1.0.14.vsix"><code>print-1.0.14.vsix</code></a></li>
37
38
  <li><a href="./print-1.0.13.vsix"><code>print-1.0.13.vsix</code></a></li>
38
39
  </ul>
@@ -32,7 +32,8 @@ cursor --install-extension ./rip-latest.vsix
32
32
 
33
33
  <h2>Versions</h2>
34
34
  <ul>
35
- <li><a href="./vscode-rip-0.7.1.vsix"><code>vscode-rip-0.7.1.vsix</code></a></li>
35
+ <li><a href="./vscode-rip-0.8.0.vsix"><code>vscode-rip-0.8.0.vsix</code></a></li>
36
+ <li><a href="./vscode-rip-0.7.1.vsix"><code>vscode-rip-0.7.1.vsix</code></a></li>
36
37
  <li><a href="./vscode-rip-0.7.0.vsix"><code>vscode-rip-0.7.0.vsix</code></a></li>
37
38
  <li><a href="./vscode-rip-0.6.0.vsix"><code>vscode-rip-0.6.0.vsix</code></a></li>
38
39
  <li><a href="./rip-0.5.15.vsix"><code>rip-0.5.15.vsix</code></a></li>