|
|
@@ -68,6 +68,7 @@ const bezierAnimationEasingOptions = [
|
|
|
{ label: 'Cubic In Out', value: 'cubic-in-out' }
|
|
|
]
|
|
|
|
|
|
+// 统一封装事件选项,避免事件码、方向、按键等组合值在各处重复拼接。
|
|
|
const eventOption = (
|
|
|
label: string,
|
|
|
eventCode: string,
|
|
|
@@ -83,6 +84,7 @@ const eventOption = (
|
|
|
} satisfies WidgetEventTriggerData
|
|
|
}) satisfies OptionType
|
|
|
|
|
|
+// 普通控件和页面共用的事件集。
|
|
|
const commonEventOptions = [
|
|
|
eventOption('Clicked', 'LV_EVENT_CLICKED'),
|
|
|
eventOption('Short Clicked', 'LV_EVENT_SHORT_CLICKED'),
|
|
|
@@ -122,11 +124,7 @@ const commonEventOptions = [
|
|
|
eventOption('Hit Test', 'LV_EVENT_HIT_TEST'),
|
|
|
eventOption('Insert', 'LV_EVENT_INSERT'),
|
|
|
eventOption('Ready', 'LV_EVENT_READY'),
|
|
|
- eventOption('Cancel', 'LV_EVENT_CANCEL'),
|
|
|
- eventOption('Load Start', 'LV_EVENT_SCREEN_LOAD_START'),
|
|
|
- eventOption('Loaded', 'LV_EVENT_SCREEN_LOADED'),
|
|
|
- eventOption('Unload Start', 'LV_EVENT_SCREEN_UNLOAD_START'),
|
|
|
- eventOption('Unloaded', 'LV_EVENT_SCREEN_UNLOADED')
|
|
|
+ eventOption('Cancel', 'LV_EVENT_CANCEL')
|
|
|
]
|
|
|
|
|
|
/**
|
|
|
@@ -1132,6 +1130,7 @@ function getStyleActionDescriptors(targetData?: WidgetEventTargetData): SchemaAc
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+// 根据 targetData 在项目里找到对应页面或控件,供事件动作默认值回填使用。
|
|
|
function getTargetWidgetSchemaData(project?: IProject, targetData?: WidgetEventTargetData) {
|
|
|
if (!project || !targetData) return
|
|
|
|
|
|
@@ -1157,18 +1156,20 @@ function getTargetWidgetSchemaData(project?: IProject, targetData?: WidgetEventT
|
|
|
return undefined
|
|
|
}
|
|
|
|
|
|
+// 缩放目标尺寸必须是正数,这里统一做兜底,避免默认值非法。
|
|
|
function clampBezierScaleSize(value: unknown) {
|
|
|
const numeric = Number(value)
|
|
|
if (Number.isFinite(numeric) && numeric >= 1) return numeric
|
|
|
return 1
|
|
|
}
|
|
|
|
|
|
-function getBezierAnimationDefaultValue(
|
|
|
- targetData?: WidgetEventTargetData,
|
|
|
- project?: IProject
|
|
|
-) {
|
|
|
+// 贝塞尔动画动作的默认值。
|
|
|
+// 时间控制模式下,优先复用目标控件当前宽高作为缩放目标。
|
|
|
+function getBezierAnimationDefaultValue(targetData?: WidgetEventTargetData, project?: IProject) {
|
|
|
const model = getTargetModel(targetData)
|
|
|
- const targetSchemaData = getTargetWidgetSchemaData(project, targetData) as Record<string, any> | undefined
|
|
|
+ const targetSchemaData = getTargetWidgetSchemaData(project, targetData) as
|
|
|
+ | Record<string, any>
|
|
|
+ | undefined
|
|
|
|
|
|
const defaultWidth = clampBezierScaleSize(
|
|
|
targetSchemaData?.props?.width ?? model?.defaultSchema?.props?.width
|
|
|
@@ -1211,6 +1212,7 @@ function getBezierAnimationDefaultValue(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// 值控制模式下,保持 min/max/current 始终落在合理区间内。
|
|
|
function normalizeBezierValueRange(formData?: Record<string, any>) {
|
|
|
if (!formData) return
|
|
|
|
|
|
@@ -1231,6 +1233,7 @@ function normalizeBezierValueRange(formData?: Record<string, any>) {
|
|
|
set(formData, 'payload.value.current', nextCurrent)
|
|
|
}
|
|
|
|
|
|
+// 事件编辑里的“动画”动作,目前只暴露一个贝塞尔动画入口。
|
|
|
function getBezierAnimationActionDescriptors(
|
|
|
targetData?: WidgetEventTargetData,
|
|
|
project?: IProject
|
|
|
@@ -1267,6 +1270,7 @@ function getBezierAnimationActionDescriptors(
|
|
|
valueType: 'dependency',
|
|
|
name: ['payload.mode'],
|
|
|
dependency: (values) => {
|
|
|
+ // 值控制模式:范围 + 当前值 + 资源贝塞尔段。
|
|
|
if (values['payload.mode'] === 'value') {
|
|
|
return [
|
|
|
{
|
|
|
@@ -1298,6 +1302,7 @@ function getBezierAnimationActionDescriptors(
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
+ // 当前值依赖最小/最大范围动态收缩,避免输入超出边界。
|
|
|
valueType: 'dependency',
|
|
|
name: ['payload.value.range.min', 'payload.value.range.max'],
|
|
|
dependency: (rangeValues) => {
|
|
|
@@ -1339,6 +1344,7 @@ function getBezierAnimationActionDescriptors(
|
|
|
] satisfies ComponentSchema[]
|
|
|
}
|
|
|
|
|
|
+ // 时间控制模式:时间、缓动、回放、自动播放、倒放、缩放等配置。
|
|
|
return [
|
|
|
{
|
|
|
label: '时间',
|
|
|
@@ -1383,6 +1389,7 @@ function getBezierAnimationActionDescriptors(
|
|
|
defaultValue: false
|
|
|
},
|
|
|
{
|
|
|
+ // 回放和缩放都是二级开关,打开后再展开附加配置。
|
|
|
valueType: 'dependency',
|
|
|
name: ['payload.time.playback.enabled'],
|
|
|
dependency: (playbackValues) => {
|
|
|
@@ -1516,6 +1523,7 @@ function getTargetModel(targetData?: WidgetEventTargetData) {
|
|
|
return LvglWidgets[targetData.targetType]
|
|
|
}
|
|
|
|
|
|
+// 属性、样式、动画三类动作统一从这里汇总,便于 SelectPopover 分组展示。
|
|
|
function getSchemaActionDescriptors(
|
|
|
targetData?: WidgetEventTargetData,
|
|
|
project?: IProject
|
|
|
@@ -1825,6 +1833,7 @@ export function getTargetOptions(project?: IProject): OptionType[] {
|
|
|
return options
|
|
|
}
|
|
|
|
|
|
+// 把 descriptor 转成下拉选项,默认值一并带出去,方便新建动作节点直接回填。
|
|
|
export function getActionOptions(
|
|
|
targetData?: WidgetEventTargetData,
|
|
|
project?: IProject,
|
|
|
@@ -1845,6 +1854,7 @@ export function getActionOptions(
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
+// 根据当前 target + actionKey 反查 descriptor,供 ActionNode 渲染表单。
|
|
|
export function resolveActionDescriptor(
|
|
|
targetData?: WidgetEventTargetData,
|
|
|
actionData?: WidgetEventActionData,
|