@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.
- package/package.json +1 -1
- package/src/category/i18n/de.ts +11 -9
- package/src/category/i18n/en.ts +11 -9
- package/src/category/i18n/fr.ts +11 -9
- package/src/category/i18n/id.ts +11 -9
- package/src/category/i18n/it.ts +11 -9
- package/src/category/i18n/ja.ts +11 -9
- package/src/category/i18n/ko.ts +11 -9
- package/src/category/i18n/nl.ts +11 -9
- package/src/category/i18n/pl.ts +11 -9
- package/src/category/i18n/pt.ts +11 -9
- package/src/category/i18n/ru.ts +11 -9
- package/src/category/i18n/sv.ts +11 -9
- package/src/category/i18n/tr.ts +11 -9
- package/src/category/i18n/zh.ts +11 -9
- package/src/category/index.ts +8 -0
- package/src/entries.ts +13 -1
- package/src/index.ts +4 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/no_en_dash.test.ts +41 -0
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tool/beat-rate-converter/bibliography.ts +1 -1
- package/src/tool/beat-rate-converter/components/ConverterPanel.astro +57 -20
- package/src/tool/beat-rate-converter/i18n/en.ts +5 -5
- package/src/tool/crown-reference-guide/bibliography.ts +3 -3
- package/src/tool/crown-reference-guide/i18n/de.ts +37 -29
- package/src/tool/crown-reference-guide/i18n/en.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/es.ts +36 -28
- package/src/tool/crown-reference-guide/i18n/fr.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/id.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/it.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/ja.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/ko.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/nl.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/pl.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/pt.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/ru.ts +41 -33
- package/src/tool/crown-reference-guide/i18n/sv.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/tr.ts +38 -30
- package/src/tool/crown-reference-guide/i18n/zh.ts +37 -29
- package/src/tool/demagnetizing-timer/components/TimerPanel.astro +45 -17
- package/src/tool/demagnetizing-timer/i18n/de.ts +3 -3
- package/src/tool/demagnetizing-timer/i18n/en.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/es.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/fr.ts +1 -1
- package/src/tool/demagnetizing-timer/i18n/id.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/it.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/ja.ts +1 -1
- package/src/tool/demagnetizing-timer/i18n/ko.ts +1 -1
- package/src/tool/demagnetizing-timer/i18n/nl.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/pl.ts +3 -3
- package/src/tool/demagnetizing-timer/i18n/pt.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/ru.ts +10 -10
- package/src/tool/demagnetizing-timer/i18n/sv.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/tr.ts +2 -2
- package/src/tool/demagnetizing-timer/i18n/zh.ts +1 -1
- package/src/tool/lume-color-simulator/bibliography.astro +16 -0
- package/src/tool/lume-color-simulator/bibliography.ts +16 -0
- package/src/tool/lume-color-simulator/client.ts +186 -0
- package/src/tool/lume-color-simulator/component.astro +17 -0
- package/src/tool/lume-color-simulator/components/LumePanel.astro +98 -0
- package/src/tool/lume-color-simulator/entry.ts +57 -0
- package/src/tool/lume-color-simulator/i18n/de.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/en.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/es.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/fr.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/id.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/it.ts +175 -0
- package/src/tool/lume-color-simulator/i18n/ja.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/ko.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/nl.ts +175 -0
- package/src/tool/lume-color-simulator/i18n/pl.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/pt.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/ru.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/sv.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/tr.ts +174 -0
- package/src/tool/lume-color-simulator/i18n/zh.ts +174 -0
- package/src/tool/lume-color-simulator/index.ts +11 -0
- package/src/tool/lume-color-simulator/lume-color-simulator.css +208 -0
- package/src/tool/lume-color-simulator/seo.astro +16 -0
- package/src/tool/moon-phase-visualizer/bibliography.astro +16 -0
- package/src/tool/moon-phase-visualizer/bibliography.ts +16 -0
- package/src/tool/moon-phase-visualizer/client.ts +243 -0
- package/src/tool/moon-phase-visualizer/component.astro +17 -0
- package/src/tool/moon-phase-visualizer/components/MoonPanel.astro +63 -0
- package/src/tool/moon-phase-visualizer/entry.ts +51 -0
- package/src/tool/moon-phase-visualizer/i18n/de.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/en.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/es.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/fr.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/id.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/it.ts +176 -0
- package/src/tool/moon-phase-visualizer/i18n/ja.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/ko.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/nl.ts +176 -0
- package/src/tool/moon-phase-visualizer/i18n/pl.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/pt.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/ru.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/sv.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/tr.ts +175 -0
- package/src/tool/moon-phase-visualizer/i18n/zh.ts +175 -0
- package/src/tool/moon-phase-visualizer/index.ts +11 -0
- package/src/tool/moon-phase-visualizer/moon-phase-visualizer.css +216 -0
- package/src/tool/moon-phase-visualizer/seo.astro +16 -0
- package/src/tool/power-reserve-estimator/bibliography.ts +2 -2
- package/src/tool/power-reserve-estimator/components/EstimatorPanel.astro +146 -39
- package/src/tool/power-reserve-estimator/i18n/de.ts +2 -2
- package/src/tool/power-reserve-estimator/i18n/en.ts +3 -3
- package/src/tool/power-reserve-estimator/i18n/es.ts +2 -2
- package/src/tool/power-reserve-estimator/i18n/fr.ts +2 -2
- package/src/tool/power-reserve-estimator/i18n/id.ts +2 -2
- package/src/tool/power-reserve-estimator/i18n/it.ts +2 -2
- package/src/tool/power-reserve-estimator/i18n/nl.ts +2 -2
- package/src/tool/power-reserve-estimator/i18n/pt.ts +2 -2
- package/src/tool/strap-taper-calculator/i18n/en.ts +2 -2
- package/src/tool/strap-taper-calculator/i18n/ru.ts +4 -4
- package/src/tool/tachymeter-calculator/bibliography.astro +16 -0
- package/src/tool/tachymeter-calculator/bibliography.ts +16 -0
- package/src/tool/tachymeter-calculator/client.ts +180 -0
- package/src/tool/tachymeter-calculator/component.astro +15 -0
- package/src/tool/tachymeter-calculator/components/CalculatorPanel.astro +121 -0
- package/src/tool/tachymeter-calculator/entry.ts +43 -0
- package/src/tool/tachymeter-calculator/i18n/de.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/en.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/es.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/fr.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/id.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/it.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/ja.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/ko.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/nl.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/pl.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/pt.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/ru.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/sv.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/tr.ts +172 -0
- package/src/tool/tachymeter-calculator/i18n/zh.ts +172 -0
- package/src/tool/tachymeter-calculator/index.ts +11 -0
- package/src/tool/tachymeter-calculator/seo.astro +16 -0
- package/src/tool/tachymeter-calculator/tachymeter-calculator.css +492 -0
- package/src/tool/tachymeter-calculator/utils.ts +10 -0
- package/src/tool/watch-accuracy-tracker/i18n/pl.ts +1 -1
- package/src/tool/watch-accuracy-tracker/i18n/ru.ts +6 -6
- package/src/tool/watch-savings-planner/i18n/en.ts +5 -5
- package/src/tool/watch-size-comparator/bibliography.astro +16 -0
- package/src/tool/watch-size-comparator/bibliography.ts +16 -0
- package/src/tool/watch-size-comparator/client.ts +287 -0
- package/src/tool/watch-size-comparator/component.astro +17 -0
- package/src/tool/watch-size-comparator/components/WatchForm.astro +121 -0
- package/src/tool/watch-size-comparator/drawing/index.ts +79 -0
- package/src/tool/watch-size-comparator/drawing/measures.ts +57 -0
- package/src/tool/watch-size-comparator/drawing/utils.ts +37 -0
- package/src/tool/watch-size-comparator/drawing/watch.ts +78 -0
- package/src/tool/watch-size-comparator/entry.ts +62 -0
- package/src/tool/watch-size-comparator/i18n/de.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/en.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/es.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/fr.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/id.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/it.ts +190 -0
- package/src/tool/watch-size-comparator/i18n/ja.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/ko.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/nl.ts +190 -0
- package/src/tool/watch-size-comparator/i18n/pl.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/pt.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/ru.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/sv.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/tr.ts +189 -0
- package/src/tool/watch-size-comparator/i18n/zh.ts +189 -0
- package/src/tool/watch-size-comparator/index.ts +11 -0
- package/src/tool/watch-size-comparator/seo.astro +16 -0
- package/src/tool/watch-size-comparator/watch-size-comparator.css +373 -0
- package/src/tool/water-resistance-converter/bibliography.ts +2 -2
- package/src/tool/water-resistance-converter/i18n/de.ts +5 -5
- package/src/tool/water-resistance-converter/i18n/en.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/es.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/fr.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/id.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/it.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/ja.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/ko.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/nl.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/pl.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/pt.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/ru.ts +8 -8
- package/src/tool/water-resistance-converter/i18n/sv.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/tr.ts +6 -6
- package/src/tool/water-resistance-converter/i18n/zh.ts +3 -3
- package/src/tool/wrist-presence-calculator/i18n/de.ts +1 -1
- package/src/tool/wrist-presence-calculator/i18n/fr.ts +1 -1
- package/src/tool/wrist-presence-calculator/i18n/pl.ts +1 -1
- package/src/tool/wrist-presence-calculator/i18n/pt.ts +1 -1
- package/src/tool/wrist-presence-calculator/i18n/ru.ts +21 -21
- package/src/tool/wrist-presence-calculator/i18n/sv.ts +1 -1
- package/src/tools.ts +8 -0
|
@@ -26,12 +26,12 @@ export const content: ToolLocaleContent<DemagnetizingTimerUI> = {
|
|
|
26
26
|
step1: 'Placera klockan på avmagnetiseringsplattformen.',
|
|
27
27
|
step2: 'Tryck på Starta och håll avmagnetiseringsknappen intryckt under den inställda tiden.',
|
|
28
28
|
step3: 'Släpp knappen och flytta långsamt bort klockan.',
|
|
29
|
-
step4: 'Upprepa 2
|
|
29
|
+
step4: 'Upprepa 2-3 gånger om det behövs, vrid klockan varje gång.',
|
|
30
30
|
tipTitle: 'Tips',
|
|
31
31
|
tipContent: 'Håll klockan minst 1 meter från den påslagna avmagnetiseraren för att undvika återmagnetisering.',
|
|
32
32
|
},
|
|
33
33
|
seo: [
|
|
34
|
-
{ type: 'title', text: 'Avmagnetiseringstimer för Klockor
|
|
34
|
+
{ type: 'title', text: 'Avmagnetiseringstimer för Klockor-akt Pulstid för DIY', level: 2 },
|
|
35
35
|
{ type: 'paragraph', html: 'Avmagnetisering av en klocka kräver exakt timing av knapptryckningen. De flesta DIY-avmagnetiserare fungerar genom att generera ett avtagande växlande magnetfält, och den ideala pulsen varar mellan <strong>1 och 3 sekunder</strong>. För kort och fältet neutraliserar inte magnetiseringen; för lång och du riskerar att mätta verket.' },
|
|
36
36
|
{ type: 'title', text: 'Varför timing är viktigt vid avmagnetisering av klockor', level: 3 },
|
|
37
37
|
{ type: 'paragraph', html: 'När du trycker på knappen på en avmagnetiserare skapas ett växlande magnetfält inuti spolen. Fältet oscillerar med nätfrekvensen (50/60 Hz) och avtar när du släpper. Målet är att utsätta klockan för detta avtagande fält <strong>precis tillräckligt länge</strong> för att randomisera de magnetiska domänerna i spiralfjädern och andra stålkomponenter. En puls på 1 till 3 sekunder är den optimala tiden för de flesta verk.' },
|
|
@@ -26,12 +26,12 @@ export const content: ToolLocaleContent<DemagnetizingTimerUI> = {
|
|
|
26
26
|
step1: 'Saati demanyetizatör platformuna yerleştirin.',
|
|
27
27
|
step2: 'Başlat\'a basın ve demanyetizatör düğmesini ayarlanan süre boyunca basılı tutun.',
|
|
28
28
|
step3: 'Düğmeyi bırakın ve saati yavaşça uzaklaştırın.',
|
|
29
|
-
step4: 'Gerekirse 2
|
|
29
|
+
step4: 'Gerekirse 2-3 kez tekrarlayın, her seferinde saati döndürün.',
|
|
30
30
|
tipTitle: 'İpucu',
|
|
31
31
|
tipContent: 'Yeniden mıknatıslanmayı önlemek için saati, güç açıkken demanyetizatörden en az 1 metre uzakta tutun.',
|
|
32
32
|
},
|
|
33
33
|
seo: [
|
|
34
|
-
{ type: 'title', text: 'Saat Demanyetizasyon
|
|
34
|
+
{ type: 'title', text: 'Saat Demanyetizasyon Zamanlayıcısı-Y için Hassas Darbe Zamanlaması', level: 2 },
|
|
35
35
|
{ type: 'paragraph', html: 'Bir saati demanyetize etmek, hassas düğme basma zamanlaması gerektirir. Çoğu DIY demanyetizatör, azalan bir alternatif manyetik alan oluşturarak çalışır ve ideal darbe <strong>1 ila 3 saniye</strong> arasında sürer. Çok kısa basarsanız alan manyetizasyonu nötralize edemez; çok uzun basarsanız mekanizmayı doyurma riskiniz vardır.' },
|
|
36
36
|
{ type: 'title', text: 'Saat Demanyetizasyonunda Zamanlamanın Önemi', level: 3 },
|
|
37
37
|
{ type: 'paragraph', html: 'Demanyetizatördeki düğmeye bastığınızda, bobinin içinde alternatif bir manyetik alan oluşur. Alan şebeke frekansında (50/60 Hz) salınır ve bıraktığınızda söner. Amaç, saati bu sönen alana <strong>tam yeterli süre</strong> maruz bırakarak yay ve diğer çelik bileşenlerdeki manyetik alanları rastgele hale getirmektir. 1 ila 3 saniyelik bir darbe çoğu mekanizma için ideal noktadır.' },
|
|
@@ -31,7 +31,7 @@ export const content: ToolLocaleContent<DemagnetizingTimerUI> = {
|
|
|
31
31
|
tipContent: '消磁器通电时,请将手表保持至少1米距离,避免再次磁化。',
|
|
32
32
|
},
|
|
33
33
|
seo: [
|
|
34
|
-
{ type: 'title', text: '
|
|
34
|
+
{ type: 'title', text: '手表消磁定时器-Y消磁的精确脉冲计时', level: 2 },
|
|
35
35
|
{ type: 'paragraph', html: '消磁手表需要精确的按键时机。大多数DIY消磁器通过产生衰减的交流磁场来工作,理想的脉冲持续时间为<strong>1到3秒</strong>。时间太短,磁场无法中和磁化;时间太长,则有可能使机芯饱和。' },
|
|
36
36
|
{ type: 'title', text: '为什么消磁时的时机很重要', level: 3 },
|
|
37
37
|
{ type: 'paragraph', html: '按下消磁器按钮时,线圈内部会产生一个交流磁场。磁场以电源频率(50/60赫兹)振荡,松开按钮时逐渐衰减。目标是让手表<strong>恰好足够长时间</strong>暴露于这个衰减磁场中,以使游丝和其他钢制部件中的磁畴随机化。1到3秒的脉冲对大多数机芯来说是最佳选择。' },
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { lumeColorSimulator } 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 = lumeColorSimulator.i18n[locale] || lumeColorSimulator.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: 'Super-LumiNova-The Ultimate Guide',
|
|
6
|
+
url: 'https://www.snglrtywatch.com/all/bright-long-lasting-luminosity-the-ultimate-guide/',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Lume Color Comparison-WatchGecko',
|
|
10
|
+
url: 'https://www.watchgecko.com/blogs/magazine/guide-lume',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: 'What Is BGW9? A Complete Lume Guide',
|
|
14
|
+
url: 'https://luciusatelier.com/blogs/news/learn-about-the-swiss-super-luminova-bgw9-lume',
|
|
15
|
+
},
|
|
16
|
+
];
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
interface LumePreset {
|
|
2
|
+
id: string;
|
|
3
|
+
dayColor: [number, number, number];
|
|
4
|
+
nightColor: [number, number, number];
|
|
5
|
+
name: string;
|
|
6
|
+
colorName: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const LUME_PRESETS: Record<string, LumePreset> = {
|
|
10
|
+
c1: { id: 'c1', dayColor: [200, 230, 201], nightColor: [80, 200, 80], name: 'C1', colorName: 'Classic Green' },
|
|
11
|
+
c3: { id: 'c3', dayColor: [165, 214, 167], nightColor: [50, 220, 60], name: 'C3', colorName: 'Super Green' },
|
|
12
|
+
bgw9: { id: 'bgw9', dayColor: [224, 231, 255], nightColor: [90, 160, 255], name: 'BGW9', colorName: 'Ice Blue' },
|
|
13
|
+
luminova: { id: 'luminova', dayColor: [215, 204, 200], nightColor: [180, 200, 180], name: 'LumiNova', colorName: 'Warm White' },
|
|
14
|
+
vintage: { id: 'vintage', dayColor: [188, 170, 164], nightColor: [140, 120, 80], name: 'Vintage', colorName: 'Aged Radium' },
|
|
15
|
+
orange: { id: 'orange', dayColor: [255, 204, 128], nightColor: [255, 130, 30], name: 'Orange', colorName: 'Diver Orange' },
|
|
16
|
+
blue: { id: 'blue', dayColor: [144, 202, 249], nightColor: [40, 100, 220], name: 'Blue', colorName: 'Deep Blue' },
|
|
17
|
+
green: { id: 'green', dayColor: [129, 199, 132], nightColor: [30, 200, 50], name: 'Green', colorName: 'Neon Green' },
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const canvas = document.getElementById('lume-canvas') as HTMLCanvasElement;
|
|
21
|
+
const ctx = canvas.getContext('2d')!;
|
|
22
|
+
const slider = document.getElementById('brightness-slider') as HTMLInputElement;
|
|
23
|
+
const presetBtns = document.querySelectorAll('.preset-btn') as NodeListOf<HTMLElement>;
|
|
24
|
+
const infoType = document.getElementById('info-type') as HTMLElement;
|
|
25
|
+
const infoColor = document.getElementById('info-color') as HTMLElement;
|
|
26
|
+
const infoHex = document.getElementById('info-hex') as HTMLElement;
|
|
27
|
+
const infoRgb = document.getElementById('info-rgb') as HTMLElement;
|
|
28
|
+
|
|
29
|
+
let activeLume = 'c1';
|
|
30
|
+
|
|
31
|
+
function lerpColor(a: [number, number, number], b: [number, number, number], t: number): [number, number, number] {
|
|
32
|
+
return [
|
|
33
|
+
Math.round(a[0] + (b[0] - a[0]) * t),
|
|
34
|
+
Math.round(a[1] + (b[1] - a[1]) * t),
|
|
35
|
+
Math.round(a[2] + (b[2] - a[2]) * t),
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function rgbToHex(r: number, g: number, b: number): string {
|
|
40
|
+
return '#' + [r, g, b].map((x) => x.toString(16).padStart(2, '0')).join('');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getBrightness(): number {
|
|
44
|
+
return parseInt(slider.value) / 100;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function drawBackground(h: number, w: number, brightness: number): void {
|
|
48
|
+
const bgBrightness = Math.round(brightness * 180) + 20;
|
|
49
|
+
ctx.fillStyle = `rgb(${bgBrightness}, ${bgBrightness}, ${Math.round(bgBrightness * 0.95)})`;
|
|
50
|
+
ctx.fillRect(0, 0, w, h);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function drawWatchBody(cx: number, cy: number, radius: number, brightness: number): void {
|
|
54
|
+
ctx.save();
|
|
55
|
+
ctx.shadowColor = 'rgba(0,0,0,0.3)';
|
|
56
|
+
ctx.shadowBlur = 20;
|
|
57
|
+
ctx.shadowOffsetY = 4;
|
|
58
|
+
ctx.beginPath();
|
|
59
|
+
ctx.arc(cx, cy, radius, 0, Math.PI * 2);
|
|
60
|
+
ctx.fillStyle = brightness < 0.4 ? `rgb(${Math.round(brightness * 180 + 5)}, ${Math.round(brightness * 180 + 5)}, ${Math.round(brightness * 180 + 5)})` : '#333';
|
|
61
|
+
ctx.fill();
|
|
62
|
+
ctx.restore();
|
|
63
|
+
|
|
64
|
+
ctx.beginPath();
|
|
65
|
+
ctx.arc(cx, cy, radius, 0, Math.PI * 2);
|
|
66
|
+
ctx.fillStyle = brightness < 0.4 ? '#444' : '#555';
|
|
67
|
+
ctx.fill();
|
|
68
|
+
|
|
69
|
+
ctx.beginPath();
|
|
70
|
+
ctx.arc(cx, cy, radius - 8, 0, Math.PI * 2);
|
|
71
|
+
ctx.fillStyle = brightness < 0.4 ? '#3a3a3a' : '#4a4a4a';
|
|
72
|
+
ctx.fill();
|
|
73
|
+
|
|
74
|
+
ctx.beginPath();
|
|
75
|
+
ctx.arc(cx, cy, radius - 14, 0, Math.PI * 2);
|
|
76
|
+
ctx.fillStyle = brightness < 0.3 ? '#2a2a2a' : '#3a3a3a';
|
|
77
|
+
ctx.fill();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function drawLumeMarkers(o: { cx: number; cy: number; radius: number; preset: LumePreset; brightness: number }): void {
|
|
81
|
+
const { cx, cy, radius, preset, brightness } = o;
|
|
82
|
+
for (let i = 0; i < 12; i++) {
|
|
83
|
+
const angle = (i * 30 - 90) * Math.PI / 180;
|
|
84
|
+
const mx = cx + Math.cos(angle) * (radius - 28);
|
|
85
|
+
const my = cy + Math.sin(angle) * (radius - 28);
|
|
86
|
+
const markerSize = i % 3 === 0 ? 5 : 3;
|
|
87
|
+
const markerBrightness = i % 3 === 0 ? 1 : 0.8;
|
|
88
|
+
const markerColor = lerpColor(preset.nightColor, preset.dayColor, brightness * markerBrightness);
|
|
89
|
+
|
|
90
|
+
ctx.beginPath();
|
|
91
|
+
ctx.arc(mx, my, markerSize, 0, Math.PI * 2);
|
|
92
|
+
ctx.fillStyle = `rgb(${markerColor[0]}, ${markerColor[1]}, ${markerColor[2]})`;
|
|
93
|
+
|
|
94
|
+
if (brightness < 0.5) {
|
|
95
|
+
ctx.save();
|
|
96
|
+
ctx.shadowColor = `rgb(${markerColor[0]}, ${markerColor[1]}, ${markerColor[2]})`;
|
|
97
|
+
ctx.shadowBlur = (1 - brightness) * 20;
|
|
98
|
+
ctx.fill();
|
|
99
|
+
ctx.restore();
|
|
100
|
+
} else {
|
|
101
|
+
ctx.fill();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function drawLumeHands(cx: number, cy: number, color: [number, number, number], brightness: number): void {
|
|
107
|
+
const hands = [
|
|
108
|
+
{ length: 34, width: 2.5, angle: -60 },
|
|
109
|
+
{ length: 42, width: 2, angle: 15 },
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
for (const hand of hands) {
|
|
113
|
+
const angle = (hand.angle - 90) * Math.PI / 180;
|
|
114
|
+
const hx = cx + Math.cos(angle) * hand.length;
|
|
115
|
+
const hy = cy + Math.sin(angle) * hand.length;
|
|
116
|
+
|
|
117
|
+
ctx.save();
|
|
118
|
+
ctx.shadowColor = brightness < 0.5 ? `rgb(${color[0]}, ${color[1]}, ${color[2]})` : 'transparent';
|
|
119
|
+
ctx.shadowBlur = brightness < 0.5 ? (1 - brightness) * 15 : 0;
|
|
120
|
+
ctx.beginPath();
|
|
121
|
+
ctx.moveTo(cx, cy);
|
|
122
|
+
ctx.lineTo(hx, hy);
|
|
123
|
+
ctx.strokeStyle = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;
|
|
124
|
+
ctx.lineWidth = hand.width;
|
|
125
|
+
ctx.lineCap = 'round';
|
|
126
|
+
ctx.stroke();
|
|
127
|
+
ctx.restore();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
ctx.beginPath();
|
|
131
|
+
ctx.arc(cx, cy, 3, 0, Math.PI * 2);
|
|
132
|
+
ctx.fillStyle = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;
|
|
133
|
+
ctx.fill();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function drawLabel(cx: number, h: number, preset: LumePreset, brightness: number): void {
|
|
137
|
+
ctx.fillStyle = brightness < 0.5 ? '#aaa' : '#666';
|
|
138
|
+
ctx.font = '11px sans-serif';
|
|
139
|
+
ctx.textAlign = 'center';
|
|
140
|
+
ctx.fillText(
|
|
141
|
+
`${preset.name} \u00b7 ${Math.round((1 - brightness) * 100)}% glow`,
|
|
142
|
+
cx, h - 12
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function updateInfo(preset: LumePreset, brightness: number): void {
|
|
147
|
+
const color = lerpColor(preset.nightColor, preset.dayColor, brightness);
|
|
148
|
+
infoType.textContent = preset.name;
|
|
149
|
+
infoColor.textContent = preset.colorName;
|
|
150
|
+
infoHex.textContent = rgbToHex(color[0], color[1], color[2]);
|
|
151
|
+
infoRgb.textContent = `${color[0]}, ${color[1]}, ${color[2]}`;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function drawLume(): void {
|
|
155
|
+
const preset = LUME_PRESETS[activeLume];
|
|
156
|
+
if (!preset) return;
|
|
157
|
+
|
|
158
|
+
const brightness = getBrightness();
|
|
159
|
+
const W = canvas.width;
|
|
160
|
+
const H = canvas.height;
|
|
161
|
+
const cx = W / 2;
|
|
162
|
+
const cy = H / 2;
|
|
163
|
+
const radius = 62;
|
|
164
|
+
|
|
165
|
+
drawBackground(H, W, brightness);
|
|
166
|
+
drawWatchBody(cx, cy, radius, brightness);
|
|
167
|
+
drawLumeMarkers({ cx, cy, radius, preset, brightness });
|
|
168
|
+
|
|
169
|
+
const color = lerpColor(preset.nightColor, preset.dayColor, brightness);
|
|
170
|
+
drawLumeHands(cx, cy, color, brightness);
|
|
171
|
+
drawLabel(cx, H, preset, brightness);
|
|
172
|
+
updateInfo(preset, brightness);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
presetBtns.forEach((btn) => {
|
|
176
|
+
btn.addEventListener('click', () => {
|
|
177
|
+
presetBtns.forEach((b) => b.classList.remove('active'));
|
|
178
|
+
btn.classList.add('active');
|
|
179
|
+
activeLume = btn.dataset.lume || 'c1';
|
|
180
|
+
drawLume();
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
slider.addEventListener('input', drawLume);
|
|
185
|
+
|
|
186
|
+
drawLume();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
import LumePanel from './components/LumePanel.astro';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
ui: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const { ui } = Astro.props;
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<link href="./lume-color-simulator.css" rel="stylesheet" />
|
|
12
|
+
|
|
13
|
+
<div class="tool-main-card" data-ui={JSON.stringify(ui)}>
|
|
14
|
+
<LumePanel labels={ui} />
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<script src="./client.ts"></script>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
interface Props {
|
|
3
|
+
labels: Record<string, string>;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const { labels } = Astro.props;
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<div class="lume-panel">
|
|
10
|
+
<div class="panel-section">
|
|
11
|
+
<div class="section-label">{labels.lumeType || "Lume Type"}</div>
|
|
12
|
+
<div class="preset-grid" id="preset-grid">
|
|
13
|
+
<button type="button" class="preset-btn active" data-lume="c1">
|
|
14
|
+
<span class="preset-swatch" style="background:#c8e6c9"></span>
|
|
15
|
+
<span class="preset-name">{labels.c1Name || "C1"}</span>
|
|
16
|
+
<span class="preset-desc">{labels.c1Desc || "Green (classic)"}</span>
|
|
17
|
+
</button>
|
|
18
|
+
<button type="button" class="preset-btn" data-lume="c3">
|
|
19
|
+
<span class="preset-swatch" style="background:#a5d6a7"></span>
|
|
20
|
+
<span class="preset-name">{labels.c3Name || "C3"}</span>
|
|
21
|
+
<span class="preset-desc">{labels.c3Desc || "Super Green"}</span>
|
|
22
|
+
</button>
|
|
23
|
+
<button type="button" class="preset-btn" data-lume="bgw9">
|
|
24
|
+
<span class="preset-swatch" style="background:#e0e7ff"></span>
|
|
25
|
+
<span class="preset-name">{labels.bgw9Name || "BGW9"}</span>
|
|
26
|
+
<span class="preset-desc">{labels.bgw9Desc || "Ice Blue"}</span>
|
|
27
|
+
</button>
|
|
28
|
+
<button type="button" class="preset-btn" data-lume="luminova">
|
|
29
|
+
<span class="preset-swatch" style="background:#d7ccc8"></span>
|
|
30
|
+
<span class="preset-name">{labels.lumiNovaName || "LumiNova"}</span>
|
|
31
|
+
<span class="preset-desc">{labels.lumiNovaDesc || "Warm White"}</span>
|
|
32
|
+
</button>
|
|
33
|
+
<button type="button" class="preset-btn" data-lume="vintage">
|
|
34
|
+
<span class="preset-swatch" style="background:#bcaaa4"></span>
|
|
35
|
+
<span class="preset-name">{labels.vintageName || "Vintage"}</span>
|
|
36
|
+
<span class="preset-desc">{labels.vintageDesc || "Aged Radium"}</span>
|
|
37
|
+
</button>
|
|
38
|
+
<button type="button" class="preset-btn" data-lume="orange">
|
|
39
|
+
<span class="preset-swatch" style="background:#ffcc80"></span>
|
|
40
|
+
<span class="preset-name">{labels.orangeName || "Orange"}</span>
|
|
41
|
+
<span class="preset-desc">{labels.orangeDesc || "Diver Orange"}</span>
|
|
42
|
+
</button>
|
|
43
|
+
<button type="button" class="preset-btn" data-lume="blue">
|
|
44
|
+
<span class="preset-swatch" style="background:#90caf9"></span>
|
|
45
|
+
<span class="preset-name">{labels.blueName || "Blue"}</span>
|
|
46
|
+
<span class="preset-desc">{labels.blueDesc || "Deep Blue"}</span>
|
|
47
|
+
</button>
|
|
48
|
+
<button type="button" class="preset-btn" data-lume="green">
|
|
49
|
+
<span class="preset-swatch" style="background:#81c784"></span>
|
|
50
|
+
<span class="preset-name">{labels.greenName || "Green"}</span>
|
|
51
|
+
<span class="preset-desc">{labels.greenDesc || "Neon Green"}</span>
|
|
52
|
+
</button>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div class="panel-section">
|
|
57
|
+
<div class="section-label">{labels.brightness || "Ambient Brightness"}</div>
|
|
58
|
+
<div class="slider-row">
|
|
59
|
+
<span class="slider-icon">
|
|
60
|
+
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z" fill="currentColor"/></svg>
|
|
61
|
+
</span>
|
|
62
|
+
<input type="range" id="brightness-slider" min="0" max="100" value="20" />
|
|
63
|
+
<span class="slider-icon">
|
|
64
|
+
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M20.21 15.71c-.87.39-1.82.59-2.79.59-3.87 0-7-3.13-7-7 0-1.67.57-3.22 1.53-4.47.12-.15.1-.37-.02-.5-.12-.12-.34-.13-.48-.03-2.04 1.52-3.34 3.91-3.34 6.5 0 4.42 3.58 8 8 8 1.35 0 2.64-.34 3.79-.96.15-.07.22-.24.15-.39-.07-.15-.24-.22-.39-.15-.05.02-.12.05-.15.07z" fill="currentColor"/></svg>
|
|
65
|
+
</span>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div class="lume-canvas-wrapper">
|
|
70
|
+
<canvas id="lume-canvas" width="400" height="180"></canvas>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<div class="color-info" id="color-info">
|
|
74
|
+
<div class="color-info-item">
|
|
75
|
+
<span class="color-info-label">{labels.type || "Type"}</span>
|
|
76
|
+
<span class="color-info-value" id="info-type">C1</span>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="color-info-item">
|
|
79
|
+
<span class="color-info-label">{labels.color || "Color"}</span>
|
|
80
|
+
<span class="color-info-value" id="info-color">Green</span>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="color-info-item">
|
|
83
|
+
<span class="color-info-label">{labels.hex || "HEX"}</span>
|
|
84
|
+
<span class="color-info-value" id="info-hex">#c8e6c9</span>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="color-info-item">
|
|
87
|
+
<span class="color-info-label">{labels.rgb || "RGB"}</span>
|
|
88
|
+
<span class="color-info-value" id="info-rgb">200, 230, 201</span>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="tip-row">
|
|
93
|
+
<svg class="tip-icon" viewBox="0 0 24 24" width="16" height="16">
|
|
94
|
+
<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" />
|
|
95
|
+
</svg>
|
|
96
|
+
<span class="tip-text">{labels.tipContent || "Lume brightness depends on the pigment quality and how much light it absorbed. BGW9 glows blue-white and is the brightest, while vintage lume has a warm, dim glow."}</span>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ChronoToolEntry, ToolLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export type LumeColorSimulatorUI = {
|
|
4
|
+
title: string;
|
|
5
|
+
lumeType: string;
|
|
6
|
+
brightness: string;
|
|
7
|
+
dark: string;
|
|
8
|
+
light: string;
|
|
9
|
+
color: string;
|
|
10
|
+
hex: string;
|
|
11
|
+
rgb: string;
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
c1Name: string;
|
|
15
|
+
c1Desc: string;
|
|
16
|
+
c3Name: string;
|
|
17
|
+
c3Desc: string;
|
|
18
|
+
bgw9Name: string;
|
|
19
|
+
bgw9Desc: string;
|
|
20
|
+
lumiNovaName: string;
|
|
21
|
+
lumiNovaDesc: string;
|
|
22
|
+
vintageName: string;
|
|
23
|
+
vintageDesc: string;
|
|
24
|
+
orangeName: string;
|
|
25
|
+
orangeDesc: string;
|
|
26
|
+
blueName: string;
|
|
27
|
+
blueDesc: string;
|
|
28
|
+
greenName: string;
|
|
29
|
+
greenDesc: string;
|
|
30
|
+
tipTitle: string;
|
|
31
|
+
tipContent: string;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type LumeColorSimulatorLocaleContent = ToolLocaleContent<LumeColorSimulatorUI>;
|
|
35
|
+
|
|
36
|
+
export const lumeColorSimulator: ChronoToolEntry<LumeColorSimulatorUI> = {
|
|
37
|
+
id: 'lume-color-simulator',
|
|
38
|
+
icons: { bg: 'mdi:brightness-6', fg: 'mdi:weather-night' },
|
|
39
|
+
i18n: {
|
|
40
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
41
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
42
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
43
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
44
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
45
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
46
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
47
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
48
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
49
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
50
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
51
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
52
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
53
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
54
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { LumeColorSimulatorUI } from '../entry';
|
|
3
|
+
import { bibliography } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
export const content: ToolLocaleContent<LumeColorSimulatorUI> = {
|
|
6
|
+
slug: 'leuchtfarben-simulator',
|
|
7
|
+
title: 'Leuchtfarben Simulator: Zifferblatt Leuchten visualisieren',
|
|
8
|
+
description: 'Verschaffe dir einen visuellen Eindruck verschiedener Leuchtfarben in Echtzeit. Vergleiche C1, C3, BGW9, LumiNova und mehr bei unterschiedlicher Umgebungshelligkeit.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'Leuchtfarben Simulator',
|
|
11
|
+
lumeType: 'Leuchttyp',
|
|
12
|
+
brightness: 'Umgebungshelligkeit',
|
|
13
|
+
dark: 'Dunkel',
|
|
14
|
+
light: 'Hell',
|
|
15
|
+
color: 'Farbe',
|
|
16
|
+
hex: 'HEX',
|
|
17
|
+
rgb: 'RGB',
|
|
18
|
+
type: 'Typ',
|
|
19
|
+
description: 'Beschreibung',
|
|
20
|
+
c1Name: 'C1',
|
|
21
|
+
c1Desc: 'Grün (klassisch)',
|
|
22
|
+
c3Name: 'C3',
|
|
23
|
+
c3Desc: 'Super-Grün',
|
|
24
|
+
bgw9Name: 'BGW9',
|
|
25
|
+
bgw9Desc: 'Eisblau',
|
|
26
|
+
lumiNovaName: 'LumiNova',
|
|
27
|
+
lumiNovaDesc: 'Warmweiß',
|
|
28
|
+
vintageName: 'Vintage',
|
|
29
|
+
vintageDesc: 'Gealtertes Radium',
|
|
30
|
+
orangeName: 'Orange',
|
|
31
|
+
orangeDesc: 'Taucher-Orange',
|
|
32
|
+
blueName: 'Blau',
|
|
33
|
+
blueDesc: 'Tiefblau',
|
|
34
|
+
greenName: 'Grün',
|
|
35
|
+
greenDesc: 'Neon-Grün',
|
|
36
|
+
tipTitle: 'Tipp',
|
|
37
|
+
tipContent: 'Die Leuchtkraft hängt von der Pigmentqualität und der aufgenommenen Lichtmenge ab. BGW9 leuchtet blau-weiß und ist am hellsten, während Vintage-Leuchten einen warmen, gedimmten Schein abgeben.',
|
|
38
|
+
},
|
|
39
|
+
seo: [
|
|
40
|
+
{ type: 'title', text: 'Uhren-Leuchtfarben-Simulator - Echtzeit-Leuchtkraft-Visualisierung', level: 2 },
|
|
41
|
+
{ type: 'paragraph', html: 'Die Leuchtfarbe ist eine der persönlichsten Entscheidungen beim Uhrensammeln. Bevorzugst du das klassische grüne Leuchten von <strong>C1 Super-LumiNova</strong> oder das eisige Blau von <strong>BGW9</strong>? Dieser Simulator zeigt dir, wie jeder Leuchttyp bei verschiedenen Helligkeitsstufen aussieht - von vollem Tageslicht bis zur tiefsten Dunkelheit, mit exakten <strong>HEX- und RGB-Werten</strong> für jeden Farbton.' },
|
|
42
|
+
{ type: 'title', text: 'Super-LumiNova-Typen im Vergleich', level: 3 },
|
|
43
|
+
{
|
|
44
|
+
type: 'table', headers: ['Typ', 'Tagesfarbe', 'Leuchtfarbe', 'Helligkeit', 'Geeignet für'], rows: [
|
|
45
|
+
['C1', 'Hellgrün', 'Grün', 'Mittel', 'Dress-Watches, Original-Optik'],
|
|
46
|
+
['C3', 'Gelbgrün', 'Hellgrün', 'Am hellsten', 'Taucheruhren, Tool-Watches'],
|
|
47
|
+
['BGW9', 'Gebeiztes Weiß', 'Eisblau', 'Hell', 'Moderne Sportuhren, klare Optik'],
|
|
48
|
+
['LumiNova', 'Warmbeige', 'Warmweiß', 'Niedrig-mittel', 'Preisgünstige Leuchtmittel'],
|
|
49
|
+
['Vintage', 'Creme / Beige', 'Warm gedimmt', 'Niedrig', 'Heritage-Uhren'],
|
|
50
|
+
['Orange', 'Orange', 'Orange', 'Mittel', 'Taucher-Akzente, Retro-Taucher'],
|
|
51
|
+
['Blau', 'Hellblau', 'Blau', 'Mittel', 'Designer-Zifferblätter, Modeuhren'],
|
|
52
|
+
['Grün', 'Hellgrün', 'Grün', 'Hell', 'Militärische Uhren'],
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{ type: 'title', text: 'C1 vs. C3 vs. BGW9 - Welchen solltest du wählen?', level: 3 },
|
|
56
|
+
{
|
|
57
|
+
type: 'comparative', columns: 2, items: [
|
|
58
|
+
{ title: 'C1 Klassisches Grün', icon: 'mdi:lightbulb-on', description: 'Die ursprüngliche Super-LumiNova-Formulierung. Leuchtet grün mit mittlerer Helligkeit. Eine sichere, klassische Wahl, die zu jedem Uhrenstil passt.', points: ['Mittlere Helligkeit, 4-6 h sichtbar', 'Grünes Leuchten, warmer Ton', 'Günstigste Formulierung', 'Häufig in Einsteigeruhren'], highlight: false },
|
|
59
|
+
{ title: 'C3 Super Gruen', icon: 'mdi:lightning-bolt', description: 'Das hellste grüne Leuchtmittel. Wird in professionellen Taucheruhren verwendet, bei denen die Ablesbarkeit unter Wasser entscheidend ist. Maximale Leuchtkraft bei minimaler Aufladung.', points: ['Höchste Helligkeit, 8-12 h sichtbar', 'Gelbgrün bei Tageslicht', 'Bevorzugt von Seiko, Citizen, Omega', 'Am besten für Lesbarkeit bei wenig Licht'], highlight: true },
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'comparative', columns: 2, items: [
|
|
64
|
+
{ title: 'BGW9 Eisblau', icon: 'mdi:snowflake', description: 'Leuchtet blau-weiß statt grün. Etwas weniger hell als C3, aber wegen seiner klaren, modernen Ästhetik geschätzt. Beliebt in luxuriösen Sportuhren.', points: ['Hohe Helligkeit, 6-10 h sichtbar', 'Blau-weißes Leuchten, neutraler Ton', 'Klare, moderne Optik bei Tageslicht', 'Verwendet von Tudor, Grand Seiko, Omega'], highlight: true },
|
|
65
|
+
{ title: 'Vintage Radium Stil', icon: 'mdi:fire', description: 'Warmer Beige-/Cremeton, der an das Radium-Leuchten der 1960er Jahre erinnert. Absichtlich gedimmter für die authentische Optik. Das Leuchten ist warm, dezent und altert wunderschön.', points: ['Niedrige Helligkeit, 2-4 h sichtbar', 'Warmes Creme bis gedämpftes Bernstein', 'Gealtertes Aussehen ohne Radioaktivität', 'Beliebt in Heritage-Neuauflagen'], highlight: false },
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{ type: 'diagnostic', variant: 'info', title: 'Helligkeit ist nicht alles', icon: 'mdi:palette', html: 'Das hellste Leuchtmittel (C3) ist nicht immer die beste Wahl. <strong>BGW9</strong> tauscht einen kleinen Helligkeitsunterschied gegen einen neutraleren, moderneren Look, den viele Sammler bevorzugen. <strong>Vintage-Leuchten</strong> stellen die epochengerechte Optik über die Leistung. Entscheide dich danach, was dir am wichtigsten ist: <strong>maximale Leuchtkraft, moderne Ästhetik oder Heritage-Authentizität.</strong>' },
|
|
69
|
+
{ type: 'title', text: 'Wie Leuchtfarbe funktioniert: Die Wissenschaft hinter dem Leuchten', level: 3 },
|
|
70
|
+
{
|
|
71
|
+
type: 'glossary', items: [
|
|
72
|
+
{ term: 'Super-LumiNova', definition: 'Ein photolumineszierendes Pigment auf Strontiumaluminat-Basis. Es absorbiert UV- und sichtbares Licht und gibt es als Leuchten wieder. Nicht radioaktiv und unbedenklich. Ursprünglich 1993 von Nemoto & Co. entwickelt.' },
|
|
73
|
+
{ term: 'Aufladezeit', definition: 'Die Dauer der Lichteinwirkung, die nötig ist, um das Leuchtpigment zu sättigen. Eine vollständige Aufladung dauert 10-30 Minuten unter direktem Sonnenlicht oder UV. Längere Aufladung = längeres und helleres Leuchten.' },
|
|
74
|
+
{ term: 'Leuchtdauer', definition: 'Wie lange das Leuchten nach dem Aufladen sichtbar bleibt. Hochwertiges Super-LumiNova leuchtet 6-12 Stunden sichtbar. Die hellste Phase sind die ersten 30 Minuten nach dem Aufladen.' },
|
|
75
|
+
{ term: 'Pigmentqualität', definition: 'Die Qualität der Strontiumaluminat-Kristalle. Hochwertigere Pigmente (C3, BGW9) verwenden größere, gleichmäßigere Kristalle für ein helleres und längeres Leuchten. Niedrigere Qualitätsstufen (LumiNova) verwenden kleinere Kristalle und sind dunkler.' },
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'summary', title: 'Kurzleitfaden zur Leuchtmittelauswahl', items: [
|
|
80
|
+
'Für maximale Ablesbarkeit im Dunkeln: Wähle C3 (hellstes Grün) oder BGW9 (hellstes Blau-Weiß).',
|
|
81
|
+
'Für einen modernen Luxus-Look: BGW9 ist der aktuelle Favorit unter den High-End-Uhrenmarken.',
|
|
82
|
+
'Für Vintage-/Heritage-Bauten: Verwende Vintage oder Orange für epochengerechte Wärme.',
|
|
83
|
+
'C1 ist der Allrounder: gute Helligkeit, klassisches Grün, erschwinglich.',
|
|
84
|
+
'Die Leuchtfarbe bei Tageslicht unterscheidet sich deutlich von der Leuchtfarbe - nutze den Simulator, um beide zu vergleichen.',
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
faq: [
|
|
89
|
+
{
|
|
90
|
+
question: 'Welches Leuchtmittel ist am hellsten?',
|
|
91
|
+
answer: 'C3 Super-LumiNova ist die hellste grüne Formulierung. BGW9 ist das hellste Blau-Weiß. Beide sind deutlich heller als C1 oder Standard-LumiNova.',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
question: 'Was ist BGW9-Leuchtfarbe?',
|
|
95
|
+
answer: 'BGW9 ist eine Super-LumiNova-Variante, die blau-weiß statt grün leuchtet. Sie ist etwas weniger hell als C3, wird aber von vielen wegen ihres klaren, modernen Aussehens bevorzugt.',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
question: 'Leuchtet Vintage-Leuchtfarbe?',
|
|
99
|
+
answer: 'Moderne Vintage-Leuchtfarbe (beige/warm) leuchtet, ist aber absichtlich dunkler, um gealtertes Radium zu imitieren. Der Kompromiss liegt in der ästhetischen Authentizität gegenüber maximaler Helligkeit.',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
question: 'Wie lange hält Leuchtfarbe?',
|
|
103
|
+
answer: 'Nach vollständiger Aufladung unter hellem Licht leuchtet hochwertiges Super-LumiNova 6-12 Stunden sichtbar. Die hellste Phase sind die ersten 30 Minuten.',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{
|
|
109
|
+
name: 'Leuchttyp auswählen',
|
|
110
|
+
text: 'Wähle aus den Voreinstellungen C1, C3, BGW9, LumiNova, Vintage, Orange, Blau oder Grün.',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'Helligkeit anpassen',
|
|
114
|
+
text: 'Bewege den Regler für die Umgebungshelligkeit von Tag (links) zu Nacht (rechts), um zu sehen, wie sich das Leuchten verhält.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'Daten ablesen',
|
|
118
|
+
text: 'Die Infokarte zeigt die genauen HEX- und RGB-Werte der aktuellen Farbe.',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
schemas: [
|
|
122
|
+
{
|
|
123
|
+
'@context': 'https://schema.org',
|
|
124
|
+
'@type': 'FAQPage',
|
|
125
|
+
'mainEntity': [
|
|
126
|
+
{
|
|
127
|
+
'@type': 'Question',
|
|
128
|
+
'name': 'Welches Leuchtmittel ist am hellsten?',
|
|
129
|
+
'acceptedAnswer': { '@type': 'Answer', 'text': 'C3 Super-LumiNova ist das hellste Grün. BGW9 ist das hellste Blau-Weiß.' },
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
'@type': 'Question',
|
|
133
|
+
'name': 'Was ist BGW9-Leuchtfarbe?',
|
|
134
|
+
'acceptedAnswer': { '@type': 'Answer', 'text': 'BGW9 ist eine Super-LumiNova-Variante, die blau-weiß statt grün leuchtet.' },
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
'@type': 'Question',
|
|
138
|
+
'name': 'Leuchtet Vintage-Leuchtfarbe?',
|
|
139
|
+
'acceptedAnswer': { '@type': 'Answer', 'text': 'Moderne Vintage-Leuchtfarbe leuchtet, ist aber absichtlich dunkler, um gealtertes Radium zu imitieren.' },
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
'@context': 'https://schema.org',
|
|
145
|
+
'@type': 'SoftwareApplication',
|
|
146
|
+
'name': 'Leuchtfarben-Simulator',
|
|
147
|
+
'operatingSystem': 'All',
|
|
148
|
+
'applicationCategory': 'UtilitiesApplication',
|
|
149
|
+
'browserRequirements': 'Erfordert HTML5 und JavaScript.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
'@context': 'https://schema.org',
|
|
153
|
+
'@type': 'HowTo',
|
|
154
|
+
'name': 'So simuliert man Leuchtfarben',
|
|
155
|
+
'step': [
|
|
156
|
+
{
|
|
157
|
+
'@type': 'HowToStep',
|
|
158
|
+
'name': 'Leuchttyp auswählen',
|
|
159
|
+
'text': 'Wähle aus den Voreinstellungen C1, C3, BGW9, LumiNova oder anderen.',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
'@type': 'HowToStep',
|
|
163
|
+
'name': 'Helligkeit anpassen',
|
|
164
|
+
'text': 'Bewege den Regler von Tag zu Nacht, um das Leuchtverhalten zu sehen.',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
'@type': 'HowToStep',
|
|
168
|
+
'name': 'Daten ablesen',
|
|
169
|
+
'text': 'Die Infokarte zeigt HEX- und RGB-Werte der aktuellen Farbe.',
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
};
|