@ulb-darmstadt/shacl-form 3.1.1 → 3.2.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 +28 -8
- package/dist/assets/mode-BriAnl-6.js +13 -0
- package/dist/assets/mode-f6xgDLiM.js +13 -0
- package/dist/assets/query-CpoZo0uf.js +501 -0
- package/dist/assets/query-DLp_5-vp.js +84 -0
- package/dist/bundle.d.ts +3 -3
- package/dist/bundle.js +34 -447
- package/dist/config.d.ts +13 -5
- package/dist/constants.d.ts +3 -0
- package/dist/constraints.d.ts +3 -3
- package/dist/exports.d.ts +11 -10
- package/dist/form.d.ts +12 -6
- package/dist/graph-loader.d.ts +2 -2
- package/dist/group.d.ts +1 -1
- package/dist/index.js +6 -87
- package/dist/linker.d.ts +4 -4
- package/dist/node-template.d.ts +2 -2
- package/dist/node.d.ts +9 -4
- package/dist/plugin.d.ts +3 -1
- package/dist/plugins/file-upload.d.ts +2 -2
- package/dist/plugins/leaflet.d.ts +7 -4
- package/dist/plugins/leaflet.js +18 -10
- package/dist/property-template.d.ts +2 -2
- package/dist/property.d.ts +4 -2
- package/dist/query/editor.d.ts +3 -0
- package/dist/query/index.d.ts +55 -0
- package/dist/query/mode.d.ts +24 -0
- package/dist/query/sparql.d.ts +75 -0
- package/dist/rdf-loader.d.ts +1 -1
- package/dist/serialize.d.ts +1 -1
- package/dist/sparql.js +9 -0
- package/dist/theme.d.ts +1 -1
- package/dist/theme.default.d.ts +2 -2
- package/dist/util.d.ts +2 -2
- package/package.json +36 -17
- package/src/query/query-mode.md +319 -0
package/dist/plugins/leaflet.js
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import{a as e,i as t,n,o as r,r as i,t as a}from"./assets/property-template-DahfpzrJ.js";import*as o from"leaflet";import"leaflet-editable/src/Leaflet.Editable.js";import s from"leaflet/dist/leaflet.css?raw";import c from"leaflet.fullscreen/Control.FullScreen.css?raw";import"leaflet.fullscreen/
|
|
2
|
-
#shaclMapDialog .closeButton { position: absolute; right: 0; top: 0; z-index:
|
|
1
|
+
import{a as e,i as t,n,o as r,r as i,t as a}from"./assets/property-template-DahfpzrJ.js";import*as o from"leaflet";import"leaflet-editable/src/Leaflet.Editable.js";import s from"leaflet/dist/leaflet.css?raw";import c from"leaflet.fullscreen/dist/Control.FullScreen.css?raw";import"leaflet.fullscreen";import"leaflet.heat/dist/leaflet-heat.js";import{RokitButton as l}from"@ro-kit/ui-widgets";import{DataFactory as u,Literal as d}from"n3";function f(r,o,s){if(s){let s=a(r)>0;if(r.class&&!r.hasValue)return r.config.theme.createListEditor(r.label,o,s,i(r.class,r),r);if(r.in){let e=r.config.lists[r.in];if(e?.length){let t=n(e,r.config.store,r.config.languages);return r.config.theme.createListEditor(r.label,o,s,t,r)}else console.error(`list not found:`,r.in,`existing lists:`,r.config.lists)}if(r.datatype?.equals(e)||r.languageIn?.length||r.datatype===void 0&&o instanceof d&&o.language)return r.config.theme.createLangStringEditor(r.label,o,s,r);switch(r.datatype?.value.replace(t,``)){case`integer`:case`float`:case`double`:case`decimal`:return r.config.theme.createNumberEditor(r.label,o,s,r);case`date`:case`dateTime`:return r.config.theme.createDateEditor(r.label,o,s,r);case`boolean`:return r.config.theme.createBooleanEditor(r.label,o,s,r);case`base64Binary`:return r.config.theme.createFileEditor(r.label,o,s,r)}return r.config.theme.createTextEditor(r.label,o,s,r)}else return o?r.config.theme.createViewer(r.label,o,r):document.createElement(`div`)}var p=c.replace(`:root`,`:host`),m=`
|
|
2
|
+
#shaclMapDialog .closeButton { position: absolute; right: 0; top: 0; z-index: 1000; padding: 6px 8px; cursor: pointer; border: 0; background-color: #FFFA; font-size: 24px; }
|
|
3
3
|
#shaclMapDialog { padding: 0; width:90vw; height: 90vh; margin: auto; }
|
|
4
4
|
#shaclMapDialog::backdrop { background-color: #0007; }
|
|
5
5
|
#shaclMapDialog .closeButton:hover { background-color: #FFF }
|
|
6
|
-
#shaclMapDialog .hint { position: absolute; right: 60px; top: 3px; z-index:
|
|
6
|
+
#shaclMapDialog .hint { position: absolute; right: 60px; top: 3px; z-index: 1000; padding: 4px 6px; background-color: #FFFA; border-radius: 4px; pointer-events: none; }
|
|
7
7
|
.leaflet-container { min-height: 300px; }
|
|
8
|
-
.fullscreen-icon { background-image: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjYgNTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIwLjYgMzYuN0gxNmEuOS45IDAgMCAxLS44LS44di00LjVjMC0uMi4yLS40LjQtLjRoMS40Yy4zIDAgLjUuMi41LjR2M2gzYy4yIDAgLjQuMi40LjV2MS40YzAgLjItLjIuNC0uNC40em0tOS45LS44di00LjVjMC0uMi0uMi0uNC0uNC0uNEg4LjljLS4zIDAtLjUuMi0uNS40djNoLTNjLS4yIDAtLjQuMi0uNC41djEuNGMwIC4yLjIuNC40LjRIMTBjLjQgMCAuOC0uNC44LS44em0wIDEwLjdWNDJjMC0uNC0uNC0uOC0uOC0uOEg1LjRjLS4yIDAtLjQuMi0uNC40djEuNGMwIC4zLjIuNS40LjVoM3YzYzAgLjIuMi40LjUuNGgxLjRjLjIgMCAuNC0uMi40LS40em02LjkgMHYtM2gzYy4yIDAgLjQtLjIuNC0uNXYtMS40YzAtLjItLjItLjQtLjQtLjRIMTZjLS40IDAtLjguNC0uOC44djQuNWMwIC4yLjIuNC40LjRoMS40Yy4zIDAgLjUtLjIuNS0uNHpNNSAxMC4zVjUuOWMwLS41LjQtLjkuOS0uOWg0LjRjLjIgMCAuNC4yLjQuNFY3YzAgLjItLjIuNC0uNC40aC0zdjNjMCAuMi0uMi40LS40LjRINS40YS40LjQgMCAwIDEtLjQtLjR6bTEwLjMtNC45VjdjMCAuMi4yLjQuNC40aDN2M2MwIC4yLjIuNC40LjRoMS41Yy4yIDAgLjQtLjIuNC0uNFY1LjljMC0uNS0uNC0uOS0uOS0uOWgtNC40Yy0uMiAwLS40LjItLjQuNHptNS4zIDkuOUgxOWMtLjIgMC0uNC4yLS40LjR2M2gtM2MtLjIgMC0uNC4yLS40LjR2MS41YzAgLjIuMi40LjQuNGg0LjRjLjUgMCAuOS0uNC45LS45di00LjRjMC0uMi0uMi0uNC0uNC0uNHptLTkuOSA1LjNWMTljMC0uMi0uMi0uNC0uNC0uNGgtM3YtM2MwLS4yLS4yLS40LS40LS40SDUuNGMtLjIgMC0uNC4yLS40LjR2NC40YzAgLjUuNC45LjkuOWg0LjRjLjIgMCAuNC0uMi40LS40eiIgZmlsbD0iY3VycmVudENvbG9yIi8+PC9zdmc+); }
|
|
9
8
|
#shaclMapDialogContainer { width:100%; height: 100%; }
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
.query-editor .query-map { height: 250px; min-height: 250px; width: 100%; flex-basis: 100%; margin-top: 4px; }
|
|
10
|
+
.query-editor .query-map .leaflet-pane, .query-editor .query-map .leaflet-top { z-index: 0; }
|
|
11
|
+
.query-editor .query-map .leaflet-heatmap-layer { opacity: 0.5; }
|
|
12
|
+
.query-editor.query-map-editor { flex-wrap: wrap; align-items: stretch; }
|
|
13
|
+
.query-editor.query-map-editor > label { width: auto; flex-basis: 100%; padding-right: 0; }
|
|
14
|
+
.query-editor.query-map-editor > .query-controls { position: relative; flex-basis: 100%; }
|
|
15
|
+
.query-editor .query-map-clear { position: absolute; top: 8px; right: 8px; z-index: 1; }
|
|
16
|
+
.query-editor .query-map-clear::part(button) { background-color: rgba(255, 255, 255, 0.9); }
|
|
17
|
+
.query-editor .query-map-clear[hidden] { display: none; }
|
|
18
|
+
`,h=`
|
|
19
|
+
<dialog id="shaclMapDialog">
|
|
12
20
|
<div id="shaclMapDialogContainer"></div>
|
|
13
21
|
<div class="hint">ⓘ Draw a polygon or marker, then close dialog</div>
|
|
14
|
-
<button class="closeButton" type="button"
|
|
15
|
-
</dialog>`,
|
|
16
|
-
`+
|
|
17
|
-
`+
|
|
22
|
+
<button class="closeButton" type="button">✕</button>
|
|
23
|
+
</dialog>`,g={lng:8.657238961696038,lat:49.87627570549512},_=`© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>`,v=`https://tile.openstreetmap.de/{z}/{x}/{y}.png`,y=o.icon({iconUrl:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=`,shadowUrl:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC`,iconSize:[25,41],shadowSize:[41,41],iconAnchor:[12,41],shadowAnchor:[14,41],popupAnchor:[-3,-76]});function b(e,t){return o.map(e,{...t,layers:[o.tileLayer(v)]})}function x(e,t){return window.L.heatLayer(e,{maxZoom:t})}function S(e,t,n){return new(o.Control.extend({options:{position:`topleft`},onAdd:()=>{let r=o.DomUtil.create(`div`,`leaflet-control leaflet-bar`),i=o.DomUtil.create(`a`,``,r);return i.href=`#`,i.title=e,i.innerHTML=t,o.DomEvent.on(i,`click`,o.DomEvent.stop).on(i,`click`,n),r}}))}var C=class extends r{constructor(e){super(e,s+`
|
|
24
|
+
`+p+`
|
|
25
|
+
`+m)}initEditMode(e){e.insertAdjacentHTML(`beforeend`,h);let t=e.querySelector(`#shaclMapDialogContainer`);this.map=b(t,{fullscreenControl:!0,editable:!0,zoom:5,maxBounds:A,center:g}),this.map.attributionControl.addAttribution(_);let n=this.map;this.map.addControl(S(`Create a new polygon`,`▰`,()=>{this.displayedShape?.remove(),this.displayedShape=n.editTools.startPolygon()})),this.map.addControl(S(`Create a new marker`,`•`,()=>{this.displayedShape?.remove(),this.displayedShape=n.editTools.startMarker(void 0,{icon:y})})),this.map.on(`editable:drawing:end editable:vertex:dragend`,()=>{this.saveChanges()});let r=e.querySelector(`#shaclMapDialog`);return r.addEventListener(`click`,e=>{e.target===r&&r.close()}),r.querySelector(`.closeButton`)?.addEventListener(`click`,()=>r.close()),r.addEventListener(`close`,()=>{let e=document.body.style.top;document.body.style.position=``,document.body.style.top=``,window.scrollTo(0,parseInt(e||`0`)*-1),this.currentEditor&&this.createdGeometry&&(this.currentEditor.value=N(this.createdGeometry),this.currentEditor.dispatchEvent(new Event(`change`,{bubbles:!0})))}),r}createEditor(e,t){let n=e.config.form.querySelector(`#shaclMapDialog`);n||=this.initEditMode(e.config.form);let r=e.config.theme.createButton(`Open map...`,!1);r.style.marginLeft=`5px`,r.classList.add(`open-map-button`),r.onclick=()=>{this.currentEditor=i.querySelector(`.editor`),this.createdGeometry=void 0,this.displayedShape?.remove(),this.drawAndZoomToGeometry(j(this.currentEditor.value||``),this.map),document.body.style.top=`-${window.scrollY}px`,document.body.style.position=`fixed`,n.showModal()};let i=f(e,t||null,!0);return i.appendChild(r),i}createQueryEditor(e,t){let n=document.createElement(`div`);n.classList.add(`query-editor`,`query-map-editor`),n.dataset.queryFieldId=e.id,n.setAttribute(`part`,`query-editor`);let r=document.createElement(`label`);r.textContent=t.label,t.description&&(r.title=t.description.value),n.appendChild(r);let i=document.createElement(`div`);i.classList.add(`query-controls`),n.appendChild(i);let a=document.createElement(`div`);a.classList.add(`query-map`),i.appendChild(a);let s=new l;s.classList.add(`clear`,`query-map-clear`),s.title=`Clear`,s.dense=t.config.theme.dense,s.icon=!0,s.hidden=!0,i.appendChild(s);let c=!1,d,f=b(a,{attributionControl:!1,fullscreenControl:!0,maxBoundsViscosity:1,trackResize:!1,zoom:0});f.fitBounds(A).setMaxBounds(A),f.on(`moveend`,()=>{c=f.getZoom()>0,s.hidden=!c;let e=c?T(f.getBounds()):void 0;e!==d&&(d=e,n.dispatchEvent(new Event(`change`,{bubbles:!0})))}),s.addEventListener(`click`,e=>{e.stopPropagation(),f.fitBounds(A,{animate:!1})});let p,m=o.featureGroup().addTo(f),h=e=>{if(m.clearLayers(),p=void 0,e)if(e.heatmap){if(!w(f,a)){p=e;return}let t=P(e.heatmap);t.length&&x(t,f.getZoom()||0).addTo(m)}else D(e,m)};return new ResizeObserver(()=>{a.clientWidth<=0||a.clientHeight<=0||(f.invalidateSize({debounceMoveend:!0}),p&&h(p))}).observe(a),n.getQueryCriteria=()=>!c||!d?[]:[{field:e,operator:`equals`,value:u.literal(d,t.datatype)}],n.setQueryFacet=h,n}createViewer(e,t){let n=document.createElement(`div`),r=j(t.value);if(r){let e=b(n,{fullscreenControl:!0,zoom:5,center:g,maxBounds:A});e.attributionControl.addAttribution(_),k(r,e)}return n}drawAndZoomToGeometry(e,t){this.displayedShape=k(e,t)}saveChanges(){if(this.displayedShape instanceof o.Marker){let{lng:e,lat:t}=this.displayedShape.getLatLng();this.createdGeometry={type:`Point`,coordinates:[e,t]};return}if(this.displayedShape instanceof o.Polygon){let e=this.displayedShape.getLatLngs()[0];if(!e.length){this.createdGeometry=void 0;return}let t=e.map(({lng:e,lat:t})=>[e,t]);e[0].equals(e[e.length-1])||t.push([...t[0]]),this.createdGeometry={type:`Polygon`,coordinates:[t]};return}this.createdGeometry=void 0}};function w(e,t){let n=t.getBoundingClientRect(),r=e.getSize();return n.width>0&&n.height>0&&r.x>0&&r.y>0}function T(e){let t=E(e.getSouth(),-90,90),n=E(e.getWest(),-180,180),r=E(e.getNorth(),-90,90),i=E(e.getEast(),-180,180);return`POLYGON((${n} ${t},${i} ${t},${i} ${r},${n} ${r},${n} ${t}))`}function E(e,t,n){return Math.min(n,Math.max(t,e))}function D(e,t){if(!e.buckets?.length)return;let n=Math.max(...e.buckets.map(e=>e.count));for(let r of e.buckets){let e=j(r.value.value);if(!e)continue;let i=n>0?r.count/n:0;if(e.type===`Point`){let[n,r]=e.coordinates;o.circleMarker({lat:r,lng:n},{radius:4+i*16,fillColor:`#3388ff`,fillOpacity:.4+i*.4,color:`#3388ff`,weight:1}).addTo(t)}else o.polygon(O(e.coordinates[0]),{fillColor:`#3388ff`,fillOpacity:.15+i*.35,color:`#3388ff`,weight:1}).addTo(t)}}function O(e){return e.map(([e,t])=>({lat:t,lng:e}))}function k(e,t){if(setTimeout(()=>t.invalidateSize()),e?.type===`Point`){let[n,r]=e.coordinates,i={lng:n,lat:r},a=o.marker(i,{icon:y}).addTo(t);return t.setView(i,15,{animate:!1}),a}if(e?.type===`Polygon`){let n=o.polygon(O(e.coordinates[0])).addTo(t),r=n.getBounds();return t.fitBounds(r,{animate:!1}),setTimeout(()=>{t.fitBounds(r,{animate:!1}),t.setView(n.getCenter(),void 0,{animate:!1})},1),n}t.setZoom(5)}var A=[[-90,-180],[90,180]];function j(e){let t=e.match(/^POINT\s*\(\s*([^()]+)\s*\)$/i);if(t){let e=M(t[1]);return e?{type:`Point`,coordinates:e}:void 0}let n=e.match(/^POLYGON\s*\(\(\s*(.*?)\s*\)\)$/i);if(!n)return;let r=n[1].split(`,`).map(M);if(!(r.length<3||r.some(e=>!e)))return{type:`Polygon`,coordinates:[r]}}function M(e){let t=e.trim().split(/\s+/).map(Number);return t.length===2&&t.every(Number.isFinite)?t:void 0}function N(e){return e.type===`Point`?`POINT(${e.coordinates.join(` `)})`:`POLYGON((${e.coordinates[0].map(e=>e.join(` `)).join(`,`)}))`}function P(e){let t=[];if(e.columns<=0||e.rows<=0||!Number.isFinite(e.minX)||!Number.isFinite(e.maxX)||!Number.isFinite(e.minY)||!Number.isFinite(e.maxY))return t;let n=(e.maxX-e.minX)/e.columns,r=(e.maxY-e.minY)/e.rows;for(let i=0;i<Math.min(e.rows,e.counts.length);i++){let a=e.counts[i];if(a!==null)for(let o=0;o<Math.min(e.columns,a.length);o++){if(!Number.isFinite(a[o])||a[o]<=0)continue;let s=e.maxY-(i+.5)*r,c=e.minX+(o+.5)*n;t.push([s,c,a[o]])}}return t}export{C as LeafletPlugin,N as geometryToWkt,j as wktToGeometry,A as worldBounds};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Literal, NamedNode, Quad } from 'n3';
|
|
2
2
|
import { Term } from '@rdfjs/types';
|
|
3
|
-
import { Config } from './config';
|
|
4
|
-
import { ShaclNodeTemplate } from './node-template';
|
|
3
|
+
import { Config } from './config.js';
|
|
4
|
+
import { ShaclNodeTemplate } from './node-template.js';
|
|
5
5
|
export declare const mappers: Record<string, (template: ShaclPropertyTemplate, term: Term) => void>;
|
|
6
6
|
export declare class ShaclPropertyTemplate {
|
|
7
7
|
label: string;
|
package/dist/property.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { BlankNode, NamedNode, Quad, Store } from 'n3';
|
|
2
2
|
import { Term } from '@rdfjs/types';
|
|
3
|
-
import { ShaclNode } from './node';
|
|
4
|
-
import { ShaclPropertyTemplate } from './property-template';
|
|
3
|
+
import { ShaclNode } from './node.js';
|
|
4
|
+
import { ShaclPropertyTemplate } from './property-template.js';
|
|
5
5
|
export declare class ShaclProperty extends HTMLElement {
|
|
6
6
|
template: ShaclPropertyTemplate;
|
|
7
7
|
container: HTMLElement;
|
|
8
8
|
parent: ShaclNode;
|
|
9
9
|
constructor(template: ShaclPropertyTemplate, parent: ShaclNode);
|
|
10
10
|
bindValues(valueSubject: NamedNode | BlankNode | undefined, multiValuedPath?: boolean): Promise<void>;
|
|
11
|
+
initializeQuery(): Promise<void>;
|
|
11
12
|
addPropertyInstance(value?: Term, linked?: boolean, forceRemovable?: boolean): Promise<HTMLElement | undefined>;
|
|
12
13
|
updateControls(): Promise<void>;
|
|
13
14
|
instanceCount(): number;
|
|
@@ -17,3 +18,4 @@ export declare class ShaclProperty extends HTMLElement {
|
|
|
17
18
|
createAddControls(): Promise<HTMLDivElement>;
|
|
18
19
|
}
|
|
19
20
|
export declare function createPropertyInstance(template: ShaclPropertyTemplate, value?: Term, forceRemovable?: boolean, linked?: boolean, parentNode?: ShaclNode): Promise<HTMLElement>;
|
|
21
|
+
export declare function createRemoveButtonWrapper(colorize: boolean): HTMLDivElement;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Term } from '@rdfjs/types';
|
|
2
|
+
export type QueryField = {
|
|
3
|
+
id: string;
|
|
4
|
+
path: string[];
|
|
5
|
+
shapePath?: string[];
|
|
6
|
+
datatype?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function isRangeQueryField(field: QueryField): boolean;
|
|
9
|
+
export type QueryCriterion = {
|
|
10
|
+
field: QueryField;
|
|
11
|
+
operator: 'contains' | 'equals' | 'range';
|
|
12
|
+
value?: Term;
|
|
13
|
+
min?: Term;
|
|
14
|
+
max?: Term;
|
|
15
|
+
};
|
|
16
|
+
export type Query = {
|
|
17
|
+
rootShapeId: string;
|
|
18
|
+
targetClass?: string;
|
|
19
|
+
criteria: QueryCriterion[];
|
|
20
|
+
};
|
|
21
|
+
export type HeatmapGrid = {
|
|
22
|
+
columns: number;
|
|
23
|
+
rows: number;
|
|
24
|
+
minX: number;
|
|
25
|
+
maxX: number;
|
|
26
|
+
minY: number;
|
|
27
|
+
maxY: number;
|
|
28
|
+
counts: number[][];
|
|
29
|
+
};
|
|
30
|
+
export type QueryFacet = {
|
|
31
|
+
fieldId: string;
|
|
32
|
+
count: number;
|
|
33
|
+
buckets?: {
|
|
34
|
+
value: Term;
|
|
35
|
+
label?: string;
|
|
36
|
+
count: number;
|
|
37
|
+
}[];
|
|
38
|
+
min?: Term;
|
|
39
|
+
max?: Term;
|
|
40
|
+
heatmap?: HeatmapGrid;
|
|
41
|
+
error?: boolean;
|
|
42
|
+
};
|
|
43
|
+
export type QueryFacetRequest = {
|
|
44
|
+
query: Query;
|
|
45
|
+
fields: QueryField[];
|
|
46
|
+
signal: AbortSignal;
|
|
47
|
+
};
|
|
48
|
+
export interface QueryFacetProvider {
|
|
49
|
+
getFacets(request: QueryFacetRequest): Promise<QueryFacet[]>;
|
|
50
|
+
}
|
|
51
|
+
export type QueryEditor = HTMLElement & {
|
|
52
|
+
queryField: QueryField;
|
|
53
|
+
getQueryCriteria: () => QueryCriterion[];
|
|
54
|
+
setQueryFacet: (facet?: QueryFacet) => void;
|
|
55
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ShaclForm } from '../form.js';
|
|
2
|
+
import { ShaclProperty } from '../property.js';
|
|
3
|
+
import { ShaclPropertyTemplate } from '../property-template.js';
|
|
4
|
+
import type { Query } from './index.js';
|
|
5
|
+
export declare class QueryModeController {
|
|
6
|
+
readonly stylesheet: CSSStyleSheet;
|
|
7
|
+
private readonly host;
|
|
8
|
+
private facetAbortController?;
|
|
9
|
+
private facetRequest;
|
|
10
|
+
private facetsApplied;
|
|
11
|
+
constructor(host: ShaclForm);
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
handleChange(): void;
|
|
14
|
+
getQuery(): Query;
|
|
15
|
+
refreshFacets(): void;
|
|
16
|
+
dispose(): void;
|
|
17
|
+
private emitQueryAndRefreshFacets;
|
|
18
|
+
private requestFacets;
|
|
19
|
+
private applyFacets;
|
|
20
|
+
private setFacetsPending;
|
|
21
|
+
}
|
|
22
|
+
export declare function initializeQueryProperty(property: ShaclProperty): Promise<void>;
|
|
23
|
+
export declare function activateNodeConstraintOption(properties: ShaclProperty[], constraintElement: HTMLElement): Promise<void>;
|
|
24
|
+
export declare function activatePropertyConstraintOption(template: ShaclPropertyTemplate, context: ShaclProperty, constraintElement: HTMLElement): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { NamedNode } from 'n3';
|
|
2
|
+
import { Term } from '@rdfjs/types';
|
|
3
|
+
import { QueryFacet, QueryFacetRequest, QueryField, QueryFacetProvider, Query } from './index.js';
|
|
4
|
+
export type SparqlDatasetScope = {
|
|
5
|
+
type: 'default';
|
|
6
|
+
} | {
|
|
7
|
+
type: 'named';
|
|
8
|
+
graph?: NamedNode;
|
|
9
|
+
};
|
|
10
|
+
export type SparqlRootPatternContext = {
|
|
11
|
+
query: Query;
|
|
12
|
+
rootVariable: string;
|
|
13
|
+
graphVariable?: string;
|
|
14
|
+
};
|
|
15
|
+
export type SparqlQueryBuilderOptions = {
|
|
16
|
+
dataset?: SparqlDatasetScope;
|
|
17
|
+
rootPattern?: (context: SparqlRootPatternContext) => string;
|
|
18
|
+
caseSensitive?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type SparqlSelectOptions = {
|
|
21
|
+
projection?: string[];
|
|
22
|
+
distinct?: boolean;
|
|
23
|
+
orderBy?: string;
|
|
24
|
+
limit?: number;
|
|
25
|
+
offset?: number;
|
|
26
|
+
};
|
|
27
|
+
export type SparqlBindingValue = {
|
|
28
|
+
type: 'uri' | 'literal' | 'typed-literal' | 'bnode';
|
|
29
|
+
value: string;
|
|
30
|
+
datatype?: string;
|
|
31
|
+
'xml:lang'?: string;
|
|
32
|
+
};
|
|
33
|
+
export type SparqlSelectResult = {
|
|
34
|
+
head?: {
|
|
35
|
+
vars?: string[];
|
|
36
|
+
};
|
|
37
|
+
results: {
|
|
38
|
+
bindings: Record<string, SparqlBindingValue>[];
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export type SparqlSelectExecutor = (query: string, signal: AbortSignal) => Promise<SparqlSelectResult>;
|
|
42
|
+
export type SparqlQueryProviderOptions = SparqlQueryBuilderOptions & {
|
|
43
|
+
bucketLimit?: number;
|
|
44
|
+
headers?: Record<string, string>;
|
|
45
|
+
onError?: (error: unknown, field: QueryField) => void;
|
|
46
|
+
};
|
|
47
|
+
export declare class SparqlQueryBuilder {
|
|
48
|
+
readonly options: SparqlQueryBuilderOptions;
|
|
49
|
+
constructor(options?: SparqlQueryBuilderOptions);
|
|
50
|
+
buildWhere(query: Query): string;
|
|
51
|
+
buildSelect(query: Query, options?: SparqlSelectOptions): string;
|
|
52
|
+
buildFacetSelect(request: QueryFacetRequest, field: QueryField, bucketLimit?: number): string;
|
|
53
|
+
buildFacetsSelect(request: QueryFacetRequest, bucketLimit?: number): string;
|
|
54
|
+
private rootPattern;
|
|
55
|
+
/**
|
|
56
|
+
* Builds SPARQL patterns for each criterion. Variable names are scoped by prefix:
|
|
57
|
+
* - `criterion_{fieldIndex}_{pathHop}` for intermediate path nodes
|
|
58
|
+
* - `value_{criterionIndex}` for the terminal bound variable
|
|
59
|
+
* These prefixes ensure no collision with facet variables (`facet_{fieldId}_{pathHop}`).
|
|
60
|
+
*/
|
|
61
|
+
private criterionPatterns;
|
|
62
|
+
private pathPattern;
|
|
63
|
+
private wrapDataset;
|
|
64
|
+
}
|
|
65
|
+
export declare class SparqlQueryProvider implements QueryFacetProvider {
|
|
66
|
+
readonly builder: SparqlQueryBuilder;
|
|
67
|
+
readonly executor: SparqlSelectExecutor;
|
|
68
|
+
readonly bucketLimit: number;
|
|
69
|
+
readonly onError?: (error: unknown, field: QueryField) => void;
|
|
70
|
+
constructor(endpoint: string, options?: SparqlQueryProviderOptions);
|
|
71
|
+
constructor(executor: SparqlSelectExecutor, options?: SparqlQueryProviderOptions);
|
|
72
|
+
getFacets(request: QueryFacetRequest): Promise<QueryFacet[]>;
|
|
73
|
+
select(query: Query, options?: SparqlSelectOptions, signal?: AbortSignal): Promise<SparqlSelectResult>;
|
|
74
|
+
}
|
|
75
|
+
export declare function termToSparql(term: Term): string;
|
package/dist/rdf-loader.d.ts
CHANGED
package/dist/serialize.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { NamedNode, Quad, Literal, Prefixes } from 'n3';
|
|
2
|
-
import { Editor } from './theme';
|
|
2
|
+
import { Editor } from './theme.js';
|
|
3
3
|
export declare function serialize(quads: Quad[], format: string, prefixes?: Prefixes): string;
|
|
4
4
|
export declare function toRDF(editor: Editor): NamedNode | Literal | undefined;
|
package/dist/sparql.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{DataFactory as e}from"n3";e.namedNode(`loaded-shapes`),e.namedNode(`loaded-data`);var t=e.namedNode(`http://www.w3.org/1999/02/22-rdf-syntax-ns#type`);e.namedNode(`http://www.w3.org/1999/02/22-rdf-syntax-ns#langString`);var n=e.namedNode(`http://purl.org/dc/terms/conformsTo`);e.namedNode(`http://www.w3.org/2000/01/rdf-schema#subClassOf`),e.namedNode(`http://www.w3.org/2002/07/owl#imports`),e.namedNode(`http://www.w3.org/2004/02/skos/core#broader`),e.namedNode(`http://www.w3.org/2004/02/skos/core#narrower`),e.namedNode(`http://www.w3.org/ns/shacl#NodeShape`),e.namedNode(`http://www.w3.org/ns/shacl#IRI`),e.namedNode(`http://www.w3.org/ns/shacl#property`),e.namedNode(`http://www.w3.org/ns/shacl#class`),e.namedNode(`http://www.w3.org/ns/shacl#node`),e.namedNode(`http://www.w3.org/ns/shacl#targetClass`),e.namedNode(`http://www.w3.org/ns/shacl#nodeKind`),e.namedNode(`http://www.w3.org/2001/XMLSchema#string`),e.namedNode(`http://www.w3.org/2001/XMLSchema#boolean`);var r=new Set([`http://www.w3.org/2001/XMLSchema#integer`,`http://www.w3.org/2001/XMLSchema#int`,`http://www.w3.org/2001/XMLSchema#short`,`http://www.w3.org/2001/XMLSchema#byte`,`http://www.w3.org/2001/XMLSchema#unsignedInt`,`http://www.w3.org/2001/XMLSchema#unsignedShort`,`http://www.w3.org/2001/XMLSchema#unsignedByte`,`http://www.w3.org/2001/XMLSchema#long`,`http://www.w3.org/2001/XMLSchema#unsignedLong`,`http://www.w3.org/2001/XMLSchema#float`,`http://www.w3.org/2001/XMLSchema#double`,`http://www.w3.org/2001/XMLSchema#decimal`,`http://www.w3.org/2001/XMLSchema#date`,`http://www.w3.org/2001/XMLSchema#dateTime`]);function i(e){return e.datatype!==void 0&&r.has(e.datatype)}var a=`?root`,o=class{constructor(e={}){this.options=e}buildWhere(e){let t=[this.rootPattern(e),...this.criterionPatterns(e)].filter(Boolean).join(`
|
|
2
|
+
`);return this.wrapDataset(t)}buildSelect(e,t={}){let n=t.projection?.length?t.projection.join(` `):a,r=`SELECT ${t.distinct===!1?``:`DISTINCT `}${n} WHERE {\n${g(this.buildWhere(e))}\n}`;return t.orderBy&&(r+=`\nORDER BY ${t.orderBy}`),t.limit!==void 0&&(r+=`\nLIMIT ${v(t.limit,`limit`)}`),t.offset!==void 0&&(r+=`\nOFFSET ${v(t.offset,`offset`)}`),r}buildFacetSelect(e,t,n=100){let r=`?facetValue`,o=[this.rootPattern(e.query),...this.criterionPatterns(e.query),this.pathPattern(t.path,r,`facet_${_(t.id)}`)].filter(Boolean).join(`
|
|
3
|
+
`),s=this.wrapDataset(o);return i(t)?`SELECT (COUNT(DISTINCT ${a}) AS ?count) (MIN(${r}) AS ?min) (MAX(${r}) AS ?max) WHERE {\n${g(s)}\n}`:`SELECT ${r} ?count ?total WHERE {\n { SELECT ${r} (COUNT(DISTINCT ${a}) AS ?count) WHERE {\n${g(g(s))}\n } GROUP BY ${r} }\n { SELECT (COUNT(DISTINCT ${a}) AS ?total) WHERE {\n${g(g(s))}\n } }\n}\nORDER BY DESC(?count)\nLIMIT ${v(n,`bucketLimit`)}`}buildFacetsSelect(e,t=100){return`SELECT ?fieldId ?facetValue ?count ?total ?min ?max WHERE {\n${e.fields.map(n=>{let r=`?facetValue`,o=[this.rootPattern(e.query),...this.criterionPatterns(e.query),this.pathPattern(n.path,r,`facet_${_(n.id)}`)].filter(Boolean).join(`
|
|
4
|
+
`),s=this.wrapDataset(o),c=`BIND(${p(n.id)} AS ?fieldId)`;return i(n)?`{\n ${c}\n { SELECT (COUNT(DISTINCT ${a}) AS ?count) (MIN(${r}) AS ?min) (MAX(${r}) AS ?max) WHERE {\n${g(g(s))}\n } }\n}`:`{\n ${c}\n { SELECT ${r} (COUNT(DISTINCT ${a}) AS ?count) WHERE {\n${g(g(s))}\n } GROUP BY ${r} ORDER BY DESC(?count) LIMIT ${v(t,`bucketLimit`)} }\n { SELECT (COUNT(DISTINCT ${a}) AS ?total) WHERE {\n${g(g(s))}\n } }\n}`}).map(g).join(`
|
|
5
|
+
UNION
|
|
6
|
+
`)}\n}`}rootPattern(r){return this.options.rootPattern?this.options.rootPattern({query:r,rootVariable:a,graphVariable:this.options.dataset?.type===`named`&&!this.options.dataset.graph?`?graph`:void 0}):r.targetClass?`${a} ${l(t)} ${l(e.namedNode(r.targetClass))} .`:`${a} ${l(n)} ${l(e.namedNode(r.rootShapeId))} .`}criterionPatterns(e){return e.criteria.flatMap((e,t)=>{let n=`?value_${t}`,r=this.pathPattern(e.field.path,n,`criterion_${t}`);if(e.operator===`equals`&&e.value)return[r,`VALUES ${n} { ${l(e.value)} }`];if(e.operator===`contains`&&e.value){let t=p(e.value.value),i=[`FILTER(CONTAINS(${this.options.caseSensitive?`STR(${n})`:`LCASE(STR(${n}))`}, ${this.options.caseSensitive?t:`LCASE(${t})`}))`];return e.value.termType===`Literal`&&e.value.language&&i.push(`FILTER(LANGMATCHES(LANG(${n}), ${p(e.value.language)}))`),[r,...i]}if(e.operator===`range`){let t=[];return e.min&&t.push(`FILTER(${n} >= ${l(e.min)})`),e.max&&t.push(`FILTER(${n} <= ${l(e.max)})`),[r,...t]}return[]})}pathPattern(t,n,r){let i=a;return t.map((a,o)=>{let s=o===t.length-1?n:`?${r}_${o}`,c=`${i} ${l(e.namedNode(a))} ${s} .`;return i=s,c}).join(`
|
|
7
|
+
`)}wrapDataset(e){let t=this.options.dataset??{type:`default`};return t.type==="default"?e:`GRAPH ${t.graph?l(t.graph):`?graph`} {\n${g(e)}\n}`}},s=class{constructor(e,t={}){this.builder=new o(t),this.executor=typeof e==`string`?c(e,t.headers):e,this.bucketLimit=Math.max(0,Math.floor(t.bucketLimit??100)),this.onError=t.onError}async getFacets(e){let t=[...e.fields];if(t.length===0)return[];if(e.signal.aborted)throw new DOMException(`Facet request aborted`,`AbortError`);try{let n=this.builder.buildFacetsSelect(e,this.bucketLimit),r=(await this.executor(n,e.signal)).results?.bindings??[],i=new Map;for(let e of r){let t=e.fieldId?.value;if(t){let n=i.get(t)??[];n.push(e),i.set(t,n)}}return t.map(e=>u(e,{results:{bindings:i.get(e.id)??[]}}))}catch(n){if(e.signal.aborted)throw n;return t.map(e=>(this.onError?.(n,e),{fieldId:e.id,count:0,error:!0}))}}async select(e,t={},n=new AbortController().signal){return this.executor(this.builder.buildSelect(e,t),n)}};function c(e,t={}){let n={"content-type":`application/x-www-form-urlencoded`,accept:`application/sparql-results+json`,...t};return async(t,r)=>{let i=await fetch(e,{method:`POST`,signal:r,headers:n,body:new URLSearchParams({query:t})});if(!i.ok)throw Error(`SPARQL request failed: ${i.status}`);return i.json()}}function l(e){if(e.termType===`NamedNode`)return`<${m(e.value)}>`;if(e.termType===`BlankNode`)return`_:${h(e.value)}`;if(e.termType===`Literal`){let t=e,n=p(t.value);return t.language?`${n}@${t.language.replace(/[^A-Za-z0-9-]/g,``)}`:t.datatype?`${n}^^<${m(t.datatype.value)}>`:n}throw Error(`Unsupported RDF term in SPARQL query: ${e.termType}`)}function u(e,t){let n=t.results?.bindings??[];if(i(e)){let t=n[0]??{};return{fieldId:e.id,count:f(t.count),min:t.min?d(t.min):void 0,max:t.max?d(t.max):void 0}}let r=n.flatMap(e=>e.facetValue?[{value:d(e.facetValue),count:f(e.count)}]:[]);return{fieldId:e.id,count:f(n[0]?.total),buckets:r}}function d(t){return t.type===`uri`?e.namedNode(t.value):t.type===`bnode`?e.blankNode(t.value):t[`xml:lang`]?e.literal(t.value,t[`xml:lang`]):t.datatype?e.literal(t.value,e.namedNode(t.datatype)):e.literal(t.value)}function f(e){let t=Number(e?.value??0);return Number.isFinite(t)?t:0}function p(e){return`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/\n/g,`\\n`).replace(/\r/g,`\\r`)}"`}function m(e){return e.replace(/[^A-Za-z0-9\-._~:/?#[\]@!$&'()*+,;=%]/g,e=>`%`+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,`0`))}function h(e){return e.replace(/[^A-Za-z0-9\-_.]/g,e=>`_`+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,`0`))}function g(e){return e.split(`
|
|
8
|
+
`).map(e=>` ${e}`).join(`
|
|
9
|
+
`)}function _(e){return e.replace(/[^A-Za-z0-9_]/g,`_`)}function v(e,t){if(!Number.isInteger(e)||e<0)throw Error(`${t} must be a non-negative integer`);return e}export{o as SparqlQueryBuilder,s as SparqlQueryProvider,l as termToSparql};
|
package/dist/theme.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NamedNode } from 'n3';
|
|
2
2
|
import { Term } from '@rdfjs/types';
|
|
3
|
-
import { ShaclPropertyTemplate } from './property-template';
|
|
3
|
+
import { ShaclPropertyTemplate } from './property-template.js';
|
|
4
4
|
export type Editor = HTMLElement & {
|
|
5
5
|
value: string;
|
|
6
6
|
type?: string;
|
package/dist/theme.default.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Term } from '@rdfjs/types';
|
|
2
|
-
import { ShaclPropertyTemplate } from
|
|
3
|
-
import { Editor, InputListEntry, Theme } from
|
|
2
|
+
import { ShaclPropertyTemplate } from './property-template.js';
|
|
3
|
+
import { Editor, InputListEntry, Theme } from './theme.js';
|
|
4
4
|
export declare class DefaultTheme extends Theme {
|
|
5
5
|
idCtr: number;
|
|
6
6
|
constructor(overriddenCss?: string);
|
package/dist/util.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Literal, NamedNode, Prefixes, Quad, Store } from 'n3';
|
|
2
2
|
import { Term } from '@rdfjs/types';
|
|
3
|
-
import { InputListEntry } from './theme';
|
|
4
|
-
import { ShaclPropertyTemplate } from './property-template';
|
|
3
|
+
import { InputListEntry } from './theme.js';
|
|
4
|
+
import { ShaclPropertyTemplate } from './property-template.js';
|
|
5
5
|
export declare function findObjectValueByPredicate(quads: Quad[], predicate: string, prefix?: string, languages?: string[]): string;
|
|
6
6
|
export declare function findObjectByPredicate(quads: Quad[], predicate: string, prefix?: string, languages?: string[]): Term | undefined;
|
|
7
7
|
export declare function focusFirstInputElement(context: HTMLElement): void;
|
package/package.json
CHANGED
|
@@ -1,20 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ulb-darmstadt/shacl-form",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "SHACL form generator",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
7
7
|
"types": "dist/form.d.ts",
|
|
8
|
+
"typesVersions": {
|
|
9
|
+
"*": {
|
|
10
|
+
"sparql": [
|
|
11
|
+
"dist/query/sparql.d.ts"
|
|
12
|
+
],
|
|
13
|
+
"plugins/*": [
|
|
14
|
+
"dist/plugins/*"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
8
18
|
"type": "module",
|
|
9
19
|
"exports": {
|
|
10
20
|
".": {
|
|
11
|
-
"
|
|
12
|
-
"
|
|
21
|
+
"types": "./dist/form.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./sparql": {
|
|
25
|
+
"types": "./dist/query/sparql.d.ts",
|
|
26
|
+
"import": "./dist/sparql.js"
|
|
13
27
|
},
|
|
14
28
|
"./plugins/*": "./dist/plugins/*"
|
|
15
29
|
},
|
|
16
30
|
"files": [
|
|
17
|
-
"dist"
|
|
31
|
+
"dist",
|
|
32
|
+
"src/query/query-mode.md"
|
|
18
33
|
],
|
|
19
34
|
"repository": {
|
|
20
35
|
"type": "git",
|
|
@@ -34,44 +49,48 @@
|
|
|
34
49
|
],
|
|
35
50
|
"scripts": {
|
|
36
51
|
"dev": "vite serve ./demo --host",
|
|
37
|
-
"build": "npm run clean && tsc && npm run build-lib && npm run build-bundle && npm run build-plugins",
|
|
52
|
+
"build": "npm run clean && tsc && npm run build-lib && npm run build-sparql && npm run build-bundle && npm run build-plugins",
|
|
38
53
|
"preview": "vite preview",
|
|
39
54
|
"test": "web-test-runner --config test/config.js",
|
|
40
55
|
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
|
41
56
|
"clean": "rimraf dist",
|
|
42
57
|
"build-lib": "vite build -c ./vite.config.ts",
|
|
58
|
+
"build-sparql": "vite build -c ./vite.config.sparql.ts",
|
|
43
59
|
"build-bundle": "vite build -c ./vite.config.bundle.ts",
|
|
44
60
|
"build-plugins": "vite build -c ./vite.config.plugins.ts"
|
|
45
61
|
},
|
|
46
62
|
"devDependencies": {
|
|
47
|
-
"@
|
|
63
|
+
"@eslint/js": "^10.0.1",
|
|
64
|
+
"@open-wc/testing": "^5.0.0",
|
|
48
65
|
"@remcovaes/web-test-runner-vite-plugin": "^1.4.1",
|
|
49
66
|
"@types/jsonld": "^1.5.15",
|
|
50
67
|
"@types/leaflet": "^1.9.21",
|
|
51
68
|
"@types/leaflet-editable": "^1.2.7",
|
|
52
|
-
"@types/leaflet.
|
|
69
|
+
"@types/leaflet.heat": "^0.2.5",
|
|
53
70
|
"@types/mapbox__mapbox-gl-draw": "^1.4.9",
|
|
54
71
|
"@types/mocha": "^10.0.10",
|
|
55
72
|
"@types/n3": "^1.26.1",
|
|
56
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
57
|
-
"@typescript-eslint/parser": "^8.
|
|
58
|
-
"@web/test-runner": "^0.
|
|
59
|
-
"@web/test-runner-chrome": "^0.
|
|
60
|
-
"@web/test-runner-puppeteer": "^0.
|
|
61
|
-
"eslint": "^10.
|
|
62
|
-
"
|
|
73
|
+
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
|
74
|
+
"@typescript-eslint/parser": "^8.64.0",
|
|
75
|
+
"@web/test-runner": "^1.0.0",
|
|
76
|
+
"@web/test-runner-chrome": "^1.0.0",
|
|
77
|
+
"@web/test-runner-puppeteer": "^1.0.0",
|
|
78
|
+
"eslint": "^10.7.0",
|
|
79
|
+
"globals": "^17.7.0",
|
|
80
|
+
"puppeteer": "^25.3.0",
|
|
63
81
|
"rdf-isomorphic": "^2.0.1",
|
|
64
82
|
"rimraf": "^6.1.3",
|
|
65
83
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
66
84
|
"typescript": "^6.0.3",
|
|
67
|
-
"vite": "^8.
|
|
85
|
+
"vite": "^8.1.5"
|
|
68
86
|
},
|
|
69
87
|
"peerDependencies": {
|
|
70
|
-
"@ro-kit/ui-widgets": "^1.0.
|
|
88
|
+
"@ro-kit/ui-widgets": "^1.0.49",
|
|
71
89
|
"jsonld": "^9.0.0",
|
|
72
90
|
"leaflet": "^1.9.4",
|
|
73
91
|
"leaflet-editable": "^1.3.2",
|
|
74
|
-
"leaflet.fullscreen": "^
|
|
92
|
+
"leaflet.fullscreen": "^5.3.3",
|
|
93
|
+
"leaflet.heat": "^0.2.0",
|
|
75
94
|
"n3": "^1.0.26",
|
|
76
95
|
"rdfxml-streaming-parser": "^3.1.0",
|
|
77
96
|
"shacl-engine": "^1.1.2",
|