From 23a53db0e93746130e066243a26cf145562df3d7 Mon Sep 17 00:00:00 2001 From: robot-divkit Date: Mon, 29 May 2023 14:47:59 +0300 Subject: [PATCH] Release 25.2.0 --- DivKit/DivKitInfo.swift | 2 +- DivKit/Expressions/Functions/Function.swift | 3 + .../Serialization/Expression+Helpers.swift | 4 - .../DivData/DivDataPatchExtensions.swift | 6 + DivKit/generated_sources/DivBase.swift | 1 + DivKit/generated_sources/DivContainer.swift | 52 +++-- .../DivContainerTemplate.swift | 33 +++ DivKit/generated_sources/DivCustom.swift | 36 ++-- .../generated_sources/DivCustomTemplate.swift | 17 ++ .../DivDisappearAction.swift | 123 +++++++++++ .../DivDisappearActionTemplate.swift | 195 ++++++++++++++++++ DivKit/generated_sources/DivGallery.swift | 38 ++-- .../DivGalleryTemplate.swift | 17 ++ DivKit/generated_sources/DivGifImage.swift | 40 ++-- .../DivGifImageTemplate.swift | 17 ++ DivKit/generated_sources/DivGrid.swift | 36 ++-- .../generated_sources/DivGridTemplate.swift | 17 ++ DivKit/generated_sources/DivImage.swift | 46 +++-- .../generated_sources/DivImageTemplate.swift | 17 ++ DivKit/generated_sources/DivIndicator.swift | 42 ++-- .../DivIndicatorTemplate.swift | 17 ++ DivKit/generated_sources/DivInput.swift | 58 +++--- .../generated_sources/DivInputTemplate.swift | 17 ++ DivKit/generated_sources/DivPager.swift | 38 ++-- .../generated_sources/DivPagerTemplate.swift | 17 ++ DivKit/generated_sources/DivSelect.swift | 50 +++-- .../generated_sources/DivSelectTemplate.swift | 17 ++ DivKit/generated_sources/DivSeparator.swift | 34 +-- .../DivSeparatorTemplate.swift | 17 ++ DivKit/generated_sources/DivSlider.swift | 48 +++-- .../generated_sources/DivSliderTemplate.swift | 17 ++ DivKit/generated_sources/DivState.swift | 34 +-- .../generated_sources/DivStateTemplate.swift | 17 ++ DivKit/generated_sources/DivTabs.swift | 44 ++-- .../generated_sources/DivTabsTemplate.swift | 17 ++ DivKit/generated_sources/DivText.swift | 64 +++--- .../generated_sources/DivTextTemplate.swift | 17 ++ DivKit/generated_sources/DivVideo.swift | 46 +++-- .../generated_sources/DivVideoTemplate.swift | 17 ++ ...TextInputBlock+UIViewRenderableBlock.swift | 4 +- Specs/BasePublic/25.2.0/BasePublic.podspec | 23 +++ .../25.2.0/BaseTinyPublic.podspec | 20 ++ .../BaseUIPublic/25.2.0/BaseUIPublic.podspec | 22 ++ .../25.2.0/CommonCorePublic.podspec | 22 ++ Specs/DivKit/25.2.0/DivKit.podspec | 25 +++ .../25.2.0/DivKitExtensions.podspec | 22 ++ Specs/LayoutKit/25.2.0/LayoutKit.podspec | 23 +++ .../25.2.0/LayoutKitInterface.podspec | 24 +++ .../25.2.0/NetworkingPublic.podspec | 22 ++ .../25.2.0/Serialization.podspec | 23 +++ 50 files changed, 1277 insertions(+), 281 deletions(-) create mode 100644 DivKit/generated_sources/DivDisappearAction.swift create mode 100644 DivKit/generated_sources/DivDisappearActionTemplate.swift create mode 100644 Specs/BasePublic/25.2.0/BasePublic.podspec create mode 100644 Specs/BaseTinyPublic/25.2.0/BaseTinyPublic.podspec create mode 100644 Specs/BaseUIPublic/25.2.0/BaseUIPublic.podspec create mode 100644 Specs/CommonCorePublic/25.2.0/CommonCorePublic.podspec create mode 100644 Specs/DivKit/25.2.0/DivKit.podspec create mode 100644 Specs/DivKitExtensions/25.2.0/DivKitExtensions.podspec create mode 100644 Specs/LayoutKit/25.2.0/LayoutKit.podspec create mode 100644 Specs/LayoutKitInterface/25.2.0/LayoutKitInterface.podspec create mode 100644 Specs/NetworkingPublic/25.2.0/NetworkingPublic.podspec create mode 100644 Specs/Serialization/25.2.0/Serialization.podspec diff --git a/DivKit/DivKitInfo.swift b/DivKit/DivKitInfo.swift index 6810bebd..bc622ac9 100644 --- a/DivKit/DivKitInfo.swift +++ b/DivKit/DivKitInfo.swift @@ -1,3 +1,3 @@ public enum DivKitInfo { - public static let version = "25.1.0" + public static let version = "25.2.0" } diff --git a/DivKit/Expressions/Functions/Function.swift b/DivKit/Expressions/Functions/Function.swift index 7b547252..5b605003 100644 --- a/DivKit/Expressions/Functions/Function.swift +++ b/DivKit/Expressions/Functions/Function.swift @@ -234,6 +234,7 @@ struct FunctionSignature: Decodable { case datetime case color case url + case dict func check(arg: Any) -> Bool { type(of: arg) == swiftType @@ -255,6 +256,8 @@ struct FunctionSignature: Decodable { return Color.self case .url: return URL.self + case .dict: + return [String: Any].self } } diff --git a/DivKit/Expressions/Serialization/Expression+Helpers.swift b/DivKit/Expressions/Serialization/Expression+Helpers.swift index 15129a71..fbdb2976 100644 --- a/DivKit/Expressions/Serialization/Expression+Helpers.swift +++ b/DivKit/Expressions/Serialization/Expression+Helpers.swift @@ -77,10 +77,6 @@ func deserialize( ))) } - if case let .value(value) = result, validator?.isValid(value) == false { - return .failure(NonEmptyArray(.invalidValue(result: result, value: value))) - } - return .success(result) } diff --git a/DivKit/Extensions/DivData/DivDataPatchExtensions.swift b/DivKit/Extensions/DivData/DivDataPatchExtensions.swift index 6d9c1f48..f2ea0a76 100644 --- a/DivKit/Extensions/DivData/DivDataPatchExtensions.swift +++ b/DivKit/Extensions/DivData/DivDataPatchExtensions.swift @@ -96,6 +96,7 @@ extension DivContainer { columnSpan: columnSpan, contentAlignmentHorizontal: contentAlignmentHorizontal, contentAlignmentVertical: contentAlignmentVertical, + disappearActions: disappearActions, doubletapActions: doubletapActions, extensions: extensions, focus: focus, @@ -140,6 +141,7 @@ extension DivGallery { crossContentAlignment: crossContentAlignment, crossSpacing: crossSpacing, defaultItem: defaultItem, + disappearActions: disappearActions, extensions: extensions, focus: focus, height: height, @@ -184,6 +186,7 @@ extension DivGrid { columnSpan: columnSpan, contentAlignmentHorizontal: contentAlignmentHorizontal, contentAlignmentVertical: contentAlignmentVertical, + disappearActions: disappearActions, doubletapActions: doubletapActions, extensions: extensions, focus: focus, @@ -221,6 +224,7 @@ extension DivPager { border: border, columnSpan: columnSpan, defaultItem: defaultItem, + disappearActions: disappearActions, extensions: extensions, focus: focus, height: height, @@ -268,6 +272,7 @@ extension DivState { border: border, columnSpan: columnSpan, defaultStateId: defaultStateId, + disappearActions: disappearActions, divId: divId, extensions: extensions, focus: focus, @@ -310,6 +315,7 @@ extension DivTabs { background: background, border: border, columnSpan: columnSpan, + disappearActions: disappearActions, dynamicHeight: dynamicHeight, extensions: extensions, focus: focus, diff --git a/DivKit/generated_sources/DivBase.swift b/DivKit/generated_sources/DivBase.swift index f47b02f9..eaedc628 100644 --- a/DivKit/generated_sources/DivBase.swift +++ b/DivKit/generated_sources/DivBase.swift @@ -12,6 +12,7 @@ public protocol DivBase: DivBlockModeling { var background: [DivBackground]? { get } // at least 1 elements var border: DivBorder { get } var columnSpan: Expression? { get } // constraint: number >= 0 + var disappearActions: [DivDisappearAction]? { get } // at least 1 elements var extensions: [DivExtension]? { get } // at least 1 elements var focus: DivFocus? { get } var height: DivSize { get } // default value: .divWrapContentSize(DivWrapContentSize()) diff --git a/DivKit/generated_sources/DivContainer.swift b/DivKit/generated_sources/DivContainer.swift index 03f088f1..0cd1915f 100644 --- a/DivKit/generated_sources/DivContainer.swift +++ b/DivKit/generated_sources/DivContainer.swift @@ -19,6 +19,7 @@ public final class DivContainer: DivBase { } public final class Separator { + public let margins: DivEdgeInsets public let showAtEnd: Expression // default value: false public let showAtStart: Expression // default value: false public let showBetween: Expression // default value: true @@ -36,6 +37,9 @@ public final class DivContainer: DivBase { resolver.resolveNumericValue(expression: showBetween) ?? true } + static let marginsValidator: AnyValueValidator = + makeNoOpValueValidator() + static let showAtEndValidator: AnyValueValidator = makeNoOpValueValidator() @@ -46,11 +50,13 @@ public final class DivContainer: DivBase { makeNoOpValueValidator() init( + margins: DivEdgeInsets? = nil, showAtEnd: Expression? = nil, showAtStart: Expression? = nil, showBetween: Expression? = nil, style: DivDrawable ) { + self.margins = margins ?? DivEdgeInsets() self.showAtEnd = showAtEnd ?? .value(false) self.showAtStart = showAtStart ?? .value(false) self.showBetween = showBetween ?? .value(true) @@ -72,6 +78,7 @@ public final class DivContainer: DivBase { public let columnSpan: Expression? // constraint: number >= 0 public let contentAlignmentHorizontal: Expression // default value: left public let contentAlignmentVertical: Expression // default value: top + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let doubletapActions: [DivAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? @@ -177,6 +184,9 @@ public final class DivContainer: DivBase { static let contentAlignmentVerticalValidator: AnyValueValidator = makeNoOpValueValidator() + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let doubletapActionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -266,6 +276,7 @@ public final class DivContainer: DivBase { columnSpan: Expression?, contentAlignmentHorizontal: Expression?, contentAlignmentVertical: Expression?, + disappearActions: [DivDisappearAction]?, doubletapActions: [DivAction]?, extensions: [DivExtension]?, focus: DivFocus?, @@ -305,6 +316,7 @@ public final class DivContainer: DivBase { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal ?? .value(.left) self.contentAlignmentVertical = contentAlignmentVertical ?? .value(.top) + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -366,61 +378,62 @@ extension DivContainer: Equatable { } guard lhs.contentAlignmentVertical == rhs.contentAlignmentVertical, - lhs.doubletapActions == rhs.doubletapActions, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions, + lhs.doubletapActions == rhs.doubletapActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.height == rhs.height, - lhs.id == rhs.id + lhs.height == rhs.height else { return false } guard + lhs.id == rhs.id, lhs.items == rhs.items, - lhs.layoutMode == rhs.layoutMode, - lhs.lineSeparator == rhs.lineSeparator + lhs.layoutMode == rhs.layoutMode else { return false } guard + lhs.lineSeparator == rhs.lineSeparator, lhs.longtapActions == rhs.longtapActions, - lhs.margins == rhs.margins, - lhs.orientation == rhs.orientation + lhs.margins == rhs.margins else { return false } guard + lhs.orientation == rhs.orientation, lhs.paddings == rhs.paddings, - lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.separator == rhs.separator, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction + lhs.visibility == rhs.visibility else { return false } guard + lhs.visibilityAction == rhs.visibilityAction, lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { @@ -448,6 +461,7 @@ extension DivContainer: Serializable { result["column_span"] = columnSpan?.toValidSerializationValue() result["content_alignment_horizontal"] = contentAlignmentHorizontal.toValidSerializationValue() result["content_alignment_vertical"] = contentAlignmentVertical.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["doubletap_actions"] = doubletapActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() @@ -481,13 +495,14 @@ extension DivContainer: Serializable { extension DivContainer.Separator: Equatable { public static func ==(lhs: DivContainer.Separator, rhs: DivContainer.Separator) -> Bool { guard + lhs.margins == rhs.margins, lhs.showAtEnd == rhs.showAtEnd, - lhs.showAtStart == rhs.showAtStart, - lhs.showBetween == rhs.showBetween + lhs.showAtStart == rhs.showAtStart else { return false } guard + lhs.showBetween == rhs.showBetween, lhs.style == rhs.style else { return false @@ -500,6 +515,7 @@ extension DivContainer.Separator: Equatable { extension DivContainer.Separator: Serializable { public func toDictionary() -> [String: ValidSerializationValue] { var result: [String: ValidSerializationValue] = [:] + result["margins"] = margins.toDictionary() result["show_at_end"] = showAtEnd.toValidSerializationValue() result["show_at_start"] = showAtStart.toValidSerializationValue() result["show_between"] = showBetween.toValidSerializationValue() diff --git a/DivKit/generated_sources/DivContainerTemplate.swift b/DivKit/generated_sources/DivContainerTemplate.swift index e3d242ff..d7990a92 100644 --- a/DivKit/generated_sources/DivContainerTemplate.swift +++ b/DivKit/generated_sources/DivContainerTemplate.swift @@ -6,6 +6,7 @@ import Serialization public final class DivContainerTemplate: TemplateValue { public final class SeparatorTemplate: TemplateValue { + public let margins: Field? public let showAtEnd: Field>? // default value: false public let showAtStart: Field>? // default value: false public let showBetween: Field>? // default value: true @@ -14,6 +15,7 @@ public final class DivContainerTemplate: TemplateValue { public convenience init(dictionary: [String: Any], templateToType: [TemplateName: String]) throws { do { self.init( + margins: try dictionary.getOptionalField("margins", templateToType: templateToType), showAtEnd: try dictionary.getOptionalExpressionField("show_at_end"), showAtStart: try dictionary.getOptionalExpressionField("show_at_start"), showBetween: try dictionary.getOptionalExpressionField("show_between"), @@ -25,11 +27,13 @@ public final class DivContainerTemplate: TemplateValue { } init( + margins: Field? = nil, showAtEnd: Field>? = nil, showAtStart: Field>? = nil, showBetween: Field>? = nil, style: Field? = nil ) { + self.margins = margins self.showAtEnd = showAtEnd self.showAtStart = showAtStart self.showBetween = showBetween @@ -37,11 +41,13 @@ public final class DivContainerTemplate: TemplateValue { } private static func resolveOnlyLinks(context: TemplatesContext, parent: SeparatorTemplate?) -> DeserializationResult { + let marginsValue = parent?.margins?.resolveOptionalValue(context: context, validator: ResolvedValue.marginsValidator, useOnlyLinks: true) ?? .noValue let showAtEndValue = parent?.showAtEnd?.resolveOptionalValue(context: context, validator: ResolvedValue.showAtEndValidator) ?? .noValue let showAtStartValue = parent?.showAtStart?.resolveOptionalValue(context: context, validator: ResolvedValue.showAtStartValidator) ?? .noValue let showBetweenValue = parent?.showBetween?.resolveOptionalValue(context: context, validator: ResolvedValue.showBetweenValidator) ?? .noValue let styleValue = parent?.style?.resolveValue(context: context, useOnlyLinks: true) ?? .noValue var errors = mergeErrors( + marginsValue.errorsOrWarnings?.map { .nestedObjectError(field: "margins", error: $0) }, showAtEndValue.errorsOrWarnings?.map { .nestedObjectError(field: "show_at_end", error: $0) }, showAtStartValue.errorsOrWarnings?.map { .nestedObjectError(field: "show_at_start", error: $0) }, showBetweenValue.errorsOrWarnings?.map { .nestedObjectError(field: "show_between", error: $0) }, @@ -56,6 +62,7 @@ public final class DivContainerTemplate: TemplateValue { return .failure(NonEmptyArray(errors)!) } let result = DivContainer.Separator( + margins: marginsValue.value, showAtEnd: showAtEndValue.value, showAtStart: showAtStartValue.value, showBetween: showBetweenValue.value, @@ -68,12 +75,15 @@ public final class DivContainerTemplate: TemplateValue { if useOnlyLinks { return resolveOnlyLinks(context: context, parent: parent) } + var marginsValue: DeserializationResult = .noValue var showAtEndValue: DeserializationResult> = parent?.showAtEnd?.value() ?? .noValue var showAtStartValue: DeserializationResult> = parent?.showAtStart?.value() ?? .noValue var showBetweenValue: DeserializationResult> = parent?.showBetween?.value() ?? .noValue var styleValue: DeserializationResult = .noValue context.templateData.forEach { key, __dictValue in switch key { + case "margins": + marginsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.marginsValidator, type: DivEdgeInsetsTemplate.self).merged(with: marginsValue) case "show_at_end": showAtEndValue = deserialize(__dictValue, validator: ResolvedValue.showAtEndValidator).merged(with: showAtEndValue) case "show_at_start": @@ -82,6 +92,8 @@ public final class DivContainerTemplate: TemplateValue { showBetweenValue = deserialize(__dictValue, validator: ResolvedValue.showBetweenValidator).merged(with: showBetweenValue) case "style": styleValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, type: DivDrawableTemplate.self).merged(with: styleValue) + case parent?.margins?.link: + marginsValue = marginsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.marginsValidator, type: DivEdgeInsetsTemplate.self)) case parent?.showAtEnd?.link: showAtEndValue = showAtEndValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.showAtEndValidator)) case parent?.showAtStart?.link: @@ -94,9 +106,11 @@ public final class DivContainerTemplate: TemplateValue { } } if let parent = parent { + marginsValue = marginsValue.merged(with: parent.margins?.resolveOptionalValue(context: context, validator: ResolvedValue.marginsValidator, useOnlyLinks: true)) styleValue = styleValue.merged(with: parent.style?.resolveValue(context: context, useOnlyLinks: true)) } var errors = mergeErrors( + marginsValue.errorsOrWarnings?.map { .nestedObjectError(field: "margins", error: $0) }, showAtEndValue.errorsOrWarnings?.map { .nestedObjectError(field: "show_at_end", error: $0) }, showAtStartValue.errorsOrWarnings?.map { .nestedObjectError(field: "show_at_start", error: $0) }, showBetweenValue.errorsOrWarnings?.map { .nestedObjectError(field: "show_between", error: $0) }, @@ -111,6 +125,7 @@ public final class DivContainerTemplate: TemplateValue { return .failure(NonEmptyArray(errors)!) } let result = DivContainer.Separator( + margins: marginsValue.value, showAtEnd: showAtEndValue.value, showAtStart: showAtStartValue.value, showBetween: showBetweenValue.value, @@ -127,6 +142,7 @@ public final class DivContainerTemplate: TemplateValue { let merged = try mergedWithParent(templates: templates) return SeparatorTemplate( + margins: merged.margins?.tryResolveParent(templates: templates), showAtEnd: merged.showAtEnd, showAtStart: merged.showAtStart, showBetween: merged.showBetween, @@ -154,6 +170,7 @@ public final class DivContainerTemplate: TemplateValue { public let columnSpan: Field>? // constraint: number >= 0 public let contentAlignmentHorizontal: Field>? // default value: left public let contentAlignmentVertical: Field>? // default value: top + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let doubletapActions: Field<[DivActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? @@ -200,6 +217,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpan: try dictionary.getOptionalExpressionField("column_span"), contentAlignmentHorizontal: try dictionary.getOptionalExpressionField("content_alignment_horizontal"), contentAlignmentVertical: try dictionary.getOptionalExpressionField("content_alignment_vertical"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), doubletapActions: try dictionary.getOptionalArray("doubletap_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), @@ -246,6 +264,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpan: Field>? = nil, contentAlignmentHorizontal: Field>? = nil, contentAlignmentVertical: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, doubletapActions: Field<[DivActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, @@ -286,6 +305,7 @@ public final class DivContainerTemplate: TemplateValue { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal self.contentAlignmentVertical = contentAlignmentVertical + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -327,6 +347,7 @@ public final class DivContainerTemplate: TemplateValue { let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let contentAlignmentHorizontalValue = parent?.contentAlignmentHorizontal?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentHorizontalValidator) ?? .noValue let contentAlignmentVerticalValue = parent?.contentAlignmentVertical?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentVerticalValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let doubletapActionsValue = parent?.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue @@ -366,6 +387,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -414,6 +436,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -460,6 +483,7 @@ public final class DivContainerTemplate: TemplateValue { var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var contentAlignmentHorizontalValue: DeserializationResult> = parent?.contentAlignmentHorizontal?.value() ?? .noValue var contentAlignmentVerticalValue: DeserializationResult> = parent?.contentAlignmentVertical?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var doubletapActionsValue: DeserializationResult<[DivAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue @@ -513,6 +537,8 @@ public final class DivContainerTemplate: TemplateValue { contentAlignmentHorizontalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator).merged(with: contentAlignmentHorizontalValue) case "content_alignment_vertical": contentAlignmentVerticalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator).merged(with: contentAlignmentVerticalValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "doubletap_actions": doubletapActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self).merged(with: doubletapActionsValue) case "extensions": @@ -589,6 +615,8 @@ public final class DivContainerTemplate: TemplateValue { contentAlignmentHorizontalValue = contentAlignmentHorizontalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator)) case parent?.contentAlignmentVertical?.link: contentAlignmentVerticalValue = contentAlignmentVerticalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.doubletapActions?.link: doubletapActionsValue = doubletapActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self)) case parent?.extensions?.link: @@ -650,6 +678,7 @@ public final class DivContainerTemplate: TemplateValue { aspectValue = aspectValue.merged(with: parent.aspect?.resolveOptionalValue(context: context, validator: ResolvedValue.aspectValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) doubletapActionsValue = doubletapActionsValue.merged(with: parent.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) @@ -684,6 +713,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -732,6 +762,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -783,6 +814,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpan: columnSpan ?? mergedParent.columnSpan, contentAlignmentHorizontal: contentAlignmentHorizontal ?? mergedParent.contentAlignmentHorizontal, contentAlignmentVertical: contentAlignmentVertical ?? mergedParent.contentAlignmentVertical, + disappearActions: disappearActions ?? mergedParent.disappearActions, doubletapActions: doubletapActions ?? mergedParent.doubletapActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, @@ -829,6 +861,7 @@ public final class DivContainerTemplate: TemplateValue { columnSpan: merged.columnSpan, contentAlignmentHorizontal: merged.contentAlignmentHorizontal, contentAlignmentVertical: merged.contentAlignmentVertical, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), doubletapActions: merged.doubletapActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivCustom.swift b/DivKit/generated_sources/DivCustom.swift index 413023f8..5b1fb217 100644 --- a/DivKit/generated_sources/DivCustom.swift +++ b/DivKit/generated_sources/DivCustom.swift @@ -15,6 +15,7 @@ public final class DivCustom: DivBase { public let columnSpan: Expression? // constraint: number >= 0 public let customProps: [String: Any]? public let customType: String + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let height: DivSize // default value: .divWrapContentSize(DivWrapContentSize()) @@ -83,6 +84,9 @@ public final class DivCustom: DivBase { static let customPropsValidator: AnyValueValidator<[String: Any]> = makeNoOpValueValidator() + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -150,6 +154,7 @@ public final class DivCustom: DivBase { columnSpan: Expression? = nil, customProps: [String: Any]? = nil, customType: String, + disappearActions: [DivDisappearAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, height: DivSize? = nil, @@ -179,6 +184,7 @@ public final class DivCustom: DivBase { self.columnSpan = columnSpan self.customProps = customProps self.customType = customType + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height ?? .divWrapContentSize(DivWrapContentSize()) @@ -222,48 +228,53 @@ extension DivCustom: Equatable { guard lhs.columnSpan == rhs.columnSpan, lhs.customType == rhs.customType, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.height == rhs.height, - lhs.id == rhs.id + lhs.height == rhs.height else { return false } guard + lhs.id == rhs.id, lhs.items == rhs.items, - lhs.margins == rhs.margins, - lhs.paddings == rhs.paddings + lhs.margins == rhs.margins else { return false } guard + lhs.paddings == rhs.paddings, lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions, - lhs.tooltips == rhs.tooltips + lhs.selectedActions == rhs.selectedActions else { return false } guard + lhs.tooltips == rhs.tooltips, lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn + lhs.transitionChange == rhs.transitionChange else { return false } guard + lhs.transitionIn == rhs.transitionIn, lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers, - lhs.visibility == rhs.visibility + lhs.transitionTriggers == rhs.transitionTriggers else { return false } guard + lhs.visibility == rhs.visibility, lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions, + lhs.visibilityActions == rhs.visibilityActions + else { + return false + } + guard lhs.width == rhs.width else { return false @@ -286,6 +297,7 @@ extension DivCustom: Serializable { result["column_span"] = columnSpan?.toValidSerializationValue() result["custom_props"] = customProps result["custom_type"] = customType + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["height"] = height.toDictionary() diff --git a/DivKit/generated_sources/DivCustomTemplate.swift b/DivKit/generated_sources/DivCustomTemplate.swift index 0ab0bf86..9f742511 100644 --- a/DivKit/generated_sources/DivCustomTemplate.swift +++ b/DivKit/generated_sources/DivCustomTemplate.swift @@ -16,6 +16,7 @@ public final class DivCustomTemplate: TemplateValue { public let columnSpan: Field>? // constraint: number >= 0 public let customProps: Field<[String: Any]>? public let customType: Field? + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let height: Field? // default value: .divWrapContentSize(DivWrapContentSize()) @@ -52,6 +53,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpan: try dictionary.getOptionalExpressionField("column_span"), customProps: try dictionary.getOptionalField("custom_props"), customType: try dictionary.getOptionalField("custom_type"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), height: try dictionary.getOptionalField("height", templateToType: templateToType), @@ -88,6 +90,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpan: Field>? = nil, customProps: Field<[String: Any]>? = nil, customType: Field? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, height: Field? = nil, @@ -118,6 +121,7 @@ public final class DivCustomTemplate: TemplateValue { self.columnSpan = columnSpan self.customProps = customProps self.customType = customType + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height @@ -149,6 +153,7 @@ public final class DivCustomTemplate: TemplateValue { let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let customPropsValue = parent?.customProps?.resolveOptionalValue(context: context, validator: ResolvedValue.customPropsValidator) ?? .noValue let customTypeValue = parent?.customType?.resolveValue(context: context) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let heightValue = parent?.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true) ?? .noValue @@ -178,6 +183,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, customPropsValue.errorsOrWarnings?.map { .nestedObjectError(field: "custom_props", error: $0) }, customTypeValue.errorsOrWarnings?.map { .nestedObjectError(field: "custom_type", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -216,6 +222,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpan: columnSpanValue.value, customProps: customPropsValue.value, customType: customTypeNonNil, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -252,6 +259,7 @@ public final class DivCustomTemplate: TemplateValue { var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var customPropsValue: DeserializationResult<[String: Any]> = parent?.customProps?.value(validatedBy: ResolvedValue.customPropsValidator) ?? .noValue var customTypeValue: DeserializationResult = parent?.customType?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var heightValue: DeserializationResult = .noValue @@ -291,6 +299,8 @@ public final class DivCustomTemplate: TemplateValue { customPropsValue = deserialize(__dictValue, validator: ResolvedValue.customPropsValidator).merged(with: customPropsValue) case "custom_type": customTypeValue = deserialize(__dictValue).merged(with: customTypeValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -347,6 +357,8 @@ public final class DivCustomTemplate: TemplateValue { customPropsValue = customPropsValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.customPropsValidator)) case parent?.customType?.link: customTypeValue = customTypeValue.merged(with: deserialize(__dictValue)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -392,6 +404,7 @@ public final class DivCustomTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -418,6 +431,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, customPropsValue.errorsOrWarnings?.map { .nestedObjectError(field: "custom_props", error: $0) }, customTypeValue.errorsOrWarnings?.map { .nestedObjectError(field: "custom_type", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -456,6 +470,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpan: columnSpanValue.value, customProps: customPropsValue.value, customType: customTypeNonNil, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -497,6 +512,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpan: columnSpan ?? mergedParent.columnSpan, customProps: customProps ?? mergedParent.customProps, customType: customType ?? mergedParent.customType, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, height: height ?? mergedParent.height, @@ -533,6 +549,7 @@ public final class DivCustomTemplate: TemplateValue { columnSpan: merged.columnSpan, customProps: merged.customProps, customType: merged.customType, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), height: merged.height?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivDisappearAction.swift b/DivKit/generated_sources/DivDisappearAction.swift new file mode 100644 index 00000000..27c768db --- /dev/null +++ b/DivKit/generated_sources/DivDisappearAction.swift @@ -0,0 +1,123 @@ +// Generated code. Do not modify. + +import CommonCorePublic +import Foundation +import Serialization + +public final class DivDisappearAction { + public let disappearDuration: Expression // constraint: number >= 0; default value: 800 + public let downloadCallbacks: DivDownloadCallbacks? + public let logId: String // at least 1 char + public let logLimit: Expression // constraint: number >= 0; default value: 1 + public let payload: [String: Any]? + public let referer: Expression? + public let url: Expression? + public let visibilityPercentage: Expression // constraint: number >= 0 && number < 100; default value: 0 + + public func resolveDisappearDuration(_ resolver: ExpressionResolver) -> Int { + resolver.resolveNumericValue(expression: disappearDuration) ?? 800 + } + + public func resolveLogLimit(_ resolver: ExpressionResolver) -> Int { + resolver.resolveNumericValue(expression: logLimit) ?? 1 + } + + public func resolveReferer(_ resolver: ExpressionResolver) -> URL? { + resolver.resolveStringBasedValue(expression: referer, initializer: URL.init(string:)) + } + + public func resolveUrl(_ resolver: ExpressionResolver) -> URL? { + resolver.resolveStringBasedValue(expression: url, initializer: URL.init(string:)) + } + + public func resolveVisibilityPercentage(_ resolver: ExpressionResolver) -> Int { + resolver.resolveNumericValue(expression: visibilityPercentage) ?? 0 + } + + static let disappearDurationValidator: AnyValueValidator = + makeValueValidator(valueValidator: { $0 >= 0 }) + + static let downloadCallbacksValidator: AnyValueValidator = + makeNoOpValueValidator() + + static let logIdValidator: AnyValueValidator = + makeStringValidator(minLength: 1) + + static let logLimitValidator: AnyValueValidator = + makeValueValidator(valueValidator: { $0 >= 0 }) + + static let payloadValidator: AnyValueValidator<[String: Any]> = + makeNoOpValueValidator() + + static let refererValidator: AnyValueValidator = + makeNoOpValueValidator() + + static let urlValidator: AnyValueValidator = + makeNoOpValueValidator() + + static let visibilityPercentageValidator: AnyValueValidator = + makeValueValidator(valueValidator: { $0 >= 0 && $0 < 100 }) + + init( + disappearDuration: Expression? = nil, + downloadCallbacks: DivDownloadCallbacks? = nil, + logId: String, + logLimit: Expression? = nil, + payload: [String: Any]? = nil, + referer: Expression? = nil, + url: Expression? = nil, + visibilityPercentage: Expression? = nil + ) { + self.disappearDuration = disappearDuration ?? .value(800) + self.downloadCallbacks = downloadCallbacks + self.logId = logId + self.logLimit = logLimit ?? .value(1) + self.payload = payload + self.referer = referer + self.url = url + self.visibilityPercentage = visibilityPercentage ?? .value(0) + } +} + +#if DEBUG +// WARNING: this == is incomplete because of [String: Any] in class fields +extension DivDisappearAction: Equatable { + public static func ==(lhs: DivDisappearAction, rhs: DivDisappearAction) -> Bool { + guard + lhs.disappearDuration == rhs.disappearDuration, + lhs.downloadCallbacks == rhs.downloadCallbacks, + lhs.logId == rhs.logId + else { + return false + } + guard + lhs.logLimit == rhs.logLimit, + lhs.referer == rhs.referer, + lhs.url == rhs.url + else { + return false + } + guard + lhs.visibilityPercentage == rhs.visibilityPercentage + else { + return false + } + return true + } +} +#endif + +extension DivDisappearAction: Serializable { + public func toDictionary() -> [String: ValidSerializationValue] { + var result: [String: ValidSerializationValue] = [:] + result["disappear_duration"] = disappearDuration.toValidSerializationValue() + result["download_callbacks"] = downloadCallbacks?.toDictionary() + result["log_id"] = logId + result["log_limit"] = logLimit.toValidSerializationValue() + result["payload"] = payload + result["referer"] = referer?.toValidSerializationValue() + result["url"] = url?.toValidSerializationValue() + result["visibility_percentage"] = visibilityPercentage.toValidSerializationValue() + return result + } +} diff --git a/DivKit/generated_sources/DivDisappearActionTemplate.swift b/DivKit/generated_sources/DivDisappearActionTemplate.swift new file mode 100644 index 00000000..c5ac4892 --- /dev/null +++ b/DivKit/generated_sources/DivDisappearActionTemplate.swift @@ -0,0 +1,195 @@ +// Generated code. Do not modify. + +import CommonCorePublic +import Foundation +import Serialization + +public final class DivDisappearActionTemplate: TemplateValue { + public let disappearDuration: Field>? // constraint: number >= 0; default value: 800 + public let downloadCallbacks: Field? + public let logId: Field? // at least 1 char + public let logLimit: Field>? // constraint: number >= 0; default value: 1 + public let payload: Field<[String: Any]>? + public let referer: Field>? + public let url: Field>? + public let visibilityPercentage: Field>? // constraint: number >= 0 && number < 100; default value: 0 + + public convenience init(dictionary: [String: Any], templateToType: [TemplateName: String]) throws { + do { + self.init( + disappearDuration: try dictionary.getOptionalExpressionField("disappear_duration"), + downloadCallbacks: try dictionary.getOptionalField("download_callbacks", templateToType: templateToType), + logId: try dictionary.getOptionalField("log_id"), + logLimit: try dictionary.getOptionalExpressionField("log_limit"), + payload: try dictionary.getOptionalField("payload"), + referer: try dictionary.getOptionalExpressionField("referer", transform: URL.init(string:)), + url: try dictionary.getOptionalExpressionField("url", transform: URL.init(string:)), + visibilityPercentage: try dictionary.getOptionalExpressionField("visibility_percentage") + ) + } catch let DeserializationError.invalidFieldRepresentation(field: field, representation: representation) { + throw DeserializationError.invalidFieldRepresentation(field: "div-disappear-action_template." + field, representation: representation) + } + } + + init( + disappearDuration: Field>? = nil, + downloadCallbacks: Field? = nil, + logId: Field? = nil, + logLimit: Field>? = nil, + payload: Field<[String: Any]>? = nil, + referer: Field>? = nil, + url: Field>? = nil, + visibilityPercentage: Field>? = nil + ) { + self.disappearDuration = disappearDuration + self.downloadCallbacks = downloadCallbacks + self.logId = logId + self.logLimit = logLimit + self.payload = payload + self.referer = referer + self.url = url + self.visibilityPercentage = visibilityPercentage + } + + private static func resolveOnlyLinks(context: TemplatesContext, parent: DivDisappearActionTemplate?) -> DeserializationResult { + let disappearDurationValue = parent?.disappearDuration?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearDurationValidator) ?? .noValue + let downloadCallbacksValue = parent?.downloadCallbacks?.resolveOptionalValue(context: context, validator: ResolvedValue.downloadCallbacksValidator, useOnlyLinks: true) ?? .noValue + let logIdValue = parent?.logId?.resolveValue(context: context, validator: ResolvedValue.logIdValidator) ?? .noValue + let logLimitValue = parent?.logLimit?.resolveOptionalValue(context: context, validator: ResolvedValue.logLimitValidator) ?? .noValue + let payloadValue = parent?.payload?.resolveOptionalValue(context: context, validator: ResolvedValue.payloadValidator) ?? .noValue + let refererValue = parent?.referer?.resolveOptionalValue(context: context, transform: URL.init(string:), validator: ResolvedValue.refererValidator) ?? .noValue + let urlValue = parent?.url?.resolveOptionalValue(context: context, transform: URL.init(string:), validator: ResolvedValue.urlValidator) ?? .noValue + let visibilityPercentageValue = parent?.visibilityPercentage?.resolveOptionalValue(context: context, validator: ResolvedValue.visibilityPercentageValidator) ?? .noValue + var errors = mergeErrors( + disappearDurationValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_duration", error: $0) }, + downloadCallbacksValue.errorsOrWarnings?.map { .nestedObjectError(field: "download_callbacks", error: $0) }, + logIdValue.errorsOrWarnings?.map { .nestedObjectError(field: "log_id", error: $0) }, + logLimitValue.errorsOrWarnings?.map { .nestedObjectError(field: "log_limit", error: $0) }, + payloadValue.errorsOrWarnings?.map { .nestedObjectError(field: "payload", error: $0) }, + refererValue.errorsOrWarnings?.map { .nestedObjectError(field: "referer", error: $0) }, + urlValue.errorsOrWarnings?.map { .nestedObjectError(field: "url", error: $0) }, + visibilityPercentageValue.errorsOrWarnings?.map { .nestedObjectError(field: "visibility_percentage", error: $0) } + ) + if case .noValue = logIdValue { + errors.append(.requiredFieldIsMissing(field: "log_id")) + } + guard + let logIdNonNil = logIdValue.value + else { + return .failure(NonEmptyArray(errors)!) + } + let result = DivDisappearAction( + disappearDuration: disappearDurationValue.value, + downloadCallbacks: downloadCallbacksValue.value, + logId: logIdNonNil, + logLimit: logLimitValue.value, + payload: payloadValue.value, + referer: refererValue.value, + url: urlValue.value, + visibilityPercentage: visibilityPercentageValue.value + ) + return errors.isEmpty ? .success(result) : .partialSuccess(result, warnings: NonEmptyArray(errors)!) + } + + public static func resolveValue(context: TemplatesContext, parent: DivDisappearActionTemplate?, useOnlyLinks: Bool) -> DeserializationResult { + if useOnlyLinks { + return resolveOnlyLinks(context: context, parent: parent) + } + var disappearDurationValue: DeserializationResult> = parent?.disappearDuration?.value() ?? .noValue + var downloadCallbacksValue: DeserializationResult = .noValue + var logIdValue: DeserializationResult = parent?.logId?.value(validatedBy: ResolvedValue.logIdValidator) ?? .noValue + var logLimitValue: DeserializationResult> = parent?.logLimit?.value() ?? .noValue + var payloadValue: DeserializationResult<[String: Any]> = parent?.payload?.value(validatedBy: ResolvedValue.payloadValidator) ?? .noValue + var refererValue: DeserializationResult> = parent?.referer?.value() ?? .noValue + var urlValue: DeserializationResult> = parent?.url?.value() ?? .noValue + var visibilityPercentageValue: DeserializationResult> = parent?.visibilityPercentage?.value() ?? .noValue + context.templateData.forEach { key, __dictValue in + switch key { + case "disappear_duration": + disappearDurationValue = deserialize(__dictValue, validator: ResolvedValue.disappearDurationValidator).merged(with: disappearDurationValue) + case "download_callbacks": + downloadCallbacksValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.downloadCallbacksValidator, type: DivDownloadCallbacksTemplate.self).merged(with: downloadCallbacksValue) + case "log_id": + logIdValue = deserialize(__dictValue, validator: ResolvedValue.logIdValidator).merged(with: logIdValue) + case "log_limit": + logLimitValue = deserialize(__dictValue, validator: ResolvedValue.logLimitValidator).merged(with: logLimitValue) + case "payload": + payloadValue = deserialize(__dictValue, validator: ResolvedValue.payloadValidator).merged(with: payloadValue) + case "referer": + refererValue = deserialize(__dictValue, transform: URL.init(string:), validator: ResolvedValue.refererValidator).merged(with: refererValue) + case "url": + urlValue = deserialize(__dictValue, transform: URL.init(string:), validator: ResolvedValue.urlValidator).merged(with: urlValue) + case "visibility_percentage": + visibilityPercentageValue = deserialize(__dictValue, validator: ResolvedValue.visibilityPercentageValidator).merged(with: visibilityPercentageValue) + case parent?.disappearDuration?.link: + disappearDurationValue = disappearDurationValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.disappearDurationValidator)) + case parent?.downloadCallbacks?.link: + downloadCallbacksValue = downloadCallbacksValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.downloadCallbacksValidator, type: DivDownloadCallbacksTemplate.self)) + case parent?.logId?.link: + logIdValue = logIdValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.logIdValidator)) + case parent?.logLimit?.link: + logLimitValue = logLimitValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.logLimitValidator)) + case parent?.payload?.link: + payloadValue = payloadValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.payloadValidator)) + case parent?.referer?.link: + refererValue = refererValue.merged(with: deserialize(__dictValue, transform: URL.init(string:), validator: ResolvedValue.refererValidator)) + case parent?.url?.link: + urlValue = urlValue.merged(with: deserialize(__dictValue, transform: URL.init(string:), validator: ResolvedValue.urlValidator)) + case parent?.visibilityPercentage?.link: + visibilityPercentageValue = visibilityPercentageValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.visibilityPercentageValidator)) + default: break + } + } + if let parent = parent { + downloadCallbacksValue = downloadCallbacksValue.merged(with: parent.downloadCallbacks?.resolveOptionalValue(context: context, validator: ResolvedValue.downloadCallbacksValidator, useOnlyLinks: true)) + } + var errors = mergeErrors( + disappearDurationValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_duration", error: $0) }, + downloadCallbacksValue.errorsOrWarnings?.map { .nestedObjectError(field: "download_callbacks", error: $0) }, + logIdValue.errorsOrWarnings?.map { .nestedObjectError(field: "log_id", error: $0) }, + logLimitValue.errorsOrWarnings?.map { .nestedObjectError(field: "log_limit", error: $0) }, + payloadValue.errorsOrWarnings?.map { .nestedObjectError(field: "payload", error: $0) }, + refererValue.errorsOrWarnings?.map { .nestedObjectError(field: "referer", error: $0) }, + urlValue.errorsOrWarnings?.map { .nestedObjectError(field: "url", error: $0) }, + visibilityPercentageValue.errorsOrWarnings?.map { .nestedObjectError(field: "visibility_percentage", error: $0) } + ) + if case .noValue = logIdValue { + errors.append(.requiredFieldIsMissing(field: "log_id")) + } + guard + let logIdNonNil = logIdValue.value + else { + return .failure(NonEmptyArray(errors)!) + } + let result = DivDisappearAction( + disappearDuration: disappearDurationValue.value, + downloadCallbacks: downloadCallbacksValue.value, + logId: logIdNonNil, + logLimit: logLimitValue.value, + payload: payloadValue.value, + referer: refererValue.value, + url: urlValue.value, + visibilityPercentage: visibilityPercentageValue.value + ) + return errors.isEmpty ? .success(result) : .partialSuccess(result, warnings: NonEmptyArray(errors)!) + } + + private func mergedWithParent(templates: [TemplateName: Any]) throws -> DivDisappearActionTemplate { + return self + } + + public func resolveParent(templates: [TemplateName: Any]) throws -> DivDisappearActionTemplate { + let merged = try mergedWithParent(templates: templates) + + return DivDisappearActionTemplate( + disappearDuration: merged.disappearDuration, + downloadCallbacks: merged.downloadCallbacks?.tryResolveParent(templates: templates), + logId: merged.logId, + logLimit: merged.logLimit, + payload: merged.payload, + referer: merged.referer, + url: merged.url, + visibilityPercentage: merged.visibilityPercentage + ) + } +} diff --git a/DivKit/generated_sources/DivGallery.swift b/DivKit/generated_sources/DivGallery.swift index add96feb..aca10788 100644 --- a/DivKit/generated_sources/DivGallery.swift +++ b/DivKit/generated_sources/DivGallery.swift @@ -36,6 +36,7 @@ public final class DivGallery: DivBase { public let crossContentAlignment: Expression // default value: start public let crossSpacing: Expression? // constraint: number >= 0 public let defaultItem: Expression // constraint: number >= 0; default value: 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let height: DivSize // default value: .divWrapContentSize(DivWrapContentSize()) @@ -149,6 +150,9 @@ public final class DivGallery: DivBase { static let defaultItemValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -230,6 +234,7 @@ public final class DivGallery: DivBase { crossContentAlignment: Expression?, crossSpacing: Expression?, defaultItem: Expression?, + disappearActions: [DivDisappearAction]?, extensions: [DivExtension]?, focus: DivFocus?, height: DivSize?, @@ -265,6 +270,7 @@ public final class DivGallery: DivBase { self.crossContentAlignment = crossContentAlignment ?? .value(.start) self.crossSpacing = crossSpacing self.defaultItem = defaultItem ?? .value(0) + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height ?? .divWrapContentSize(DivWrapContentSize()) @@ -318,60 +324,61 @@ extension DivGallery: Equatable { guard lhs.crossSpacing == rhs.crossSpacing, lhs.defaultItem == rhs.defaultItem, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.height == rhs.height, - lhs.id == rhs.id + lhs.height == rhs.height else { return false } guard + lhs.id == rhs.id, lhs.itemSpacing == rhs.itemSpacing, - lhs.items == rhs.items, - lhs.margins == rhs.margins + lhs.items == rhs.items else { return false } guard + lhs.margins == rhs.margins, lhs.orientation == rhs.orientation, - lhs.paddings == rhs.paddings, - lhs.restrictParentScroll == rhs.restrictParentScroll + lhs.paddings == rhs.paddings else { return false } guard + lhs.restrictParentScroll == rhs.restrictParentScroll, lhs.rowSpan == rhs.rowSpan, - lhs.scrollMode == rhs.scrollMode, - lhs.selectedActions == rhs.selectedActions + lhs.scrollMode == rhs.scrollMode else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange + lhs.transform == rhs.transform else { return false } guard + lhs.transitionChange == rhs.transitionChange, lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers + lhs.transitionOut == rhs.transitionOut else { return false } guard + lhs.transitionTriggers == rhs.transitionTriggers, lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions + lhs.visibilityAction == rhs.visibilityAction else { return false } guard + lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { return false @@ -396,6 +403,7 @@ extension DivGallery: Serializable { result["cross_content_alignment"] = crossContentAlignment.toValidSerializationValue() result["cross_spacing"] = crossSpacing?.toValidSerializationValue() result["default_item"] = defaultItem.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["height"] = height.toDictionary() diff --git a/DivKit/generated_sources/DivGalleryTemplate.swift b/DivKit/generated_sources/DivGalleryTemplate.swift index a3979ec8..d19b6957 100644 --- a/DivKit/generated_sources/DivGalleryTemplate.swift +++ b/DivKit/generated_sources/DivGalleryTemplate.swift @@ -24,6 +24,7 @@ public final class DivGalleryTemplate: TemplateValue { public let crossContentAlignment: Field>? // default value: start public let crossSpacing: Field>? // constraint: number >= 0 public let defaultItem: Field>? // constraint: number >= 0; default value: 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let height: Field? // default value: .divWrapContentSize(DivWrapContentSize()) @@ -66,6 +67,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignment: try dictionary.getOptionalExpressionField("cross_content_alignment"), crossSpacing: try dictionary.getOptionalExpressionField("cross_spacing"), defaultItem: try dictionary.getOptionalExpressionField("default_item"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), height: try dictionary.getOptionalField("height", templateToType: templateToType), @@ -108,6 +110,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignment: Field>? = nil, crossSpacing: Field>? = nil, defaultItem: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, height: Field? = nil, @@ -144,6 +147,7 @@ public final class DivGalleryTemplate: TemplateValue { self.crossContentAlignment = crossContentAlignment self.crossSpacing = crossSpacing self.defaultItem = defaultItem + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height @@ -181,6 +185,7 @@ public final class DivGalleryTemplate: TemplateValue { let crossContentAlignmentValue = parent?.crossContentAlignment?.resolveOptionalValue(context: context, validator: ResolvedValue.crossContentAlignmentValidator) ?? .noValue let crossSpacingValue = parent?.crossSpacing?.resolveOptionalValue(context: context, validator: ResolvedValue.crossSpacingValidator) ?? .noValue let defaultItemValue = parent?.defaultItem?.resolveOptionalValue(context: context, validator: ResolvedValue.defaultItemValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let heightValue = parent?.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true) ?? .noValue @@ -216,6 +221,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignmentValue.errorsOrWarnings?.map { .nestedObjectError(field: "cross_content_alignment", error: $0) }, crossSpacingValue.errorsOrWarnings?.map { .nestedObjectError(field: "cross_spacing", error: $0) }, defaultItemValue.errorsOrWarnings?.map { .nestedObjectError(field: "default_item", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -260,6 +266,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignment: crossContentAlignmentValue.value, crossSpacing: crossSpacingValue.value, defaultItem: defaultItemValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -302,6 +309,7 @@ public final class DivGalleryTemplate: TemplateValue { var crossContentAlignmentValue: DeserializationResult> = parent?.crossContentAlignment?.value() ?? .noValue var crossSpacingValue: DeserializationResult> = parent?.crossSpacing?.value() ?? .noValue var defaultItemValue: DeserializationResult> = parent?.defaultItem?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var heightValue: DeserializationResult = .noValue @@ -349,6 +357,8 @@ public final class DivGalleryTemplate: TemplateValue { crossSpacingValue = deserialize(__dictValue, validator: ResolvedValue.crossSpacingValidator).merged(with: crossSpacingValue) case "default_item": defaultItemValue = deserialize(__dictValue, validator: ResolvedValue.defaultItemValidator).merged(with: defaultItemValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -417,6 +427,8 @@ public final class DivGalleryTemplate: TemplateValue { crossSpacingValue = crossSpacingValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.crossSpacingValidator)) case parent?.defaultItem?.link: defaultItemValue = defaultItemValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.defaultItemValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -470,6 +482,7 @@ public final class DivGalleryTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -498,6 +511,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignmentValue.errorsOrWarnings?.map { .nestedObjectError(field: "cross_content_alignment", error: $0) }, crossSpacingValue.errorsOrWarnings?.map { .nestedObjectError(field: "cross_spacing", error: $0) }, defaultItemValue.errorsOrWarnings?.map { .nestedObjectError(field: "default_item", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -542,6 +556,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignment: crossContentAlignmentValue.value, crossSpacing: crossSpacingValue.value, defaultItem: defaultItemValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -589,6 +604,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignment: crossContentAlignment ?? mergedParent.crossContentAlignment, crossSpacing: crossSpacing ?? mergedParent.crossSpacing, defaultItem: defaultItem ?? mergedParent.defaultItem, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, height: height ?? mergedParent.height, @@ -631,6 +647,7 @@ public final class DivGalleryTemplate: TemplateValue { crossContentAlignment: merged.crossContentAlignment, crossSpacing: merged.crossSpacing, defaultItem: merged.defaultItem, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), height: merged.height?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivGifImage.swift b/DivKit/generated_sources/DivGifImage.swift index a366c069..a6ef8517 100644 --- a/DivKit/generated_sources/DivGifImage.swift +++ b/DivKit/generated_sources/DivGifImage.swift @@ -19,6 +19,7 @@ public final class DivGifImage: DivBase { public let columnSpan: Expression? // constraint: number >= 0 public let contentAlignmentHorizontal: Expression // default value: center public let contentAlignmentVertical: Expression // default value: center + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let doubletapActions: [DivAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? @@ -136,6 +137,9 @@ public final class DivGifImage: DivBase { static let contentAlignmentVerticalValidator: AnyValueValidator = makeNoOpValueValidator() + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let doubletapActionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -222,6 +226,7 @@ public final class DivGifImage: DivBase { columnSpan: Expression? = nil, contentAlignmentHorizontal: Expression? = nil, contentAlignmentVertical: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, doubletapActions: [DivAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, @@ -261,6 +266,7 @@ public final class DivGifImage: DivBase { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal ?? .value(.center) self.contentAlignmentVertical = contentAlignmentVertical ?? .value(.center) + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -322,61 +328,62 @@ extension DivGifImage: Equatable { } guard lhs.contentAlignmentVertical == rhs.contentAlignmentVertical, - lhs.doubletapActions == rhs.doubletapActions, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions, + lhs.doubletapActions == rhs.doubletapActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.gifUrl == rhs.gifUrl, - lhs.height == rhs.height + lhs.gifUrl == rhs.gifUrl else { return false } guard + lhs.height == rhs.height, lhs.id == rhs.id, - lhs.longtapActions == rhs.longtapActions, - lhs.margins == rhs.margins + lhs.longtapActions == rhs.longtapActions else { return false } guard + lhs.margins == rhs.margins, lhs.paddings == rhs.paddings, - lhs.placeholderColor == rhs.placeholderColor, - lhs.preloadRequired == rhs.preloadRequired + lhs.placeholderColor == rhs.placeholderColor else { return false } guard + lhs.preloadRequired == rhs.preloadRequired, lhs.preview == rhs.preview, - lhs.rowSpan == rhs.rowSpan, - lhs.scale == rhs.scale + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.scale == rhs.scale, lhs.selectedActions == rhs.selectedActions, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction + lhs.visibility == rhs.visibility else { return false } guard + lhs.visibilityAction == rhs.visibilityAction, lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { @@ -404,6 +411,7 @@ extension DivGifImage: Serializable { result["column_span"] = columnSpan?.toValidSerializationValue() result["content_alignment_horizontal"] = contentAlignmentHorizontal.toValidSerializationValue() result["content_alignment_vertical"] = contentAlignmentVertical.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["doubletap_actions"] = doubletapActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() diff --git a/DivKit/generated_sources/DivGifImageTemplate.swift b/DivKit/generated_sources/DivGifImageTemplate.swift index ee8d83c0..955727a0 100644 --- a/DivKit/generated_sources/DivGifImageTemplate.swift +++ b/DivKit/generated_sources/DivGifImageTemplate.swift @@ -20,6 +20,7 @@ public final class DivGifImageTemplate: TemplateValue { public let columnSpan: Field>? // constraint: number >= 0 public let contentAlignmentHorizontal: Field>? // default value: center public let contentAlignmentVertical: Field>? // default value: center + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let doubletapActions: Field<[DivActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? @@ -66,6 +67,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpan: try dictionary.getOptionalExpressionField("column_span"), contentAlignmentHorizontal: try dictionary.getOptionalExpressionField("content_alignment_horizontal"), contentAlignmentVertical: try dictionary.getOptionalExpressionField("content_alignment_vertical"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), doubletapActions: try dictionary.getOptionalArray("doubletap_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), @@ -112,6 +114,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpan: Field>? = nil, contentAlignmentHorizontal: Field>? = nil, contentAlignmentVertical: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, doubletapActions: Field<[DivActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, @@ -152,6 +155,7 @@ public final class DivGifImageTemplate: TemplateValue { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal self.contentAlignmentVertical = contentAlignmentVertical + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -193,6 +197,7 @@ public final class DivGifImageTemplate: TemplateValue { let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let contentAlignmentHorizontalValue = parent?.contentAlignmentHorizontal?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentHorizontalValidator) ?? .noValue let contentAlignmentVerticalValue = parent?.contentAlignmentVertical?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentVerticalValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let doubletapActionsValue = parent?.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue @@ -232,6 +237,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -280,6 +286,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -326,6 +333,7 @@ public final class DivGifImageTemplate: TemplateValue { var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var contentAlignmentHorizontalValue: DeserializationResult> = parent?.contentAlignmentHorizontal?.value() ?? .noValue var contentAlignmentVerticalValue: DeserializationResult> = parent?.contentAlignmentVertical?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var doubletapActionsValue: DeserializationResult<[DivAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue @@ -379,6 +387,8 @@ public final class DivGifImageTemplate: TemplateValue { contentAlignmentHorizontalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator).merged(with: contentAlignmentHorizontalValue) case "content_alignment_vertical": contentAlignmentVerticalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator).merged(with: contentAlignmentVerticalValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "doubletap_actions": doubletapActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self).merged(with: doubletapActionsValue) case "extensions": @@ -455,6 +465,8 @@ public final class DivGifImageTemplate: TemplateValue { contentAlignmentHorizontalValue = contentAlignmentHorizontalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator)) case parent?.contentAlignmentVertical?.link: contentAlignmentVerticalValue = contentAlignmentVerticalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.doubletapActions?.link: doubletapActionsValue = doubletapActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self)) case parent?.extensions?.link: @@ -516,6 +528,7 @@ public final class DivGifImageTemplate: TemplateValue { aspectValue = aspectValue.merged(with: parent.aspect?.resolveOptionalValue(context: context, validator: ResolvedValue.aspectValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) doubletapActionsValue = doubletapActionsValue.merged(with: parent.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) @@ -547,6 +560,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -595,6 +609,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -646,6 +661,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpan: columnSpan ?? mergedParent.columnSpan, contentAlignmentHorizontal: contentAlignmentHorizontal ?? mergedParent.contentAlignmentHorizontal, contentAlignmentVertical: contentAlignmentVertical ?? mergedParent.contentAlignmentVertical, + disappearActions: disappearActions ?? mergedParent.disappearActions, doubletapActions: doubletapActions ?? mergedParent.doubletapActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, @@ -692,6 +708,7 @@ public final class DivGifImageTemplate: TemplateValue { columnSpan: merged.columnSpan, contentAlignmentHorizontal: merged.contentAlignmentHorizontal, contentAlignmentVertical: merged.contentAlignmentVertical, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), doubletapActions: merged.doubletapActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivGrid.swift b/DivKit/generated_sources/DivGrid.swift index f3674cbd..a6f70d48 100644 --- a/DivKit/generated_sources/DivGrid.swift +++ b/DivKit/generated_sources/DivGrid.swift @@ -19,6 +19,7 @@ public final class DivGrid: DivBase { public let columnSpan: Expression? // constraint: number >= 0 public let contentAlignmentHorizontal: Expression // default value: left public let contentAlignmentVertical: Expression // default value: top + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let doubletapActions: [DivAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? @@ -116,6 +117,9 @@ public final class DivGrid: DivBase { static let contentAlignmentVerticalValidator: AnyValueValidator = makeNoOpValueValidator() + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let doubletapActionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -193,6 +197,7 @@ public final class DivGrid: DivBase { columnSpan: Expression?, contentAlignmentHorizontal: Expression?, contentAlignmentVertical: Expression?, + disappearActions: [DivDisappearAction]?, doubletapActions: [DivAction]?, extensions: [DivExtension]?, focus: DivFocus?, @@ -228,6 +233,7 @@ public final class DivGrid: DivBase { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal ?? .value(.left) self.contentAlignmentVertical = contentAlignmentVertical ?? .value(.top) + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -285,54 +291,55 @@ extension DivGrid: Equatable { } guard lhs.contentAlignmentVertical == rhs.contentAlignmentVertical, - lhs.doubletapActions == rhs.doubletapActions, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions, + lhs.doubletapActions == rhs.doubletapActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.height == rhs.height, - lhs.id == rhs.id + lhs.height == rhs.height else { return false } guard + lhs.id == rhs.id, lhs.items == rhs.items, - lhs.longtapActions == rhs.longtapActions, - lhs.margins == rhs.margins + lhs.longtapActions == rhs.longtapActions else { return false } guard + lhs.margins == rhs.margins, lhs.paddings == rhs.paddings, - lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange + lhs.transform == rhs.transform else { return false } guard + lhs.transitionChange == rhs.transitionChange, lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers + lhs.transitionOut == rhs.transitionOut else { return false } guard + lhs.transitionTriggers == rhs.transitionTriggers, lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions + lhs.visibilityAction == rhs.visibilityAction else { return false } guard + lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { return false @@ -359,6 +366,7 @@ extension DivGrid: Serializable { result["column_span"] = columnSpan?.toValidSerializationValue() result["content_alignment_horizontal"] = contentAlignmentHorizontal.toValidSerializationValue() result["content_alignment_vertical"] = contentAlignmentVertical.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["doubletap_actions"] = doubletapActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() diff --git a/DivKit/generated_sources/DivGridTemplate.swift b/DivKit/generated_sources/DivGridTemplate.swift index 6f9cb592..b4ce8ead 100644 --- a/DivKit/generated_sources/DivGridTemplate.swift +++ b/DivKit/generated_sources/DivGridTemplate.swift @@ -20,6 +20,7 @@ public final class DivGridTemplate: TemplateValue { public let columnSpan: Field>? // constraint: number >= 0 public let contentAlignmentHorizontal: Field>? // default value: left public let contentAlignmentVertical: Field>? // default value: top + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let doubletapActions: Field<[DivActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? @@ -65,6 +66,7 @@ public final class DivGridTemplate: TemplateValue { columnSpan: try dictionary.getOptionalExpressionField("column_span"), contentAlignmentHorizontal: try dictionary.getOptionalExpressionField("content_alignment_horizontal"), contentAlignmentVertical: try dictionary.getOptionalExpressionField("content_alignment_vertical"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), doubletapActions: try dictionary.getOptionalArray("doubletap_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), @@ -107,6 +109,7 @@ public final class DivGridTemplate: TemplateValue { columnSpan: Field>? = nil, contentAlignmentHorizontal: Field>? = nil, contentAlignmentVertical: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, doubletapActions: Field<[DivActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, @@ -143,6 +146,7 @@ public final class DivGridTemplate: TemplateValue { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal self.contentAlignmentVertical = contentAlignmentVertical + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -180,6 +184,7 @@ public final class DivGridTemplate: TemplateValue { let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let contentAlignmentHorizontalValue = parent?.contentAlignmentHorizontal?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentHorizontalValidator) ?? .noValue let contentAlignmentVerticalValue = parent?.contentAlignmentVertical?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentVerticalValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let doubletapActionsValue = parent?.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue @@ -215,6 +220,7 @@ public final class DivGridTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -263,6 +269,7 @@ public final class DivGridTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -305,6 +312,7 @@ public final class DivGridTemplate: TemplateValue { var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var contentAlignmentHorizontalValue: DeserializationResult> = parent?.contentAlignmentHorizontal?.value() ?? .noValue var contentAlignmentVerticalValue: DeserializationResult> = parent?.contentAlignmentVertical?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var doubletapActionsValue: DeserializationResult<[DivAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue @@ -354,6 +362,8 @@ public final class DivGridTemplate: TemplateValue { contentAlignmentHorizontalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator).merged(with: contentAlignmentHorizontalValue) case "content_alignment_vertical": contentAlignmentVerticalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator).merged(with: contentAlignmentVerticalValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "doubletap_actions": doubletapActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self).merged(with: doubletapActionsValue) case "extensions": @@ -422,6 +432,8 @@ public final class DivGridTemplate: TemplateValue { contentAlignmentHorizontalValue = contentAlignmentHorizontalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator)) case parent?.contentAlignmentVertical?.link: contentAlignmentVerticalValue = contentAlignmentVerticalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.doubletapActions?.link: doubletapActionsValue = doubletapActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self)) case parent?.extensions?.link: @@ -474,6 +486,7 @@ public final class DivGridTemplate: TemplateValue { actionsValue = actionsValue.merged(with: parent.actions?.resolveOptionalValue(context: context, validator: ResolvedValue.actionsValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) doubletapActionsValue = doubletapActionsValue.merged(with: parent.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) @@ -506,6 +519,7 @@ public final class DivGridTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -554,6 +568,7 @@ public final class DivGridTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -601,6 +616,7 @@ public final class DivGridTemplate: TemplateValue { columnSpan: columnSpan ?? mergedParent.columnSpan, contentAlignmentHorizontal: contentAlignmentHorizontal ?? mergedParent.contentAlignmentHorizontal, contentAlignmentVertical: contentAlignmentVertical ?? mergedParent.contentAlignmentVertical, + disappearActions: disappearActions ?? mergedParent.disappearActions, doubletapActions: doubletapActions ?? mergedParent.doubletapActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, @@ -643,6 +659,7 @@ public final class DivGridTemplate: TemplateValue { columnSpan: merged.columnSpan, contentAlignmentHorizontal: merged.contentAlignmentHorizontal, contentAlignmentVertical: merged.contentAlignmentVertical, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), doubletapActions: merged.doubletapActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivImage.swift b/DivKit/generated_sources/DivImage.swift index 7cb55c41..1b84146c 100644 --- a/DivKit/generated_sources/DivImage.swift +++ b/DivKit/generated_sources/DivImage.swift @@ -20,6 +20,7 @@ public final class DivImage: DivBase { public let columnSpan: Expression? // constraint: number >= 0 public let contentAlignmentHorizontal: Expression // default value: center public let contentAlignmentVertical: Expression // default value: center + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let doubletapActions: [DivAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let filters: [DivFilter]? // at least 1 elements @@ -156,6 +157,9 @@ public final class DivImage: DivBase { static let contentAlignmentVerticalValidator: AnyValueValidator = makeNoOpValueValidator() + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let doubletapActionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -255,6 +259,7 @@ public final class DivImage: DivBase { columnSpan: Expression? = nil, contentAlignmentHorizontal: Expression? = nil, contentAlignmentVertical: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, doubletapActions: [DivAction]? = nil, extensions: [DivExtension]? = nil, filters: [DivFilter]? = nil, @@ -299,6 +304,7 @@ public final class DivImage: DivBase { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal ?? .value(.center) self.contentAlignmentVertical = contentAlignmentVertical ?? .value(.center) + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.filters = filters @@ -365,74 +371,75 @@ extension DivImage: Equatable { guard lhs.contentAlignmentHorizontal == rhs.contentAlignmentHorizontal, lhs.contentAlignmentVertical == rhs.contentAlignmentVertical, - lhs.doubletapActions == rhs.doubletapActions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.doubletapActions == rhs.doubletapActions, lhs.extensions == rhs.extensions, - lhs.filters == rhs.filters, - lhs.focus == rhs.focus + lhs.filters == rhs.filters else { return false } guard + lhs.focus == rhs.focus, lhs.height == rhs.height, - lhs.highPriorityPreviewShow == rhs.highPriorityPreviewShow, - lhs.id == rhs.id + lhs.highPriorityPreviewShow == rhs.highPriorityPreviewShow else { return false } guard + lhs.id == rhs.id, lhs.imageUrl == rhs.imageUrl, - lhs.longtapActions == rhs.longtapActions, - lhs.margins == rhs.margins + lhs.longtapActions == rhs.longtapActions else { return false } guard + lhs.margins == rhs.margins, lhs.paddings == rhs.paddings, - lhs.placeholderColor == rhs.placeholderColor, - lhs.preloadRequired == rhs.preloadRequired + lhs.placeholderColor == rhs.placeholderColor else { return false } guard + lhs.preloadRequired == rhs.preloadRequired, lhs.preview == rhs.preview, - lhs.rowSpan == rhs.rowSpan, - lhs.scale == rhs.scale + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.scale == rhs.scale, lhs.selectedActions == rhs.selectedActions, - lhs.tintColor == rhs.tintColor, - lhs.tintMode == rhs.tintMode + lhs.tintColor == rhs.tintColor else { return false } guard + lhs.tintMode == rhs.tintMode, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange + lhs.transform == rhs.transform else { return false } guard + lhs.transitionChange == rhs.transitionChange, lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers + lhs.transitionOut == rhs.transitionOut else { return false } guard + lhs.transitionTriggers == rhs.transitionTriggers, lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions + lhs.visibilityAction == rhs.visibilityAction else { return false } guard + lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { return false @@ -460,6 +467,7 @@ extension DivImage: Serializable { result["column_span"] = columnSpan?.toValidSerializationValue() result["content_alignment_horizontal"] = contentAlignmentHorizontal.toValidSerializationValue() result["content_alignment_vertical"] = contentAlignmentVertical.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["doubletap_actions"] = doubletapActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["filters"] = filters?.map { $0.toDictionary() } diff --git a/DivKit/generated_sources/DivImageTemplate.swift b/DivKit/generated_sources/DivImageTemplate.swift index fa894759..cc2085f6 100644 --- a/DivKit/generated_sources/DivImageTemplate.swift +++ b/DivKit/generated_sources/DivImageTemplate.swift @@ -21,6 +21,7 @@ public final class DivImageTemplate: TemplateValue { public let columnSpan: Field>? // constraint: number >= 0 public let contentAlignmentHorizontal: Field>? // default value: center public let contentAlignmentVertical: Field>? // default value: center + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let doubletapActions: Field<[DivActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let filters: Field<[DivFilterTemplate]>? // at least 1 elements @@ -72,6 +73,7 @@ public final class DivImageTemplate: TemplateValue { columnSpan: try dictionary.getOptionalExpressionField("column_span"), contentAlignmentHorizontal: try dictionary.getOptionalExpressionField("content_alignment_horizontal"), contentAlignmentVertical: try dictionary.getOptionalExpressionField("content_alignment_vertical"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), doubletapActions: try dictionary.getOptionalArray("doubletap_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), filters: try dictionary.getOptionalArray("filters", templateToType: templateToType), @@ -123,6 +125,7 @@ public final class DivImageTemplate: TemplateValue { columnSpan: Field>? = nil, contentAlignmentHorizontal: Field>? = nil, contentAlignmentVertical: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, doubletapActions: Field<[DivActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, filters: Field<[DivFilterTemplate]>? = nil, @@ -168,6 +171,7 @@ public final class DivImageTemplate: TemplateValue { self.columnSpan = columnSpan self.contentAlignmentHorizontal = contentAlignmentHorizontal self.contentAlignmentVertical = contentAlignmentVertical + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.filters = filters @@ -214,6 +218,7 @@ public final class DivImageTemplate: TemplateValue { let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let contentAlignmentHorizontalValue = parent?.contentAlignmentHorizontal?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentHorizontalValidator) ?? .noValue let contentAlignmentVerticalValue = parent?.contentAlignmentVertical?.resolveOptionalValue(context: context, validator: ResolvedValue.contentAlignmentVerticalValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let doubletapActionsValue = parent?.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let filtersValue = parent?.filters?.resolveOptionalValue(context: context, validator: ResolvedValue.filtersValidator, useOnlyLinks: true) ?? .noValue @@ -258,6 +263,7 @@ public final class DivImageTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, filtersValue.errorsOrWarnings?.map { .nestedObjectError(field: "filters", error: $0) }, @@ -311,6 +317,7 @@ public final class DivImageTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, filters: filtersValue.value, @@ -362,6 +369,7 @@ public final class DivImageTemplate: TemplateValue { var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var contentAlignmentHorizontalValue: DeserializationResult> = parent?.contentAlignmentHorizontal?.value() ?? .noValue var contentAlignmentVerticalValue: DeserializationResult> = parent?.contentAlignmentVertical?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var doubletapActionsValue: DeserializationResult<[DivAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var filtersValue: DeserializationResult<[DivFilter]> = .noValue @@ -421,6 +429,8 @@ public final class DivImageTemplate: TemplateValue { contentAlignmentHorizontalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator).merged(with: contentAlignmentHorizontalValue) case "content_alignment_vertical": contentAlignmentVerticalValue = deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator).merged(with: contentAlignmentVerticalValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "doubletap_actions": doubletapActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self).merged(with: doubletapActionsValue) case "extensions": @@ -507,6 +517,8 @@ public final class DivImageTemplate: TemplateValue { contentAlignmentHorizontalValue = contentAlignmentHorizontalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentHorizontalValidator)) case parent?.contentAlignmentVertical?.link: contentAlignmentVerticalValue = contentAlignmentVerticalValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.contentAlignmentVerticalValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.doubletapActions?.link: doubletapActionsValue = doubletapActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self)) case parent?.extensions?.link: @@ -577,6 +589,7 @@ public final class DivImageTemplate: TemplateValue { aspectValue = aspectValue.merged(with: parent.aspect?.resolveOptionalValue(context: context, validator: ResolvedValue.aspectValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) doubletapActionsValue = doubletapActionsValue.merged(with: parent.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) filtersValue = filtersValue.merged(with: parent.filters?.resolveOptionalValue(context: context, validator: ResolvedValue.filtersValidator, useOnlyLinks: true)) @@ -610,6 +623,7 @@ public final class DivImageTemplate: TemplateValue { columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, contentAlignmentHorizontalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_horizontal", error: $0) }, contentAlignmentVerticalValue.errorsOrWarnings?.map { .nestedObjectError(field: "content_alignment_vertical", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, filtersValue.errorsOrWarnings?.map { .nestedObjectError(field: "filters", error: $0) }, @@ -663,6 +677,7 @@ public final class DivImageTemplate: TemplateValue { columnSpan: columnSpanValue.value, contentAlignmentHorizontal: contentAlignmentHorizontalValue.value, contentAlignmentVertical: contentAlignmentVerticalValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, filters: filtersValue.value, @@ -719,6 +734,7 @@ public final class DivImageTemplate: TemplateValue { columnSpan: columnSpan ?? mergedParent.columnSpan, contentAlignmentHorizontal: contentAlignmentHorizontal ?? mergedParent.contentAlignmentHorizontal, contentAlignmentVertical: contentAlignmentVertical ?? mergedParent.contentAlignmentVertical, + disappearActions: disappearActions ?? mergedParent.disappearActions, doubletapActions: doubletapActions ?? mergedParent.doubletapActions, extensions: extensions ?? mergedParent.extensions, filters: filters ?? mergedParent.filters, @@ -770,6 +786,7 @@ public final class DivImageTemplate: TemplateValue { columnSpan: merged.columnSpan, contentAlignmentHorizontal: merged.contentAlignmentHorizontal, contentAlignmentVertical: merged.contentAlignmentVertical, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), doubletapActions: merged.doubletapActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), filters: merged.filters?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivIndicator.swift b/DivKit/generated_sources/DivIndicator.swift index 2dc44fe3..b43d5382 100644 --- a/DivKit/generated_sources/DivIndicator.swift +++ b/DivKit/generated_sources/DivIndicator.swift @@ -24,6 +24,7 @@ public final class DivIndicator: DivBase { public let background: [DivBackground]? // at least 1 elements public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let height: DivSize // default value: .divWrapContentSize(DivWrapContentSize()) @@ -128,6 +129,9 @@ public final class DivIndicator: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -218,6 +222,7 @@ public final class DivIndicator: DivBase { background: [DivBackground]? = nil, border: DivBorder? = nil, columnSpan: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, height: DivSize? = nil, @@ -256,6 +261,7 @@ public final class DivIndicator: DivBase { self.background = background self.border = border ?? DivBorder() self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height ?? .divWrapContentSize(DivWrapContentSize()) @@ -312,67 +318,68 @@ extension DivIndicator: Equatable { guard lhs.border == rhs.border, lhs.columnSpan == rhs.columnSpan, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.height == rhs.height, - lhs.id == rhs.id + lhs.height == rhs.height else { return false } guard + lhs.id == rhs.id, lhs.inactiveItemColor == rhs.inactiveItemColor, - lhs.inactiveMinimumShape == rhs.inactiveMinimumShape, - lhs.inactiveShape == rhs.inactiveShape + lhs.inactiveMinimumShape == rhs.inactiveMinimumShape else { return false } guard + lhs.inactiveShape == rhs.inactiveShape, lhs.itemsPlacement == rhs.itemsPlacement, - lhs.margins == rhs.margins, - lhs.minimumItemSize == rhs.minimumItemSize + lhs.margins == rhs.margins else { return false } guard + lhs.minimumItemSize == rhs.minimumItemSize, lhs.paddings == rhs.paddings, - lhs.pagerId == rhs.pagerId, - lhs.rowSpan == rhs.rowSpan + lhs.pagerId == rhs.pagerId else { return false } guard + lhs.rowSpan == rhs.rowSpan, lhs.selectedActions == rhs.selectedActions, - lhs.shape == rhs.shape, - lhs.spaceBetweenCenters == rhs.spaceBetweenCenters + lhs.shape == rhs.shape else { return false } guard + lhs.spaceBetweenCenters == rhs.spaceBetweenCenters, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange + lhs.transform == rhs.transform else { return false } guard + lhs.transitionChange == rhs.transitionChange, lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers + lhs.transitionOut == rhs.transitionOut else { return false } guard + lhs.transitionTriggers == rhs.transitionTriggers, lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions + lhs.visibilityAction == rhs.visibilityAction else { return false } guard + lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { return false @@ -397,6 +404,7 @@ extension DivIndicator: Serializable { result["background"] = background?.map { $0.toDictionary() } result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["height"] = height.toDictionary() diff --git a/DivKit/generated_sources/DivIndicatorTemplate.swift b/DivKit/generated_sources/DivIndicatorTemplate.swift index 92bd9c25..c6bffc21 100644 --- a/DivKit/generated_sources/DivIndicatorTemplate.swift +++ b/DivKit/generated_sources/DivIndicatorTemplate.swift @@ -20,6 +20,7 @@ public final class DivIndicatorTemplate: TemplateValue { public let background: Field<[DivBackgroundTemplate]>? // at least 1 elements public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let height: Field? // default value: .divWrapContentSize(DivWrapContentSize()) @@ -64,6 +65,7 @@ public final class DivIndicatorTemplate: TemplateValue { background: try dictionary.getOptionalArray("background", templateToType: templateToType), border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), height: try dictionary.getOptionalField("height", templateToType: templateToType), @@ -106,6 +108,7 @@ public final class DivIndicatorTemplate: TemplateValue { background: Field<[DivBackgroundTemplate]>? = nil, border: Field? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, height: Field? = nil, @@ -145,6 +148,7 @@ public final class DivIndicatorTemplate: TemplateValue { self.background = background self.border = border self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height @@ -185,6 +189,7 @@ public final class DivIndicatorTemplate: TemplateValue { let backgroundValue = parent?.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true) ?? .noValue let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let heightValue = parent?.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true) ?? .noValue @@ -223,6 +228,7 @@ public final class DivIndicatorTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -262,6 +268,7 @@ public final class DivIndicatorTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -307,6 +314,7 @@ public final class DivIndicatorTemplate: TemplateValue { var backgroundValue: DeserializationResult<[DivBackground]> = .noValue var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var heightValue: DeserializationResult = .noValue @@ -357,6 +365,8 @@ public final class DivIndicatorTemplate: TemplateValue { borderValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self).merged(with: borderValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -431,6 +441,8 @@ public final class DivIndicatorTemplate: TemplateValue { borderValue = borderValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -491,6 +503,7 @@ public final class DivIndicatorTemplate: TemplateValue { activeShapeValue = activeShapeValue.merged(with: parent.activeShape?.resolveOptionalValue(context: context, validator: ResolvedValue.activeShapeValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -523,6 +536,7 @@ public final class DivIndicatorTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -562,6 +576,7 @@ public final class DivIndicatorTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -612,6 +627,7 @@ public final class DivIndicatorTemplate: TemplateValue { background: background ?? mergedParent.background, border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, height: height ?? mergedParent.height, @@ -657,6 +673,7 @@ public final class DivIndicatorTemplate: TemplateValue { background: merged.background?.tryResolveParent(templates: templates), border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), height: merged.height?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivInput.swift b/DivKit/generated_sources/DivInput.swift index 314b6504..f431fea1 100644 --- a/DivKit/generated_sources/DivInput.swift +++ b/DivKit/generated_sources/DivInput.swift @@ -37,6 +37,7 @@ public final class DivInput: DivBase { public let background: [DivBackground]? // at least 1 elements public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let fontFamily: Expression // default value: text @@ -170,6 +171,9 @@ public final class DivInput: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -280,6 +284,7 @@ public final class DivInput: DivBase { background: [DivBackground]? = nil, border: DivBorder? = nil, columnSpan: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, fontFamily: Expression? = nil, @@ -323,6 +328,7 @@ public final class DivInput: DivBase { self.background = background self.border = border ?? DivBorder() self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.fontFamily = fontFamily ?? .value(.text) @@ -380,84 +386,89 @@ extension DivInput: Equatable { } guard lhs.columnSpan == rhs.columnSpan, - lhs.extensions == rhs.extensions, - lhs.focus == rhs.focus + lhs.disappearActions == rhs.disappearActions, + lhs.extensions == rhs.extensions else { return false } guard + lhs.focus == rhs.focus, lhs.fontFamily == rhs.fontFamily, - lhs.fontSize == rhs.fontSize, - lhs.fontSizeUnit == rhs.fontSizeUnit + lhs.fontSize == rhs.fontSize else { return false } guard + lhs.fontSizeUnit == rhs.fontSizeUnit, lhs.fontWeight == rhs.fontWeight, - lhs.height == rhs.height, - lhs.highlightColor == rhs.highlightColor + lhs.height == rhs.height else { return false } guard + lhs.highlightColor == rhs.highlightColor, lhs.hintColor == rhs.hintColor, - lhs.hintText == rhs.hintText, - lhs.id == rhs.id + lhs.hintText == rhs.hintText else { return false } guard + lhs.id == rhs.id, lhs.keyboardType == rhs.keyboardType, - lhs.letterSpacing == rhs.letterSpacing, - lhs.lineHeight == rhs.lineHeight + lhs.letterSpacing == rhs.letterSpacing else { return false } guard + lhs.lineHeight == rhs.lineHeight, lhs.margins == rhs.margins, - lhs.mask == rhs.mask, - lhs.maxVisibleLines == rhs.maxVisibleLines + lhs.mask == rhs.mask else { return false } guard + lhs.maxVisibleLines == rhs.maxVisibleLines, lhs.nativeInterface == rhs.nativeInterface, - lhs.paddings == rhs.paddings, - lhs.rowSpan == rhs.rowSpan + lhs.paddings == rhs.paddings else { return false } guard + lhs.rowSpan == rhs.rowSpan, lhs.selectAllOnFocus == rhs.selectAllOnFocus, - lhs.selectedActions == rhs.selectedActions, - lhs.textColor == rhs.textColor + lhs.selectedActions == rhs.selectedActions else { return false } guard + lhs.textColor == rhs.textColor, lhs.textVariable == rhs.textVariable, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.validators == rhs.validators, - lhs.visibility == rhs.visibility + lhs.validators == rhs.validators else { return false } guard + lhs.visibility == rhs.visibility, lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions, + lhs.visibilityActions == rhs.visibilityActions + else { + return false + } + guard lhs.width == rhs.width else { return false @@ -478,6 +489,7 @@ extension DivInput: Serializable { result["background"] = background?.map { $0.toDictionary() } result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["font_family"] = fontFamily.toValidSerializationValue() diff --git a/DivKit/generated_sources/DivInputTemplate.swift b/DivKit/generated_sources/DivInputTemplate.swift index 147da8b6..7bfa1281 100644 --- a/DivKit/generated_sources/DivInputTemplate.swift +++ b/DivKit/generated_sources/DivInputTemplate.swift @@ -94,6 +94,7 @@ public final class DivInputTemplate: TemplateValue { public let background: Field<[DivBackgroundTemplate]>? // at least 1 elements public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let fontFamily: Field>? // default value: text @@ -144,6 +145,7 @@ public final class DivInputTemplate: TemplateValue { background: try dictionary.getOptionalArray("background", templateToType: templateToType), border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), fontFamily: try dictionary.getOptionalExpressionField("font_family"), @@ -194,6 +196,7 @@ public final class DivInputTemplate: TemplateValue { background: Field<[DivBackgroundTemplate]>? = nil, border: Field? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, fontFamily: Field>? = nil, @@ -238,6 +241,7 @@ public final class DivInputTemplate: TemplateValue { self.background = background self.border = border self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.fontFamily = fontFamily @@ -283,6 +287,7 @@ public final class DivInputTemplate: TemplateValue { let backgroundValue = parent?.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true) ?? .noValue let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let fontFamilyValue = parent?.fontFamily?.resolveOptionalValue(context: context, validator: ResolvedValue.fontFamilyValidator) ?? .noValue @@ -326,6 +331,7 @@ public final class DivInputTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, fontFamilyValue.errorsOrWarnings?.map { .nestedObjectError(field: "font_family", error: $0) }, @@ -378,6 +384,7 @@ public final class DivInputTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, fontFamily: fontFamilyValue.value, @@ -428,6 +435,7 @@ public final class DivInputTemplate: TemplateValue { var backgroundValue: DeserializationResult<[DivBackground]> = .noValue var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var fontFamilyValue: DeserializationResult> = parent?.fontFamily?.value() ?? .noValue @@ -479,6 +487,8 @@ public final class DivInputTemplate: TemplateValue { borderValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self).merged(with: borderValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -563,6 +573,8 @@ public final class DivInputTemplate: TemplateValue { borderValue = borderValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -640,6 +652,7 @@ public final class DivInputTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -666,6 +679,7 @@ public final class DivInputTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, fontFamilyValue.errorsOrWarnings?.map { .nestedObjectError(field: "font_family", error: $0) }, @@ -718,6 +732,7 @@ public final class DivInputTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, fontFamily: fontFamilyValue.value, @@ -773,6 +788,7 @@ public final class DivInputTemplate: TemplateValue { background: background ?? mergedParent.background, border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, fontFamily: fontFamily ?? mergedParent.fontFamily, @@ -823,6 +839,7 @@ public final class DivInputTemplate: TemplateValue { background: merged.background?.tryResolveParent(templates: templates), border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), fontFamily: merged.fontFamily, diff --git a/DivKit/generated_sources/DivPager.swift b/DivKit/generated_sources/DivPager.swift index 0c10ac4e..bb2d6f71 100644 --- a/DivKit/generated_sources/DivPager.swift +++ b/DivKit/generated_sources/DivPager.swift @@ -20,6 +20,7 @@ public final class DivPager: DivBase { public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 public let defaultItem: Expression // constraint: number >= 0; default value: 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let height: DivSize // default value: .divWrapContentSize(DivWrapContentSize()) @@ -104,6 +105,9 @@ public final class DivPager: DivBase { static let defaultItemValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -179,6 +183,7 @@ public final class DivPager: DivBase { border: DivBorder?, columnSpan: Expression?, defaultItem: Expression?, + disappearActions: [DivDisappearAction]?, extensions: [DivExtension]?, focus: DivFocus?, height: DivSize?, @@ -211,6 +216,7 @@ public final class DivPager: DivBase { self.border = border ?? DivBorder() self.columnSpan = columnSpan self.defaultItem = defaultItem ?? .value(0) + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height ?? .divWrapContentSize(DivWrapContentSize()) @@ -257,60 +263,61 @@ extension DivPager: Equatable { guard lhs.columnSpan == rhs.columnSpan, lhs.defaultItem == rhs.defaultItem, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.height == rhs.height, - lhs.id == rhs.id + lhs.height == rhs.height else { return false } guard + lhs.id == rhs.id, lhs.itemSpacing == rhs.itemSpacing, - lhs.items == rhs.items, - lhs.layoutMode == rhs.layoutMode + lhs.items == rhs.items else { return false } guard + lhs.layoutMode == rhs.layoutMode, lhs.margins == rhs.margins, - lhs.orientation == rhs.orientation, - lhs.paddings == rhs.paddings + lhs.orientation == rhs.orientation else { return false } guard + lhs.paddings == rhs.paddings, lhs.restrictParentScroll == rhs.restrictParentScroll, - lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange + lhs.transform == rhs.transform else { return false } guard + lhs.transitionChange == rhs.transitionChange, lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers + lhs.transitionOut == rhs.transitionOut else { return false } guard + lhs.transitionTriggers == rhs.transitionTriggers, lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions + lhs.visibilityAction == rhs.visibilityAction else { return false } guard + lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { return false @@ -332,6 +339,7 @@ extension DivPager: Serializable { result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() result["default_item"] = defaultItem.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["height"] = height.toDictionary() diff --git a/DivKit/generated_sources/DivPagerTemplate.swift b/DivKit/generated_sources/DivPagerTemplate.swift index 4d6de27f..4e8c7971 100644 --- a/DivKit/generated_sources/DivPagerTemplate.swift +++ b/DivKit/generated_sources/DivPagerTemplate.swift @@ -17,6 +17,7 @@ public final class DivPagerTemplate: TemplateValue { public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 public let defaultItem: Field>? // constraint: number >= 0; default value: 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let height: Field? // default value: .divWrapContentSize(DivWrapContentSize()) @@ -56,6 +57,7 @@ public final class DivPagerTemplate: TemplateValue { border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), defaultItem: try dictionary.getOptionalExpressionField("default_item"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), height: try dictionary.getOptionalField("height", templateToType: templateToType), @@ -95,6 +97,7 @@ public final class DivPagerTemplate: TemplateValue { border: Field? = nil, columnSpan: Field>? = nil, defaultItem: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, height: Field? = nil, @@ -128,6 +131,7 @@ public final class DivPagerTemplate: TemplateValue { self.border = border self.columnSpan = columnSpan self.defaultItem = defaultItem + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height @@ -162,6 +166,7 @@ public final class DivPagerTemplate: TemplateValue { let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let defaultItemValue = parent?.defaultItem?.resolveOptionalValue(context: context, validator: ResolvedValue.defaultItemValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let heightValue = parent?.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true) ?? .noValue @@ -194,6 +199,7 @@ public final class DivPagerTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, defaultItemValue.errorsOrWarnings?.map { .nestedObjectError(field: "default_item", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -239,6 +245,7 @@ public final class DivPagerTemplate: TemplateValue { border: borderValue.value, columnSpan: columnSpanValue.value, defaultItem: defaultItemValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -278,6 +285,7 @@ public final class DivPagerTemplate: TemplateValue { var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var defaultItemValue: DeserializationResult> = parent?.defaultItem?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var heightValue: DeserializationResult = .noValue @@ -319,6 +327,8 @@ public final class DivPagerTemplate: TemplateValue { columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) case "default_item": defaultItemValue = deserialize(__dictValue, validator: ResolvedValue.defaultItemValidator).merged(with: defaultItemValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -381,6 +391,8 @@ public final class DivPagerTemplate: TemplateValue { columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) case parent?.defaultItem?.link: defaultItemValue = defaultItemValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.defaultItemValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -434,6 +446,7 @@ public final class DivPagerTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -461,6 +474,7 @@ public final class DivPagerTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, defaultItemValue.errorsOrWarnings?.map { .nestedObjectError(field: "default_item", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -506,6 +520,7 @@ public final class DivPagerTemplate: TemplateValue { border: borderValue.value, columnSpan: columnSpanValue.value, defaultItem: defaultItemValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -550,6 +565,7 @@ public final class DivPagerTemplate: TemplateValue { border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, defaultItem: defaultItem ?? mergedParent.defaultItem, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, height: height ?? mergedParent.height, @@ -589,6 +605,7 @@ public final class DivPagerTemplate: TemplateValue { border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, defaultItem: merged.defaultItem, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), height: merged.height?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivSelect.swift b/DivKit/generated_sources/DivSelect.swift index 198e1cdd..482e0806 100644 --- a/DivKit/generated_sources/DivSelect.swift +++ b/DivKit/generated_sources/DivSelect.swift @@ -37,6 +37,7 @@ public final class DivSelect: DivBase { public let background: [DivBackground]? // at least 1 elements public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let fontFamily: Expression // default value: text @@ -148,6 +149,9 @@ public final class DivSelect: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -240,6 +244,7 @@ public final class DivSelect: DivBase { background: [DivBackground]? = nil, border: DivBorder? = nil, columnSpan: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, fontFamily: Expression? = nil, @@ -277,6 +282,7 @@ public final class DivSelect: DivBase { self.background = background self.border = border ?? DivBorder() self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.fontFamily = fontFamily ?? .value(.text) @@ -328,70 +334,75 @@ extension DivSelect: Equatable { } guard lhs.columnSpan == rhs.columnSpan, - lhs.extensions == rhs.extensions, - lhs.focus == rhs.focus + lhs.disappearActions == rhs.disappearActions, + lhs.extensions == rhs.extensions else { return false } guard + lhs.focus == rhs.focus, lhs.fontFamily == rhs.fontFamily, - lhs.fontSize == rhs.fontSize, - lhs.fontSizeUnit == rhs.fontSizeUnit + lhs.fontSize == rhs.fontSize else { return false } guard + lhs.fontSizeUnit == rhs.fontSizeUnit, lhs.fontWeight == rhs.fontWeight, - lhs.height == rhs.height, - lhs.hintColor == rhs.hintColor + lhs.height == rhs.height else { return false } guard + lhs.hintColor == rhs.hintColor, lhs.hintText == rhs.hintText, - lhs.id == rhs.id, - lhs.letterSpacing == rhs.letterSpacing + lhs.id == rhs.id else { return false } guard + lhs.letterSpacing == rhs.letterSpacing, lhs.lineHeight == rhs.lineHeight, - lhs.margins == rhs.margins, - lhs.options == rhs.options + lhs.margins == rhs.margins else { return false } guard + lhs.options == rhs.options, lhs.paddings == rhs.paddings, - lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.textColor == rhs.textColor, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.valueVariable == rhs.valueVariable, - lhs.visibility == rhs.visibility + lhs.valueVariable == rhs.valueVariable else { return false } guard + lhs.visibility == rhs.visibility, lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions, + lhs.visibilityActions == rhs.visibilityActions + else { + return false + } + guard lhs.width == rhs.width else { return false @@ -412,6 +423,7 @@ extension DivSelect: Serializable { result["background"] = background?.map { $0.toDictionary() } result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["font_family"] = fontFamily.toValidSerializationValue() diff --git a/DivKit/generated_sources/DivSelectTemplate.swift b/DivKit/generated_sources/DivSelectTemplate.swift index d32906e8..2af1ac55 100644 --- a/DivKit/generated_sources/DivSelectTemplate.swift +++ b/DivKit/generated_sources/DivSelectTemplate.swift @@ -106,6 +106,7 @@ public final class DivSelectTemplate: TemplateValue { public let background: Field<[DivBackgroundTemplate]>? // at least 1 elements public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let fontFamily: Field>? // default value: text @@ -150,6 +151,7 @@ public final class DivSelectTemplate: TemplateValue { background: try dictionary.getOptionalArray("background", templateToType: templateToType), border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), fontFamily: try dictionary.getOptionalExpressionField("font_family"), @@ -194,6 +196,7 @@ public final class DivSelectTemplate: TemplateValue { background: Field<[DivBackgroundTemplate]>? = nil, border: Field? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, fontFamily: Field>? = nil, @@ -232,6 +235,7 @@ public final class DivSelectTemplate: TemplateValue { self.background = background self.border = border self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.fontFamily = fontFamily @@ -271,6 +275,7 @@ public final class DivSelectTemplate: TemplateValue { let backgroundValue = parent?.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true) ?? .noValue let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let fontFamilyValue = parent?.fontFamily?.resolveOptionalValue(context: context, validator: ResolvedValue.fontFamilyValidator) ?? .noValue @@ -308,6 +313,7 @@ public final class DivSelectTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, fontFamilyValue.errorsOrWarnings?.map { .nestedObjectError(field: "font_family", error: $0) }, @@ -358,6 +364,7 @@ public final class DivSelectTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, fontFamily: fontFamilyValue.value, @@ -402,6 +409,7 @@ public final class DivSelectTemplate: TemplateValue { var backgroundValue: DeserializationResult<[DivBackground]> = .noValue var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var fontFamilyValue: DeserializationResult> = parent?.fontFamily?.value() ?? .noValue @@ -447,6 +455,8 @@ public final class DivSelectTemplate: TemplateValue { borderValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self).merged(with: borderValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -519,6 +529,8 @@ public final class DivSelectTemplate: TemplateValue { borderValue = borderValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -584,6 +596,7 @@ public final class DivSelectTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -608,6 +621,7 @@ public final class DivSelectTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, fontFamilyValue.errorsOrWarnings?.map { .nestedObjectError(field: "font_family", error: $0) }, @@ -658,6 +672,7 @@ public final class DivSelectTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, fontFamily: fontFamilyValue.value, @@ -707,6 +722,7 @@ public final class DivSelectTemplate: TemplateValue { background: background ?? mergedParent.background, border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, fontFamily: fontFamily ?? mergedParent.fontFamily, @@ -751,6 +767,7 @@ public final class DivSelectTemplate: TemplateValue { background: merged.background?.tryResolveParent(templates: templates), border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), fontFamily: merged.fontFamily, diff --git a/DivKit/generated_sources/DivSeparator.swift b/DivKit/generated_sources/DivSeparator.swift index fcc7c433..d3f8e688 100644 --- a/DivKit/generated_sources/DivSeparator.swift +++ b/DivKit/generated_sources/DivSeparator.swift @@ -50,6 +50,7 @@ public final class DivSeparator: DivBase { public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 public let delimiterStyle: DelimiterStyle + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let doubletapActions: [DivAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? @@ -128,6 +129,9 @@ public final class DivSeparator: DivBase { static let delimiterStyleValidator: AnyValueValidator = makeNoOpValueValidator() + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let doubletapActionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -200,6 +204,7 @@ public final class DivSeparator: DivBase { border: DivBorder? = nil, columnSpan: Expression? = nil, delimiterStyle: DelimiterStyle? = nil, + disappearActions: [DivDisappearAction]? = nil, doubletapActions: [DivAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, @@ -232,6 +237,7 @@ public final class DivSeparator: DivBase { self.border = border ?? DivBorder() self.columnSpan = columnSpan self.delimiterStyle = delimiterStyle ?? DivSeparator.DelimiterStyle() + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -282,53 +288,54 @@ extension DivSeparator: Equatable { guard lhs.columnSpan == rhs.columnSpan, lhs.delimiterStyle == rhs.delimiterStyle, - lhs.doubletapActions == rhs.doubletapActions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.doubletapActions == rhs.doubletapActions, lhs.extensions == rhs.extensions, - lhs.focus == rhs.focus, - lhs.height == rhs.height + lhs.focus == rhs.focus else { return false } guard + lhs.height == rhs.height, lhs.id == rhs.id, - lhs.longtapActions == rhs.longtapActions, - lhs.margins == rhs.margins + lhs.longtapActions == rhs.longtapActions else { return false } guard + lhs.margins == rhs.margins, lhs.paddings == rhs.paddings, - lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionChange == rhs.transitionChange + lhs.transform == rhs.transform else { return false } guard + lhs.transitionChange == rhs.transitionChange, lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut, - lhs.transitionTriggers == rhs.transitionTriggers + lhs.transitionOut == rhs.transitionOut else { return false } guard + lhs.transitionTriggers == rhs.transitionTriggers, lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions + lhs.visibilityAction == rhs.visibilityAction else { return false } guard + lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { return false @@ -353,6 +360,7 @@ extension DivSeparator: Serializable { result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() result["delimiter_style"] = delimiterStyle.toDictionary() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["doubletap_actions"] = doubletapActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() diff --git a/DivKit/generated_sources/DivSeparatorTemplate.swift b/DivKit/generated_sources/DivSeparatorTemplate.swift index b2cf74be..26db821b 100644 --- a/DivKit/generated_sources/DivSeparatorTemplate.swift +++ b/DivKit/generated_sources/DivSeparatorTemplate.swift @@ -92,6 +92,7 @@ public final class DivSeparatorTemplate: TemplateValue { public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 public let delimiterStyle: Field? + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let doubletapActions: Field<[DivActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? @@ -130,6 +131,7 @@ public final class DivSeparatorTemplate: TemplateValue { border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), delimiterStyle: try dictionary.getOptionalField("delimiter_style", templateToType: templateToType), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), doubletapActions: try dictionary.getOptionalArray("doubletap_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), @@ -166,6 +168,7 @@ public final class DivSeparatorTemplate: TemplateValue { border: Field? = nil, columnSpan: Field>? = nil, delimiterStyle: Field? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, doubletapActions: Field<[DivActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, @@ -199,6 +202,7 @@ public final class DivSeparatorTemplate: TemplateValue { self.border = border self.columnSpan = columnSpan self.delimiterStyle = delimiterStyle + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.extensions = extensions self.focus = focus @@ -233,6 +237,7 @@ public final class DivSeparatorTemplate: TemplateValue { let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let delimiterStyleValue = parent?.delimiterStyle?.resolveOptionalValue(context: context, validator: ResolvedValue.delimiterStyleValidator, useOnlyLinks: true) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let doubletapActionsValue = parent?.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue @@ -265,6 +270,7 @@ public final class DivSeparatorTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, delimiterStyleValue.errorsOrWarnings?.map { .nestedObjectError(field: "delimiter_style", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -298,6 +304,7 @@ public final class DivSeparatorTemplate: TemplateValue { border: borderValue.value, columnSpan: columnSpanValue.value, delimiterStyle: delimiterStyleValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -337,6 +344,7 @@ public final class DivSeparatorTemplate: TemplateValue { var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var delimiterStyleValue: DeserializationResult = .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var doubletapActionsValue: DeserializationResult<[DivAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue @@ -381,6 +389,8 @@ public final class DivSeparatorTemplate: TemplateValue { columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) case "delimiter_style": delimiterStyleValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.delimiterStyleValidator, type: DivSeparatorTemplate.DelimiterStyleTemplate.self).merged(with: delimiterStyleValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "doubletap_actions": doubletapActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self).merged(with: doubletapActionsValue) case "extensions": @@ -443,6 +453,8 @@ public final class DivSeparatorTemplate: TemplateValue { columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) case parent?.delimiterStyle?.link: delimiterStyleValue = delimiterStyleValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.delimiterStyleValidator, type: DivSeparatorTemplate.DelimiterStyleTemplate.self)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.doubletapActions?.link: doubletapActionsValue = doubletapActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self)) case parent?.extensions?.link: @@ -494,6 +506,7 @@ public final class DivSeparatorTemplate: TemplateValue { backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) delimiterStyleValue = delimiterStyleValue.merged(with: parent.delimiterStyle?.resolveOptionalValue(context: context, validator: ResolvedValue.delimiterStyleValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) doubletapActionsValue = doubletapActionsValue.merged(with: parent.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) @@ -523,6 +536,7 @@ public final class DivSeparatorTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, delimiterStyleValue.errorsOrWarnings?.map { .nestedObjectError(field: "delimiter_style", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -556,6 +570,7 @@ public final class DivSeparatorTemplate: TemplateValue { border: borderValue.value, columnSpan: columnSpanValue.value, delimiterStyle: delimiterStyleValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -600,6 +615,7 @@ public final class DivSeparatorTemplate: TemplateValue { border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, delimiterStyle: delimiterStyle ?? mergedParent.delimiterStyle, + disappearActions: disappearActions ?? mergedParent.disappearActions, doubletapActions: doubletapActions ?? mergedParent.doubletapActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, @@ -639,6 +655,7 @@ public final class DivSeparatorTemplate: TemplateValue { border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, delimiterStyle: merged.delimiterStyle?.tryResolveParent(templates: templates), + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), doubletapActions: merged.doubletapActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivSlider.swift b/DivKit/generated_sources/DivSlider.swift index cf219e83..2ba0dd27 100644 --- a/DivKit/generated_sources/DivSlider.swift +++ b/DivKit/generated_sources/DivSlider.swift @@ -66,6 +66,7 @@ public final class DivSlider: DivBase { public let background: [DivBackground]? // at least 1 elements public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? public let height: DivSize // default value: .divWrapContentSize(DivWrapContentSize()) @@ -151,6 +152,9 @@ public final class DivSlider: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let extensionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -237,6 +241,7 @@ public final class DivSlider: DivBase { background: [DivBackground]? = nil, border: DivBorder? = nil, columnSpan: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, extensions: [DivExtension]? = nil, focus: DivFocus? = nil, height: DivSize? = nil, @@ -276,6 +281,7 @@ public final class DivSlider: DivBase { self.background = background self.border = border ?? DivBorder() self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height ?? .divWrapContentSize(DivWrapContentSize()) @@ -329,75 +335,76 @@ extension DivSlider: Equatable { } guard lhs.columnSpan == rhs.columnSpan, - lhs.extensions == rhs.extensions, - lhs.focus == rhs.focus + lhs.disappearActions == rhs.disappearActions, + lhs.extensions == rhs.extensions else { return false } guard + lhs.focus == rhs.focus, lhs.height == rhs.height, - lhs.id == rhs.id, - lhs.margins == rhs.margins + lhs.id == rhs.id else { return false } guard + lhs.margins == rhs.margins, lhs.maxValue == rhs.maxValue, - lhs.minValue == rhs.minValue, - lhs.paddings == rhs.paddings + lhs.minValue == rhs.minValue else { return false } guard + lhs.paddings == rhs.paddings, lhs.rowSpan == rhs.rowSpan, - lhs.secondaryValueAccessibility == rhs.secondaryValueAccessibility, - lhs.selectedActions == rhs.selectedActions + lhs.secondaryValueAccessibility == rhs.secondaryValueAccessibility else { return false } guard + lhs.selectedActions == rhs.selectedActions, lhs.thumbSecondaryStyle == rhs.thumbSecondaryStyle, - lhs.thumbSecondaryTextStyle == rhs.thumbSecondaryTextStyle, - lhs.thumbSecondaryValueVariable == rhs.thumbSecondaryValueVariable + lhs.thumbSecondaryTextStyle == rhs.thumbSecondaryTextStyle else { return false } guard + lhs.thumbSecondaryValueVariable == rhs.thumbSecondaryValueVariable, lhs.thumbStyle == rhs.thumbStyle, - lhs.thumbTextStyle == rhs.thumbTextStyle, - lhs.thumbValueVariable == rhs.thumbValueVariable + lhs.thumbTextStyle == rhs.thumbTextStyle else { return false } guard + lhs.thumbValueVariable == rhs.thumbValueVariable, lhs.tickMarkActiveStyle == rhs.tickMarkActiveStyle, - lhs.tickMarkInactiveStyle == rhs.tickMarkInactiveStyle, - lhs.tooltips == rhs.tooltips + lhs.tickMarkInactiveStyle == rhs.tickMarkInactiveStyle else { return false } guard + lhs.tooltips == rhs.tooltips, lhs.trackActiveStyle == rhs.trackActiveStyle, - lhs.trackInactiveStyle == rhs.trackInactiveStyle, - lhs.transform == rhs.transform + lhs.trackInactiveStyle == rhs.trackInactiveStyle else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction + lhs.visibility == rhs.visibility else { return false } guard + lhs.visibilityAction == rhs.visibilityAction, lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { @@ -419,6 +426,7 @@ extension DivSlider: Serializable { result["background"] = background?.map { $0.toDictionary() } result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() result["height"] = height.toDictionary() diff --git a/DivKit/generated_sources/DivSliderTemplate.swift b/DivKit/generated_sources/DivSliderTemplate.swift index 6e41ec69..ca17a335 100644 --- a/DivKit/generated_sources/DivSliderTemplate.swift +++ b/DivKit/generated_sources/DivSliderTemplate.swift @@ -159,6 +159,7 @@ public final class DivSliderTemplate: TemplateValue { public let background: Field<[DivBackgroundTemplate]>? // at least 1 elements public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? public let height: Field? // default value: .divWrapContentSize(DivWrapContentSize()) @@ -205,6 +206,7 @@ public final class DivSliderTemplate: TemplateValue { background: try dictionary.getOptionalArray("background", templateToType: templateToType), border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), height: try dictionary.getOptionalField("height", templateToType: templateToType), @@ -251,6 +253,7 @@ public final class DivSliderTemplate: TemplateValue { background: Field<[DivBackgroundTemplate]>? = nil, border: Field? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, height: Field? = nil, @@ -291,6 +294,7 @@ public final class DivSliderTemplate: TemplateValue { self.background = background self.border = border self.columnSpan = columnSpan + self.disappearActions = disappearActions self.extensions = extensions self.focus = focus self.height = height @@ -332,6 +336,7 @@ public final class DivSliderTemplate: TemplateValue { let backgroundValue = parent?.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true) ?? .noValue let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue let heightValue = parent?.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true) ?? .noValue @@ -371,6 +376,7 @@ public final class DivSliderTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -427,6 +433,7 @@ public final class DivSliderTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -473,6 +480,7 @@ public final class DivSliderTemplate: TemplateValue { var backgroundValue: DeserializationResult<[DivBackground]> = .noValue var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue var heightValue: DeserializationResult = .noValue @@ -520,6 +528,8 @@ public final class DivSliderTemplate: TemplateValue { borderValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self).merged(with: borderValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "extensions": extensionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self).merged(with: extensionsValue) case "focus": @@ -596,6 +606,8 @@ public final class DivSliderTemplate: TemplateValue { borderValue = borderValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.extensions?.link: extensionsValue = extensionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.extensionsValidator, type: DivExtensionTemplate.self)) case parent?.focus?.link: @@ -665,6 +677,7 @@ public final class DivSliderTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -697,6 +710,7 @@ public final class DivSliderTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, heightValue.errorsOrWarnings?.map { .nestedObjectError(field: "height", error: $0) }, @@ -753,6 +767,7 @@ public final class DivSliderTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, extensions: extensionsValue.value, focus: focusValue.value, height: heightValue.value, @@ -804,6 +819,7 @@ public final class DivSliderTemplate: TemplateValue { background: background ?? mergedParent.background, border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, height: height ?? mergedParent.height, @@ -850,6 +866,7 @@ public final class DivSliderTemplate: TemplateValue { background: merged.background?.tryResolveParent(templates: templates), border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), height: merged.height?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivState.swift b/DivKit/generated_sources/DivState.swift index 9104fad7..4dc9eb70 100644 --- a/DivKit/generated_sources/DivState.swift +++ b/DivKit/generated_sources/DivState.swift @@ -48,6 +48,7 @@ public final class DivState: DivBase { public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 public let defaultStateId: Expression? + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let divId: String? public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? @@ -126,6 +127,9 @@ public final class DivState: DivBase { static let defaultStateIdValidator: AnyValueValidator = makeStringValidator(minLength: 1) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let divIdValidator: AnyValueValidator = makeStringValidator(minLength: 1) @@ -198,6 +202,7 @@ public final class DivState: DivBase { border: DivBorder?, columnSpan: Expression?, defaultStateId: Expression?, + disappearActions: [DivDisappearAction]?, divId: String?, extensions: [DivExtension]?, focus: DivFocus?, @@ -228,6 +233,7 @@ public final class DivState: DivBase { self.border = border ?? DivBorder() self.columnSpan = columnSpan self.defaultStateId = defaultStateId + self.disappearActions = disappearActions self.divId = divId self.extensions = extensions self.focus = focus @@ -272,53 +278,54 @@ extension DivState: Equatable { guard lhs.columnSpan == rhs.columnSpan, lhs.defaultStateId == rhs.defaultStateId, - lhs.divId == rhs.divId + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.divId == rhs.divId, lhs.extensions == rhs.extensions, - lhs.focus == rhs.focus, - lhs.height == rhs.height + lhs.focus == rhs.focus else { return false } guard + lhs.height == rhs.height, lhs.id == rhs.id, - lhs.margins == rhs.margins, - lhs.paddings == rhs.paddings + lhs.margins == rhs.margins else { return false } guard + lhs.paddings == rhs.paddings, lhs.rowSpan == rhs.rowSpan, - lhs.selectedActions == rhs.selectedActions, - lhs.states == rhs.states + lhs.selectedActions == rhs.selectedActions else { return false } guard + lhs.states == rhs.states, lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform, - lhs.transitionAnimationSelector == rhs.transitionAnimationSelector + lhs.transform == rhs.transform else { return false } guard + lhs.transitionAnimationSelector == rhs.transitionAnimationSelector, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction + lhs.visibility == rhs.visibility else { return false } guard + lhs.visibilityAction == rhs.visibilityAction, lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { @@ -341,6 +348,7 @@ extension DivState: Serializable { result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() result["default_state_id"] = defaultStateId?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["div_id"] = divId result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() diff --git a/DivKit/generated_sources/DivStateTemplate.swift b/DivKit/generated_sources/DivStateTemplate.swift index d736ecda..de491e29 100644 --- a/DivKit/generated_sources/DivStateTemplate.swift +++ b/DivKit/generated_sources/DivStateTemplate.swift @@ -163,6 +163,7 @@ public final class DivStateTemplate: TemplateValue { public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 public let defaultStateId: Field>? + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let divId: Field? public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? @@ -200,6 +201,7 @@ public final class DivStateTemplate: TemplateValue { border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), defaultStateId: try dictionary.getOptionalExpressionField("default_state_id"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), divId: try dictionary.getOptionalField("div_id"), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), @@ -237,6 +239,7 @@ public final class DivStateTemplate: TemplateValue { border: Field? = nil, columnSpan: Field>? = nil, defaultStateId: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, divId: Field? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, @@ -268,6 +271,7 @@ public final class DivStateTemplate: TemplateValue { self.border = border self.columnSpan = columnSpan self.defaultStateId = defaultStateId + self.disappearActions = disappearActions self.divId = divId self.extensions = extensions self.focus = focus @@ -300,6 +304,7 @@ public final class DivStateTemplate: TemplateValue { let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue let defaultStateIdValue = parent?.defaultStateId?.resolveOptionalValue(context: context, validator: ResolvedValue.defaultStateIdValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let divIdValue = parent?.divId?.resolveOptionalValue(context: context, validator: ResolvedValue.divIdValidator) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue @@ -330,6 +335,7 @@ public final class DivStateTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, defaultStateIdValue.errorsOrWarnings?.map { .nestedObjectError(field: "default_state_id", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, divIdValue.errorsOrWarnings?.map { .nestedObjectError(field: "div_id", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -369,6 +375,7 @@ public final class DivStateTemplate: TemplateValue { border: borderValue.value, columnSpan: columnSpanValue.value, defaultStateId: defaultStateIdValue.value, + disappearActions: disappearActionsValue.value, divId: divIdValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -406,6 +413,7 @@ public final class DivStateTemplate: TemplateValue { var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue var defaultStateIdValue: DeserializationResult> = parent?.defaultStateId?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var divIdValue: DeserializationResult = parent?.divId?.value(validatedBy: ResolvedValue.divIdValidator) ?? .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue @@ -445,6 +453,8 @@ public final class DivStateTemplate: TemplateValue { columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) case "default_state_id": defaultStateIdValue = deserialize(__dictValue, validator: ResolvedValue.defaultStateIdValidator).merged(with: defaultStateIdValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "div_id": divIdValue = deserialize(__dictValue, validator: ResolvedValue.divIdValidator).merged(with: divIdValue) case "extensions": @@ -503,6 +513,8 @@ public final class DivStateTemplate: TemplateValue { columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) case parent?.defaultStateId?.link: defaultStateIdValue = defaultStateIdValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.defaultStateIdValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.divId?.link: divIdValue = divIdValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.divIdValidator)) case parent?.extensions?.link: @@ -552,6 +564,7 @@ public final class DivStateTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -577,6 +590,7 @@ public final class DivStateTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, defaultStateIdValue.errorsOrWarnings?.map { .nestedObjectError(field: "default_state_id", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, divIdValue.errorsOrWarnings?.map { .nestedObjectError(field: "div_id", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -616,6 +630,7 @@ public final class DivStateTemplate: TemplateValue { border: borderValue.value, columnSpan: columnSpanValue.value, defaultStateId: defaultStateIdValue.value, + disappearActions: disappearActionsValue.value, divId: divIdValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -658,6 +673,7 @@ public final class DivStateTemplate: TemplateValue { border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, defaultStateId: defaultStateId ?? mergedParent.defaultStateId, + disappearActions: disappearActions ?? mergedParent.disappearActions, divId: divId ?? mergedParent.divId, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, @@ -695,6 +711,7 @@ public final class DivStateTemplate: TemplateValue { border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, defaultStateId: merged.defaultStateId, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), divId: merged.divId, extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivTabs.swift b/DivKit/generated_sources/DivTabs.swift index b082480b..7dcc70db 100644 --- a/DivKit/generated_sources/DivTabs.swift +++ b/DivKit/generated_sources/DivTabs.swift @@ -222,6 +222,7 @@ public final class DivTabs: DivBase { public let background: [DivBackground]? // at least 1 elements public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let dynamicHeight: Expression // default value: false public let extensions: [DivExtension]? // at least 1 elements public let focus: DivFocus? @@ -320,6 +321,9 @@ public final class DivTabs: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let dynamicHeightValidator: AnyValueValidator = makeNoOpValueValidator() @@ -412,6 +416,7 @@ public final class DivTabs: DivBase { background: [DivBackground]?, border: DivBorder?, columnSpan: Expression?, + disappearActions: [DivDisappearAction]?, dynamicHeight: Expression?, extensions: [DivExtension]?, focus: DivFocus?, @@ -448,6 +453,7 @@ public final class DivTabs: DivBase { self.background = background self.border = border ?? DivBorder() self.columnSpan = columnSpan + self.disappearActions = disappearActions self.dynamicHeight = dynamicHeight ?? .value(false) self.extensions = extensions self.focus = focus @@ -498,68 +504,69 @@ extension DivTabs: Equatable { } guard lhs.columnSpan == rhs.columnSpan, - lhs.dynamicHeight == rhs.dynamicHeight, - lhs.extensions == rhs.extensions + lhs.disappearActions == rhs.disappearActions, + lhs.dynamicHeight == rhs.dynamicHeight else { return false } guard + lhs.extensions == rhs.extensions, lhs.focus == rhs.focus, - lhs.hasSeparator == rhs.hasSeparator, - lhs.height == rhs.height + lhs.hasSeparator == rhs.hasSeparator else { return false } guard + lhs.height == rhs.height, lhs.id == rhs.id, - lhs.items == rhs.items, - lhs.margins == rhs.margins + lhs.items == rhs.items else { return false } guard + lhs.margins == rhs.margins, lhs.paddings == rhs.paddings, - lhs.restrictParentScroll == rhs.restrictParentScroll, - lhs.rowSpan == rhs.rowSpan + lhs.restrictParentScroll == rhs.restrictParentScroll else { return false } guard + lhs.rowSpan == rhs.rowSpan, lhs.selectedActions == rhs.selectedActions, - lhs.selectedTab == rhs.selectedTab, - lhs.separatorColor == rhs.separatorColor + lhs.selectedTab == rhs.selectedTab else { return false } guard + lhs.separatorColor == rhs.separatorColor, lhs.separatorPaddings == rhs.separatorPaddings, - lhs.switchTabsByContentSwipeEnabled == rhs.switchTabsByContentSwipeEnabled, - lhs.tabTitleStyle == rhs.tabTitleStyle + lhs.switchTabsByContentSwipeEnabled == rhs.switchTabsByContentSwipeEnabled else { return false } guard + lhs.tabTitleStyle == rhs.tabTitleStyle, lhs.titlePaddings == rhs.titlePaddings, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.visibility == rhs.visibility, - lhs.visibilityAction == rhs.visibilityAction + lhs.visibility == rhs.visibility else { return false } guard + lhs.visibilityAction == rhs.visibilityAction, lhs.visibilityActions == rhs.visibilityActions, lhs.width == rhs.width else { @@ -581,6 +588,7 @@ extension DivTabs: Serializable { result["background"] = background?.map { $0.toDictionary() } result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["dynamic_height"] = dynamicHeight.toValidSerializationValue() result["extensions"] = extensions?.map { $0.toDictionary() } result["focus"] = focus?.toDictionary() diff --git a/DivKit/generated_sources/DivTabsTemplate.swift b/DivKit/generated_sources/DivTabsTemplate.swift index defd7042..df2261c8 100644 --- a/DivKit/generated_sources/DivTabsTemplate.swift +++ b/DivKit/generated_sources/DivTabsTemplate.swift @@ -461,6 +461,7 @@ public final class DivTabsTemplate: TemplateValue { public let background: Field<[DivBackgroundTemplate]>? // at least 1 elements public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let dynamicHeight: Field>? // default value: false public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements public let focus: Field? @@ -504,6 +505,7 @@ public final class DivTabsTemplate: TemplateValue { background: try dictionary.getOptionalArray("background", templateToType: templateToType), border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), dynamicHeight: try dictionary.getOptionalExpressionField("dynamic_height"), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), focus: try dictionary.getOptionalField("focus", templateToType: templateToType), @@ -547,6 +549,7 @@ public final class DivTabsTemplate: TemplateValue { background: Field<[DivBackgroundTemplate]>? = nil, border: Field? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, dynamicHeight: Field>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, focus: Field? = nil, @@ -584,6 +587,7 @@ public final class DivTabsTemplate: TemplateValue { self.background = background self.border = border self.columnSpan = columnSpan + self.disappearActions = disappearActions self.dynamicHeight = dynamicHeight self.extensions = extensions self.focus = focus @@ -622,6 +626,7 @@ public final class DivTabsTemplate: TemplateValue { let backgroundValue = parent?.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true) ?? .noValue let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let dynamicHeightValue = parent?.dynamicHeight?.resolveOptionalValue(context: context, validator: ResolvedValue.dynamicHeightValidator) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue let focusValue = parent?.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true) ?? .noValue @@ -658,6 +663,7 @@ public final class DivTabsTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, dynamicHeightValue.errorsOrWarnings?.map { .nestedObjectError(field: "dynamic_height", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -703,6 +709,7 @@ public final class DivTabsTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, dynamicHeight: dynamicHeightValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -746,6 +753,7 @@ public final class DivTabsTemplate: TemplateValue { var backgroundValue: DeserializationResult<[DivBackground]> = .noValue var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var dynamicHeightValue: DeserializationResult> = parent?.dynamicHeight?.value() ?? .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue var focusValue: DeserializationResult = .noValue @@ -790,6 +798,8 @@ public final class DivTabsTemplate: TemplateValue { borderValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self).merged(with: borderValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "dynamic_height": dynamicHeightValue = deserialize(__dictValue, validator: ResolvedValue.dynamicHeightValidator).merged(with: dynamicHeightValue) case "extensions": @@ -860,6 +870,8 @@ public final class DivTabsTemplate: TemplateValue { borderValue = borderValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.dynamicHeight?.link: dynamicHeightValue = dynamicHeightValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.dynamicHeightValidator)) case parent?.extensions?.link: @@ -923,6 +935,7 @@ public final class DivTabsTemplate: TemplateValue { accessibilityValue = accessibilityValue.merged(with: parent.accessibility?.resolveOptionalValue(context: context, validator: ResolvedValue.accessibilityValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) focusValue = focusValue.merged(with: parent.focus?.resolveOptionalValue(context: context, validator: ResolvedValue.focusValidator, useOnlyLinks: true)) heightValue = heightValue.merged(with: parent.height?.resolveOptionalValue(context: context, validator: ResolvedValue.heightValidator, useOnlyLinks: true)) @@ -950,6 +963,7 @@ public final class DivTabsTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, dynamicHeightValue.errorsOrWarnings?.map { .nestedObjectError(field: "dynamic_height", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, focusValue.errorsOrWarnings?.map { .nestedObjectError(field: "focus", error: $0) }, @@ -995,6 +1009,7 @@ public final class DivTabsTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, dynamicHeight: dynamicHeightValue.value, extensions: extensionsValue.value, focus: focusValue.value, @@ -1043,6 +1058,7 @@ public final class DivTabsTemplate: TemplateValue { background: background ?? mergedParent.background, border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, dynamicHeight: dynamicHeight ?? mergedParent.dynamicHeight, extensions: extensions ?? mergedParent.extensions, focus: focus ?? mergedParent.focus, @@ -1086,6 +1102,7 @@ public final class DivTabsTemplate: TemplateValue { background: merged.background?.tryResolveParent(templates: templates), border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), dynamicHeight: merged.dynamicHeight, extensions: merged.extensions?.tryResolveParent(templates: templates), focus: merged.focus?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivText.swift b/DivKit/generated_sources/DivText.swift index a281e995..e8472506 100644 --- a/DivKit/generated_sources/DivText.swift +++ b/DivKit/generated_sources/DivText.swift @@ -250,6 +250,7 @@ public final class DivText: DivBase { public let background: [DivBackground]? // at least 1 elements public let border: DivBorder public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let doubletapActions: [DivAction]? // at least 1 elements public let ellipsis: Ellipsis? public let extensions: [DivExtension]? // at least 1 elements @@ -416,6 +417,9 @@ public final class DivText: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let doubletapActionsValidator: AnyArrayValueValidator = makeArrayValidator(minItems: 1) @@ -545,6 +549,7 @@ public final class DivText: DivBase { background: [DivBackground]? = nil, border: DivBorder? = nil, columnSpan: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, doubletapActions: [DivAction]? = nil, ellipsis: Ellipsis? = nil, extensions: [DivExtension]? = nil, @@ -597,6 +602,7 @@ public final class DivText: DivBase { self.background = background self.border = border ?? DivBorder() self.columnSpan = columnSpan + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.ellipsis = ellipsis self.extensions = extensions @@ -667,97 +673,102 @@ extension DivText: Equatable { guard lhs.border == rhs.border, lhs.columnSpan == rhs.columnSpan, - lhs.doubletapActions == rhs.doubletapActions + lhs.disappearActions == rhs.disappearActions else { return false } guard + lhs.doubletapActions == rhs.doubletapActions, lhs.ellipsis == rhs.ellipsis, - lhs.extensions == rhs.extensions, - lhs.focus == rhs.focus + lhs.extensions == rhs.extensions else { return false } guard + lhs.focus == rhs.focus, lhs.focusedTextColor == rhs.focusedTextColor, - lhs.fontFamily == rhs.fontFamily, - lhs.fontSize == rhs.fontSize + lhs.fontFamily == rhs.fontFamily else { return false } guard + lhs.fontSize == rhs.fontSize, lhs.fontSizeUnit == rhs.fontSizeUnit, - lhs.fontWeight == rhs.fontWeight, - lhs.height == rhs.height + lhs.fontWeight == rhs.fontWeight else { return false } guard + lhs.height == rhs.height, lhs.id == rhs.id, - lhs.images == rhs.images, - lhs.letterSpacing == rhs.letterSpacing + lhs.images == rhs.images else { return false } guard + lhs.letterSpacing == rhs.letterSpacing, lhs.lineHeight == rhs.lineHeight, - lhs.longtapActions == rhs.longtapActions, - lhs.margins == rhs.margins + lhs.longtapActions == rhs.longtapActions else { return false } guard + lhs.margins == rhs.margins, lhs.maxLines == rhs.maxLines, - lhs.minHiddenLines == rhs.minHiddenLines, - lhs.paddings == rhs.paddings + lhs.minHiddenLines == rhs.minHiddenLines else { return false } guard + lhs.paddings == rhs.paddings, lhs.ranges == rhs.ranges, - lhs.rowSpan == rhs.rowSpan, - lhs.selectable == rhs.selectable + lhs.rowSpan == rhs.rowSpan else { return false } guard + lhs.selectable == rhs.selectable, lhs.selectedActions == rhs.selectedActions, - lhs.strike == rhs.strike, - lhs.text == rhs.text + lhs.strike == rhs.strike else { return false } guard + lhs.text == rhs.text, lhs.textAlignmentHorizontal == rhs.textAlignmentHorizontal, - lhs.textAlignmentVertical == rhs.textAlignmentVertical, - lhs.textColor == rhs.textColor + lhs.textAlignmentVertical == rhs.textAlignmentVertical else { return false } guard + lhs.textColor == rhs.textColor, lhs.textGradient == rhs.textGradient, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.underline == rhs.underline, - lhs.visibility == rhs.visibility + lhs.underline == rhs.underline else { return false } guard + lhs.visibility == rhs.visibility, lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions, + lhs.visibilityActions == rhs.visibilityActions + else { + return false + } + guard lhs.width == rhs.width else { return false @@ -782,6 +793,7 @@ extension DivText: Serializable { result["background"] = background?.map { $0.toDictionary() } result["border"] = border.toDictionary() result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["doubletap_actions"] = doubletapActions?.map { $0.toDictionary() } result["ellipsis"] = ellipsis?.toDictionary() result["extensions"] = extensions?.map { $0.toDictionary() } diff --git a/DivKit/generated_sources/DivTextTemplate.swift b/DivKit/generated_sources/DivTextTemplate.swift index 939a336d..fc77bf11 100644 --- a/DivKit/generated_sources/DivTextTemplate.swift +++ b/DivKit/generated_sources/DivTextTemplate.swift @@ -624,6 +624,7 @@ public final class DivTextTemplate: TemplateValue { public let background: Field<[DivBackgroundTemplate]>? // at least 1 elements public let border: Field? public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let doubletapActions: Field<[DivActionTemplate]>? // at least 1 elements public let ellipsis: Field? public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements @@ -683,6 +684,7 @@ public final class DivTextTemplate: TemplateValue { background: try dictionary.getOptionalArray("background", templateToType: templateToType), border: try dictionary.getOptionalField("border", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), doubletapActions: try dictionary.getOptionalArray("doubletap_actions", templateToType: templateToType), ellipsis: try dictionary.getOptionalField("ellipsis", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), @@ -742,6 +744,7 @@ public final class DivTextTemplate: TemplateValue { background: Field<[DivBackgroundTemplate]>? = nil, border: Field? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, doubletapActions: Field<[DivActionTemplate]>? = nil, ellipsis: Field? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, @@ -795,6 +798,7 @@ public final class DivTextTemplate: TemplateValue { self.background = background self.border = border self.columnSpan = columnSpan + self.disappearActions = disappearActions self.doubletapActions = doubletapActions self.ellipsis = ellipsis self.extensions = extensions @@ -849,6 +853,7 @@ public final class DivTextTemplate: TemplateValue { let backgroundValue = parent?.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true) ?? .noValue let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let doubletapActionsValue = parent?.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true) ?? .noValue let ellipsisValue = parent?.ellipsis?.resolveOptionalValue(context: context, validator: ResolvedValue.ellipsisValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue @@ -901,6 +906,7 @@ public final class DivTextTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, ellipsisValue.errorsOrWarnings?.map { .nestedObjectError(field: "ellipsis", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, @@ -962,6 +968,7 @@ public final class DivTextTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, ellipsis: ellipsisValue.value, extensions: extensionsValue.value, @@ -1021,6 +1028,7 @@ public final class DivTextTemplate: TemplateValue { var backgroundValue: DeserializationResult<[DivBackground]> = .noValue var borderValue: DeserializationResult = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var doubletapActionsValue: DeserializationResult<[DivAction]> = .noValue var ellipsisValue: DeserializationResult = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue @@ -1085,6 +1093,8 @@ public final class DivTextTemplate: TemplateValue { borderValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self).merged(with: borderValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "doubletap_actions": doubletapActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self).merged(with: doubletapActionsValue) case "ellipsis": @@ -1187,6 +1197,8 @@ public final class DivTextTemplate: TemplateValue { borderValue = borderValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.borderValidator, type: DivBorderTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.doubletapActions?.link: doubletapActionsValue = doubletapActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.doubletapActionsValidator, type: DivActionTemplate.self)) case parent?.ellipsis?.link: @@ -1277,6 +1289,7 @@ public final class DivTextTemplate: TemplateValue { actionsValue = actionsValue.merged(with: parent.actions?.resolveOptionalValue(context: context, validator: ResolvedValue.actionsValidator, useOnlyLinks: true)) backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) doubletapActionsValue = doubletapActionsValue.merged(with: parent.doubletapActions?.resolveOptionalValue(context: context, validator: ResolvedValue.doubletapActionsValidator, useOnlyLinks: true)) ellipsisValue = ellipsisValue.merged(with: parent.ellipsis?.resolveOptionalValue(context: context, validator: ResolvedValue.ellipsisValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) @@ -1310,6 +1323,7 @@ public final class DivTextTemplate: TemplateValue { backgroundValue.errorsOrWarnings?.map { .nestedObjectError(field: "background", error: $0) }, borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, doubletapActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "doubletap_actions", error: $0) }, ellipsisValue.errorsOrWarnings?.map { .nestedObjectError(field: "ellipsis", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, @@ -1371,6 +1385,7 @@ public final class DivTextTemplate: TemplateValue { background: backgroundValue.value, border: borderValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, doubletapActions: doubletapActionsValue.value, ellipsis: ellipsisValue.value, extensions: extensionsValue.value, @@ -1435,6 +1450,7 @@ public final class DivTextTemplate: TemplateValue { background: background ?? mergedParent.background, border: border ?? mergedParent.border, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, doubletapActions: doubletapActions ?? mergedParent.doubletapActions, ellipsis: ellipsis ?? mergedParent.ellipsis, extensions: extensions ?? mergedParent.extensions, @@ -1494,6 +1510,7 @@ public final class DivTextTemplate: TemplateValue { background: merged.background?.tryResolveParent(templates: templates), border: merged.border?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), doubletapActions: merged.doubletapActions?.tryResolveParent(templates: templates), ellipsis: merged.ellipsis?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), diff --git a/DivKit/generated_sources/DivVideo.swift b/DivKit/generated_sources/DivVideo.swift index feaa176a..5616845d 100644 --- a/DivKit/generated_sources/DivVideo.swift +++ b/DivKit/generated_sources/DivVideo.swift @@ -15,6 +15,7 @@ public final class DivVideo: DivBase { public let border: DivBorder public let bufferingActions: [DivAction]? // at least 1 elements public let columnSpan: Expression? // constraint: number >= 0 + public let disappearActions: [DivDisappearAction]? // at least 1 elements public let elapsedTimeVariable: String? // at least 1 char public let endActions: [DivAction]? // at least 1 elements public let extensions: [DivExtension]? // at least 1 elements @@ -111,6 +112,9 @@ public final class DivVideo: DivBase { static let columnSpanValidator: AnyValueValidator = makeValueValidator(valueValidator: { $0 >= 0 }) + static let disappearActionsValidator: AnyArrayValueValidator = + makeArrayValidator(minItems: 1) + static let elapsedTimeVariableValidator: AnyValueValidator = makeStringValidator(minLength: 1) @@ -205,6 +209,7 @@ public final class DivVideo: DivBase { border: DivBorder? = nil, bufferingActions: [DivAction]? = nil, columnSpan: Expression? = nil, + disappearActions: [DivDisappearAction]? = nil, elapsedTimeVariable: String? = nil, endActions: [DivAction]? = nil, extensions: [DivExtension]? = nil, @@ -243,6 +248,7 @@ public final class DivVideo: DivBase { self.border = border ?? DivBorder() self.bufferingActions = bufferingActions self.columnSpan = columnSpan + self.disappearActions = disappearActions self.elapsedTimeVariable = elapsedTimeVariable self.endActions = endActions self.extensions = extensions @@ -300,64 +306,69 @@ extension DivVideo: Equatable { return false } guard + lhs.disappearActions == rhs.disappearActions, lhs.elapsedTimeVariable == rhs.elapsedTimeVariable, - lhs.endActions == rhs.endActions, - lhs.extensions == rhs.extensions + lhs.endActions == rhs.endActions else { return false } guard + lhs.extensions == rhs.extensions, lhs.fatalActions == rhs.fatalActions, - lhs.focus == rhs.focus, - lhs.height == rhs.height + lhs.focus == rhs.focus else { return false } guard + lhs.height == rhs.height, lhs.id == rhs.id, - lhs.margins == rhs.margins, - lhs.muted == rhs.muted + lhs.margins == rhs.margins else { return false } guard + lhs.muted == rhs.muted, lhs.paddings == rhs.paddings, - lhs.pauseActions == rhs.pauseActions, - lhs.preview == rhs.preview + lhs.pauseActions == rhs.pauseActions else { return false } guard + lhs.preview == rhs.preview, lhs.repeatable == rhs.repeatable, - lhs.resumeActions == rhs.resumeActions, - lhs.rowSpan == rhs.rowSpan + lhs.resumeActions == rhs.resumeActions else { return false } guard + lhs.rowSpan == rhs.rowSpan, lhs.selectedActions == rhs.selectedActions, - lhs.tooltips == rhs.tooltips, - lhs.transform == rhs.transform + lhs.tooltips == rhs.tooltips else { return false } guard + lhs.transform == rhs.transform, lhs.transitionChange == rhs.transitionChange, - lhs.transitionIn == rhs.transitionIn, - lhs.transitionOut == rhs.transitionOut + lhs.transitionIn == rhs.transitionIn else { return false } guard + lhs.transitionOut == rhs.transitionOut, lhs.transitionTriggers == rhs.transitionTriggers, - lhs.videoSources == rhs.videoSources, - lhs.visibility == rhs.visibility + lhs.videoSources == rhs.videoSources else { return false } guard + lhs.visibility == rhs.visibility, lhs.visibilityAction == rhs.visibilityAction, - lhs.visibilityActions == rhs.visibilityActions, + lhs.visibilityActions == rhs.visibilityActions + else { + return false + } + guard lhs.width == rhs.width else { return false @@ -380,6 +391,7 @@ extension DivVideo: Serializable { result["border"] = border.toDictionary() result["buffering_actions"] = bufferingActions?.map { $0.toDictionary() } result["column_span"] = columnSpan?.toValidSerializationValue() + result["disappear_actions"] = disappearActions?.map { $0.toDictionary() } result["elapsed_time_variable"] = elapsedTimeVariable result["end_actions"] = endActions?.map { $0.toDictionary() } result["extensions"] = extensions?.map { $0.toDictionary() } diff --git a/DivKit/generated_sources/DivVideoTemplate.swift b/DivKit/generated_sources/DivVideoTemplate.swift index 5339411b..f8feda94 100644 --- a/DivKit/generated_sources/DivVideoTemplate.swift +++ b/DivKit/generated_sources/DivVideoTemplate.swift @@ -16,6 +16,7 @@ public final class DivVideoTemplate: TemplateValue { public let border: Field? public let bufferingActions: Field<[DivActionTemplate]>? // at least 1 elements public let columnSpan: Field>? // constraint: number >= 0 + public let disappearActions: Field<[DivDisappearActionTemplate]>? // at least 1 elements public let elapsedTimeVariable: Field? // at least 1 char public let endActions: Field<[DivActionTemplate]>? // at least 1 elements public let extensions: Field<[DivExtensionTemplate]>? // at least 1 elements @@ -61,6 +62,7 @@ public final class DivVideoTemplate: TemplateValue { border: try dictionary.getOptionalField("border", templateToType: templateToType), bufferingActions: try dictionary.getOptionalArray("buffering_actions", templateToType: templateToType), columnSpan: try dictionary.getOptionalExpressionField("column_span"), + disappearActions: try dictionary.getOptionalArray("disappear_actions", templateToType: templateToType), elapsedTimeVariable: try dictionary.getOptionalField("elapsed_time_variable"), endActions: try dictionary.getOptionalArray("end_actions", templateToType: templateToType), extensions: try dictionary.getOptionalArray("extensions", templateToType: templateToType), @@ -106,6 +108,7 @@ public final class DivVideoTemplate: TemplateValue { border: Field? = nil, bufferingActions: Field<[DivActionTemplate]>? = nil, columnSpan: Field>? = nil, + disappearActions: Field<[DivDisappearActionTemplate]>? = nil, elapsedTimeVariable: Field? = nil, endActions: Field<[DivActionTemplate]>? = nil, extensions: Field<[DivExtensionTemplate]>? = nil, @@ -145,6 +148,7 @@ public final class DivVideoTemplate: TemplateValue { self.border = border self.bufferingActions = bufferingActions self.columnSpan = columnSpan + self.disappearActions = disappearActions self.elapsedTimeVariable = elapsedTimeVariable self.endActions = endActions self.extensions = extensions @@ -185,6 +189,7 @@ public final class DivVideoTemplate: TemplateValue { let borderValue = parent?.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true) ?? .noValue let bufferingActionsValue = parent?.bufferingActions?.resolveOptionalValue(context: context, validator: ResolvedValue.bufferingActionsValidator, useOnlyLinks: true) ?? .noValue let columnSpanValue = parent?.columnSpan?.resolveOptionalValue(context: context, validator: ResolvedValue.columnSpanValidator) ?? .noValue + let disappearActionsValue = parent?.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true) ?? .noValue let elapsedTimeVariableValue = parent?.elapsedTimeVariable?.resolveOptionalValue(context: context, validator: ResolvedValue.elapsedTimeVariableValidator) ?? .noValue let endActionsValue = parent?.endActions?.resolveOptionalValue(context: context, validator: ResolvedValue.endActionsValidator, useOnlyLinks: true) ?? .noValue let extensionsValue = parent?.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true) ?? .noValue @@ -223,6 +228,7 @@ public final class DivVideoTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, bufferingActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "buffering_actions", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, elapsedTimeVariableValue.errorsOrWarnings?.map { .nestedObjectError(field: "elapsed_time_variable", error: $0) }, endActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "end_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, @@ -270,6 +276,7 @@ public final class DivVideoTemplate: TemplateValue { border: borderValue.value, bufferingActions: bufferingActionsValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, elapsedTimeVariable: elapsedTimeVariableValue.value, endActions: endActionsValue.value, extensions: extensionsValue.value, @@ -315,6 +322,7 @@ public final class DivVideoTemplate: TemplateValue { var borderValue: DeserializationResult = .noValue var bufferingActionsValue: DeserializationResult<[DivAction]> = .noValue var columnSpanValue: DeserializationResult> = parent?.columnSpan?.value() ?? .noValue + var disappearActionsValue: DeserializationResult<[DivDisappearAction]> = .noValue var elapsedTimeVariableValue: DeserializationResult = parent?.elapsedTimeVariable?.value(validatedBy: ResolvedValue.elapsedTimeVariableValidator) ?? .noValue var endActionsValue: DeserializationResult<[DivAction]> = .noValue var extensionsValue: DeserializationResult<[DivExtension]> = .noValue @@ -363,6 +371,8 @@ public final class DivVideoTemplate: TemplateValue { bufferingActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.bufferingActionsValidator, type: DivActionTemplate.self).merged(with: bufferingActionsValue) case "column_span": columnSpanValue = deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator).merged(with: columnSpanValue) + case "disappear_actions": + disappearActionsValue = deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self).merged(with: disappearActionsValue) case "elapsed_time_variable": elapsedTimeVariableValue = deserialize(__dictValue, validator: ResolvedValue.elapsedTimeVariableValidator).merged(with: elapsedTimeVariableValue) case "end_actions": @@ -437,6 +447,8 @@ public final class DivVideoTemplate: TemplateValue { bufferingActionsValue = bufferingActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.bufferingActionsValidator, type: DivActionTemplate.self)) case parent?.columnSpan?.link: columnSpanValue = columnSpanValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.columnSpanValidator)) + case parent?.disappearActions?.link: + disappearActionsValue = disappearActionsValue.merged(with: deserialize(__dictValue, templates: context.templates, templateToType: context.templateToType, validator: ResolvedValue.disappearActionsValidator, type: DivDisappearActionTemplate.self)) case parent?.elapsedTimeVariable?.link: elapsedTimeVariableValue = elapsedTimeVariableValue.merged(with: deserialize(__dictValue, validator: ResolvedValue.elapsedTimeVariableValidator)) case parent?.endActions?.link: @@ -501,6 +513,7 @@ public final class DivVideoTemplate: TemplateValue { backgroundValue = backgroundValue.merged(with: parent.background?.resolveOptionalValue(context: context, validator: ResolvedValue.backgroundValidator, useOnlyLinks: true)) borderValue = borderValue.merged(with: parent.border?.resolveOptionalValue(context: context, validator: ResolvedValue.borderValidator, useOnlyLinks: true)) bufferingActionsValue = bufferingActionsValue.merged(with: parent.bufferingActions?.resolveOptionalValue(context: context, validator: ResolvedValue.bufferingActionsValidator, useOnlyLinks: true)) + disappearActionsValue = disappearActionsValue.merged(with: parent.disappearActions?.resolveOptionalValue(context: context, validator: ResolvedValue.disappearActionsValidator, useOnlyLinks: true)) endActionsValue = endActionsValue.merged(with: parent.endActions?.resolveOptionalValue(context: context, validator: ResolvedValue.endActionsValidator, useOnlyLinks: true)) extensionsValue = extensionsValue.merged(with: parent.extensions?.resolveOptionalValue(context: context, validator: ResolvedValue.extensionsValidator, useOnlyLinks: true)) fatalActionsValue = fatalActionsValue.merged(with: parent.fatalActions?.resolveOptionalValue(context: context, validator: ResolvedValue.fatalActionsValidator, useOnlyLinks: true)) @@ -531,6 +544,7 @@ public final class DivVideoTemplate: TemplateValue { borderValue.errorsOrWarnings?.map { .nestedObjectError(field: "border", error: $0) }, bufferingActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "buffering_actions", error: $0) }, columnSpanValue.errorsOrWarnings?.map { .nestedObjectError(field: "column_span", error: $0) }, + disappearActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "disappear_actions", error: $0) }, elapsedTimeVariableValue.errorsOrWarnings?.map { .nestedObjectError(field: "elapsed_time_variable", error: $0) }, endActionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "end_actions", error: $0) }, extensionsValue.errorsOrWarnings?.map { .nestedObjectError(field: "extensions", error: $0) }, @@ -578,6 +592,7 @@ public final class DivVideoTemplate: TemplateValue { border: borderValue.value, bufferingActions: bufferingActionsValue.value, columnSpan: columnSpanValue.value, + disappearActions: disappearActionsValue.value, elapsedTimeVariable: elapsedTimeVariableValue.value, endActions: endActionsValue.value, extensions: extensionsValue.value, @@ -628,6 +643,7 @@ public final class DivVideoTemplate: TemplateValue { border: border ?? mergedParent.border, bufferingActions: bufferingActions ?? mergedParent.bufferingActions, columnSpan: columnSpan ?? mergedParent.columnSpan, + disappearActions: disappearActions ?? mergedParent.disappearActions, elapsedTimeVariable: elapsedTimeVariable ?? mergedParent.elapsedTimeVariable, endActions: endActions ?? mergedParent.endActions, extensions: extensions ?? mergedParent.extensions, @@ -673,6 +689,7 @@ public final class DivVideoTemplate: TemplateValue { border: merged.border?.tryResolveParent(templates: templates), bufferingActions: merged.bufferingActions?.tryResolveParent(templates: templates), columnSpan: merged.columnSpan, + disappearActions: merged.disappearActions?.tryResolveParent(templates: templates), elapsedTimeVariable: merged.elapsedTimeVariable, endActions: merged.endActions?.tryResolveParent(templates: templates), extensions: merged.extensions?.tryResolveParent(templates: templates), diff --git a/LayoutKit/LayoutKit/UI/Blocks/TextInputBlock+UIViewRenderableBlock.swift b/LayoutKit/LayoutKit/UI/Blocks/TextInputBlock+UIViewRenderableBlock.swift index a035b52d..f81a34f6 100644 --- a/LayoutKit/LayoutKit/UI/Blocks/TextInputBlock+UIViewRenderableBlock.swift +++ b/LayoutKit/LayoutKit/UI/Blocks/TextInputBlock+UIViewRenderableBlock.swift @@ -66,6 +66,8 @@ private final class TextInputBlockView: BlockView, VisibleBoundsTrackingLeaf { multiLineInput.backgroundColor = .clear multiLineInput.textContainerInset = .zero multiLineInput.delegate = self + multiLineInput.textContainerInset = .zero + multiLineInput.textContainer.lineFragmentPadding = 0 singleLineInput.isHidden = true singleLineInput.autocorrectionType = .no @@ -457,4 +459,4 @@ extension TextInputBlock.InputType.KeyboardType { private let additionalOffset = 25.0 private let singleLineCusorOffset = 2.0 -private let multiLineCusorOffset = 5.0 +private let multiLineCusorOffset = 0.0 diff --git a/Specs/BasePublic/25.2.0/BasePublic.podspec b/Specs/BasePublic/25.2.0/BasePublic.podspec new file mode 100644 index 00000000..ccebc9d4 --- /dev/null +++ b/Specs/BasePublic/25.2.0/BasePublic.podspec @@ -0,0 +1,23 @@ +Pod::Spec.new do |s| + s.name = 'BasePublic' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'BaseTinyPublic', s.version.to_s + s.dependency 'BaseUIPublic', s.version.to_s + + s.source_files = [ + 'Core/BasePublic/**/*' + ] +end diff --git a/Specs/BaseTinyPublic/25.2.0/BaseTinyPublic.podspec b/Specs/BaseTinyPublic/25.2.0/BaseTinyPublic.podspec new file mode 100644 index 00000000..8caef095 --- /dev/null +++ b/Specs/BaseTinyPublic/25.2.0/BaseTinyPublic.podspec @@ -0,0 +1,20 @@ +Pod::Spec.new do |s| + s.name = 'BaseTinyPublic' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.source_files = [ + 'Core/BaseTinyPublic/**/*' + ] +end diff --git a/Specs/BaseUIPublic/25.2.0/BaseUIPublic.podspec b/Specs/BaseUIPublic/25.2.0/BaseUIPublic.podspec new file mode 100644 index 00000000..6a32ca6a --- /dev/null +++ b/Specs/BaseUIPublic/25.2.0/BaseUIPublic.podspec @@ -0,0 +1,22 @@ +Pod::Spec.new do |s| + s.name = 'BaseUIPublic' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'BaseTinyPublic', s.version.to_s + + s.source_files = [ + 'Core/BaseUIPublic/**/*' + ] +end diff --git a/Specs/CommonCorePublic/25.2.0/CommonCorePublic.podspec b/Specs/CommonCorePublic/25.2.0/CommonCorePublic.podspec new file mode 100644 index 00000000..d886b435 --- /dev/null +++ b/Specs/CommonCorePublic/25.2.0/CommonCorePublic.podspec @@ -0,0 +1,22 @@ +Pod::Spec.new do |s| + s.name = 'CommonCorePublic' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'BasePublic', s.version.to_s + + s.source_files = [ + 'Core/CommonCorePublic/**/*' + ] +end diff --git a/Specs/DivKit/25.2.0/DivKit.podspec b/Specs/DivKit/25.2.0/DivKit.podspec new file mode 100644 index 00000000..95f4f6e1 --- /dev/null +++ b/Specs/DivKit/25.2.0/DivKit.podspec @@ -0,0 +1,25 @@ +Pod::Spec.new do |s| + s.name = 'DivKit' + s.version = '25.2.0' + s.summary = 'DivKit framework' + s.description = 'DivKit is a backend-driven UI framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'CommonCorePublic', s.version.to_s + s.dependency 'LayoutKit', s.version.to_s + s.dependency 'NetworkingPublic', s.version.to_s + s.dependency 'Serialization', s.version.to_s + + s.source_files = [ + 'DivKit/**/*' + ] +end diff --git a/Specs/DivKitExtensions/25.2.0/DivKitExtensions.podspec b/Specs/DivKitExtensions/25.2.0/DivKitExtensions.podspec new file mode 100644 index 00000000..20e2cdac --- /dev/null +++ b/Specs/DivKitExtensions/25.2.0/DivKitExtensions.podspec @@ -0,0 +1,22 @@ +Pod::Spec.new do |s| + s.name = 'DivKitExtensions' + s.version = '25.2.0' + s.summary = 'DivKit framework extensions' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'DivKit', s.version.to_s + + s.source_files = [ + 'DivKitExtensions/**/*' + ] +end diff --git a/Specs/LayoutKit/25.2.0/LayoutKit.podspec b/Specs/LayoutKit/25.2.0/LayoutKit.podspec new file mode 100644 index 00000000..85c61209 --- /dev/null +++ b/Specs/LayoutKit/25.2.0/LayoutKit.podspec @@ -0,0 +1,23 @@ +Pod::Spec.new do |s| + s.name = 'LayoutKit' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'CommonCorePublic', s.version.to_s + s.dependency 'LayoutKitInterface', s.version.to_s + + s.source_files = [ + 'LayoutKit/LayoutKit/**/*' + ] +end diff --git a/Specs/LayoutKitInterface/25.2.0/LayoutKitInterface.podspec b/Specs/LayoutKitInterface/25.2.0/LayoutKitInterface.podspec new file mode 100644 index 00000000..eb281c1b --- /dev/null +++ b/Specs/LayoutKitInterface/25.2.0/LayoutKitInterface.podspec @@ -0,0 +1,24 @@ +Pod::Spec.new do |s| + s.name = 'LayoutKitInterface' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'BasePublic', s.version.to_s + s.dependency 'BaseTinyPublic', s.version.to_s + s.dependency 'BaseUIPublic', s.version.to_s + + s.source_files = [ + 'LayoutKit/Interface/**/*' + ] +end diff --git a/Specs/NetworkingPublic/25.2.0/NetworkingPublic.podspec b/Specs/NetworkingPublic/25.2.0/NetworkingPublic.podspec new file mode 100644 index 00000000..bd980a1d --- /dev/null +++ b/Specs/NetworkingPublic/25.2.0/NetworkingPublic.podspec @@ -0,0 +1,22 @@ +Pod::Spec.new do |s| + s.name = 'NetworkingPublic' + s.version = '25.2.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'BasePublic', s.version.to_s + + s.source_files = [ + 'Core/NetworkingPublic/**/*' + ] +end diff --git a/Specs/Serialization/25.2.0/Serialization.podspec b/Specs/Serialization/25.2.0/Serialization.podspec new file mode 100644 index 00000000..4bc71b35 --- /dev/null +++ b/Specs/Serialization/25.2.0/Serialization.podspec @@ -0,0 +1,23 @@ +Pod::Spec.new do |s| + s.name = 'Serialization' + s.version = '25.2.0' + s.summary = 'Serialization' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'MIT', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '11.0' } + + s.dependency 'CommonCorePublic', s.version.to_s + + s.source_files = [ + 'Serialization/**/*' + ] +end