From a6bccea8221e53ce85aa880b020adb617539f414 Mon Sep 17 00:00:00 2001
From: Ivan Kuzmenko <6745157+rndtrash@users.noreply.github.com>
Date: Sun, 16 Nov 2025 06:24:33 +0300
Subject: [PATCH 1/2] =?UTF-8?q?=D0=A5=D0=B5=D0=BB=D0=BF=D0=B5=D1=80=D1=8B?=
=?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?=
=?UTF-8?q?=D1=81=20=D0=B4=D0=B0=D1=82=D0=B0=D0=BC=D0=B8=20+=20polyfill=20?=
=?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B2=D0=B5=D0=B6=D0=B5=D0=B3=D0=BE?=
=?UTF-8?q?=20API=202025=20=D0=B3=D0=BE=D0=B4=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.eslintrc.js | 4 +--
package-lock.json | 51 +++++++++++++++++++++++++++-
package.json | 5 ++-
src/app.d.ts | 13 +++++++
src/lib/components/DateWidget.svelte | 36 +++++++++++++-------
src/lib/util/Dates.ts | 42 +++++++++++++++++++++++
6 files changed, 134 insertions(+), 17 deletions(-)
create mode 100644 src/lib/util/Dates.ts
diff --git a/.eslintrc.js b/.eslintrc.js
index 477d7a8..1c34b9a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -10,12 +10,12 @@ module.exports = {
plugins: ['@typescript-eslint'],
parserOptions: {
sourceType: 'module',
- ecmaVersion: 2020,
+ ecmaVersion: 2024,
extraFileExtensions: ['.svelte']
},
env: {
browser: true,
- es2017: true,
+ es2024: true,
node: true
},
rules: {
diff --git a/package-lock.json b/package-lock.json
index 5438b0e..6a6592f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,9 @@
"": {
"name": "teasanctuary-ru",
"version": "0.0.1",
+ "dependencies": {
+ "@formatjs/intl-durationformat": "^0.7.6"
+ },
"devDependencies": {
"@iconify/svelte": "^4.2.0",
"@react2svelte/swipeable": "^0.1.4",
@@ -619,6 +622,47 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz",
+ "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@formatjs/fast-memoize": "2.2.7",
+ "@formatjs/intl-localematcher": "0.6.2",
+ "decimal.js": "^10.4.3",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz",
+ "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/intl-durationformat": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-durationformat/-/intl-durationformat-0.7.6.tgz",
+ "integrity": "sha512-jatAN3E84X6aP2UOGK1jTrwD1a7BiG3qWUSEDAhtyNd1BgYeS5wQPtXlnuGF1QRx0DjnwwNOIssyd7oQoRlQeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.3.6",
+ "@formatjs/intl-localematcher": "0.6.2",
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz",
+ "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
"node_modules/@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@@ -1960,6 +2004,12 @@
}
}
},
+ "node_modules/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "license": "MIT"
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -4097,7 +4147,6 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
"license": "0BSD"
},
"node_modules/type-check": {
diff --git a/package.json b/package.json
index ee4f7bc..b211b22 100644
--- a/package.json
+++ b/package.json
@@ -41,5 +41,8 @@
"typescript": "^5.7.3",
"vite": "^6.2.0"
},
- "type": "module"
+ "type": "module",
+ "dependencies": {
+ "@formatjs/intl-durationformat": "^0.7.6"
+ }
}
diff --git a/src/app.d.ts b/src/app.d.ts
index db32518..520d030 100644
--- a/src/app.d.ts
+++ b/src/app.d.ts
@@ -1,4 +1,17 @@
+import type {
+ DurationFormatConstructor,
+ DurationFormatOptions as _DurationFormatOptions,
+ DurationInput as _DurationInput,
+} from '@formatjs/intl-durationformat/src/types';
+
declare global {
+ // rndtrash: Терпим. https://github.com/microsoft/TypeScript/issues/60608
+ namespace Intl {
+ const DurationFormat: DurationFormatConstructor;
+ type DurationFormatOptions = _DurationFormatOptions;
+ type DurationInput = _DurationInput;
+ }
+
namespace App {
interface Route {
label: string;
diff --git a/src/lib/components/DateWidget.svelte b/src/lib/components/DateWidget.svelte
index 69ab90d..fd52c69 100644
--- a/src/lib/components/DateWidget.svelte
+++ b/src/lib/components/DateWidget.svelte
@@ -1,15 +1,27 @@
@@ -19,14 +31,12 @@
{highlightClasses(type == 'published' ? 'bg-amber-600' : 'bg-purple-600')}
{highlightClasses('text-slate-50')}"
>
-
В данной заметке упоминаются наши проекты:
@@ -93,4 +167,4 @@ sm:text-xl lg:p-8" >