@jjlmoya/utils-sports 1.16.0 → 1.18.0

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.
Files changed (68) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/ru.ts +4 -4
  3. package/src/category/index.ts +5 -1
  4. package/src/entries.ts +7 -1
  5. package/src/tests/locale_completeness.test.ts +1 -1
  6. package/src/tests/no_en_dash.test.ts +41 -0
  7. package/src/tests/tool_validation.test.ts +2 -2
  8. package/src/tool/basketScoreKeeper/basketball-scoreboard.css +844 -0
  9. package/src/tool/basketScoreKeeper/bibliography.astro +6 -0
  10. package/src/tool/basketScoreKeeper/bibliography.ts +13 -0
  11. package/src/tool/basketScoreKeeper/component.astro +115 -0
  12. package/src/tool/basketScoreKeeper/entry.ts +32 -0
  13. package/src/tool/basketScoreKeeper/i18n/de.ts +224 -0
  14. package/src/tool/basketScoreKeeper/i18n/en.ts +225 -0
  15. package/src/tool/basketScoreKeeper/i18n/es.ts +224 -0
  16. package/src/tool/basketScoreKeeper/i18n/fr.ts +224 -0
  17. package/src/tool/basketScoreKeeper/i18n/id.ts +224 -0
  18. package/src/tool/basketScoreKeeper/i18n/it.ts +224 -0
  19. package/src/tool/basketScoreKeeper/i18n/ja.ts +224 -0
  20. package/src/tool/basketScoreKeeper/i18n/ko.ts +224 -0
  21. package/src/tool/basketScoreKeeper/i18n/nl.ts +224 -0
  22. package/src/tool/basketScoreKeeper/i18n/pl.ts +224 -0
  23. package/src/tool/basketScoreKeeper/i18n/pt.ts +224 -0
  24. package/src/tool/basketScoreKeeper/i18n/ru.ts +224 -0
  25. package/src/tool/basketScoreKeeper/i18n/sv.ts +224 -0
  26. package/src/tool/basketScoreKeeper/i18n/tr.ts +224 -0
  27. package/src/tool/basketScoreKeeper/i18n/zh.ts +224 -0
  28. package/src/tool/basketScoreKeeper/index.ts +10 -0
  29. package/src/tool/basketScoreKeeper/logic.ts +252 -0
  30. package/src/tool/basketScoreKeeper/seo.astro +15 -0
  31. package/src/tool/basketScoreKeeper/ui.ts +12 -0
  32. package/src/tool/footballScoreKeeper/bibliography.astro +6 -0
  33. package/src/tool/footballScoreKeeper/bibliography.ts +12 -0
  34. package/src/tool/footballScoreKeeper/component.astro +83 -0
  35. package/src/tool/footballScoreKeeper/entry.ts +31 -0
  36. package/src/tool/footballScoreKeeper/football-scorekeeper.css +858 -0
  37. package/src/tool/footballScoreKeeper/i18n/de.ts +215 -0
  38. package/src/tool/footballScoreKeeper/i18n/en.ts +215 -0
  39. package/src/tool/footballScoreKeeper/i18n/es.ts +215 -0
  40. package/src/tool/footballScoreKeeper/i18n/fr.ts +215 -0
  41. package/src/tool/footballScoreKeeper/i18n/id.ts +215 -0
  42. package/src/tool/footballScoreKeeper/i18n/it.ts +215 -0
  43. package/src/tool/footballScoreKeeper/i18n/ja.ts +215 -0
  44. package/src/tool/footballScoreKeeper/i18n/ko.ts +215 -0
  45. package/src/tool/footballScoreKeeper/i18n/nl.ts +215 -0
  46. package/src/tool/footballScoreKeeper/i18n/pl.ts +215 -0
  47. package/src/tool/footballScoreKeeper/i18n/pt.ts +215 -0
  48. package/src/tool/footballScoreKeeper/i18n/ru.ts +215 -0
  49. package/src/tool/footballScoreKeeper/i18n/sv.ts +215 -0
  50. package/src/tool/footballScoreKeeper/i18n/tr.ts +215 -0
  51. package/src/tool/footballScoreKeeper/i18n/zh.ts +215 -0
  52. package/src/tool/footballScoreKeeper/index.ts +9 -0
  53. package/src/tool/footballScoreKeeper/logic.ts +220 -0
  54. package/src/tool/footballScoreKeeper/seo.astro +15 -0
  55. package/src/tool/footballScoreKeeper/ui.ts +11 -0
  56. package/src/tool/gymTracker/i18n/ru.ts +5 -5
  57. package/src/tool/tournamentBracket/i18n/de.ts +1 -1
  58. package/src/tool/tournamentBracket/i18n/en.ts +1 -1
  59. package/src/tool/tournamentBracket/i18n/es.ts +1 -1
  60. package/src/tool/tournamentBracket/i18n/fr.ts +1 -1
  61. package/src/tool/tournamentBracket/i18n/id.ts +1 -1
  62. package/src/tool/tournamentBracket/i18n/it.ts +1 -1
  63. package/src/tool/tournamentBracket/i18n/nl.ts +1 -1
  64. package/src/tool/tournamentBracket/i18n/pl.ts +1 -1
  65. package/src/tool/tournamentBracket/i18n/pt.ts +1 -1
  66. package/src/tool/tournamentBracket/i18n/sv.ts +1 -1
  67. package/src/tool/tournamentBracket/i18n/tr.ts +2 -2
  68. package/src/tools.ts +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-sports",
3
- "version": "1.16.0",
3
+ "version": "1.18.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -1,4 +1,4 @@
1
- import type { CategoryLocaleContent } from '../../types';
1
+ import type { CategoryLocaleContent } from '../../types';
2
2
 
3
3
  export const content: CategoryLocaleContent = {
4
4
  slug: 'sports',
@@ -17,7 +17,7 @@ export const content: CategoryLocaleContent = {
17
17
  },
18
18
  {
19
19
  type: 'paragraph',
20
- html: 'От измерения скорости нервно-мышечной реакции до управления турнирными сетками на выбывание наши калькуляторы применяют алгоритмическую и статистическую логику, чтобы вы могли сосредоточиться на самом важном: раздвижении своих границ.',
20
+ html: 'От измерения скорости нервно-мышечной реакции до управления турнирными сетками на выбывание : наши калькуляторы применяют алгоритмическую и статистическую логику, чтобы вы могли сосредоточиться на самом важном: раздвижении своих границ.',
21
21
  },
22
22
  {
23
23
  type: 'title',
@@ -71,11 +71,11 @@ export const content: CategoryLocaleContent = {
71
71
  },
72
72
  {
73
73
  type: 'paragraph',
74
- html: 'Ваше сердце самый точный индикатор усилий. Максимальная частота сердечных сокращений (МЧСС) зависит от возраста, генетики и сердечно-сосудистых способностей. Правильный расчет позволяет тренироваться в определенных зонах: аэробная зона (60-70% МЧСС) для базовой выносливости, анаэробная зона (80-90% МЧСС) для взрывной активности, зона VO2 max (95-100%) для кардиореспираторной способности.',
74
+ html: 'Ваше сердце : самый точный индикатор усилий. Максимальная частота сердечных сокращений (МЧСС) зависит от возраста, генетики и сердечно-сосудистых способностей. Правильный расчет позволяет тренироваться в определенных зонах: аэробная зона (60-70% МЧСС) для базовой выносливости, анаэробная зона (80-90% МЧСС) для взрывной активности, зона VO2 max (95-100%) для кардиореспираторной способности.',
75
75
  },
76
76
  {
77
77
  type: 'paragraph',
78
- html: 'Распространенная ошибка тренироваться слишком интенсивно слишком часто. Большая часть тренировок должна проходить в аэробной зоне (низкая интенсивность, большая продолжительность), создавая прочный фундамент. Оптимально проводить всего 1-2 сессии в неделю в высокоинтенсивных зонах во избежание перетренированности. Наши инструменты позволяют рассчитать зоны на основе возраста и уровня физической подготовки, гарантируя, что каждая сессия имеет четкую физиологическую цель.',
78
+ html: 'Распространенная ошибка : тренироваться слишком интенсивно слишком часто. Большая часть тренировок должна проходить в аэробной зоне (низкая интенсивность, большая продолжительность), создавая прочный фундамент. Оптимально проводить всего 1-2 сессии в неделю в высокоинтенсивных зонах во избежание перетренированности. Наши инструменты позволяют рассчитать зоны на основе возраста и уровня физической подготовки, гарантируя, что каждая сессия имеет четкую физиологическую цель.',
79
79
  },
80
80
  {
81
81
  type: 'title',
@@ -1,12 +1,16 @@
1
1
  import type { SportsCategoryEntry, SportsToolEntry } from '../types';
2
+ import { basketScoreKeeper } from '../tool/basketScoreKeeper/index';
3
+ import { footballScoreKeeper } from '../tool/footballScoreKeeper/index';
2
4
  import { scoreKeeper } from '../tool/scoreKeeper/index';
3
5
  import { tournamentBracket } from '../tool/tournamentBracket/index';
4
6
  import { gymTracker } from '../tool/gymTracker/index';
5
7
  import { reactionTester } from '../tool/reactionTester/index';
6
8
 
7
9
  export const sportsCategory: SportsCategoryEntry = {
8
- icon: 'mdi:basketball',
10
+ icon: 'mdi:soccer',
9
11
  tools: [
12
+ footballScoreKeeper,
13
+ basketScoreKeeper,
10
14
  scoreKeeper,
11
15
  tournamentBracket,
12
16
  gymTracker,
package/src/entries.ts CHANGED
@@ -1,3 +1,7 @@
1
+ export { basketScoreKeeper } from './tool/basketScoreKeeper/entry';
2
+ export type { BasketScoreKeeperLocaleContent } from './tool/basketScoreKeeper/entry';
3
+ export { footballScoreKeeper } from './tool/footballScoreKeeper/entry';
4
+ export type { FootballScoreKeeperLocaleContent } from './tool/footballScoreKeeper/entry';
1
5
  export { gymTracker } from './tool/gymTracker/entry';
2
6
  export type { GymTrackerLocaleContent } from './tool/gymTracker/entry';
3
7
  export { reactionTester } from './tool/reactionTester/entry';
@@ -7,8 +11,10 @@ export type { ScoreKeeperLocaleContent } from './tool/scoreKeeper/entry';
7
11
  export { tournamentBracket } from './tool/tournamentBracket/entry';
8
12
  export type { TournamentBracketLocaleContent } from './tool/tournamentBracket/entry';
9
13
  export { sportsCategory } from './category';
14
+ import { basketScoreKeeper } from './tool/basketScoreKeeper/entry';
15
+ import { footballScoreKeeper } from './tool/footballScoreKeeper/entry';
10
16
  import { gymTracker } from './tool/gymTracker/entry';
11
17
  import { reactionTester } from './tool/reactionTester/entry';
12
18
  import { scoreKeeper } from './tool/scoreKeeper/entry';
13
19
  import { tournamentBracket } from './tool/tournamentBracket/entry';
14
- export const ALL_ENTRIES = [gymTracker, reactionTester, scoreKeeper, tournamentBracket];
20
+ export const ALL_ENTRIES = [basketScoreKeeper, footballScoreKeeper, gymTracker, reactionTester, scoreKeeper, tournamentBracket];
@@ -3,6 +3,6 @@ import { ALL_TOOLS } from '../tools';
3
3
 
4
4
  describe('Locale Completeness Validation', () => {
5
5
  it('all tools registered', () => {
6
- expect(ALL_TOOLS.length).toBe(4);
6
+ expect(ALL_TOOLS.length).toBe(6);
7
7
  });
8
8
  });
@@ -0,0 +1,41 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+
5
+ function getFiles(dir: string): string[] {
6
+ const results: string[] = [];
7
+ if (!fs.existsSync(dir)) {
8
+ return results;
9
+ }
10
+ const list = fs.readdirSync(dir);
11
+ for (const file of list) {
12
+ const fullPath = path.join(dir, file);
13
+ const stat = fs.statSync(fullPath);
14
+ if (stat && stat.isDirectory()) {
15
+ if (file !== 'tests' && file !== 'node_modules' && file !== '.astro') {
16
+ results.push(...getFiles(fullPath));
17
+ }
18
+ } else {
19
+ results.push(fullPath);
20
+ }
21
+ }
22
+ return results;
23
+ }
24
+
25
+ const srcDir = path.join(process.cwd(), 'src');
26
+ const scriptsDir = path.join(process.cwd(), 'scripts');
27
+ const filesToTest = [
28
+ ...getFiles(srcDir),
29
+ ...getFiles(scriptsDir),
30
+ ];
31
+
32
+ describe('En-Dash Character Validation', () => {
33
+ filesToTest.forEach((filePath) => {
34
+ const relativePath = path.relative(process.cwd(), filePath);
35
+ it(`should not contain en-dash in ${relativePath}`, () => {
36
+ const content = fs.readFileSync(filePath, 'utf-8');
37
+ const hasEnDash = content.includes('\u2013') || content.includes('–') || content.includes('—');
38
+ expect(hasEnDash).toBe(false);
39
+ });
40
+ });
41
+ });
@@ -4,8 +4,8 @@ import { sportsCategory } from '../data';
4
4
 
5
5
  describe('Tool Validation Suite', () => {
6
6
  describe('Library Registration', () => {
7
- it('should have 4 tools in ALL_TOOLS', () => {
8
- expect(ALL_TOOLS.length).toBe(4);
7
+ it('should have 6 tools in ALL_TOOLS', () => {
8
+ expect(ALL_TOOLS.length).toBe(6);
9
9
  });
10
10
 
11
11
  it('sportsCategory should be defined', () => {