@honua/app-platform 0.1.7-beta.0 → 0.1.10-beta.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/control-plane/admin-client.d.ts +89 -0
- package/control-plane/admin-client.d.ts.map +1 -0
- package/control-plane/admin-client.js +200 -0
- package/control-plane/client.d.ts +1 -1
- package/control-plane/client.d.ts.map +1 -1
- package/control-plane/client.js +145 -11
- package/control-plane/commands/catalog.d.ts +133 -0
- package/control-plane/commands/catalog.d.ts.map +1 -0
- package/control-plane/commands/catalog.js +365 -0
- package/control-plane/commands/errors.d.ts +96 -0
- package/control-plane/commands/errors.d.ts.map +1 -0
- package/control-plane/commands/errors.js +130 -0
- package/control-plane/commands/identity.d.ts +71 -0
- package/control-plane/commands/identity.d.ts.map +1 -0
- package/control-plane/commands/identity.js +0 -0
- package/control-plane/commands/index.d.ts +39 -0
- package/control-plane/commands/index.d.ts.map +1 -0
- package/control-plane/commands/index.js +34 -0
- package/control-plane/commands/runtime.d.ts +146 -0
- package/control-plane/commands/runtime.d.ts.map +1 -0
- package/control-plane/commands/runtime.js +330 -0
- package/control-plane/commands/types.d.ts +228 -0
- package/control-plane/commands/types.d.ts.map +1 -0
- package/control-plane/commands/types.js +30 -0
- package/control-plane/commands/validate.d.ts +27 -0
- package/control-plane/commands/validate.d.ts.map +1 -0
- package/control-plane/commands/validate.js +132 -0
- package/control-plane/generated/admin-api.d.ts +30265 -0
- package/control-plane/generated/admin-api.d.ts.map +1 -0
- package/control-plane/generated/admin-api.js +5 -0
- package/control-plane/generated/admin-operations.d.ts +4053 -0
- package/control-plane/generated/admin-operations.d.ts.map +1 -0
- package/control-plane/generated/admin-operations.js +820 -0
- package/control-plane/index.d.ts +11 -0
- package/control-plane/index.d.ts.map +1 -1
- package/control-plane/index.js +8 -0
- package/control-plane/types.d.ts +14 -0
- package/control-plane/types.d.ts.map +1 -1
- package/controls/catalog.d.ts.map +1 -1
- package/controls/catalog.js +12 -1
- package/controls/qualification.d.ts.map +1 -1
- package/controls/qualification.js +71 -8
- package/core/client.d.ts.map +1 -1
- package/core/client.js +29 -31
- package/core/credential-redaction.d.ts +163 -0
- package/core/credential-redaction.d.ts.map +1 -0
- package/core/credential-redaction.js +389 -0
- package/core/error-classifications.d.ts +15 -0
- package/core/error-classifications.d.ts.map +1 -1
- package/core/error-classifications.js +15 -0
- package/core/error-code-registry.d.ts +15 -0
- package/core/error-code-registry.d.ts.map +1 -1
- package/core/error-code-registry.js +15 -0
- package/core/error-envelope.d.ts +31 -0
- package/core/error-envelope.d.ts.map +1 -1
- package/core/error-envelope.js +11 -0
- package/core/errors.d.ts +15 -3
- package/core/errors.d.ts.map +1 -1
- package/core/errors.js +254 -2
- package/core/geometry-input-sr.d.ts +3 -0
- package/core/geometry-input-sr.d.ts.map +1 -0
- package/core/geometry-input-sr.js +28 -0
- package/core/geoservices.d.ts.map +1 -1
- package/core/geoservices.js +33 -6
- package/core/grpc-adapter.d.ts +2 -2
- package/core/grpc-adapter.d.ts.map +1 -1
- package/core/grpc-adapter.js +41 -9
- package/core/job-run-errors.d.ts +10 -0
- package/core/job-run-errors.d.ts.map +1 -0
- package/core/job-run-errors.js +14 -0
- package/core/job-run-lifecycle.d.ts +34 -0
- package/core/job-run-lifecycle.d.ts.map +1 -0
- package/core/job-run-lifecycle.js +193 -0
- package/core/ogc-processes.d.ts +38 -31
- package/core/ogc-processes.d.ts.map +1 -1
- package/core/ogc-processes.js +123 -173
- package/core/pbf-decoder.d.ts.map +1 -1
- package/core/pbf-decoder.js +16 -4
- package/core/process-runner.js +15 -100
- package/core/protocol-transport.d.ts +6 -1
- package/core/protocol-transport.d.ts.map +1 -1
- package/core/request-pipeline.d.ts +6 -3
- package/core/request-pipeline.d.ts.map +1 -1
- package/core/request-pipeline.js +28 -11
- package/core/spatial-filter.d.ts +4 -4
- package/core/spatial-filter.d.ts.map +1 -1
- package/core/spatial-filter.js +7 -7
- package/core/surfaces.d.ts +2 -8
- package/core/surfaces.d.ts.map +1 -1
- package/core/surfaces.js +21 -112
- package/core/types.d.ts +21 -9
- package/core/types.d.ts.map +1 -1
- package/custom-elements.json +341 -0
- package/esri-compat/class-breaks-renderer.d.ts +2 -0
- package/esri-compat/class-breaks-renderer.d.ts.map +1 -1
- package/esri-compat/class-breaks-renderer.js +7 -0
- package/esri-compat/controls.d.ts +10 -1
- package/esri-compat/controls.d.ts.map +1 -1
- package/esri-compat/controls.js +86 -2
- package/esri-compat/directions.d.ts +35 -0
- package/esri-compat/directions.d.ts.map +1 -1
- package/esri-compat/directions.js +153 -2
- package/esri-compat/expand.d.ts +1 -0
- package/esri-compat/expand.d.ts.map +1 -1
- package/esri-compat/expand.js +61 -0
- package/esri-compat/feature-layer.d.ts +29 -4
- package/esri-compat/feature-layer.d.ts.map +1 -1
- package/esri-compat/feature-layer.js +335 -13
- package/esri-compat/geometry-engine.d.ts +4 -0
- package/esri-compat/geometry-engine.d.ts.map +1 -1
- package/esri-compat/geometry-engine.js +8 -1
- package/esri-compat/graphic.d.ts +7 -4
- package/esri-compat/graphic.d.ts.map +1 -1
- package/esri-compat/legend.d.ts +2 -1
- package/esri-compat/legend.d.ts.map +1 -1
- package/esri-compat/legend.js +15 -0
- package/esri-compat/map-view-mount.d.ts +48 -0
- package/esri-compat/map-view-mount.d.ts.map +1 -0
- package/esri-compat/map-view-mount.js +344 -0
- package/esri-compat/map-view.d.ts +38 -6
- package/esri-compat/map-view.d.ts.map +1 -1
- package/esri-compat/map-view.js +467 -33
- package/esri-compat/portal.d.ts +2 -0
- package/esri-compat/portal.d.ts.map +1 -1
- package/esri-compat/portal.js +7 -2
- package/esri-compat/renderer-objects.d.ts +7 -2
- package/esri-compat/renderer-objects.d.ts.map +1 -1
- package/esri-compat/renderer-objects.js +16 -5
- package/esri-compat/route-layer.d.ts +8 -0
- package/esri-compat/route-layer.d.ts.map +1 -1
- package/esri-compat/route-layer.js +24 -4
- package/esri-compat/route-task.d.ts +5 -1
- package/esri-compat/route-task.d.ts.map +1 -1
- package/esri-compat/route-task.js +119 -7
- package/esri-compat/scene-view.d.ts.map +1 -1
- package/esri-compat/scene-view.js +1 -0
- package/esri-compat/search.d.ts +2 -1
- package/esri-compat/search.d.ts.map +1 -1
- package/esri-compat/search.js +52 -2
- package/esri-compat/unique-value-renderer.d.ts +2 -0
- package/esri-compat/unique-value-renderer.d.ts.map +1 -1
- package/esri-compat/unique-value-renderer.js +7 -0
- package/esri-compat/web-map.d.ts +10 -0
- package/esri-compat/web-map.d.ts.map +1 -1
- package/esri-compat/web-map.js +102 -0
- package/gen/geospatial/v1/common_pb.d.ts +514 -0
- package/gen/geospatial/v1/common_pb.d.ts.map +1 -0
- package/gen/geospatial/v1/common_pb.js +335 -0
- package/gen/geospatial/v1/execution_types_pb.d.ts +1186 -0
- package/gen/geospatial/v1/execution_types_pb.d.ts.map +1 -0
- package/gen/geospatial/v1/execution_types_pb.js +396 -0
- package/gen/geospatial/v1/feature_service_pb.d.ts +403 -0
- package/gen/geospatial/v1/feature_service_pb.d.ts.map +1 -0
- package/gen/geospatial/v1/feature_service_pb.js +47 -0
- package/gen/geospatial/v1/index.d.ts +5 -0
- package/gen/geospatial/v1/index.d.ts.map +1 -0
- package/gen/geospatial/v1/index.js +9 -0
- package/gen/geospatial/v1/spatial_types_pb.d.ts +285 -0
- package/gen/geospatial/v1/spatial_types_pb.d.ts.map +1 -0
- package/gen/geospatial/v1/spatial_types_pb.js +58 -0
- package/gen/geospatial/v1/workspace_artifact_types_pb.d.ts +379 -0
- package/gen/geospatial/v1/workspace_artifact_types_pb.d.ts.map +1 -0
- package/gen/geospatial/v1/workspace_artifact_types_pb.js +151 -0
- package/generated-app/projection.d.ts.map +1 -1
- package/generated-app/projection.js +10 -1
- package/geocoding/index.d.ts +1 -0
- package/geocoding/index.d.ts.map +1 -1
- package/geocoding/index.js +18 -8
- package/geocoding/provider-http.d.ts.map +1 -1
- package/geocoding/provider-http.js +3 -1
- package/map/webmap-maplibre.d.ts +2 -1
- package/map/webmap-maplibre.d.ts.map +1 -1
- package/map/webmap-maplibre.js +3 -0
- package/operate/client.d.ts +11 -1
- package/operate/client.d.ts.map +1 -1
- package/operate/client.js +39 -2
- package/operate/index.d.ts +1 -1
- package/operate/index.d.ts.map +1 -1
- package/operate/types.d.ts +40 -6
- package/operate/types.d.ts.map +1 -1
- package/package.json +6 -4
- package/query-planner/geoservices.d.ts.map +1 -1
- package/query-planner/geoservices.js +2 -0
- package/query-planner/grpc.d.ts +4 -4
- package/query-planner/grpc.d.ts.map +1 -1
- package/query-planner/grpc.js +11 -11
- package/query-planner/types.d.ts +6 -4
- package/query-planner/types.d.ts.map +1 -1
- package/realtime/honua-server.d.ts +4 -0
- package/realtime/honua-server.d.ts.map +1 -1
- package/realtime/honua-server.js +10 -0
- package/realtime/resumable.js +9 -0
- package/realtime/types.d.ts +8 -0
- package/realtime/types.d.ts.map +1 -1
- package/runtime/errors.d.ts +1 -1
- package/runtime/errors.d.ts.map +1 -1
- package/runtime/errors.js +2 -0
- package/runtime/generated/map-package-schema-meta.d.ts +11 -0
- package/runtime/generated/map-package-schema-meta.d.ts.map +1 -0
- package/runtime/generated/map-package-schema-meta.js +12 -0
- package/runtime/generated/map-package-schema-validator.d.ts +16 -0
- package/runtime/generated/map-package-schema-validator.d.ts.map +1 -0
- package/runtime/generated/map-package-schema-validator.js +1422 -0
- package/runtime/index.d.ts +5 -1
- package/runtime/index.d.ts.map +1 -1
- package/runtime/index.js +6 -0
- package/runtime/map-package-export.d.ts +151 -0
- package/runtime/map-package-export.d.ts.map +1 -0
- package/runtime/map-package-export.js +636 -0
- package/runtime/map-package-validation.d.ts +21 -1
- package/runtime/map-package-validation.d.ts.map +1 -1
- package/runtime/map-package-validation.js +132 -95
- package/runtime/map-package.d.ts +80 -0
- package/runtime/map-package.d.ts.map +1 -1
- package/scene-workspace/cesium-adapter.d.ts +8 -8
- package/scene-workspace/cesium-adapter.d.ts.map +1 -1
- package/scene-workspace/cesium-adapter.js +31 -18
- package/scene-workspace/index.d.ts +2 -2
- package/scene-workspace/index.d.ts.map +1 -1
- package/scene-workspace/index.js +1 -1
- package/scene-workspace/maplibre-state-sync.d.ts.map +1 -1
- package/scene-workspace/maplibre-state-sync.js +35 -3
- package/scene-workspace/primitives.d.ts +37 -5
- package/scene-workspace/primitives.d.ts.map +1 -1
- package/scene-workspace/primitives.js +55 -18
- package/scene-workspace/source-to-cesium.js +1 -1
- package/scene-workspace/state-sync-port-kit.d.ts +1 -1
- package/scene-workspace/state-sync-port-kit.d.ts.map +1 -1
- package/studio/capability-manifest.d.ts +10 -0
- package/studio/capability-manifest.d.ts.map +1 -1
- package/studio/capability-manifest.js +38 -0
- package/studio/chart-spec.d.ts +6 -6
- package/studio/chart-spec.d.ts.map +1 -1
- package/studio/chart-spec.js +6 -6
- package/studio/command-adapter.d.ts +35 -0
- package/studio/command-adapter.d.ts.map +1 -0
- package/studio/command-adapter.js +36 -0
- package/studio/generated/studio-api.d.ts +1062 -0
- package/studio/generated/studio-api.d.ts.map +1 -0
- package/studio/generated/studio-api.js +4 -0
- package/studio/index.d.ts +25 -13
- package/studio/index.d.ts.map +1 -1
- package/studio/index.js +21 -10
- package/studio/lifecycle-client.d.ts +262 -22
- package/studio/lifecycle-client.d.ts.map +1 -1
- package/studio/lifecycle-client.js +543 -24
- package/studio/lifecycle-errors.d.ts +8 -2
- package/studio/lifecycle-errors.d.ts.map +1 -1
- package/studio/lifecycle-errors.js +6 -1
- package/studio/lifecycle-types.d.ts +237 -38
- package/studio/lifecycle-types.d.ts.map +1 -1
- package/studio/lifecycle-types.js +5 -12
- package/studio/publication-status.d.ts +55 -0
- package/studio/publication-status.d.ts.map +1 -0
- package/studio/publication-status.js +103 -0
- package/studio/types.d.ts +37 -7
- package/studio/types.d.ts.map +1 -1
- package/studio/types.js +5 -3
- package/studio/validate.d.ts.map +1 -1
- package/studio/validate.js +104 -7
- package/style/renderers.d.ts +6 -1
- package/style/renderers.d.ts.map +1 -1
- package/style/renderers.js +11 -6
- package/style/visual-variables.d.ts +43 -0
- package/style/visual-variables.d.ts.map +1 -0
- package/style/visual-variables.js +183 -0
- package/web-components/application-context.d.ts +186 -0
- package/web-components/application-context.d.ts.map +1 -0
- package/web-components/application-context.js +429 -0
- package/web-components/elements.d.ts +10 -1
- package/web-components/elements.d.ts.map +1 -1
- package/web-components/elements.js +187 -7
- package/web-components/export-redaction.d.ts +11 -102
- package/web-components/export-redaction.d.ts.map +1 -1
- package/web-components/export-redaction.js +7 -260
- package/web-components/feature-editor-offline.d.ts +32 -0
- package/web-components/feature-editor-offline.d.ts.map +1 -0
- package/web-components/feature-editor-offline.js +115 -0
- package/web-components/feature-editor-workflow.d.ts +85 -22
- package/web-components/feature-editor-workflow.d.ts.map +1 -1
- package/web-components/feature-editor-workflow.js +240 -0
- package/web-components/feature-editor.d.ts +20 -6
- package/web-components/feature-editor.d.ts.map +1 -1
- package/web-components/feature-editor.js +159 -7
- package/web-components/feature-inspection.d.ts +287 -0
- package/web-components/feature-inspection.d.ts.map +1 -0
- package/web-components/feature-inspection.js +1464 -0
- package/web-components/feature-mutation.d.ts +77 -0
- package/web-components/feature-mutation.d.ts.map +1 -0
- package/web-components/feature-mutation.js +137 -0
- package/web-components/feature-table-engine.d.ts +94 -4
- package/web-components/feature-table-engine.d.ts.map +1 -1
- package/web-components/feature-table-engine.js +365 -18
- package/web-components/feature-table-view.d.ts +35 -1
- package/web-components/feature-table-view.d.ts.map +1 -1
- package/web-components/feature-table-view.js +128 -12
- package/web-components/index.d.ts +16 -7
- package/web-components/index.d.ts.map +1 -1
- package/web-components/index.js +9 -2
- package/web-components/map-pointer-claim.d.ts +24 -0
- package/web-components/map-pointer-claim.d.ts.map +1 -0
- package/web-components/map-pointer-claim.js +40 -0
- package/web-components/maplibre-renderer.d.ts.map +1 -1
- package/web-components/maplibre-renderer.js +5 -1
- package/web-components/measurement-units.d.ts +88 -0
- package/web-components/measurement-units.d.ts.map +1 -0
- package/web-components/measurement-units.js +278 -0
- package/web-components/measurement.d.ts +75 -4
- package/web-components/measurement.d.ts.map +1 -1
- package/web-components/measurement.js +227 -28
- package/web-components/types.d.ts +58 -3
- package/web-components/types.d.ts.map +1 -1
- package/webmap/convert-layer.d.ts +2 -1
- package/webmap/convert-layer.d.ts.map +1 -1
- package/webmap/convert-layer.js +20 -3
- package/webmap/convert-renderer.d.ts +10 -3
- package/webmap/convert-renderer.d.ts.map +1 -1
- package/webmap/convert-renderer.js +190 -36
- package/webmap/index.d.ts +1 -0
- package/webmap/index.d.ts.map +1 -1
- package/webmap/parse.d.ts +2 -1
- package/webmap/parse.d.ts.map +1 -1
- package/webmap/parse.js +1 -1
- package/gen/honua/v1/feature_service_pb.d.ts +0 -918
- package/gen/honua/v1/feature_service_pb.d.ts.map +0 -1
- package/gen/honua/v1/feature_service_pb.js +0 -375
|
@@ -3,6 +3,7 @@ import { renderCspSafeShadowHtml } from "./csp-styles.js";
|
|
|
3
3
|
import { redactHonuaExportText } from "./export-redaction.js";
|
|
4
4
|
import { HONUA_EXPORT_KINDS, approximateHonuaScaleLabel, createBrowserPrintExportAdapter, runHonuaExport, } from "./export.js";
|
|
5
5
|
import { HonuaFeatureEditorElement, } from "./feature-editor.js";
|
|
6
|
+
import { HonuaFeatureInspectionElement } from "./feature-inspection.js";
|
|
6
7
|
import { featureTableFocusMoveForKey, featureTableGridHtml, featureTableGridStyles, featureTableViewModel, legacyFeatureTableViewModel, } from "./feature-table-view.js";
|
|
7
8
|
import { HonuaMapLibreRenderer } from "./maplibre-renderer.js";
|
|
8
9
|
import { HonuaMeasurementElement } from "./measurement.js";
|
|
@@ -684,7 +685,7 @@ export class HonuaLegendElement extends HonuaElementBase {
|
|
|
684
685
|
*/
|
|
685
686
|
export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
686
687
|
static get observedAttributes() {
|
|
687
|
-
return ["for", "source", "fields", "page-size", "filter-text", "label", "row-height"];
|
|
688
|
+
return ["for", "source", "fields", "page-size", "filter-text", "label", "row-height", "column-width"];
|
|
688
689
|
}
|
|
689
690
|
#model;
|
|
690
691
|
#refreshToken = 0;
|
|
@@ -695,6 +696,7 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
695
696
|
#tableConnected = false;
|
|
696
697
|
#restoringScroll = false;
|
|
697
698
|
#messages = {};
|
|
699
|
+
#applicationContext;
|
|
698
700
|
get messages() {
|
|
699
701
|
return this.#messages;
|
|
700
702
|
}
|
|
@@ -724,8 +726,31 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
724
726
|
// Only hold a subscription while connected; `connectedCallback()` re-takes
|
|
725
727
|
// it so a detached-then-reinserted grid resumes updating.
|
|
726
728
|
this.#subscribeTable();
|
|
729
|
+
this.#applyApplicationContext();
|
|
727
730
|
this.render();
|
|
728
731
|
}
|
|
732
|
+
/** Application shell context assigned and driven by `mountHonuaApplication()`. */
|
|
733
|
+
get applicationContext() {
|
|
734
|
+
return this.#applicationContext;
|
|
735
|
+
}
|
|
736
|
+
set applicationContext(context) {
|
|
737
|
+
if (context === this.#applicationContext)
|
|
738
|
+
return;
|
|
739
|
+
this.#applicationContext = context;
|
|
740
|
+
this.#applyApplicationContext();
|
|
741
|
+
}
|
|
742
|
+
honuaApplicationContextConnected(context) {
|
|
743
|
+
this.applicationContext = context;
|
|
744
|
+
}
|
|
745
|
+
honuaApplicationContextChanged(event) {
|
|
746
|
+
if (event.current !== this.#applicationContext?.snapshot)
|
|
747
|
+
return;
|
|
748
|
+
this.#applyApplicationContext(event);
|
|
749
|
+
}
|
|
750
|
+
honuaApplicationContextDisconnected(context) {
|
|
751
|
+
if (this.#applicationContext === context)
|
|
752
|
+
this.applicationContext = undefined;
|
|
753
|
+
}
|
|
729
754
|
/** Takes the engine subscription, unless one is already held or we are detached. */
|
|
730
755
|
#subscribeTable() {
|
|
731
756
|
const table = this.#table;
|
|
@@ -735,6 +760,7 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
735
760
|
this.#tableSnapshot = table.snapshot;
|
|
736
761
|
this.#tableUnsubscribe = table.subscribe((snapshot) => {
|
|
737
762
|
this.#tableSnapshot = snapshot;
|
|
763
|
+
this.#publishApplicationState(snapshot);
|
|
738
764
|
this.render();
|
|
739
765
|
this.#announceConflicts(snapshot);
|
|
740
766
|
});
|
|
@@ -803,9 +829,10 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
803
829
|
render() {
|
|
804
830
|
const label = this.#messages.label ?? this.getAttribute("label") ?? "Features";
|
|
805
831
|
const rowHeight = this.rowHeight();
|
|
832
|
+
const columnWidth = this.columnWidth();
|
|
806
833
|
const snapshot = this.#tableSnapshot;
|
|
807
834
|
const viewModel = snapshot
|
|
808
|
-
? featureTableViewModel(snapshot, { label, rowHeight, messages: this.#messages })
|
|
835
|
+
? featureTableViewModel(snapshot, { label, rowHeight, columnWidth, messages: this.#messages })
|
|
809
836
|
: legacyFeatureTableViewModel(this.#model ?? tableModelFromState(this.state, this.sourceId(), this.fields(), this.pageSize()), {
|
|
810
837
|
label,
|
|
811
838
|
rowHeight,
|
|
@@ -820,23 +847,136 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
820
847
|
// on every publish — including the synchronous loading snapshot that
|
|
821
848
|
// `setScroll` itself publishes. Carry the offset across the swap.
|
|
822
849
|
const previousScrollTop = this.#scroller()?.scrollTop ?? 0;
|
|
823
|
-
this
|
|
850
|
+
const previousScrollLeft = this.#scroller()?.scrollLeft ?? 0;
|
|
851
|
+
this.setShadowHtml(`<style>${baseStyles()}${tableStyles()}${featureTableGridStyles()}</style>${this.#applicationPresentationHtml()}${featureTableGridHtml(viewModel)}`);
|
|
824
852
|
this.#bindGrid();
|
|
825
|
-
this.#
|
|
853
|
+
this.#restoreScroll(previousScrollTop, previousScrollLeft);
|
|
826
854
|
}
|
|
827
855
|
#scroller() {
|
|
828
856
|
return this.shadowRoot?.querySelector("[data-scroller]") ?? null;
|
|
829
857
|
}
|
|
830
|
-
#
|
|
831
|
-
|
|
858
|
+
#applyApplicationContext(event) {
|
|
859
|
+
const context = this.#applicationContext;
|
|
860
|
+
if (!context) {
|
|
861
|
+
this.removeAttribute("data-honua-status");
|
|
862
|
+
this.removeAttribute("aria-disabled");
|
|
863
|
+
this.render();
|
|
864
|
+
return;
|
|
865
|
+
}
|
|
866
|
+
const snapshot = context.snapshot;
|
|
867
|
+
this.setAttribute("data-honua-status", snapshot.status);
|
|
868
|
+
this.setAttribute("lang", snapshot.locale.locale);
|
|
869
|
+
this.setAttribute("dir", snapshot.locale.direction ?? "auto");
|
|
870
|
+
this.toggleAttribute("aria-disabled", snapshot.authorization.status === "unauthorized");
|
|
871
|
+
const table = this.#table;
|
|
872
|
+
if (!table) {
|
|
873
|
+
this.render();
|
|
874
|
+
return;
|
|
875
|
+
}
|
|
876
|
+
const sourceIdentity = snapshot.binding.sourceIdentity ?? snapshot.binding.source?.descriptor.id;
|
|
877
|
+
if (sourceIdentity && sourceIdentity !== table.snapshot.sourceId) {
|
|
878
|
+
table.cancel();
|
|
879
|
+
this.render();
|
|
880
|
+
return;
|
|
881
|
+
}
|
|
882
|
+
if (snapshot.authorization.status === "unauthorized")
|
|
883
|
+
table.cancel();
|
|
884
|
+
if (!event || event.changed.includes("selection")) {
|
|
885
|
+
const targets = snapshot.selection.filter(isApplicationSelectionTarget);
|
|
886
|
+
const keys = table.keysForTargets(targets);
|
|
887
|
+
if (!sameApplicationValue(table.snapshot.selection, keys))
|
|
888
|
+
table.select(keys, { replace: true });
|
|
889
|
+
}
|
|
890
|
+
if (!event || event.changed.includes("filters")) {
|
|
891
|
+
const filters = snapshot.filters.filter(isApplicationFilterClause);
|
|
892
|
+
if (!sameApplicationValue(table.snapshot.filters, filters))
|
|
893
|
+
void table.setFilters(filters);
|
|
894
|
+
}
|
|
895
|
+
if (event &&
|
|
896
|
+
(event.changed.includes("edits") || event.changed.includes("freshness")) &&
|
|
897
|
+
snapshot.authorization.status !== "unauthorized") {
|
|
898
|
+
table.markStale("Application edits or freshness changed; refreshing the bounded table.");
|
|
899
|
+
void table.refresh();
|
|
900
|
+
}
|
|
901
|
+
this.render();
|
|
902
|
+
}
|
|
903
|
+
#publishApplicationState(snapshot) {
|
|
904
|
+
const context = this.#applicationContext;
|
|
905
|
+
if (!context || context.disposed)
|
|
906
|
+
return;
|
|
907
|
+
const sourceId = snapshot.sourceId;
|
|
908
|
+
const peers = context.snapshot.selection.filter((entry) => !isApplicationSelectionTarget(entry) || entry.sourceId !== sourceId);
|
|
909
|
+
const selectionTargets = this.#table?.selectionTargets() ?? [];
|
|
910
|
+
const selected = snapshot.selection
|
|
911
|
+
.map((key, index) => {
|
|
912
|
+
const row = snapshot.rows.find((candidate) => candidate?.key === key);
|
|
913
|
+
const target = row?.target ?? selectionTargets[index];
|
|
914
|
+
if (!target)
|
|
915
|
+
return undefined;
|
|
916
|
+
return row && isApplicationSelectionTarget(target)
|
|
917
|
+
? { ...target, attributes: row.attributes, ...(row.geometry !== undefined ? { geometry: row.geometry } : {}) }
|
|
918
|
+
: target;
|
|
919
|
+
})
|
|
920
|
+
.filter((entry) => entry !== undefined);
|
|
921
|
+
const selection = [...peers, ...selected];
|
|
922
|
+
const filters = snapshot.filters;
|
|
923
|
+
const componentId = "honua-feature-table";
|
|
924
|
+
const tableDiagnostics = [
|
|
925
|
+
...(snapshot.error
|
|
926
|
+
? [
|
|
927
|
+
{
|
|
928
|
+
code: "feature-table-query-failed",
|
|
929
|
+
message: snapshot.error instanceof Error
|
|
930
|
+
? snapshot.error.message
|
|
931
|
+
: (snapshot.message ?? "The table query failed."),
|
|
932
|
+
severity: "error",
|
|
933
|
+
componentId,
|
|
934
|
+
status: "failed",
|
|
935
|
+
},
|
|
936
|
+
]
|
|
937
|
+
: []),
|
|
938
|
+
...snapshot.conflicts.map((conflict) => ({
|
|
939
|
+
code: `feature-table-${conflict.code}`,
|
|
940
|
+
message: conflict.message,
|
|
941
|
+
severity: "warning",
|
|
942
|
+
componentId,
|
|
943
|
+
status: "degraded",
|
|
944
|
+
})),
|
|
945
|
+
];
|
|
946
|
+
const diagnostics = [
|
|
947
|
+
...context.snapshot.diagnostics.filter((entry) => entry.componentId !== componentId),
|
|
948
|
+
...tableDiagnostics,
|
|
949
|
+
];
|
|
950
|
+
const update = {
|
|
951
|
+
...(!sameApplicationValue(context.snapshot.selection, selection) ? { selection } : {}),
|
|
952
|
+
...(!sameApplicationValue(context.snapshot.filters, filters) ? { filters } : {}),
|
|
953
|
+
...(!sameApplicationValue(context.snapshot.diagnostics, diagnostics) ? { diagnostics } : {}),
|
|
954
|
+
};
|
|
955
|
+
if (Object.keys(update).length > 0)
|
|
956
|
+
context.update(update);
|
|
957
|
+
}
|
|
958
|
+
#applicationPresentationHtml() {
|
|
959
|
+
const context = this.#applicationContext;
|
|
960
|
+
if (!context)
|
|
961
|
+
return "";
|
|
962
|
+
const presentation = context.statusPresentation();
|
|
963
|
+
const diagnostics = context.snapshot.diagnostics.filter((diagnostic) => diagnostic.componentId === undefined || diagnostic.componentId === "honua-feature-table");
|
|
964
|
+
return `<div data-application-presentation>
|
|
965
|
+
<p class="status" data-application-status role="${presentation.role}" aria-live="${presentation.ariaLive}" aria-busy="${String(presentation.busy)}">${escapeHtml(presentation.label)}</p>
|
|
966
|
+
${diagnostics.map((diagnostic) => `<p class="status" role="${diagnostic.severity === "error" ? "alert" : "status"}" data-application-diagnostic="${escapeAttribute(diagnostic.code)}">${escapeHtml(diagnostic.message)}</p>`).join("")}
|
|
967
|
+
</div>`;
|
|
968
|
+
}
|
|
969
|
+
#restoreScroll(scrollTop, scrollLeft) {
|
|
970
|
+
if (scrollTop <= 0 && scrollLeft <= 0)
|
|
832
971
|
return;
|
|
833
972
|
const scroller = this.#scroller();
|
|
834
|
-
if (!scroller || scroller.scrollTop === scrollTop)
|
|
973
|
+
if (!scroller || (scroller.scrollTop === scrollTop && scroller.scrollLeft === scrollLeft))
|
|
835
974
|
return;
|
|
836
975
|
// Restoring the offset fires `scroll`; that echo must not be mistaken for a
|
|
837
976
|
// user gesture and fed back into the engine as a new window.
|
|
838
977
|
this.#restoringScroll = true;
|
|
839
978
|
scroller.scrollTop = scrollTop;
|
|
979
|
+
scroller.scrollLeft = scrollLeft;
|
|
840
980
|
queueMicrotask(() => {
|
|
841
981
|
this.#restoringScroll = false;
|
|
842
982
|
});
|
|
@@ -853,6 +993,13 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
853
993
|
void this.#table?.toggleSort(field, { additive: event.shiftKey });
|
|
854
994
|
});
|
|
855
995
|
}
|
|
996
|
+
for (const input of root.querySelectorAll("[data-column-field]")) {
|
|
997
|
+
input.addEventListener("change", () => {
|
|
998
|
+
const field = input.dataset.columnField;
|
|
999
|
+
if (field)
|
|
1000
|
+
void this.#table?.setColumnVisibility(field, input.checked);
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
856
1003
|
for (const row of root.querySelectorAll("tbody tr[data-feature-id]")) {
|
|
857
1004
|
row.addEventListener("click", () => this.selectRow(row));
|
|
858
1005
|
row.addEventListener("keydown", (event) => this.#onRowKeydown(event, row));
|
|
@@ -871,6 +1018,11 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
871
1018
|
rowHeight: this.rowHeight(),
|
|
872
1019
|
viewportHeight: scroller.clientHeight || this.rowHeight() * 10,
|
|
873
1020
|
});
|
|
1021
|
+
this.#table?.setColumnScroll({
|
|
1022
|
+
scrollLeft: scroller.scrollLeft,
|
|
1023
|
+
columnWidth: this.columnWidth(),
|
|
1024
|
+
viewportWidth: scroller.clientWidth || this.columnWidth() * 4,
|
|
1025
|
+
});
|
|
874
1026
|
});
|
|
875
1027
|
}
|
|
876
1028
|
}
|
|
@@ -1023,6 +1175,10 @@ export class HonuaFeatureTableElement extends HonuaElementBase {
|
|
|
1023
1175
|
const parsed = Number(this.getAttribute("row-height"));
|
|
1024
1176
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : 32;
|
|
1025
1177
|
}
|
|
1178
|
+
columnWidth() {
|
|
1179
|
+
const parsed = Number(this.getAttribute("column-width"));
|
|
1180
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 160;
|
|
1181
|
+
}
|
|
1026
1182
|
}
|
|
1027
1183
|
/**
|
|
1028
1184
|
* Project a bounded snapshot onto the legacy {@link HonuaFeatureTableModel} so
|
|
@@ -2310,6 +2466,7 @@ const WEB_COMPONENT_ELEMENTS = new Map([
|
|
|
2310
2466
|
["honua-layer-list", HonuaLayerListElement],
|
|
2311
2467
|
["honua-legend", HonuaLegendElement],
|
|
2312
2468
|
["honua-feature-table", HonuaFeatureTableElement],
|
|
2469
|
+
["honua-feature-inspection", HonuaFeatureInspectionElement],
|
|
2313
2470
|
["honua-search", HonuaSearchElement],
|
|
2314
2471
|
["honua-editor", HonuaEditorElement],
|
|
2315
2472
|
["honua-feature-editor", HonuaFeatureEditorElement],
|
|
@@ -2544,6 +2701,29 @@ function escapeHtml(value) {
|
|
|
2544
2701
|
function escapeAttribute(value) {
|
|
2545
2702
|
return escapeHtml(value).replace(/'/g, "'");
|
|
2546
2703
|
}
|
|
2704
|
+
function isApplicationSelectionTarget(value) {
|
|
2705
|
+
return (typeof value === "object" &&
|
|
2706
|
+
value !== null &&
|
|
2707
|
+
"sourceId" in value &&
|
|
2708
|
+
typeof value.sourceId === "string" &&
|
|
2709
|
+
"id" in value &&
|
|
2710
|
+
(typeof value.id === "string" || typeof value.id === "number"));
|
|
2711
|
+
}
|
|
2712
|
+
function isApplicationFilterClause(value) {
|
|
2713
|
+
if (typeof value !== "object" || value === null || !("id" in value) || !("owner" in value))
|
|
2714
|
+
return false;
|
|
2715
|
+
const owner = value.owner;
|
|
2716
|
+
return (typeof value.id === "string" &&
|
|
2717
|
+
typeof owner === "object" &&
|
|
2718
|
+
owner !== null &&
|
|
2719
|
+
"kind" in owner &&
|
|
2720
|
+
typeof owner.kind === "string" &&
|
|
2721
|
+
"id" in owner &&
|
|
2722
|
+
typeof owner.id === "string");
|
|
2723
|
+
}
|
|
2724
|
+
function sameApplicationValue(left, right) {
|
|
2725
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
2726
|
+
}
|
|
2547
2727
|
function formatLayerOpacityValue(format, percent) {
|
|
2548
2728
|
if (typeof format === "function")
|
|
2549
2729
|
return format(percent);
|
|
@@ -39,104 +39,19 @@
|
|
|
39
39
|
*
|
|
40
40
|
* @module
|
|
41
41
|
*/
|
|
42
|
-
import {
|
|
42
|
+
import { type HonuaExportRedaction } from "../core/credential-redaction.js";
|
|
43
43
|
import type { HonuaViewportState, HonuaWebComponentState } from "./types.js";
|
|
44
44
|
/** Schema id stamped on every sanitized state document. */
|
|
45
45
|
export declare const HONUA_EXPORT_STATE_SCHEMA = "honua.app-platform.export-state.v1";
|
|
46
|
-
/** Placeholder substituted for any value the export pipeline refuses to emit. */
|
|
47
|
-
export declare const HONUA_EXPORT_REDACTED = "[REDACTED]";
|
|
48
|
-
/** Why a value was withheld from an export. */
|
|
49
|
-
export type HonuaExportRedactionReason =
|
|
50
|
-
/** The property name itself named a credential (`token`, `apiKey`, `cookie`, ...). */
|
|
51
|
-
"sensitive-key"
|
|
52
|
-
/** A URL carried a signature, SAS, or token query parameter, or embedded userinfo. */
|
|
53
|
-
| "signed-url"
|
|
54
|
-
/** A free-text value matched a credential shape (bearer token, JWT, provider key, ...). */
|
|
55
|
-
| "credential-pattern"
|
|
56
|
-
/** A request-header map was dropped because it is not on the export allowlist. */
|
|
57
|
-
| "private-header"
|
|
58
|
-
/** OAuth/authorization scope, audience, tenant, or grant detail. */
|
|
59
|
-
| "authorization-scope"
|
|
60
|
-
/** A source explicitly marked as not exportable by the plan or the source itself. */
|
|
61
|
-
| "non-exportable-source"
|
|
62
|
-
/** A value could not be represented safely (unserializable, cyclic, over budget). */
|
|
63
|
-
| "unsupported-value";
|
|
64
|
-
/** One withheld value, addressed by its path in the sanitized document. */
|
|
65
|
-
export interface HonuaExportRedaction {
|
|
66
|
-
/** Dotted/bracketed path in the *sanitized* document, e.g. `sources[0].endpoint`. */
|
|
67
|
-
readonly path: string;
|
|
68
|
-
readonly reason: HonuaExportRedactionReason;
|
|
69
|
-
}
|
|
70
|
-
/** Thrown when the export pipeline cannot produce a provably credential-free artifact. */
|
|
71
|
-
export declare class HonuaExportSafetyError extends HonuaSdkError {
|
|
72
|
-
readonly reason: HonuaExportRedactionReason | "assertion";
|
|
73
|
-
constructor(message: string, reason?: HonuaExportRedactionReason | "assertion");
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Redacts credential material from arbitrary human-readable text: adapter
|
|
77
|
-
* error messages, titles, status strings, log lines, event detail messages.
|
|
78
|
-
*
|
|
79
|
-
* Percent-encoded payloads are decoded (twice, bounded) before matching so a
|
|
80
|
-
* `%42earer%20abc` style evasion cannot slip a token past the scan; the
|
|
81
|
-
* returned string is the redacted *decoded* form when decoding changed
|
|
82
|
-
* anything, because emitting the still-encoded original would defeat the
|
|
83
|
-
* point.
|
|
84
|
-
*/
|
|
85
|
-
export declare function redactHonuaExportText(value: string): string;
|
|
86
|
-
/** Whether `value` still looks like it carries credential material. */
|
|
87
|
-
export declare function containsCredentialMaterial(value: string): boolean;
|
|
88
46
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Extracts runs of printable ASCII from a binary buffer, joined by newlines.
|
|
96
|
-
*
|
|
97
|
-
* This is the `strings(1)` idea, and it exists because "binary" is not a
|
|
98
|
-
* security boundary. A PNG `tEXt`/`iTXt` chunk, a JPEG `COM` marker, PDF
|
|
99
|
-
* metadata or an embedded XMP packet, an EXIF `UserComment`, a ZIP comment —
|
|
100
|
-
* all carry plainly readable text inside a buffer that will never decode as
|
|
101
|
-
* UTF-8 as a whole. Scanning only whole-buffer-decodable artifacts would let a
|
|
102
|
-
* token ride out inside any of them.
|
|
103
|
-
*
|
|
104
|
-
* Runs shorter than {@link MIN_PRINTABLE_RUN} are dropped: they are the
|
|
105
|
-
* incidental byte values that fall in the ASCII range inside compressed data,
|
|
106
|
-
* and keeping them would produce noise without ever forming a credential.
|
|
107
|
-
*/
|
|
108
|
-
export declare function extractPrintableRuns(bytes: Uint8Array, start?: number, end?: number): string;
|
|
109
|
-
/**
|
|
110
|
-
* Fail-closed credential scan over a binary artifact (REQ-002).
|
|
111
|
-
*
|
|
112
|
-
* Scans in bounded chunks with an overlap, so an arbitrarily large artifact
|
|
113
|
-
* costs bounded memory while a token that straddles a chunk boundary is still
|
|
114
|
-
* caught. Throws {@link HonuaExportSafetyError} on a hit, like the text scan —
|
|
115
|
-
* a credential surviving to this point means an earlier layer is broken, and
|
|
116
|
-
* emitting the bytes anyway is the one outcome that cannot be walked back.
|
|
117
|
-
*/
|
|
118
|
-
export declare function assertCredentialFreeExportBytes(bytes: Uint8Array, label: string): void;
|
|
119
|
-
/** Result of reducing an endpoint URL to its exportable form. */
|
|
120
|
-
export interface HonuaExportEndpointProjection {
|
|
121
|
-
/** `scheme://host[:port]/path` with query, fragment, and userinfo removed, or `undefined` when nothing is safe to emit. */
|
|
122
|
-
readonly endpoint: string | undefined;
|
|
123
|
-
readonly reason?: HonuaExportRedactionReason;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Reduces a source URL to `origin + pathname`, always dropping the query
|
|
127
|
-
* string and fragment.
|
|
128
|
-
*
|
|
129
|
-
* Query strings are where every practical map-service credential lives (Esri
|
|
130
|
-
* `?token=`, Azure SAS `?sv=...&sig=`, S3/GCS presigned `?X-Amz-Signature=`,
|
|
131
|
-
* tile-provider `?api_key=`), and a partial per-parameter allowlist has to be
|
|
132
|
-
* right about every provider forever. Dropping the whole query is the only
|
|
133
|
-
* rule that is right by construction; the origin+path that remains is what an
|
|
134
|
-
* attribution/provenance block legitimately needs.
|
|
135
|
-
*
|
|
136
|
-
* Non-HTTP(S) schemes (`data:`, `blob:`, `file:`), URLs with embedded
|
|
137
|
-
* `user:password@` userinfo, and unparseable strings yield no endpoint at all.
|
|
47
|
+
* The credential recognizer itself now lives in `src/core/credential-redaction.ts`
|
|
48
|
+
* so `src/runtime`'s portable MapPackage export (#1426) can share exactly one
|
|
49
|
+
* scanner across the `@honua/sdk` / `@honua/app-platform` split-package
|
|
50
|
+
* boundary. Every symbol is re-exported here unchanged: this module's published
|
|
51
|
+
* surface, and its two-layer guarantee, are identical to before the move.
|
|
138
52
|
*/
|
|
139
|
-
export
|
|
53
|
+
export { HONUA_EXPORT_REDACTED, HonuaExportSafetyError, assertCredentialFreeExportBytes, assertCredentialFreeExportText, containsCredentialMaterial, extractPrintableRuns, isSensitiveExportKey, projectExportEndpoint, redactHonuaExportText, sanitizeHonuaExportHeaders, } from "../core/credential-redaction.js";
|
|
54
|
+
export type { HonuaExportEndpointProjection, HonuaExportRedaction, HonuaExportRedactionReason, } from "../core/credential-redaction.js";
|
|
140
55
|
export interface SanitizeHonuaExportFilenameOptions {
|
|
141
56
|
/** Caller-supplied title (map title, package id, adapter hint). May be untrusted. */
|
|
142
57
|
readonly title?: string;
|
|
@@ -239,14 +154,8 @@ export interface HonuaExportStateSanitizationResult {
|
|
|
239
154
|
*/
|
|
240
155
|
export declare function sanitizeHonuaExportState(state: HonuaWebComponentState<unknown> | undefined, options?: SanitizeHonuaExportStateOptions): HonuaExportStateSanitizationResult;
|
|
241
156
|
/**
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
*
|
|
157
|
+
* Header allowlist for adapters that make their own requests while producing an
|
|
158
|
+
* export (a server-side renderer, a tile fetch for a print layout). Everything
|
|
159
|
+
* outside this set is a private header for export purposes (REQ-002).
|
|
245
160
|
*/
|
|
246
|
-
export declare function sanitizeHonuaExportHeaders(headers: Readonly<Record<string, string>> | undefined): {
|
|
247
|
-
headers: Readonly<Record<string, string>>;
|
|
248
|
-
redactions: readonly HonuaExportRedaction[];
|
|
249
|
-
};
|
|
250
|
-
/** Whether a property name is refused outright by the export pipeline. */
|
|
251
|
-
export declare function isSensitiveExportKey(name: string): boolean;
|
|
252
161
|
//# sourceMappingURL=export-redaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-redaction.d.ts","sourceRoot":"","sources":["../../../src/web-components/export-redaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"export-redaction.d.ts","sourceRoot":"","sources":["../../../src/web-components/export-redaction.ts"],"names":[],"mappings":"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"}
|