Skip to content

Commit 9a2fed6

Browse files
v1.4.14 — multi-colour ADP picker, version filter, search reset on switch
Add Product — Mono/Dual/Tri/Rainbow colour mode selector in the preset bottom-sheet. Selecting a mode auto-sets id_aspect2 (Bicolor 252 / Tricolor 24 / Rainbow 145 / "-" 0); changing aspect2 in Advanced mode syncs back to the selector. Colour circle reflects the mode: solid / hard split / conic sectors / smooth linear-gradient (Rainbow mirrors the inventory display). Slot indicator squares let the user pick each colour without closing the sheet. Version filter: the Type quick-filter now shows protocol versions (TigerTag / TigerTag+ / TigerTag Cloud) via a new `protocol` field in normalizeRow derived from id_tigertag / CLOUD_ doc-id prefix. UX: search bar + all quick-filters cleared on account switch and when entering or leaving a friend's inventory view.
1 parent 7fd44f9 commit 9a2fed6

16 files changed

Lines changed: 392 additions & 45 deletions

File tree

‎DEVLOG.md‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Tiger Studio Manager — Dev Log
2+
3+
Journal de travail par session. Plus granulaire que ROADMAP.md, moins public que README.md.
4+
Mis à jour en fin de chaque session Claude.
5+
6+
---
7+
8+
## 2026-05-08 — v1.4.14
9+
10+
### Demandes
11+
- ADP : sélecteur Mono / Dual / Tri / Rainbow dans la bottom-sheet couleur
12+
- Lien bidirectionnel mode couleur ↔ `id_aspect2` (252 Bicolor / 24 Tricolor / 145 Rainbow / 0 "-")
13+
- Rainbow affiche le même dégradé lisse que dans l'inventaire (`linear-gradient`)
14+
- Filtre "Type" dans la barre de recherche → rebrancher sur la version/protocole (TigerTag, TigerTag+, TigerTag Cloud)
15+
- Effacer la search bar + filtres au changement de compte ou de vue ami
16+
17+
### Fichiers modifiés
18+
| Fichier | Nature de la modification |
19+
|---------|--------------------------|
20+
| `renderer/inventory.js` | `_adpColorMode` + `_adpSlotCount()` + `_adpSetColorMode()` (remplace `_adpSetColorCount`), `_adpModeForAspect2()`, `_ADP_MODE_TO_ASPECT2`, listener aspect2 bidirectionnel, `_adpUpdateCircle()` Rainbow linear-gradient, `normalizeRow` champ `protocol`, `populateOneQuickFilter` → `filterAllVersions` + `pickValue: r.protocol`, filtre appliqué sur `r.protocol` (×2), `_clearSearchFilters()`, appels dans `switchToFriendView` / `switchBackToOwnView` / `switchAccountUI` |
21+
| `renderer/inventory.html` | Sélecteur `data-mode` (Mono/Dual/Tri/Rainbow), slot row, `#typeFilter` → `filterAllVersions` |
22+
| `renderer/css/60-modals.css` | `.adp-color-count-row`, `.adp-color-count-btn`, `.adp-color-slots-row`, `.adp-color-slot-btn` |
23+
| `renderer/locales/*.json` | `colorCountMono/Dual/Tri/Rainbow`, `filterAllVersions` (9 locales) |
24+
| `package.json` | version `1.4.13` → `1.4.14` |
25+
| `README.md` | Section changelog v1.4.14 |
26+
| `DEVLOG.md` | Ce fichier |
27+
28+
### Notes techniques
29+
- `_adpColorMode` = "mono" | "dual" | "tri" | "rainbow" — dérivé en slot count via `_adpSlotCount()`
30+
- Rainbow : `linear-gradient(90deg, c1, c2, c3)` — identique à `colorBg()` dans l'inventaire
31+
- Dual : `linear-gradient(90deg, c1 50%, c2 50%)` (hard cut, pas de dégradé)
32+
- Tri : `conic-gradient` 120° × 3 secteurs
33+
- Boucle infinie évitée par `{ skipAspect2: true }` sur le listener aspect2
34+
- `protocol` dans `normalizeRow` : Cloud → "TigerTag Cloud", sinon `versionName(id_tigertag)`
35+
- `_clearSearchFilters()` remet aussi les `<select>` DOM à "" et retire `.is-active`
36+
37+
---
38+
39+
## 2026-05-07 — v1.4.13
40+
41+
### Demandes
42+
- Custom product image (`url_img` + `url_img_user: true`) — DIY et Cloud uniquement
43+
- Toolbox : bouton "Clear TD" (hold-to-confirm 1 200 ms) sur la ligne Scan TD
44+
- Bouton TD1S dans le header du Add Product panel
45+
- Stat tile "TigerTag Cloud" (violet) dans la barre KPI
46+
- Titre de fenêtre en dark mode natif (`nativeTheme.themeSource = 'dark'`)
47+
- Suppression de l'ombre OS de la fenêtre (`hasShadow: false`)
48+
- Icône de mise à jour (orange spinning = téléchargement, vert brillant = prêt) à droite du nuage
49+
- Fix : ombre des panels off-screen qui saignait dans le viewport
50+
- Redesign barre URL image en pill unifiée (trigger à gauche, input au centre, ✓ à droite)
51+
- Fix : barre blanche WebKit sur le focus de l'input URL
52+
53+
### Fichiers modifiés
54+
| Fichier | Nature de la modification |
55+
|---------|--------------------------|
56+
| `renderer/inventory.js` | `customImgBar` pill (trigger + input + ok), `onUpdateStatus` + click handler icône update, toolbox Clear TD split-button, bouton TD1S dans ADP header |
57+
| `renderer/inventory.html` | `#updateStatusIcon` ajouté dans `.top-status-icons` (dernier enfant) |
58+
| `renderer/css/70-detail-misc.css` | `.custom-img-bar` pill CSS complet (collapsed → `.open` via `max-width` transition) ; `-webkit-appearance: none` sur l'input pour supprimer le focus ring blanc |
59+
| `renderer/css/60-modals.css` | `.update-health-icon` + `.update-health.downloading` + `.update-health.ready` + `@keyframes updateSpin` |
60+
| `renderer/css/50-snapmaker.css` | `.sfe-sheet` : `box-shadow` uniquement sur `.open` |
61+
| `renderer/css/30-racks.css` | `.rp-side` : `box-shadow` uniquement sur `.is-open` |
62+
| `renderer/css/00-base.css` | `.detail-panel` : `box-shadow` uniquement sur `.open` |
63+
| `main.js` | `nativeTheme.themeSource = 'dark'` ; `hasShadow: false` dans BrowserWindow |
64+
| `package.json` | version `1.4.12` → `1.4.13` |
65+
| `README.md` | Section changelog v1.4.13 ajoutée |
66+
| `ROADMAP.md` | ✅ Done mis à jour : custom image, Clear TD, Cloud tile, TD1S ADP, dark chrome, update icon, shadow fix |
67+
68+
### Notes techniques
69+
- Le pill bar utilise `max-width` (pas `width`) pour animer depuis `auto` → transition fluide
70+
- `box-shadow` sur panels cachés : toujours appliquer uniquement sur l'état `.open` / `.is-open` pour éviter le bleed hors viewport
71+
- GitHub Actions se déclenche sur les tags `v*` uniquement — penser à `git tag vX.Y.Z && git push origin vX.Y.Z`
72+
- `hasShadow: false` supprime l'ombre OS, pas les `box-shadow` CSS — deux mécanismes indépendants
73+
74+
---

‎README.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,20 @@
5252

5353
## Changelog
5454

55+
### v1.4.14 — 2026-05-08
56+
57+
#### Add Product — multi-colour picker (Mono / Dual / Tri / Rainbow)
58+
- New **Mono / Dual / Tri / Rainbow** selector at the top of the colour picker bottom-sheet. In Dual / Tri / Rainbow modes the sheet stays open and shows coloured slot indicator squares — tap a square to switch the active slot, then pick its colour from the preset grid.
59+
- The colour circle in the panel updates in real time: solid (Mono), hard half-split (Dual), conic-gradient sectors (Tri), smooth linear-gradient (Rainbow).
60+
- Selecting a mode auto-sets `id_aspect2` to the matching aspect (Bicolor 252 / Tricolor 24 / Rainbow 145 / "-" 0). The link is bidirectional — changing the aspect2 dropdown in Advanced mode also flips the mode selector.
61+
- `color_r2/g2/b2` and `color_r3/g3/b3` are now written from the actual slot colours picked by the user (no longer hardcoded placeholders).
62+
63+
#### Version / protocol filter
64+
- The **Type** quick-filter in the inventory toolbar now filters by **protocol version** (TigerTag / TigerTag+ / TigerTag Cloud / TigerTag Init / …) instead of filament product type. A new `protocol` field is derived from `id_tigertag` for chip-based spools and from the `CLOUD_*` doc-id prefix for Cloud spools.
65+
66+
#### Search & filter reset on instance switch
67+
- The search bar and all quick-filters (Brand / Material / Version) are now automatically cleared when switching between accounts or entering / leaving a friend's inventory view.
68+
5569
### v1.4.13 — 2026-05-07
5670

5771
#### Custom product image for DIY & Cloud spools

‎ROADMAP.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ Grouped by domain. Versions in parentheses are the release that landed the featu
2525
- ✅ **Image cache** for spool photos — local persistence, color-fallback if remote dies
2626
- ✅ **Add Product side panel** — full TigerTag creator iso to the mobile app: Brand / Material picker bottom-sheets with favourites pinned and persisted, mobile-style HSV colour picker (preset grid + custom 2D SV rectangle + rainbow hue slider), advanced mode revealing Type / Diameter / Aspect 1+2 / temps / TD / weight unit, live RFID Data preview (debug only), 28-byte UTF-8 cap on the colour-name field, integer-only fields with live clamp (v1.4.11 + v1.4.12)
2727
- ✅ **TigerTag Cloud — 100 % digital filaments** — Add Product writes a doc with id `CLOUD_<10-digit>` and the new "TigerTag Cloud" tier badge (purple) when there's no physical chip yet. Promoted in place to a real 7-byte hex UID via the existing `uidMigrationMap` rename pipeline the moment the user programs a chip — every field, twin pointer, rack assignment and friend ACL follows the doc through the rename. Atomic, idempotent. Mobile companion ships the same label in the inventory bottom-sheet header AND the search index (v1.4.12)
28+
- ✅ **Custom product image** (`url_img` + `url_img_user: true`) — DIY and TigerTag Cloud spools can carry a product image from any external URL. Edit trigger in the colour square (or toolbox when an image is already set); also available in the Add Product advanced section. Broken URLs fall back to the colour placeholder; `isPlus` stays false so the spool keeps its DIY/Cloud identity. TigerTag+ images (from catalogue) are read-only. (v1.4.13)
29+
- ✅ **Toolbox — Clear TD split-button** — hold-to-confirm trash button (1 200 ms) on the "Scan TD" toolbox row, visible only when `r.td != null`. Deletes the `TD` field via `FieldValue.delete()`. Row hidden entirely when no TD is set. (v1.4.13)
30+
- ✅ **TigerTag Cloud stat tile** — purple tile in the inventory header always showing the count of `CLOUD_` spools; DIY count now correctly excludes Cloud entries. (v1.4.13)
2831

2932
### Multi-account & auth
3033
- ✅ Firebase auth with **per-account `firebase.app(uid)` instances** (independent sessions) (v1.4+)
@@ -72,6 +75,7 @@ Grouped by domain. Versions in parentheses are the release that landed the featu
7275
- ✅ **ACR122U NFC reader** (USB) via `nfc-pcsc` — `main.js` ↔ renderer IPC bridge
7376
- ✅ **TD1S sensor** integration — TD + color reading, auto-detect on USB plug, log panel
7477
- ✅ **TigerScale heartbeat** — `users/{uid}/scales/{mac}` with 90s online threshold, scale panel render
78+
- ✅ **TD1S button in Add Product panel** — icon in the ADP header: disconnected → opens connect modal; connected → glows green and auto-fills colour HEX + TD value fields on scan. State syncs on every `onStatus` event and `openAddProductPanel()` call. (v1.4.13)
7579

7680
### Distribution & i18n
7781
- ✅ **9 locales** — en · fr · de · es · it · zh · pt (Brasil) · pt-pt · pl
@@ -81,12 +85,15 @@ Grouped by domain. Versions in parentheses are the release that landed the featu
8185
- ✅ **Windows code signing** via Microsoft Trusted Signing (Azure)
8286
- ✅ **Cross-platform builds** — macOS (x64 + arm64), Windows (NSIS), Linux (AppImage)
8387
- ✅ **Diagnostic report** — last 50 errors + env in a copyable Markdown blob
88+
- ✅ **Dark window chrome** — `nativeTheme.themeSource = 'dark'` forces the native macOS/Windows title bar to dark mode (dark background, white text). `hasShadow: false` removes the OS-level drop shadow along the window edges. (v1.4.13)
89+
- ✅ **Update status icon** — icon to the right of the cloud health indicator: orange spinning refresh while downloading, green glowing dot when ready to install. Tooltip via the existing `.health[data-tooltip]` system. Click when ready → `installUpdate()`. (v1.4.13)
8490

8591
### Dev tooling
8692
- ✅ **`npm run i18n:add`** — one command updates all 9 locales (v1.4.9)
8793
- ✅ **`npm run i18n:check`** + **pre-commit hook** (.githooks/) — blocks commits on locale drift (v1.4.9)
8894
- ✅ **CSS modularization** — split 8047-line `inventory.css` into 8 themed files under `renderer/css/` (v1.4.9)
8995
- ✅ **`renderer/CODEMAP.md`** — feature → line range index for the 12k-line `inventory.js` (post-v1.4.9)
96+
- ✅ **Panel shadow bleed fix** — `detail-panel`, `sfe-sheet` (Snapmaker filament edit) and `rp-side` (rack side panel) were leaking `box-shadow` into the viewport when translated off-screen. Shadow now applied only on `.open` / `.is-open`; transitions include `box-shadow .25s`. (v1.4.13)
9097

9198
---
9299

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tigertag-inventory",
3-
"version": "1.4.13",
3+
"version": "1.4.14",
44
"description": "Tiger Studio Manager — desktop app",
55
"main": "main.js",
66
"engines": {

‎renderer/css/60-modals.css‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1916,6 +1916,56 @@
19161916
drop-shadow(0 0 1px rgba(0,0,0,.6));
19171917
}
19181918

1919+
/* ── Mono / Dual / Tri colour-count selector ────────────────────── */
1920+
.adp-color-count-row {
1921+
display: flex;
1922+
gap: 6px;
1923+
margin-bottom: 12px;
1924+
}
1925+
.adp-color-count-btn {
1926+
flex: 1;
1927+
padding: 6px 0;
1928+
border: 1px solid var(--border);
1929+
border-radius: 8px;
1930+
background: var(--surface-2);
1931+
color: var(--muted);
1932+
font-size: 12px;
1933+
font-weight: 600;
1934+
letter-spacing: .03em;
1935+
cursor: pointer;
1936+
transition: background .15s, color .15s, border-color .15s;
1937+
}
1938+
.adp-color-count-btn.is-active {
1939+
background: var(--primary);
1940+
border-color: var(--primary);
1941+
color: #fff;
1942+
}
1943+
.adp-color-count-btn:not(.is-active):hover {
1944+
background: var(--surface-3);
1945+
color: var(--fg);
1946+
}
1947+
1948+
/* ── Slot indicator row (Dual / Tri) ───────────────────────────── */
1949+
.adp-color-slots-row {
1950+
display: flex;
1951+
gap: 8px;
1952+
justify-content: center;
1953+
margin-bottom: 12px;
1954+
}
1955+
.adp-color-slot-btn {
1956+
width: 36px;
1957+
height: 36px;
1958+
border-radius: 8px;
1959+
border: 2px solid transparent;
1960+
cursor: pointer;
1961+
transition: border-color .15s, transform .1s;
1962+
}
1963+
.adp-color-slot-btn.is-active {
1964+
border-color: var(--primary);
1965+
transform: scale(1.1);
1966+
box-shadow: 0 0 0 2px var(--primary-20, rgba(255,120,0,.25));
1967+
}
1968+
19191969
/* Add-product sheet backdrops — limited to the panel area (right
19201970
slice), NOT the full screen. The "outside the panel" region keeps
19211971
the panel-overlay's normal dim, and a click there cascades both

‎renderer/inventory.html‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@
167167
<select id="materialFilter" class="inv-brand-filter" title="Filter by material">
168168
<option value="" data-i18n="filterAllMaterials">All materials</option>
169169
</select>
170-
<select id="typeFilter" class="inv-brand-filter" title="Filter by type">
171-
<option value="" data-i18n="filterAllTypes">All types</option>
170+
<select id="typeFilter" class="inv-brand-filter" data-i18n-title="filterAllVersions" title="All versions">
171+
<option value="" data-i18n="filterAllVersions">All versions</option>
172172
</select>
173173
</div>
174174
</div>
@@ -1759,6 +1759,15 @@
17591759
<div class="sfe-backdrop" id="adpColorBackdrop"></div>
17601760
<aside class="sfe-sheet sfe-sheet--color adp-color-sheet" id="adpColorSheet" aria-hidden="true">
17611761
<div class="sfe-body sfe-body--picker">
1762+
<!-- Mono / Dual / Tri / Rainbow selector -->
1763+
<div class="adp-color-count-row" id="adpColorCountRow">
1764+
<button class="adp-color-count-btn is-active" data-mode="mono" type="button" data-i18n="colorCountMono">Mono</button>
1765+
<button class="adp-color-count-btn" data-mode="dual" type="button" data-i18n="colorCountDual">Dual</button>
1766+
<button class="adp-color-count-btn" data-mode="tri" type="button" data-i18n="colorCountTri">Tri</button>
1767+
<button class="adp-color-count-btn" data-mode="rainbow" type="button" data-i18n="colorCountRainbow">Rainbow</button>
1768+
</div>
1769+
<!-- Slot indicators — hidden in Mono mode, rendered by JS in Dual/Tri -->
1770+
<div class="adp-color-slots-row hidden" id="adpColorSlotsRow"></div>
17621771
<div class="sfe-color-grid" id="adpColorGrid"></div>
17631772
</div>
17641773
</aside>

0 commit comments

Comments
 (0)