mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-15 02:54:06 +02:00
## Move editor under `frontend/editor/`
Pure restructure: `frontend/` becomes the workspace, `frontend/editor/`
holds
the PDF editor. 1775 file renames + 40 wiring edits. No logic changes.
### Why
`frontend/` is currently the editor — its `src/`, `public/`,
`src-tauri/`,
config files all sit at the root. Promoting `frontend/` to a
workspace and putting the editor in a sibling folder leaves room for
future
apps to drop in alongside it, sharing one `package.json` /
`node_modules` /
lint config / Storybook.
### What moves
frontend/
├── editor/ ← NEW: everything editor-specific
│ ├── src/ ← was frontend/src/
│ ├── public/ ← was frontend/public/
│ ├── src-tauri/ ← was frontend/src-tauri/
│ ├── index.html, vite.config.ts, vitest.config.ts, playwright.config.ts
│ ├── tsconfig*.json, tailwind.config.js, postcss.config.js
│ ├── scripts/
│ ├── .env, .env.desktop, .env.saas
│ └── DeveloperGuide.md
├── package.json, package-lock.json, node_modules/ ← workspace install
├── eslint.config.mjs, .prettierrc, .prettierignore ← shared tooling
├── .gitignore
└── README.md
### Wiring edits (40 files)
- `.taskfiles/frontend.yml`, `desktop.yml`, `e2e.yml`
- `build.gradle`, `app/core/build.gradle`
- `eslint.config.mjs`, `frontend/package.json`, `.gitignore`,
`.prettierignore`
- `docker/frontend/Dockerfile`
- 8 `.github/workflows/*.yml`, plus `.github/dependabot.yml`,
`.github/config/.files.yaml`, `.github/labeler-config-srvaroa.yml`
- `scripts/translations/**`
- Docs: `AGENTS.md`, `CLAUDE.md`, `ADDING_TOOLS.md`,
`DeveloperGuide.md`,
`WINDOWS_SIGNING.md`, `devGuide/HowToAddNewLanguage.md`,
`frontend/README.md`,
`frontend/editor/DeveloperGuide.md`
Plus 3 renamed + edited: `editor/vite.config.ts` (env path +
node_modules
walk-up), `editor/scripts/setup-env.mts` (renamed from `.ts` for
`import.meta.url`), `editor/scripts/build-provisioner.mjs` (resolve
src-tauri
relative to script).
### Verification
| Check | Result |
|---|---|
| `task frontend:typecheck:all` (6 variants) | exit 0 |
| `task frontend:lint` (eslint + dpdm) | exit 0 |
| `task frontend:format:check` | exit 0 |
| `task frontend:test` | 657 tests pass, 50 files |
| `task frontend:build:{core,proprietary,saas,desktop,prototypes}` | all
green |
| `task desktop:build` | full Tauri pipeline →
`Stirling-PDF_2.11.0_x64_en-US.msi` |
| `playwright test --list --project=stubbed` | 172 tests discovered |
`task desktop:build` exercises the heaviest path — Rust + WiX + MSI
bundle
against the moved `editor/src-tauri/`. If anything in the restructure
was
wrong it wouldn't have built.
### Test plan
- [ ] `frontend-validation.yml` green
- [ ] `e2e-stubbed.yml` green
- [ ] `tauri-build.yml` green on at least one platform
- [ ] `check_toml.yml` runs on a translation-touching PR
---------
Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
363 lines
8.2 KiB
CSS
363 lines
8.2 KiB
CSS
*, ::before, ::after {
|
|
--tw-border-spacing-x: 0;
|
|
--tw-border-spacing-y: 0;
|
|
--tw-translate-x: 0;
|
|
--tw-translate-y: 0;
|
|
--tw-rotate: 0;
|
|
--tw-skew-x: 0;
|
|
--tw-skew-y: 0;
|
|
--tw-scale-x: 1;
|
|
--tw-scale-y: 1;
|
|
--tw-pan-x: ;
|
|
--tw-pan-y: ;
|
|
--tw-pinch-zoom: ;
|
|
--tw-scroll-snap-strictness: proximity;
|
|
--tw-gradient-from-position: ;
|
|
--tw-gradient-via-position: ;
|
|
--tw-gradient-to-position: ;
|
|
--tw-ordinal: ;
|
|
--tw-slashed-zero: ;
|
|
--tw-numeric-figure: ;
|
|
--tw-numeric-spacing: ;
|
|
--tw-numeric-fraction: ;
|
|
--tw-ring-inset: ;
|
|
--tw-ring-offset-width: 0px;
|
|
--tw-ring-offset-color: #fff;
|
|
--tw-ring-color: rgb(59 130 246 / 0.5);
|
|
--tw-ring-offset-shadow: 0 0 #0000;
|
|
--tw-ring-shadow: 0 0 #0000;
|
|
--tw-shadow: 0 0 #0000;
|
|
--tw-shadow-colored: 0 0 #0000;
|
|
--tw-blur: ;
|
|
--tw-brightness: ;
|
|
--tw-contrast: ;
|
|
--tw-grayscale: ;
|
|
--tw-hue-rotate: ;
|
|
--tw-invert: ;
|
|
--tw-saturate: ;
|
|
--tw-sepia: ;
|
|
--tw-drop-shadow: ;
|
|
--tw-backdrop-blur: ;
|
|
--tw-backdrop-brightness: ;
|
|
--tw-backdrop-contrast: ;
|
|
--tw-backdrop-grayscale: ;
|
|
--tw-backdrop-hue-rotate: ;
|
|
--tw-backdrop-invert: ;
|
|
--tw-backdrop-opacity: ;
|
|
--tw-backdrop-saturate: ;
|
|
--tw-backdrop-sepia: ;
|
|
--tw-contain-size: ;
|
|
--tw-contain-layout: ;
|
|
--tw-contain-paint: ;
|
|
--tw-contain-style:
|
|
}
|
|
::backdrop {
|
|
--tw-border-spacing-x: 0;
|
|
--tw-border-spacing-y: 0;
|
|
--tw-translate-x: 0;
|
|
--tw-translate-y: 0;
|
|
--tw-rotate: 0;
|
|
--tw-skew-x: 0;
|
|
--tw-skew-y: 0;
|
|
--tw-scale-x: 1;
|
|
--tw-scale-y: 1;
|
|
--tw-pan-x: ;
|
|
--tw-pan-y: ;
|
|
--tw-pinch-zoom: ;
|
|
--tw-scroll-snap-strictness: proximity;
|
|
--tw-gradient-from-position: ;
|
|
--tw-gradient-via-position: ;
|
|
--tw-gradient-to-position: ;
|
|
--tw-ordinal: ;
|
|
--tw-slashed-zero: ;
|
|
--tw-numeric-figure: ;
|
|
--tw-numeric-spacing: ;
|
|
--tw-numeric-fraction: ;
|
|
--tw-ring-inset: ;
|
|
--tw-ring-offset-width: 0px;
|
|
--tw-ring-offset-color: #fff;
|
|
--tw-ring-color: rgb(59 130 246 / 0.5);
|
|
--tw-ring-offset-shadow: 0 0 #0000;
|
|
--tw-ring-shadow: 0 0 #0000;
|
|
--tw-shadow: 0 0 #0000;
|
|
--tw-shadow-colored: 0 0 #0000;
|
|
--tw-blur: ;
|
|
--tw-brightness: ;
|
|
--tw-contrast: ;
|
|
--tw-grayscale: ;
|
|
--tw-hue-rotate: ;
|
|
--tw-invert: ;
|
|
--tw-saturate: ;
|
|
--tw-sepia: ;
|
|
--tw-drop-shadow: ;
|
|
--tw-backdrop-blur: ;
|
|
--tw-backdrop-brightness: ;
|
|
--tw-backdrop-contrast: ;
|
|
--tw-backdrop-grayscale: ;
|
|
--tw-backdrop-hue-rotate: ;
|
|
--tw-backdrop-invert: ;
|
|
--tw-backdrop-opacity: ;
|
|
--tw-backdrop-saturate: ;
|
|
--tw-backdrop-sepia: ;
|
|
--tw-contain-size: ;
|
|
--tw-contain-layout: ;
|
|
--tw-contain-paint: ;
|
|
--tw-contain-style:
|
|
}
|
|
.mb-3 {
|
|
margin-bottom: 0.75rem
|
|
}
|
|
.mb-4 {
|
|
margin-bottom: 1rem
|
|
}
|
|
.mr-2 {
|
|
margin-right: 0.5rem
|
|
}
|
|
.mt-2 {
|
|
margin-top: 0.5rem
|
|
}
|
|
.mt-4 {
|
|
margin-top: 1rem
|
|
}
|
|
.block {
|
|
display: block
|
|
}
|
|
.flex {
|
|
display: flex
|
|
}
|
|
.hidden {
|
|
display: none
|
|
}
|
|
.h-6 {
|
|
height: 1.5rem
|
|
}
|
|
.h-full {
|
|
height: 100%
|
|
}
|
|
.h-screen {
|
|
height: 100vh
|
|
}
|
|
.w-6 {
|
|
width: 1.5rem
|
|
}
|
|
.w-64 {
|
|
width: 16rem
|
|
}
|
|
.w-72 {
|
|
width: 18rem
|
|
}
|
|
.w-full {
|
|
width: 100%
|
|
}
|
|
.max-w-3xl {
|
|
max-width: 48rem
|
|
}
|
|
.flex-1 {
|
|
flex: 1 1 0%
|
|
}
|
|
.cursor-pointer {
|
|
cursor: pointer
|
|
}
|
|
.list-disc {
|
|
list-style-type: disc
|
|
}
|
|
.flex-col {
|
|
flex-direction: column
|
|
}
|
|
.items-center {
|
|
align-items: center
|
|
}
|
|
.justify-center {
|
|
justify-content: center
|
|
}
|
|
.justify-between {
|
|
justify-content: space-between
|
|
}
|
|
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
|
|
--tw-space-x-reverse: 0;
|
|
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
|
|
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)))
|
|
}
|
|
.space-x-3 > :not([hidden]) ~ :not([hidden]) {
|
|
--tw-space-x-reverse: 0;
|
|
margin-right: calc(0.75rem * var(--tw-space-x-reverse));
|
|
margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)))
|
|
}
|
|
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
|
|
--tw-space-y-reverse: 0;
|
|
margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
|
|
margin-bottom: calc(0.5rem * var(--tw-space-y-reverse))
|
|
}
|
|
.space-y-3 > :not([hidden]) ~ :not([hidden]) {
|
|
--tw-space-y-reverse: 0;
|
|
margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
|
|
margin-bottom: calc(0.75rem * var(--tw-space-y-reverse))
|
|
}
|
|
.space-y-4 > :not([hidden]) ~ :not([hidden]) {
|
|
--tw-space-y-reverse: 0;
|
|
margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
|
|
margin-bottom: calc(1rem * var(--tw-space-y-reverse))
|
|
}
|
|
.overflow-hidden {
|
|
overflow: hidden
|
|
}
|
|
.overflow-y-auto {
|
|
overflow-y: auto
|
|
}
|
|
.rounded {
|
|
border-radius: 0.25rem
|
|
}
|
|
.rounded-md {
|
|
border-radius: 0.375rem
|
|
}
|
|
.border {
|
|
border-width: 1px
|
|
}
|
|
.border-b {
|
|
border-bottom-width: 1px
|
|
}
|
|
.border-l {
|
|
border-left-width: 1px
|
|
}
|
|
.border-r {
|
|
border-right-width: 1px
|
|
}
|
|
.border-none {
|
|
border-style: none
|
|
}
|
|
.bg-blue-600 {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.bg-gray-100 {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.bg-gray-50 {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.bg-green-600 {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.bg-white {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.p-2 {
|
|
padding: 0.5rem
|
|
}
|
|
.p-4 {
|
|
padding: 1rem
|
|
}
|
|
.px-2 {
|
|
padding-left: 0.5rem;
|
|
padding-right: 0.5rem
|
|
}
|
|
.px-4 {
|
|
padding-left: 1rem;
|
|
padding-right: 1rem
|
|
}
|
|
.py-1 {
|
|
padding-top: 0.25rem;
|
|
padding-bottom: 0.25rem
|
|
}
|
|
.py-2 {
|
|
padding-top: 0.5rem;
|
|
padding-bottom: 0.5rem
|
|
}
|
|
.pl-5 {
|
|
padding-left: 1.25rem
|
|
}
|
|
.text-left {
|
|
text-align: left
|
|
}
|
|
.text-center {
|
|
text-align: center
|
|
}
|
|
.text-lg {
|
|
font-size: 1.125rem;
|
|
line-height: 1.75rem
|
|
}
|
|
.text-sm {
|
|
font-size: 0.875rem;
|
|
line-height: 1.25rem
|
|
}
|
|
.text-xl {
|
|
font-size: 1.25rem;
|
|
line-height: 1.75rem
|
|
}
|
|
.text-xs {
|
|
font-size: 0.75rem;
|
|
line-height: 1rem
|
|
}
|
|
.font-medium {
|
|
font-weight: 500
|
|
}
|
|
.font-semibold {
|
|
font-weight: 600
|
|
}
|
|
.leading-none {
|
|
line-height: 1
|
|
}
|
|
.text-blue-600 {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(37 99 235 / var(--tw-text-opacity, 1))
|
|
}
|
|
.text-gray-500 {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(107 114 128 / var(--tw-text-opacity, 1))
|
|
}
|
|
.text-gray-600 {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(75 85 99 / var(--tw-text-opacity, 1))
|
|
}
|
|
.text-red-500 {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(239 68 68 / var(--tw-text-opacity, 1))
|
|
}
|
|
.text-red-600 {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(220 38 38 / var(--tw-text-opacity, 1))
|
|
}
|
|
.text-white {
|
|
--tw-text-opacity: 1;
|
|
color: rgb(255 255 255 / var(--tw-text-opacity, 1))
|
|
}
|
|
.underline {
|
|
text-decoration-line: underline
|
|
}
|
|
.shadow {
|
|
--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
|
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
|
|
}
|
|
.shadow-sm {
|
|
--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
|
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
|
|
}
|
|
.grayscale {
|
|
--tw-grayscale: grayscale(100%);
|
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
|
|
}
|
|
.filter {
|
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)
|
|
}
|
|
.hover\:bg-blue-700:hover {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.hover\:bg-gray-200:hover {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.hover\:bg-green-700:hover {
|
|
--tw-bg-opacity: 1;
|
|
background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1))
|
|
}
|
|
.hover\:underline:hover {
|
|
text-decoration-line: underline
|
|
}
|