Files
bambuddy/frontend
maziggy 5f473801f8 fix(file-manager): list-view actions clipped + preview modal slice button now respects Slicer API setting
Two small bugs reported in chat:

  1. List-view actions column was clipped off the right edge. The grid
     template fixed the actions column at 80px - a sliced 3MF row renders
     7 icon buttons (Print, Schedule, Slice, 3D Preview, Download, Rename,
     Delete) which need ~220px. The wrapper's overflow-hidden (there for
     rounded corners) then swallowed everything past column 80px.

     Switched the trailing column from 80px to min-content so it sizes to
     the widest action strip across all rows, and replaced overflow-hidden
     with overflow-x-auto so narrow viewports get a scrollbar instead of
     vanished icons. Rounded corners survive because the border-radius is
     on the wrapper itself, not on the overflow box.

  2. The 3MF preview modal's "Open in Slicer" button always launched the
     external slicer (BambuStudio / Orca) regardless of Settings -> Workflow
     -> Slicer -> Use Slicer API. With the API enabled, the file-row Cog
     already opens the in-app Bambuddy SliceModal - the preview-modal
     button should match.

     Added an optional onSliceWithBambuddy callback to ModelViewerModal.
     When set AND settings.use_slicer_api is true AND we're in library mode
     on a sliceable type (.3mf/.stl/.step/.stp), the header button becomes
     a Cog labelled "Slice" and calls the in-app handler. Otherwise it
     falls back to the existing ExternalLink "Open in Slicer" button.
     FileManagerPage wires the callback to close the viewer and open the
     SliceModal with the same file, gated on the same isSliceableFilename
     + library:upload permission checks the row's Cog already uses. No new
     i18n keys - reuses slice.action ("Slice") that the file row already
     ships in all 9 locales.
2026-05-23 13:21:44 +02:00
..
…
2026-05-19 13:30:16 +02:00
…

React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

React Compiler

The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.

Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...

      // Remove tseslint.configs.recommended and replace with this
      tseslint.configs.recommendedTypeChecked,
      // Alternatively, use this for stricter rules
      tseslint.configs.strictTypeChecked,
      // Optionally, add this for stylistic rules
      tseslint.configs.stylisticTypeChecked,

      // Other configs...
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])

You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:

// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default defineConfig([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...
      // Enable lint rules for React
      reactX.configs['recommended-typescript'],
      // Enable lint rules for React DOM
      reactDom.configs.recommended,
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])