@sbugallo/pokecode 0.2.1 → 0.3.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.
Files changed (128) hide show
  1. package/README.md +17 -11
  2. package/dist/adapters/opencode/tui/choices/cards.d.ts +4 -0
  3. package/dist/adapters/opencode/tui/choices/cards.d.ts.map +1 -1
  4. package/dist/adapters/opencode/tui/choices/cards.jsx +6 -6
  5. package/dist/adapters/opencode/tui/choices/cards.jsx.map +1 -1
  6. package/dist/adapters/opencode/tui/choices/encounter.d.ts +2 -0
  7. package/dist/adapters/opencode/tui/choices/encounter.d.ts.map +1 -1
  8. package/dist/adapters/opencode/tui/choices/encounter.jsx +1 -1
  9. package/dist/adapters/opencode/tui/choices/encounter.jsx.map +1 -1
  10. package/dist/adapters/opencode/tui/components/image-protocol.d.ts +31 -0
  11. package/dist/adapters/opencode/tui/components/image-protocol.d.ts.map +1 -0
  12. package/dist/adapters/opencode/tui/components/image-protocol.js +83 -0
  13. package/dist/adapters/opencode/tui/components/image-protocol.js.map +1 -0
  14. package/dist/adapters/opencode/tui/components/sprite.d.ts +2 -0
  15. package/dist/adapters/opencode/tui/components/sprite.d.ts.map +1 -1
  16. package/dist/adapters/opencode/tui/components/sprite.jsx +1 -1
  17. package/dist/adapters/opencode/tui/components/sprite.jsx.map +1 -1
  18. package/dist/adapters/opencode/tui/pc/actions.d.ts +2 -0
  19. package/dist/adapters/opencode/tui/pc/actions.d.ts.map +1 -1
  20. package/dist/adapters/opencode/tui/pc/actions.jsx +1 -1
  21. package/dist/adapters/opencode/tui/pc/actions.jsx.map +1 -1
  22. package/dist/adapters/opencode/tui/pc/details.d.ts +2 -0
  23. package/dist/adapters/opencode/tui/pc/details.d.ts.map +1 -1
  24. package/dist/adapters/opencode/tui/pc/details.jsx +1 -1
  25. package/dist/adapters/opencode/tui/pc/details.jsx.map +1 -1
  26. package/dist/adapters/opencode/tui/pc/dialog.d.ts +2 -0
  27. package/dist/adapters/opencode/tui/pc/dialog.d.ts.map +1 -1
  28. package/dist/adapters/opencode/tui/pc/dialog.jsx +1 -1
  29. package/dist/adapters/opencode/tui/pc/dialog.jsx.map +1 -1
  30. package/dist/adapters/opencode/tui/plugin.d.ts.map +1 -1
  31. package/dist/adapters/opencode/tui/plugin.jsx +8 -0
  32. package/dist/adapters/opencode/tui/plugin.jsx.map +1 -1
  33. package/dist/adapters/opencode/tui/sidebar/register.d.ts +2 -0
  34. package/dist/adapters/opencode/tui/sidebar/register.d.ts.map +1 -1
  35. package/dist/adapters/opencode/tui/sidebar/register.jsx +1 -1
  36. package/dist/adapters/opencode/tui/sidebar/register.jsx.map +1 -1
  37. package/dist/adapters/opencode/tui/sidebar/view.d.ts +4 -0
  38. package/dist/adapters/opencode/tui/sidebar/view.d.ts.map +1 -1
  39. package/dist/adapters/opencode/tui/sidebar/view.jsx +9 -9
  40. package/dist/adapters/opencode/tui/sidebar/view.jsx.map +1 -1
  41. package/dist/adapters/opencode/tui/state/cleanup.d.ts +1 -0
  42. package/dist/adapters/opencode/tui/state/cleanup.d.ts.map +1 -1
  43. package/dist/adapters/opencode/tui/state/cleanup.js +1 -0
  44. package/dist/adapters/opencode/tui/state/cleanup.js.map +1 -1
  45. package/dist/adapters/opencode/tui/travel/actions.d.ts +2 -0
  46. package/dist/adapters/opencode/tui/travel/actions.d.ts.map +1 -1
  47. package/dist/adapters/opencode/tui/travel/actions.jsx +1 -1
  48. package/dist/adapters/opencode/tui/travel/actions.jsx.map +1 -1
  49. package/dist/adapters/opencode/tui/travel/dialog.d.ts +2 -0
  50. package/dist/adapters/opencode/tui/travel/dialog.d.ts.map +1 -1
  51. package/dist/adapters/opencode/tui/travel/dialog.jsx +1 -1
  52. package/dist/adapters/opencode/tui/travel/dialog.jsx.map +1 -1
  53. package/dist/adapters/sqlite/game-repository.d.ts +2 -1
  54. package/dist/adapters/sqlite/game-repository.d.ts.map +1 -1
  55. package/dist/adapters/sqlite/game-repository.js +9 -1
  56. package/dist/adapters/sqlite/game-repository.js.map +1 -1
  57. package/dist/adapters/sqlite/queries/game-state.d.ts +2 -1
  58. package/dist/adapters/sqlite/queries/game-state.d.ts.map +1 -1
  59. package/dist/adapters/sqlite/queries/game-state.js +9 -3
  60. package/dist/adapters/sqlite/queries/game-state.js.map +1 -1
  61. package/dist/application/contracts/game.d.ts +3 -2
  62. package/dist/application/contracts/game.d.ts.map +1 -1
  63. package/dist/application/contracts/game.js +3 -2
  64. package/dist/application/contracts/game.js.map +1 -1
  65. package/dist/application/game.d.ts.map +1 -1
  66. package/dist/application/game.js +5 -1
  67. package/dist/application/game.js.map +1 -1
  68. package/dist/application/ports/game.d.ts +2 -1
  69. package/dist/application/ports/game.d.ts.map +1 -1
  70. package/dist/application/use-cases/record-usage.d.ts.map +1 -1
  71. package/dist/application/use-cases/record-usage.js +17 -4
  72. package/dist/application/use-cases/record-usage.js.map +1 -1
  73. package/dist/domain/content/catalog.d.ts +4 -0
  74. package/dist/domain/content/catalog.d.ts.map +1 -1
  75. package/dist/domain/content/catalog.js +17 -0
  76. package/dist/domain/content/catalog.js.map +1 -1
  77. package/dist/domain/content/catalogs/alola-locations-catalog.d.ts +1 -0
  78. package/dist/domain/content/catalogs/alola-locations-catalog.d.ts.map +1 -1
  79. package/dist/domain/content/catalogs/alola-locations-catalog.js +1 -0
  80. package/dist/domain/content/catalogs/alola-locations-catalog.js.map +1 -1
  81. package/dist/domain/content/catalogs/galar-locations-catalog.d.ts +1 -0
  82. package/dist/domain/content/catalogs/galar-locations-catalog.d.ts.map +1 -1
  83. package/dist/domain/content/catalogs/galar-locations-catalog.js +1 -0
  84. package/dist/domain/content/catalogs/galar-locations-catalog.js.map +1 -1
  85. package/dist/domain/content/catalogs/hoenn-locations-catalog.d.ts +1 -0
  86. package/dist/domain/content/catalogs/hoenn-locations-catalog.d.ts.map +1 -1
  87. package/dist/domain/content/catalogs/hoenn-locations-catalog.js +1 -0
  88. package/dist/domain/content/catalogs/hoenn-locations-catalog.js.map +1 -1
  89. package/dist/domain/content/catalogs/johto-locations-catalog.d.ts +1 -0
  90. package/dist/domain/content/catalogs/johto-locations-catalog.d.ts.map +1 -1
  91. package/dist/domain/content/catalogs/johto-locations-catalog.js +1 -0
  92. package/dist/domain/content/catalogs/johto-locations-catalog.js.map +1 -1
  93. package/dist/domain/content/catalogs/kalos-locations-catalog.d.ts +1 -0
  94. package/dist/domain/content/catalogs/kalos-locations-catalog.d.ts.map +1 -1
  95. package/dist/domain/content/catalogs/kalos-locations-catalog.js +1 -0
  96. package/dist/domain/content/catalogs/kalos-locations-catalog.js.map +1 -1
  97. package/dist/domain/content/catalogs/kanto-locations-catalog.d.ts +1 -0
  98. package/dist/domain/content/catalogs/kanto-locations-catalog.d.ts.map +1 -1
  99. package/dist/domain/content/catalogs/kanto-locations-catalog.js +1 -0
  100. package/dist/domain/content/catalogs/kanto-locations-catalog.js.map +1 -1
  101. package/dist/domain/content/catalogs/paldea-locations-catalog.d.ts +1 -0
  102. package/dist/domain/content/catalogs/paldea-locations-catalog.d.ts.map +1 -1
  103. package/dist/domain/content/catalogs/paldea-locations-catalog.js +1 -0
  104. package/dist/domain/content/catalogs/paldea-locations-catalog.js.map +1 -1
  105. package/dist/domain/content/catalogs/sinnoh-locations-catalog.d.ts +1 -0
  106. package/dist/domain/content/catalogs/sinnoh-locations-catalog.d.ts.map +1 -1
  107. package/dist/domain/content/catalogs/sinnoh-locations-catalog.js +1 -0
  108. package/dist/domain/content/catalogs/sinnoh-locations-catalog.js.map +1 -1
  109. package/dist/domain/content/catalogs/unova-locations-catalog.d.ts +1 -0
  110. package/dist/domain/content/catalogs/unova-locations-catalog.d.ts.map +1 -1
  111. package/dist/domain/content/catalogs/unova-locations-catalog.js +1 -0
  112. package/dist/domain/content/catalogs/unova-locations-catalog.js.map +1 -1
  113. package/dist/domain/content/schema.d.ts +1 -0
  114. package/dist/domain/content/schema.d.ts.map +1 -1
  115. package/dist/domain/content/schema.js +2 -0
  116. package/dist/domain/content/schema.js.map +1 -1
  117. package/dist/domain/exploration/exploration.d.ts +20 -0
  118. package/dist/domain/exploration/exploration.d.ts.map +1 -1
  119. package/dist/domain/exploration/exploration.js +17 -0
  120. package/dist/domain/exploration/exploration.js.map +1 -1
  121. package/dist/domain/usage/usage.d.ts +3 -3
  122. package/dist/domain/usage/usage.d.ts.map +1 -1
  123. package/dist/domain/usage/usage.js +4 -2
  124. package/dist/domain/usage/usage.js.map +1 -1
  125. package/dist/index.js +67 -10
  126. package/dist/rpc.js +8 -2
  127. package/dist/tui.js +195 -36
  128. package/package.json +1 -1
package/dist/tui.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // src/adapters/opencode/tui/plugin.tsx
3
3
  import { Plugin } from "@opencode/plugin/tui";
4
4
  import { createClipboard, createHostClipboard, createRendererClipboardAdapter } from "@opentui/core";
5
- import { createSignal as createSignal10 } from "solid-js";
5
+ import { createSignal as createSignal11 } from "solid-js";
6
6
 
7
7
  // src/adapters/opencode/rpc/contract.ts
8
8
  import { Rpc } from "@opencode/plugin/rpc";
@@ -135,6 +135,11 @@ var explorationStatusSchema = z4.object({
135
135
  locationUnlockThreshold: z4.number().int().positive(),
136
136
  regionComplete: z4.boolean()
137
137
  });
138
+ function locationUnlockThreshold(input) {
139
+ const capped = Math.min(Math.max(input.index, 0), input.championIndex);
140
+ const cumulative = (i) => input.curve.baseTokens * (i + 1) ** input.curve.exponent * (input.championIndex + 1) ** input.curve.regionExponent;
141
+ return Math.round(cumulative(capped + 1) - cumulative(capped));
142
+ }
138
143
  function calculateUnlockProgress(input) {
139
144
  if (!input.currentLocationIsLatestUnlocked)
140
145
  return { kind: "not-latest" };
@@ -229,10 +234,11 @@ var starterChoiceResultSchema = z8.object({
229
234
  });
230
235
  var gameplayConfigSchema = z8.object({
231
236
  pauseOnPendingChoice: z8.boolean().default(true),
232
- xpTokensPerPoint: z8.number().int().positive().default(1000),
233
237
  encounterMinimumTokens: z8.number().int().positive().default(200000),
234
238
  encounterMaximumTokens: z8.number().int().positive().default(400000),
235
- locationUnlockTokens: z8.number().int().positive().default(2160000)
239
+ locationUnlockBaseTokens: z8.number().int().positive().default(4214000),
240
+ locationUnlockExponent: z8.number().positive().default(2.64),
241
+ locationUnlockRegionExponent: z8.number().default(-1.72)
236
242
  });
237
243
  var usageInputSchema = z8.object({
238
244
  sessionId: z8.string().min(1),
@@ -609,6 +615,53 @@ function createPokemonTuiClient(transport) {
609
615
  };
610
616
  }
611
617
 
618
+ // src/adapters/opencode/tui/components/image-protocol.ts
619
+ import { createSignal } from "solid-js";
620
+ var graphicsCorrections = [
621
+ {
622
+ terminalName: /^xterm\.js$/i,
623
+ requires: { sixel: true },
624
+ protocol: "sixel",
625
+ reason: "xterm.js image addon Kitty path drops OpenTUI placements"
626
+ },
627
+ {
628
+ terminalName: /orca/i,
629
+ protocol: "blocks",
630
+ reason: "stablyai/orca#23547"
631
+ }
632
+ ];
633
+ var requirementsMet = (requires, capabilities) => {
634
+ if (requires === undefined)
635
+ return true;
636
+ if (requires.sixel !== undefined && capabilities?.sixel !== requires.sixel)
637
+ return false;
638
+ if (requires.kitty_graphics !== undefined && capabilities?.kitty_graphics !== requires.kitty_graphics) {
639
+ return false;
640
+ }
641
+ return true;
642
+ };
643
+ function spriteImageProtocol(capabilities) {
644
+ const configured = capabilities?.image_protocol;
645
+ if (configured !== undefined && configured !== "auto")
646
+ return configured;
647
+ const name = capabilities?.terminal.name ?? "";
648
+ const correction = graphicsCorrections.find((entry) => entry.terminalName.test(name) && requirementsMet(entry.requires, capabilities));
649
+ return correction?.protocol ?? "auto";
650
+ }
651
+ function createImageProtocolState(source) {
652
+ const [protocol, setProtocol] = createSignal(spriteImageProtocol(source.capabilities));
653
+ const listener = (capabilities) => {
654
+ setProtocol(spriteImageProtocol(capabilities));
655
+ };
656
+ source.on("capabilities", listener);
657
+ return {
658
+ protocol,
659
+ dispose: () => {
660
+ source.off("capabilities", listener);
661
+ }
662
+ };
663
+ }
664
+
612
665
  // src/adapters/opencode/tui/dex/actions.tsx
613
666
  import { createComponent as _$createComponent2 } from "@opentui/solid";
614
667
 
@@ -958,7 +1011,7 @@ function createExportAction(dependencies) {
958
1011
 
959
1012
  // src/adapters/opencode/tui/pc/actions.tsx
960
1013
  import { createComponent as _$createComponent7 } from "@opentui/solid";
961
- import { createSignal as createSignal4 } from "solid-js";
1014
+ import { createSignal as createSignal5 } from "solid-js";
962
1015
 
963
1016
  // src/adapters/opencode/tui/pc/dialog.tsx
964
1017
  import { memo as _$memo5 } from "@opentui/solid";
@@ -971,7 +1024,7 @@ import { setProp as _$setProp6 } from "@opentui/solid";
971
1024
  import { createElement as _$createElement6 } from "@opentui/solid";
972
1025
  import { createTextAttributes as createTextAttributes2, MouseButton as MouseButton2 } from "@opentui/core";
973
1026
  import { useKeyboard as useKeyboard2, useTerminalDimensions as useTerminalDimensions2 } from "@opentui/solid";
974
- import { createSignal as createSignal3, For as For4, Show as Show3 } from "solid-js";
1027
+ import { createSignal as createSignal4, For as For4, Show as Show3 } from "solid-js";
975
1028
 
976
1029
  // src/adapters/presentation/pc-copy.ts
977
1030
  var english2 = {
@@ -106360,7 +106413,7 @@ import { use as _$use2 } from "@opentui/solid";
106360
106413
  import { createElement as _$createElement3 } from "@opentui/solid";
106361
106414
  import { createComponent as _$createComponent3 } from "@opentui/solid";
106362
106415
  import { MouseButton } from "@opentui/core";
106363
- import { createSignal, For as For2, Show } from "solid-js";
106416
+ import { createSignal as createSignal2, For as For2, Show } from "solid-js";
106364
106417
 
106365
106418
  // src/domain/content/catalogs/abilities-catalog.ts
106366
106419
  var abilitiesCatalog = [
@@ -108440,6 +108493,7 @@ var alolaLocationsCatalog = {
108440
108493
  maximumLevel: 50
108441
108494
  }
108442
108495
  ],
108496
+ championLocationId: "alola-pokemon-league",
108443
108497
  locations: [
108444
108498
  {
108445
108499
  id: "iki-town",
@@ -114445,6 +114499,7 @@ var galarLocationsCatalog = {
114445
114499
  maximumLevel: 70
114446
114500
  }
114447
114501
  ],
114502
+ championLocationId: "energy-plant",
114448
114503
  locations: [
114449
114504
  {
114450
114505
  id: "postwick",
@@ -122517,6 +122572,7 @@ var hoennLocationsCatalog = {
122517
122572
  maximumLevel: 5
122518
122573
  }
122519
122574
  ],
122575
+ championLocationId: "ever-grande-city",
122520
122576
  locations: [
122521
122577
  {
122522
122578
  id: "littleroot-town",
@@ -126071,6 +126127,7 @@ var johtoLocationsCatalog = {
126071
126127
  maximumLevel: 40
126072
126128
  }
126073
126129
  ],
126130
+ championLocationId: "johto-indigo-plateau",
126074
126131
  locations: [
126075
126132
  {
126076
126133
  id: "new-bark-town",
@@ -130223,6 +130280,7 @@ var kalosLocationsCatalog = {
130223
130280
  maximumLevel: 70
130224
130281
  }
130225
130282
  ],
130283
+ championLocationId: "kalos-pokemon-league",
130226
130284
  locations: [
130227
130285
  {
130228
130286
  id: "vaniville-town",
@@ -134551,6 +134609,7 @@ var kantoLocationsCatalog = {
134551
134609
  "squirtle"
134552
134610
  ],
134553
134611
  specialEncounters: [],
134612
+ championLocationId: "indigo-plateau",
134554
134613
  locations: [
134555
134614
  {
134556
134615
  id: "pallet-town",
@@ -150232,6 +150291,7 @@ var paldeaLocationsCatalog = {
150232
150291
  "quaxly"
150233
150292
  ],
150234
150293
  specialEncounters: [],
150294
+ championLocationId: "paldea-pokemon-league",
150235
150295
  locations: [
150236
150296
  {
150237
150297
  id: "cabo-poco",
@@ -168069,6 +168129,7 @@ var sinnohLocationsCatalog = {
168069
168129
  maximumLevel: 50
168070
168130
  }
168071
168131
  ],
168132
+ championLocationId: "victory-road",
168072
168133
  locations: [
168073
168134
  {
168074
168135
  id: "twinleaf-town",
@@ -175272,6 +175333,7 @@ var unovaLocationsCatalog = {
175272
175333
  maximumLevel: 15
175273
175334
  }
175274
175335
  ],
175336
+ championLocationId: "unova-pokemon-league",
175275
175337
  locations: [
175276
175338
  {
175277
175339
  id: "nuvema-town",
@@ -181835,6 +181897,7 @@ var regionSchema = namedIdSchema.extend({
181835
181897
  locations: z10.array(locationSchema).min(1),
181836
181898
  starterSpeciesIds: z10.array(z10.string().min(1)).length(3),
181837
181899
  starterCatchLocationId: z10.string().min(1),
181900
+ championLocationId: z10.string().min(1),
181838
181901
  specials: z10.array(specialSchema)
181839
181902
  });
181840
181903
  var speciesSchema = namedIdSchema.extend({
@@ -181928,6 +181991,7 @@ var catalog = generatedCatalogSchema.parse({
181928
181991
  localization: region.localization,
181929
181992
  starterSpeciesIds: regionalCatalog.starterPokemons,
181930
181993
  starterCatchLocationId: locations[0]?.id ?? "",
181994
+ championLocationId: regionalCatalog.championLocationId,
181931
181995
  specials: specialsForCatalog(regionalCatalog).flatMap((special) => {
181932
181996
  const pokemon = pokemonById.get(special.id);
181933
181997
  const ability = englishAbilityName(pokemon?.abilities[0]);
@@ -181976,6 +182040,12 @@ var catalog = generatedCatalogSchema.parse({
181976
182040
  ]))))
181977
182041
  });
181978
182042
  var generatedContentCatalog = catalog;
182043
+ var championIndexByRegion = new Map(catalog.regions.map((region) => {
182044
+ const index = region.locations.findIndex((location) => location.id === region.championLocationId);
182045
+ if (index < 0)
182046
+ throw new Error(`Unknown championLocationId ${region.championLocationId}`);
182047
+ return [region.id, index];
182048
+ }));
181979
182049
  var regionsById = new Map(catalog.regions.map((region) => [region.id, region]));
181980
182050
  var speciesById = new Map([...catalog.species, ...catalog.regionalForms].map((species) => [species.id, species]));
181981
182051
  var movesById = new Map(movesCatalog.map((move) => [move.id, move]));
@@ -182028,6 +182098,13 @@ function nextLocation(regionId, locationId) {
182028
182098
  const index = locations.findIndex((location) => location.id === locationId);
182029
182099
  return index < 0 ? null : locations[index + 1] ?? null;
182030
182100
  }
182101
+ function championIndexForRegion(regionId) {
182102
+ return championIndexByRegion.get(regionId) ?? null;
182103
+ }
182104
+ function locationIndexFor(regionId, locationId) {
182105
+ const index = locationsForRegion(regionId).findIndex((location) => location.id === locationId);
182106
+ return index < 0 ? null : index;
182107
+ }
182031
182108
  function startersForRegion(regionId, language = "en") {
182032
182109
  return regionsById.get(regionId)?.starterSpeciesIds.flatMap((speciesId) => {
182033
182110
  const species = speciesById.get(speciesId);
@@ -182185,8 +182262,8 @@ extend({ button: StarterButtonRenderable });
182185
182262
 
182186
182263
  // src/adapters/opencode/tui/components/move-list.tsx
182187
182264
  function MoveList(properties) {
182188
- const [hovered, setHovered] = createSignal(null);
182189
- const [inspected, setInspected] = createSignal(null);
182265
+ const [hovered, setHovered] = createSignal2(null);
182266
+ const [inspected, setInspected] = createSignal2(null);
182190
182267
  const moves = () => properties.moves.map((move) => presentMove(move, properties.language));
182191
182268
  const description = () => moves().find((move) => move.id === inspected())?.description;
182192
182269
  let list;
@@ -182366,9 +182443,9 @@ import { memo as _$memo3 } from "@opentui/solid";
182366
182443
  import { setProp as _$setProp4 } from "@opentui/solid";
182367
182444
  import { createElement as _$createElement4 } from "@opentui/solid";
182368
182445
  import { createComponent as _$createComponent4 } from "@opentui/solid";
182369
- import { createSignal as createSignal2, Show as Show2 } from "solid-js";
182446
+ import { createSignal as createSignal3, Show as Show2 } from "solid-js";
182370
182447
  function Sprite(properties) {
182371
- const [sprite, setSprite] = createSignal2(null);
182448
+ const [sprite, setSprite] = createSignal3(null);
182372
182449
  const setSpriteIfOwned = createOwnerBoundCallback(setSprite);
182373
182450
  const width = properties.width ?? 8;
182374
182451
  const height = properties.height ?? 4;
@@ -182401,7 +182478,15 @@ function Sprite(properties) {
182401
182478
  _$setProp4(_el$3, "fit", "fit");
182402
182479
  _$setProp4(_el$3, "width", width);
182403
182480
  _$setProp4(_el$3, "height", height);
182404
- _$effect4((_$p) => _$setProp4(_el$3, "source", cachedSource(), _$p));
182481
+ _$effect4((_p$) => {
182482
+ var _v$ = cachedSource(), _v$2 = properties.protocol?.() ?? "auto";
182483
+ _v$ !== _p$.e && (_p$.e = _$setProp4(_el$3, "source", _v$, _p$.e));
182484
+ _v$2 !== _p$.t && (_p$.t = _$setProp4(_el$3, "protocol", _v$2, _p$.t));
182485
+ return _p$;
182486
+ }, {
182487
+ e: undefined,
182488
+ t: undefined
182489
+ });
182405
182490
  return _el$3;
182406
182491
  })()
182407
182492
  });
@@ -182435,6 +182520,9 @@ function PcDetails(properties) {
182435
182520
  get resolve() {
182436
182521
  return properties.resolveSprite;
182437
182522
  },
182523
+ get protocol() {
182524
+ return properties.imageProtocol;
182525
+ },
182438
182526
  get shiny() {
182439
182527
  return properties.pokemon.shiny;
182440
182528
  },
@@ -182500,12 +182588,12 @@ var bold2 = createTextAttributes2({
182500
182588
  function PokemonPcDialog(properties) {
182501
182589
  const dimensions = useTerminalDimensions2();
182502
182590
  const height = () => Math.min(44, Math.max(1, dimensions().height - 6));
182503
- const [index, setIndex] = createSignal3(0);
182504
- const [selected, setSelected] = createSignal3([...properties.partyIds]);
182505
- const [busy, setBusy] = createSignal3(false);
182506
- const [feedback, setFeedback] = createSignal3("");
182507
- const [mode, setMode] = createSignal3("browse");
182508
- const [name, setName] = createSignal3("");
182591
+ const [index, setIndex] = createSignal4(0);
182592
+ const [selected, setSelected] = createSignal4([...properties.partyIds]);
182593
+ const [busy, setBusy] = createSignal4(false);
182594
+ const [feedback, setFeedback] = createSignal4("");
182595
+ const [mode, setMode] = createSignal4("browse");
182596
+ const [name, setName] = createSignal4("");
182509
182597
  const isOwned = createOwnerGuard();
182510
182598
  const copy = () => pcCopy(properties.language);
182511
182599
  const textColor = () => typeof properties.textColor === "function" ? properties.textColor() : properties.textColor;
@@ -182776,6 +182864,9 @@ function PokemonPcDialog(properties) {
182776
182864
  },
182777
182865
  get resolveSprite() {
182778
182866
  return properties.resolveSprite;
182867
+ },
182868
+ get imageProtocol() {
182869
+ return properties.imageProtocol;
182779
182870
  }
182780
182871
  })
182781
182872
  }));
@@ -182925,7 +183016,7 @@ function createPcAction(dependencies) {
182925
183016
  const collection = await dependencies.rpc.collection({});
182926
183017
  if (dependencies.state.isDisposed())
182927
183018
  return;
182928
- const [pokemon, setPokemon] = createSignal4(collection.pokemon);
183019
+ const [pokemon, setPokemon] = createSignal5(collection.pokemon);
182929
183020
  const manage = async (operation, update) => {
182930
183021
  const result = await operation;
182931
183022
  dependencies.state.apply(result.state);
@@ -182957,6 +183048,9 @@ function createPcAction(dependencies) {
182957
183048
  get resolveSprite() {
182958
183049
  return dependencies.resolveSprite;
182959
183050
  },
183051
+ get imageProtocol() {
183052
+ return dependencies.imageProtocol;
183053
+ },
182960
183054
  onClose: () => {
182961
183055
  if (!dependencies.state.isDisposed())
182962
183056
  dependencies.dialog.clear();
@@ -182981,7 +183075,7 @@ function createPcAction(dependencies) {
182981
183075
  }
182982
183076
 
182983
183077
  // src/adapters/opencode/tui/sidebar/actions.ts
182984
- import { createSignal as createSignal5 } from "solid-js";
183078
+ import { createSignal as createSignal6 } from "solid-js";
182985
183079
 
182986
183080
  // src/adapters/presentation/localization.ts
182987
183081
  function localizePokemon(pokemon, language) {
@@ -183140,8 +183234,8 @@ function captureNotification(encounter, destination, language) {
183140
183234
 
183141
183235
  // src/adapters/opencode/tui/sidebar/actions.ts
183142
183236
  function createSidebarActions(dependencies) {
183143
- const [selectingStarter, setSelectingStarter] = createSignal5(null);
183144
- const [resolvingEncounterId, setResolvingEncounterId] = createSignal5(null);
183237
+ const [selectingStarter, setSelectingStarter] = createSignal6(null);
183238
+ const [resolvingEncounterId, setResolvingEncounterId] = createSignal6(null);
183145
183239
  return {
183146
183240
  travelToLocation: async (locationId) => {
183147
183241
  const result = await dependencies.rpc.travelTo({ locationId });
@@ -183283,7 +183377,7 @@ import { insert as _$insert9 } from "@opentui/solid";
183283
183377
  import { setProp as _$setProp9 } from "@opentui/solid";
183284
183378
  import { createElement as _$createElement9 } from "@opentui/solid";
183285
183379
  import { MouseButton as MouseButton4 } from "@opentui/core";
183286
- import { createSignal as createSignal7, Match as Match2, Show as Show5, Switch as Switch2 } from "solid-js";
183380
+ import { createSignal as createSignal8, Match as Match2, Show as Show5, Switch as Switch2 } from "solid-js";
183287
183381
 
183288
183382
  // src/domain/choices/choices.ts
183289
183383
  import { z as z11 } from "zod";
@@ -183344,7 +183438,7 @@ import { createElement as _$createElement7 } from "@opentui/solid";
183344
183438
  import { createComponent as _$createComponent8 } from "@opentui/solid";
183345
183439
  import { MouseButton as MouseButton3 } from "@opentui/core";
183346
183440
  import { useTerminalDimensions as useTerminalDimensions3 } from "@opentui/solid";
183347
- import { createSignal as createSignal6, Match, Show as Show4, Switch } from "solid-js";
183441
+ import { createSignal as createSignal7, Match, Show as Show4, Switch } from "solid-js";
183348
183442
  function PendingChoiceCard(properties) {
183349
183443
  const choice = () => properties.state().pendingChoices[0];
183350
183444
  return _$createComponent8(Show4, {
@@ -183369,6 +183463,9 @@ function PendingChoiceCard(properties) {
183369
183463
  get resolveSprite() {
183370
183464
  return properties.resolveSprite;
183371
183465
  },
183466
+ get imageProtocol() {
183467
+ return properties.imageProtocol;
183468
+ },
183372
183469
  get language() {
183373
183470
  return properties.language;
183374
183471
  }
@@ -183386,6 +183483,9 @@ function PendingChoiceCard(properties) {
183386
183483
  get resolveSprite() {
183387
183484
  return properties.resolveSprite;
183388
183485
  },
183486
+ get imageProtocol() {
183487
+ return properties.imageProtocol;
183488
+ },
183389
183489
  get language() {
183390
183490
  return properties.language;
183391
183491
  },
@@ -183436,6 +183536,9 @@ function MoveChoiceCard(properties) {
183436
183536
  get resolve() {
183437
183537
  return properties.resolveSprite;
183438
183538
  },
183539
+ get protocol() {
183540
+ return properties.imageProtocol;
183541
+ },
183439
183542
  get shiny() {
183440
183543
  return pokemon.shiny;
183441
183544
  },
@@ -183478,7 +183581,7 @@ function EvolutionChoiceCard(properties) {
183478
183581
  const pokemon = properties.party().find((slot) => slot.pokemon?.id === payload.pokemonId)?.pokemon ?? properties.choicePokemon().find((instance) => instance.id === payload.pokemonId);
183479
183582
  if (pokemon === undefined || pokemon === null)
183480
183583
  return null;
183481
- const [hoveredOption, setHoveredOption] = createSignal6(null);
183584
+ const [hoveredOption, setHoveredOption] = createSignal7(null);
183482
183585
  return (() => {
183483
183586
  var _el$4 = _$createElement7("box"), _el$5 = _$createElement7("text"), _el$6 = _$createElement7("text"), _el$7 = _$createElement7("box");
183484
183587
  _$insertNode7(_el$4, _el$5);
@@ -183498,6 +183601,9 @@ function EvolutionChoiceCard(properties) {
183498
183601
  get resolve() {
183499
183602
  return properties.resolveSprite;
183500
183603
  },
183604
+ get protocol() {
183605
+ return properties.imageProtocol;
183606
+ },
183501
183607
  get shiny() {
183502
183608
  return pokemon.shiny;
183503
183609
  },
@@ -183524,6 +183630,9 @@ function EvolutionChoiceCard(properties) {
183524
183630
  get resolveSprite() {
183525
183631
  return properties.resolveSprite;
183526
183632
  },
183633
+ get imageProtocol() {
183634
+ return properties.imageProtocol;
183635
+ },
183527
183636
  get language() {
183528
183637
  return properties.language;
183529
183638
  }
@@ -183564,6 +183673,9 @@ function EvolutionOptionCard(properties) {
183564
183673
  get resolve() {
183565
183674
  return properties.resolveSprite;
183566
183675
  },
183676
+ get protocol() {
183677
+ return properties.imageProtocol;
183678
+ },
183567
183679
  get shiny() {
183568
183680
  return properties.pokemon.shiny;
183569
183681
  },
@@ -183604,7 +183716,7 @@ function RegionChoiceCard(properties) {
183604
183716
  const payload = decodeRegionChoiceProjection(choice.payload);
183605
183717
  if (payload === null)
183606
183718
  return null;
183607
- const [hoveredRegion, setHoveredRegion] = createSignal6(null);
183719
+ const [hoveredRegion, setHoveredRegion] = createSignal7(null);
183608
183720
  const availableRegions = () => regions(properties.language?.() ?? "en");
183609
183721
  const completedRegionName = () => availableRegions().find((region) => region.id === payload.region)?.name ?? payload.region;
183610
183722
  return (() => {
@@ -183699,6 +183811,9 @@ function EncounterCard(properties) {
183699
183811
  get resolve() {
183700
183812
  return properties.resolveSprite;
183701
183813
  },
183814
+ get protocol() {
183815
+ return properties.imageProtocol;
183816
+ },
183702
183817
  get shiny() {
183703
183818
  return encounter.shiny;
183704
183819
  },
@@ -183799,6 +183914,9 @@ function SidebarView(properties) {
183799
183914
  },
183800
183915
  get resolveSprite() {
183801
183916
  return properties.resolveSprite;
183917
+ },
183918
+ get imageProtocol() {
183919
+ return properties.imageProtocol;
183802
183920
  }
183803
183921
  });
183804
183922
  }
@@ -183820,6 +183938,9 @@ function SidebarView(properties) {
183820
183938
  get resolveSprite() {
183821
183939
  return properties.resolveSprite;
183822
183940
  },
183941
+ get imageProtocol() {
183942
+ return properties.imageProtocol;
183943
+ },
183823
183944
  language: () => properties.state().locale
183824
183945
  });
183825
183946
  }
@@ -183864,6 +183985,9 @@ function SidebarView(properties) {
183864
183985
  get resolveSprite() {
183865
183986
  return properties.resolveSprite;
183866
183987
  },
183988
+ get imageProtocol() {
183989
+ return properties.imageProtocol;
183990
+ },
183867
183991
  language: () => properties.state().locale
183868
183992
  })
183869
183993
  });
@@ -183885,6 +184009,9 @@ function SidebarView(properties) {
183885
184009
  party: () => properties.state().party,
183886
184010
  get resolveSprite() {
183887
184011
  return properties.resolveSprite;
184012
+ },
184013
+ get imageProtocol() {
184014
+ return properties.imageProtocol;
183888
184015
  }
183889
184016
  })];
183890
184017
  }
@@ -183908,7 +184035,7 @@ function StarterButtons(properties) {
183908
184035
  })();
183909
184036
  }
183910
184037
  function StarterRegionCard(properties) {
183911
- const [rowWidth, setRowWidth] = createSignal7(0);
184038
+ const [rowWidth, setRowWidth] = createSignal8(0);
183912
184039
  const cellWidth = () => {
183913
184040
  const width = Math.max(1, Math.floor((rowWidth() - 2) / 3));
183914
184041
  return width % 2 === 0 ? width - 1 : width;
@@ -183979,6 +184106,9 @@ function StarterRegionCard(properties) {
183979
184106
  get resolve() {
183980
184107
  return properties.resolveSprite;
183981
184108
  },
184109
+ get protocol() {
184110
+ return properties.imageProtocol;
184111
+ },
183982
184112
  shiny: false,
183983
184113
  gender: "male",
183984
184114
  get speciesId() {
@@ -184014,7 +184144,7 @@ function StarterRegionCard(properties) {
184014
184144
  }
184015
184145
  function LocationProgress(properties) {
184016
184146
  const state = properties.state;
184017
- const [hoveredTravel, setHoveredTravel] = createSignal7(false);
184147
+ const [hoveredTravel, setHoveredTravel] = createSignal8(false);
184018
184148
  const currentLocation = () => state().exploration?.locations.find((location) => location.id === state().location)?.name ?? uiCopy(state().locale).unknown;
184019
184149
  const currentRegion = () => regions(state().locale).find((region) => region.id === state().region)?.name ?? uiCopy(state().locale).unknown;
184020
184150
  const latestUnlockedLocation = () => {
@@ -184077,6 +184207,9 @@ function PartyGrid(properties) {
184077
184207
  get resolveSprite() {
184078
184208
  return properties.resolveSprite;
184079
184209
  },
184210
+ get imageProtocol() {
184211
+ return properties.imageProtocol;
184212
+ },
184080
184213
  slots: () => occupiedSlots().slice(0, 2)
184081
184214
  }), null);
184082
184215
  _$insert9(_el$15, _$createComponent10(PartyRow, {
@@ -184086,6 +184219,9 @@ function PartyGrid(properties) {
184086
184219
  get resolveSprite() {
184087
184220
  return properties.resolveSprite;
184088
184221
  },
184222
+ get imageProtocol() {
184223
+ return properties.imageProtocol;
184224
+ },
184089
184225
  slots: () => occupiedSlots().slice(2, 4)
184090
184226
  }), null);
184091
184227
  _$insert9(_el$15, _$createComponent10(PartyRow, {
@@ -184095,6 +184231,9 @@ function PartyGrid(properties) {
184095
184231
  get resolveSprite() {
184096
184232
  return properties.resolveSprite;
184097
184233
  },
184234
+ get imageProtocol() {
184235
+ return properties.imageProtocol;
184236
+ },
184098
184237
  slots: () => occupiedSlots().slice(4, 6)
184099
184238
  }), null);
184100
184239
  return _el$15;
@@ -184120,6 +184259,9 @@ function PartyRow(properties) {
184120
184259
  get resolve() {
184121
184260
  return properties.resolveSprite;
184122
184261
  },
184262
+ get protocol() {
184263
+ return properties.imageProtocol;
184264
+ },
184123
184265
  get shiny() {
184124
184266
  return slot.pokemon.shiny;
184125
184267
  },
@@ -184224,6 +184366,9 @@ function registerPokemonSidebar(dependencies) {
184224
184366
  get resolveSprite() {
184225
184367
  return dependencies.resolveSprite;
184226
184368
  },
184369
+ get imageProtocol() {
184370
+ return dependencies.imageProtocol;
184371
+ },
184227
184372
  get setHoveredEncounterAction() {
184228
184373
  return dependencies.setHoveredEncounterAction;
184229
184374
  },
@@ -184272,6 +184417,7 @@ function createTuiCleanup(dependencies) {
184272
184417
  };
184273
184418
  runSynchronousDisposer(dependencies.unsubscribe);
184274
184419
  runSynchronousDisposer(dependencies.unregisterSlot);
184420
+ runSynchronousDisposer(dependencies.disposeImageProtocol);
184275
184421
  const finish = () => {
184276
184422
  if (failures.length === 1)
184277
184423
  throw failures[0];
@@ -184311,7 +184457,7 @@ function createTuiCleanup(dependencies) {
184311
184457
  }
184312
184458
 
184313
184459
  // src/adapters/opencode/tui/state/coordinator.ts
184314
- import { createSignal as createSignal8 } from "solid-js";
184460
+ import { createSignal as createSignal9 } from "solid-js";
184315
184461
  function initialTuiState() {
184316
184462
  return gameStateSchema.parse({
184317
184463
  phase: "onboarding",
@@ -184324,7 +184470,7 @@ function initialTuiState() {
184324
184470
  });
184325
184471
  }
184326
184472
  function createTuiStateCoordinator(initial, notify) {
184327
- const [state, setState] = createSignal8(initial);
184473
+ const [state, setState] = createSignal9(initial);
184328
184474
  let disposed = false;
184329
184475
  return {
184330
184476
  state,
@@ -184373,11 +184519,11 @@ import { insert as _$insert11 } from "@opentui/solid";
184373
184519
  import { setProp as _$setProp11 } from "@opentui/solid";
184374
184520
  import { createElement as _$createElement11 } from "@opentui/solid";
184375
184521
  import { useKeyboard as useKeyboard3 } from "@opentui/solid";
184376
- import { createSignal as createSignal9, For as For5, Show as Show6 } from "solid-js";
184522
+ import { createSignal as createSignal10, For as For5, Show as Show6 } from "solid-js";
184377
184523
  function LocationTravelDialog(properties) {
184378
184524
  const copy = () => uiCopy(properties.language);
184379
184525
  const initialLocationId = properties.locations.some((location) => location.id === properties.currentLocationId) ? properties.currentLocationId : properties.locations[0]?.id ?? "";
184380
- const [selectedLocationId, setSelectedLocationId] = createSignal9(initialLocationId);
184526
+ const [selectedLocationId, setSelectedLocationId] = createSignal10(initialLocationId);
184381
184527
  let locationsScrollbox;
184382
184528
  let pokemonScrollbox;
184383
184529
  const selectedLocation = () => properties.locations.find((location) => location.id === selectedLocationId());
@@ -184597,6 +184743,9 @@ function LocationTravelDialog(properties) {
184597
184743
  get resolve() {
184598
184744
  return properties.resolveSprite;
184599
184745
  },
184746
+ get protocol() {
184747
+ return properties.imageProtocol;
184748
+ },
184600
184749
  shiny: false,
184601
184750
  gender: "genderless",
184602
184751
  get speciesId() {
@@ -184719,6 +184868,9 @@ function createLocationTravelAction(dependencies) {
184719
184868
  },
184720
184869
  get resolveSprite() {
184721
184870
  return dependencies.resolveSprite;
184871
+ },
184872
+ get imageProtocol() {
184873
+ return dependencies.imageProtocol;
184722
184874
  }
184723
184875
  })));
184724
184876
  dependencies.dialog.set({
@@ -184745,20 +184897,24 @@ function createPokemonTuiPlugin(dependencies = defaultDependencies) {
184745
184897
  let clipboard;
184746
184898
  let unsubscribe;
184747
184899
  let unregisterSlot;
184900
+ let disposeImageProtocol;
184748
184901
  const cleanup = createTuiCleanup({
184749
184902
  state,
184750
184903
  unsubscribe: () => unsubscribe?.(),
184751
184904
  unregisterSlot: () => unregisterSlot?.(),
184752
- disposeClipboard: () => clipboard?.dispose()
184905
+ disposeClipboard: () => clipboard?.dispose(),
184906
+ disposeImageProtocol: () => disposeImageProtocol?.()
184753
184907
  });
184754
184908
  try {
184755
184909
  const rpc = createPokemonTuiClient(context.client.rpc(PokecodeRpc));
184756
184910
  clipboard = dependencies.createClipboard(context);
184911
+ const imageProtocol = createImageProtocolState(context.renderer);
184912
+ disposeImageProtocol = imageProtocol.dispose;
184757
184913
  const initialStatus = await rpc.status({});
184758
184914
  state.initialize(initialStatus);
184759
184915
  unsubscribe = rpc.onStatusChanged(state.apply);
184760
- const [hoveredStarter, setHoveredStarter] = createSignal10(null);
184761
- const [hoveredEncounterAction, setHoveredEncounterAction] = createSignal10(null);
184916
+ const [hoveredStarter, setHoveredStarter] = createSignal11(null);
184917
+ const [hoveredEncounterAction, setHoveredEncounterAction] = createSignal11(null);
184762
184918
  const resolveSprite = (speciesId, shiny, gender) => rpc.sprite({
184763
184919
  speciesId,
184764
184920
  shiny,
@@ -184774,6 +184930,7 @@ function createPokemonTuiPlugin(dependencies = defaultDependencies) {
184774
184930
  state,
184775
184931
  dialog: context.ui.dialog,
184776
184932
  resolveSprite,
184933
+ imageProtocol: imageProtocol.protocol,
184777
184934
  travelToLocation: sidebarActions.travelToLocation
184778
184935
  });
184779
184936
  const showDex = createDexAction({
@@ -184789,7 +184946,8 @@ function createPokemonTuiPlugin(dependencies = defaultDependencies) {
184789
184946
  base: () => context.theme.text.base,
184790
184947
  muted: () => context.theme.text.muted
184791
184948
  },
184792
- resolveSprite
184949
+ resolveSprite,
184950
+ imageProtocol: imageProtocol.protocol
184793
184951
  });
184794
184952
  const exportTeam = createExportAction({
184795
184953
  rpc,
@@ -184813,7 +184971,8 @@ function createPokemonTuiPlugin(dependencies = defaultDependencies) {
184813
184971
  showDex,
184814
184972
  chooseParty,
184815
184973
  exportTeam,
184816
- resolveSprite
184974
+ resolveSprite,
184975
+ imageProtocol: imageProtocol.protocol
184817
184976
  });
184818
184977
  return cleanup;
184819
184978
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sbugallo/pokecode",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "A Pokémon-inspired virtual companion plugin for OpenCode.",
5
5
  "author": "Sergio Bugallo",
6
6
  "license": "Apache-2.0",