@crockery/fellowship-components 0.1.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.
- package/LICENSE +21 -0
- package/README.md +126 -0
- package/RELEASING.md +75 -0
- package/THIRD_PARTY_LICENSES.md +79 -0
- package/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/dist/assets/ibm-plex-sans-condensed-latin-400-normal-DKyD6XsY.woff2 +0 -0
- package/dist/assets/ibm-plex-sans-condensed-latin-500-normal-BqaLkUoX.woff2 +0 -0
- package/dist/assets/ibm-plex-sans-condensed-latin-600-normal-CRd5VyFf.woff2 +0 -0
- package/dist/assets/ibm-plex-sans-condensed-latin-700-normal-D8r4s4aS.woff2 +0 -0
- package/dist/chunks/data-source-CoIFvV72.js +10 -0
- package/dist/chunks/data-source-CoIFvV72.js.map +1 -0
- package/dist/chunks/decorate-B_ZTN9li.js +92 -0
- package/dist/chunks/decorate-B_ZTN9li.js.map +1 -0
- package/dist/chunks/dungeon-map-IPN6sEDj.js +1144 -0
- package/dist/chunks/dungeon-map-IPN6sEDj.js.map +1 -0
- package/dist/chunks/talent-calculator-Ch1Pbbba.js +1086 -0
- package/dist/chunks/talent-calculator-Ch1Pbbba.js.map +1 -0
- package/dist/chunks/tooltip-DoQVSnOn.js +412 -0
- package/dist/chunks/tooltip-DoQVSnOn.js.map +1 -0
- package/dist/data/data-source.d.ts +17 -0
- package/dist/data/data-source.d.ts.map +1 -0
- package/dist/data/package-data-source.d.ts +6 -0
- package/dist/data/package-data-source.d.ts.map +1 -0
- package/dist/data/package-talent-data-source.d.ts +6 -0
- package/dist/data/package-talent-data-source.d.ts.map +1 -0
- package/dist/data/talent-data-source.d.ts +11 -0
- package/dist/data/talent-data-source.d.ts.map +1 -0
- package/dist/dungeon-map/dungeon-map.d.ts +56 -0
- package/dist/dungeon-map/dungeon-map.d.ts.map +1 -0
- package/dist/dungeon-map/dungeon-map.styles.d.ts +2 -0
- package/dist/dungeon-map/dungeon-map.styles.d.ts.map +1 -0
- package/dist/dungeon-map/index.d.ts +5 -0
- package/dist/dungeon-map/index.d.ts.map +1 -0
- package/dist/dungeon-map/layout.d.ts +3 -0
- package/dist/dungeon-map/layout.d.ts.map +1 -0
- package/dist/dungeon-map/render-model.d.ts +7 -0
- package/dist/dungeon-map/render-model.d.ts.map +1 -0
- package/dist/dungeon-map/types.d.ts +107 -0
- package/dist/dungeon-map/types.d.ts.map +1 -0
- package/dist/dungeon-map/viewport-controller.d.ts +13 -0
- package/dist/dungeon-map/viewport-controller.d.ts.map +1 -0
- package/dist/dungeon-map.js +7 -0
- package/dist/dungeon-map.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/react/dungeon-map.d.ts +22 -0
- package/dist/react/dungeon-map.d.ts.map +1 -0
- package/dist/react/dungeon-map.js +180 -0
- package/dist/react/dungeon-map.js.map +1 -0
- package/dist/react/index.d.ts +7 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/talent-calculator.d.ts +22 -0
- package/dist/react/talent-calculator.d.ts.map +1 -0
- package/dist/react/talent-calculator.js +71 -0
- package/dist/react/talent-calculator.js.map +1 -0
- package/dist/react/tooltip.d.ts +15 -0
- package/dist/react/tooltip.d.ts.map +1 -0
- package/dist/react/tooltip.js +26 -0
- package/dist/react/tooltip.js.map +1 -0
- package/dist/react.js +4 -0
- package/dist/styles/field-manual-fonts.d.ts +3 -0
- package/dist/styles/field-manual-fonts.d.ts.map +1 -0
- package/dist/styles/field-manual.styles.d.ts +3 -0
- package/dist/styles/field-manual.styles.d.ts.map +1 -0
- package/dist/talent-calculator/index.d.ts +5 -0
- package/dist/talent-calculator/index.d.ts.map +1 -0
- package/dist/talent-calculator/render-model.d.ts +5 -0
- package/dist/talent-calculator/render-model.d.ts.map +1 -0
- package/dist/talent-calculator/selection-state.d.ts +10 -0
- package/dist/talent-calculator/selection-state.d.ts.map +1 -0
- package/dist/talent-calculator/talent-calculator.d.ts +51 -0
- package/dist/talent-calculator/talent-calculator.d.ts.map +1 -0
- package/dist/talent-calculator/talent-calculator.styles.d.ts +2 -0
- package/dist/talent-calculator/talent-calculator.styles.d.ts.map +1 -0
- package/dist/talent-calculator/types.d.ts +92 -0
- package/dist/talent-calculator/types.d.ts.map +1 -0
- package/dist/talent-calculator.js +7 -0
- package/dist/talent-calculator.js.map +1 -0
- package/dist/tooltip/index.d.ts +6 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tooltip/positioning.d.ts +23 -0
- package/dist/tooltip/positioning.d.ts.map +1 -0
- package/dist/tooltip/rich-text.d.ts +4 -0
- package/dist/tooltip/rich-text.d.ts.map +1 -0
- package/dist/tooltip/tooltip.d.ts +33 -0
- package/dist/tooltip/tooltip.d.ts.map +1 -0
- package/dist/tooltip/tooltip.styles.d.ts +2 -0
- package/dist/tooltip/tooltip.styles.d.ts.map +1 -0
- package/dist/tooltip/types.d.ts +19 -0
- package/dist/tooltip/types.d.ts.map +1 -0
- package/dist/tooltip.js +7 -0
- package/dist/tooltip.js.map +1 -0
- package/package.json +149 -0
- package/src/dungeon-map/README.md +168 -0
- package/src/talent-calculator/README.md +190 -0
- package/src/tooltip/README.md +113 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type FellowshipDataSource } from "./data-source.js";
|
|
2
|
+
export interface PackageFellowshipDataSourceOptions {
|
|
3
|
+
readonly assetBaseUrl?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const createPackageFellowshipDataSource: (options?: PackageFellowshipDataSourceOptions) => FellowshipDataSource;
|
|
6
|
+
//# sourceMappingURL=package-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-data-source.d.ts","sourceRoot":"","sources":["../../src/data/package-data-source.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAyDD,eAAO,MAAM,iCAAiC,GAC5C,UAAS,kCAAuC,KAC/C,oBA0BD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FellowshipTalentDataSource } from "./talent-data-source.js";
|
|
2
|
+
export interface PackageFellowshipTalentDataSourceOptions {
|
|
3
|
+
readonly assetBaseUrl?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare const createPackageFellowshipTalentDataSource: (options?: PackageFellowshipTalentDataSourceOptions) => FellowshipTalentDataSource;
|
|
6
|
+
//# sourceMappingURL=package-talent-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-talent-data-source.d.ts","sourceRoot":"","sources":["../../src/data/package-talent-data-source.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,0BAA0B,EAAwB,MAAM,yBAAyB,CAAC;AAEhG,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAiED,eAAO,MAAM,uCAAuC,GAClD,UAAS,wCAA6C,KACrD,0BA0BD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FellowshipDataManifest, Hero, ImageAssetRef, Talent } from "@crockery/fellowship-data";
|
|
2
|
+
export interface TalentCalculatorData {
|
|
3
|
+
readonly manifest: FellowshipDataManifest;
|
|
4
|
+
readonly hero: Hero;
|
|
5
|
+
readonly talents: readonly Talent[];
|
|
6
|
+
}
|
|
7
|
+
export interface FellowshipTalentDataSource {
|
|
8
|
+
loadHeroTalents(heroId: string, signal?: AbortSignal): Promise<TalentCalculatorData>;
|
|
9
|
+
resolveAssetUrl(asset: ImageAssetRef): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=talent-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"talent-data-source.d.ts","sourceRoot":"","sources":["../../src/data/talent-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,IAAI,EACJ,aAAa,EACb,MAAM,EACP,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACrF,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC;CAC/C"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues, type TemplateResult } from "lit";
|
|
2
|
+
import { type FellowshipDataSource } from "../data/data-source.js";
|
|
3
|
+
import type { DungeonMapRenderModel, LitEnemyRenderer, LitGroupRenderer, MapLabelFormatter } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* @fires fellowship-map-ready - Fired after dungeon data and the map image are ready.
|
|
6
|
+
* @fires fellowship-map-error - Fired when map data, imagery, or a renderer fails.
|
|
7
|
+
* @fires fellowship-map-warning - Fired for recoverable dungeon data issues.
|
|
8
|
+
* @fires fellowship-map-image-change - Fired when the selected map changes.
|
|
9
|
+
* @fires fellowship-map-viewport-change - Fired when zoom or pan state changes.
|
|
10
|
+
*/
|
|
11
|
+
export declare class FellowshipDungeonMapElement extends LitElement {
|
|
12
|
+
#private;
|
|
13
|
+
static styles: import("lit").CSSResult[];
|
|
14
|
+
dungeonId: string;
|
|
15
|
+
mapImageId: string | null;
|
|
16
|
+
assetBaseUrl: string | null;
|
|
17
|
+
dataSource: FellowshipDataSource | null;
|
|
18
|
+
renderEnemy: LitEnemyRenderer | null;
|
|
19
|
+
renderGroup: LitGroupRenderer | null;
|
|
20
|
+
mapLabelFormatter: MapLabelFormatter | null;
|
|
21
|
+
showControls: boolean;
|
|
22
|
+
showMapSelector: boolean;
|
|
23
|
+
maxZoom: number;
|
|
24
|
+
/** Internal bridge used by the React wrapper. */
|
|
25
|
+
externalOverlay: boolean;
|
|
26
|
+
private _status;
|
|
27
|
+
private _error;
|
|
28
|
+
private _data;
|
|
29
|
+
private _model;
|
|
30
|
+
private _selectedMap;
|
|
31
|
+
private _viewportState;
|
|
32
|
+
private _isPanning;
|
|
33
|
+
private _enemyRenderContent;
|
|
34
|
+
private _groupRenderContent;
|
|
35
|
+
private _mapLabels;
|
|
36
|
+
private _viewportElement?;
|
|
37
|
+
private _canvasElement?;
|
|
38
|
+
connectedCallback(): void;
|
|
39
|
+
disconnectedCallback(): void;
|
|
40
|
+
protected firstUpdated(changed: PropertyValues<this>): void;
|
|
41
|
+
protected updated(changed: PropertyValues<this>): void;
|
|
42
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
43
|
+
fitToView(): void;
|
|
44
|
+
zoomIn(): void;
|
|
45
|
+
zoomOut(): void;
|
|
46
|
+
retry(): void;
|
|
47
|
+
get renderModel(): DungeonMapRenderModel | null;
|
|
48
|
+
render(): TemplateResult;
|
|
49
|
+
}
|
|
50
|
+
export declare const defineFellowshipDungeonMap: () => void;
|
|
51
|
+
declare global {
|
|
52
|
+
interface HTMLElementTagNameMap {
|
|
53
|
+
"fellowship-dungeon-map": FellowshipDungeonMapElement;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=dungeon-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dungeon-map.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/dungeon-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,UAAU,EAAW,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAK1F,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAGV,qBAAqB,EAMrB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAYpB;;;;;;GAMG;AACH,qBACa,2BAA4B,SAAQ,UAAU;;IACzD,OAAgB,MAAM,4BAAyC;IAEV,SAAS,SAAM;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5D,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAC/C,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC5C,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC5C,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAC1B,YAAY,UAAQ;IAChB,eAAe,UAAQ;IACjC,OAAO,SAAK;IAE/D,iDAAiD;IACF,eAAe,UAAS;IAE9D,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,cAAc,CAAoD;IAC1E,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,mBAAmB,CAAsD;IACjF,OAAO,CAAC,mBAAmB,CAAsD;IACjF,OAAO,CAAC,UAAU,CAA6B;IAEpC,OAAO,CAAC,gBAAgB,CAAC,CAAc;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAoB;IAenD,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;cAMlB,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAQjD,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cA4B5C,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAkB5D,SAAS,IAAI,IAAI;IAKjB,MAAM,IAAI,IAAI;IAKd,OAAO,IAAI,IAAI;IAKf,KAAK,IAAI,IAAI;IAIb,IAAI,WAAW,IAAI,qBAAqB,GAAG,IAAI,CAE9C;IAEQ,MAAM,IAAI,cAAc;CAivBlC;AAED,eAAO,MAAM,0BAA0B,QAAO,IAO7C,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,wBAAwB,EAAE,2BAA2B,CAAC;KACvD;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dungeon-map.styles.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/dungeon-map.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,yBA8b5B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { FellowshipDungeonMapElement, defineFellowshipDungeonMap } from "./dungeon-map.js";
|
|
2
|
+
export { createDungeonMapRenderModel, humanizeMapLabel } from "./render-model.js";
|
|
3
|
+
export { ViewportController } from "./viewport-controller.js";
|
|
4
|
+
export type { DungeonMapEnemyModel, DungeonMapEnemyRenderContext, DungeonMapGroupModel, DungeonMapGroupRenderContext, DungeonMapRenderModel, DungeonMapWarning, FellowshipDungeonMapProperties, FellowshipMapErrorDetail, FellowshipMapImageChangeDetail, FellowshipMapReadyDetail, FellowshipMapViewportChangeDetail, FellowshipMapWarningDetail, LitEnemyRenderer, LitGroupRenderer, MapLabelFormatter, NormalizedRect, ViewportState, } from "./types.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EACV,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,iBAAiB,EACjB,8BAA8B,EAC9B,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,iCAAiC,EACjC,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/layout.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAkB,MAAM,YAAY,CAAC;AAiD7F,eAAO,MAAM,0BAA0B,GACrC,IAAI,MAAM,GAAG,IAAI,EACjB,SAAS,SAAS,oBAAoB,EAAE,KACvC,oBAUF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Dungeon, ImageAssetRef, Position2D } from "@crockery/fellowship-data";
|
|
2
|
+
import type { DungeonMapData, FellowshipDataSource } from "../data/data-source.js";
|
|
3
|
+
import type { DungeonMapRenderModel } from "./types.js";
|
|
4
|
+
export declare const isValidMapPosition: (position: Position2D | null) => position is Position2D;
|
|
5
|
+
export declare const createDungeonMapRenderModel: (data: DungeonMapData, mapImage: ImageAssetRef, source: FellowshipDataSource) => DungeonMapRenderModel;
|
|
6
|
+
export declare const humanizeMapLabel: (mapImage: ImageAssetRef, dungeon: Dungeon) => string;
|
|
7
|
+
//# sourceMappingURL=render-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-model.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/render-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnF,OAAO,KAAK,EAAwB,qBAAqB,EAAqB,MAAM,YAAY,CAAC;AAEjG,eAAO,MAAM,kBAAkB,GAAI,UAAU,UAAU,GAAG,IAAI,KAAG,QAAQ,IAAI,UAO5D,CAAC;AAElB,eAAO,MAAM,2BAA2B,GACtC,MAAM,cAAc,EACpB,UAAU,aAAa,EACvB,QAAQ,oBAAoB,KAC3B,qBAuEF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,aAAa,EAAE,SAAS,OAAO,KAAG,MAW5E,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { Dungeon, DungeonEnemy, Enemy, ImageAssetRef, Position2D } from "@crockery/fellowship-data";
|
|
2
|
+
import type { nothing, TemplateResult } from "lit";
|
|
3
|
+
import type { DungeonMapData, FellowshipDataSource } from "../data/data-source.js";
|
|
4
|
+
export interface NormalizedRect {
|
|
5
|
+
readonly x: number;
|
|
6
|
+
readonly y: number;
|
|
7
|
+
readonly width: number;
|
|
8
|
+
readonly height: number;
|
|
9
|
+
}
|
|
10
|
+
export type DungeonMapWarningCode = "invalid-map-position" | "missing-enemy" | "missing-enemy-image" | "asset-url-error";
|
|
11
|
+
export interface DungeonMapWarning {
|
|
12
|
+
readonly code: DungeonMapWarningCode;
|
|
13
|
+
readonly message: string;
|
|
14
|
+
readonly placementIndex: number;
|
|
15
|
+
readonly enemyId: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DungeonMapEnemyModel {
|
|
18
|
+
readonly instanceId: string;
|
|
19
|
+
readonly enemy: Enemy | null;
|
|
20
|
+
readonly placement: DungeonEnemy;
|
|
21
|
+
readonly position: Position2D;
|
|
22
|
+
readonly imageUrl: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface DungeonMapGroupModel {
|
|
25
|
+
readonly id: number | null;
|
|
26
|
+
readonly enemies: readonly DungeonMapEnemyModel[];
|
|
27
|
+
readonly enemyBounds: NormalizedRect;
|
|
28
|
+
readonly visualBounds: NormalizedRect;
|
|
29
|
+
readonly center: Position2D;
|
|
30
|
+
readonly dungeonScore: number | null;
|
|
31
|
+
}
|
|
32
|
+
export interface DungeonMapRenderModel {
|
|
33
|
+
readonly dungeon: Dungeon;
|
|
34
|
+
readonly mapImage: ImageAssetRef;
|
|
35
|
+
readonly groups: readonly DungeonMapGroupModel[];
|
|
36
|
+
readonly warnings: readonly DungeonMapWarning[];
|
|
37
|
+
}
|
|
38
|
+
export interface DungeonMapEnemyRenderContext {
|
|
39
|
+
readonly model: DungeonMapEnemyModel;
|
|
40
|
+
readonly group: DungeonMapGroupModel;
|
|
41
|
+
readonly dungeon: Dungeon;
|
|
42
|
+
readonly mapImage: ImageAssetRef;
|
|
43
|
+
}
|
|
44
|
+
export interface DungeonMapGroupRenderContext<TChild> {
|
|
45
|
+
readonly group: DungeonMapGroupModel;
|
|
46
|
+
readonly children: readonly TChild[];
|
|
47
|
+
readonly dungeon: Dungeon;
|
|
48
|
+
readonly mapImage: ImageAssetRef;
|
|
49
|
+
}
|
|
50
|
+
export type LitEnemyRenderer = (context: DungeonMapEnemyRenderContext) => TemplateResult | typeof nothing;
|
|
51
|
+
export type LitGroupRenderer = (context: DungeonMapGroupRenderContext<TemplateResult>) => TemplateResult | typeof nothing;
|
|
52
|
+
export type MapLabelFormatter = (mapImage: ImageAssetRef, dungeon: Dungeon) => string;
|
|
53
|
+
export interface ViewportState {
|
|
54
|
+
readonly zoom: number;
|
|
55
|
+
readonly scale: number;
|
|
56
|
+
readonly x: number;
|
|
57
|
+
readonly y: number;
|
|
58
|
+
}
|
|
59
|
+
export type ViewportChangeSource = "fit" | "button" | "keyboard" | "pan" | "pinch" | "resize" | "wheel";
|
|
60
|
+
export interface FellowshipMapReadyDetail {
|
|
61
|
+
readonly model: DungeonMapRenderModel;
|
|
62
|
+
readonly data: DungeonMapData;
|
|
63
|
+
}
|
|
64
|
+
export interface FellowshipMapErrorDetail {
|
|
65
|
+
readonly code: string;
|
|
66
|
+
readonly message: string;
|
|
67
|
+
readonly cause?: unknown;
|
|
68
|
+
}
|
|
69
|
+
export interface FellowshipMapWarningDetail {
|
|
70
|
+
readonly warnings: readonly DungeonMapWarning[];
|
|
71
|
+
readonly model: DungeonMapRenderModel;
|
|
72
|
+
}
|
|
73
|
+
export interface FellowshipMapImageChangeDetail {
|
|
74
|
+
readonly mapImageId: string;
|
|
75
|
+
readonly mapImage: ImageAssetRef;
|
|
76
|
+
}
|
|
77
|
+
export interface FellowshipMapViewportChangeDetail {
|
|
78
|
+
readonly viewport: ViewportState;
|
|
79
|
+
readonly source: ViewportChangeSource;
|
|
80
|
+
}
|
|
81
|
+
export type FellowshipMapReadyEvent = CustomEvent<FellowshipMapReadyDetail>;
|
|
82
|
+
export type FellowshipMapErrorEvent = CustomEvent<FellowshipMapErrorDetail>;
|
|
83
|
+
export type FellowshipMapWarningEvent = CustomEvent<FellowshipMapWarningDetail>;
|
|
84
|
+
export type FellowshipMapImageChangeEvent = CustomEvent<FellowshipMapImageChangeDetail>;
|
|
85
|
+
export type FellowshipMapViewportChangeEvent = CustomEvent<FellowshipMapViewportChangeDetail>;
|
|
86
|
+
export interface FellowshipDungeonMapProperties {
|
|
87
|
+
dungeonId: string;
|
|
88
|
+
mapImageId: string | null;
|
|
89
|
+
assetBaseUrl: string | null;
|
|
90
|
+
dataSource: FellowshipDataSource | null;
|
|
91
|
+
renderEnemy: LitEnemyRenderer | null;
|
|
92
|
+
renderGroup: LitGroupRenderer | null;
|
|
93
|
+
mapLabelFormatter: MapLabelFormatter | null;
|
|
94
|
+
showControls: boolean;
|
|
95
|
+
showMapSelector: boolean;
|
|
96
|
+
maxZoom: number;
|
|
97
|
+
}
|
|
98
|
+
declare global {
|
|
99
|
+
interface HTMLElementEventMap {
|
|
100
|
+
"fellowship-map-ready": FellowshipMapReadyEvent;
|
|
101
|
+
"fellowship-map-error": FellowshipMapErrorEvent;
|
|
102
|
+
"fellowship-map-warning": FellowshipMapWarningEvent;
|
|
103
|
+
"fellowship-map-image-change": FellowshipMapImageChangeEvent;
|
|
104
|
+
"fellowship-map-viewport-change": FellowshipMapViewportChangeEvent;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ViewportState } from "./types.js";
|
|
2
|
+
export declare class ViewportController {
|
|
3
|
+
#private;
|
|
4
|
+
maxZoom: number;
|
|
5
|
+
get state(): ViewportState;
|
|
6
|
+
get scale(): number;
|
|
7
|
+
get fitScale(): number;
|
|
8
|
+
setDimensions(viewportWidth: number, viewportHeight: number, mapWidth: number, mapHeight: number): ViewportState;
|
|
9
|
+
fit(): ViewportState;
|
|
10
|
+
zoomAt(factor: number, pointX?: number, pointY?: number): ViewportState;
|
|
11
|
+
panBy(deltaX: number, deltaY: number): ViewportState;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=viewport-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport-controller.d.ts","sourceRoot":"","sources":["../../src/dungeon-map/viewport-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,qBAAa,kBAAkB;;IAS7B,OAAO,SAAK;IAEZ,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAED,aAAa,CACX,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,aAAa;IAoBhB,GAAG,IAAI,aAAa;IAOpB,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,MAAM,SAA0B,EAChC,MAAM,SAA2B,GAChC,aAAa;IAWhB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa;CAoBrD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { a as e, i as t, n, r, t as i } from "./chunks/dungeon-map-IPN6sEDj.js";
|
|
2
|
+
//#region src/dungeon-map/index.ts
|
|
3
|
+
n();
|
|
4
|
+
//#endregion
|
|
5
|
+
export { i as FellowshipDungeonMapElement, r as ViewportController, t as createDungeonMapRenderModel, n as defineFellowshipDungeonMap, e as humanizeMapLabel };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=dungeon-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dungeon-map.js","names":[],"sources":["../src/dungeon-map/index.ts"],"sourcesContent":["export { FellowshipDungeonMapElement, defineFellowshipDungeonMap } from \"./dungeon-map.js\";\nexport { createDungeonMapRenderModel, humanizeMapLabel } from \"./render-model.js\";\nexport { ViewportController } from \"./viewport-controller.js\";\nexport type {\n DungeonMapEnemyModel,\n DungeonMapEnemyRenderContext,\n DungeonMapGroupModel,\n DungeonMapGroupRenderContext,\n DungeonMapRenderModel,\n DungeonMapWarning,\n FellowshipDungeonMapProperties,\n FellowshipMapErrorDetail,\n FellowshipMapImageChangeDetail,\n FellowshipMapReadyDetail,\n FellowshipMapViewportChangeDetail,\n FellowshipMapWarningDetail,\n LitEnemyRenderer,\n LitGroupRenderer,\n MapLabelFormatter,\n NormalizedRect,\n ViewportState,\n} from \"./types.js\";\n\nimport { defineFellowshipDungeonMap } from \"./dungeon-map.js\";\n\ndefineFellowshipDungeonMap();\n"],"mappings":";;AAyBA,EAA2B"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { Dungeon, DungeonEnemy, DungeonEnemyMapPatrolPoint, DungeonId, Enemy, EnemyId, FellowshipDataManifest, Hero, HeroId, HeroRole, ImageAssetRef, Position2D, Position3D, Talent, } from "@crockery/fellowship-data";
|
|
2
|
+
export { FellowshipDataError, type DungeonMapData, type FellowshipDataErrorCode, type FellowshipDataSource, } from "./data/data-source.js";
|
|
3
|
+
export { createPackageFellowshipDataSource, type PackageFellowshipDataSourceOptions, } from "./data/package-data-source.js";
|
|
4
|
+
export { createPackageFellowshipTalentDataSource, type PackageFellowshipTalentDataSourceOptions, } from "./data/package-talent-data-source.js";
|
|
5
|
+
export type { FellowshipTalentDataSource, TalentCalculatorData, } from "./data/talent-data-source.js";
|
|
6
|
+
export * from "./dungeon-map/index.js";
|
|
7
|
+
export * from "./talent-calculator/index.js";
|
|
8
|
+
export * from "./tooltip/index.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,YAAY,EACZ,0BAA0B,EAC1B,SAAS,EACT,KAAK,EACL,OAAO,EACP,sBAAsB,EACtB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,aAAa,EACb,UAAU,EACV,UAAU,EACV,MAAM,GACP,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iCAAiC,EACjC,KAAK,kCAAkC,GACxC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uCAAuC,EACvC,KAAK,wCAAwC,GAC9C,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { t as e } from "./chunks/data-source-CoIFvV72.js";
|
|
2
|
+
import { a as t, i as n, n as r, o as i, r as a, t as o } from "./chunks/dungeon-map-IPN6sEDj.js";
|
|
3
|
+
import { a as s, c, d as l, i as u, l as d, n as f, o as p, r as m, s as h, t as g, u as _ } from "./chunks/talent-calculator-Ch1Pbbba.js";
|
|
4
|
+
import "./dungeon-map.js";
|
|
5
|
+
import { a as v, i as y, n as b, r as x, t as S } from "./chunks/tooltip-DoQVSnOn.js";
|
|
6
|
+
import "./talent-calculator.js";
|
|
7
|
+
import "./tooltip.js";
|
|
8
|
+
export { e as FellowshipDataError, o as FellowshipDungeonMapElement, g as FellowshipTalentCalculatorElement, S as FellowshipTooltipElement, u as MAX_TALENT_POINTS, a as ViewportController, x as calculateTooltipPosition, s as canSelectTalent, n as createDungeonMapRenderModel, i as createPackageFellowshipDataSource, l as createPackageFellowshipTalentDataSource, d as createTalentCalculatorRenderModel, p as createTalentCalculatorSelectionState, r as defineFellowshipDungeonMap, f as defineFellowshipTalentCalculator, b as defineFellowshipTooltip, t as humanizeMapLabel, h as normalizeSelectedTalentIds, c as normalizeTalentPoints, y as resolveFellowshipRichText, v as stripFellowshipRichText, _ as talentRowLabel, m as talentSlotName };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type EventName } from "@lit/react";
|
|
2
|
+
import React, { type ComponentProps, type ReactNode } from "react";
|
|
3
|
+
import { FellowshipDungeonMapElement } from "../dungeon-map/dungeon-map.js";
|
|
4
|
+
import type { DungeonMapEnemyRenderContext, DungeonMapGroupRenderContext, FellowshipMapErrorEvent, FellowshipMapImageChangeEvent, FellowshipMapReadyEvent, FellowshipMapViewportChangeEvent, FellowshipMapWarningEvent } from "../dungeon-map/types.js";
|
|
5
|
+
declare const NativeDungeonMap: import("@lit/react").ReactWebComponent<FellowshipDungeonMapElement, {
|
|
6
|
+
onReady: EventName<FellowshipMapReadyEvent>;
|
|
7
|
+
onError: EventName<FellowshipMapErrorEvent>;
|
|
8
|
+
onWarning: EventName<FellowshipMapWarningEvent>;
|
|
9
|
+
onMapImageChange: EventName<FellowshipMapImageChangeEvent>;
|
|
10
|
+
onViewportChange: EventName<FellowshipMapViewportChangeEvent>;
|
|
11
|
+
}>;
|
|
12
|
+
type NativeDungeonMapProps = ComponentProps<typeof NativeDungeonMap>;
|
|
13
|
+
export type ReactEnemyRenderer = (context: DungeonMapEnemyRenderContext) => ReactNode;
|
|
14
|
+
export type ReactGroupRenderer = (context: DungeonMapGroupRenderContext<ReactNode>) => ReactNode;
|
|
15
|
+
export interface DungeonMapViewerProps extends Omit<NativeDungeonMapProps, "children" | "externalOverlay" | "onReady" | "renderEnemy" | "renderGroup"> {
|
|
16
|
+
readonly renderEnemy?: ReactEnemyRenderer;
|
|
17
|
+
readonly renderGroup?: ReactGroupRenderer;
|
|
18
|
+
readonly onReady?: (event: FellowshipMapReadyEvent) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare const DungeonMapViewer: React.ForwardRefExoticComponent<Omit<DungeonMapViewerProps, "ref"> & React.RefAttributes<FellowshipDungeonMapElement>>;
|
|
21
|
+
export default DungeonMapViewer;
|
|
22
|
+
//# sourceMappingURL=dungeon-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dungeon-map.d.ts","sourceRoot":"","sources":["../../src/react/dungeon-map.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,EAKZ,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,2BAA2B,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAEV,4BAA4B,EAE5B,4BAA4B,EAE5B,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,gCAAgC,EAChC,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AAIjC,QAAA,MAAM,gBAAgB;aAKiB,SAAS,CAAC,uBAAuB,CAAC;aAClC,SAAS,CAAC,uBAAuB,CAAC;eAC9B,SAAS,CAAC,yBAAyB,CAAC;sBACxB,SAAS,CAAC,6BAA6B,CAAC;sBAErD,SAAS,CAAC,gCAAgC,CAAC;EAEnF,CAAC;AAEH,KAAK,qBAAqB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,4BAA4B,KAAK,SAAS,CAAC;AACtF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,4BAA4B,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AAEjG,MAAM,WAAW,qBACf,SAAQ,IAAI,CACV,qBAAqB,EACrB,UAAU,GAAG,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAC3E;IACD,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAC7D;AAoLD,eAAO,MAAM,gBAAgB,wHA+C5B,CAAC;AAIF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { n as e, t } from "../chunks/dungeon-map-IPN6sEDj.js";
|
|
2
|
+
import { createComponent as n } from "@lit/react";
|
|
3
|
+
import r, { forwardRef as i, useCallback as a, useEffect as o, useState as s } from "react";
|
|
4
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
5
|
+
//#region src/react/dungeon-map.tsx
|
|
6
|
+
e();
|
|
7
|
+
var u = n({
|
|
8
|
+
react: r,
|
|
9
|
+
tagName: "fellowship-dungeon-map",
|
|
10
|
+
elementClass: t,
|
|
11
|
+
events: {
|
|
12
|
+
onReady: "fellowship-map-ready",
|
|
13
|
+
onError: "fellowship-map-error",
|
|
14
|
+
onWarning: "fellowship-map-warning",
|
|
15
|
+
onMapImageChange: "fellowship-map-image-change",
|
|
16
|
+
onViewportChange: "fellowship-map-viewport-change"
|
|
17
|
+
}
|
|
18
|
+
}), d = {
|
|
19
|
+
position: "absolute",
|
|
20
|
+
inset: 0,
|
|
21
|
+
width: "100%",
|
|
22
|
+
height: "100%",
|
|
23
|
+
pointerEvents: "none"
|
|
24
|
+
}, f = {
|
|
25
|
+
position: "relative",
|
|
26
|
+
display: "grid",
|
|
27
|
+
width: "var(--fellowship-map-enemy-size, 32px)",
|
|
28
|
+
height: "var(--fellowship-map-enemy-size, 32px)",
|
|
29
|
+
placeItems: "center",
|
|
30
|
+
overflow: "hidden",
|
|
31
|
+
border: "2px solid var(--fellowship-map-rune, #4bc7de)",
|
|
32
|
+
borderRadius: "50%",
|
|
33
|
+
background: "#131a22",
|
|
34
|
+
color: "var(--fellowship-map-ink, #f2f0e8)",
|
|
35
|
+
boxShadow: "0 0 0 1px rgba(0,0,0,.72), 0 2px 6px rgba(0,0,0,.32)",
|
|
36
|
+
fontFamily: "var(--fellowship-map-tactical-font-family, ui-monospace, monospace)",
|
|
37
|
+
fontSize: 10,
|
|
38
|
+
fontWeight: 800
|
|
39
|
+
}, p = (e) => {
|
|
40
|
+
let t = (e.enemy?.name ?? e.placement.id).split(/\s+/).map((e) => e[0]).join("").slice(0, 2).toUpperCase(), n = e.enemy?.isBoss ? {
|
|
41
|
+
borderColor: "var(--fellowship-map-ember, #ff7a2f)",
|
|
42
|
+
width: 36,
|
|
43
|
+
height: 36
|
|
44
|
+
} : void 0;
|
|
45
|
+
return /* @__PURE__ */ c("span", {
|
|
46
|
+
style: {
|
|
47
|
+
...f,
|
|
48
|
+
...n
|
|
49
|
+
},
|
|
50
|
+
children: e.imageUrl ? /* @__PURE__ */ c("img", {
|
|
51
|
+
src: e.imageUrl,
|
|
52
|
+
alt: "",
|
|
53
|
+
draggable: !1,
|
|
54
|
+
style: {
|
|
55
|
+
width: "100%",
|
|
56
|
+
height: "100%",
|
|
57
|
+
objectFit: "cover"
|
|
58
|
+
}
|
|
59
|
+
}) : t
|
|
60
|
+
});
|
|
61
|
+
}, m = (e, t, n, r) => {
|
|
62
|
+
let i = t.visualBounds, a = n.enemy?.name ?? n.placement.id, o = {
|
|
63
|
+
model: n,
|
|
64
|
+
group: t,
|
|
65
|
+
dungeon: e.dungeon,
|
|
66
|
+
mapImage: e.mapImage
|
|
67
|
+
};
|
|
68
|
+
return /* @__PURE__ */ c("div", {
|
|
69
|
+
role: "img",
|
|
70
|
+
"aria-label": a,
|
|
71
|
+
title: a,
|
|
72
|
+
style: {
|
|
73
|
+
position: "absolute",
|
|
74
|
+
left: `${(n.position.x - i.x) / i.width * 100}%`,
|
|
75
|
+
top: `${(n.position.y - i.y) / i.height * 100}%`,
|
|
76
|
+
width: 0,
|
|
77
|
+
height: 0,
|
|
78
|
+
zIndex: 2,
|
|
79
|
+
pointerEvents: "auto"
|
|
80
|
+
},
|
|
81
|
+
children: /* @__PURE__ */ c("div", {
|
|
82
|
+
style: {
|
|
83
|
+
position: "absolute",
|
|
84
|
+
transform: "translate(-50%, -50%) scale(var(--fellowship-map-inverse-scale, 1))",
|
|
85
|
+
transformOrigin: "center"
|
|
86
|
+
},
|
|
87
|
+
children: r ? r(o) : p(n)
|
|
88
|
+
})
|
|
89
|
+
}, n.instanceId);
|
|
90
|
+
}, h = (e, t) => {
|
|
91
|
+
let n = `G${e.id ?? "–"}${e.dungeonScore === null ? "" : ` · ${e.dungeonScore}`}`;
|
|
92
|
+
return /* @__PURE__ */ l("div", {
|
|
93
|
+
style: {
|
|
94
|
+
position: "absolute",
|
|
95
|
+
inset: 0
|
|
96
|
+
},
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ c("div", {
|
|
99
|
+
"aria-hidden": "true",
|
|
100
|
+
style: {
|
|
101
|
+
position: "absolute",
|
|
102
|
+
inset: 0,
|
|
103
|
+
border: "calc(1px * var(--fellowship-map-inverse-scale, 1)) solid var(--fellowship-map-ember, #ff7a2f)",
|
|
104
|
+
borderRadius: "50%",
|
|
105
|
+
background: "color-mix(in srgb, var(--fellowship-map-ember, #ff7a2f) 7%, transparent)",
|
|
106
|
+
opacity: .5
|
|
107
|
+
}
|
|
108
|
+
}),
|
|
109
|
+
/* @__PURE__ */ c("span", {
|
|
110
|
+
style: {
|
|
111
|
+
position: "absolute",
|
|
112
|
+
left: "50%",
|
|
113
|
+
top: 0,
|
|
114
|
+
minHeight: 22,
|
|
115
|
+
display: "inline-flex",
|
|
116
|
+
alignItems: "center",
|
|
117
|
+
padding: "0 7px",
|
|
118
|
+
border: "1px solid color-mix(in srgb, var(--fellowship-map-ember, #ff7a2f) 58%, transparent)",
|
|
119
|
+
borderRadius: 4,
|
|
120
|
+
background: "var(--fellowship-map-control-surface, rgba(12,17,23,.88))",
|
|
121
|
+
color: "var(--fellowship-map-ink, #f2f0e8)",
|
|
122
|
+
fontFamily: "var(--fellowship-map-tactical-font-family, ui-monospace, monospace)",
|
|
123
|
+
fontSize: 11,
|
|
124
|
+
fontWeight: 700,
|
|
125
|
+
whiteSpace: "nowrap",
|
|
126
|
+
transform: "translate(-50%, -45%) scale(var(--fellowship-map-inverse-scale, 1))",
|
|
127
|
+
transformOrigin: "center"
|
|
128
|
+
},
|
|
129
|
+
children: n
|
|
130
|
+
}),
|
|
131
|
+
t
|
|
132
|
+
]
|
|
133
|
+
});
|
|
134
|
+
}, g = (e, t, n) => e.groups.map((r) => {
|
|
135
|
+
let i = r.visualBounds, a = r.enemies.map((n) => m(e, r, n, t)), o = n ? n({
|
|
136
|
+
group: r,
|
|
137
|
+
children: a,
|
|
138
|
+
dungeon: e.dungeon,
|
|
139
|
+
mapImage: e.mapImage
|
|
140
|
+
}) : h(r, a);
|
|
141
|
+
return /* @__PURE__ */ c("div", {
|
|
142
|
+
style: {
|
|
143
|
+
position: "absolute",
|
|
144
|
+
left: `${i.x * 100}%`,
|
|
145
|
+
top: `${i.y * 100}%`,
|
|
146
|
+
width: `${i.width * 100}%`,
|
|
147
|
+
height: `${i.height * 100}%`,
|
|
148
|
+
pointerEvents: "none"
|
|
149
|
+
},
|
|
150
|
+
children: o
|
|
151
|
+
}, `${e.mapImage.id}:${String(r.id)}:${r.enemies[0]?.instanceId ?? "empty"}`);
|
|
152
|
+
}), _ = i(function({ renderEnemy: e, renderGroup: t, onReady: n, onMapImageChange: r, mapImageId: i, ...l }, f) {
|
|
153
|
+
let [p, m] = s(null), [h, _] = s(i), v = !!(e || t);
|
|
154
|
+
o(() => {
|
|
155
|
+
i !== void 0 && _(i);
|
|
156
|
+
}, [i]);
|
|
157
|
+
let y = a((e) => {
|
|
158
|
+
m(e.detail.model), n?.(e);
|
|
159
|
+
}, [n]), b = a((e) => {
|
|
160
|
+
_(e.detail.mapImageId), r?.(e);
|
|
161
|
+
}, [r]);
|
|
162
|
+
return /* @__PURE__ */ c(u, {
|
|
163
|
+
...l,
|
|
164
|
+
...i === void 0 ? {} : { mapImageId: h },
|
|
165
|
+
ref: f,
|
|
166
|
+
externalOverlay: v,
|
|
167
|
+
onReady: y,
|
|
168
|
+
onMapImageChange: b,
|
|
169
|
+
children: v && p ? /* @__PURE__ */ c("div", {
|
|
170
|
+
slot: "overlay",
|
|
171
|
+
style: d,
|
|
172
|
+
children: g(p, e, t)
|
|
173
|
+
}) : null
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
_.displayName = "DungeonMapViewer";
|
|
177
|
+
//#endregion
|
|
178
|
+
export { _ as DungeonMapViewer, _ as default };
|
|
179
|
+
|
|
180
|
+
//# sourceMappingURL=dungeon-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dungeon-map.js","names":[],"sources":["../../src/react/dungeon-map.tsx"],"sourcesContent":["import { createComponent, type EventName } from \"@lit/react\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useState,\n type ComponentProps,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\n\nimport {\n FellowshipDungeonMapElement,\n defineFellowshipDungeonMap,\n} from \"../dungeon-map/dungeon-map.js\";\nimport type {\n DungeonMapEnemyModel,\n DungeonMapEnemyRenderContext,\n DungeonMapGroupModel,\n DungeonMapGroupRenderContext,\n DungeonMapRenderModel,\n FellowshipMapErrorEvent,\n FellowshipMapImageChangeEvent,\n FellowshipMapReadyEvent,\n FellowshipMapViewportChangeEvent,\n FellowshipMapWarningEvent,\n} from \"../dungeon-map/types.js\";\n\ndefineFellowshipDungeonMap();\n\nconst NativeDungeonMap = createComponent({\n react: React,\n tagName: \"fellowship-dungeon-map\",\n elementClass: FellowshipDungeonMapElement,\n events: {\n onReady: \"fellowship-map-ready\" as EventName<FellowshipMapReadyEvent>,\n onError: \"fellowship-map-error\" as EventName<FellowshipMapErrorEvent>,\n onWarning: \"fellowship-map-warning\" as EventName<FellowshipMapWarningEvent>,\n onMapImageChange: \"fellowship-map-image-change\" as EventName<FellowshipMapImageChangeEvent>,\n onViewportChange:\n \"fellowship-map-viewport-change\" as EventName<FellowshipMapViewportChangeEvent>,\n },\n});\n\ntype NativeDungeonMapProps = ComponentProps<typeof NativeDungeonMap>;\n\nexport type ReactEnemyRenderer = (context: DungeonMapEnemyRenderContext) => ReactNode;\nexport type ReactGroupRenderer = (context: DungeonMapGroupRenderContext<ReactNode>) => ReactNode;\n\nexport interface DungeonMapViewerProps\n extends Omit<\n NativeDungeonMapProps,\n \"children\" | \"externalOverlay\" | \"onReady\" | \"renderEnemy\" | \"renderGroup\"\n > {\n readonly renderEnemy?: ReactEnemyRenderer;\n readonly renderGroup?: ReactGroupRenderer;\n readonly onReady?: (event: FellowshipMapReadyEvent) => void;\n}\n\nconst overlayStyle: CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n};\n\nconst markerStyle: CSSProperties = {\n position: \"relative\",\n display: \"grid\",\n width: \"var(--fellowship-map-enemy-size, 32px)\",\n height: \"var(--fellowship-map-enemy-size, 32px)\",\n placeItems: \"center\",\n overflow: \"hidden\",\n border: \"2px solid var(--fellowship-map-rune, #4bc7de)\",\n borderRadius: \"50%\",\n background: \"#131a22\",\n color: \"var(--fellowship-map-ink, #f2f0e8)\",\n boxShadow: \"0 0 0 1px rgba(0,0,0,.72), 0 2px 6px rgba(0,0,0,.32)\",\n fontFamily: \"var(--fellowship-map-tactical-font-family, ui-monospace, monospace)\",\n fontSize: 10,\n fontWeight: 800,\n};\n\nconst defaultEnemy = (enemy: DungeonMapEnemyModel): ReactNode => {\n const name = enemy.enemy?.name ?? enemy.placement.id;\n const fallback = name\n .split(/\\s+/)\n .map((part) => part[0])\n .join(\"\")\n .slice(0, 2)\n .toUpperCase();\n const bossStyle = enemy.enemy?.isBoss\n ? { borderColor: \"var(--fellowship-map-ember, #ff7a2f)\", width: 36, height: 36 }\n : undefined;\n\n return (\n <span style={{ ...markerStyle, ...bossStyle }}>\n {enemy.imageUrl ? (\n <img\n src={enemy.imageUrl}\n alt=\"\"\n draggable={false}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\" }}\n />\n ) : (\n fallback\n )}\n </span>\n );\n};\n\nconst renderEnemyAnchor = (\n model: DungeonMapRenderModel,\n group: DungeonMapGroupModel,\n enemy: DungeonMapEnemyModel,\n renderEnemy?: ReactEnemyRenderer,\n): ReactNode => {\n const bounds = group.visualBounds;\n const name = enemy.enemy?.name ?? enemy.placement.id;\n const context: DungeonMapEnemyRenderContext = {\n model: enemy,\n group,\n dungeon: model.dungeon,\n mapImage: model.mapImage,\n };\n\n return (\n <div\n key={enemy.instanceId}\n role=\"img\"\n aria-label={name}\n title={name}\n style={{\n position: \"absolute\",\n left: `${((enemy.position.x - bounds.x) / bounds.width) * 100}%`,\n top: `${((enemy.position.y - bounds.y) / bounds.height) * 100}%`,\n width: 0,\n height: 0,\n zIndex: 2,\n pointerEvents: \"auto\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n transform: \"translate(-50%, -50%) scale(var(--fellowship-map-inverse-scale, 1))\",\n transformOrigin: \"center\",\n }}\n >\n {renderEnemy ? renderEnemy(context) : defaultEnemy(enemy)}\n </div>\n </div>\n );\n};\n\nconst defaultGroup = (group: DungeonMapGroupModel, children: readonly ReactNode[]): ReactNode => {\n const label = `G${group.id ?? \"–\"}${group.dungeonScore === null ? \"\" : ` · ${group.dungeonScore}`}`;\n return (\n <div style={{ position: \"absolute\", inset: 0 }}>\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n border:\n \"calc(1px * var(--fellowship-map-inverse-scale, 1)) solid var(--fellowship-map-ember, #ff7a2f)\",\n borderRadius: \"50%\",\n background: \"color-mix(in srgb, var(--fellowship-map-ember, #ff7a2f) 7%, transparent)\",\n opacity: 0.5,\n }}\n />\n <span\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: 0,\n minHeight: 22,\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0 7px\",\n border:\n \"1px solid color-mix(in srgb, var(--fellowship-map-ember, #ff7a2f) 58%, transparent)\",\n borderRadius: 4,\n background: \"var(--fellowship-map-control-surface, rgba(12,17,23,.88))\",\n color: \"var(--fellowship-map-ink, #f2f0e8)\",\n fontFamily: \"var(--fellowship-map-tactical-font-family, ui-monospace, monospace)\",\n fontSize: 11,\n fontWeight: 700,\n whiteSpace: \"nowrap\",\n transform: \"translate(-50%, -45%) scale(var(--fellowship-map-inverse-scale, 1))\",\n transformOrigin: \"center\",\n }}\n >\n {label}\n </span>\n {children}\n </div>\n );\n};\n\nconst renderReactOverlay = (\n model: DungeonMapRenderModel,\n renderEnemy?: ReactEnemyRenderer,\n renderGroup?: ReactGroupRenderer,\n): ReactNode =>\n model.groups.map((group) => {\n const bounds = group.visualBounds;\n const children = group.enemies.map((enemy) =>\n renderEnemyAnchor(model, group, enemy, renderEnemy),\n );\n const content = renderGroup\n ? renderGroup({\n group,\n children,\n dungeon: model.dungeon,\n mapImage: model.mapImage,\n })\n : defaultGroup(group, children);\n\n return (\n <div\n key={`${model.mapImage.id}:${String(group.id)}:${group.enemies[0]?.instanceId ?? \"empty\"}`}\n style={{\n position: \"absolute\",\n left: `${bounds.x * 100}%`,\n top: `${bounds.y * 100}%`,\n width: `${bounds.width * 100}%`,\n height: `${bounds.height * 100}%`,\n pointerEvents: \"none\",\n }}\n >\n {content}\n </div>\n );\n });\n\nexport const DungeonMapViewer = forwardRef<FellowshipDungeonMapElement, DungeonMapViewerProps>(\n function DungeonMapViewer(\n { renderEnemy, renderGroup, onReady, onMapImageChange, mapImageId, ...properties },\n forwardedRef,\n ) {\n const [model, setModel] = useState<DungeonMapRenderModel | null>(null);\n const [selectedMapImageId, setSelectedMapImageId] = useState(mapImageId);\n const usesReactOverlay = Boolean(renderEnemy || renderGroup);\n\n useEffect(() => {\n if (mapImageId !== undefined) {\n setSelectedMapImageId(mapImageId);\n }\n }, [mapImageId]);\n\n const handleReady = useCallback(\n (event: FellowshipMapReadyEvent) => {\n setModel(event.detail.model);\n onReady?.(event);\n },\n [onReady],\n );\n const handleMapImageChange = useCallback(\n (event: FellowshipMapImageChangeEvent) => {\n setSelectedMapImageId(event.detail.mapImageId);\n onMapImageChange?.(event);\n },\n [onMapImageChange],\n );\n\n return (\n <NativeDungeonMap\n {...properties}\n {...(mapImageId === undefined ? {} : { mapImageId: selectedMapImageId })}\n ref={forwardedRef}\n externalOverlay={usesReactOverlay}\n onReady={handleReady}\n onMapImageChange={handleMapImageChange}\n >\n {usesReactOverlay && model ? (\n <div slot=\"overlay\" style={overlayStyle}>\n {renderReactOverlay(model, renderEnemy, renderGroup)}\n </div>\n ) : null}\n </NativeDungeonMap>\n );\n },\n);\n\nDungeonMapViewer.displayName = \"DungeonMapViewer\";\n\nexport default DungeonMapViewer;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { DungeonMapViewer } from "./dungeon-map.js";
|
|
2
|
+
export type { DungeonMapViewerProps, ReactEnemyRenderer, ReactGroupRenderer, } from "./dungeon-map.js";
|
|
3
|
+
export { TalentCalculator } from "./talent-calculator.js";
|
|
4
|
+
export type { ReactTalentRenderer, TalentCalculatorProps } from "./talent-calculator.js";
|
|
5
|
+
export { Tooltip } from "./tooltip.js";
|
|
6
|
+
export type { TooltipProps } from "./tooltip.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type EventName } from "@lit/react";
|
|
2
|
+
import React, { type ComponentProps, type ReactNode } from "react";
|
|
3
|
+
import { FellowshipTalentCalculatorElement } from "../talent-calculator/talent-calculator.js";
|
|
4
|
+
import type { FellowshipTalentsErrorEvent, FellowshipTalentsReadyEvent, FellowshipTalentsWarningEvent, TalentCalculatorTalentRenderContext, TalentPointsChangeEvent, TalentSelectionChangeEvent } from "../talent-calculator/types.js";
|
|
5
|
+
declare const NativeTalentCalculator: import("@lit/react").ReactWebComponent<FellowshipTalentCalculatorElement, {
|
|
6
|
+
onReady: EventName<FellowshipTalentsReadyEvent>;
|
|
7
|
+
onError: EventName<FellowshipTalentsErrorEvent>;
|
|
8
|
+
onWarning: EventName<FellowshipTalentsWarningEvent>;
|
|
9
|
+
onSelectionChange: EventName<TalentSelectionChangeEvent>;
|
|
10
|
+
onTalentPointsChange: EventName<TalentPointsChangeEvent>;
|
|
11
|
+
}>;
|
|
12
|
+
type NativeTalentCalculatorProps = ComponentProps<typeof NativeTalentCalculator>;
|
|
13
|
+
export type ReactTalentRenderer = (context: TalentCalculatorTalentRenderContext) => ReactNode;
|
|
14
|
+
export interface TalentCalculatorProps extends Omit<NativeTalentCalculatorProps, "children" | "onReady" | "onSelectionChange" | "onTalentPointsChange" | "renderTalent"> {
|
|
15
|
+
readonly renderTalent?: ReactTalentRenderer;
|
|
16
|
+
readonly onReady?: (event: FellowshipTalentsReadyEvent) => void;
|
|
17
|
+
readonly onSelectionChange?: (event: TalentSelectionChangeEvent) => void;
|
|
18
|
+
readonly onTalentPointsChange?: (event: TalentPointsChangeEvent) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare const TalentCalculator: React.ForwardRefExoticComponent<Omit<TalentCalculatorProps, "ref"> & React.RefAttributes<FellowshipTalentCalculatorElement>>;
|
|
21
|
+
export default TalentCalculator;
|
|
22
|
+
//# sourceMappingURL=talent-calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"talent-calculator.d.ts","sourceRoot":"","sources":["../../src/react/talent-calculator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,EAMZ,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,iCAAiC,EAGlC,MAAM,2CAA2C,CAAC;AAMnD,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAE7B,mCAAmC,EACnC,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AAIvC,QAAA,MAAM,sBAAsB;aAKe,SAAS,CAAC,2BAA2B,CAAC;aACtC,SAAS,CAAC,2BAA2B,CAAC;eAClC,SAAS,CAAC,6BAA6B,CAAC;uBAEzC,SAAS,CAAC,0BAA0B,CAAC;0BACpB,SAAS,CAAC,uBAAuB,CAAC;EAE/F,CAAC;AAEH,KAAK,2BAA2B,GAAG,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEjF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,mCAAmC,KAAK,SAAS,CAAC;AAE9F,MAAM,WAAW,qBACf,SAAQ,IAAI,CACV,2BAA2B,EAC3B,UAAU,GAAG,SAAS,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,cAAc,CACvF;IACD,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACzE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAC1E;AAED,eAAO,MAAM,gBAAgB,8HA+F3B,CAAC;AAIH,eAAe,gBAAgB,CAAC"}
|