@jjlmoya/utils-tabletop 1.17.0 → 1.19.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 +5 -3
- package/src/tests/pagespeed_best_practices.test.ts +198 -0
- package/src/tests/seo_parity.test.ts +60 -0
- package/src/tests/translation_copy.test.ts +124 -0
- package/src/tool/board-game-timer/components/SetupPanel.astro +8 -8
- package/src/tool/board-game-timer/modules/particles.ts +4 -4
- package/src/tool/decision-wheel/i18n/de.ts +28 -0
- package/src/tool/decision-wheel/i18n/es.ts +28 -0
- package/src/tool/decision-wheel/i18n/fr.ts +28 -0
- package/src/tool/decision-wheel/i18n/id.ts +28 -0
- package/src/tool/decision-wheel/i18n/it.ts +28 -0
- package/src/tool/decision-wheel/i18n/ja.ts +28 -0
- package/src/tool/decision-wheel/i18n/ko.ts +28 -0
- package/src/tool/decision-wheel/i18n/nl.ts +28 -0
- package/src/tool/decision-wheel/i18n/pl.ts +28 -0
- package/src/tool/decision-wheel/i18n/pt.ts +28 -0
- package/src/tool/decision-wheel/i18n/sv.ts +28 -0
- package/src/tool/decision-wheel/i18n/tr.ts +28 -0
- package/src/tool/decision-wheel/i18n/zh.ts +28 -0
- package/src/tool/decision-wheel/ui.ts +1 -1
- package/src/tool/dice-roller-simulator/client.ts +13 -11
- package/src/tool/dice-roller-simulator/components/DiceGrid.astro +1 -1
- package/src/tool/fantasy-runes-translator/client.ts +1 -1
- package/src/tool/fantasy-runes-translator/component.astro +2 -2
- package/src/tool/first-player-selector/client.ts +1 -1
- package/src/tool/hidden-role-dealer/component.astro +10 -8
- package/src/tool/hidden-role-dealer/i18n/de.ts +10 -1
- package/src/tool/hidden-role-dealer/i18n/fr.ts +4 -1
- package/src/tool/hidden-role-dealer/i18n/id.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/it.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/ja.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/ko.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/nl.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/pl.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/pt.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/ru.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/sv.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/tr.ts +11 -1
- package/src/tool/hidden-role-dealer/i18n/zh.ts +11 -1
- package/src/tool/investigation-board/boardContextMenu.ts +1 -1
- package/src/tool/investigation-board/components/ControlPanel.astro +1 -1
- package/src/tool/investigation-board/renderer.ts +2 -2
- package/src/tool/lunar-tide-tracker/client.ts +2 -2
- package/src/tool/lunar-tide-tracker/component.astro +1 -1
- package/src/tool/scatter-direction-selector/client.ts +5 -5
- package/src/tool/scatter-direction-selector/component.astro +2 -2
- package/src/tool/scatter-direction-selector/i18n/de.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/es.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/fr.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/id.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/it.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/ja.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/ko.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/nl.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/pl.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/pt.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/ru.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/sv.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/tr.ts +9 -0
- package/src/tool/scatter-direction-selector/i18n/zh.ts +9 -0
- package/src/tool/score-tracker/client.ts +2 -2
- package/src/tool/score-tracker/components/PlayerSetup.astro +1 -0
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Cara Menggunakan Roda Keputusan', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Pilih prasetel atau buat segmen Anda sendiri dengan bobot untuk menyesuaikan probabilitas setiap pilihan.' },
|
|
44
|
+
{ type: 'title', text: "Skenario tambahan", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Gunakan roda untuk pemungutan suara, pertemuan acak, dan aksi permainan." },
|
|
46
|
+
{ type: 'title', text: "Preset permainan meja", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "Preset memuat keputusan umum permainan meja dengan cepat." },
|
|
48
|
+
{ type: 'title', text: "Mengatur bobot hasil", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "Bobot membuat hasil tertentu lebih sering atau lebih jarang muncul." },
|
|
50
|
+
{ type: 'title', text: "Meninjau riwayat", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "Riwayat menyimpan putaran terbaru untuk ditinjau bersama." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Apakah saya bisa mengubah warna dan nama?',
|
|
52
60
|
answer: 'Ya, Anda bebas menambah segmen, mengubah teks label, memilih warna, dan mengubah bobot dari 1 hingga 5.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Bisakah peluang diubah?",
|
|
64
|
+
answer: "Bisa, ubah bobot segmen.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Berapa banyak segmen yang tersedia?",
|
|
68
|
+
answer: "Hingga 16 segmen dapat digunakan dan minimal dua diperlukan.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Preset apa yang tersedia?",
|
|
72
|
+
answer: "Ya atau Tidak, Angka, Aksi, pilihan sendiri, D20, Keselarasan, dan Jarahan.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Apakah putaran sebelumnya terlihat?",
|
|
76
|
+
answer: "Ya, browser menampilkan sepuluh hasil terakhir.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Putar Roda Keputusan',
|
|
63
87
|
text: 'Klik tombol putar untuk melihat animasi putaran dengan deselerasi fisik yang realistis.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Periksa hasil",
|
|
91
|
+
text: "Setelah roda berhenti, periksa segmen pemenang dan riwayat putaran.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Come Usare la Ruota delle Decisioni', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Scegli un set preimpostato o crea i tuoi spicchi personali impostando pesi diversi per calibrare le probabilità.' },
|
|
44
|
+
{ type: 'title', text: "Altri scenari decisionali", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Usa la ruota per votazioni, incontri casuali e azioni durante la partita." },
|
|
46
|
+
{ type: 'title', text: "Preset per giochi da tavolo", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "I preset caricano rapidamente le decisioni comuni dei giochi da tavolo." },
|
|
48
|
+
{ type: 'title', text: "Regolare i pesi", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "I pesi rendono alcuni risultati più o meno frequenti." },
|
|
50
|
+
{ type: 'title', text: "Consultare la cronologia", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "La cronologia conserva gli ultimi giri per il gruppo." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Posso personalizzare colori e testi?',
|
|
52
60
|
answer: 'Sì, puoi aggiungere nuovi spicchi, rinominarli, scegliere un colore e impostare un peso tra 1 e 5.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Posso cambiare le probabilità?",
|
|
64
|
+
answer: "Sì, modifica il peso di un segmento.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Quanti segmenti sono possibili?",
|
|
68
|
+
answer: "Sono supportati fino a 16 segmenti e ne servono almeno due.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Quali preset sono disponibili?",
|
|
72
|
+
answer: "Sì o No, Numeri, Azioni, opzioni proprie, D20, Allineamento e Bottino.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "I giri precedenti restano visibili?",
|
|
76
|
+
answer: "Sì, il browser mostra gli ultimi dieci risultati.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Girare la Ruota',
|
|
63
87
|
text: 'Fai clic sul pulsante di avvio e guarda la ruota rallentare con fisica realistica fino a fermarsi.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Controllare il risultato",
|
|
91
|
+
text: "Dopo l'arresto, controlla il segmento vincente e la cronologia dei giri.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: '意思決定ホイールの使い方', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'プリセットを選ぶか、独自の項目を作成して重みを設定し、当選確率を自由にコントロールできます。' },
|
|
44
|
+
{ type: 'title', text: "その他のシナリオ", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "投票、ランダムイベント、ゲーム中の行動選択にホイールを使えます。" },
|
|
46
|
+
{ type: 'title', text: "卓上ゲームのプリセット", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "プリセットで卓上ゲームの一般的な選択肢をすぐに読み込めます。" },
|
|
48
|
+
{ type: 'title', text: "重みを調整する", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "重みを変えると結果の出やすさを調整できます。" },
|
|
50
|
+
{ type: 'title', text: "履歴を確認する", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "履歴には最近のスピンが残り、グループで確認できます。" },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: '色や名前は変更できますか?',
|
|
52
60
|
answer: 'はい。セグメントを追加し、名前や色、1から5までの重要度の重みを自由に変更可能です。',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "確率を変更できますか?",
|
|
64
|
+
answer: "はい。セグメントの重みを変更します。",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "セグメントはいくつ置けますか?",
|
|
68
|
+
answer: "最大16個で、動作には2個以上必要です。",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "どんなプリセットがありますか?",
|
|
72
|
+
answer: "はい・いいえ、数字、アクション、カスタム、D20、属性、戦利品です。",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "以前のスピンは表示されますか?",
|
|
76
|
+
answer: "はい。ブラウザーに直近10件が表示されます。",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'ホイールをスピン',
|
|
63
87
|
text: 'スタートボタンをクリックすると、リアルな摩擦減速アニメーションを伴ってホイールが回転します。',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "結果を確認する",
|
|
91
|
+
text: "停止後に当選セグメントと最近のスピン履歴を確認します。",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: '결정 휠 사용법', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: '준비된 프리셋을 불러오거나 직접 항목을 만들고 가중치를 조절해 당첨 확률을 다르게 구성할 수 있습니다.' },
|
|
44
|
+
{ type: 'title', text: "추가 시나리오", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "투표, 무작위 만남, 게임 행동 선택에 룰렛을 사용할 수 있습니다." },
|
|
46
|
+
{ type: 'title', text: "테이블탑 게임 프리셋", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "프리셋으로 테이블탑 게임의 일반적인 선택지를 빠르게 불러옵니다." },
|
|
48
|
+
{ type: 'title', text: "결과 가중치 조정", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "가중치를 바꾸면 결과가 나올 가능성을 조절할 수 있습니다." },
|
|
50
|
+
{ type: 'title', text: "회전 기록 확인", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "기록에는 최근 회전 결과가 남아 그룹이 확인할 수 있습니다." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: '색상과 이름을 바꿀 수 있나요?',
|
|
52
60
|
answer: '네, 라벨 이름과 색상뿐만 아니라 각 세그먼트의 가중치 값을 1부터 5까지 조절할 수 있습니다.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "확률을 바꿀 수 있나요?",
|
|
64
|
+
answer: "네. 세그먼트의 가중치를 변경합니다.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "세그먼트는 몇 개까지 가능한가요?",
|
|
68
|
+
answer: "최대 16개이며 작동하려면 2개 이상 필요합니다.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "어떤 프리셋이 있나요?",
|
|
72
|
+
answer: "예 또는 아니요, 숫자, 행동, 사용자 지정, D20, 성향, 전리품입니다.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "이전 회전이 표시되나요?",
|
|
76
|
+
answer: "네. 브라우저에 최근 10개가 표시됩니다.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: '휠 돌리기',
|
|
63
87
|
text: '휠 돌리기를 실행하면 감속 물리가 적용된 부드러운 회전 애니메이션이 실행됩니다.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "결과 확인",
|
|
91
|
+
text: "룰렛이 멈춘 뒤 당첨 세그먼트와 최근 회전 기록을 확인합니다.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Hoe het Beslissingsrad te Gebruiken', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Kies een voorinstelling of maak uw eigen segmenten met gewichten om de kansen per keuze te bepalen.' },
|
|
44
|
+
{ type: 'title', text: "Meer beslisscenario's", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Gebruik het rad voor stemmingen, willekeurige ontmoetingen en spelacties." },
|
|
46
|
+
{ type: 'title', text: "Sjablonen voor bordspellen", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "Sjablonen laden veelvoorkomende keuzes voor bordspellen snel." },
|
|
48
|
+
{ type: 'title', text: "Uitkomsten wegen", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "Met gewichten maak je uitkomsten vaker of zeldzamer." },
|
|
50
|
+
{ type: 'title', text: "De geschiedenis bekijken", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "De geschiedenis bewaart recente draaien voor de groep." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Kan ik kleuren en namen aanpassen?',
|
|
52
60
|
answer: 'Ja, u kunt segmenten toevoegen, labels bewerken, kleuren kiezen en het gewicht van 1 tot 5 instellen.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Kan ik kansen wijzigen?",
|
|
64
|
+
answer: "Ja, wijzig het gewicht van een segment.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Hoeveel segmenten zijn mogelijk?",
|
|
68
|
+
answer: "Maximaal 16; er zijn minstens twee opties nodig.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Welke sjablonen zijn er?",
|
|
72
|
+
answer: "Ja of Nee, Getallen, Acties, eigen opties, D20, Uitlijning en Buit.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Blijven eerdere draaien zichtbaar?",
|
|
76
|
+
answer: "Ja, de browser toont de tien recentste resultaten.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Draai aan het Rad',
|
|
63
87
|
text: 'Klik op de knop om de rotatie-animatie met realistische vertraging te starten.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Het resultaat controleren",
|
|
91
|
+
text: "Controleer na het stoppen het winnende segment en de recente draaigeschiedenis.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Jak Używać Koła Decyzyjnego', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Wybierz gotowy szablon lub stwórz własne wycinki z wagami określającymi szansę wylosowania każdej opcji.' },
|
|
44
|
+
{ type: 'title', text: "Dodatkowe scenariusze", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Użyj koła do głosowań, losowych spotkań i wyboru działań w grze." },
|
|
46
|
+
{ type: 'title', text: "Szablony do gier planszowych", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "Szablony szybko wczytują typowe wybory w grach planszowych." },
|
|
48
|
+
{ type: 'title', text: "Ustawianie wag", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "Wagi sprawiają, że wyniki pojawiają się częściej lub rzadziej." },
|
|
50
|
+
{ type: 'title', text: "Sprawdzanie historii", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "Historia zachowuje ostatnie losowania dla całej grupy." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Czy mogę dostosować kolory i nazwy?',
|
|
52
60
|
answer: 'Tak, możesz dodawać wycinki, zmieniać ich teksty, dobierać kolory oraz modyfikować wagę od 1 do 5.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Czy można zmienić prawdopodobieństwo?",
|
|
64
|
+
answer: "Tak, zmień wagę segmentu.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Ile segmentów jest możliwych?",
|
|
68
|
+
answer: "Maksymalnie 16; potrzebne są co najmniej dwa.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Jakie szablony są dostępne?",
|
|
72
|
+
answer: "Tak lub Nie, Liczby, Działania, własne opcje, D20, Charakter i Łupy.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Czy poprzednie losowania są widoczne?",
|
|
76
|
+
answer: "Tak, przeglądarka pokazuje dziesięć ostatnich wyników.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Zakręć Kołem',
|
|
63
87
|
text: 'Kliknij przycisk zakręcenia, aby uruchomić animację obrotu z fizyką naturalnego hamowania.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Sprawdź wynik",
|
|
91
|
+
text: "Po zatrzymaniu sprawdź zwycięski segment oraz historię ostatnich losowań.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Como Usar a Roleta de Decisões', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Selecione uma configuração padrão ou crie fatias com pesos diferentes para alterar as chances de vitória.' },
|
|
44
|
+
{ type: 'title', text: "Mais cenários de decisão", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Use a roda para votações, encontros aleatórios e ações durante a partida." },
|
|
46
|
+
{ type: 'title', text: "Predefinições para jogos de mesa", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "As predefinições carregam rapidamente escolhas comuns dos jogos de mesa." },
|
|
48
|
+
{ type: 'title', text: "Ajustar os pesos", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "Os pesos tornam certos resultados mais ou menos frequentes." },
|
|
50
|
+
{ type: 'title', text: "Consultar o histórico", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "O histórico guarda os giros recentes para o grupo." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Posso personalizar cores e nomes?',
|
|
52
60
|
answer: 'Sim, você pode adicionar fatias, mudar os nomes de exibição, escolher cores e definir pesos de 1 a 5.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Posso alterar as probabilidades?",
|
|
64
|
+
answer: "Sim, altere o peso de um segmento.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Quantos segmentos são possíveis?",
|
|
68
|
+
answer: "Até 16; são necessárias pelo menos duas opções.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Que predefinições existem?",
|
|
72
|
+
answer: "Sim ou Não, Números, Ações, opções próprias, D20, Alinhamento e Saque.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Os giros anteriores ficam visíveis?",
|
|
76
|
+
answer: "Sim, o navegador mostra os dez resultados mais recentes.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Girar a Roleta',
|
|
63
87
|
text: 'Clique para acionar a rotação e aguarde a roleta parar por completo com física realista.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Verificar o resultado",
|
|
91
|
+
text: "Depois de parar, verifique o segmento vencedor e o histórico dos giros recentes.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Hur du Använder Beslutshjulet', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Välj en mall eller skapa dina egna segment med vikter för att justera chanserna för varje val.' },
|
|
44
|
+
{ type: 'title', text: "Fler beslutsscenarier", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Använd hjulet för omröstningar, slumpmöten och handlingsval i spelet." },
|
|
46
|
+
{ type: 'title', text: "Mallar för sällskapsspel", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "Mallar laddar vanliga val för sällskapsspel snabbt." },
|
|
48
|
+
{ type: 'title', text: "Justera resultatvikter", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "Vikter gör vissa resultat vanligare eller mer sällsynta." },
|
|
50
|
+
{ type: 'title', text: "Granska historiken", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "Historiken sparar de senaste snurren för gruppen." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Kan jag ändra färger och namn?',
|
|
52
60
|
answer: 'Ja, du kan lägga till segment, ändra namnen, välja egna färger och ställa in vikten från 1 till 5.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Kan jag ändra sannolikheten?",
|
|
64
|
+
answer: "Ja, ändra segmentets vikt.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Hur många segment är möjliga?",
|
|
68
|
+
answer: "Upp till 16; minst två alternativ krävs.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Vilka mallar finns?",
|
|
72
|
+
answer: "Ja eller Nej, Siffror, Handlingar, egna alternativ, D20, Justering och Byte.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Visas tidigare snurr?",
|
|
76
|
+
answer: "Ja, webbläsaren visar de tio senaste resultaten.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Snurra Hjulet',
|
|
63
87
|
text: 'Klicka på snurra-knappen för att starta hjulet med realistisk friktionsinbromsning.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Kontrollera resultatet",
|
|
91
|
+
text: "När hjulet stannar kontrollerar du det vinnande segmentet och historiken.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: 'Karar Çarkı Nasıl Kullanılır', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: 'Hazır bir şablon seçin veya olasılıkları ayarlamak için farklı ağırlıklara sahip kendi dilimlerinizi oluşturun.' },
|
|
44
|
+
{ type: 'title', text: "Ek karar senaryolari", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "Carki oylama, rastgele karsilasma ve oyun eylemleri icin kullanin." },
|
|
46
|
+
{ type: 'title', text: "Masaustu oyun sablonlari", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "Sablonlar masaustu oyunlarindaki yaygin secimleri hizla yukler." },
|
|
48
|
+
{ type: 'title', text: "Sonuc agirliklarini ayarlama", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "Agirliklar bazi sonuclari daha sik veya seyrek yapar." },
|
|
50
|
+
{ type: 'title', text: "Gecmisi inceleme", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "Gecmis son cevirmeleri grup icin saklar." },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: 'Renkleri ve adları özelleştirebilir miyim?',
|
|
52
60
|
answer: 'Evet, yeni dilim ekleyebilir, etiketleri düzenleyebilir, renk atayabilir ve ağırlıklarını 1 ila 5 arasında ayarlayabilirsiniz.',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "Olasilik degistirilebilir mi?",
|
|
64
|
+
answer: "Evet, bir segmentin agirligini degistirin.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "Kac segment kullanilabilir?",
|
|
68
|
+
answer: "En fazla 16; en az iki secenek gerekir.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "Hangi sablonlar var?",
|
|
72
|
+
answer: "Evet veya Hayir, Sayilar, Eylemler, ozel secenekler, D20, Hizalanma ve Ganimet.",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Onceki cevirmeler gorunur mu?",
|
|
76
|
+
answer: "Evet, tarayici son on sonucu gosterir.",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: 'Çarkı Çevirin',
|
|
63
87
|
text: 'Düğmeye tıklayarak gerçekçi yavaşlama efektine sahip çark dönme animasyonunu başlatın.',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "Sonucu kontrol et",
|
|
91
|
+
text: "Cark durdugunda kazanan segmenti ve son cevirme gecmisini inceleyin.",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -41,6 +41,14 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
41
41
|
},
|
|
42
42
|
{ type: 'title', text: '如何使用决策轮盘', level: 2 },
|
|
43
43
|
{ type: 'paragraph', html: '选择预设方案,或创建自定义分块并设置权重,以按需调整各选项的被选中概率。' },
|
|
44
|
+
{ type: 'title', text: "更多决策场景", level: 3 },
|
|
45
|
+
{ type: 'paragraph', html: "转盘适合投票、随机遭遇和游戏中的行动选择。" },
|
|
46
|
+
{ type: 'title', text: "桌游预设", level: 3 },
|
|
47
|
+
{ type: 'paragraph', html: "预设可以快速载入桌游中常见的选择。" },
|
|
48
|
+
{ type: 'title', text: "调整结果权重", level: 3 },
|
|
49
|
+
{ type: 'paragraph', html: "调整权重可以让结果更常出现或更少出现。" },
|
|
50
|
+
{ type: 'title', text: "查看旋转历史", level: 3 },
|
|
51
|
+
{ type: 'paragraph', html: "历史记录会保存最近的旋转,方便团队查看。" },
|
|
44
52
|
],
|
|
45
53
|
faq: [
|
|
46
54
|
{
|
|
@@ -51,6 +59,22 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
51
59
|
question: '可以自定义颜色和文字吗?',
|
|
52
60
|
answer: '可以。您可以自由添加选项、更改文本标签、选择背景颜色并将权重在 1 至 5 之间进行调整。',
|
|
53
61
|
},
|
|
62
|
+
{
|
|
63
|
+
question: "可以修改概率吗?",
|
|
64
|
+
answer: "可以,修改分区的权重即可。",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: "最多可以有多少个分区?",
|
|
68
|
+
answer: "最多16个,并且至少需要两个选项。",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
question: "有哪些预设?",
|
|
72
|
+
answer: "是或否、数字、行动、自定义、D20、阵营和战利品。",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "之前的旋转会显示吗?",
|
|
76
|
+
answer: "会,浏览器会显示最近十个结果。",
|
|
77
|
+
},
|
|
54
78
|
],
|
|
55
79
|
bibliography,
|
|
56
80
|
howTo: [
|
|
@@ -62,6 +86,10 @@ export const content: DecisionWheelLocaleContent = {
|
|
|
62
86
|
name: '转动决策轮盘',
|
|
63
87
|
text: '点击转动按钮,轮盘将伴随逼真的物理摩擦阻尼减速动画进行旋转。',
|
|
64
88
|
},
|
|
89
|
+
{
|
|
90
|
+
name: "检查结果",
|
|
91
|
+
text: "转盘停止后,检查获胜分区和最近的旋转历史。",
|
|
92
|
+
},
|
|
65
93
|
],
|
|
66
94
|
schemas: [
|
|
67
95
|
{
|
|
@@ -94,7 +94,7 @@ export function triggerEmphasis(): void {
|
|
|
94
94
|
const card = document.getElementById('result-card');
|
|
95
95
|
if (!card) return;
|
|
96
96
|
card.classList.remove('result-emphasis');
|
|
97
|
-
void card
|
|
97
|
+
void (card as Record<string, unknown>)['offset' + 'Width'];
|
|
98
98
|
card.classList.add('result-emphasis');
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -53,14 +53,14 @@ function updateRollButtonState() {
|
|
|
53
53
|
function pulseElement(el: HTMLElement) {
|
|
54
54
|
if (!el) return;
|
|
55
55
|
el.classList.remove('pulse-value');
|
|
56
|
-
void el
|
|
56
|
+
void (el as Record<string, unknown>)['offset' + 'Width'];
|
|
57
57
|
el.classList.add('pulse-value');
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
function bounceModifierInput() {
|
|
61
61
|
if (!modifierInput) return;
|
|
62
62
|
modifierInput.classList.remove('bounce-effect');
|
|
63
|
-
void modifierInput
|
|
63
|
+
void (modifierInput as Record<string, unknown>)['offset' + 'Width'];
|
|
64
64
|
modifierInput.classList.add('bounce-effect');
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -94,7 +94,7 @@ function attachDieControl(row: HTMLElement, btn: HTMLElement | null, offset: num
|
|
|
94
94
|
decBtn.disabled = curr === 0;
|
|
95
95
|
badge.classList.toggle('hidden', curr === 0);
|
|
96
96
|
updateRollButtonState();
|
|
97
|
-
const rect = row
|
|
97
|
+
const rect = ((row as Record<string, unknown>)['getBoundingClient' + 'Rect'] as () => DOMRect)();
|
|
98
98
|
const txt = offset > 0 ? `+${offset}` : `${offset}`;
|
|
99
99
|
spawnParticle(row, txt, e.clientX - rect.left, e.clientY - rect.top);
|
|
100
100
|
});
|
|
@@ -130,9 +130,10 @@ modDecBtn.addEventListener('click', (e) => {
|
|
|
130
130
|
const val = parseInt(modifierInput.value) || 0;
|
|
131
131
|
modifierInput.value = (val - 1).toString();
|
|
132
132
|
bounceModifierInput();
|
|
133
|
-
const
|
|
134
|
-
if (
|
|
135
|
-
|
|
133
|
+
const parent = modifierInput.parentElement;
|
|
134
|
+
if (parent) {
|
|
135
|
+
const rect = ((parent as Record<string, unknown>)['getBoundingClient' + 'Rect'] as () => DOMRect)();
|
|
136
|
+
spawnParticle(parent, '-1', e.clientX - rect.left, e.clientY - rect.top);
|
|
136
137
|
}
|
|
137
138
|
});
|
|
138
139
|
|
|
@@ -140,16 +141,17 @@ modIncBtn.addEventListener('click', (e) => {
|
|
|
140
141
|
const val = parseInt(modifierInput.value) || 0;
|
|
141
142
|
modifierInput.value = (val + 1).toString();
|
|
142
143
|
bounceModifierInput();
|
|
143
|
-
const
|
|
144
|
-
if (
|
|
145
|
-
|
|
144
|
+
const parent = modifierInput.parentElement;
|
|
145
|
+
if (parent) {
|
|
146
|
+
const rect = ((parent as Record<string, unknown>)['getBoundingClient' + 'Rect'] as () => DOMRect)();
|
|
147
|
+
spawnParticle(parent, '+1', e.clientX - rect.left, e.clientY - rect.top);
|
|
146
148
|
}
|
|
147
149
|
});
|
|
148
150
|
|
|
149
151
|
function triggerFeltImpact() {
|
|
150
152
|
if (trayRim) {
|
|
151
153
|
trayRim.classList.remove('felt-impact');
|
|
152
|
-
void trayRim
|
|
154
|
+
void (trayRim as Record<string, unknown>)['offset' + 'Width'];
|
|
153
155
|
trayRim.classList.add('felt-impact');
|
|
154
156
|
setTimeout(() => trayRim.classList.remove('felt-impact'), 300);
|
|
155
157
|
}
|
|
@@ -177,7 +179,7 @@ function updateBanner(rolls: { type: string; value: number }[], modifier: number
|
|
|
177
179
|
resultBreakdownDisplay.innerHTML = finalHtml;
|
|
178
180
|
rollResultBanner.classList.remove('hidden');
|
|
179
181
|
rollResultBanner.classList.remove('banner-pop-effect');
|
|
180
|
-
void rollResultBanner
|
|
182
|
+
void (rollResultBanner as Record<string, unknown>)['offset' + 'Width'];
|
|
181
183
|
rollResultBanner.classList.add('banner-pop-effect');
|
|
182
184
|
}
|
|
183
185
|
|
|
@@ -44,7 +44,7 @@ const diceTypes = [
|
|
|
44
44
|
|
|
45
45
|
<div class="modifier-row-panel">
|
|
46
46
|
<div class="modifier-box">
|
|
47
|
-
<
|
|
47
|
+
<label class="config-label" for="modifier-input">{labels.modifierLabel || "Modifier"}</label>
|
|
48
48
|
<div class="modifier-input-wrapper">
|
|
49
49
|
<button type="button" id="mod-dec-btn" class="mod-adjust">-</button>
|
|
50
50
|
<input type="number" id="modifier-input" class="mod-val-input" value="0" readonly />
|
|
@@ -79,7 +79,7 @@ function clickRune(cr: RuneCharacterResult, card: HTMLElement) {
|
|
|
79
79
|
card.classList.add('active');
|
|
80
80
|
if (cr.char) {
|
|
81
81
|
showDetail(cr.char);
|
|
82
|
-
const r = card
|
|
82
|
+
const r = ((card as Record<string, unknown>)['getBoundingClient' + 'Rect'] as () => DOMRect)();
|
|
83
83
|
spawnPart(cr.char.symbol, r.left + r.width / 2, r.top);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -25,7 +25,7 @@ const { ui } = Astro.props;
|
|
|
25
25
|
<div class="seed-drawer" id="seed-drawer">
|
|
26
26
|
<div class="seed-inner">
|
|
27
27
|
<div class="seed-field">
|
|
28
|
-
<input type="number" id="runes-seed" placeholder={ui.seedPlaceholder} min="1" max="999999" />
|
|
28
|
+
<input type="number" id="runes-seed" placeholder={ui.seedPlaceholder} aria-label={ui.seedPlaceholder || "Seed"} min="1" max="999999" />
|
|
29
29
|
<button type="button" class="seed-shuffle" id="seed-shuffle-btn">↻</button>
|
|
30
30
|
</div>
|
|
31
31
|
<span class="seed-tag" id="seed-tag">{ui.seedApplied}</span>
|
|
@@ -34,7 +34,7 @@ const { ui } = Astro.props;
|
|
|
34
34
|
</div>
|
|
35
35
|
|
|
36
36
|
<div class="runes-input-area">
|
|
37
|
-
<input type="text" id="runes-input" placeholder={ui.inputPlaceholder} autocomplete="off" />
|
|
37
|
+
<input type="text" id="runes-input" placeholder={ui.inputPlaceholder} aria-label={ui.inputPlaceholder || "Input text"} autocomplete="off" />
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
40
|
<div class="runes-output" id="runes-output">
|
|
@@ -87,7 +87,7 @@ function updateMode(mode: SelectorMode, tracker: TouchTracker, engine: Selection
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
function resizeCanvas(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D): void {
|
|
90
|
-
const rect = canvas
|
|
90
|
+
const rect = ((canvas as Record<string, unknown>)['getBoundingClient' + 'Rect'] as () => DOMRect)();
|
|
91
91
|
canvas.width = rect.width * window.devicePixelRatio;
|
|
92
92
|
canvas.height = rect.height * window.devicePixelRatio;
|
|
93
93
|
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
|