feat(simple-table-app): redesign app using plain HTML/CSS/TS#758
feat(simple-table-app): redesign app using plain HTML/CSS/TS#758nicomiguelino wants to merge 6 commits intomasterfrom
Conversation
- Migrate from Vue/SCSS to plain HTML, CSS, and TypeScript - Add glass-morphism table card using Edge Apps 2026 design tokens - Use inset row dividers that don't touch the left/right edges - Preserve original Vue implementation in simple-table-app-old/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PR Reviewer Guide 🔍(Review updated until commit 63d1773)Here are some key observations to aid the review process:
|
PR Code Suggestions ✨Latest suggestions up to 63d1773
Previous suggestionsSuggestions up to commit 899c5b5
|
- Add icon.svg to static/images/ - Fix icon URL to point to correct path - Add entrypoint type to manifest files
- Replace flex-start alignment and top padding with center alignment - Add screenshots for supported resolutions
- Remove simple-table-app-old (Vue/Pinia/PapaParse implementation) - Update README to match structure of other Edge Apps
- Remove local escapeHtml implementation - Import escapeHtml from @screenly/edge-apps
|
Persistent review updated to latest commit 63d1773 |
There was a problem hiding this comment.
Pull request overview
This PR modernizes edge-apps/simple-table-app by replacing the Vue/SCSS implementation with a plain HTML/CSS/TypeScript app using the shared @screenly/edge-apps library/components, and adds screenshot automation assets.
Changes:
- Replaced the Vue app (components/stores/unit tests) with a DOM-based TypeScript renderer and a new glassmorphism CSS theme.
- Switched build/dev/lint/type-check workflows to the shared
edge-apps-scriptstooling and removed app-local Vite/Vitest/ESLint configs. - Added/updated manifests and screenshot automation + committed updated screenshot outputs.
Reviewed changes
Copilot reviewed 28 out of 43 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| edge-apps/simple-table-app/vitest.config.ts | Removed app-local Vitest config (now handled by shared tooling). |
| edge-apps/simple-table-app/vite.config.ts | Removed app-local Vite config (now handled by shared tooling). |
| edge-apps/simple-table-app/tsconfig.vitest.json | Removed Vitest-specific TS config. |
| edge-apps/simple-table-app/tsconfig.node.json | Removed Node/tooling TS config. |
| edge-apps/simple-table-app/tsconfig.json | Removed TS project references config. |
| edge-apps/simple-table-app/tsconfig.app.json | Removed Vue/DOM TS config. |
| edge-apps/simple-table-app/src/test-setup.ts | Removed Vitest global screenly mock setup. |
| edge-apps/simple-table-app/src/stores/settings.ts | Removed Pinia/Vue settings store. |
| edge-apps/simple-table-app/src/main.ts | New TS bootstrap: reads settings + renders table into the DOM. |
| edge-apps/simple-table-app/src/css/style.css | New dark “glass” table styling using Screenly design system tokens. |
| edge-apps/simple-table-app/src/components/tests/App.spec.ts | Removed Vue unit test. |
| edge-apps/simple-table-app/src/components/TimeDisplay.vue | Removed Vue time component (replaced by shared <app-header>). |
| edge-apps/simple-table-app/src/components/TableDisplay.vue | Removed Vue table component (replaced by DOM rendering). |
| edge-apps/simple-table-app/src/assets/time-display.scss | Removed legacy SCSS for time display. |
| edge-apps/simple-table-app/src/assets/table-display.scss | Removed legacy SCSS for table display. |
| edge-apps/simple-table-app/src/assets/main.scss | Removed legacy SCSS entry. |
| edge-apps/simple-table-app/src/App.vue | Removed Vue app root component. |
| edge-apps/simple-table-app/playwright.config.ts | Removed app-local Playwright config (now handled by shared tooling). |
| edge-apps/simple-table-app/package.json | Switched to shared scripts/tooling + updated deps for Bun/Playwright workflow. |
| edge-apps/simple-table-app/index.html | New plain HTML shell using <auto-scaler> + shared <app-header> + table scaffolding. |
| edge-apps/simple-table-app/eslint.config.ts | Removed app-local ESLint config (now handled by shared tooling). |
| edge-apps/simple-table-app/e2e/vue.spec.ts | Removed legacy Playwright smoke test targeting the Vue build. |
| edge-apps/simple-table-app/e2e/tsconfig.json | Removed e2e TS config. |
| edge-apps/simple-table-app/e2e/screenshots.spec.ts | Added Playwright-driven screenshot capture across supported resolutions. |
| edge-apps/simple-table-app/README.md | Updated docs for the new plain HTML/TS workflow and scripts. |
| edge-apps/simple-table-app/.vscode/extensions.json | Removed Vue/Vitest extension recommendations. |
| edge-apps/simple-table-app/.ignore | Added packaging ignore for node_modules/. |
| edge-apps/simple-table-app/.gitignore | Added ignores for build output/logs/PNG screenshot artifacts. |
| edge-apps/simple-table-app/screenly.yml | Manifest for the new app settings/metadata. |
| edge-apps/simple-table-app/screenly_qc.yml | QC manifest synced with the new app settings/metadata. |
| edge-apps/simple-table-app/screenshots/800x480.webp | Added/updated screenshot artifact. |
| edge-apps/simple-table-app/screenshots/480x800.webp | Added/updated screenshot artifact. |
| edge-apps/simple-table-app/screenshots/720x1280.webp | Added/updated screenshot artifact. |
| edge-apps/simple-table-app/screenshots/1280x720.webp | Added/updated screenshot artifact. |
| edge-apps/simple-table-app/screenshots/1920x1080.webp | Added/updated screenshot artifact. |
| edge-apps/simple-table-app/screenshots/1080x1920.webp | Added/updated screenshot artifact. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| screenly.yml # Edge App configuration | ||
| ```bash | ||
| bun test |
There was a problem hiding this comment.
README suggests running bun test, but this repo’s edge-app packages typically document bun run test:unit (matching the package scripts and flags like --pass-with-no-tests). Consider updating the command here to reference the script so contributors run tests consistently.
| bun test | |
| bun run test:unit |
| const th = document.createElement('th') | ||
| th.textContent = escapeHtml(header) | ||
| headerRow.appendChild(th) |
There was a problem hiding this comment.
escapeHtml() returns an HTML-escaped string, but the value is assigned via textContent, which already renders text safely. This will double-escape user input (e.g., < becomes < on screen). Use textContent = header (or switch to innerHTML if you truly need pre-escaped HTML).
| const td = document.createElement('td') | ||
| td.textContent = escapeHtml(cell) | ||
| tr.appendChild(td) |
There was a problem hiding this comment.
Same issue as the header cells: using escapeHtml() with textContent will show escaped entities to users. Prefer assigning the raw value to textContent (or use innerHTML with escaping, but not both).
| function parseCSV(csv: string): string[][] { | ||
| return csv | ||
| .trim() | ||
| .split('\n') | ||
| .map((row) => row.split(',').map((cell) => cell.trim())) | ||
| .filter((row) => row.length > 0 && row.some((cell) => cell !== '')) |
There was a problem hiding this comment.
parseCSV is not CSV-compliant (it splits on every , and \n), so quoted fields like "Last, First" or fields containing newlines will be parsed incorrectly. Since the setting is described as CSV, consider using a real CSV parser (e.g., papaparse) or implementing minimal RFC4180-style quote handling.
| "@playwright/test": "^1.58.0", | ||
| "@screenly/edge-apps": "workspace:../edge-apps-library", | ||
| "@types/bun": "^1.3.9", | ||
| "@types/jsdom": "^27.0.0", |
There was a problem hiding this comment.
jsdom is pinned to ^28.1.0, but @types/jsdom is set to ^27.0.0 here. This mismatch can cause incorrect typings; other edge-apps packages in this repo use @types/jsdom ^28.0.0 alongside jsdom 28.x, so aligning the version would avoid type drift.
| "@types/jsdom": "^27.0.0", | |
| "@types/jsdom": "^28.0.0", |
| display_errors: 'false', | ||
| message: 'Hello, World!', | ||
| override_locale: 'en', | ||
| override_timezone: 'America/New_York', |
There was a problem hiding this comment.
The screenshot mock settings don’t include the app’s primary inputs (content and optional title), so the generated screenshots won’t exercise the CSV parsing/rendering logic beyond the hardcoded defaults. Setting content (and optionally title) in the mock would make these screenshots a better regression test for the table renderer.
| override_timezone: 'America/New_York', | |
| override_timezone: 'America/New_York', | |
| title: 'Sample Table', | |
| content: 'Name,Age\nAlice,30\nBob,25', |
User description
Summary
simple-table-app-old/PR Type
Enhancement, Tests, Documentation
Description
Replace Vue app with vanilla TypeScript
Add responsive glassmorphism table interface
Add screenshot coverage for supported resolutions
Adopt shared scripts and remove Vue tooling
Diagram Walkthrough
File Walkthrough
4 files
Add screenshot coverage across supported viewportsRemove obsolete Vue Playwright smoke testDelete Vue app component unit testDelete shared Screenly Vitest setup mock12 files
Drop local Vue ESLint flat configRemove local Playwright configuration fileRemove custom Vite app configurationDrop local Vitest configuration fileDelete legacy SCSS entry importIgnore local installed dependencies folderRemove Vue-focused VS Code recommendationsRemove dedicated E2E TypeScript configDelete Vue app TypeScript configurationRemove project reference TypeScript configDelete node tooling TypeScript configRemove Vitest TypeScript configuration file3 files
Render CSV tables with vanilla DOMAdd responsive glass table stylingReplace app shell with static layout6 files
Remove Pinia locale and timezone storeRemove root Vue bootstrap componentDelete Vue table display componentRemove live Vue time displayRemove SCSS table component stylesDelete SCSS time display styles1 files
Rewrite README for shared app workflow1 files
Adopt shared scripts and slimmer dependencies11 files