@fusedashlabs/widgets 0.4.5 → 0.5.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/CHANGELOG.md +17 -0
- package/README.md +24 -3
- package/dist/catalog/engine.d.ts +9 -0
- package/dist/catalog/engine.d.ts.map +1 -0
- package/dist/catalog/engine.js +28 -0
- package/dist/catalog/engine.js.map +1 -0
- package/dist/catalog/evaluate.d.ts +11 -0
- package/dist/catalog/evaluate.d.ts.map +1 -0
- package/dist/catalog/evaluate.js +18 -0
- package/dist/catalog/evaluate.js.map +1 -0
- package/dist/catalog/index.d.ts +8 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +25 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/load.d.ts +11 -0
- package/dist/catalog/load.d.ts.map +1 -0
- package/dist/catalog/load.js +140 -0
- package/dist/catalog/load.js.map +1 -0
- package/dist/catalog/schema.d.ts +5 -0
- package/dist/catalog/schema.d.ts.map +1 -0
- package/dist/catalog/schema.js +143 -0
- package/dist/catalog/schema.js.map +1 -0
- package/dist/catalog/types.d.ts +83 -0
- package/dist/catalog/types.d.ts.map +1 -0
- package/dist/catalog/types.js +45 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/catalog/when.d.ts +13 -0
- package/dist/catalog/when.d.ts.map +1 -0
- package/dist/catalog/when.js +236 -0
- package/dist/catalog/when.js.map +1 -0
- package/dist/components/approval-bar/element/ui9000-approval-bar.d.ts +17 -0
- package/dist/components/approval-bar/element/ui9000-approval-bar.d.ts.map +1 -0
- package/dist/components/approval-bar/element/ui9000-approval-bar.js +83 -0
- package/dist/components/approval-bar/element/ui9000-approval-bar.js.map +1 -0
- package/dist/components/approval-bar/index.d.ts +4 -0
- package/dist/components/approval-bar/index.d.ts.map +1 -0
- package/dist/components/approval-bar/index.js +11 -0
- package/dist/components/approval-bar/index.js.map +1 -0
- package/dist/components/approval-bar/lib/normalize.d.ts +7 -0
- package/dist/components/approval-bar/lib/normalize.d.ts.map +1 -0
- package/dist/components/approval-bar/lib/normalize.js +12 -0
- package/dist/components/approval-bar/lib/normalize.js.map +1 -0
- package/dist/components/approval-bar/metadata.json.d.ts +99 -0
- package/dist/components/approval-bar/metadata.json.js +63 -0
- package/dist/components/approval-bar/metadata.json.js.map +1 -0
- package/dist/components/bar-chart/metadata.json.d.ts +53 -0
- package/dist/components/bar-chart/metadata.json.js +21 -0
- package/dist/components/bar-chart/metadata.json.js.map +1 -1
- package/dist/components/button/element/ui9000-button.d.ts +15 -0
- package/dist/components/button/element/ui9000-button.d.ts.map +1 -0
- package/dist/components/button/element/ui9000-button.js +56 -0
- package/dist/components/button/element/ui9000-button.js.map +1 -0
- package/dist/components/button/index.d.ts +3 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +9 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/button/metadata.json.d.ts +99 -0
- package/dist/components/button/metadata.json.js +63 -0
- package/dist/components/button/metadata.json.js.map +1 -0
- package/dist/components/chart-renderer/metadata.json.d.ts +1 -0
- package/dist/components/chart-renderer/metadata.json.js +3 -0
- package/dist/components/chart-renderer/metadata.json.js.map +1 -1
- package/dist/components/checkbox/element/ui9000-checkbox.d.ts +16 -0
- package/dist/components/checkbox/element/ui9000-checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/element/ui9000-checkbox.js +71 -0
- package/dist/components/checkbox/element/ui9000-checkbox.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +9 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/checkbox/metadata.json.d.ts +99 -0
- package/dist/components/checkbox/metadata.json.js +63 -0
- package/dist/components/checkbox/metadata.json.js.map +1 -0
- package/dist/components/custom-widget/element/ui9000-custom-widget.d.ts +1 -2
- package/dist/components/custom-widget/element/ui9000-custom-widget.d.ts.map +1 -1
- package/dist/components/custom-widget/element/ui9000-custom-widget.js +12 -35
- package/dist/components/custom-widget/element/ui9000-custom-widget.js.map +1 -1
- package/dist/components/custom-widget/index.js +1 -1
- package/dist/components/custom-widget/lib/content.d.ts +1 -12
- package/dist/components/custom-widget/lib/content.d.ts.map +1 -1
- package/dist/components/custom-widget/lib/markdown.d.ts +1 -3
- package/dist/components/custom-widget/lib/markdown.d.ts.map +1 -1
- package/dist/components/custom-widget/lib/normalize.js +2 -2
- package/dist/components/custom-widget/lib/table.d.ts +1 -54
- package/dist/components/custom-widget/lib/table.d.ts.map +1 -1
- package/dist/components/custom-widget/metadata.json.d.ts +2 -1
- package/dist/components/custom-widget/metadata.json.js +4 -1
- package/dist/components/custom-widget/metadata.json.js.map +1 -1
- package/dist/components/date-input/element/ui9000-date-input.d.ts +16 -0
- package/dist/components/date-input/element/ui9000-date-input.d.ts.map +1 -0
- package/dist/components/date-input/element/ui9000-date-input.js +71 -0
- package/dist/components/date-input/element/ui9000-date-input.js.map +1 -0
- package/dist/components/date-input/index.d.ts +3 -0
- package/dist/components/date-input/index.d.ts.map +1 -0
- package/dist/components/date-input/index.js +9 -0
- package/dist/components/date-input/index.js.map +1 -0
- package/dist/components/date-input/metadata.json.d.ts +99 -0
- package/dist/components/date-input/metadata.json.js +63 -0
- package/dist/components/date-input/metadata.json.js.map +1 -0
- package/dist/components/entity-detail/element/ui9000-entity-detail.d.ts +17 -0
- package/dist/components/entity-detail/element/ui9000-entity-detail.d.ts.map +1 -0
- package/dist/components/entity-detail/element/ui9000-entity-detail.js +91 -0
- package/dist/components/entity-detail/element/ui9000-entity-detail.js.map +1 -0
- package/dist/components/entity-detail/index.d.ts +4 -0
- package/dist/components/entity-detail/index.d.ts.map +1 -0
- package/dist/components/entity-detail/index.js +11 -0
- package/dist/components/entity-detail/index.js.map +1 -0
- package/dist/components/entity-detail/lib/normalize.d.ts +17 -0
- package/dist/components/entity-detail/lib/normalize.d.ts.map +1 -0
- package/dist/components/entity-detail/lib/normalize.js +34 -0
- package/dist/components/entity-detail/lib/normalize.js.map +1 -0
- package/dist/components/entity-detail/metadata.json.d.ts +110 -0
- package/dist/components/entity-detail/metadata.json.js +63 -0
- package/dist/components/entity-detail/metadata.json.js.map +1 -0
- package/dist/components/event-timeline/element/ui9000-event-timeline.d.ts +17 -0
- package/dist/components/event-timeline/element/ui9000-event-timeline.d.ts.map +1 -0
- package/dist/components/event-timeline/element/ui9000-event-timeline.js +78 -0
- package/dist/components/event-timeline/element/ui9000-event-timeline.js.map +1 -0
- package/dist/components/event-timeline/index.d.ts +4 -0
- package/dist/components/event-timeline/index.d.ts.map +1 -0
- package/dist/components/event-timeline/index.js +11 -0
- package/dist/components/event-timeline/index.js.map +1 -0
- package/dist/components/event-timeline/lib/normalize.d.ts +10 -0
- package/dist/components/event-timeline/lib/normalize.d.ts.map +1 -0
- package/dist/components/event-timeline/lib/normalize.js +25 -0
- package/dist/components/event-timeline/lib/normalize.js.map +1 -0
- package/dist/components/event-timeline/metadata.json.d.ts +124 -0
- package/dist/components/event-timeline/metadata.json.js +63 -0
- package/dist/components/event-timeline/metadata.json.js.map +1 -0
- package/dist/components/evidence-panel/element/ui9000-evidence-panel.d.ts +17 -0
- package/dist/components/evidence-panel/element/ui9000-evidence-panel.d.ts.map +1 -0
- package/dist/components/evidence-panel/element/ui9000-evidence-panel.js +84 -0
- package/dist/components/evidence-panel/element/ui9000-evidence-panel.js.map +1 -0
- package/dist/components/evidence-panel/index.d.ts +4 -0
- package/dist/components/evidence-panel/index.d.ts.map +1 -0
- package/dist/components/evidence-panel/index.js +11 -0
- package/dist/components/evidence-panel/index.js.map +1 -0
- package/dist/components/evidence-panel/lib/normalize.d.ts +19 -0
- package/dist/components/evidence-panel/lib/normalize.d.ts.map +1 -0
- package/dist/components/evidence-panel/lib/normalize.js +33 -0
- package/dist/components/evidence-panel/lib/normalize.js.map +1 -0
- package/dist/components/evidence-panel/metadata.json.d.ts +114 -0
- package/dist/components/evidence-panel/metadata.json.js +63 -0
- package/dist/components/evidence-panel/metadata.json.js.map +1 -0
- package/dist/components/form/element/ui9000-form.d.ts +21 -0
- package/dist/components/form/element/ui9000-form.d.ts.map +1 -0
- package/dist/components/form/element/ui9000-form.js +115 -0
- package/dist/components/form/element/ui9000-form.js.map +1 -0
- package/dist/components/form/index.d.ts +4 -0
- package/dist/components/form/index.d.ts.map +1 -0
- package/dist/components/form/index.js +11 -0
- package/dist/components/form/index.js.map +1 -0
- package/dist/components/form/lib/normalize.d.ts +14 -0
- package/dist/components/form/lib/normalize.d.ts.map +1 -0
- package/dist/components/form/lib/normalize.js +36 -0
- package/dist/components/form/lib/normalize.js.map +1 -0
- package/dist/components/form/metadata.json.d.ts +94 -0
- package/dist/components/form/metadata.json.js +63 -0
- package/dist/components/form/metadata.json.js.map +1 -0
- package/dist/components/histogram-chart/metadata.json.d.ts +47 -0
- package/dist/components/histogram-chart/metadata.json.js +21 -0
- package/dist/components/histogram-chart/metadata.json.js.map +1 -1
- package/dist/components/image/element/ui9000-image.d.ts +17 -0
- package/dist/components/image/element/ui9000-image.d.ts.map +1 -0
- package/dist/components/image/element/ui9000-image.js +74 -0
- package/dist/components/image/element/ui9000-image.js.map +1 -0
- package/dist/components/image/index.d.ts +4 -0
- package/dist/components/image/index.d.ts.map +1 -0
- package/dist/components/image/index.js +13 -0
- package/dist/components/image/index.js.map +1 -0
- package/dist/components/image/lib/url.d.ts +14 -0
- package/dist/components/image/lib/url.d.ts.map +1 -0
- package/dist/components/{custom-widget/lib/content.js → image/lib/url.js} +4 -3
- package/dist/components/image/lib/url.js.map +1 -0
- package/dist/components/image/metadata.json.d.ts +95 -0
- package/dist/components/image/metadata.json.js +63 -0
- package/dist/components/image/metadata.json.js.map +1 -0
- package/dist/components/kpi-widget/metadata.json.d.ts +47 -0
- package/dist/components/kpi-widget/metadata.json.js +21 -0
- package/dist/components/kpi-widget/metadata.json.js.map +1 -1
- package/dist/components/map-chart/metadata.json.d.ts +54 -2
- package/dist/components/map-chart/metadata.json.js +23 -2
- package/dist/components/map-chart/metadata.json.js.map +1 -1
- package/dist/components/multi-select/element/ui9000-multi-select.d.ts +16 -0
- package/dist/components/multi-select/element/ui9000-multi-select.d.ts.map +1 -0
- package/dist/components/multi-select/element/ui9000-multi-select.js +77 -0
- package/dist/components/multi-select/element/ui9000-multi-select.js.map +1 -0
- package/dist/components/multi-select/index.d.ts +3 -0
- package/dist/components/multi-select/index.d.ts.map +1 -0
- package/dist/components/multi-select/index.js +9 -0
- package/dist/components/multi-select/index.js.map +1 -0
- package/dist/components/multi-select/metadata.json.d.ts +99 -0
- package/dist/components/multi-select/metadata.json.js +63 -0
- package/dist/components/multi-select/metadata.json.js.map +1 -0
- package/dist/components/network-graph/metadata.json.d.ts +53 -2
- package/dist/components/network-graph/metadata.json.js +23 -2
- package/dist/components/network-graph/metadata.json.js.map +1 -1
- package/dist/components/number-input/element/ui9000-number-input.d.ts +16 -0
- package/dist/components/number-input/element/ui9000-number-input.d.ts.map +1 -0
- package/dist/components/number-input/element/ui9000-number-input.js +71 -0
- package/dist/components/number-input/element/ui9000-number-input.js.map +1 -0
- package/dist/components/number-input/index.d.ts +3 -0
- package/dist/components/number-input/index.d.ts.map +1 -0
- package/dist/components/number-input/index.js +9 -0
- package/dist/components/number-input/index.js.map +1 -0
- package/dist/components/number-input/metadata.json.d.ts +99 -0
- package/dist/components/number-input/metadata.json.js +63 -0
- package/dist/components/number-input/metadata.json.js.map +1 -0
- package/dist/components/select/element/ui9000-select.d.ts +16 -0
- package/dist/components/select/element/ui9000-select.d.ts.map +1 -0
- package/dist/components/select/element/ui9000-select.js +73 -0
- package/dist/components/select/element/ui9000-select.js.map +1 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/index.js +9 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/components/select/metadata.json.d.ts +99 -0
- package/dist/components/select/metadata.json.js +63 -0
- package/dist/components/select/metadata.json.js.map +1 -0
- package/dist/components/table/element/styles.d.ts +2 -0
- package/dist/components/table/element/styles.d.ts.map +1 -0
- package/dist/components/table/element/styles.js +105 -0
- package/dist/components/table/element/styles.js.map +1 -0
- package/dist/components/table/element/ui9000-table.d.ts +17 -0
- package/dist/components/table/element/ui9000-table.d.ts.map +1 -0
- package/dist/components/table/element/ui9000-table.js +113 -0
- package/dist/components/table/element/ui9000-table.js.map +1 -0
- package/dist/components/table/index.d.ts +4 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +14 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/lib/table.d.ts +55 -0
- package/dist/components/table/lib/table.d.ts.map +1 -0
- package/dist/components/table/lib/table.js.map +1 -0
- package/dist/components/table/metadata.json.d.ts +88 -0
- package/dist/components/table/metadata.json.js +63 -0
- package/dist/components/table/metadata.json.js.map +1 -0
- package/dist/components/text/element/ui9000-text.d.ts +16 -0
- package/dist/components/text/element/ui9000-text.d.ts.map +1 -0
- package/dist/components/text/element/ui9000-text.js +90 -0
- package/dist/components/text/element/ui9000-text.js.map +1 -0
- package/dist/components/text/index.d.ts +4 -0
- package/dist/components/text/index.d.ts.map +1 -0
- package/dist/components/text/index.js +11 -0
- package/dist/components/text/index.js.map +1 -0
- package/dist/components/text/lib/content.d.ts +2 -0
- package/dist/components/text/lib/content.d.ts.map +1 -0
- package/dist/components/text/lib/markdown.d.ts +4 -0
- package/dist/components/text/lib/markdown.d.ts.map +1 -0
- package/dist/components/text/lib/markdown.js.map +1 -0
- package/dist/components/text/metadata.json.d.ts +98 -0
- package/dist/components/text/metadata.json.js +63 -0
- package/dist/components/text/metadata.json.js.map +1 -0
- package/dist/components/text-input/element/ui9000-text-input.d.ts +16 -0
- package/dist/components/text-input/element/ui9000-text-input.d.ts.map +1 -0
- package/dist/components/text-input/element/ui9000-text-input.js +70 -0
- package/dist/components/text-input/element/ui9000-text-input.js.map +1 -0
- package/dist/components/text-input/index.d.ts +3 -0
- package/dist/components/text-input/index.d.ts.map +1 -0
- package/dist/components/text-input/index.js +9 -0
- package/dist/components/text-input/index.js.map +1 -0
- package/dist/components/text-input/metadata.json.d.ts +99 -0
- package/dist/components/text-input/metadata.json.js +63 -0
- package/dist/components/text-input/metadata.json.js.map +1 -0
- package/dist/element/dispatch-ui9000.d.ts +11 -0
- package/dist/element/dispatch-ui9000.d.ts.map +1 -0
- package/dist/element/dispatch-ui9000.js +21 -0
- package/dist/element/dispatch-ui9000.js.map +1 -0
- package/dist/element/surface-styles.d.ts +2 -0
- package/dist/element/surface-styles.d.ts.map +1 -0
- package/dist/element/surface-styles.js +84 -0
- package/dist/element/surface-styles.js.map +1 -0
- package/dist/index.d.ts +18 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -2
- package/dist/index.js.map +1 -1
- package/dist/lazy/approval-bar.d.ts +4 -0
- package/dist/lazy/approval-bar.d.ts.map +1 -0
- package/dist/lazy/approval-bar.js +5 -0
- package/dist/lazy/approval-bar.js.map +1 -0
- package/dist/lazy/button.d.ts +4 -0
- package/dist/lazy/button.d.ts.map +1 -0
- package/dist/lazy/button.js +5 -0
- package/dist/lazy/button.js.map +1 -0
- package/dist/lazy/checkbox.d.ts +4 -0
- package/dist/lazy/checkbox.d.ts.map +1 -0
- package/dist/lazy/checkbox.js +5 -0
- package/dist/lazy/checkbox.js.map +1 -0
- package/dist/lazy/custom-widget.js +5 -0
- package/dist/lazy/custom-widget.js.map +1 -0
- package/dist/lazy/date-input.d.ts +4 -0
- package/dist/lazy/date-input.d.ts.map +1 -0
- package/dist/lazy/date-input.js +5 -0
- package/dist/lazy/date-input.js.map +1 -0
- package/dist/lazy/entity-detail.d.ts +4 -0
- package/dist/lazy/entity-detail.d.ts.map +1 -0
- package/dist/lazy/entity-detail.js +5 -0
- package/dist/lazy/entity-detail.js.map +1 -0
- package/dist/lazy/event-timeline.d.ts +4 -0
- package/dist/lazy/event-timeline.d.ts.map +1 -0
- package/dist/lazy/event-timeline.js +5 -0
- package/dist/lazy/event-timeline.js.map +1 -0
- package/dist/lazy/evidence-panel.d.ts +4 -0
- package/dist/lazy/evidence-panel.d.ts.map +1 -0
- package/dist/lazy/evidence-panel.js +5 -0
- package/dist/lazy/evidence-panel.js.map +1 -0
- package/dist/lazy/form.d.ts +4 -0
- package/dist/lazy/form.d.ts.map +1 -0
- package/dist/lazy/form.js +5 -0
- package/dist/lazy/form.js.map +1 -0
- package/dist/lazy/image.d.ts +4 -0
- package/dist/lazy/image.d.ts.map +1 -0
- package/dist/lazy/image.js +5 -0
- package/dist/lazy/image.js.map +1 -0
- package/dist/lazy/index.d.ts +16 -1
- package/dist/lazy/index.d.ts.map +1 -1
- package/dist/lazy/index.js +120 -0
- package/dist/lazy/index.js.map +1 -1
- package/dist/lazy/multi-select.d.ts +4 -0
- package/dist/lazy/multi-select.d.ts.map +1 -0
- package/dist/lazy/multi-select.js +5 -0
- package/dist/lazy/multi-select.js.map +1 -0
- package/dist/lazy/number-input.d.ts +4 -0
- package/dist/lazy/number-input.d.ts.map +1 -0
- package/dist/lazy/number-input.js +5 -0
- package/dist/lazy/number-input.js.map +1 -0
- package/dist/lazy/select.d.ts +4 -0
- package/dist/lazy/select.d.ts.map +1 -0
- package/dist/lazy/select.js +5 -0
- package/dist/lazy/select.js.map +1 -0
- package/dist/lazy/table.d.ts +4 -0
- package/dist/lazy/table.d.ts.map +1 -0
- package/dist/lazy/table.js +5 -0
- package/dist/lazy/table.js.map +1 -0
- package/dist/lazy/text-input.d.ts +4 -0
- package/dist/lazy/text-input.d.ts.map +1 -0
- package/dist/lazy/text-input.js +5 -0
- package/dist/lazy/text-input.js.map +1 -0
- package/dist/lazy/text.d.ts +4 -0
- package/dist/lazy/text.d.ts.map +1 -0
- package/dist/lazy/text.js +5 -0
- package/dist/lazy/text.js.map +1 -0
- package/dist/lib/labelled-control.d.ts +12 -0
- package/dist/lib/labelled-control.d.ts.map +1 -0
- package/dist/lib/labelled-control.js +14 -0
- package/dist/lib/labelled-control.js.map +1 -0
- package/package.json +126 -1
- package/dist/components/custom-widget/lib/content.js.map +0 -1
- package/dist/components/custom-widget/lib/markdown.js.map +0 -1
- package/dist/components/custom-widget/lib/table.js.map +0 -1
- /package/dist/components/{custom-widget → table}/lib/table.js +0 -0
- /package/dist/components/{custom-widget → text}/lib/markdown.js +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Client CustomWidget TableWidget — sources, zip-by-index rows, MCP preview fallback. */
|
|
2
|
+
export type TableColumnSource = {
|
|
3
|
+
type: 'dataset';
|
|
4
|
+
datasetId: string;
|
|
5
|
+
field: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: 'chart';
|
|
8
|
+
field: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: 'static';
|
|
11
|
+
field: string;
|
|
12
|
+
};
|
|
13
|
+
export interface TableHeaderContains {
|
|
14
|
+
key?: string;
|
|
15
|
+
source?: TableColumnSource;
|
|
16
|
+
}
|
|
17
|
+
export interface TableHeader {
|
|
18
|
+
label: string;
|
|
19
|
+
contains?: TableHeaderContains[];
|
|
20
|
+
}
|
|
21
|
+
export type DataRow = Record<string, string | number | boolean | null | undefined>;
|
|
22
|
+
export interface TableCellModel {
|
|
23
|
+
text: string;
|
|
24
|
+
badge?: 'success' | 'error';
|
|
25
|
+
}
|
|
26
|
+
export interface CustomTableModel {
|
|
27
|
+
columns: {
|
|
28
|
+
key: string;
|
|
29
|
+
label: string;
|
|
30
|
+
}[];
|
|
31
|
+
cells: TableCellModel[][];
|
|
32
|
+
}
|
|
33
|
+
export declare function stripDataPrefix(field: string): string;
|
|
34
|
+
export declare function buildQualifiedDatasetColumnKey(datasetId: string, field: string): string;
|
|
35
|
+
export declare function buildQualifiedChartColumnKey(field: string): string;
|
|
36
|
+
export declare function buildQualifiedStaticColumnKey(field: string): string;
|
|
37
|
+
export declare function getSourceFromContains(header: TableHeader): TableColumnSource | undefined;
|
|
38
|
+
export declare function parseTableHeaders(input: unknown): TableHeader[];
|
|
39
|
+
export declare function asDataRows(input: unknown): DataRow[];
|
|
40
|
+
/** Client `buildLiveTableRowsFromSources` — zip sources by row index, not a join. */
|
|
41
|
+
export declare function buildLiveTableRowsFromSources({ headers, datasetRows, chartRows, tableDataRows, }: {
|
|
42
|
+
headers: TableHeader[];
|
|
43
|
+
datasetRows: DataRow[];
|
|
44
|
+
chartRows: DataRow[];
|
|
45
|
+
tableDataRows?: DataRow[];
|
|
46
|
+
}): DataRow[];
|
|
47
|
+
/** Client `getCellValue` — stringify + Findings badge. */
|
|
48
|
+
export declare function formatTableCell(header: TableHeader, row: DataRow): TableCellModel;
|
|
49
|
+
export declare function normalizeTableModel(widget: {
|
|
50
|
+
headers?: unknown;
|
|
51
|
+
data?: unknown;
|
|
52
|
+
tableData?: unknown;
|
|
53
|
+
tablePreviewRows?: unknown;
|
|
54
|
+
}): CustomTableModel | null;
|
|
55
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/lib/table.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;CAC3B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAgBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAExF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAqB/D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAKpD;AAED,qFAAqF;AACrF,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,WAAW,EACX,SAAS,EACT,aAAkB,GACnB,EAAE;IACD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;CAC3B,GAAG,OAAO,EAAE,CAwDZ;AAsBD,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,CA8BjF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,gBAAgB,GAAG,IAAI,CAqB1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../../../src/components/table/lib/table.ts"],"sourcesContent":["/** Client CustomWidget TableWidget — sources, zip-by-index rows, MCP preview fallback. */\n\nexport type TableColumnSource =\n | { type: 'dataset'; datasetId: string; field: string }\n | { type: 'chart'; field: string }\n | { type: 'static'; field: string };\n\nexport interface TableHeaderContains {\n key?: string;\n source?: TableColumnSource;\n}\n\nexport interface TableHeader {\n label: string;\n contains?: TableHeaderContains[];\n}\n\nexport type DataRow = Record<string, string | number | boolean | null | undefined>;\n\nexport interface TableCellModel {\n text: string;\n badge?: 'success' | 'error';\n}\n\nexport interface CustomTableModel {\n columns: { key: string; label: string }[];\n cells: TableCellModel[][];\n}\n\nexport function stripDataPrefix(field: string): string {\n return field.startsWith('data.') ? field.slice('data.'.length) : field;\n}\n\nexport function buildQualifiedDatasetColumnKey(datasetId: string, field: string): string {\n return `${field}__${datasetId}`;\n}\n\nexport function buildQualifiedChartColumnKey(field: string): string {\n return `${field}__chart`;\n}\n\nexport function buildQualifiedStaticColumnKey(field: string): string {\n return `${field}__static`;\n}\n\nfunction parseSource(raw: unknown): TableColumnSource | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const o = raw as Record<string, unknown>;\n const field = typeof o.field === 'string' ? stripDataPrefix(o.field.trim()) : '';\n if (!field) return undefined;\n if (o.type === 'chart' || o.type === 'static') return { type: o.type, field };\n if (o.type === 'dataset') {\n const datasetId = typeof o.datasetId === 'string' ? o.datasetId.trim() : '';\n if (!datasetId) return undefined;\n return { type: 'dataset', datasetId, field };\n }\n return undefined;\n}\n\nexport function getSourceFromContains(header: TableHeader): TableColumnSource | undefined {\n return header.contains?.[0]?.source;\n}\n\nexport function parseTableHeaders(input: unknown): TableHeader[] {\n if (!Array.isArray(input)) return [];\n const headers: TableHeader[] = [];\n for (const item of input) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) continue;\n const raw = item as Record<string, unknown>;\n const label = typeof raw.label === 'string' ? raw.label : '';\n const containsRaw = Array.isArray(raw.contains) ? raw.contains : [];\n const contains: TableHeaderContains[] = containsRaw.flatMap((entry) => {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) return [];\n const e = entry as Record<string, unknown>;\n return [\n {\n key: typeof e.key === 'string' ? e.key : undefined,\n source: parseSource(e.source),\n },\n ];\n });\n headers.push({ label, contains });\n }\n return headers;\n}\n\nexport function asDataRows(input: unknown): DataRow[] {\n if (!Array.isArray(input)) return [];\n return input.filter(\n (row): row is DataRow => !!row && typeof row === 'object' && !Array.isArray(row),\n ) as DataRow[];\n}\n\n/** Client `buildLiveTableRowsFromSources` — zip sources by row index, not a join. */\nexport function buildLiveTableRowsFromSources({\n headers,\n datasetRows,\n chartRows,\n tableDataRows = [],\n}: {\n headers: TableHeader[];\n datasetRows: DataRow[];\n chartRows: DataRow[];\n tableDataRows?: DataRow[];\n}): DataRow[] {\n const sourcedHeaders = headers.filter((header) => Boolean(getSourceFromContains(header)));\n if (!sourcedHeaders.length) return [];\n\n const needsDataset = sourcedHeaders.some((h) => getSourceFromContains(h)?.type === 'dataset');\n const needsChart = sourcedHeaders.some((h) => getSourceFromContains(h)?.type === 'chart');\n const needsStatic = sourcedHeaders.some((h) => getSourceFromContains(h)?.type === 'static');\n\n const rowCount = Math.max(\n needsDataset ? datasetRows.length : 0,\n needsChart ? chartRows.length : 0,\n needsStatic ? tableDataRows.length : 0,\n 0,\n );\n\n const rows: DataRow[] = [];\n for (let index = 0; index < rowCount; index += 1) {\n const row: DataRow = {};\n for (const header of sourcedHeaders) {\n const contains = header.contains?.[0];\n const source = getSourceFromContains(header);\n if (!contains || !source) continue;\n\n if (source.type === 'chart') {\n const chartField = stripDataPrefix(source.field);\n const outputKey = contains.key || buildQualifiedChartColumnKey(chartField);\n row[outputKey] =\n chartRows[index]?.[chartField] ?? chartRows[index]?.[source.field] ?? null;\n continue;\n }\n\n if (source.type === 'static') {\n const staticField = stripDataPrefix(source.field);\n const outputKey = contains.key || buildQualifiedStaticColumnKey(staticField);\n row[outputKey] =\n tableDataRows[index]?.[staticField] ??\n tableDataRows[index]?.[source.field] ??\n tableDataRows[index]?.[outputKey] ??\n null;\n continue;\n }\n\n const bareField = stripDataPrefix(source.field);\n const outputKey = contains.key || buildQualifiedDatasetColumnKey(source.datasetId, bareField);\n const qualifiedKey = buildQualifiedDatasetColumnKey(source.datasetId, bareField);\n const legacyQualified = buildQualifiedDatasetColumnKey(source.datasetId, source.field);\n row[outputKey] =\n datasetRows[index]?.[qualifiedKey] ??\n datasetRows[index]?.[legacyQualified] ??\n datasetRows[index]?.[bareField] ??\n datasetRows[index]?.[source.field] ??\n null;\n }\n rows.push(row);\n }\n return rows;\n}\n\nfunction formatJsonToReadable(value: unknown): string | undefined {\n if (!value) return undefined;\n let obj: Record<string, unknown> | null = null;\n if (typeof value === 'object' && !Array.isArray(value)) {\n obj = value as Record<string, unknown>;\n } else if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) return undefined;\n try {\n obj = JSON.parse(trimmed) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n }\n if (!obj) return undefined;\n return Object.entries(obj)\n .map(([key, val]) => `${key} : ${String(val)}`)\n .join(', ');\n}\n\n/** Client `getCellValue` — stringify + Findings badge. */\nexport function formatTableCell(header: TableHeader, row: DataRow): TableCellModel {\n const contains = header.contains?.[0];\n const source = getSourceFromContains(header);\n const bareField = (source?.field ?? '').replace(/^data\\./, '');\n const keyField =\n contains?.key ||\n (source?.type === 'dataset'\n ? `${bareField}__${source.datasetId}`\n : source?.type === 'chart'\n ? `${bareField}__chart`\n : source?.type === 'static'\n ? `${bareField}__static`\n : '');\n if (!keyField) return { text: '-' };\n\n const rawValue = row[keyField];\n const modelValue = formatJsonToReadable(rawValue);\n const cellValue =\n modelValue ??\n (rawValue == null\n ? undefined\n : typeof rawValue === 'string' || typeof rawValue === 'number' || typeof rawValue === 'boolean'\n ? String(rawValue)\n : JSON.stringify(rawValue));\n const text = cellValue ?? '-';\n\n if (keyField.toLowerCase() === 'findings') {\n return { text, badge: text === 'Optimal' ? 'success' : 'error' };\n }\n return { text };\n}\n\nexport function normalizeTableModel(widget: {\n headers?: unknown;\n data?: unknown;\n tableData?: unknown;\n tablePreviewRows?: unknown;\n}): CustomTableModel | null {\n const headers = parseTableHeaders(widget.headers);\n if (!headers.length) return null;\n if (headers.some((header) => !getSourceFromContains(header))) return null;\n\n const rows = buildLiveTableRowsFromSources({\n headers,\n datasetRows: asDataRows(widget.tablePreviewRows),\n chartRows: asDataRows(widget.data),\n tableDataRows: asDataRows(widget.tableData),\n });\n\n const columns = headers.map((header, index) => ({\n key: header.contains?.[0]?.key || `col-${index}`,\n label: header.label || header.contains?.[0]?.key || `Column ${index + 1}`,\n }));\n\n return {\n columns,\n cells: rows.map((row) => headers.map((header) => formatTableCell(header, row))),\n };\n}\n"],"names":["_a","outputKey"],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
"id": "table",
|
|
3
|
+
"tag": "ui9000-table",
|
|
4
|
+
"title": "Evidence Table",
|
|
5
|
+
"description": "Snapshot table. Columns + rows; dataset source uses tablePreviewRows, chart uses data, static uses tableData. No live select.",
|
|
6
|
+
"chartTypeKeys": [],
|
|
7
|
+
"source": "ui9000-widgets Stage 2 close-out",
|
|
8
|
+
"stack": "lit",
|
|
9
|
+
"lazyImport": "@ui9000/widgets/lazy/table",
|
|
10
|
+
"entry": "@ui9000/widgets/table",
|
|
11
|
+
"usageConditions": {
|
|
12
|
+
"host": "mcp-chat",
|
|
13
|
+
"notFor": "fusedash-editor",
|
|
14
|
+
"mapsExcluded": true
|
|
15
|
+
},
|
|
16
|
+
"allowedActions": [
|
|
17
|
+
"select",
|
|
18
|
+
"resize"
|
|
19
|
+
],
|
|
20
|
+
"tier": "engine",
|
|
21
|
+
"intents": [
|
|
22
|
+
"evidence",
|
|
23
|
+
"summary"
|
|
24
|
+
],
|
|
25
|
+
"dataRoles": [
|
|
26
|
+
{
|
|
27
|
+
"id": "rows",
|
|
28
|
+
"required": true,
|
|
29
|
+
"description": "Tabular rows with named columns (evidence snapshot)."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"eligibility": [
|
|
33
|
+
{
|
|
34
|
+
"when": "profile.hasTabularRows && profile.rowCount >= 1",
|
|
35
|
+
"reason": "Table shows a snapshot of rows and columns."
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"disqualify": [
|
|
39
|
+
{
|
|
40
|
+
"when": "!profile.hasTabularRows",
|
|
41
|
+
"reason": "Without rows a table is empty; use text or entity-detail."
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"accessibility": {
|
|
45
|
+
"nameFrom": "title or first column header",
|
|
46
|
+
"keyboard": [
|
|
47
|
+
"Tab into table container"
|
|
48
|
+
],
|
|
49
|
+
"shadowBoundary": "Do not use aria-labelledby across the host; set aria-label on the host element."
|
|
50
|
+
},
|
|
51
|
+
"evalCases": [
|
|
52
|
+
{
|
|
53
|
+
"id": "table-picks-rows",
|
|
54
|
+
"intent": "evidence",
|
|
55
|
+
"profile": {
|
|
56
|
+
"hasTabularRows": true,
|
|
57
|
+
"rowCount": 12
|
|
58
|
+
},
|
|
59
|
+
"expect": "eligible",
|
|
60
|
+
"reasonIncludes": "snapshot"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "table-rejects-empty",
|
|
64
|
+
"intent": "evidence",
|
|
65
|
+
"profile": {
|
|
66
|
+
"hasTabularRows": false
|
|
67
|
+
},
|
|
68
|
+
"expect": "disqualified",
|
|
69
|
+
"reasonIncludes": "empty"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"propsSchema": {
|
|
73
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
74
|
+
"type": "object",
|
|
75
|
+
"properties": {
|
|
76
|
+
"data": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"description": "CustomTableModel or FuseDash widget with headers"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"required": [
|
|
82
|
+
"data"
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
;
|
|
87
|
+
|
|
88
|
+
export default _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const id = "table";
|
|
2
|
+
const tag = "ui9000-table";
|
|
3
|
+
const title = "Evidence Table";
|
|
4
|
+
const description = "Snapshot table. Columns + rows; dataset source uses tablePreviewRows, chart uses data, static uses tableData. No live select.";
|
|
5
|
+
const chartTypeKeys = [];
|
|
6
|
+
const source = "ui9000-widgets Stage 2 close-out";
|
|
7
|
+
const stack = "lit";
|
|
8
|
+
const lazyImport = "@ui9000/widgets/lazy/table";
|
|
9
|
+
const entry = "@ui9000/widgets/table";
|
|
10
|
+
const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true };
|
|
11
|
+
const allowedActions = ["select", "resize"];
|
|
12
|
+
const tier = "engine";
|
|
13
|
+
const intents = ["evidence", "summary"];
|
|
14
|
+
const dataRoles = [{ "id": "rows", "required": true, "description": "Tabular rows with named columns (evidence snapshot)." }];
|
|
15
|
+
const eligibility = [{ "when": "profile.hasTabularRows && profile.rowCount >= 1", "reason": "Table shows a snapshot of rows and columns." }];
|
|
16
|
+
const disqualify = [{ "when": "!profile.hasTabularRows", "reason": "Without rows a table is empty; use text or entity-detail." }];
|
|
17
|
+
const accessibility = { "nameFrom": "title or first column header", "keyboard": ["Tab into table container"], "shadowBoundary": "Do not use aria-labelledby across the host; set aria-label on the host element." };
|
|
18
|
+
const evalCases = [{ "id": "table-picks-rows", "intent": "evidence", "profile": { "hasTabularRows": true, "rowCount": 12 }, "expect": "eligible", "reasonIncludes": "snapshot" }, { "id": "table-rejects-empty", "intent": "evidence", "profile": { "hasTabularRows": false }, "expect": "disqualified", "reasonIncludes": "empty" }];
|
|
19
|
+
const propsSchema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "data": { "type": "object", "description": "CustomTableModel or FuseDash widget with headers" } }, "required": ["data"] };
|
|
20
|
+
const metadata = {
|
|
21
|
+
id,
|
|
22
|
+
tag,
|
|
23
|
+
title,
|
|
24
|
+
description,
|
|
25
|
+
chartTypeKeys,
|
|
26
|
+
source,
|
|
27
|
+
stack,
|
|
28
|
+
lazyImport,
|
|
29
|
+
entry,
|
|
30
|
+
usageConditions,
|
|
31
|
+
allowedActions,
|
|
32
|
+
tier,
|
|
33
|
+
intents,
|
|
34
|
+
dataRoles,
|
|
35
|
+
eligibility,
|
|
36
|
+
disqualify,
|
|
37
|
+
accessibility,
|
|
38
|
+
evalCases,
|
|
39
|
+
propsSchema
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
accessibility,
|
|
43
|
+
allowedActions,
|
|
44
|
+
chartTypeKeys,
|
|
45
|
+
dataRoles,
|
|
46
|
+
metadata as default,
|
|
47
|
+
description,
|
|
48
|
+
disqualify,
|
|
49
|
+
eligibility,
|
|
50
|
+
entry,
|
|
51
|
+
evalCases,
|
|
52
|
+
id,
|
|
53
|
+
intents,
|
|
54
|
+
lazyImport,
|
|
55
|
+
propsSchema,
|
|
56
|
+
source,
|
|
57
|
+
stack,
|
|
58
|
+
tag,
|
|
59
|
+
tier,
|
|
60
|
+
title,
|
|
61
|
+
usageConditions
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=metadata.json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
+
export declare class Ui9000Text extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult[];
|
|
4
|
+
dataJson: string;
|
|
5
|
+
private _text;
|
|
6
|
+
connectedCallback(): void;
|
|
7
|
+
willUpdate(changed: PropertyValues): void;
|
|
8
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
9
|
+
}
|
|
10
|
+
export declare function registerText(): void;
|
|
11
|
+
declare global {
|
|
12
|
+
interface HTMLElementTagNameMap {
|
|
13
|
+
'ui9000-text': Ui9000Text;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ui9000-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui9000-text.d.ts","sourceRoot":"","sources":["../../../../src/components/text/element/ui9000-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AA0CjE,qBACa,UAAW,SAAQ,UAAU;IACxC,OAAgB,MAAM,4BAA+B;IAGrD,QAAQ,SAAQ;IAGhB,OAAO,CAAC,KAAK,CAAuB;IAE3B,iBAAiB,IAAI,IAAI;IAKzB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAMzC,MAAM;CAMhB;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { LitElement, html, css } from "lit";
|
|
2
|
+
import { property, state, customElement } from "lit/decorators.js";
|
|
3
|
+
import { surfaceStyles } from "../../../element/surface-styles.js";
|
|
4
|
+
import { parseJsonAttr } from "../../../utils/chart-helpers.js";
|
|
5
|
+
import { normalizeTextContent } from "../../image/lib/url.js";
|
|
6
|
+
import { renderMarkdown } from "../lib/markdown.js";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
10
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
11
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12
|
+
if (decorator = decorators[i])
|
|
13
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14
|
+
if (kind && result) __defProp(target, key, result);
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
const textStyles = css`
|
|
18
|
+
.text-pane {
|
|
19
|
+
padding: 8px;
|
|
20
|
+
text-align: left;
|
|
21
|
+
}
|
|
22
|
+
.text-pane .md p {
|
|
23
|
+
margin: 0 0 10px;
|
|
24
|
+
}
|
|
25
|
+
.text-pane .md h1,
|
|
26
|
+
.text-pane .md h2,
|
|
27
|
+
.text-pane .md h3 {
|
|
28
|
+
margin: 0 0 8px;
|
|
29
|
+
font-weight: 600;
|
|
30
|
+
}
|
|
31
|
+
.text-pane .md a {
|
|
32
|
+
color: var(--ui9000-color-primary, #473dd9);
|
|
33
|
+
}
|
|
34
|
+
.text-pane .md pre {
|
|
35
|
+
margin: 0 0 10px;
|
|
36
|
+
padding: 8px;
|
|
37
|
+
overflow: auto;
|
|
38
|
+
background: var(--ui9000-color-background, #f3f4f6);
|
|
39
|
+
border-radius: 6px;
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
function asText(raw) {
|
|
43
|
+
if (typeof raw === "string") return raw.trim() || null;
|
|
44
|
+
if (raw && typeof raw === "object" && "text" in raw) {
|
|
45
|
+
return normalizeTextContent(raw);
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
let Ui9000Text = class extends LitElement {
|
|
50
|
+
constructor() {
|
|
51
|
+
super(...arguments);
|
|
52
|
+
this.dataJson = "{}";
|
|
53
|
+
this._text = null;
|
|
54
|
+
}
|
|
55
|
+
connectedCallback() {
|
|
56
|
+
super.connectedCallback();
|
|
57
|
+
this._text = asText(parseJsonAttr(this.dataJson, this.dataJson));
|
|
58
|
+
}
|
|
59
|
+
willUpdate(changed) {
|
|
60
|
+
if (changed.has("dataJson")) {
|
|
61
|
+
this._text = asText(parseJsonAttr(this.dataJson, this.dataJson));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
render() {
|
|
65
|
+
if (!this._text) {
|
|
66
|
+
return html`<p class="blocked" role="status">No text</p>`;
|
|
67
|
+
}
|
|
68
|
+
return html`<div class="root text-pane" aria-label="Text">${renderMarkdown(this._text)}</div>`;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
Ui9000Text.styles = [surfaceStyles, textStyles];
|
|
72
|
+
__decorateClass([
|
|
73
|
+
property({ type: String, attribute: "data" })
|
|
74
|
+
], Ui9000Text.prototype, "dataJson", 2);
|
|
75
|
+
__decorateClass([
|
|
76
|
+
state()
|
|
77
|
+
], Ui9000Text.prototype, "_text", 2);
|
|
78
|
+
Ui9000Text = __decorateClass([
|
|
79
|
+
customElement("ui9000-text")
|
|
80
|
+
], Ui9000Text);
|
|
81
|
+
function registerText() {
|
|
82
|
+
if (!customElements.get("ui9000-text")) {
|
|
83
|
+
customElements.define("ui9000-text", Ui9000Text);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
Ui9000Text,
|
|
88
|
+
registerText
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=ui9000-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui9000-text.js","sources":["../../../../src/components/text/element/ui9000-text.ts"],"sourcesContent":["import { css, html, LitElement, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { surfaceStyles } from '../../../element/surface-styles.js';\nimport { parseJsonAttr } from '../../../utils/chart-helpers.js';\nimport { normalizeTextContent } from '../../image/lib/url.js';\nimport { renderMarkdown } from '../lib/markdown.js';\n\nconst textStyles = css`\n .text-pane {\n padding: 8px;\n text-align: left;\n }\n .text-pane .md p {\n margin: 0 0 10px;\n }\n .text-pane .md h1,\n .text-pane .md h2,\n .text-pane .md h3 {\n margin: 0 0 8px;\n font-weight: 600;\n }\n .text-pane .md a {\n color: var(--ui9000-color-primary, #473dd9);\n }\n .text-pane .md pre {\n margin: 0 0 10px;\n padding: 8px;\n overflow: auto;\n background: var(--ui9000-color-background, #f3f4f6);\n border-radius: 6px;\n }\n`;\n\nfunction asText(raw: unknown): string | null {\n if (typeof raw === 'string') return raw.trim() || null;\n if (raw && typeof raw === 'object' && 'text' in raw) {\n return normalizeTextContent(raw as { text?: unknown });\n }\n return null;\n}\n\n@customElement('ui9000-text')\nexport class Ui9000Text extends LitElement {\n static override styles = [surfaceStyles, textStyles];\n\n @property({ type: String, attribute: 'data' })\n dataJson = '{}';\n\n @state()\n private _text: string | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._text = asText(parseJsonAttr<unknown>(this.dataJson, this.dataJson));\n }\n\n override willUpdate(changed: PropertyValues): void {\n if (changed.has('dataJson')) {\n this._text = asText(parseJsonAttr<unknown>(this.dataJson, this.dataJson));\n }\n }\n\n override render() {\n if (!this._text) {\n return html`<p class=\"blocked\" role=\"status\">No text</p>`;\n }\n return html`<div class=\"root text-pane\" aria-label=\"Text\">${renderMarkdown(this._text)}</div>`;\n }\n}\n\nexport function registerText(): void {\n if (!customElements.get('ui9000-text')) {\n customElements.define('ui9000-text', Ui9000Text);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui9000-text': Ui9000Text;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAQA,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BnB,SAAS,OAAO,KAA6B;AAC3C,MAAI,OAAO,QAAQ,SAAU,QAAO,IAAI,UAAU;AAClD,MAAI,OAAO,OAAO,QAAQ,YAAY,UAAU,KAAK;AACnD,WAAO,qBAAqB,GAAyB;AAAA,EACvD;AACA,SAAO;AACT;AAGO,IAAM,aAAN,cAAyB,WAAW;AAAA,EAApC,cAAA;AAAA,UAAA,GAAA,SAAA;AAIL,SAAA,WAAW;AAGX,SAAQ,QAAuB;AAAA,EAAA;AAAA,EAEtB,oBAA0B;AACjC,UAAM,kBAAA;AACN,SAAK,QAAQ,OAAO,cAAuB,KAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,EAC1E;AAAA,EAES,WAAW,SAA+B;AACjD,QAAI,QAAQ,IAAI,UAAU,GAAG;AAC3B,WAAK,QAAQ,OAAO,cAAuB,KAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA,EAES,SAAS;AAChB,QAAI,CAAC,KAAK,OAAO;AACf,aAAO;AAAA,IACT;AACA,WAAO,qDAAqD,eAAe,KAAK,KAAK,CAAC;AAAA,EACxF;AACF;AA1Ba,WACK,SAAS,CAAC,eAAe,UAAU;AAGnD,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,QAAQ;AAAA,GAHlC,WAIX,WAAA,YAAA,CAAA;AAGQ,gBAAA;AAAA,EADP,MAAA;AAAM,GANI,WAOH,WAAA,SAAA,CAAA;AAPG,aAAN,gBAAA;AAAA,EADN,cAAc,aAAa;AAAA,GACf,UAAA;AA4BN,SAAS,eAAqB;AACnC,MAAI,CAAC,eAAe,IAAI,aAAa,GAAG;AACtC,mBAAe,OAAO,eAAe,UAAU;AAAA,EACjD;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { registerText } from "./element/ui9000-text.js";
|
|
2
|
+
import { Ui9000Text } from "./element/ui9000-text.js";
|
|
3
|
+
import { renderMarkdown } from "./lib/markdown.js";
|
|
4
|
+
import { default as default2 } from "./metadata.json.js";
|
|
5
|
+
export {
|
|
6
|
+
Ui9000Text,
|
|
7
|
+
registerText,
|
|
8
|
+
renderMarkdown,
|
|
9
|
+
default2 as textMetadata
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/components/text/lib/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/text/lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAkDhD,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CA0F7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sources":["../../../../src/components/text/lib/markdown.ts"],"sourcesContent":["import { html, type TemplateResult } from 'lit';\n\n/** Safe markdown → Lit. No innerHTML; links/images restricted to http(s). */\n\nconst SAFE_HREF = /^https?:\\/\\//i;\n\nfunction isSafeHref(href: string): boolean {\n return SAFE_HREF.test(href.trim());\n}\n\nfunction renderInline(text: string): TemplateResult[] {\n const nodes: TemplateResult[] = [];\n const re =\n /(\\*\\*[^*]+\\*\\*|__[^_]+__|\\*[^*]+\\*|_[^_]+_|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\n let last = 0;\n let match: RegExpExecArray | null;\n while ((match = re.exec(text))) {\n if (match.index > last) {\n nodes.push(html`${text.slice(last, match.index)}`);\n }\n const token = match[0];\n if (token.startsWith('**') || token.startsWith('__')) {\n nodes.push(html`<strong>${token.slice(2, -2)}</strong>`);\n } else if (token.startsWith('*') || token.startsWith('_')) {\n nodes.push(html`<em>${token.slice(1, -1)}</em>`);\n } else if (token.startsWith('`')) {\n nodes.push(html`<code>${token.slice(1, -1)}</code>`);\n } else {\n const link = token.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)$/);\n if (link && isSafeHref(link[2])) {\n nodes.push(\n html`<a href=${link[2]} target=\"_blank\" rel=\"noopener noreferrer\">${link[1]}</a>`,\n );\n } else {\n nodes.push(html`${token}`);\n }\n }\n last = match.index + token.length;\n }\n if (last < text.length) nodes.push(html`${text.slice(last)}`);\n return nodes.length ? nodes : [html`${text}`];\n}\n\nfunction flushParagraph(lines: string[], out: TemplateResult[]): void {\n const text = lines.join('\\n').trim();\n if (!text) return;\n out.push(html`<p>${renderInline(text)}</p>`);\n lines.length = 0;\n}\n\n/** Client TextWidget markdown view — headings, lists, emphasis, code, http(s) links. */\nexport function renderMarkdown(source: string): TemplateResult {\n const lines = source.replace(/\\r\\n/g, '\\n').split('\\n');\n const blocks: TemplateResult[] = [];\n const paragraph: string[] = [];\n let listItems: { ordered: boolean; text: string }[] | null = null;\n let fence: string[] | null = null;\n\n const flushList = () => {\n if (!listItems?.length) {\n listItems = null;\n return;\n }\n const items = listItems.map((item) => html`<li>${renderInline(item.text)}</li>`);\n blocks.push(\n listItems[0].ordered ? html`<ol>${items}</ol>` : html`<ul>${items}</ul>`,\n );\n listItems = null;\n };\n\n for (const line of lines) {\n if (fence) {\n if (line.startsWith('```')) {\n const code = fence.join('\\n');\n blocks.push(html`<pre><code>${code}</code></pre>`);\n fence = null;\n } else {\n fence.push(line);\n }\n continue;\n }\n if (line.startsWith('```')) {\n flushParagraph(paragraph, blocks);\n flushList();\n fence = [];\n continue;\n }\n\n const heading = line.match(/^(#{1,3})\\s+(.+)$/);\n if (heading) {\n flushParagraph(paragraph, blocks);\n flushList();\n const title = heading[2];\n const level = heading[1].length;\n blocks.push(\n level === 1\n ? html`<h1>${renderInline(title)}</h1>`\n : level === 2\n ? html`<h2>${renderInline(title)}</h2>`\n : html`<h3>${renderInline(title)}</h3>`,\n );\n continue;\n }\n\n const ul = line.match(/^[-*]\\s+(.+)$/);\n if (ul) {\n flushParagraph(paragraph, blocks);\n if (!listItems || listItems[0]?.ordered) {\n flushList();\n listItems = [];\n }\n listItems.push({ ordered: false, text: ul[1] });\n continue;\n }\n\n const ol = line.match(/^\\d+[.)]\\s+(.+)$/);\n if (ol) {\n flushParagraph(paragraph, blocks);\n if (!listItems || !listItems[0]?.ordered) {\n flushList();\n listItems = [];\n }\n listItems.push({ ordered: true, text: ol[1] });\n continue;\n }\n\n if (!line.trim()) {\n flushParagraph(paragraph, blocks);\n flushList();\n continue;\n }\n\n flushList();\n paragraph.push(line);\n }\n\n if (fence) blocks.push(html`<pre><code>${fence.join('\\n')}</code></pre>`);\n flushParagraph(paragraph, blocks);\n flushList();\n\n return html`<div class=\"md\">${blocks}</div>`;\n}\n"],"names":[],"mappings":";AAIA,MAAM,YAAY;AAElB,SAAS,WAAW,MAAuB;AACzC,SAAO,UAAU,KAAK,KAAK,KAAA,CAAM;AACnC;AAEA,SAAS,aAAa,MAAgC;AACpD,QAAM,QAA0B,CAAA;AAChC,QAAM,KACJ;AACF,MAAI,OAAO;AACX,MAAI;AACJ,SAAQ,QAAQ,GAAG,KAAK,IAAI,GAAI;AAC9B,QAAI,MAAM,QAAQ,MAAM;AACtB,YAAM,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,KAAK,CAAC,EAAE;AAAA,IACnD;AACA,UAAM,QAAQ,MAAM,CAAC;AACrB,QAAI,MAAM,WAAW,IAAI,KAAK,MAAM,WAAW,IAAI,GAAG;AACpD,YAAM,KAAK,eAAe,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW;AAAA,IACzD,WAAW,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,GAAG;AACzD,YAAM,KAAK,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO;AAAA,IACjD,WAAW,MAAM,WAAW,GAAG,GAAG;AAChC,YAAM,KAAK,aAAa,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS;AAAA,IACrD,OAAO;AACL,YAAM,OAAO,MAAM,MAAM,2BAA2B;AACpD,UAAI,QAAQ,WAAW,KAAK,CAAC,CAAC,GAAG;AAC/B,cAAM;AAAA,UACJ,eAAe,KAAK,CAAC,CAAC,8CAA8C,KAAK,CAAC,CAAC;AAAA,QAAA;AAAA,MAE/E,OAAO;AACL,cAAM,KAAK,OAAO,KAAK,EAAE;AAAA,MAC3B;AAAA,IACF;AACA,WAAO,MAAM,QAAQ,MAAM;AAAA,EAC7B;AACA,MAAI,OAAO,KAAK,OAAQ,OAAM,KAAK,OAAO,KAAK,MAAM,IAAI,CAAC,EAAE;AAC5D,SAAO,MAAM,SAAS,QAAQ,CAAC,OAAO,IAAI,EAAE;AAC9C;AAEA,SAAS,eAAe,OAAiB,KAA6B;AACpE,QAAM,OAAO,MAAM,KAAK,IAAI,EAAE,KAAA;AAC9B,MAAI,CAAC,KAAM;AACX,MAAI,KAAK,UAAU,aAAa,IAAI,CAAC,MAAM;AAC3C,QAAM,SAAS;AACjB;AAGO,SAAS,eAAe,QAAgC;;AAC7D,QAAM,QAAQ,OAAO,QAAQ,SAAS,IAAI,EAAE,MAAM,IAAI;AACtD,QAAM,SAA2B,CAAA;AACjC,QAAM,YAAsB,CAAA;AAC5B,MAAI,YAAyD;AAC7D,MAAI,QAAyB;AAE7B,QAAM,YAAY,MAAM;AACtB,QAAI,EAAC,uCAAW,SAAQ;AACtB,kBAAY;AACZ;AAAA,IACF;AACA,UAAM,QAAQ,UAAU,IAAI,CAAC,SAAS,WAAW,aAAa,KAAK,IAAI,CAAC,OAAO;AAC/E,WAAO;AAAA,MACL,UAAU,CAAC,EAAE,UAAU,WAAW,KAAK,UAAU,WAAW,KAAK;AAAA,IAAA;AAEnE,gBAAY;AAAA,EACd;AAEA,aAAW,QAAQ,OAAO;AACxB,QAAI,OAAO;AACT,UAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,cAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,eAAO,KAAK,kBAAkB,IAAI,eAAe;AACjD,gBAAQ;AAAA,MACV,OAAO;AACL,cAAM,KAAK,IAAI;AAAA,MACjB;AACA;AAAA,IACF;AACA,QAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,qBAAe,WAAW,MAAM;AAChC,gBAAA;AACA,cAAQ,CAAA;AACR;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,MAAM,mBAAmB;AAC9C,QAAI,SAAS;AACX,qBAAe,WAAW,MAAM;AAChC,gBAAA;AACA,YAAM,QAAQ,QAAQ,CAAC;AACvB,YAAM,QAAQ,QAAQ,CAAC,EAAE;AACzB,aAAO;AAAA,QACL,UAAU,IACN,WAAW,aAAa,KAAK,CAAC,UAC9B,UAAU,IACR,WAAW,aAAa,KAAK,CAAC,UAC9B,WAAW,aAAa,KAAK,CAAC;AAAA,MAAA;AAEtC;AAAA,IACF;AAEA,UAAM,KAAK,KAAK,MAAM,eAAe;AACrC,QAAI,IAAI;AACN,qBAAe,WAAW,MAAM;AAChC,UAAI,CAAC,eAAa,eAAU,CAAC,MAAX,mBAAc,UAAS;AACvC,kBAAA;AACA,oBAAY,CAAA;AAAA,MACd;AACA,gBAAU,KAAK,EAAE,SAAS,OAAO,MAAM,GAAG,CAAC,GAAG;AAC9C;AAAA,IACF;AAEA,UAAM,KAAK,KAAK,MAAM,kBAAkB;AACxC,QAAI,IAAI;AACN,qBAAe,WAAW,MAAM;AAChC,UAAI,CAAC,aAAa,GAAC,eAAU,CAAC,MAAX,mBAAc,UAAS;AACxC,kBAAA;AACA,oBAAY,CAAA;AAAA,MACd;AACA,gBAAU,KAAK,EAAE,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG;AAC7C;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ;AAChB,qBAAe,WAAW,MAAM;AAChC,gBAAA;AACA;AAAA,IACF;AAEA,cAAA;AACA,cAAU,KAAK,IAAI;AAAA,EACrB;AAEA,MAAI,cAAc,KAAK,kBAAkB,MAAM,KAAK,IAAI,CAAC,eAAe;AACxE,iBAAe,WAAW,MAAM;AAChC,YAAA;AAEA,SAAO,uBAAuB,MAAM;AACtC;"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
"id": "text",
|
|
3
|
+
"tag": "ui9000-text",
|
|
4
|
+
"title": "Text",
|
|
5
|
+
"description": "Markdown/plain note. Links http(s) only. No innerHTML.",
|
|
6
|
+
"chartTypeKeys": [],
|
|
7
|
+
"source": "ui9000-widgets Stage 2 close-out",
|
|
8
|
+
"stack": "lit",
|
|
9
|
+
"lazyImport": "@ui9000/widgets/lazy/text",
|
|
10
|
+
"entry": "@ui9000/widgets/text",
|
|
11
|
+
"usageConditions": {
|
|
12
|
+
"host": "mcp-chat",
|
|
13
|
+
"notFor": "fusedash-editor",
|
|
14
|
+
"mapsExcluded": true
|
|
15
|
+
},
|
|
16
|
+
"allowedActions": [
|
|
17
|
+
"resize"
|
|
18
|
+
],
|
|
19
|
+
"tier": "engine",
|
|
20
|
+
"intents": [
|
|
21
|
+
"evidence"
|
|
22
|
+
],
|
|
23
|
+
"dataRoles": [
|
|
24
|
+
{
|
|
25
|
+
"id": "body",
|
|
26
|
+
"required": true,
|
|
27
|
+
"description": "Markdown or plain text note."
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"eligibility": [
|
|
31
|
+
{
|
|
32
|
+
"when": "profile.hasClaim || profile.hasTabularRows",
|
|
33
|
+
"reason": "Text carries a narrative claim or note alongside evidence."
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"disqualify": [
|
|
37
|
+
{
|
|
38
|
+
"when": "!profile.hasClaim && !profile.hasTabularRows && !profile.hasEvents",
|
|
39
|
+
"reason": "With no claim or supporting context, prefer KPI or table."
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"accessibility": {
|
|
43
|
+
"nameFrom": "heading in markdown or aria-label",
|
|
44
|
+
"keyboard": [
|
|
45
|
+
"Tab into text, follow http(s) links"
|
|
46
|
+
],
|
|
47
|
+
"shadowBoundary": "Do not use aria-labelledby across the host; set aria-label on the host element."
|
|
48
|
+
},
|
|
49
|
+
"evalCases": [
|
|
50
|
+
{
|
|
51
|
+
"id": "text-picks-claim",
|
|
52
|
+
"intent": "evidence",
|
|
53
|
+
"profile": {
|
|
54
|
+
"hasClaim": true
|
|
55
|
+
},
|
|
56
|
+
"expect": "eligible",
|
|
57
|
+
"reasonIncludes": "narrative"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": "text-rejects-empty",
|
|
61
|
+
"intent": "summary",
|
|
62
|
+
"profile": {
|
|
63
|
+
"hasClaim": false,
|
|
64
|
+
"hasTabularRows": false,
|
|
65
|
+
"hasEvents": false
|
|
66
|
+
},
|
|
67
|
+
"expect": "disqualified",
|
|
68
|
+
"reasonIncludes": "KPI"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"propsSchema": {
|
|
72
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
73
|
+
"type": "object",
|
|
74
|
+
"properties": {
|
|
75
|
+
"data": {
|
|
76
|
+
"oneOf": [
|
|
77
|
+
{
|
|
78
|
+
"type": "string"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"type": "object",
|
|
82
|
+
"properties": {
|
|
83
|
+
"text": {
|
|
84
|
+
"type": "string"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"required": [
|
|
92
|
+
"data"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
;
|
|
97
|
+
|
|
98
|
+
export default _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const id = "text";
|
|
2
|
+
const tag = "ui9000-text";
|
|
3
|
+
const title = "Text";
|
|
4
|
+
const description = "Markdown/plain note. Links http(s) only. No innerHTML.";
|
|
5
|
+
const chartTypeKeys = [];
|
|
6
|
+
const source = "ui9000-widgets Stage 2 close-out";
|
|
7
|
+
const stack = "lit";
|
|
8
|
+
const lazyImport = "@ui9000/widgets/lazy/text";
|
|
9
|
+
const entry = "@ui9000/widgets/text";
|
|
10
|
+
const usageConditions = { "host": "mcp-chat", "notFor": "fusedash-editor", "mapsExcluded": true };
|
|
11
|
+
const allowedActions = ["resize"];
|
|
12
|
+
const tier = "engine";
|
|
13
|
+
const intents = ["evidence"];
|
|
14
|
+
const dataRoles = [{ "id": "body", "required": true, "description": "Markdown or plain text note." }];
|
|
15
|
+
const eligibility = [{ "when": "profile.hasClaim || profile.hasTabularRows", "reason": "Text carries a narrative claim or note alongside evidence." }];
|
|
16
|
+
const disqualify = [{ "when": "!profile.hasClaim && !profile.hasTabularRows && !profile.hasEvents", "reason": "With no claim or supporting context, prefer KPI or table." }];
|
|
17
|
+
const accessibility = { "nameFrom": "heading in markdown or aria-label", "keyboard": ["Tab into text, follow http(s) links"], "shadowBoundary": "Do not use aria-labelledby across the host; set aria-label on the host element." };
|
|
18
|
+
const evalCases = [{ "id": "text-picks-claim", "intent": "evidence", "profile": { "hasClaim": true }, "expect": "eligible", "reasonIncludes": "narrative" }, { "id": "text-rejects-empty", "intent": "summary", "profile": { "hasClaim": false, "hasTabularRows": false, "hasEvents": false }, "expect": "disqualified", "reasonIncludes": "KPI" }];
|
|
19
|
+
const propsSchema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "data": { "oneOf": [{ "type": "string" }, { "type": "object", "properties": { "text": { "type": "string" } } }] } }, "required": ["data"] };
|
|
20
|
+
const metadata = {
|
|
21
|
+
id,
|
|
22
|
+
tag,
|
|
23
|
+
title,
|
|
24
|
+
description,
|
|
25
|
+
chartTypeKeys,
|
|
26
|
+
source,
|
|
27
|
+
stack,
|
|
28
|
+
lazyImport,
|
|
29
|
+
entry,
|
|
30
|
+
usageConditions,
|
|
31
|
+
allowedActions,
|
|
32
|
+
tier,
|
|
33
|
+
intents,
|
|
34
|
+
dataRoles,
|
|
35
|
+
eligibility,
|
|
36
|
+
disqualify,
|
|
37
|
+
accessibility,
|
|
38
|
+
evalCases,
|
|
39
|
+
propsSchema
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
accessibility,
|
|
43
|
+
allowedActions,
|
|
44
|
+
chartTypeKeys,
|
|
45
|
+
dataRoles,
|
|
46
|
+
metadata as default,
|
|
47
|
+
description,
|
|
48
|
+
disqualify,
|
|
49
|
+
eligibility,
|
|
50
|
+
entry,
|
|
51
|
+
evalCases,
|
|
52
|
+
id,
|
|
53
|
+
intents,
|
|
54
|
+
lazyImport,
|
|
55
|
+
propsSchema,
|
|
56
|
+
source,
|
|
57
|
+
stack,
|
|
58
|
+
tag,
|
|
59
|
+
tier,
|
|
60
|
+
title,
|
|
61
|
+
usageConditions
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=metadata.json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class Ui9000TextInput extends LitElement {
|
|
3
|
+
static styles: import('lit').CSSResult;
|
|
4
|
+
dataJson: string;
|
|
5
|
+
label: string;
|
|
6
|
+
name: string;
|
|
7
|
+
value?: string;
|
|
8
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
9
|
+
}
|
|
10
|
+
export declare function registerTextInput(): void;
|
|
11
|
+
declare global {
|
|
12
|
+
interface HTMLElementTagNameMap {
|
|
13
|
+
'ui9000-text-input': Ui9000TextInput;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ui9000-text-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui9000-text-input.d.ts","sourceRoot":"","sources":["../../../../src/components/text-input/element/ui9000-text-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAMvC,qBACa,eAAgB,SAAQ,UAAU;IAC7C,OAAgB,MAAM,0BAAiB;IAEQ,QAAQ,SAAQ;IACnC,KAAK,SAAM;IACX,IAAI,SAAM;IACQ,KAAK,CAAC,EAAE,MAAM,CAAC;IAEpD,MAAM;CAsBhB;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
|