@d3-maps/core 0.3.0 → 0.4.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/dist/index.d.ts +3 -2
- package/dist/index.iife.js +1 -1
- package/dist/index.js +7 -3
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -442,7 +442,7 @@ interface MapConfig {
|
|
|
442
442
|
/**
|
|
443
443
|
* Projection factory from d3-geo (or a compatible implementation).
|
|
444
444
|
*
|
|
445
|
-
* Example: `
|
|
445
|
+
* Example: `geoNaturalEarth1`.
|
|
446
446
|
*/
|
|
447
447
|
projection?: () => GeoProjection;
|
|
448
448
|
/**
|
|
@@ -584,8 +584,9 @@ declare function createZoomBehavior(context?: MapContext, options?: ZoomBehavior
|
|
|
584
584
|
declare function attachZoomBehavior(element: ZoomTargetElement | null | undefined, behavior: DefaultZoomBehavior): void;
|
|
585
585
|
declare function applyZoomBehaviorTransform(element: ZoomTargetElement | null | undefined, behavior: DefaultZoomBehavior, transform: ZoomTransform$1): void;
|
|
586
586
|
declare function applyZoomTransform(options: ApplyZoomOptions): void;
|
|
587
|
+
declare function applyZoomGroupTransform(element: Element | null | undefined, transform: Pick<ZoomTransform$1, 'toString'> | null | undefined): void;
|
|
587
588
|
declare function setupZoom(options: SetupZoomOptions): void;
|
|
588
589
|
declare function getZoomScale(source: ZoomScaleSource): number;
|
|
589
590
|
declare function getInverseZoomScale(source: ZoomScaleSource, fallback?: number): number;
|
|
590
591
|
//#endregion
|
|
591
|
-
export { AnyFn, ApplyZoomOptions, type D3ZoomEvent, DataTransformer, DefaultZoomBehavior, Extent, HasArgs, MapConfig, MapContext, MapData, MapFeature, MapFeatureProps, MapMarkerCoordinates, MapMarkerProps, MapMesh, MapObject, MapObjectEvent, MapObjectEventType, MapObjectFocusEventType, MapObjectMouseEventType, MapObjectState, MapObjectStyles, MethodsToModifiers, ModifierArgs, OverloadedArgs, OwnKeys, ProjectionConfig, SetterArgs, SetupZoomOptions, ZOOM_DEFAULTS, type ZoomBehavior, ZoomBehaviorOptions, ZoomEvent, ZoomEvents, ZoomModifiers, ZoomProps, ZoomScaleSource, ZoomTargetElement, type ZoomTransform, applyModifiers, applyZoomBehaviorTransform, applyZoomTransform, attachZoomBehavior, createZoomBehavior, getFeatureKey, getInverseZoomScale, getMarkerTransform, getObjectStateUpdate, getTopoObject, getZoomScale, isDefined, isFunction, isNullish, isNumber, isPlainObject, isString, isStringOrNumber, isTopology, makeFeatures, makeMapContext, makeMesh, makePathFn, makeProjection, makeTransform, mapObjectState, resolveObjectStyle, setupZoom };
|
|
592
|
+
export { AnyFn, ApplyZoomOptions, type D3ZoomEvent, DataTransformer, DefaultZoomBehavior, Extent, HasArgs, MapConfig, MapContext, MapData, MapFeature, MapFeatureProps, MapMarkerCoordinates, MapMarkerProps, MapMesh, MapObject, MapObjectEvent, MapObjectEventType, MapObjectFocusEventType, MapObjectMouseEventType, MapObjectState, MapObjectStyles, MethodsToModifiers, ModifierArgs, OverloadedArgs, OwnKeys, ProjectionConfig, SetterArgs, SetupZoomOptions, ZOOM_DEFAULTS, type ZoomBehavior, ZoomBehaviorOptions, ZoomEvent, ZoomEvents, ZoomModifiers, ZoomProps, ZoomScaleSource, ZoomTargetElement, type ZoomTransform, applyModifiers, applyZoomBehaviorTransform, applyZoomGroupTransform, applyZoomTransform, attachZoomBehavior, createZoomBehavior, getFeatureKey, getInverseZoomScale, getMarkerTransform, getObjectStateUpdate, getTopoObject, getZoomScale, isDefined, isFunction, isNullish, isNumber, isPlainObject, isString, isStringOrNumber, isTopology, makeFeatures, makeMapContext, makeMesh, makePathFn, makeProjection, makeTransform, mapObjectState, resolveObjectStyle, setupZoom };
|
package/dist/index.iife.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t,n,r,i){function a(e){return typeof e==`string`}function o(e){return e!==`undefined`}let s=e=>e==null,c=e=>Number.isFinite(e);function l(e){return a(e)||c(e)}function u(e){return typeof e==`function`}function d(e){if(Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function f(e,t,n){return`translate(${e}, ${t}) scale(${n??1})`}function p(e,t){if(t)for(let n of Object.keys(t)){let r=t[n];if(!o(r))continue;let i=e[n];if(!u(i))continue;let a=Array.isArray(r)?r:[r];i.apply(e,a)}}function m(e,t=`id`,n){let r=e[t];if(l(r))return r;let i=e.properties?.[t];return l(i)?i:n}function h({width:e,height:t,config:n,projection:r,geoJson:i}){let a=r();return i?n?.fitSize||a.fitSize([e,t],i):n?.translate||a.translate([e/2,t/2]),p(a,n),a}function g(e,t){let r;if(b(e)){let t=(0,n.feature)(e,x(e));r=t.type===`FeatureCollection`?t:{type:`FeatureCollection`,features:[t]}}else r=e;return[t?t(r.features):r.features,r]}let _=e=>(0,t.geoPath)().projection(e);function v(e){if(b(e))return(0,n.mesh)(e,x(e))}function y({width:e=600,height:n,aspectRatio:r=
|
|
1
|
+
(function(e,t,n,r,i){function a(e){return typeof e==`string`}function o(e){return e!==`undefined`}let s=e=>e==null,c=e=>Number.isFinite(e);function l(e){return a(e)||c(e)}function u(e){return typeof e==`function`}function d(e){if(Object.prototype.toString.call(e)!==`[object Object]`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function f(e,t,n){return`translate(${e}, ${t}) scale(${n??1})`}function p(e,t){if(t)for(let n of Object.keys(t)){let r=t[n];if(!o(r))continue;let i=e[n];if(!u(i))continue;let a=Array.isArray(r)?r:[r];i.apply(e,a)}}function m(e,t=`id`,n){let r=e[t];if(l(r))return r;let i=e.properties?.[t];return l(i)?i:n}function h({width:e,height:t,config:n,projection:r,geoJson:i}){let a=r();return i?n?.fitSize||a.fitSize([e,t],i):n?.translate||a.translate([e/2,t/2]),p(a,n),a}function g(e,t){let r;if(b(e)){let t=(0,n.feature)(e,x(e));r=t.type===`FeatureCollection`?t:{type:`FeatureCollection`,features:[t]}}else r=e;return[t?t(r.features):r.features,r]}let _=e=>(0,t.geoPath)().projection(e);function v(e){if(b(e))return(0,n.mesh)(e,x(e))}function y({width:e=600,height:n,aspectRatio:r=2/1,data:i,dataTransformer:a,projection:o=t.geoNaturalEarth1,projectionConfig:s=o===t.geoNaturalEarth1?{rotate:[[-11,0]]}:{}}){let[c,l]=g(i,a),u=v(i),d=n||e/r,f=h({width:e,height:d,projection:o,config:s,geoJson:l}),p=_(f);return{width:e,height:d,projection:f,features:c,mesh:u,path:p,renderPath:e=>p(e),renderMesh:()=>u?p(u):null}}function b(e){return e?.type===`Topology`}function x(e){let t=Object.keys(e.objects)[0];return e.objects[t]}let S=[`default`,`hover`,`active`];function C(e){switch(e){case`focus`:case`mouseenter`:case`mouseup`:return`hover`;case`blur`:case`mouseleave`:return`default`;case`mousedown`:return`active`;default:return`default`}}function w(e,t){return t?.[e]??t?.default}function T(e,t,n=`translate(0, 0)`){let r=e?.projection;if(!r)return n;let i=r(t);return i?f(...i):n}let E={center:[0,0],zoom:1,minZoom:1,maxZoom:8};function D(e,t={}){let n=(0,i.zoom)(),r=t.minZoom??E.minZoom,a=t.maxZoom??E.maxZoom,o=[[0,0],[e?.width??0,e?.height??0]];return n.scaleExtent([r,a]).translateExtent(o),t.onZoomStart&&n.on(`start`,t.onZoomStart),t.onZoom&&n.on(`zoom`,t.onZoom),t.onZoomEnd&&n.on(`end`,t.onZoomEnd),p(n,t.config),n}function O(e,t){let n=I(e);n&&(0,r.select)(n).call(t)}function k(e,t,n){let i=I(e);i&&(0,r.select)(i).call(t.transform,n)}function A(e){let t=e.center??E.center,n=e.zoom??E.zoom;k(e.element,e.behavior,i.zoomIdentity.translate(...t).scale(n))}function j(e,t){!e||!t||e.setAttribute(`transform`,t.toString())}function M(e){O(e.element,e.behavior),A(e)}function N(e){return c(e)?e:F(e)?e.k:e?.transform?.k??1}function P(e,t=1){let n=N(e);return!c(n)||n===0?t:1/n}function F(e){return!!(e&&c(e.k)&&c(e.x)&&c(e.y))}function I(e){return e?e instanceof SVGSVGElement?e:e.closest(`svg`):null}e.ZOOM_DEFAULTS=E,e.applyModifiers=p,e.applyZoomBehaviorTransform=k,e.applyZoomGroupTransform=j,e.applyZoomTransform=A,e.attachZoomBehavior=O,e.createZoomBehavior=D,e.getFeatureKey=m,e.getInverseZoomScale=P,e.getMarkerTransform=T,e.getObjectStateUpdate=C,e.getTopoObject=x,e.getZoomScale=N,e.isDefined=o,e.isFunction=u,e.isNullish=s,e.isNumber=c,e.isPlainObject=d,e.isString=a,e.isStringOrNumber=l,e.isTopology=b,e.makeFeatures=g,e.makeMapContext=y,e.makeMesh=v,e.makePathFn=_,e.makeProjection=h,e.makeTransform=f,e.mapObjectState=S,e.resolveObjectStyle=w,e.setupZoom=M})(this.D3Maps=this.D3Maps||{},d3,topojson,d3,d3);
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { geoNaturalEarth1, geoPath } from "d3-geo";
|
|
2
2
|
import { feature, mesh } from "topojson-client";
|
|
3
3
|
import { select } from "d3-selection";
|
|
4
4
|
import { zoom, zoomIdentity } from "d3-zoom";
|
|
@@ -121,7 +121,7 @@ function makeMesh(geoData) {
|
|
|
121
121
|
/**
|
|
122
122
|
* Creates a full {@link MapContext} from a {@link MapConfig}.
|
|
123
123
|
*/
|
|
124
|
-
function makeMapContext({ width = 600, height: passedHeight, aspectRatio =
|
|
124
|
+
function makeMapContext({ width = 600, height: passedHeight, aspectRatio = 2 / 1, data, dataTransformer, projection: providedProjection = geoNaturalEarth1, projectionConfig = providedProjection === geoNaturalEarth1 ? { rotate: [[-11, 0]] } : {} }) {
|
|
125
125
|
const [features, geoJson] = makeFeatures(data, dataTransformer);
|
|
126
126
|
const mapMesh = makeMesh(data);
|
|
127
127
|
const height = passedHeight || width / aspectRatio;
|
|
@@ -236,6 +236,10 @@ function applyZoomTransform(options) {
|
|
|
236
236
|
const zoom$1 = options.zoom ?? ZOOM_DEFAULTS.zoom;
|
|
237
237
|
applyZoomBehaviorTransform(options.element, options.behavior, zoomIdentity.translate(...center).scale(zoom$1));
|
|
238
238
|
}
|
|
239
|
+
function applyZoomGroupTransform(element, transform) {
|
|
240
|
+
if (!element || !transform) return;
|
|
241
|
+
element.setAttribute("transform", transform.toString());
|
|
242
|
+
}
|
|
239
243
|
function setupZoom(options) {
|
|
240
244
|
attachZoomBehavior(options.element, options.behavior);
|
|
241
245
|
applyZoomTransform(options);
|
|
@@ -260,4 +264,4 @@ function getSvgElement(element) {
|
|
|
260
264
|
}
|
|
261
265
|
|
|
262
266
|
//#endregion
|
|
263
|
-
export { ZOOM_DEFAULTS, applyModifiers, applyZoomBehaviorTransform, applyZoomTransform, attachZoomBehavior, createZoomBehavior, getFeatureKey, getInverseZoomScale, getMarkerTransform, getObjectStateUpdate, getTopoObject, getZoomScale, isDefined, isFunction, isNullish, isNumber, isPlainObject, isString, isStringOrNumber, isTopology, makeFeatures, makeMapContext, makeMesh, makePathFn, makeProjection, makeTransform, mapObjectState, resolveObjectStyle, setupZoom };
|
|
267
|
+
export { ZOOM_DEFAULTS, applyModifiers, applyZoomBehaviorTransform, applyZoomGroupTransform, applyZoomTransform, attachZoomBehavior, createZoomBehavior, getFeatureKey, getInverseZoomScale, getMarkerTransform, getObjectStateUpdate, getTopoObject, getZoomScale, isDefined, isFunction, isNullish, isNumber, isPlainObject, isString, isStringOrNumber, isTopology, makeFeatures, makeMapContext, makeMesh, makePathFn, makeProjection, makeTransform, mapObjectState, resolveObjectStyle, setupZoom };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d3-maps/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Framework-agnostic core utilities for building reactive D3 maps",
|
|
7
7
|
"author": "Georgii Bukharov <souljorje@gmail.com>",
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"@types/topojson-specification": "^1.0.5",
|
|
49
49
|
"tsdown": "0.19.0",
|
|
50
50
|
"typescript": "^5.9.3",
|
|
51
|
+
"vite-tsconfig-paths": "^6.1.1",
|
|
51
52
|
"vitest": "^4.0.15"
|
|
52
53
|
},
|
|
53
54
|
"scripts": {
|