@toclocoinc/lattice-grid 1.67.0 → 1.68.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/README.md +1 -1
- package/angular/package.json +1 -1
- package/docs/API.html +21 -16
- package/docs/api-detail.html +40 -5
- package/lattice-grid.d.ts +12 -2
- package/lattice-grid.esm.min.js +27 -7
- package/lattice-grid.min.cjs +27 -7
- package/lattice-grid.min.js +27 -7
- package/modules/ai.d.ts +1 -1
- package/modules/ai.esm.min.js +3 -3
- package/modules/ai.min.cjs +3 -3
- package/modules/ai.min.js +3 -3
- package/modules/angular.d.ts +1 -1
- package/modules/angular.esm.min.js +3 -3
- package/modules/angular.min.cjs +3 -3
- package/modules/angular.min.js +3 -3
- package/modules/chart-alluvial.d.ts +1 -1
- package/modules/chart-alluvial.esm.min.js +1 -1
- package/modules/chart-alluvial.min.cjs +1 -1
- package/modules/chart-alluvial.min.js +1 -1
- package/modules/chart-arc.d.ts +1 -1
- package/modules/chart-arc.esm.min.js +1 -1
- package/modules/chart-arc.min.cjs +1 -1
- package/modules/chart-arc.min.js +1 -1
- package/modules/chart-bubblemap.d.ts +1 -1
- package/modules/chart-bubblemap.esm.min.js +1 -1
- package/modules/chart-bubblemap.min.cjs +1 -1
- package/modules/chart-bubblemap.min.js +1 -1
- package/modules/chart-bump.d.ts +1 -1
- package/modules/chart-bump.esm.min.js +1 -1
- package/modules/chart-bump.min.cjs +1 -1
- package/modules/chart-bump.min.js +1 -1
- package/modules/chart-calendar.d.ts +1 -1
- package/modules/chart-calendar.esm.min.js +1 -1
- package/modules/chart-calendar.min.cjs +1 -1
- package/modules/chart-calendar.min.js +1 -1
- package/modules/chart-decomposition.d.ts +1 -1
- package/modules/chart-decomposition.esm.min.js +1 -1
- package/modules/chart-decomposition.min.cjs +1 -1
- package/modules/chart-decomposition.min.js +1 -1
- package/modules/chart-diverging.d.ts +1 -1
- package/modules/chart-diverging.esm.min.js +1 -1
- package/modules/chart-diverging.min.cjs +1 -1
- package/modules/chart-diverging.min.js +1 -1
- package/modules/chart-dumbbell.d.ts +1 -1
- package/modules/chart-dumbbell.esm.min.js +1 -1
- package/modules/chart-dumbbell.min.cjs +1 -1
- package/modules/chart-dumbbell.min.js +1 -1
- package/modules/chart-fan.d.ts +1 -1
- package/modules/chart-fan.esm.min.js +1 -1
- package/modules/chart-fan.min.cjs +1 -1
- package/modules/chart-fan.min.js +1 -1
- package/modules/chart-hexbin.d.ts +1 -1
- package/modules/chart-hexbin.esm.min.js +1 -1
- package/modules/chart-hexbin.min.cjs +1 -1
- package/modules/chart-hexbin.min.js +1 -1
- package/modules/chart-hexmap.d.ts +1 -1
- package/modules/chart-hexmap.esm.min.js +1 -1
- package/modules/chart-hexmap.min.cjs +1 -1
- package/modules/chart-hexmap.min.js +1 -1
- package/modules/chart-icicle.d.ts +1 -1
- package/modules/chart-icicle.esm.min.js +1 -1
- package/modules/chart-icicle.min.cjs +1 -1
- package/modules/chart-icicle.min.js +1 -1
- package/modules/chart-markermap.d.ts +1 -1
- package/modules/chart-markermap.esm.min.js +1 -1
- package/modules/chart-markermap.min.cjs +1 -1
- package/modules/chart-markermap.min.js +1 -1
- package/modules/chart-parallel.d.ts +1 -1
- package/modules/chart-parallel.esm.min.js +1 -1
- package/modules/chart-parallel.min.cjs +1 -1
- package/modules/chart-parallel.min.js +1 -1
- package/modules/chart-ridgeline.d.ts +1 -1
- package/modules/chart-ridgeline.esm.min.js +1 -1
- package/modules/chart-ridgeline.min.cjs +1 -1
- package/modules/chart-ridgeline.min.js +1 -1
- package/modules/chart-roc.d.ts +1 -1
- package/modules/chart-roc.esm.min.js +1 -1
- package/modules/chart-roc.min.cjs +1 -1
- package/modules/chart-roc.min.js +1 -1
- package/modules/chart-slope.d.ts +1 -1
- package/modules/chart-slope.esm.min.js +1 -1
- package/modules/chart-slope.min.cjs +1 -1
- package/modules/chart-slope.min.js +1 -1
- package/modules/chart-splom.d.ts +1 -1
- package/modules/chart-splom.esm.min.js +1 -1
- package/modules/chart-splom.min.cjs +1 -1
- package/modules/chart-splom.min.js +1 -1
- package/modules/chart-waffle.d.ts +1 -1
- package/modules/chart-waffle.esm.min.js +1 -1
- package/modules/chart-waffle.min.cjs +1 -1
- package/modules/chart-waffle.min.js +1 -1
- package/modules/charts.d.ts +1 -1
- package/modules/charts.esm.min.js +1376 -1249
- package/modules/charts.min.cjs +1376 -1249
- package/modules/charts.min.js +1376 -1249
- package/modules/data-router.d.ts +1 -1
- package/modules/data-router.esm.min.js +204 -8
- package/modules/data-router.min.cjs +204 -8
- package/modules/data-router.min.js +204 -8
- package/modules/devtools.d.ts +1 -1
- package/modules/devtools.esm.min.js +1 -1
- package/modules/devtools.min.cjs +1 -1
- package/modules/devtools.min.js +1 -1
- package/modules/dhtmlx-compat.d.ts +1 -1
- package/modules/dhtmlx-compat.esm.min.js +3 -3
- package/modules/dhtmlx-compat.min.cjs +3 -3
- package/modules/dhtmlx-compat.min.js +3 -3
- package/modules/gantt.d.ts +1 -1
- package/modules/gantt.esm.min.js +32 -7
- package/modules/gantt.min.cjs +32 -7
- package/modules/gantt.min.js +32 -7
- package/modules/geo-europe-nuts.d.ts +1 -1
- package/modules/geo-europe-nuts.esm.min.js +1 -1
- package/modules/geo-uk.d.ts +1 -1
- package/modules/geo-uk.esm.min.js +1 -1
- package/modules/geo-us-states.d.ts +1 -1
- package/modules/geo-us-states.esm.min.js +1 -1
- package/modules/geo-world-110m.d.ts +1 -1
- package/modules/geo-world-110m.esm.min.js +1 -1
- package/modules/geo-world-50m.d.ts +1 -1
- package/modules/geo-world-50m.esm.min.js +1 -1
- package/modules/htmx.d.ts +1 -1
- package/modules/htmx.esm.min.js +27 -7
- package/modules/htmx.min.cjs +27 -7
- package/modules/htmx.min.js +27 -7
- package/modules/kanban.d.ts +1 -1
- package/modules/kanban.esm.min.js +3 -3
- package/modules/kanban.min.cjs +3 -3
- package/modules/kanban.min.js +3 -3
- package/modules/kpi.d.ts +26 -8
- package/modules/kpi.esm.min.js +31 -6
- package/modules/kpi.min.cjs +31 -6
- package/modules/kpi.min.js +31 -6
- package/modules/layout.d.ts +1 -1
- package/modules/layout.esm.min.js +3 -3
- package/modules/layout.min.cjs +3 -3
- package/modules/layout.min.js +3 -3
- package/modules/mock-socket.d.ts +1 -1
- package/modules/mock-socket.esm.min.js +1 -1
- package/modules/mock-socket.min.cjs +1 -1
- package/modules/mock-socket.min.js +1 -1
- package/modules/react.d.ts +1 -1
- package/modules/react.esm.min.js +3 -3
- package/modules/react.min.cjs +3 -3
- package/modules/react.min.js +3 -3
- package/modules/svelte.d.ts +1 -1
- package/modules/svelte.esm.min.js +3 -3
- package/modules/svelte.min.cjs +3 -3
- package/modules/svelte.min.js +3 -3
- package/modules/tabs.d.ts +1 -1
- package/modules/tabs.esm.min.js +13 -14
- package/modules/tabs.min.cjs +13 -14
- package/modules/tabs.min.js +13 -14
- package/modules/vue.d.ts +1 -1
- package/modules/vue.esm.min.js +3 -3
- package/modules/vue.min.cjs +3 -3
- package/modules/vue.min.js +3 -3
- package/modules/webcomponent.d.ts +1 -1
- package/modules/webcomponent.esm.min.js +27 -7
- package/modules/webcomponent.min.cjs +27 -7
- package/modules/webcomponent.min.js +27 -7
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, data-router module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
54
54
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
55
55
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
56
56
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
57
|
-
const STAMPED_VERSION="1.
|
|
57
|
+
const STAMPED_VERSION="1.68.0";
|
|
58
58
|
async function resolveVersion(){
|
|
59
59
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
60
60
|
return STAMPED_VERSION;
|
|
61
61
|
}
|
|
62
|
-
const VERSION="1.
|
|
62
|
+
const VERSION="1.68.0";
|
|
63
63
|
const warned=new Set();
|
|
64
64
|
const WARNED_LIMIT=2000;
|
|
65
65
|
function rememberWarned(key){
|
|
@@ -1546,6 +1546,180 @@ grandTotals:()=>lastGrand,
|
|
|
1546
1546
|
};
|
|
1547
1547
|
}
|
|
1548
1548
|
});
|
|
1549
|
+
__def("packages/core/src/model/rowkey.js",function(__exports,__req){
|
|
1550
|
+
'use strict';
|
|
1551
|
+
Object.defineProperty(__exports,"KEY_DEPENDENT_FEATURES",{enumerable:true,get:function(){return KEY_DEPENDENT_FEATURES;}});
|
|
1552
|
+
Object.defineProperty(__exports,"compositeKey",{enumerable:true,get:function(){return compositeKey;}});
|
|
1553
|
+
Object.defineProperty(__exports,"createRowKey",{enumerable:true,get:function(){return createRowKey;}});
|
|
1554
|
+
Object.defineProperty(__exports,"warnMissingKeys",{enumerable:true,get:function(){return warnMissingKeys;}});
|
|
1555
|
+
Object.defineProperty(__exports,"groupPathKey",{enumerable:true,get:function(){return groupPathKey;}});
|
|
1556
|
+
Object.defineProperty(__exports,"splitPathKey",{enumerable:true,get:function(){return splitPathKey;}});
|
|
1557
|
+
const __m0=__req("packages/core/src/internal/util.js");
|
|
1558
|
+
const warnOnce=__m0["warnOnce"];
|
|
1559
|
+
const pathGetter=__m0["pathGetter"];
|
|
1560
|
+
const isFunction=__m0["isFunction"];
|
|
1561
|
+
const isBlank=__m0["isBlank"];
|
|
1562
|
+
const KEY_DEPENDENT_FEATURES=[
|
|
1563
|
+
'changes (rows.apply / rows.queue)',
|
|
1564
|
+
'streaming dedupe',
|
|
1565
|
+
'selection persistence',
|
|
1566
|
+
'remote reload',
|
|
1567
|
+
'cell comments',
|
|
1568
|
+
];
|
|
1569
|
+
const SEP='\u001f';
|
|
1570
|
+
function part(value){
|
|
1571
|
+
if(value===null)return'\u0000n';
|
|
1572
|
+
if(value===undefined)return'\u0000u';
|
|
1573
|
+
const t=typeof value;
|
|
1574
|
+
if(t==='string')return value;
|
|
1575
|
+
if(t==='number'||t==='bigint'||t==='boolean')return String(value);
|
|
1576
|
+
if(value instanceof Date)return`\u0000d${value.getTime()}`;
|
|
1577
|
+
try{
|
|
1578
|
+
return`\u0000o${JSON.stringify(value)}`;
|
|
1579
|
+
}catch{
|
|
1580
|
+
return'\u0000o?';
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
function compositeKey(parts){
|
|
1584
|
+
if(parts.length===1)return part(parts[0]);
|
|
1585
|
+
let out='';
|
|
1586
|
+
for(let i=0;i<parts.length;i++){
|
|
1587
|
+
if(i)out+=SEP;
|
|
1588
|
+
out+=part(parts[i]);
|
|
1589
|
+
}
|
|
1590
|
+
return out;
|
|
1591
|
+
}
|
|
1592
|
+
function createRowKey(spec,opts={}){
|
|
1593
|
+
const warn=opts.warn!==false;
|
|
1594
|
+
if(isFunction(spec)){
|
|
1595
|
+
const fn=(spec);
|
|
1596
|
+
return{
|
|
1597
|
+
stable:true,
|
|
1598
|
+
fields:[],
|
|
1599
|
+
disabled:[],
|
|
1600
|
+
key(data,index){
|
|
1601
|
+
try{
|
|
1602
|
+
const value=fn(data);
|
|
1603
|
+
return Array.isArray(value)?compositeKey(value):part(value);
|
|
1604
|
+
}catch(err){
|
|
1605
|
+
warnOnce('rowKey.throw','rowKey function threw; falling back to index identity for the affected rows.',err);
|
|
1606
|
+
return`#${index??-1}`;
|
|
1607
|
+
}
|
|
1608
|
+
},
|
|
1609
|
+
keyEmpty(data){
|
|
1610
|
+
try{
|
|
1611
|
+
const value=fn(data);
|
|
1612
|
+
return Array.isArray(value)?value.length===0||value.some(isBlank):isBlank(value);
|
|
1613
|
+
}catch{
|
|
1614
|
+
return false;
|
|
1615
|
+
}
|
|
1616
|
+
},
|
|
1617
|
+
missingFields(){return[];},
|
|
1618
|
+
};
|
|
1619
|
+
}
|
|
1620
|
+
if(Array.isArray(spec)&&spec.length>0){
|
|
1621
|
+
const fields=spec.filter((f)=>typeof f==='string');
|
|
1622
|
+
const getters=fields.map((f)=>pathGetter(f));
|
|
1623
|
+
const n=getters.length;
|
|
1624
|
+
return{
|
|
1625
|
+
stable:true,
|
|
1626
|
+
fields,
|
|
1627
|
+
disabled:[],
|
|
1628
|
+
key(data){
|
|
1629
|
+
const parts=new Array(n);
|
|
1630
|
+
for(let i=0;i<n;i++)parts[i]=getters[i](data);
|
|
1631
|
+
return compositeKey(parts);
|
|
1632
|
+
},
|
|
1633
|
+
keyEmpty(data){
|
|
1634
|
+
for(let i=0;i<n;i++)if(isBlank(getters[i](data)))return true;
|
|
1635
|
+
return false;
|
|
1636
|
+
},
|
|
1637
|
+
missingFields(data){
|
|
1638
|
+
const out=[];
|
|
1639
|
+
for(let i=0;i<n;i++)if(isBlank(getters[i](data)))out.push(fields[i]);
|
|
1640
|
+
return out;
|
|
1641
|
+
},
|
|
1642
|
+
};
|
|
1643
|
+
}
|
|
1644
|
+
if(typeof spec==='string'&&spec.length>0){
|
|
1645
|
+
const get=pathGetter(spec);
|
|
1646
|
+
return{
|
|
1647
|
+
stable:true,
|
|
1648
|
+
fields:[spec],
|
|
1649
|
+
disabled:[],
|
|
1650
|
+
key(data){
|
|
1651
|
+
return part(get(data));
|
|
1652
|
+
},
|
|
1653
|
+
keyEmpty(data){
|
|
1654
|
+
return isBlank(get(data));
|
|
1655
|
+
},
|
|
1656
|
+
missingFields(data){
|
|
1657
|
+
return isBlank(get(data))?[spec]:[];
|
|
1658
|
+
},
|
|
1659
|
+
};
|
|
1660
|
+
}
|
|
1661
|
+
if(warn){
|
|
1662
|
+
warnOnce(
|
|
1663
|
+
'rowKey.missing',
|
|
1664
|
+
`no rowKey configured, so rows are identified by object identity. This disables: ${KEY_DEPENDENT_FEATURES.join(', ')}. Set rowKey to a field name, an array of field names, or a function.`,
|
|
1665
|
+
);
|
|
1666
|
+
}
|
|
1667
|
+
return{
|
|
1668
|
+
stable:false,
|
|
1669
|
+
fields:[],
|
|
1670
|
+
disabled:KEY_DEPENDENT_FEATURES.slice(),
|
|
1671
|
+
key(data,index){
|
|
1672
|
+
if(data===null||typeof data!=='object'){
|
|
1673
|
+
return`#${index??0}:${String(data)}`;
|
|
1674
|
+
}
|
|
1675
|
+
let assigned=autoKeys.get(data);
|
|
1676
|
+
if(assigned===undefined){
|
|
1677
|
+
assigned=`#${autoKeySeq++}`;
|
|
1678
|
+
autoKeys.set(data,assigned);
|
|
1679
|
+
}
|
|
1680
|
+
return assigned;
|
|
1681
|
+
},
|
|
1682
|
+
};
|
|
1683
|
+
}
|
|
1684
|
+
const autoKeys=new WeakMap();
|
|
1685
|
+
let autoKeySeq=0;
|
|
1686
|
+
function warnMissingKeys(resolver,rows){
|
|
1687
|
+
if(!resolver||resolver.stable===false||!isFunction(resolver.keyEmpty))return;
|
|
1688
|
+
if(!Array.isArray(rows)||rows.length===0)return;
|
|
1689
|
+
let missing=0;
|
|
1690
|
+
let sampleFields=null;
|
|
1691
|
+
let sampleData;
|
|
1692
|
+
for(let i=0;i<rows.length;i++){
|
|
1693
|
+
const data=rows[i];
|
|
1694
|
+
if(!resolver.keyEmpty(data))continue;
|
|
1695
|
+
missing++;
|
|
1696
|
+
if(sampleFields===null){
|
|
1697
|
+
sampleFields=isFunction(resolver.missingFields)?resolver.missingFields(data):[];
|
|
1698
|
+
sampleData=data;
|
|
1699
|
+
}
|
|
1700
|
+
}
|
|
1701
|
+
if(missing===0)return;
|
|
1702
|
+
const dedupFields=resolver.fields.length?resolver.fields.join(','):'(function)';
|
|
1703
|
+
const named=sampleFields&&sampleFields.length
|
|
1704
|
+
?sampleFields.join(', ')
|
|
1705
|
+
:(resolver.fields.length?resolver.fields.join(', '):'the rowKey function');
|
|
1706
|
+
const present=sampleData!==null&&typeof sampleData==='object'
|
|
1707
|
+
?(Object.keys((sampleData)).join(', ')||'(no fields)')
|
|
1708
|
+
:String(sampleData);
|
|
1709
|
+
warnOnce(
|
|
1710
|
+
`rowKey.emptyValue:${dedupFields}`,
|
|
1711
|
+
`rowKey ${named} is missing on ${missing} of ${rows.length} rows; the first such row has: ${present}. `
|
|
1712
|
+
+'Rows without a key value collapse onto one key, so selection, edits and rows.apply updates land on '
|
|
1713
|
+
+'whichever row now shares it. Set rowKey to a field present on every row, or fix the source data.',
|
|
1714
|
+
);
|
|
1715
|
+
}
|
|
1716
|
+
function groupPathKey(path){
|
|
1717
|
+
return compositeKey(path);
|
|
1718
|
+
}
|
|
1719
|
+
function splitPathKey(key){
|
|
1720
|
+
return key.split(SEP);
|
|
1721
|
+
}
|
|
1722
|
+
});
|
|
1549
1723
|
__def("packages/modules/data-router/devtools.js",function(__exports,__req){
|
|
1550
1724
|
'use strict';
|
|
1551
1725
|
Object.defineProperty(__exports,"mountRouterDevtools",{enumerable:true,get:function(){return mountRouterDevtools;}});
|
|
@@ -1631,8 +1805,10 @@ const warnOnce=__m0["warnOnce"];
|
|
|
1631
1805
|
const __m1=__req("packages/core/src/source/pushdown.js");
|
|
1632
1806
|
const planQuery=__m1["planQuery"];
|
|
1633
1807
|
const capabilitiesOf=__m1["capabilitiesOf"];
|
|
1634
|
-
const __m2=__req("packages/
|
|
1635
|
-
const
|
|
1808
|
+
const __m2=__req("packages/core/src/model/rowkey.js");
|
|
1809
|
+
const compositeKey=__m2["compositeKey"];
|
|
1810
|
+
const __m3=__req("packages/modules/data-router/devtools.js");
|
|
1811
|
+
const mountRouterDevtools=__m3["mountRouterDevtools"];
|
|
1636
1812
|
function resolver(spec,fallback){
|
|
1637
1813
|
if(typeof spec==='function')return spec;
|
|
1638
1814
|
if(typeof spec==='string')return(row)=>row[spec];
|
|
@@ -1685,6 +1861,8 @@ const maxLag=(Number.isFinite(spec.maxLag)&&spec.maxLag>=0)?Math.floor(Number(sp
|
|
|
1685
1861
|
if(minInterval===0&&sample===1&&maxLag===null)return null;
|
|
1686
1862
|
return{minInterval,sample,maxLag};
|
|
1687
1863
|
}
|
|
1864
|
+
let routeSeq=0;
|
|
1865
|
+
function nextRouteId(){routeSeq+=1;return`r${routeSeq}`;}
|
|
1688
1866
|
function grouper(groupBy){
|
|
1689
1867
|
const specs=Array.isArray(groupBy)?groupBy:[groupBy];
|
|
1690
1868
|
const parts=specs.map((s)=>({name:typeof s==='string'?s:null,get:resolver(s,()=>undefined)}));
|
|
@@ -1696,7 +1874,7 @@ const v=part.get(row);
|
|
|
1696
1874
|
vals.push(v);
|
|
1697
1875
|
if(part.name)fields[part.name]=v;
|
|
1698
1876
|
}
|
|
1699
|
-
return{key:vals
|
|
1877
|
+
return{key:compositeKey(vals),fields};
|
|
1700
1878
|
};
|
|
1701
1879
|
}
|
|
1702
1880
|
function aggregateOne(spec,rows){
|
|
@@ -1865,10 +2043,25 @@ return fallbackRoute?[fallbackRoute]:[];
|
|
|
1865
2043
|
};
|
|
1866
2044
|
const applyChange=(route,change)=>{
|
|
1867
2045
|
if(change.add.length||change.update.length||change.remove.length){
|
|
1868
|
-
route.sink(change);
|
|
2046
|
+
const result=route.sink(change);
|
|
2047
|
+
warnRejectedRemovals(route,result);
|
|
1869
2048
|
}
|
|
1870
2049
|
return{added:change.add.length,updated:change.update.length,removed:change.remove.length};
|
|
1871
2050
|
};
|
|
2051
|
+
const warnRejectedRemovals=(route,result)=>{
|
|
2052
|
+
const rejected=(result)?.rejected;
|
|
2053
|
+
if(!Array.isArray(rejected)||!rejected.length)return;
|
|
2054
|
+
const removals=rejected.filter((r)=>r&&r.operation==='remove');
|
|
2055
|
+
if(!removals.length)return;
|
|
2056
|
+
const name=route.label||`route ${route.routeId}`;
|
|
2057
|
+
warnOnce(
|
|
2058
|
+
`data-router:remove-rejected:${route.routeId}`,
|
|
2059
|
+
`route "${name}" asked its target to remove ${removals.length} row(s) the target does not have`
|
|
2060
|
+
+` (for example ${JSON.stringify(String(removals[0].id))}). The rows are still on screen.`
|
|
2061
|
+
+' This is a key mismatch: the key the route derives for a row is not the key the grid derives'
|
|
2062
|
+
+' for it. Check that the route\'s `rowKey` names the same value as the grid\'s.',
|
|
2063
|
+
);
|
|
2064
|
+
};
|
|
1872
2065
|
const passes=(route,row)=>{
|
|
1873
2066
|
for(const link of links){
|
|
1874
2067
|
if(link.to!==route.grid)continue;
|
|
@@ -1906,7 +2099,9 @@ shown=new Map(summaries.map((s)=>[s.gkey,s.row]));
|
|
|
1906
2099
|
let rows=kept;
|
|
1907
2100
|
if(route.sort)rows=rows.slice().sort(route.sort);
|
|
1908
2101
|
shown=new Map();
|
|
1909
|
-
for(const row of rows)
|
|
2102
|
+
for(const row of rows){
|
|
2103
|
+
shown.set(compositeKey([route.keyOf(row)]),route.transform?route.transform(row):row);
|
|
2104
|
+
}
|
|
1910
2105
|
}
|
|
1911
2106
|
const add=[];
|
|
1912
2107
|
const update=[];
|
|
@@ -2055,6 +2250,7 @@ return()=>{};
|
|
|
2055
2250
|
};
|
|
2056
2251
|
const makeRoute=(grid,match,o)=>({
|
|
2057
2252
|
grid,
|
|
2253
|
+
routeId:nextRouteId(),
|
|
2058
2254
|
sink:targetSink(grid),
|
|
2059
2255
|
match,
|
|
2060
2256
|
keyOf:resolver(assertRowKeySpec(o.rowKey,'routes'),defaultKeyOf),
|
package/modules/devtools.d.ts
CHANGED
package/modules/devtools.min.cjs
CHANGED
package/modules/devtools.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, dhtmlx-compat module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -62,12 +62,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
62
62
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
63
63
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
64
64
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
65
|
-
const STAMPED_VERSION="1.
|
|
65
|
+
const STAMPED_VERSION="1.68.0";
|
|
66
66
|
async function resolveVersion(){
|
|
67
67
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
68
68
|
return STAMPED_VERSION;
|
|
69
69
|
}
|
|
70
|
-
const VERSION="1.
|
|
70
|
+
const VERSION="1.68.0";
|
|
71
71
|
const warned=new Set();
|
|
72
72
|
const WARNED_LIMIT=2000;
|
|
73
73
|
function rememberWarned(key){
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, dhtmlx-compat module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -63,12 +63,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
63
63
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
64
64
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
65
65
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
66
|
-
const STAMPED_VERSION="1.
|
|
66
|
+
const STAMPED_VERSION="1.68.0";
|
|
67
67
|
async function resolveVersion(){
|
|
68
68
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
69
69
|
return STAMPED_VERSION;
|
|
70
70
|
}
|
|
71
|
-
const VERSION="1.
|
|
71
|
+
const VERSION="1.68.0";
|
|
72
72
|
const warned=new Set();
|
|
73
73
|
const WARNED_LIMIT=2000;
|
|
74
74
|
function rememberWarned(key){
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, dhtmlx-compat module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -63,12 +63,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
63
63
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
64
64
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
65
65
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
66
|
-
const STAMPED_VERSION="1.
|
|
66
|
+
const STAMPED_VERSION="1.68.0";
|
|
67
67
|
async function resolveVersion(){
|
|
68
68
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
69
69
|
return STAMPED_VERSION;
|
|
70
70
|
}
|
|
71
|
-
const VERSION="1.
|
|
71
|
+
const VERSION="1.68.0";
|
|
72
72
|
const warned=new Set();
|
|
73
73
|
const WARNED_LIMIT=2000;
|
|
74
74
|
function rememberWarned(key){
|
package/modules/gantt.d.ts
CHANGED
package/modules/gantt.esm.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, gantt module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -52,12 +52,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
52
52
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
53
53
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
54
54
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
55
|
-
const STAMPED_VERSION="1.
|
|
55
|
+
const STAMPED_VERSION="1.68.0";
|
|
56
56
|
async function resolveVersion(){
|
|
57
57
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
58
58
|
return STAMPED_VERSION;
|
|
59
59
|
}
|
|
60
|
-
const VERSION="1.
|
|
60
|
+
const VERSION="1.68.0";
|
|
61
61
|
const warned=new Set();
|
|
62
62
|
const WARNED_LIMIT=2000;
|
|
63
63
|
function rememberWarned(key){
|
|
@@ -2406,6 +2406,8 @@ const STEPS=[1,2,2.5,5,10];
|
|
|
2406
2406
|
const MINUTE=60000;
|
|
2407
2407
|
const HOUR=3600000;
|
|
2408
2408
|
const DAY=86400000;
|
|
2409
|
+
const YEAR=365.25*DAY;
|
|
2410
|
+
const YEAR_COUNTS=[1,2,5,10,20,25,50,100];
|
|
2409
2411
|
const TIME_STEPS=[
|
|
2410
2412
|
1,5,10,25,50,100,250,500,
|
|
2411
2413
|
1000,5000,15000,30000,
|
|
@@ -2413,7 +2415,7 @@ MINUTE,5*MINUTE,15*MINUTE,30*MINUTE,
|
|
|
2413
2415
|
HOUR,3*HOUR,6*HOUR,12*HOUR,
|
|
2414
2416
|
DAY,2*DAY,7*DAY,14*DAY,
|
|
2415
2417
|
30*DAY,90*DAY,180*DAY,
|
|
2416
|
-
|
|
2418
|
+
...YEAR_COUNTS.map((years)=>years*YEAR),
|
|
2417
2419
|
];
|
|
2418
2420
|
function isNumber(v){
|
|
2419
2421
|
return typeof v==='number'&&Number.isFinite(v);
|
|
@@ -2499,12 +2501,35 @@ out.push(Math.abs(v)<step/1e6?0:Number(v.toPrecision(12)));
|
|
|
2499
2501
|
return out;
|
|
2500
2502
|
}
|
|
2501
2503
|
function timeStepFor(span,count=5){
|
|
2502
|
-
const
|
|
2503
|
-
|
|
2504
|
-
|
|
2504
|
+
const wanted=Math.max(1,count);
|
|
2505
|
+
const target=span/wanted;
|
|
2506
|
+
let picked=TIME_STEPS[TIME_STEPS.length-1];
|
|
2507
|
+
for(const candidate of TIME_STEPS){
|
|
2508
|
+
if(candidate>=target){picked=candidate;break;}
|
|
2509
|
+
}
|
|
2510
|
+
if(picked<YEAR)return picked;
|
|
2511
|
+
let best=picked;
|
|
2512
|
+
let bestDiff=Math.abs(span/picked-wanted);
|
|
2513
|
+
for(const candidate of TIME_STEPS){
|
|
2514
|
+
if(candidate<YEAR)continue;
|
|
2515
|
+
const diff=Math.abs(span/candidate-wanted);
|
|
2516
|
+
if(diff<bestDiff){bestDiff=diff;best=candidate;}
|
|
2517
|
+
}
|
|
2518
|
+
return best;
|
|
2519
|
+
}
|
|
2520
|
+
function calendarYearTicks(domain,years){
|
|
2521
|
+
const minYear=new Date(domain.min).getUTCFullYear();
|
|
2522
|
+
let year=Math.ceil(minYear/years)*years;
|
|
2523
|
+
if(Date.UTC(year,0,1)<domain.min)year+=years;
|
|
2524
|
+
const out=[];
|
|
2525
|
+
for(;Date.UTC(year,0,1)<=domain.max;year+=years){
|
|
2526
|
+
out.push(Date.UTC(year,0,1));
|
|
2527
|
+
}
|
|
2528
|
+
return out;
|
|
2505
2529
|
}
|
|
2506
2530
|
function timeTicks(domain,count=5){
|
|
2507
2531
|
const step=timeStepFor(domain.max-domain.min,count);
|
|
2532
|
+
if(step>=YEAR)return calendarYearTicks(domain,Math.round(step/YEAR));
|
|
2508
2533
|
const out=[];
|
|
2509
2534
|
const first=Math.ceil(domain.min/step)*step;
|
|
2510
2535
|
for(let t=first;t<=domain.max;t+=step)out.push(t);
|
package/modules/gantt.min.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, gantt module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
54
54
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
55
55
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
56
56
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
57
|
-
const STAMPED_VERSION="1.
|
|
57
|
+
const STAMPED_VERSION="1.68.0";
|
|
58
58
|
async function resolveVersion(){
|
|
59
59
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
60
60
|
return STAMPED_VERSION;
|
|
61
61
|
}
|
|
62
|
-
const VERSION="1.
|
|
62
|
+
const VERSION="1.68.0";
|
|
63
63
|
const warned=new Set();
|
|
64
64
|
const WARNED_LIMIT=2000;
|
|
65
65
|
function rememberWarned(key){
|
|
@@ -2408,6 +2408,8 @@ const STEPS=[1,2,2.5,5,10];
|
|
|
2408
2408
|
const MINUTE=60000;
|
|
2409
2409
|
const HOUR=3600000;
|
|
2410
2410
|
const DAY=86400000;
|
|
2411
|
+
const YEAR=365.25*DAY;
|
|
2412
|
+
const YEAR_COUNTS=[1,2,5,10,20,25,50,100];
|
|
2411
2413
|
const TIME_STEPS=[
|
|
2412
2414
|
1,5,10,25,50,100,250,500,
|
|
2413
2415
|
1000,5000,15000,30000,
|
|
@@ -2415,7 +2417,7 @@ MINUTE,5*MINUTE,15*MINUTE,30*MINUTE,
|
|
|
2415
2417
|
HOUR,3*HOUR,6*HOUR,12*HOUR,
|
|
2416
2418
|
DAY,2*DAY,7*DAY,14*DAY,
|
|
2417
2419
|
30*DAY,90*DAY,180*DAY,
|
|
2418
|
-
|
|
2420
|
+
...YEAR_COUNTS.map((years)=>years*YEAR),
|
|
2419
2421
|
];
|
|
2420
2422
|
function isNumber(v){
|
|
2421
2423
|
return typeof v==='number'&&Number.isFinite(v);
|
|
@@ -2501,12 +2503,35 @@ out.push(Math.abs(v)<step/1e6?0:Number(v.toPrecision(12)));
|
|
|
2501
2503
|
return out;
|
|
2502
2504
|
}
|
|
2503
2505
|
function timeStepFor(span,count=5){
|
|
2504
|
-
const
|
|
2505
|
-
|
|
2506
|
-
|
|
2506
|
+
const wanted=Math.max(1,count);
|
|
2507
|
+
const target=span/wanted;
|
|
2508
|
+
let picked=TIME_STEPS[TIME_STEPS.length-1];
|
|
2509
|
+
for(const candidate of TIME_STEPS){
|
|
2510
|
+
if(candidate>=target){picked=candidate;break;}
|
|
2511
|
+
}
|
|
2512
|
+
if(picked<YEAR)return picked;
|
|
2513
|
+
let best=picked;
|
|
2514
|
+
let bestDiff=Math.abs(span/picked-wanted);
|
|
2515
|
+
for(const candidate of TIME_STEPS){
|
|
2516
|
+
if(candidate<YEAR)continue;
|
|
2517
|
+
const diff=Math.abs(span/candidate-wanted);
|
|
2518
|
+
if(diff<bestDiff){bestDiff=diff;best=candidate;}
|
|
2519
|
+
}
|
|
2520
|
+
return best;
|
|
2521
|
+
}
|
|
2522
|
+
function calendarYearTicks(domain,years){
|
|
2523
|
+
const minYear=new Date(domain.min).getUTCFullYear();
|
|
2524
|
+
let year=Math.ceil(minYear/years)*years;
|
|
2525
|
+
if(Date.UTC(year,0,1)<domain.min)year+=years;
|
|
2526
|
+
const out=[];
|
|
2527
|
+
for(;Date.UTC(year,0,1)<=domain.max;year+=years){
|
|
2528
|
+
out.push(Date.UTC(year,0,1));
|
|
2529
|
+
}
|
|
2530
|
+
return out;
|
|
2507
2531
|
}
|
|
2508
2532
|
function timeTicks(domain,count=5){
|
|
2509
2533
|
const step=timeStepFor(domain.max-domain.min,count);
|
|
2534
|
+
if(step>=YEAR)return calendarYearTicks(domain,Math.round(step/YEAR));
|
|
2510
2535
|
const out=[];
|
|
2511
2536
|
const first=Math.ceil(domain.min/step)*step;
|
|
2512
2537
|
for(let t=first;t<=domain.max;t+=step)out.push(t);
|
package/modules/gantt.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Lattice Grid 1.
|
|
2
|
+
* Lattice Grid 1.68.0, gantt module
|
|
3
3
|
* Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
|
|
4
4
|
* https://latticegrid.dev
|
|
5
5
|
*/
|
|
@@ -54,12 +54,12 @@ Object.defineProperty(__exports,"frameBatched",{enumerable:true,get:function(){r
|
|
|
54
54
|
Object.defineProperty(__exports,"settleDebounce",{enumerable:true,get:function(){return settleDebounce;}});
|
|
55
55
|
Object.defineProperty(__exports,"whenIdle",{enumerable:true,get:function(){return whenIdle;}});
|
|
56
56
|
Object.defineProperty(__exports,"uid",{enumerable:true,get:function(){return uid;}});
|
|
57
|
-
const STAMPED_VERSION="1.
|
|
57
|
+
const STAMPED_VERSION="1.68.0";
|
|
58
58
|
async function resolveVersion(){
|
|
59
59
|
if(STAMPED_VERSION!=='0.0.0-source')return STAMPED_VERSION;
|
|
60
60
|
return STAMPED_VERSION;
|
|
61
61
|
}
|
|
62
|
-
const VERSION="1.
|
|
62
|
+
const VERSION="1.68.0";
|
|
63
63
|
const warned=new Set();
|
|
64
64
|
const WARNED_LIMIT=2000;
|
|
65
65
|
function rememberWarned(key){
|
|
@@ -2408,6 +2408,8 @@ const STEPS=[1,2,2.5,5,10];
|
|
|
2408
2408
|
const MINUTE=60000;
|
|
2409
2409
|
const HOUR=3600000;
|
|
2410
2410
|
const DAY=86400000;
|
|
2411
|
+
const YEAR=365.25*DAY;
|
|
2412
|
+
const YEAR_COUNTS=[1,2,5,10,20,25,50,100];
|
|
2411
2413
|
const TIME_STEPS=[
|
|
2412
2414
|
1,5,10,25,50,100,250,500,
|
|
2413
2415
|
1000,5000,15000,30000,
|
|
@@ -2415,7 +2417,7 @@ MINUTE,5*MINUTE,15*MINUTE,30*MINUTE,
|
|
|
2415
2417
|
HOUR,3*HOUR,6*HOUR,12*HOUR,
|
|
2416
2418
|
DAY,2*DAY,7*DAY,14*DAY,
|
|
2417
2419
|
30*DAY,90*DAY,180*DAY,
|
|
2418
|
-
|
|
2420
|
+
...YEAR_COUNTS.map((years)=>years*YEAR),
|
|
2419
2421
|
];
|
|
2420
2422
|
function isNumber(v){
|
|
2421
2423
|
return typeof v==='number'&&Number.isFinite(v);
|
|
@@ -2501,12 +2503,35 @@ out.push(Math.abs(v)<step/1e6?0:Number(v.toPrecision(12)));
|
|
|
2501
2503
|
return out;
|
|
2502
2504
|
}
|
|
2503
2505
|
function timeStepFor(span,count=5){
|
|
2504
|
-
const
|
|
2505
|
-
|
|
2506
|
-
|
|
2506
|
+
const wanted=Math.max(1,count);
|
|
2507
|
+
const target=span/wanted;
|
|
2508
|
+
let picked=TIME_STEPS[TIME_STEPS.length-1];
|
|
2509
|
+
for(const candidate of TIME_STEPS){
|
|
2510
|
+
if(candidate>=target){picked=candidate;break;}
|
|
2511
|
+
}
|
|
2512
|
+
if(picked<YEAR)return picked;
|
|
2513
|
+
let best=picked;
|
|
2514
|
+
let bestDiff=Math.abs(span/picked-wanted);
|
|
2515
|
+
for(const candidate of TIME_STEPS){
|
|
2516
|
+
if(candidate<YEAR)continue;
|
|
2517
|
+
const diff=Math.abs(span/candidate-wanted);
|
|
2518
|
+
if(diff<bestDiff){bestDiff=diff;best=candidate;}
|
|
2519
|
+
}
|
|
2520
|
+
return best;
|
|
2521
|
+
}
|
|
2522
|
+
function calendarYearTicks(domain,years){
|
|
2523
|
+
const minYear=new Date(domain.min).getUTCFullYear();
|
|
2524
|
+
let year=Math.ceil(minYear/years)*years;
|
|
2525
|
+
if(Date.UTC(year,0,1)<domain.min)year+=years;
|
|
2526
|
+
const out=[];
|
|
2527
|
+
for(;Date.UTC(year,0,1)<=domain.max;year+=years){
|
|
2528
|
+
out.push(Date.UTC(year,0,1));
|
|
2529
|
+
}
|
|
2530
|
+
return out;
|
|
2507
2531
|
}
|
|
2508
2532
|
function timeTicks(domain,count=5){
|
|
2509
2533
|
const step=timeStepFor(domain.max-domain.min,count);
|
|
2534
|
+
if(step>=YEAR)return calendarYearTicks(domain,Math.round(step/YEAR));
|
|
2510
2535
|
const out=[];
|
|
2511
2536
|
const first=Math.ceil(domain.min/step)*step;
|
|
2512
2537
|
for(let t=first;t<=domain.max;t+=step)out.push(t);
|
package/modules/geo-uk.d.ts
CHANGED