@stamprally/admin-ui 0.4.0 → 0.5.1
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/dist/index.cjs +253 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +44 -38
- package/dist/index.d.ts +44 -38
- package/dist/index.js +253 -10
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -5,15 +5,23 @@ var react = require('react');
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
7
7
|
// src/index.tsx
|
|
8
|
-
var localePair = (value) =>
|
|
9
|
-
ja:
|
|
10
|
-
|
|
11
|
-
})
|
|
8
|
+
var localePair = (value) => {
|
|
9
|
+
if (typeof value === "string") return { ja: value, en: "" };
|
|
10
|
+
const result = {};
|
|
11
|
+
for (const [key, text] of Object.entries(value ?? {})) {
|
|
12
|
+
if (text !== void 0) result[key] = text;
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
};
|
|
12
16
|
function updateText(value, locale, next) {
|
|
13
17
|
const current = localePair(value);
|
|
14
18
|
return { ...current, [locale]: next };
|
|
15
19
|
}
|
|
16
|
-
function GeneralSettingsForm({
|
|
20
|
+
function GeneralSettingsForm({
|
|
21
|
+
config,
|
|
22
|
+
locale = "ja",
|
|
23
|
+
onChange
|
|
24
|
+
}) {
|
|
17
25
|
const pair = localePair(config.title);
|
|
18
26
|
return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "stamprally-admin-card", children: [
|
|
19
27
|
/* @__PURE__ */ jsxRuntime.jsx("legend", { children: "General settings" }),
|
|
@@ -212,6 +220,47 @@ function SpotItemForm({
|
|
|
212
220
|
}
|
|
213
221
|
)
|
|
214
222
|
] }),
|
|
223
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
224
|
+
"Description (",
|
|
225
|
+
locale,
|
|
226
|
+
")",
|
|
227
|
+
" ",
|
|
228
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
229
|
+
"textarea",
|
|
230
|
+
{
|
|
231
|
+
value: core.resolveLocalizedText(spot.description, locale),
|
|
232
|
+
onChange: (event) => onChange({
|
|
233
|
+
...spot,
|
|
234
|
+
description: updateText(spot.description, locale, event.target.value)
|
|
235
|
+
})
|
|
236
|
+
}
|
|
237
|
+
)
|
|
238
|
+
] }),
|
|
239
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
240
|
+
"Hint (",
|
|
241
|
+
locale,
|
|
242
|
+
")",
|
|
243
|
+
" ",
|
|
244
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
245
|
+
"textarea",
|
|
246
|
+
{
|
|
247
|
+
value: core.resolveLocalizedText(spot.hint, locale),
|
|
248
|
+
onChange: (event) => onChange({ ...spot, hint: updateText(spot.hint, locale, event.target.value) })
|
|
249
|
+
}
|
|
250
|
+
)
|
|
251
|
+
] }),
|
|
252
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
253
|
+
"Order index",
|
|
254
|
+
" ",
|
|
255
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
256
|
+
"input",
|
|
257
|
+
{
|
|
258
|
+
type: "number",
|
|
259
|
+
value: spot.orderIndex ?? spot.order ?? index + 1,
|
|
260
|
+
onChange: (event) => onChange({ ...spot, orderIndex: Number(event.target.value) })
|
|
261
|
+
}
|
|
262
|
+
)
|
|
263
|
+
] }),
|
|
215
264
|
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
216
265
|
"Icon URL",
|
|
217
266
|
" ",
|
|
@@ -233,6 +282,53 @@ function SpotItemForm({
|
|
|
233
282
|
}
|
|
234
283
|
)
|
|
235
284
|
] }),
|
|
285
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
286
|
+
"Redirect URL after claim",
|
|
287
|
+
" ",
|
|
288
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
289
|
+
"input",
|
|
290
|
+
{
|
|
291
|
+
value: spot.redirectUrlAfterClaim ?? "",
|
|
292
|
+
onChange: (event) => setField("redirectUrlAfterClaim", event)
|
|
293
|
+
}
|
|
294
|
+
)
|
|
295
|
+
] }),
|
|
296
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
297
|
+
"Prerequisites (comma-separated stamp IDs)",
|
|
298
|
+
" ",
|
|
299
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
300
|
+
"input",
|
|
301
|
+
{
|
|
302
|
+
value: (spot.requiresStampIds ?? spot.dependsOn ?? []).join(", "),
|
|
303
|
+
onChange: (event) => {
|
|
304
|
+
const ids = event.target.value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
305
|
+
if (ids.length === 0) {
|
|
306
|
+
const { requiresStampIds: _requiresStampIds, ...rest } = spot;
|
|
307
|
+
onChange(rest);
|
|
308
|
+
} else onChange({ ...spot, requiresStampIds: ids });
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
)
|
|
312
|
+
] }),
|
|
313
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
314
|
+
"Metadata (JSON)",
|
|
315
|
+
" ",
|
|
316
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
317
|
+
"textarea",
|
|
318
|
+
{
|
|
319
|
+
value: JSON.stringify(spot.metadata ?? {}, null, 2),
|
|
320
|
+
onChange: (event) => {
|
|
321
|
+
try {
|
|
322
|
+
const parsed = JSON.parse(event.target.value);
|
|
323
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
324
|
+
onChange({ ...spot, metadata: parsed });
|
|
325
|
+
}
|
|
326
|
+
} catch {
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
)
|
|
331
|
+
] }),
|
|
236
332
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
237
333
|
ConditionEditor,
|
|
238
334
|
{
|
|
@@ -243,7 +339,11 @@ function SpotItemForm({
|
|
|
243
339
|
)
|
|
244
340
|
] });
|
|
245
341
|
}
|
|
246
|
-
function SpotListEditor({
|
|
342
|
+
function SpotListEditor({
|
|
343
|
+
spots,
|
|
344
|
+
locale = "ja",
|
|
345
|
+
onChange
|
|
346
|
+
}) {
|
|
247
347
|
return /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-label": "Spots", children: [
|
|
248
348
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { children: "Spots" }),
|
|
249
349
|
spots.map((spot, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -259,7 +359,11 @@ function SpotListEditor({ spots, locale = "ja", onChange }) {
|
|
|
259
359
|
))
|
|
260
360
|
] });
|
|
261
361
|
}
|
|
262
|
-
function RewardListEditor({
|
|
362
|
+
function RewardListEditor({
|
|
363
|
+
rewards,
|
|
364
|
+
locale = "ja",
|
|
365
|
+
onChange
|
|
366
|
+
}) {
|
|
263
367
|
return /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-label": "Rewards", children: [
|
|
264
368
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { children: "Rewards" }),
|
|
265
369
|
rewards.map((reward, index) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "stamprally-admin-card", children: [
|
|
@@ -295,6 +399,26 @@ function RewardListEditor({ rewards, locale = "ja", onChange }) {
|
|
|
295
399
|
}
|
|
296
400
|
)
|
|
297
401
|
] }),
|
|
402
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
403
|
+
"Description (",
|
|
404
|
+
locale,
|
|
405
|
+
")",
|
|
406
|
+
" ",
|
|
407
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
408
|
+
"textarea",
|
|
409
|
+
{
|
|
410
|
+
value: core.resolveLocalizedText(reward.description, locale),
|
|
411
|
+
onChange: (event) => onChange(
|
|
412
|
+
rewards.map(
|
|
413
|
+
(item, itemIndex) => itemIndex === index ? {
|
|
414
|
+
...item,
|
|
415
|
+
description: updateText(item.description, locale, event.target.value)
|
|
416
|
+
} : item
|
|
417
|
+
)
|
|
418
|
+
)
|
|
419
|
+
}
|
|
420
|
+
)
|
|
421
|
+
] }),
|
|
298
422
|
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
299
423
|
"Required stamps",
|
|
300
424
|
" ",
|
|
@@ -332,6 +456,113 @@ function RewardListEditor({ rewards, locale = "ja", onChange }) {
|
|
|
332
456
|
)
|
|
333
457
|
}
|
|
334
458
|
)
|
|
459
|
+
] }),
|
|
460
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
461
|
+
"Stock limit",
|
|
462
|
+
" ",
|
|
463
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
464
|
+
"input",
|
|
465
|
+
{
|
|
466
|
+
type: "number",
|
|
467
|
+
min: 1,
|
|
468
|
+
value: reward.stockLimit ?? reward.maxStock ?? "",
|
|
469
|
+
onChange: (event) => onChange(
|
|
470
|
+
rewards.map((item, itemIndex) => {
|
|
471
|
+
if (itemIndex !== index) return item;
|
|
472
|
+
if (event.target.value === "") {
|
|
473
|
+
const { stockLimit: _stockLimit, ...rest } = item;
|
|
474
|
+
return rest;
|
|
475
|
+
}
|
|
476
|
+
return { ...item, stockLimit: Number(event.target.value) };
|
|
477
|
+
})
|
|
478
|
+
)
|
|
479
|
+
}
|
|
480
|
+
)
|
|
481
|
+
] }),
|
|
482
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
483
|
+
"User claim limit",
|
|
484
|
+
" ",
|
|
485
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
486
|
+
"input",
|
|
487
|
+
{
|
|
488
|
+
type: "number",
|
|
489
|
+
min: 1,
|
|
490
|
+
value: reward.userClaimLimit ?? reward.limitPerUser ?? "",
|
|
491
|
+
onChange: (event) => onChange(
|
|
492
|
+
rewards.map((item, itemIndex) => {
|
|
493
|
+
if (itemIndex !== index) return item;
|
|
494
|
+
if (event.target.value === "") {
|
|
495
|
+
const { userClaimLimit: _userClaimLimit, ...rest } = item;
|
|
496
|
+
return rest;
|
|
497
|
+
}
|
|
498
|
+
return { ...item, userClaimLimit: Number(event.target.value) };
|
|
499
|
+
})
|
|
500
|
+
)
|
|
501
|
+
}
|
|
502
|
+
)
|
|
503
|
+
] }),
|
|
504
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
505
|
+
"Redemption method",
|
|
506
|
+
" ",
|
|
507
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
508
|
+
"select",
|
|
509
|
+
{
|
|
510
|
+
value: reward.redemptionMethod,
|
|
511
|
+
onChange: (event) => onChange(
|
|
512
|
+
rewards.map(
|
|
513
|
+
(item, itemIndex) => itemIndex === index ? {
|
|
514
|
+
...item,
|
|
515
|
+
redemptionMethod: event.target.value
|
|
516
|
+
} : item
|
|
517
|
+
)
|
|
518
|
+
),
|
|
519
|
+
children: [
|
|
520
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "manual_slide", children: "manual_slide" }),
|
|
521
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "staff_passcode", children: "staff_passcode" }),
|
|
522
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "view_only", children: "view_only" }),
|
|
523
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "server_claim", children: "server_claim" })
|
|
524
|
+
]
|
|
525
|
+
}
|
|
526
|
+
)
|
|
527
|
+
] }),
|
|
528
|
+
reward.redemptionMethod === "staff_passcode" && /* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
529
|
+
"Staff passcode",
|
|
530
|
+
" ",
|
|
531
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
532
|
+
"input",
|
|
533
|
+
{
|
|
534
|
+
type: "password",
|
|
535
|
+
value: reward.staffPasscode ?? "",
|
|
536
|
+
onChange: (event) => onChange(
|
|
537
|
+
rewards.map(
|
|
538
|
+
(item, itemIndex) => itemIndex === index ? { ...item, staffPasscode: event.target.value } : item
|
|
539
|
+
)
|
|
540
|
+
)
|
|
541
|
+
}
|
|
542
|
+
)
|
|
543
|
+
] }),
|
|
544
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { children: [
|
|
545
|
+
"Conditions (JSON)",
|
|
546
|
+
" ",
|
|
547
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
548
|
+
"textarea",
|
|
549
|
+
{
|
|
550
|
+
value: JSON.stringify(reward.conditions ?? [], null, 2),
|
|
551
|
+
onChange: (event) => {
|
|
552
|
+
try {
|
|
553
|
+
const parsed = JSON.parse(event.target.value);
|
|
554
|
+
if (Array.isArray(parsed)) {
|
|
555
|
+
onChange(
|
|
556
|
+
rewards.map(
|
|
557
|
+
(item, itemIndex) => itemIndex === index ? { ...item, conditions: parsed } : item
|
|
558
|
+
)
|
|
559
|
+
);
|
|
560
|
+
}
|
|
561
|
+
} catch {
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
)
|
|
335
566
|
] })
|
|
336
567
|
] }, reward.id))
|
|
337
568
|
] });
|
|
@@ -394,7 +625,12 @@ function ThemeEditor({
|
|
|
394
625
|
] })
|
|
395
626
|
] });
|
|
396
627
|
}
|
|
397
|
-
function QrExportModal({
|
|
628
|
+
function QrExportModal({
|
|
629
|
+
open,
|
|
630
|
+
config,
|
|
631
|
+
locale = "ja",
|
|
632
|
+
onClose
|
|
633
|
+
}) {
|
|
398
634
|
if (!open) return null;
|
|
399
635
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { role: "dialog", "aria-modal": "true", className: "stamprally-qr-modal", children: [
|
|
400
636
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "stamprally-qr-modal__toolbar", children: [
|
|
@@ -412,7 +648,10 @@ function QrExportModal({ open, config, locale = "ja", onClose }) {
|
|
|
412
648
|
] }, spot.id)) })
|
|
413
649
|
] });
|
|
414
650
|
}
|
|
415
|
-
function JsonConfigIO({
|
|
651
|
+
function JsonConfigIO({
|
|
652
|
+
config,
|
|
653
|
+
onImport
|
|
654
|
+
}) {
|
|
416
655
|
const [value, setValue] = react.useState(() => JSON.stringify(core.stripSensitiveConfig(config), null, 2));
|
|
417
656
|
const [error, setError] = react.useState(null);
|
|
418
657
|
const importConfig = () => {
|
|
@@ -443,7 +682,11 @@ function JsonConfigIO({ config, onImport }) {
|
|
|
443
682
|
error !== null && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", children: error })
|
|
444
683
|
] });
|
|
445
684
|
}
|
|
446
|
-
function RallyEditor({
|
|
685
|
+
function RallyEditor({
|
|
686
|
+
config,
|
|
687
|
+
locale = "ja",
|
|
688
|
+
onChange
|
|
689
|
+
}) {
|
|
447
690
|
const [showQr, setShowQr] = react.useState(false);
|
|
448
691
|
return /* @__PURE__ */ jsxRuntime.jsxs("main", { className: "stamprally-admin", children: [
|
|
449
692
|
/* @__PURE__ */ jsxRuntime.jsxs("header", { children: [
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"names":["resolveLocalizedText","jsxs","jsx","Fragment","THEME_PRESETS","DEFAULT_SHEET_THEME","CURRENT_RALLY_CONFIG_VERSION","useState","stripSensitiveConfig","migrateRallyConfig","validateRallyConfig"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n CURRENT_RALLY_CONFIG_VERSION,\n DEFAULT_SHEET_THEME,\n type LocalizedText,\n migrateRallyConfig,\n type RallyConfig,\n type RewardItem,\n resolveLocalizedText,\n type SheetTheme,\n type SpotItem,\n type StampCondition,\n type SupportedLocale,\n stripSensitiveConfig,\n THEME_PRESETS,\n validateRallyConfig,\n} from \"@stamprally/core\";\nimport type { ChangeEvent } from \"react\";\nimport { useState } from \"react\";\n\nconst localePair = (value: LocalizedText | undefined): { ja: string; en: string } => ({\n ja: resolveLocalizedText(value, \"ja\"),\n en: resolveLocalizedText(value, \"en\"),\n});\n\nfunction updateText(\n value: LocalizedText | undefined,\n locale: \"ja\" | \"en\",\n next: string,\n): LocalizedText {\n const current = localePair(value);\n return { ...current, [locale]: next };\n}\n\nexport interface GeneralSettingsFormProps {\n readonly config: RallyConfig;\n readonly locale?: SupportedLocale;\n readonly onChange: (config: RallyConfig) => void;\n}\nexport function GeneralSettingsForm({ config, locale = \"ja\", onChange }: GeneralSettingsFormProps) {\n const pair = localePair(config.title);\n return (\n <fieldset className=\"stamprally-admin-card\">\n <legend>General settings</legend>\n <label>\n ID <input value={config.id} readOnly />\n </label>\n <label>\n Title ({locale}){\" \"}\n <input\n value={pair[locale]}\n required\n onChange={(event) =>\n onChange({ ...config, title: updateText(config.title, locale, event.target.value) })\n }\n />\n </label>\n <label>\n Start date{\" \"}\n <input\n type=\"datetime-local\"\n value={config.startDate?.slice(0, 16) ?? \"\"}\n onChange={(event) => {\n if (event.target.value === \"\") {\n const { startDate: _startDate, ...rest } = config;\n onChange(rest);\n } else onChange({ ...config, startDate: new Date(event.target.value).toISOString() });\n }}\n />\n </label>\n <label>\n End date{\" \"}\n <input\n type=\"datetime-local\"\n value={config.endDate?.slice(0, 16) ?? \"\"}\n onChange={(event) => {\n if (event.target.value === \"\") {\n const { endDate: _endDate, ...rest } = config;\n onChange(rest);\n } else onChange({ ...config, endDate: new Date(event.target.value).toISOString() });\n }}\n />\n </label>\n <label>\n <input\n type=\"checkbox\"\n checked={config.isSequential === true}\n onChange={(event) => onChange({ ...config, isSequential: event.target.checked })}\n />{\" \"}\n Sequential check-in\n </label>\n </fieldset>\n );\n}\n\nexport interface ConditionEditorProps {\n readonly condition: StampCondition;\n readonly onChange: (condition: StampCondition) => void;\n readonly locale?: SupportedLocale;\n}\nexport function ConditionEditor({ condition, onChange }: ConditionEditorProps) {\n const type = condition.type;\n return (\n <fieldset className=\"stamprally-admin-card\">\n <legend>Check-in condition</legend>\n <label>\n Type{\" \"}\n <select\n value={type}\n onChange={(event) => {\n const next = event.target.value;\n if (next === \"token\") onChange({ type: \"token\", token: \"\" });\n else if (next === \"geo\")\n onChange({ type: \"geo\", latitude: 0, longitude: 0, radiusMeters: 100 });\n else onChange({ type: \"instant\" });\n }}\n >\n <option value=\"instant\">Instant</option>\n <option value=\"token\">QR / passcode</option>\n <option value=\"geo\">GPS</option>\n </select>\n </label>\n {condition.type === \"token\" && (\n <label>\n Token{\" \"}\n <input\n value={condition.token}\n onChange={(event) => onChange({ ...condition, token: event.target.value })}\n />\n </label>\n )}\n {condition.type === \"geo\" && (\n <>\n <label>\n Latitude{\" \"}\n <input\n type=\"number\"\n min={-90}\n max={90}\n value={condition.latitude}\n onChange={(event) => onChange({ ...condition, latitude: Number(event.target.value) })}\n />\n </label>\n <label>\n Longitude{\" \"}\n <input\n type=\"number\"\n min={-180}\n max={180}\n value={condition.longitude}\n onChange={(event) =>\n onChange({ ...condition, longitude: Number(event.target.value) })\n }\n />\n </label>\n <label>\n Radius (m){\" \"}\n <input\n type=\"number\"\n min={1}\n value={condition.radiusMeters}\n onChange={(event) =>\n onChange({ ...condition, radiusMeters: Number(event.target.value) })\n }\n />\n </label>\n </>\n )}\n </fieldset>\n );\n}\n\nexport interface SpotItemFormProps {\n readonly spot: SpotItem;\n readonly index?: number;\n readonly locale?: SupportedLocale;\n readonly onChange: (spot: SpotItem) => void;\n readonly onDelete?: () => void;\n}\nexport function SpotItemForm({\n spot,\n index = 0,\n locale = \"ja\",\n onChange,\n onDelete,\n}: SpotItemFormProps) {\n const pair = localePair(spot.name);\n const setField = (\n field: \"iconUrl\" | \"imageUrl\" | \"externalUrl\" | \"guideId\" | \"groupId\" | \"deckId\",\n event: ChangeEvent<HTMLInputElement>,\n ) => {\n if (event.target.value === \"\") {\n const { [field]: _removed, ...rest } = spot;\n onChange(rest);\n } else onChange({ ...spot, [field]: event.target.value });\n };\n return (\n <article className=\"stamprally-admin-card\">\n <header>\n <strong>Spot {index + 1}</strong>\n {onDelete !== undefined && (\n <button type=\"button\" onClick={onDelete}>\n Delete\n </button>\n )}\n </header>\n <label>\n ID{\" \"}\n <input\n value={spot.id}\n onChange={(event) => onChange({ ...spot, id: event.target.value })}\n />\n </label>\n <label>\n Name ({locale}){\" \"}\n <input\n value={pair[locale]}\n required\n onChange={(event) =>\n onChange({ ...spot, name: updateText(spot.name, locale, event.target.value) })\n }\n />\n </label>\n <label>\n Icon URL{\" \"}\n <input value={spot.iconUrl ?? \"\"} onChange={(event) => setField(\"iconUrl\", event)} />\n </label>\n <label>\n Image URL{\" \"}\n <input value={spot.imageUrl ?? \"\"} onChange={(event) => setField(\"imageUrl\", event)} />\n </label>\n <label>\n External URL{\" \"}\n <input\n value={spot.externalUrl ?? \"\"}\n onChange={(event) => setField(\"externalUrl\", event)}\n />\n </label>\n <ConditionEditor\n condition={spot.condition}\n onChange={(condition) => onChange({ ...spot, condition })}\n locale={locale}\n />\n </article>\n );\n}\n\nexport interface SpotListEditorProps {\n readonly spots: ReadonlyArray<SpotItem>;\n readonly locale?: SupportedLocale;\n readonly onChange: (spots: ReadonlyArray<SpotItem>) => void;\n}\nexport function SpotListEditor({ spots, locale = \"ja\", onChange }: SpotListEditorProps) {\n return (\n <section aria-label=\"Spots\">\n <h2>Spots</h2>\n {spots.map((spot, index) => (\n <SpotItemForm\n key={spot.id}\n spot={spot}\n index={index}\n locale={locale}\n onChange={(next) =>\n onChange(spots.map((item, itemIndex) => (itemIndex === index ? next : item)))\n }\n onDelete={() => onChange(spots.filter((_, itemIndex) => itemIndex !== index))}\n />\n ))}\n </section>\n );\n}\n\nexport interface RewardListEditorProps {\n readonly rewards: ReadonlyArray<RewardItem>;\n readonly locale?: SupportedLocale;\n readonly onChange: (rewards: ReadonlyArray<RewardItem>) => void;\n}\nexport function RewardListEditor({ rewards, locale = \"ja\", onChange }: RewardListEditorProps) {\n return (\n <section aria-label=\"Rewards\">\n <h2>Rewards</h2>\n {rewards.map((reward, index) => (\n <article className=\"stamprally-admin-card\" key={reward.id}>\n <label>\n ID{\" \"}\n <input\n value={reward.id}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index ? { ...item, id: event.target.value } : item,\n ),\n )\n }\n />\n </label>\n <label>\n Title ({locale}){\" \"}\n <input\n value={resolveLocalizedText(reward.title, locale)}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? { ...item, title: updateText(item.title, locale, event.target.value) }\n : item,\n ),\n )\n }\n />\n </label>\n <label>\n Required stamps{\" \"}\n <input\n type=\"number\"\n min={0}\n value={reward.requiredStampCount}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? { ...item, requiredStampCount: Number(event.target.value) }\n : item,\n ),\n )\n }\n />\n </label>\n <label>\n Valid until{\" \"}\n <input\n type=\"datetime-local\"\n value={reward.validUntil?.slice(0, 16) ?? \"\"}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n if (event.target.value === \"\") {\n const { validUntil: _validUntil, ...rest } = item;\n return rest;\n }\n return { ...item, validUntil: new Date(event.target.value).toISOString() };\n }),\n )\n }\n />\n </label>\n </article>\n ))}\n </section>\n );\n}\n\nexport interface ThemePresetSelectorProps {\n readonly value?: SheetTheme;\n readonly locale?: SupportedLocale;\n readonly onChange: (theme: SheetTheme) => void;\n}\nexport function ThemePresetSelector({ value, locale = \"ja\", onChange }: ThemePresetSelectorProps) {\n const selected =\n THEME_PRESETS.find((preset) => JSON.stringify(preset.theme) === JSON.stringify(value))?.id ??\n \"custom\";\n return (\n <label>\n Theme preset{\" \"}\n <select\n value={selected}\n onChange={(event) => {\n const preset = THEME_PRESETS.find((item) => item.id === event.target.value);\n if (preset !== undefined) onChange(preset.theme);\n }}\n >\n <option value=\"custom\">Custom</option>\n {THEME_PRESETS.map((preset) => (\n <option key={preset.id} value={preset.id}>\n {resolveLocalizedText(preset.name, locale)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nexport interface ThemeEditorProps {\n readonly theme?: SheetTheme;\n readonly locale?: SupportedLocale;\n readonly onChange: (theme: SheetTheme) => void;\n}\nexport function ThemeEditor({\n theme = DEFAULT_SHEET_THEME,\n locale = \"ja\",\n onChange,\n}: ThemeEditorProps) {\n const update = (field: keyof SheetTheme, value: string | number) =>\n onChange({ ...theme, [field]: value });\n return (\n <fieldset className=\"stamprally-admin-card\">\n <legend>Theme</legend>\n <ThemePresetSelector value={theme} locale={locale} onChange={onChange} />\n <label>\n Primary color{\" \"}\n <input\n type=\"color\"\n value={theme.primaryColor}\n onChange={(event) => update(\"primaryColor\", event.target.value)}\n />\n </label>\n <label>\n Grid columns{\" \"}\n <input\n type=\"number\"\n min={1}\n max={6}\n value={theme.gridColumns}\n onChange={(event) => update(\"gridColumns\", Number(event.target.value))}\n />\n </label>\n </fieldset>\n );\n}\n\nexport interface QrExportModalProps {\n readonly open: boolean;\n readonly config: RallyConfig;\n readonly locale?: SupportedLocale;\n readonly onClose: () => void;\n}\nexport function QrExportModal({ open, config, locale = \"ja\", onClose }: QrExportModalProps) {\n if (!open) return null;\n return (\n <div role=\"dialog\" aria-modal=\"true\" className=\"stamprally-qr-modal\">\n <div className=\"stamprally-qr-modal__toolbar\">\n <h2>QR print kit</h2>\n <button type=\"button\" onClick={() => window.print()}>\n Print\n </button>\n <button type=\"button\" onClick={onClose}>\n Close\n </button>\n </div>\n <div className=\"stamprally-qr-modal__grid\">\n {config.stamps.map((spot) => (\n <article key={spot.id}>\n <h3>{resolveLocalizedText(spot.name, locale)}</h3>\n <pre>\n {JSON.stringify({\n version: CURRENT_RALLY_CONFIG_VERSION,\n rallyId: config.id,\n stampId: spot.id,\n })}\n </pre>\n </article>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface JsonConfigIOProps {\n readonly config: RallyConfig;\n readonly onImport: (config: RallyConfig) => void;\n readonly locale?: SupportedLocale;\n}\nexport function JsonConfigIO({ config, onImport }: JsonConfigIOProps) {\n const [value, setValue] = useState(() => JSON.stringify(stripSensitiveConfig(config), null, 2));\n const [error, setError] = useState<string | null>(null);\n const importConfig = (): void => {\n try {\n const migrated = migrateRallyConfig(JSON.parse(value) as unknown);\n const validation = validateRallyConfig(migrated);\n if (!validation.valid) {\n setError(validation.errors.map((item) => `${item.path}: ${item.message}`).join(\" \"));\n return;\n }\n onImport(migrated);\n setError(null);\n } catch {\n setError(\"Invalid rally JSON.\");\n }\n };\n return (\n <section className=\"stamprally-admin-card\" aria-label=\"JSON configuration\">\n <textarea value={value} onChange={(event) => setValue(event.target.value)} />\n <button type=\"button\" onClick={importConfig}>\n Import and migrate\n </button>\n <button\n type=\"button\"\n onClick={() =>\n navigator.clipboard?.writeText(JSON.stringify(stripSensitiveConfig(config), null, 2))\n }\n >\n Copy public JSON\n </button>\n {error !== null && <p role=\"alert\">{error}</p>}\n </section>\n );\n}\n\nexport interface RallyEditorProps {\n readonly config: RallyConfig;\n readonly locale?: SupportedLocale;\n readonly onChange: (config: RallyConfig) => void;\n}\nexport function RallyEditor({ config, locale = \"ja\", onChange }: RallyEditorProps) {\n const [showQr, setShowQr] = useState(false);\n return (\n <main className=\"stamprally-admin\">\n <header>\n <h1>{resolveLocalizedText(config.title, locale) || config.id}</h1>\n <button type=\"button\" onClick={() => setShowQr(true)}>\n QR export\n </button>\n </header>\n <GeneralSettingsForm config={config} locale={locale} onChange={onChange} />\n {config.theme === undefined ? (\n <ThemeEditor locale={locale} onChange={(theme) => onChange({ ...config, theme })} />\n ) : (\n <ThemeEditor\n theme={config.theme}\n locale={locale}\n onChange={(theme) => onChange({ ...config, theme })}\n />\n )}\n <SpotListEditor\n spots={config.stamps}\n locale={locale}\n onChange={(stamps) => onChange({ ...config, stamps })}\n />\n <RewardListEditor\n rewards={config.rewards ?? []}\n locale={locale}\n onChange={(rewards) => onChange({ ...config, rewards })}\n />\n <JsonConfigIO config={config} onImport={onChange} />\n <QrExportModal\n open={showQr}\n config={config}\n locale={locale}\n onClose={() => setShowQr(false)}\n />\n </main>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"names":["jsxs","jsx","Fragment","resolveLocalizedText","THEME_PRESETS","DEFAULT_SHEET_THEME","CURRENT_RALLY_CONFIG_VERSION","useState","stripSensitiveConfig","migrateRallyConfig","validateRallyConfig"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n CURRENT_RALLY_CONFIG_VERSION,\n DEFAULT_SHEET_THEME,\n type LocaleDictionary,\n type LocalizedText,\n migrateRallyConfig,\n type RallyConfig,\n type RewardItem,\n type RewardUnlockCondition,\n resolveLocalizedText,\n type SheetTheme,\n type SpotItem,\n type StampCondition,\n type SupportedLocale,\n stripSensitiveConfig,\n THEME_PRESETS,\n validateRallyConfig,\n} from \"@stamprally/core\";\nimport type { ChangeEvent } from \"react\";\nimport { useState } from \"react\";\n\nexport type { LocaleDictionary } from \"@stamprally/core\";\n\nconst localePair = (value: LocalizedText | undefined): Record<string, string> => {\n if (typeof value === \"string\") return { ja: value, en: \"\" };\n const result: Record<string, string> = {};\n for (const [key, text] of Object.entries(value ?? {})) {\n if (text !== undefined) result[key] = text;\n }\n return result;\n};\n\nfunction updateText(value: LocalizedText | undefined, locale: string, next: string): LocalizedText {\n const current = localePair(value);\n return { ...current, [locale]: next };\n}\n\nexport interface GeneralSettingsFormProps<TLocale extends string = SupportedLocale> {\n readonly config: RallyConfig<TLocale>;\n readonly locale?: TLocale;\n readonly dictionary?: LocaleDictionary<TLocale>;\n readonly onChange: (config: RallyConfig<TLocale>) => void;\n}\nexport function GeneralSettingsForm<TLocale extends string = SupportedLocale>({\n config,\n locale = \"ja\" as TLocale,\n onChange,\n}: GeneralSettingsFormProps<TLocale>) {\n const pair = localePair(config.title);\n return (\n <fieldset className=\"stamprally-admin-card\">\n <legend>General settings</legend>\n <label>\n ID <input value={config.id} readOnly />\n </label>\n <label>\n Title ({locale}){\" \"}\n <input\n value={pair[locale]}\n required\n onChange={(event) =>\n onChange({ ...config, title: updateText(config.title, locale, event.target.value) })\n }\n />\n </label>\n <label>\n Start date{\" \"}\n <input\n type=\"datetime-local\"\n value={config.startDate?.slice(0, 16) ?? \"\"}\n onChange={(event) => {\n if (event.target.value === \"\") {\n const { startDate: _startDate, ...rest } = config;\n onChange(rest);\n } else onChange({ ...config, startDate: new Date(event.target.value).toISOString() });\n }}\n />\n </label>\n <label>\n End date{\" \"}\n <input\n type=\"datetime-local\"\n value={config.endDate?.slice(0, 16) ?? \"\"}\n onChange={(event) => {\n if (event.target.value === \"\") {\n const { endDate: _endDate, ...rest } = config;\n onChange(rest);\n } else onChange({ ...config, endDate: new Date(event.target.value).toISOString() });\n }}\n />\n </label>\n <label>\n <input\n type=\"checkbox\"\n checked={config.isSequential === true}\n onChange={(event) => onChange({ ...config, isSequential: event.target.checked })}\n />{\" \"}\n Sequential check-in\n </label>\n </fieldset>\n );\n}\n\nexport interface ConditionEditorProps {\n readonly condition: StampCondition;\n readonly onChange: (condition: StampCondition) => void;\n readonly locale?: SupportedLocale | (string & {});\n}\nexport function ConditionEditor({ condition, onChange }: ConditionEditorProps) {\n const type = condition.type;\n return (\n <fieldset className=\"stamprally-admin-card\">\n <legend>Check-in condition</legend>\n <label>\n Type{\" \"}\n <select\n value={type}\n onChange={(event) => {\n const next = event.target.value;\n if (next === \"token\") onChange({ type: \"token\", token: \"\" });\n else if (next === \"geo\")\n onChange({ type: \"geo\", latitude: 0, longitude: 0, radiusMeters: 100 });\n else onChange({ type: \"instant\" });\n }}\n >\n <option value=\"instant\">Instant</option>\n <option value=\"token\">QR / passcode</option>\n <option value=\"geo\">GPS</option>\n </select>\n </label>\n {condition.type === \"token\" && (\n <label>\n Token{\" \"}\n <input\n value={condition.token}\n onChange={(event) => onChange({ ...condition, token: event.target.value })}\n />\n </label>\n )}\n {condition.type === \"geo\" && (\n <>\n <label>\n Latitude{\" \"}\n <input\n type=\"number\"\n min={-90}\n max={90}\n value={condition.latitude}\n onChange={(event) => onChange({ ...condition, latitude: Number(event.target.value) })}\n />\n </label>\n <label>\n Longitude{\" \"}\n <input\n type=\"number\"\n min={-180}\n max={180}\n value={condition.longitude}\n onChange={(event) =>\n onChange({ ...condition, longitude: Number(event.target.value) })\n }\n />\n </label>\n <label>\n Radius (m){\" \"}\n <input\n type=\"number\"\n min={1}\n value={condition.radiusMeters}\n onChange={(event) =>\n onChange({ ...condition, radiusMeters: Number(event.target.value) })\n }\n />\n </label>\n </>\n )}\n </fieldset>\n );\n}\n\nexport interface SpotItemFormProps<TLocale extends string = SupportedLocale> {\n readonly spot: SpotItem<TLocale>;\n readonly index?: number;\n readonly locale?: TLocale;\n readonly dictionary?: LocaleDictionary<TLocale>;\n readonly onChange: (spot: SpotItem<TLocale>) => void;\n readonly onDelete?: () => void;\n}\nexport function SpotItemForm<TLocale extends string = SupportedLocale>({\n spot,\n index = 0,\n locale = \"ja\" as TLocale,\n onChange,\n onDelete,\n}: SpotItemFormProps<TLocale>) {\n const pair = localePair(spot.name);\n const setField = (\n field:\n | \"iconUrl\"\n | \"imageUrl\"\n | \"externalUrl\"\n | \"guideId\"\n | \"groupId\"\n | \"deckId\"\n | \"redirectUrlAfterClaim\",\n event: ChangeEvent<HTMLInputElement>,\n ) => {\n if (event.target.value === \"\") {\n const { [field]: _removed, ...rest } = spot;\n onChange(rest);\n } else onChange({ ...spot, [field]: event.target.value });\n };\n return (\n <article className=\"stamprally-admin-card\">\n <header>\n <strong>Spot {index + 1}</strong>\n {onDelete !== undefined && (\n <button type=\"button\" onClick={onDelete}>\n Delete\n </button>\n )}\n </header>\n <label>\n ID{\" \"}\n <input\n value={spot.id}\n onChange={(event) => onChange({ ...spot, id: event.target.value })}\n />\n </label>\n <label>\n Name ({locale}){\" \"}\n <input\n value={pair[locale]}\n required\n onChange={(event) =>\n onChange({ ...spot, name: updateText(spot.name, locale, event.target.value) })\n }\n />\n </label>\n <label>\n Description ({locale}){\" \"}\n <textarea\n value={resolveLocalizedText(spot.description, locale)}\n onChange={(event) =>\n onChange({\n ...spot,\n description: updateText(spot.description, locale, event.target.value),\n })\n }\n />\n </label>\n <label>\n Hint ({locale}){\" \"}\n <textarea\n value={resolveLocalizedText(spot.hint, locale)}\n onChange={(event) =>\n onChange({ ...spot, hint: updateText(spot.hint, locale, event.target.value) })\n }\n />\n </label>\n <label>\n Order index{\" \"}\n <input\n type=\"number\"\n value={spot.orderIndex ?? spot.order ?? index + 1}\n onChange={(event) => onChange({ ...spot, orderIndex: Number(event.target.value) })}\n />\n </label>\n <label>\n Icon URL{\" \"}\n <input value={spot.iconUrl ?? \"\"} onChange={(event) => setField(\"iconUrl\", event)} />\n </label>\n <label>\n Image URL{\" \"}\n <input value={spot.imageUrl ?? \"\"} onChange={(event) => setField(\"imageUrl\", event)} />\n </label>\n <label>\n External URL{\" \"}\n <input\n value={spot.externalUrl ?? \"\"}\n onChange={(event) => setField(\"externalUrl\", event)}\n />\n </label>\n <label>\n Redirect URL after claim{\" \"}\n <input\n value={spot.redirectUrlAfterClaim ?? \"\"}\n onChange={(event) => setField(\"redirectUrlAfterClaim\", event)}\n />\n </label>\n <label>\n Prerequisites (comma-separated stamp IDs){\" \"}\n <input\n value={(spot.requiresStampIds ?? spot.dependsOn ?? []).join(\", \")}\n onChange={(event) => {\n const ids = event.target.value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n if (ids.length === 0) {\n const { requiresStampIds: _requiresStampIds, ...rest } = spot;\n onChange(rest);\n } else onChange({ ...spot, requiresStampIds: ids });\n }}\n />\n </label>\n <label>\n Metadata (JSON){\" \"}\n <textarea\n value={JSON.stringify(spot.metadata ?? {}, null, 2)}\n onChange={(event) => {\n try {\n const parsed: unknown = JSON.parse(event.target.value);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n onChange({ ...spot, metadata: parsed as Record<string, unknown> });\n }\n } catch {\n // Keep the last valid metadata while the user edits JSON.\n }\n }}\n />\n </label>\n <ConditionEditor\n condition={spot.condition}\n onChange={(condition) => onChange({ ...spot, condition })}\n locale={locale}\n />\n </article>\n );\n}\n\nexport interface SpotListEditorProps<TLocale extends string = SupportedLocale> {\n readonly spots: ReadonlyArray<SpotItem<TLocale>>;\n readonly locale?: TLocale;\n readonly dictionary?: LocaleDictionary<TLocale>;\n readonly onChange: (spots: ReadonlyArray<SpotItem<TLocale>>) => void;\n}\nexport function SpotListEditor<TLocale extends string = SupportedLocale>({\n spots,\n locale = \"ja\" as TLocale,\n onChange,\n}: SpotListEditorProps<TLocale>) {\n return (\n <section aria-label=\"Spots\">\n <h2>Spots</h2>\n {spots.map((spot, index) => (\n <SpotItemForm\n key={spot.id}\n spot={spot}\n index={index}\n locale={locale}\n onChange={(next) =>\n onChange(spots.map((item, itemIndex) => (itemIndex === index ? next : item)))\n }\n onDelete={() => onChange(spots.filter((_, itemIndex) => itemIndex !== index))}\n />\n ))}\n </section>\n );\n}\n\nexport interface RewardListEditorProps<TLocale extends string = SupportedLocale> {\n readonly rewards: ReadonlyArray<RewardItem<TLocale>>;\n readonly locale?: TLocale;\n readonly dictionary?: LocaleDictionary<TLocale>;\n readonly onChange: (rewards: ReadonlyArray<RewardItem<TLocale>>) => void;\n}\nexport function RewardListEditor<TLocale extends string = SupportedLocale>({\n rewards,\n locale = \"ja\" as TLocale,\n onChange,\n}: RewardListEditorProps<TLocale>) {\n return (\n <section aria-label=\"Rewards\">\n <h2>Rewards</h2>\n {rewards.map((reward, index) => (\n <article className=\"stamprally-admin-card\" key={reward.id}>\n <label>\n ID{\" \"}\n <input\n value={reward.id}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index ? { ...item, id: event.target.value } : item,\n ),\n )\n }\n />\n </label>\n <label>\n Title ({locale}){\" \"}\n <input\n value={resolveLocalizedText(reward.title, locale)}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? { ...item, title: updateText(item.title, locale, event.target.value) }\n : item,\n ),\n )\n }\n />\n </label>\n <label>\n Description ({locale}){\" \"}\n <textarea\n value={resolveLocalizedText(reward.description, locale)}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? {\n ...item,\n description: updateText(item.description, locale, event.target.value),\n }\n : item,\n ),\n )\n }\n />\n </label>\n <label>\n Required stamps{\" \"}\n <input\n type=\"number\"\n min={0}\n value={reward.requiredStampCount}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? { ...item, requiredStampCount: Number(event.target.value) }\n : item,\n ),\n )\n }\n />\n </label>\n <label>\n Valid until{\" \"}\n <input\n type=\"datetime-local\"\n value={reward.validUntil?.slice(0, 16) ?? \"\"}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n if (event.target.value === \"\") {\n const { validUntil: _validUntil, ...rest } = item;\n return rest;\n }\n return { ...item, validUntil: new Date(event.target.value).toISOString() };\n }),\n )\n }\n />\n </label>\n <label>\n Stock limit{\" \"}\n <input\n type=\"number\"\n min={1}\n value={reward.stockLimit ?? reward.maxStock ?? \"\"}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n if (event.target.value === \"\") {\n const { stockLimit: _stockLimit, ...rest } = item;\n return rest;\n }\n return { ...item, stockLimit: Number(event.target.value) };\n }),\n )\n }\n />\n </label>\n <label>\n User claim limit{\" \"}\n <input\n type=\"number\"\n min={1}\n value={reward.userClaimLimit ?? reward.limitPerUser ?? \"\"}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n if (event.target.value === \"\") {\n const { userClaimLimit: _userClaimLimit, ...rest } = item;\n return rest;\n }\n return { ...item, userClaimLimit: Number(event.target.value) };\n }),\n )\n }\n />\n </label>\n <label>\n Redemption method{\" \"}\n <select\n value={reward.redemptionMethod}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? {\n ...item,\n redemptionMethod: event.target.value as RewardItem[\"redemptionMethod\"],\n }\n : item,\n ),\n )\n }\n >\n <option value=\"manual_slide\">manual_slide</option>\n <option value=\"staff_passcode\">staff_passcode</option>\n <option value=\"view_only\">view_only</option>\n <option value=\"server_claim\">server_claim</option>\n </select>\n </label>\n {reward.redemptionMethod === \"staff_passcode\" && (\n <label>\n Staff passcode{\" \"}\n <input\n type=\"password\"\n value={reward.staffPasscode ?? \"\"}\n onChange={(event) =>\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index ? { ...item, staffPasscode: event.target.value } : item,\n ),\n )\n }\n />\n </label>\n )}\n <label>\n Conditions (JSON){\" \"}\n <textarea\n value={JSON.stringify(reward.conditions ?? [], null, 2)}\n onChange={(event) => {\n try {\n const parsed: unknown = JSON.parse(event.target.value);\n if (Array.isArray(parsed)) {\n onChange(\n rewards.map((item, itemIndex) =>\n itemIndex === index\n ? { ...item, conditions: parsed as ReadonlyArray<RewardUnlockCondition> }\n : item,\n ),\n );\n }\n } catch {\n // Keep the last valid condition set while the user edits JSON.\n }\n }}\n />\n </label>\n </article>\n ))}\n </section>\n );\n}\n\nexport interface ThemePresetSelectorProps {\n readonly value?: SheetTheme;\n readonly locale?: SupportedLocale | (string & {});\n readonly onChange: (theme: SheetTheme) => void;\n}\nexport function ThemePresetSelector({ value, locale = \"ja\", onChange }: ThemePresetSelectorProps) {\n const selected =\n THEME_PRESETS.find((preset) => JSON.stringify(preset.theme) === JSON.stringify(value))?.id ??\n \"custom\";\n return (\n <label>\n Theme preset{\" \"}\n <select\n value={selected}\n onChange={(event) => {\n const preset = THEME_PRESETS.find((item) => item.id === event.target.value);\n if (preset !== undefined) onChange(preset.theme);\n }}\n >\n <option value=\"custom\">Custom</option>\n {THEME_PRESETS.map((preset) => (\n <option key={preset.id} value={preset.id}>\n {resolveLocalizedText(preset.name, locale)}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nexport interface ThemeEditorProps {\n readonly theme?: SheetTheme;\n readonly locale?: SupportedLocale | (string & {});\n readonly onChange: (theme: SheetTheme) => void;\n}\nexport function ThemeEditor({\n theme = DEFAULT_SHEET_THEME,\n locale = \"ja\",\n onChange,\n}: ThemeEditorProps) {\n const update = (field: keyof SheetTheme, value: string | number) =>\n onChange({ ...theme, [field]: value });\n return (\n <fieldset className=\"stamprally-admin-card\">\n <legend>Theme</legend>\n <ThemePresetSelector value={theme} locale={locale} onChange={onChange} />\n <label>\n Primary color{\" \"}\n <input\n type=\"color\"\n value={theme.primaryColor}\n onChange={(event) => update(\"primaryColor\", event.target.value)}\n />\n </label>\n <label>\n Grid columns{\" \"}\n <input\n type=\"number\"\n min={1}\n max={6}\n value={theme.gridColumns}\n onChange={(event) => update(\"gridColumns\", Number(event.target.value))}\n />\n </label>\n </fieldset>\n );\n}\n\nexport interface QrExportModalProps<TLocale extends string = SupportedLocale> {\n readonly open: boolean;\n readonly config: RallyConfig<TLocale>;\n readonly locale?: TLocale;\n readonly onClose: () => void;\n}\nexport function QrExportModal<TLocale extends string = SupportedLocale>({\n open,\n config,\n locale = \"ja\" as TLocale,\n onClose,\n}: QrExportModalProps<TLocale>) {\n if (!open) return null;\n return (\n <div role=\"dialog\" aria-modal=\"true\" className=\"stamprally-qr-modal\">\n <div className=\"stamprally-qr-modal__toolbar\">\n <h2>QR print kit</h2>\n <button type=\"button\" onClick={() => window.print()}>\n Print\n </button>\n <button type=\"button\" onClick={onClose}>\n Close\n </button>\n </div>\n <div className=\"stamprally-qr-modal__grid\">\n {config.stamps.map((spot) => (\n <article key={spot.id}>\n <h3>{resolveLocalizedText(spot.name, locale)}</h3>\n <pre>\n {JSON.stringify({\n version: CURRENT_RALLY_CONFIG_VERSION,\n rallyId: config.id,\n stampId: spot.id,\n })}\n </pre>\n </article>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface JsonConfigIOProps<TLocale extends string = SupportedLocale> {\n readonly config: RallyConfig<TLocale>;\n readonly onImport: (config: RallyConfig<TLocale>) => void;\n readonly locale?: TLocale;\n}\nexport function JsonConfigIO<TLocale extends string = SupportedLocale>({\n config,\n onImport,\n}: JsonConfigIOProps<TLocale>) {\n const [value, setValue] = useState(() => JSON.stringify(stripSensitiveConfig(config), null, 2));\n const [error, setError] = useState<string | null>(null);\n const importConfig = (): void => {\n try {\n const migrated = migrateRallyConfig<TLocale>(JSON.parse(value) as unknown);\n const validation = validateRallyConfig(migrated);\n if (!validation.valid) {\n setError(validation.errors.map((item) => `${item.path}: ${item.message}`).join(\" \"));\n return;\n }\n onImport(migrated);\n setError(null);\n } catch {\n setError(\"Invalid rally JSON.\");\n }\n };\n return (\n <section className=\"stamprally-admin-card\" aria-label=\"JSON configuration\">\n <textarea value={value} onChange={(event) => setValue(event.target.value)} />\n <button type=\"button\" onClick={importConfig}>\n Import and migrate\n </button>\n <button\n type=\"button\"\n onClick={() =>\n navigator.clipboard?.writeText(JSON.stringify(stripSensitiveConfig(config), null, 2))\n }\n >\n Copy public JSON\n </button>\n {error !== null && <p role=\"alert\">{error}</p>}\n </section>\n );\n}\n\nexport interface RallyEditorProps<TLocale extends string = SupportedLocale> {\n readonly config: RallyConfig<TLocale>;\n readonly locale?: TLocale;\n readonly dictionary?: LocaleDictionary<TLocale>;\n readonly onChange: (config: RallyConfig<TLocale>) => void;\n}\nexport function RallyEditor<TLocale extends string = SupportedLocale>({\n config,\n locale = \"ja\" as TLocale,\n onChange,\n}: RallyEditorProps<TLocale>) {\n const [showQr, setShowQr] = useState(false);\n return (\n <main className=\"stamprally-admin\">\n <header>\n <h1>{resolveLocalizedText(config.title, locale) || config.id}</h1>\n <button type=\"button\" onClick={() => setShowQr(true)}>\n QR export\n </button>\n </header>\n <GeneralSettingsForm config={config} locale={locale} onChange={onChange} />\n {config.theme === undefined ? (\n <ThemeEditor locale={locale} onChange={(theme) => onChange({ ...config, theme })} />\n ) : (\n <ThemeEditor\n theme={config.theme}\n locale={locale}\n onChange={(theme) => onChange({ ...config, theme })}\n />\n )}\n <SpotListEditor\n spots={config.stamps}\n locale={locale}\n onChange={(stamps) => onChange({ ...config, stamps })}\n />\n <RewardListEditor\n rewards={config.rewards ?? []}\n locale={locale}\n onChange={(rewards) => onChange({ ...config, rewards })}\n />\n <JsonConfigIO config={config} onImport={onChange} />\n <QrExportModal\n open={showQr}\n config={config}\n locale={locale}\n onClose={() => setShowQr(false)}\n />\n </main>\n );\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,68 +1,74 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { StampCondition, SupportedLocale, RallyConfig, RewardItem, SpotItem, SheetTheme } from '@stamprally/core';
|
|
2
|
+
import { StampCondition, SupportedLocale, RallyConfig, LocaleDictionary, RewardItem, SpotItem, SheetTheme } from '@stamprally/core';
|
|
3
|
+
export { LocaleDictionary } from '@stamprally/core';
|
|
3
4
|
|
|
4
|
-
interface GeneralSettingsFormProps {
|
|
5
|
-
readonly config: RallyConfig
|
|
6
|
-
readonly locale?:
|
|
7
|
-
readonly
|
|
5
|
+
interface GeneralSettingsFormProps<TLocale extends string = SupportedLocale> {
|
|
6
|
+
readonly config: RallyConfig<TLocale>;
|
|
7
|
+
readonly locale?: TLocale;
|
|
8
|
+
readonly dictionary?: LocaleDictionary<TLocale>;
|
|
9
|
+
readonly onChange: (config: RallyConfig<TLocale>) => void;
|
|
8
10
|
}
|
|
9
|
-
declare function GeneralSettingsForm({ config, locale, onChange }: GeneralSettingsFormProps): react.JSX.Element;
|
|
11
|
+
declare function GeneralSettingsForm<TLocale extends string = SupportedLocale>({ config, locale, onChange, }: GeneralSettingsFormProps<TLocale>): react.JSX.Element;
|
|
10
12
|
interface ConditionEditorProps {
|
|
11
13
|
readonly condition: StampCondition;
|
|
12
14
|
readonly onChange: (condition: StampCondition) => void;
|
|
13
|
-
readonly locale?: SupportedLocale;
|
|
15
|
+
readonly locale?: SupportedLocale | (string & {});
|
|
14
16
|
}
|
|
15
17
|
declare function ConditionEditor({ condition, onChange }: ConditionEditorProps): react.JSX.Element;
|
|
16
|
-
interface SpotItemFormProps {
|
|
17
|
-
readonly spot: SpotItem
|
|
18
|
+
interface SpotItemFormProps<TLocale extends string = SupportedLocale> {
|
|
19
|
+
readonly spot: SpotItem<TLocale>;
|
|
18
20
|
readonly index?: number;
|
|
19
|
-
readonly locale?:
|
|
20
|
-
readonly
|
|
21
|
+
readonly locale?: TLocale;
|
|
22
|
+
readonly dictionary?: LocaleDictionary<TLocale>;
|
|
23
|
+
readonly onChange: (spot: SpotItem<TLocale>) => void;
|
|
21
24
|
readonly onDelete?: () => void;
|
|
22
25
|
}
|
|
23
|
-
declare function SpotItemForm({ spot, index, locale, onChange, onDelete, }: SpotItemFormProps): react.JSX.Element;
|
|
24
|
-
interface SpotListEditorProps {
|
|
25
|
-
readonly spots: ReadonlyArray<SpotItem
|
|
26
|
-
readonly locale?:
|
|
27
|
-
readonly
|
|
26
|
+
declare function SpotItemForm<TLocale extends string = SupportedLocale>({ spot, index, locale, onChange, onDelete, }: SpotItemFormProps<TLocale>): react.JSX.Element;
|
|
27
|
+
interface SpotListEditorProps<TLocale extends string = SupportedLocale> {
|
|
28
|
+
readonly spots: ReadonlyArray<SpotItem<TLocale>>;
|
|
29
|
+
readonly locale?: TLocale;
|
|
30
|
+
readonly dictionary?: LocaleDictionary<TLocale>;
|
|
31
|
+
readonly onChange: (spots: ReadonlyArray<SpotItem<TLocale>>) => void;
|
|
28
32
|
}
|
|
29
|
-
declare function SpotListEditor({ spots, locale, onChange }: SpotListEditorProps): react.JSX.Element;
|
|
30
|
-
interface RewardListEditorProps {
|
|
31
|
-
readonly rewards: ReadonlyArray<RewardItem
|
|
32
|
-
readonly locale?:
|
|
33
|
-
readonly
|
|
33
|
+
declare function SpotListEditor<TLocale extends string = SupportedLocale>({ spots, locale, onChange, }: SpotListEditorProps<TLocale>): react.JSX.Element;
|
|
34
|
+
interface RewardListEditorProps<TLocale extends string = SupportedLocale> {
|
|
35
|
+
readonly rewards: ReadonlyArray<RewardItem<TLocale>>;
|
|
36
|
+
readonly locale?: TLocale;
|
|
37
|
+
readonly dictionary?: LocaleDictionary<TLocale>;
|
|
38
|
+
readonly onChange: (rewards: ReadonlyArray<RewardItem<TLocale>>) => void;
|
|
34
39
|
}
|
|
35
|
-
declare function RewardListEditor({ rewards, locale, onChange }: RewardListEditorProps): react.JSX.Element;
|
|
40
|
+
declare function RewardListEditor<TLocale extends string = SupportedLocale>({ rewards, locale, onChange, }: RewardListEditorProps<TLocale>): react.JSX.Element;
|
|
36
41
|
interface ThemePresetSelectorProps {
|
|
37
42
|
readonly value?: SheetTheme;
|
|
38
|
-
readonly locale?: SupportedLocale;
|
|
43
|
+
readonly locale?: SupportedLocale | (string & {});
|
|
39
44
|
readonly onChange: (theme: SheetTheme) => void;
|
|
40
45
|
}
|
|
41
46
|
declare function ThemePresetSelector({ value, locale, onChange }: ThemePresetSelectorProps): react.JSX.Element;
|
|
42
47
|
interface ThemeEditorProps {
|
|
43
48
|
readonly theme?: SheetTheme;
|
|
44
|
-
readonly locale?: SupportedLocale;
|
|
49
|
+
readonly locale?: SupportedLocale | (string & {});
|
|
45
50
|
readonly onChange: (theme: SheetTheme) => void;
|
|
46
51
|
}
|
|
47
52
|
declare function ThemeEditor({ theme, locale, onChange, }: ThemeEditorProps): react.JSX.Element;
|
|
48
|
-
interface QrExportModalProps {
|
|
53
|
+
interface QrExportModalProps<TLocale extends string = SupportedLocale> {
|
|
49
54
|
readonly open: boolean;
|
|
50
|
-
readonly config: RallyConfig
|
|
51
|
-
readonly locale?:
|
|
55
|
+
readonly config: RallyConfig<TLocale>;
|
|
56
|
+
readonly locale?: TLocale;
|
|
52
57
|
readonly onClose: () => void;
|
|
53
58
|
}
|
|
54
|
-
declare function QrExportModal({ open, config, locale, onClose }: QrExportModalProps): react.JSX.Element | null;
|
|
55
|
-
interface JsonConfigIOProps {
|
|
56
|
-
readonly config: RallyConfig
|
|
57
|
-
readonly onImport: (config: RallyConfig) => void;
|
|
58
|
-
readonly locale?:
|
|
59
|
+
declare function QrExportModal<TLocale extends string = SupportedLocale>({ open, config, locale, onClose, }: QrExportModalProps<TLocale>): react.JSX.Element | null;
|
|
60
|
+
interface JsonConfigIOProps<TLocale extends string = SupportedLocale> {
|
|
61
|
+
readonly config: RallyConfig<TLocale>;
|
|
62
|
+
readonly onImport: (config: RallyConfig<TLocale>) => void;
|
|
63
|
+
readonly locale?: TLocale;
|
|
59
64
|
}
|
|
60
|
-
declare function JsonConfigIO({ config, onImport }: JsonConfigIOProps): react.JSX.Element;
|
|
61
|
-
interface RallyEditorProps {
|
|
62
|
-
readonly config: RallyConfig
|
|
63
|
-
readonly locale?:
|
|
64
|
-
readonly
|
|
65
|
+
declare function JsonConfigIO<TLocale extends string = SupportedLocale>({ config, onImport, }: JsonConfigIOProps<TLocale>): react.JSX.Element;
|
|
66
|
+
interface RallyEditorProps<TLocale extends string = SupportedLocale> {
|
|
67
|
+
readonly config: RallyConfig<TLocale>;
|
|
68
|
+
readonly locale?: TLocale;
|
|
69
|
+
readonly dictionary?: LocaleDictionary<TLocale>;
|
|
70
|
+
readonly onChange: (config: RallyConfig<TLocale>) => void;
|
|
65
71
|
}
|
|
66
|
-
declare function RallyEditor({ config, locale, onChange }: RallyEditorProps): react.JSX.Element;
|
|
72
|
+
declare function RallyEditor<TLocale extends string = SupportedLocale>({ config, locale, onChange, }: RallyEditorProps<TLocale>): react.JSX.Element;
|
|
67
73
|
|
|
68
74
|
export { ConditionEditor, type ConditionEditorProps, GeneralSettingsForm, type GeneralSettingsFormProps, JsonConfigIO, type JsonConfigIOProps, QrExportModal, type QrExportModalProps, RallyEditor, type RallyEditorProps, RewardListEditor, type RewardListEditorProps, SpotItemForm, type SpotItemFormProps, SpotListEditor, type SpotListEditorProps, ThemeEditor, type ThemeEditorProps, ThemePresetSelector, type ThemePresetSelectorProps };
|