@johnmorrisdotca/kumimoji 1.1.0 → 1.1.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/CHANGELOG.md CHANGED
@@ -6,6 +6,19 @@ All notable changes to this project are written down here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.1.1] - 2026-10-01
10
+
11
+ Nothing that was exported has changed.
12
+
13
+ ### Added
14
+
15
+ - **An API reference page**, `api.html` on the demo site: every export of every entry point, with its signature and its doc comment, made from the source when the site is built so it cannot fall behind the code. The README and the demo's header link to it, and a test holds it to the source.
16
+ - **An Architecture section in the README**: how the source is split and what each file is for, held to the real files by a test.
17
+
18
+ ### Changed
19
+
20
+ - The family's footer lists Jarajara.
21
+
9
22
  ## [1.1.0] - 2026-09-30
10
23
 
11
24
  Nothing that was exported has changed, a seed deals the bag it always dealt,
@@ -94,7 +107,8 @@ The first release.
94
107
  `@johnmorrisdotca/kumimoji/react`.
95
108
  - A static demo for GitHub Pages.
96
109
 
97
- [Unreleased]: https://github.com/johnmorrisdotca/kumimoji/compare/v1.1.0...HEAD
110
+ [Unreleased]: https://github.com/johnmorrisdotca/kumimoji/compare/v1.1.1...HEAD
111
+ [1.1.1]: https://github.com/johnmorrisdotca/kumimoji/compare/v1.1.0...v1.1.1
98
112
  [1.1.0]: https://github.com/johnmorrisdotca/kumimoji/releases/tag/v1.1.0
99
113
  [1.0.1]: https://github.com/johnmorrisdotca/kumimoji/releases/tag/v1.0.1
100
114
  [1.0.0]: https://github.com/johnmorrisdotca/kumimoji/releases/tag/v1.0.0
package/README.md CHANGED
@@ -12,7 +12,7 @@ In English and in Japanese kana. The rules as pure, seeded TypeScript, two word
12
12
  <img alt="TypeScript" src="https://img.shields.io/badge/types-TypeScript-3178c6">
13
13
  </p>
14
14
 
15
- <p align="center"><a href="https://johnmorrisdotca.github.io/kumimoji/"><strong>Play a game →</strong></a></p>
15
+ <p align="center"><a href="https://johnmorrisdotca.github.io/kumimoji/"><strong>Play a game →</strong></a> · <a href="https://johnmorrisdotca.github.io/kumimoji/api.html">API reference</a></p>
16
16
 
17
17
  <p align="center">
18
18
  <img src="docs/desktop.jpg" alt="An English game half way: a crossword on the green table, a hand of tiles under it, and the buttons to draw, trade and sort" width="720">
@@ -250,6 +250,63 @@ fetches when a game is first dealt.
250
250
  phone. The rules have no DOM in them and run in Node 20 and later, Deno,
251
251
  Bun and web workers.
252
252
 
253
+ ## Architecture
254
+
255
+ The rules are plain functions over plain data with no DOM: a game is a value,
256
+ every move returns the next one, and the same seed deals the same bag in every
257
+ browser. Word lists are loaded only when a game opens, and the table is its own
258
+ entry (`/ui` for plain DOM, `/react` for React), so a page that wants only the
259
+ rules carries none of it. A computer player is pure too, so its turn replays
260
+ exactly after a reload.
261
+
262
+ ```text
263
+ src/
264
+ ├── check.ts whether a finished grid completes a game: the one check a server also runs
265
+ ├── computer.types.ts what a computer did in one step of its turn
266
+ ├── computerPlay.ts the word a computer player lays: from its own hand, with no randomness
267
+ ├── computerTurn.ts a computer's whole turn, planned as steps the page can show one at a time
268
+ ├── export.ts a game written out as JSON or plain text, and read back
269
+ ├── generate.ts making a game from a seed: a crossword laid first, then its tiles become the bag
270
+ ├── grid.ts the grid of tiles on a table with no edges, and how it is written as a string
271
+ ├── help.ts arranging the hand into a word, for a player who asks for help
272
+ ├── index.ts the main entry: the rules, the generator, the computer player and the table's pure helpers
273
+ ├── judge.ts judging a grid against its language's word list, run by run
274
+ ├── kana.ts Japanese tiles: the 45 base kana, and how every other kana is played as one of them
275
+ ├── kumimoji.types.ts the game's types: how much of the set a bag holds, and the rest
276
+ ├── party.ts pass and play: two to eight people round one device, one bag, a hand and a table each
277
+ ├── party.types.ts what a pass-and-play game was set up as
278
+ ├── partyKept.ts a pass-and-play game kept in the browser as one string of JSON
279
+ ├── partySeats.ts people and computers joining and leaving a pass-and-play game between turns
280
+ ├── partyTurns.ts how a pass-and-play turn ends, and how the game does, and who won
281
+ ├── placement.ts where a word can cross a crossword without spoiling it
282
+ ├── play.ts a game being played: the bag, the hand and the table, and every move on them
283
+ ├── random.ts a seeded random, so one seed deals one game in every browser
284
+ ├── react.tsx the "/react" entry: a grid to draw in React
285
+ ├── showcase.ts what the rules page shows of the game, worked out from the game's own tables
286
+ ├── strings.ts every word Kumimoji shows a person, in English and Japanese
287
+ ├── tableView.ts how the table is looked at: which squares are shown, and how big a tile is drawn
288
+ ├── tileFace.ts what a tile code shows, without loading a word list
289
+ ├── tileFamily.ts which tile of the set a tile is, without loading a word list
290
+ ├── tileWords.ts the word list, loaded once when a game opens
291
+ ├── tileWordsModule.ts the same lists where there is no browser, imported only by a server or a test
292
+ ├── tiles.constants.ts every number the game is played by: tile mixes, hand sizes, lengths of a game
293
+ ├── turn.ts turning the table while every tile stays upright
294
+ ├── ui.ts the "/ui" entry: Kumimoji played in the browser, in plain DOM
295
+ ├── version.ts the version of this package, as package.json has it
296
+ ├── wilds.ts a wild tile with no letter read as whatever makes the grid words
297
+ ├── words.en.data.ts the English word list
298
+ ├── words.ja.data.ts the Japanese word list and tile mix
299
+ ├── words.ts the "/words" entry: the word lists, for a place with no browser, such as a server or a test
300
+ └── ui/ the table that draws and plays a game
301
+ ├── board.ts how a tile on the table is drawn: sound, in a run that is not a word, or apart
302
+ ├── mount.ts the table itself: mounting it on a page, and the options it takes
303
+ └── style.ts the table's own styles, every colour and size a CSS variable so a page can restyle it
304
+ ```
305
+
306
+ Tests sit beside the code they test (`*.test.ts`). `scripts/` builds the demo
307
+ and checks the package as npm packs it, `demo/` is the page published on
308
+ GitHub Pages, and `table/` taps it in real browsers.
309
+
253
310
  ## The name
254
311
 
255
312
  *Kumimoji* (組み文字) is made of *kumi* (組み, from 組む, to put together or
@@ -495,7 +552,7 @@ The JSON, as `kumimojiToJSON` writes it:
495
552
  {
496
553
  "format": 1,
497
554
  "game": "kumimoji",
498
- "generator": "kumimoji 1.1.0",
555
+ "generator": "kumimoji 1.1.1",
499
556
  "size": 3,
500
557
  "level": "hard",
501
558
  "seed": 44,
@@ -586,6 +643,8 @@ turn tiles into words: `glyphOf`, `soundOf`, `wordOf`, `wildFor`, `isWild`,
586
643
 
587
644
  ## API
588
645
 
646
+ The [API reference](https://johnmorrisdotca.github.io/kumimoji/api.html) lists every export of every entry point with its signature and its doc comment. It is made from the source by `pnpm site`, so it cannot fall behind the code.
647
+
589
648
  Every function, type and constant has a doc comment, so an editor shows this
590
649
  as you type. The entries:
591
650
 
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** The version of this package, as `package.json` has it. A test holds the two together. */
2
- export declare const KUMIMOJI_VERSION = "1.1.0";
2
+ export declare const KUMIMOJI_VERSION = "1.1.1";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /** The version of this package, as `package.json` has it. A test holds the two together. */
2
- export const KUMIMOJI_VERSION = "1.1.0";
2
+ export const KUMIMOJI_VERSION = "1.1.1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johnmorrisdotca/kumimoji",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Crossword tile race: a word game engine where each player builds a crossword from a bag of letter tiles, in English or Japanese kana, alone against the clock or at a table of two to eight. Seeded deals, word checking, wild tiles, a computer player, and a playable table for React, Vue, Svelte, Angular or plain HTML. Zero dependencies.",
5
5
  "keywords": [
6
6
  "word-game",