@miragon/pulse-widget-shell 0.0.0-stage → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +164 -2
- package/dist/adapt-data-widget.d.ts +7 -0
- package/dist/adapt-data-widget.d.ts.map +1 -0
- package/dist/adapt-data-widget.js +7 -0
- package/dist/adapt-data-widget.js.map +1 -0
- package/dist/bpmn-names.d.ts +42 -0
- package/dist/bpmn-names.d.ts.map +1 -0
- package/dist/bpmn-names.js +151 -0
- package/dist/bpmn-names.js.map +1 -0
- package/dist/bpmn-names.test.d.ts +2 -0
- package/dist/bpmn-names.test.d.ts.map +1 -0
- package/dist/bpmn-names.test.js +143 -0
- package/dist/bpmn-names.test.js.map +1 -0
- package/dist/build-data-feed-result.test.d.ts +2 -0
- package/dist/build-data-feed-result.test.d.ts.map +1 -0
- package/dist/build-data-feed-result.test.js +28 -0
- package/dist/build-data-feed-result.test.js.map +1 -0
- package/dist/build-single-widget-view.test.d.ts +2 -0
- package/dist/build-single-widget-view.test.d.ts.map +1 -0
- package/dist/build-single-widget-view.test.js +136 -0
- package/dist/build-single-widget-view.test.js.map +1 -0
- package/dist/builder-texts.d.ts +27 -0
- package/dist/builder-texts.d.ts.map +1 -0
- package/dist/builder-texts.js +32 -0
- package/dist/builder-texts.js.map +1 -0
- package/dist/builder-texts.test.d.ts +2 -0
- package/dist/builder-texts.test.d.ts.map +1 -0
- package/dist/builder-texts.test.js +54 -0
- package/dist/builder-texts.test.js.map +1 -0
- package/dist/catalogue-sync.d.ts +18 -0
- package/dist/catalogue-sync.d.ts.map +1 -0
- package/dist/catalogue-sync.js +31 -0
- package/dist/catalogue-sync.js.map +1 -0
- package/dist/catalogue-sync.test.d.ts +2 -0
- package/dist/catalogue-sync.test.d.ts.map +1 -0
- package/dist/catalogue-sync.test.js +22 -0
- package/dist/catalogue-sync.test.js.map +1 -0
- package/dist/composed-server.d.ts +110 -0
- package/dist/composed-server.d.ts.map +1 -0
- package/dist/composed-server.edge.test.d.ts +2 -0
- package/dist/composed-server.edge.test.d.ts.map +1 -0
- package/dist/composed-server.edge.test.js +184 -0
- package/dist/composed-server.edge.test.js.map +1 -0
- package/dist/composed-server.fonts.test.d.ts +2 -0
- package/dist/composed-server.fonts.test.d.ts.map +1 -0
- package/dist/composed-server.fonts.test.js +186 -0
- package/dist/composed-server.fonts.test.js.map +1 -0
- package/dist/composed-server.js +260 -0
- package/dist/composed-server.js.map +1 -0
- package/dist/composed-server.test.d.ts +2 -0
- package/dist/composed-server.test.d.ts.map +1 -0
- package/dist/composed-server.test.js +332 -0
- package/dist/composed-server.test.js.map +1 -0
- package/dist/composition.d.ts +155 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +163 -0
- package/dist/composition.js.map +1 -0
- package/dist/composition.test.d.ts +2 -0
- package/dist/composition.test.d.ts.map +1 -0
- package/dist/composition.test.js +275 -0
- package/dist/composition.test.js.map +1 -0
- package/dist/dashboard-store-postgres.d.ts +43 -0
- package/dist/dashboard-store-postgres.d.ts.map +1 -0
- package/dist/dashboard-store-postgres.js +225 -0
- package/dist/dashboard-store-postgres.js.map +1 -0
- package/dist/dashboard-store-postgres.test.d.ts +2 -0
- package/dist/dashboard-store-postgres.test.d.ts.map +1 -0
- package/dist/dashboard-store-postgres.test.js +272 -0
- package/dist/dashboard-store-postgres.test.js.map +1 -0
- package/dist/font-assets.d.ts +47 -0
- package/dist/font-assets.d.ts.map +1 -0
- package/dist/font-assets.js +93 -0
- package/dist/font-assets.js.map +1 -0
- package/dist/font-assets.test.d.ts +2 -0
- package/dist/font-assets.test.d.ts.map +1 -0
- package/dist/font-assets.test.js +123 -0
- package/dist/font-assets.test.js.map +1 -0
- package/dist/health.d.ts +59 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +74 -0
- package/dist/health.js.map +1 -0
- package/dist/health.test.d.ts +2 -0
- package/dist/health.test.d.ts.map +1 -0
- package/dist/health.test.js +140 -0
- package/dist/health.test.js.map +1 -0
- package/dist/host-boot.d.ts +56 -0
- package/dist/host-boot.d.ts.map +1 -0
- package/dist/host-boot.js +64 -0
- package/dist/host-boot.js.map +1 -0
- package/dist/host-boot.test.d.ts +2 -0
- package/dist/host-boot.test.d.ts.map +1 -0
- package/dist/host-boot.test.js +59 -0
- package/dist/host-boot.test.js.map +1 -0
- package/dist/http-edge.d.ts +117 -0
- package/dist/http-edge.d.ts.map +1 -0
- package/dist/http-edge.js +219 -0
- package/dist/http-edge.js.map +1 -0
- package/dist/http-edge.test.d.ts +2 -0
- package/dist/http-edge.test.d.ts.map +1 -0
- package/dist/http-edge.test.js +255 -0
- package/dist/http-edge.test.js.map +1 -0
- package/dist/metrics.d.ts +48 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +124 -0
- package/dist/metrics.js.map +1 -0
- package/dist/metrics.test.d.ts +2 -0
- package/dist/metrics.test.d.ts.map +1 -0
- package/dist/metrics.test.js +154 -0
- package/dist/metrics.test.js.map +1 -0
- package/dist/node-listener.d.ts +61 -0
- package/dist/node-listener.d.ts.map +1 -0
- package/dist/node-listener.js +165 -0
- package/dist/node-listener.js.map +1 -0
- package/dist/node-listener.test.d.ts +2 -0
- package/dist/node-listener.test.d.ts.map +1 -0
- package/dist/node-listener.test.js +331 -0
- package/dist/node-listener.test.js.map +1 -0
- package/dist/oauth-env.d.ts +42 -0
- package/dist/oauth-env.d.ts.map +1 -0
- package/dist/oauth-env.js +78 -0
- package/dist/oauth-env.js.map +1 -0
- package/dist/oauth-env.test.d.ts +2 -0
- package/dist/oauth-env.test.d.ts.map +1 -0
- package/dist/oauth-env.test.js +76 -0
- package/dist/oauth-env.test.js.map +1 -0
- package/dist/postgres.d.ts +59 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +80 -0
- package/dist/postgres.js.map +1 -0
- package/dist/profile-advisory.d.ts +19 -0
- package/dist/profile-advisory.d.ts.map +1 -0
- package/dist/profile-advisory.js +48 -0
- package/dist/profile-advisory.js.map +1 -0
- package/dist/profile-advisory.test.d.ts +2 -0
- package/dist/profile-advisory.test.d.ts.map +1 -0
- package/dist/profile-advisory.test.js +53 -0
- package/dist/profile-advisory.test.js.map +1 -0
- package/dist/profile-constants.d.ts +37 -0
- package/dist/profile-constants.d.ts.map +1 -0
- package/dist/profile-constants.js +37 -0
- package/dist/profile-constants.js.map +1 -0
- package/dist/profile-migrations.d.ts +71 -0
- package/dist/profile-migrations.d.ts.map +1 -0
- package/dist/profile-migrations.js +88 -0
- package/dist/profile-migrations.js.map +1 -0
- package/dist/profile-migrations.test.d.ts +2 -0
- package/dist/profile-migrations.test.d.ts.map +1 -0
- package/dist/profile-migrations.test.js +200 -0
- package/dist/profile-migrations.test.js.map +1 -0
- package/dist/profile-record.d.ts +60 -0
- package/dist/profile-record.d.ts.map +1 -0
- package/dist/profile-record.js +78 -0
- package/dist/profile-record.js.map +1 -0
- package/dist/profile-slice.d.ts +53 -0
- package/dist/profile-slice.d.ts.map +1 -0
- package/dist/profile-slice.js +73 -0
- package/dist/profile-slice.js.map +1 -0
- package/dist/profile-slice.test.d.ts +2 -0
- package/dist/profile-slice.test.d.ts.map +1 -0
- package/dist/profile-slice.test.js +73 -0
- package/dist/profile-slice.test.js.map +1 -0
- package/dist/profile-store-env.d.ts +34 -0
- package/dist/profile-store-env.d.ts.map +1 -0
- package/dist/profile-store-env.js +44 -0
- package/dist/profile-store-env.js.map +1 -0
- package/dist/profile-store-env.test.d.ts +2 -0
- package/dist/profile-store-env.test.d.ts.map +1 -0
- package/dist/profile-store-env.test.js +69 -0
- package/dist/profile-store-env.test.js.map +1 -0
- package/dist/profile-store-postgres.d.ts +33 -0
- package/dist/profile-store-postgres.d.ts.map +1 -0
- package/dist/profile-store-postgres.js +87 -0
- package/dist/profile-store-postgres.js.map +1 -0
- package/dist/profile-store-raw.test.d.ts +2 -0
- package/dist/profile-store-raw.test.d.ts.map +1 -0
- package/dist/profile-store-raw.test.js +185 -0
- package/dist/profile-store-raw.test.js.map +1 -0
- package/dist/profile-store.d.ts +85 -0
- package/dist/profile-store.d.ts.map +1 -0
- package/dist/profile-store.js +182 -0
- package/dist/profile-store.js.map +1 -0
- package/dist/profile-store.test.d.ts +2 -0
- package/dist/profile-store.test.d.ts.map +1 -0
- package/dist/profile-store.test.js +353 -0
- package/dist/profile-store.test.js.map +1 -0
- package/dist/profile.d.ts +75 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +85 -0
- package/dist/profile.js.map +1 -0
- package/dist/profile.test.d.ts +2 -0
- package/dist/profile.test.d.ts.map +1 -0
- package/dist/profile.test.js +71 -0
- package/dist/profile.test.js.map +1 -0
- package/dist/request-context.d.ts +47 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +85 -0
- package/dist/request-context.js.map +1 -0
- package/dist/request-context.test.d.ts +2 -0
- package/dist/request-context.test.d.ts.map +1 -0
- package/dist/request-context.test.js +107 -0
- package/dist/request-context.test.js.map +1 -0
- package/dist/served-fonts.d.ts +38 -0
- package/dist/served-fonts.d.ts.map +1 -0
- package/dist/served-fonts.js +51 -0
- package/dist/served-fonts.js.map +1 -0
- package/dist/served-fonts.test.d.ts +2 -0
- package/dist/served-fonts.test.d.ts.map +1 -0
- package/dist/served-fonts.test.js +30 -0
- package/dist/served-fonts.test.js.map +1 -0
- package/dist/server-locale.d.ts +58 -0
- package/dist/server-locale.d.ts.map +1 -0
- package/dist/server-locale.js +64 -0
- package/dist/server-locale.js.map +1 -0
- package/dist/server-locale.test.d.ts +2 -0
- package/dist/server-locale.test.d.ts.map +1 -0
- package/dist/server-locale.test.js +90 -0
- package/dist/server-locale.test.js.map +1 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/shell-catalogue.d.ts +12 -0
- package/dist/shell-catalogue.d.ts.map +1 -0
- package/dist/shell-catalogue.js +142 -0
- package/dist/shell-catalogue.js.map +1 -0
- package/dist/shell-settings-contract.d.ts +34 -0
- package/dist/shell-settings-contract.d.ts.map +1 -0
- package/dist/shell-settings-contract.js +21 -0
- package/dist/shell-settings-contract.js.map +1 -0
- package/dist/shell-settings.d.ts +24 -0
- package/dist/shell-settings.d.ts.map +1 -0
- package/dist/shell-settings.js +148 -0
- package/dist/shell-settings.js.map +1 -0
- package/dist/shell-settings.test.d.ts +2 -0
- package/dist/shell-settings.test.d.ts.map +1 -0
- package/dist/shell-settings.test.js +115 -0
- package/dist/shell-settings.test.js.map +1 -0
- package/dist/testing/catalog-text.d.ts +53 -0
- package/dist/testing/catalog-text.d.ts.map +1 -0
- package/dist/testing/catalog-text.js +146 -0
- package/dist/testing/catalog-text.js.map +1 -0
- package/dist/testing/catalog-text.test.d.ts +2 -0
- package/dist/testing/catalog-text.test.d.ts.map +1 -0
- package/dist/testing/catalog-text.test.js +137 -0
- package/dist/testing/catalog-text.test.js.map +1 -0
- package/dist/testing/colors.d.ts +34 -0
- package/dist/testing/colors.d.ts.map +1 -0
- package/dist/testing/colors.js +124 -0
- package/dist/testing/colors.js.map +1 -0
- package/dist/testing/colors.test.d.ts +2 -0
- package/dist/testing/colors.test.d.ts.map +1 -0
- package/dist/testing/colors.test.js +166 -0
- package/dist/testing/colors.test.js.map +1 -0
- package/dist/testing/contrast.d.ts +77 -0
- package/dist/testing/contrast.d.ts.map +1 -0
- package/dist/testing/contrast.js +382 -0
- package/dist/testing/contrast.js.map +1 -0
- package/dist/testing/contrast.test.d.ts +2 -0
- package/dist/testing/contrast.test.d.ts.map +1 -0
- package/dist/testing/contrast.test.js +230 -0
- package/dist/testing/contrast.test.js.map +1 -0
- package/dist/testing/display-texts.d.ts +23 -0
- package/dist/testing/display-texts.d.ts.map +1 -0
- package/dist/testing/display-texts.js +88 -0
- package/dist/testing/display-texts.js.map +1 -0
- package/dist/testing/display-texts.test.d.ts +2 -0
- package/dist/testing/display-texts.test.d.ts.map +1 -0
- package/dist/testing/display-texts.test.js +169 -0
- package/dist/testing/display-texts.test.js.map +1 -0
- package/dist/testing/glossary.d.ts +52 -0
- package/dist/testing/glossary.d.ts.map +1 -0
- package/dist/testing/glossary.js +135 -0
- package/dist/testing/glossary.js.map +1 -0
- package/dist/testing/glossary.test.d.ts +2 -0
- package/dist/testing/glossary.test.d.ts.map +1 -0
- package/dist/testing/glossary.test.js +78 -0
- package/dist/testing/glossary.test.js.map +1 -0
- package/dist/testing/glyphs.d.ts +27 -0
- package/dist/testing/glyphs.d.ts.map +1 -0
- package/dist/testing/glyphs.js +130 -0
- package/dist/testing/glyphs.js.map +1 -0
- package/dist/testing/glyphs.test.d.ts +2 -0
- package/dist/testing/glyphs.test.d.ts.map +1 -0
- package/dist/testing/glyphs.test.js +146 -0
- package/dist/testing/glyphs.test.js.map +1 -0
- package/dist/testing/icon-sizes.d.ts +22 -0
- package/dist/testing/icon-sizes.d.ts.map +1 -0
- package/dist/testing/icon-sizes.js +39 -0
- package/dist/testing/icon-sizes.js.map +1 -0
- package/dist/testing/icon-sizes.test.d.ts +2 -0
- package/dist/testing/icon-sizes.test.d.ts.map +1 -0
- package/dist/testing/icon-sizes.test.js +36 -0
- package/dist/testing/icon-sizes.test.js.map +1 -0
- package/dist/testing/index.d.ts +40 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +40 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/source-scan.d.ts +16 -0
- package/dist/testing/source-scan.d.ts.map +1 -0
- package/dist/testing/source-scan.js +57 -0
- package/dist/testing/source-scan.js.map +1 -0
- package/dist/testing/tone-pairs.d.ts +20 -0
- package/dist/testing/tone-pairs.d.ts.map +1 -0
- package/dist/testing/tone-pairs.js +154 -0
- package/dist/testing/tone-pairs.js.map +1 -0
- package/dist/testing/type-scale.d.ts +40 -0
- package/dist/testing/type-scale.d.ts.map +1 -0
- package/dist/testing/type-scale.js +55 -0
- package/dist/testing/type-scale.js.map +1 -0
- package/dist/testing/type-scale.test.d.ts +2 -0
- package/dist/testing/type-scale.test.d.ts.map +1 -0
- package/dist/testing/type-scale.test.js +61 -0
- package/dist/testing/type-scale.test.js.map +1 -0
- package/dist/tool-schema-trim.d.ts +24 -0
- package/dist/tool-schema-trim.d.ts.map +1 -0
- package/dist/tool-schema-trim.js +49 -0
- package/dist/tool-schema-trim.js.map +1 -0
- package/dist/tool-schema-trim.test.d.ts +2 -0
- package/dist/tool-schema-trim.test.d.ts.map +1 -0
- package/dist/tool-schema-trim.test.js +53 -0
- package/dist/tool-schema-trim.test.js.map +1 -0
- package/dist/toolsets.d.ts +76 -0
- package/dist/toolsets.d.ts.map +1 -0
- package/dist/toolsets.js +41 -0
- package/dist/toolsets.js.map +1 -0
- package/dist/toolsets.test.d.ts +2 -0
- package/dist/toolsets.test.d.ts.map +1 -0
- package/dist/toolsets.test.js +86 -0
- package/dist/toolsets.test.js.map +1 -0
- package/dist/ui/action-feedback.d.ts +33 -0
- package/dist/ui/action-feedback.d.ts.map +1 -0
- package/dist/ui/action-feedback.js +51 -0
- package/dist/ui/action-feedback.js.map +1 -0
- package/dist/ui/action-feedback.test.d.ts +2 -0
- package/dist/ui/action-feedback.test.d.ts.map +1 -0
- package/dist/ui/action-feedback.test.js +77 -0
- package/dist/ui/action-feedback.test.js.map +1 -0
- package/dist/ui/app-shell-providers.d.ts +18 -0
- package/dist/ui/app-shell-providers.d.ts.map +1 -0
- package/dist/ui/app-shell-providers.js +19 -0
- package/dist/ui/app-shell-providers.js.map +1 -0
- package/dist/ui/app-shell-providers.test.d.ts +2 -0
- package/dist/ui/app-shell-providers.test.d.ts.map +1 -0
- package/dist/ui/app-shell-providers.test.js +249 -0
- package/dist/ui/app-shell-providers.test.js.map +1 -0
- package/dist/ui/ask-ai-button.d.ts +56 -0
- package/dist/ui/ask-ai-button.d.ts.map +1 -0
- package/dist/ui/ask-ai-button.js +36 -0
- package/dist/ui/ask-ai-button.js.map +1 -0
- package/dist/ui/ask-ai-button.test.d.ts +2 -0
- package/dist/ui/ask-ai-button.test.d.ts.map +1 -0
- package/dist/ui/ask-ai-button.test.js +103 -0
- package/dist/ui/ask-ai-button.test.js.map +1 -0
- package/dist/ui/ask-ai-prompt.d.ts +115 -0
- package/dist/ui/ask-ai-prompt.d.ts.map +1 -0
- package/dist/ui/ask-ai-prompt.js +174 -0
- package/dist/ui/ask-ai-prompt.js.map +1 -0
- package/dist/ui/ask-ai-prompt.test.d.ts +2 -0
- package/dist/ui/ask-ai-prompt.test.d.ts.map +1 -0
- package/dist/ui/ask-ai-prompt.test.js +240 -0
- package/dist/ui/ask-ai-prompt.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js +174 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts +119 -0
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.js +231 -0
- package/dist/ui/bpmn-heatmap/heat-utils.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.js +59 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap-labels.d.ts +46 -0
- package/dist/ui/bpmn-heatmap-labels.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-labels.js +16 -0
- package/dist/ui/bpmn-heatmap-labels.js.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.d.ts +38 -0
- package/dist/ui/bpmn-heatmap-widget.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.js +65 -0
- package/dist/ui/bpmn-heatmap-widget.js.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.test.js +173 -0
- package/dist/ui/bpmn-heatmap-widget.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap.d.ts +61 -0
- package/dist/ui/bpmn-heatmap.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap.js +119 -0
- package/dist/ui/bpmn-heatmap.js.map +1 -0
- package/dist/ui/bpmn-tokens.d.ts +81 -0
- package/dist/ui/bpmn-tokens.d.ts.map +1 -0
- package/dist/ui/bpmn-tokens.js +114 -0
- package/dist/ui/bpmn-tokens.js.map +1 -0
- package/dist/ui/bpmn-tokens.test.d.ts +2 -0
- package/dist/ui/bpmn-tokens.test.d.ts.map +1 -0
- package/dist/ui/bpmn-tokens.test.js +98 -0
- package/dist/ui/bpmn-tokens.test.js.map +1 -0
- package/dist/ui/bpmn-zoom-controls.d.ts +30 -0
- package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -0
- package/dist/ui/bpmn-zoom-controls.js +29 -0
- package/dist/ui/bpmn-zoom-controls.js.map +1 -0
- package/dist/ui/brand-gates.test.d.ts +2 -0
- package/dist/ui/brand-gates.test.d.ts.map +1 -0
- package/dist/ui/brand-gates.test.js +131 -0
- package/dist/ui/brand-gates.test.js.map +1 -0
- package/dist/ui/brand-mark.d.ts +37 -0
- package/dist/ui/brand-mark.d.ts.map +1 -0
- package/dist/ui/brand-mark.js +33 -0
- package/dist/ui/brand-mark.js.map +1 -0
- package/dist/ui/brand-mark.test.d.ts +2 -0
- package/dist/ui/brand-mark.test.d.ts.map +1 -0
- package/dist/ui/brand-mark.test.js +111 -0
- package/dist/ui/brand-mark.test.js.map +1 -0
- package/dist/ui/confirm-dialog.d.ts +55 -0
- package/dist/ui/confirm-dialog.d.ts.map +1 -0
- package/dist/ui/confirm-dialog.js +59 -0
- package/dist/ui/confirm-dialog.js.map +1 -0
- package/dist/ui/confirm-dialog.test.d.ts +2 -0
- package/dist/ui/confirm-dialog.test.d.ts.map +1 -0
- package/dist/ui/confirm-dialog.test.js +115 -0
- package/dist/ui/confirm-dialog.test.js.map +1 -0
- package/dist/ui/count-tone.d.ts +20 -0
- package/dist/ui/count-tone.d.ts.map +1 -0
- package/dist/ui/count-tone.js +27 -0
- package/dist/ui/count-tone.js.map +1 -0
- package/dist/ui/count-tone.test.d.ts +2 -0
- package/dist/ui/count-tone.test.d.ts.map +1 -0
- package/dist/ui/count-tone.test.js +27 -0
- package/dist/ui/count-tone.test.js.map +1 -0
- package/dist/ui/create-use-t.d.ts +15 -0
- package/dist/ui/create-use-t.d.ts.map +1 -0
- package/dist/ui/create-use-t.js +17 -0
- package/dist/ui/create-use-t.js.map +1 -0
- package/dist/ui/declare-served-fonts.d.ts +14 -0
- package/dist/ui/declare-served-fonts.d.ts.map +1 -0
- package/dist/ui/declare-served-fonts.js +38 -0
- package/dist/ui/declare-served-fonts.js.map +1 -0
- package/dist/ui/declare-served-fonts.test.d.ts +2 -0
- package/dist/ui/declare-served-fonts.test.d.ts.map +1 -0
- package/dist/ui/declare-served-fonts.test.js +44 -0
- package/dist/ui/declare-served-fonts.test.js.map +1 -0
- package/dist/ui/describe-error.d.ts +71 -0
- package/dist/ui/describe-error.d.ts.map +1 -0
- package/dist/ui/describe-error.js +175 -0
- package/dist/ui/describe-error.js.map +1 -0
- package/dist/ui/describe-error.test.d.ts +2 -0
- package/dist/ui/describe-error.test.d.ts.map +1 -0
- package/dist/ui/describe-error.test.js +274 -0
- package/dist/ui/describe-error.test.js.map +1 -0
- package/dist/ui/display-mode-toggle.d.ts +32 -0
- package/dist/ui/display-mode-toggle.d.ts.map +1 -0
- package/dist/ui/display-mode-toggle.js +39 -0
- package/dist/ui/display-mode-toggle.js.map +1 -0
- package/dist/ui/error-labels.d.ts +65 -0
- package/dist/ui/error-labels.d.ts.map +1 -0
- package/dist/ui/error-labels.js +111 -0
- package/dist/ui/error-labels.js.map +1 -0
- package/dist/ui/format.d.ts +81 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +189 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/format.test.d.ts +2 -0
- package/dist/ui/format.test.d.ts.map +1 -0
- package/dist/ui/format.test.js +181 -0
- package/dist/ui/format.test.js.map +1 -0
- package/dist/ui/generic-widgets.d.ts +15 -0
- package/dist/ui/generic-widgets.d.ts.map +1 -0
- package/dist/ui/generic-widgets.js +122 -0
- package/dist/ui/generic-widgets.js.map +1 -0
- package/dist/ui/generic-widgets.test.d.ts +2 -0
- package/dist/ui/generic-widgets.test.d.ts.map +1 -0
- package/dist/ui/generic-widgets.test.js +139 -0
- package/dist/ui/generic-widgets.test.js.map +1 -0
- package/dist/ui/hand-off-button.d.ts +44 -0
- package/dist/ui/hand-off-button.d.ts.map +1 -0
- package/dist/ui/hand-off-button.js +44 -0
- package/dist/ui/hand-off-button.js.map +1 -0
- package/dist/ui/hand-off-button.test.d.ts +2 -0
- package/dist/ui/hand-off-button.test.d.ts.map +1 -0
- package/dist/ui/hand-off-button.test.js +78 -0
- package/dist/ui/hand-off-button.test.js.map +1 -0
- package/dist/ui/host-context.d.ts +66 -0
- package/dist/ui/host-context.d.ts.map +1 -0
- package/dist/ui/host-context.js +122 -0
- package/dist/ui/host-context.js.map +1 -0
- package/dist/ui/host-context.test.d.ts +2 -0
- package/dist/ui/host-context.test.d.ts.map +1 -0
- package/dist/ui/host-context.test.js +160 -0
- package/dist/ui/host-context.test.js.map +1 -0
- package/dist/ui/host-document.d.ts +25 -0
- package/dist/ui/host-document.d.ts.map +1 -0
- package/dist/ui/host-document.js +93 -0
- package/dist/ui/host-document.js.map +1 -0
- package/dist/ui/host-document.test.d.ts +2 -0
- package/dist/ui/host-document.test.d.ts.map +1 -0
- package/dist/ui/host-document.test.js +112 -0
- package/dist/ui/host-document.test.js.map +1 -0
- package/dist/ui/host-widgets.d.ts +8 -0
- package/dist/ui/host-widgets.d.ts.map +1 -0
- package/dist/ui/host-widgets.js +18 -0
- package/dist/ui/host-widgets.js.map +1 -0
- package/dist/ui/humanize-key.d.ts +11 -0
- package/dist/ui/humanize-key.d.ts.map +1 -0
- package/dist/ui/humanize-key.js +26 -0
- package/dist/ui/humanize-key.js.map +1 -0
- package/dist/ui/humanize-key.test.d.ts +2 -0
- package/dist/ui/humanize-key.test.d.ts.map +1 -0
- package/dist/ui/humanize-key.test.js +42 -0
- package/dist/ui/humanize-key.test.js.map +1 -0
- package/dist/ui/icon.d.ts +37 -0
- package/dist/ui/icon.d.ts.map +1 -0
- package/dist/ui/icon.js +32 -0
- package/dist/ui/icon.js.map +1 -0
- package/dist/ui/id-breaks.d.ts +17 -0
- package/dist/ui/id-breaks.d.ts.map +1 -0
- package/dist/ui/id-breaks.js +36 -0
- package/dist/ui/id-breaks.js.map +1 -0
- package/dist/ui/id-breaks.test.d.ts +2 -0
- package/dist/ui/id-breaks.test.d.ts.map +1 -0
- package/dist/ui/id-breaks.test.js +37 -0
- package/dist/ui/id-breaks.test.js.map +1 -0
- package/dist/ui/id-text.d.ts +29 -0
- package/dist/ui/id-text.d.ts.map +1 -0
- package/dist/ui/id-text.js +103 -0
- package/dist/ui/id-text.js.map +1 -0
- package/dist/ui/id-text.test.d.ts +2 -0
- package/dist/ui/id-text.test.d.ts.map +1 -0
- package/dist/ui/id-text.test.js +122 -0
- package/dist/ui/id-text.test.js.map +1 -0
- package/dist/ui/index.d.ts +57 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +65 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.test.d.ts +2 -0
- package/dist/ui/index.test.d.ts.map +1 -0
- package/dist/ui/index.test.js +34 -0
- package/dist/ui/index.test.js.map +1 -0
- package/dist/ui/inline-budget.d.ts +35 -0
- package/dist/ui/inline-budget.d.ts.map +1 -0
- package/dist/ui/inline-budget.js +27 -0
- package/dist/ui/inline-budget.js.map +1 -0
- package/dist/ui/inline-fit-registry.d.ts +56 -0
- package/dist/ui/inline-fit-registry.d.ts.map +1 -0
- package/dist/ui/inline-fit-registry.js +114 -0
- package/dist/ui/inline-fit-registry.js.map +1 -0
- package/dist/ui/inline-fit-solve.d.ts +50 -0
- package/dist/ui/inline-fit-solve.d.ts.map +1 -0
- package/dist/ui/inline-fit-solve.js +83 -0
- package/dist/ui/inline-fit-solve.js.map +1 -0
- package/dist/ui/inline-fit-solve.test.d.ts +2 -0
- package/dist/ui/inline-fit-solve.test.d.ts.map +1 -0
- package/dist/ui/inline-fit-solve.test.js +108 -0
- package/dist/ui/inline-fit-solve.test.js.map +1 -0
- package/dist/ui/inline-fit-time.test.d.ts +2 -0
- package/dist/ui/inline-fit-time.test.d.ts.map +1 -0
- package/dist/ui/inline-fit-time.test.js +110 -0
- package/dist/ui/inline-fit-time.test.js.map +1 -0
- package/dist/ui/inline-fit.d.ts +77 -0
- package/dist/ui/inline-fit.d.ts.map +1 -0
- package/dist/ui/inline-fit.js +242 -0
- package/dist/ui/inline-fit.js.map +1 -0
- package/dist/ui/inline-fit.test-support.d.ts +26 -0
- package/dist/ui/inline-fit.test-support.d.ts.map +1 -0
- package/dist/ui/inline-fit.test-support.js +34 -0
- package/dist/ui/inline-fit.test-support.js.map +1 -0
- package/dist/ui/inline-fit.test.d.ts +2 -0
- package/dist/ui/inline-fit.test.d.ts.map +1 -0
- package/dist/ui/inline-fit.test.js +159 -0
- package/dist/ui/inline-fit.test.js.map +1 -0
- package/dist/ui/kit-labels.d.ts +80 -0
- package/dist/ui/kit-labels.d.ts.map +1 -0
- package/dist/ui/kit-labels.js +110 -0
- package/dist/ui/kit-labels.js.map +1 -0
- package/dist/ui/kit-labels.test.d.ts +2 -0
- package/dist/ui/kit-labels.test.d.ts.map +1 -0
- package/dist/ui/kit-labels.test.js +98 -0
- package/dist/ui/kit-labels.test.js.map +1 -0
- package/dist/ui/kit-type-roles.test.d.ts +2 -0
- package/dist/ui/kit-type-roles.test.d.ts.map +1 -0
- package/dist/ui/kit-type-roles.test.js +122 -0
- package/dist/ui/kit-type-roles.test.js.map +1 -0
- package/dist/ui/komet-svg.d.ts +15 -0
- package/dist/ui/komet-svg.d.ts.map +1 -0
- package/dist/ui/komet-svg.js +21 -0
- package/dist/ui/komet-svg.js.map +1 -0
- package/dist/ui/list-table.d.ts +108 -0
- package/dist/ui/list-table.d.ts.map +1 -0
- package/dist/ui/list-table.js +161 -0
- package/dist/ui/list-table.js.map +1 -0
- package/dist/ui/list-table.test.d.ts +2 -0
- package/dist/ui/list-table.test.d.ts.map +1 -0
- package/dist/ui/list-table.test.js +169 -0
- package/dist/ui/list-table.test.js.map +1 -0
- package/dist/ui/localized-app-view.d.ts +40 -0
- package/dist/ui/localized-app-view.d.ts.map +1 -0
- package/dist/ui/localized-app-view.js +71 -0
- package/dist/ui/localized-app-view.js.map +1 -0
- package/dist/ui/log-text.d.ts +24 -0
- package/dist/ui/log-text.d.ts.map +1 -0
- package/dist/ui/log-text.js +31 -0
- package/dist/ui/log-text.js.map +1 -0
- package/dist/ui/menu-item.d.ts +12 -0
- package/dist/ui/menu-item.d.ts.map +1 -0
- package/dist/ui/menu-item.js +13 -0
- package/dist/ui/menu-item.js.map +1 -0
- package/dist/ui/named-id.d.ts +23 -0
- package/dist/ui/named-id.d.ts.map +1 -0
- package/dist/ui/named-id.js +21 -0
- package/dist/ui/named-id.js.map +1 -0
- package/dist/ui/named-id.test.d.ts +2 -0
- package/dist/ui/named-id.test.d.ts.map +1 -0
- package/dist/ui/named-id.test.js +57 -0
- package/dist/ui/named-id.test.js.map +1 -0
- package/dist/ui/native-select.d.ts +17 -0
- package/dist/ui/native-select.d.ts.map +1 -0
- package/dist/ui/native-select.js +20 -0
- package/dist/ui/native-select.js.map +1 -0
- package/dist/ui/navigation-focus.d.ts +20 -0
- package/dist/ui/navigation-focus.d.ts.map +1 -0
- package/dist/ui/navigation-focus.js +25 -0
- package/dist/ui/navigation-focus.js.map +1 -0
- package/dist/ui/navigation-focus.test.d.ts +2 -0
- package/dist/ui/navigation-focus.test.d.ts.map +1 -0
- package/dist/ui/navigation-focus.test.js +28 -0
- package/dist/ui/navigation-focus.test.js.map +1 -0
- package/dist/ui/open-in-cockpit-link.d.ts +28 -0
- package/dist/ui/open-in-cockpit-link.d.ts.map +1 -0
- package/dist/ui/open-in-cockpit-link.js +41 -0
- package/dist/ui/open-in-cockpit-link.js.map +1 -0
- package/dist/ui/paged-list-footer.test.d.ts +2 -0
- package/dist/ui/paged-list-footer.test.d.ts.map +1 -0
- package/dist/ui/paged-list-footer.test.js +128 -0
- package/dist/ui/paged-list-footer.test.js.map +1 -0
- package/dist/ui/paged-rows.d.ts +24 -0
- package/dist/ui/paged-rows.d.ts.map +1 -0
- package/dist/ui/paged-rows.js +25 -0
- package/dist/ui/paged-rows.js.map +1 -0
- package/dist/ui/parse-tool-result.test.d.ts +2 -0
- package/dist/ui/parse-tool-result.test.d.ts.map +1 -0
- package/dist/ui/parse-tool-result.test.js +88 -0
- package/dist/ui/parse-tool-result.test.js.map +1 -0
- package/dist/ui/profile-gate.d.ts +37 -0
- package/dist/ui/profile-gate.d.ts.map +1 -0
- package/dist/ui/profile-gate.js +126 -0
- package/dist/ui/profile-gate.js.map +1 -0
- package/dist/ui/profile-gate.test.d.ts +2 -0
- package/dist/ui/profile-gate.test.d.ts.map +1 -0
- package/dist/ui/profile-gate.test.js +246 -0
- package/dist/ui/profile-gate.test.js.map +1 -0
- package/dist/ui/query-fallback.d.ts +27 -0
- package/dist/ui/query-fallback.d.ts.map +1 -0
- package/dist/ui/query-fallback.js +30 -0
- package/dist/ui/query-fallback.js.map +1 -0
- package/dist/ui/query-fallback.test.d.ts +2 -0
- package/dist/ui/query-fallback.test.d.ts.map +1 -0
- package/dist/ui/query-fallback.test.js +49 -0
- package/dist/ui/query-fallback.test.js.map +1 -0
- package/dist/ui/row-card.d.ts +13 -0
- package/dist/ui/row-card.d.ts.map +1 -0
- package/dist/ui/row-card.js +11 -0
- package/dist/ui/row-card.js.map +1 -0
- package/dist/ui/section.d.ts +18 -0
- package/dist/ui/section.d.ts.map +1 -0
- package/dist/ui/section.js +14 -0
- package/dist/ui/section.js.map +1 -0
- package/dist/ui/segmented-control.d.ts +25 -0
- package/dist/ui/segmented-control.d.ts.map +1 -0
- package/dist/ui/segmented-control.js +22 -0
- package/dist/ui/segmented-control.js.map +1 -0
- package/dist/ui/settings-labels.d.ts +33 -0
- package/dist/ui/settings-labels.d.ts.map +1 -0
- package/dist/ui/settings-labels.js +50 -0
- package/dist/ui/settings-labels.js.map +1 -0
- package/dist/ui/settings-layout.d.ts +29 -0
- package/dist/ui/settings-layout.d.ts.map +1 -0
- package/dist/ui/settings-layout.js +49 -0
- package/dist/ui/settings-layout.js.map +1 -0
- package/dist/ui/settings-layout.test.d.ts +2 -0
- package/dist/ui/settings-layout.test.d.ts.map +1 -0
- package/dist/ui/settings-layout.test.js +73 -0
- package/dist/ui/settings-layout.test.js.map +1 -0
- package/dist/ui/settings.d.ts +47 -0
- package/dist/ui/settings.d.ts.map +1 -0
- package/dist/ui/settings.js +48 -0
- package/dist/ui/settings.js.map +1 -0
- package/dist/ui/settings.test.d.ts +2 -0
- package/dist/ui/settings.test.d.ts.map +1 -0
- package/dist/ui/settings.test.js +38 -0
- package/dist/ui/settings.test.js.map +1 -0
- package/dist/ui/shell-host.d.ts +46 -0
- package/dist/ui/shell-host.d.ts.map +1 -0
- package/dist/ui/shell-host.js +56 -0
- package/dist/ui/shell-host.js.map +1 -0
- package/dist/ui/shell-settings.d.ts +31 -0
- package/dist/ui/shell-settings.d.ts.map +1 -0
- package/dist/ui/shell-settings.js +97 -0
- package/dist/ui/shell-settings.js.map +1 -0
- package/dist/ui/shell-settings.test.d.ts +2 -0
- package/dist/ui/shell-settings.test.d.ts.map +1 -0
- package/dist/ui/shell-settings.test.js +108 -0
- package/dist/ui/shell-settings.test.js.map +1 -0
- package/dist/ui/shell-widgets.d.ts +14 -0
- package/dist/ui/shell-widgets.d.ts.map +1 -0
- package/dist/ui/shell-widgets.js +18 -0
- package/dist/ui/shell-widgets.js.map +1 -0
- package/dist/ui/table.d.ts +61 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +43 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/tone-components.test.d.ts +2 -0
- package/dist/ui/tone-components.test.d.ts.map +1 -0
- package/dist/ui/tone-components.test.js +145 -0
- package/dist/ui/tone-components.test.js.map +1 -0
- package/dist/ui/tone-contrast.test.d.ts +2 -0
- package/dist/ui/tone-contrast.test.d.ts.map +1 -0
- package/dist/ui/tone-contrast.test.js +66 -0
- package/dist/ui/tone-contrast.test.js.map +1 -0
- package/dist/ui/toolkit-overlap.test.d.ts +2 -0
- package/dist/ui/toolkit-overlap.test.d.ts.map +1 -0
- package/dist/ui/toolkit-overlap.test.js +86 -0
- package/dist/ui/toolkit-overlap.test.js.map +1 -0
- package/dist/ui/use-apply-theme.d.ts +11 -0
- package/dist/ui/use-apply-theme.d.ts.map +1 -0
- package/dist/ui/use-apply-theme.js +37 -0
- package/dist/ui/use-apply-theme.js.map +1 -0
- package/dist/ui/use-apply-theme.test.d.ts +2 -0
- package/dist/ui/use-apply-theme.test.d.ts.map +1 -0
- package/dist/ui/use-apply-theme.test.js +102 -0
- package/dist/ui/use-apply-theme.test.js.map +1 -0
- package/dist/ui/use-bpmn-viewer.d.ts +135 -0
- package/dist/ui/use-bpmn-viewer.d.ts.map +1 -0
- package/dist/ui/use-bpmn-viewer.js +257 -0
- package/dist/ui/use-bpmn-viewer.js.map +1 -0
- package/dist/ui/use-bpmn-viewer.test.d.ts +2 -0
- package/dist/ui/use-bpmn-viewer.test.d.ts.map +1 -0
- package/dist/ui/use-bpmn-viewer.test.js +239 -0
- package/dist/ui/use-bpmn-viewer.test.js.map +1 -0
- package/dist/ui/use-detail-view.d.ts +49 -0
- package/dist/ui/use-detail-view.d.ts.map +1 -0
- package/dist/ui/use-detail-view.js +52 -0
- package/dist/ui/use-detail-view.js.map +1 -0
- package/dist/ui/use-detail-view.test.d.ts +2 -0
- package/dist/ui/use-detail-view.test.d.ts.map +1 -0
- package/dist/ui/use-detail-view.test.js +178 -0
- package/dist/ui/use-detail-view.test.js.map +1 -0
- package/dist/ui/use-paged-list-view.d.ts +48 -0
- package/dist/ui/use-paged-list-view.d.ts.map +1 -0
- package/dist/ui/use-paged-list-view.js +41 -0
- package/dist/ui/use-paged-list-view.js.map +1 -0
- package/dist/ui/use-paged-list-view.test.d.ts +2 -0
- package/dist/ui/use-paged-list-view.test.d.ts.map +1 -0
- package/dist/ui/use-paged-list-view.test.js +136 -0
- package/dist/ui/use-paged-list-view.test.js.map +1 -0
- package/dist/ui/use-paged-view-data.d.ts +103 -0
- package/dist/ui/use-paged-view-data.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.js +173 -0
- package/dist/ui/use-paged-view-data.js.map +1 -0
- package/dist/ui/use-paged-view-data.seeded.test.d.ts +2 -0
- package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.seeded.test.js +144 -0
- package/dist/ui/use-paged-view-data.seeded.test.js.map +1 -0
- package/dist/ui/use-paged-view-data.test.d.ts +2 -0
- package/dist/ui/use-paged-view-data.test.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.test.js +330 -0
- package/dist/ui/use-paged-view-data.test.js.map +1 -0
- package/dist/ui/use-reset-on-change.d.ts +22 -0
- package/dist/ui/use-reset-on-change.d.ts.map +1 -0
- package/dist/ui/use-reset-on-change.js +29 -0
- package/dist/ui/use-reset-on-change.js.map +1 -0
- package/dist/ui/use-reset-on-change.test.d.ts +2 -0
- package/dist/ui/use-reset-on-change.test.d.ts.map +1 -0
- package/dist/ui/use-reset-on-change.test.js +61 -0
- package/dist/ui/use-reset-on-change.test.js.map +1 -0
- package/dist/ui/use-view-data.seeded.test.d.ts +2 -0
- package/dist/ui/use-view-data.seeded.test.d.ts.map +1 -0
- package/dist/ui/use-view-data.seeded.test.js +168 -0
- package/dist/ui/use-view-data.seeded.test.js.map +1 -0
- package/dist/ui/view-data-state.d.ts +52 -0
- package/dist/ui/view-data-state.d.ts.map +1 -0
- package/dist/ui/view-data-state.js +54 -0
- package/dist/ui/view-data-state.js.map +1 -0
- package/dist/ui/view-data-state.test.d.ts +2 -0
- package/dist/ui/view-data-state.test.d.ts.map +1 -0
- package/dist/ui/view-data-state.test.js +62 -0
- package/dist/ui/view-data-state.test.js.map +1 -0
- package/dist/ui/view-meta.d.ts +70 -0
- package/dist/ui/view-meta.d.ts.map +1 -0
- package/dist/ui/view-meta.js +84 -0
- package/dist/ui/view-meta.js.map +1 -0
- package/dist/ui/view-meta.test.d.ts +2 -0
- package/dist/ui/view-meta.test.d.ts.map +1 -0
- package/dist/ui/view-meta.test.js +92 -0
- package/dist/ui/view-meta.test.js.map +1 -0
- package/dist/ui/view-refresh-state.d.ts +26 -0
- package/dist/ui/view-refresh-state.d.ts.map +1 -0
- package/dist/ui/view-refresh-state.js +15 -0
- package/dist/ui/view-refresh-state.js.map +1 -0
- package/dist/ui/widget-shell.d.ts +24 -0
- package/dist/ui/widget-shell.d.ts.map +1 -0
- package/dist/ui/widget-shell.js +50 -0
- package/dist/ui/widget-shell.js.map +1 -0
- package/dist/ui/widget-shell.test.d.ts +2 -0
- package/dist/ui/widget-shell.test.d.ts.map +1 -0
- package/dist/ui/widget-shell.test.js +41 -0
- package/dist/ui/widget-shell.test.js.map +1 -0
- package/dist/view-results.d.ts +42 -0
- package/dist/view-results.d.ts.map +1 -0
- package/dist/view-results.js +17 -0
- package/dist/view-results.js.map +1 -0
- package/dist/widget-meta-defaults.d.ts +48 -0
- package/dist/widget-meta-defaults.d.ts.map +1 -0
- package/dist/widget-meta-defaults.js +80 -0
- package/dist/widget-meta-defaults.js.map +1 -0
- package/dist/widget-meta-defaults.test.d.ts +2 -0
- package/dist/widget-meta-defaults.test.d.ts.map +1 -0
- package/dist/widget-meta-defaults.test.js +196 -0
- package/dist/widget-meta-defaults.test.js.map +1 -0
- package/dist/widget-tool-bindings.d.ts +71 -0
- package/dist/widget-tool-bindings.d.ts.map +1 -0
- package/dist/widget-tool-bindings.js +80 -0
- package/dist/widget-tool-bindings.js.map +1 -0
- package/dist/widget-tool-bindings.test.d.ts +2 -0
- package/dist/widget-tool-bindings.test.d.ts.map +1 -0
- package/dist/widget-tool-bindings.test.js +83 -0
- package/dist/widget-tool-bindings.test.js.map +1 -0
- package/dist/with-tool-errors.test.d.ts +2 -0
- package/dist/with-tool-errors.test.d.ts.map +1 -0
- package/dist/with-tool-errors.test.js +38 -0
- package/dist/with-tool-errors.test.js.map +1 -0
- package/package.json +113 -3
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { parseToolResult, parseViewToolResult } from "@miragon/mcp-toolkit-ui";
|
|
3
|
+
describe("parseToolResult (structuredContent-first contract)", () => {
|
|
4
|
+
it("prefers structuredContent over the text channel", () => {
|
|
5
|
+
const result = {
|
|
6
|
+
content: [{ type: "text", text: "Process list: 2 definitions." }],
|
|
7
|
+
structuredContent: { items: [1, 2], total: 2 },
|
|
8
|
+
};
|
|
9
|
+
expect(parseToolResult(result)).toEqual({ items: [1, 2], total: 2 });
|
|
10
|
+
});
|
|
11
|
+
it("prefers structuredContent even when the text channel is parseable JSON", () => {
|
|
12
|
+
const result = {
|
|
13
|
+
content: [{ type: "text", text: JSON.stringify({ fromText: true }) }],
|
|
14
|
+
structuredContent: { fromStructured: true },
|
|
15
|
+
};
|
|
16
|
+
expect(parseToolResult(result)).toEqual({ fromStructured: true });
|
|
17
|
+
});
|
|
18
|
+
it("falls back to JSON-decoding the first text block without structuredContent", () => {
|
|
19
|
+
const result = {
|
|
20
|
+
content: [{ type: "text", text: JSON.stringify({ items: [1, 2], total: 2 }) }],
|
|
21
|
+
};
|
|
22
|
+
expect(parseToolResult(result)).toEqual({ items: [1, 2], total: 2 });
|
|
23
|
+
});
|
|
24
|
+
it("returns non-JSON text verbatim without structuredContent", () => {
|
|
25
|
+
const result = { content: [{ type: "text", text: "plain status line" }] };
|
|
26
|
+
expect(parseToolResult(result)).toBe("plain status line");
|
|
27
|
+
});
|
|
28
|
+
it("falls back to the raw result when neither channel is present", () => {
|
|
29
|
+
const result = { something: "else" };
|
|
30
|
+
expect(parseToolResult(result)).toEqual({ something: "else" });
|
|
31
|
+
});
|
|
32
|
+
it("throws the first text block as the error message on isError results", () => {
|
|
33
|
+
const result = { isError: true, content: [{ type: "text", text: "boom" }] };
|
|
34
|
+
expect(() => parseToolResult(result)).toThrowError("boom");
|
|
35
|
+
});
|
|
36
|
+
it("throws a generic message on isError results without content", () => {
|
|
37
|
+
expect(() => parseToolResult({ isError: true })).toThrowError("Tool call failed");
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe("parseViewToolResult (show-tool envelope unwrap)", () => {
|
|
41
|
+
it("unwraps a single-step view envelope to the widget's flat data", () => {
|
|
42
|
+
const result = {
|
|
43
|
+
content: [{ type: "text", text: "Model summary." }],
|
|
44
|
+
structuredContent: {
|
|
45
|
+
title: "Instances",
|
|
46
|
+
context: {
|
|
47
|
+
keys: {},
|
|
48
|
+
stepIds: ["result"],
|
|
49
|
+
stepData: { result: { data: { rows: [1], total: 1 }, keys: {} } },
|
|
50
|
+
errors: [],
|
|
51
|
+
},
|
|
52
|
+
layout: [],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
expect(parseViewToolResult(result)).toEqual({ rows: [1], total: 1 });
|
|
56
|
+
});
|
|
57
|
+
it("returns multi-step composed views keyed by step id", () => {
|
|
58
|
+
const result = {
|
|
59
|
+
structuredContent: {
|
|
60
|
+
context: {
|
|
61
|
+
stepIds: ["kpis", "result_1"],
|
|
62
|
+
stepData: {
|
|
63
|
+
kpis: { data: { totalCount: 5 } },
|
|
64
|
+
result_1: { data: { patterns: [] } },
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
layout: [],
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
expect(parseViewToolResult(result)).toEqual({
|
|
71
|
+
kpis: { totalCount: 5 },
|
|
72
|
+
result_1: { patterns: [] },
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
it("passes non-envelope results (e.g. *_data feeds) through unchanged", () => {
|
|
76
|
+
const data = { jobs: [], totalCount: 0 };
|
|
77
|
+
const result = {
|
|
78
|
+
content: [{ type: "text", text: JSON.stringify(data) }],
|
|
79
|
+
structuredContent: data,
|
|
80
|
+
};
|
|
81
|
+
expect(parseViewToolResult(result)).toEqual(data);
|
|
82
|
+
});
|
|
83
|
+
it("propagates isError results as thrown errors", () => {
|
|
84
|
+
const result = { isError: true, content: [{ type: "text", text: "boom" }] };
|
|
85
|
+
expect(() => parseViewToolResult(result)).toThrowError("boom");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=parse-tool-result.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-tool-result.test.js","sourceRoot":"","sources":["../../src/ui/parse-tool-result.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface ProfileGateProps {
|
|
3
|
+
/**
|
|
4
|
+
* The first paint's bound wait for the profile (ms, default
|
|
5
|
+
* {@link PROFILE_WAIT_MS}), counted from the host connection — a slow
|
|
6
|
+
* handshake never eats into it: a feed that neither answers nor fails in
|
|
7
|
+
* time (a slow store) renders from the host context instead of holding the
|
|
8
|
+
* view.
|
|
9
|
+
*/
|
|
10
|
+
profileWaitMs?: number;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolves the active user profile once at the app root — the shell's own
|
|
15
|
+
* feed (`shell_settings_data`), under the key the language section shares
|
|
16
|
+
* ({@link SHELL_SETTINGS_KEY}), so a saved language re-fetches one entry and
|
|
17
|
+
* flips every view live (the refetch never re-shows the first-paint
|
|
18
|
+
* skeleton) — and turns it, with
|
|
19
|
+
* the host context ({@link useShellHost}), into the view's ONE effective
|
|
20
|
+
* locale and theme — so every widget is localized and themed with zero
|
|
21
|
+
* per-widget wiring:
|
|
22
|
+
* - language: explicit profile choice > `hostContext.locale` > English;
|
|
23
|
+
* - theme: `hostContext.theme` > the OS (applied document-wide by
|
|
24
|
+
* {@link useApplyTheme}; there is no in-app theme switch);
|
|
25
|
+
* - the shared date formatters follow the same locale and the host's time zone.
|
|
26
|
+
* The first paint waits for the host handshake (bounded by {@link HOST_WAIT_MS}),
|
|
27
|
+
* then for the profile (bounded by `profileWaitMs` from the connection) behind
|
|
28
|
+
* a neutral skeleton, so a German profile or a dark host never flashes English
|
|
29
|
+
* or the OS theme first. A feed that FAILS (e.g. a root without a profile store
|
|
30
|
+
* registers no settings tools, or the host cannot call server tools) releases
|
|
31
|
+
* the gate at its first failure
|
|
32
|
+
* with the host-derived values — react-query keeps the query pending through
|
|
33
|
+
* its retries, which run on in the background; a retry that answers later
|
|
34
|
+
* still applies live.
|
|
35
|
+
*/
|
|
36
|
+
export declare function ProfileGate({ profileWaitMs, children }: ProfileGateProps): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=profile-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-gate.d.ts","sourceRoot":"","sources":["../../src/ui/profile-gate.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAoCd,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAaxE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useState, useSyncExternalStore, } from "react";
|
|
3
|
+
import { AppQueryProvider, LocaleProvider, Skeleton, useToolQuery } from "@miragon/mcp-toolkit-ui";
|
|
4
|
+
import { useHostBridge } from "@miragon/mcp-toolkit-ui/app";
|
|
5
|
+
import { getFormatLocale, setFormatLocale, subscribeFormatLocale, } from "./format.js";
|
|
6
|
+
import { formattingLocale, resolveLanguage, validTimeZone } from "./host-context.js";
|
|
7
|
+
import { SHELL_SETTINGS_DATA } from "../shell-settings-contract.js";
|
|
8
|
+
import { kitLabels } from "./kit-labels.js";
|
|
9
|
+
import { SHELL_SETTINGS_KEY } from "./shell-settings.js";
|
|
10
|
+
import { useShellHost } from "./shell-host.js";
|
|
11
|
+
import { useApplyTheme } from "./use-apply-theme.js";
|
|
12
|
+
/**
|
|
13
|
+
* How long the first paint waits for the profile, counted from the host
|
|
14
|
+
* connection, before it renders from the host context alone.
|
|
15
|
+
*/
|
|
16
|
+
const PROFILE_WAIT_MS = 1_500;
|
|
17
|
+
/**
|
|
18
|
+
* How long the first paint waits for the host handshake itself, counted from
|
|
19
|
+
* mount. Deliberately longer than the profile wait: painting before the host
|
|
20
|
+
* context arrived is exactly the OS-theme/English flash the gate exists to
|
|
21
|
+
* prevent, so only a host that never answers `ui/initialize` gets a view
|
|
22
|
+
* without it.
|
|
23
|
+
*/
|
|
24
|
+
const HOST_WAIT_MS = 5_000;
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the active user profile once at the app root — the shell's own
|
|
27
|
+
* feed (`shell_settings_data`), under the key the language section shares
|
|
28
|
+
* ({@link SHELL_SETTINGS_KEY}), so a saved language re-fetches one entry and
|
|
29
|
+
* flips every view live (the refetch never re-shows the first-paint
|
|
30
|
+
* skeleton) — and turns it, with
|
|
31
|
+
* the host context ({@link useShellHost}), into the view's ONE effective
|
|
32
|
+
* locale and theme — so every widget is localized and themed with zero
|
|
33
|
+
* per-widget wiring:
|
|
34
|
+
* - language: explicit profile choice > `hostContext.locale` > English;
|
|
35
|
+
* - theme: `hostContext.theme` > the OS (applied document-wide by
|
|
36
|
+
* {@link useApplyTheme}; there is no in-app theme switch);
|
|
37
|
+
* - the shared date formatters follow the same locale and the host's time zone.
|
|
38
|
+
* The first paint waits for the host handshake (bounded by {@link HOST_WAIT_MS}),
|
|
39
|
+
* then for the profile (bounded by `profileWaitMs` from the connection) behind
|
|
40
|
+
* a neutral skeleton, so a German profile or a dark host never flashes English
|
|
41
|
+
* or the OS theme first. A feed that FAILS (e.g. a root without a profile store
|
|
42
|
+
* registers no settings tools, or the host cannot call server tools) releases
|
|
43
|
+
* the gate at its first failure
|
|
44
|
+
* with the host-derived values — react-query keeps the query pending through
|
|
45
|
+
* its retries, which run on in the background; a retry that answers later
|
|
46
|
+
* still applies live.
|
|
47
|
+
*/
|
|
48
|
+
export function ProfileGate({ profileWaitMs, children }) {
|
|
49
|
+
const { callTool } = useHostBridge();
|
|
50
|
+
// Adapt the host bridge's `Record<string, unknown>` args to the provider's
|
|
51
|
+
// `object` signature.
|
|
52
|
+
const callToolFn = useCallback((name, args) => callTool(name, args), [callTool]);
|
|
53
|
+
return (_jsx(AppQueryProvider, { callTool: callToolFn, children: _jsx(ProfileGateInner, { profileWaitMs: profileWaitMs, children: children }) }));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* True once `ms` elapsed since `start` first held. The clock starts once and
|
|
57
|
+
* never restarts, and the result never flips back.
|
|
58
|
+
*/
|
|
59
|
+
function useElapsedSince(start, ms) {
|
|
60
|
+
const [started, setStarted] = useState(start);
|
|
61
|
+
if (start && !started)
|
|
62
|
+
setStarted(true);
|
|
63
|
+
const [elapsed, setElapsed] = useState(false);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!started)
|
|
66
|
+
return;
|
|
67
|
+
const id = setTimeout(() => setElapsed(true), ms);
|
|
68
|
+
return () => clearTimeout(id);
|
|
69
|
+
}, [started, ms]);
|
|
70
|
+
return elapsed;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether the first paint may go ahead. It waits for the host (its theme and
|
|
74
|
+
* locale), then for the profile's answer: data, an error, or a FIRST failure
|
|
75
|
+
* (the query stays pending through react-query's retries, ~7 s of backoff on
|
|
76
|
+
* the toolkit's client) — or for the profile's bound, counted from the
|
|
77
|
+
* connection. Only a host that never connects paints without its context,
|
|
78
|
+
* after the longer host bound.
|
|
79
|
+
*/
|
|
80
|
+
function useFirstPaintSettled(connected, profile, profileWaitMs) {
|
|
81
|
+
const hostWaitedOut = useElapsedSince(true, HOST_WAIT_MS);
|
|
82
|
+
const profileWaitedOut = useElapsedSince(connected, profileWaitMs);
|
|
83
|
+
const profileAnswered = !profile.isPending || profile.failureCount > 0 || profileWaitedOut;
|
|
84
|
+
return (connected && profileAnswered) || hostWaitedOut;
|
|
85
|
+
}
|
|
86
|
+
function ProfileGateInner({ profileWaitMs = PROFILE_WAIT_MS, children, }) {
|
|
87
|
+
const host = useShellHost();
|
|
88
|
+
const query = useToolQuery([...SHELL_SETTINGS_KEY], SHELL_SETTINGS_DATA, {});
|
|
89
|
+
const profile = query.data;
|
|
90
|
+
const settled = useFirstPaintSettled(host.connected, query, profileWaitMs);
|
|
91
|
+
useApplyTheme();
|
|
92
|
+
const language = resolveLanguage(profile?.language, host.locale);
|
|
93
|
+
const target = useMemo(() => ({
|
|
94
|
+
language,
|
|
95
|
+
locale: formattingLocale(language, host.locale),
|
|
96
|
+
timeZone: validTimeZone(host.timeZone),
|
|
97
|
+
}), [language, host.locale, host.timeZone]);
|
|
98
|
+
// Publish before paint: the document language (screen readers — the view
|
|
99
|
+
// document ships without one) and the formatters' locale. The tree below
|
|
100
|
+
// reads the PUBLISHED value, so a widget never formats a date in one locale
|
|
101
|
+
// while its strings render in another.
|
|
102
|
+
useLayoutEffect(() => {
|
|
103
|
+
document.documentElement.lang = target.language;
|
|
104
|
+
setFormatLocale(target);
|
|
105
|
+
}, [target]);
|
|
106
|
+
const published = useSyncExternalStore(subscribeFormatLocale, getFormatLocale, getFormatLocale);
|
|
107
|
+
// Once settled and published, the tree stays mounted for good and only
|
|
108
|
+
// follows changes (a saved language flips live).
|
|
109
|
+
const [ready, setReady] = useState(false);
|
|
110
|
+
if (!ready && settled && isPublished(published, target))
|
|
111
|
+
setReady(true);
|
|
112
|
+
if (!ready)
|
|
113
|
+
return host.connected ? _jsx(GateSkeleton, { language: language }) : null;
|
|
114
|
+
return _jsx(LocaleProvider, { locale: published?.language ?? language, children: children });
|
|
115
|
+
}
|
|
116
|
+
/** The formatters already render in `target` — the first paint may go ahead. */
|
|
117
|
+
function isPublished(published, target) {
|
|
118
|
+
return (published?.language === target.language &&
|
|
119
|
+
published.locale === target.locale &&
|
|
120
|
+
published.timeZone === target.timeZone);
|
|
121
|
+
}
|
|
122
|
+
/** The pre-paint placeholder: the toolkit view skeleton's shape, no visible text. */
|
|
123
|
+
function GateSkeleton({ language }) {
|
|
124
|
+
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", "aria-busy": "true", children: [_jsx(Skeleton, { className: "h-8 w-48" }), _jsx(Skeleton, { className: "h-32 w-full" }), _jsx("span", { role: "status", className: "sr-only", children: kitLabels(language).loading })] }));
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=profile-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-gate.js","sourceRoot":"","sources":["../../src/ui/profile-gate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-gate.test.d.ts","sourceRoot":"","sources":["../../src/ui/profile-gate.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment happy-dom
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { act, cleanup, render, screen, waitFor } from "@testing-library/react";
|
|
5
|
+
import { queryClient, useLocale } from "@miragon/mcp-toolkit-ui";
|
|
6
|
+
import { HostBridgeProvider } from "@miragon/mcp-toolkit-ui/app";
|
|
7
|
+
import { SHELL_SETTINGS_DATA } from "../shell-settings-contract.js";
|
|
8
|
+
import { ProfileGate } from "./profile-gate.js";
|
|
9
|
+
import { SHELL_SETTINGS_KEY } from "./shell-settings.js";
|
|
10
|
+
import { formatTimestamp, setFormatLocale } from "./format.js";
|
|
11
|
+
import { ShellHostProvider } from "./shell-host.js";
|
|
12
|
+
const FEED = SHELL_SETTINGS_DATA;
|
|
13
|
+
const ISO = "2026-07-22T22:15:30.000Z";
|
|
14
|
+
/** What `shell_settings_data` returns: the `*_data` envelope (structuredContent first). */
|
|
15
|
+
function feedResult(view) {
|
|
16
|
+
return {
|
|
17
|
+
content: [{ type: "text", text: JSON.stringify(view) }],
|
|
18
|
+
structuredContent: view,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function bridgeWith(callTool) {
|
|
22
|
+
return {
|
|
23
|
+
callTool,
|
|
24
|
+
sendFollowup: vi.fn(),
|
|
25
|
+
openExternal: vi.fn(),
|
|
26
|
+
getWidgetData: () => null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** The locale the tree reads AND the date the shared formatter renders, in one line. */
|
|
30
|
+
function LocaleProbe() {
|
|
31
|
+
return _jsx("p", { "data-testid": "locale", children: `${useLocale()}|${formatTimestamp(ISO)}` });
|
|
32
|
+
}
|
|
33
|
+
const NO_HOST = { connected: true, displayMode: "inline", availableDisplayModes: [] };
|
|
34
|
+
function gateTree(callTool, options = {}) {
|
|
35
|
+
return (_jsx(ShellHostProvider, { host: { ...NO_HOST, ...options.host }, children: _jsx(HostBridgeProvider, { bridge: bridgeWith(callTool), children: _jsx(ProfileGate, { profileWaitMs: options.waitMs, children: _jsx(LocaleProbe, {}) }) }) }));
|
|
36
|
+
}
|
|
37
|
+
function renderGate(callTool, options = {}) {
|
|
38
|
+
return render(gateTree(callTool, options));
|
|
39
|
+
}
|
|
40
|
+
/** A profile feed that never answers. */
|
|
41
|
+
const neverAnswers = () => new Promise(() => { });
|
|
42
|
+
/** `en|<date in en>` — what the probe shows for a locale (and optional zone). */
|
|
43
|
+
function probeFor(locale, timeZone) {
|
|
44
|
+
return `${locale.split("-")[0]}|${new Date(ISO).toLocaleString(locale, timeZone ? { timeZone } : {})}`;
|
|
45
|
+
}
|
|
46
|
+
const probe = () => screen.getByTestId("locale").textContent;
|
|
47
|
+
/** Stub `matchMedia` with a fixed OS preference (the theme's last fallback). */
|
|
48
|
+
function stubOsPreference(dark) {
|
|
49
|
+
vi.stubGlobal("matchMedia", vi.fn().mockReturnValue({
|
|
50
|
+
matches: dark,
|
|
51
|
+
addEventListener: vi.fn(),
|
|
52
|
+
removeEventListener: vi.fn(),
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
const isDark = () => document.documentElement.classList.contains("dark");
|
|
56
|
+
/** The gate's query, under the feed's module default key (args `{}` appended). */
|
|
57
|
+
const gateQueryStatus = () => queryClient.getQueryState([...SHELL_SETTINGS_KEY, {}])?.status;
|
|
58
|
+
afterEach(async () => {
|
|
59
|
+
cleanup();
|
|
60
|
+
vi.useRealTimers();
|
|
61
|
+
// The toolkit's query client is a module singleton shared by every mount —
|
|
62
|
+
// the suite runs on its PRODUCTION defaults (react-query's retries
|
|
63
|
+
// included); cancelling stops any retry still waiting.
|
|
64
|
+
await queryClient.cancelQueries();
|
|
65
|
+
queryClient.clear();
|
|
66
|
+
setFormatLocale(undefined);
|
|
67
|
+
const root = document.documentElement;
|
|
68
|
+
root.className = "";
|
|
69
|
+
root.lang = "";
|
|
70
|
+
root.removeAttribute("data-theme");
|
|
71
|
+
root.removeAttribute("style");
|
|
72
|
+
vi.unstubAllGlobals();
|
|
73
|
+
});
|
|
74
|
+
describe("ProfileGate", () => {
|
|
75
|
+
it("fetches the profile feed through the host bridge, with no arguments", async () => {
|
|
76
|
+
const callTool = vi.fn().mockResolvedValue(feedResult({ language: "en" }));
|
|
77
|
+
renderGate(callTool);
|
|
78
|
+
await waitFor(() => expect(callTool).toHaveBeenCalledWith(FEED, {}));
|
|
79
|
+
expect(callTool).toHaveBeenCalledTimes(1);
|
|
80
|
+
});
|
|
81
|
+
it("provides the profile locale to the tree, the formatters and the document", async () => {
|
|
82
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ language: "de" })));
|
|
83
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de")));
|
|
84
|
+
expect(document.documentElement.lang).toBe("de");
|
|
85
|
+
});
|
|
86
|
+
it("holds the first paint while the profile loads — a localized skeleton, never English content", () => {
|
|
87
|
+
renderGate(neverAnswers, { host: { locale: "de-DE" } });
|
|
88
|
+
expect(screen.queryByTestId("locale")).toBeNull();
|
|
89
|
+
// The placeholder speaks the host's language already.
|
|
90
|
+
expect(screen.getByRole("status").textContent).toBe("Wird geladen…");
|
|
91
|
+
expect(document.documentElement.lang).toBe("de");
|
|
92
|
+
});
|
|
93
|
+
it("paints nothing at all until the host bridge is connected", () => {
|
|
94
|
+
renderGate(neverAnswers, { host: { connected: false } });
|
|
95
|
+
expect(screen.queryByRole("status")).toBeNull();
|
|
96
|
+
expect(screen.queryByTestId("locale")).toBeNull();
|
|
97
|
+
});
|
|
98
|
+
it("renders from the host context once the bounded wait is over", async () => {
|
|
99
|
+
renderGate(neverAnswers, { host: { locale: "de-AT" }, waitMs: 20 });
|
|
100
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de-AT")));
|
|
101
|
+
});
|
|
102
|
+
it("counts the profile wait from the host connection — a slow handshake never paints without the host context", () => {
|
|
103
|
+
vi.useFakeTimers();
|
|
104
|
+
// Before the handshake the host context is unknown.
|
|
105
|
+
const view = renderGate(neverAnswers, { host: { connected: false }, waitMs: 100 });
|
|
106
|
+
// Far past the profile bound, still no handshake: nothing paints — the
|
|
107
|
+
// content would render in English and the OS theme, then flip.
|
|
108
|
+
act(() => {
|
|
109
|
+
vi.advanceTimersByTime(1_000);
|
|
110
|
+
});
|
|
111
|
+
expect(screen.queryByTestId("locale")).toBeNull();
|
|
112
|
+
expect(screen.queryByRole("status")).toBeNull();
|
|
113
|
+
view.rerender(gateTree(neverAnswers, { host: { connected: true, locale: "de-DE" }, waitMs: 100 }));
|
|
114
|
+
// Connected: the profile gets its FULL bound behind the localized skeleton …
|
|
115
|
+
expect(screen.getByRole("status").textContent).toBe("Wird geladen…");
|
|
116
|
+
act(() => {
|
|
117
|
+
vi.advanceTimersByTime(99);
|
|
118
|
+
});
|
|
119
|
+
expect(screen.queryByTestId("locale")).toBeNull();
|
|
120
|
+
// … then the view paints from the host context.
|
|
121
|
+
act(() => {
|
|
122
|
+
vi.advanceTimersByTime(1);
|
|
123
|
+
});
|
|
124
|
+
expect(probe()).toBe(probeFor("de-DE"));
|
|
125
|
+
});
|
|
126
|
+
it("paints without any host context only when the host never connects, after its own longer bound", () => {
|
|
127
|
+
vi.useFakeTimers();
|
|
128
|
+
renderGate(neverAnswers, { host: { connected: false }, waitMs: 100 });
|
|
129
|
+
act(() => {
|
|
130
|
+
vi.advanceTimersByTime(4_999);
|
|
131
|
+
});
|
|
132
|
+
expect(screen.queryByTestId("locale")).toBeNull();
|
|
133
|
+
act(() => {
|
|
134
|
+
vi.advanceTimersByTime(1);
|
|
135
|
+
});
|
|
136
|
+
expect(probe()).toBe(probeFor("en"));
|
|
137
|
+
});
|
|
138
|
+
it("follows the host locale for a system profile, normalized to a shipped language", async () => {
|
|
139
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ language: "system" })), {
|
|
140
|
+
host: { locale: "de-AT", timeZone: "Asia/Tokyo" },
|
|
141
|
+
});
|
|
142
|
+
// The full host tag drives the dates, the language the strings; the
|
|
143
|
+
// host's time zone applies to every formatted date.
|
|
144
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de-AT", "Asia/Tokyo")));
|
|
145
|
+
expect(document.documentElement.lang).toBe("de");
|
|
146
|
+
cleanup();
|
|
147
|
+
queryClient.clear();
|
|
148
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ language: "system" })), {
|
|
149
|
+
host: { locale: "fr-FR" },
|
|
150
|
+
});
|
|
151
|
+
await waitFor(() => expect(probe()).toBe(probeFor("en")));
|
|
152
|
+
});
|
|
153
|
+
it("an explicit profile language beats the host locale", async () => {
|
|
154
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ language: "en" })), {
|
|
155
|
+
host: { locale: "de-DE" },
|
|
156
|
+
});
|
|
157
|
+
// English strings AND English dates — not the host's German conventions.
|
|
158
|
+
await waitFor(() => expect(probe()).toBe(probeFor("en")));
|
|
159
|
+
expect(document.documentElement.lang).toBe("en");
|
|
160
|
+
});
|
|
161
|
+
it("ignores a time zone the runtime does not know instead of breaking every date", async () => {
|
|
162
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ language: "en" })), {
|
|
163
|
+
host: { timeZone: "Mars/Olympus_Mons" },
|
|
164
|
+
});
|
|
165
|
+
await waitFor(() => expect(probe()).toBe(probeFor("en")));
|
|
166
|
+
});
|
|
167
|
+
it("never takes the theme from the profile: a stored theme of an earlier build is ignored", async () => {
|
|
168
|
+
// No in-app theme switch: the host decides, then the OS.
|
|
169
|
+
stubOsPreference(false);
|
|
170
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ theme: "dark" })), {
|
|
171
|
+
host: { theme: "light" },
|
|
172
|
+
});
|
|
173
|
+
await waitFor(() => expect(probe()).not.toBeNull());
|
|
174
|
+
expect(isDark()).toBe(false);
|
|
175
|
+
cleanup();
|
|
176
|
+
queryClient.clear();
|
|
177
|
+
stubOsPreference(false);
|
|
178
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ theme: "light" })), {
|
|
179
|
+
host: { theme: "dark" },
|
|
180
|
+
});
|
|
181
|
+
await waitFor(() => expect(probe()).not.toBeNull());
|
|
182
|
+
expect(isDark()).toBe(true);
|
|
183
|
+
});
|
|
184
|
+
it("follows the HOST theme, even against the OS", async () => {
|
|
185
|
+
stubOsPreference(false);
|
|
186
|
+
renderGate(vi.fn().mockResolvedValue(feedResult({ language: "system" })), {
|
|
187
|
+
host: { theme: "dark" },
|
|
188
|
+
});
|
|
189
|
+
await waitFor(() => expect(probe()).not.toBeNull());
|
|
190
|
+
expect(isDark()).toBe(true);
|
|
191
|
+
expect(document.documentElement.getAttribute("data-theme")).toBe("dark");
|
|
192
|
+
});
|
|
193
|
+
it("falls back to the host locale and the OS theme at the feed's FIRST failure (e.g. the module is disabled)", async () => {
|
|
194
|
+
stubOsPreference(true);
|
|
195
|
+
const callTool = vi.fn().mockRejectedValue(new Error("unknown tool"));
|
|
196
|
+
// A bound far beyond the test: only the failure itself can release the gate.
|
|
197
|
+
renderGate(callTool, { host: { locale: "de-DE" }, waitMs: 60_000 });
|
|
198
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de-DE")));
|
|
199
|
+
expect(isDark()).toBe(true);
|
|
200
|
+
// The toolkit's client retries (react-query's default 3, backing off from
|
|
201
|
+
// 1 s) and keeps the query PENDING meanwhile — the view did not wait.
|
|
202
|
+
expect(gateQueryStatus()).toBe("pending");
|
|
203
|
+
expect(callTool).toHaveBeenCalledTimes(1);
|
|
204
|
+
});
|
|
205
|
+
it("applies a profile that a background retry delivers after the release", async () => {
|
|
206
|
+
const callTool = vi
|
|
207
|
+
.fn()
|
|
208
|
+
.mockRejectedValueOnce(new Error("store briefly unavailable"))
|
|
209
|
+
.mockResolvedValue(feedResult({ language: "en" }));
|
|
210
|
+
renderGate(callTool, { host: { locale: "de-DE" }, waitMs: 60_000 });
|
|
211
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de-DE")));
|
|
212
|
+
// react-query's first retry fires after 1 s; the tree stays mounted and flips.
|
|
213
|
+
await waitFor(() => expect(probe()).toBe(probeFor("en")), { timeout: 3_000 });
|
|
214
|
+
expect(callTool).toHaveBeenCalledTimes(2);
|
|
215
|
+
});
|
|
216
|
+
it("flips live when the language section's save invalidates the shared key — no skeleton in between", async () => {
|
|
217
|
+
const callTool = vi
|
|
218
|
+
.fn()
|
|
219
|
+
.mockResolvedValueOnce(feedResult({ language: "en" }))
|
|
220
|
+
.mockResolvedValue(feedResult({ language: "de" }));
|
|
221
|
+
renderGate(callTool);
|
|
222
|
+
await waitFor(() => expect(probe()).toBe(probeFor("en")));
|
|
223
|
+
const shown = screen.getByTestId("locale");
|
|
224
|
+
// What the shell's language section does after shell_save_settings.
|
|
225
|
+
await act(async () => {
|
|
226
|
+
await queryClient.invalidateQueries({ queryKey: [...SHELL_SETTINGS_KEY] });
|
|
227
|
+
});
|
|
228
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de")));
|
|
229
|
+
expect(callTool).toHaveBeenCalledTimes(2);
|
|
230
|
+
// The same node: the tree was never swapped for the first-paint skeleton.
|
|
231
|
+
expect(screen.getByTestId("locale")).toBe(shown);
|
|
232
|
+
expect(screen.queryByRole("status")).toBeNull();
|
|
233
|
+
});
|
|
234
|
+
it("reads the shell's feed under the key the language section shares", async () => {
|
|
235
|
+
const callTool = vi.fn().mockResolvedValue(feedResult({ language: "de" }));
|
|
236
|
+
renderGate(callTool);
|
|
237
|
+
await waitFor(() => expect(probe()).toBe(probeFor("de")));
|
|
238
|
+
expect(callTool).toHaveBeenCalledWith(SHELL_SETTINGS_DATA, {});
|
|
239
|
+
const keys = queryClient
|
|
240
|
+
.getQueryCache()
|
|
241
|
+
.getAll()
|
|
242
|
+
.map((q) => q.queryKey[0]);
|
|
243
|
+
expect(keys).toEqual([SHELL_SETTINGS_KEY[0]]);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=profile-gate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-gate.test.js","sourceRoot":"","sources":["../../src/ui/profile-gate.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Fallback for self-fetching widgets while their query has no data yet: the
|
|
4
|
+
* skeleton under a polite loading status while loading, and the toolkit's
|
|
5
|
+
* `ErrorState` once the query errored — the branch several dashboard widgets
|
|
6
|
+
* forgot, leaving them on an eternal skeleton after a failed fetch.
|
|
7
|
+
*
|
|
8
|
+
* The error says what happened and what you can do ({@link describeError}:
|
|
9
|
+
* "Die Engine prod ist nicht erreichbar (HTTP 503)", "Prüf, ob die Engine
|
|
10
|
+
* läuft …"), keeps the raw reason collapsed under "Details" and always
|
|
11
|
+
* offers the retry. `errorTitle` names what failed to load in the caller's
|
|
12
|
+
* words; it heads an error the kit cannot classify.
|
|
13
|
+
*/
|
|
14
|
+
export declare function QueryFallback({ isError, error, onRetry, errorTitle, loadingText, skeleton, }: {
|
|
15
|
+
isError: boolean;
|
|
16
|
+
error?: unknown;
|
|
17
|
+
/** Re-run the failed query (its refetch). */
|
|
18
|
+
onRetry: () => void;
|
|
19
|
+
/** Caller-localized headline for an unclassified error: what failed, one line. */
|
|
20
|
+
errorTitle?: string;
|
|
21
|
+
/** The loading status for screen readers (default: the active locale's "Loading view…"). */
|
|
22
|
+
loadingText?: string;
|
|
23
|
+
skeleton: ReactNode;
|
|
24
|
+
}): import("react").JSX.Element;
|
|
25
|
+
/** The dashboards' standard table placeholder (bordered card + two bars). */
|
|
26
|
+
export declare function TableSkeleton(): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=query-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-fallback.d.ts","sourceRoot":"","sources":["../../src/ui/query-fallback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,SAAS,CAAA;CACpB,+BAcA;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,gCAO5B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ErrorState, Skeleton, useLocale } from "@miragon/mcp-toolkit-ui";
|
|
3
|
+
import { describeError } from "./describe-error.js";
|
|
4
|
+
import { kitLabels } from "./kit-labels.js";
|
|
5
|
+
import { LoadingStatus } from "./view-data-state.js";
|
|
6
|
+
/**
|
|
7
|
+
* Fallback for self-fetching widgets while their query has no data yet: the
|
|
8
|
+
* skeleton under a polite loading status while loading, and the toolkit's
|
|
9
|
+
* `ErrorState` once the query errored — the branch several dashboard widgets
|
|
10
|
+
* forgot, leaving them on an eternal skeleton after a failed fetch.
|
|
11
|
+
*
|
|
12
|
+
* The error says what happened and what you can do ({@link describeError}:
|
|
13
|
+
* "Die Engine prod ist nicht erreichbar (HTTP 503)", "Prüf, ob die Engine
|
|
14
|
+
* läuft …"), keeps the raw reason collapsed under "Details" and always
|
|
15
|
+
* offers the retry. `errorTitle` names what failed to load in the caller's
|
|
16
|
+
* words; it heads an error the kit cannot classify.
|
|
17
|
+
*/
|
|
18
|
+
export function QueryFallback({ isError, error, onRetry, errorTitle, loadingText, skeleton, }) {
|
|
19
|
+
const locale = useLocale();
|
|
20
|
+
if (isError) {
|
|
21
|
+
const described = describeError(error, locale, { fallbackTitle: errorTitle });
|
|
22
|
+
return (_jsx(ErrorState, { title: described.title, description: described.hint, details: described.details ?? undefined, onRetry: onRetry }));
|
|
23
|
+
}
|
|
24
|
+
return _jsx(LoadingStatus, { text: loadingText ?? kitLabels(locale).loadingView, skeleton: skeleton });
|
|
25
|
+
}
|
|
26
|
+
/** The dashboards' standard table placeholder (bordered card + two bars). */
|
|
27
|
+
export function TableSkeleton() {
|
|
28
|
+
return (_jsxs("div", { className: "rounded-lg border p-4", children: [_jsx(Skeleton, { className: "mb-3 h-5 w-40" }), _jsx(Skeleton, { className: "h-32 w-full" })] }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=query-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-fallback.js","sourceRoot":"","sources":["../../src/ui/query-fallback.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,QAAQ,GAWT;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7E,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,WAAW,EAAE,SAAS,CAAC,IAAI,EAC3B,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,SAAS,EACvC,OAAO,EAAE,OAAO,GAChB,CACH,CAAA;IACH,CAAC;IACD,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAA;AAClG,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa;IAC3B,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,QAAQ,IAAC,SAAS,EAAC,eAAe,GAAG,EACtC,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,IAChC,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-fallback.test.d.ts","sourceRoot":"","sources":["../../src/ui/query-fallback.test.tsx"],"names":[],"mappings":""}
|