@@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## 0.2.0 - 2026-09-02
|
||||
|
||||
- Added vCard 2.1, grouped-property, quoted-printable and Base64 support while
|
||||
preserving unmapped properties and parameters.
|
||||
- Added loss-preserving jCard and focused JSContact import/export with explicit
|
||||
mapping evidence.
|
||||
|
||||
## 0.1.0 - 2026-09-01
|
||||
|
||||
- Added the initial local-first Contact Tools workbench.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
==============================================================================
|
||||
@add-ideas/toolbox-contract@0.2.3
|
||||
@add-ideas/toolbox-contract@0.3.0
|
||||
Declared licence: Apache-2.0
|
||||
==============================================================================
|
||||
--- LICENSE ---
|
||||
@@ -198,7 +198,7 @@ Declared licence: Apache-2.0
|
||||
|
||||
|
||||
==============================================================================
|
||||
@add-ideas/toolbox-helpers@0.1.0
|
||||
@add-ideas/toolbox-helpers@0.2.0
|
||||
Declared licence: GPL-3.0-or-later
|
||||
==============================================================================
|
||||
--- LICENSE ---
|
||||
@@ -879,7 +879,7 @@ Public License instead of this License. But first, please read
|
||||
|
||||
|
||||
==============================================================================
|
||||
@add-ideas/toolbox-shell-react@0.2.3
|
||||
@add-ideas/toolbox-shell-react@0.3.0
|
||||
Declared licence: Apache-2.0
|
||||
==============================================================================
|
||||
--- LICENSE ---
|
||||
|
||||
+7
-4
@@ -6,15 +6,18 @@ Contact Tools is a standalone local-first application in the [add·ideas Toolbox
|
||||
|
||||
## Version 0.1 scope
|
||||
|
||||
- Unfolding and bounded parsing of vCard 3.0 and 4.0 contact sets
|
||||
- Unfolding and bounded parsing of vCard 2.1, 3.0 and 4.0 contact sets
|
||||
- Editable core names, organizations, titles, emails, phones, addresses, URLs, birthdays, notes, UIDs and categories
|
||||
- Canonical vCard 3.0/4.0 export with UTF-8-aware 75-octet line folding
|
||||
- Canonical vCard 2.1/3.0/4.0 export with UTF-8-aware 75-octet line folding
|
||||
- Quoted-printable and bounded Base64 decoding, grouped-property support, and loss-preserving retention of unmapped IANA/X properties and parameters
|
||||
- Loss-preserving RFC 7095 jCard import/export and a focused JSContact
|
||||
import/export adapter with unmapped-field evidence
|
||||
- RFC 4180-style CSV import with inferred, reviewable column mapping and spreadsheet-formula-safe CSV export
|
||||
- Explainable exact duplicate candidates and a conflict-reporting, left-biased merge preview
|
||||
- Explicit, local vCard QR generation with a conservative payload bound and SVG download
|
||||
- Masked overview fields, one-click memory clearing, and no persistence or telemetry
|
||||
|
||||
Text input is limited to 2 MiB, 50,000 physical lines and 2,000 contacts. Binary and quoted-printable properties are diagnosed but not decoded, and unsupported properties are reported rather than silently round-tripped. See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) and [docs/PRIVACY-SECURITY.md](docs/PRIVACY-SECURITY.md).
|
||||
Text input is limited to 2 MiB, 50,000 physical lines and 2,000 contacts. Encoded values are limited to 64 KiB per property; malformed encodings are diagnosed while their raw values remain preserved. See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) and [docs/PRIVACY-SECURITY.md](docs/PRIVACY-SECURITY.md).
|
||||
|
||||
## Development
|
||||
|
||||
@@ -28,7 +31,7 @@ npm run test:browser
|
||||
|
||||
## Release
|
||||
|
||||
`npm run release:artifact` creates a deterministic `release/contact-tools-0.1.0.zip` and checksum sidecar.
|
||||
`npm run release:artifact` creates a deterministic `release/contact-tools-0.2.0.zip` and checksum sidecar.
|
||||
|
||||
## Licence
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
# Corresponding source
|
||||
|
||||
The corresponding source for Contact Tools 0.1.0 is available at:
|
||||
The corresponding source for Contact Tools 0.2.0 is available at:
|
||||
|
||||
https://git.add-ideas.de/lotobo/contact-tools/src/tag/v0.1.0
|
||||
https://git.add-ideas.de/lotobo/contact-tools/src/tag/v0.2.0
|
||||
|
||||
Build with Node.js 22, npm 11, `npm ci`, and `npm run release:artifact`.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Third-party notices
|
||||
|
||||
Contact Tools 0.1.0 directly depends on these runtime packages:
|
||||
Contact Tools 0.2.0 directly depends on these runtime packages:
|
||||
|
||||
| Package | Pinned version | Declared licence |
|
||||
| -------------------------------- | -------------: | ---------------- |
|
||||
| `@add-ideas/toolbox-contract` | 0.2.3 | Apache-2.0 |
|
||||
| `@add-ideas/toolbox-helpers` | 0.1.0 | GPL-3.0-or-later |
|
||||
| `@add-ideas/toolbox-shell-react` | 0.2.3 | Apache-2.0 |
|
||||
| `@add-ideas/toolbox-contract` | 0.3.0 | Apache-2.0 |
|
||||
| `@add-ideas/toolbox-helpers` | 0.2.0 | GPL-3.0-or-later |
|
||||
| `@add-ideas/toolbox-shell-react` | 0.3.0 | Apache-2.0 |
|
||||
| `qrcode-generator` | 2.0.4 | MIT |
|
||||
| `react` | 19.2.8 | MIT |
|
||||
| `react-dom` | 19.2.8 | MIT |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Contact Tools is a static React/Vite application wrapped in the shared Toolbox shell. `contact/model.ts` owns bounded vCard unfolding/parsing, canonical serialization, RFC 4180-style CSV conversion, exact duplicate indexing and deterministic merge previews. The workbench only replaces its active records after a complete successful parse.
|
||||
|
||||
Imported properties are projected into a typed contact model and rendered through React text nodes and native controls. Unknown properties are diagnosed and omitted from canonical output instead of being injected back into markup. QR SVG is generated from UTF-8 bytes of the canonical vCard by the pinned `qrcode-generator` runtime, checked for active SVG constructs, then displayed as an encoded image URL rather than inserted as markup.
|
||||
Imported properties are projected into a typed contact model and rendered through React text nodes and native controls. Quoted-printable and bounded Base64 values are decoded locally. Unmapped properties retain their group, name, parameters, raw value and optional decoded bytes, are diagnosed as non-editable, and are serialized back as inert vCard content. QR SVG is generated from UTF-8 bytes of the canonical vCard by the pinned `qrcode-generator` runtime, checked for active SVG constructs, then displayed as an encoded image URL rather than inserted as markup.
|
||||
|
||||
Version 0.1 operations are synchronous and bounded, so the app creates no worker and has no persistence or server API. Relative entry and asset URLs keep the build relocatable below a nested portal path.
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
const CACHE_PREFIX = "contact-tools-shell-";
|
||||
const CACHE_NAME = CACHE_PREFIX + "0.1.0";
|
||||
const CACHE_NAME = CACHE_PREFIX + "0.2.0";
|
||||
const CORE = ["./", "./manifest.webmanifest", "./favicon.svg"];
|
||||
self.addEventListener("install", (event) => {
|
||||
event.waitUntil(
|
||||
|
||||
+14
-1
@@ -3,7 +3,7 @@
|
||||
"schemaVersion": 1,
|
||||
"id": "de.add-ideas.contact-tools",
|
||||
"name": "Contact Tools",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"description": "Inspect, convert, and reconcile contacts locally in the browser.",
|
||||
"entry": "./",
|
||||
"icon": "./favicon.svg",
|
||||
@@ -21,6 +21,19 @@
|
||||
"crossOriginIsolated": false,
|
||||
"topLevelContext": false
|
||||
},
|
||||
"io": {
|
||||
"accepts": [
|
||||
{ "mediaType": "text/vcard", "extensions": [".vcf", ".vcard"] },
|
||||
{ "mediaType": "application/vcard+json", "extensions": [".json"] },
|
||||
{ "mediaType": "application/jscontact+json", "extensions": [".json"] }
|
||||
],
|
||||
"produces": [
|
||||
{ "mediaType": "text/vcard", "extensions": [".vcf"] },
|
||||
{ "mediaType": "application/vcard+json", "extensions": [".json"] },
|
||||
{ "mediaType": "application/jscontact+json", "extensions": [".json"] }
|
||||
]
|
||||
},
|
||||
"capabilities": { "required": [], "optional": [] },
|
||||
"privacy": {
|
||||
"processing": "local",
|
||||
"fileUploads": true,
|
||||
|
||||
Reference in New Issue
Block a user