@crockery/fellowship-components 0.3.0 → 0.4.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.
Files changed (108) hide show
  1. package/README.md +12 -10
  2. package/RELEASING.md +15 -14
  3. package/dist/chunks/data-source-XbksqUrw.js +7 -0
  4. package/dist/chunks/decorate-B_ZTN9li.js +0 -2
  5. package/dist/chunks/{dungeon-cast-browser-Cyh519NI.js → dungeon-cast-browser-CSnu3gC5.js} +54 -56
  6. package/dist/chunks/{dungeon-map-xFaPasVr.js → dungeon-map-CutIcCVP.js} +89 -92
  7. package/dist/chunks/{talent-calculator-CIPNbqK5.js → talent-calculator-Dxuc2dZ8.js} +88 -90
  8. package/dist/chunks/tooltip-DoQVSnOn.js +0 -2
  9. package/dist/data/cast-data-source.d.ts +0 -1
  10. package/dist/data/data-source.d.ts +3 -2
  11. package/dist/data/package-cast-data-source.d.ts +0 -1
  12. package/dist/data/package-data-source.d.ts +0 -1
  13. package/dist/data/package-talent-data-source.d.ts +0 -1
  14. package/dist/data/talent-data-source.d.ts +0 -1
  15. package/dist/dungeon-cast-browser/dungeon-cast-browser.d.ts +0 -1
  16. package/dist/dungeon-cast-browser/dungeon-cast-browser.styles.d.ts +0 -1
  17. package/dist/dungeon-cast-browser/index.d.ts +0 -1
  18. package/dist/dungeon-cast-browser/render-model.d.ts +0 -1
  19. package/dist/dungeon-cast-browser/types.d.ts +0 -1
  20. package/dist/dungeon-cast-browser.js +1 -3
  21. package/dist/dungeon-map/dungeon-map.d.ts +0 -1
  22. package/dist/dungeon-map/dungeon-map.styles.d.ts +0 -1
  23. package/dist/dungeon-map/index.d.ts +0 -1
  24. package/dist/dungeon-map/layout.d.ts +0 -1
  25. package/dist/dungeon-map/render-model.d.ts +0 -1
  26. package/dist/dungeon-map/types.d.ts +0 -1
  27. package/dist/dungeon-map/viewport-controller.d.ts +0 -1
  28. package/dist/dungeon-map.js +1 -3
  29. package/dist/index.d.ts +0 -1
  30. package/dist/index.js +4 -4
  31. package/dist/react/dungeon-cast-browser.d.ts +0 -1
  32. package/dist/react/dungeon-cast-browser.js +1 -3
  33. package/dist/react/dungeon-map.d.ts +0 -1
  34. package/dist/react/dungeon-map.js +1 -3
  35. package/dist/react/index.d.ts +0 -1
  36. package/dist/react/talent-calculator.d.ts +0 -1
  37. package/dist/react/talent-calculator.js +1 -3
  38. package/dist/react/tooltip.d.ts +0 -1
  39. package/dist/react/tooltip.js +0 -2
  40. package/dist/styles/field-manual-fonts.d.ts +0 -1
  41. package/dist/styles/field-manual.styles.d.ts +0 -1
  42. package/dist/talent-calculator/index.d.ts +0 -1
  43. package/dist/talent-calculator/render-model.d.ts +0 -1
  44. package/dist/talent-calculator/selection-state.d.ts +0 -1
  45. package/dist/talent-calculator/talent-calculator.d.ts +0 -1
  46. package/dist/talent-calculator/talent-calculator.styles.d.ts +0 -1
  47. package/dist/talent-calculator/types.d.ts +0 -1
  48. package/dist/talent-calculator.js +1 -3
  49. package/dist/tooltip/index.d.ts +0 -1
  50. package/dist/tooltip/positioning.d.ts +0 -1
  51. package/dist/tooltip/rich-text.d.ts +0 -1
  52. package/dist/tooltip/tooltip.d.ts +0 -1
  53. package/dist/tooltip/tooltip.styles.d.ts +0 -1
  54. package/dist/tooltip/types.d.ts +0 -1
  55. package/dist/tooltip.js +0 -2
  56. package/package.json +8 -15
  57. package/dist/chunks/data-source-C-Gs7kRl.js +0 -2
  58. package/dist/chunks/decorate-B_ZTN9li.js.map +0 -1
  59. package/dist/chunks/dungeon-cast-browser-Cyh519NI.js.map +0 -1
  60. package/dist/chunks/dungeon-map-xFaPasVr.js.map +0 -1
  61. package/dist/chunks/talent-calculator-CIPNbqK5.js.map +0 -1
  62. package/dist/chunks/tooltip-DoQVSnOn.js.map +0 -1
  63. package/dist/data/cast-data-source.d.ts.map +0 -1
  64. package/dist/data/data-source.d.ts.map +0 -1
  65. package/dist/data/package-cast-data-source.d.ts.map +0 -1
  66. package/dist/data/package-data-source.d.ts.map +0 -1
  67. package/dist/data/package-talent-data-source.d.ts.map +0 -1
  68. package/dist/data/talent-data-source.d.ts.map +0 -1
  69. package/dist/dungeon-cast-browser/dungeon-cast-browser.d.ts.map +0 -1
  70. package/dist/dungeon-cast-browser/dungeon-cast-browser.styles.d.ts.map +0 -1
  71. package/dist/dungeon-cast-browser/index.d.ts.map +0 -1
  72. package/dist/dungeon-cast-browser/render-model.d.ts.map +0 -1
  73. package/dist/dungeon-cast-browser/types.d.ts.map +0 -1
  74. package/dist/dungeon-cast-browser.js.map +0 -1
  75. package/dist/dungeon-map/dungeon-map.d.ts.map +0 -1
  76. package/dist/dungeon-map/dungeon-map.styles.d.ts.map +0 -1
  77. package/dist/dungeon-map/index.d.ts.map +0 -1
  78. package/dist/dungeon-map/layout.d.ts.map +0 -1
  79. package/dist/dungeon-map/render-model.d.ts.map +0 -1
  80. package/dist/dungeon-map/types.d.ts.map +0 -1
  81. package/dist/dungeon-map/viewport-controller.d.ts.map +0 -1
  82. package/dist/dungeon-map.js.map +0 -1
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/react/dungeon-cast-browser.d.ts.map +0 -1
  85. package/dist/react/dungeon-cast-browser.js.map +0 -1
  86. package/dist/react/dungeon-map.d.ts.map +0 -1
  87. package/dist/react/dungeon-map.js.map +0 -1
  88. package/dist/react/index.d.ts.map +0 -1
  89. package/dist/react/talent-calculator.d.ts.map +0 -1
  90. package/dist/react/talent-calculator.js.map +0 -1
  91. package/dist/react/tooltip.d.ts.map +0 -1
  92. package/dist/react/tooltip.js.map +0 -1
  93. package/dist/styles/field-manual-fonts.d.ts.map +0 -1
  94. package/dist/styles/field-manual.styles.d.ts.map +0 -1
  95. package/dist/talent-calculator/index.d.ts.map +0 -1
  96. package/dist/talent-calculator/render-model.d.ts.map +0 -1
  97. package/dist/talent-calculator/selection-state.d.ts.map +0 -1
  98. package/dist/talent-calculator/talent-calculator.d.ts.map +0 -1
  99. package/dist/talent-calculator/talent-calculator.styles.d.ts.map +0 -1
  100. package/dist/talent-calculator/types.d.ts.map +0 -1
  101. package/dist/talent-calculator.js.map +0 -1
  102. package/dist/tooltip/index.d.ts.map +0 -1
  103. package/dist/tooltip/positioning.d.ts.map +0 -1
  104. package/dist/tooltip/rich-text.d.ts.map +0 -1
  105. package/dist/tooltip/tooltip.d.ts.map +0 -1
  106. package/dist/tooltip/tooltip.styles.d.ts.map +0 -1
  107. package/dist/tooltip/types.d.ts.map +0 -1
  108. package/dist/tooltip.js.map +0 -1
package/README.md CHANGED
@@ -94,8 +94,9 @@ request. See `THIRD_PARTY_LICENSES.md` for the SIL Open Font License notice.
94
94
 
95
95
  ## Data and asset versions
96
96
 
97
- The library accepts `@crockery/fellowship-data@^1.3.0`. Commit the consuming application's
98
- lockfile when reproducible data and image updates matter.
97
+ Version 0.4.1 targets `@crockery/fellowship-data@^2.0.0` and requires manifest
98
+ schema 2. The monorepo workspace keeps Components and Data changes atomic;
99
+ published packages retain independent versions.
99
100
 
100
101
  Dataset JSON stays out of the component library's initial JavaScript path and published tarball.
101
102
  Each data-driven component supports:
@@ -114,17 +115,18 @@ client methods through `dataSource`.
114
115
  ## Development
115
116
 
116
117
  ```sh
117
- pnpm install
118
- pnpm ladle
119
- pnpm test
120
- pnpm build
121
- pnpm pack:check
118
+ pnpm install --frozen-lockfile
119
+ pnpm dev:components
120
+ pnpm --filter @crockery/fellowship-components test
121
+ pnpm --filter @crockery/fellowship-components build
122
+ pnpm --filter @crockery/fellowship-components pack:check
122
123
  ```
123
124
 
124
125
  Current Chromium, Firefox, and Safari/WebKit are supported. Add a Changeset with
125
- `pnpm changeset` for every user-facing change; merging the generated release PR publishes the
126
- package with npm provenance after trusted publishing is enabled. Maintainers should follow
127
- [`RELEASING.md`](RELEASING.md) for the first publish and release automation.
126
+ `pnpm changeset` from the monorepo root for every user-facing change. Merging
127
+ the generated version pull request publishes through trusted OIDC publishing.
128
+ The private repository means npm provenance attestations are unavailable.
129
+ Maintainers should follow [`RELEASING.md`](RELEASING.md).
128
130
 
129
131
  ## License
130
132
 
package/RELEASING.md CHANGED
@@ -1,14 +1,16 @@
1
- # Releasing fellowship-components
1
+ # Releasing Fellowship packages
2
2
 
3
- Changesets owns package versions and changelog entries. Add a changeset for every consumer-facing
4
- change:
3
+ The private `Crockery/fellowscript` monorepo owns Data and Components releases.
4
+ Run Changesets from its root for every consumer-facing change:
5
5
 
6
6
  ```sh
7
7
  pnpm changeset
8
8
  ```
9
9
 
10
- The Release workflow maintains a `changeset-release/main` pull request. Merging that pull request
11
- publishes the new version to npm automatically through trusted publishing.
10
+ The root Release workflow maintains one Changesets version pull request against
11
+ `master`. Merging it publishes independently versioned packages in dependency
12
+ order. If Data is changing, its R2 assets are uploaded and verified before npm
13
+ publishing begins.
12
14
 
13
15
  ## Trusted publishing
14
16
 
@@ -16,23 +18,22 @@ Trusted publishing is enabled on npm with:
16
18
 
17
19
  - Provider: GitHub Actions
18
20
  - Organization or user: `Crockery`
19
- - Repository: `fellowship-components`
21
+ - Repository: `fellowscript`
20
22
  - Workflow filename: `release.yml`
21
23
  - Environment: none
22
24
  - Allowed action: `npm publish`
23
25
 
24
- The GitHub repository variable `NPM_TRUSTED_PUBLISHING_READY` is set to `true`. Keep it enabled and
25
- do not add an `NPM_TOKEN`: npm authenticates the release job through its GitHub OIDC identity and
26
- creates provenance automatically. Maintainers do not need to run `npm login`, `npm publish`, or
27
- create release tags manually.
26
+ Do not add an `NPM_TOKEN`: npm authenticates the release job through its GitHub
27
+ OIDC identity. npm does not create provenance attestations for public packages
28
+ published from a private repository.
28
29
 
29
30
  ## Routine releases
30
31
 
31
- 1. Merge consumer-facing changes and their changesets into `main`.
32
+ 1. Merge consumer-facing changes and their changesets into `master`.
32
33
  2. Review the Changesets version pull request, including its generated changelog.
33
- 3. Merge the version pull request after CI succeeds.
34
- 4. Confirm the Release workflow publishes the expected npm version and creates its tag, GitHub
35
- release, and npm provenance statement.
34
+ 3. Merge the version pull request after the full release verification succeeds.
35
+ 4. Confirm Data's `_release.json` marker and exact npm versions before relying
36
+ on the release.
36
37
 
37
38
  Never reuse a version number. If a release is defective, publish a corrective patch. Deprecate a
38
39
  bad version with `npm deprecate` when consumers need an explicit warning; unpublish only when npm's
@@ -0,0 +1,7 @@
1
+ import { FellowshipDataError as e } from "@crockery/fellowship-data/client";
2
+ //#region src/data/data-source.ts
3
+ var t = 2, n = (n) => {
4
+ if (n !== t) throw new e("unsupported-schema", `Unsupported fellowship-data schema version: ${String(n)}.`);
5
+ };
6
+ //#endregion
7
+ export { n, e as t };
@@ -88,5 +88,3 @@ function d(e, t, n, r) {
88
88
  }
89
89
  //#endregion
90
90
  export { u as n, t as r, d as t };
91
-
92
- //# sourceMappingURL=decorate-B_ZTN9li.js.map
@@ -1,17 +1,17 @@
1
- import { t as e } from "./data-source-C-Gs7kRl.js";
2
- import { n as t, r as n, t as r } from "./decorate-B_ZTN9li.js";
3
- import { createPackageFellowshipDataClient as i } from "@crockery/fellowship-data/client";
4
- import { LitElement as a, css as o, html as s, nothing as c } from "lit";
5
- import { customElement as l, property as u, state as d } from "lit/decorators.js";
6
- import { repeat as f } from "lit/directives/repeat.js";
1
+ import { n as e, t } from "./data-source-XbksqUrw.js";
2
+ import { n, r, t as i } from "./decorate-B_ZTN9li.js";
3
+ import { createPackageFellowshipDataClient as a } from "@crockery/fellowship-data/client";
4
+ import { LitElement as o, css as s, html as c, nothing as l } from "lit";
5
+ import { customElement as u, property as d, state as f } from "lit/decorators.js";
6
+ import { repeat as p } from "lit/directives/repeat.js";
7
7
  //#region src/data/package-cast-data-source.ts
8
- var p = (e = {}) => {
9
- let t = i(e);
8
+ var m = (e = {}) => {
9
+ let t = a(e);
10
10
  return {
11
11
  loadDungeonCasts: (e, n) => t.loadDungeonCasts(e, n),
12
12
  resolveAssetUrl: (e) => t.resolveAssetUrl(e)
13
13
  };
14
- }, m = o`
14
+ }, h = s`
15
15
  :host {
16
16
  --fellowship-cast-canvas: var(--_fellowship-field-canvas);
17
17
  --fellowship-cast-surface: var(--_fellowship-field-surface);
@@ -435,7 +435,7 @@ var p = (e = {}) => {
435
435
  transition: none;
436
436
  }
437
437
  }
438
- `, h = ({ enemyId: e, abilityId: t }) => `${e}\u0000${t}`, g = (e) => e.images.find(({ size: e }) => e === "200") ?? e.images[0] ?? null, _ = (e, t, n) => t ? "Interrupt varies" : e ? "Interrupt" : n ? "Stop" : "No response", v = (e, t) => {
438
+ `, g = ({ enemyId: e, abilityId: t }) => `${e}\u0000${t}`, _ = (e) => e.images.find(({ size: e }) => e === "200") ?? e.images[0] ?? null, v = (e, t, n) => t ? "Interrupt varies" : e ? "Interrupt" : n ? "Stop" : "No response", y = (e, t) => {
439
439
  let n = /* @__PURE__ */ new Set(), r = [];
440
440
  for (let i of e.dungeon.enemies) {
441
441
  if (n.has(i.id)) continue;
@@ -443,7 +443,7 @@ var p = (e = {}) => {
443
443
  let a = e.enemies.get(i.id);
444
444
  if (!a) continue;
445
445
  let o = (e.abilitiesByEnemy.get(a.id) ?? []).filter((e) => e.castInterruptibility !== void 0).map((e) => {
446
- let n = e.castInterruptibility !== "never", r = e.castInterruptibility === "sometimes", i = a.canBeControlled, o = g(e), s = null;
446
+ let n = e.castInterruptibility !== "never", r = e.castInterruptibility === "sometimes", i = a.canBeControlled, o = _(e), s = null;
447
447
  if (o) try {
448
448
  s = t.resolveAssetUrl(o);
449
449
  } catch {
@@ -460,7 +460,7 @@ var p = (e = {}) => {
460
460
  interruptVaries: r,
461
461
  canStop: i,
462
462
  actionable: n || i,
463
- capabilityLabel: _(n, r, i),
463
+ capabilityLabel: v(n, r, i),
464
464
  imageUrl: s
465
465
  };
466
466
  });
@@ -474,10 +474,10 @@ var p = (e = {}) => {
474
474
  enemies: r,
475
475
  castCount: r.reduce((e, t) => e + t.casts.length, 0)
476
476
  };
477
- }, y = {
477
+ }, b = {
478
478
  bubbles: !0,
479
479
  composed: !0
480
- }, b = class extends a {
480
+ }, x = class extends o {
481
481
  constructor(...e) {
482
482
  super(...e), this.dungeonId = "", this.selectedCast = null, this.configuredCasts = [], this.configuredFilter = "all", this.fill = !1, this.assetBaseUrl = null, this.dataSource = null, this._status = "empty", this._error = null, this._model = null, this._query = "", this.#e = null, this.#t = 0, this.#d = (e) => {
483
483
  this._query = e.currentTarget.value;
@@ -496,12 +496,12 @@ var p = (e = {}) => {
496
496
  };
497
497
  }
498
498
  static {
499
- this.styles = [n, m];
499
+ this.styles = [r, h];
500
500
  }
501
501
  #e;
502
502
  #t;
503
503
  connectedCallback() {
504
- super.connectedCallback(), t(this.ownerDocument);
504
+ super.connectedCallback(), n(this.ownerDocument);
505
505
  }
506
506
  disconnectedCallback() {
507
507
  this.#e?.abort(), super.disconnectedCallback();
@@ -518,9 +518,9 @@ var p = (e = {}) => {
518
518
  return this._model;
519
519
  }
520
520
  render() {
521
- if (this._status !== "ready" || !this._model) return s`<section class="browser" aria-label="Dungeon cast browser">${this.#o()}</section>`;
521
+ if (this._status !== "ready" || !this._model) return c`<section class="browser" aria-label="Dungeon cast browser">${this.#o()}</section>`;
522
522
  let e = this.#r(this._model);
523
- return s`
523
+ return c`
524
524
  <section class="browser" aria-label=${`${this._model.dungeon.name ?? this._model.dungeon.id} casts`}>
525
525
  <header class="toolbar" part="toolbar">
526
526
  <div>
@@ -541,40 +541,40 @@ var p = (e = {}) => {
541
541
  />
542
542
  </label>
543
543
  </header>
544
- ${e.length > 0 ? s`<div class="enemy-list" part="enemy-list">${f(e, ({ enemy: e }) => e.id, (e) => this.#i(e))}</div>` : this.#s()}
544
+ ${e.length > 0 ? c`<div class="enemy-list" part="enemy-list">${p(e, ({ enemy: e }) => e.id, (e) => this.#i(e))}</div>` : this.#s()}
545
545
  </section>
546
546
  `;
547
547
  }
548
548
  async #n() {
549
- let t = this.dungeonId.trim(), n = ++this.#t;
550
- if (this.#e?.abort(), this.#e = new AbortController(), this._model = null, this._error = null, this._query = "", !t) {
549
+ let n = this.dungeonId.trim(), r = ++this.#t;
550
+ if (this.#e?.abort(), this.#e = new AbortController(), this._model = null, this._error = null, this._query = "", !n) {
551
551
  this._status = "empty";
552
552
  return;
553
553
  }
554
554
  this._status = "loading";
555
- let r = this.dataSource ?? p(this.assetBaseUrl ? { assetBaseUrl: this.assetBaseUrl } : {});
555
+ let i = this.dataSource ?? m(this.assetBaseUrl ? { assetBaseUrl: this.assetBaseUrl } : {});
556
556
  try {
557
- let i = await r.loadDungeonCasts(t, this.#e.signal);
558
- if (n !== this.#t || this.#e.signal.aborted) return;
559
- if (i.manifest.schemaVersion !== 1) throw new e("unsupported-schema", `Unsupported fellowship-data schema version: ${String(i.manifest.schemaVersion)}.`);
560
- let a = v(i, r);
557
+ let t = await i.loadDungeonCasts(n, this.#e.signal);
558
+ if (r !== this.#t || this.#e.signal.aborted) return;
559
+ e(t.manifest.schemaVersion);
560
+ let a = y(t, i);
561
561
  this._model = a, this._status = "ready", this.dispatchEvent(new CustomEvent("fellowship-cast-browser-ready", {
562
- ...y,
562
+ ...b,
563
563
  detail: {
564
564
  model: a,
565
- data: i
565
+ data: t
566
566
  }
567
567
  }));
568
- } catch (t) {
569
- if (n !== this.#t || this.#e.signal.aborted) return;
570
- let r = {
571
- code: t instanceof e ? t.code : t.code ?? "data-load-failed",
572
- message: t instanceof Error ? t.message : String(t),
573
- ...t instanceof Error && t.cause !== void 0 ? { cause: t.cause } : {}
568
+ } catch (e) {
569
+ if (r !== this.#t || this.#e.signal.aborted) return;
570
+ let n = {
571
+ code: e instanceof t ? e.code : e.code ?? "data-load-failed",
572
+ message: e instanceof Error ? e.message : String(e),
573
+ ...e instanceof Error && e.cause !== void 0 ? { cause: e.cause } : {}
574
574
  };
575
- this._error = r, this._status = "error", this.dispatchEvent(new CustomEvent("fellowship-cast-browser-error", {
576
- ...y,
577
- detail: r
575
+ this._error = n, this._status = "error", this.dispatchEvent(new CustomEvent("fellowship-cast-browser-error", {
576
+ ...b,
577
+ detail: n
578
578
  }));
579
579
  }
580
580
  }
@@ -593,7 +593,7 @@ var p = (e = {}) => {
593
593
  });
594
594
  }
595
595
  #i(e) {
596
- return s`
596
+ return c`
597
597
  <article class="enemy" part="enemy">
598
598
  <header class="enemy-header" part="enemy-header">
599
599
  <span class="enemy-rule" aria-hidden="true"></span>
@@ -604,14 +604,14 @@ var p = (e = {}) => {
604
604
  <span class="enemy-count">${e.casts.length} ${e.casts.length === 1 ? "cast" : "casts"}</span>
605
605
  </header>
606
606
  <ul class="cast-list">
607
- ${f(e.casts, ({ identity: e }) => h(e), (e) => s`<li>${this.#a(e)}</li>`)}
607
+ ${p(e.casts, ({ identity: e }) => g(e), (e) => c`<li>${this.#a(e)}</li>`)}
608
608
  </ul>
609
609
  </article>
610
610
  `;
611
611
  }
612
612
  #a(e) {
613
613
  let t = this.#l(this.selectedCast, e.identity), n = this.configuredCasts.some((t) => this.#l(t, e.identity)), r = e.interruptVaries ? "varies" : e.canInterrupt ? "interrupt" : e.canStop ? "stop" : "none", i = (e.ability.name ?? e.ability.id).split(/\s+/).map((e) => e[0]).join("").slice(0, 2).toUpperCase();
614
- return s`
614
+ return c`
615
615
  <button
616
616
  class="cast-row"
617
617
  part="cast"
@@ -622,7 +622,7 @@ var p = (e = {}) => {
622
622
  @click=${() => this.#u(e)}
623
623
  @keydown=${this.#p}
624
624
  >
625
- ${e.imageUrl ? s`<img
625
+ ${e.imageUrl ? c`<img
626
626
  class="ability-image"
627
627
  part="cast-icon"
628
628
  src=${e.imageUrl}
@@ -634,18 +634,18 @@ var p = (e = {}) => {
634
634
  aria-hidden="true"
635
635
  hidden
636
636
  >${i}</span
637
- >` : s`<span class="ability-fallback" part="cast-icon-fallback" aria-hidden="true">${i}</span>`}
637
+ >` : c`<span class="ability-fallback" part="cast-icon-fallback" aria-hidden="true">${i}</span>`}
638
638
  <span class="ability-copy">
639
639
  <span class="ability-name">${e.ability.name ?? e.ability.id}</span>
640
640
  <span class="ability-id">${e.ability.id}</span>
641
641
  </span>
642
642
  <span class="capability" data-kind=${r}>${e.capabilityLabel}</span>
643
- <span class="marker" data-empty=${String(!n)}>${n ? "Configured" : c}</span>
643
+ <span class="marker" data-empty=${String(!n)}>${n ? "Configured" : l}</span>
644
644
  </button>
645
645
  `;
646
646
  }
647
647
  #o() {
648
- return this._status === "loading" ? this.#c("Loading cast index", "Joining dungeon enemies with their cast data.") : this._status === "error" ? s`
648
+ return this._status === "loading" ? this.#c("Loading cast index", "Joining dungeon enemies with their cast data.") : this._status === "error" ? c`
649
649
  <div class="status" role="alert">
650
650
  <div class="status-card">
651
651
  <span class="status-mark" aria-hidden="true"></span>
@@ -660,7 +660,7 @@ var p = (e = {}) => {
660
660
  return this.#c("No matching casts", `No enemy or ability matches “${this._query.trim()}”.`);
661
661
  }
662
662
  #c(e, t) {
663
- return s`
663
+ return c`
664
664
  <div class="status">
665
665
  <div class="status-card">
666
666
  <span class="status-mark" aria-hidden="true"></span>
@@ -675,7 +675,7 @@ var p = (e = {}) => {
675
675
  }
676
676
  #u(e) {
677
677
  e.actionable && this.dispatchEvent(new CustomEvent("fellowship-cast-selected", {
678
- ...y,
678
+ ...b,
679
679
  detail: { cast: e }
680
680
  }));
681
681
  }
@@ -683,23 +683,21 @@ var p = (e = {}) => {
683
683
  #f;
684
684
  #p;
685
685
  };
686
- r([u({
686
+ i([d({
687
687
  type: String,
688
688
  attribute: "dungeon-id"
689
- })], b.prototype, "dungeonId", void 0), r([u({ attribute: !1 })], b.prototype, "selectedCast", void 0), r([u({ attribute: !1 })], b.prototype, "configuredCasts", void 0), r([u({
689
+ })], x.prototype, "dungeonId", void 0), i([d({ attribute: !1 })], x.prototype, "selectedCast", void 0), i([d({ attribute: !1 })], x.prototype, "configuredCasts", void 0), i([d({
690
690
  type: String,
691
691
  attribute: "configured-filter"
692
- })], b.prototype, "configuredFilter", void 0), r([u({
692
+ })], x.prototype, "configuredFilter", void 0), i([d({
693
693
  type: Boolean,
694
694
  reflect: !0
695
- })], b.prototype, "fill", void 0), r([u({
695
+ })], x.prototype, "fill", void 0), i([d({
696
696
  type: String,
697
697
  attribute: "asset-base-url"
698
- })], b.prototype, "assetBaseUrl", void 0), r([u({ attribute: !1 })], b.prototype, "dataSource", void 0), r([d()], b.prototype, "_status", void 0), r([d()], b.prototype, "_error", void 0), r([d()], b.prototype, "_model", void 0), r([d()], b.prototype, "_query", void 0), b = r([l("fellowship-dungeon-cast-browser")], b);
699
- var x = () => {
700
- globalThis.customElements !== void 0 && !globalThis.customElements.get("fellowship-dungeon-cast-browser") && globalThis.customElements.define("fellowship-dungeon-cast-browser", b);
698
+ })], x.prototype, "assetBaseUrl", void 0), i([d({ attribute: !1 })], x.prototype, "dataSource", void 0), i([f()], x.prototype, "_status", void 0), i([f()], x.prototype, "_error", void 0), i([f()], x.prototype, "_model", void 0), i([f()], x.prototype, "_query", void 0), x = i([u("fellowship-dungeon-cast-browser")], x);
699
+ var S = () => {
700
+ globalThis.customElements !== void 0 && !globalThis.customElements.get("fellowship-dungeon-cast-browser") && globalThis.customElements.define("fellowship-dungeon-cast-browser", x);
701
701
  };
702
702
  //#endregion
703
- export { p as a, v as i, x as n, h as r, b as t };
704
-
705
- //# sourceMappingURL=dungeon-cast-browser-Cyh519NI.js.map
703
+ export { m as a, y as i, S as n, g as r, x as t };