Skip to content

ATAK Vessel Iconset download card (QR + direct link) + AISCOT 7.3.0 config params - #65

Merged
ampledata merged 3 commits into
mainfrom
iconset-downloads
Jul 15, 2026
Merged

ampledata merged 3 commits into
mainfrom
iconset-downloads

Conversation

@ampledata

Copy link
Copy Markdown
Contributor

Summary

Companion to snstac/aiscot#15 (AIS-catcher style vessel styling).

ATAK Vessel Iconset card

New expandable card between the TLS card and the configuration form, offering the ship-class ATAK iconset (ais-ships-iconset.zip) two ways:

  • QR code — a qrtak-style import intent (tak://com.atakmap.app/import?url=…). Scan with ATAK's QR scanner or the device camera and the client downloads & imports the iconset directly (device needs internet; the zip is fetched from the aiscot GitHub repo).
  • Regular link — download the zip and import manually via Settings → Tool Preferences → Point Dropper → Iconset Manager.

The QR is rendered as an inline SVG with qrcode-generator (MIT, zero dependencies, +1 package in the lockfile). URL constants and QR generation live in cockpit-free src/iconset.ts so they're unit-testable under vitest's node environment.

New configuration parameters

The config form now surfaces AISCOT 7.3.0's four new parameters: VESSEL_NAME_PREFIX, SHIPCLASS_COLORS, SHIPCLASS_ICONS (the card's instructions point users at it once clients have the iconset), and UNDERWAY_ONLY.

Test plan

  • npm run test — 7 passed (3 new: download URL shape, ATAK import intent encoding, QR SVG generation)
  • npm run eslint / npm run stylelint — clean
  • make dist — production bundle builds; new card present in dist/index.js.gz

🤖 Generated with Claude Code

Greg Albrecht and others added 2 commits July 10, 2026 20:00
…OT 7.3.0 config params

New expandable card offers the AIS-catcher style ship-class iconset
(ais-ships-iconset.zip, bundled with AISCOT >= 7.3.0):

- qrtak-style import QR (tak://com.atakmap.app/import?url=...) -
  scan with ATAK or the device camera to download & import directly
- regular download link for manual import via Settings -> Tool
  Preferences -> Point Dropper -> Iconset Manager

QR rendered as SVG via qrcode-generator (MIT, zero deps). URL/QR
logic lives in cockpit-free src/iconset.ts so vitest covers it.

Also surfaces the four new AISCOT 7.3.0 configuration parameters in
the config form: VESSEL_NAME_PREFIX, SHIPCLASS_COLORS,
SHIPCLASS_ICONS, UNDERWAY_ONLY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review fixes for the iconset card:

- ICONSET_URL now pins to the aiscot release tag (v7.3.0) instead of
  tracking main HEAD: main 404s until the aiscot PR merges, and a
  branch URL could later serve a zip whose layout no longer matches
  the iconsetpath values the installed aiscot emits.
- Note in the card that both options need github.com reachability and
  that the same zip ships on-box with the aiscot package for offline
  networks.
- QR SVG is computed once at module load instead of on every render;
  drop the hardcoded "19 icons" count; open the download cross-origin
  link in a new tab (the download attribute is ignored cross-origin
  and would otherwise navigate Cockpit's frame away).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DVibvSyvPsUXRXRYaFsWjY

@ampledata ampledata left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed (self-authored, posting as comment). Code is clean: URL/QR logic isolated and unit-tested, QR is compile-time-constant SVG (no XSS surface), external link uses rel="noopener noreferrer", new params match aiscot's constants.

Merge-sequencing gate: src/iconset.ts pins ICONSET_VERSION = 'v7.3.0' and the raw URL currently 404s (latest aiscot tag is v7.2.1). Merge order must be: aiscot #15 -> tag/release v7.3.0 -> this PR; otherwise the card ships a dead QR/link with no in-UI failure signal.

Minor: dangerouslySetInnerHTML for the QR SVG is safe today (constant input) but a latent foot-gun if qrSvg() is ever reused with dynamic input — consider an <img src="data:image/svg+xml,..."> or a comment stating the invariant. The download attribute on the cross-origin anchor is ignored by browsers. Hardcoded #888 caption may look off in dark mode.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DVibvSyvPsUXRXRYaFsWjY

Part of a fleet-wide sweep to make every cockpit-* sensor plugin match one UI standard: the dark AryaOS operations-console theme, >=48px (3rem) touch targets on all buttons and form controls for gloved field use on mobile, and a unified 760px responsive breakpoint (action buttons wrap to full width on phones; desktop layout unchanged).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DVibvSyvPsUXRXRYaFsWjY
@ampledata
ampledata merged commit 82678d9 into main Jul 15, 2026
1 check passed
@ampledata
ampledata deleted the iconset-downloads branch July 15, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant