@lynx-js/genui 0.0.1-rc.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 +202 -0
- package/README.md +170 -0
- package/a2ui/README.md +140 -0
- package/a2ui/dist/catalog/Button/catalog.json +156 -0
- package/a2ui/dist/catalog/Button/index.d.ts +35 -0
- package/a2ui/dist/catalog/Button/index.js +35 -0
- package/a2ui/dist/catalog/Button/index.js.map +1 -0
- package/a2ui/dist/catalog/Card/catalog.json +24 -0
- package/a2ui/dist/catalog/Card/index.d.ts +11 -0
- package/a2ui/dist/catalog/Card/index.js +19 -0
- package/a2ui/dist/catalog/Card/index.js.map +1 -0
- package/a2ui/dist/catalog/CheckBox/catalog.json +170 -0
- package/a2ui/dist/catalog/CheckBox/index.d.ts +32 -0
- package/a2ui/dist/catalog/CheckBox/index.js +24 -0
- package/a2ui/dist/catalog/CheckBox/index.js.map +1 -0
- package/a2ui/dist/catalog/Column/catalog.json +57 -0
- package/a2ui/dist/catalog/Column/index.d.ts +15 -0
- package/a2ui/dist/catalog/Column/index.js +55 -0
- package/a2ui/dist/catalog/Column/index.js.map +1 -0
- package/a2ui/dist/catalog/Divider/catalog.json +14 -0
- package/a2ui/dist/catalog/Divider/index.d.ts +9 -0
- package/a2ui/dist/catalog/Divider/index.js +8 -0
- package/a2ui/dist/catalog/Divider/index.js.map +1 -0
- package/a2ui/dist/catalog/Icon/catalog.json +45 -0
- package/a2ui/dist/catalog/Icon/index.d.ts +14 -0
- package/a2ui/dist/catalog/Icon/index.js +11 -0
- package/a2ui/dist/catalog/Icon/index.js.map +1 -0
- package/a2ui/dist/catalog/Image/catalog.json +62 -0
- package/a2ui/dist/catalog/Image/index.d.ts +16 -0
- package/a2ui/dist/catalog/Image/index.js +30 -0
- package/a2ui/dist/catalog/Image/index.js.map +1 -0
- package/a2ui/dist/catalog/LineChart/catalog.json +98 -0
- package/a2ui/dist/catalog/LineChart/index.d.ts +31 -0
- package/a2ui/dist/catalog/LineChart/index.js +195 -0
- package/a2ui/dist/catalog/LineChart/index.js.map +1 -0
- package/a2ui/dist/catalog/List/catalog.json +52 -0
- package/a2ui/dist/catalog/List/index.d.ts +15 -0
- package/a2ui/dist/catalog/List/index.js +53 -0
- package/a2ui/dist/catalog/List/index.js.map +1 -0
- package/a2ui/dist/catalog/Modal/catalog.json +18 -0
- package/a2ui/dist/catalog/Modal/index.d.ts +12 -0
- package/a2ui/dist/catalog/Modal/index.js +33 -0
- package/a2ui/dist/catalog/Modal/index.js.map +1 -0
- package/a2ui/dist/catalog/PieChart/catalog.json +87 -0
- package/a2ui/dist/catalog/PieChart/index.d.ts +37 -0
- package/a2ui/dist/catalog/PieChart/index.js +131 -0
- package/a2ui/dist/catalog/PieChart/index.js.map +1 -0
- package/a2ui/dist/catalog/RadioGroup/catalog.json +184 -0
- package/a2ui/dist/catalog/RadioGroup/index.d.ts +36 -0
- package/a2ui/dist/catalog/RadioGroup/index.js +36 -0
- package/a2ui/dist/catalog/RadioGroup/index.js.map +1 -0
- package/a2ui/dist/catalog/Row/catalog.json +57 -0
- package/a2ui/dist/catalog/Row/index.d.ts +15 -0
- package/a2ui/dist/catalog/Row/index.js +28 -0
- package/a2ui/dist/catalog/Row/index.js.map +1 -0
- package/a2ui/dist/catalog/Slider/catalog.json +183 -0
- package/a2ui/dist/catalog/Slider/index.d.ts +41 -0
- package/a2ui/dist/catalog/Slider/index.js +39 -0
- package/a2ui/dist/catalog/Slider/index.js.map +1 -0
- package/a2ui/dist/catalog/Slider/utils.d.ts +11 -0
- package/a2ui/dist/catalog/Slider/utils.js +58 -0
- package/a2ui/dist/catalog/Slider/utils.js.map +1 -0
- package/a2ui/dist/catalog/Tabs/catalog.json +28 -0
- package/a2ui/dist/catalog/Tabs/index.d.ts +12 -0
- package/a2ui/dist/catalog/Tabs/index.js +32 -0
- package/a2ui/dist/catalog/Tabs/index.js.map +1 -0
- package/a2ui/dist/catalog/Text/catalog.json +74 -0
- package/a2ui/dist/catalog/Text/index.d.ts +18 -0
- package/a2ui/dist/catalog/Text/index.js +27 -0
- package/a2ui/dist/catalog/Text/index.js.map +1 -0
- package/a2ui/dist/catalog/TextField/catalog.json +147 -0
- package/a2ui/dist/catalog/TextField/index.d.ts +35 -0
- package/a2ui/dist/catalog/TextField/index.js +43 -0
- package/a2ui/dist/catalog/TextField/index.js.map +1 -0
- package/a2ui/dist/catalog/TextField/utils.d.ts +7 -0
- package/a2ui/dist/catalog/TextField/utils.js +51 -0
- package/a2ui/dist/catalog/TextField/utils.js.map +1 -0
- package/a2ui/dist/catalog/defineCatalog.d.ts +119 -0
- package/a2ui/dist/catalog/defineCatalog.js +196 -0
- package/a2ui/dist/catalog/defineCatalog.js.map +1 -0
- package/a2ui/dist/catalog/index.d.ts +20 -0
- package/a2ui/dist/catalog/index.js +26 -0
- package/a2ui/dist/catalog/index.js.map +1 -0
- package/a2ui/dist/catalog/utils/chart.d.ts +3 -0
- package/a2ui/dist/catalog/utils/chart.js +28 -0
- package/a2ui/dist/catalog/utils/chart.js.map +1 -0
- package/a2ui/dist/functions/index.d.ts +19 -0
- package/a2ui/dist/functions/index.js +87 -0
- package/a2ui/dist/functions/index.js.map +1 -0
- package/a2ui/dist/index.d.ts +11 -0
- package/a2ui/dist/index.js +35 -0
- package/a2ui/dist/index.js.map +1 -0
- package/a2ui/dist/react/A2UI.d.ts +77 -0
- package/a2ui/dist/react/A2UI.js +159 -0
- package/a2ui/dist/react/A2UI.js.map +1 -0
- package/a2ui/dist/react/A2UIProvider.d.ts +25 -0
- package/a2ui/dist/react/A2UIProvider.js +20 -0
- package/a2ui/dist/react/A2UIProvider.js.map +1 -0
- package/a2ui/dist/react/A2UIRenderer.d.ts +34 -0
- package/a2ui/dist/react/A2UIRenderer.js +161 -0
- package/a2ui/dist/react/A2UIRenderer.js.map +1 -0
- package/a2ui/dist/react/FormContext.d.ts +10 -0
- package/a2ui/dist/react/FormContext.js +12 -0
- package/a2ui/dist/react/FormContext.js.map +1 -0
- package/a2ui/dist/react/index.d.ts +8 -0
- package/a2ui/dist/react/index.js +23 -0
- package/a2ui/dist/react/index.js.map +1 -0
- package/a2ui/dist/react/useA2UIContext.d.ts +7 -0
- package/a2ui/dist/react/useA2UIContext.js +19 -0
- package/a2ui/dist/react/useA2UIContext.js.map +1 -0
- package/a2ui/dist/react/useAction.d.ts +9 -0
- package/a2ui/dist/react/useAction.js +38 -0
- package/a2ui/dist/react/useAction.js.map +1 -0
- package/a2ui/dist/react/useCatalog.d.ts +7 -0
- package/a2ui/dist/react/useCatalog.js +13 -0
- package/a2ui/dist/react/useCatalog.js.map +1 -0
- package/a2ui/dist/react/useChecks.d.ts +27 -0
- package/a2ui/dist/react/useChecks.js +76 -0
- package/a2ui/dist/react/useChecks.js.map +1 -0
- package/a2ui/dist/react/useDataBinding.d.ts +10 -0
- package/a2ui/dist/react/useDataBinding.js +175 -0
- package/a2ui/dist/react/useDataBinding.js.map +1 -0
- package/a2ui/dist/store/FormController.d.ts +23 -0
- package/a2ui/dist/store/FormController.js +40 -0
- package/a2ui/dist/store/FormController.js.map +1 -0
- package/a2ui/dist/store/FunctionRegistry.d.ts +47 -0
- package/a2ui/dist/store/FunctionRegistry.js +23 -0
- package/a2ui/dist/store/FunctionRegistry.js.map +1 -0
- package/a2ui/dist/store/MessageProcessor.d.ts +28 -0
- package/a2ui/dist/store/MessageProcessor.js +408 -0
- package/a2ui/dist/store/MessageProcessor.js.map +1 -0
- package/a2ui/dist/store/MessageStore.d.ts +38 -0
- package/a2ui/dist/store/MessageStore.js +37 -0
- package/a2ui/dist/store/MessageStore.js.map +1 -0
- package/a2ui/dist/store/Resource.d.ts +45 -0
- package/a2ui/dist/store/Resource.js +80 -0
- package/a2ui/dist/store/Resource.js.map +1 -0
- package/a2ui/dist/store/SignalStore.d.ts +10 -0
- package/a2ui/dist/store/SignalStore.js +29 -0
- package/a2ui/dist/store/SignalStore.js.map +1 -0
- package/a2ui/dist/store/index.d.ts +14 -0
- package/a2ui/dist/store/index.js +15 -0
- package/a2ui/dist/store/index.js.map +1 -0
- package/a2ui/dist/store/payloadNormalizer.d.ts +27 -0
- package/a2ui/dist/store/payloadNormalizer.js +179 -0
- package/a2ui/dist/store/payloadNormalizer.js.map +1 -0
- package/a2ui/dist/store/resolveFunctionCall.d.ts +18 -0
- package/a2ui/dist/store/resolveFunctionCall.js +131 -0
- package/a2ui/dist/store/resolveFunctionCall.js.map +1 -0
- package/a2ui/dist/store/types.d.ts +68 -0
- package/a2ui/dist/store/types.js +2 -0
- package/a2ui/dist/store/types.js.map +1 -0
- package/a2ui/dist/tsconfig.build.tsbuildinfo +1 -0
- package/a2ui/styles/catalog/Button.css +83 -0
- package/a2ui/styles/catalog/Card.css +49 -0
- package/a2ui/styles/catalog/CheckBox.css +46 -0
- package/a2ui/styles/catalog/Column.css +89 -0
- package/a2ui/styles/catalog/Divider.css +20 -0
- package/a2ui/styles/catalog/Icon.css +39 -0
- package/a2ui/styles/catalog/Image.css +54 -0
- package/a2ui/styles/catalog/LineChart.css +116 -0
- package/a2ui/styles/catalog/List.css +38 -0
- package/a2ui/styles/catalog/Modal.css +60 -0
- package/a2ui/styles/catalog/PieChart.css +109 -0
- package/a2ui/styles/catalog/RadioGroup.css +123 -0
- package/a2ui/styles/catalog/Row.css +83 -0
- package/a2ui/styles/catalog/Slider.css +96 -0
- package/a2ui/styles/catalog/Tabs.css +46 -0
- package/a2ui/styles/catalog/Text.css +121 -0
- package/a2ui/styles/catalog/TextField.css +48 -0
- package/a2ui/styles/theme.css +62 -0
- package/a2ui-catalog-extractor/README.md +605 -0
- package/a2ui-catalog-extractor/bin/a2ui-catalog-extractor.js +6 -0
- package/a2ui-catalog-extractor/dist/cli.d.ts +12 -0
- package/a2ui-catalog-extractor/dist/cli.js +171 -0
- package/a2ui-catalog-extractor/dist/cli.js.map +1 -0
- package/a2ui-catalog-extractor/dist/index.d.ts +140 -0
- package/a2ui-catalog-extractor/dist/index.js +755 -0
- package/a2ui-catalog-extractor/dist/index.js.map +1 -0
- package/a2ui-catalog-extractor/dist/tsconfig.build.tsbuildinfo +1 -0
- package/a2ui-catalog-extractor/skills/a2ui-catalog-extractor/SKILL.md +30 -0
- package/a2ui-prompt/README.md +65 -0
- package/a2ui-prompt/dist/index.d.ts +91 -0
- package/a2ui-prompt/dist/index.js +767 -0
- package/cli/README.md +88 -0
- package/cli/bin/cli.js +271 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/index.ts +114 -0
- package/openui/README.md +211 -0
- package/openui/dist/catalog/Action/index.d.ts +20 -0
- package/openui/dist/catalog/Action/index.js +23 -0
- package/openui/dist/catalog/Action/index.js.map +1 -0
- package/openui/dist/catalog/Button/index.d.ts +64 -0
- package/openui/dist/catalog/Button/index.js +75 -0
- package/openui/dist/catalog/Button/index.js.map +1 -0
- package/openui/dist/catalog/Card/index.d.ts +34 -0
- package/openui/dist/catalog/Card/index.js +69 -0
- package/openui/dist/catalog/Card/index.js.map +1 -0
- package/openui/dist/catalog/CardHeader/index.d.ts +5 -0
- package/openui/dist/catalog/CardHeader/index.js +18 -0
- package/openui/dist/catalog/CardHeader/index.js.map +1 -0
- package/openui/dist/catalog/Separator/index.d.ts +2 -0
- package/openui/dist/catalog/Separator/index.js +13 -0
- package/openui/dist/catalog/Separator/index.js.map +1 -0
- package/openui/dist/catalog/Stack/index.d.ts +29 -0
- package/openui/dist/catalog/Stack/index.js +61 -0
- package/openui/dist/catalog/Stack/index.js.map +1 -0
- package/openui/dist/catalog/Tag/index.d.ts +4 -0
- package/openui/dist/catalog/Tag/index.js +15 -0
- package/openui/dist/catalog/Tag/index.js.map +1 -0
- package/openui/dist/catalog/TextContent/index.d.ts +11 -0
- package/openui/dist/catalog/TextContent/index.js +33 -0
- package/openui/dist/catalog/TextContent/index.js.map +1 -0
- package/openui/dist/catalog/index.d.ts +7 -0
- package/openui/dist/catalog/index.js +11 -0
- package/openui/dist/catalog/index.js.map +1 -0
- package/openui/dist/catalog/utils.d.ts +2 -0
- package/openui/dist/catalog/utils.js +17 -0
- package/openui/dist/catalog/utils.js.map +1 -0
- package/openui/dist/core/context.d.ts +112 -0
- package/openui/dist/core/context.js +99 -0
- package/openui/dist/core/context.js.map +1 -0
- package/openui/dist/core/createLibrary.d.ts +10 -0
- package/openui/dist/core/createLibrary.js +36 -0
- package/openui/dist/core/createLibrary.js.map +1 -0
- package/openui/dist/core/hooks/index.d.ts +4 -0
- package/openui/dist/core/hooks/index.js +6 -0
- package/openui/dist/core/hooks/index.js.map +1 -0
- package/openui/dist/core/hooks/useFormValidation.d.ts +13 -0
- package/openui/dist/core/hooks/useFormValidation.js +76 -0
- package/openui/dist/core/hooks/useFormValidation.js.map +1 -0
- package/openui/dist/core/hooks/useOpenUIState.d.ts +33 -0
- package/openui/dist/core/hooks/useOpenUIState.js +413 -0
- package/openui/dist/core/hooks/useOpenUIState.js.map +1 -0
- package/openui/dist/core/hooks/useStateField.d.ts +2 -0
- package/openui/dist/core/hooks/useStateField.js +11 -0
- package/openui/dist/core/hooks/useStateField.js.map +1 -0
- package/openui/dist/core/index.d.ts +7 -0
- package/openui/dist/core/index.js +8 -0
- package/openui/dist/core/index.js.map +1 -0
- package/openui/dist/core/library.d.ts +20 -0
- package/openui/dist/core/library.js +13 -0
- package/openui/dist/core/library.js.map +1 -0
- package/openui/dist/core/renderer.css +271 -0
- package/openui/dist/core/renderer.d.ts +9 -0
- package/openui/dist/core/renderer.js +139 -0
- package/openui/dist/core/renderer.js.map +1 -0
- package/openui/dist/core/utils.d.ts +1 -0
- package/openui/dist/core/utils.js +76 -0
- package/openui/dist/core/utils.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Image": {
|
|
3
|
+
"properties": {
|
|
4
|
+
"url": {
|
|
5
|
+
"oneOf": [
|
|
6
|
+
{
|
|
7
|
+
"type": "string"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"path": {
|
|
13
|
+
"type": "string"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"required": [
|
|
17
|
+
"path"
|
|
18
|
+
],
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"description": "Image URL or path binding."
|
|
23
|
+
},
|
|
24
|
+
"fit": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"enum": [
|
|
27
|
+
"contain",
|
|
28
|
+
"cover",
|
|
29
|
+
"fill",
|
|
30
|
+
"none",
|
|
31
|
+
"scale-down"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"mode": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": [
|
|
37
|
+
"center",
|
|
38
|
+
"scaleToFill",
|
|
39
|
+
"aspectFit",
|
|
40
|
+
"aspectFill"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"variant": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"enum": [
|
|
46
|
+
"icon",
|
|
47
|
+
"avatar",
|
|
48
|
+
"smallFeature",
|
|
49
|
+
"mediumFeature",
|
|
50
|
+
"largeFeature",
|
|
51
|
+
"header"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"weight": {
|
|
55
|
+
"type": "number"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"required": [
|
|
59
|
+
"url"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GenericComponentProps } from '../../store/types.js';
|
|
2
|
+
import '../../../styles/catalog/Image.css';
|
|
3
|
+
/**
|
|
4
|
+
* @a2uiCatalog Image
|
|
5
|
+
*/
|
|
6
|
+
export interface ImageProps extends GenericComponentProps {
|
|
7
|
+
/** Image URL or path binding. */
|
|
8
|
+
url: string | {
|
|
9
|
+
path: string;
|
|
10
|
+
};
|
|
11
|
+
fit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
|
|
12
|
+
mode?: 'scaleToFill' | 'aspectFit' | 'aspectFill' | 'center';
|
|
13
|
+
variant?: 'icon' | 'avatar' | 'smallFeature' | 'mediumFeature' | 'largeFeature' | 'header';
|
|
14
|
+
weight?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function Image(props: ImageProps): import('@lynx-js/react').ReactNode;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@lynx-js/react/jsx-runtime";
|
|
2
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
import { useEffect, useState } from '@lynx-js/react';
|
|
6
|
+
import '../../../styles/catalog/Image.css';
|
|
7
|
+
const fallbackImage = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/zalzzh-ukj-lapzild-shpjpmmv-eufs/ljhwZthlaukjlkulzlp/built-in-images/logo.png';
|
|
8
|
+
export function Image(props) {
|
|
9
|
+
const src = props.url;
|
|
10
|
+
const fit = props.fit ?? 'fit';
|
|
11
|
+
const mode = props.mode ?? (() => {
|
|
12
|
+
switch (fit) {
|
|
13
|
+
case 'contain':
|
|
14
|
+
case 'scale-down':
|
|
15
|
+
return 'aspectFit';
|
|
16
|
+
case 'fill':
|
|
17
|
+
return 'scaleToFill';
|
|
18
|
+
case 'none':
|
|
19
|
+
return 'center';
|
|
20
|
+
default:
|
|
21
|
+
return 'aspectFill';
|
|
22
|
+
}
|
|
23
|
+
})();
|
|
24
|
+
const [hasError, setHasError] = useState(false);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
setHasError(false);
|
|
27
|
+
}, [src]);
|
|
28
|
+
return (_jsx("image", { className: `a2ui-image image-variant-${props.variant ?? 'mediumFeature'} ${typeof props.weight === 'number' ? 'image-weighted' : ''}`, "auto-size": true, src: hasError ? fallbackImage : src, mode: mode, binderror: () => setHasError(true) }, props.id));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/Image/index.tsx"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAIrD,OAAO,mCAAmC,CAAC;AAoB3C,MAAM,aAAa,GACjB,6HAA6H,CAAC;AAEhI,MAAM,UAAU,KAAK,CACnB,KAAiB;IAEjB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;QAC/B,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,YAAY;gBACf,OAAO,WAAW,CAAC;YACrB,KAAK,MAAM;gBACT,OAAO,aAAa,CAAC;YACvB,KAAK,MAAM;gBACT,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,YAAY,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,CACL,gBAEE,SAAS,EAAE,4BACT,KAAK,CAAC,OAAO,IAAI,eACnB,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,eACnD,IAAI,EACf,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAa,EAC7C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAP7B,KAAK,CAAC,EAAE,CAQb,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"LineChart": {
|
|
3
|
+
"properties": {
|
|
4
|
+
"labels": {
|
|
5
|
+
"oneOf": [
|
|
6
|
+
{
|
|
7
|
+
"type": "array",
|
|
8
|
+
"items": {
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"path": {
|
|
16
|
+
"type": "string"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"required": [
|
|
20
|
+
"path"
|
|
21
|
+
],
|
|
22
|
+
"additionalProperties": false
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"description": "Category labels shown along the x axis."
|
|
26
|
+
},
|
|
27
|
+
"series": {
|
|
28
|
+
"oneOf": [
|
|
29
|
+
{
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"properties": {
|
|
34
|
+
"name": {
|
|
35
|
+
"type": "string"
|
|
36
|
+
},
|
|
37
|
+
"values": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": {
|
|
40
|
+
"type": "number"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"color": {
|
|
44
|
+
"type": "string"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"required": [
|
|
48
|
+
"name",
|
|
49
|
+
"values"
|
|
50
|
+
],
|
|
51
|
+
"additionalProperties": false
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "object",
|
|
56
|
+
"properties": {
|
|
57
|
+
"path": {
|
|
58
|
+
"type": "string"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"required": [
|
|
62
|
+
"path"
|
|
63
|
+
],
|
|
64
|
+
"additionalProperties": false
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"description": "One or more line series to render over the shared labels."
|
|
68
|
+
},
|
|
69
|
+
"variant": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"enum": [
|
|
72
|
+
"linear",
|
|
73
|
+
"natural",
|
|
74
|
+
"step"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"xLabel": {
|
|
78
|
+
"type": "string"
|
|
79
|
+
},
|
|
80
|
+
"yLabel": {
|
|
81
|
+
"type": "string"
|
|
82
|
+
},
|
|
83
|
+
"showGrid": {
|
|
84
|
+
"type": "boolean"
|
|
85
|
+
},
|
|
86
|
+
"showLegend": {
|
|
87
|
+
"type": "boolean"
|
|
88
|
+
},
|
|
89
|
+
"height": {
|
|
90
|
+
"type": "number"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"required": [
|
|
94
|
+
"labels",
|
|
95
|
+
"series"
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { GenericComponentProps } from '../../store/types.js';
|
|
2
|
+
import '../../../styles/catalog/LineChart.css';
|
|
3
|
+
export interface LineChartSeries {
|
|
4
|
+
name: string;
|
|
5
|
+
values: number[];
|
|
6
|
+
color?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @a2uiCatalog LineChart
|
|
10
|
+
*/
|
|
11
|
+
export interface LineChartProps extends GenericComponentProps {
|
|
12
|
+
/** Category labels shown along the x axis. */
|
|
13
|
+
labels: string[] | {
|
|
14
|
+
path: string;
|
|
15
|
+
};
|
|
16
|
+
/** One or more line series to render over the shared labels. */
|
|
17
|
+
series: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
values: number[];
|
|
20
|
+
color?: string;
|
|
21
|
+
}> | {
|
|
22
|
+
path: string;
|
|
23
|
+
};
|
|
24
|
+
variant?: 'linear' | 'natural' | 'step';
|
|
25
|
+
xLabel?: string;
|
|
26
|
+
yLabel?: string;
|
|
27
|
+
showGrid?: boolean;
|
|
28
|
+
showLegend?: boolean;
|
|
29
|
+
height?: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function LineChart(props: LineChartProps): import('@lynx-js/react').ReactNode;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@lynx-js/react/jsx-runtime";
|
|
2
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
import { useResolvedProps } from '../../react/useDataBinding.js';
|
|
6
|
+
import { DEFAULT_CHART_COLORS, escapeXml, formatValue, } from '../utils/chart.js';
|
|
7
|
+
import '../../../styles/catalog/LineChart.css';
|
|
8
|
+
const SVG_WIDTH = 360;
|
|
9
|
+
const DEFAULT_HEIGHT = 240;
|
|
10
|
+
const MARGIN = { top: 16, right: 16, bottom: 24, left: 16 };
|
|
11
|
+
function normalizeSeries(series, palette) {
|
|
12
|
+
return series.map((item, index) => ({
|
|
13
|
+
name: item.name,
|
|
14
|
+
values: item.values,
|
|
15
|
+
color: item.color ?? palette[index % palette.length] ?? '#0057d9',
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
function buildLinearPath(points) {
|
|
19
|
+
if (points.length === 0)
|
|
20
|
+
return '';
|
|
21
|
+
const first = points[0];
|
|
22
|
+
const rest = points.slice(1);
|
|
23
|
+
let path = `M ${first.x.toFixed(1)} ${first.y.toFixed(1)}`;
|
|
24
|
+
for (const point of rest) {
|
|
25
|
+
path += ` L ${point.x.toFixed(1)} ${point.y.toFixed(1)}`;
|
|
26
|
+
}
|
|
27
|
+
return path;
|
|
28
|
+
}
|
|
29
|
+
function buildStepPath(points) {
|
|
30
|
+
if (points.length === 0)
|
|
31
|
+
return '';
|
|
32
|
+
const first = points[0];
|
|
33
|
+
const rest = points.slice(1);
|
|
34
|
+
let path = `M ${first.x.toFixed(1)} ${first.y.toFixed(1)}`;
|
|
35
|
+
let prev = first;
|
|
36
|
+
for (const point of rest) {
|
|
37
|
+
path += ` L ${point.x.toFixed(1)} ${prev.y.toFixed(1)}`;
|
|
38
|
+
path += ` L ${point.x.toFixed(1)} ${point.y.toFixed(1)}`;
|
|
39
|
+
prev = point;
|
|
40
|
+
}
|
|
41
|
+
return path;
|
|
42
|
+
}
|
|
43
|
+
function buildNaturalPath(points) {
|
|
44
|
+
if (points.length === 0)
|
|
45
|
+
return '';
|
|
46
|
+
if (points.length === 1) {
|
|
47
|
+
const point = points[0];
|
|
48
|
+
return `M ${point.x.toFixed(1)} ${point.y.toFixed(1)}`;
|
|
49
|
+
}
|
|
50
|
+
let path = `M ${points[0].x.toFixed(1)} ${points[0].y.toFixed(1)}`;
|
|
51
|
+
for (let index = 0; index < points.length - 1; index += 1) {
|
|
52
|
+
const p0 = points[index - 1] ?? points[index];
|
|
53
|
+
const p1 = points[index];
|
|
54
|
+
const p2 = points[index + 1];
|
|
55
|
+
const p3 = points[index + 2] ?? p2;
|
|
56
|
+
const cp1x = p1.x + (p2.x - p0.x) / 6;
|
|
57
|
+
const cp1y = p1.y + (p2.y - p0.y) / 6;
|
|
58
|
+
const cp2x = p2.x - (p3.x - p1.x) / 6;
|
|
59
|
+
const cp2y = p2.y - (p3.y - p1.y) / 6;
|
|
60
|
+
path += ` C ${cp1x.toFixed(1)} ${cp1y.toFixed(1)}, ${cp2x.toFixed(1)} ${cp2y.toFixed(1)}, ${p2.x.toFixed(1)} ${p2.y.toFixed(1)}`;
|
|
61
|
+
}
|
|
62
|
+
return path;
|
|
63
|
+
}
|
|
64
|
+
function buildPath(points, variant) {
|
|
65
|
+
switch (variant) {
|
|
66
|
+
case 'step':
|
|
67
|
+
return buildStepPath(points);
|
|
68
|
+
case 'natural':
|
|
69
|
+
return buildNaturalPath(points);
|
|
70
|
+
default:
|
|
71
|
+
return buildLinearPath(points);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function sampleIndices(count, maxLabels) {
|
|
75
|
+
if (count <= 0)
|
|
76
|
+
return [];
|
|
77
|
+
if (count <= maxLabels) {
|
|
78
|
+
return Array.from({ length: count }, (_, index) => index);
|
|
79
|
+
}
|
|
80
|
+
const step = Math.ceil(count / maxLabels);
|
|
81
|
+
const indices = [];
|
|
82
|
+
for (let index = 0; index < count; index += step) {
|
|
83
|
+
indices.push(index);
|
|
84
|
+
}
|
|
85
|
+
const last = count - 1;
|
|
86
|
+
if (indices[indices.length - 1] !== last) {
|
|
87
|
+
indices.push(last);
|
|
88
|
+
}
|
|
89
|
+
return Array.from(new Set(indices));
|
|
90
|
+
}
|
|
91
|
+
function minMax(values) {
|
|
92
|
+
if (values.length === 0) {
|
|
93
|
+
return { min: 0, max: 1 };
|
|
94
|
+
}
|
|
95
|
+
let min = values[0];
|
|
96
|
+
let max = values[0];
|
|
97
|
+
for (const value of values) {
|
|
98
|
+
if (value < min)
|
|
99
|
+
min = value;
|
|
100
|
+
if (value > max)
|
|
101
|
+
max = value;
|
|
102
|
+
}
|
|
103
|
+
if (min === max) {
|
|
104
|
+
min -= 1;
|
|
105
|
+
max += 1;
|
|
106
|
+
}
|
|
107
|
+
return { min, max };
|
|
108
|
+
}
|
|
109
|
+
function buildSvgMarkup(labels, series, variant, showGrid) {
|
|
110
|
+
const width = SVG_WIDTH;
|
|
111
|
+
const height = DEFAULT_HEIGHT;
|
|
112
|
+
const chartWidth = width - MARGIN.left - MARGIN.right;
|
|
113
|
+
const chartHeight = height - MARGIN.top - MARGIN.bottom;
|
|
114
|
+
const maxPoints = labels.length;
|
|
115
|
+
const values = series.flatMap((item) => item.values.slice(0, maxPoints));
|
|
116
|
+
if (maxPoints === 0 || series.length === 0 || values.length === 0) {
|
|
117
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${width} ${height}"></svg>`;
|
|
118
|
+
}
|
|
119
|
+
const { min: minValue, max: maxValue } = minMax(values);
|
|
120
|
+
const yRange = maxValue - minValue;
|
|
121
|
+
const xStep = maxPoints > 1 ? chartWidth / (maxPoints - 1) : 0;
|
|
122
|
+
const gridLines = 4;
|
|
123
|
+
const lineMarkup = series
|
|
124
|
+
.map((item, seriesIndex) => {
|
|
125
|
+
const points = item.values.slice(0, maxPoints).map((value, index) => {
|
|
126
|
+
const x = MARGIN.left + xStep * index;
|
|
127
|
+
const y = MARGIN.top + chartHeight
|
|
128
|
+
- ((value - minValue) / yRange) * chartHeight;
|
|
129
|
+
return { x, y };
|
|
130
|
+
});
|
|
131
|
+
const color = escapeXml(item.color
|
|
132
|
+
?? DEFAULT_CHART_COLORS[seriesIndex % DEFAULT_CHART_COLORS.length]
|
|
133
|
+
?? '#0057d9');
|
|
134
|
+
const d = buildPath(points, variant);
|
|
135
|
+
const circles = points
|
|
136
|
+
.map((point) => `<circle cx="${point.x.toFixed(1)}" cy="${point.y.toFixed(1)}" r="3.5" fill="${color}" stroke="#ffffff" stroke-width="1.5" />`)
|
|
137
|
+
.join('');
|
|
138
|
+
return `
|
|
139
|
+
<path d="${d}" fill="none" stroke="${color}" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" />
|
|
140
|
+
${circles}
|
|
141
|
+
`;
|
|
142
|
+
})
|
|
143
|
+
.join('');
|
|
144
|
+
const gridMarkup = showGrid
|
|
145
|
+
? Array.from({ length: gridLines + 1 }, (_, index) => {
|
|
146
|
+
const ratio = index / gridLines;
|
|
147
|
+
const y = MARGIN.top + chartHeight - ratio * chartHeight;
|
|
148
|
+
const dashed = index === gridLines ? '' : ' stroke-dasharray="4 6"';
|
|
149
|
+
return `<line x1="${MARGIN.left}" y1="${y.toFixed(1)}" x2="${width - MARGIN.right}" y2="${y.toFixed(1)}" stroke="rgba(0,0,0,0.12)" stroke-width="1"${dashed} />`;
|
|
150
|
+
}).join('')
|
|
151
|
+
: '';
|
|
152
|
+
return `
|
|
153
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${width} ${height}">
|
|
154
|
+
<rect x="0" y="0" width="${width}" height="${height}" rx="16" fill="rgba(255,255,255,0.02)" />
|
|
155
|
+
${gridMarkup}
|
|
156
|
+
<line x1="${MARGIN.left}" y1="${height - MARGIN.bottom}" x2="${width - MARGIN.right}" y2="${height - MARGIN.bottom}" stroke="rgba(0,0,0,0.24)" stroke-width="1.5" />
|
|
157
|
+
${lineMarkup}
|
|
158
|
+
</svg>
|
|
159
|
+
`;
|
|
160
|
+
}
|
|
161
|
+
export function LineChart(props) {
|
|
162
|
+
const [resolvedProps] = useResolvedProps(props, props.surface, props.dataContextPath);
|
|
163
|
+
const id = props.id;
|
|
164
|
+
const labelsValue = resolvedProps['labels'];
|
|
165
|
+
const labels = Array.isArray(labelsValue)
|
|
166
|
+
? labelsValue
|
|
167
|
+
: [];
|
|
168
|
+
const seriesValue = resolvedProps['series'];
|
|
169
|
+
const series = Array.isArray(seriesValue)
|
|
170
|
+
? normalizeSeries(seriesValue, DEFAULT_CHART_COLORS)
|
|
171
|
+
: [];
|
|
172
|
+
const variant = resolvedProps['variant']
|
|
173
|
+
?? 'natural';
|
|
174
|
+
const showGrid = resolvedProps['showGrid'] !== false;
|
|
175
|
+
const showLegend = resolvedProps['showLegend'] !== false;
|
|
176
|
+
const heightValue = resolvedProps['height'];
|
|
177
|
+
const height = typeof heightValue === 'number'
|
|
178
|
+
? heightValue
|
|
179
|
+
: DEFAULT_HEIGHT;
|
|
180
|
+
const svgMarkup = buildSvgMarkup(labels, series, variant, showGrid);
|
|
181
|
+
const visibleLabelIndices = sampleIndices(labels.length, 8);
|
|
182
|
+
const { min, max } = minMax(series.flatMap((item) => item.values.slice(0, labels.length)));
|
|
183
|
+
return (_jsxs("view", { className: 'line-chart', children: [_jsxs("view", { className: 'line-chart-header', children: [_jsxs("view", { className: 'line-chart-header-copy', children: [_jsx("text", { className: 'line-chart-title', children: resolvedProps['yLabel'] ?? 'Line chart' }), _jsx("text", { className: 'line-chart-caption', children: series.length > 0
|
|
184
|
+
? `${series.length} series • ${labels.length} points`
|
|
185
|
+
: 'No data' })] }), resolvedProps['xLabel']
|
|
186
|
+
? (_jsx("text", { className: 'line-chart-axis-label', children: resolvedProps['xLabel'] }))
|
|
187
|
+
: null] }), _jsxs("view", { className: 'line-chart-scale-row', children: [_jsx("text", { className: 'line-chart-scale-value', children: formatValue(min) }), _jsx("text", { className: 'line-chart-scale-value line-chart-scale-value-right', children: formatValue(max) })] }), _jsx("svg", { className: 'line-chart-svg', content: svgMarkup, style: { width: '100%', height: `${height}px` } }), _jsx("view", { className: 'line-chart-axis-row', children: visibleLabelIndices.map((index) => (_jsx("view", { className: 'line-chart-axis-tick', children: _jsx("text", { className: 'line-chart-axis-tick-label', children: labels[index] ?? '' }) }, `${index}-${labels[index] ?? index}`))) }), showLegend
|
|
188
|
+
? (_jsx("view", { className: 'line-chart-legend', children: series.map((item, index) => (_jsxs("view", { className: 'line-chart-legend-item', children: [_jsx("view", { className: 'line-chart-legend-swatch', style: {
|
|
189
|
+
backgroundColor: item.color
|
|
190
|
+
?? DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length]
|
|
191
|
+
?? '#0057d9',
|
|
192
|
+
} }), _jsx("text", { className: 'line-chart-legend-label', children: item.name })] }, item.name))) }))
|
|
193
|
+
: null] }, id));
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/LineChart/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"List": {
|
|
3
|
+
"properties": {
|
|
4
|
+
"children": {
|
|
5
|
+
"oneOf": [
|
|
6
|
+
{
|
|
7
|
+
"type": "array",
|
|
8
|
+
"items": {
|
|
9
|
+
"type": "string"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"type": "object",
|
|
14
|
+
"properties": {
|
|
15
|
+
"componentId": {
|
|
16
|
+
"type": "string"
|
|
17
|
+
},
|
|
18
|
+
"path": {
|
|
19
|
+
"type": "string"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": [
|
|
23
|
+
"componentId",
|
|
24
|
+
"path"
|
|
25
|
+
],
|
|
26
|
+
"additionalProperties": false
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"description": "Static child IDs array or template object."
|
|
30
|
+
},
|
|
31
|
+
"direction": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"enum": [
|
|
34
|
+
"horizontal",
|
|
35
|
+
"vertical"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"align": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"enum": [
|
|
41
|
+
"start",
|
|
42
|
+
"center",
|
|
43
|
+
"end",
|
|
44
|
+
"stretch"
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"required": [
|
|
49
|
+
"children"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GenericComponentProps } from '../../store/types.js';
|
|
2
|
+
import '../../../styles/catalog/List.css';
|
|
3
|
+
/**
|
|
4
|
+
* @a2uiCatalog List
|
|
5
|
+
*/
|
|
6
|
+
export interface ListProps extends GenericComponentProps {
|
|
7
|
+
/** Static child IDs array or template object. */
|
|
8
|
+
children: string[] | {
|
|
9
|
+
componentId: string;
|
|
10
|
+
path: string;
|
|
11
|
+
};
|
|
12
|
+
direction?: 'horizontal' | 'vertical';
|
|
13
|
+
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
14
|
+
}
|
|
15
|
+
export declare function List(props: ListProps): import('@lynx-js/react').ReactNode;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "@lynx-js/react/jsx-runtime";
|
|
2
|
+
import { NodeRenderer } from '../../react/A2UIRenderer.js';
|
|
3
|
+
import { useDataBinding } from '../../react/useDataBinding.js';
|
|
4
|
+
import '../../../styles/catalog/List.css';
|
|
5
|
+
export function List(props) {
|
|
6
|
+
const { children, surface, dataContextPath, direction = 'vertical', align = 'stretch', } = props;
|
|
7
|
+
const isDynamic = children && !Array.isArray(children)
|
|
8
|
+
&& typeof children === 'object';
|
|
9
|
+
const template = isDynamic
|
|
10
|
+
? children
|
|
11
|
+
: undefined;
|
|
12
|
+
const [listData, , fullPath] = useDataBinding(template ? { path: template.path } : undefined, surface, dataContextPath, []);
|
|
13
|
+
let content = [];
|
|
14
|
+
if (Array.isArray(children)) {
|
|
15
|
+
content = children.map((childId) => {
|
|
16
|
+
const child = surface.components.get(childId);
|
|
17
|
+
if (!child)
|
|
18
|
+
return null;
|
|
19
|
+
// Propagate dataContextPath
|
|
20
|
+
const childWithContext = dataContextPath
|
|
21
|
+
? { ...child, dataContextPath: dataContextPath }
|
|
22
|
+
: child;
|
|
23
|
+
return {
|
|
24
|
+
key: childId,
|
|
25
|
+
component: childWithContext,
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
else if (template) {
|
|
30
|
+
const items = Array.isArray(listData) ? listData : [];
|
|
31
|
+
content = items.map((item, index) => {
|
|
32
|
+
const componentId = template.componentId;
|
|
33
|
+
const child = surface.components.get(componentId);
|
|
34
|
+
if (!child)
|
|
35
|
+
return null;
|
|
36
|
+
const key = item && typeof item === 'object' && 'key' in item
|
|
37
|
+
? String(item['key'])
|
|
38
|
+
: `${index}`;
|
|
39
|
+
const itemPath = `${fullPath}/${index}`;
|
|
40
|
+
const childWithContext = { ...child, dataContextPath: itemPath };
|
|
41
|
+
return {
|
|
42
|
+
key: key,
|
|
43
|
+
component: childWithContext,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return (_jsx("list", { className: `list list-${String(direction)} list-align-${String(align)}`, "scroll-orientation": direction === 'vertical' ? 'vertical' : 'horizontal', "list-type": 'single', "span-count": 1, children: content.map((item) => {
|
|
48
|
+
if (!item)
|
|
49
|
+
return null;
|
|
50
|
+
return (_jsx("list-item", { "item-key": item.key, children: _jsx(NodeRenderer, { component: item.component, surface: surface }) }, item.key));
|
|
51
|
+
}) }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/catalog/List/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Modal": {
|
|
3
|
+
"properties": {
|
|
4
|
+
"trigger": {
|
|
5
|
+
"type": "string",
|
|
6
|
+
"description": "The ID of the component that opens the modal when interacted with."
|
|
7
|
+
},
|
|
8
|
+
"content": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The ID of the component to display inside the modal."
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"required": [
|
|
14
|
+
"trigger",
|
|
15
|
+
"content"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GenericComponentProps } from '../../store/types.js';
|
|
2
|
+
import '../../../styles/catalog/Modal.css';
|
|
3
|
+
/**
|
|
4
|
+
* @a2uiCatalog Modal
|
|
5
|
+
*/
|
|
6
|
+
export interface ModalProps extends GenericComponentProps {
|
|
7
|
+
/** The ID of the component that opens the modal when interacted with. */
|
|
8
|
+
trigger: string;
|
|
9
|
+
/** The ID of the component to display inside the modal. */
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function Modal(props: ModalProps): import('@lynx-js/react').ReactNode;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@lynx-js/react/jsx-runtime";
|
|
2
|
+
// Copyright 2026 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
import { DialogBackdrop, DialogContent, DialogRoot, DialogView, } from '@lynx-js/lynx-ui';
|
|
6
|
+
import { useState } from '@lynx-js/react';
|
|
7
|
+
import { NodeRenderer } from '../../react/A2UIRenderer.js';
|
|
8
|
+
import '../../../styles/catalog/Modal.css';
|
|
9
|
+
function childWithContext(child, dataContextPath) {
|
|
10
|
+
return child && dataContextPath
|
|
11
|
+
? { ...child, dataContextPath }
|
|
12
|
+
: child;
|
|
13
|
+
}
|
|
14
|
+
export function Modal(props) {
|
|
15
|
+
const { dataContextPath, surface, } = props;
|
|
16
|
+
const [open, setOpen] = useState(false);
|
|
17
|
+
const compatibleProps = props;
|
|
18
|
+
const triggerId = compatibleProps.trigger ?? compatibleProps.entryPointChild;
|
|
19
|
+
const contentId = compatibleProps.content ?? compatibleProps.contentChild;
|
|
20
|
+
const trigger = childWithContext(triggerId ? surface.components.get(triggerId) : undefined, dataContextPath);
|
|
21
|
+
const content = childWithContext(contentId ? surface.components.get(contentId) : undefined, dataContextPath);
|
|
22
|
+
const handleOpen = () => {
|
|
23
|
+
setOpen(true);
|
|
24
|
+
};
|
|
25
|
+
return (_jsxs(DialogRoot, { show: open, onShowChange: (nextOpen) => {
|
|
26
|
+
setOpen(nextOpen);
|
|
27
|
+
}, children: [_jsx("view", { className: 'modal-trigger', bindtap: handleOpen, children: trigger
|
|
28
|
+
? _jsx(NodeRenderer, { component: trigger, surface: surface })
|
|
29
|
+
: null }), _jsxs(DialogView, { className: 'modal-view', overlayLevel: 4, children: [_jsx(DialogBackdrop, { className: 'modal-backdrop', clickToClose: true, transition: true }), _jsx(DialogContent, { className: 'modal-content', transition: true, children: content
|
|
30
|
+
? _jsx(NodeRenderer, { component: content, surface: surface })
|
|
31
|
+
: null })] })] }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|