Skip to content

Commit 801ee15

Browse files
committed
Merge branch 'develop'
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>
2 parents 248f8a2 + e377313 commit 801ee15

171 files changed

Lines changed: 9399 additions & 7839 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cursor/rules/project.mdc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
description: Fluidd project instructions
3+
globs:
4+
alwaysApply: true
5+
---
6+
@CLAUDE.md

.github/copilot-instructions.md

Lines changed: 1 addition & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1 @@
1-
# Fluidd AI Development Guide
2-
3-
Fluidd is a Vue 2.7 + TypeScript web interface for Klipper 3D printers that communicates with Moonraker via WebSocket.
4-
5-
## Architecture Overview
6-
7-
- **Vue 2.7 + Vuetify 2**: UI framework with Material Design components
8-
- **Vuex Store**: Modular state management mirroring Klipper/Moonraker domains (`printer/`, `files/`, `console/`, etc.)
9-
- **WebSocket Communication**: Real-time bidirectional communication with Moonraker API via `socketActions.ts`
10-
- **Component Structure**: Mixins-based architecture with `StateMixin` providing common printer state access
11-
12-
## Key Patterns
13-
14-
### State Management
15-
- Store modules in `src/store/` mirror Moonraker API endpoints (printer, files, macros, etc.)
16-
- Use `$typedState` and `$typedGetters` for type-safe store access
17-
- WebSocket actions in `api/socketActions.ts` follow pattern: `baseEmit(method, {dispatch, wait, params})`
18-
19-
### Component Architecture
20-
```typescript
21-
// Standard component pattern
22-
@Component({
23-
components: { /* ... */ }
24-
})
25-
export default class MyComponent extends Vue {
26-
// Component logic here
27-
}
28-
29-
// Widget component needing printer state
30-
@Component({
31-
components: { /* ... */ }
32-
})
33-
export default class PrinterWidget extends Mixins(StateMixin) {
34-
// Access printer state via StateMixin getters
35-
get printerState() { return this.printerState } // 'printing' | 'paused' | etc.
36-
}
37-
```
38-
39-
### WebSocket Integration
40-
- All printer communication through `SocketActions` (not direct HTTP)
41-
- Use `wait` parameter for loading states: `wait: Waits.onPrintStart`
42-
- Real-time updates handled via store mutations from socket events
43-
44-
## Development Workflow
45-
46-
### Essential Commands
47-
```bash
48-
npm run bootstrap # Install git hooks (after clone)
49-
npm run dev # Start development server
50-
npm run build # Production build
51-
npm run type-check # TypeScript validation
52-
npm run lint # ESLint with Vue/TS rules
53-
npm run test # Vitest unit tests
54-
```
55-
56-
### File Organization
57-
- `src/components/widgets/`: Dashboard cards organized by domain (status/, thermals/, macros/)
58-
- `src/views/`: Page-level components (Dashboard.vue, Console.vue, etc.)
59-
- `src/store/[domain]/`: Vuex modules matching Moonraker API structure
60-
- `src/api/`: WebSocket and HTTP client abstractions
61-
62-
### Router & Authentication
63-
- Routes in `src/router/` with authentication guards
64-
65-
### Icons & Theming
66-
- Material Design Icons via `src/globals.ts` constants
67-
- Vuetify theme system with custom color schemes
68-
- PWA support with service worker in `src/sw.ts`
69-
70-
## Integration Points
71-
72-
### Klipper/Moonraker Communication
73-
- All printer commands via `SocketActions` methods
74-
- Store updates from WebSocket events (not polling)
75-
- File operations through Moonraker's file API (`src/store/files/`)
76-
77-
### Component Communication
78-
- Parent-child: Props down, events up
79-
- Cross-component: Vuex store or event bus
80-
- Use `vue-property-decorator` for TypeScript components
81-
82-
## Testing Conventions
83-
- Unit tests in `tests/unit/` with Vitest + jsdom
84-
- Mock WebSocket connections for component testing
85-
- Test store actions/mutations independently from UI
86-
87-
## Code Style
88-
- Vue class-style components with `vue-property-decorator`
89-
- ESLint enforced: neostandard + Vue 2 rules and further rules defined in 'eslint.config.mjs'
90-
- .editorconfig rules must be enforced (2 spaces, LF line endings, UTF-8, trim trailing whitespace)
91-
- camelCase for variables/methods, PascalCase for components
92-
- Use `consola` for logging, not `console.log`
93-
- Type imports: `import type { ... }` for types only
94-
95-
## Common Gotchas
96-
- Vue 2.7 limitations: No Composition API in production builds
97-
- WebSocket reconnection handled automatically by `socketClient.ts`
98-
- File uploads use FormData with progress tracking in store
99-
- Dynamic imports for code splitting (see `vue-echarts-chunk.ts`)
100-
101-
## Communication Style
102-
- Be extremely concise in responses
103-
- Sacrifice grammar for brevity
104-
- Focus on essential info only
1+
@CLAUDE.md

.github/workflows/build.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ jobs:
3434
run: |
3535
npm run lint -- --no-fix
3636
37+
- name: Run type check
38+
run: |
39+
npm run type-check
40+
3741
- name: Run tests
3842
run: |
3943
npm run test:unit
@@ -84,6 +88,10 @@ jobs:
8488
name: fluidd-${{ github.sha }}.zip
8589
path: ./dist
8690

91+
- name: Update nginx configuration
92+
run: |
93+
sed -i "s/\${PORT} default_server;/${{ matrix.port }} default_server;/g" ./server/nginx/default.conf.template
94+
8795
- name: Prepare Docker image metadata
8896
id: docker_meta
8997
uses: docker/metadata-action@v5
@@ -119,7 +127,6 @@ jobs:
119127
platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x
120128
build-args: |
121129
BASE_IMAGE=${{ matrix.base-image }}
122-
PORT=${{ matrix.port }}
123130
push: true
124131
sbom: true
125132
provenance: true

.github/workflows/docs.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Deploy docs
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
paths:
8+
- 'docs/**'
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v6
15+
16+
- uses: actions/setup-python@v6
17+
with:
18+
python-version: '3.x'
19+
20+
- name: Install Zensical
21+
run: pip install "zensical==0.0.29"
22+
23+
- name: Build docs
24+
run: zensical build --clean
25+
working-directory: docs
26+
27+
- uses: actions/upload-pages-artifact@v4
28+
with:
29+
path: docs/site
30+
31+
deploy:
32+
needs: build
33+
runs-on: ubuntu-latest
34+
permissions:
35+
pages: write
36+
id-token: write
37+
environment:
38+
name: github-pages
39+
url: ${{ steps.deployment.outputs.page_url }}
40+
steps:
41+
- id: deployment
42+
uses: actions/deploy-pages@v5

.github/workflows/release.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ jobs:
2727
run: |
2828
npm run lint -- --no-fix
2929
30+
- name: Run type check
31+
run: |
32+
npm run type-check
33+
3034
- name: Run tests
3135
run: |
3236
npm run test:unit

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,7 @@ pnpm-debug.log*
3232
*.sw?
3333

3434
*.tsbuildinfo
35+
36+
# Zensical docs
37+
/site/
38+
/.venv/

CHANGELOG.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,25 @@
11
# Changelog
22

3-
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
3+
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4+
5+
## [1.36.2](https://github.com/fluidd-core/fluidd/compare/v1.36.1...v1.36.2) (2026-01-02)
6+
7+
8+
### Features
9+
10+
* show full timestamp tooltip on relative ([#1771](https://github.com/fluidd-core/fluidd/issues/1771)) ([7bc16ee](https://github.com/fluidd-core/fluidd/commit/7bc16ee7d5cd1abdbdc5247a74c0a577ec02b57f))
11+
12+
13+
### Bug Fixes
14+
15+
* **GcodePreview:** reset only null coordinates ([#1775](https://github.com/fluidd-core/fluidd/issues/1775)) ([8a6b082](https://github.com/fluidd-core/fluidd/commit/8a6b082b6e922b399b4cb8486ce79beadf717248))
16+
* **GcodePreview:** use approximate position ([#1776](https://github.com/fluidd-core/fluidd/issues/1776)) ([2781788](https://github.com/fluidd-core/fluidd/commit/2781788aa32494cd76044154cf89ace6b5e2db8e))
17+
* **HappyHare:** EMU Logo SVG fix for dark themes ([#1769](https://github.com/fluidd-core/fluidd/issues/1769)) ([2cc3420](https://github.com/fluidd-core/fluidd/commit/2cc34200072617445864db91efd8eb1a58d99fab))
18+
19+
20+
### Code Refactorings
21+
22+
* removed "void" dispatch ([13071c0](https://github.com/fluidd-core/fluidd/commit/13071c0f9ad1ebf15a90f3be7dfd5b49b80fa2cd))
423

524
## [1.36.2](https://github.com/fluidd-core/fluidd/compare/v1.36.1...v1.36.2) (2026-01-02)
625

0 commit comments

Comments
 (0)