@pocket-trash/localizations 0.23.0 → 0.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -249,3 +249,15 @@ For example, a Vite app can load the English image guide as text:
249
249
  ```ts
250
250
  import source from "@pocket-trash/localizations/help/en-US/image-size-and-resolution-guide.mdx?raw";
251
251
  ```
252
+
253
+ ## Product changelog
254
+
255
+ Changelog entries are published under
256
+ `@pocket-trash/localizations/changelog/<locale>/<dated-slug>.mdx`. English files
257
+ define `title`, `datePublished`, optional `dateModified`, and `categories`
258
+ frontmatter. Translations use the same filename and define only `title`; missing
259
+ translations fall back to English in the consuming app.
260
+
261
+ Run `pnpm changelog:validate` after editing entries. On pull requests, CI also
262
+ requires every existing translation to change or be removed when its English
263
+ source changes.
@@ -0,0 +1,8 @@
1
+ ---
2
+ title: Introducing the Pocket Trash changelog
3
+ datePublished: 2027-10-02
4
+ categories:
5
+ - feature
6
+ ---
7
+
8
+ You can now follow customer-facing Pocket Trash updates in the product changelog. Browse updates by category and share a direct link to any entry.
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: Presentamos el registro de cambios de Pocket Trash
3
+ ---
4
+
5
+ Ahora puedes consultar las novedades de Pocket Trash en el registro de cambios del producto. Explora las novedades por categoría y comparte un enlace directo a cualquier entrada.
@@ -0,0 +1,30 @@
1
+ export const changelogCategories: Readonly<{
2
+ feature: Readonly<{
3
+ slug: "feature";
4
+ titles: Readonly<{
5
+ "en-US": "New Feature";
6
+ "es-MX": "Nueva funcionalidad";
7
+ }>;
8
+ }>;
9
+ bug: Readonly<{
10
+ slug: "bug";
11
+ titles: Readonly<{
12
+ "en-US": "Bug";
13
+ "es-MX": "Error";
14
+ }>;
15
+ }>;
16
+ "product-support": Readonly<{
17
+ slug: "product-support";
18
+ titles: Readonly<{
19
+ "en-US": "Product Support";
20
+ "es-MX": "Compatibilidad con productos";
21
+ }>;
22
+ }>;
23
+ improvement: Readonly<{
24
+ slug: "improvement";
25
+ titles: Readonly<{
26
+ "en-US": "Improvement";
27
+ "es-MX": "Mejora";
28
+ }>;
29
+ }>;
30
+ }>;
@@ -0,0 +1,24 @@
1
+ export const changelogCategories = Object.freeze({
2
+ feature: Object.freeze({
3
+ slug: "feature",
4
+ titles: Object.freeze({
5
+ "en-US": "New Feature",
6
+ "es-MX": "Nueva funcionalidad",
7
+ }),
8
+ }),
9
+ bug: Object.freeze({
10
+ slug: "bug",
11
+ titles: Object.freeze({ "en-US": "Bug", "es-MX": "Error" }),
12
+ }),
13
+ "product-support": Object.freeze({
14
+ slug: "product-support",
15
+ titles: Object.freeze({
16
+ "en-US": "Product Support",
17
+ "es-MX": "Compatibilidad con productos",
18
+ }),
19
+ }),
20
+ improvement: Object.freeze({
21
+ slug: "improvement",
22
+ titles: Object.freeze({ "en-US": "Improvement", "es-MX": "Mejora" }),
23
+ }),
24
+ });
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import { changelogCategories } from "./changelog-categories.js";
1
2
  import type { TranslationKey, Translations } from "./types/localization.js";
3
+ export { changelogCategories } from "./changelog-categories.js";
2
4
  export { enUS } from "./localizations/en-US.js";
3
5
  export { esMX } from "./localizations/es-MX.js";
4
6
  export type { CompleteLocalizationResource, LocalizationResource, TranslationKey, Translations, } from "./types/localization.js";
@@ -6,6 +8,18 @@ export type SupportedLocale = "en-US" | "es-MX";
6
8
  export type MessageKey = TranslationKey;
7
9
  export type Messages = Translations;
8
10
  export type LocalePreference = string | readonly string[] | null | undefined;
11
+ export type ChangelogCategorySlug = keyof typeof changelogCategories;
12
+ export type ChangelogCategory = (typeof changelogCategories)[ChangelogCategorySlug];
13
+ export type ChangelogEntryMetadata = Readonly<{
14
+ title: string;
15
+ datePublished: string;
16
+ dateModified?: string;
17
+ categories: readonly ChangelogCategorySlug[];
18
+ }>;
19
+ export type ChangelogTranslationMetadata = Readonly<{
20
+ title: string;
21
+ }>;
22
+ export declare function getChangelogCategoryTitle(slug: ChangelogCategorySlug, locale: string): string;
9
23
  export declare const DEFAULT_LOCALE = "en-US";
10
24
  export declare const SUPPORTED_LOCALES: readonly ["en-US", "es-MX"];
11
25
  export declare const localizations: Readonly<{
@@ -27,6 +41,19 @@ export declare const localizations: Readonly<{
27
41
  site: {
28
42
  name: string;
29
43
  };
44
+ changelog: {
45
+ allCategories: string;
46
+ copyFailed: string;
47
+ copyLink: string;
48
+ dateModified: string;
49
+ datePublished: string;
50
+ empty: string;
51
+ emptyCategory: string;
52
+ linkCopied: string;
53
+ nextPage: string;
54
+ pageStatus: string;
55
+ previousPage: string;
56
+ };
30
57
  action: {
31
58
  addCollection: string;
32
59
  addColor: string;
@@ -674,6 +701,7 @@ export declare const localizations: Readonly<{
674
701
  accountMenu: string;
675
702
  admin: string;
676
703
  betaFeatures: string;
704
+ changelog: string;
677
705
  collections: string;
678
706
  contact: string;
679
707
  help: string;
@@ -978,6 +1006,19 @@ export declare const localizations: Readonly<{
978
1006
  site: {
979
1007
  name: string;
980
1008
  };
1009
+ changelog: {
1010
+ allCategories: string;
1011
+ copyFailed: string;
1012
+ copyLink: string;
1013
+ dateModified: string;
1014
+ datePublished: string;
1015
+ empty: string;
1016
+ emptyCategory: string;
1017
+ linkCopied: string;
1018
+ nextPage: string;
1019
+ pageStatus: string;
1020
+ previousPage: string;
1021
+ };
981
1022
  action: {
982
1023
  addCollection: string;
983
1024
  addColor: string;
@@ -1625,6 +1666,7 @@ export declare const localizations: Readonly<{
1625
1666
  accountMenu: string;
1626
1667
  admin: string;
1627
1668
  betaFeatures: string;
1669
+ changelog: string;
1628
1670
  collections: string;
1629
1671
  contact: string;
1630
1672
  help: string;
package/dist/index.js CHANGED
@@ -1,7 +1,13 @@
1
+ import { changelogCategories } from "./changelog-categories.js";
1
2
  import { enUS } from "./localizations/en-US.js";
2
3
  import { esMX } from "./localizations/es-MX.js";
4
+ export { changelogCategories } from "./changelog-categories.js";
3
5
  export { enUS } from "./localizations/en-US.js";
4
6
  export { esMX } from "./localizations/es-MX.js";
7
+ export function getChangelogCategoryTitle(slug, locale) {
8
+ const titles = changelogCategories[slug].titles;
9
+ return titles[locale] ?? titles[DEFAULT_LOCALE];
10
+ }
5
11
  export const DEFAULT_LOCALE = "en-US";
6
12
  export const SUPPORTED_LOCALES = Object.freeze(["en-US", "es-MX"]);
7
13
  const localeAliases = new Map([
@@ -25,6 +25,19 @@ export declare const enUS: {
25
25
  site: {
26
26
  name: string;
27
27
  };
28
+ changelog: {
29
+ allCategories: string;
30
+ copyFailed: string;
31
+ copyLink: string;
32
+ dateModified: string;
33
+ datePublished: string;
34
+ empty: string;
35
+ emptyCategory: string;
36
+ linkCopied: string;
37
+ nextPage: string;
38
+ pageStatus: string;
39
+ previousPage: string;
40
+ };
28
41
  action: {
29
42
  addCollection: string;
30
43
  addColor: string;
@@ -672,6 +685,7 @@ export declare const enUS: {
672
685
  accountMenu: string;
673
686
  admin: string;
674
687
  betaFeatures: string;
688
+ changelog: string;
675
689
  collections: string;
676
690
  contact: string;
677
691
  help: string;
@@ -25,6 +25,19 @@ export const enUS = {
25
25
  site: {
26
26
  name: "Pocket Trash",
27
27
  },
28
+ changelog: {
29
+ allCategories: "All categories",
30
+ copyFailed: "Couldn’t copy link",
31
+ copyLink: "Copy link",
32
+ dateModified: "Date Modified",
33
+ datePublished: "Date",
34
+ empty: "No changelog entries yet.",
35
+ emptyCategory: "No entries in this category.",
36
+ linkCopied: "Link copied",
37
+ nextPage: "Next page",
38
+ pageStatus: "Page {page} of {pageCount}",
39
+ previousPage: "Previous page",
40
+ },
28
41
  action: {
29
42
  addCollection: "Add collection",
30
43
  addColor: "Add colour",
@@ -672,6 +685,7 @@ export const enUS = {
672
685
  accountMenu: "Account menu",
673
686
  admin: "Admin",
674
687
  betaFeatures: "Beta features",
688
+ changelog: "Changelog",
675
689
  collections: "Collections",
676
690
  contact: "Contact",
677
691
  help: "Help",
@@ -25,6 +25,19 @@ export declare const esMX: {
25
25
  site: {
26
26
  name: string;
27
27
  };
28
+ changelog: {
29
+ allCategories: string;
30
+ copyFailed: string;
31
+ copyLink: string;
32
+ dateModified: string;
33
+ datePublished: string;
34
+ empty: string;
35
+ emptyCategory: string;
36
+ linkCopied: string;
37
+ nextPage: string;
38
+ pageStatus: string;
39
+ previousPage: string;
40
+ };
28
41
  action: {
29
42
  addCollection: string;
30
43
  addColor: string;
@@ -672,6 +685,7 @@ export declare const esMX: {
672
685
  accountMenu: string;
673
686
  admin: string;
674
687
  betaFeatures: string;
688
+ changelog: string;
675
689
  collections: string;
676
690
  contact: string;
677
691
  help: string;
@@ -25,6 +25,19 @@ export const esMX = {
25
25
  site: {
26
26
  name: "",
27
27
  },
28
+ changelog: {
29
+ allCategories: "Todas las categorías",
30
+ copyFailed: "No se pudo copiar el enlace",
31
+ copyLink: "Copiar enlace",
32
+ dateModified: "Fecha de modificación",
33
+ datePublished: "Fecha",
34
+ empty: "Aún no hay entradas en el registro de cambios.",
35
+ emptyCategory: "No hay entradas en esta categoría.",
36
+ linkCopied: "Enlace copiado",
37
+ nextPage: "Página siguiente",
38
+ pageStatus: "Página {page} de {pageCount}",
39
+ previousPage: "Página anterior",
40
+ },
28
41
  action: {
29
42
  addCollection: "",
30
43
  addColor: "Agregar color",
@@ -672,6 +685,7 @@ export const esMX = {
672
685
  accountMenu: "Menu de cuenta",
673
686
  admin: "Administración",
674
687
  betaFeatures: "Funciones beta",
688
+ changelog: "Registro de cambios",
675
689
  collections: "Colecciones",
676
690
  contact: "Contacto",
677
691
  help: "Ayuda",
@@ -22,6 +22,19 @@ export type CompleteLocalizationResource = Readonly<{
22
22
  site: {
23
23
  name: string;
24
24
  };
25
+ changelog: {
26
+ allCategories: string;
27
+ copyFailed: string;
28
+ copyLink: string;
29
+ dateModified: string;
30
+ datePublished: string;
31
+ empty: string;
32
+ emptyCategory: string;
33
+ linkCopied: string;
34
+ nextPage: string;
35
+ pageStatus: string;
36
+ previousPage: string;
37
+ };
25
38
  action: {
26
39
  addCollection: string;
27
40
  addColor: string;
@@ -669,6 +682,7 @@ export type CompleteLocalizationResource = Readonly<{
669
682
  accountMenu: string;
670
683
  admin: string;
671
684
  betaFeatures: string;
685
+ changelog: string;
672
686
  collections: string;
673
687
  contact: string;
674
688
  help: string;
@@ -1,13 +1,15 @@
1
1
  ---
2
2
  title: Privacy Policy
3
- effectiveDate: 2026-09-30
4
- version: 1.0
3
+ effectiveDate: 2026-10-01
4
+ version: 1.1
5
5
  ---
6
6
 
7
7
  Pocket Trash is a personal, independently operated, non-commercial hobby project based in Ontario, Canada. This voluntary Privacy Policy explains how Pocket Trash ("we," "us," or "our") collects, uses, discloses, retains, and deletes personal information when you use the Pocket Trash website and related services (the "Service").
8
8
 
9
9
  For privacy questions, complaints, or requests, contact the **Privacy Officer** at [privacy@pocket-trash.app](mailto:privacy@pocket-trash.app).
10
10
 
11
+ For maker, content, or intellectual-property reports, contact **Maker and Rights Requests** at [rights@pocket-trash.app](mailto:rights@pocket-trash.app).
12
+
11
13
  ## Information we collect
12
14
 
13
15
  ### Information you provide
@@ -45,7 +47,7 @@ We use personal information to:
45
47
  - create and secure accounts;
46
48
  - provide collections, catalog features, resources, uploads, downloads, and account settings;
47
49
  - show content according to the visibility you select;
48
- - respond to support, privacy, maker-removal, and content reports;
50
+ - respond to support, privacy, maker, content, and intellectual-property requests;
49
51
  - diagnose failures, prevent abuse, and protect users and the Service;
50
52
  - comply with legal obligations and apply our Terms of Service; and
51
53
  - maintain records needed for security, legal claims, and service administration.
@@ -151,3 +153,5 @@ We may update this Policy when our practices, providers, or legal obligations ch
151
153
  Contact the **Pocket Trash Privacy Officer** at [privacy@pocket-trash.app](mailto:privacy@pocket-trash.app).
152
154
 
153
155
  You may also complain to the privacy regulator with authority where you live. We invite you to contact us first so we can address your concern.
156
+
157
+ For maker, content, or intellectual-property reports, contact **Maker and Rights Requests** at [rights@pocket-trash.app](mailto:rights@pocket-trash.app).
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Terms of Service
3
- effectiveDate: 2026-09-30
4
- version: 1.0
3
+ effectiveDate: 2026-10-01
4
+ version: 1.1
5
5
  ---
6
6
 
7
7
  Pocket Trash is a personal, independently operated, non-commercial hobby project based in Ontario, Canada. These Terms of Service ("Terms") state the rules for accessing the Pocket Trash website and related services (the "Service"). In these Terms, "Pocket Trash," "we," "us," and "our" mean the individual operator acting through the Pocket Trash project.
@@ -73,9 +73,11 @@ You may not use the Service to:
73
73
  - upload sexual content involving minors or other unlawful or exploitative material; or
74
74
  - use another person's personal information without a lawful basis.
75
75
 
76
- ## 7. Reports, removals, and moderation
76
+ ## 7. Reports, Maker and Rights Requests, and moderation
77
77
 
78
- Send content reports, privacy complaints, and rights claims to [privacy@pocket-trash.app](mailto:privacy@pocket-trash.app). Include enough information for us to identify the content, understand the concern, and contact you.
78
+ Send privacy complaints and requests to [privacy@pocket-trash.app](mailto:privacy@pocket-trash.app). Send content reports, correction or removal requests, and intellectual-property concerns to [rights@pocket-trash.app](mailto:rights@pocket-trash.app). Include enough information for us to identify the content, understand the concern, and contact you.
79
+
80
+ ### Maker and Rights Requests
79
81
 
80
82
  A maker or rights holder who asks us to remove a product record or image should provide:
81
83
 
@@ -86,17 +88,15 @@ A maker or rights holder who asks us to remove a product record or image should
86
88
 
87
89
  Pocket Trash may review, restrict, make private, or remove content that violates these Terms, creates risk, or infringes another person's rights. We may suspend or terminate accounts involved in serious or repeated violations. We will consider the circumstances and any rights that applicable law gives you.
88
90
 
89
- Do not label a request as a statutory copyright notice unless it meets the requirements of the applicable process. Pocket Trash does not currently offer a formal United States DMCA notice process.
90
-
91
91
  ## 8. Catalog data and third-party rights
92
92
 
93
- The Service may contain product names, images, specifications, files, trademarks, and other material supplied by users, makers, or other third parties.
93
+ The Service may contain product names, images, descriptions, specifications, files, trademarks, and other material supplied by users, makers, or other third parties.
94
94
 
95
- Pocket Trash does not claim affiliation with a maker merely because the Service refers to that maker or its products. The relevant owners keep their rights in third-party names, marks, and content.
95
+ Pocket Trash does not claim ownership of third-party product names, trademarks, photographs, descriptions, specifications, or other materials. Those materials remain the property of their respective owners and appear for product identification and reference.
96
96
 
97
- Users remain responsible for material they contribute. Contact [privacy@pocket-trash.app](mailto:privacy@pocket-trash.app) to request correction or removal.
97
+ Pocket Trash does not claim affiliation with a maker merely because the Service refers to that maker or its products. Where available, catalog records may link to the maker's main website for reference.
98
98
 
99
- The presence of third-party material does not mean that its owner sponsors, endorses, or is affiliated with Pocket Trash. A rights holder may request review or removal using the contact above.
99
+ Users remain responsible for material they contribute. The presence of third-party material does not mean that its owner sponsors, endorses, or is affiliated with Pocket Trash. A maker or rights holder may request review, correction, or removal at [rights@pocket-trash.app](mailto:rights@pocket-trash.app).
100
100
 
101
101
  ## 9. Pocket Trash property
102
102
 
@@ -146,7 +146,7 @@ Courts located in Ontario will have jurisdiction, subject to any mandatory right
146
146
 
147
147
  We may update these Terms to reflect changes to the Service, law, or our operations. We will post the updated Terms with a new effective date. When reasonably possible and when applicable law requires it, we will provide additional notice in the Service or by email before a material change takes effect.
148
148
 
149
- We will ask you to accept a new version when the change affects the content licence, acceptable-use rules, dispute terms, or another material right or obligation.
149
+ For a material change, we will provide any additional notice or renewed acceptance that applicable law requires.
150
150
 
151
151
  ## 18. General terms
152
152
 
@@ -161,3 +161,7 @@ These Terms, the Privacy Policy, and any additional terms presented for a specif
161
161
  **Pocket Trash Privacy Officer**
162
162
 
163
163
  [privacy@pocket-trash.app](mailto:privacy@pocket-trash.app)
164
+
165
+ **Maker and Rights Requests**
166
+
167
+ [rights@pocket-trash.app](mailto:rights@pocket-trash.app)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pocket-trash/localizations",
3
- "version": "0.23.0",
3
+ "version": "0.23.2",
4
4
  "description": "Shared localization utilities and message catalogs for Pocket Trash.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -10,11 +10,13 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js"
12
12
  },
13
+ "./changelog/*.mdx": "./changelog/*.mdx",
13
14
  "./help/*.mdx": "./help/*.mdx",
14
15
  "./legal/*.mdx": "./legal/*.mdx"
15
16
  },
16
17
  "files": [
17
18
  "dist",
19
+ "changelog",
18
20
  "help",
19
21
  "legal"
20
22
  ],
@@ -53,6 +55,7 @@
53
55
  "agent-skills:update": "npx skills add pocket-trash/skills --skill '*' --agent codex claude-code -y",
54
56
  "build": "tsc -p tsconfig.json",
55
57
  "check": "biome check --write .",
58
+ "changelog:validate": "node scripts/validate-changelog.mjs",
56
59
  "changeset": "changeset",
57
60
  "changeset:version": "changeset version && node scripts/stamp-changelog-release-date.mjs",
58
61
  "dev": "tsc -p tsconfig.json --watch",
@@ -61,6 +64,6 @@
61
64
  "localization:create": "node scripts/localizations.mjs create",
62
65
  "localization:sync": "node scripts/localizations.mjs sync",
63
66
  "release": "npm whoami && pnpm run changeset:version && pnpm install --lockfile-only && git add package.json pnpm-lock.yaml CHANGELOG.md .changeset && git commit -m \"chore: version packages [skip ci]\" && changeset publish && git push --follow-tags && VERSION=$(node -p \"require('./package.json').version\") && gh release create \"v$VERSION\" --title \"v$VERSION\" --generate-notes --verify-tag",
64
- "test": "pnpm run build && node --test"
67
+ "test": "pnpm changelog:validate && pnpm run build && node --test"
65
68
  }
66
69
  }