@dreamboard-games/sdk 0.5.0-alpha.6 → 0.5.0-alpha.8
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/README.md +6 -0
- package/dist/{chunk-K75F5UIJ.js → chunk-4H4TAIV7.js} +7 -5
- package/dist/chunk-4H4TAIV7.js.map +1 -0
- package/dist/{chunk-UESVBUPU.js → chunk-DE4LWN42.js} +19 -19
- package/dist/chunk-DE4LWN42.js.map +1 -0
- package/dist/{chunk-3JXUL4VN.js → chunk-DPRHGA2C.js} +2 -2
- package/dist/chunk-DPRHGA2C.js.map +1 -0
- package/dist/{chunk-CSHKCPBY.js → chunk-EQ4BAJSB.js} +4 -4
- package/dist/{chunk-CSHKCPBY.js.map → chunk-EQ4BAJSB.js.map} +1 -1
- package/dist/{chunk-N37D7NPB.js → chunk-GZVYEVXY.js} +5 -5
- package/dist/chunk-GZVYEVXY.js.map +1 -0
- package/dist/{diagnostics-9gJgI85c.d.ts → diagnostics-Cg5NZ7NZ.d.ts} +1 -1
- package/dist/{extract-Bjuw_gdF.d.ts → extract-CoLo4qhk.d.ts} +75 -74
- package/dist/index.d.ts +13 -9
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/{model-D2Z9j0Yi.d.ts → model-Cvfxwq2n.d.ts} +2 -2
- package/dist/react.d.ts +9 -5
- package/dist/react.js +12 -6
- package/dist/react.js.map +1 -1
- package/dist/reducer.d.ts +15 -14
- package/dist/reducer.js +15 -15
- package/dist/reducer.js.map +1 -1
- package/dist/testing.d.ts +3 -3
- package/dist/testing.js +8 -8
- package/dist/testing.js.map +1 -1
- package/dist/{types-B3kIhBWb.d.ts → types-DPamTmUF.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-3JXUL4VN.js.map +0 -1
- package/dist/chunk-K75F5UIJ.js.map +0 -1
- package/dist/chunk-N37D7NPB.js.map +0 -1
- package/dist/chunk-UESVBUPU.js.map +0 -1
|
@@ -11,7 +11,7 @@ function requireLookup(value, kind, id) {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
// src/shared/board-target.ts
|
|
14
|
-
import
|
|
14
|
+
import * as z from "zod";
|
|
15
15
|
var PlayerBoardSpaceTargetSchema = z.strictObject({
|
|
16
16
|
boardId: z.string(),
|
|
17
17
|
playerId: z.string(),
|
|
@@ -136,4 +136,4 @@ export {
|
|
|
136
136
|
inputTargetInDomain,
|
|
137
137
|
inputValueKey
|
|
138
138
|
};
|
|
139
|
-
//# sourceMappingURL=chunk-
|
|
139
|
+
//# sourceMappingURL=chunk-DPRHGA2C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/lookup.ts","../src/shared/board-target.ts","../src/shared/input-domain.ts"],"sourcesContent":["/** Assert presence at a mutable table or projected-snapshot lookup boundary. */\nexport function requireLookup<T>(\n value: T | undefined,\n kind: string,\n id: string,\n): T {\n if (value === undefined) throw new Error(`${kind} \"${id}\" is not present.`);\n return value;\n}\n","import * as z from \"zod\";\n\n/** A space on one player's board; boardId is the base manifest board ID. */\nexport type PlayerBoardSpaceTarget<\n BoardId extends string = string,\n SpaceId extends string = string,\n PlayerId extends string = string,\n> = {\n readonly boardId: BoardId;\n readonly playerId: PlayerId;\n readonly spaceId: SpaceId;\n};\n\nexport const PlayerBoardSpaceTargetSchema = z.strictObject({\n boardId: z.string(),\n playerId: z.string(),\n spaceId: z.string(),\n});\n\nexport function isPlayerBoardSpaceTarget(\n value: unknown,\n): value is PlayerBoardSpaceTarget {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Object.keys(value).length === 3 &&\n \"boardId\" in value &&\n typeof value.boardId === \"string\" &&\n \"playerId\" in value &&\n typeof value.playerId === \"string\" &&\n \"spaceId\" in value &&\n typeof value.spaceId === \"string\"\n );\n}\n\nexport function samePlayerBoardSpaceTarget(\n left: PlayerBoardSpaceTarget,\n right: PlayerBoardSpaceTarget,\n): boolean {\n return (\n left.boardId === right.boardId &&\n left.playerId === right.playerId &&\n left.spaceId === right.spaceId\n );\n}\n","import {\n isPlayerBoardSpaceTarget,\n samePlayerBoardSpaceTarget,\n} from \"./board-target\";\nimport type {\n InputDomainDescriptor,\n InputSelectionDescriptor,\n} from \"../reducer/model/spec/inputs\";\n\n/** Projected domain rules only; schemas and authored target checks remain server-owned. */\nexport function inputDomainErrors(\n domain: InputDomainDescriptor,\n value: unknown,\n selection?: InputSelectionDescriptor,\n options: { ignoreMinimum?: boolean } = {},\n): string[] {\n if (selection?.mode === \"many\") {\n if (!Array.isArray(value)) return [\"Expected a list of values.\"];\n const errors = cardinalityErrors(\n value,\n selection.min,\n selection.max,\n \"value\",\n options.ignoreMinimum,\n );\n if (\n selection.distinct &&\n new Set(value.map(inputValueKey)).size !== value.length\n )\n errors.push(\"Choose each value only once.\");\n if (\n value.some(\n (item) =>\n inputDomainErrors(domain, item, undefined, options).length > 0,\n )\n )\n errors.push(ineligibleMessage(domain));\n return errors;\n }\n switch (domain.type) {\n case \"choice\":\n return inputTargetInDomain(domain, value)\n ? []\n : [ineligibleMessage(domain)];\n case \"choiceList\": {\n if (!Array.isArray(value)) return [\"Expected a list of choices.\"];\n const errors = cardinalityErrors(\n value,\n domain.min ?? 0,\n domain.max ?? domain.choices.length,\n \"option\",\n options.ignoreMinimum,\n );\n if (value.some((item) => !inputTargetInDomain(domain, item)))\n errors.push(ineligibleMessage(domain));\n return errors;\n }\n case \"cardTarget\":\n case \"boardTarget\":\n return inputTargetInDomain(domain, value)\n ? []\n : [ineligibleMessage(domain)];\n case \"boundedNumber\":\n return typeof value === \"number\" &&\n value >= domain.min &&\n value <= domain.max &&\n Math.abs(\n (value - domain.min) / (domain.step ?? 1) -\n Math.round((value - domain.min) / (domain.step ?? 1)),\n ) < 1e-9\n ? []\n : [\"Value is outside the current input domain.\"];\n case \"resourceMap\":\n return typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.keys(value).every((key) =>\n domain.resources.some((entry) => entry.resourceId === key),\n ) &&\n domain.resources.every((entry) => {\n const amount =\n (value as Record<string, unknown>)[entry.resourceId] ?? 0;\n return (\n typeof amount === \"number\" &&\n Number.isInteger(amount) &&\n amount >= (entry.min ?? 0) &&\n amount <= (entry.max ?? Infinity)\n );\n })\n ? []\n : [\"Value is outside the current input domain.\"];\n }\n}\n\nexport function inputValueInDomain(\n domain: InputDomainDescriptor,\n value: unknown,\n selection?: InputSelectionDescriptor,\n options: { ignoreMinimum?: boolean } = {},\n): boolean {\n return inputDomainErrors(domain, value, selection, options).length === 0;\n}\n\n/** One selectable option, including an option within a choiceList or many input. */\nexport function inputTargetInDomain(\n domain: InputDomainDescriptor,\n value: unknown,\n): boolean {\n switch (domain.type) {\n case \"choice\":\n case \"choiceList\":\n return domain.choices.some(\n (choice) => !choice.disabled && Object.is(choice.value, value),\n );\n case \"cardTarget\":\n return (\n typeof value === \"string\" && domain.eligibleTargets.includes(value)\n );\n case \"boardTarget\":\n return domain.valueKind === \"player-board-space\"\n ? isPlayerBoardSpaceTarget(value) &&\n domain.eligibleTargets.some((candidate) =>\n samePlayerBoardSpaceTarget(candidate, value),\n )\n : typeof value === \"string\" && domain.eligibleTargets.includes(value);\n default:\n return inputValueInDomain(domain, value);\n }\n}\n\nfunction cardinalityErrors(\n value: readonly unknown[],\n min: number,\n max: number | undefined,\n unit: string,\n ignoreMinimum = false,\n): string[] {\n const errors: string[] = [];\n if (!ignoreMinimum && value.length < min)\n errors.push(`Choose at least ${min} ${pluralize(unit, min)}.`);\n if (max !== undefined && value.length > max)\n errors.push(`Choose at most ${max} ${pluralize(unit, max)}.`);\n return errors;\n}\n\nfunction ineligibleMessage(domain: InputDomainDescriptor): string {\n return domain.type === \"choice\" || domain.type === \"choiceList\"\n ? \"Selected choice is not eligible.\"\n : domain.type === \"cardTarget\" || domain.type === \"boardTarget\"\n ? \"Selected target is not eligible.\"\n : \"Value is outside the current input domain.\";\n}\n\n/** Matches the reducer's JSON value identity for projected distinct selections. */\nexport function inputValueKey(value: unknown): string {\n if (value === null) return \"null\";\n if (isPlayerBoardSpaceTarget(value))\n return `player-board-space:${JSON.stringify([value.boardId, value.playerId, value.spaceId])}`;\n switch (typeof value) {\n case \"string\":\n return `string:${value}`;\n case \"number\":\n case \"boolean\":\n case \"undefined\":\n return `${typeof value}:${String(value)}`;\n default:\n return `json:${JSON.stringify(value)}`;\n }\n}\n\nfunction pluralize(word: string, count: number): string {\n return count === 1 ? word : `${word}s`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
inputValueInDomain,
|
|
8
8
|
inputValueKey,
|
|
9
9
|
requireLookup
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DPRHGA2C.js";
|
|
11
11
|
|
|
12
12
|
// src/headless/runtime-features.ts
|
|
13
13
|
var runtimeFeatures = /* @__PURE__ */ Symbol("runtimeFeatures");
|
|
@@ -1465,7 +1465,7 @@ var GESTURE_THRESHOLDS = Object.freeze({
|
|
|
1465
1465
|
/** A finger drags when upward travel exceeds this multiple of sideways travel. */
|
|
1466
1466
|
axisBias: 1.25
|
|
1467
1467
|
});
|
|
1468
|
-
function createGestureRecognizer(down, callbacks) {
|
|
1468
|
+
function createGestureRecognizer(down, callbacks, options = {}) {
|
|
1469
1469
|
const origin = { x: down.clientX, y: down.clientY };
|
|
1470
1470
|
const mouse = down.pointerType === "mouse";
|
|
1471
1471
|
let kind = "tap";
|
|
@@ -1492,7 +1492,7 @@ function createGestureRecognizer(down, callbacks) {
|
|
|
1492
1492
|
if (kind !== "tap" || Math.hypot(dx, dy) < GESTURE_THRESHOLDS.slop)
|
|
1493
1493
|
return;
|
|
1494
1494
|
clearTimeout(holdTimer);
|
|
1495
|
-
const lifts = mouse || -dy > GESTURE_THRESHOLDS.axisBias * Math.abs(dx);
|
|
1495
|
+
const lifts = mouse || options.dragDirection === "any" || -dy > GESTURE_THRESHOLDS.axisBias * Math.abs(dx);
|
|
1496
1496
|
if (lifts && callbacks.dragStart(origin)) {
|
|
1497
1497
|
kind = "drag";
|
|
1498
1498
|
callbacks.dragMove(point(event));
|
|
@@ -1528,4 +1528,4 @@ export {
|
|
|
1528
1528
|
GESTURE_THRESHOLDS,
|
|
1529
1529
|
createGestureRecognizer
|
|
1530
1530
|
};
|
|
1531
|
-
//# sourceMappingURL=chunk-
|
|
1531
|
+
//# sourceMappingURL=chunk-EQ4BAJSB.js.map
|