@jjlmoya/utils-chrono 1.3.0 → 1.5.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 (196) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +11 -9
  3. package/src/category/i18n/en.ts +11 -9
  4. package/src/category/i18n/fr.ts +11 -9
  5. package/src/category/i18n/id.ts +11 -9
  6. package/src/category/i18n/it.ts +11 -9
  7. package/src/category/i18n/ja.ts +11 -9
  8. package/src/category/i18n/ko.ts +11 -9
  9. package/src/category/i18n/nl.ts +11 -9
  10. package/src/category/i18n/pl.ts +11 -9
  11. package/src/category/i18n/pt.ts +11 -9
  12. package/src/category/i18n/ru.ts +11 -9
  13. package/src/category/i18n/sv.ts +11 -9
  14. package/src/category/i18n/tr.ts +11 -9
  15. package/src/category/i18n/zh.ts +11 -9
  16. package/src/category/index.ts +8 -0
  17. package/src/entries.ts +13 -1
  18. package/src/index.ts +4 -0
  19. package/src/tests/locale_completeness.test.ts +1 -1
  20. package/src/tests/no_en_dash.test.ts +41 -0
  21. package/src/tests/no_h1_in_components.test.ts +1 -1
  22. package/src/tests/tool_validation.test.ts +1 -1
  23. package/src/tool/beat-rate-converter/bibliography.ts +1 -1
  24. package/src/tool/beat-rate-converter/components/ConverterPanel.astro +57 -20
  25. package/src/tool/beat-rate-converter/i18n/en.ts +5 -5
  26. package/src/tool/crown-reference-guide/bibliography.ts +3 -3
  27. package/src/tool/crown-reference-guide/i18n/de.ts +37 -29
  28. package/src/tool/crown-reference-guide/i18n/en.ts +38 -30
  29. package/src/tool/crown-reference-guide/i18n/es.ts +36 -28
  30. package/src/tool/crown-reference-guide/i18n/fr.ts +38 -30
  31. package/src/tool/crown-reference-guide/i18n/id.ts +38 -30
  32. package/src/tool/crown-reference-guide/i18n/it.ts +38 -30
  33. package/src/tool/crown-reference-guide/i18n/ja.ts +38 -30
  34. package/src/tool/crown-reference-guide/i18n/ko.ts +38 -30
  35. package/src/tool/crown-reference-guide/i18n/nl.ts +38 -30
  36. package/src/tool/crown-reference-guide/i18n/pl.ts +38 -30
  37. package/src/tool/crown-reference-guide/i18n/pt.ts +38 -30
  38. package/src/tool/crown-reference-guide/i18n/ru.ts +41 -33
  39. package/src/tool/crown-reference-guide/i18n/sv.ts +38 -30
  40. package/src/tool/crown-reference-guide/i18n/tr.ts +38 -30
  41. package/src/tool/crown-reference-guide/i18n/zh.ts +37 -29
  42. package/src/tool/demagnetizing-timer/components/TimerPanel.astro +45 -17
  43. package/src/tool/demagnetizing-timer/i18n/de.ts +3 -3
  44. package/src/tool/demagnetizing-timer/i18n/en.ts +2 -2
  45. package/src/tool/demagnetizing-timer/i18n/es.ts +2 -2
  46. package/src/tool/demagnetizing-timer/i18n/fr.ts +1 -1
  47. package/src/tool/demagnetizing-timer/i18n/id.ts +2 -2
  48. package/src/tool/demagnetizing-timer/i18n/it.ts +2 -2
  49. package/src/tool/demagnetizing-timer/i18n/ja.ts +1 -1
  50. package/src/tool/demagnetizing-timer/i18n/ko.ts +1 -1
  51. package/src/tool/demagnetizing-timer/i18n/nl.ts +2 -2
  52. package/src/tool/demagnetizing-timer/i18n/pl.ts +3 -3
  53. package/src/tool/demagnetizing-timer/i18n/pt.ts +2 -2
  54. package/src/tool/demagnetizing-timer/i18n/ru.ts +10 -10
  55. package/src/tool/demagnetizing-timer/i18n/sv.ts +2 -2
  56. package/src/tool/demagnetizing-timer/i18n/tr.ts +2 -2
  57. package/src/tool/demagnetizing-timer/i18n/zh.ts +1 -1
  58. package/src/tool/lume-color-simulator/bibliography.astro +16 -0
  59. package/src/tool/lume-color-simulator/bibliography.ts +16 -0
  60. package/src/tool/lume-color-simulator/client.ts +186 -0
  61. package/src/tool/lume-color-simulator/component.astro +17 -0
  62. package/src/tool/lume-color-simulator/components/LumePanel.astro +98 -0
  63. package/src/tool/lume-color-simulator/entry.ts +57 -0
  64. package/src/tool/lume-color-simulator/i18n/de.ts +174 -0
  65. package/src/tool/lume-color-simulator/i18n/en.ts +174 -0
  66. package/src/tool/lume-color-simulator/i18n/es.ts +174 -0
  67. package/src/tool/lume-color-simulator/i18n/fr.ts +174 -0
  68. package/src/tool/lume-color-simulator/i18n/id.ts +174 -0
  69. package/src/tool/lume-color-simulator/i18n/it.ts +175 -0
  70. package/src/tool/lume-color-simulator/i18n/ja.ts +174 -0
  71. package/src/tool/lume-color-simulator/i18n/ko.ts +174 -0
  72. package/src/tool/lume-color-simulator/i18n/nl.ts +175 -0
  73. package/src/tool/lume-color-simulator/i18n/pl.ts +174 -0
  74. package/src/tool/lume-color-simulator/i18n/pt.ts +174 -0
  75. package/src/tool/lume-color-simulator/i18n/ru.ts +174 -0
  76. package/src/tool/lume-color-simulator/i18n/sv.ts +174 -0
  77. package/src/tool/lume-color-simulator/i18n/tr.ts +174 -0
  78. package/src/tool/lume-color-simulator/i18n/zh.ts +174 -0
  79. package/src/tool/lume-color-simulator/index.ts +11 -0
  80. package/src/tool/lume-color-simulator/lume-color-simulator.css +208 -0
  81. package/src/tool/lume-color-simulator/seo.astro +16 -0
  82. package/src/tool/moon-phase-visualizer/bibliography.astro +16 -0
  83. package/src/tool/moon-phase-visualizer/bibliography.ts +16 -0
  84. package/src/tool/moon-phase-visualizer/client.ts +243 -0
  85. package/src/tool/moon-phase-visualizer/component.astro +17 -0
  86. package/src/tool/moon-phase-visualizer/components/MoonPanel.astro +63 -0
  87. package/src/tool/moon-phase-visualizer/entry.ts +51 -0
  88. package/src/tool/moon-phase-visualizer/i18n/de.ts +175 -0
  89. package/src/tool/moon-phase-visualizer/i18n/en.ts +175 -0
  90. package/src/tool/moon-phase-visualizer/i18n/es.ts +175 -0
  91. package/src/tool/moon-phase-visualizer/i18n/fr.ts +175 -0
  92. package/src/tool/moon-phase-visualizer/i18n/id.ts +175 -0
  93. package/src/tool/moon-phase-visualizer/i18n/it.ts +176 -0
  94. package/src/tool/moon-phase-visualizer/i18n/ja.ts +175 -0
  95. package/src/tool/moon-phase-visualizer/i18n/ko.ts +175 -0
  96. package/src/tool/moon-phase-visualizer/i18n/nl.ts +176 -0
  97. package/src/tool/moon-phase-visualizer/i18n/pl.ts +175 -0
  98. package/src/tool/moon-phase-visualizer/i18n/pt.ts +175 -0
  99. package/src/tool/moon-phase-visualizer/i18n/ru.ts +175 -0
  100. package/src/tool/moon-phase-visualizer/i18n/sv.ts +175 -0
  101. package/src/tool/moon-phase-visualizer/i18n/tr.ts +175 -0
  102. package/src/tool/moon-phase-visualizer/i18n/zh.ts +175 -0
  103. package/src/tool/moon-phase-visualizer/index.ts +11 -0
  104. package/src/tool/moon-phase-visualizer/moon-phase-visualizer.css +216 -0
  105. package/src/tool/moon-phase-visualizer/seo.astro +16 -0
  106. package/src/tool/power-reserve-estimator/bibliography.ts +2 -2
  107. package/src/tool/power-reserve-estimator/components/EstimatorPanel.astro +146 -39
  108. package/src/tool/power-reserve-estimator/i18n/de.ts +2 -2
  109. package/src/tool/power-reserve-estimator/i18n/en.ts +3 -3
  110. package/src/tool/power-reserve-estimator/i18n/es.ts +2 -2
  111. package/src/tool/power-reserve-estimator/i18n/fr.ts +2 -2
  112. package/src/tool/power-reserve-estimator/i18n/id.ts +2 -2
  113. package/src/tool/power-reserve-estimator/i18n/it.ts +2 -2
  114. package/src/tool/power-reserve-estimator/i18n/nl.ts +2 -2
  115. package/src/tool/power-reserve-estimator/i18n/pt.ts +2 -2
  116. package/src/tool/strap-taper-calculator/i18n/en.ts +2 -2
  117. package/src/tool/strap-taper-calculator/i18n/ru.ts +4 -4
  118. package/src/tool/tachymeter-calculator/bibliography.astro +16 -0
  119. package/src/tool/tachymeter-calculator/bibliography.ts +16 -0
  120. package/src/tool/tachymeter-calculator/client.ts +180 -0
  121. package/src/tool/tachymeter-calculator/component.astro +15 -0
  122. package/src/tool/tachymeter-calculator/components/CalculatorPanel.astro +121 -0
  123. package/src/tool/tachymeter-calculator/entry.ts +43 -0
  124. package/src/tool/tachymeter-calculator/i18n/de.ts +172 -0
  125. package/src/tool/tachymeter-calculator/i18n/en.ts +172 -0
  126. package/src/tool/tachymeter-calculator/i18n/es.ts +172 -0
  127. package/src/tool/tachymeter-calculator/i18n/fr.ts +172 -0
  128. package/src/tool/tachymeter-calculator/i18n/id.ts +172 -0
  129. package/src/tool/tachymeter-calculator/i18n/it.ts +172 -0
  130. package/src/tool/tachymeter-calculator/i18n/ja.ts +172 -0
  131. package/src/tool/tachymeter-calculator/i18n/ko.ts +172 -0
  132. package/src/tool/tachymeter-calculator/i18n/nl.ts +172 -0
  133. package/src/tool/tachymeter-calculator/i18n/pl.ts +172 -0
  134. package/src/tool/tachymeter-calculator/i18n/pt.ts +172 -0
  135. package/src/tool/tachymeter-calculator/i18n/ru.ts +172 -0
  136. package/src/tool/tachymeter-calculator/i18n/sv.ts +172 -0
  137. package/src/tool/tachymeter-calculator/i18n/tr.ts +172 -0
  138. package/src/tool/tachymeter-calculator/i18n/zh.ts +172 -0
  139. package/src/tool/tachymeter-calculator/index.ts +11 -0
  140. package/src/tool/tachymeter-calculator/seo.astro +16 -0
  141. package/src/tool/tachymeter-calculator/tachymeter-calculator.css +492 -0
  142. package/src/tool/tachymeter-calculator/utils.ts +10 -0
  143. package/src/tool/watch-accuracy-tracker/i18n/pl.ts +1 -1
  144. package/src/tool/watch-accuracy-tracker/i18n/ru.ts +6 -6
  145. package/src/tool/watch-savings-planner/i18n/en.ts +5 -5
  146. package/src/tool/watch-size-comparator/bibliography.astro +16 -0
  147. package/src/tool/watch-size-comparator/bibliography.ts +16 -0
  148. package/src/tool/watch-size-comparator/client.ts +287 -0
  149. package/src/tool/watch-size-comparator/component.astro +17 -0
  150. package/src/tool/watch-size-comparator/components/WatchForm.astro +121 -0
  151. package/src/tool/watch-size-comparator/drawing/index.ts +79 -0
  152. package/src/tool/watch-size-comparator/drawing/measures.ts +57 -0
  153. package/src/tool/watch-size-comparator/drawing/utils.ts +37 -0
  154. package/src/tool/watch-size-comparator/drawing/watch.ts +78 -0
  155. package/src/tool/watch-size-comparator/entry.ts +62 -0
  156. package/src/tool/watch-size-comparator/i18n/de.ts +189 -0
  157. package/src/tool/watch-size-comparator/i18n/en.ts +189 -0
  158. package/src/tool/watch-size-comparator/i18n/es.ts +189 -0
  159. package/src/tool/watch-size-comparator/i18n/fr.ts +189 -0
  160. package/src/tool/watch-size-comparator/i18n/id.ts +189 -0
  161. package/src/tool/watch-size-comparator/i18n/it.ts +190 -0
  162. package/src/tool/watch-size-comparator/i18n/ja.ts +189 -0
  163. package/src/tool/watch-size-comparator/i18n/ko.ts +189 -0
  164. package/src/tool/watch-size-comparator/i18n/nl.ts +190 -0
  165. package/src/tool/watch-size-comparator/i18n/pl.ts +189 -0
  166. package/src/tool/watch-size-comparator/i18n/pt.ts +189 -0
  167. package/src/tool/watch-size-comparator/i18n/ru.ts +189 -0
  168. package/src/tool/watch-size-comparator/i18n/sv.ts +189 -0
  169. package/src/tool/watch-size-comparator/i18n/tr.ts +189 -0
  170. package/src/tool/watch-size-comparator/i18n/zh.ts +189 -0
  171. package/src/tool/watch-size-comparator/index.ts +11 -0
  172. package/src/tool/watch-size-comparator/seo.astro +16 -0
  173. package/src/tool/watch-size-comparator/watch-size-comparator.css +373 -0
  174. package/src/tool/water-resistance-converter/bibliography.ts +2 -2
  175. package/src/tool/water-resistance-converter/i18n/de.ts +5 -5
  176. package/src/tool/water-resistance-converter/i18n/en.ts +6 -6
  177. package/src/tool/water-resistance-converter/i18n/es.ts +6 -6
  178. package/src/tool/water-resistance-converter/i18n/fr.ts +6 -6
  179. package/src/tool/water-resistance-converter/i18n/id.ts +6 -6
  180. package/src/tool/water-resistance-converter/i18n/it.ts +6 -6
  181. package/src/tool/water-resistance-converter/i18n/ja.ts +6 -6
  182. package/src/tool/water-resistance-converter/i18n/ko.ts +6 -6
  183. package/src/tool/water-resistance-converter/i18n/nl.ts +6 -6
  184. package/src/tool/water-resistance-converter/i18n/pl.ts +6 -6
  185. package/src/tool/water-resistance-converter/i18n/pt.ts +6 -6
  186. package/src/tool/water-resistance-converter/i18n/ru.ts +8 -8
  187. package/src/tool/water-resistance-converter/i18n/sv.ts +6 -6
  188. package/src/tool/water-resistance-converter/i18n/tr.ts +6 -6
  189. package/src/tool/water-resistance-converter/i18n/zh.ts +3 -3
  190. package/src/tool/wrist-presence-calculator/i18n/de.ts +1 -1
  191. package/src/tool/wrist-presence-calculator/i18n/fr.ts +1 -1
  192. package/src/tool/wrist-presence-calculator/i18n/pl.ts +1 -1
  193. package/src/tool/wrist-presence-calculator/i18n/pt.ts +1 -1
  194. package/src/tool/wrist-presence-calculator/i18n/ru.ts +21 -21
  195. package/src/tool/wrist-presence-calculator/i18n/sv.ts +1 -1
  196. package/src/tools.ts +8 -0
@@ -10,16 +10,16 @@ const { labels } = Astro.props;
10
10
  <div class="panel-section">
11
11
  <div class="section-label">{labels.movementLabel || "Movement"}</div>
12
12
  <select class="movement-select" id="movement-select">
13
- <option value="eta-2824">ETA 2824-2 / SW20038h</option>
14
- <option value="eta-2892">ETA 2892-A2 / SW30042h</option>
15
- <option value="valjoux-7750">Valjoux 7750 / SW50048h</option>
16
- <option value="miyota-8215">Miyota 821540h</option>
17
- <option value="miyota-9015">Miyota 901542h</option>
18
- <option value="seiko-nh35">Seiko NH35 / 4R3541h</option>
19
- <option value="seiko-6r35">Seiko 6R3570h</option>
20
- <option value="unitas-6498">Unitas 6497 / 649846h</option>
21
- <option value="rolex-3135">Rolex 313548h</option>
22
- <option value="rolex-3235">Rolex 323570h</option>
13
+ <option value="eta-2824">ETA 2824-2 / SW200-38h</option>
14
+ <option value="eta-2892">ETA 2892-A2 / SW300-42h</option>
15
+ <option value="valjoux-7750">Valjoux 7750 / SW500-48h</option>
16
+ <option value="miyota-8215">Miyota 8215-40h</option>
17
+ <option value="miyota-9015">Miyota 9015-42h</option>
18
+ <option value="seiko-nh35">Seiko NH35 / 4R35-41h</option>
19
+ <option value="seiko-6r35">Seiko 6R35-70h</option>
20
+ <option value="unitas-6498">Unitas 6497 / 6498-46h</option>
21
+ <option value="rolex-3135">Rolex 3135-48h</option>
22
+ <option value="rolex-3235">Rolex 3235-70h</option>
23
23
  <option value="custom">{labels.customMovement || "Custom"}</option>
24
24
  </select>
25
25
  </div>
@@ -28,55 +28,145 @@ const { labels } = Astro.props;
28
28
  <div class="section-label">{labels.customMovement || "Custom"}</div>
29
29
  <div class="input-row">
30
30
  <div class="input-group">
31
- <label class="input-label" for="custom-reserve">{labels.powerReserveHours || "Reserve (h)"}</label>
31
+ <label class="input-label" for="custom-reserve"
32
+ >{labels.powerReserveHours || "Reserve (h)"}</label
33
+ >
32
34
  <div class="stepper-wrap">
33
- <button type="button" class="stepper-btn" data-target="custom-reserve" data-dir="-1">−</button>
34
- <input type="number" class="stepper-input" id="custom-reserve" min="1" max="336" value="38" />
35
- <button type="button" class="stepper-btn" data-target="custom-reserve" data-dir="1">+</button>
35
+ <button
36
+ type="button"
37
+ class="stepper-btn"
38
+ data-target="custom-reserve"
39
+ data-dir="-1">−</button
40
+ >
41
+ <input
42
+ type="number"
43
+ class="stepper-input"
44
+ id="custom-reserve"
45
+ min="1"
46
+ max="336"
47
+ value="38"
48
+ />
49
+ <button
50
+ type="button"
51
+ class="stepper-btn"
52
+ data-target="custom-reserve"
53
+ data-dir="1">+</button
54
+ >
36
55
  </div>
37
56
  </div>
38
57
  <div class="input-group">
39
- <label class="input-label" for="custom-turns">{labels.fullWindTurns || "Turns to full"}</label>
58
+ <label class="input-label" for="custom-turns"
59
+ >{labels.fullWindTurns || "Turns to full"}</label
60
+ >
40
61
  <div class="stepper-wrap">
41
- <button type="button" class="stepper-btn" data-target="custom-turns" data-dir="-1">−</button>
42
- <input type="number" class="stepper-input" id="custom-turns" min="1" max="100" value="40" />
43
- <button type="button" class="stepper-btn" data-target="custom-turns" data-dir="1">+</button>
62
+ <button
63
+ type="button"
64
+ class="stepper-btn"
65
+ data-target="custom-turns"
66
+ data-dir="-1">−</button
67
+ >
68
+ <input
69
+ type="number"
70
+ class="stepper-input"
71
+ id="custom-turns"
72
+ min="1"
73
+ max="100"
74
+ value="40"
75
+ />
76
+ <button
77
+ type="button"
78
+ class="stepper-btn"
79
+ data-target="custom-turns"
80
+ data-dir="1">+</button
81
+ >
44
82
  </div>
45
83
  </div>
46
84
  </div>
47
85
  </div>
48
86
 
49
87
  <div class="panel-section">
50
- <div class="section-label">{labels.turnsLabel || "Crown Turns"} <span class="label-sub">+</span></div>
88
+ <div class="section-label">
89
+ {labels.turnsLabel || "Crown Turns"}
90
+ <span class="label-sub">+</span>
91
+ </div>
51
92
  <div class="input-row">
52
93
  <div class="input-group">
53
- <label class="input-label" for="turns-input">{labels.turnsInput || "Turns"}</label>
94
+ <label class="input-label" for="turns-input"
95
+ >{labels.turnsInput || "Turns"}</label
96
+ >
54
97
  <div class="stepper-wrap">
55
- <button type="button" class="stepper-btn" data-target="turns-input" data-dir="-5">−5</button>
56
- <input type="number" class="stepper-input" id="turns-input" min="0" max="100" value="0" />
57
- <button type="button" class="stepper-btn" data-target="turns-input" data-dir="5">+5</button>
98
+ <button
99
+ type="button"
100
+ class="stepper-btn"
101
+ data-target="turns-input"
102
+ data-dir="-5">−5</button
103
+ >
104
+ <input
105
+ type="number"
106
+ class="stepper-input"
107
+ id="turns-input"
108
+ min="0"
109
+ max="100"
110
+ value="0"
111
+ />
112
+ <button
113
+ type="button"
114
+ class="stepper-btn"
115
+ data-target="turns-input"
116
+ data-dir="5">+5</button
117
+ >
58
118
  </div>
59
119
  </div>
60
120
  </div>
61
121
  </div>
62
122
 
63
123
  <div class="panel-section">
64
- <div class="section-label">{labels.hoursLabel || "Wear Time"} <span class="label-sub">+</span></div>
124
+ <div class="section-label">
125
+ {labels.hoursLabel || "Wear Time"}
126
+ <span class="label-sub">+</span>
127
+ </div>
65
128
  <div class="input-row">
66
129
  <div class="input-group">
67
- <label class="input-label" for="hours-input">{labels.hoursInput || "Hours"}</label>
130
+ <label class="input-label" for="hours-input"
131
+ >{labels.hoursInput || "Hours"}</label
132
+ >
68
133
  <div class="stepper-wrap">
69
- <button type="button" class="stepper-btn" data-target="hours-input" data-dir="-1">−</button>
70
- <input type="number" class="stepper-input" id="hours-input" min="0" max="24" value="0" />
71
- <button type="button" class="stepper-btn" data-target="hours-input" data-dir="1">+</button>
134
+ <button
135
+ type="button"
136
+ class="stepper-btn"
137
+ data-target="hours-input"
138
+ data-dir="-1">−</button
139
+ >
140
+ <input
141
+ type="number"
142
+ class="stepper-input"
143
+ id="hours-input"
144
+ min="0"
145
+ max="24"
146
+ value="0"
147
+ />
148
+ <button
149
+ type="button"
150
+ class="stepper-btn"
151
+ data-target="hours-input"
152
+ data-dir="1">+</button
153
+ >
72
154
  </div>
73
155
  </div>
74
156
  <div class="input-group">
75
- <label class="input-label" for="activity-select">{labels.activityLabel || "Activity"}</label>
157
+ <label class="input-label" for="activity-select"
158
+ >{labels.activityLabel || "Activity"}</label
159
+ >
76
160
  <div class="chip-group">
77
- <button type="button" class="chip active" data-activity="low">{labels.activityLow || "Low"}</button>
78
- <button type="button" class="chip" data-activity="medium">{labels.activityMedium || "Medium"}</button>
79
- <button type="button" class="chip" data-activity="high">{labels.activityHigh || "High"}</button>
161
+ <button type="button" class="chip active" data-activity="low"
162
+ >{labels.activityLow || "Low"}</button
163
+ >
164
+ <button type="button" class="chip" data-activity="medium"
165
+ >{labels.activityMedium || "Medium"}</button
166
+ >
167
+ <button type="button" class="chip" data-activity="high"
168
+ >{labels.activityHigh || "High"}</button
169
+ >
80
170
  </div>
81
171
  </div>
82
172
  </div>
@@ -84,7 +174,9 @@ const { labels } = Astro.props;
84
174
 
85
175
  <button type="button" class="calc-btn" id="calc-btn">
86
176
  <svg viewBox="0 0 24 24" width="16" height="16">
87
- <path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" fill="currentColor" />
177
+ <path
178
+ d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"
179
+ fill="currentColor"></path>
88
180
  </svg>
89
181
  {labels.calculate || "Calculate"}
90
182
  </button>
@@ -92,7 +184,9 @@ const { labels } = Astro.props;
92
184
  <div class="result-card" id="result-card" style="display: none">
93
185
  <div class="result-header">
94
186
  <svg viewBox="0 0 24 24" width="18" height="18">
95
- <path d="M13 2.05v2.02c3.95.49 7 3.85 7 7.93 0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93V2.05C5.05 2.58 2 6.13 2 11c0 5.52 4.48 10 10 10s10-4.48 10-10c0-4.87-3.05-8.42-7-8.95zM12 6v5l4.28 2.54.72-1.21-3.5-2.08V6H12z" fill="currentColor" />
187
+ <path
188
+ d="M13 2.05v2.02c3.95.49 7 3.85 7 7.93 0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93V2.05C5.05 2.58 2 6.13 2 11c0 5.52 4.48 10 10 10s10-4.48 10-10c0-4.87-3.05-8.42-7-8.95zM12 6v5l4.28 2.54.72-1.21-3.5-2.08V6H12z"
189
+ fill="currentColor"></path>
96
190
  </svg>
97
191
  <span>{labels.resultLabel || "Estimated Reserve"}</span>
98
192
  </div>
@@ -129,22 +223,35 @@ const { labels } = Astro.props;
129
223
  <div class="steps-section">
130
224
  <div class="step-row">
131
225
  <div class="step-marker">1</div>
132
- <span class="step-text">{labels.step1 || "Select your movement from the dropdown."}</span>
226
+ <span class="step-text"
227
+ >{labels.step1 || "Select your movement from the dropdown."}</span
228
+ >
133
229
  </div>
134
230
  <div class="step-row">
135
231
  <div class="step-marker">2</div>
136
- <span class="step-text">{labels.step2 || "Enter crown turns and hours worn."}</span>
232
+ <span class="step-text"
233
+ >{labels.step2 || "Enter crown turns and hours worn."}</span
234
+ >
137
235
  </div>
138
236
  <div class="step-row">
139
237
  <div class="step-marker">3</div>
140
- <span class="step-text">{labels.step3 || "Press Calculate to see your reserve."}</span>
238
+ <span class="step-text"
239
+ >{labels.step3 || "Press Calculate to see your reserve."}</span
240
+ >
141
241
  </div>
142
242
  </div>
143
243
 
144
244
  <div class="tip-row">
145
245
  <svg class="tip-icon" viewBox="0 0 24 24" width="16" height="16">
146
- <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" fill="currentColor" />
246
+ <path
247
+ d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
248
+ fill="currentColor"></path>
147
249
  </svg>
148
- <span class="tip-text">{labels.tipContent || "Manual-wind movements only charge when you turn the crown. Automatic movements also charge while worn."}</span>
250
+ <span class="tip-text"
251
+ >{
252
+ labels.tipContent ||
253
+ "Manual-wind movements only charge when you turn the crown. Automatic movements also charge while worn."
254
+ }</span
255
+ >
149
256
  </div>
150
257
  </div>
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': 'Wie viel lädt eine Kronenumdrehung die Uhr?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Das hängt vom Werk ab. Die meisten Automatikkaliber erreichen nach 3040 Umdrehungen den Vollaufzug, sodass jede Umdrehung etwa 2,53,3 % der Gesamtreserve ausmacht. Handaufzugswerke wie das Unitas 6498 benötigen ebenfalls etwa 35 Umdrehungen für einen Vollaufzug.',
93
+ 'text': 'Das hängt vom Werk ab. Die meisten Automatikkaliber erreichen nach 30-40 Umdrehungen den Vollaufzug, sodass jede Umdrehung etwa 2,5-3,3 % der Gesamtreserve ausmacht. Handaufzugswerke wie das Unitas 6498 benötigen ebenfalls etwa 35 Umdrehungen für einen Vollaufzug.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': 'Lädt das Tragen der Uhr genauso stark wie der Aufzug?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Das Tragen lädt langsamer und variabler. Bei Büroarbeit laden Sie etwa 46 % pro Stunde über den Rotor. Bei aktiver Bewegung kann es 810 % pro Stunde erreichen. Das Aufziehen von Hand ist schneller und zuverlässiger.',
101
+ 'text': 'Das Tragen lädt langsamer und variabler. Bei Büroarbeit laden Sie etwa 4-6 % pro Stunde über den Rotor. Bei aktiver Bewegung kann es 8-10 % pro Stunde erreichen. Das Aufziehen von Hand ist schneller und zuverlässiger.',
102
102
  },
103
103
  },
104
104
  {
@@ -34,12 +34,12 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
34
34
  tipContent: 'Manual-wind movements only charge when you turn the crown. Automatic movements also charge while worn.',
35
35
  },
36
36
  seo: [
37
- { type: 'title', text: 'Watch Power Reserve EstimatorHow Much Reserve Does Your Movement Have Left?', level: 2 },
37
+ { type: 'title', text: 'Watch Power Reserve Estimator-How Much Reserve Does Your Movement Have Left?', level: 2 },
38
38
  { type: 'paragraph', html: 'Wondering how much power is left in your mechanical watch? Whether you wound the crown this morning or wore it all day, this estimator tells you the approximate charge level and remaining hours for popular calibers like <strong>ETA, Sellita, Miyota, Seiko, and Rolex</strong>.' },
39
39
  { type: 'title', text: 'How Power Reserve Works in a Mechanical Watch', level: 3 },
40
- { type: 'paragraph', html: 'The power reserve is the amount of energy stored in the mainspring. When you wind the crown, you tighten the mainspring, storing potential energy. An automatic rotor also winds the mainspring while you wear the watch. The energy then drains at a steady ratetypically 2-3% per houruntil the watch stops.' },
40
+ { type: 'paragraph', html: 'The power reserve is the amount of energy stored in the mainspring. When you wind the crown, you tighten the mainspring, storing potential energy. An automatic rotor also winds the mainspring while you wear the watch. The energy then drains at a steady rate-typically 2-3% per hour-until the watch stops.' },
41
41
  { type: 'title', text: 'Crown Winding vs. Rotor Charging', level: 3 },
42
- { type: 'paragraph', html: 'Manual winding via the crown is the most efficient way to charge a watcheach full rotation adds a predictable amount of energy, typically around 2.5% of the total reserve. Wearing the watch charges more slowly and depends on your activity level: an office worker might charge 4-6% per hour, while someone active might charge 8-10%. This estimator uses a conservative average.' },
42
+ { type: 'paragraph', html: 'Manual winding via the crown is the most efficient way to charge a watch-each full rotation adds a predictable amount of energy, typically around 2.5% of the total reserve. Wearing the watch charges more slowly and depends on your activity level: an office worker might charge 4-6% per hour, while someone active might charge 8-10%. This estimator uses a conservative average.' },
43
43
  { type: 'title', text: 'Why Power Reserve Estimation Matters', level: 3 },
44
44
  { type: 'paragraph', html: 'Knowing your watch\'s charge level helps avoid unexpected stops. A watch that runs down overnight may need more winding before bed, or may not be getting enough wear time. Use this tool to understand your charging habits and keep your automatic running.' },
45
45
  ],
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': '¿Cuánto carga una vuelta de corona el reloj?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Depende del calibre. La mayoría de los calibres automáticos alcanzan la carga completa en 3040 vueltas, por lo que cada vuelta añade entre un 2,5 y un 3,3 % de la reserva total. Los movimientos de cuerda manual como el Unitas 6498 también necesitan unas 35 vueltas para una carga completa.',
93
+ 'text': 'Depende del calibre. La mayoría de los calibres automáticos alcanzan la carga completa en 30-40 vueltas, por lo que cada vuelta añade entre un 2,5 y un 3,3 % de la reserva total. Los movimientos de cuerda manual como el Unitas 6498 también necesitan unas 35 vueltas para una carga completa.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': '¿Usar el reloj lo carga tanto como darle cuerda?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Usarlo carga más lento y de forma variable. En un trabajo de oficina, puede cargar un 46 % por hora mediante el rotor. Durante movimiento activo puede alcanzar el 810 % por hora. La cuerda manual es más rápida y predecible.',
101
+ 'text': 'Usarlo carga más lento y de forma variable. En un trabajo de oficina, puede cargar un 4-6 % por hora mediante el rotor. Durante movimiento activo puede alcanzar el 8-10 % por hora. La cuerda manual es más rápida y predecible.',
102
102
  },
103
103
  },
104
104
  {
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': 'Combien un tour de couronne charge-t-il la montre ?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Cela dépend du calibre. La plupart des calibres automatiques atteignent le plein remontage en 3040 tours, donc chaque tour ajoute environ 2,53,3 % de la réserve totale. Les mouvements à remontage manuel comme l\'Unitas 6498 nécessitent également environ 35 tours pour un plein remontage.',
93
+ 'text': 'Cela dépend du calibre. La plupart des calibres automatiques atteignent le plein remontage en 30-40 tours, donc chaque tour ajoute environ 2,5-3,3 % de la réserve totale. Les mouvements à remontage manuel comme l\'Unitas 6498 nécessitent également environ 35 tours pour un plein remontage.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': 'Porter la montre la charge-t-il autant que le remontage ?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Le port charge plus lentement et de manière variable. Au bureau, vous pouvez charger 46 % par heure via le rotor. En mouvement actif, cela peut atteindre 810 % par heure. Le remontage manuel est plus rapide et plus prévisible.',
101
+ 'text': 'Le port charge plus lentement et de manière variable. Au bureau, vous pouvez charger 4-6 % par heure via le rotor. En mouvement actif, cela peut atteindre 8-10 % par heure. Le remontage manuel est plus rapide et plus prévisible.',
102
102
  },
103
103
  },
104
104
  {
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': 'Berapa banyak satu putaran mahkota mengisi arloji?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Tergantung pada mesinnya. Sebagian besar kaliber otomatis mencapai pengisian penuh dalam 3040 putaran, jadi setiap putaran menambah sekitar 2,53,3% dari total cadangan. Mesin manual seperti Unitas 6498 juga membutuhkan sekitar 35 putaran untuk pengisian penuh.',
93
+ 'text': 'Tergantung pada mesinnya. Sebagian besar kaliber otomatis mencapai pengisian penuh dalam 30-40 putaran, jadi setiap putaran menambah sekitar 2,5-3,3% dari total cadangan. Mesin manual seperti Unitas 6498 juga membutuhkan sekitar 35 putaran untuk pengisian penuh.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': 'Apakah memakai arloji mengisinya sama seperti memutar?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Memakai mengisi lebih lambat dan bervariasi. Di pekerjaan meja, Anda mungkin mengisi 46% per jam melalui rotor. Saat bergerak aktif, bisa mencapai 810% per jam. Memutar dengan tangan lebih cepat dan lebih dapat diprediksi.',
101
+ 'text': 'Memakai mengisi lebih lambat dan bervariasi. Di pekerjaan meja, Anda mungkin mengisi 4-6% per jam melalui rotor. Saat bergerak aktif, bisa mencapai 8-10% per jam. Memutar dengan tangan lebih cepat dan lebih dapat diprediksi.',
102
102
  },
103
103
  },
104
104
  {
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': 'Quanto carica un giro di corona l\'orologio?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Dipende dal movimento. La maggior parte dei calibri automatici raggiunge la carica completa in 3040 giri, quindi ogni giro aggiunge circa il 2,53,3% della riserva totale. I movimenti a carica manuale come l\'Unitas 6498 necessitano di circa 35 giri per una carica completa.',
93
+ 'text': 'Dipende dal movimento. La maggior parte dei calibri automatici raggiunge la carica completa in 30-40 giri, quindi ogni giro aggiunge circa il 2,5-3,3% della riserva totale. I movimenti a carica manuale come l\'Unitas 6498 necessitano di circa 35 giri per una carica completa.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': 'Indossare l\'orologio lo carica quanto la carica manuale?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Indossarlo carica più lentamente e in modo variabile. In un lavoro d\'ufficio, puoi caricare il 46% all\'ora tramite il rotore. Durante movimento attivo può raggiungere l\'810% all\'ora. La carica a mano è più veloce e prevedibile.',
101
+ 'text': 'Indossarlo carica più lentamente e in modo variabile. In un lavoro d\'ufficio, puoi caricare il 4-6% all\'ora tramite il rotore. Durante movimento attivo può raggiungere l\'8-10% all\'ora. La carica a mano è più veloce e prevedibile.',
102
102
  },
103
103
  },
104
104
  {
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': 'Hoeveel laadt één kroondraai het horloge?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Dat hangt af van het uurwerk. De meeste automatische kalibers bereiken een volle winding in 3040 draaien, dus elke draai voegt ongeveer 2,53,3% van de totale reserve toe. Handopwinduurwerken zoals de Unitas 6498 hebben ook ongeveer 35 draaien nodig voor een volle winding.',
93
+ 'text': 'Dat hangt af van het uurwerk. De meeste automatische kalibers bereiken een volle winding in 30-40 draaien, dus elke draai voegt ongeveer 2,5-3,3% van de totale reserve toe. Handopwinduurwerken zoals de Unitas 6498 hebben ook ongeveer 35 draaien nodig voor een volle winding.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': 'Laadt het dragen van het horloge evenveel als opwinden?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Dragen laadt langzamer en wisselender. Op kantoor laadt u ongeveer 46% per uur via de rotor. Bij actieve beweging kan het 810% per uur bereiken. Handmatig opwinden is sneller en voorspelbaarder.',
101
+ 'text': 'Dragen laadt langzamer en wisselender. Op kantoor laadt u ongeveer 4-6% per uur via de rotor. Bij actieve beweging kan het 8-10% per uur bereiken. Handmatig opwinden is sneller en voorspelbaarder.',
102
102
  },
103
103
  },
104
104
  {
@@ -90,7 +90,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
90
90
  'name': 'Quanto uma volta da coroa carrega o relógio?',
91
91
  'acceptedAnswer': {
92
92
  '@type': 'Answer',
93
- 'text': 'Depende do calibre. A maioria dos calibres automáticos atinge a carga total em 3040 voltas, então cada volta adiciona cerca de 2,53,3% da reserva total. Movimentos de corda manual como o Unitas 6498 também precisam de cerca de 35 voltas para uma carga completa.',
93
+ 'text': 'Depende do calibre. A maioria dos calibres automáticos atinge a carga total em 30-40 voltas, então cada volta adiciona cerca de 2,5-3,3% da reserva total. Movimentos de corda manual como o Unitas 6498 também precisam de cerca de 35 voltas para uma carga completa.',
94
94
  },
95
95
  },
96
96
  {
@@ -98,7 +98,7 @@ export const content: ToolLocaleContent<PowerReserveEstimatorUI> = {
98
98
  'name': 'Usar o relógio carrega tanto quanto dar corda?',
99
99
  'acceptedAnswer': {
100
100
  '@type': 'Answer',
101
- 'text': 'Usar carrega mais lentamente e de forma variável. No escritório, você pode carregar 46% por hora pelo rotor. Durante movimento ativo pode chegar a 810% por hora. Dar corda manualmente é mais rápido e previsível.',
101
+ 'text': 'Usar carrega mais lentamente e de forma variável. No escritório, você pode carregar 4-6% por hora pelo rotor. Durante movimento ativo pode chegar a 8-10% por hora. Dar corda manualmente é mais rápido e previsível.',
102
102
  },
103
103
  },
104
104
  {
@@ -37,10 +37,10 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
37
37
  step3: 'Read the proportions and visual representation.',
38
38
  },
39
39
  seo: [
40
- { type: 'title', text: 'Watch Strap Taper CalculatorProportions, Buckle Width & Visual Guide', level: 2 },
40
+ { type: 'title', text: 'Watch Strap Taper Calculator-Proportions, Buckle Width & Visual Guide', level: 2 },
41
41
  { type: 'paragraph', html: 'A well proportioned strap makes or breaks a watch. Too much taper on a diver makes it look fragile. No taper on a dress watch makes it look clunky. This calculator helps you find the ideal <strong>strap taper ratio</strong> based on your case diameter and lug width.' },
42
42
  { type: 'title', text: 'What Is Strap Taper?', level: 3 },
43
- { type: 'paragraph', html: 'Strap taper is the reduction in width from the lug end to the buckle end of a watch strap. A classic dress watch might taper from 20 mm at the lugs to 16 mm at the bucklea 4 mm taper. A dive watch might stay at 20 mm straight through for a more tool-like appearance.' },
43
+ { type: 'paragraph', html: 'Strap taper is the reduction in width from the lug end to the buckle end of a watch strap. A classic dress watch might taper from 20 mm at the lugs to 16 mm at the buckle-a 4 mm taper. A dive watch might stay at 20 mm straight through for a more tool-like appearance.' },
44
44
  { type: 'title', text: 'The Golden Ratio for Strap Proportions', level: 3 },
45
45
  { type: 'paragraph', html: 'Watch enthusiasts generally agree that a lug width between 45% and 55% of the case diameter looks best. For the taper, a buckle width that is 75% to 85% of the lug width creates a balanced, elegant silhouette. Ratios outside this range can make the watch look top heavy or fragile.' },
46
46
  { type: 'title', text: 'Taper by Watch Style', level: 3 },
@@ -40,16 +40,16 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
40
40
  { type: 'title', text: 'Калькулятор сужения ремешка \u2014 Пропорции, ширина пряжки и визуальное руководство', level: 2 },
41
41
  { type: 'paragraph', html: 'Правильно подобранный ремешок может как украсить часы, так и испортить их. Слишком сильное сужение на дайверских часах делает их хрупкими на вид. Отсутствие сужения на классических часах делает их грубыми. Этот калькулятор поможет вам найти идеальное <strong>соотношение сужения ремешка</strong> на основе диаметра корпуса и ширины ушек.' },
42
42
  { type: 'title', text: 'Что такое сужение ремешка?', level: 3 },
43
- { type: 'paragraph', html: 'Сужение ремешка — это уменьшение ширины от ушек до пряжки. Классические часы могут сужаться с 20 мм у ушек до 16 мм у пряжки — сужение на 4 мм. Дайверские часы могут оставаться прямыми на 20 мм для более инструментального вида.' },
43
+ { type: 'paragraph', html: 'Сужение ремешка-это уменьшение ширины от ушек до пряжки. Классические часы могут сужаться с 20 мм у ушек до 16 мм у пряжки-сужение на 4 мм. Дайверские часы могут оставаться прямыми на 20 мм для более инструментального вида.' },
44
44
  { type: 'title', text: 'Золотое сечение для пропорций ремешка', level: 3 },
45
45
  { type: 'paragraph', html: 'Энтузиасты часов в целом сходятся во мнении, что ширина ушек от 45% до 55% диаметра корпуса выглядит лучше всего. Что касается сужения, ширина пряжки от 75% до 85% ширины ушек создаёт сбалансированный, элегантный силуэт. Соотношения за пределами этого диапазона могут сделать часы визуально тяжелыми или слишком хрупкими.' },
46
46
  { type: 'title', text: 'Сужение по стилю часов', level: 3 },
47
- { type: 'paragraph', html: 'Классические часы: сужение на 4 мм (с 20 до 16 мм). Спортивные часы: сужение на 23 мм. Дайверские часы: сужение на 02 мм. Военные или полевые часы: прямое сужение для прочного вида. Пилотские часы: минимальное сужение в соответствии с эстетикой приборов.' },
47
+ { type: 'paragraph', html: 'Классические часы: сужение на 4 мм (с 20 до 16 мм). Спортивные часы: сужение на 2-3 мм. Дайверские часы: сужение на 0-2 мм. Военные или полевые часы: прямое сужение для прочного вида. Пилотские часы: минимальное сужение в соответствии с эстетикой приборов.' },
48
48
  ],
49
49
  faq: [
50
50
  {
51
51
  question: 'Какое сужение ремешка идеально подходит для классических часов?',
52
- answer: 'Сужение на 4 мм — классический выбор. Для ширины ушек 20 мм это означает пряжку 16 мм. Это создаёт элегантный силуэт, который дополняет изысканный вид классических часов.',
52
+ answer: 'Сужение на 4 мм-классический выбор. Для ширины ушек 20 мм это означает пряжку 16 мм. Это создаёт элегантный силуэт, который дополняет изысканный вид классических часов.',
53
53
  },
54
54
  {
55
55
  question: 'Должны ли дайверские часы иметь сужающийся ремешок?',
@@ -89,7 +89,7 @@ export const content: ToolLocaleContent<StrapTaperCalculatorUI> = {
89
89
  'name': 'Какое сужение ремешка идеально подходит для классических часов?',
90
90
  'acceptedAnswer': {
91
91
  '@type': 'Answer',
92
- 'text': 'Сужение на 4 мм — классический выбор. Для ширины ушек 20 мм это даёт пряжку 16 мм, создавая элегантный силуэт.',
92
+ 'text': 'Сужение на 4 мм-классический выбор. Для ширины ушек 20 мм это даёт пряжку 16 мм, создавая элегантный силуэт.',
93
93
  },
94
94
  },
95
95
  {
@@ -0,0 +1,16 @@
1
+ ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { tachymeterCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props as Props;
11
+ const loader = tachymeterCalculator.i18n[locale] || tachymeterCalculator.i18n.en;
12
+ const content = await loader?.();
13
+ if (!content) return null;
14
+ ---
15
+
16
+ {content && <SharedBibliography links={content.bibliography} />}
@@ -0,0 +1,16 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'Tachymeter-Wikipedia',
6
+ url: 'https://en.wikipedia.org/wiki/Tachymeter_(watch)',
7
+ },
8
+ {
9
+ name: 'How to Use a Tachymeter Bezel',
10
+ url: 'https://www.truefacet.com/guide/understanding-tachymeter-bezel/',
11
+ },
12
+ {
13
+ name: 'Tachymeter Explained: Formula & Examples',
14
+ url: 'https://www.citizenwatch-global.com/support/exterior/tachymeter.html',
15
+ },
16
+ ];